From: Till Paala Date: Fri, 7 Aug 2009 21:25:57 +0000 (+0300) Subject: Merge branch 'lilypond/translation' of ssh://git.sv.gnu.org/srv/git/lilypond into... X-Git-Tag: release/2.13.4-1~179^2~151^2~1 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=794dcbdb52faf4292036cd1b0270a956cf4316a3;hp=b97565a9af1c13369ac7e7e9ea80c2638dbc0e51;p=lilypond.git Merge branch 'lilypond/translation' of ssh://git.sv.gnu.org/srv/git/lilypond into lilypond/translation Conflicts: Documentation/de/application/running.itely Documentation/de/macros.itexi --- diff --git a/.gitignore b/.gitignore index 5f51beb6fe..be455e3b63 100644 --- a/.gitignore +++ b/.gitignore @@ -75,5 +75,5 @@ tags test-output-distance ChangeLog RELEASE-COMMIT -Documentation/user/lilypond -input/lsr/lilypond-snippets +Documentation/lilypond +semantic.cache diff --git a/Documentation/GNUmakefile b/Documentation/GNUmakefile index 03a6a8a909..f04e7c4bfa 100644 --- a/Documentation/GNUmakefile +++ b/Documentation/GNUmakefile @@ -1,45 +1,218 @@ depth = .. +######################## +# Documentation build # +######################## + +############# +### Variables + NAME = documentation LANGS = $(shell $(PYTHON) $(top-src-dir)/python/langdefs.py) -SUBDIRS=devel user bibliography pictures topdocs misc po $(LANGS) -STEPMAKE_TEMPLATES=documentation texinfo tex -LOCALSTEPMAKE_TEMPLATES=lilypond ly -LILYPOND_BOOK_FLAGS=--extra-options '-e "(ly:set-option (quote internal-type-checking) \#t)"' +MANUALS_SUBDIRS = application contributor essay general learning notation +SUBDIRS = $(MANUALS_SUBDIRS) snippets bibliography logo pictures misc po $(LANGS) +STEPMAKE_TEMPLATES = documentation texinfo tex omf +LOCALSTEPMAKE_TEMPLATES = lilypond ly + +### Extra flags + +LILYPOND_BOOK_FLAGS = --extra-options '-e "(ly:set-option (quote internal-type-checking) \#t)"' +TEXI2PDF_FLAGS = \ + -I $(outdir) \ + -I $(top-build-dir)/Documentation/$(outconfbase) +$(outdir)/snippets-big-page.html: TEXI2HTML_FLAGS += -D short_toc +$(outdir)/snippets/index..html: TEXI2HTML_FLAGS += -D short_toc + +### Extra source files + README_TOP_FILES= DEDICATION THANKS +LATEX_FILES =$(call src-wildcard,*.latex) -include $(depth)/make/stepmake.make +IN_ITELY_FILES = $(call src-wildcard,snippets/*-intro.itely) +SNIPPET_LY_FILES = $(call src-wildcard,snippets/*.ly) -HTML_PAGE_NAMES= index translations -OUT_HTML_FILES= $(HTML_PAGE_NAMES:%=$(outdir)/%.html) -OUT_CSS_FILES= $(CSS_FILES:%.css=$(outdir)/%.css) +### Out files -default: local-doc +# Dependencies +GENERATED_ITELY_FILES = $(IN_ITELY_FILES:snippets/%-intro.itely=$(outdir)/%.itely) -ifeq ($(out),www) -local-WWW-2: txt-to-html $(OUT_HTML_FILES) +XREF_MAPS_FILES += $(XREF_MAPS_DIR)/internals.xref-map +OMF_FILES += $(outdir)/internals.html.omf $(outdir)/internals.pdf.omf + +# Main manuals +TEXINFO_MANUALS = internals\ + $(TELY_FILES:%.tely=%)\ + $(TEXI_FILES:%.texi=%) +OUT_TEXINFO_MANUALS = $(TEXINFO_MANUALS:%=$(outdir)/%.texi) + +## CHAIN_RULE hack: keep the following line *before* including +# stepmake.make, so the Internals Reference is built before the +# Notation Reference, thus providing automatically generated sections +# of the NR +TEXI_FILES_FROM_TELY = $(outdir)/internals.texi + +PDF_FILES = $(subst $(outdir)/general.pdf,,$(TEXINFO_MANUALS:%=$(outdir)/%.pdf)) + +UNSPLITTED_HTML_MANUALS = changes +SPLITTED_HTML_MANUALS = $(foreach manual, $(TEXINFO_MANUALS),\ + $(if $(findstring $(manual), $(UNSPLITTED_HTML_MANUALS)),,$(manual))) -local-WWW-clean: deep-WWW-clean +OUT_HTML_FILES = $(UNSPLITTED_HTML_MANUALS:%=$(outdir)/%.html)\ + $(SPLITTED_HTML_MANUALS:%=$(outdir)/%-big-page.html) +DEEP_HTML_FILES = $(SPLITTED_HTML_MANUALS:%=$(outdir)/%/index.html) -deep-WWW-clean: - rm -rf $(outdir)/wiki-dump +# Symlinks to refer to external source documents from split and non-split HTML +source-links = $(outdir)/source\ + $(foreach manual, $(SPLITTED_HTML_MANUALS), $(outdir)/$(manual)/source) + +# Other out files + +HTML_PAGE_NAMES= index translations devel +OUT_HTML_FILES += $(HTML_PAGE_NAMES:%=$(outdir)/%.html) + +MAIN_INFO_DOC = lilypond-notation +INFO_DOCS = lilypond-application lilypond-changes lilypond-contributor lilypond-internals \ + lilypond-essay lilypond-learning lilypond-notation music-glossary lilypond +ifeq ($(out),www) +INFO_DOCS += lilypond-snippets endif +INFO_FILES = $(INFO_DOCS:%=$(outdir)/%.info) + +ifeq ($(out),www) +INFO_IMAGES_DIR = lilypond +DEST_INFO_IMAGES_SUBDIR = Documentation/ +endif + +include $(depth)/make/stepmake.make OUT_TXT_FILES = $(addprefix $(outdir)/, $(addsuffix .txt, $(README_TOP_FILES))) +### Web site idiosyncrases +## No big page +OUT_HTML_FILES := $(subst $(outdir)/general-big-page.html,,$(OUT_HTML_FILES)) + +## Different init file and CSS +$(outdir)/general/index.html: \ + TEXI2HTML_INIT = --init-file=$(top-src-dir)/Documentation/web-texi2html.init + +########### +### Targets + +default: local-txt-doc + +local-help: extra-local-help + +extra-local-help: + @echo -e "\ + check-xrefs [ISOLANG=LL] validate Texinfo cross-references\n\ + fix-xrefs [ISOLANG=LL] interactively fix Texinfo cross-references (use with caution)\n\ + info update info pages\n\ + xml update Docbook xml documentation\n\ +\n\ +Translations specific targets (see TRANSLATION for details):\n\ + new-lang ISOLANG=LL create and initialize subdirectory \'LL' for language \'LL\n\ + po-update update and replace PO files for documentation with msgmerged versions\n\ + check-translation ISOLANG=LL show changes in English docs since last translation update\n\ + update-translation ISOLANG=LL call $$$$EDITOR to help updating the translation\n\ + skeleton-update ISOLANG=LL update Texinfo skeleton files\n\ + snippet-update ISOLANG=LL update ly snippets in Texinfo translation according to\n\ + docs in English (use with caution)\n\ +\n\ +LL refers to the desired locale (most often only the ISO 639 language code).\n" + +info: $(INFO_FILES) + @echo export LILYPOND_DATADIR=$(LILYPOND_DATADIR) + @echo export PYTHONPATH=$(PYTHONPATH) + +xml: $(outdir)/notation/notation.xml $(outdir)/internals/internals.xml + + +local-clean: + rm -f $(INFO_IMAGES_DIR) + +### Web targets + +ifeq ($(out),www) +local-WWW-1: $(OUT_TEXINFO_MANUALS) $(PDF_FILES) info + +local-WWW-2: txt-to-html $(OUT_HTML_FILES) $(DEEP_HTML_FILES) $(source-links) $(OMF_FILES) +endif + + +######### +### Rules + # cd $(outdir) rule gets bit hairy for --srcdir configure builds txt-to-html: $(foreach a, $(README_TOP_FILES), cp $(top-src-dir)/$(a) $(outdir)/$(a).txt && ) true $(PYTHON) $(step-bindir)/text2html.py $(OUT_TXT_FILES) -$(OUT_HTML_FILES): $(OUT_CSS_FILES) +ifeq ($(out),www) +## Extra images dependencies +$(OUT_TEXINFO_MANUALS): $(outdir)/pictures + +$(outdir)/pictures: + $(MAKE) -C pictures WWW-1 + ln -sf ../pictures/$(outdir) $@ +endif + +# Ugh, using '%' twice not possible +$(outdir)/notation/notation.xml: $(outdir)/notation.texi + mkdir -p $(dir $@) + $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $< + +$(outdir)/internals/internals.xml: $(outdir)/internals.texi + mkdir -p $(dir $@) + $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $< + +$(outdir)/learning.texi $(outdir)/notation.texi: $(OUT_PDF_IMAGES) + +$(foreach manual, $(MANUAL_SUBDIRS),\ +$(eval $(outdir)/(manual).texi: $(call src-wildcard,$(manual)/*.ite??))) + + + +$(outdir)/source: + @rm -f $(@) + ln -sf $(depth) $(@) + +$(outdir)/%/source: + @rm -f $(@) + mkdir -p $(dir $@) + ln -sf $(depth)/.. $(@) + + +## Snippets rules idiosyncrases +$(outdir)/%.itely: snippets/%-intro.itely snippets/%.snippet-list + xargs $(LYS_TO_TELY) -f doctitle,texidoc,verbatim --name=$@ --template=$< < $(filter %.snippet-list, $^) + +$(outdir)/snippets.texi: $(GENERATED_ITELY_FILES) $(SNIPPET_LY_FILES) -$(outdir)/%.css: %.css +$(outdir)/%.bib: %.bib ln -f $< $@ +## notation.texi deps +$(top-build-dir)/mf/$(outconfbase)/feta16list.ly: + $(MAKE) -C $(top-src-dir)/mf -### Translations maintenance targets +$(outdir)/notation.texi: $(outdir)/ly-grammar.txt +## Rules for the automatically generated documentation +$(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy + cd $(outdir) && $(BISON) -v $< + $(auxscript-dir)/yyout2grammar.py $(outdir)/parser.output $@ + +# There used to be a dependency on a dummy target, to force a rebuild +# of internals every time. however, this triggers +# compilation during install, which is a bad thing (tm). + +$(outdir)/internals.texi: $(LILYPOND_BINARY) + cd $(outdir) && $(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation + + +############################################### +# Documentation and translations maintenance # +############################################### po-update: make -C po po-update @@ -56,39 +229,39 @@ new-lang: then echo "Error: $(ISOLANG) directory already exists. Exiting." ; \ exit 3 ; \ fi - mkdir -p $(ISOLANG)/user + mkdir -p $(ISOLANG)/learning cp fr/GNUmakefile $(ISOLANG) - cp fr/user/GNUmakefile $(ISOLANG)/user - sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile $(ISOLANG)/user/GNUmakefile - $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) -o doc.pot --skeleton --gettext ../user/lilypond-learning.tely - mv $(outdir)/*.*tely $(ISOLANG)/user + cp fr/learning/GNUmakefile $(ISOLANG)/learning + sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile $(ISOLANG)/learning/GNUmakefile + $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) -o doc.pot --skeleton --gettext ../learning.tely + mv $(outdir)/*.*tely $(ISOLANG)/learning msgmerge -U po/lilypond-doc.pot $(outdir)/doc.pot cp po/lilypond-doc.pot po/$(ISOLANG).po @echo "*** Please add a language definition for $(ISOLANG) in python/langdefs.py ***" -CHECKED_FILES = $(ISOLANG)/index.html.in $(shell find $(ISOLANG)/user/ -maxdepth 1 -name '*.*te??') \ - $(shell find $(depth)/input/texidocs/ -name '*.texidoc') +CHECKED_FILES = $(ISOLANG)/index.html.in $(foreach i,learning notation application, \ + $(shell find $(ISOLANG)/$(manual) -name '*.*te??' -not -wholename '*out-www*')) \ + $(shell find $(ISOLANG)/texidocs/ -name '*.texidoc') -TELY_FILES = $(call src-wildcard,$(ISOLANG)/user/*.tely) +TELY_FILES = $(call src-wildcard,$(ISOLANG)/*.tely) skeleton-update: - $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) --skeleton $(TELY_FILES:$(ISOLANG)/user/%.tely=../user/%.tely) - $(auxscript-dir)/texi-skeleton-update.py $(ISOLANG)/user $(outdir) + $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) --skeleton $(TELY_FILES:$(ISOLANG)/%.tely=../%.tely) + $(auxscript-dir)/texi-skeleton-update.py $(ISOLANG) $(outdir) snippet-update: - $(auxscript-dir)/update-snippets.py user $(ISOLANG)/user '*.itely' + $(auxscript-dir)/update-snippets.py user $(ISOLANG) '*.itely' -DOCUMENTS_INCLUDES:=-I $(ISOLANG)/user \ --I $(top-build-dir)/Documentation/$(ISOLANG)/user/out-www \ --I $(top-src-dir)/input/lsr \ --I $(top-build-dir)/input/lsr/out-www \ --I user -I $(top-build-dir)/Documentation/user/out-www +DOCUMENTS_INCLUDES:=-I $(ISOLANG) \ +-I $(top-build-dir)/Documentation/$(ISOLANG)/out-www \ +-I $(top-src-dir)/Documentation/snippets \ +-I $(top-build-dir)/Documentation/out-www else # ISOLANG is empty -DOCUMENTS_INCLUDES:=-I user \ --I $(top-build-dir)/Documentation/user/out-www \ --I $(top-src-dir)/input/lsr \ --I $(top-build-dir)/input/lsr/out-www +DOCUMENTS_INCLUDES:=-I . \ +-I $(top-build-dir)/Documentation/out-www \ +-I $(top-src-dir)/Documentation/snippets \ +-I $(top-build-dir)/Documentation/snippets/out-www endif # ISOLANG @@ -110,23 +283,4 @@ translation-status: make -C po out=www messages $(auxscript-dir)/translations-status.py -local-help: extra-local-help - -extra-local-help: - @echo -e "\ - check-xrefs [ISOLANG=LL] validate Texinfo cross-references\n\ - fix-xrefs [ISOLANG=LL] interactively fix Texinfo cross-references (use with caution)\n\ -\n\ -Translations specific targets (see TRANSLATION for details):\n\ - new-lang ISOLANG=LL create and initialize subdirectory \'LL' for language \'LL\n\ - po-update update and replace PO files for documentation with msgmerged versions\n\ - check-translation ISOLANG=LL show changes in English docs since last translation update\n\ - update-translation ISOLANG=LL call $$$$EDITOR to help updating the translation\n\ - skeleton-update ISOLANG=LL update Texinfo skeleton files\n\ - snippet-update ISOLANG=LL update ly snippets in Texinfo translation according to\n\ - docs in English (use with caution)\n\ -\n\ -LL refers to the desired locale (most often only the ISO 639 language code).\n" - -info: - $(MAKE) -C user info +.SECONDARY: diff --git a/Documentation/application.tely b/Documentation/application.tely new file mode 100644 index 0000000000..c1b38b71c6 --- /dev/null +++ b/Documentation/application.tely @@ -0,0 +1,158 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore +@setfilename lilypond-application.info +@settitle GNU LilyPond Application usage +@documentencoding UTF-8 +@documentlanguage en + +@include macros.itexi + +@afourpaper + + +@c don't remove this comment. +@ignore +@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival +@omfdescription Application Usage of the LilyPond music engraving system +@omftype program usage +@omfcategory Applications|Publishing +@omflanguage English +@end ignore + + +@ifnottex +@node Top +@top GNU LilyPond --- Application Usage +@c HJJ: Info needs `@top', which is a synonym for `@unnumbered' in TeX. +@end ifnottex + + +@ifhtml +@ifclear bigpage +This document is also available as a +@uref{source/Documentation/application.pdf,PDF} and as +@uref{source/Documentation/application-big-page.html,one big page}. +@end ifclear +@ifset bigpage +This document is also available as a +@uref{source/Documentation/application.pdf,PDF} and as +@uref{source/Documentation/application/index.html,HTML indexed multiple pages}. +@end ifset +@end ifhtml + + +@c This produces the unified index +@syncodeindex fn cp +@syncodeindex vr cp + + +@finalout + +@titlepage +@title LilyPond +@subtitle The music typesetter +@titlefont{Program usage} +@author The LilyPond development team + + +Copyright @copyright{} 1999--2009 by the authors + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections. +A copy of the license is included in the section entitled ``GNU +Free Documentation License''. +@end quotation + +@vskip 20pt + +For LilyPond version @version{} +@end titlepage + +@copying +Copyright @copyright{} 1999--2009 by the authors + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections. +A copy of the license is included in the section entitled ``GNU +Free Documentation License''. +@end quotation +@end copying + +@ifnottex +This file documents GNU LilyPond program usage. + +Copyright 1999--2009 by the authors + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections. +A copy of the license is included in the section entitled ``GNU +Free Documentation License''. +@end quotation +@end ifnottex + +@ifnottex +This is the Application Usage (AU) manual for GNU LilyPond version @version{}. +For more information about how this fits with the other +documentation, see +FIXME FIXME FIXME +@c @rlearning{About the documentation}. + +@cindex web site +@cindex URL + +More information can be found at +@uref{http://@/www@/.lilypond@/.org/}. The website contains on-line copies +of this and other documentation. + +@c * Install:: How to install or compile. +@c * Setup:: Using LilyPond with other programs. + +@c maybe add a "Tasks" or "Specific tasks" or something like +@c that, after Suggestions -gp +@menu +* Running lilypond:: Operation. +* Updating files with convert-ly:: Updating input files. +* lilypond-book:: Integrating text and music. +* Converting from other formats:: Converting to lilypond source format. +* Suggestions for writing files:: Best practices + +Appendices + +* GNU Free Documentation License:: License of this document. +* LilyPond index:: +@end menu +@end ifnottex + +@contents + + +@c @include application/install.itely +@c @include application/setup.itely +@include application/running.itely +@include application/updating.itely +@include application/lilypond-book.itely +@include application/converters.itely +@include application/suggestions.itely + +@include fdl.itexi + +@node LilyPond index +@appendix LilyPond index + +@printindex cp + +@bye diff --git a/Documentation/application/GNUmakefile b/Documentation/application/GNUmakefile new file mode 100644 index 0000000000..c93c9e0624 --- /dev/null +++ b/Documentation/application/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/application/converters.itely b/Documentation/application/converters.itely new file mode 100644 index 0000000000..caa36f50fb --- /dev/null +++ b/Documentation/application/converters.itely @@ -0,0 +1,342 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + +@node Converting from other formats +@chapter Converting from other formats + +Music can be entered also by importing it from other formats. This +chapter documents the tools included in the distribution to do so. +There are other tools that produce LilyPond input, for example GUI +sequencers and XML converters. Refer to the +@uref{http://@/lilypond@/.org,website} for more details. + +These are separate programs from @command{lilypond} itself, and are +run on the command line; see @ref{Command-line usage} for more +information. If you have MacOS 10.3 or 10.4 and you have trouble +running some of these scripts, e.g. @code{convert-ly}, see +FIXME FIXME @c @ref{Setup for MacOS X}. + + +@knownissues +We unfortunately do not have the resources to maintain these +programs; please consider them @qq{as-is}. Patches are appreciated, but +bug reports will almost certainly not be resolved. + +@menu +* Invoking midi2ly:: Importing MIDI. +* Invoking musicxml2ly:: Importing MusicXML. +* Invoking abc2ly:: Importing ABC. +* Invoking etf2ly:: Importing Finale. +* Generating LilyPond files:: GUIs, transcribers, and algorithmic composition programs. +@end menu + + + +@node Invoking midi2ly +@section Invoking @command{midi2ly} + +@cindex MIDI + +@command{midi2ly} translates a Type@tie{}1 MIDI file to a LilyPond source +file. + +MIDI (Music Instrument Digital Interface) is a standard for digital +instruments: it specifies cabling, a serial protocol and a file +format. The MIDI file format is a de facto standard format for +exporting music from other programs, so this capability may come in +useful when importing files from a program that has a converter for a +direct format. + +@command{midi2ly} converts tracks into @rinternals{Staff} and +channels into @rinternals{Voice} contexts. Relative mode is used +for pitches, durations are only written when necessary. + +It is possible to record a MIDI file using a digital keyboard, and +then convert it to @file{.ly}. However, human players are not +rhythmically exact enough to make a MIDI to LY conversion trivial. +When invoked with quantizing (@code{-s} and @code{-d} options) +@command{midi2ly} tries to compensate for these timing errors, but is not +very good at this. It is therefore not recommended to use @command{midi2ly} +for human-generated midi files. + + +It is invoked from the command-line as follows, +@example +midi2ly [@var{option}]@dots{} @var{midi-file} +@end example + +Note that by @q{command-line}, we mean the command line of the +operating system. See @ref{Converting from other formats}, for +more information about this. + +The following options are supported by @command{midi2ly}. + +@table @code +@item -a, --absolute-pitches +Print absolute pitches. + +@item -d, --duration-quant=@var{DUR} +Quantize note durations on @var{DUR}. + +@item -e, --explicit-durations +Print explicit durations. + +@item -h,--help +Show summary of usage. + +@item -k, --key=@var{acc}[:@var{minor}] +Set default key. @math{@var{acc} > 0} sets number of sharps; +@math{@var{acc} < 0} sets number of flats. A minor key is indicated by +@code{:1}. + +@item -o, --output=@var{file} +Write output to @var{file}. + +@item -s, --start-quant=@var{DUR} +Quantize note starts on @var{DUR}. + +@item -t, --allow-tuplet=@var{DUR}*@var{NUM}/@var{DEN} +Allow tuplet durations @var{DUR}*@var{NUM}/@var{DEN}. + +@item -v, --verbose +Be verbose. + +@item -V, --version +Print version number. + +@item -w, --warranty +Show warranty and copyright. + +@item -x, --text-lyrics +Treat every text as a lyric. +@end table + + +@knownissues + +Overlapping notes in an arpeggio will not be correctly rendered. The +first note will be read and the others will be ignored. Set them all +to a single duration and add phrase markings or pedal indicators. + + +@node Invoking musicxml2ly +@section Invoking @code{musicxml2ly} + +@cindex MusicXML + +@uref{http://@/www.@/musicxml@/.org/,MusicXML} is an XML dialect +for representing music notation. + +@command{musicxml2ly} extracts the notes, articulations, score structure, +lyrics, etc. from part-wise MusicXML files, and writes them to a .ly +file. It is invoked from the command-line. + + +It is invoked from the command-line as follows, +@example +musicxml2ly [@var{option}]@dots{} @var{xml-file} +@end example + +Note that by @q{command-line}, we mean the command line of the +operating system. See @ref{Converting from other formats}, for +more information about this. + +If the given filename is @file{-}, @command{musicxml2ly} reads input +from the command line. + +The following options are supported by @command{musicxml2ly}: + +@table @code +@item -a, --absolute +convert pitches in absolute mode. + +@item -h,--help +print usage and option summary. + +@item -l, --language=LANG +use a different language file 'LANG.ly' and corresponding pitch names, +e.g. 'deutsch' for deutsch.ly and German note names. + +@item --lxml +use the lxml.etree Python package for XML-parsing; uses less memory and cpu time. + +@item --nd --no-articulation-directions +do not convert directions (@code{^}, @code{_} or @code{-}) for +articulations, dynamics, etc. + +@item --no-beaming +do not convert beaming information, use LilyPond's automatic +beaming instead. + +@item -o,--output=@var{file} +set output filename to @var{file}. If @var{file} is @file{-}, the output +will be printed on stdout. If not given, @var{xml-file}@file{.ly} will +be used. + +@item -r,--relative +convert pitches in relative mode (default). + +@item -v,--verbose +be verbose. + +@item --version +print version information. + +@item -z,--compressed +input file is a zip-compressed MusicXML file. +@end table + + +@node Invoking abc2ly +@section Invoking @code{abc2ly} + +@cindex ABC + +ABC is a fairly simple ASCII based format. It is described at the ABC site: + +@quotation +@uref{http://@/www@/.walshaw@/.plus@/.com/@/abc/@/learn@/.html}. +@end quotation + +@command{abc2ly} translates from ABC to LilyPond. It is invoked as follows: + +@example +abc2ly [@var{option}]@dots{} @var{abc-file} +@end example + +The following options are supported by @command{abc2ly}: + +@table @code +@item -b,--beams=None +preserve ABC's notion of beams +@item -h,--help +this help +@item -o,--output=@var{file} +set output filename to @var{file}. +@item -s,--strict +be strict about success +@item --version +print version information. +@end table + +There is a rudimentary facility for adding LilyPond code to the ABC +source file. If you say: + +@example +%%LY voices \set autoBeaming = ##f +@end example + +This will cause the text following the keyword @q{voices} to be inserted +into the current voice of the LilyPond output file. + +Similarly, + +@example +%%LY slyrics more words +@end example + +will cause the text following the @q{slyrics} keyword to be inserted +into the current line of lyrics. + + +@knownissues + +The ABC standard is not very @q{standard}. For extended features +(e.g., polyphonic music) different conventions exist. + +Multiple tunes in one file cannot be converted. + +ABC synchronizes words and notes at the beginning of a line; +@command{abc2ly} does not. + +@command{abc2ly} ignores the ABC beaming. + + +@node Invoking etf2ly +@section Invoking @command{etf2ly} + +@cindex ETF +@cindex enigma +@cindex Finale +@cindex Coda Technology + +ETF (Enigma Transport Format) is a format used by Coda Music +Technology's Finale product. @command{etf2ly} will convert part of an ETF +file to a ready-to-use LilyPond file. + +It is invoked from the command-line as follows. + +@example +etf2ly [@var{option}]@dots{} @var{etf-file} +@end example + +Note that by @q{command-line}, we mean the command line of the +operating system. See @ref{Converting from other formats}, for +more information about this. + +The following options are supported by @command{etf2ly}: + +@table @code +@item -h,--help +this help +@item -o,--output=@var{FILE} +set output filename to @var{FILE} +@item --version +version information +@end table + + +@knownissues + +The list of articulation scripts is incomplete. Empty measures +confuse @command{etf2ly}. Sequences of grace notes are ended improperly. + + +@node Generating LilyPond files +@section Generating LilyPond files + +@cindex External programs, generating LilyPond files + +LilyPond itself does not come with support for any other formats, but +there are some external tools that also generate LilyPond files. + +These tools include + +@itemize +@item +@uref{http://@/www@/.denemo@/.org/,Denemo}, a graphical score editor. +@item +@uref{http://www@/.volny@/.cz/smilauer/rumor/rumor@/.html,Rumor}, a realtime +monophonic MIDI to LilyPond converter. +@item +@uref{http://nicolas@/.sceaux@/.free@/.fr/lilypond/lyqi@/.html,lyqi}, an +Emacs major mode. +@item +@uref{http://@/www@/.nongnu@/.org/@/xml2ly/,xml2ly}, which imports +@uref{http://@/www@/.musicxml@/.com/xml@/.html,MusicXML} +@item +@uref{http://@/noteedit@/.berlios@/.de,NoteEdit} +which imports @uref{http://@/www@/.musicxml@/.com/xml@/.html,MusicXML} +@item +@uref{http://@/www@/.rosegardenmusic@/.com,Rosegarden}, +which imports MIDI +@item +@uref{http://@/common-lisp@/.net/project/fomus/,FOMUS}, +a LISP library to generate music notation +@item +@uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml}, +has experimental export for LilyPond. +@item +@uref{http://www.tuxguitar.com.ar/}, can export to LilyPond. +@item +@uref{http://musescore.org} can also export to LilyPond. +@end itemize + diff --git a/Documentation/application/install.itely b/Documentation/application/install.itely new file mode 100644 index 0000000000..03985cdaa3 --- /dev/null +++ b/Documentation/application/install.itely @@ -0,0 +1,84 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + +@ifclear INSTALL +@node Install +@chapter Install +@end ifclear + +There are two sets of releases for LilyPond: stable releases, and +unstable development releases. Stable versions have an even-numbered +@q{minor} version number (i.e. 2.8, 2.10, 2.12, etc). Development +versions have an odd-numbered @q{minor} version number (i.e. 2.7, 2.9, +2.11, etc). + +Building LilyPond is a very involved process, so we @strong{highly} +recommend using the precompiled binaries. + +@menu +* Precompiled binaries:: +@end menu + + +@node Precompiled binaries +@section Precompiled binaries + +@unnumberedsubsec Downloading + +Check out @uref{http://lilypond.org/web/install/} for up to date +information on binary packages for your platform. If your operating +system is not covered on that general page, please see the complete list +at @uref{http://download.linuxaudio.org/lilypond/binaries/} + +We currently create binaries for + +@example +darwin-ppc - MacOS X powerpc +darwin-x86 - MacOS X intel +freebsd-64 - FreeBSD 6.x, x86_64 +freebsd-x86 - FreeBSD 4.x, x86 +linux-64 - Any GNU/Linux distribution, x86_64 +linux-ppc - Any GNU/Linux distribution, powerpc +linux-x86 - Any GNU/Linux distribution, x86 +mingw - Windows x86 +@end example + +@knownissues + +If you have MacOS 10.3 or 10.4 and you would like to use Python +scripts such as @command{convert-ly} and @command{lilypond-book}, see +@ref{Setup for MacOS X,,,lilypond-program,Application Usage}. + +@ignore +You can also compile LilyPond directly from the source code. This +requires that you can read English, so this section is not +translated. If you really want to compile LilyPond, see +@iftex +@c DO NOT translate the following line at all. +@ref{Compiling from source,,,lilypond-program,Application Usage}. +@end iftex +@ifhtml +@c Please translate the following line (but not the .html file name) +the @uref{Compiling-from-source.html,documentation in English}. +@end ifhtml +@end ignore + +@c TRANSLATORS: +@c Please **do not** translate the file included below. Users +@c should not be compiling LilyPond themselves; if they really +@c want to do so, they should be able to read the English docs, +@c because they'll probably need to ask questions in English +@c on the -devel list. -gp +@c Instead, please uncomment and translate the paragraph above, +@c and remove all stuff (menu, nodes, contents) below this line. + + +@include contributor/compile.itexi diff --git a/Documentation/application/lilypond-book.itely b/Documentation/application/lilypond-book.itely new file mode 100644 index 0000000000..a7043b4bf9 --- /dev/null +++ b/Documentation/application/lilypond-book.itely @@ -0,0 +1,1041 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + +@c Note: keep this node named so that `info lilypond-book' brings you here. +@node lilypond-book +@chapter Running @command{lilypond-book} + +If you want to add pictures of music to a document, you can simply do it +the way you would do with other types of pictures. The pictures are +created separately, yielding PostScript output or PNG images, and those +are included into a @LaTeX{} or HTML document. + +@command{lilypond-book} provides a way to automate this process: This +program extracts snippets of music from your document, runs +@command{lilypond} on them, and outputs the document with pictures +substituted for the music. The line width and font size definitions for +the music are adjusted to match the layout of your document. + +This is a separate program from @command{lilypond} itself, and is run +on the command line; for more information, see @ref{Command-line +usage}. If you have MacOS 10.3 or 10.4 and you have trouble running +@code{lilypond-book}, see FIXME FIXME @c @ref{Setup for MacOS X}. + +This procedure may be applied to @LaTeX{}, HTML, Texinfo or DocBook +documents. + +@cindex texinfo +@cindex latex +@cindex texinfo +@cindex texi +@cindex html +@cindex docbook +@cindex documents, adding music to +@cindex HTML, music in +@cindex Texinfo, music in +@cindex DocBook, music in +@cindex @LaTeX{}, music in + +@menu +* An example of a musicological document:: +* Integrating music and text:: +* Music fragment options:: +* Invoking lilypond-book:: +* Filename extensions:: +* Alternate methods of mixing text and music:: +@end menu + + +@node An example of a musicological document +@section An example of a musicological document + +@cindex musicology +Some texts contain music examples. These texts are musicological +treatises, songbooks, or manuals like this. Such texts can be made by +hand, simply by importing a PostScript figure into the word processor. +However, there is an automated procedure to reduce the amount of work +involved in HTML, @LaTeX{}, Texinfo and DocBook documents. + +A script called @code{lilypond-book} will extract the music fragments, +format them, and put back the resulting notation. Here we show a small +example for use with @LaTeX{}. The example also contains explanatory +text, so we will not comment on it further. + +@subheading Input + +@quotation +@verbatim +\documentclass[a4paper]{article} + +\begin{document} + +Documents for \verb+lilypond-book+ may freely mix music and text. +For example, + +\begin{lilypond} +\relative c' { + c2 g'2 \times 2/3 { f8 e d } c'2 g4 +} +\end{lilypond} + +Options are put in brackets. + +\begin[fragment,quote,staffsize=26,verbatim]{lilypond} + c'4 f16 +\end{lilypond} + +Larger examples can be put into a separate file, and introduced with +\verb+\lilypondfile+. + +\lilypondfile[quote,noindent]{screech-boink.ly} + +(If needed, replace screech-boink.ly by any .ly file you put in the same +directory as this file.) + +\end{document} +@end verbatim +@end quotation + +@subheading Processing + +Save the code above to a file called @file{lilybook.lytex}, then in a +terminal run + +@c keep space after @version{} so TeX doesn't choke +@example +lilypond-book --output=out --pdf lilybook.lytex +@emph{lilypond-book (GNU LilyPond) @version{} } +@emph{Reading lilybook.lytex...} +@emph{..lots of stuff deleted..} +@emph{Compiling lilybook.tex...} +cd out +pdflatex lilybook +@emph{..lots of stuff deleted..} +xpdf lilybook +@emph{(replace @command{xpdf} by your favorite PDF viewer)} +@end example + +Running @command{lilypond-book} and @command{latex} creates a lot of +temporary files, which would clutter up the working directory. To +remedy this, use the @code{--output=@var{dir}} option. It will create +the files in a separate subdirectory @file{dir}. + +Finally the result of the @LaTeX{} example shown above.@footnote{This +tutorial is processed with Texinfo, so the example gives slightly +different results in layout.} This finishes the tutorial section. + +@page + +@subheading Output + +Documents for @command{lilypond-book} may freely mix music and text. +For example, + +@lilypond +\relative c' { + c2 g'2 \times 2/3 { f8 e d } c'2 g4 +} +@end lilypond + +Options are put in brackets. + +@lilypond[fragment,quote,staffsize=26,verbatim] +c'4 f16 +@end lilypond + +Larger examples can be put into a separate file, and introduced with +@code{\lilypondfile}. + +@lilypondfile[quote,noindent]{screech-boink.ly} + + +@page + +@node Integrating music and text +@section Integrating music and text + +Here we explain how to integrate LilyPond with various output formats. + +@menu +* LaTeX:: +* Texinfo:: +* HTML:: +* DocBook:: +@end menu + +@node LaTeX +@subsection @LaTeX{} + +@LaTeX{} is the de-facto standard for publishing layouts in the exact +sciences. It is built on top of the @TeX{} typesetting engine, +providing the best typography available anywhere. + +See +@uref{http://@/www@/.ctan@/.org/@/tex@/-archive/@/info/@/lshort/@/english/, +@emph{The Not So Short Introduction to @LaTeX{}}} for an overview on how +to use @LaTeX{}. + +Music is entered using + +@example +\begin[options,go,here]@{lilypond@} + YOUR LILYPOND CODE +\end@{lilypond@} +@end example + +@noindent +or + +@example +\lilypondfile[options,go,here]@{@var{filename}@} +@end example + +@noindent +or + +@example +\lilypond@{ YOUR LILYPOND CODE @} +@end example + +Additionally, @code{\lilypondversion} displays the current version +of lilypond. +Running @command{lilypond-book} yields a file that can be further +processed with @LaTeX{}. + +We show some examples here. The @code{lilypond} environment + +@example +\begin[quote,fragment,staffsize=26]@{lilypond@} + c' d' e' f' g'2 g'2 +\end@{lilypond@} +@end example + +@noindent +produces + +@lilypond[quote,fragment,staffsize=26] +c' d' e' f' g'2 g'2 +@end lilypond + +The short version + +@example +\lilypond[quote,fragment,staffsize=11]@{@} +@end example + +@noindent +produces + +@lilypond[quote,fragment,staffsize=11]{} + +@noindent +Currently, you cannot include @code{@{} or @code{@}} within +@code{\lilypond@{@}}, so this command is only useful with the +@code{fragment} option. + +The default line width of the music will be adjusted by examining the +commands in the document preamble, the part of the document before +@code{\begin@{document@}}. The @command{lilypond-book} command sends +these to @LaTeX{} to find out how wide the text is. The line width for +the music fragments is then adjusted to the text width. Note that this +heuristic algorithm can fail easily; in such cases it is necessary to +use the @code{line-width} music fragment option. + +@cindex titling and lilypond-book +@cindex \header in @LaTeX{} documents + +Each snippet will call the following macros if they have been defined by +the user: + +@itemize @bullet +@item @code{\preLilyPondExample} called before the music, + +@item @code{\postLilyPondExample} called after the music, + +@item @code{\betweenLilyPondSystem[1]} is called between systems if +@code{lilypond-book} has split the snippet into several PostScript +files. It must be defined as taking one parameter and will be +passed the number of files already included in this snippet. +The default is to simply insert a @code{\linebreak}. +@end itemize + +@ignore +Broken stuff. :( + +@cindex Latex, feta symbols +@cindex fetachar + +To include feta symbols (such as flat, segno, etc) in a LaTeX +document, use @code{\input@{titledefs@}} + +@example +\documentclass[a4paper]@{article@} + +\input@{titledefs@} + +\begin@{document@} + +\fetachar\fetasharp + +\end@{document@} +@end example + +The font symbol names are defined in the file feta20.tex; to find +the location of this file, use the command + +@example +kpsewhich feta20.tex +@end example + +@end ignore + +@snippets + +Sometimes it is useful to display music elements (such as ties and slurs) +as if they continued after the end of the fragment. This can be done by +breaking the staff and suppressing inclusion of the rest of the LilyPond +output. + +In @LaTeX{}, define @code{\betweenLilyPondSystem} in such a way that +inclusion of other systems is terminated once the required number of +systems are included. Since @code{\betweenLilyPondSystem} is first +called @emph{after} the first system, including only the first system +is trivial. + +@example +\def\betweenLilyPondSystem#1@{\endinput@} + +\begin[fragment]@{lilypond@} + c'1\( e'( c'~ \break c' d) e f\) +\end@{lilypond@} +@end example + +If a greater number of systems is requested, a @TeX{} conditional must +be used before the @code{\endinput}. In this example, replace @q{2} by +the number of systems you want in the output, + +@example +\def\betweenLilyPondSystem#1@{ + \ifnum##1<2\else\endinput\fi +@} +@end example + +Remember that the definition of @code{\betweenLilyPondSystem} is +effective until @TeX{} quits the current group (such as the @LaTeX{} +environment) or is overridden by another definition (which is, in +most cases, for the rest of the document). To reset your +definition, write + +@example +\let\betweenLilyPondSystem\undefined +@end example + +@noindent +in your @LaTeX{} source. + +This may be simplified by defining a @TeX{} macro + +@example +\def\onlyFirstNSystems#1@{ + \def\betweenLilyPondSystem##1@{\ifnum##1<#1\else\endinput\fi@} +@} +@end example + +@noindent +and then saying only how many systems you want before each fragment, + +@example +\onlyFirstNSystems@{3@} +\begin@{lilypond@}...\end@{lilypond@} +\onlyFirstNSystems@{1@} +\begin@{lilypond@}...\end@{lilypond@} +@end example + + +@seealso +There are specific @command{lilypond-book} command line options and +other details to know when processing @LaTeX{} documents, see +@ref{Invoking lilypond-book}. + + +@node Texinfo +@subsection Texinfo + +Texinfo is the standard format for documentation of the GNU project. An +example of a Texinfo document is this manual. The HTML, PDF, and Info +versions of the manual are made from the Texinfo document. + +In the input file, music is specified with + +@example +@@lilypond[options,go,here] + YOUR LILYPOND CODE +@@end lilypond +@end example + +@noindent +or + +@example +@@lilypond[options,go,here]@{ YOUR LILYPOND CODE @} +@end example + +@noindent +or + +@example +@@lilypondfile[options,go,here]@{@var{filename}@} +@end example + +Additionally, @code{@@lilypondversion} displays the current version +of lilypond. + +When @command{lilypond-book} is run on it, this results in a Texinfo +file (with extension @file{.texi}) containing @code{@@image} tags for +HTML, Info and printed output. @command{lilypond-book} generates images +of the music in EPS and PDF formats for use in the printed output, and +in PNG format for use in HTML and Info output. + +We show two simple examples here. A @code{lilypond} environment + +@example +@@lilypond[fragment] +c' d' e' f' g'2 g' +@@end lilypond +@end example + +@noindent +produces + +@lilypond[fragment] +c' d' e' f' g'2 g' +@end lilypond + +The short version + +@example +@@lilypond[fragment,staffsize=11]@{@} +@end example + +@noindent +produces + +@lilypond[fragment,staffsize=11]{} + +Contrary to @LaTeX{}, @code{@@lilypond@{...@}} does not generate an +in-line image. It always gets a paragraph of its own. + + +@node HTML +@subsection HTML + +Music is entered using + +@example + +\key c \minor c4 es g2 + +@end example +@noindent +@command{lilypond-book} then produces an HTML file with appropriate image +tags for the music fragments: + +@lilypond[fragment,relative=2] +\key c \minor c4 es g2 +@end lilypond + +For inline pictures, use @code{}, where the options +are separated by a colon from the music, for example + +@example +Some music in a line of text. +@end example + + +To include separate files, say + +@example +@var{filename} +@end example + +Additionally, @code{} displays the current version +of lilypond. + + +@cindex titling in HTML +@cindex preview image +@cindex thumbnail + +@node DocBook +@subsection DocBook + +For inserting LilyPond snippets it is good to keep the conformity of our +DocBook document, thus allowing us to use DocBook editors, validation +etc. So we don't use custom tags, only specify a convention based on the +standard DocBook elements. + +@subheading Common conventions + +For inserting all type of snippets we use the @code{mediaobject} and +@code{inlinemediaobject} element, so our snippets can be formatted +inline or not inline. The snippet formatting options are always +provided in the @code{role} property of the innermost element (see in +next sections). Tags are chosen to allow DocBook editors format the +content gracefully. The DocBook files to be processed with +@command{lilypond-book} should have the extension @file{.lyxml}. + +@subheading Including a LilyPond file + +This is the most simple case. We must use the @file{.ly} extension for +the included file, and insert it as a standard @code{imageobject}, with +the following structure: + +@example + + + + + +@end example + +Note that you can use @code{mediaobject} or @code{inlinemediaobject} +as the outermost element as you wish. + +@subheading Including LilyPond code + +Including LilyPond code is possible by using a @code{programlisting}, +where the language is set to @code{lilypond} with the following +structure: + +@example + + + +\context Staff \with @{ + \remove Time_signature_engraver + \remove Clef_engraver@} + @{ c4( fis) @} + + + +@end example + +As you can see, the outermost element is a @code{mediaobject} or +@code{inlinemediaobject}, and there is a @code{textobject} containing +the @code{programlisting} inside. + +@subheading Processing the DocBook document + +Running @command{lilypond-book} on our @file{.lyxml} file will create a +valid DocBook document to be further processed with @file{.xml} +extension. If you use +@uref{http://@/dblatex@/.sourceforge@/.net@/,dblatex}, it will create a +PDF file from this document automatically. For HTML (HTML Help, +JavaHelp etc.) generation you can use the official DocBook XSL +stylesheets, however, it is possible that you have to make some +customization for it. + + +@node Music fragment options +@section Music fragment options + +In the following, a @q{LilyPond command} refers to any command described +in the previous sections which is handled by @command{lilypond-book} to +produce a music snippet. For simplicity, LilyPond commands are only +shown in @LaTeX{} syntax. + +Note that the option string is parsed from left to right; if an option +occurs multiple times, the last one is taken. + +The following options are available for LilyPond commands: + +@table @code +@item staffsize=@var{ht} +Set staff size to @var{ht}, which is measured in points. + +@item ragged-right +Produce ragged-right lines with natural spacing, i.e., +@code{ragged-right = ##t} is added to the LilyPond snippet. This is the +default for the @code{\lilypond@{@}} command if no @code{line-width} +option is present. It is also the default for the @code{lilypond} +environment if the @code{fragment} option is set, and no line width is +explicitly specified. + +@item noragged-right +For single-line snippets, allow the staff length to be stretched to +equal that of the line width, i.e., @code{ragged-right = ##f} is +added to the LilyPond snippet. + +@item line-width +@itemx line-width=@var{size}\@var{unit} +Set line width to @var{size}, using @var{unit} as units. @var{unit} is +one of the following strings: @code{cm}, @code{mm}, @code{in}, or +@code{pt}. This option affects LilyPond output (this is, the staff +length of the music snippet), not the text layout. + +If used without an argument, set line width to a default value (as +computed with a heuristic algorithm). + +If no @code{line-width} option is given, @command{lilypond-book} tries to +guess a default for @code{lilypond} environments which don't use the +@code{ragged-right} option. + +@item notime +Do not print the time signature, and turns off the timing (time signature, +bar lines) in the score. + +@item fragment +Make @command{lilypond-book} add some boilerplate code so that you can +simply enter, say, + +@example +c'4 +@end example + +@noindent +without @code{\layout}, @code{\score}, etc. + +@item nofragment +Do not add additional code to complete LilyPond code in music snippets. +Since this is the default, @code{nofragment} is redundant normally. + +@item indent=@var{size}\@var{unit} +Set indentation of the first music system to @var{size}, using +@var{unit} as units. @var{unit} is one of the following strings: +@code{cm}, @code{mm}, @code{in}, or @code{pt}. This option affects +LilyPond, not the text layout. + +@item noindent +Set indentation of the first music system to zero. This option affects +LilyPond, not the text layout. Since no indentation is the default, +@code{noindent} is redundant normally. + +@item quote +Reduce line length of a music snippet by @math{2*0.4}@dmn{in} and put +the output into a quotation block. The value @q{0.4@dmn{in}} can be +controlled with the @code{exampleindent} option. + +@item exampleindent +Set the amount by which the @code{quote} option indents a music snippet. + +@item relative +@itemx relative=@var{n} +Use relative octave mode. By default, notes are specified relative to +middle@tie{}C. The optional integer argument specifies the octave of +the starting note, where the default @code{1} is middle C. +@code{relative} option only works when @code{fragment} option is set, +so @code{fragment} is automatically implied by @code{relative}, +regardless of the presence of any @code{(no)fragment} option in the +source. +@end table + +LilyPond also uses @command{lilypond-book} to produce its own +documentation. To do that, some more obscure music fragment options are +available. + +@table @code +@item verbatim +The argument of a LilyPond command is copied to the output file and +enclosed in a verbatim block, followed by any text given with the +@code{intertext} option (not implemented yet); then the actual music is +displayed. This option does not work well with @code{\lilypond@{@}} if +it is part of a paragraph. + +If @code{verbatim} is used in a @code{lilypondfile} command, it is +possible to enclose verbatim only a part of the source file. If the +source file contain a comment containing @samp{begin verbatim} (without +quotes), quoting the source in the verbatim block will start after the +last occurrence of such a comment; similarly, quoting the source verbatim +will stop just before the first occurrence of a comment containing +@samp{end verbatim}, if there is any. In the following source file +example, the music will be interpreted in relative mode, but the +verbatim quote will not show the @code{relative} block, i.e. + +@example +\relative c' @{ % begin verbatim + c4 e2 g4 + f2 e % end verbatim +@} +@end example + +@noindent +will be printed with a verbatim block like + +@example + c4 e2 g4 + f2 e +@end example + +@noindent +If you would like to translate comments and variable names in verbatim +output but not in the sources, you may set the environment variable +@code{LYDOC_LOCALEDIR} to a directory path; the directory should +contain a tree of @file{.mo} message catalogs with @code{lilypond-doc} +as a domain. + +@item addversion +(Only for Texinfo output.) Prepend line @code{\version +@@w@{"@@version@{@}"@}} to @code{verbatim} output. + +@item texidoc +(Only for Texinfo output.) If @command{lilypond} is called with the +@option{--header=@/texidoc} option, and the file to be processed is +called @file{foo@/.ly}, it creates a file @file{foo@/.texidoc} if there +is a @code{texidoc} field in the @code{\header}. The @code{texidoc} +option makes @command{lilypond-book} include such files, adding its +contents as a documentation block right before the music snippet. + +Assuming the file @file{foo@/.ly} contains + +@example +\header @{ + texidoc = "This file demonstrates a single note." +@} +@{ c'4 @} +@end example + +@noindent +and we have this in our Texinfo document @file{test.texinfo} + +@example +@@lilypondfile[texidoc]@{foo.ly@} +@end example + +@noindent +the following command line gives the expected result + +@example +lilypond-book --pdf --process="lilypond \ + -dbackend=eps --header=texidoc" test.texinfo +@end example + +Most LilyPond test documents (in the @file{input} directory of the +distribution) are small @file{.ly} files which look exactly like this. + +For localization purpose, if the Texinfo document contains +@code{@@documentlanguage @var{LANG}} and @file{foo@/.ly} header +contains a @code{texidoc@var{LANG}} field, and if @command{lilypond} +is called with @option{--header=@/texidoc@var{LANG}}, then +@file{foo@/.texidoc@var{LANG}} will be included instead of +@file{foo@/.texidoc}. + +@item lilyquote +(Only for Texinfo output.) This option is similar to quote, but only +the music snippet (and the optional verbatim block implied by +@code{verbatim} option) is put into a quotation block. This option is +useful if you want to @code{quote} the music snippet but not the +@code{texidoc} documentation block. + +@item doctitle +(Only for Texinfo output.) This option works similarly to +@code{texidoc} option: if @command{lilypond} is called with the +@option{--header=@/doctitle} option, and the file to be processed is +called @file{foo@/.ly} and contains a @code{doctitle} field in the +@code{\header}, it creates a file @file{foo@/.doctitle}. When +@code{doctitle} option is used, the contents of @file{foo@/.doctitle}, +which should be a single line of @var{text}, is inserted in the +Texinfo document as @code{@@lydoctitle @var{text}}. +@code{@@lydoctitle} should be a macro defined in the Texinfo document. +The same remark about @code{texidoc} processing with localized +languages also applies to @code{doctitle}. + +@item nogettext +(Only for Texinfo output.) Do not translate comments and variable +names in the snippet quoted verbatim. + +@item printfilename +If a LilyPond input file is included with @code{\lilypondfile}, print +the file name right before the music snippet. For HTML output, this +is a link. Only the base name of the file is printed, i.e. the +directory part of the file path is stripped. + +@end table + + +@node Invoking lilypond-book +@section Invoking @command{lilypond-book} + +@command{lilypond-book} produces a file with one of the following +extensions: @file{.tex}, @file{.texi}, @file{.html} or @file{.xml}, +depending on the output format. All of @file{.tex}, @file{.texi} and +@file{.xml} files need further processing. + +@subheading Format-specific instructions + +@subsubheading @LaTeX{} + +There are two ways of processing your @LaTeX{} document for printing or +publishing: getting a PDF file directly with PDF@LaTeX{}, or getting a +PostScript file with @LaTeX{} via a DVI to PostScript translator like +@command{dvips}. The first way is simpler and recommended@footnote{Note +that PDF@LaTeX{} and @LaTeX{} may not be both usable to compile any +@LaTeX{} document, that is why we explain the two ways.}, and whichever +way you use, you can easily convert between PostScript and PDF with +tools, like @command{ps2pdf} and @command{pdf2ps} included in +Ghostscript package. + +To produce a PDF file through PDF@LaTeX{}, use + +@example +lilypond-book --pdf yourfile.pdftex +pdflatex yourfile.tex +@end example + +@cindex outline fonts +@cindex type1 fonts +@cindex dvips +@cindex invoking dvips +To produce PDF output via @LaTeX{}/@command{dvips}/@command{ps2pdf}, you +should do + +@example +lilypond-book yourfile.lytex +latex yourfile.tex +dvips -Ppdf yourfile.dvi +ps2pdf yourfile.ps +@end example + +@noindent +The @file{.dvi} file created by this process will not contain + note heads. This is normal; if you follow the instructions, they +will be included in the @file{.ps} and @file{.pdf} files. + +Running @command{dvips} may produce some warnings about fonts; these +are harmless and may be ignored. If you are running @command{latex} in +twocolumn mode, remember to add @code{-t landscape} to the +@command{dvips} options. + +@subsubheading Texinfo + +To produce a Texinfo document (in any output format), follow the normal +procedures for Texinfo; this is, either call @command{texi2pdf} or +@command{texi2dvi} or @command{makeinfo}, depending on the output format +you want to create. +@ifinfo +@xref{Format with texi2dvi, , , texinfo, GNU Texinfo}, and @ref{Creating +an Info File, , , texinfo, GNU Texinfo}. +@end ifinfo +@ifnotinfo +See the documentation of Texinfo for further details. +@end ifnotinfo + + +@subheading Command line options + +@command{lilypond-book} accepts the following command line options: + +@table @code +@item -f @var{format} +@itemx --format=@var{format} +Specify the document type to process: @code{html}, @code{latex}, +@code{texi} (the default) or @code{docbook}. If this option is missing, +@command{lilypond-book} tries to detect the format automatically, see +@ref{Filename extensions}. Currently, @code{texi} is the same as +@code{texi-html}. + +@c This complicated detail is not implemented, comment it out -jm +@ignore +The @code{texi} document type produces a Texinfo file with music +fragments in the printed output only. For getting images in the HTML +version, the format @code{texi-html} must be used instead. +@end ignore + +@item -F @var{filter} +@itemx --filter=@var{filter} +Pipe snippets through @var{filter}. @code{lilypond-book} will +not --filter and --process at the same time. For example, + +@example +lilypond-book --filter='convert-ly --from=2.0.0 -' my-book.tely +@end example + +@item -h +@itemx --help +Print a short help message. + +@item -I @var{dir} +@itemx --include=@var{dir} +Add @var{dir} to the include path. @command{lilypond-book} also looks +for already compiled snippets in the include path, and does not write +them back to the output directory, so in some cases it is necessary to +invoke further processing commands such as @command{makeinfo} or +@command{latex} with the same @code{-I @var{dir}} options. + +@item -o @var{dir} +@itemx --output=@var{dir} +Place generated files in directory @var{dir}. Running +@command{lilypond-book} generates lots of small files that LilyPond will +process. To avoid all that garbage in the source directory, use the +@option{--output} command line option, and change to that directory +before running @command{latex} or @command{makeinfo}. + +@example +lilypond-book --output=out yourfile.lytex +cd out +... +@end example + +@itemx --skip-lily-check +Do not fail if no lilypond output is found. It is used for LilyPond +Info documentation without images. + +@itemx --skip-png-check +Do not fail if no PNG images are found for EPS files. It is used for +LilyPond Info documentation without images. + +@itemx --lily-output-dir=@var{dir} +Write lily-XXX files to directory @var{dir}, link into @code{--output} +directory. Use this option to save building time for documents in +different directories which share a lot of identical snippets. + +@itemx --info-images-dir=@var{dir} +Format Texinfo output so that Info will look for images of music in +@var{dir}. + +@itemx --latex-program=@var{prog} +Run executable @command{prog} instead of @command{latex}. This is +useful if your document is processed with @command{xelatex}, for +example. + +@itemx --left-padding=@var{amount} +Pad EPS boxes by this much. @var{amount} is measured in millimeters, +and is 3.0 by default. This option should be used if the lines of +music stick out of the right margin. + +The width of a tightly clipped system can vary, due to notation +elements that stick into the left margin, such as bar numbers and +instrument names. This option will shorten each line and move each +line to the right by the same amount. + + +@item -P @var{command} +@itemx --process=@var{command} +Process LilyPond snippets using @var{command}. The default command is +@code{lilypond}. @code{lilypond-book} will not @code{--filter} and +@code{--process} at the same time. + +@item --pdf +Create PDF files for use with PDF@LaTeX{}. + +@item -V +@itemx --verbose +Be verbose. + +@item -v +@itemx --version +Print version information. +@end table + +@knownissues + +The Texinfo command @code{@@pagesizes} is not interpreted. Similarly, +@LaTeX{} commands that change margins and line widths after the preamble +are ignored. + +Only the first @code{\score} of a LilyPond block is processed. + + +@node Filename extensions +@section Filename extensions + +You can use any filename extension for the input file, but if you do not +use the recommended extension for a particular format you may need to +manually specify the output format; for details, see @ref{Invoking +lilypond-book}. Otherwise, @command{lilypond-book} automatically +selects the output format based on the input filename's extension. + +@quotation +@multitable @columnfractions .2 .5 +@item @strong{extension} @tab @strong{output format} +@item +@item @file{.html} @tab HTML +@item @file{.itely} @tab Texinfo +@item @file{.latex} @tab @LaTeX{} +@item @file{.lytex} @tab @LaTeX{} +@item @file{.lyxml} @tab DocBook +@item @file{.tely} @tab Texinfo +@item @file{.tex} @tab @LaTeX{} +@item @file{.texi} @tab Texinfo +@item @file{.texinfo} @tab Texinfo +@item @file{.xml} @tab HTML +@end multitable +@end quotation + +If you use the same filename extension for the input file than the +extension @command{lilypond-book} uses for the output file, and if the +input file is in the same directory as @command{lilypond-book} working +directory, you must use @code{--output} option to make +@command{lilypond-book} running, otherwise it will exit with an error +message like @qq{Output would overwrite input file}. + + +@node Alternate methods of mixing text and music +@section Alternative methods of mixing text and music + +This section shows methods to integrate text and music, different than +the automated method with @command{lilypond-book}. + +@menu +* Many quotes from a large score:: +* Inserting LilyPond output into OpenOffice.org:: +* Inserting LilyPond output into other programs:: +@end menu + +@node Many quotes from a large score +@unnumberedsubsec Many quotes from a large score + +If you need to quote many fragments from a large score, you can also use +the clip systems feature, see @ruser{Extracting fragments of music}. + + +@node Inserting LilyPond output into OpenOffice.org +@unnumberedsubsec Inserting LilyPond output into OpenOffice.org + +@cindex OpenOffice.org + +LilyPond notation can be added to OpenOffice.org with +@uref{http://@/ooolilypond@/.sourceforge@/.net@/,OOoLilyPond}. + + +@node Inserting LilyPond output into other programs +@unnumberedsubsec Inserting LilyPond output into other programs + +To insert LilyPond output in other programs, use @code{lilypond} +instead of @code{lilypond-book}. Each example must be created +individually and added to the document; consult the documentation for +that program. Most programs will be able to insert LilyPond output in +@file{PNG}, @file{EPS}, or @file{PDF} formats. + +To reduce the white space around your LilyPond score, use +the following options + +@example +\paper@{ + indent=0\mm + line-width=120\mm + oddFooterMarkup=##f + oddHeaderMarkup=##f + bookTitleMarkup = ##f + scoreTitleMarkup = ##f +@} + +@{ c1 @} +@end example + +To produce a useful @file{EPS} file, use + +@example +lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts myfile.ly + +@file{PNG}: +lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts --png myfile.ly +@end example + diff --git a/Documentation/application/running.itely b/Documentation/application/running.itely new file mode 100644 index 0000000000..f0b891a80f --- /dev/null +++ b/Documentation/application/running.itely @@ -0,0 +1,468 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + + +@node Running lilypond +@chapter Running @command{lilypond} + +This chapter details the technicalities of running LilyPond. + +@menu +* Normal usage:: +* Command-line usage:: +* Error messages:: +@end menu + + +@node Normal usage +@section Normal usage + +Most users run LilyPond through a GUI; see +FIXME FIXME FIXME +@c @rlearning{First steps} if +you have not read this already. + + +@node Command-line usage +@section Command-line usage + +This section contains extra information about using LilyPond on the +command-line. This may be desirable to pass extra options to the +program. In addition, there are certain extra @q{helper} programs (such +as @code{midi2ly}) which are only available on the command-line. + +By @q{command-line}, we mean the command line in the operating system. +Windows users might be more familiar with the terms @q{DOS shell} or +@q{command shell}; MacOS@tie{}X users might be more familiar with the terms +@q{terminal} or @q{console}. They should also consult +FIXME @c @ref{Setup for MacOS X}. + +Describing how to use this part of an operating system is outside the +scope of this manual; please consult other documentation on this topic +if you are unfamiliar with the command-line. + +@menu +* Invoking lilypond:: +* Command line options for lilypond:: +* Environment variables:: +@end menu + +@node Invoking lilypond +@subsection Invoking @command{lilypond} + +@cindex Invoking @command{lilypond} +@cindex command line options for @command{lilypond} +@cindex options, command line +@cindex switches + + +The @command{lilypond} executable may be called as follows from the command line. + +@example +lilypond [@var{option}]@dots{} @var{file}@dots{} +@end example + + +When invoked with a filename that has no extension, the @file{.ly} +extension is tried first. To read input from stdin, use a +dash (@code{-}) for @var{file}. + +When @file{filename.ly} is processed it will produce @file{filename.ps} +and @file{filename.pdf} as output. Several files can be specified; +they will each be processed independently. @footnote{The status of +GUILE is not reset after processing a @code{.ly} file, so be careful +not to change any system defaults from within Scheme.} + +If @file{filename.ly} contains more than one @code{\score} +block, then the rest of the scores will be output in numbered files, +starting with @file{filename-1.pdf}. In addition, the value of +@code{output-suffix} will be inserted between the basename and the +number. An input file containing + +@example +#(define output-suffix "violin") +\score @{ @dots{} @} +#(define output-suffix "cello") +\score @{ @dots{} @} +@end example + +@noindent +will output @var{base}@file{-violin.pdf} and +@var{base}@file{-cello-1.pdf}. + + +@node Command line options for lilypond +@subsection Command line options for @command{lilypond} + +The following options are supported: + +@table @code + +@item -e,--evaluate=@var{expr} +Evaluate the Scheme @var{expr} before parsing any @file{.ly} files. +Multiple @code{-e} options may be given, they will be evaluated +sequentially. + +The expression will be evaluated in the @code{guile-user} module, so +if you want to use definitions in @var{expr}, use + +@example +lilypond -e '(define-public a 42)' +@end example + +@noindent +on the command-line, and include + +@example +#(use-modules (guile-user)) +@end example + +@noindent +at the top of the @code{.ly} file. + +@item -f,--format=@var{format} +which formats should be written. Choices for @code{format} are +@code{svg}, @code{ps}, @code{pdf}, and @code{png}. + +Example: @code{lilypond -fpng @var{filename}.ly} + + + +@item -d,--define-default=@var{var}=@var{val} +This sets the internal program option @var{var} to the Scheme value +@var{val}. If @var{val} is not supplied, then @var{#t} is used. To +switch off an option, @code{no-} may be prefixed to @var{var}, e.g. + +@cindex point and click, command line + +@example +-dno-point-and-click +@end example + +@noindent +is the same as +@example +-dpoint-and-click='#f' +@end example + +Here are a few interesting options. + +@table @samp +@item help +Running @code{lilypond -dhelp} will print all of the @code{-d} options +available. + +@item paper-size +This option sets the default paper-size, +@example +-dpaper-size=\"letter\" +@end example + +@noindent +Note that the string must be enclosed in escaped quotes ( @code{\"} ). +@c Match " in previous line to help context-sensitive editors + +@item safe +Do not trust the @code{.ly} input. + +When LilyPond formatting is available through a web server, either the +@code{--safe} or the @code{--jail} option @b{MUST} be passed. The +@code{--safe} option will prevent inline Scheme code from wreaking +havoc, for example + +@quotation +@verbatim +#(system "rm -rf /") +{ + c4^#(ly:export (ly:gulp-file "/etc/passwd")) +} +@end verbatim +@end quotation + +The @code{-dsafe} option works by evaluating in-line Scheme +expressions in a special safe module. This safe module is derived from +GUILE @file{safe-r5rs} module, but adds a number of functions of the +LilyPond API. These functions are listed in @file{scm/@/safe@/-lily@/.scm}. + +In addition, safe mode disallows @code{\include} directives and +disables the use of backslashes in @TeX{} strings. + +In safe mode, it is not possible to import LilyPond variables +into Scheme. + +@code{-dsafe} does @emph{not} detect resource overuse. It is still possible to +make the program hang indefinitely, for example by feeding cyclic data +structures into the backend. Therefore, if using LilyPond on a +publicly accessible webserver, the process should be limited in both +CPU and memory usage. + +The safe mode will prevent many useful LilyPond snippets from being +compiled. The @code{--jail} is a more secure alternative, but +requires more work to set up. + +@cindex output format, setting +@item backend +the output format to use for the back-end. Choices for @code{format} are +@table @code +@item ps +@cindex PostScript output + for PostScript. + + Postscript files include TTF, Type1 and OTF fonts. No subsetting of + these fonts is done. When using oriental character sets, this can + lead to huge files. + +@item eps + for encapsulated PostScript. This dumps every page (system) as a separate +@file{EPS} file, without fonts, and as one collated @file{EPS} file with +all pages (systems) including fonts. + +This mode is used by default by @command{lilypond-book}. + +@item svg +@cindex SVG (Scalable Vector Graphics) + for SVG (Scalable Vector Graphics). + + This creates a single SVG file containing the entire music output + with no embedded fonts. It is recommended to install the Century + Schoolbook fonts, included with your LilyPond installation, for + optimal rendering. Under UNIX, simply copy these fonts from the + LilyPond directory (typically + @file{/usr/share/lilypond/VERSION/fonts/otf/}) to + @file{~/.fonts/}. The SVG output should be compatible with any + SVG editor or user agent. + +@item scm +@cindex Scheme dump + for a dump of the raw, internal Scheme-based drawing commands. + +@item null + do not output a printed score; has the same effect as @code{-dno-print-pages}. +@end table + +Example: @code{lilypond -dbackend=svg @var{filename}.ly} + +@item preview +Generate an output file containing the titles and the first system + +@item print-pages +Generate the full pages, the default. @code{-dno-print-pages} is +useful in combination with @code{-dpreview}. + +@end table + + + +@item -h,--help +Show a summary of usage. + +@item -H,--header=@var{FIELD} +Dump a header field to file @file{BASENAME.@var{FIELD}}. + +@item --include, -I=@var{directory} +Add @var{directory} to the search path for input files. +@cindex file searching +@cindex search path + +@item -i,--init=@var{file} +Set init file to @var{file} (default: @file{init.ly}). + +@item -o,--output=@var{FILE} +Set the default output file to @var{FILE}. The appropriate +suffix will be added (e.g. @code{.pdf} for pdf) + +@item --ps +Generate PostScript. + +@item --png +Generate pictures of each page, in PNG format. This implies +@code{--ps}. The resolution in DPI of the image may be set with +@example +-dresolution=110 +@end example + +@item --pdf +Generate PDF. This implies @code{--ps}. + + + +@item -j,--jail=@var{user},@var{group},@var{jail},@var{dir} +Run @command{lilypond} in a chroot jail. + +The @code{--jail} option provides a more flexible alternative to +@code{--safe} when LilyPond formatting is available through a web +server or whenever LilyPond executes externally provided +sources. + +The @code{--jail} option works by changing the root of @command{lilypond} to +@var{jail} just before starting the actual compilation process. The user +and group are then changed to match those provided, and the current +directory is changed to @var{dir}. This setup guarantees that it is not +possible (at least in theory) to escape from the jail. Note that for +@code{--jail} to work @command{lilypond} must be run as root, which is usually +accomplished in a safe way using @command{sudo}. + +Setting up a jail is a slightly delicate matter, as we must be sure that +LilyPond is able to find whatever it needs to compile the source +@emph{inside the jail}. A typical setup comprises the following items: + +@table @asis +@item Setting up a separate filesystem +A separate filesystem should be created for LilyPond, so that it can be +mounted with safe options such as @code{noexec}, @code{nodev}, and +@code{nosuid}. In this way, it is impossible to run executables or to +write directly to a device from LilyPond. If you do not want to create a +separate partition, just create a file of reasonable size and use it to +mount a loop device. A separate filesystem also guarantees that LilyPond +cannot write more space than it is allowed. + +@item Setting up a separate user +A separate user and group (say, @code{lily}/@code{lily}) with low +privileges should be used to run LilyPond inside the jail. There should +be a single directory writable by this user, which should be passed in +@var{dir}. + +@item Preparing the jail +LilyPond needs to read a number of files while running. All these files +are to be copied into the jail, under the same path they appear in the +real root filesystem. The entire content of the LilyPond installation +(e.g., @file{/usr/share/lilypond}) +should be copied. + +If problems arise, the simplest way to trace them down is to run +LilyPond using @command{strace}, which will allow you to determine which +files are missing. + +@item Running LilyPond +In a jail mounted with @code{noexec} it is impossible to execute any external +program. Therefore LilyPond must be run with a backend that does not +require any such program. As we already mentioned, it must be also run +with superuser privileges (which, of course, it will lose immediately), +possibly using @command{sudo}. It is a good idea to limit the number of +seconds of CPU time LilyPond can use (e.g., using @command{ulimit +-t}), and, if your operating system supports it, the amount of memory +that can be allocated. +@end table + + +@item -v,--version +Show version information. + +@item -V,--verbose +Be verbose: show full paths of all files read, and give timing +information. + +@item -w,--warranty +Show the warranty with which GNU LilyPond comes. (It comes with +@strong{NO WARRANTY}!) +@end table + +@node Environment variables +@subsection Environment variables + + +@cindex LANG +@cindex LILYPOND_DATADIR + +@command{lilypond} recognizes the following environment variables: +@table @code +@item LILYPOND_DATADIR +This specifies a directory where locale messages and +data files will be looked up by default. The directory should contain +subdirectories called @file{ly/}, @file{ps/}, @file{tex/}, etc. + +@item LANG +This selects the language for the warning messages. + +@item LILYPOND_GC_YIELD +With this variable the memory footprint and performance can be +adjusted. It is a percentage tunes memory management behavior. With +higher values, the program uses more memory, with smaller values, it +uses more CPU time. The default value is @code{70}. + +@end table + + +@node Error messages +@section Error messages + +@cindex error messages +Different error messages can appear while compiling a file: + +@table @emph + +@item Warning +@cindex warning +Something looks suspect. If you are requesting something out of the +ordinary then you will understand the message, and can ignore it. +However, warnings usually indicate that something is wrong with the +input file. + +@item Error +Something is definitely wrong. The current processing step (parsing, +interpreting, or formatting) will be finished, but the next step will +be skipped. + +@item Fatal error +@cindex error +@cindex fatal error +Something is definitely wrong, and LilyPond cannot continue. This +happens rarely. The most usual cause is misinstalled fonts. + +@item Scheme error +@cindex trace, Scheme +@cindex call trace +@cindex Scheme error +Errors that occur while executing Scheme code are caught by the Scheme +interpreter. If running with the verbose option (@code{-V} or +@code{--verbose}) then a call trace of the offending +function call is printed. + +@item Programming error +@cindex Programming error +There was some internal inconsistency. These error messages are +intended to help the programmers and debuggers. Usually, they can be +ignored. Sometimes, they come in such big quantities that they obscure +other output. + +@item Aborted (core dumped) +This signals a serious programming error that caused the program to +crash. Such errors are considered critical. If you stumble on one, +send a bug-report. +@end table + +@cindex errors, message format +If warnings and errors can +be linked to some part of the input file, then error messages have the +following form + +@example +@var{filename}:@var{lineno}:@var{columnno}: @var{message} +@var{offending input line} +@end example + +A line-break is inserted in the offending line to indicate the column +where the error was found. For example, + +@example +test.ly:2:19: error: not a duration: 5 + @{ c'4 e' + 5 g' @} +@end example + +These locations are LilyPond's best guess about where the warning or +error occurred, but (by their very nature) warnings and errors occur +when something unexpected happens. If you can't see an error in the +indicated line of your input file, try checking one or two lines +above the indicated position. + + + diff --git a/Documentation/application/setup.itely b/Documentation/application/setup.itely new file mode 100644 index 0000000000..e5ab5c48b8 --- /dev/null +++ b/Documentation/application/setup.itely @@ -0,0 +1,328 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + +@node Setup +@chapter Setup + +This chapter discusses various post-install configuration options for +LilyPond and various other programs. This chapter may be safely treated +as a reference: only read a section if it applies to you. + +@menu +* Setup for specific Operating Systems:: +* Text editor support:: +* Point and click:: +@end menu + + +@node Setup for specific Operating Systems +@section Setup for specific Operating Systems + +This section explains how to perform additional setup for specific +operating systems. + +@menu +* Setup for MacOS X:: +@end menu + +@node Setup for MacOS X +@subsection Setup for MacOS X + +@subsubheading Using Python scripts on MacOS 10.3 or 10.4 + +LilyPond binaries for MacOS X do not provide Python, but Python 2.4 or +newer is required by @command{convert-ly}. Therefore, if you use MacOS +10.3 or 10.4, you must install a newer Python version from +@uref{http://python.org/download/}, then edit the first line of +@command{convert-ly} and @command{lilypond-book} as follows: if the +Python binary you just installed is in your @var{PATH}, the first line +should be + +@example +#!/usr/bin/env python +@end example + +@noindent +otherwise it should be + +@example +#!@var{/path/to/newly_installed/python} +@end example + + +@subsubheading MacOS X on the command line + +The scripts --- such as @command{lilypond-book}, @command{convert-ly}, +@command{abc2ly}, and even @command{lilypond} itself --- are included +inside the @code{.app} file for MacOS@tie{}X. They can be run from +the command line by invoking them directly, e.g. + +@example +@var{path/to}/LilyPond.app/Contents/Resources/bin/lilypond +@end example + +@noindent +The same is true of the other scripts in that directory, including +@command{lilypond-book}, @command{convert-ly}, @command{abc2ly}, etc. + +Alternatively, you may create scripts which add the path +automatically. Create a directory to store these scripts, + +@example +mkdir -p ~/bin +cd ~/bin +@end example + +Create a file called @code{lilypond} which contains + +@example +exec @var{path/to}/LilyPond.app/Contents/Resources/bin/lilypond "$@@" +@end example + +Create similar files @code{lilypond-book}, @code{convert-ly}, and +any other helper programs you use (@code{abc2ly}, @code{midi2ly}, +etc). Simply replace the @code{bin/lilypond} with +@code{bin/convert-ly} (or other program name) in the above file. + +Make the file executable, + +@example +chmod u+x lilypond +@end example + +Now, add this directory to your path. Modify (or create) +a file called @code{.profile} in your home directory such that it contains + +@example +export PATH=$PATH:~/bin +@end example + +@noindent +This file should end with a blank line. + +Note that @var{path/to} will generally be @code{/Applications/}. + + +@node Text editor support +@section Text editor support + +@cindex editors +@cindex vim +@cindex emacs +@cindex modes, editor +@cindex syntax coloring +@cindex coloring, syntax + +There is support from different text editors for LilyPond. + +@menu +* Emacs mode:: +* Vim mode:: +* jEdit:: +* TexShop:: +* TextMate:: +* LilyKDE:: +@end menu + +@node Emacs mode +@subsection Emacs mode + +Emacs has a @file{lilypond-mode}, which provides keyword +autocompletion, indentation, LilyPond specific parenthesis matching +and syntax coloring, handy compile short-cuts and reading LilyPond +manuals using Info. If @file{lilypond-mode} is not installed on your +platform, see below. + +An Emacs mode for entering music and running LilyPond is contained in +the source archive in the @file{elisp} directory. Do @command{make +install} to install it to @var{elispdir}. The file @file{lilypond-init.el} +should be placed to @var{load-path}@file{/site-start.d/} or appended +to your @file{~/.emacs} or @file{~/.emacs.el}. + +As a user, you may want add your source path (e.g. @file{~/site-lisp/}) to +your @var{load-path} by appending the following line (as modified) to your +@file{~/.emacs} + +@c any reason we do not advise: (push "~/site-lisp" load-path) +@example +(setq load-path (append (list (expand-file-name "~/site-lisp")) load-path)) +@end example + + +@node Vim mode +@subsection Vim mode + +For @uref{http://@/www@/.vim@/.org,VIM}, a @file{vimrc} is supplied, +along with syntax coloring tools. A Vim mode for entering music and +running LilyPond is contained in the source archive in @code{$VIM} +directory. + +The LilyPond file type is detected if the file +@file{~/.vim/filetype.vim} has the following content + +@example +if exists("did_load_filetypes") + finish +endif +augroup filetypedetect + au! BufNewFile,BufRead *.ly,*.ily setf lilypond +augroup END +@end example + +Please include this path by appending the following line to your +@file{~/.vimrc} + +@example +set runtimepath+=/usr/local/share/lilypond/$@{LILYPOND_VERSION@}/vim/ +@end example + +@noindent +where $@{LILYPOND_VERSION@} is your LilyPond version. If LilyPond was not +installed in @file{/usr/local/}, then change this path accordingly. + + +@node jEdit +@subsection jEdit + +Created as a plugin for the @uref{http://@/www@/.jedit@/.org@/,jEdit} +text editor, LilyPondTool is the most feature-rich text-based tool for +editing LilyPond scores. Its features include a Document Wizard with +lyrics support to set up documents easier, and embedded PDF viewer with +advanced point-and-click support. For screenshots, demos and +installation instructions, visit +@uref{http://lilypondtool@/.organum@/.hu} + + +@node TexShop +@subsection TexShop + +The @uref{http://@/www@/.uoregon@/.edu/~koch/texshop/index@/.html,TexShop} +editor for MacOS@tie{}X can be extended to run LilyPond, lilypond-book and +convert-ly from within the editor, using the extensions available at +@uref{http://@/www@/.dimi@/.uniud@/.it/vitacolo/freesoftware@/.html}. + + +@node TextMate +@subsection TextMate + +There is a LilyPond bundle for TextMate. It may be installed by running + +@example +mkdir -p /Library/Application\ Support/TextMate/Bundles +cd /Library/Application\ Support/TextMate/Bundles +svn co http://macromates.com/svn/Bundles/trunk/Bundles/Lilypond.tmbundle/ +@end example + + +@node LilyKDE +@subsection LilyKDE + +@uref{http://lilykde.googlecode.com/,LilyKDE} is a plugin for KDE's +text editor @uref{http://kate-editor.org/,Kate}. It has a powerful Score +Wizard to quickly setup a LilyPond document and an embedded PDF viewer. + +LilyKDE can use @uref{http://www.volny.cz/smilauer/rumor/,Rumor}, +so music can entered by playing on a MIDI keyboard. + +Other features are lyric hyphenation and running LilyPond on multiple files +at once from within the KDE file manager. + + +@node Point and click +@section Point and click +@cindex point and click + + +Point and click lets you find notes in the input by clicking on them +in the PDF viewer. This makes it easier to find input that causes +some error in the sheet music. + +When this functionality is active, LilyPond adds hyperlinks to the PDF +file. These hyperlinks are sent to the web-browser, which opens a +text-editor with the cursor in the right place. + +To make this chain work, you should configure your PDF viewer to +follow hyperlinks using the @file{lilypond-invoke-editor} script +supplied with LilyPond. + +For Xpdf on UNIX, the following should be present in +@file{xpdfrc}@footnote{On UNIX, this file is found either in +@file{/etc/xpdfrc} or as @file{.xpdfrc} in your home directory.} + +@example +urlCommand "lilypond-invoke-editor %s" +@end example + +The program @file{lilypond-invoke-editor} is a small helper +program. It will invoke an editor for the special @code{textedit} +URIs, and run a web browser for others. It tests the environment +variable @code{EDITOR} for the following patterns, + +@table @code +@item emacs + this will invoke +@example +emacsclient --no-wait +@var{line}:@var{column} @var{file} +@end example +@item vim + this will invoke +@example +gvim --remote +:@var{line}:norm@var{char} @var{file} +@end example + +@item nedit +this will invoke +@example + nc -noask +@var{line} @var{file}' +@end example +@end table + +The environment variable @code{LYEDITOR} is used to override this. It +contains the command line to start the editor, where @code{%(file)s}, +@code{%(column)s}, @code{%(line)s} is replaced with the file, column +and line respectively. The setting + +@example +emacsclient --no-wait +%(line)s:%(column)s %(file)s +@end example + +@noindent +for @code{LYEDITOR} is equivalent to the standard emacsclient +invocation. + + +@cindex file size, output + +The point and click links enlarge the output files significantly. For +reducing the size of PDF and PS files, point and click may be switched +off by issuing + +@example +\pointAndClickOff +@end example + +@noindent +in a @file{.ly} file. Point and click may be explicitly enabled with + +@example +\pointAndClickOn +@end example + +Alternately, you may disable point and click with a command-line +option: + +@example +lilypond -dno-point-and-click file.ly +@end example + +@warning{You should always turn off point and click in any LilyPond +files to be distributed to avoid including path information about +your computer in the .pdf file, which can pose a security risk.} diff --git a/Documentation/application/suggestions.itely b/Documentation/application/suggestions.itely new file mode 100644 index 0000000000..8157b43112 --- /dev/null +++ b/Documentation/application/suggestions.itely @@ -0,0 +1,15 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + +@node Suggestions for writing files +@chapter Suggestions for writing files + + diff --git a/Documentation/application/updating.itely b/Documentation/application/updating.itely new file mode 100644 index 0000000000..7403c56751 --- /dev/null +++ b/Documentation/application/updating.itely @@ -0,0 +1,214 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + + +@node Updating files with convert-ly +@chapter Updating files with @command{convert-ly} + +@cindex Updating a LilyPond file +@cindex convert-ly + +The LilyPond input syntax is routinely changed to simplify it or improve +it in different ways. As a side effect of this, the LilyPond interpreter +often is no longer compatible with older input files. To remedy this, +the program @command{convert-ly} can be used to deal with most of the +syntax changes between LilyPond versions. + +@menu +* Invoking convert-ly:: +* Command line options for convert-ly:: +* Problems with convert-ly:: +@end menu + +@node Invoking convert-ly +@section Invoking @command{convert-ly} + +@command{convert-ly} uses @code{\version} statements in the input +file to detect the old version number. In most cases, to upgrade +your input file it is sufficient to run + +@example +convert-ly -e myfile.ly +@end example + +@noindent +in the directory containing the file. This will upgrade +@code{myfile.ly} in-place and preserve the original file in +@code{myfile.ly~}. + +To convert all the input files in a directory together use + +@example +convert-ly -e *.ly +@end example + +Alternatively, if you want to specify a different name for the +upgraded file, preserving the original file and name unchanged, +use + +@example +convert-ly myfile.ly > mynewfile.ly +@end example + +@command{convert-ly} always converts up to the last syntax change +handled by it. This means that the @code{\version} number left in +the file is usually lower than the version of @command{convert-ly} +itself. + +The program will list the version numbers for which conversions +have been made. If no version numbers are listed the file is +already up to date. + +@noindent +MacOS@tie{}X users may execute these commands under the menu entry +@code{Compile > Update syntax}. + +Windows users should enter these commands in a Command Prompt window, +which is usually found under +@code{Start > Accessories > Command Prompt}. + +@node Command line options for convert-ly +@section Command line options for @command{convert-ly} + +In general, the program is invoked as follows: + +@example +convert-ly [@var{option}]@dots{} @var{filename}@dots{} +@end example + + +The following options can be given: + +@table @code +@item -e,--edit +Apply the conversions direct to the input file, modifying it +in-place. + +@item -f,--from=@var{from-patchlevel} +Set the version to convert from. If this is not set, @command{convert-ly} +will guess this, on the basis of @code{\version} strings in the file. +E.g. @code{--from=2.10.25} + +@item -n,--no-version +Normally, @command{convert-ly} adds a @code{\version} indicator +to the output. Specifying this option suppresses this. + +@item -s, --show-rules +Show all known conversions and exit. + +@item --to=@var{to-patchlevel} +Set the goal version of the conversion. It defaults to the latest +available version. E.g. @code{--to=2.12.2} + +@item -h, --help +Print usage help. +@end table + +To upgrade LilyPond fragments in texinfo files, use + +@example +convert-ly --from=... --to=... --no-version *.itely +@end example + +To see the changes in the LilyPond syntax between two versions, use + +@example +convert-ly --from=... --to=... -s +@end example + + +@node Problems with convert-ly +@section Problems with @code{convert-ly} + +When running convert-ly in a Command Prompt window under Windows +on a file which has spaces in the filename or in the path to it, +it is necessary to surround the entire input file name with three +(!) sets of double quotes: + +@example +convert-ly """D:/My Scores/Ode.ly""" > "D:/My Scores/new Ode.ly" +@end example + +If the simple @command{convert-ly -e *.ly} command fails because the +expanded command line becomes too long, the @command{convert-ly} +command may be placed in a loop instead. This example for UNIX +will upgrade all @code{.ly} files in the current directory + +@example +for f in *.ly; do convert-ly -e $f; done; +@end example + +In the Windows Command Prompt window the corresponding command is + +@example +for %x in (*.ly) do convert-ly -e """%x""" +@end example + +Not all language changes are handled. Only one output option can be +specified. Automatically updating scheme and LilyPond scheme +interfaces is quite unlikely; be prepared to tweak scheme code +manually. + +@verbatim +There are a few things that the convert-ly cannot handle. Here's a list +of limitations that the community has complained about. + +This bug report structure has been chosen because convert-ly has a +structure that doesn't allow to smoothly implement all needed changes. +Thus this is just a wishlist, placed here for reference. + +1.6->2.0: + Doesn't always convert figured bass correctly, specifically things like {< +>}. Mats' comment on working around this: + To be able to run convert-ly + on it, I first replaced all occurrences of '{<' to some dummy like '{#' + and similarly I replaced '>}' with '&}'. After the conversion, I could + then change back from '{ #' to '{ <' and from '& }' to '> }'. + Doesn't convert all text markup correctly. In the old markup syntax, + it was possible to group a number of markup commands together within +parentheses, e.g. + -#'((bold italic) "string") + This will incorrectly be converted into + -\markup{{\bold italic} "string"} + instead of the correct + -\markup{\bold \italic "string"} +2.0->2.2: + Doesn't handle \partcombine + Doesn't do \addlyrics => \lyricsto, this breaks some scores with multiple +stanzas. +2.0->2.4: + \magnify isn't changed to \fontsize. + - \magnify #m => \fontsize #f, where f = 6ln(m)/ln(2) + remove-tag isn't changed. + - \applyMusic #(remove-tag '. . .) => \keepWithTag #'. . . + first-page-number isn't changed. + - first-page-number no => print-first-page-number = ##f + Line breaks in header strings aren't converted. + - \\\\ as line break in \header strings => \markup \center-align < + "First Line" "Second Line" > + Crescendo and decrescendo terminators aren't converted. + - \rced => \! + - \rc => \! +2.2->2.4: + \turnOff (used in \set Staff.VoltaBracket = \turnOff) is not properly +converted. +2.4.2->2.5.9 + \markup{ \center-align <{ ... }> } should be converted to: + \markup{ \center-align {\line { ... }} } + but now, \line is missing. +2.4->2.6 + Special LaTeX characters such as $~$ in text are not converted to UTF8. +2.8 + \score{} must now begin with a music expression. Anything else + (particularly \header{}) must come after the music. +@end verbatim + + diff --git a/Documentation/changes.tely b/Documentation/changes.tely new file mode 100644 index 0000000000..3d1b6f51fb --- /dev/null +++ b/Documentation/changes.tely @@ -0,0 +1,161 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- +@setfilename lilypond-changes.info +@settitle LilyPond Changes + +@ifhtml +@macro inputfileref{DIR,NAME} +@uref{../../\DIR\/collated-files.html#\NAME\,@file{\DIR\/\NAME\}}@c +@end macro +@macro usermanref{NAME} +@inforef{\NAME\,,../user/lilypond/lilypond}@c +@end macro +@end ifhtml + +@ifnothtml +@macro inputfileref{DIR,NAME} +@file{\DIR\/\NAME\}@c +@end macro +@macro usermanref{NAME} +See user manual, \NAME\ +@end macro +@end ifnothtml + +@macro textanchor{NAME} +@html + +@end html +@end macro + + +@documentencoding utf-8 +@documentlanguage en + +@finalout + +@node Top +@top New features in 2.13 since 2.12 + +@ifhtml +This document is also available in @uref{changes.pdf,PDF}. It is part of +the @uref{lilypond/Manuals.html,LilyPond Documentation}. +@end ifhtml + + + + +@itemize @bullet + +@ignore + +HINTS + +* only show verbatim input for syntax/input changes + +* try to be as brief possible in those cases + +* don't try to provide real-world examples, they often get too big, +which scares away people. + +* Write complete sentences. + +* only show user-visible changes. + +@end ignore + +@item +Braces in markup can now be selected by point size using the markup commands +@code{\left-brace} and @code{\right-brace}. +@lilypond[quote] +\markup { + \left-brace #35 + \hspace #2 + \right-brace #45 +} +@end lilypond + +@item +Intermediate .ps files which are created by LilyPond +during compilation are now deleted by default. To keep them, +add the following line to your input files: +@example +#(ly:set-option 'delete-intermediate-files #f) +@end example + +@item +Dashed and dotted slurs, phrasing slurs, and ties +have been made variable thickness, and +partially dashed slurs are now available: +@lilypond[quote,relative=2] +\slurDashed +c4( d e f) | +\slurDotted +g4( f e d) | +\slurHalfDashed +c4( d e f) +@end lilypond + +@item +An eyeglasses markup was added, incidating strongly to look at the +conductor for instructions: +@lilypond[quote,relative=2] +\mark \markup { \eyeglasses } +c4_\markup{ \eyeglasses } +@end lilypond + +@item +A snap-pizzicato (also known as Bartok-pizzicato) articulation was added: +@lilypond[quote,relative=2] +c4\snappizzicato +@end lilypond + +@item +Tuplet number formatting functions are now available to print other fractions +and to add notes to the number or fraction: +@lilypond[quote,relative=2] +\once \override TupletNumber #'text = + #(tuplet-number::non-default-tuplet-denominator-text 7) +\times 2/3 { c4. c4. c4. c4. } + +\once \override TupletNumber #'text = + #(tuplet-number::non-default-tuplet-fraction-text 12 7) +\times 2/3 { c4. c4. c4. c4. } +\once \override TupletNumber #'text = + #(tuplet-number::append-note-wrapper + (tuplet-number::non-default-tuplet-fraction-text 12 7) "8") +\times 2/3 { c4. c4. c4. c4. } + +\once \override TupletNumber #'text = + #(tuplet-number::append-note-wrapper tuplet-number::calc-denominator-text "4") +\times 2/3 { c8 c8 c8 c8 c8 c8 } +\once \override TupletNumber #'text = + #(tuplet-number::append-note-wrapper tuplet-number::calc-fraction-text "4") +\times 2/3 { c8 c8 c8 c8 c8 c8 } + +\once \override TupletNumber #'text = + #(tuplet-number::fraction-with-notes "4." "8") +\times 2/3 { c4. c4. c4. c4. } +\once \override TupletNumber #'text = + #(tuplet-number::non-default-fraction-with-notes 12 "8" 4 "4") +\times 2/3 { c4. c4. c4. c4. } +@end lilypond + +@item +FretBoards now have a chordChanges property to keep repeated FretBoard objects +from being typeset. + + + +@end itemize + + + +@ifhtml +For older news, go to +@uref{http://lilypond.org/doc/v2.12/Documentation/topdocs/NEWS.html}, +@uref{http://lilypond.org/doc/v2.10/Documentation/topdocs/NEWS.html}, +or @uref{../,go back} to the Documentation index. + + +@end ifhtml + +@bye diff --git a/Documentation/common-macros.itexi b/Documentation/common-macros.itexi new file mode 100644 index 0000000000..985bce595d --- /dev/null +++ b/Documentation/common-macros.itexi @@ -0,0 +1,219 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + + +@c Don't replace quotes with directed quotes. + +@set txicodequoteundirected +@set txicodequotebacktick + + +@c ***** Displaying text ***** + +@c We need this since @q{\} doesn't work with makeinfo 4.11 -- +@c say @q{@bs{}} instead. + +@macro bs +\\ +@end macro + + +@ifnotinfo + +@macro notation{TEXT} +@var{\TEXT\} +@end macro + +@end ifnotinfo + +@ifinfo + +@macro notation{TEXT} +\TEXT\ +@end macro + +@end ifinfo + + +@macro smallspace +@sp 1 +@end macro + + +@c ***** Displaying images not generated by lilypond-book ***** + +@c Current installation setup of Info docs requires that all images are +@c expected to be found in the `lilypond/' subdirectory. `lilypond-book' +@c already generates proper @image commands for images of music; these +@c macro definitions do the same for other images. + +@ifnotinfo + +@macro sourceimage{FILENAME,WIDTH,HEIGHT,ALTTEXT} +@image{pictures/\FILENAME\,\WIDTH\,\HEIGHT\,\ALTTEXT\} +@end macro + +@end ifnotinfo + +@ifinfo + +@macro sourceimage{FILENAME,WIDTH,HEIGHT,ALTTEXT} +@image{lilypond/pictures/\FILENAME\,\WIDTH\,\HEIGHT\,\ALTTEXT\} +@end macro + +@end ifinfo + + +@c ***** Headers ***** + +@ifclear snippets-sections +@macro lydoctitle {TEXT} +@emph{\TEXT\} +@end macro +@end ifclear + +@c ***** Indexing ***** + +@c Don't remove the `@c' within the macro definition! See section 19.3, +@c `Macro Details and Caveats', in the texinfo info file for explanation. + +@macro funindex {TEXT} +@findex \TEXT\ +@kindex \TEXT\ +@c +@end macro + + +@c ***** Macros specific to translated docs ***** + +@c ugh, cannot set/define global variable 'translationof' in any way :-( + +@iftex + +@macro translationof{TEXT} +@end macro + +@end iftex + +@ifinfo + +@macro translationof{TEXT} +@set translationof \TEXT\ +@end macro + +@end ifinfo + +@ifhtml + +@ifset bigpage +@macro untranslated +@end macro +@end ifset + +@ifclear bigpage +@macro untranslated +UNTRANSLATED NODE: IGNORE ME +@end macro +@end ifclear + +@end ifhtml + +@ifnothtml + +@macro untranslated +@end macro + +@end ifnothtml + + +@c ***** Macros specific to the web site ***** + +@ifset web + +@macro help{TEXT} +@html +
+ + Help wanted: + \TEXT\ +
+@end html +@end macro + +@macro divId {ID} +@html +
+@end html +@end macro + +@macro divClass {CLASS} +@html +
+@end html +@end macro + +@macro divEnd +@c keep the space for proper nesting of

+ +@html +
+@end html +@end macro + + +@c not strictly necessary, but it makes things easier for updating news +@macro newsItem +@html +
+@end html +@end macro + +@macro newsEnd +@c keep the space for proper nesting of

+ +@html +
+@end html +@end macro + + + +@macro imageClickable{IMAGE-FILE, MORE-TEXT, CLICK-FILE, POSITION} +@html +
+ + \IMAGE-FILE\ + +

+ \MORE-TEXT\ +

+
+@end html +@ifnothtml +FIXME: broken image +@c @image{\IMAGE-FILE\} +@end ifnothtml +@end macro + +@macro imageFloat{IMAGE-FILE, POSITION} +@html +\IMAGE-FILE\ +@end html +@ifnothtml +FIXME: broken image +@c @image{\IMAGE-FILE\} +@end ifnothtml +@end macro + +@macro imageId{ID, IMAGE-FILE, ALT} +@html +
+ \ALT\ +
+@end html +@ifnothtml +FIXME: broken image +@c @image{\IMAGE-FILE\} +@end ifnothtml +@end macro + +@end ifset diff --git a/Documentation/contributor.texi b/Documentation/contributor.texi new file mode 100644 index 0000000000..ec1954e12a --- /dev/null +++ b/Documentation/contributor.texi @@ -0,0 +1,126 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore +@setfilename lilypond-contributor.info +@settitle GNU LilyPond Contributor's Guide +@documentencoding UTF-8 +@documentlanguage en + +@include macros.itexi + +@afourpaper + +@ifnottex +@node Top +@top GNU LilyPond --- Contributor's Guide +@chapheading The music typesetter +@end ifnottex + + +@ifhtml +@ifclear bigpage +This document is also available as a +@uref{source/Documentation/contributor.pdf,PDF} and as +@c FIXME: update @uref{} stuff. +@uref{source/Documentation/contributor-big-page.html,one big page}. +@end ifclear +@ifset bigpage +This document is also available as a +@uref{source/Documentation/devel/contributor.pdf,PDF} and as a +@uref{source/Documentation/devel/contributor/index.html,HTML indexed multiple pages}. +@end ifset +@end ifhtml + + +@iftex +@exampleindent 0 +@finalout + +@titlepage +@title LilyPond +@subtitle The music typesetter +@titlefont{Contributor's Guide} +@author The LilyPond development team + +Copyright @copyright{} 1999--2008 by the authors + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections. +A copy of the license is included in the section entitled ``GNU +Free Documentation License''. +@end quotation + +@vskip 20pt + +For LilyPond version +@end titlepage +@end iftex + +@copying +Copyright @copyright{} 1999--2008 by the authors + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections. +A copy of the license is included in the section entitled ``GNU +Free Documentation License''. +@end quotation +@end copying + +@ifnottex +This file documents contributing to GNU LilyPond. + +Copyright 1999--2008 by the authors + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections. +A copy of the license is included in the section entitled ``GNU +Free Documentation License''. +@end quotation +@end ifnottex + +@ifnottex + +More information can be found at +@uref{http://@/www@/.lilypond@/.org/}. The website contains +on-line copies of this and other documentation. + +@menu +* Starting with git:: +* Compiling LilyPond:: +* Documentation work:: +* Website work:: +* LSR work:: +* Issues:: +* Regression tests:: +* Programming work:: +* Release work:: +@end menu +@end ifnottex + +@contents + +@include contributor/git-starting.itexi +@include contributor/compiling.itexi +@include contributor/doc-work.itexi +@include contributor/website-work.itexi +@include contributor/lsr-work.itexi +@include contributor/issues.itexi +@include contributor/regressions.itexi +@include contributor/programming-work.itexi +@include contributor/release-work.itexi + +@bye + diff --git a/Documentation/contributor/GNUmakefile b/Documentation/contributor/GNUmakefile new file mode 100644 index 0000000000..c93c9e0624 --- /dev/null +++ b/Documentation/contributor/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/contributor/basic-compile.itexi b/Documentation/contributor/basic-compile.itexi new file mode 100644 index 0000000000..981879ea86 --- /dev/null +++ b/Documentation/contributor/basic-compile.itexi @@ -0,0 +1,534 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + + +@c DO NOT TRANSLATE THIS FILE + +@c include any node/sections from the higher-level *texi file. +@c @n ode Compiling from source +@c @s ection Compiling from source + +@menu +* Downloading source code:: +* Requirements:: +* Building LilyPond:: +* Building documentation:: +* Testing LilyPond:: +* Problems:: +@end menu + +@node Downloading source code +@subsection Downloading source code + +Download source + +@itemize +@item tarballs from +@uref{http://lilypond.org/download/} by HTTP. +@item tarballs from +@uref{http://download.linuxaudio.org/lilypond/} by HTTP. +@item +GIT from @uref{http://git.sv.gnu.org/gitweb/?p=lilypond.git;a=summary,git.sv.gnu.org} + +@example +git clone git://git.sv.gnu.org/lilypond.git +@end example + +The repository does not contain generated files. To create +@file{configure}, run +@example +./autogen.sh +@end example +@end itemize + +For information on packaging, see @uref{http://lilypond.org/devel}. + + +@node Requirements +@subsection Requirements + +@unnumberedsubsubsec Compilation + +In addition to the packages needed for running LilyPond (see below), you +need the following extra packages for building. + +Below is a full list of packages needed to build LilyPond. However, for +most common distributions there is an easy way of installing most all +build dependencies in one go + +@multitable @columnfractions .5 .5 +@headitem Distribution +@tab Command + +@item Debian, Ubuntu +@tab @code{sudo apt-get build-dep lilypond} + +@item Fedora, RHEL +@tab @code{sudo yum-builddep lilypond} + +@item openSUSE, SLED +@c sorry for the idiosyncratic command, I really asked and argued +@c for "zypper build-dep" :-( +@tab @code{sudo zypper --build-deps-only source-install lilypond} + +@end multitable + +When installing a binary package FOO, you may need to install the +FOO-devel, libFOO-dev or FOO-dev package too. + +@itemize + +@item @uref{http://fontforge.sf.net/,FontForge} 20060125 or newer. + +@item @uref{http://metafont.tutorial.free.fr/,MetaFont} (mf-nowin, mf, mfw or +mfont binaries) and @uref{http://cm.bell-labs.com/who/hobby/MetaPost.html,MetaPost} +(mpost binary), usually packaged with a @LaTeX{} distribution like +tetex or texlive. + +@item @uref{http://www.lcdf.org/~eddietwo/type/#t1utils,t1utils} +(version 1.33 or newer recommended). + +@item New Century Schoolbook fonts, as PFB files. These are shipped with +X11 and Ghostscript, and are named @file{c059033l.pfb} +@file{c059036l.pfb}, @file{c059013l.pfb} and @file{c059016l.pfb}. + +@item @uref{http://www.gnu.org/software/guile/guile.html,GUILE} (version +1.8.2 or newer). If you are installing binary packages, you may need to +install guile-devel or guile-dev or libguile-dev too. + +@item @uref{ftp://ftp.gnu.org/gnu/texinfo/,Texinfo} (version 4.11 or newer). + +@item @uref{http://gcc.gnu.org/, The GNU c++ compiler} (version 3.4 or +newer. 4.x is strongly recommended). + +@item @uref{http://www.python.org,Python} (version 2.4 or newer) + +@item @uref{ftp://ftp.gnu.org/gnu/make/,GNU Make} (version 3.78 or newer). + +@item @uref{http://www.gnu.org/software/gettext/gettext.html,gettext} +(version 0.17 or newer). + +@item @uref{http://www.gnu.org/software/flex/,Flex}. + +@item @uref{http://www.perl.org/,Perl}. + +@item @uref{http://www.gnu.org/software/bison/,GNU Bison}. + +@item All packages required for running, including development packages with +header files and libraries. + +@end itemize + + +@unnumberedsubsubsec Running requirements + +Running LilyPond requires proper installation of the following software + +@itemize + +@item @uref{http://www.freetype.org/,Freetype} (version 2.1.10 or newer). +@item @uref{http://fontconfig.org/,FontConfig} (version 2.2 or newer). +@item @uref{http://www.pango.org/,Pango} (version 1.12 or newer). +@item @uref{http://www.gnu.org/software/guile/guile.html,GUILE} +(version 1.8.2 or newer), or patch 1.8.1 with +@uref{http://lilypond.org/vc/gub.darcs/patches/guile-1.8-rational.patch}. +@item @uref{http://www.python.org,Python} (version 2.4 or newer). +@item @uref{http://www.ghostscript.com,Ghostscript} (version 8.15 or +newer. 8.60 recommended) +@item Dejaview. (This is normally installed by default) +@end itemize + +International fonts are required to create music with international text +or lyrics. + + +@unnumberedsubsubsec Requirements for building documentation + +You can view the documentation online at +@uref{http://lilypond.org/doc/}, but you can also build it locally. +This process requires a successful compile of LilyPond, and some +additional tools and packages: + +@itemize +@item The @uref{http://netpbm.sourceforge.net/,netpbm utilities} +@item ImageMagick +@item International fonts (see input/regression/utf-8.ly for hints +about which font packages are necessary for your platform) +@item Ghostscript 8.60 or newer, or 8.50 with the patch from +@uref{http://bugs.ghostscript.com/show_bug.cgi?id=688154} +and the patch from +@uref{http://bugs.ghostscript.com/show_bug.cgi?id=688017}. +@item @uref{http://www.nongnu.org/texi2html/,Texi2HTML} 1.80 or newer +@item rsync +@end itemize + + +@node Building LilyPond +@subsection Building LilyPond + +@unnumberedsubsubsec Compiling + +To install GNU LilyPond, type + +@example +gunzip -c lilypond-x.y.z | tar xf - +cd lilypond-x.y.z +./configure # run with --help for applicable options +make +su -c 'make install' +@end example + +@noindent +If you are not root, you should choose a @code{--prefix} argument that +points into your home directory, e.g. + +@example +./configure --prefix=$HOME/usr +@end example + + +@unnumberedsubsubsec Compiling for multiple platforms + +If you want to build multiple versions of LilyPond with different +configuration settings, you can use the @code{--enable-config=CONF} +option of @command{configure}. You should use @code{make conf=CONF} +to generate the output in @file{out-CONF}. For example, suppose you +want to build with and without profiling, then use the following for +the normal build + +@example +./configure --prefix=$HOME/usr/ --enable-checking +make +make install +@end example + +and for the profiling version, specify a different configuration + +@example +./configure --prefix=$HOME/usr/ --enable-profiling --enable-config=prof --disable-checking +make conf=prof +make conf=prof install +@end example + + +@unnumberedsubsubsec Compiling outside the source tree + +It is possible to compile LilyPond in a build tree different from the +source tree, with @code{--srcdir} option of @command{configure}: + +@example +mkdir lily-build && cd lily-build +@var{sourcedir}/configure --srcdir=@var{sourcedir} + +@end example + + +@unnumberedsubsubsec Useful @command{make} variables + +If a less verbose build output if desired, the variable +@code{QUIET_BUILD} may be set to @code{1} on @command{make} command +line, or in @file{local.make} at top of the build tree. + + +@node Building documentation +@subsection Building documentation + +This requires a successful compile of LilyPond, or using an external +LilyPond binary. + +@menu +* Commands for building documentation:: Compiling and installing the documentation. +* Building documentation without compiling LilyPond:: Using a LilyPond binary already installed. +@end menu + +@node Commands for building documentation +@unnumberedsubsubsec Commands for building documentation + +The documentation is built by issuing + +@example +make doc +@end example + +After compilation, the HTML documentation tree is available in +@file{out-www/offline-root/}, and can be browsed locally. + +The HTML, PDF and if available Info files can be installed into the +standard documentation path by issuing + +@example +make install-doc +@end example + +@noindent +This also installs Info documentation with images if the installation +prefix is properly set; otherwise, instructions to complete proper +installation of Info documentation are printed on standard output. + +Compilation of documentation in Info format with images can be done +separately by issuing + +@example +make info +@end example + +@noindent +Separate installation of this documentation is done by issuing + +@example +make install-info +@end example + +@noindent +Note that to get the images in Info documentation, @code{install-doc} +target creates symbolic links to HTML and PDF installed documentation +tree in @file{@var{prefix}/share/info}, in order to save disk space, +whereas @code{install-info} copies images in +@file{@var{prefix}/share/info} subdirectories. + +It is possible to build a documentation tree in +@file{out-www/online-root/}, with special processing, so it can be +used on a website with content negotiation for automatic language +selection; this can be achieved by issuing + +@example +make WEB_TARGETS=online doc +@end example + +@noindent +and both @q{offline} and @q{online} targets can be generated by issuing + +@example +make WEB_TARGETS="offline online" doc +@end example + +Several targets are available to clean the documentation build and +help with maintaining documentation; an overview of these targets is +available with + +@example +make help +@end example + +@noindent +from every directory in the build tree. Most targets for +documentation maintenance are available from @file{Documentation/}; +@c FIXME: xref to CG +for more information, see the Contributors' Guide, section +@emph{Documentation work}. + +The makefile variable @code{QUIET_BUILD} may be set to @code{1} for a +less verbose build output, just like for building the programs. + + +@knownissues + +The most time consuming task for building the documentation is running +LilyPond to build images of music, and there cannot be several +simultaneously running @command{lilypond-book} instances, so @code{-j} +@command{make} option does not significantly speed up the build process. +To help speed it up, the makefile variable @var{CPU_COUNT} may be set +in @file{local.make} or on the command line to the number of +@code{.ly} files that LilyPond should process simultaneously, e.g. on +a bi-processor or dual core machine + +@example +make -j3 CPU_COUNT=3 doc +@end example + +@noindent +The recommended value of @var{CPU_COUNT} is one plus the number of +cores or processors, but it is advisable to set it to a smaller value +if your system has not enough RAM to run that many simultaneous +LilyPond instances. + +If source files have changed since last documentation build, output +files that need to be rebuilt are normally rebuilt, even if you do not +run @code{make doc-clean} first. However, building dependencies in the +documentation are so complex that rebuilding of some targets may not +be triggered as they should be; a workaround is to force rebuilding +by touching appropriate files, e.g. + +@example +touch Documentation/notation/*.itely +touch Documentation/snippets/*.ly +@end example + + +@node Building documentation without compiling LilyPond +@unnumberedsubsubsec Building documentation without compiling LilyPond + +The documentation can be built locally without compiling LilyPond +binary, if LilyPond is already installed on your system. + +From a fresh Git checkout, do + +@example +./autogen.sh # ignore any warning messages +cp GNUmakefile.in GNUmakefile +make -C python +nice make LILYPOND_EXTERNAL_BINARY=/path/to/bin/lilypond doc +@end example + +Please note that this may break sometimes -- for example, if a new +feature is added with a test file in input/regression, even the latest +development release of LilyPond will fail to build the docs. + +You may build the manual without building all the @file{input/*} stuff +(i.e. mostly regression tests): change directory, for example to +@file{Documentation/}, issue @code{make doc}, which will build +documentation in a subdirectory @file{out-www} from the source files in +current directory. In this case, if you also want to browse the +documentation in its post-processed form, change back to top directory +and issue + +@example +make out=www WWW-post +@end example + +@knownissues + +You may also need to create a script for @command{pngtopnm} and +@code{pnmtopng}. On GNU/Linux, I use this: + +@verbatim +export LD_LIBRARY_PATH=/usr/lib +exec /usr/bin/pngtopnm "$@" +@end verbatim + +On MacOS@tie{}X, I use this: + +@verbatim +export DYLD_LIBRARY_PATH=/sw/lib +exec /sw/bin/pngtopnm "$@" +@end verbatim + + + +@node Testing LilyPond +@subsection Testing LilyPond + +@html + +@end html + +LilyPond comes with an extensive suite that exercises the entire +program. This suite can be used to automatically check the impact of a +change. This is done as follows + +@example +make test-baseline +@emph{## apply your changes, compile} +make check +@end example + +This will leave an HTML page @file{out/test-results/index.html}. This +page shows all the important differences that your change introduced, +whether in the layout, MIDI, performance or error reporting. + +To rerun tests, use + +@example +make test-redo @emph{## redo files differing from baseline} +make test-clean @emph{## remove all test results} +@end example + +@noindent +and then run @code{make check} again. + +For tracking memory usage as part of this test, you will need GUILE +CVS; especially the following patch: +@uref{http://lilypond.org/vc/gub.darcs/patches/guile-1.9-gcstats.patch}. + +For checking the coverage of the test suite, do the following + +@example +./scripts/auxiliar/build-coverage.sh +@emph{# uncovered files, least covered first} +./scripts/auxiliar/coverage.py --summary out-cov/*.cc +@emph{# consecutive uncovered lines, longest first} +./scripts/auxiliar/coverage.py --uncovered out-cov/*.cc +@end example + + +@node Problems +@subsection Problems + +For help and questions use @email{lilypond-user@@gnu.org}. Send bug +reports to @email{bug-lilypond@@gnu.org}. + +Bugs that are not fault of LilyPond are documented here. + +@unnumberedsubsubsec Bison 1.875 + +There is a bug in bison-1.875: compilation fails with "parse error +before `goto'" in line 4922 due to a bug in bison. To fix, please +recompile bison 1.875 with the following fix + +@example +$ cd lily; make out/parser.cc +$ vi +4919 out/parser.cc +# append a semicolon to the line containing "__attribute__ ((__unused__)) +# save +$ make +@end example + + +@unnumberedsubsubsec Solaris + +Solaris7, ./configure + +@file{./configure} needs a POSIX compliant shell. On Solaris7, +@file{/bin/sh} is not yet POSIX compliant, but @file{/bin/ksh} or bash +is. Run configure like + +@example +CONFIG_SHELL=/bin/ksh ksh -c ./configure +@end example + +@noindent +or + +@example +CONFIG_SHELL=/bin/bash bash -c ./configure +@end example + +@unnumberedsubsubsec FreeBSD + +To use system fonts, dejaview must be installed. With the default +port, the fonts are installed in @file{usr/X11R6/lib/X11/fonts/dejavu}. + +Open the file @file{$LILYPONDBASE/usr/etc/fonts/local.conf} and add the +following line just after the @code{} line. (Adjust as necessary +for your hierarchy.) + +@example +/usr/X11R6/lib/X11/fonts +@end example + + +@unnumberedsubsubsec International fonts + +On MacOS@tie{}X, all fonts are installed by default. However, finding all +system fonts requires a bit of configuration; see +@uref{http://lists.gnu.org/archive/html/lilypond-user/2007-03/msg00472.html, +this post} on the @code{lilypond-user} mailing list. + +On Linux, international fonts are installed by different means on +every distribution. We cannot list the exact commands or packages +that are necessary, as each distribution is different, and the exact +package names within each distribution changes. Here are some +hints, though: + +@verbatim +Red Hat Fedora + + taipeifonts fonts-xorg-truetype ttfonts-ja fonts-arabic \ + ttfonts-zh_CN fonts-ja fonts-hebrew + +Debian GNU/Linux + + apt-get install emacs-intl-fonts xfonts-intl-.* \ + ttf-kochi-gothic ttf-kochi-mincho \ + xfonts-bolkhov-75dpi xfonts-cronyx-100dpi xfonts-cronyx-75dpi +@end verbatim + diff --git a/Documentation/contributor/compiling.itexi b/Documentation/contributor/compiling.itexi new file mode 100644 index 0000000000..014288eadd --- /dev/null +++ b/Documentation/contributor/compiling.itexi @@ -0,0 +1,165 @@ +@c -*- coding: us-ascii; mode: texinfo; -*- + +@node Compiling LilyPond +@chapter Compiling LilyPond + +@menu +* Compiling from source:: +* Concurrent Stable and Development Versions:: +* Using a Virtual Machine to Compile Lilypond:: +@end menu + +@node Compiling from source +@section Compiling from source + +@include contributor/basic-compile.itexi + + +@node Concurrent Stable and Development Versions +@section Concurrent Stable and Development Versions + +It can be useful to have both the stable and the development versions +of Lilypond available at once. One way to do this on GNU/Linux is to +install the stable version using the precompiled binary, and run the +development version from the source tree. After running @command{make +all} from the top directory of the Lilypond source files, there will +be a binary called @code{lilypond} in the @code{out} directory: + +@example +<@var{path to}>/lilypond/out/bin/lilypond +@end example + +This binary can be run without actually doing the @code{make +install} command. The advantage to this is that you can have all +of the latest changes available after pulling from git and running +@code{make all}, without having to uninstall the old version and +reinstall the new. + +So, to use the stable version, install it as usual and use the +normal commands: + +@example +lilypond foobar.ly +@end example + +To use the development version, create a link to the binary in the +source tree by saving the following line in a file somewhere in your +@code{$PATH}: + +@example +exec <@var{path to}>/lilypond/out/bin/lilypond "$@@" +@end example + +Save it as @code{Lilypond} (with a capital L to distinguish it +from the stable @code{lilypond}), and make it executable: + +@example +chmod +x Lilypond +@end example + +Then you can invoke the development version this way: + +@example +Lilypond foobar.ly +@end example + + +TODO: ADD + +- other compilation tricks for developers + + +@node Using a Virtual Machine to Compile Lilypond +@section Using a Virtual Machine to Compile Lilypond + +Since it is not possible to compile Lilypond on Windows, some +developers may find it useful to install a GNU/Linux virtual +machine. A disk image with a special remix of @strong{Ubuntu} +has been created for this purpose. It has all of the Lilypond +build dependencies in place, so that once installed, it is +ready to compile both Lilypond and the Documentation. +The @code{lilybuntu} remix is available for download here: + +@example +@uref{http://@/prodet.hu/@/bert/@/lilydev/@/lilybuntu.iso} +@end example + +We do not necessarily recommend any one virtualization tool, +however the @code{lilybuntu} remix is known to work well on +@uref{http://www.virtualbox.org/wiki/Downloads, Sun VirtualBox}, +which is a free download. Consult your virtualization software's +documentation for instructions on setting up the software and +for general instructions on installing a virtual machine. + +Steps to setting up @code{lilybuntu} in a virtual machine: + +@enumerate +@item Download the @code{lilybuntu} disk image. + +@item Install @code{lilybuntu}. You will use the @code{.iso} +file as the boot disk. It should not be necessary to burn it +to a DVD, but consult the documentation for your virtualization +software for specific instructions. If possible, use at least +the recommended amount of RAM for the virtual machine (384 MB on +VirtualBox), and use a dynamically expanding virtual hard drive +starting with at least 5-6 GB of space, more if you can spare it. +The Ubuntu installer should be straightforward, although in the +partitioning stage do not be afraid to select @qq{use entire disk,} +since this is only your @strong{virtual disk} and not your +machine's actual hard drive. + +@item After installation is complete, restart the virtual +machine. (If you are using @strong{VirtualBox}, you may wish +to install the @qq{Guest Additions,} which will allow you to +use the virtual machine in full screen.) + +@item Open a @strong{terminal}. +(@code{Applications > Accessories > Terminal}) + +@item Open @strong{Firefox} (there's an icon for it on the +panel at the top of the screen) and go to the online Lilypond +@uref{http://lilypond.org/doc/v2.13/Documentation/devel/contrib-guide, Contributor's Guide}. + +@item To retrieve the Lilypond source code from @code{git}, +copy-and-paste each command from the CG @qq{Main source code} +section into the terminal. (paste into the terminal with keystroke +@code{CTRL+SHIFT+V}) + +@item Prepare to build Lilypond by running the configuration script. +Type + +@example +./autogen.sh +@end example + +When it is finished you should be presented +with the three most common @code{make} options: + +@example +Type: + make all to build LilyPond + make install to install LilyPond + make help to see all possible targets + +Edit local.make for local Makefile overrides. +@end example + +@item First type @code{make all} to build Lilypond. This will take +a while. + +@item When Lilypond is finished building, build the documentation +by typing + +@example +make doc +@end example + +Depending on your system specs it could take from 30-60 minutes +to finish. + +@end enumerate + +At this point everything has been compiled. +You may install Lilypond using @code{make install}, or you may wish +to set up your system with concurrent stable and development +versions as described in the previous section. diff --git a/Documentation/contributor/doc-translation-list.itexi b/Documentation/contributor/doc-translation-list.itexi new file mode 100644 index 0000000000..9184fede9f --- /dev/null +++ b/Documentation/contributor/doc-translation-list.itexi @@ -0,0 +1,85 @@ +@c -*- coding: us-ascii; mode: texinfo; -*- + +@c Word counts are updated automatically by translations-status.py + +Translation of @file{Documentation/foo/bar} should be +@file{Documentation/@var{LANG}/foo/bar}. Unmentioned files should not +be translated. + +Priorities: +@itemize +@item 1. delivery, +@item 2. 3. 4. 5. later, +@item 6. optional. +@end itemize + +Files marked with priority 3, 4 or 5 may be submitted individually. +Word counts (excluding LilyPond snippets) are given for each file. + +@example +-1- Documentation index and Tutorial +429 learning.tely +6368 learning/tutorial.itely +23 dedication.itely +432 macros.itexi +171 index.html.in +161 translations.template.html.in +6522 po/lilypond-doc.pot (translate to po/@var{MY_LANGUAGE}.po) +--- lilypond-texi2html.init (section TRANSLATIONS) +14106 total + +-2- Introduction and beginning of Application Usage +411 learning/preface.itely +3866 learning/introduction.itely +407 application.tely +193 application/install.itely +1149 application/setup.itely +3023 application/running.itely +9049 total + +-3- Learning manual +10323 learning/fundamental.itely -- Fundamental concepts +14834 learning/tweaks.itely -- Tweaking output +5033 learning/working.itely -- Working on LilyPond files +498 learning/templates.itely -- Templates +30688 total + +-4- Notation reference +724 notation.tely +91 notation/notation.itely -- Musical notation +3155 notation/pitches.itely +4757 notation/rhythms.itely +1392 notation/expressive.itely +555 notation/repeats.itely +1456 notation/simultaneous.itely +1689 notation/staff.itely +919 notation/editorial.itely +2412 notation/text.itely +76 notation/specialist.itely -- Specialist notation +2725 notation/vocal.itely +1516 notation/chords.itely +702 notation/piano.itely +810 notation/percussion.itely +826 notation/guitar.itely +66 notation/strings.itely +242 notation/bagpipes.itely +4487 notation/ancient.itely +6170 notation/input.itely -- Input syntax +2164 notation/non-music.itely -- Non-musical notation +8663 notation/spacing.itely -- Spacing issues +11800 notation/changing-defaults.itely -- Changing defaults +5187 notation/programming-interface.itely -- Interfaces for programmers +611 notation/notation-appendices.itely -- Notation manual tables +252 notation/cheatsheet.itely -- Cheat sheet +63447 total + +-5- Application usage +3248 application/lilypond-book.itely -- LilyPond-book +1171 application/converters.itely -- Converting from other formats +4419 total + +-6- Appendices whose translation is optional +310 notation/literature.itely +1222 learning/scheme-tutorial.itely (should be revised first) +1532 total +@end example diff --git a/Documentation/contributor/doc-work.itexi b/Documentation/contributor/doc-work.itexi new file mode 100644 index 0000000000..08dd49f2fd --- /dev/null +++ b/Documentation/contributor/doc-work.itexi @@ -0,0 +1,1740 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@node Documentation work +@chapter Documentation work + +@menu +* Introduction to documentation work:: +* Documentation suggestions:: +* Texinfo introduction and usage policy:: +* Documentation policy:: +* Tips for writing docs:: +* Updating docs with convert-ly:: +* Translating the documentation:: +@end menu + + +@node Introduction to documentation work +@section Introduction to documentation work + +Our documentation tries to adhere to our @ref{Documentation +policy}. This policy contains a few items which may seem odd. +One policy in particular is often questioned by potential +contributors: we do not repeat material in the Notation Reference, +and instead provide links to the @qq{definitive} presentation of +that information. Some people point out, with good reason, that +this makes the documentation harder to read. If we repeated +certain information in relevant places, readers would be less +likely to miss that information. + +That reasoning is sound, but we have two counter-arguments. +First, the Notation Reference -- one of @emph{five} manuals for +users to read -- is already over 500 pages long. If we repeated +material, we could easily exceed 1000 pages! Second, and much +more importantly, LilyPond is an evolving project. New features +are added, bugs are fixed, and bugs are discovered and documented. +If features are discussed in multiple places, the documentation +team must find every instance. Since the manual is so large, it +is impossible for one person to have the location of every piece +of information memorized, so any attempt to update the +documentation will invariably omit a few places. This second +concern is not at all theoretical; the documentation used to be +plagued with inconsistent information. + +If the documentation were targeted for a specific version -- say, +LilyPond 2.10.5 -- and we had unlimited resources to spend on +documentation, then we could avoid this second problem. But since +LilyPond evolves (and that is a very good thing!), and since we +have quite limited resources, this policy remains in place. + +A few other policies (such as not permitting the use of tweaks in +the main portion of NR 1+2) may also seem counter-intuitive, but +they also stem from attempting to find the most effective use of +limited documentation help. + + +@node Documentation suggestions +@section Documentation suggestions + +@subheading Small additions + +For additions to the documentation, + +@enumerate + +@item +Tell us where the addition should be placed. Please include both +the section number and title (i.e. "LM 2.13 Printing lyrics"). + +@item +Please write exact changes to the text. + +@item +A formal patch to the source code is @emph{not} required; we can +take care of the technical details. Here is an example of a +perfect documentation report: + +@verbatim +To: lilypond-devel@gnu.org +From: helpful-user@example.net +Subject: doc addition + +In LM 2.13 (printing lyrics), above the last line ("More options, +like..."), please add: + +---- +To add lyrics to a divided part, use blah blah blah. For example, + +\score { + \notes {blah <> } + \lyrics {blah <> } + blah blah blah +} +---- + +In addition, the second sentence of the first paragraph is +confusing. Please delete that sentence (it begins "Users +often...") and replace it with this: +---- +To align lyrics with something, do this thing. +---- + +Have a nice day, +Helpful User +@end verbatim + +@end enumerate + + +@subheading Larger contributions + +To replace large sections of the documentation, the guidelines are +stricter. We cannot remove parts of the current documentation +unless we are certain that the new version is an improvement. + +@enumerate + +@item +Ask on the lilypond-devel maillist if such a rewrite is necessary; +somebody else might already be working on this issue! + +@item +Split your work into small sections; this makes it much easier to +compare the new and old documentation. + +@item +Please prepare a formal git patch. + +@end enumerate + +Once you have followed these guidelines, please send a message to +lilypond-devel with your documentation submissions. Unfortunately +there is a strict “no top-posting” check on the mailist; to avoid +this, add: + +> I'm not top posting. + +(you must include the > ) to the top of your documentation +addition. + +We may edit your suggestion for spelling, grammar, or style, and +we may not place the material exactly where you suggested, but if +you give us some material to work with, we can improve the manual +much faster. Thanks for your interest! + + +@node Texinfo introduction and usage policy +@section Texinfo introduction and usage policy + +@menu +* Texinfo introduction:: +* Documentation files:: +* Sectioning commands:: +* LilyPond formatting:: +* Text formatting:: +* Syntax survey:: +* Other text concerns:: +@end menu + + +@node Texinfo introduction +@subsection Texinfo introduction + +The language is called Texinfo; you can see its manual here: + +@uref{http://www.gnu.org/software/texinfo/manual/texinfo/} + +However, you don't need to read those docs. The most important +thing to notice is that text is text. If you see a mistake in the +text, you can fix it. If you want to change the order of +something, you can cut-and-paste that stuff into a new location. + +@warning{Rule of thumb: follow the examples in the existing docs. +You can learn most of what you need to know from this; if you want +to do anything fancy, discuss it on @code{lilypond-devel} first.} + + +@node Documentation files +@subsection Documentation files + +All manuals live in @file{Documentation/}. + +In particular, there are four user manuals, their respective master +source files are @file{learning.tely} (LM, Learning Manual), +@file{notation.tely} (NR, Notation Reference), +@file{music-glossary.tely} (MG, Music Glossary), and +@file{lilypond-program} (AU). Each chapter is written in a separate +file, ending in @file{.itely} for files containing lilypond code, and +@file{.itexi} for files without lilypond code, located in a subdirectory +associated to the manual (@file{learning/} for @file{learning.tely}, and +so on); list the subdirectory of each manual to determine the filename +of the specific chapter you wish to modify. + +Developer manuals live in @file{Documentation/} too. Currently there is +only one: the Contributors' Guide @file{contrib-guide.texi} you are +reading. + +Snippet files are part of documentation, and the Snippet List (SL) lives +in @file{Documentation/} just like the manuals. For information about +how to modify the snippet files and SL, see @ref{LSR work}. + + +@node Sectioning commands +@subsection Sectioning commands + +Most of the manual operates at the + +@example +@@node Foo +@@subsubsection Foo +@end example + +@noindent +level. Sections are created with + +@example +@@node Foo +@@subsection Foo +@end example + +@itemize +@item +Please leave two blank lines above a @@node; this makes it +easier to find sections in texinfo. + +@item +Sectioning commands (@@node and @@section) must not appear +inside an @@ignore. Separate those commands with a space, ie @@n +ode. + +@end itemize + +Nodes must be included inside a + +@example +@@menu +* foo:: +* bar:: +@@end menu +@end example + +@noindent +construct. These are easily constructed with the emacs +@code{M-x texinfo-all-menus-update} construct, or by this +command-line script: + +@example +#!/bin/sh +emacs $1 -batch -f texinfo-all-menus-update -f save-buffer +@end example + +@noindent +(save the above as something like @command{texinfo-menus.sh}, make +it executable, then run @command{texinfo-menus.sh foo.itely}) + + +@node LilyPond formatting +@subsection LilyPond formatting + +@itemize + +@item +Use two spaces for indentation in lilypond examples. (no +tabs) + +@item +All text strings should be prefaced with #. LilyPond does +not strictly require this, but it is helpful to get users +accustomed to this scheme construct. ie @code{\set +Staff.instrumentName = #"cello"} + +@item +All engravers should have double-quotes around them: + +@example +\consists "Spans_arpeggio_engraver" +@end example + +Again, LilyPond does not strictly require this, but it is a useful +standard to follow. + +@item +Examples should end with a complete bar if possible. + +@item +If possible, only write one bar per line. The notes on each +line should be an independent line -- tweaks should occur on their +own line if possible. Bad: + +@example +\override textscript #'padding = #3 c1^"hi" +@end example + +Good: + +@example +\override textscript #'padding = #3 +c1^"hi" +@end example + +@item +Most LilyPond input should be produced with: + +@example +@@lilypond[verbatim,quote,relative=2] +@end example + +@noindent +or + +@example +@@lilypond[verbatim,quote,relative=1] +@end example + +If you want to use \layout@{@} or define variables, use + +@example +@@lilypond[verbatim,quote] +@end example + +In rare cases, other options may be used (or omitted), but ask first. + +@item +Inspirational headwords are produced with + +@example +@@lilypondfile[quote,ragged-right,line-width=16\cm,staffsize=16] +@{pitches-headword.ly@} +@end example + +@item +LSR snippets are linked with + +@example +@@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +@{filename.ly@} +@end example + +@noindent +excepted in Templates, where `doctitle' may be omitted. + +@item +Avoid long stretches of input code. Noone is going to read +them in print. Please create a smaller example. (the smaller +example does not need to be minimal, however) + +@item +Specify durations for at least the first note of every bar. + +@item +If possible, end with a complete bar. + +@item +Comments should go on their own line, and be placed before +the line(s) to which they refer. + +@item +Add extra spaces around @{ @} marks; ie + +@example +not: \chordmode @{c e g@} +but instead: \chordmode @{ c e g @} +@end example + +@item +If you only have one bar per line, omit bar checks. If you +put more than one bar per line (not recommended), then include bar +checks. + +@item +If you want to work on an example outside of the manual (for +easier/faster processing), use this header: + +@example +\paper @{ + indent = 0\mm + line-width = 160\mm - 2.0 * 0.4\in + ragged-right = ##t + force-assignment = #"" + line-width = #(- line-width (* mm 3.000000)) +@} + +\layout @{ +@} +@end example + +You may not change any of these values. If you are making an +example demonstrating special \paper@{@} values, contact the +Documentation Editor. + +@end itemize + + +@node Text formatting +@subsection Text formatting + +@itemize + +@item +Lines should be less than 72 characters long. (I personally +recommend writing with 66-char lines, but don't bother modifying +existing material.) + +@item +Do not use tabs. + +@item +Do not use spaces at the beginning of a line (except in +@@example or @@verbatim environments), and do not use more than a +single space between words. `makeinfo' copies the input lines +verbatim without removing those spaces. + +@item +Use two spaces after a period. + +@item +In examples of syntax, use @@var@{musicexpr@} for a music +expression. + +@item +Don't use @@rinternals@{@} in the main text. If you're +tempted to do so, you're probably getting too close to "talking +through the code". If you really want to refer to a context, use +@@code@{@} in the main text and @@rinternals@{@} in the @@seealso. + +@item +Variables or numbers which consist of a single character +(probably followed by a punctuation mark) should be tied properly, +either to the previous or the next word. Example: + +@example +The variable@@tie@{@}@@var@{a@} ... +@end example + +@item +To get consistent indentation in the DVI output it is better +to avoid the @@verbatim environment. Use the @@example +environment instead if possible, but without extraneous +indentation. For example, this + +@example +@@example + foo @{ + bar + @} +@@end example +@end example + +@noindent +should be replaced with + +@example +@@example +foo @{ + bar +@} +@@end example +@end example + +@noindent +where `@@example' starts the line (without leading spaces). + +@item +Do not compress the input vertically; this is, do not use + +@example + Beginning of logical unit + @@example + ... + @@end example + continuation of logical unit +@end example + +@noindent +but instead do + +@example +Beginning of logical unit + +@@example +... +@@end example + +@@noindent +continuation of logical unit +@end example + +This makes it easier to avoid forgetting the `@@noindent'. Only +use @@noindent if the material is discussing the same material; +new material should simply begin without anything special on the +line above it. + +@item +in @@itemize use @@item +on a separate line like this: + +@example +@@itemize +@@item +Foo + +@@item +Bar +@end example + +Do not use @@itemize @@bullet. + +@item +To get LilyPond version, use @@version@{@} (this does not work +inside LilyPond snippets). If you write "@@version@{@}" (enclosed +with quotes), or generally if @@version@{@} is not followed by a +space, tere will be an ugly line break in PDF output unless you +enclose it with + +@example +@@w@{ ... @} + + e.g. + +@@w@{"@@version@{@}"@} +@end example + +@end itemize + + +@node Syntax survey +@subsection Syntax survey + +@itemize +@item +@@c - single line comments + "@@c NOTE:" is a comment which should remain in the final + version. (gp only command ;) +@item +@@ignore ... @@end ignore - multi-line comment + +@item +@@cindex - General index. Please add as many as you can. Don't + capitalize the first word. +@item +@@funindex - is for a \lilycommand. + +@item +@@example ... @@end ignore - example text that should be set as a + blockquote. Any @{@} must be escaped with @@@{ @}@@ +@item +@@itemize @@item +A @@item +B ... @@end itemize - for bulleted lists. + Do not compress vertically like this. + +@item +@@code@{@} - typeset in a tt-font. Use for actual lilypond code or + property/context names. If the name contains a space, wrap + the entire thing inside @@w@{@@code@{ @}@}. +@item +@@notation@{@} - refers to pieces of notation, e.g. + "@@notation@{cres.@}". Also use to specific lyrics ("the + @@notation@{A - men@} is centered"). Only use once per subsection + per term. +@item +@@q@{@} - Single quotes. Used for `vague' terms. +@item +@@qq@{@} - Double quotes. Used for actual quotes ("he said") or for + introducing special input modes. + +@item +@@tie@{@} - Variables or numbers which consist of a single character + (probably followed by a punctuation mark) should be tied + properly, either to the previous or the next word. Example: + "The letter@@tie@{@}@@q@{I@} is skipped" + +@item +@@var - Use for variables. +@item +@@warning@{@} - produces a "Note: " box. Use for important messages. + +@item +@@bs - Generates a backslash inside @@warning. + Any `\' used inside @@warning (and @@q or @@qq) must be written as `@@bs@{@}' + (texinfo would also allow \\, but this breaks with PDF output). + +@item +@@ref@{@} - normal references (type the exact node name inside the +@{@}). +@item +@@ruser@{@} - link to the NR. +@item +@@rlearning@{@} - link to the LM. +@item +@@rglos@{@} - link to the MG. +@item +@@rprogram@{@} - link to the AU. +@item +@@rlsr@{@} - link to a Snippet section. +@item +@@rinternals@{@} - link to the IR. +@item +@@uref@{@} - link to an external url. + +@end itemize + + + +@node Other text concerns +@subsection Other text concerns + +@itemize + +@item +References must occur at the end of a sentence, for more +information see @@ref@{the texinfo manual@}. Ideally this should +also be the final sentence of a paragraph, but this is not +required. Any link in a doc section must be duplicated in the +@@seealso section at the bottom. + +@item +Introducing examples must be done with + +@example +. (ie finish the previous sentence/paragaph) +: (ie `in this example:') +, (ie `may add foo with the blah construct,') +@end example + +The old @qq{sentence runs directly into the example} method is not +allowed any more. + +@item +Abbrevs in caps, e.g., HTML, DVI, MIDI, etc. + +@item +Colon usage + +@enumerate + +@item +To introduce lists + +@item +When beginning a quote: "So, he said,...". + +This usage is rarer. Americans often just use a comma. + +@item +When adding a defining example at the end of a sentence. + +@end enumerate + +@item +Non-ASCII characters which are in utf-8 should be directly used; +this is, don't say `Ba@@ss@{@}tuba' but `Baßtuba'. This ensures +that all such characters appear in all output formats. + +@end itemize + + + + +@node Documentation policy +@section Documentation policy + +@menu +* Books:: +* Section organization:: +* Checking cross-references:: +* General writing:: +* Technical writing style:: +@end menu + +@node Books +@subsection Books + +There are four parts to the documentation: the Learning Manual, +the Notation Reference, the Program Reference, and the Music +Glossary. + +@itemize + +@item +Learning Manual: + +The LM is written in a tutorial style which introduces the most +important concepts, structure and syntax of the elements of a +LilyPond score in a carefully graded sequence of steps. +Explanations of all musical concepts used in the Manual can be +found in the Music Glossary, and readers are assumed to have no +prior knowledge of LilyPond. The objective is to take readers to +a level where the Notation Reference can be understood and +employed to both adapt the templates in the Appendix to their +needs and to begin to construct their own scores. Commonly used +tweaks are introduced and explained. Examples are provided +throughout which, while being focussed on the topic being +introduced, are long enough to seem real in order to retain the +readers' interest. Each example builds on the previous material, +and comments are used liberally. Every new aspect is thoroughly +explained before it is used. + +Users are encouraged to read the complete Learning Manual from +start-to-finish. + + +@item +Notation Reference: a (hopefully complete) description of LilyPond +input notation. Some material from here may be duplicated in the +Learning Manual (for teaching), but consider the NR to be the +"definitive" description of each notation element, with the LM +being an "extra". The goal is _not_ to provide a step-by-step +learning environment -- do not avoid using notation that has not +be introduced previously in the NR (for example, use \break if +appropriate). This section is written in formal technical writing +style. + +Avoid duplication. Although users are not expected to read this +manual from start to finish, they should be familiar with the +material in the Learning Manual (particularly ``Fundamental +Concepts''), so do not repeat that material in each section of +this book. Also watch out for common constructs, like ^ - _ for +directions -- those are explained in NR 3. In NR 1, you can +write: DYNAMICS may be manually placed above or below the staff, +see @@ref@{Controlling direction and placement@}. + +Most tweaks should be added to LSR and not placed directly in the +.itely file. In some cases, tweaks may be placed in the main +text, but ask about this first. + +Finally, you should assume that users know what the notation +means; explaining musical concepts happens in the Music Glossary. + + +@item +Application Usage: information about using the program lilypond +with other programs (lilypond-book, operating systems, GUIs, +convert-ly, etc). This section is written in formal technical +writing style. + +Users are not expected to read this manual from start to finish. + + +@item +Music Glossary: information about the music notation itself. +Explanations and translations about notation terms go here. + +Users are not expected to read this manual from start to finish. + +@item +Internals Reference: not really a documentation book, since it is +automagically generated from the source, but this is its name. + +@end itemize + + +@node Section organization +@subsection Section organization + +@itemize + +@item +The order of headings inside documentation sections should +be: + +@example +main docs +@@predefined +@@endpredefined +@@snippets +@@seealso +@@knownissues +@end example + +@item +You @emph{must} include a @@seealso. + +@itemize +@item +The order of items inside the @@seealso section is + +@example +Music Glossary: +@@rglos@{foo@}, +@@rglos@{bar@}. + +Learning Manual: +@@rlearning@{baz@}, +@@rlearning@{foozle@}. + +Notation Reference: +@@ruser@{faazle@}, +@@ruser@{boo@}. + +Application Usage: +@@rprogram@{blah@}. + +Installed Files: +@@file@{path/to/dir/blahz@}. + +Snippets: @@rlsr@{section@}. + +Internals Reference: +@@rinternals@{fazzle@}, +@@rinternals@{booar@}. +@end example + +@item +If there are multiple entries, separate them by commas but do not +include an `and'. + +@item +Always end with a period. + +@item +Place each link on a new line as above; this makes it much easier +to add or remove links. In the output, they appear on a single +line. + +("Snippets" is REQUIRED; the others are optional) + +@item +Any new concepts or links which require an explanation should go +as a full sentence(s) in the main text. + +@item +Don't insert an empty line between @@seealso and the first entry! +Otherwise there is excessive vertical space in the PDF output. + +@end itemize + +@item +To create links, use @@ref@{@} if the link is within the same +manual. + +@item +@@predefined ... @@endpredefined is for commands in ly/*-init.ly +FIXME? + +@item +Do not include any real info in second-level sections (ie 1.1 +Pitches). A first-level section may have introductory material, +but other than that all material goes into third-level sections +(ie 1.1.1 Writing Pitches). + +@end itemize + + +@node Checking cross-references +@subsection Checking cross-references + +Cross-references between different manuals are heavily used in the +documentation, but they are not checked during compilation. +However, if you compile the documentation, a script called +check_texi_refs can help you with checking and fixing these +cross-references; for information on usage, cd into a source tree +where documentation has been built, cd into Documentation and look +for check-xrefs and fix-xrefs targets in 'make help' output. Note +that you have to find yourself the source files to fix +cross-references in the generated documentation such as the +Internals Reference; e.g. you can grep scm/ and lily/. + + +@node General writing +@subsection General writing + +@itemize + +@item +Do not forget to create @@cindex entries for new sections of text. +Enter commands with @@funindex, i.e. + +@example +@@cindex pitches, writing in different octaves +@@funindex \relative +@end example + +@noindent +do not bother with the @@code@{@} (they are added automatically). +These items are added to both the command index and the unified +index. + +Both index commands should go in front of the actual material. + +@@cindex entries should not be capitalized, ie + +@example +@@cindex time signature +@end example + +@noindent +is preferred instead of @qq{Time signature}, Only use capital +letters for musical terms which demand them, like D.S. al Fine. + +For scheme functions, only include the final part, i.e., + +@example +@@funindex modern-voice-cautionary + and NOT +@@funindex #(set-accidental-style modern-voice-cautionary) +@end example + +@item +Preferred terms: + +@itemize + +@item +In general, use the American spellings. The internal lilypond +property names use this spelling. + +@item +List of specific terms: + +@example +canceled +simultaneous NOT concurrent +measure: the unit of music +bar line: the symbol delimiting a measure NOT barline +note head NOT notehead +chord construct NOT chord (when referring to <>) +@end example + +@end itemize + +@end itemize + + +@node Technical writing style +@subsection Technical writing style + +These refer to the NR. The LM uses a more gentle, colloquial +style. + +@itemize + +@item +Do not refer to LilyPond in the text. The reader knows what the +manual is about. If you do, capitalization is LilyPond. + +@item +If you explicitly refer to @q{lilypond} the program (or any other +command to be executed), write @code{@@command@{lilypond@}}. + +@item +Do not explicitly refer to the reader/user. There is no one else +besides the reader and the writer. + +@item +Avoid contractions (don't, won't, etc.). Spell the words out completely. + +@item +Avoid abbreviations, except for commonly used abbreviations of foreign +language terms such as etc. and i.e. + +@item +Avoid fluff (@qq{Notice that,} @qq{as you can see,} +@qq{Currently,}). + +@item +The use of the word @q{illegal} is inappropriate in most cases. +Say @q{invalid} instead. + +@end itemize + + +@node Tips for writing docs +@section Tips for writing docs + +In the NR, I highly recommend focusing on one subsection at a +time. For each subsection, + +@itemize + +@item +check the mundane formatting. Are the headings (@@predefined, +@@seealso, etc.) in the right order? + +@item +add any appropriate index entries. + +@item +check the links in the @@seealso section -- links to music +glossary, internal references, and other NR sections are the main +concern. Check for potential additions. + +@item +move LSR-worthy material into LSR. Add the snippet, delete the +material from the .itely file, and add a @@lilypondfile command. + +@item +check the examples and descriptions. Do they still work? +@strong{Do not} assume that the existing text is +accurate/complete; some of the manual is highly out of date. + +@item +is the material in the @@knownissues still accurate? + +@item +can the examples be improved (made more explanatory), or is there +any missing info? (feel free to ask specific questions on -user; +a couple of people claimed to be interesting in being +@qq{consultants} who would help with such questions) + +@end itemize + +In general, I favor short text explanations with good examples -- +@qq{an example is worth a thousand words}. When I worked on the +docs, I spent about half my time just working on those tiny +lilypond examples. Making easily-understandable examples is much +harder than it looks. + + +@subsubheading Tweaks + +In general, any \set or \override commands should go in the +@qq{select snippets} section, which means that they should go in +LSR and not the .itely file. For some cases, the command +obviously belongs in the @qq{main text} (i.e. not inside +@@predefined or @@seealso or whatever) -- instrument names are a +good example of this. + +@example +\set Staff.instrumentName = #"foo" +@end example + +On the other side of this, + +@example +\override Score.Hairpin #'after-line-breaking = ##t +@end example + +clearly belongs in LSR. + +I'm quite willing to discuss specific cases if you think that a +tweaks needs to be in the main text. But items that can go into +LSR are easier to maintain, so I'd like to move as much as +possible into there. + + +It would be @qq{nice} if you spent a lot of time crafting nice +tweaks for users@dots{} but my recommendation is @strong{not} to do +this. There's a lot of doc work to do without adding examples of +tweaks. Tweak examples can easily be added by normal users by adding +them to the LSR. + +One place where a documentation writer can profitably spend time writing +or upgrading tweaks is creating tweaks to deal with known issues. It +would be ideal if every significant known issue had a workaround to avoid +the difficulty. + +@seealso + +@ref{Adding and editing snippets}. + + +@node Updating docs with convert-ly +@section Updating doc with @command{convert-ly} + +cd into @file{Documentation/} and run + +@example +find . -name '*.itely' | xargs convert-ly -e +@end example + +@noindent +This also updates translated documentation. + + + +@node Translating the documentation +@section Translating the documentation + +@menu +* Getting started with documentation translation:: +* Documentation translation details:: +* Documentation translation maintenance:: +* Translations management policies:: +* Technical background:: +@end menu + +@node Getting started with documentation translation +@subsection Getting started with documentation translation + +First, get the sources from the Git repository, see @ref{Documentation +translations source code}. + +@menu +* Translation requirements:: +* Which documentation can be translated:: +* Starting translation in a new language:: +@end menu + +@node Translation requirements +@unnumberedsubsubsec Translation requirements + +Working on LilyPond documentation translations requires the following +pieces of software, in order to make use of dedicated helper tools: + +@itemize +@item Python 2.4 or higher, +@item GNU Make, +@item Gettext, +@item Git. +@end itemize + +It is not required to build LilyPond and the documentation to +translate the documentation. However, if you have enough time and +motivation and a suitable system, it can be very useful to build at +least the documentation so that you can check the output yourself and +more quickly; if you are interested, see @ref{Compiling from source}. + +@menu +@end menu + +@node Which documentation can be translated +@unnumberedsubsubsec Which documentation can be translated + +The makefiles and scripts infrastructure currently supports translation +of the following documentation: + +@itemize +@item documentation index (HTML); +@item the Learning Manual, the Notation Reference and Application Usage +-- Texinfo source, PDF and HTML output; Info output might be added if +there is enough demand for it; +@item the Changes document. +@end itemize + +Support for translating the following pieces of documentation should be +added soon, by decreasing order of priority: + +@itemize +@item automatically generated documentation: markup commands, +predefined music functions; +@item the Snippets List; +@item the Internals Reference. +@end itemize + + +@node Starting translation in a new language +@unnumberedsubsubsec Starting translation in a new language + +At top of the source directory, do + +@example +./autogen.sh +@end example + +@noindent +or (if you want to install your self-compiled LilyPond locally) + +@example +./autogen.sh --prefix=$HOME +@end example + +@noindent +If you want to compile LilyPond -- which is almost required to build +the documentation, but is not required to do translation only -- fix +all dependencies and rerun @command{./configure} (with the same +options as for @command{autogen.sh}). + +Then @command{cd} into @file{Documentation/} and run + +@example +make ISOLANG=@var{MY-LANGUAGE} new-lang +@end example + +@noindent +where @var{MY-LANGUAGE} is the ISO 639 language code. + +Finally, add a language definition for your language in +@file{python/langdefs.py}. + +Before starting the real translation work, it is recommended to commit +changes you made so far to Git, so e.g. you are able to get back to +this state of the sources easily if needed; see @ref{Sharing your +changes}. + + +@node Documentation translation details +@subsection Documentation translation details + +Please follow all the instructions with care to ensure quality work. + +All files should be encoded in UTF-8. + +@menu +* Files to be translated:: +* Translating the Learning Manual and other Texinfo documentation:: +* Translating the Notation Reference and Application Usage:: +* Translating the Documentation index index.html.in:: +@end menu + +@node Files to be translated +@unnumberedsubsubsec Files to be translated + +@include contributor/doc-translation-list.itexi + +@node Translating the Learning Manual and other Texinfo documentation +@unnumberedsubsubsec Translating the Learning Manual and other Texinfo documentation + +@iftex +@vskip 12pt +@end iftex +@cartouche +@b{Note:} node names and section titles are now translated directly in +Texinfo source files. In case you have files in your working tree that +have not been converted, please pull first, then run + +@example +make -C Documentation/po doc +export LYDOC_LOCALEDIR=Documentation/po/out-www +export PYTHONPATH=python:python/auxiliar +scripts/auxiliar/tely-gettext.py @var{manual.tely} +@end example + +@noindent +This will also update files included in @file{@var{manual}.tely}, and of +course this script can be used for individual @file{@var{foo}.itely} +files too. +@end cartouche + +Every piece of text should be translated in the source file, except +Texinfo comments, text in @code{@@lilypond} blocks and a few cases +mentioned below. + +Node names are translated, but the original node name in English should +be kept as the argument of @code{@@translationof} put after the section +title; that is, every piece in the original file like + +@example +@@node Foo bar +@@@var{section_command} Bar baz +@end example + +@noindent +should be translated as + +@example +@@node @var{translation of Foo bar} +@@@var{section_command} @var{translation of Bar baz} +@@translationof Foo bar +@end example + +The argument of @code{@@rglos} commands and the first argument of +@code{@@rglosnamed} commands must not be translated, as it is the node +name of an entry in Music Glossary. + +Every time you translate a node name in a cross-reference, i.e. the +argument of commands @code{@@ref, @@rprogram, @@rlearning, @@rlsr, +@@ruser} or the first argument of their @code{@var{*}named} variants, +you should make sure the target node is defined in the correct source +file; if you do not intend to translate the target node right now, you +should at least write the node definition (that is, the @code{@@node +@@@var{section_commmand} @@translationof} trio mentioned above) in the +expected source file and define all its parent nodes; for each node you +have defined this way but have not translated, insert a line that +contains @code{@@untranslated} and append @code{ @@c external} to the +line that contains @code{@@translationof}. That is, you should end up +for each untranslated node with something like + +@example +@@node @var{translation of Foo bar} +@@@var{section_command} @var{translation of Bar baz} +@@translationof Foo bar @@c external + +@@untranslated +@end example + +@noindent +Finally, press in Emacs @key{C-c C-u C-a} to update or generate +menus. This process should be made easier in the future, when the helper +script @command{texi-langutils.py} and the makefile target are updated. + +Some pieces of text manipulated by build scripts that appear in the +output are translated in a @file{.po} file -- just like LilyPond output +messages -- in @file{Documentation/po}. The Gettext domain is named +@code{lilypond-doc}, and unlike @code{lilypond} domain it is not managed +through the Free Translation Project. + + +Take care of using typographic rules for your language, especially in +@file{macros.itexi}. + + +Please keep verbatim copies of music snippets (in @code{@@lilypond} +blocs). However, some music snippets containing text that shows in +the rendered music, and sometimes translating this text really helps +the user to understand the documentation; in this case, and only in +this case, you may as an exception translate text in the music +snippet, and then you must add a line immediately before the +@code{@@lilypond} block, starting with + +@example +@@c KEEP LY +@end example + +@noindent +Otherwise the music snippet would be reset to the same content as the +English version at next @command{make snippet-update} run -- see +@ref{Updating documentation translation}. + +When you encounter + +@example +@@lilypondfile[,texidoc]@{@var{filename.ly}@} +@end example + +@noindent +in the source, open @file{Documentation/snippets/@var{filename}.ly}, +translate the @code{texidoc} header field it contains, enclose it with +@code{texidoc@var{MY-LANGUAGE} = "} and @code{"}, and write it into +@file{Documentation/@var{MY-LANGUAGE}/texidocs/@var{filename}.texidoc}. +Additionnally, you may translate the snippet's title in @code{doctitle} +header field, in case @code{doctitle} is a fragment option used in +@code{@@lilypondfile}; you can do this exactly the same way as +@code{texidoc}. For instance, +@file{Documentation/@var{MY-LANGUAGE}/texidocs/@var{filename}.texidoc} +may contain + +@example +doctitlees = "Spanish title baz" +texidoces = " +Spanish translation blah +" +@end example + +@noindent +Then, you should get these translated strings into compiled snippets in +@file{Documentation/snippets}, see @q{General guidelines} in @ref{Adding +and editing snippets}. + +@code{@@example} blocs need not be verbatim copies, e.g. variable +names, file names and comments should be translated. + +Finally, please carefully apply every rule exposed in @ref{Texinfo +introduction and usage policy}, and @ref{Documentation policy}. If +one of these rules conflicts with a rule specific to your language, +please ask the Translation meister and/or the Documentation Editors on +@email{lilypond-devel@@gnu.org}. + + +@node Translating the Notation Reference and Application Usage +@unnumberedsubsubsec Translating the Notation Reference and Application Usage + +Copy @file{notation.tely} (or @file{application.tely}, +respectively) into @file{@var{MY-LANGUAGE}}, then translate this +file and run @code{skeleton-update} -- see @ref{Updating documentation +translation}. Your are now ready to translate the Notation Reference +(Application Usage, respectively) exactly like the Learning Manual. + + +@node Translating the Documentation index index.html.in +@unnumberedsubsubsec Translating the Documentation index @file{index.html.in} + +Unlike almost all HTML pages in this documentation, links in this page +are not tweaked by @file{postprocess_html.py}, so links should be +manually edited to link to existing translations. + + +@node Documentation translation maintenance +@subsection Documentation translation maintenance + +Several tools have been developed to make translations maintenance +easier. These helper scripts make use of the power of Git, the +version control system used for LilyPond development. + +@menu +* Check state of translation:: +* Updating documentation translation:: +@end menu + +@node Check state of translation +@unnumberedsubsubsec Check state of translation + +First pull from Git, then cd into @file{Documentation/} (or at top of +the source tree, replace @command{make} with @command{make -C +Documentation}) and run + +@example +make ISOLANG=@var{MY_LANGUAGE} check-translation +@end example + +@noindent +This presents a diff of the original files since the most recent +revision of the translation. To check a single file, cd into +@file{Documentation/} and run + +@example +make CHECKED_FILES=@var{MY_LANGUAGE}/@var{manual}/@var{foo}.itely check-translation +@end example + +To see only which files need to be updated, do + +@example +make ISOLANG=@var{MY_LANGUAGE} check-translation | grep 'diff --git' +@end example + +To avoid printing terminal colors control characters, which is often +desirable when you redirect output to a file, run + +@example +make ISOLANG=@var{MY_LANGUAGE} NO_COLOR=1 check-translation +@end example + +Global state of the translation is recorded in +@file{Documentation/translations.html.in}, which is used to generate +Translations status page. To update that page, do from +@file{Documentation/} + +@example +make translation-status +@end example + +This will also leave @file{out/translations-status.txt}, which contains +up-to-dateness percentages for each translated file, and update word +counts of documentation files in this Guide. + +@seealso + +@ref{Maintaining without updating translations}. + + +@node Updating documentation translation +@unnumberedsubsubsec Updating documentation translation + +Instead of running @code{check-translation}, you may want to run +@code{update-translation}, which will run your favorite text editor to +update files. First, make sure environment variable @code{EDITOR} is +set to a text editor command, then run from @file{Documentation/} + +@example +make ISOLANG=@var{MY_LANGUAGE} update-translation +@end example + +@noindent +or to update a single file + +@example +make CHECKED_FILES=@var{MY_LANGUAGE/@var{manual}/foo.itely} update-translation +@end example + +For each file to be udpated, @code{update-translation} will open your +text editor with this file and a diff of the file in English; if the +diff cannot be generated or is bigger than the file in English itself, +the full file in English will be opened instead. + +Texinfo skeleton files, i.e. @file{.itely} files not yet translated, +containing only the Texinfo structure can be updated automatically: +whenever @command{make check-translation} shows that such files should +be updated, run from @file{Documentation/} + +@example +make ISOLANG=@var{MY_LANGUAGE} skeleton-update +@end example + +@file{.po} message catalogs in @file{Documentation/po/} may be updated +by issuing from @file{Documentation/} or @file{Documentation/po/} + +@example +make po-update +@end example + +@warning{if you run po-update and somebody else does the same and +pushes before you push or send a patch to be applied, there will be a +conflict when you pull. Therefore, it is better that only the +Translation meister runs this command.} + +Updating music snippets can quickly become cumbersome, as most +snippets should be identical in all languages. Fortunately, there is +a script that can do this odd job for you (run from +@file{Documentation/}): + +@example +make ISOLANG=@var{MY_LANGUAGE} snippet-update +@end example + +This script overwrites music snippets in +@file{@var{MY_LANGUAGE/foo/every.itely}} with music snippets from +@file{@var{foo/every.itely}}. It ignores skeleton files, and keeps +intact music snippets preceded with a line starting with @code{@@c +KEEP LY}; it reports an error for each @file{.itely} that has not the +same music snippet count in both languages. Always use this script +with a lot of care, i.e. run it on a clean Git working tree, and check +the changes it made with @command{git diff} before committing; if you +don't do so, some @code{@@lilypond} snippets might be broken or make +no sense in their context. + +When you have updated texidocs in +@file{Documentation/@var{MY-LANGUAGE}/texidocs}, you can get these +changes into compiled snippets in @file{Documentation/snippets}, see +@q{General guidelines} in @ref{Adding and editing snippets}. + +Finally, a command runs the three update processes above for all +enabled languages (from @file{Documentation/}): + +@example +make all-translations-update +@end example + +Use this command with caution, and keep in mind it will not be really +useful until translations are stabilized after the end of GDP and GOP. + +@seealso + +@ref{Maintaining without updating translations}, +@ref{Adding and editing snippets}. + + +@node Translations management policies +@subsection Translations management policies + +These policies show the general intent of how the translations should +be managed, they aim at helping translators, developers and +coordinators work efficiently. + +@menu +* Maintaining without updating translations:: +* Managing documentation translation with Git:: +@end menu + +@node Maintaining without updating translations +@unnumberedsubsubsec Maintaining without updating translations + +Keeping translations up to date under heavy changes in the documentation +in English may be almost impossible, especially as during the former +Grand Documentation Project (GDP) or the Grand Organization Project +(GOP) when a lot of contributors brings changes. In addition, +translators may be --- and that is a very good thing --- involved in +these projects too. + +it is possible --- and even recommended --- to perform some maintenance +that keeps translated documentation usable and eases future translation +updating. The rationale below the tasks list motivates this plan. + +The following tasks are listed in decreasing priority order. + +@enumerate +@item Update macros.itexi. +For each obsolete macro definition, if it is possible to update macro +usage in documentation with an automatic text or regexp substitution, +do it and delete the macro definition from macros.itexi; otherwise, +mark this macro definition as obsolete with a comment, and keep it in +macros.itexi until the documentation translation has been updated and +no longer uses this macro. + +@item Update @file{*.tely} files completely with +@command{make check-translation} -- you may want to redirect ouptput +to a file because of overwhelming output, or call check-translation.py +on individual files, see @ref{Check state of translation}. + +@item In @file{.itelys}, match sections and .itely file names with those from +English docs, which possibly involves moving nodes contents in block +between files, without updating contents itself. In other words, the +game is catching where has gone each section. In Learning manual, and +in Notation Reference sections which have been revised in GDP, there may +be completely new sections: in this case, copy @code{@@node} and +@code{@@section}-command from English docs, and add the marker for +untranslated status @code{@@untranslated} on a single line. Note that +it is not possible to exactly match subsections or subsubsections of +documentation in English, when contents has been deeply revised; in this +case, keep obsolete (sub)subsections in the translation, marking them +with a line @code{@@c obsolete} just before the node. + +Emacs with Texinfo mode makes this step easier: + +@itemize +@item without Emacs AucTeX installed, @key{C-c C-s} shows structure of current +Texinfo file in a new buffer @code{*Occur*}; to show structure of two files +simultaneously, first split Emacs window in 4 tiles (with @key{C-x 1} +and @key{C-x 2}), press @key{C-c C-s} to show structure of one file +(e.g. the translated file), copy @code{*Occur*} contents into +@code{*Scratch*}, then press @key{C-c C-s} for the other file. + +If you happen to have installed AucTeX, you can either call the macro +by doing @key{M-x texinfo-show-structure} or create a key binding in your +@file{~/.emacs}, by adding the four following lines: + +@example +(add-hook 'Texinfo-mode-hook + '(lambda () + (define-key Texinfo-mode-map "\C-cs" + 'texinfo-show-structure))) +@end example + +@noindent +and then obtain the structure in the @code{*Occur*} buffer with @key{C-c +s}. + +@item Do not bother updating @code{@@menu}s when all menu entries are in the same +file, just do @key{C-c C-u C-a} (@qq{update all menus}) when you have +updated all the rest of the file. + +@item Moving to next or previous node using incremental search: press +@key{C-s} and type @code{node} (or @key{C-s @@node} if the text +contains the word @q{node}) then press @key{C-s} to move to next node +or @key{C-r} to move to previous node. Similar operation can be used +to move to the next/previous section. Note that every cursor move +exits incremental search, and hitting @key{C-s} twice starts +incremental search with the text entered in previous incremental +search. + +@item Moving a whole node (or even a sequence of nodes): jump to beginning +of the node (quit incremental search by pressing an arrow), press +@key{C-SPACE}, press @key{C-s node} and repeat @key{C-s} until you +have selected enough text, cut it with @key{C-w} or @key{C-x}, jump to +the right place (moving between nodes with the previous hint is often +useful) and paste with @key{C-y} or @key{C-v}. +@end itemize + +@item Update sections finished in the English documentation; check +sections status at +@uref{http://lilypondwiki.tuxfamily.org/index.php?title=Documentation_coordination}. + +@item Update documentation PO. It is recommended not to update +strings which come from documentation that is currently deeply revised +in English, to avoid doing the work more than once. + +@item Fix broken cross-references by running (from @file{Documentation/}) + +@example +make ISOLANG=@var{YOUR-LANGUAGE} fix-xrefs +@end example + +@noindent +This step requires a sucessful documentation build (with @command{make +doc}). Some cross-references are broken because they point to a node +that exists in the documentation in English, which has not been added +to the translation; in this case, do not fix the cross-reference but +keep it "broken", so that the resulting HTML link will point to an +existing page of documentation in English. +@end enumerate + +@subsubheading Rationale + +You may wonder if it would not be better to leave translations as-is +until you can really start updating translations. There are several +reasons to do these maintenance tasks right now. + +@itemize +@item This will have to be done sooner or later anyway, before updating +translation of documentation contents, and this can already be done +without needing to be redone later, as sections of documentation in +English are mostly revised once. However, note that not all +documentation sectioning has been revised in one go, so all this +maintenance plan has to be repeated whenever a big reorganization is +made. + +@item This just makes translated documentation take advantage of the new +organization, which is better than the old one. + +@item Moving and renaming sections to match sectioning of documentation in +English simplify future updating work: it allows updating the +translation by side-by-side comparison, without bothering whether +cross-reference names already exist in the translation. + +@item Each maintenance task except @q{Updating PO files} can be done by +the same person for all languages, which saves overall time spent by +translators to achieve this task: the node names and section titles +are in English, so you can do. It is important to take advantage of +this now, as it will be more complicated (but still possible) to do +step 3 in all languages when documentation is compiled with +@command{texi2html} and node names are directly translated in source +files. +@end itemize + + +@node Managing documentation translation with Git +@unnumberedsubsubsec Managing documentation translation with Git + +This policy explains how to manage Git branches and commit +translations to Git. + +@itemize +@item Translation changes matching master branch are preferably made on +@code{lilypond/translation} branch; they may be pushed directly to +@code{master} only if they do not break compilation of LilyPond and +its documentation, and in this case they should be pushed to +@code{lilypond/translation} too. Similarly, changes matching +@code{stable/X.Y} are preferably made on +@code{lilypond/X.Ytranslation}. + +@item @code{lilypond/translation} Git branch may be merged into +master only if LilyPond (@command{make all}) and documentation +(@command{make doc}) compile succesfully. + +@item @code{master} Git branch may be merged into +@code{lilypond/translation} whenever @command{make} and @command{make +doc} are succesful (in order to ease documentation compilation by +translators), or when significant changes had been made in +documentation in English in master branch. + +@item General maintenance may be done by anybody who knows what he does +in documentation in all languages, without informing translators +first. General maintenance include simple text substitutions +(e.g. automated by sed), compilation fixes, updating Texinfo or +lilypond-book commands, updating macros, updating ly code, fixing +cross-references, and operations described in @ref{Maintaining +without updating translations}. +@end itemize + + +@node Technical background +@subsection Technical background + +A number of Python scripts handle a part of the documentation +translation process. All scripts used to maintain the translations +are located in @file{scripts/auxiliar/}. + +@itemize +@item @file{check_translation.py} -- show diff to update a translation, +@item @file{texi-langutils.py} -- quickly and dirtily parse Texinfo files to +make message catalogs and Texinfo skeleton files, +@item @file{texi-skeleton-update.py} -- update Texinfo skeleton files, +@item @file{update-snippets.py} -- synchronize ly snippets with those +from English docs, +@item @file{translations-status.py} -- update translations status pages and word +counts in the file you are reading, +@item @file{tely-gettext.py} -- gettext node names, section titles and references +in the sources; WARNING only use this script once for each file, when support for +"makeinfo --html" has been dropped. +@end itemize + +Other scripts are used in the build process, in @file{scripts/build/}: + +@itemize +@item @file{mass-link.py} -- link or symlink files between English documentation +and documentation in other languages. +@end itemize + +Python modules used by scripts in @file{scripts/auxiliar/} or @file{scripts/build/} (but +not by installed Python scripts) are located in @file{python/auxiliar/}: +@itemize +@item @file{manuals_definitions.py} -- define manual names and name of +cross-reference Texinfo macros, +@item @file{buildlib.py} -- common functions (read piped output +of a shell command, use Git), +@item @file{postprocess_html.py} (module imported by @file{www_post.py}) -- add footer and +tweak links in HTML pages. +@end itemize + +And finally +@itemize +@item @file{python/langdefs.py} -- language definitions module +@end itemize diff --git a/Documentation/contributor/git-starting.itexi b/Documentation/contributor/git-starting.itexi new file mode 100644 index 0000000000..6d6d55e86c --- /dev/null +++ b/Documentation/contributor/git-starting.itexi @@ -0,0 +1,951 @@ +@c -*- coding: us-ascii; mode: texinfo; -*- +@node Starting with git +@chapter Starting with git + +To complete or present in another form the introduction to Git usage +in this chapter, it may be a good idea to look for Git documentation +at @uref{http://git-scm.com/documentation}, + +@menu +* Getting the source code:: +* Updating the source code:: +* Sharing your changes:: +* Advanced git stuff:: +* Git on Windows:: +* Development inside VirtualBox (compiling on Windows):: +@end menu + + +@node Getting the source code +@section Getting the source code + +@menu +* Git introduction:: +* Main source code:: +* Website source code:: +* Documentation translations source code:: +* Other branches:: +* Other locations for git:: +* Git user configuration:: +@end menu + +@node Git introduction +@subsection Git introduction + +The source code is kept in a Git respository. This allows us to +track changes to files, and for multiple people to work on the +same set of files efficiently. + +@warning{These instructions assume that you are using the +command-line version of Git 1.5 or higher. Windows users should +skip to @ref{Git on Windows}.} + + +@node Main source code +@subsection Main source code + +To get the main source code and documentation, + +@c WARNING: when updating the commands below, please +@c update the other flavors in the two next nodes +@c and in Introduction to Git concepts +@smallexample +mkdir lilypond; cd lilypond +git init-db +git remote add -f -t master -m master origin git://git.sv.gnu.org/lilypond.git/ +git checkout -b master origin/master +@end smallexample + + +@node Website source code +@subsection Website source code + +To get the website (including translations), + +@smallexample +mkdir lilypond-web ; cd lilypond-web +git init-db +git remote add -f -t web -m web origin git://git.sv.gnu.org/lilypond.git/ +git checkout -b web origin/web +@end smallexample + + +@node Documentation translations source code +@subsection Documentation translations source code + +To translate the documentation (@emph{not} the website), + +@smallexample +mkdir lilypond-translation; cd lilypond-translation +git init-db +git remote add -f -t lilypond/translation -m lilypond/translation origin git://git.sv.gnu.org/lilypond.git/ +git checkout -b lilypond/translation origin/lilypond/translation +@end smallexample + + +@node Other branches +@subsection Other branches + +Most contributors will never need to touch the other branches. If +you wish to do so, you will need more familiarity with git. + +@itemize + +@item @code{gub}: +This stores the Grand Unified Binary, our cross-platform building +tool. +@c TODO: merge the gub stuff with this CG. +For more info, see @uref{http://lilypond.org/gub}. The git +location is: + +@example +http://github.com/janneke/gub +@end example + +@item @code{dev/XYZ}: +These branches are for individual developers. They store code +which is not yet stable enough to be added to the @code{master} +branch. + +@item @code{stable/XYZ}: +The branches are kept for archival reasons. + +@end itemize + + +@node Other locations for git +@subsection Other locations for git + +If you have difficulty connecting to most of the repositories +listed in earlier sections, try: + +@example +http://git.sv.gnu.org/r/lilypond.git +git://git.sv.gnu.org/lilypond.git +ssh://git.sv.gnu.org/srv/git/lilypond.git +@end example + +Using HTTP protocol is slowest, so it is not recommended unless both +SSH and Git protocols fail, which happens e.g. if you connect to +internet through a router that filters out Git and/or SSH connections. + + +@node Git user configuration +@subsection Git user configuration + +To configure git to automatically use your name and email address +for commits and patches, + +@example +git config --global user.name "MYNAME" +git config --global user.email MYEMAIL@@EXAMPLE.NET +@end example + + +@node Updating the source code +@section Updating the source code + +@menu +* Importance of updating:: +* Update command:: +* Resolving conflicts:: +@end menu + + +@node Importance of updating +@subsection Importance of updating + +In a large project like LilyPond, contributors sometimes edit the same +file at the same time. As long as everybody updates their version of +the file with the most recent changes (@emph{pulling}), there are +generally no problems with this multiple-person editing. However, +boring problems can arise if you do not pull before attempting commit, +e.g. you may encounter a conflict; in this case, see @ref{Resolving +conflicts}. + + +@node Update command +@subsection Updating command + +Whenever you are asked to pull, it means you should update your +local copy of the repository with the changes made by others on +the remote @code{git.sv.gnu.org} repository: + +@example +git pull -r +@end example + + +@node Resolving conflicts +@subsection Resolving conflicts + +Occasionally an update may result in conflicts -- this happens +when you and somebody else have modified the same part of the same +file and git cannot figure out how to merge the two versions +together. When this happens, you must manually merge the two +versions. + +If you need some documentation to understand and resolve conflicts, +see paragraphs @emph{How conflicts are presented} and @emph{How to +resolve conflicts} in @command{git merge} man page. + + +@node Sharing your changes +@section Sharing your changes + +@menu +* Producing a patch:: +* Committing directly:: +@end menu + + +@node Producing a patch +@subsection Producing a patch + +Once you have finished editing your files, checked that your changes +meet the @ref{Code style}, and/or @ref{Documentation policy}, properly +set up your name and email in @ref{Git user configuration}, and +checked that the entire thing compiles, you may: + +@example +git commit -a +git format-patch origin +@end example + +The commit should include a brief message describing the change. +This consists of a one-line summary describing the change, and +if necessary a blank line followed by several lines giving the +details: + +@example +Did household chores. + +I hung up the wet laundry and then washed the car. I also +vacuumed the floors, rinsed the dirty dishes, fed the cat, and +recalibrated the temporal flux machine. +@end example + +If the change is to the documentation only then the one-line +summary should be prefixed with @qq{Docs: }. + +If you added a file to the source code, you must add it to git +with: + +@example +git add FILENAME +@end example + +@noindent +(and possibly modify the @file{GNUmakefile}) + +These commands will produce one or more files named +@file{0001-xyz}, @file{0002-abc}, etc. in the top directory of the +git tree. Send an email to @email{lilypond-devel@@gnu.org} with +these files attached, and a developer will review and apply the +patches to the main repository. + + +@node Committing directly +@subsection Committing directly + +Most contributors do not have permission to commit directly. If you +do, make sure you have set up your name and email in @ref{Git user +configuration}, then edit @file{.git/config}: change the line + +@example +url = git://git.sv.gnu.org/lilypond.git/ +@end example + +@noindent +into + +@example +url = ssh://@var{user}@@git.sv.gnu.org/srv/git/lilypond.git +@end example + +@noindent +where @var{user} is your login name on Savannah. + +If you have not already done so, you should generate and upload a +SSH key: open @uref{https://savannah.gnu.org/my/} in your browser, +go to @q{Account Configuration}, then to something like +@q{Edit SSH Keys}, and follow the instructions on that page. + +You may then: + +@example +git push origin +@end example + +Note that recent versions of Git (Git 1.6.3 or later) will issue a +big warning if the above command is used. The simplest solution +is to add a new section to @file{.git/config} that looks like +this: + +@example +[push] + default = matching +@end example + +@noindent +Then @code{git push origin} will work as before. For more +details, consult the @code{git push} man page. + + +@node Advanced git stuff +@section Advanced git stuff + +@warning{This section is not necessary for normal contributors; +these commands are presented for information for people interested +in learning more about git.} + + +It is possible to work with several branches on the same local Git +repository; this is especially useful for translators who may have to +deal with both @code{lilypond/translation} and a stable branch, +e.g. @code{stable/2.12}. + +Some Git commands are introduced first, then a workflow with several +Git branches of LilyPond source code is presented. + +@menu +* Introduction to Git concepts:: +* Git commands for managing several branches:: +* Working on LilyPond sources with several branches:: +* Git log:: +* Applying git patches:: +* Reverting all local changes:: +@end menu + + +@node Introduction to Git concepts +@subsection Introduction to Git concepts + +A bit of Git vocabulary will be explained below. The following is +just introduction material; for better understanding of Git concepts, +you are invited to read further documentation, especially Git +Community Book at @uref{http://book.git-scm.com/}. + +The @code{git pull origin} command above is just a shortcut for this +command: + +@example +git pull git://git.sv.gnu.org/lilypond.git/ @var{branch}:origin/@var{branch} +@end example + +@noindent +where @code{@var{branch}} is typically @code{master}, @code{web} or +@code{lilypond/translation}; if you do not know or remember, see +@ref{Getting the source code} to remember which commands you issued or +which source code you wanted to get. + +A @emph{commit} is a set of changes made to the sources; it also +includes the committish of the parent commit, the name and e-mail of +the @emph{author} (the person who wrote the changes), the name and +e-mail of the @emph{committer} (the person who brings these changes +into the Git repository), and a commit message. + +A @emph{committish} is the SHA1 checksum of a commit, a number made of +40 hexadecimal digits, which acts as the internal unique identifier +for this commit. To refer to a particular revision, don't use vague +references like the (approximative) date, simply copy and paste the +committish. + +A @emph{branch} is nothing more than a pointer to a particular commit, +which is called the @emph{head} of the branch; when referring to a +branch, one often acutally thinks about its head and the ancestor +commits of the head. + +Now we will explain the two last commands you used to get the source +code from Git -- see @ref{Getting the source code}. + +@example +git remote add -f -t @var{branch} -m @var{branch} origin git://git.sv.gnu.org/lilypond.git/ +git checkout -b @var{branch} origin/@var{branch} +@end example + +The @command{git remote} has created a branch called +@code{origin/@var{branch}} in your local Git repository. As this +branch is a copy of the remote branch web from git.sv.gnu.org LilyPond +repository, it is called a @emph{remote branch}, and is meant to track +the changes on the branch from git.sv.gnu.org: it will be updated +every time you run @command{git pull origin} or @command{git fetch +origin}. + +The @command{git checkout} command has created a branch named +@code{@var{branch}}. At the beginning, this branch is identical to +@code{origin/@var{branch}}, but it will differ as soon as you make +changes, e.g. adding newly translated pages or editing some +documentation or code source file. Whenever you pull, you merge the +changes from @code{origin/@var{branch}} and @code{@var{branch}} since +the last pulling. If you do not have push (i.e. @qq{write}) access on +git.sv.gnu.org, your @code{@var{branch}} will always differ from +@code{origin/@var{branch}}. In this case, remember that other people +working like you with the remote branch @code{@var{branch}} of +git://git.sv.gnu.org/lilypond.git/ (called @code{origin/@var{branch}} +on your local repository) know nothing about your own +@code{@var{branch}}: this means that whenever you use a committish or +make a patch, others expect you to take the latest commit of +@code{origin/@var{branch}} as a reference. + +Finally, please remember to read the man page of every Git command you +will find in this manual in case you want to discover alternate +methods or just understand how it works. + + +@node Git commands for managing several branches +@subsection Git commands for managing several branches + +@subsubheading Listing branches and remotes + +You can get the exact path or URL of all remotes with +running + +@example +git remote -v +@end example + +To list Git branches on your local repositories, run + +@example +git branch # list local branches only +git branch -r # list remote branches +git branch -a # list all branches +@end example + + +@subsubheading Checking out branches + +To know the currently checked out branch, i.e. the branch whose source +files are present in your working tree, read the first line of the +output of + +@example +git status +@end example + +@noindent +The currently checked out branch is also marked with an asterisk in +the output of @command{git branch}. + +You can check out another branch @code{@var{other_branch}}, i.e. check +out @code{@var{other_branch}} to the working tree, by running + +@example +git checkout @var{other_branch} +@end example + +Note that it is possible to check out another branch while having +uncommitted changes, but it is not recommended unless you know what +you are doing; it is recommended to run @command{git status} to check +this kind of issue before checking out another branch. + + +@subsubheading Merging branches + +To merge branch @code{@var{foo}} into branch @code{@var{bar}}, i.e. to +@qq{add} all changes made in branch @code{@var{foo}} to branch +@code{@var{bar}}, run + +@example +git checkout @var{bar} +git merge @var{foo} +@end example + +If any conflict happens, see @ref{Resolving conflicts}. + +There are common usage cases for merging: as a translator, you will +often want to merge @code{master} into @code{lilypond/translation}; on +the other hand, the Translations meister wants to merge +@code{lilypond/translation} into @code{master} whenever he has checked +that @code{lilypond/translation} builds successfully. + + +@node Working on LilyPond sources with several branches +@subsection Working on LilyPond sources with several branches + +@subsubheading Fetching new branches from git.sv.gnu.org + +To fetch and check out a new branch named @code{@var{branch}} on +git.sv.gnu.org, run from top of the Git repository + +@example +git config --add remote.origin.fetch +refs/heads/@var{branch}:refs/remotes/origin/@var{branch} +git checkout --track -b @var{branch} origin/@var{branch} +@end example + +After this, you can pull @code{@var{branch}} from git.sv.gnu.org with + +@example +git pull origin +@end example + +Note that this command generally fetches all branches you added with +@command{git remote add} (when you initialized the repository) or +@command{git config --add}, i.e. it updates all remote branches from +remote @code{origin}, then it merges the remote branch tracked by +current branch into current branch. For example, if your current +branch is @code{master} --- which is the case if you got the sources +with the commands described in @ref{Main source code} and did not +issue any @command{git checkout} command --- @code{origin/master} will +be merged into @code{master}. + + +@subsubheading Local clones, or having several working trees + +If you play with several Git branches, e.g. @code{master}, +@code{lilypond/translation}, @code{stable/2.12}), you may want to have +one source and build tree for each branch; this is possible with +subdirectories of your local Git repository, used as local cloned +subrepositories. To create a local clone for the branch named +@code{@var{branch}}, run + +@example +git checkout @var{branch} +git clone -l -s -n . @var{subdir} +cd @var{subdir} +git reset --hard +@end example + +Note that @code{@var{subdir}} must be a directory name which does not +already exist. In @code{@var{subdir}}, you can use all Git commands +to browse revisions history, commit and uncommit changes; to update +the cloned subrepository with changes made on the main repository, cd +into @code{@var{subdir}} and run @command{git pull}; to send changes +made on the subrepository back to the main repository, run +@command{git push} from @code{@var{subdir}}. Note that only one +branch (the currently checked out branch) is created in the +subrepository by default; it is possible to have several branches in a +subrepository and do usual operations (checkout, merge, create, +delete...) on these branches, but this possibility is not detailed +here. + +When you push @code{@var{branch}} from @code{@var{subdir}} to the main +repository, and @code{@var{branch}} is checked out in the main +repository, you must save uncommitted changes (see @command{git +stash}) and do @command{git reset --hard} in the main repository in +order to apply pushed changes in the working tree of the main +repository. + + +@node Git log +@subsection Git log + +The commands above don't only bring you the latest version of the +sources, but also the full history of revisions (revisons, also +called commits, are changes made to the sources), stored in the +.git directory. You can browse this history with + +@example +git log # only shows the logs (author, committish and commit message) +git log -p # also shows diffs +gitk # shows history graphically +@end example + +@warning{The @code{gitk} command may require a separate @code{gitk} package, +available in the appropriate distribution's repositories.} + + +@node Applying git patches +@subsection Applying git patches + +Well-formed git patches created with @code{git format-patch} +should be committed with the following command: + +@example +git am @var{patch} +@end example + +Patches created without @code{git format-patch} can be applied in +two steps. The first step is to apply the patch to the working +tree: + +@example +git apply @var{patch} +@end example + +@noindent +The second step is to commit the changes and give credit to the +author of the patch. This can be done with the following command: + +@example +git commit -a --author="First Last " +@end example + + +@node Reverting all local changes +@subsection Reverting all local changes + +Sometimes git will become hopelessly confused, and you just want +to get back to a known, stable state. This command destroys any +local changes you have made, but at least you get back to the +current online version: + +@example +git reset --hard origin/master +@end example + + +@node Git on Windows +@section Git on Windows + +@c Some of this may duplicate stuff in other sections +@c Clear this up later -td + +@subsection Background to nomenclature + +Git is a system for tracking the changes made to source files by +a distributed set of editors. It is designed to work without a +master repository, but we have chosen to have a master respository +for LilyPond files. Editors hold local copies of the master +repository together with any changes they have made locally. Local +changes are held in a local @q{branch}, of which there may be +several, but these instructions assume you are using just one. The +files visible in the local repository always correspond to those +on the currently @q{checked out} local branch. + +Files are edited on a local branch, and in that state the +changes are said to be @q{unstaged}. When editing is complete, the +changes are moved to being @q{staged for commit}, and finally the +changes are @q{committed} to the local branch. Once +committed, the changes are given a unique reference number called the +@q{Committish} which identifies them to Git. Such committed changes +can be sent to the master repository by @q{pushing} them (if you +have write permission) or by sending them by email to someone who +has, either complete or as a @q{diff} or @q{patch} (which send +just the differences from master). + +@subsection Installing git + +Obtain Git from +@uref{http://code.google.com/p/msysgit/downloads/list} +(note, not msysGit, which is for Git developers and not PortableGit, +which is not a full git installation) and +install it. + +Note that most users will not need to install SSH. That is not +required until you have been granted direct push permissions to +the master git repository. + +Start Git by clicking on the desktop icon. +This will bring up a command line bash shell. This may be +unfamiliar to Windows users. If so, follow these +instructions carefully. Commands are entered at a $ prompt +and are terminated by keying a newline. + +@subsection Initialising Git + +Decide where you wish to place your local Git repository, +creating the folders in Windows as necessary. Here we +call the folder to contain the repository [path]/Git. +You will need to have space for around 150Mbytes. + +Start the Git bash shell by clicking on the desk-top icon installed +with Git and type + +@example +cd [path]/Git +@end example + +to position the shell at your new Git repository. + +Note: if [path] contains folders with names containing +spaces use + +@example +cd "[path]/Git" +@end example + +Then type + +@example +git init +@end example + +to initialize your Git repository. + +Then type (all on one line; the shell will wrap automatically) + +@example +git remote add -f -t master origin git://git.sv.gnu.org/lilypond.git +@end example + +to download the lilypond master files. + +@warning{Be patient! Even on a broadband connection this can take +10 minutes or more. Wait for lots of [new tag] messages +and the $ prompt.} + +We now need to generate a local copy of the downloaded files +in a new local branch. Your local branch needs to have a +name, here we call it @q{lily-local} - you may wish to make up +your own. + +Then, finally, type + +@example +git checkout -b lily-local origin/master +@end example + +to create the lily-local branch containing the local copies of the +master files. You will be advised your local branch has been set +up to track the remote branch. + +Return to Windows Explorer and look in your Git repository. You +should see lots of folders. For example, the LilyPond documentation +can be found in Git/Documentation/user. + +Terminate the Git bash shell by typing @code{exit}. + +@subsection Git GUI + +Almost all subsequent work will use the Git Graphical User +Interface, which avoids having to type command line +commands. To start Git GUI first start the Git bash shell by +clicking on the desktop icon, and type + +@example +cd [path]/Git +git gui +@end example + +The Git GUI will open in a new window. It contains four panels +and 7 pull-down menus. At this stage do not use any of the +commands under Branch, Commit, Merge or Remote. These will +be explained later. + +The two panels on the left contain the names of files which +you are in the process of editing (Unstaged Changes), and +files you have finished editing and have staged ready for +committing (Staged Changes). At this stage these panels will +be empty as you have not yet made any changes to any file. +After a file has been edited and saved the top panel on the right +will display the differences between the edited file selected +in one of the panels on the left and the last version committed. + +The final panel at bottom right is used to enter a descriptive +message about the change before committing it. + +The Git GUI is terminated by entering CNTL-Q while it is the +active window or by clicking on the usual Windows close-window +widget. + +@subsection Personalising your local git repository + +Open the Git GUI, click on + +@example +Edit -> Options +@end example + +and enter your name and email address in the +left-hand (Git Repository) panel. Leave everything +else unchanged and save it. + +Note that Windows users must leave the default setting for line +endings unchanged. All files in a git repository must have lines +terminated by just a LF, as this is required for Merge to work, but +Windows files are terminated by CRLF by default. The git default +setting causes the line endings of files in a Windows git repository +to be flipped automatically between LF and CRLF as required. This +enables files to be edited by any Windows editor without causing +problems in the git repository. + +@subsection Checking out a branch + +At this stage you have two branches in your local repository, +both identical. To see them click on + +@example +Branch -> Checkout +@end example + +You should have one local branch called @w{lily-local} and one +tracking branch called @w{origin/master}. The latter is your +local copy of the @w{remote/origin/master} branch in the master +LilyPond repository. The @w{lily-local} branch is where you +will make your local changes. + +When a particular branch is selected, i.e., checked out, the +files visible in your repository are changed to reflect the +state of the files on that branch. + +@subsection Updating files from @w{remote/origin/master} + +Before starting the editing of a file, ensure your local branches +contain the latest version in @w{remote/origin/master} by first +clicking + +@example +Remote -> Fetch from -> origin +@end example + +@noindent +in the Git GUI. + +This will place the latest version of every file, including all the +changes made by others, +into the @q{origin/master} branch of the tracking branches +in your git repository. You can see these files by checking +out this branch. This will not affect any files you have +modified in your local branch. + +You then need to merge these fetched files into your local +branch by clicking on + +@example +Merge -> Local Merge +@end example + +@noindent +and if necessary select the local branch into which the merge +is to be made. + +Note that a merge cannot be completed if there are any local +uncommitted changes on the lily-local branch. + +This will update all the files in that branch to reflect the +current state of the @w{origin/master} branch. If any of the +changes conflict with changes you have made yourself recently +you will be notified of the conflict (see below). + +@subsection Editing files + +First ensure your lily-local branch is checked out, then +simply edit the files in your local Git repository with your +favourite editor and save them back there. If any file contains +non-ASCII characters ensure you save it in UTF-8 format. Git will +detect any changes whenever you restart Git GUI and the file names +will then be listed in the Unstaged Changes panel. +Or you can click the Rescan button to refresh the panel +contents at any time. You may break off and resume at +editing any time. + +The changes you have made may be displayed in diff form +in the top right-hand panel by clicking on the name in +Git GUI. + +When your editing is complete, move the files from being +Unstaged to Staged by clicking the document symbol to +the left of each name. If you change your mind it can +be moved back by clicking on the ticked box to the +left of the name. + +Finally the changes you have made may be committed to +your lily-local branch by entering a brief message in +the Commit Message box and clicking the Commit button. + +If you wish to amend your changes after a commit has been +made, the original version and the changes you made in that +commit may be recovered by selecting + +@example +Commit -> Amend Last Commit +@end example + +@noindent +or by checking the Amend Last Commit radio button at bottom left. +This will return the changes to the Staged state, so further +editing made be carried out within that commit. This must only be +done @emph{before} the changes have been Pushed or sent to your +mentor for Pushing - after that it is too late and corrections +have to be made as a separate commit. + + +@subsection Sending changes to remote/origin/master + +If you do not have write access to @w{remote/origin/master} you will +need to send your changes by email to someone who does. + +First you need to create a diff or patch file containing +your changes. To create this, the file must first be +committed. Then terminate the Git GUI. In the +git bash shell first cd to your Git repository with + +@example +cd [path]/Git +@end example + +if necessary, then produce the patch with + +@example +git format-patch origin +@end example + +This will create a patch file for all the locally committed files +which differ from @w{origin/master}. The patch file can be found +in [path]/Git and will have a name formed from n and the commit +message. + +@subsection Resolving merge conflicts + +As soon as you have committed a changed file your local +branch has diverged from @w{origin/master}, and will +remain diverged until your changes have been committed +in @w{remote/origin/master} and Fetched back into your +@w{origin/master}. Similarly, if a new commit has been made +to @w{remote/origin/master} by someone else and Fetched, your +lily-local branch is divergent. You can detect a divergent +branch by clicking on + +@example +Repository -> Visualise all branch history +@end example + +This opens up a very useful new window called @q{gitk}. +Use this to browse all the commits made by others. + +If the diagram at top left of the resulting window +does not show your branch's tag on the same node as +the @w{remote/origins/master} tag your branch has diverged from +@w{origin/master}. This is quite normal if files you have modified +yourself have not yet been Pushed to @w{remote/origin/master} and +Fetched, or if files modified and committed by others have been +Fetched since you last Merged @w{origin/master} into your lily-local +branch. + +If a file being merged from @w{origin/master} differs from +one you have modified in a way that cannot be resolved +automatically by git, Merge will report a Conflict +which you must resolve by editing the file to create the +version you wish to keep. + +This could happen if the person updating @w{remote/origin/master} +for you has added some changes of his own before +committing your changes to @w{remote/origin/master}, or if someone +else has changed the same file since you last +fetched the file from @w{remote/origin/master}. + +Open the file in your editor and look for sections which +are delimited with ... + +[to be completed when I next have a merge conflict to be +sure I give the right instructions -td] + + +@subsection Other actions + +The instructions above describe the simplest way of using +git on Windows. Other git facilities which may usefully +supplement these include + +@itemize + +@item Using multiple local branches (Create, Rename, Delete) +@item Resetting branches +@item Cherry-picking commits +@item Pushing commits to @w{remote/origin/master} +@item Using gitk to review history + +@end itemize + +Once familiarity with using git on Windows has been gained the +standard git manuals can be used to learn about these. + + +@node Development inside VirtualBox (compiling on Windows) +@section Development inside VirtualBox (compiling on Windows) + + + + diff --git a/Documentation/contributor/issues.itexi b/Documentation/contributor/issues.itexi new file mode 100644 index 0000000000..529227a1aa --- /dev/null +++ b/Documentation/contributor/issues.itexi @@ -0,0 +1,160 @@ +@c -*- coding: us-ascii; mode: texinfo; -*- +@node Issues +@chapter Issues + +@menu +* Introduction to issues:: +* Issue classification:: +* Adding issues to the tracker:: +@end menu + + +@node Introduction to issues +@section Introduction to issues + +First, @qq{issue} isn't just a politically-correct term for +@qq{bug}. We use the same tracker for feature requests and code +TODOs, so the term @qq{bug} wouldn't be accurate. + +Second, the classification of what counts as a bug vs. feature +request, and the priorities assigned to bugs, are a matter of +concern @strong{for developers only}. If you are curious about +the classification, read on, but don't complain that your +particular issue is higher priority or counts as a bug rather than +a feature request. + + +@node Issue classification +@section Issue classification + +Status values: + +@itemize + +@item +New: the item was added by a non-member. Should be reviewed by +the Bug Meister. + +@item +Accepted: the Bug Meister added it, or reviewed the item. + +@item +Started: a programmer is working on a bugfix. (used infrequently, +but should be used more often) + +@end itemize + +Closed status values: + +@itemize + +@item +Invalid: issue should not have been added in the current state. + +@item +Duplicate: issue already exists in the tracker. + +@item +Fixed: programmer claims to have fixed the bug. The Bug Meister +should check the input code in an official binary release. + +@item +Verified: Bug Meister has confirmed that the issue is closed. + +@end itemize + +Type labels: + +@itemize + +@item +Type-Defect: a problem that requires no (or very little) new code +to fix. + +@item +Type-Enhancement: a problem (or new feature) that requries a +significant amount of new code. + +@item +Type-Collision: overlapping notation. (this label takes +precedence over -Defect and -Enhancement) + +@item +Type-Task: not used, I think. TODO: start using it or delete it. + +@item +Type-Other: anything else. TODO: start using it or delete it. + +@end itemize + +Priority labels: + +@itemize + +@item +Priority-High: lilypond segfaults. + +@item +Priority-Regression: it used to work. + +@item +Priority-Medium: normal priority; this is the highest priority a +non-crashing, non-regression bug report can receive. +(irregardless of the perceived importance) + +@item +Priority-Low: less important than normal. + +@item +Priority-Postponed: no fix planned. Generally used for things +like Ancient notation, which nobody wants to touch. + +@end itemize + +Opsys lables: pretty self-explanatory. + +Other lables: + +@itemize + +@item +Security: not used. TODO: delete, unless anybody is serious about +this. + +@item +Performance: not used. TODO: delete. + +@item +Usability: not used. TODO: delete. + +@item +Maintainability: hinders developent of LilyPond. For example, +improvements to the build system, or @qq{helper} python scripts. + +@item +Bounty: somebody is willing to pay for the fix. + +@item +Engraving-nitpick: output is not beautiful, but not strictly +speaking @qq{wrong}. For example, a slur shape which does not +collide with any notation, but looks ugly. + +@item +Warning-nitpick: graphical output is fine, but lilypond prints a +false/misleading warning message. + +@end itemize + + +@node Adding issues to the tracker +@section Adding issues to the tracker + +FIXME: prettify. + +only done by Bug Meister, unless you're really certain you know +what you're doing. + + + + + diff --git a/Documentation/contributor/lsr-work.itexi b/Documentation/contributor/lsr-work.itexi new file mode 100644 index 0000000000..371aa6ceda --- /dev/null +++ b/Documentation/contributor/lsr-work.itexi @@ -0,0 +1,269 @@ +@c -*- coding: us-ascii; mode: texinfo; -*- +@node LSR work +@chapter LSR work + +@menu +* Introduction to LSR:: +* Adding and editing snippets:: +* Approving snippets:: +* LSR to Git:: +* Fixing snippets in LilyPond sources:: +* Updating LSR to a new version:: +@end menu + + +@node Introduction to LSR +@section Introduction to LSR + +The +@uref{http://lsr.dsi.unimi.it/, LilyPond Snippet Repository (LSR)} +is a collection of lilypond examples. A subset of these examples +are automatically imported into the documentation, making it easy +for users to contribute to the docs without learning Git and +Texinfo. + + +@node Adding and editing snippets +@section Adding and editing snippets + +@subheading General guidelines + +When you create (or find!) a nice snippet, if it supported by LilyPond +version running on LSR, please add it to LSR. Go to +@uref{http://lsr.dsi.unimi.it/, LSR} and log in -- if you haven't +already, create an account. Follow the instructions on the website. +These instructions also explain how to modify existing snippets. + +If you think the snippet is particularly informative and you think it +should be included in the documentation, tag it with @qq{docs} and one +or more other categories, or ask somebody who has editing permissions to +do it on the development list. + +Please make sure that the lilypond code follows the guidelines in +@ref{LilyPond formatting}. + +If a new snippet created for documentation purposes compiles with +LilyPond version currently on LSR, it should be added to LSR, and a +reference to the snippet should be added to the documentation. + +If the new snippet uses new features that are not available in the +current LSR version, the snippet should be added to +@file{Documentation/snippets/new} and a reference should be added to the +manual. + +Snippets created or updated in @file{Documentation/snippets/new} should +be copied to @file{Documentation/snippets} by invoking at top of the +source tree + +@example +scripts/auxiliar/makelsr.py +@end example + +@noindent +This also copies translated texidoc fields and snippet titles into +snippets in @file{Documentation/snippets}. + +Be sure that @command{make doc} runs successfully before submitting a +patch, to prevent breaking compilation. + +@subheading Formatting snippets in @file{Documentation/snippets/new} + +When adding a file to this directory, please start the file with + +@example +\version "2.x.y" +\header @{ + lsrtags = "rhythms,expressive-marks" % use existing LSR tags other than +% 'docs'; see makelsr.py for the list of tags used to sort snippets. + texidoc = "This code demonstrates ..." % this will be formated by Texinfo + doctitle = "Snippet title" % please put this at the end so that + the '% begin verbatim' mark is added correctly by makelsr.py. +@} +@end example + +and name the file @file{snippet-title.ly}. + + +@node Approving snippets +@section Approving snippets + +The main task of LSR editors is approving snippets. To find a list of +unapproved snippets, log into @uref{http://lsr.dsi.unimi.it/, LSR} and +select @qq{No} from the dropdown menu to the right of the word +@qq{Approved} at the bottom of the interface, then click +@qq{Enable filter}. + +Check each snippet: + +@enumerate + +@item +Does the snippet make sense and does what the author claims that +it does? If you think the snippet is particularly helpful, add +the @qq{docs} tag and at least one other tag. + +@item +If the snippet is tagged with @qq{docs}, check to see if it +matches our guidelines for @ref{LilyPond formatting}. + +@item +If the snippet uses scheme, check that everything looks good and +there are no security risks. + +@warning{Somebody could sneak a @code{#'(system "rm -rf /")} +command into our source tree if you do not do this! Take this +step @strong{VERY SERIOUSLY}.} + +@end enumerate + + +@node LSR to Git +@section LSR to Git + +@enumerate + +@item +Make sure that @command{convert-ly} and @command{lilypond} commands in +current PATH are in a bleeding edge version -- latest release from +master branch, or even better a fresh snapshot from Git master branch. + +@item +From the top source directory, run: + +@example +wget http://lsr.dsi.unimi.it/download/lsr-snippets-docs-@var{YYYY-MM-DD}.tar.gz +tar -xzf lsr-snippets-docs-@var{YYYY-MM-DD}.tar.gz +scripts/auxiliar/makelsr.py lsr-snippets-docs-@var{YYYY-MM-DD} +@end example + +@noindent +where @var{YYYY-MM-DD} is the current date, e.g. 2009-02-28. + +@item +Follow the instructions printed on the console to manually check for +unsafe files. + +@warning{Somebody could sneak a @code{#'(system "rm -rf /")} +command into our source tree if you do not do this! Take this +step @strong{VERY SERIOUSLY}.} + +@item +Do a git add / commit / push. + +@end enumerate + +Note that whenever there is one snippet from +@file{Documentation/snippets/new} and the other from LSR with the same +file name, the one from @file{Documentation/snippets/new} will be copied +by @command{makelsr.py}. + + +@node Fixing snippets in LilyPond sources +@section Fixing snippets in LilyPond sources + +In case some snippet from @file{Documentation/snippets} causes the +documentation compilation to fail, the following steps should be +followed to fix it reliably. + +@enumerate + +@item +Look up the snippet filename @file{@var{foo}.ly} in the error output +or log, then fix the file @file{Documentation/snippets/@var{foo}.ly} to make the +documentation build succesfully. + +@item +Determine where it comes from by looking at its first line, e.g. run + +@example +head -1 Documentation/snippets/@var{foo}.ly +@end example + +@item +@strong{In case the snippet comes from LSR}, apply the fix to the +snippet in LSR and send a notification email to a LSR editor with CC to +the development list -- see @ref{Adding and editing snippets}. The +failure may sometimes not be caused by the snippet in LSR but by the +syntax conversion made by @command{convert-ly}; in this case, try to fix +@command{convert-ly} or report the problem on the development list, then +run @command{makelsr.py} again, see @ref{LSR to Git}. In some cases, +when some features has been introduced or vastly changed so it requires +(or takes significant advantage of) important changes in the snippet, it +is simpler and recommended to write a new version of the snippet in +@file{Documentation/snippets/new}, then run @command{makelsr.py}. + +@item +@strong{In case the snippet comes from} +@file{Documentation/snippets/new}, apply in +@file{Documentation/snippets/new/@var{foo}.ly} the same fix you did in +@file{Documentation/snippets/@var{foo}.ly}. In case the build failure +was caused by a translation string, you may have to fix +@file{input/texidocs/@var{foo}.texidoc} instead. + +@item +In any case, commit all changes to Git. + +@end enumerate + + + +@node Updating LSR to a new version +@section Updating LSR to a new version + +To update LSR, perform the following steps: + +@enumerate + +@item +Download the latest snippet tarball, extract it, and run +@code{convert-ly} on all files using the command-line option +@code{--to=VERSION} to ensure snippets are updated to the +correct stable version. + +@item +Copy relevant snippets (i.e., snippets whose version is equal to or less +than the new version of LilyPond) from +@file{Documentation/snippets/new/} into the tarball. + +You must not rename any files during this, or the next, stage. + +@item +Verify that all files compile with the new version of LilyPond, +ideally without any warnings or errors. To ease the process, +you may use the shell script that appears after this list. + +Due to the workload involved, we @emph{do not} require that you +verify that all snippets produce the expected output. If you +happen to notice any such snippets and can fix them, great; but as +long as all snippets compile, don't delay this step due to some +weird output. If a snippet is broken, the hordes of willing +web-2.0 volunteers will fix it. It's not our problem. + +@item +Create a tarball and send it back to Sebastiano. + +@item +When LSR has been updated, download another snippet tarball, verify that +the relevant snippets from @file{Documentation/snippets/new/} were +included, then delete those snippets from +@file{Documentation/snippets/new/}. + +@end enumerate + + +Here is a shell script to run all @code{.ly} files in a directory +and redirect terminal output to text files, which are then +searched for the word "failed" to see which snippets do not compile. + +@example +#!/bin/bash + +for LILYFILE in *.ly +do + STEM=$(basename "$LILYFILE" .ly) + echo "running $LILYFILE..." + lilypond --format=png -ddelete-intermediate-files "$LILYFILE" >& "$STEM".txt +done + +grep failed *.txt +@end example diff --git a/Documentation/contributor/programming-work.itexi b/Documentation/contributor/programming-work.itexi new file mode 100644 index 0000000000..bff7bbf471 --- /dev/null +++ b/Documentation/contributor/programming-work.itexi @@ -0,0 +1,853 @@ +@c -*- coding: us-ascii; mode: texinfo; -*- +@node Programming work +@chapter Programming work + +@menu +* Overview of LilyPond architecture:: +* LilyPond programming languages:: +* Programming without compiling:: +* Finding functions:: +* Code style:: +* Debugging LilyPond:: +* Adding or modifying features:: +@end menu + +@node Overview of LilyPond architecture +@section Overview of LilyPond architecture + +LilyPond processes the input file into graphical and musical output in a +number of stages. This process, along with the types of routines that +accomplish the various stages of the process, is described in this section. A +more complete description of the LilyPond architecture and internal program +execution is found in Erik Sandberg's +@uref{http://lilypond.org/web/images/thesis-erik-sandberg.pdf, master's +thesis}. + + +The first stage of LilyPond processing is @emph{parsing}. In the parsing +process, music expressions in LilyPond input format are converted to music +expressions in Scheme format. In Scheme format, a music expression is a list +in tree form, with nodes that indicate the relationships between various music +events. The LilyPond parser is written in Bison. + +The second stage of LilyPond processing is @emph{iterating}. Iterating +assigns each music event to a context, which is the environment in which the +music will be finally engraved. The context is responsible for all further +processing of the music. It is during the iteration stage that contexts are +created as necessary to ensure that every note has a Voice type context (e.g. +Voice, TabVoice, DrumVoice, CueVoice, MensuralVoice, VaticanaVoice, +GregorianTranscriptionVoice), that the Voice type contexts exist in +appropriate Staff type contexts, and that parallel Staff type contexts exist +in StaffGroup type contexts. In addition, during the iteration stage each +music event is assigned a moment, or a time in the music when the event +begins. + +Each type of music event has an associated iterator. Iterators are defined in +*-iterator.cc. During iteration, an +event's iterator is called to deliver that music event to the appropriate +context(s). + +The final stage of LilyPond processing is @emph{translation}. During +translation, music events are prepared for graphical or midi output. The +translation step is accomplished by translators or engravers (the distinction +is unclear). + +Translators are defined in C++ files named *-engraver.cc. In *-engraver.cc, a +C++ class of Engraver type is created. The Engraver is also declared as a +translator. Much of the work of translating is handled by Scheme functions, +which is one of the keys to LilyPond's exceptional flexibility. + + +@node LilyPond programming languages +@section LilyPond programming languages + +Programming in LilyPond is done in a variety of programming languages. Each +language is used for a specific purpose or purposes. This section describes +the languages used and provides links to reference manuals and tutorials for +the relevant language. + +@subsection C++ + +The core functionality of LilyPond is implemented in C++. + +C++ is so ubiquitous that it is difficult to identify either a reference +manual or a tutorial. Programmers unfamiliar with C++ will need to spend some +time to learn the language before attempting to modify the C++ code. + +The C++ code calls Scheme/GUILE through the GUILE interface, which is +documented in the +@uref{http://www.gnu.org/software/guile/manual/html_node/index.html, GUILE + Reference Manual}. + +@subsection GNU Bison + +The LilyPond parser is implemented in Bison, a GNU parser generator. The +Bison homepage is found at @uref{http://www.gnu.org/software/bison/, +gnu.org}. The manual (which includes both a reference and tutorial) is +@uref{http://www.gnu.org/software/bison/manual/index.html, available} in a +variety of formats. + +@subsection GNU Make + +GNU Make is used to control the compiling process and to build the +documentation and the website. GNU Make documentation is available at +@uref{http://www.gnu.org/software/make/manual/, the GNU website}. + +@subsection GUILE or Scheme + +GUILE is the dialect of Scheme that is used as LilyPond's extension language. Many extensions to LilyPond are written entirely in GUILE. The +@uref{http://www.gnu.org/software/guile/manual/html_node/index.html, +GUILE Reference Manual} is available online. + +@uref{http://mitpress.mit.edu/sicp/full-text/book/book.html, Structure and +Interpretation of Computer Programs}, a popular textbook used to teach +programming in Scheme is available in its entirety online. + +An introduction to Guile/Scheme as used in LilyPond can be found in the +Learning Manual, see @rlearning{Scheme tutorial}. + +@subsection MetaFont + +MetaFont is used to create the music fonts used by LilyPond. A MetaFont +tutorial is available at @uref{http://metafont.tutorial.free.fr/, the +METAFONT tutorial page}. + +@subsection PostScript + +PostScript is used to generate graphical output. A brief PostScript tutorial +is @uref{http://local.wasp.uwa.edu.au/~pbourke/dataformats/postscript/, +available online}. The +@uref{http://www.adobe.com/devnet/postscript/pdfs/PLRM.pdf, PostScript Lanugage +Reference} is available online in PDF format. + +@subsection Python + +Python is used for XML2ly and is used for buillding the documentation and the +website. + +Python documentation is available at @uref{http://www.python.org/doc/, +python.org}. + +@node Programming without compiling +@section Programming without compiling + +Much of the development work in LilyPond takes place by changing *.ly or +*.scm files. These changes can be made without compiling LilyPond. Such +changes are described in this section. + + +@subsection Modifying distribution files + +Much of LilyPond is written in Scheme or LilyPond input files. These +files are interpreted when the program is run, rather than being compiled +when the program is built, and are present in all LilyPond distributions. +You will find .ly files in the ly/ directory and the Scheme files in the +scm/ directory. Both Scheme files and .ly files can be modified and +saved with any text editor. It's probably wise to make a backup copy of +your files before you modify them, although you can reinstall if the +files become corrupted. + +Once you've modified the files, you can test the changes just by running +LilyPond on some input file. It's a good idea to create a file that +demonstrates the feature you're trying to add. This file will eventually +become a regression test and will be part of the LilyPond distribution. + +@subsection Desired file formatting + +Files that are part of the LilyPond distribution have Unix-style line +endings (LF), rather than DOS (CR+LF) or MacOS 9 and earlier (CR). Make +sure you use the necessary tools to ensure that Unix-style line endings are +preserved in the patches you create. + +Tab characters should not be included in files for distribution. All +indentation should be done with spaces. Most editors have settings to +allow the setting of tab stops and ensuring that no tab characters are +included in the file. + +Scheme files and LilyPond files should be written according to standard +style guidelines. Scheme file guidelines can be found at +@uref{http://community.schemewiki.org/?scheme-style}. Following these +guidelines will make your code easier to read. Both you and others that +work on your code will be glad you followed these guidelines. + +For LilyPond files, you should follow the guidelines for LilyPond snippets +in the documentation. You can find these guidelines at +@ref{Texinfo introduction and usage policy}. + +@node Finding functions +@section Finding functions + +When making changes or fixing bugs in LilyPond, one of the initial +challenges is finding out where in the code tree the functions to +be modified live. With nearly 3000 files in the source tree, +trial-and-error searching is generally ineffective. This section +describes a process for finding interesting code. + +@subsection Using the ROADMAP + +The file ROADMAP is located in the main directory of the lilypond source. +ROADMAP lists all of the directories in the LilPond source tree, along +with a brief description of the kind of files found in each directory. +This can be a very helpful tool for deciding which directories to search +when looking for a function. + + +@subsection Using grep to search + +Having identified a likely subdirectory to search, the grep utility can +be used to search for a function name. The format of the grep command is + +@example +grep -i functionName subdirectory/* +@end example + +This command will search all the contents of the directory subdirectory/ +and display every line in any of the files that contains +functionName. The @code{-i} option makes @command{grep} ignore +case -- this can be very useful if you are not yet familiar with +our capitalization conventions. + +The most likely directories to grep for function names are scm/ for +scheme files, ly/ for lilypond input (*.ly) files, and lily/ for C++ +files. + + +@subsection Using git grep to search + +If you have used git to obtain the source, you have access to a +powerful tool to search for functions. The command: + +@example +git grep functionName +@end example + +will search through all of the files that are present in the git +repository looking for functionName. It also presents the results +of the search using @code{less}, so the results are displayed one page +at a time. + +@subsection Searching on the git repository at Savannah + +You can also use the equivalent of git grep on the Savannah server. + +@itemize + +@item +Go to http://git.sv.gnu.org/gitweb/?p=lilypond.git + +@item +In the pulldown box that says commit, select grep. + +@item +Type functionName in the search box, and hit enter/return + +@end itemize + +This will initiate a search of the remote git repository. + + +@node Code style +@section Code style +@c email to wl@gnu.org when I get here. + +@warning{this is pending some confirmation on -devel. July 2009 -gp} + +Command-line script to format stuff with emacs: + +@example +#!/bin/sh +emacs $1 -batch --eval '(indent-region (point-min) (point-max) nil)' -f save-buffer +@end example + +(that's all on one line) + +Save it as a shell script, then run on the file(s) you modified. + +@menu +@end menu + +@subsection Handling errors + +As a general rule, you should always try to continue computations, +even if there is some kind of error. When the program stops, it +is often very hard for a user to pinpoint what part of the input +causes an error. Finding the culprit is much easier if there is +some viewable output. + +So functions and methods do not return errorcodes, they never +crash, but report a programming_error and try to carry on. + +@subsection Languages + +C++ and Python are preferred. Python code should use PEP 8. + +@subsection Filenames + +Definitions of classes that are only accessed via pointers (*) or +references (&) shall not be included as include files. + +@verbatim + filenames + + ".hh" Include files + ".cc" Implementation files + ".icc" Inline definition files + ".tcc" non inline Template defs + + in emacs: + + (setq auto-mode-alist + (append '(("\\.make$" . makefile-mode) + ("\\.cc$" . c++-mode) + ("\\.icc$" . c++-mode) + ("\\.tcc$" . c++-mode) + ("\\.hh$" . c++-mode) + ("\\.pod$" . text-mode) + ) + auto-mode-alist)) +@end verbatim + +The class Class_name is coded in @q{class-name.*} + +@subsection Indentation + +Standard GNU coding style is used. In emacs: + +@verbatim + (add-hook 'c++-mode-hook + '(lambda() (c-set-style "gnu") + )) +@end verbatim + +If you like using font-lock, you can also add this to your +@q{.emacs}: + +@verbatim + (setq font-lock-maximum-decoration t) + (setq c++-font-lock-keywords-3 + (append + c++-font-lock-keywords-3 + '(("\\b\\(a-zA-Z_?+_\\)\\b" 1 font-lock-variable-name-face) ("\\b\\(A-Z?+a-z_?+\\)\\b" 1 font-lock-type-face)) + )) +@end verbatim + + +@subsection Classes and Types + +@verbatim +This_is_a_class +@end verbatim + + +@subsection Members + +Member variable names end with an underscore: + +@verbatim +Type Class::member_ +@end verbatim + + +@subsection Macros + +Macro names should be written in uppercase completely. + + +@subsection Broken code + +Do not write broken code. This includes hardwired dependencies, +hardwired constants, slow algorithms and obvious limitations. If +you can not avoid it, mark the place clearly, and add a comment +explaining shortcomings of the code. + +We reject broken-in-advance on principle. + +@subsection Naming + + +@subsection Messages + +Messages need to follow Localization. + + +@subsection Localization + +This document provides some guidelines for programmers write user +messages. To help translations, user messages must follow +uniform conventions. Follow these rules when coding for LilyPond. +Hopefully, this can be replaced by general GNU guidelines in the +future. Even better would be to have an English (en_BR, en_AM) +guide helping programmers writing consistent messages for all GNU +programs. + +Non-preferred messages are marked with `+'. By convention, +ungrammatical examples are marked with `*'. However, such ungrammatical +examples may still be preferred. + +@itemize + +@item +Every message to the user should be localized (and thus be marked +for localization). This includes warning and error messages. + +@item +Don't localize/gettextify: + +@itemize +@item +`programming_error ()'s + +@item +`programming_warning ()'s + +@item +debug strings + +@item +output strings (PostScript, TeX, etc.) + +@end itemize + +@item +Messages to be localised must be encapsulated in `_ (STRING)' or +`_f (FORMAT, ...)'. E.g.: + +@example +warning (_ ("need music in a score")); +error (_f ("cannot open file: `%s'", file_name)); +@end example + +In some rare cases you may need to call `gettext ()' by hand. This +happens when you pre-define (a list of) string constants for later +use. In that case, you'll probably also need to mark these string +constants for translation, using `_i (STRING)'. The `_i' macro is +a no-op, it only serves as a marker for `xgettext'. + +@example +char const* messages[] = @{ + _i ("enable debugging output"), + _i ("ignore lilypond version"), + 0 +@}; + +void +foo (int i) +@{ + puts (gettext (messages i)); +@} +@end example + +See also `flower/getopt-long.cc' and `lily/main.cc'. + +@item +Do not use leading or trailing whitespace in messages. If you need +whitespace to be printed, prepend or append it to the translated +message + +@example +message ("Calculating line breaks..." + " "); +@end example + +@item +Error or warning messages displayed with a file name and line +number never start with a capital, eg, + +@example +foo.ly: 12: not a duration: 3 +@end example + +Messages containing a final verb, or a gerund (`-ing'-form) always +start with a capital. Other (simpler) messages start with a +lowercase letter + +@example +Processing foo.ly... +`foo': not declared. +Not declaring: `foo'. +@end example + +@item +Avoid abbreviations or short forms, use `cannot' and `do not' +rather than `can't' or `don't' +To avoid having a number of different messages for the same +situation, well will use quoting like this `"message: `%s'"' for all +strings. Numbers are not quoted: + +@example +_f ("cannot open file: `%s'", name_str) +_f ("cannot find character number: %d", i) +@end example + +@item +Think about translation issues. In a lot of cases, it is better to +translate a whole message. The english grammar must not be imposed +on the translator. So, instead of + +@example +stem at + moment.str () + does not fit in beam +@end example + +have + +@example +_f ("stem at %s does not fit in beam", moment.str ()) +@end example + +@item +Split up multi-sentence messages, whenever possible. Instead of + +@example +warning (_f ("out of tune! Can't find: `%s'", "Key_engraver")); +warning (_f ("cannot find font `%s', loading default", font_name)); +@end example + +rather say: + +@example +warning (_ ("out of tune:")); +warning (_f ("cannot find: `%s', "Key_engraver")); +warning (_f ("cannot find font: `%s', font_name)); +warning (_f ("Loading default font")); +@end example + +@item +If you must have multiple-sentence messages, use full punctuation. +Use two spaces after end of sentence punctuation. No punctuation +(esp. period) is used at the end of simple messages. + +@example +_f ("Non-matching braces in text `%s', adding braces", text) +_ ("Debug output disabled. Compiled with NPRINT.") +_f ("Huh? Not a Request: `%s'. Ignoring.", request) +@end example + +@item +Do not modularise too much; words frequently cannot be translated +without context. It is probably safe to treat most occurences of +words like stem, beam, crescendo as separately translatable words. + +@item +When translating, it is preferable to put interesting information +at the end of the message, rather than embedded in the middle. +This especially applies to frequently used messages, even if this +would mean sacrificing a bit of eloquency. This holds for original +messages too, of course. + +@example +en: cannot open: `foo.ly' ++ nl: kan `foo.ly' niet openen (1) +kan niet openen: `foo.ly'* (2) +niet te openen: `foo.ly'* (3) +@end example + + +The first nl message, although grammatically and stylistically +correct, is not friendly for parsing by humans (even if they speak +dutch). I guess we would prefer something like (2) or (3). + +@item +Do not run make po/po-update with GNU gettext < 0.10.35 + +@end itemize + + + +@node Debugging LilyPond +@section Debugging LilyPond + +The most commonly used tool for debugging LilyPond is the GNU debugger +gdb. Use of gdb is described in this section. + +@subsection Debugging overview + +Using a debugger simplifies troubleshooting in at least two ways. + +First, breakpoints can be set to pause execution at any desired point. +Then, when execution has paused, debugger commands can be issued to +explore the values of various variables or to execute functions. + +Second, the debugger allows the display of a stack trace, which shows +the sequence in which functions are called and the arguments to the +various function calls. + + +@subsection Compiling with debugging information + +In order to use a debugger with LilyPond, it is necessary to compile +LilyPond with debugging information. This is accomplished by running +the following commands in the main LilyPond source directory. + +@example +./configure --disable-optimising + +make +@end example + +This will create a version of LilyPond that contains the debugging +information that will allow the debugger to tie the source code +to the compiled code. + +You should not do @var{make install} if you want to use a debugger +with LilyPond. @var{make install} will strip the debugging information +from the LilyPond binary. + +To set breakpoints in Scheme functions, put + +@example +\include "guile-debugger.ly" +@end example + +in your input file after any scheme procedures you have defined in +that file. When your input file is processed, a guile prompt +will be displayed. At the guile prompt, you can set breakpoints with +the @code{break!} procedure: + +@example +guile> (break! my-scheme-procedure) +@end example + +Once you have set the desired breakpoints, you exit the guile repl frame +by typing: + +@example +guile> (quit) +@end example + +When one of the scheme routines for which you have set breakpoints is +entered, guile will interrupt execution in a debug frame. At this point, +you will have access to guile debugging commands. For a listing of these +commands, type: + +@example +debug> help +@end example + +@subsection Typical gdb usage + +@subsection Typical .gdbinit files + +The behavior of gdb can be readily customized through the use of +@var{.gdbinit} files. A @var{.gdbinit} file is a file named +@var{.gdbinit} (notice the @qq{.} at the beginning of the file name) +that is placed in a user's home directory. + +The @var{.gdbinit} file below is from Han-Wen. It sets breakpoints +for all errors and defines functions for displaying scheme objects +(ps), grobs (pgrob), and parsed music expressions (pmusic). + +@example +file lily/out/lilypond +b programming_error +b Grob::programming_error + +define ps + print ly_display_scm($arg0) +end +define pgrob + print ly_display_scm($arg0->self_scm_) + print ly_display_scm($arg0->mutable_property_alist_) + print ly_display_scm($arg0->immutable_property_alist_) + print ly_display_scm($arg0->object_alist_) +end +define pmusic + print ly_display_scm($arg0->self_scm_) + print ly_display_scm($arg0->mutable_property_alist_) + print ly_display_scm($arg0->immutable_property_alist_) +end +@end example + +@subsection Using Guile interactively with LilyPond + +In order to experiment with Scheme programming in the LilyPond +environment, it is convenient to have a Guile interpreter that +has all the LilyPond modules loaded. This requires the following +steps. + +First, define a Scheme symbol for the active module +in the .ly file: + +@example +#(module-define! (resolve-module '(guile-user)) + 'lilypond-module (current-module)) +@end example + +Second, place a Scheme function in the .ly file that gives an interactive Guile +prompt: + +@example +#(top-repl) +@end example + +When the .ly file is compiled, this causes the compilation to be interrupted +and an interactive guile prompt to appear. When the guile prompt appears, +the LilyPond active module must be set as the current guile module: + +@example +guile> (set-current-module lilypond-module) +@end example + +Proper operation of these commands can be demonstrated by typing the name +of a LilyPond public scheme function to see if it's properly defined: + +@example +guile> fret-diagram-verbose-markup +# +@end example + +If the LilyPond module has not been correctly loaded, an error +message will be generated: + +@example +guile> fret-diagram-verbose-markup +ERROR: Unbound variable: fret-diagram-verbose-markup +ABORT: (unbound-variable) +@end example + +Once the module is properly loaded, any valid LilyPond Scheme expression +can be entered at the interactive prompt. + +After the investigation is complete, the interactive guile interpreter +can be exited: + +@example +guile> (quit) +@end example + +The compilation of the .ly file will then continue. + +@node Adding or modifying features +@section Adding or modifying features + +When a new feature is to be added to LilyPond, it is necessary to +ensure that the feature is properly integrated to maintain +its long-term support. This section describes the steps necessary +for feature addition. + +@subsection Write the code + +You should create a new git branch for writing the code, as that +will separate it from the master branch and allow you to continue +to work on small projects related to master. + +Please be sure to follow the rules for programming style discussed +earlier in this chapter. + +@subsection Write regression tests + +In order to demonstrate that the code works properly, you will +need to write one or more regression tests. These tests are +typically .ly files that are found in input/regression. + +Regression tests should be as brief as possible to demonstrate the +functionality of the code. + +Regression tests should generally cover one issue per test. Several +short, single-issue regression tests are preferred to a single, long, +multiple-issue regression test. + +Use existing regression tests as templates to demonstrate the type of +header information that should be included in a regression test. + +@subsection Write documentation + +Although it is not required, it is helpful if the developer can +write relevant material for inclusion in the Notation Reference. +If the developer does not feel qualified to write the documentation, +a documentation editor will be able to write it from the regression +tests. + +If the modification changes the input syntax so that inline snippets in +the documentation need to be changed, you will need to change the +snippets in both the english version of the documentation and any +translated versions. If you do not change the snippets in all +translations, older versions of the snippet may be included +when the documentation is built. + +If lsr snippets need to be changed, the snippet should be copied to +@file{Documentation/snippets/new} and modified there. The portions of +the snippet that are added by makelsr.py should be removed. The changed +snippet will then be included in all versions of the documentation. + +If non-snippet text is changed in the english documentation, no +corresponding changes should be made in the translated documentation. + +@subsection Write convert-ly rule + +If the modification changes the input syntax, a convert-ly rule +should be written to automatically update input files from older +versions. + +convert-ly rules are found in python/convertrules.py + +If possible, the convert-ly rule should allow automatic updating +of the file. In some cases, this will not be possible, so the +rule will simply point out to the user that the feature needs +manual correction. + +@subsection Write NEWS entry + +An entry should be added to the NEWS file to describe the feature +changes to be implemented. This is especially important for changes +that change input file syntax. + +Hints for NEWS file entries are given at the top of the NEWS file. + +New entries in NEWS go at the top of the file. + +The NEWS entry should be written to show how the new change +improves LilyPond, if possible. + +@subsection Verify regression test + +In order to avoid breaking LilyPond, it is important to verify that +the regression tests all succeed. This process is described in +@ref{Regression tests}. + +@subsection Post patch for comments + +For any change other than a minor change, a patch set should be +posted on Rietveld for comment. + +The patch set is posted by issuing the following command, after +first committing all changes: + +@example +git-cl upload +@end example + +@noindent +where is the SHA1 ID of the commit to be used +as a reference source for the patch (generally, this will be the +SHA1 ID of origin/master). + +After prompting for an email and a password, the patch set will be +posted to Rietveld. + +An email should then be sent to lilypond-devel, with a subject line +starting with PATCH:, asking for comments on the patch. + +As revisions are made in response to comments, successive patch sets +for the same issue can be uploaded by reissuing the git-cl command. + +@subsection Push patch + +Once all the comments have been addressed, the patch can be pushed. + +If the author has push privileges, the author will push the patch. +Otherwise, a developer with push privileges will push the patch. + +@subsection Closing the issues + +Once the patch has been pushed, all the relevant issues should be +closed. + +On Rietveld, the author should log in an close the issue either by +using the @q{Edit Issue} link, or by clicking the circled x icon +to the left of the issue name. + +If the changes were in response to a feature request on the Google +issue tracker for LilyPond, the author should change the status to +@q{Fixed_x_y_z} where the patch was fixed in version x.y.z. If +the author does not have privileges to change the status, an email +should be sent to bug-lilypond requesting the BugMeister to change +the status. diff --git a/Documentation/contributor/regressions.itexi b/Documentation/contributor/regressions.itexi new file mode 100644 index 0000000000..48fb7394d8 --- /dev/null +++ b/Documentation/contributor/regressions.itexi @@ -0,0 +1,28 @@ +@c -*- coding: us-ascii; mode: texinfo; -*- +@node Regression tests +@chapter Regression tests + +@menu +* Introduction to regression tests:: +* Current regtest output:: +* Comparison regtest output:: +* MusicXML tests:: +@end menu + + +@node Introduction to regression tests +@section Introduction to regression tests + + +@node Current regtest output +@section Current regtest output + + +@node Comparison regtest output +@section Comparison regtest output + + +@node MusicXML tests +@section MusicXML tests + + diff --git a/Documentation/contributor/release-work.itexi b/Documentation/contributor/release-work.itexi new file mode 100644 index 0000000000..0a503a278f --- /dev/null +++ b/Documentation/contributor/release-work.itexi @@ -0,0 +1,230 @@ +@c -*- coding: us-ascii; mode: texinfo; -*- +@node Release work +@chapter Release work + +@menu +* Development phases:: +* Minor release checklist:: +* Major release checklist:: +* Making a release:: +@end menu + + +@node Development phases +@section Development phases + +There are 2.5 states of development for LilyPond. + +@itemize + +@item @strong{Stable phase}: +Starting from the release of a new major version @code{2.x.0}, the +following patches @strong{MAY NOT} be merged with master: + +@itemize +@item Any change to the input syntax. If a file compiled with a +previous @code{2.x} version, then it must compile in the new +version. + +@item New features with new syntax @emph{may be committed}, +although once committed that syntax cannot change during the +remainder of the stable phase. + +@item Any change to the build dependencies (including programming +libraries, documentation process programs, or python modules used +in the buildscripts). If a contributor could compile a previous +lilypond @code{2.x}, then he must be able to compile the new +version. + +@end itemize + +@item @strong{Development phase}: +Any commits are fine. Readers may be familiar with the term +@qq{merge window} from following Linux kernel news. + + +@item @strong{Release prep phase}: +FIXME: I don't like that name. + +A new git branch @code{stable/2.x} is created, and a major release +is made in two weeks. + +@itemize + +@item @code{stable/2.x branch}: +Only translation updates and important bugfixes are allows. + +@item @code{master}: +Normal @qq{stable phase} development occurs. + +@end itemize + +If we discover the need to change the syntax or build system, we +will apply it and re-start the release prep phase. + +@end itemize + +This marks a radical change from previous practice in LilyPond. +However, this setup is not intended to slow development -- as a +rule of thumb, the next development phase will start within a +month of somebody wanting to commit something which is not +permitted during the stable phase. + + + +@node Minor release checklist +@section Minor release checklist + +A @qq{minor release} means an update of @code{y} in @code{2.x.y}. + +email brief summary to info-lilypond + + + +@node Major release checklist +@section Major release checklist + +A @qq{major release} means an update of @code{x} in @code{2.x.0}. + +Before release: + +* write release notes. note: stringent size requirements for + various websites, so be brief. + +* write preface section for manual. + +* submit pots for translation : send url of tarball to +translation@@iro.umontreal.ca, mentioning lilypond-VERSION.pot + +* Check reg test + +* Check all 2ly scripts. + +* Run convert-ly on all files, bump parser minimum version. + +* Make FTP directories on lilypond.org + +* website: + - Make new table in download.html + + - add to documentation list + + - revise examples tour.html/howto.html + + - add to front-page quick links + + - change all links to the stable documentation + + - doc auto redirects to v2.LATEST-STABLE + +News: + + comp.music.research + comp.os.linux.announce + + comp.text.tex + rec.music.compose + +Mail: + + info-lilypond@@gnu.org + +linux-audio-announce@@lists.linuxaudio.org +linux-audio-user@@lists.linuxaudio.org +linux-audio-dev@@lists.linuxaudio.org + + tex-music@@icking-music-archive.org + + --- non-existant? + abcusers@@blackmill.net + + rosegarden-user@@lists.sourceforge.net + info-gnu@@gnu.org + noteedit-user@@berlios.de + + gmane.comp.audio.fomus.devel + gmane.linux.audio.users + gmane.linux.audio.announce + gmane.comp.audio.rosegarden.devel + +Web: + + lilypond.org + freshmeat.net + linuxfr.com + http://www.apple.com/downloads + harmony-central.com (news@@harmony-central.com) + versiontracker.com [auto] + hitsquad.com [auto] + http://www.svgx.org + + + +@node Making a release +@section Making a release + +@subheading Technical notes + +To build GUB: + +@itemize + +@item +Run the following (from the gub/ dir): + +@example +make -f lilypond.make update-versions +@end example + +@item +Download +@uref{http://lilypond.org/download/binaries/test-output/lilypond-2.13.0-0.test-output.tar.bz2,lilypond-2.13.0-0.test-output.tar.bz2} + +@item +Copy / move / link it to uploads, but rename it to +@file{lilypond-2-13.test-output.tar.bz2} + +@item +Run: + +@example +make lilypond +@end example + +@end itemize + +To upload: + +@itemize + +@item remove the "t" from the rsync command in test-lily/rsync-lily-doc.py + +@item run: + +@example +python test-lily/upload.py --branch=master --url git://git.sv.gnu.org/lilypond.git --execute +@end example + +@end itemize + + +@subheading Policy notes + +@itemize + +@item +Build with GUB, and check the regtests. + +@item +Upload the tarballs and sh scripts. + +@item +(if major) +Branch MASTER to stable/2.x. + +@item +Make announcement. + +@end itemize + + diff --git a/Documentation/contributor/website-work.itexi b/Documentation/contributor/website-work.itexi new file mode 100644 index 0000000000..cb4e0aac9a --- /dev/null +++ b/Documentation/contributor/website-work.itexi @@ -0,0 +1,22 @@ +@c -*- coding: us-ascii; mode: texinfo; -*- +@node Website work +@chapter Website work + +@menu +* Introduction to website work:: +* Translating the website:: +@end menu + + +@node Introduction to website work +@section Introduction to website work + +Short answer: don't do it yet. We're completely revamping the +website. + + +@node Translating the website +@section Translating the website + + + diff --git a/Documentation/css/GNUmakefile b/Documentation/css/GNUmakefile new file mode 100644 index 0000000000..277b76a362 --- /dev/null +++ b/Documentation/css/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../.. + +STEPMAKE_TEMPLATES=documentation + +include $(depth)/make/stepmake.make diff --git a/Documentation/css/lilypond-blue.css b/Documentation/css/lilypond-blue.css new file mode 100644 index 0000000000..47ac507731 --- /dev/null +++ b/Documentation/css/lilypond-blue.css @@ -0,0 +1,355 @@ +/**********************************************************/ +/* PAGE-WIDE SETTINGS */ +/**********************************************************/ + +html { + height: 100%; +} + +body { + background-color: white; + color: black; + font-size: 87.5%; + height: 100%; + line-height: 1.125; + margin: 0 auto; + padding: 0; +} + + +/***********************************************************/ +/* HEADERS */ +/***********************************************************/ + +.chapter, .section, .subsection, +.appendix, .appendixsec, .appendixsubsec, +.unnumberedsubsubsec, .subsubheading, +.unnumbered, .subheading { + border-bottom: 1px dashed #bbb; + color: #204a87; + margin: 1em 0; + padding-bottom: 0.4em; +} + +.settitle { + background-color: #eef; + border-bottom: 1px solid #3465A4; + font-size: 2em; + margin: 0.5em 0 0 0; + padding: 0.5em; +} + +.chapter { + font-size: 1.8em; + padding: 0.5em; +} + +.section { + font-size: 1.6em; + padding: 0.5em; +} + +.subsection { + font-size: 1.4em; + padding: 0.5em; +} + +.unnumberedsubsubsec { + font-size: 1.25em; + padding: 0.5em; +} + +.subsubheading { + font-size: 1em; + font-weight: bold; + padding: 0.5em 1em; +} + +/***********************************************************/ +/* LINKS */ +/***********************************************************/ + +a:link { + /* color: #4169e1; */ + /* color: #3555b6; */ + color: #3465a4; +} + +a:visited { + color: #8f5902; +} + +a:hover { + color: #ce5c00; +} + +a:active { + color: #4487D7; +} + +/***********************************************************/ +/* BLOCK FORMATTING */ +/***********************************************************/ + +blockquote, .smallexample { + border: thin solid #3465a4; + border-width: 0 0 0 2px; + margin: 1em 0 1em 3em; + padding: 0; +} + +blockquote p, pre.smallexample { + margin: 0; + padding: 1em; +} + +blockquote blockquote { + border: none; + /* border: thick red dashed; */ +} + +.verbatim, .example, .lisp { + font-size: 1.25em; + margin: 0; + padding: 1em; +} + +hr { + display: none; +} + +table.cartouche { + background: #eee; + border: 1px solid #3465a4; + border-width: 0 0 0 2px; + width: 85%; + padding: 0 0.5em; + margin: 1em 0 1em 3em; +} + +table.cartouche p { + padding: 1em; + margin: 0; +} + +table.cartouche td { + border: none; +} + +/***********************************************************/ +/* MAIN CONTENT */ +/***********************************************************/ + +div#main { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 25%; + padding: 0; + margin: 0; + overflow: auto; +} + +div#main li { + padding: 0 1em 0.5em 0; +} + +div#main ul { + margin: 0; +} + +h1, h2, h3, h4, p, table, address, dt { + padding-left: 1em; + padding-right: 1em; +} + +p { + margin: 1em 0; +} + +th { + text-align: left; +} + +#languages { + margin: 0; + padding: 1em; +} + +pre.menu-comment { + font-size: 1em; + padding-top: 1em; + padding-bottom: 0; + margin: 0; +} + +/***********************************************************/ +/* TOC SIDEBAR */ +/***********************************************************/ + +div#tocframe { + background-color: #F9FCFF; + font-size: 0.83em; + line-height: 1.4; + list-style-type: none; + margin: 0; + padding: 0; + position: absolute; + bottom: 0; + left: 0; + right: 75%; + top: 0; + overflow: auto; + z-index: 100; +} + +/* position: fixed for savvy browsers */ + +@media screen { + body > div#tocframe { + position: fixed; + } +} + +div#tocframe h4 { + background-color: #eef; + border: 1px solid #3465A4; + border-width: 0 0 1px 0; + color: #344; + font-size: 1.2em; + font-weight: normal; + height: 26px; + margin: 0; + padding: 8px 0 0 6px; +} + +#tocframe .contents { + background-color: transparent; + border: none; + list-style-type: none; + margin: 0; + padding: 0; +} + +#tocframe ul.toc { + list-style-type: none; + margin: 0; + padding: 1em 0.5em; +} + +#tocframe ul.toc ul.toc { + margin: 0; + padding: 0; +} + +#tocframe ul.toc li { + margin: 0; + padding: 0; +} + +#tocframe ul.toc > li { + font-size: 1em; +} + +#tocframe ul.toc li li { + padding-left: 1em; +} + +li.toc_current { + font-style: italic; + font-weight: bold; +} + +li.toc_current ul { + background: transparent; + font-style: normal; + font-weight: normal; +} + + +/***********************************************************/ +/* NAVIGATION */ +/***********************************************************/ + +.nav_table { + background-color: #eef; + border: 1px solid #3465A4; + border-width: 0 0 1px 0; + font-size: 0.8em; + margin: 0; + padding: 0; + width: 100%; +} + +div.header { + background-color: #dde; + margin: 0.75em 0 0 0; +} + +div.header h1 { + margin: 0; + padding: 0.5em 0 0.5em 1em; +} + +div.subheader { + background-color: #eef; + margin: 0; +} + +div.subheader p { + margin: 0; + padding: 1em 0 1em 2em; +} + +table#navigation { + line-height: 1.5; + margin: 1em 0 1em 3em; + padding: 0; +} + +table#navigation td { + padding: 0.5em 0.75em; +} + +table#navigation ul { + margin-bottom: 1em; + padding-left: 0.5em; +} + +table .title { + font-weight: bold; +} + +.footer { + background-color: #eef; + border: 1px solid #3465A4; + border-width: 0 0 1px 0; + font-size: 0.8em; + text-indent: 1em; + padding: 1.5em 0; + margin: 1em 0 0 0; +} + +.footer p { + line-height: 1.5; + padding: 0; + margin: 0 0.25em; +} + +table.menu { + margin: 0 0 1em; +} + +/***********************************************************/ +/* OVERRIDES FOR PRINTING */ +/***********************************************************/ + +@media print { + body { padding-left: 0; font: 10pt Georgia, Garamond, serif;} + /* Hide the sidebar: */ + #tocframe { display: none; } + .nav_table { display: none; } + /* Let #main expand to fill the new space */ + div#main { position: static; left: 0; } +} \ No newline at end of file diff --git a/Documentation/css/lilypond-ie-fixes.css b/Documentation/css/lilypond-ie-fixes.css new file mode 100644 index 0000000000..274f7fdc0d --- /dev/null +++ b/Documentation/css/lilypond-ie-fixes.css @@ -0,0 +1,71 @@ +/***********************************************************/ +/* BASE STYLES */ +/***********************************************************/ + +body { + height: 100%; + font-size: 100%; + min-height: 0; + text-align: center; +} + +/***********************************************************/ +/* MAIN CONTENT */ +/***********************************************************/ + +div#main { + min-height: 0; + height: 100%; + width: 73%; + overflow-x: auto; +} + +table.menu { + margin-left: 1em; +} + +.nav_table { + width: 100%; +} + +blockquote { + width: 100%; + margin: 1em 1%; +} + +table.cartouche { + width: 85%; + margin: 1em 7.5%; +} + +/***********************************************************/ +/* TOC SIDEBAR */ +/***********************************************************/ + +div#tocframe { + height: 100%; + width: 27%; +} + +/***********************************************************/ +/* NAVIGATION */ +/***********************************************************/ + +table#navigation { + margin: 1em auto; +} + + +/***********************************************************/ +/* IE CENTERING FIXES */ +/***********************************************************/ + +table#navigation, div#tocframe, div#main, +p, h1, h2, ul, .footer, #languages { + text-align: left; +} + +div.header h1, div.subheader p { + text-align: center; +} + diff --git a/Documentation/css/lilypond-mccarty.css b/Documentation/css/lilypond-mccarty.css new file mode 100644 index 0000000000..ee917448cc --- /dev/null +++ b/Documentation/css/lilypond-mccarty.css @@ -0,0 +1,415 @@ +/**********************************************************/ +/* PAGE-WIDE SETTINGS */ +/**********************************************************/ + +html { + height: 100%; +} + +body { + margin: 0 auto; + padding: 0; + height: 100%; + font-size: 100%; + line-height: 1.125; + color: #000; + background-color: #fff; +} + +/***********************************************************/ +/* HEADERS */ +/***********************************************************/ + +.chapter, .section, .subsection, .subsubsection, +.appendix, .appendixsec, .appendixsubsec, +.unnumbered, .unnumberedsec, .unnumberedsubsec, .unnumberedsubsubsec, +.subheading, .subsubheading { + color: #204a87; + border-bottom: 1px dashed black; + padding-bottom: 0.15em; + margin-top: 0.6em; + margin-bottom: 1em; +} + +.settitle { + background: #b1d281; + font-size: 2em; + text-align: center; + padding: 0.4em 0.5em; + border: solid #7b925a; + border-width: 1px 0; + margin: 0; +} + +.chapter, .appendix, .unnumbered { + font-size: 1.8em; +} + +.section, .appendixsec, .unnumberedsec { + font-size: 1.6em; +} + +.subsection, .appendixsubsec, .unnumberedsubsec { + font-size: 1.4em; +} + +.subheading, .subsubsection, .unnumberedsubsubsec { + font-size: 1.25em; +} + +.subsubheading { + font-size: 1em; + font-weight: bold; +} + +.chapheading { + position: absolute; + height: 0; + overflow: hidden; + text-indent: -999em; +} + +/***********************************************************/ +/* LINKS */ +/***********************************************************/ + +a:link { + color: #0c51ab; +} + +a:visited { + color: #804f01; +} + +a:active { + color: #278800; +} + +a:hover { + color: #0105ad; +} + +/***********************************************************/ +/* BLOCK FORMATTING */ +/***********************************************************/ + +blockquote, .smallexample { + width: 96%; + padding: 0; + border: solid #b1d281; + border-width: 1px 1px 1px 5px; + margin: 1em auto; +} + +blockquote p, pre.smallexample { + padding: 1em; + margin: 0; +} + +blockquote blockquote { + border: none; +} + +.verbatim, .example, .lisp { + font-size: 1em; + padding: 1em; + margin: 0; +} + +#main hr { + height: 0; + padding: 0; + border: 0; + margin: 0; + text-indent: -999em; +} + +table.cartouche { + background: #f5f5dc; + width: 85%; + border-collapse: collapse; + padding: 0 0.5em; + border: 2px solid #8f5902; + margin: 0 auto 1em; +} + +table.cartouche p { + padding: 1em; + margin: 0; +} + +table.cartouche td { + border: none; +} + +/***********************************************************/ +/* MAIN CONTENT */ +/***********************************************************/ + +div#main { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 27%; + padding: 0; + margin: 0; + overflow: auto; +} + +div#main li { + padding: 0 1em 0.5em 0; +} + +div#main ul { + margin: 0; + padding-left: 3em; +} + +h1, h2, h3, h4, p, table, address, dt { + padding-left: 1em; + padding-right: 1em; +} + +p { + margin: 1em 0; +} + +#languages { + padding: 0.5em 1em; + margin: 0; +} + +pre.menu-comment { + font-size: 1em; + padding-top: 1em; + padding-bottom: 0; + margin: 0; +} + +#main .contents li { + padding-bottom: 0; +} + +#main .contents > ul { + margin-bottom: 1em; +} + +/***********************************************************/ +/* TOC SIDEBAR */ +/***********************************************************/ + +div#tocframe { + position: absolute; + top: 0; + right: 73%; + bottom: 0; + left: 0; + padding: 0; + margin: 0; + overflow: auto; + background: #f5f5dc; + z-index: 100; + list-style-type: none; + font-size: 0.83em; + line-height: 1.3; +} + +@media screen { + body > div#tocframe { + position: fixed + } +} + +div#tocframe a:link, div#tocframe a:visited { + color: #454532; + text-decoration: none; +} + +div#tocframe a:hover { + color: #232b16; + text-decoration: underline; +} + +div#tocframe p.toc_uplink { + font-size: 1em; + line-height: 1.125; + background: #c9ccc4; + padding: 0.25em 1em 0.25em 0.5em; + border-bottom: 1px solid #a0a087; + margin: 0; +} + +div#tocframe p.toc_uplink a:link, +div#tocframe p.toc_uplink a:visited { + color: #1c1c1b; +} + +div#tocframe p.toc_uplink a:hover { + color: #000; +} + +div#tocframe h4 { + font-size: 1em; + line-height: 1.125; + font-weight: bold; + font-style: italic; + padding: 0.75em 0.5em 0 0.5em; + margin: 0; +} + +#tocframe .contents { + background-color: transparent; + list-style-type: none; + padding: 0; + border: 0; + margin: 0; +} + +#tocframe ul.toc { + padding: 0.25em 0.5em 1em 0.5em; + list-style-type: none; + margin: 0; +} + +#tocframe ul.toc ul.toc { + padding: 0; + margin: 0; +} + +#tocframe ul.toc li { + padding: 0; + margin: 0; +} + +#tocframe ul.toc > li { + font-size: 1em; +} + +#tocframe ul.toc li li { + padding-left: 1em; +} + +li.toc_current { + font-weight: bold; + font-style: italic; +} + +li.toc_current ul { + font-weight: normal; + font-style: normal; + background: transparent; +} + +/***********************************************************/ +/* NAVIGATION */ +/***********************************************************/ + +.nav_table { + width: 100%; + background: #c9ccc4; + font-size: 0.83em; + border-collapse: collapse; + padding: 0; + border: none; + margin: 0; +} + +.nav_table a:link, .nav_table a:visited { + color: #1c1c1b; + text-decoration: none; +} + +.nav_table a:hover { + color: #000; + text-decoration: underline; +} + +.nav_table tr, .nav_table a { + padding: 0; + margin: 0; +} + +.nav_table td { + padding: 0.25em; + margin: 0; +} + +div.header { + background: #b1d281; + text-align: center; + padding: 0.5em; + border-bottom: 1px solid #7b925a; + margin: 0; + height: auto; +} + +div.header h1 { + font-size: 2em; + padding: 0.25em; + margin: 0; +} + +div.subheader { + background: #ddd; + padding: 0; + margin: 0; + text-align: center; +} + +div.subheader p { + padding: 0.5em; + margin: 0; +} + +table#navigation { + line-height: 1.5; + padding: 0; + margin: 1em auto; +} + +table#navigation td { + padding: 0.5em 0.75em; +} + +table#navigation ul { + padding-left: 0.5em; + margin: 0; +} + +table .title { + font-weight: bold; +} + +.footer { + background: #e5f5ce; + font-size: 0.8em; + padding: 0.2em 0; + border: solid #b1d281; + border-width: 0 0 5px 0; + margin: 0; +} + +.footer a:link { + color: #0308fc; +} + +.footer p { + padding: 0 1.25em; + margin: 0.4em 0; +} + +table.menu { + margin: 0 0 1em; +} + +/***********************************************************/ +/* OVERRIDES FOR PRINTING */ +/***********************************************************/ + +@media print { + /* Hide the sidebar: */ + body { padding-left: 0; } + #tocframe { display: none; } + .nav_table { display: none; } +} diff --git a/Documentation/css/lilypond-web-alt1.css b/Documentation/css/lilypond-web-alt1.css new file mode 100644 index 0000000000..d8fed90db3 --- /dev/null +++ b/Documentation/css/lilypond-web-alt1.css @@ -0,0 +1,894 @@ +/* this is Graham Percival's experimental CSS */ + +/* Generic elements */ + +html { + padding: 0; + margin: 0; +} + +body { + position: absolute; + top: 0; + left: 1%; + right: 1%; + width: 98%; + min-width: 34em; + max-width: 70em; + font-size: 95%; + line-height: 1.5; + background: #fff url(../pictures/background-image.png) no-repeat 0 0; + text-align: justify; + padding: 0; + margin: 0 auto; +} + +hr { + display: none; +} + +p { + margin: 0.5em; +} + +h1, h2, h3, h4, h5 { + margin: 1em 10px; +} + +li { + margin-right: 1em; +} + +a img { + border: 0; +} + +/* Table of Contents */ + +/* first level toc (unnumbered) */ +div#tocframe { + position: absolute; + top: 0; + left: 0; + right: 0; + background: #9ccc7c; + max-width: 70em; + font-size: 100%; + line-height: 1; + padding: 0; + -moz-border-radius-bottomleft: 7px; + -moz-border-radius-bottomright: 7px; + -webkit-border-bottom-left-radius: 7px; + -webkit-border-bottom-right-radius: 7px; + margin: 0; +} + +#tocframe a { + color: #000; +} + +#tocframe ul.toc { + list-style-type: none; + padding: 0; + margin: 0; +} + +#tocframe > ul:first-child > li:first-child a { + text-indent: -999em; + background: #9ccc7c url(../pictures/lily-home.png) no-repeat 50% 50%; + width: 9%; + /* css3 no go yet? */ + border-bottom-left-radius: 30px; + -moz-border-radius-bottomleft: 7px; + -webkit-border-bottom-left-radius: 7px; +} + +#tocframe > ul:first-child > li:first-child a:hover { + background: #bdee9d url(../pictures/lily-home.png) no-repeat 50% 50%; + width: 9%; +} + +#tocframe > ul:first-child > li:first-child.toc_current a { + text-indent: -999em; + background: #8cbc6c url(../pictures/lily-home.png) no-repeat 50% 50%; + width: 9%; +} + +#tocframe > ul:first-child > li:first-child.toc_current a:hover { + text-indent: -999em; + background: #acdd8c url(../pictures/lily-home.png) no-repeat 50% 50%; + width: 9%; +} + +#tocframe > ul:first-child > li:last-child { + width: 9%; + -moz-border-radius-bottomright: 7px; + -webkit-border-bottom-right-radius: 7px; +} + +#tocframe li { + display: inline; + padding: 0; + margin: 0; +} + +/* search box */ +#tocframe li form { + float: left; + width: 17%; + background: #9ccc7c; + font-size: 100%; + padding: 0.5em 0.8%; + margin: 0; +} + +#tocframe li form input { + display: block; + float: left; + width: 95%; + font-size: 100%; + padding: 0.1em; + border: 0; + margin: 0; + -moz-border-radius-topright: 20px; + -moz-border-radius-bottomright: 20px; + -webkit-border-top-right-radius: 20px; + -webkit-border-bottom-right-radius: 20px; +} + +#tocframe li a { + float: left; + width: 18%; + text-align: center; + font-weight: bold; + padding: 0.85em 0; + margin: 0; + background: #9ccc7c; +} + +#tocframe li a:hover { + background: #bdee9d; + text-decoration: none; +} + +#tocframe li.toc_current a, +#tocframe li.toc_current a:hover { + background: #8cbc6c; + text-decoration: none; +} + +/* second level toc (unnumberedsec) */ + +#tocframe .toc .toc { + position: absolute; + top: 3.8em; + left: 1%; + right: 1%; + font-size: 82%; + padding: 0; + margin: 0; +} + +#tocframe .toc .toc li { + display: inline; + padding: 0; + margin: 0; +} + +#tocframe .toc .toc li:first-child a { + -moz-border-radius-topleft: 7px; + -moz-border-radius-bottomleft: 7px; + -webkit-border-top-left-radius: 7px; + -webkit-border-bottom-left-radius: 7px; +} + +#tocframe .toc .toc li:last-child a { + -moz-border-radius-topright: 7px; + -moz-border-radius-bottomright: 7px; + -webkit-border-top-right-radius: 7px; + -webkit-border-bottom-right-radius: 7px; +} + +#tocframe .toc .toc li a { + float: left; + width: auto; + background: #ceffae; + line-height: 2; + text-decoration: none; + text-indent: 0; + font-weight: normal; + padding: 0 0.5em; + margin: 0; +} + + +#tocframe .toc .toc li.toc_current a { + background: #8cbc6c; +} + +#tocframe .toc .toc li.toc_current a:hover { + background: #acdd8c; +} + +#tocframe .toc .toc li a:hover { + background: #bdee9d; +} + +/* colored second-level TOC items */ +#tocframe .toc .toc li.color1 a { + text-decoration: none; + background: #9ccc7c; +} + +#tocframe .toc .toc li.color2 a { + text-decoration: none; + background: #bbcf81; +} + +#tocframe .toc .toc li.color3 a { + text-decoration: none; + background: #dbd286; +} + +#tocframe .toc .toc li.color4 a { + text-decoration: none; + background: #fad58c; +} + +/* having this useless style makes the perl init file easier */ +#tocframe .toc .toc li.colorDefault a { +} + +#tocframe .toc .toc li.color1 a:hover { + background: #addd8d; +} + +#tocframe .toc .toc li.color2 a:hover { + background: #ccdf92; +} + +#tocframe .toc .toc li.color3 a:hover { + background: #ece297; +} + +#tocframe .toc .toc li.color4 a:hover { + background: #fbe69d; +} + +#tocframe .toc .toc li.color1.toc_current a { + background: #beee9e; +} + +#tocframe .toc .toc li.color1.toc_current a:hover { + background: #beee9e; +} + +#tocframe .toc .toc li.color2.toc_current a { + background: #ddefa3; +} + +#tocframe .toc .toc li.color2.toc_current a:hover { + background: #ddefa3; +} + +#tocframe .toc .toc li.color3.toc_current a { + background: #fdf4a8; +} + +#tocframe .toc .toc li.color3.toc_current a:hover { + background: #fdf4a8; +} + +#tocframe .toc .toc li.color4.toc_current a { + background: #fcf7ae; +} + +#tocframe .toc .toc li.color4.toc_current a:hover { + background: #fcf7ae; +} + +/* third level toc (unnumberedsubsec) */ + +#tocframe .toc .toc .toc { + position: absolute; + top: 2em; + left: 5%; + font-size: 100%; +} + +#tocframe .toc .toc .toc li { + display: inline; + padding: 0; + margin: 0; +} + +#tocframe .toc .toc .toc li a { + float: left; + width: auto; + background: #ceffae; + text-decoration: none; + text-indent: 0; + font-weight: normal; + padding: 0 0.75em; + margin: 0; +} + +#tocframe .toc .toc .toc li a:hover { + background: #bdee9d; +} + +#tocframe .toc .toc .toc li.toc_current a { + background: #acdd8c; +} + +#tocframe .toc .toc .toc li.toc_current a:hover { + background: #acdd8c; +} + +/* Divs */ +div#main { + position: relative; + /* this value may need to be adjusted */ + top: 6.0em; + left: 0; + right: 0; + width: 100%; + max-width: 70em; + margin: 0 auto 11.7em; + /* Necessary to stretch over floated content; + * will cause scrollbars to appear for content + * that is wider than the width of this div + */ + overflow: auto; +} + +/* FIXME: does not work in IE<=6 */ +#main > a:first-child { + position: absolute; + top: -10em; +} + +div#pageHeader { + width: 100%; + height: 10em; + border: solid #ddd; + border-width: 0; + margin: 0 0 1.4em 0; +} + +#pageHeader .heading { + top: 3em; + font-size: 4em; + text-align: left; + padding: 0; + margin: 0 0 0 215px; +} + +#pageHeader p { + text-align: left; + padding: 0; + margin: 0 0 0 215px; +} + +div#lilylogo { + position: absolute; + top: 0; + right: 4em; +} + +div#cmws { + position: absolute; + top: 0; + left: 50%; +} + +div#quickSummary { +/* + text-align: left; + margin: 1.4em 13em 0 0; + padding-top: 5em; +*/ + text-align: left; + position: absolute; + top: 11em; + right: 0; + width: 16em; + border-left: 1px solid #5b7f64; + background: #eef; +} + +#quickSummary .subheading { +/* + padding: 0 0.5em; + border-bottom: 10px solid #5b7f64; + margin: 0; +*/ + background: #5b7f64; + color: #fff; + text-align: center; + padding: 0 0.5em; + margin: 0; +} + +#quickSummary p { + padding: 0.5em; + margin: 0; +} + +div#news { + padding: 0; + margin: 0 16em 1em 0; +} + +div.news-item { +} + +.news-item .subsubheading { + text-align: left; + padding: 0 0 0 0.5em; + border-bottom: 1px solid #5b7f64; + margin: 0; + overflow: hidden; +} + +.testimonial-item { + /* Not sure how to style the testimonials */ + clear: both; + margin: 2em 0; +} + +.testimonial-item .subsubheading { + text-align: left; + padding: 0 0 0 0.5em; +} + +.testimonial-item img.float-left, +.testimonial-item img.float-right { + margin: 1em 1em 2em; +} + +.testimonial-item p { + padding: 0 0.5em; +} + +.news-item p { + text-align: left; + padding: 0.5em; + margin: 0; +} + +div#latestVersion { + position: absolute; + top: 32em; + right: 0; + width: 12em; + text-align: center; + border-left: 1px solid #5b7f64; +} + +#latestVersion .subheading { + background: #5b7f64; + color: #fff; + text-align: center; + padding: 0 0.5em; + margin: 0; +} + +#latestVersion .subsubheading { + background: #bdee9d; + padding: 0.18em 0.25em; + border-bottom: 1px solid #5b7f64; + margin: 0; +} + +#latestVersion p { + font-size: 90%; + padding: 0.5em; + margin: 0; +} + +div#footer { + clear: both; + position: relative; + width: 100%; + /* FIXME: may need to be adjusted */ + margin-top: 7em; +} + +div#language { + position: absolute; + top: 0; + left: 0; + right: 50%; + width: 50%; + text-indent: 0.5em; + padding: 0; +} + +#language h3 { + padding: 0; + border-bottom: 10px solid #5b7f64; + margin: 0; +} + +#language p { + padding: 0; + margin: 0.25em 0 0 0; +} + +#verifier_texinfo { + position: absolute; + top: 0; + right: 0; + left: 50%; +} + +#verifier_texinfo h3 { + text-indent: -9999em; + padding: 0; + border-bottom: 10px solid #5b7f64; + margin: 0 0 0.25em 0; +} + +#verifier_texinfo img { + float: right; + padding: 0; + margin: 0 0.5em 0 0; +} + +#verifier_texinfo p { + clear: right; + text-align: right; + font-size: 0.8em; + padding: 0; + margin: 0 0.5em; +} + +h1.unnumbered, h2.unnumberedsec, h3.unnumberedsubsec { + position: relative; + height: 0; + overflow: hidden; + text-indent: -999em; + padding: 0; + margin: 0; +} + +table { + text-align: left; + padding: 0 0 0 0.5em; + border-left: 3px solid green; + margin: 1em 0 0 1em; +} + +table td { + padding: 0.4em; +} + +table a { + text-align: left; +} + +.verbatim { + margin: 10px; +} + +.float-left { + float: left; +} + +.float-center { + text-align: center; + display: block; + margin: 0 auto; +} + +.float-right { + float: right; +} + +img.float-left, +img.float-right { + background: #fff; + padding: 1em; + border: 1px solid #bbb; + margin: 0.1em 0.5em; +} + +div.float-left a.clickable, +div.float-center a.clickable, +div.float-right a.clickable { + text-decoration: overline; + margin-left: 1em; +} + +.clear-both { + clear: both; +} + +.align-right { + text-align: right; +} + +.heading-center { + text-align: center; + width: 75%; + margin: 0 auto; +} + +.heading-center h2 { + padding: 0.25em 0; + margin: 0; +} + +/* Columns */ + +.column-center-top { + float: left; + width: 99.5%; + text-align: center; + border: 1px solid #8bbb6b; + margin: 1em auto; +} + +/* color1 */ +.column-center-top h3 { + background: #9ccc7c; + text-align: left; + border-bottom: 1px solid #8bbb6b; +} + +.column-left-top { + float: left; + width: 49%; + margin: 1em 0; +} + +.column-left-bottom { + clear: both; + float: left; + width: 49%; + margin: 1em 0; +} + +.column-left-top, +.column-left-bottom { + border: 1px solid #aabe70; +} + +/* color2 */ +.column-left-top h3, +.column-left-bottom h3 { + background: #bbcf81; + border-bottom: 1px solid #aabe70; +} + +.column-right-top { + float: right; + width: 49%; + margin: 1em 0; +} + +.column-right-bottom { + float: right; + width: 49%; + margin: 1em 0; +} + +.column-right-top, +.column-right-bottom { + border: 1px solid #cac175; +} + +/* color3 */ +.column-right-top h3, +.column-right-bottom h3 { + background: #dbd286; + border-bottom: 1px solid #cac175; +} + +.column-center-bottom { + clear: both; + width: 99.5%; + text-align: center; + border: 1px solid #e9c47b; + margin: 1em auto 0; +} + +/* color4 */ +.column-center-bottom h3 { + background: #fad58c; + text-align: left; + border-bottom: 1px solid #e9c47b; +} + +.column-center-top, +.column-center-bottom, +.column-left-top, +.column-left-bottom, +.column-right-top, +.column-right-bottom { + background: #f5fffa; +} + +.column-center-top h3, +.column-center-bottom h3, +.column-left-top h3, +.column-left-bottom h3, +.column-right-top h3, +.column-right-bottom h3 { + padding: 0 0.5em; + margin: 0; +} + +.column-center-top h4, +.column-center-bottom h4, +.column-left-top h4, +.column-left-bottom h4, +.column-right-top h4, +.column-right-bottom h4 { + padding: 0.5em 0.5em 0; + margin: 0 0 0.5em 0; +} + +.column-center-top ul, +.column-center-bottom ul, +.column-left-top ul, +.column-left-bottom ul, +.column-right-top ul, +.column-right-bottom ul { + list-style-type: none; + padding: 0; + margin: 0.5em 0; +} + +.column-center-top li, +.column-center-bottom li, +.column-left-top li, +.column-left-bottom li, +.column-right-top li, +.column-right-bottom li { + text-align: left; + padding: 0 0.5em 0; + margin: 0 0 0.5em 0; +} + +.column-center-top p, +.column-center-bottom p, +.column-left-top p, +.column-left-bottom p, +.column-right-top p, +.column-right-bottom p { + text-align: left; +} + +.column-center-top img.float-left, +.column-center-top img.float-right, +.column-center-bottom img.float-left, +.column-center-bottom img.float-right, +.column-left-top img.float-left, +.column-left-top img.float-right, +.column-left-bottom img.float-left, +.column-left-bottom img.float-right, +.column-right-top img.float-left, +.column-right-top img.float-right, +.column-right-bottom img.float-left, +.column-right-bottom img.float-right { + margin: 0.5em; +} + +/* Centered divs by color */ + +div.color1, +div.color2, +div.color3, +div.color4 { + clear: both; + width: 99.5%; + background: #f5fffa; + margin: 1em auto; +} + +div.color1 h3, +div.color2 h3, +div.color3 h3, +div.color4 h3 { + padding: 0 0.5em; + margin: 0; +} + +div.color1 { + border: 1px solid #8bbb6b; + margin: 1em auto; +} + +div.color1 h3 { + background: #9ccc7c; + border-bottom: 1px solid #8bbb6b; +} + +div.color2 { + border: 1px solid #aabe70; +} + +div.color2 h3 { + background: #bbcf81; + border-bottom: 1px solid #aabe70; +} + +div.color3 { + border: 1px solid #cac175; +} + +div.color3 h3 { + background: #dbd286; + border-bottom: 1px solid #cac175; +} + +div.color4 { + border: 1px solid #e9c47b; +} + +div.color4 h3 { + background: #fad58c; + border-bottom: 1px solid #e9c47b; +} + +.keep-bullets ul { + list-style-type: disc; + padding: 0; + margin: 0.5em 1.5em; +} + +.keep-bullets li { + padding: 0; +} + +.warning { + background: #eef; + text-align: left; + padding: 0; + border: 1px solid green; + /* Experimental rounded corners */ + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + margin: 1em; +} + +.warning p { + padding: 0.5em; + margin: 0; +} + +.hide { + position: relative; + text-indent: -999em; + height: 0; + overflow: hidden; +} + +.help { + background: #f77; + color: black; + text-align: center; + font-weight: bold; + width: 75%; + padding: 1em; + border: 10px dotted green; + margin: 1em auto; +} + +.legal { + font-size: 0.6em; +} + + +/* kill title, probably best done in the init file, though */ +h1.settitle { + position: relative; + height: 0; + overflow: hidden; + text-indent: -999em; + padding: 0; + margin: 0; +} + diff --git a/Documentation/css/lilypond-web-alt2.css b/Documentation/css/lilypond-web-alt2.css new file mode 100644 index 0000000000..69bfcb8a03 --- /dev/null +++ b/Documentation/css/lilypond-web-alt2.css @@ -0,0 +1,880 @@ +/* this is Patrick Schmidt's experimental CSS */ + +/* Generic elements */ + +html { + padding: 0; + margin: 0; +} + +body { + position: absolute; + top: 0; + left: 1%; + right: 1%; + width: 98%; + min-width: 34em; + max-width: 70em; + font-size: 95%; + line-height: 1.5; + background: #fff url(../pictures/background-image.png) no-repeat 0 0; + text-align: justify; + padding: 0; + margin: 0 auto; +} + +hr { + display: none; +} + +p { + margin: 0.5em; +} + +h1, h2, h3, h4, h5 { + margin: 1em 10px; +} + +li { + margin-right: 1em; +} + +a img { + border: 0; +} + +/* Table of Contents */ + +/* first level toc (unnumbered) */ +div#tocframe { + position: absolute; + top: 0; + left: 0; + right: 0; + background: #582007 url(../pictures/nav-bg.jpg)top left repeat-x; + max-width: 70em; + font-size: 100%; + line-height: 1; + padding: 0; + -moz-border-radius-bottomleft: 7px; + -moz-border-radius-bottomright: 7px; + -webkit-border-bottom-left-radius: 7px; + -webkit-border-bottom-right-radius: 7px; + margin: 0; + /*border:1px solid black; + background-color: silver;*/ +} + +#tocframe a { + color: #000; +} + +#tocframe ul.toc { + list-style-type: none; + padding: 0; + margin: 0; +} + +#tocframe > ul:first-child > li:first-child a { + text-indent: -999em; + background: #582007 url(../pictures/nav-bg.jpg) top left repeat-x transparent url(../pictures/lily-home.png) no-repeat 50% 50%; + width: 9%; + /* css3 no go yet? */ + border-bottom-left-radius: 30px; + -moz-border-radius-bottomleft: 7px; + -webkit-border-bottom-left-radius: 7px; +} + +#tocframe > ul:first-child > li:first-child a:hover { + background: #58210c url(../pictures/nav-hover.jpg) /*url(../pictures/lily-home.png) no-repeat 50% 50%*/; + width: 9%; +} + +#tocframe > ul:first-child > li:first-child.toc_current a { + text-indent: -999em; + background: #FFEBCC url(../pictures/nav-active.jpg) /*url(../pictures/lily-home.png) no-repeat 50% 50%*/; + width: 9%; +} + +#tocframe > ul:first-child > li:first-child.toc_current a:hover { + text-indent: -999em; + background: #58210c url(../pictures/nav-active.jpg) top left repeat-x /*transparent url(../pictures/lily-home.png) no-repeat 50% 50%*/; + width: 9%; +} + +#tocframe > ul:first-child > li:last-child { + width: 9%; + -moz-border-radius-bottomright: 7px; + -webkit-border-bottom-right-radius: 7px; +} + +#tocframe li { + display: inline; + padding: 0; + margin: 0; +} + +/* search box */ +#tocframe li form { + float: left; + width: 17%; + background: #CF9B5F url(../pictures/nav-bg.jpg); + font-size: 100%; + padding: 0.5em 0.8%; + margin: 0; +} + +#tocframe li form input { + display: block; + float: left; + width: 95%; + font-size: 100%; + padding: 0.1em; + border: 0; + margin: 0; + -moz-border-radius-topright: 20px; + -moz-border-radius-bottomright: 20px; + -webkit-border-top-right-radius: 20px; + -webkit-border-bottom-right-radius: 20px; +} + +#tocframe li a { + float: left; + width: 18%; + text-align: center; + font-weight: bold; + padding: 0.85em 0; + margin: 0; + background: #CF9B5F url(../pictures/nav-bg.jpg); +} + +#tocframe li a:hover { + background: #58210c url(../pictures/nav-hover.jpg); + text-decoration: underline; +} + +#tocframe li.toc_current a, +#tocframe li.toc_current a:hover { + background: #58210c url(../pictures/nav-active.jpg); + color:#000; + text-decoration: underline; +} + +/* second level toc (unnumberedsec) */ + +#tocframe .toc .toc { + position: absolute; + top: 3.8em; + left: 1%; + right: 1%; + font-size: 82%; + padding: 0; + margin: 0; +} + +#tocframe .toc .toc li { + display: inline; + padding: 0; + margin: 0; +} + +#tocframe .toc .toc li:first-child a { + -moz-border-radius-topleft: 7px; + -moz-border-radius-bottomleft: 7px; + -webkit-border-top-left-radius: 7px; + -webkit-border-bottom-left-radius: 7px; +} + +#tocframe .toc .toc li:last-child a { + -moz-border-radius-topright: 7px; + -moz-border-radius-bottomright: 7px; + -webkit-border-top-right-radius: 7px; + -webkit-border-bottom-right-radius: 7px; +} + +#tocframe .toc .toc li a { + float: left; + width: auto; + background: #ceffae; + line-height: 2; + text-decoration: none; + text-indent: 0; + font-weight: normal; + padding: 0 0.5em; + margin: 0; +} + + +#tocframe .toc .toc li.toc_current a { + background: #8cbc6c; +} + +#tocframe .toc .toc li.toc_current a:hover { + background: #acdd8c; +} + +#tocframe .toc .toc li a:hover { + background: #bdee9d; +} + +/* colored second-level TOC items */ +#tocframe .toc .toc li.color1 a { + text-decoration: none; + background: #9ccc7c; +} + +#tocframe .toc .toc li.color2 a { + text-decoration: none; + background: #bbcf81; +} + +#tocframe .toc .toc li.color3 a { + text-decoration: none; + background: #dbd286; +} + +#tocframe .toc .toc li.color4 a { + text-decoration: none; + background: #fad58c; +} + +/* having this useless style makes the perl init file easier */ +#tocframe .toc .toc li.colorDefault a { +} + +#tocframe .toc .toc li.color1 a:hover { + background: #addd8d; +} + +#tocframe .toc .toc li.color2 a:hover { + background: #ccdf92; +} + +#tocframe .toc .toc li.color3 a:hover { + background: #ece297; +} + +#tocframe .toc .toc li.color4 a:hover { + background: #fbe69d; +} + +#tocframe .toc .toc li.color1.toc_current a { + background: #beee9e; +} + +#tocframe .toc .toc li.color1.toc_current a:hover { + background: #beee9e; +} + +#tocframe .toc .toc li.color2.toc_current a { + background: #ddefa3; +} + +#tocframe .toc .toc li.color2.toc_current a:hover { + background: #ddefa3; +} + +#tocframe .toc .toc li.color3.toc_current a { + background: #fdf4a8; +} + +#tocframe .toc .toc li.color3.toc_current a:hover { + background: #fdf4a8; +} + +#tocframe .toc .toc li.color4.toc_current a { + background: #fcf7ae; +} + +#tocframe .toc .toc li.color4.toc_current a:hover { + background: #fcf7ae; +} + +/* third level toc (unnumberedsubsec) */ + +#tocframe .toc .toc .toc { + position: absolute; + top: 2em; + left: 5%; + font-size: 100%; +} + +#tocframe .toc .toc .toc li { + display: inline; + padding: 0; + margin: 0; +} + +#tocframe .toc .toc .toc li a { + float: left; + width: auto; + background: #ceffae; + text-decoration: none; + text-indent: 0; + font-weight: normal; + padding: 0 0.75em; + margin: 0; +} + +#tocframe .toc .toc .toc li a:hover { + background: #bdee9d; +} + +#tocframe .toc .toc .toc li.toc_current a { + background: #acdd8c; +} + +#tocframe .toc .toc .toc li.toc_current a:hover { + background: #acdd8c; +} + +/* Divs */ +div#main { + position: relative; + /* this value may need to be adjusted */ + top: 7.7em; + left: 0; + right: 0; + width: 100%; + max-width: 70em; + margin: 0 auto 11.7em; + /* Necessary to stretch over floated content; + * will cause scrollbars to appear for content + * that is wider than the width of this div + */ + overflow: auto; +} + +/* FIXME: does not work in IE<=6 */ +#main > a:first-child { + position: absolute; + top: -10em; +} + +div#pageHeader { + width: 100%; + height: 10em; + border: solid #ddd; + border-width: 0; + margin: 0 0 1.4em 0; +} + +#pageHeader .heading { + font-size: 4em; + text-align: left; + padding: 0; + margin: 0 0 0 215px; +} + +#pageHeader p { + text-align: left; + padding: 0; + margin: 0 0 0 215px; +} + +div#lilylogo { + position: absolute; + top: 0; + left: 0; +} + +div#cmws { + position: absolute; + top: 0; + left: 50%; +} + +div#quickSummary { + text-align: left; + margin: 1.4em 13em 0 0; + padding-top: 5em; +} + +#quickSummary .subheading { + padding: 0 0.5em; + border-bottom: 10px solid #5b7f64; + margin: 0; +} + +#quickSummary p { + padding: 0.5em; + margin: 0; +} + +div#news { + padding: 0; + margin: 0 13em 1em 0; +} + +div.news-item { +} + +.news-item .subsubheading { + text-align: left; + padding: 0 0 0 0.5em; + border-bottom: 1px solid #5b7f64; + margin: 0; + overflow: hidden; +} + +.testimonial-item { + /* Not sure how to style the testimonials */ + clear: both; + margin: 2em 0; +} + +.testimonial-item .subsubheading { + text-align: left; + padding: 0 0 0 0.5em; +} + +.testimonial-item img.float-left, +.testimonial-item img.float-right { + margin: 1em 1em 2em; +} + +.testimonial-item p { + padding: 0 0.5em; +} + +.news-item p { + text-align: left; + padding: 0.5em; + margin: 0; +} + +div#latestVersion { + position: absolute; + top: 9.5em; + right: 0; + width: 12em; + text-align: center; + border-left: 1px solid #5b7f64; +} + +#latestVersion .subheading { + background: #5b7f64; + color: #fff; + text-align: center; + padding: 0 0.5em; + margin: 0; +} + +#latestVersion .subsubheading { + background: #bdee9d; + padding: 0.18em 0.25em; + border-bottom: 1px solid #5b7f64; + margin: 0; +} + +#latestVersion p { + font-size: 90%; + padding: 0.5em; + margin: 0; +} + +div#footer { + clear: both; + position: relative; + width: 100%; + /* FIXME: may need to be adjusted */ + margin-top: 7em; +} + +div#language { + position: absolute; + top: 0; + left: 0; + right: 50%; + width: 50%; + text-indent: 0.5em; + padding: 0; +} + +#language h3 { + padding: 0; + border-bottom: 10px solid #5b7f64; + margin: 0; +} + +#language p { + padding: 0; + margin: 0.25em 0 0 0; +} + +#verifier_texinfo { + position: absolute; + top: 0; + right: 0; + left: 50%; +} + +#verifier_texinfo h3 { + text-indent: -9999em; + padding: 0; + border-bottom: 10px solid #5b7f64; + margin: 0 0 0.25em 0; +} + +#verifier_texinfo img { + float: right; + padding: 0; + margin: 0 0.5em 0 0; +} + +#verifier_texinfo p { + clear: right; + text-align: right; + font-size: 0.8em; + padding: 0; + margin: 0 0.5em; +} + +h1.unnumbered, h2.unnumberedsec, h3.unnumberedsubsec { + position: relative; + height: 0; + overflow: hidden; + text-indent: -999em; + padding: 0; + margin: 0; +} + +table { + text-align: left; + padding: 0 0 0 0.5em; + border-left: 3px solid green; + margin: 1em 0 0 1em; +} + +table td { + padding: 0.4em; +} + +table a { + text-align: left; +} + +.verbatim { + margin: 10px; +} + +.float-left { + float: left; +} + +.float-center { + text-align: center; + display: block; + margin: 0 auto; +} + +.float-right { + float: right; +} + +img.float-left, +img.float-right { + background: #fff; + padding: 1em; + border: 1px solid #bbb; + margin: 0.1em 0.5em; +} + +div.float-left a.clickable, +div.float-center a.clickable, +div.float-right a.clickable { + text-decoration: overline; + margin-left: 1em; +} + +.clear-both { + clear: both; +} + +.align-right { + text-align: right; +} + +.heading-center { + text-align: center; + width: 75%; + margin: 0 auto; +} + +.heading-center h2 { + padding: 0.25em 0; + margin: 0; +} + +/* Columns */ + +.column-center-top { + float: left; + width: 99.5%; + text-align: center; + border: 1px solid #8bbb6b; + margin: 1em auto; +} + +/* color1 */ +.column-center-top h3 { + background: #9ccc7c; + text-align: left; + border-bottom: 1px solid #8bbb6b; +} + +.column-left-top { + float: left; + width: 49%; + margin: 1em 0; +} + +.column-left-bottom { + clear: both; + float: left; + width: 49%; + margin: 1em 0; +} + +.column-left-top, +.column-left-bottom { + border: 1px solid #aabe70; +} + +/* color2 */ +.column-left-top h3, +.column-left-bottom h3 { + background: #bbcf81; + border-bottom: 1px solid #aabe70; +} + +.column-right-top { + float: right; + width: 49%; + margin: 1em 0; +} + +.column-right-bottom { + float: right; + width: 49%; + margin: 1em 0; +} + +.column-right-top, +.column-right-bottom { + border: 1px solid #cac175; +} + +/* color3 */ +.column-right-top h3, +.column-right-bottom h3 { + background: #dbd286; + border-bottom: 1px solid #cac175; +} + +.column-center-bottom { + clear: both; + width: 99.5%; + text-align: center; + border: 1px solid #e9c47b; + margin: 1em auto 0; +} + +/* color4 */ +.column-center-bottom h3 { + background: #fad58c; + text-align: left; + border-bottom: 1px solid #e9c47b; +} + +.column-center-top, +.column-center-bottom, +.column-left-top, +.column-left-bottom, +.column-right-top, +.column-right-bottom { + background: #f5fffa; +} + +.column-center-top h3, +.column-center-bottom h3, +.column-left-top h3, +.column-left-bottom h3, +.column-right-top h3, +.column-right-bottom h3 { + padding: 0 0.5em; + margin: 0; +} + +.column-center-top h4, +.column-center-bottom h4, +.column-left-top h4, +.column-left-bottom h4, +.column-right-top h4, +.column-right-bottom h4 { + padding: 0.5em 0.5em 0; + margin: 0 0 0.5em 0; +} + +.column-center-top ul, +.column-center-bottom ul, +.column-left-top ul, +.column-left-bottom ul, +.column-right-top ul, +.column-right-bottom ul { + list-style-type: none; + padding: 0; + margin: 0.5em 0; +} + +.column-center-top li, +.column-center-bottom li, +.column-left-top li, +.column-left-bottom li, +.column-right-top li, +.column-right-bottom li { + text-align: left; + padding: 0 0.5em 0; + margin: 0 0 0.5em 0; +} + +.column-center-top p, +.column-center-bottom p, +.column-left-top p, +.column-left-bottom p, +.column-right-top p, +.column-right-bottom p { + text-align: left; +} + +.column-center-top img.float-left, +.column-center-top img.float-right, +.column-center-bottom img.float-left, +.column-center-bottom img.float-right, +.column-left-top img.float-left, +.column-left-top img.float-right, +.column-left-bottom img.float-left, +.column-left-bottom img.float-right, +.column-right-top img.float-left, +.column-right-top img.float-right, +.column-right-bottom img.float-left, +.column-right-bottom img.float-right { + margin: 0.5em; +} + +/* Centered divs by color */ + +div.color1, +div.color2, +div.color3, +div.color4 { + clear: both; + width: 99.5%; + background: #f5fffa; + margin: 1em auto; +} + +div.color1 h3, +div.color2 h3, +div.color3 h3, +div.color4 h3 { + padding: 0 0.5em; + margin: 0; +} + +div.color1 { + border: 1px solid #8bbb6b; + margin: 1em auto; +} + +div.color1 h3 { + background: #9ccc7c; + border-bottom: 1px solid #8bbb6b; +} + +div.color2 { + border: 1px solid #aabe70; +} + +div.color2 h3 { + background: #bbcf81; + border-bottom: 1px solid #aabe70; +} + +div.color3 { + border: 1px solid #cac175; +} + +div.color3 h3 { + background: #dbd286; + border-bottom: 1px solid #cac175; +} + +div.color4 { + border: 1px solid #e9c47b; +} + +div.color4 h3 { + background: #fad58c; + border-bottom: 1px solid #e9c47b; +} + +.keep-bullets ul { + list-style-type: disc; + padding: 0; + margin: 0.5em 1.5em; +} + +.keep-bullets li { + padding: 0; +} + +.warning { + background: #eef; + text-align: left; + padding: 0; + border: 1px solid green; + /* Experimental rounded corners */ + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + margin: 1em; +} + +.warning p { + padding: 0.5em; + margin: 0; +} + +.hide { + position: relative; + text-indent: -999em; + height: 0; + overflow: hidden; +} + +.help { + background: #f77; + color: black; + text-align: center; + font-weight: bold; + width: 75%; + padding: 1em; + border: 10px dotted green; + margin: 1em auto; +} + +.legal { + font-size: 0.6em; +} + + +/* kill title, probably best done in the init file, though */ +h1.settitle { + position: relative; + height: 0; + overflow: hidden; + text-indent: -999em; + padding: 0; + margin: 0; +} + diff --git a/Documentation/css/lilypond-web.css b/Documentation/css/lilypond-web.css new file mode 100644 index 0000000000..3b3994905f --- /dev/null +++ b/Documentation/css/lilypond-web.css @@ -0,0 +1,881 @@ +/* Generic elements */ + +html { + padding: 0; + margin: 0; +} + +body { + position: absolute; + top: 0; + left: 1%; + right: 1%; + width: 98%; + min-width: 42em; + max-width: 70em; + font-size: 95%; + line-height: 1.5; + background: #fff url(../pictures/background-image.png) no-repeat 0 0; + text-align: justify; + padding: 0; + margin: 0 auto; +} + +hr { + display: none; +} + +p { + margin: 0.5em; +} + +h1, h2, h3, h4, h5 { + margin: 1em 10px; +} + +li { + margin-right: 1em; +} + +a img { + border: 0; +} + +/* Table of Contents */ + +/* first level toc (unnumbered) */ +div#tocframe { + position: absolute; + top: 0; + left: 0; + right: 0; + background: #9ccc7c; + max-width: 70em; + font-size: 100%; + line-height: 1; + padding: 0; + -moz-border-radius-bottomleft: 7px; + -moz-border-radius-bottomright: 7px; + -webkit-border-bottom-left-radius: 7px; + -webkit-border-bottom-right-radius: 7px; + margin: 0; +} + +#tocframe a { + color: #000; +} + +#tocframe ul.toc { + list-style-type: none; + padding: 0; + margin: 0; +} + +#tocframe > ul:first-child > li:first-child a { + text-indent: -999em; + background: #9ccc7c url(../pictures/lily-home.png) no-repeat 50% 50%; + width: 9%; + /* css3 no go yet? */ + border-bottom-left-radius: 30px; + -moz-border-radius-bottomleft: 7px; + -webkit-border-bottom-left-radius: 7px; +} + +#tocframe > ul:first-child > li:first-child a:hover { + background: #bdee9d url(../pictures/lily-home.png) no-repeat 50% 50%; + width: 9%; +} + +#tocframe > ul:first-child > li:first-child.toc_current a { + text-indent: -999em; + background: #8cbc6c url(../pictures/lily-home.png) no-repeat 50% 50%; + width: 9%; +} + +#tocframe > ul:first-child > li:first-child.toc_current a:hover { + text-indent: -999em; + background: #acdd8c url(../pictures/lily-home.png) no-repeat 50% 50%; + width: 9%; +} + +#tocframe > ul:first-child > li:last-child { + width: 9%; + -moz-border-radius-bottomright: 7px; + -webkit-border-bottom-right-radius: 7px; +} + +#tocframe li { + display: inline; + padding: 0; + margin: 0; +} + +/* search box */ +#tocframe li form { + float: left; + width: 17%; + background: #9ccc7c; + font-size: 100%; + padding: 0.5em 0.8%; + margin: 0; +} + +#tocframe li form input { + display: block; + float: left; + width: 95%; + font-size: 100%; + padding: 0.1em; + border: 0; + margin: 0; + -moz-border-radius-topright: 20px; + -moz-border-radius-bottomright: 20px; + -webkit-border-top-right-radius: 20px; + -webkit-border-bottom-right-radius: 20px; +} + +#tocframe li a { + float: left; + width: 18%; + text-align: center; + font-weight: bold; + padding: 0.85em 0; + margin: 0; + background: #9ccc7c; +} + +#tocframe li a:hover { + background: #bdee9d; + text-decoration: none; +} + +#tocframe li.toc_current a, +#tocframe li.toc_current a:hover { + background: #8cbc6c; + text-decoration: none; +} + +/* second level toc (unnumberedsec) */ + +#tocframe .toc .toc { + position: absolute; + top: 3.8em; + left: 1%; + right: 1%; + font-size: 82%; + padding: 0; + margin: 0; +} + +#tocframe .toc .toc li { + display: inline; + padding: 0; + margin: 0; +} + +#tocframe .toc .toc li:first-child a { + -moz-border-radius-topleft: 7px; + -moz-border-radius-bottomleft: 7px; + -webkit-border-top-left-radius: 7px; + -webkit-border-bottom-left-radius: 7px; +} + +#tocframe .toc .toc li:last-child a { + -moz-border-radius-topright: 7px; + -moz-border-radius-bottomright: 7px; + -webkit-border-top-right-radius: 7px; + -webkit-border-bottom-right-radius: 7px; +} + +#tocframe .toc .toc li a { + float: left; + width: auto; + background: #ceffae; + line-height: 2; + text-decoration: none; + text-indent: 0; + font-weight: normal; + padding: 0 0.5em; + margin: 0; +} + + +#tocframe .toc .toc li.toc_current a { + background: #8cbc6c; +} + +#tocframe .toc .toc li.toc_current a:hover { + background: #acdd8c; +} + +#tocframe .toc .toc li a:hover { + background: #bdee9d; +} + +/* colored second-level TOC items */ +#tocframe .toc .toc li.color1 a { + text-decoration: none; + background: #9ccc7c; +} + +#tocframe .toc .toc li.color2 a { + text-decoration: none; + background: #bbcf81; +} + +#tocframe .toc .toc li.color3 a { + text-decoration: none; + background: #dbd286; +} + +#tocframe .toc .toc li.color4 a { + text-decoration: none; + background: #fad58c; +} + +/* having this useless style makes the perl init file easier */ +#tocframe .toc .toc li.colorDefault a { +} + +#tocframe .toc .toc li.color1 a:hover { + background: #addd8d; +} + +#tocframe .toc .toc li.color2 a:hover { + background: #ccdf92; +} + +#tocframe .toc .toc li.color3 a:hover { + background: #ece297; +} + +#tocframe .toc .toc li.color4 a:hover { + background: #fbe69d; +} + +#tocframe .toc .toc li.color1.toc_current a { + background: #beee9e; +} + +#tocframe .toc .toc li.color1.toc_current a:hover { + background: #beee9e; +} + +#tocframe .toc .toc li.color2.toc_current a { + background: #ddefa3; +} + +#tocframe .toc .toc li.color2.toc_current a:hover { + background: #ddefa3; +} + +#tocframe .toc .toc li.color3.toc_current a { + background: #fdf4a8; +} + +#tocframe .toc .toc li.color3.toc_current a:hover { + background: #fdf4a8; +} + +#tocframe .toc .toc li.color4.toc_current a { + background: #fcf7ae; +} + +#tocframe .toc .toc li.color4.toc_current a:hover { + background: #fcf7ae; +} + +/* third level toc (unnumberedsubsec) */ + +#tocframe .toc .toc .toc { + position: absolute; + top: 2em; + left: 5%; + font-size: 100%; +} + +#tocframe .toc .toc .toc li { + display: inline; + padding: 0; + margin: 0; +} + +#tocframe .toc .toc .toc li a { + float: left; + width: auto; + background: #ceffae; + text-decoration: none; + text-indent: 0; + font-weight: normal; + padding: 0 0.75em; + margin: 0; +} + +#tocframe .toc .toc .toc li a:hover { + background: #bdee9d; +} + +#tocframe .toc .toc .toc li.toc_current a { + background: #acdd8c; +} + +#tocframe .toc .toc .toc li.toc_current a:hover { + background: #acdd8c; +} + +/* Divs */ +div#main { + position: relative; + /* this value may need to be adjusted */ + top: 7.7em; + left: 0; + right: 0; + width: 100%; + max-width: 70em; + margin: 0 auto 11.7em; + /* Necessary to stretch over floated content; + * will cause scrollbars to appear for content + * that is wider than the width of this div + */ + overflow: auto; +} + +/* FIXME: does not work in IE<=6 */ +#main > a:first-child { + position: absolute; + top: -10em; +} + +div#pageHeader { + width: 100%; + height: 10em; + padding-top: 2em; + border: solid #ddd; + border-width: 0; + margin: 0 0 1.4em 0; +} + +#pageHeader .heading { + font-size: 4em; + text-align: left; + padding: 0; + margin: 0 0 0 340px; +} + +#pageHeader p { + font-size: 1.2em; + font-style: italic; + text-align: left; + padding: 0; + margin: 0 0 0 340px; +} + +div#lilylogo { + position: absolute; + top: 0; + left: 0; +} + +div#cmws { + position: absolute; + top: 0; + left: 50%; +} + +div#quickSummary { + text-align: left; + margin: 4em 13em 0 0; +} + +#quickSummary .subheading { + background: #fff url(../pictures/summary-gradient.png) repeat-y 0 0; + color: #fff; + padding: 0 0.5em; + /* border-bottom: 10px solid #5b7f64; */ + margin: 0; +} + +#quickSummary p { + padding: 0.5em; + margin: 0; +} + +div#news { + padding: 0; + margin: 0 13em 1em 0; +} + +div.news-item { +} + +.news-item .subsubheading { + text-align: left; + padding: 0 0 0 0.5em; + border-bottom: 1px solid #5b7f64; + margin: 0; + overflow: hidden; +} + +.testimonial-item { + /* Not sure how to style the testimonials */ + clear: both; + margin: 2em 0; +} + +.testimonial-item .subsubheading { + text-align: left; + padding: 0 0 0 0.5em; +} + +.testimonial-item img.float-left, +.testimonial-item img.float-right { + margin: 1em 1em 2em; +} + +.testimonial-item p { + padding: 0 0.5em; +} + +.news-item p { + text-align: left; + padding: 0.5em; + margin: 0; +} + +div#latestVersion { + position: absolute; + top: 12.4em; + right: 0; + width: 12em; + text-align: center; + border-left: 1px solid #5b7f64; +} + +#latestVersion .subheading { + background: #5b7f64; + color: #fff; + text-align: center; + padding: 0 0.5em; + margin: 0; +} + +#latestVersion .subsubheading { + background: #bdee9d; + padding: 0.18em 0.25em; + border-bottom: 1px solid #5b7f64; + margin: 0; +} + +#latestVersion p { + font-size: 90%; + padding: 0.5em; + margin: 0; +} + +div#footer { + clear: both; + position: relative; + width: 100%; + /* FIXME: may need to be adjusted */ + margin-top: 7em; +} + +div#language { + position: absolute; + top: 0; + left: 0; + right: 50%; + width: 50%; + text-indent: 0.5em; + padding: 0; +} + +#language h3 { + padding: 0; + border-bottom: 10px solid #5b7f64; + margin: 0; +} + +#language p { + padding: 0; + margin: 0.25em 0 0 0; +} + +#verifier_texinfo { + position: absolute; + top: 0; + right: 0; + left: 50%; +} + +#verifier_texinfo h3 { + text-indent: -9999em; + padding: 0; + border-bottom: 10px solid #5b7f64; + margin: 0 0 0.25em 0; +} + +#verifier_texinfo img { +/* + float: right; +*/ + padding: 0; + margin: 0 0.5em 0 0; +} + +#verifier_texinfo p { + clear: right; + text-align: right; + font-size: 0.8em; + padding: 0; + margin: 0 0.5em; +} + +h1.unnumbered, h2.unnumberedsec, h3.unnumberedsubsec { + position: relative; + height: 0; + overflow: hidden; + text-indent: -999em; + padding: 0; + margin: 0; +} + +table { + text-align: left; + padding: 0 0 0 0.5em; + border-left: 3px solid green; + margin: 1em 0 0 1em; +} + +table td { + padding: 0.4em; +} + +table a { + text-align: left; +} + +.verbatim { + margin: 10px; +} + +.float-left { + float: left; +} + +.float-center { + text-align: center; + display: block; + margin: 0 auto; +} + +.float-right { + float: right; +} + +img.float-left, +img.float-right { + background: #fff; + padding: 1em; + border: 1px solid #bbb; + margin: 0.1em 0.5em; +} + +div.float-left a.clickable, +div.float-center a.clickable, +div.float-right a.clickable { + text-decoration: overline; + margin-left: 1em; +} + +.clear-both { + clear: both; +} + +.align-right { + text-align: right; +} + +.heading-center { + text-align: center; + width: 75%; + margin: 0 auto; +} + +.heading-center h2 { + padding: 0.25em 0; + margin: 0; +} + +/* Columns */ + +.column-center-top { + float: left; + width: 99.5%; + text-align: center; + border: 1px solid #8bbb6b; + margin: 1em auto; +} + +/* color1 */ +.column-center-top h3 { + background: #9ccc7c; + text-align: left; + border-bottom: 1px solid #8bbb6b; +} + +.column-left-top { + float: left; + width: 49%; + margin: 1em 0; +} + +.column-left-bottom { + clear: both; + float: left; + width: 49%; + margin: 1em 0; +} + +.column-left-top, +.column-left-bottom { + border: 1px solid #aabe70; +} + +/* color2 */ +.column-left-top h3, +.column-left-bottom h3 { + background: #bbcf81; + border-bottom: 1px solid #aabe70; +} + +.column-right-top { + float: right; + width: 49%; + margin: 1em 0; +} + +.column-right-bottom { + float: right; + width: 49%; + margin: 1em 0; +} + +.column-right-top, +.column-right-bottom { + border: 1px solid #cac175; +} + +/* color3 */ +.column-right-top h3, +.column-right-bottom h3 { + background: #dbd286; + border-bottom: 1px solid #cac175; +} + +.column-center-bottom { + clear: both; + width: 99.5%; + text-align: center; + border: 1px solid #e9c47b; + margin: 1em auto 0; +} + +/* color4 */ +.column-center-bottom h3 { + background: #fad58c; + text-align: left; + border-bottom: 1px solid #e9c47b; +} + +.column-center-top, +.column-center-bottom, +.column-left-top, +.column-left-bottom, +.column-right-top, +.column-right-bottom { + background: #f5fffa; +} + +.column-center-top h3, +.column-center-bottom h3, +.column-left-top h3, +.column-left-bottom h3, +.column-right-top h3, +.column-right-bottom h3 { + padding: 0 0.5em; + margin: 0; +} + +.column-center-top h4, +.column-center-bottom h4, +.column-left-top h4, +.column-left-bottom h4, +.column-right-top h4, +.column-right-bottom h4 { + padding: 0.5em 0.5em 0; + margin: 0 0 0.5em 0; +} + +.column-center-top ul, +.column-center-bottom ul, +.column-left-top ul, +.column-left-bottom ul, +.column-right-top ul, +.column-right-bottom ul { + list-style-type: none; + padding: 0; + margin: 0.5em 0; +} + +.column-center-top li, +.column-center-bottom li, +.column-left-top li, +.column-left-bottom li, +.column-right-top li, +.column-right-bottom li { + text-align: left; + padding: 0 0.5em 0; + margin: 0 0 0.5em 0; +} + +.column-center-top p, +.column-center-bottom p, +.column-left-top p, +.column-left-bottom p, +.column-right-top p, +.column-right-bottom p { + text-align: left; +} + +.column-center-top img.float-left, +.column-center-top img.float-right, +.column-center-bottom img.float-left, +.column-center-bottom img.float-right, +.column-left-top img.float-left, +.column-left-top img.float-right, +.column-left-bottom img.float-left, +.column-left-bottom img.float-right, +.column-right-top img.float-left, +.column-right-top img.float-right, +.column-right-bottom img.float-left, +.column-right-bottom img.float-right { + margin: 0.5em; +} + +/* Centered divs by color */ + +div.color1, +div.color2, +div.color3, +div.color4 { + clear: both; + width: 99.5%; + background: #f5fffa; + margin: 1em auto; +} + +div.color1 h3, +div.color2 h3, +div.color3 h3, +div.color4 h3 { + padding: 0 0.5em; + margin: 0; +} + +div.color1 { + border: 1px solid #8bbb6b; + margin: 1em auto; +} + +div.color1 h3 { + background: #9ccc7c; + border-bottom: 1px solid #8bbb6b; +} + +div.color2 { + border: 1px solid #aabe70; +} + +div.color2 h3 { + background: #bbcf81; + border-bottom: 1px solid #aabe70; +} + +div.color3 { + border: 1px solid #cac175; +} + +div.color3 h3 { + background: #dbd286; + border-bottom: 1px solid #cac175; +} + +div.color4 { + border: 1px solid #e9c47b; +} + +div.color4 h3 { + background: #fad58c; + border-bottom: 1px solid #e9c47b; +} + +.keep-bullets ul { + list-style-type: disc; + padding: 0; + margin: 0.5em 1.5em; +} + +.keep-bullets li { + padding: 0; +} + +.warning { + background: #eef; + text-align: left; + padding: 0; + border: 1px solid green; + /* Experimental rounded corners */ + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + margin: 1em; +} + +.warning p { + padding: 0.5em; + margin: 0; +} + +.hide { + position: relative; + text-indent: -999em; + height: 0; + overflow: hidden; +} + +.help { + background: #f77; + color: black; + text-align: center; + font-weight: bold; + width: 75%; + padding: 1em; + border: 10px dotted green; + margin: 1em auto; +} + +.legal { + font-size: 0.6em; +} + + +/* kill title, probably best done in the init file, though */ +h1.settitle { + position: relative; + height: 0; + overflow: hidden; + text-indent: -999em; + padding: 0; + margin: 0; +} + diff --git a/Documentation/css/lilypond.css b/Documentation/css/lilypond.css new file mode 100644 index 0000000000..82ab472b95 --- /dev/null +++ b/Documentation/css/lilypond.css @@ -0,0 +1,216 @@ +/***********************************************************/ +/* PAGE-WIDE SETTINGS */ +/**********************************************************/ + +html { + height:100%; +} + +body { + margin: 0; + padding: 0; + height: 100%; + font-size: 100%; + margin-right: auto; + margin-left: auto; + color: black; + background-color: white; +} + +/***********************************************************/ +/* HEADERS */ +/***********************************************************/ +h4, h3, h2, .unnumberedsubsubsec, .subsubheading { + color: #151959; +} + +h2 { + font-size: x-large; +} +.unnumberedsubsubsec, .subsubheading { + font-size: large; +} + +/***********************************************************/ +/* LINKS */ +/***********************************************************/ +a:link, a:visited, a:hover, a:active {color:#2E5479; text-decoration: none;} +a:hover {text-decoration: underline;} +a:active {color:#CCCCFF;} + +/***********************************************************/ +/* BLOCK FORMATTING */ +/***********************************************************/ +blockquote { + border: 1px solid #CCCCCC; + padding: 3px; + width: 40em; +} +.verbatim, .example, .smallexample { + font-family: "Courier New",Courier,monospace; +} +hr { + border: none; + height: 1px; + color: #666666; + background-color: #666666; +} +table.cartouche { + border: 2px dotted #CCCCCC; + margin-left: auto; + margin-right: auto; + width: 85%; +} +table.cartouche td { + border: none; +} + +/***********************************************************/ +/* MAIN CONTENT */ +/***********************************************************/ + +div#main { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 27%; + padding: 0 1em; + margin: 0; + overflow: auto; +} + +#languages { + padding-bottom: 1em; +} + +/***********************************************************/ +/* TOC SIDEBAR */ +/***********************************************************/ + +div#tocframe { + position: absolute; + top: 0; + right: 73%; + bottom: 0; + left: 0; + padding: 5px; + padding-bottom: 0; + margin: 0; + overflow: auto; + background-color: #E7EFE3; + z-index:100; + list-style-type: none; +} + +@media screen { + body>div#tocframe { + position: fixed + } + } + +#tocframe .contents { + width: 100%; + padding-bottom: 0.25em; + border: none; + margin: 0em; + background-color: transparent; + list-style-type: none; +} + +#tocframe a, #tocframe a:visited, #tocframe a:active { + color: #1B3313; + text-decoration: none; +} + +#tocframe a:hover { + color: #2E5479; + text-decoration:underline; +} + +#tocframe ul.toc { + padding-left: 0px; + margin-left: 0px; +} +#tocframe ul.toc li { + padding-left: 0px; + margin-left: 0px; + list-style-type: none; +} +#tocframe ul.toc > li { + font-size: 12px; +} +#tocframe ul.toc li li { + padding-left: 15px; +} +li.toc_current { + font-weight: bold; + font-style: italic; +} + +li.toc_current ul { + font-weight: normal; + font-style: normal; + background: transparent; +} + + + + +/***********************************************************/ +/* NAVIGATION */ +/***********************************************************/ + +div.header { + background-color: #E7EFE3; + padding: 2px; + border: #CCD3CC 1px solid; + text-align: center; +} + +h1.header { + font-weight: bold; + font-family: avantgarde, sans-serif; + font-size: 220%; +} + +div.subheader { + text-align: center; +} + +#navigation { + margin: 0 auto; +} + +.nav_table { + width: 100%; + background-color: #CCD3CC; + border: 0; + margin-top: 4px; + left: auto; + right: auto; + font-size: 0.8em; +} + +.title { + font-weight: bold; +} + +.footer { + background-color: #E7EFE3; + padding: 5px; + border: #CCD3CC 1px solid; + font-size: 80%; +} + + + +/***********************************************************/ +/* OVERRIDES FOR PRINTING */ +/***********************************************************/ +@media print { + /* Hide the sidebar: */ + body { padding-left: 0; } + #tocframe { display: none; } + .nav_table { display: none; } +} diff --git a/Documentation/css/text-to-speech.css b/Documentation/css/text-to-speech.css new file mode 100644 index 0000000000..96c1f20da9 --- /dev/null +++ b/Documentation/css/text-to-speech.css @@ -0,0 +1,24 @@ +@media aural { + h1, h2, h3, + h4, h5, h6 { voice-family: paul, male; stress: 20; richness: 90 } + h1 { pitch: x-low; pitch-range: 90 } + h2 { pitch: x-low; pitch-range: 80 } + h3 { pitch: low; pitch-range: 70 } + h4 { pitch: medium; pitch-range: 60 } + h5 { pitch: medium; pitch-range: 50 } + h6 { pitch: medium; pitch-range: 40 } + li, dt, dd { pitch: medium; richness: 60 } + dt { stress: 80 } + pre, code, tt { pitch: medium; pitch-range: 0; stress: 0; richness: 80 } + em { pitch: medium; pitch-range: 60; stress: 60; richness: 50 } + strong { pitch: medium; pitch-range: 60; stress: 90; richness: 90 } + dfn { pitch: high; pitch-range: 60; stress: 60 } + s, strike { richness: 0 } + i { pitch: medium; pitch-range: 60; stress: 60; richness: 50 } + b { pitch: medium; pitch-range: 60; stress: 90; richness: 90 } + u { richness: 0 } + a:link { voice-family: harry, male } + a:visited { voice-family: betty, female } + a:active { voice-family: betty, female; pitch-range: 80; pitch: x-high} +} + diff --git a/Documentation/de/GNUmakefile b/Documentation/de/GNUmakefile index 8acbe9e78c..f07a3d060b 100644 --- a/Documentation/de/GNUmakefile +++ b/Documentation/de/GNUmakefile @@ -1,7 +1,7 @@ ISOLANG = de depth = ../.. -SUBDIRS = user +SUBDIRS = application learning notation texidocs STEPMAKE_TEMPLATES = documentation -LOCALSTEPMAKE_TEMPLATES = doc-i18n-root +LOCALSTEPMAKE_TEMPLATES = lilypond ly doc-i18n-root include $(depth)/make/stepmake.make diff --git a/Documentation/de/application.tely b/Documentation/de/application.tely new file mode 100644 index 0000000000..6231232350 --- /dev/null +++ b/Documentation/de/application.tely @@ -0,0 +1,204 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- +@ignore + Translation of GIT committish: ee314252b42fe4eb69c87c13a38644bc214ff27f + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore +@documentencoding UTF-8 +@documentlanguage de +@setfilename application.info +@settitle GNU LilyPond Programmbenutzung + +@include macros.itexi + +@afourpaper + +@c don't remove this comment. +@ignore +@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen und Graham Percival +@omfdescription Programmbenutzung des LilyPond-Musiksatzsystems +@omftype program usage +@omfcategory Applications|Publishing +@omflanguage German +@end ignore + +@c Translators: Till Rettig + +@ifnottex +@node Top +@top GNU LilyPond -- Programmbenutzung +@translationof Top +@c HJJ: Info needs `@top', which is a synonym for `@unnumbered' in TeX. +@end ifnottex + +@ifhtml +@ifclear bigpage +Dieses Dokument ist auch als +@uref{source/Documentation/application.de.pdf,PDF} und auf +@uref{source/Documentation/appplication-big-page.de.html,einer großen Seite} +@end ifclear +@ifset bigpage +Dieses Dokument ist auch als +@uref{source/Documentation/application.de.pdf,PDF} und auf +@uref{source/Documentation/application/index.de.html,separaten HTML-Seiten mit Index} +@end ifset +verfügbar. +@end ifhtml + + +@c This produces the unified index +@syncodeindex fn cp +@syncodeindex vr cp + + +@finalout + +@titlepage +@title LilyPond +@subtitle Das Notensatzprogramm +@titlefont{Programmbenutzung} +@author Das LilyPond-Entwicklerteam + + +Copyright @copyright{} 1999--2009 bei den Autoren + +@emph{The translation of the following copyright notice is provided +for courtesy to non-English speakers, but only the notice in English +legally counts.} + +@emph{Die Übersetzung der folgenden Lizenzanmerkung ist zur Orientierung +für Leser, die nicht Englisch sprechen. Im rechtlichen Sinne ist aber +nur die englische Version gültig.} + +@quotation +Es ist erlaubt, dieses Dokument unter den Bedingungen der +GNU Free Documentation Lizenz (Version 1.1 oder +spätere, von der Free Software Foundation publizierte Versionen, ohne +Invariante Abschnitte), +zu kopieren, zu verbreiten und/oder +zu verändern. Eine Kopie der Lizenz ist im Abschnitt ``GNU +Free Documentation License'' angefügt. +@end quotation + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections. +A copy of the license is included in the section entitled ``GNU +Free Documentation License''. +@end quotation + +@vskip 20pt + +Für LilyPond Version @version{} +@end titlepage + +@copying +Copyright @copyright{} 1999--2009 bei den Autoren + +@emph{The translation of the following copyright notice is provided +for courtesy to non-English speakers, but only the notice in English +legally counts.} + +@emph{Die Übersetzung der folgenden Lizenzanmerkung ist zur Orientierung +für Leser, die nicht Englisch sprechen. Im rechtlichen Sinne ist aber +nur die englische Version gültig.} + +@quotation +Es ist erlaubt, dieses Dokument unter den Bedingungen der +GNU Free Documentation Lizenz (Version 1.1 oder +spätere, von der Free Software Foundation publizierte Versionen, ohne +Invariante Abschnitte), +zu kopieren, zu verbreiten und/oder +zu verändern. Eine Kopie der Lizenz ist im Abschnitt ``GNU +Free Documentation License'' angefügt. +@end quotation + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections. +A copy of the license is included in the section entitled ``GNU +Free Documentation License''. +@end quotation +@end copying + +@ifnottex +Diese Datei dokumentiert die Programmbenutzung von GNU LilyPond. + +Copyright 1999--2009 bei den Autoren + +@emph{The translation of the following copyright notice is provided +for courtesy to non-English speakers, but only the notice in English +legally counts.} + +@emph{Die Übersetzung der folgenden Lizenzanmerkung ist zur Orientierung +für Leser, die nicht Englisch sprechen. Im rechtlichen Sinne ist aber +nur die englische Version gültig.} + +@quotation +Es ist erlaubt, dieses Dokument unter den Bedingungen der +GNU Free Documentation Lizenz (Version 1.1 oder +spätere, von der Free Software Foundation publizierte Versionen, ohne +Invariante Abschnitte), +zu kopieren, zu verbreiten und/oder +zu verändern. Eine Kopie der Lizenz ist im Abschnitt ``GNU +Free Documentation License'' angefügt. +@end quotation + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections. +A copy of the license is included in the section entitled ``GNU +Free Documentation License''. +@end quotation +@end ifnottex + +@ifnottex +Das ist das Handbuch zur Programmbenutzung für GNU LilyPond Version @version{}. +Für einen Überblick über die gesamte Dokumentation von LilyPond und die Intention +dieses Handbuchs siehe @rlearning{Über die Dokumentation}. + +@cindex Internetseite +@cindex URL + +@uref{http://@/www@/.lilypond@/.org/}. Auf der Internetseite +finden sich Kopien dieser und anderer Dokumentationsdateien. + +@menu +* Installieren:: Wie das Programm installiert oder kompiliert wird. +* Setup:: Wie LilyPond mit anderen Programmen benutzt werden kann. +* LilyPond starten:: Betrieb des Programms. +* LilyPond-book:: Kombination von Text und Noten. +* Von anderen Formaten konvertieren:: Konvertierungen in das LilyPond-Quellformat. + +Anhänge + +* GNU Free Documentation License:: Die Lizenz dieses Dokuments. +* LilyPond-Index:: +@end menu +@end ifnottex + +@contents + + +@include application/install.itely +@include application/setup.itely +@include application/running.itely +@include application/lilypond-book.itely +@include application/converters.itely + +@include fdl.itexi + +@node LilyPond-Index +@appendix LilyPond-Index +@translationof LilyPond index + +@printindex cp + +@bye diff --git a/Documentation/de/application/GNUmakefile b/Documentation/de/application/GNUmakefile new file mode 100644 index 0000000000..425cc1d8e2 --- /dev/null +++ b/Documentation/de/application/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/de/application/converters.itely b/Documentation/de/application/converters.itely new file mode 100644 index 0000000000..50cf7a8068 --- /dev/null +++ b/Documentation/de/application/converters.itely @@ -0,0 +1,384 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- + +@ignore + Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + +@c Translators: Reinhold Kainhofer +@c Translation checkers: Till Rettig + +@node Von anderen Formaten konvertieren +@chapter Von anderen Formaten konvertieren +@translationof Converting from other formats + +LilyPond kann auch Musik aus diversen anderen Formaten importieren. +Dieses Kapitel beschreibt die dazu mit LilyPond mitgelieferten +Hilfsprogramme. Daneben existieren natürlich auch noch weitere +Programme, die Dateien für LilyPond erstellen können, wie etwa +graphische Sequenzierprogramme und XML-Konverter. Näheres dazu +findet sich auf der @uref{http://@/lilypond@/.org,Homepage} von LilyPond. + +Die im Folgenden beschriebenen Programme sind eigenständige Hilfsprogramme +und werden üblicherweise von der Kommandozeile aufgerufen. Siehe +@ref{Benutzung auf der Kommandozeile} für weitere Informationen. Wenn Sie MacOS +10.3 oder 10.4 benutzen und Probleme mit diesen Skripten (z. B. +@code{convert-ly}) haben, lesen Sie @ref{Einrichtung für MacOS X}. + +@knownissues +Leider haben wir nicht ausreichend viele Entwickler, um all die folgenden +Hilfsprogramme ständig zu warten. Wir stellen den aktuellen Stand zur +Verfügung, können aber leider Fehlerberichte nur selten bearbeiten. +Selbstverständlich sind Patches von Ihnen sehr willkommen! + + +@menu +* midi2ly aufrufen:: Import von MIDI. +* muscxml2ly aufrufen:: Import von MusicXML. +* abc2ly aufrufen:: Import von ABC. +* etf2ly aufrufen:: Import von (alten) Finale-Dateien. +* LilyPond-Dateien erstellen:: Grafische Benutzeroberflächen, +Musikübersetzer und Programme zur algorithmischen Komposition. +@end menu + +@node midi2ly aufrufen +@section @command{midi2ly} aufrufen +@translationof Invoking midi2ly + +@cindex MIDI + +@command{midi2ly} übersetzt eine Typ@tie{}1 MIDI-Datei in eine +Eingabedatei für LilyPond. + +MIDI (Music Instrument Digital Interface) ist ein internationaler +Standard für digitale Instrumente: Es spezifiziert die Verkabelung, +ein serielles Protokoll und ein Dateiformat. Das MIDI-Dateiformat +ist der de-facto Standard um Musik von vielen Programmen zu exportieren. +Allerdings fehlen in den MIDI-Dateien viele Ausdrucks- und +Artikulationszeichen. Dennoch kann MIDI vielfach nützlich sein, +um Musik von einem Programm zu importieren, für das kein spezielles +Hilfsprogramm den direkten Import nach LilyPond unterstützt. + +@command{midi2ly} konvertiert die MIDI-Spuren nach @rinternals{Staff} und +MIDI-Kanäle in @rinternals{Voice} Kontexte. Tonhöhen werden relativ +angegeben, Tondauern nur wenn nötig. + +MIDI-Dateien können auch direkt von einem digitalen Keyboard +aufgenommen und dann in eine @file{.ly}-Datei konvertiert werden. +Allerdings sind Musikinterpretationen von Menschen (aus gutem Grund!) +rhythmisch nicht exakt genug um die Konvertierung von MIDI nach LY +trivial zu gestalten. Wenn @command{midi2ly} mit Quantisierung +(@code{-s} und @code{-d} Kommandozeilenoptionen) aufgerufen wird, +versucht es diese Unschärfen im Zeitablauf zu korrigieren, ist +allerdings nicht sonderlich gut darin. Daher können wir diese Technik +leider nicht für die Konvertierung von MIDI-Aufnahmen empfehlen. + + +@command{midi2ly} wird von der Kommandozeile folgendermaßen aufgerufen: +@example +midi2ly [@var{Optionen}]@dots{} @var{MIDI-Datei} +@end example + +Unter @q{Kommandozeile} verstehen wir dabei die Kommandozeile des +jeweiligen Betriebssystems. Für nähere Informationen hierzu siehe +@ref{Von anderen Formaten konvertieren}. + +Die folgenden Kommandozeilenoptionen werden von @command{midi2ly} +unterstützt: + +@table @code +@item -a, --absolute-pitches +Gibt absolute Tonhöhen aus. + +@item -d, --duration-quant=@var{LÄNGE} +Quantisiert Tondauern zu Vielfachen von @var{LÄNGE}. + +@item -e, --explicit-durations +Gibt alle Tondauern explizit an. + +@item -h,--help +Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen. + +@item -k, --key=@var{acc}[:@var{Moll}] +Setzt die Standard-Tonart. @math{@var{acc} > 0} gibt die Anzahl der +Kreuze an, @math{@var{acc} < 0} gibt die Anzahl der Bs der Tonart an. +Eine Moll-Tonart wird durch @code{:1} angegeben. + +@item -o, --output=@var{Datei} +Die Ausgabe wird in die Datei @var{Datei}@file{.ly} geschrieben. + +@item -s, --start-quant=@var{LÄNGE} +Quantisiert den Beginn der Noten zu Vielfachen von @var{LÄNGE}. + +@item -t, --allow-tuplet=@var{DUR}*@var{NUM}/@var{DEN} +Erlaubt Tuplet-Dauern der Form @var{DUR}*@var{NUM}/@var{DEN}. + +@item -V, --verbose +Gibt ausführliche informative Meldungen während der Konvertierung aus. + +@item -v, --version +Gibt die Versionsnummer aus. + +@item -w, --warranty +Zeigt die Lizenzbedingungen und Urheberrechtshinweise. + +@item -x, --text-lyrics +Interpretiert alle Texte als Liedtexte. +@end table + + +@knownissues + +Überlappende Noten in einem Arpeggio werden nicht korrekt dargestellt. +Nur die erste Note wird eingelesen und konvertiert, die restlichen +werden ignoriert. Als Abhilfe können Sie alle Noten auf dieselbe +Tonlänge setzen und Phrasierungszeichen oder Pedalindikatoren +hinzufügen. + + +@node muscxml2ly aufrufen +@section @command{muscxml2ly} aufrufen +@translationof Invoking musicxml2ly + +@cindex MusicXML + +@uref{http://@/www.@/musicxml@/.org/,MusicXML} ist ein XML-Dialekt +zur Darstellung von Musiknotation. + +@command{musicxml2ly} wandelt eine MusicXML-Datei nach LilyPond um, +wobei sowohl die Noten, Artikulationszeichen, Struktur der Partitur, +Liedtexte etc. einer MusicXML-Datei (im @q{part-wise}-Format) in eine +.ly-Datei um. + +@command{musicxml2ly} wird von der Kommandozeile folgendermaßen aufgerufen: +@example +musicxml2ly [@var{Optionen}]@dots{} @var{XML-Datei} +@end example + +Unter @q{Kommandozeile} verstehen wir dabei die Kommandozeile des +jeweiligen Betriebssystems. Für nähere Informationen hierzu siehe +@ref{Von anderen Formaten konvertieren}. + +Wenn als Dateiname @file{-} angegeben wird, liest @command{musicxml2ly} +Daten direkt von der Kommandozeile ein. + +Die folgenden Kommandozeilenoptionen werden von @command{musicxml2ly} +unterstützt: + +@table @code +@item -a, --absolute +Konvertiert in absolute Tonhöhen. + +@item -h,--help +Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen. + +@item -l, --language=LANG +Inkludiert die Sprachdatei @var{LANG}@file{.ly} in der Ausgabe. Wird z.B. +'deutsch' angegeben, wird @file{deutsch.ly} in die .ly-Datei eingebunden +und deutsche Notenbezeichnungen benutzt. + +@item --lxml +Benutzt das lxml.etree Python-Paket für die Verarbeitung von XML (benötigt weniger Speicher und Rechenleistung) + +@item --nd --no-articulation-directions +Konvertiert keine Richtungsangaben (@code{^}, @code{_} oder @code{-}) +von Artikulations- und Lautstärkebezeichnungen. + +@item --no-beaming +Konvertiert keine Informationen über die Balkensetzung aus der +MusicXML-Datei. Stattdessen wird dies LilyPond überlassen. + +@item -o,--output=@var{Dateiname} +Die Ausgabe wird in die Datei @var{Dateiname}@file{.ly} geschrieben. Wird +als @var{Dateiname} nur @file{-} angegeben, wird das Ergebnis der Konvertierung +an der Kommandozeile ausgegeben. Wird diese Option nicht angegeben, so +erfolgt die Ausgabe in die Datei @var{XML-Datei}@file{.ly}. + +@item -r,--relative +Konvertiert in relative Tonhöhen. (Standardeinstellung) + +@item -v, --verbose +Gibt ausführliche informative Meldungen während der Konvertierung aus. + +@item --version +Gibt die Versionsnummer aus. + +@item -z,--compressed +Die Eingabedatei wird als komprimierte MusicXML-Datei eingelesen. +Dies ist die Standardeinstellung für Dateien mit der Erweiterung +@file{.mxl}. +@end table + + +@node abc2ly aufrufen +@section @command{abc2ly} aufrufen +@translationof Invoking abc2ly + +@cindex ABC + +ABC ist ein relativ einfaches ASCII-basierendes Musikformat und ist +dokumentiert auf der ABC-Homepage: + +@quotation +@uref{http://@/www@/.walshaw@/.plus@/.com/@/abc/@/learn@/.html}. +@end quotation + +@command{abc2ly} konvertiert ABC-Dateien nach LilyPond und wird +von der Kommandozeile folgendermaßen aufgerufen: + +@example +abc2ly [@var{Optionen}]@dots{} @var{ABC-Datei} +@end example + +Unter @q{Kommandozeile} verstehen wir dabei die Kommandozeile des +jeweiligen Betriebssystems. Für nähere Informationen hierzu siehe +@ref{Von anderen Formaten konvertieren}. + +Die folgenden Kommandozeilenoptionen werden von @command{abc2ly} +unterstützt: + +@table @code +@item -b,--beams=None +Die Balkensetzung aus der ABC-Datei erhalten. +@item -h,--help +Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen. +@item -o,--output=@var{Dateiname} +Die Ausgabe wird in die Datei @var{Dateiname}@file{.ly} geschrieben. +@item -s,--strict +Strenge Auslegung einer erfolgreichen Konvertierung. +@item -v,--version +Gibt die Versionsnummer aus. +@end table + +Es existiert außerdem die Möglichkeit, LilyPond-Befehle für die +Konvertierung mit @command{abc2ly} gleich in der ABC-Datei anzugeben. +Wenn sich etwa in der ABC-Datei das Kommentar + +@example +%%LY voices \set autoBeaming = ##f +@end example + +@noindent +befindet, so wird der Text nach dem Schlüsselwort @q{voices} direkt +in die aktuelle Stimme in der LilyPond-Datei eingefügt. + +Ebenso bewirkt + +@example +%%LY slyrics more words +@end example + +@noindent +dass alles nach dem @q{slyrics} Schlüsselwort an der aktuellen Stelle +im Liedtext eingefügt wird. + + +@knownissues + +Der ABC-Standard ist eigentlich kein wirklich vollständiger Standard. +Für komplexere Notation wie etwa Polyphonie existieren verschiedene +Konventionen. + +Mehrere Lieder in einer Datei können nicht konvertiert werden. + +ABC synchronisiert den Liedtext am Anfang jeder Zeile mit den Noten, +@command{abc2ly} macht dies nicht. + +@command{abc2ly} ignoriert die Balkensetzung in der ABC-Datei. + + +@node etf2ly aufrufen +@section @command{etf2ly} aufrufen +@translationof Invoking etf2ly + +@cindex ETF +@cindex enigma +@cindex Finale +@cindex Coda Technology + +ETF (Enigma Transport Format) ist ein Dateiformat, das Coda +Music Technology in älteren Versionen des Programms Finale benutzt hat. + +@command{etf2ly} konvertiert Teile einer ETF-Datei nach LilyPond +und wird von der Kommandozeile folgendermaßen aufgerufen: + +@example +etf2ly [@var{Optionen}]@dots{} @var{ETF-Datei} +@end example + +Unter @q{Kommandozeile} verstehen wir dabei die Kommandozeile des +jeweiligen Betriebssystems. Für nähere Informationen hierzu siehe +@ref{Von anderen Formaten konvertieren}. + +Die folgenden Kommandozeilenoptionen werden von @command{etf2ly} +unterstützt: + +@table @code +@item -h,--help +Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen. +@item -o,--output=@var{Dateiname} +Die Ausgabe wird in die Datei @var{Dateiname}@file{.ly} geschrieben. +@item --version +Gibt die Versionsnummer aus. +@end table + + +@knownissues + +Die Liste der Artikulationszeichen is unvollständig. Leere Takte +verwirren @command{etf2ly}. Mehrfache Vorschlagnoten werden falsch +beendet. + + +@node LilyPond-Dateien erstellen +@section LilyPond-Dateien erstellen +@translationof Generating LilyPond files + +@cindex Externe Programme, LilyPond-Dateien erzeugen + +LilyPond selbst wird nur mit den oben genannten Konvertierprogrammen +ausgeliefert und unterstützt keine weiteren Formate. Es existieren +allerdings externe Hilfsprogramme, die auch LilyPond-Dateien erzeugen +können. +Diese umfassen unter anderem: + +@itemize +@item +@uref{http://@/www@/.denemo@/.org/,Denemo}, ein grafisches +Programm zum Musiksatz. +@item +@uref{http://www@/.volny@/.cz/smilauer/rumor/rumor@/.html,Rumor}, ein +MIDI-nach-LilyPond Konverter, der monophone MIDI-Eigaben in Echtzeit +konvertiert. +@item +@uref{http://nicolas@/.sceaux@/.free@/.fr/lilypond/lyqi@/.html,lyqi}, ein +Emacs-Modus. +@item +@uref{http://@/www@/.nongnu@/.org/@/xml2ly/,xml2ly}, ein Konverter für +@uref{http://@/www@/.musicxml@/.com/xml@/.html,MusicXML}, der auf +XML-Transformationen mittels XSLT basiert. +@item +@uref{http://@/noteedit@/.berlios@/.de,NoteEdit}, ein grafisches +Programm zum Notensatz, das auch +@uref{http://@/www@/.musicxml@/.com/xml@/.html,MusicXML} importieren kann. +@item +@uref{http://@/www@/.rosegardenmusic@/.com,Rosegarden}, +das MIDI importieren kann. +@item +@uref{http://@/common-lisp@/.net/project/fomus/,FOMUS}, +eine LISP-Bibliothek, um Musiknotation zu erzeugen. +@item +@uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml}, +ein Notensatzprogramm mit experimentellem Export nach LilyPond. +@item +@uref{http://www.tuxguitar.com.ar/,TuxGuitar}, ein Programm zur Erzeugung von +Gitarren-Tabulaturen, unterstützt den Export nach LilyPond. +@item +@uref{http://musescore.org/,MuseScore} unterstützt ebenfalls den +Export nach LilyPond. +@end itemize + diff --git a/Documentation/de/application/install.itely b/Documentation/de/application/install.itely new file mode 100644 index 0000000000..827c8d8467 --- /dev/null +++ b/Documentation/de/application/install.itely @@ -0,0 +1,90 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- + +@ignore + Translation of GIT committish: d415427752fa5fd83b0da189d677481d1c7f3043 + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + +@c Translators: Till Rettig, Reinhold Kainhofer + +@ifclear INSTALL +@node Installieren +@chapter Installieren +@translationof Install +@end ifclear + +Es gibt von Lilypond zwei verschiedene Typen von Versionen: stabile +Versionen und instabile Entwicklerversionen. Stabile Versionen haben +eine gerade Unter-Versionsnummer (z.B. 2.8, 2.10, 2.12, etc.). +Entwicklerversionen haben hingegen ungerade Unter-Versionsnummern (z.B. +2.7, 2.9, 2.11, etc.). + +LilyPond selbst zu kompilieren ist ein relativ komplizierter Vorgang, daher +empfehlen wir @strong{stark}, die vorkompilierten Binär-Pakete zu benutzen. + + +@menu +* Vorkompilierte Binär-Pakete:: +* Aus den Quellen übersetzen:: +@end menu + +@node Vorkompilierte Binär-Pakete +@section Vorkompilierte Binär-Pakete +@translationof Precompiled binaries + +@unnumberedsubsec Herunterladen + + +Aktuelle Informationen zu vorkompilierten Binär-Paketen für Ihre Plattform +finden Sie unter @uref{http://lilypond.org/web/install/}. Falls Ihr Betriebssystem +auf dieser allgemeinen Seite nicht behandelt wird, sehen Sie bitte in +der vollständigen Liste unter @uref{http://download.linuxaudio.org/lilypond/binaries/} +nach. + +Momentan werden Binärpakete für folgende Plattformen erstellt: + +@example +darwin-ppc - MacOS X powerpc +darwin-x86 - MacOS X intel +freebsd-64 - FreeBSD 6.x, x86_64 +freebsd-x86 - FreeBSD 4.x, x86 +linux-64 - Beliebige GNU/Linux Distribution, x86_64 +linux-ppc - Beliebige GNU/Linux Distribution, powerpc +linux-x86 - Beliebige GNU/Linux Distribution, x86 +mingw - Windows x86 +@end example + +@knownissues + +Wenn Sie MacOS 10.3 oder 10.4 benutzen und Python-Skripte wie +@command{convert-ly} und @command{lilypond-book} benutzen wollen, +lesen Sie @ref{Setup for MacOS X,,,lilypond-program,Application Usage}. + +@node Aus den Quellen übersetzen +@section Aus den Quellen übersetzen +@translationof Compiling from source + +LilyPond kann auch selbst direkt aus dem Quellcode des git-Depots +kompiliert werden. Da jedoch für die Kompilierung definitiv +Englisch-Kenntnisse vorhanden sein müssen, soll hier lediglich auf die +englische Dokumentation verwiesen werden: +@c DO NOT translate the following line at all. +@iftex +@ref{Compiling from source,,,lilypond-program,Application Usage}. +@end iftex +@ifhtml +@c Please translate the following line (but not the .html file name) +@uref{Compiling-from-source.html,Compiling from Source}. +@end ifhtml + + +@c TRANSLATORS: +@c Please **do not** translate anything below this line. Users +@c should not be compiling LilyPond themselves; if they really +@c want to do so, they should be able to read the English docs, +@c because they'll probably need to ask questions in English +@c on the -devel list. -gp diff --git a/Documentation/de/application/lilypond-book.itely b/Documentation/de/application/lilypond-book.itely new file mode 100644 index 0000000000..187d187be6 --- /dev/null +++ b/Documentation/de/application/lilypond-book.itely @@ -0,0 +1,1117 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- + +@ignore + Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + +@c Translators: Reinhold Kainhofer +@c Translation checkers: Till Rettig + + +@node LilyPond-book +@chapter @command{lilypond-book}: Noten in den Text integrieren +@translationof LilyPond-book + +Wenn Sie in ein Dokument Grafiken Ihres Musiksatzes einfügen möchten, so +können Sie genauso machen, wie Sie andere Grafiken einfügen würden: Die +Bilder werden getrennt vom Dokument im PostScript- oder PNG-Format erstellt +und können dann in @LaTeX{} oder HTML inkludiert werden. + +@command{lilypond-book} automatisiert diesen Prozess: Dieses +Programm extrahiert Musik-Schnipsel aus Ihrem Dokument, +ruft @command{lilypond} auf und fügt die resultierenden Bilder +in Ihr Dokument ein. Die Länge der Zeilen und die Schriftgroße +werden dabei Ihrem Dokument angepasst. + +@command{lilypond-book} ist ein eigenständiges Programm und wird +üblicherweise von der Kommandozeile aufgerufen. Nähere Informationen +hierzu finden sich in @ref{Benutzung auf der Kommandozeile}. Wenn Sie MacOS 10.3 +oder 10.4 benutzen und Probleme mit @code{lilypond-book} haben, lesen +Sie @ref{Einrichtung für MacOS X}. + +Dieses Vorgehen kann bei @LaTeX{}, HTML, Texinfo oder DocBook Dokumenten +angewendet werden. + +@cindex texinfo +@cindex latex +@cindex texinfo +@cindex texi +@cindex html +@cindex docbook +@cindex Dokument, Musik einfügen in +@cindex HTML, Musik in +@cindex Texinfo, Musik in +@cindex DocBook, Musik in +@cindex @LaTeX{}, Musik in + + +@menu +* Ein musikwissenschaftlicher Text als Beispiel:: +* Noten in Text integrieren:: +* Die Musikfragment-Optionen:: +* lilypond-book aufrufen:: +* Dateiendungen:: +* Alternative Methoden, Text und Musik zu kombinieren:: +@end menu + +@node Ein musikwissenschaftlicher Text als Beispiel +@section Ein musikwissenschaftlicher Text als Beispiel +@translationof An example of a musicological document + + +@cindex Musikwissenschaft + +Zahlreiche Texte enthalten Musikbeispiele: musikwissenschaftliche +Abhandlungen, Liederbücher oder Handbücher wie dieses. Solche +Texte können händisch erzeugt werden, indem einfach die Musikbeispiele +als Grafik (PostScript, PNG, GIF, etc.) im Textverarbeitungsprogramm +eingefügt werden. Für HTML, @LaTeX{}, Texinfo und DocBook Dokumente +existiert jedoch ein Weg, dies automatisiert durchzuführen. + +Das Programm @code{lilypond-book} extrahiert die Musikfragmente aus +dem Dokument, formatiert sie automatisiert in eine Grafik und fügt die +resultierenden Notenbeispiele dann wieder in das Dokument ein. Dies soll +hier an einem einfachen @LaTeX{}-Beispiel verdeutlicht werden. Das Beispiel +selbst enthält schon Erklärungen, sodass wir es hier nicht weiter diskutieren +müssen. + +@subheading Eingabe + +@quotation +@verbatim +\documentclass[a4paper]{article} + +\begin{document} + +Dokumente für \verb+lilypond-book+ können Musik und Text nach Belieben +kombinieren. Zum Beispiel: + +\begin{lilypond} +\relative c' { + c2 g'2 \times 2/3 { f8 e d } c'2 g4 +} +\end{lilypond} + +Optionen für \verb+lilypond+ werden dabei in eckige Klammern gesetzt. + +\begin[fragment,quote,staffsize=26,verbatim]{lilypond} + c'4 f16 +\end{lilypond} + +Größere Beispiele können auch in einer eigenständigen Datei gespeichert +und dann mit \verb+\lilypondfile+ eingebunden werden. + +\lilypondfile[quote,noindent]{screech-boink.ly} + +(Falls nötig kann screech-boink.ly durch eine beliebige andere .ly +Datei im selben Verzeichnis wie diese Datei ersetzt werden.) + +\end{document} +@end verbatim +@end quotation + +@subheading Verarbeitung + +Speichern Sie den obigen @LaTeX{} Quellcode in eine Datei @file{lilybook.lytex} +und führen Sie dann in der Kommandozeile folgende Befehle aus: + +@c keep space after @version{} so TeX doesn't choke +@example +lilypond-book --output=out --pdf lilybook.lytex +@emph{lilypond-book (GNU LilyPond) @version{} } +@emph{Reading lilybook.lytex...} +@emph{..(viele Ausgabezeilen entfernt)..} +@emph{Compiling lilybook.tex...} +cd out +pdflatex lilybook +@emph{..(viele Ausgabezeilen entfernt)..} +xpdf lilybook +@emph{(Ersetzen Sie @command{xpdf} durch Ihren PDF-Betrachter)} +@end example + +Die Ausführung von @command{lilypond-book} und @command{latex} erzeugt +zahlreiche temporäre Dateien, die das Arbeitsverzeichnis unnötig +vollstopfen würden. Daher empfiehlt sich die Benutzung der @code{--output=@var{dir}} +Option, wodurch die Dateien im Unterverzeichnis @file{dir} erzeugt werden. + +Das Endresultat des obigen @LaTeX{} Beispiels ist im nächsten Abschnitt +zu sehen.@footnote{Da dieses Handbuch mit Texinfo erzeugt wurde, +kann sich das Aussehen des Beispiels leicht von dem mit @LaTeX{} +erzeugten unterscheiden.} + +@page + +@subheading Ausgabe + +Dokumente für @command{lilypond-book} können Musik und Text nach Belieben +kombinieren. Zum Beispiel: + +@lilypond +\relative c' { + c2 g'2 \times 2/3 { f8 e d } c'2 g4 +} +@end lilypond + +Optionen für @command{lilypond} werden dabei in eckige Klammern gesetzt. + +@lilypond[fragment,quote,staffsize=26,verbatim] +c'4 f16 +@end lilypond + +Größere Beispiele können auch in einer eigenständigen Datei gespeichert +und dann mit @code{\lilypondfile} eingebunden werden. + +@lilypondfile[quote,noindent]{screech-boink.ly} + + +@page + + + +@node Noten in Text integrieren +@section Noten in Text integrieren +@translationof Integrating music and text + +In diesem Abschnitt soll die Integration von LilyPond mit den +verschiedenen Dateiformaten detailliert erläutert werden. + + +@menu +* LaTeX:: +* Texinfo:: +* HTML:: +* DocBook:: +@end menu + +@node LaTeX +@subsection @LaTeX{} +@translationof LaTeX + + +@LaTeX{} ist der de-facto Standard zur Publikation von wissenschaftlichen Texten +in Naturwissenschaft und Technik. Es basiert auf dem Schriftsetzer @TeX{}, +der die bestmögliche Typographie erzeugt. + +Siehe die @uref{http://@/www@/.ctan@/.org/@/tex@/-archive/@/info/@/lshort/@/german/, +@emph{@LaTeX{}2e-Kurzbeschreibung}} für eine Einführung in die +Benutzung von @LaTeX{}. + +Musikbeispiele können eingegeben werden als + +@example +\begin[Optionen,kommen,]@{lilypond@} + IHR LILYPOND QUELLCODE +\end@{lilypond@} +@end example + +@noindent +oder + +@example +\lilypondfile[Optionen,kommen,hier]@{@var{Dateiname}@} +@end example + +@noindent +oder + +@example +\lilypond@{ IHR LILYPOND QUELLCODE @} +@end example + +Zusätzlich kann mit @code{\lilypondversion} die benutzte Versionsnummer +von LilyPond angezeigt werden. Der Aufruf von @command{lilypond-book} +liefert eine Datei, die dann mit @LaTeX{} weiter verarbeitet werden kann. + +Dies soll hier an einigen Beispielen gezeigt werden. Die @code{lilypond}-Umgebung + +@example +\begin[quote,fragment,staffsize=26]@{lilypond@} + c' d' e' f' g'2 g'2 +\end@{lilypond@} +@end example + +@noindent +erzeugt + +@lilypond[quote,fragment,staffsize=26] +c' d' e' f' g'2 g'2 +@end lilypond + +Die Kurzversion + +@example +\lilypond[quote,fragment,staffsize=11]@{@} +@end example + +@noindent +erzeugt + +@lilypond[quote,fragment,staffsize=11]{} + +@noindent +Innerhalb des @code{\lilypond@{@}} Befehls dürfen keine geschwungenen +Klammern @code{@{} oder @code{@}} vorkommen, weshalb dieser Befehl +nur mit der @code{fragment} Option Sinn macht. + +Die Standardzeilenlänge wird bestimmt, indem die Angaben in der Dokumentpräambel, +also dem Teil der @LaTeX{} Datei vor dem @code{\begin@{document@}}, +analysiert werden. Der @command{lilypond-book} Befehl sendet diese +Angaben an @LaTeX{}, um herauszufinden, wie breit der Text tatsächlich +ist. Die Breite der Notenzeilen wird dann an diese Textbreite angepasst. +Ein derartig heuristischer Algorithmus kann natürlich auch versagen, +wobei man in diesem Fall die Breite auch explizit durch die +@code{line-width} Option des @code{\lilypond@{@}} oder @code{\begin@{lilypond@}} +Befehls angeben kann. + +@cindex titling and lilypond-book +@cindex \header in @LaTeX{} documents + +Jedes Musikbeispiele ruft die folgenden Makros auf, wenn sie vom Benutzer +definiert wurden: + +@itemize @bullet +@item @code{\preLilyPondExample} -- wird vor der Musik aufgerufen, + +@item @code{\postLilyPondExample} -- wird nach der Musik aufgerufen, + +@item @code{\betweenLilyPondSystem[1]} -- wird zwischen den einzelnen +Systemen aufgerufen, wenn @code{lilypond-book} das Beispiel in verschiedene +PostScript Dateien getrennt hat. Dieser @LaTeX{}-Befehl muss so definiert +werden, dass er genau ein Argument erhält, nämlich die Zahl der bereits +in @LaTeX{} eingefügten Dateien dieses Beispiels. Als Standard wird einfach +ein @code{\linebreak} eingefügt. +@end itemize + +@ignore +Broken stuff. :( + +@cindex Latex, Feta Schriftart +@cindex fetachar + +Um Zeichen wie Auflösungszeichen, Kreuze, Fermaten etc. aus der Feta-Schriftart +von LilyPond in @LaTeX{} einzufügen, muss @code{\input@{titledefs@}} benutzt werden, +wodurch dann der Befehl @code{\fetachar} zur Verfügung steht. + +@example +\documentclass[a4paper]@{article@} + +\input@{titledefs@} + +\begin@{document@} + +\fetachar\fetasharp + +\end@{document@} +@end example + +Die Namen der Symbole sind in der Datei @file{feta20.tex} definiert. Sie finden +den Pfad zu dieser Datei mit dem Befehl + +@example +kpsewhich feta20.tex +@end example + +@end ignore + +@snippets + +Manchmal ist es nötig, Musikelemente wie Halte- oder Bindebögen so darzustellen, +als ob sie am Ende des Musikausschnitten noch weitergehen würden. Eine solche +Ausgabe kann erreicht werden, indem ein Zeilenumbruch in die Notenzeile +eingefügt wird und die Ausgabe der folgenden Notenzeile unterdrückt wird. + +In @LaTeX{} wird dazu der Befehl @code{\betweenLilyPondSystem} einfach derartig +programmiert, dass die Ausgabe der einzelnen Notensysteme abgebrochen wird, +sobald die gewünschte Anzahl an Systemen erreicht ist. Da +@code{\betweenLilyPondSystem} zum ersten Mal nach dem ersten System aufgerufen +wird, ist die Ausgabe nur eines Systems trivial. + +@example +\def\betweenLilyPondSystem#1@{\endinput@} + +\begin[fragment]@{lilypond@} + c'1\( e'( c'~ \break c' d) e f\) +\end@{lilypond@} +@end example + +Um eine größere Zahl an System nötig, dann muss dementsprechend eine +@TeX{}-Bedingung vor dem @code{\endinput} benutzt werden: + +@example +\def\betweenLilyPondSystem#1@{ + \ifnum##1<2\else\endinput\fi +@} +@end example + +Dieses Beispiel bricht nach genau zwei ausgegebenen Notenzeilen ab. +Für eine andere Anzahl braucht nur @q{2} durch die entsprechende +Anzahl ersetzt werden. + +Die Definition von @code{\betweenLilyPondSystem} bleibt gültig, +bis @TeX{} die aktuelle Umgebung in @LaTeX{} verlässt oder der +Befehl durch eine neue Definition überschrieben wird. +Dies kann etwa folgendermaßen in der @LaTeX{}-Datei geschehen: + +@example +\let\betweenLilyPondSystem\undefined +@end example + +Obige Definition von @code{\betweenLilyPondSystem} kann durch die +Definition eines @TeX{}-Makros auch verallgemeinert werden, + +@example +\def\onlyFirstNSystems#1@{ + \def\betweenLilyPondSystem##1@{\ifnum##1<#1\else\endinput\fi@} +@} +@end example + +@noindent +wobei diesem Makro @code{\onlyFirstNSystems} einfach die Anzahl der +gewünschten Systeme übergeben wird: + +@example +\onlyFirstNSystems@{3@} +\begin@{lilypond@}...\end@{lilypond@} +\onlyFirstNSystems@{1@} +\begin@{lilypond@}...\end@{lilypond@} +@end example + +@seealso +@command{lilypond-book} stellt auch zahlreiche Kommandozeilen-Optionen zur +Verfügung. Für eine Liste dieser Optionen und andere hilfreiche Details zur +Verarbeitung von @LaTeX{}-Dokumenten, siehe @ref{lilypond-book aufrufen}. + + + + +@node Texinfo +@subsection Texinfo +@translationof Texinfo + +Texinfo ist das Standard-Dokumentationsformat des GNU Projekts. Ein Beispiel +für ein Dokument im Texinfo Format ist dieses Handbuch, wobei die HTML-, PDF- und +Info-Versionen alle aus demselben Texinfo Dokument erzeugt werden. + +In der Eingabedatei wir Musik eingegeben als + +@example +@@lilypond[Optionen,kommen,hier] + IHR LILYPOND QUELLCODE +@@end lilypond +@end example + +@noindent +oder + +@example +@@lilypond[Optionen,kommen,hier]@{ IHR LILYPOND QUELLCODE @} +@end example + +@noindent +oder + +@example +@@lilypondfile[Optionen,kommen,hier]@{@var{Dateiname}@} +@end example + +Zusätzlich kann mit @code{@@lilypondversion} die aktuelle Versionsnummer +von LilyPond angezeigt werden. +Wenn @command{lilypond-book} eine derartige Datei verarbeitet, +wird eine Texinfo-Datei mit der Erweiterung @file{.texi} erzeugt, +die @code{@@image} Befehle für die Ausgabe nach HTML, Info und PDF +enthält. @command{lilypond-book} erzeugt die entsprechenden Grafiken +der Musikbeispiele im EPS- und PDF-Format für die Ausgabe nach PDF +und im PNG-Format für die Ausgabe nach HTML und Info. + +Hier sollen zwei einfache Beispiele gezeigt werden. Eine @code{lilypond} Umgebung + +@example +@@lilypond[fragment] +c' d' e' f' g'2 g' +@@end lilypond +@end example + +@noindent +erzeugt + +@lilypond[fragment] +c' d' e' f' g'2 g' +@end lilypond + +Die Kurzversion + +@example +@@lilypond[fragment,staffsize=11]@{@} +@end example + +@noindent +erzeugt + +@lilypond[fragment,staffsize=11]{} + +Im Gegensatz zu @LaTeX{} erzeugt @code{@@lilypond@{...@}} allerdings keine Grafik +im Fließtext, sondern setzt sie immer in einen eigenen Absatz. + + +@node HTML +@subsection HTML +@translationof HTML + +Musik wird eingegeben als + +@example + +\key c \minor c4 es g2 + +@end example + +@noindent +@command{lilypond-book} erzeugt dann daraus eine HTML-Datei mit den entsprechenden +@code{} Tags für die Musikbeispiele in jeweils einem eigenen Absatz. + +@lilypond[fragment,relative=2] +\key c \minor c4 es g2 +@end lilypond + +Für Grafiken im Fließtext kann @code{} benutzt werden, wobei +die Optionen durch einen Doppelpunkt von der Musik getrennt angegeben werden. + +@example +Musik in derselben Zeile. +@end example + +Um Dateien mit Musik einzubinden, kann folgendermaßen vorgegangen werden: + +@example +@var{Dateiname} +@end example + +Zusätzlich gibt @code{} die aktuelle Versionsnummer +von LilyPond aus. + + +@node DocBook +@subsection DocBook +@translationof DocBook + + +Bei der Einbindung von Musik im LilyPond-Format in DocBook soll die +Konformität unseres DocBook Dokuments erhalten bleiben und damit +die Bearbeiten mit DocBook-Editoren sowie die Validierung weiter +möglich bleiben. Aus diesem Grund werden in DocBook keine eigenen Tags +wie in HTML benutzt, sondern die von den vorhandenen DocBook-Elementen +vorgegebenen Konventionen entsprechend benützt. + +@subheading Definitionen + +Für die Einbindung von LilyPond Code werden in allen Fällen die +@code{mediaobject} und @code{inlinemediaobject} Elemente benutzt, +die unsere Beispiele in einem eigenen Absatz oder im Fließtext +einfügen. Die Optionen zur Formatierung mit LilyPond werden dabei +in der @code{role} Eigenschaft des innersten Elements angegeben, +wie im nächsten Abschnitt gezeigt wird. Die DocBook Datei, die +dann von @command{lilypond-book} verarbeitet wird, sollte der Klarheit +halber die Dateierweiterung @file{.lyxml} (jedenfalls nicht +@file{.xml}) besitzen. + +@subheading Eine LilyPond-Datei einfügen + +Dies ist der einfachste Fall: Die LilyPond-Datei besitzt die Erweiterung +@file{.ly} und wird einfach als @code{imageobject} eingebettet: + +@example + + + + + +@end example + +Für das äußerste Element kann je nach Bedarf @code{mediaobject} oder +@code{inlinemediaobject} benutzt werden. + +@subheading LilyPond-Code einfügen + +Die Einbindung von LilyPond-Code direkt in der DocBook-Datei ist +durch die Benutzung von @code{programlisting} möglich, +wobei die Sprache auf @code{lilypond} gesetzt wird: + +@example + + + +\context Staff \with @{ + \remove Time_signature_engraver + \remove Clef_engraver@} + @{ c4( fis) @} + + + +@end example + +Das äußerste Element ist also @code{mediaobject} oder +@code{inlinemediaobject}, welches ein @code{textobject} mit dem +@code{programlisting} enthält. + +@subheading Ein DocBook-Dokument übersetzen + +Der Aufruf von @command{lilypond-book} mit der @file{.lyxml}-Datei +erzeugt ein gültiges DocBook-Dokument mit der Erweiterung @file{.xml}, +welches normal weiterverarbeitet werden kann. Bei Benutzung von +@uref{http://@/dblatex@/.sourceforge@/.net@/,dblatex} wird daraus +automatisch eine PDF-Datei erzeugt. Für die Erzeugung von HTML (HTML +Hilfe, JavaHelp, etc.) können die offiziellen DocBook XSL-Stylesheets +benutzt werden. Eventuell müssen dafür allerdings kleinere Anpassungen +vorgenommen werden. + + +@node Die Musikfragment-Optionen +@section Die Musikfragment-Optionen +@translationof Music fragment options + +Im Folgenden meint @q{LilyPond-Kommando} ein beliebiges in den vorgehenden +Abschnitten beschriebenes Kommando, welches ein LilyPond-Fragment in eine Datei +einfügt und von @command{lilypond-book} verarbeitet wird. Der Einfachheit +halber werden hier alle LilyPond-Kommandos in der Syntax von @LaTeX{} +dargestellt. + +Zu beachten ist, dass die Optionen eines LilyPond-Kommandos von links +nach rechts verarbeitet werden. Wenn eine Option also mehrfach angegeben +wird, wird nur die letzte benutzt. + +Die folgenden Optionen können für LilyPond-Kommandos benutzt werden: + +@table @code +@item staffsize=@var{ht} +Setzt die Höhe einer Notenzeile auf @var{ht}, angegeben in Punkten. + +@item ragged-right +Erzeugt Notenzeilen im Flattersatz mit natürlichem Abstand der Noten. In +anderen Worten: @code{ragged-right = ##t} wird in das Musikfragment +eingefügt. Dies ist die Standardeinstellung für das @code{\lilypond@{@}} +Kommando, wenn die Option @code{line-width} nicht angegeben wird. +Ebenso ist dies die Standardeinstellung für die @code{lilypond}-Umgebung, +wenn die Option @code{fragment}, aber keine Zeilenlänge +explizit angegeben ist. + +@item noragged-right +Streckt Musikfragmente mit nur einer Notenzeile auf die volle Breite, +es wird also @code{ragged-right = ##f} in das Musikfragment eingefügt. + +@item line-width +@itemx line-width=@var{Breite}\@var{Einheit} +Setzt die Breite der Notenzeilen auf @var{Breite}, gemessen in Vielfachen +der @var{Einheit}. Als Einheit können die folgenden Zeichenfolgen angegeben +werden: @code{cm}, @code{mm}, @code{in} oder @code{pt}. Diese Option hat +nur Einfluss auf die Breite von Notenzeilen und Text im Musikfragment, nicht +jedoch auf den restlichen Text des Dokuments. + +Wird diese Option ohne einen Wert angegeben, wird die Zeilenbreite auf +einen Standardwert gesetzt, der durch einen heuristischen Algorithmus +bestimmt wird. + +Wenn die @code{line-width} Option nicht angegeben wird, versucht +@command{lilypond-book} einen geeigneten Standardwert für alle +@code{lilypond}-Umgebungen zu finden, die die @code{ragged-right} Option +nicht benutzen. + +@item notime +Verhindert die Ausgabe der Taktangabe am Anfang des Fragments und schaltet +Taktstriche und alle Taktangaben im Fragment ab. + +@item fragment +Bewirkt, dass @command{lilypond-book} Standardcode um das Fragment herum einfügt, sodass z. B. + +@example +c'4 +@end example + +@noindent +ohne @code{\layout}, @code{\score}, etc. eingegeben werden kann. + +@item nofragment +Verhindert das Einfügen von Standardcode um das Fragment herum. Dies ist +die Standardeinstellung, insofern ist diese Option im Normalfall unnötig. + +@item indent=@var{Einzug}\@var{Einheit} +Setzt den Einzug des ersten Notensystems auf @var{Einzug}, gemessen in +Vielfachen der @var{Einheit}. Als Einheit können die folgenden Zeichenfolgen +angegeben werden: @code{cm}, @code{mm}, @code{in} oder @code{pt}. Diese +Option hat nur Einfluss auf den Einzug von Notenzeilen und Text im +Musikfragment, nicht jedoch auf den restlichen Text des Dokuments. + +@item noindent +Setzt den Einzug des ersten Notensystems auf 0. Diese +Option hat nur Einfluss auf den Einzug von Notenzeilen und Text im +Musikfragment, nicht jedoch auf den restlichen Text des Dokuments. Dies +ist die Standardeinstellung, insofern ist diese Option im Normalfall +unnötig. + +@item quote +Verringert die Zeilenlänge des Musikfragments um @math{2*0.4}@dmn{in} +und setzt das Fragment in einen Zitat-Block. Der Wert von @q{0.4@dmn{in}} +kann durch die @code{exampleindent} Option angepasst werden. + +@item exampleindent +Setzt den Betrag, um den das Fragment bei Benutzung der @code{quote} +Option eingerückt wird. + +@item relative +@itemx relative=@var{n} +Benutzt relative Oktavenbezeichnungen. Standardmäßig werden Noten relativ +zum mittleren C angegeben. Das optionale ganzzahlige Argument +gibt die Oktave der ersten Note an, wobei die Standardeinstellung von +@code{1} das mittlere C bedeutet. Die @code{relative} Option macht nur +Sinn in Verbindung mit der @code{fragment} Option, weshalb @code{fragment} +automatisch durch die Angabe der @code{relative} Option impliziert wird. +Eine explizite Angabe der @code{(no)fragment} Option hat keinen Effekt. +@end table + +LilyPond benutzt zur Erzeugung seiner eigenen Dokumentation ebenfalls +@command{lilypond-book}. Zu diesem Zweck stehen noch zahlreiche +spezialisierte Optionen zur Verfügung: + +@table @code +@item verbatim +Der LilyPond-Code im LilyPond-Kommando wird zum einen benutzt, um das +Musikfragment in eine Grafik mit schönem Notensatz zu konvertieren, +andererseits aber auch wörtlich in das Dokument eingefügt. Dies +geschieht in einem @q{verbatim}-Block, gefolgt vom Text einer +möglicherweise angegebenen @code{intertext} Option@footnote{Die +@code{intertext} Option ist noch nicht implementiert.} und der +Grafik des tatsächlichen Notensatzes. Diese Option funktioniert nur +fehlerhaft, wenn @code{\lilypond@{@}} im Fließtext benutzt wird. + +Wird @code{verbatim} in Verbindung mit einem @code{lilypondfile}-Kommando +benutzt, so ist es auch möglich, nur ein Teil der Datei wörtlich einfügen +zu lassen: Wenn die eingebundene LilyPond-Datei ein Kommentar mit dem Inhalt +@samp{begin verbatim} (ohne Anführungszeichen) enthält, wird nur der +Dateiinhalt ab dieser Position eingefügt. Enthält die Datei mehrere +solche Kommentare, wirkt nur das letzte. Analog wird nur der Dateiinhalt +bis zu einem etwaigen Kommentar mit dem Inhalt @samp{end verbatim} +eingefügt. Im folgenden Beispiel wird das gesamte Musik für die +Erzeugung der Grafik im relativen Oktavenmodus interpretiert, der +wörtlich in das Dokument kopierte LilyPond-Code zeigt den @code{relative}-Befehl jedoch nicht. + +@example +\relative c' @{ % begin verbatim + c4 e2 g4 + f2 e % end verbatim +@} +@end example + +@noindent +erzeugt ein Zitat der Form + +@example + c4 e2 g4 + f2 e +@end example + +@noindent +Wenn Kommentare und Variablen im Zitat, aber nicht im Quelltext +übersetzt werden sollen, kann die Umgebungsvariable @code{LYDOC_LOCALEDIR} +auf einen Verzeichnispfad gesetzt werden. Das Verzeichnis sollte +einen Baum an @file{.mo}-Nachrichtenkatalogen beinhalten mit +@code{lilypond-doc} als Domain. + +@item addversion +(Nur innerhalb von Texinfo-Dateien.) Stellt @code{\version +@@w@{"@@version@{@}"@}} an den Beginn des Fragments der Ausgabe mit +@code{verbatim}. + +@item texidoc +(Nur innerhalb von Texinfo-Dateien.) Wird @command{lilypond} mit der +Kommandozeilenoption @option{--header=@/texidoc} für eine Datei +@file{foo@/.ly} und enthält die Datei ein @code{texidoc}-Feld im +@code{\header}-Block, so wird dessen Inhalt in die Datei +@file{foo@/.texidoc} ausgegeben. Die @code{texidoc} Option veranlasst +@code{lilypond-book}, den Inhalt dieser @file{.texidoc} Dateien innerhalb +eines Dokumentationsblocks direkt vor dem Musikfragment in das aktuelle +Dokument einzufügen. + +Enthält also die Datei @file{foo@/.ly} etwa den LilyPond-Code + +@example +\header @{ + texidoc = "Dieses Beispiel zeigt eine einzelne Note." +@} +@{ c'4 @} +@end example + +@noindent +und das Texinfo-Dokument @file{text.texinfo} + +@example +@@lilypondfile[texidoc]@{foo.ly@} +@end example + +@noindent +so liefert der folgende Aufruf von @code{lilypond-book} das gewünschte +Ergebnis: + +@example +lilypond-book --pdf --process="lilypond \ + -dbackend=eps --header=texidoc" test.texinfo +@end example + +Die meisten Test-Dateien (im @file{input/} Verzeichnis von LilyPond) +sind kleine @file{.ly} Dateien von genau dieser Form. + +Auch die Übersetzung dieser zusätzlichen Kommentare ist möglich: +Dazu muss das Texinfo-Dokument den Befehl @code{@@documentlanguage @var{LANG}} +und der @code{\header} Block in der Datei @file{foo@/.ly} +die Übersetzung im Feld @code{texidoc@var{LANG}} enthalten. Wird nun +@command{lilypond} mit der Option @option{--header=@/texidoc@var{LANG}} +aufgerufen, so wird der Inhalt der Datei @file{foo@/.texidoc@var{LANG}} anstelle von @file{foo@/.texidoc} eingefügt. + +@item lilyquote +(Nur innerhalb von Texinfo-Dateien.) Diese Option wirkt wie die @code{quote} Option, außer dass nur das Musikfragment (und natürlich optional der +gesamte LilyPond-Code bei Benutzung von @code{verbatim}) in den Zitatblock eingefügt wird. Dies ist nützlich, wenn Sie ein Musikfragment zitieren möchten, nicht aber dessen @code{texidoc} Dokumentationsblock. + +@item doctitle +(Nur innerhalb von Texinfo-Dateien.) Diese Option wirkt ähnlich wie die +@code{texidoc} Option: Wenn @command{lilypond} mit der Option +@option{--header=@/doctitle} aufgerufen wird und die Eingabedatei +@file{foo@/.ly} ein Feld @code{doctitle} im @code{\header}-Block enthält, +wird dessen Wert in die Datei @file{foo@/.doctitle} geschrieben. Wird die +@code{doctitle} Option für ein Musikfragment benutzt, so wird der Inhalt +dieser Datei, der eine einzelne Textzeile sein sollte, im Texinfo-Dokument +als @code{@@lydoctitle @var{Text}} eingefügt. @code{@@lydoctitle} muss +allerdings in Ihrem Texinfo-Dokument als Makro selbst definiert werden. +Die Übersetzung funktioniert völlig analog zu @code{texidoc}. + +@item nogettext +Nur für Texinfo-Ausgabe: Kommentare und Variablenbezeichnungen im +zitierten Quelltext des Schnipsel werden nicht übersetzt. + +@item printfilename +Wenn eine LilyPond-Datei mittels @code{\lilypondfile} und dieser Option +eingebunden wird, wird der Dateiname (ohne die Pfadangabe) unmittelbar vor +dem Musikfragment ausgegeben. In HTML-Dateien ist er außerdem ein Link +auf die LilyPond-Datei. + +@end table + + +@node lilypond-book aufrufen +@section @command{lilypond-book} aufrufen +@translationof Invoking lilypond-book + +@command{lilypond-book} erzeugt abhängig vom Ausgabeformat eine Datei mit +einer der folgenden Dateierweiterungen: @file{.tex}, @file{.texi}, +@file{.html} oder @file{.xml}. Alle @file{.tex}, @file{.texi} und +@file{.xml} Dateien müssen noch mit den entsprechenden Programmen (@LaTeX{}, +DocBook, etc.) weiter verarbeitet werden, um druckfähige Dateien zu erhalten. + + +@subheading Formatabhängige Anweisungen + +@subsubheading @LaTeX{} + +Es existieren zwei Methoden, Ihr @LaTeX{}-Dokument weiter zu verarbeiten, +um zu einer druck- oder publikationsfähigen Datei zu gelangen: +Zum einen die direkte Erzeugung einer PDF-Datei mit PDF@LaTeX{}, zum +anderen die Erzeugung einer DVI daraus einer PostScript-Datei mittels +@LaTeX{} und einem DVI-nach-PostScript Konverters wie @command{dvips}. +Die erste Methode ist einfacher und daher empfehlenswert.@footnote{Manchmal +kann eine Datei entweder von PDF@LaTeX{} oder von @LaTeX{} nicht korrekt +verarbeitet werden, weshalb hier beide Methoden beschrieben werden.} Welche +Methode auch immer benutzt wird, die Konvertierung zwischen PostScript und +PDF kann leicht mit Hilfsprogrammen wie @command{ps2pdf} und @command{pdf2ps} +(aus dem Ghostscript Paket) erfolgen. + +Um eine PDF-Datei mittels PDF@LaTeX{} zu erzeugen, kann folgendermaßen +vorgegangen werden: + +@example +lilypond-book --pdf Ihre_Datei.pdftex +pdflatex Ihre_Datei.tex +@end example + +@cindex Konturschriften +@cindex Type1 Schriften +@cindex dvips +@cindex Aufruf von dvips +Um eine PDF-Datei mittels @LaTeX{}/@command{dvips}/@command{ps2pdf} zu +erhalten, sind folgende Befehle nötig: + +@example +lilypond-book Ihre_Datei.lytex +latex Ihre_Datei.tex +dvips -Ppdf Ihre_Datei.dvi +ps2pdf Ihre_Datei.ps +@end example + +@noindent +Die @file{.dvi}-Datei, die beim Aufruf von @command{latex} erzeugt wird, +scheint keine Notenköpfe zu enthalten, was in Ordnung ist. Wenn Sie die +Datei wie beschrieben weiter verarbeiten, erscheinen die Notenköpfe korrekt +in den @file{.ps} und @file{.pdf} Dateien. + +Der Aufruf von @command{dvips} kann einige Warnungen über fehlende +Schriftarten ausgeben. Auch dies ist in Ordnung und kann ignoriert werden. + +Wenn Sie in der @LaTeX{}-Datei das Papierformat auf Querformat eingestellt +haben, vergessen Sie nicht auf die @code{-t landscape} Option beim +Aufruf von @command{dvips}. + + +@subsubheading Texinfo + +Um ein von @command{lilypond-book} erzeugtes Texinfo-Dokument zu +verarbeiten, gehen Sie wie für alle anderen Texinfo-Dokumente vor: +Rufen Sie -- abhängig vom gewünschten Ausgabeformat -- eines der Programme +@command{texi2pdf}, @command{texi2dvi}, @command{makeinfo} oder +@command{texi2html} auf. + +@ifinfo +@xref{Format with texi2dvi, , , texinfo, GNU Texinfo}, und @ref{Creating an Info File, , , texinfo, GNU Texinfo}. +@end ifinfo +@ifnotinfo +Die Dokumentation von Texinfo liefert dazu nähere Informationen. +@end ifnotinfo + + +@subheading Optionen auf der Kommandozeile + +@command{lilypond-book} unterstützt die folgenden Kommandozeilenoptionen: + +@table @code +@item -f @var{Format} +@itemx --format=@var{Format} +Gibt das Format des Eingabedokuments an: @code{html}, @code{latex}, +@code{texi} (Standardeinstellung), @code{texi-html} oder @code{docbook}. +Ist diese Option nicht angegeben, versucht @command{lilypond-book} das +Format anhand des Dateinamens zu bestimmen. Im Moment bedeutet @code{texi} +praktisch dasselbe wie @code{texi-html}. + +@c This complicated detail is not implemented, comment it out -jm +@ignore +The @code{texi} document type produces a Texinfo file with music +fragments in the printed output only. For getting images in the HTML +version, the format @code{texi-html} must be used instead. +@end ignore + +@item -F @var{Filter} +@itemx --filter=@var{Filter} +Leitet die Musikfragmente durch das Programm @var{filter} anstatt sie +mit Lilypond zu einer Grafik zu verarbeiten. @option{--filter} und +@option{--process} kann nicht gleichzeigt benutzt werden. Beispielaufruf: + +@example +lilypond-book --filter='convert-ly --from=2.0.0 -' Mein-Buch.tely +@end example + +@item -h +@itemx --help +Gibt eine kurze Hilfemeldung aus. + +@item -I @var{Pfad} +@itemx --include=@var{Pfad} +Fügt @var{Pfad} zu den Include-Pfaden hinzu. @command{lilypond-book} sucht +auch in allen Include-Pfaden nach bereits erstellten Grafiken für die +Musikfragmente. Wird das aktuelle Fragment gefunden und hat sich seit der +letzten Erstellung nicht geändert, wird es nicht erneut erzeugt. Bei manchen +der Programme zur Weiterverarbeitung wie etwa @command{makeinfo} oder +@command{latex} muss dieselbe @code{-I @var{Pfad}} Option angegeben werden, +damit das entsprechende Programm die Grafiken ebenso findet. + +@item -o @var{Verzeichnis} +@itemx --output=@var{Verzeichnis} +Erzeugt die Ausgabedateien in @var{Verzeichnis}. Der Aufruf von +@command{lilypond-book} erzeugt zahlreiche kleine Dateien, die von +LilyPond, @command{latex}, @command{makeinfo} etc. dann weiter benützt +werden. Um zu vermeiden, dass das Quellenverzeichnis durch diese +Dateien unübersichtlich wird, kann die @option{--output} Option benutzt +werden. Vor dem Aufruf von @command{latex} oder @command{makeinfo} +sollten Sie in dieses Verzeichnis wechseln. + +@example +lilypond-book --output=out IhreDatei.lytex +cd out +... +@end example + +@itemx --skip-lily-check +Nicht mit einer Fehlermeldung abbrechen, wenn keine Ausgabe von LilyPond +gefunden wird. Dies wird benutzt für Dokumentation ohne Grafiken. + +@itemx --skip-png-check +Nicht mit einer Fehlermeldung abbrechen, wenn für die EPS-Dateien keine +PNG-Grafiken gefunden werden. Dies wird benutzt für Dokumentation ohne +Grafiken. + +@itemx --lily-output-dir=@var{Verzeichnis} +Schreibt @file{lily-XXX} Dateien nach @var{Verzeichnis} und erzeugt +im mit @code{--output} angegebenen Verzeichnis Verknüpfungen darauf. +Diese Option ist nützlich, um Zeit zu sparen, wenn Dokumente in +verschiedenen Verzeichnissen viele identische Musikfragmente +enthalten. + +@itemx --info-images-dir=@var{Verzeichnis} +Formatiert die Texinfo-Ausgabe dergestalt, dass Info in @var{Verzeichnis} +nach den Grafiken zu den Musikfragmenten sucht. + +@itemx --latex-program=@var{Programm} +Führt @command{Programm} anstelle von @command{latex} aus. Dies ist +nützlichen, wenn das Dokument mit einer anderen @LaTeX{}-Variante +wie etwa @command{xelatex} verarbeitet werden soll. + +@itemx --left-padding=@var{Einrückung} +Fügt @var{Einrückung} als zusätzlichen Einzug in die EPS-Box ein. +@var{Einrückung} wird in Millimetern angegeben, die Standardeinstellung +is 3.0 Millimeter. Diese Option kann benutzt werden, wenn die Notenzeilen +über den Rand des Dokuments hinausstehen. + +Die Breite eines eng ausgeschnittenen Notensystems kann variieren +aufgrund von Notationselementen, die über den linken Rand hinausstehen, +wie etwa Taktzahlen und Bezeichnungen der Instrumente. Diese Option +verkürzt die Notenzeile und verschiebt sie um denselben Betrag nach +rechts. + + +@item -P @var{Kommando} +@itemx --process=@var{Kommando} +Verarbeitet LilyPond-Fragmente mit @var{Kommando} anstelle des +Standardbefehls @code{lilypond}. @code{--filter} und @code{--process} +können nicht gleichzeitig angegeben werden. + +@item --pdf +Erzeugt PDF-Dateien mit PDF@LaTeX{}. + +@item -V +@itemx --verbose +Gibt ausführliche informative Meldungen aus. + +@item -v +@itemx --version +Gibt die Versionsnummer aus. +@end table + +@knownissues + +Der Texinfo-Befehl @code{@@pagesizes} wird ignoriert. Ebenso werden +@LaTeX{}-Befehle ignoriert, die den Seitenrand oder die Zeilenlänge +nach der Dokumentpräambel verändern. + +Nur der erste @code{\score}-Block eines LilyPond-Fragments wird verarbeitet. + + +@node Dateiendungen +@section Dateiendungen +@translationof Filename extensions + +Für die Eingabedatei kann zwar jede beliebige Dateinamenserweiterung benutzt +werden, allerdings muss bei Verwendung einer nicht bekannten Erweiterung +das Ausgabeformat explizit an @command{lilypond-book} angegeben werden. +Details dazu finden sich im Abschnitt @ref{lilypond-book aufrufen}. +Wird eine bekannte Erweiterung benutzt, wählt @command{lilypond-book} +automatisch das richtige Ausgabeformat basierend auf der Erweiterung der +Eingabedatei: + +@quotation +@multitable @columnfractions .2 .5 +@item @strong{Erweiterung} @tab @strong{Ausgabeformat} +@item +@item @file{.html} @tab HTML +@item @file{.itely} @tab Texinfo +@item @file{.latex} @tab @LaTeX{} +@item @file{.lytex} @tab @LaTeX{} +@item @file{.lyxml} @tab DocBook +@item @file{.tely} @tab Texinfo +@item @file{.tex} @tab @LaTeX{} +@item @file{.texi} @tab Texinfo +@item @file{.texinfo} @tab Texinfo +@item @file{.xml} @tab HTML +@end multitable +@end quotation + +Wird dieselbe Erweiterung für die Eingabedatei wie für die Ausgabedatei +benutzt und befindet sich die Eingabedatei im aktuellen Arbeitsverzeichnis +von @command{lilypond-book}, muss die @code{--output} Option für +@command{lilypond-book} benutzt werden. Anderenfalls würde +@command{lilypond-book} ja die Eingabedatei überschreiben, weshalb das +Programm in diesem Fall mit einer Fehlermeldung wie @qq{Fehler: Ausgabe +würde Eingabedatei überschreiben; verwenden Sie --output.} abbricht. + + +@node Alternative Methoden, Text und Musik zu kombinieren +@section Alternative Methoden, Text mit Musik zu kombinieren +@translationof Alternate methods of mixing text and music + +Dieser Abschnitt stellt Methoden vor, wie Text und Musik auf andere +Weise kombiniert werden können als dies durch @command{lilypond-book} +automatisiert geschieht. + + +@menu +* Viele Zitate aus einer langen Partitur:: +* LilyPond-Noten in OpenOffice.org integrieren:: +* LilyPond-Noten in andere Programme integrieren:: +@end menu + +@node Viele Zitate aus einer langen Partitur +@subsection Viele Zitate aus einer langen Partitur +@translationof Many quotes from a large score + +Wenn aus einer großen Partitur viele kleine Fragmente eingefügt +werden sollen, kann dazu das @q{clip systems} Feature benutzt werden. +Siehe @ruser{Notationsfragmente extrahieren}. + + +@node LilyPond-Noten in OpenOffice.org integrieren +@subsection LilyPond-Noten in OpenOffice.org integrieren +@translationof Inserting LilyPond output into OpenOffice.org + +Musik im LilyPond-Format kann in OpenOffice.org eingefügt werden mittels +@uref{http://@/ooolilypond@/.sourceforge@/.net@/,OOoLilyPond}. + + +@node LilyPond-Noten in andere Programme integrieren +@subsection LilyPond-Noten in andere Programme integrieren +@translationof Inserting LilyPond output into other programs + +Im die Ausgabe von LilyPond in anderen Programmen einzufügen, +sollte @code{lilypond} benutzt werden. Jedes Beispiel muss +getrennt manuell erzeugt und ins Dokument eingefügt werden; +für letzteres schlagen Sie bitte im Handbuch Ihrer +Textverarbeitungs-Software nach. Die meisten Programme +unterstützen das Einfügen von Grafiken im @file{PNG}-, @file{EPS}- +oder @file{PDF}-Format. + +Um den leeren Rand um die Notenzeilen zu verringern, können folgende +Einstellungen benutzt werden: + +@example +\paper@{ + indent=0\mm + line-width=120\mm + oddFooterMarkup=##f + oddHeaderMarkup=##f + bookTitleMarkup = ##f + scoreTitleMarkup = ##f +@} + +@{ c1 @} +@end example + +Eine @file{EPS}-Datei kann mit folgendem Befehl erzeugt werden: + +@example +lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts Dateiname.ly +@end example + +@noindent +eine @file{PNG}-Datei mittels: + +@example +lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts --png Dateiname.ly +@end example + + diff --git a/Documentation/de/application/running.itely b/Documentation/de/application/running.itely new file mode 100644 index 0000000000..4f9c5d23ac --- /dev/null +++ b/Documentation/de/application/running.itely @@ -0,0 +1,733 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- + +@ignore + Translation of GIT committish: 5cf864d550e7148412d594cf336841791bff6f76 + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + +@c Translators: Reinhold Kainhofer, Till Rettig + +@node LilyPond starten +@chapter LilyPond starten +@translationof Running LilyPond + +Dieses Kapitel behandelt die technischen Details, wie Lilypond ausgeführt werden kann. + + +@menu +* Übliche Programmbenutzung:: +* Benutzung auf der Kommandozeile:: +* Fehlermeldungen:: +* Dateien mit convert-ly aktualisieren:: +* Fehler melden:: +@end menu + +@node Übliche Programmbenutzung +@section Übliche Programmbenutzung +@translationof Normal usage + +Die meisten Benutzer führen LilyPond von einer graphischen Benutzeroberfläche +aus. Siehe @rlearning{Erste Schritte}, falls Sie dies nicht bereits getan haben. + + +@node Benutzung auf der Kommandozeile +@section Benutzung auf der Kommandozeile +@translationof Command-line usage + +Dieser Abschnitt enthält zusätzliche Informationen, wie Sie LilyPond +von der Kommandozeile ausführen können. Dies kann erforderlich sein, +um etwa zusätzliche Optionen an das Programm zu übergeben. Außerdem +sind einige Zusatzprogramme (wie etwa @code{midi2ly}) nur von der +Kommandozeile verfügbar. + +Unter @q{Kommandozeile} verstehen wir die Kommandozeile des jeweiligen +Betriebssystems. Windows Benutzern ist sie vielleicht eher unter den +englischen Begriffen @q{DOS shell} oder @q{command shell} bekannt. +MacOS@tie{}X Benutzer kennen sie eher unter @q{Terminal} oder @q{Konsole}. +Sie sollten auch den Abschnitt @ref{Einrichtung für MacOS X} konsultieren. + +Wie die Kommandozeile im jeweiligen Betriebssystem benutzt werden kann, +soll in diesem Handbuch nicht näher beschrieben werden. Sehen Sie bitte +im Handbuch Ihres Betriebssystems nach oder informieren Sie sich im +Internet, wenn Sie mit der Kommandozeile nicht vertraut sind. + + +@menu +* lilypond aufrufen:: +* Optionen von lilypond auf der Kommandozeile:: +* Umgebungsvariablen:: +@end menu + +@node lilypond aufrufen +@subsection @command{lilypond} aufrufen +@translationof Invoking lilypond + +@cindex @command{lilypond} aufrufen +@cindex Kommandozeilen-Optionen für @command{lilypond} +@cindex Optionen an der Kommandozeile + +Das @command{lilypond} Programm kann folgendermaßen von der Kommandozeile +aufgerufen werden. + +@example +lilypond [@var{Option}]@dots{} @var{Dateiname}@dots{} +@end example + + +Wird ein @file{Dateiname} ohne Erweiterung angegeben, so wird @file{.ly} als +Standarderweiterung für LilyPond-Dateien benutzt. Um Daten von +@code{stdin} einzulesen, benutzen Sie einfach einen Bindestrich (@code{-}) +als @var{Dateiname}. + +Wenn Lilypond die Datei @file{Dateiname.ly} verarbeitet, werden daraus +die Dateien @file{Dateiname.ps} und @file{Dateiname.pdf} erzeugt. +Es können an @code{lilypond} auch mehrere @file{.ly} Dateien übergeben +werden, die dann einzeln und voneinander unabhängig abgearbeitet +werden.@footnote{Der Zustand von GUILE wird allerdings nicht nach +jeder Datei zurückgesetzt, sodass Achtung geboten ist, wenn in einer +Datei globale Änderungen von Scheme aus durchgeführt werden.} + +Falls @file{Dateiname.ly} mehr als einen @code{\score}-Block enthält, +werden die weiteren Stücke in durchnummerierte Dateien der Form +@file{Dateiname-1.pdf} ausgegeben. Zusätzlich wird der Wert der +Variable @code{output-suffix} zwischen den ursprünglichen Dateienamen +und der Zahl eingefügt. Eine Lilypond-Datei @var{Dateiname.ly} mit dem Inhalt + +@example +#(define output-suffix "Geige") +\score @{ @dots{} @} +#(define output-suffix "Cello") +\score @{ @dots{} @} +@end example + +@noindent +erzeugt daher die Dateien @var{Dateiname}@file{-Geige.pdf} und +@var{Dateiname}@file{-Cello-1.pdf}. + + + +@node Optionen von lilypond auf der Kommandozeile +@subsection Optionen auf der Kommandozeile für @command{lilypond} +@translationof Command line options for lilypond + +Die folgenden Kommandozeilenoptionen werden von @command{lilypond} unterstützt: + +@table @code + +@item -e,--evaluate=@var{expr} +Wertet den Scheme-Ausdruck @var{expr} aus, bevor die @file{.ly} Dateien +gelesen und interpretiert werden. +Die @code{-e} Option kann auch mehrfach angegeben werden, die Ausdrücke +werden nacheinander ausgewertet. + +Da der Ausdruck im @code{guile-user} Modul ausgewertet wird, ist bei der +Definitionen innerhalb von @var{expr} folgendes Vorgehen nötig. An der +Kommandozeile wird z.B. @code{a} im @code{guile-user} Modul definiert: + +@example +lilypond -e '(define-public a 42)' +@end example + +@noindent +Am Beginn der @file{.ly}-Datei muss dann das @code{guile-user} Modul noch geladen werden, bevor die Definition von @var{a} verfügbar ist: + +@example +#(use-modules (guile-user)) +@end example + + +@item -f,--format=@var{Format} +Bestimmt das Ausgabeformat. Mögliche Werte von @var{Format} sind +@code{svg}, @code{ps}, @code{pdf} und @code{png}. + +Beispiel: @code{lilypond -fpng @var{Dateiname}.ly} + + + +@item -d,--define-default=@var{Variable}=@var{Wert} +Damit wird die interne Programmoption @var{Variable} auf den Scheme-Wert +@var{Wert} gesetzt. Wird kein @var{Wert} angegeben, so wird @var{#t} benutzt. +Um eine Option auszuschalten, kann der Präfix @code{no-} dem Namen +@var{Variable} der Variable vorangestellt werden. So ist etwa + +@cindex Point and Click, Kommandozeile + +@example +-dno-point-and-click +@end example + +@noindent +dasselbe wie +@example +-dpoint-and-click='#f' +@end example + +Hier sind ein paar interessante Optionen: + +@table @samp +@item help +Die Ausführung von @code{lilypond -dhelp} zeigt alle verfügbaren @code{-d} +Optionen. + +@item paper-size +Setzt das Standard-Papierformat, +@example +-dpaper-size=\"letter\" +@end example + +@noindent +Die Zeichenkette, die das Format angibt, muss in Anführungszeichen mit Backslash +( @code{\"} ) stehen. + + +@item safe +Vertraut der @code{.ly} Datei nicht. + +Wenn LilyPond über einen Webserver verfügbar gemacht wird, @b{MUSS} unbedingt +eine die Optionen @code{--safe} oder @code{--jail} angegeben werden. +Die @code{--safe} Option verhindert, dass in der .ly-Datei angegebener +Scheme-Code das System gefährden kann, wie etwa in folgendem Beispiel: + +@quotation +@verbatim +#(system "rm -rf /") +{ + c4^#(ly:export (ly:gulp-file "/etc/passwd")) +} +@end verbatim +@end quotation + +Mit der @code{-dsafe} Option werden alle Scheme-Ausdrücke einem speziellen +sicheren Modus ausgewertet. Dieser Modus ist vom GUILE @file{safe-r5rs} Modul +abgeleitet und fügt noch zahlreiche weitere erlaubte Funktionen der +LilyPond Programm-Schnittstelle hinzu. Diese Funktionen sind in +@file{scm/@/safe@/-lily@/.scm} angegeben. + +Zusätzliche verbietet der sichere Modus auch @code{\include} Befehle. + +Im sicheren Modus ist es nicht möglich, LilyPond-Variablen nach Scheme +zu exportieren. + +@code{-dsafe} erkennt jedoch @emph{KEINE} Überbeanspruchung der verfügbaren +Ressourcen. In diesem Modus ist es also trotzdem möglich, dass LilyPond in einer +Endlosschleife hängt, z.B. wenn zyklische Datenstrukturen an das Backend +übergeben werden. Wenn LilyPond also auf einem öffentlich zugänglichen +Webserver verfügbar gemacht wird, sollte der Prozess sowohl in der CPU- +als auch in der Speichernutzung limitiert werden. + +Der sichere Modus verhindert auch, dass zahlreiche nützliche +Musikfragmente von LilyPond verarbeitet werden. Die @code{--jail} Option ist +eine sicherere Alternative, benötigt allerdings auch mehr Aufwand zur +Einrichtung. + +@item backend +Gibt an, welches Ausgabeformat das LilyPond Backend benutzt. Mögliche Werte +für diese Option sind: + +@table @code +@item ps +PostScript-Ausgabeformat. + +@cindex PostScript Ausgabeformat + +Postscript-Dateien enthalten auch TTF-, Type1- und OTF-Schriften. Allerdings +wird die gesamte Schriftart eingefügt und nicht nur die benötigten Zeichen. +Vor allem wenn nicht-westliche Zeichensätze benutzt werden, kann dies zu sehr +großen Dateien führen. + +@item eps +Erzeugt @q{encapsulated PostScript} (EPS). Jede Seite (oder jedes System) wird +als eigene @file{EPS}-Datei ausgegeben, inklusive Schriftarten. Außerdem wird +eine Datei mit allen Seiten (bzw. Systemen) und Schriftarten erzeugt. + +Dies ist die Standardeinstellung von @command{lilypond-book}. + +@item svg +SVG-Ausgabe (Scalable Vector Graphics). Jede Seite wird als eigene +@file{SVG}-Datei ausgegeben, inklusive eingebetteten Schriftarten. +@cindex SVG (Scalable Vector Graphics) +Sie benötigen einen SVG-Betrachter, der eingebettete Schriftarten unterstützt, +oder einen SVG-Betrachter, der eingebettete Schriftarten durch OTF-Schriften +ersetzen kann. In UNIX und Linux kann z.B. @uref{http://www.inkscape.org,Inkscape} +(ab Version 0.42) benutzt werden, nachdem die OTF-Schriften aus dem +LilyPond-Verzeichnis (typischerweise @file{/usr/share/lilypond/VERSION/fonts/otf/}) +in das Verzeichnis @file{~/.fonts/} kopiert wurden. + +@item scm +gibt die rohen Scheme-basierenden Zeichenbefehle aus, wie sie intern von +LilyPond benutzt werden. + +@cindex Scheme dump + +@item null +Keine Partitur wird ausgegeben, hat gleichen Effekt wie @code{-dno-print-pages}. + +@end table + +Beispiel: @code{lilypond -dbackend=svg @var{Dateiname}.ly} + +@cindex Ausgabeformat + +@item preview +Erzeugt eine Ausgabedatei, die nur die Titelzeilen und das erste System +enthält. + +@item print-pages +Erzeugt vollständige Seiten (Standardeinstellung). @code{-dno-print-pages} +ist in Verbindung mit @code{-dpreview} nützlich. + +@end table + + + +@item -h,--help +Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen. + +@item -H,--header=@var{FELD} +Gibt den Inhalt eines Feldes aus dem @code{\header}-Block in die Datei +@file{Dateiname.@var{FELD}} aus. + +@item --include, -I=@var{Verzeichnis} +Fügt @var{Verzeichnis} zur Liste der Suchpfade hinzu. +@cindex Dateisuche +@cindex Suchpfad + +@item -i,--init=@var{Initialisierungsdatei} +Benutzt @var{Initialisierungsdatei} zur gesamten Programminitialisierung. Der +Standardwert ist @file{init.ly}. + +@item -o,--output=@var{DATEI} +Schreibt das Ergebnis der Verarbeitung mit LilyPond in die Ausgabedatei +@var{DATEI}. Die entsprechende Dateinamenserweiterung wird angehängt (z.B. +@code{.pdf} für pdf). + +@item --ps +Erzeugt PostScript. + +@item --png +Erzeugt eine Grafik-Datei im PNG-Format von jeder Seite. Diese Option +impliziert auch @code{--ps}. Die Auflösung in DPI der Grafik kann festgelegt +werden durch +@example +-dresolution=110 +@end example + +@item --pdf +Erzeugt PDF-Dateien. Dies impliziert @code{--ps}. + +@item -j,--jail=@var{Benutzer},@var{Gruppe},@var{Jail-Verzeichnis},@var{Arbeitsverzeichnis} +Führt @command{lilypond} in einem chroot-Jail aus. + +Die @code{--jail} Option ist eine flexiblere Alternative zu @code{--safe}, wenn +LilyPond über das Internet verfügbar gemacht wird oder LilyPond-Quelldateien +von Dritten automatisch vararbeitet werden. + +Sie funktioniert dergestalt, dass das Wurzelverzeichnis von +@command{lilypond} auf @var{Jail-Verzeichnis} gesetzt wird, bevor die +tatsächliche Kompilierung der .ly-Datei beginnt. Der Benutzer und die Gruppe +werden auf die angegebenen Werte gesetzt und das aktuelle Arbeitsverzeichnis +wird ebenfalls auf den angegebenen Wert @var{Arbeitsverzeichnis} gesetzt. +Diese Einstellungen garantieren (zumindest in der Theorie), dass es nicht +möglich ist, aus dem Jail auszubrechen. Damit @code{--jail} funktioniert, muss +@command{lilypond} allerdings als root ausgeführt werden, was normalerweise +auf sichere Art mit dem Kommando @command{sudo} erreicht werden kann. + +Das Jail-Verzeichnis zu erstellen ist etwas heikel, da LilyPond alle zur +Ausführung nötigen Bibliotheken und Dateien @emph{innerhalb des +Jail-Verzeichnisses} finden muss. Ein typisches Setup besteht aus folgenden +Punkten: + +@table @asis +@item Erstellung eines getrennten Dateisystems +Ein eigenes Dateisystem muss für LilyPond erstellt werden, sodass es mit +sicheren Einstellungen wie @code{noexec}, @code{nodev} und @code{nosuid} +eingebunden werden kann. Damit ist es unmöglich, Programme von diesem +Dateisystem auszuführen oder direkt auf eine Hardware-Schnittstelle +zuzugreifen. Wenn Sie keine eigene Partition erstellen möchten, können Sie +auch eine Datei der entsprechenden Größe erstellen und sie als @q{loop}-Gerät +einbinden. Ein getrenntes Dateisystem garantiert auch, dass LilyPond nicht +mehr Festplattenspeicher benutzt als erlaubt. + +@item Erstellung eines eigenen Benutzerkontos +Es sollte ein eigener Benutzer und eine eigene Gruppe (z. B. +@code{lily}/@code{lily}) mit geringen Rechten für die Ausführung von LilyPond +innerhalb des Jails benutzt werden. Nur ein einziges Verzeichnis des Jails sollte +für den Benutzer schreibbar sein und als @var{Arbeitsverzeichnis} an +@code{lilypond} übergeben werden. + +@item Einrichtung des Jails +LilyPond muss zahlreiche Dateien für die Ausführung einlesen. All diese +Dateien müssen in das Jail-Verzeichnis kopiert werden (mit denselben Pfaden +wie im tatsächlichen Wurzel-Dateisystem). Die gesamte LilyPond-Installation +(typischerweise @file{/usr/share/lilypond}) sollte kopiert werden. + +Falls Probleme auftreten, ist es am einfachsten, Lilypond mittels +@command{strace} zu starten, wodurch Sie relativ leicht feststellen können, +welche Dateien im Jail noch fehlen. + +@item Ausführung von LilyPond +In einem mit @code{noexec} eingebundenen Jail ist es nicht möglich, externe +Programme auszuführen. Daher muss LilyPond auf eine Art gestartet werden, +die keine weitere Ausführung von Programmen benötigt. Wie bereits erwähnt +muss LilyPond mit Administrator-Rechten gestartet werden (die es allerdings +sofort wieder abgibt), beispielsweise mittels @command{sudo}. Außerdem +ist es eine gute Idee, die LilyPond zur Verfügung stehende CPU-Zeit zu +limitieren (z. B. mit @command{ulimit -t}) und -- falls das Betriebssystem +dies unterstützt -- auch den zur Verfügung stehenden Hauptspeicher. +@end table + + +@item -v,--version +Gibt die Versionsnummer aus. + +@item -V,--verbose +Gibt ausführliche informative Meldungen aus: Zeigt die vollen Dateipfade +aller gelesenen Dateien sowie Informationen über die Laufzeit. + +@item -w,--warranty +Zeigt die Garantiebedingungen an, unter denen GNU LilyPond steht. (Es besteht +@strong{KEINERLEI GARANTIE}!) +@end table + + +@node Umgebungsvariablen +@subsection Umgebungsvariablen +@translationof Environment variables + +@cindex LANG +@cindex LILYPOND_DATADIR + +@command{lilypond} erkennt und benützt die folgenden Umgebungsvariablen: +@table @code +@item LILYPOND_DATADIR +Diese Variable gibt das Verzeichnis an, wo Lilypond seine eigenen Dateien, +Meldungen und Übersetzungen finden kann. Dieses Verzeichnis sollte +Unterverzeichnisse @file{ly/}, @file{ps/}, @file{tex/}, etc. beinhalten. + +@item LANG +Gibt die Sprache an, in der Warnungen und Fehlermeldungen ausgegeben werden. + +@item LILYPOND_GC_YIELD +Mit dieser Variable (mit Werten zwischen 0 und 100) kann die Feinabstimmung +zwischen dem Bedarf an Hauptspeicher und Rechenleistung bei der Ausführung +von LilyPond durchgeführt werden. Bei höheren Werten benutzt LilyPond +mehr Hauptspeicher, benötigt aber weniger Prozessor-Leistung. Bei +niedrigeren Werten wird mehr Prozessor-Zeit, dafür weniger Hauptspeicher +benötigt. Voreinstellung ist ein Wert von @code{70}. + +@end table + + +@node Fehlermeldungen +@section Fehlermeldungen +@translationof Error messages + +@cindex error messages +Während der Verarbeitung einer Dateien können diverse Meldungen an der +Kommandozeile auftreten: + +@table @emph + +@item Warnung +@cindex Warnung +Irgendetwas ist verdächtig. Wenn Sie etwas Ungewöhnliches in Ihrer +Datei durchführen, dann werden Sie die Meldung verstehen und können +sie gegebenenfalls ignorieren. Im Normalfall jedoch bedeutet eine +Warnung, dass mit Ihrer Datei etwas nicht stimmt, LilyPond jedoch +trotzdem versucht, die Datei soweit wie möglich korrekt zu übersetzen. + +@item Fehler +@cindex Fehler +Irgendetwas stimmt definitiv nicht. Der aktuelle Bearbeitungsschritt +(Einlesen, Interpretieren oder Formatieren der Datei) wird noch fertig +ausgeführt, danach bricht die Bearbeitung aber ab. + +@item Fataler Fehler +@cindex Fataler Fehler +Irgendetwas stimmt definitiv nicht und LilyPond kann nicht weiter +ausgeführt werden. Dies ist nur sehr selten der Fall, meist sind +die Schriftarten nicht korrekt installiert. + +@item Scheme Fehler +@cindex Fehlerprotokoll, Scheme +@cindex Scheme Fehler +Fehler, die während der Ausführung von Scheme-Code auftreten, werden +vom Scheme-Interpreter aufgefangen und an der Kommandozeile ausgegeben. +Wenn Sie LilyPond mit der @code{--verbose} Option (auch @code{-V}) +ausführen, wird der sogennante @q{Call trace} ausgegeben, der die +aufgerufenen Funktionen zur Zeit des Fehlers angibt. + +@item Programmierfehler +@cindex Programmierfehler +Eine interne Inkonsistenz ist aufgetreten. Diese Fehlermeldungen +sollen den Programmierern die Fehlersuche erleichtern und +können meistens einfach ignoriert werden. In manchen Fällen werden +so viele Meldungen ausgegeben, dass die Lesbarkeit der restliche +Ausgabe davon beeinträchtigt wird. + +@item Abgebrochen (core dumped) +Dies bezeichnet einen ernsten Programmierfehler, der das Programm +zum Absturz gebracht hat. Solche Fehler werden als kritisch angesehen. +Falls daher einer auftritt, senden Sie bitte einen Bug-Report! +@end table + +@cindex Fehlermeldung, Format +@cindex Form der Fehlermeldungen +Wenn Warnungen oder Fehlermeldungen mit einer konkreten Stelle in der +Eingabedatei verknüpft werden können, dann hat die Meldung die folgende +Form: + +@example +@var{Dateiname}:@var{Zeile}:@var{Spalte}: @var{Meldung} +@var{Fehlerhafte Eingabezeile} +@end example + +Ein Zeilenumbruch wird in der fehlerhaften Zeile an jener Stelle eingefügt, +wo der Fehler aufgetreten ist. Zum Beispiel + +@example +test.ly:2:19: Fehler: keine gültige Dauer: 5 + @{ c'4 e' + 5 g' @} +@end example + +Diese Stellen sind LilyPonds Vermutung, wo die Warnung oder der Fehler +aufgetreten ist, allerdings treten Warnungen und Fehler ja gerade in +unerwarteten Fällen auf. Manchmal kann Lilypond auch eine fehlerhafte +Stelle zwar noch problemlos verarbeiten, ein paar Zeilen später wirkt +sich der Fehler aber dann doch noch aus. In solchen Fällen, wo Sie in +der angegebenen Zeile keinen Fehler erkennen, sollten Sie auch die Zeilen +oberhalb der angegebenen Stelle genauer unter die Lupe nehmen. + + +@node Dateien mit convert-ly aktualisieren +@section Dateien mit @command{convert-ly} aktualisieren +@translationof Updating files with convert-ly + +@cindex Aktualisierung von LilyPond-Dateien +@cindex Aktualisierung mit convert-ly +@cindex convert-ly: Aktualisierung + +Die Eingabesyntax von LilyPond ändert sich graduell um etwa die +Eingabe zu erleichtern oder neue Funktionen zu ermöglichen. Ein +Nebeneffekt hiervon ist, dass das LilyPond-Übersetzerprogramm nicht +mehr mit älteren Eingabedateien kompatibel sein kann. Um dies +zu umgehen, kann @command{convert-ly} benutzt werden, welches die +meisten der Syntaxänderungen korrigieren kann. + +Das Programm benötigt eine @code{\version}-Information in der +Eingabedatei, um zu wissen, von welcher Version konvertiert werden +soll. In den meisten Fällen genügt es, den Befehl + +@example +convert-ly -e meineDatei.ly +@end example + +@noindent +auszuführen. + +Damit wird @code{meineDatei.ly} direkt aktualisiert und die +Originaldatei unter @code{meineDatei.ly~} gespeichert. + +Alternativ kann man der aktualisierten Datei auch einen anderen +Namen geben, in welchem Fall die Originaldatei unverändert +gelassen wird. Das geht mit dem Befehl + +@example +convert-ly meineDatei.ly > meineneueDatei.ly +@end example + +Das Programm zeigt die Versionsnummern an, für die Konvertierungen +vorgenommen wurden. Wenn keine Versionsnummern angezeigt werden, +ist die Datei schon aktuell. + + +MacOS@tie{}X-Benutzer können diesen Befehl im Menu unter +@code{Compile > Update syntax} finden. + +Benutzer unter Windows müssen diesen Befehl auf der Eingabeaufforderung +schreiben, welche man üblicherweise unter dem Menüeintrag +@code{Start > Alle Programme > Zubehör > Eingabeaufforderung} zu +finden ist. + + +@menu +* Optionen von convert-ly auf der Kommandozeile:: +* Probleme mit convert-ly:: +@end menu + + +@node Optionen von convert-ly auf der Kommandozeile +@subsection Optionen von @command{convert-ly} auf der Kommandozeile +@translationof Command line options for convert-ly + +@command{convert-ly} konvertiert immer bis zur letzten Syntaxänderung, +die es beherrscht. Das heißt, dass die neue @code{version}-Nummer +in der Datei überlicherweise etwas niedriger ist als die +Version von @command{convert-ly}. + +Die allgemeine Syntax des Programms lautet: + +@example +convert-ly [@var{Option}]@dots{} @var{Dateiname}@dots{} +@end example + +Folgende Optionen sind möglich: + +@table @code +@item -e,--edit +Führt die Aktualisierung direkt in der Datei durch, die Datei wird +dabei verändert. + +@item -f,--from=@var{von-Versionsnummer} +Setze die Version, ab welcher konvertiert werden soll. Wenn diese +Option nicht gesetzt ist, versucht @command{convert-ly}, die +Version auf Grundlage von @code{\version} zu raten. +Beispiel: @code{--from=2.10.25} + +@item -n,--no-version +Normalerweise fügt @command{convert-ly} eine @code{\version}-Zeile +zur Ausgabe hinzu. Mit dieser Option kann das unterdrückt werden. + +@item -s, --show-rules +Zeige alle bekannten Konversionsregeln und beende. + +@item --to=@var{bis-Versionsnummer} +Hiermit kann das Ziel der Konversion gesetzt werden. Standard ist +die neueste mögliche Version. Beispiel: @code{--to=2.12.2} + +@item -h, --help +Benutzerhilfe ausgeben. +@end table + +Um LilyPond-Fragmente in texinfo-Dateien zu aktualisieren, gilt +der Befehl: + +@example +convert-ly --from=... --to=... --no-version *.itely +@end example + +Um die Änderungen der LilyPond-Syntax zwischen bestimmten Versionen +zu sehen, kann der Befehl + +@example +convert-ly --from=... --to=... -s +@end example + +@noindent +benutzt werden. + +Viele Dateien können auf einmal aktualisiert werden, indem +@code{convert-ly} mit den üblichen UNIX-Befehlen kombiniert +wird. Das folgende Beispiel aktualisiert alle @code{.ly}-Dateien +im aktuellen Verzeichnis: + +@example +for f in *.ly; do convert-ly -e $f; done; +@end example + + + +@node Probleme mit convert-ly +@subsection Probleme mit @code{convert-ly} +@translationof Problems with convert-ly + +Wenn convert-ly unter Windows auf der Eingabeaufforderung mit einer +Datei benutzt wird, deren Name oder Pfad Leerzeichen enthält, muss +der gesamte Dateipfad mit drei (!) Anführungszeichen umgeben werden: + +@example +convert-ly """D:/My Scores/Ode.ly""" > """D:/My Scores/new Ode.ly""" +@end example + +Nicht alle Änderungen der Syntax können konvertiert werden. Nur +eine Ausgabeoption kann angegeben werden. Scheme- und +LilyPond-Scheme-Code wird sehr unwahrscheinlich korrekt aktualisiert, +hier ist meistens Nacharbeit erforderlich. + +@verbatim +Hier eine Liste einiger Befehle, die convert-ly nicht konvertieren kann. + +Diese Liste ist in Form von Fehlermeldungen, denn convert-ly +ist so strukturiert, dass nicht alle benötigten Änderungen +implementiert werden können. Es handelt sich also eher um eine +Wunschliste zur Referenz. + +1.6->2.0: + Bezifferter Bass wird nicht immer korrekt konvertiert, besonders + Befehle wie {< >}. Mats Kommentar hierzu: + Um convert-ly korrekt ausführen zu können, müssen alle Vorkommen + von '{<' in etwas beliebiges wie '{#' und genauso '>}' in '&}' + geändert werden. Nach der Konversion können sie dann zurück + in '{ <' und '> }' verwandelt werden + Nicht alle Textbeschriftungen werden richtig konvertiert. In der + alten Syntax konnten Beschriftungsbefehle mit Klammern gruppiert + werden, etwa + -#'((bold italic) "string") + This will incorrectly be converted into + -\markup{{\bold italic} "string"} + instead of the correct + -\markup{\bold \italic "string"} +2.0->2.2: + \partcombine wird nicht konvertiert + \addlyrics => \lyricsto wird nicht konvertiert, dadurch kompilieren + manche Dateien mit mehreren Strophen nicht. +2.0->2.4: + \magnify wird nicht nach \fontsize konvertiert. + - \magnify #m => \fontsize #f, where f = 6ln(m)/ln(2) + remove-tag wird nicht verändert. + - \applyMusic #(remove-tag '. . .) => \keepWithTag #'. . . + first-page-number wird nicht geändert. + - first-page-number no => print-first-page-number = ##f + Zeilenumbrüche im \header-Feld werde nicht konvertiert. + - \\\\ als Zeilenumbruch in \header{...} => \markup \center-align < + "First Line" "Second Line" > + Crescendo- und Decrescendo-Enden werden nicht konvertiert. + - \rced => \! + - \rc => \! +2.2->2.4: + \turnOff (in \set Staff.VoltaBracket = \turnOff eingesetzt) wird nicht korrekt behandelt. +2.4.2->2.5.9 + \markup{ \center-align <{ ... }> } sollte umgewandelt werden in: + \markup{ \center-align {\line { ... }} } + aber im Moment fehlt \line. +2.4->2.6 + Besondere LaTeX-Zeichen wie $~$ im Text werden nicht nach UTF( + konvertiert. +2.8 + \score{} muss jetzt mit einem musikalischen Ausdruck beginnen. + Alles andere (insbesondere \header{}) darf erst nach den Noten + kommen. +@end verbatim + + + +@node Fehler melden +@section Fehler melden +@translationof Reporting bugs + + +@cindex Fehler +@cindex Fehler melden + +Wenn Sie eine Datei haben, die zu einem Absturz von LilyPond oder zu einer +fehlerhaften Ausgabe führt, so ist dies ein @q{Bug}. Die List der aktuell +bekannten derartigen Fehler findet sich in unserem @q{Google Bug Tracker}: + +@uref{http://code.google.com/p/lilypond/issues/list} + +Wenn Sie einen Fehler gefunden haben, der noch nicht aufgelistet ist, melden +Sie dies bitte anhand der Anweisungen auf der Seite + +@uref{http://lilypond.org/web/devel/participating/bugs} + +Wenn Sie Beispieldateien für den Fehler erstellen, versuchen Sie bitte, die +Datei möglichst minimal zu halten und nur jenen LilyPond Code aufzunehmen, +der auch wirklich für den Fehler verantwortlich ist. Meldungen mit +Beispieldateien, die nicht minimal sind, können wir meist aus Zeitgründen +nicht effektiv bearbeiten. + diff --git a/Documentation/de/application/setup.itely b/Documentation/de/application/setup.itely new file mode 100644 index 0000000000..9e027d8f2b --- /dev/null +++ b/Documentation/de/application/setup.itely @@ -0,0 +1,356 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- + +@ignore + Translation of GIT committish: da96eee19a7529842725d0c374ea356987100f91 + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + +@c Translators: Till Rettig, Reinhold Kainhofer + +@node Setup +@chapter Setup +@translationof Setup + +In diesem Kapitel werden verschiedene Konfigurationsoptionen für LilyPond und +andere Programme behandelt, die nach der Installation auszuführen sind. Dieses +Kapitel kann als Referenz betrachtet werden, lesen Sie einen Abschnitt nur, +wenn er auf Sie zutrifft. + +@menu +* Setup für bestimmte Betriebssysteme:: +* Unterstützung von Texteditoren:: +* Point and click:: +@end menu + + +@node Setup für bestimmte Betriebssysteme +@section Setup für bestimmte Betriebssysteme +@translationof Setup for specific Operating Systems + +Dieser Abschnitt erklärt zusätzliche Einstellungen für bestimmte Betriebssysteme. + +@menu +* Einrichtung für MacOS X:: +@end menu + +@node Einrichtung für MacOS X +@subsection Einrichtung für MacOS X +@translationof Setup for MacOS X + +@subsubheading Benutzung von Python-Skripten unter MacOS 10.3 oder 10.4 + +Das LilyPond-Programmpaket für MacOS X stellt Python nicht zur +Verfügung, aber Python 2.4 oder höher wird benötigt, um +Skripte wie @command{convert-ly} zu benutzen. Wenn Sie MaxOS +10.3 oder 10.4 besitzen, müssen Sie eine neurere Python-Version +von @uref{http://python.org/download/} installieren und dann +die erste Zeile von @command{convert-ly} und @command{lilypond-book} +auf folgende Weise ändern: Wenn sich das installierte Python-Programm +in Ihrem @var{PFAD} befindet, muss die erste Zeile heißen: + +@example +#!/usr/bin/env python +@end example + +@noindent +andernfalls muss sie heißen: + +@example +#!@var{/path/to/newly_installed/python} +@end example + +@subsubheading MacOS X auf der Kommandozeile + +Die Skripte (etwa @command{lilypond-book}, @command{convert-ly}, +@command{abc2ly} und sogar @command{lilypond}) befinden sich +innerhalb der @code{.app}-Datei für MacOS@tie{}X. Sie können +auf der Kommandozeile direkt aufgerufen werden, etwa + +@example +@var{Pfad/zu}/LilyPond.app/Contents/Resources/bin/lilypond +@end example + +@noindent +Entsprechend funktionieren auch die anderen Skripte wie +@command{lilypond-book}, @command{convert-ly}, @command{abc2ly} usw. + +Sie können sich auch selber Skripte anlegen, die diesen Pfad automatisch +hinzufügen. Erstellen Sie ein Verzeichnis, indem die Skripte gespeichert werden: + +@example +mkdir -p ~/bin +cd ~/bin +@end example + +Erstellen Sie eine Datei mit dem Namen @code{lilypond} und dem Inhalt + +@example +exec @var{path/to}/LilyPond.app/Contents/Resources/bin/lilypond "$@@" +@end example + +Erstellen Sie entsprechende Dateien mit den Namen @code{lilypond-book}, + @code{convert-ly} und den Namen der anderen Hilfsprogramme, die Sie benutzen + (@code{abc2ly}, @code{midi2ly} usw.). Ersetzen Sie einfach den Teil + @code{bin/lilypond} mit @code{bin/convert-ly} (oder einem anderen + Programmnamen) in der entsprechenden Datei. + +Machen Sie die Datei ausführbar: + +@example +chmod u+x lilypond +@end example + +Jetzt müssen Sie dieses Verzeichnis noch zu Ihrem Pfad (PATH) hinzufügen. +Verändern Sie die Datei @code{.profile} in Ihrem Benutzerverzeichnis +(oder erstellen Sie sie), dass sie die Zeile + +@example +export PATH=$PATH:~/bin +@end example + +@noindent +beinhaltet. Die Datei muss mit einer Leerzeile enden. + +Beachten Sie, dass @var{Pfad/zu} üblicherweise @code{/Applications/} ist. + + +@node Unterstützung von Texteditoren +@section Unterstützung von Texteditoren +@translationof Text editor support + +@cindex Editoren +@cindex vim +@cindex emacs +@cindex Modus, Editoren +@cindex Syntax-Hervorhebung +@cindex Hervorhebung der Syntax + +Verschiedene Texteditoren haben Unterstützung für LilyPond. + +@menu +* Emacs-Modus:: +* Vim-Modus:: +* jEdit:: +* TexShop:: +* TextMate:: +* LilyKDE:: +@end menu + +@node Emacs-Modus +@subsection Emacs-Modus +@translationof Emacs mode + +Emacs hat einen LilyPond-Modus (@file{lilypond-mode}), eine Datei, die +die Vervollständigung von Befehlen, Einrückungen, für LilyPond spezifische +Klammerschließungen und die Markierung der Syntax beherrscht. +Zusätzlich stehen noch praktische Tastaturkombinationen zum +Programmaufruf und zum Nachschlagen in den Handbüchern zur +Verfügung. Siehe unten, wenn die Datei @file{lilypond-mode} +sich nicht auf Ihrem Computer befindet. + +Der Emacs-Modus zur Noteneingabe und zum Programmaufruf ist +in den Emacs-Quellen im @file{elisp}-Verzeichnis enthalten. Mit +dem Befehl @command{make install} können Sie es nach @var{elispdir} +installieren. Die Datei @file{lilypond-init.el} sollte in + @var{load-path}@file{/site-start.d/} liegen oder Ihrem + @file{~/.emacs} or @file{~/.emacs.el} hinzugefügt werden. + +Als Benutzer können Sie Ihren Quellenpfad (etwa @file{~/site-lisp/}) +ihrem @var{load-path} hinzufügen, indem Sie folgende Zeile zu Ihrer +@file{~/.emacs}-Datei hinzufügen: + +@c any reason we do not advise: (push "~/site-lisp" load-path) +@example +(setq load-path (append (list (expand-file-name "~/site-lisp")) load-path)) +@end example + + +@node Vim-Modus +@subsection Vim-Modus +@translationof Vim mode + +Für @uref{http://@/www@/.vim@/.org,VIM} wird ein @file{vimrc} bereitgestellt, +zusammen mit Werkzeugen zur Syntaxauszeichnung. Ein Vim-Modus zur +Noteneingabe und zum Programmaufruf befindet sich im Quellarchiv im +@code{$VIM}-Verzeichnis. + +LilyPond-Dateien werden automatisch erkannt, wenn sich in der Datei +@file{~/.vim/filetype.vim} folgender Inhalt befindet: + +@example +if exists("did_load_filetypes") + finish +endif +augroup filetypedetect + au! BufNewFile,BufRead *.ly,*.ily setf lilypond +augroup END +@end example + +Fügen Sie den LilyPond-Pfad in ihre +@file{~/.vimrc}-Datei ein, indem Sie ihre folgende Zeile hinzufügen: + +@example +set runtimepath+=/usr/local/share/lilypond/$@{LILYPOND_VERSION@}/vim/ +@end example + +@noindent +Dabei wird $@{LILYPOND_VERSION@}durch Ihre LilyPond-Version ersetzt. Sollten +Sie LilyPond nicht nach @file{/usr/local/} installiert haben, müssen Sie den +Pfad entsprechend anpassen. + + +@node jEdit +@subsection jEdit +@translationof jEdit + +Das Plugin für den @uref{http://@/www@/.jedit@/.org@/,jEdit}-Texteditor, +LilyPondTool genannt, ist das vielfältigste textbasierte Werkzeug, um +LilyPond-Notationsdateien zu editieren. Zu den besonderen Eigenschaften +gehört ein Dokument-Ersteller mit Liedtextunterstützung, der die Neuerstellung +von Dateien erleichtert, und ein integriertes PDF-Anzeigeprogramm mit +@qq{point-and-click}-Unterstützung. Demos, Bildschirmphotos und +Installationsanweisungen finden sich unter +@uref{http://lilypondtool@/.organum@/.hu} + + +@node TexShop +@subsection TexShop +@translationof TexShop + +Der +@uref{http://@/www@/.uoregon@/.edu/~koch/texshop/index@/.html,TexShop}-Editor +für MacOS@tie{}X kann erweitert werden, um LilyPond, lilypond-book und convert-ly aus dem +Editor heraus zu starten. Die Erweiterung findet sich unter +@uref{http://@/www@/.dimi@/.uniud@/.it/vitacolo/freesoftware@/.html}. + + +@node TextMate +@subsection TextMate +@translationof TextMate + +Es gibt ein LilyPond-Paket für TextMate. Es kann installiert werden, indem man + +@example +mkdir -p /Library/Application\ Support/TextMate/Bundles +cd /Library/Application\ Support/TextMate/Bundles +svn co http://macromates.com/svn/Bundles/trunk/Bundles/Lilypond.tmbundle/ +@end example + +@noindent +ausführt. + + +@node LilyKDE +@subsection LilyKDE +@translationof LilyKDE + +@uref{http://lilykde.googlecode.com/,LilyKDE} ist eine Erweiterung für +den Texteditor @uref{http://kate-editor.org/,Kate} für KDE. LilyKDE +beinhaltet einen mächtigen Assistenten, mit dem sehr schnell neue +LilyPond-Dokumente erstellt werden könne, sowie einen eingebetteten +PDF-Betrachter. + +LilyKDE benutzt auch @uref{http://www.volny.cz/smilauer/rumor/,Rumor}, +um Musik direkt von einem MIDI-Keyboard einzulesen. + +Weitere Fähigkeiten von LilyKDE sind Silbentrennung für Liedtexte oder +die Möglichkeit, LilyPond gleichzeitig mit mehreren Eingabedateien vom +KDE Dateimanager aus aufzurufen. + + +@node Point and click +@section Point and click +@translationof Point and click +@cindex Point and click + + +Point and click erlaubt es, die Noten in der Quelldatei zu finden, indem man sie +im PDF anklickt. Das erleichtert es, fehlerhafte Stellen zu finden. + +Wenn diese Funktionalität aktiv ist, fügt LilyPond Hyperlinks zum PDF hinzu. +Diese werden dann bei einem Klick zum Browser geschickt, der wiederum +einen Texteditor mit dem Cursor an der richtigen Stelle öffnet. + +Damit diese Kettenreaktion funktioniert, müssen Sie ihrem PDF-Programm +mit dem Skript @file{lilypond-invoke-editor} beibringen, Hyperlinks zu folgen. + +Im Falle von Xpdf auf einer UNIX-Maschine sollte folgende Zeile in der Datei +@file{xpdfrc}@footnote{Unter UNIX befindet sich diese Datei entweder in +@file{/etc/xpdfrc} oder als @file{.xpdfrc} in Ihrem Heim-Verzeichnis.} stehen. + +@example +urlCommand "lilypond-invoke-editor %s" +@end example + +Das Programm @file{lilypond-invoke-editor} ist ein kleines Hilfsprogramm. +Es ruft einen Editor auf für bestimmte @code{textedit}-URIs und startet +einen Browser für die anderen. Die Umgebungsvariable @code{EDITOR} +wird für folgende Zeichenketten: + +@table @code +@item emacs + das startet +@example +emacsclient --no-wait +@var{line}:@var{column} @var{file} +@end example +@item vim + das startet +@example +gvim --remote +:@var{line}:norm@var{char} @var{file} +@end example + +@item nedit + das startet +@example + nc -noask +@var{line} @var{file}' +@end example +@end table + +Die Umgebungsvariable @code{LYEDITOR} wird verwendet, um dieses zu +überschreiben. Sie enthält den Befehl, um den Editor aufzurufen, wobei +die Variablen @code{%(file)s}, +@code{%(column)s}, @code{%(line)s} mit der Datei, Spalte und Zeile +ersetzt werden. Die Einstellung + +@example +emacsclient --no-wait +%(line)s:%(column)s %(file)s +@end example + +@noindent +für @code{LYEDITOR} etwa entspricht dem von vornherein eingestellten +Emacs-Aufruf. + + +@cindex Dateigröße, Ausgabedatei + +Die point and click-Links vergrößern die Notationsdatei erheblich. Um die +Größe der PDF- und PS-Dateien zu verringern, kann point and click +ausgeschaltet werden, indem die Zeile + +@example +\pointAndClickOff +@end example + +@noindent +in der @file{.ly}-Datei gesetzt wird. Point and Click kann auch explizit +eingeschaltet werden durch die Zeile: + +@example +\pointAndClickOn +@end example + +Alternativ können Sie Point and Click auch mit einer +Kommandozeilenoption ausschalten: + +@example +lilypond -dno-point-and-click file.ly +@end example + +@warning{Sie sollten Point and Click immer für Dateien ausschalten, die +Sie an andere Personen weitergeben möchten. Anderenfalls werden +Pfadinformationen Ihres Computers in die PDF-Datei kopiert, was ein +potentielles Sicherheitsrisiko darstellt.} diff --git a/Documentation/de/dedication.itely b/Documentation/de/dedication.itely new file mode 100644 index 0000000000..2c2d6af298 --- /dev/null +++ b/Documentation/de/dedication.itely @@ -0,0 +1,18 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- + +@ignore + Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + +@quotation +Wir wollen dieses Programm allen Freunden widmen, die wir +durch die Musik kennengelernt haben. + + +Han-Wen und Jan +@end quotation diff --git a/Documentation/de/index.html.in b/Documentation/de/index.html.in index 90a768d6e9..5b39efa996 100644 --- a/Documentation/de/index.html.in +++ b/Documentation/de/index.html.in @@ -36,15 +36,15 @@ @@ -52,7 +52,7 @@ als PDF)
\n"); + return @toc_entries; +} + +sub lilypond_print_toc_div ($$) +{ + my $fh = shift; + my $tocref = shift; + my @lines = @$tocref; + # use default TOC if no custom lines have been generated + @lines = @default_toc if (not @lines); + if (@lines) { + + print $fh "\n\n\n\n"; + } +} + +# Create the custom TOC for this page (partially folded, current page is +# highlighted) and store it in a global variable. The TOC is written out after +# the html contents (but positioned correctly using CSS), so that browsers with +# css turned off still show the contents first. +our @this_page_toc = (); +sub lilypond_print_element_header +{ + my $first_in_page = shift; + my $previous_is_top = shift; + if ($first_in_page and not @this_page_toc) { + if (defined($Texi2HTML::THIS_ELEMENT)) { + # Create the TOC for this page + @this_page_toc = lilypond_generate_page_toc_body($Texi2HTML::THIS_ELEMENT); + } + } + return &$default_print_element_header( $first_in_page, $previous_is_top); +} + +# Generate the HTML output for the TOC +sub lilypond_toc_body($) +{ + my $elements_list = shift; + # Generate a default TOC for pages without THIS_ELEMENT + @default_toc = lilypond_generate_page_toc_body(@$elements_list[0]); + return &$default_toc_body($elements_list); +} + +# Print out the TOC in a
at the beginning of the page +sub lilypond_print_page_head($) +{ + my $fh = shift; + &$default_print_page_head($fh); + print $fh "
\n"; +} + +# Print out the TOC in a
at the end of th page, which will be formatted as a +# sidebar mimicking a TOC frame +sub print_lilypond_page_foot($) +{ + my $fh = shift; + my $program_string = &$program_string(); +# print $fh "

$program_string
$PRE_BODY_CLOSE

\n"; + print $fh "\n\n"; + print $fh "\n
\n\n"; + + # Print the TOC frame and reset the TOC: + lilypond_print_toc_div ($fh, \@this_page_toc); + @this_page_toc = (); + + # Close the page: + print $fh "\n\n"; +} + + + + + +############################################################################# +### NICER / MORE FLEXIBLE NAVIGATION PANELS +############################################################################# + +sub get_navigation_text +{ + my $button = shift; + my $text = $NAVIGATION_TEXT{$button}; + if ( ($button eq 'Back') or ($button eq 'FastBack') ) { + $text = $text . $Texi2HTML::NODE{$button} . " "; + } elsif ( ($button eq 'Forward') or ($button eq 'FastForward') ) { + $text = " " . $Texi2HTML::NODE{$button} . $text; + } elsif ( $button eq 'Up' ) { + $text = " ".$text.": " . $Texi2HTML::NODE{$button} . " "; + } + return $text; +} + + +# Don't automatically create left-aligned table cells for every link, but +# instead create a only on an appropriate '(left|right|center)-aligned-cell-n' +# button text. It's alignment as well as the colspan will be taken from the +# name of the button. Also, add 'newline' button text to create a new table +# row. The texts of the buttons are generated by get_navigation_text and +# will contain the name of the next/previous section/chapter. +sub lilypond_print_navigation +{ + my $buttons = shift; + my $vertical = shift; + my $spacing = 1; + my $result = "\n"; + + $result .= "" unless $vertical; + my $beginofline = 1; + foreach my $button (@$buttons) + { + $result .= qq{\n} if $vertical; + # Allow (left|right|center)-aligned-cell and newline as buttons! + if ( $button =~ /^(.*)-aligned-cell-(.*)$/ ) + { + $result .= qq{} unless $beginofline; + $result .= qq{} unless $beginofline; + $result .= qq{}; + $result .= qq{}; + $beginofline = 1; + + } + elsif (ref($button) eq 'CODE') + { + $result .= &$button($vertical); + } + elsif (ref($button) eq 'SCALAR') + { + $result .= "$$button" if defined($$button); + } + elsif (ref($button) eq 'ARRAY') + { + my $text = $button->[1]; + my $button_href = $button->[0]; + # verify that $button_href is simple text and text is a reference + if (defined($button_href) and !ref($button_href) + and defined($text) and (ref($text) eq 'SCALAR') and defined($$text)) + { # use given text + if ($Texi2HTML::HREF{$button_href}) + { + my $anchor_attributes = ''; + if ($USE_ACCESSKEY and (defined($BUTTONS_ACCESSKEY{$button_href})) and ($BUTTONS_ACCESSKEY{$button_href} ne '')) + { + $anchor_attributes = "accesskey=\"$BUTTONS_ACCESSKEY{$button_href}\""; + } + if ($USE_REL_REV and (defined($BUTTONS_REL{$button_href})) and ($BUTTONS_REL{$button_href} ne '')) + { + $anchor_attributes .= " rel=\"$BUTTONS_REL{$button_href}\""; + } + $result .= "" . + &$anchor('', + $Texi2HTML::HREF{$button_href}, + get_navigation_text($$text), + $anchor_attributes + ); + } + else + { + $result .= get_navigation_text($$text); + } + } + } + elsif ($button eq ' ') + { # handle space button + $result .= + ($ICONS && $ACTIVE_ICONS{' '}) ? + &$button_icon_img($BUTTONS_NAME{$button}, $ACTIVE_ICONS{' '}) : + $NAVIGATION_TEXT{' '}; + #next; + } + elsif ($Texi2HTML::HREF{$button}) + { # button is active + my $btitle = $BUTTONS_GOTO{$button} ? + 'title="' . $BUTTONS_GOTO{$button} . '"' : ''; + if ($USE_ACCESSKEY and (defined($BUTTONS_ACCESSKEY{$button})) and ($BUTTONS_ACCESSKEY{$button} ne '')) + { + $btitle .= " accesskey=\"$BUTTONS_ACCESSKEY{$button}\""; + } + if ($USE_REL_REV and (defined($BUTTONS_REL{$button})) and ($BUTTONS_REL{$button} ne '')) + { + $btitle .= " rel=\"$BUTTONS_REL{$button}\""; + } + if ($ICONS && $ACTIVE_ICONS{$button}) + { # use icon + $result .= '' . + &$anchor('', + $Texi2HTML::HREF{$button}, + &$button_icon_img($BUTTONS_NAME{$button}, + $ACTIVE_ICONS{$button}, + $Texi2HTML::SIMPLE_TEXT{$button}), + $btitle + ); + } + else + { # use text + $result .= + '[' . + &$anchor('', + $Texi2HTML::HREF{$button}, + get_navigation_text($button), + $btitle + ) . + ']'; + } + } + else + { # button is passive + $result .= + $ICONS && $PASSIVE_ICONS{$button} ? + &$button_icon_img($BUTTONS_NAME{$button}, + $PASSIVE_ICONS{$button}, + $Texi2HTML::SIMPLE_TEXT{$button}) : + + "[" . get_navigation_text($button) . "]"; + } + $result .= "\n" if $vertical; + $result .= "\n" if $vertical; + } + $result .= "" unless $beginofline; + $result .= "" unless $vertical; + $result .= "
}; + $beginofline = 0; + } + elsif ( $button eq 'newline' ) + { + $result .= qq{
\n"; + return $result; +} + + +@Texi2HTML::Config::SECTION_BUTTONS = + ('left-aligned-cell-1', 'FastBack', + 'center-aligned-cell-3', 'Top', 'Contents', 'Index', 'About', + 'right-aligned-cell-1', 'FastForward', + 'newline', + 'left-aligned-cell-2', 'Back', + 'center-aligned-cell-1', 'Up', + 'right-aligned-cell-2', 'Forward' + ); + +# buttons for misc stuff +@Texi2HTML::Config::MISC_BUTTONS = ('center-aligned-cell-3', 'Top', 'Contents', 'Index', 'About'); + +# buttons for chapter file footers +# (and headers but only if SECTION_NAVIGATION is false) +@Texi2HTML::Config::CHAPTER_BUTTONS = + ('left-aligned-cell-1', 'FastBack', + 'center-aligned-cell-3', 'Top', 'Contents', 'Index', 'About', + 'right-aligned-cell-1', 'FastForward', + ); + +# buttons for section file footers +@Texi2HTML::Config::SECTION_FOOTER_BUTTONS = + ('left-aligned-cell-1', 'FastBack', + 'center-aligned-cell-3', 'Top', 'Contents', 'Index', 'About', + 'right-aligned-cell-1', 'FastForward', + 'newline', + 'left-aligned-cell-2', 'Back', + 'center-aligned-cell-1', 'Up', + 'right-aligned-cell-2', 'Forward' + ); + +@Texi2HTML::Config::NODE_FOOTER_BUTTONS = + ('left-aligned-cell-1', 'FastBack', + 'center-aligned-cell-3', 'Top', 'Contents', 'Index', 'About', + 'right-aligned-cell-1', 'FastForward', + 'newline', + 'left-aligned-cell-2', 'Back', + 'center-aligned-cell-1', 'Up', + 'right-aligned-cell-2', 'Forward' + ); + + + + + +############################################################################# +### FOOTNOTE FORMATTING +############################################################################# + +# Format footnotes in a nicer way: Instead of printing the number in a separate +# (nr) heading line, use the standard way of prepending nr immediately +# before the fn text. + + +# The following code is copied from texi2html's examples/makeinfo.init and +# should be updated when texi2html makes some changes there! + +my $makekinfo_like_footnote_absolute_number = 0; + +sub makeinfo_like_foot_line_and_ref($$$$$$$$) +{ + my $foot_num = shift; + my $relative_num = shift; + my $footid = shift; + my $docid = shift; + my $from_file = shift; + my $footnote_file = shift; + my $lines = shift; + my $state = shift; + + $makekinfo_like_footnote_absolute_number++; + + # this is a bit obscure, this allows to add an anchor only if formatted + # as part of the document. + $docid = '' if ($state->{'outside_document'} or $state->{'multiple_pass'}); + + if ($from_file eq $footnote_file) + { + $from_file = $footnote_file = ''; + } + + my $foot_anchor = "" . &$anchor($docid, "$footnote_file#$footid", $relative_num) . ""; + $foot_anchor = &$anchor($docid, "$footnote_file#$footid", "($relative_num)") if ($state->{'preformatted'}); + +# unshift @$lines, "
  • "; +# push @$lines, "
  • \n"; + return ($lines, $foot_anchor); +} + +sub makeinfo_like_foot_lines($) +{ + my $lines = shift; + unshift @$lines, "
    \n

    $Texi2HTML::I18n::WORDS->{'Footnotes_Title'}

    \n"; +#
      \n"; +# push @$lines, "
    "; + return $lines; +} + +my %makekinfo_like_paragraph_in_footnote_nr; + +sub makeinfo_like_paragraph ($$$$$$$$$$$$$) +{ + my $text = shift; + my $align = shift; + my $indent = shift; + my $paragraph_command = shift; + my $paragraph_command_formatted = shift; + my $paragraph_number = shift; + my $format = shift; + my $item_nr = shift; + my $enumerate_style = shift; + my $number = shift; + my $command_stack_at_end = shift; + my $command_stack_at_begin = shift; + my $state = shift; +#print STDERR "format: $format\n" if (defined($format)); +#print STDERR "paragraph @$command_stack_at_end; @$command_stack_at_begin\n"; + $paragraph_command_formatted = '' if (!defined($paragraph_command_formatted) or + exists($special_list_commands{$format}->{$paragraph_command})); + return '' if ($text =~ /^\s*$/); + foreach my $style(t2h_collect_styles($command_stack_at_begin)) + { + $text = t2h_begin_style($style, $text); + } + foreach my $style(t2h_collect_styles($command_stack_at_end)) + { + $text = t2h_end_style($style, $text); + } + if (defined($paragraph_number) and defined($$paragraph_number)) + { + $$paragraph_number++; + return $text if (($format eq 'itemize' or $format eq 'enumerate') and + ($$paragraph_number == 1)); + } + my $open = '[0]) and $command_stack_at_begin->[0] eq 'footnote') + { + my $state = $Texi2HTML::THISDOC{'state'}; + $makekinfo_like_paragraph_in_footnote_nr{$makekinfo_like_footnote_absolute_number}++; + if ($makekinfo_like_paragraph_in_footnote_nr{$makekinfo_like_footnote_absolute_number} <= 1) + { + $open.=' class="footnote"'; + my $document_file = $state->{'footnote_document_file'}; + if ($document_file eq $state->{'footnote_footnote_file'}) + { + $document_file = ''; + } + my $docid = $state->{'footnote_place_id'}; + my $doc_state = $state->{'footnote_document_state'}; + $docid = '' if ($doc_state->{'outside_document'} or $doc_state->{'multiple_pass'}); + my $foot_label = &$anchor($state->{'footnote_footnote_id'}, + $document_file . "#$state->{'footnote_place_id'}", + "$state->{'footnote_number_in_page'}"); + $footnote_text = "[${foot_label}] "; + } + } + return $open.'>'.$footnote_text.$text.'

    '; +} + + +############################################################################# +### OTHER SETTINGS +############################################################################# + +# For split pages, use index.html as start page! +if ($Texi2HTML::Config::SPLIT eq 'section') { + $Texi2HTML::Config::TOP_FILE = 'index.html'; +} + + +return 1; diff --git a/Documentation/lilypond.css b/Documentation/lilypond.css deleted file mode 100644 index 82ab472b95..0000000000 --- a/Documentation/lilypond.css +++ /dev/null @@ -1,216 +0,0 @@ -/***********************************************************/ -/* PAGE-WIDE SETTINGS */ -/**********************************************************/ - -html { - height:100%; -} - -body { - margin: 0; - padding: 0; - height: 100%; - font-size: 100%; - margin-right: auto; - margin-left: auto; - color: black; - background-color: white; -} - -/***********************************************************/ -/* HEADERS */ -/***********************************************************/ -h4, h3, h2, .unnumberedsubsubsec, .subsubheading { - color: #151959; -} - -h2 { - font-size: x-large; -} -.unnumberedsubsubsec, .subsubheading { - font-size: large; -} - -/***********************************************************/ -/* LINKS */ -/***********************************************************/ -a:link, a:visited, a:hover, a:active {color:#2E5479; text-decoration: none;} -a:hover {text-decoration: underline;} -a:active {color:#CCCCFF;} - -/***********************************************************/ -/* BLOCK FORMATTING */ -/***********************************************************/ -blockquote { - border: 1px solid #CCCCCC; - padding: 3px; - width: 40em; -} -.verbatim, .example, .smallexample { - font-family: "Courier New",Courier,monospace; -} -hr { - border: none; - height: 1px; - color: #666666; - background-color: #666666; -} -table.cartouche { - border: 2px dotted #CCCCCC; - margin-left: auto; - margin-right: auto; - width: 85%; -} -table.cartouche td { - border: none; -} - -/***********************************************************/ -/* MAIN CONTENT */ -/***********************************************************/ - -div#main { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 27%; - padding: 0 1em; - margin: 0; - overflow: auto; -} - -#languages { - padding-bottom: 1em; -} - -/***********************************************************/ -/* TOC SIDEBAR */ -/***********************************************************/ - -div#tocframe { - position: absolute; - top: 0; - right: 73%; - bottom: 0; - left: 0; - padding: 5px; - padding-bottom: 0; - margin: 0; - overflow: auto; - background-color: #E7EFE3; - z-index:100; - list-style-type: none; -} - -@media screen { - body>div#tocframe { - position: fixed - } - } - -#tocframe .contents { - width: 100%; - padding-bottom: 0.25em; - border: none; - margin: 0em; - background-color: transparent; - list-style-type: none; -} - -#tocframe a, #tocframe a:visited, #tocframe a:active { - color: #1B3313; - text-decoration: none; -} - -#tocframe a:hover { - color: #2E5479; - text-decoration:underline; -} - -#tocframe ul.toc { - padding-left: 0px; - margin-left: 0px; -} -#tocframe ul.toc li { - padding-left: 0px; - margin-left: 0px; - list-style-type: none; -} -#tocframe ul.toc > li { - font-size: 12px; -} -#tocframe ul.toc li li { - padding-left: 15px; -} -li.toc_current { - font-weight: bold; - font-style: italic; -} - -li.toc_current ul { - font-weight: normal; - font-style: normal; - background: transparent; -} - - - - -/***********************************************************/ -/* NAVIGATION */ -/***********************************************************/ - -div.header { - background-color: #E7EFE3; - padding: 2px; - border: #CCD3CC 1px solid; - text-align: center; -} - -h1.header { - font-weight: bold; - font-family: avantgarde, sans-serif; - font-size: 220%; -} - -div.subheader { - text-align: center; -} - -#navigation { - margin: 0 auto; -} - -.nav_table { - width: 100%; - background-color: #CCD3CC; - border: 0; - margin-top: 4px; - left: auto; - right: auto; - font-size: 0.8em; -} - -.title { - font-weight: bold; -} - -.footer { - background-color: #E7EFE3; - padding: 5px; - border: #CCD3CC 1px solid; - font-size: 80%; -} - - - -/***********************************************************/ -/* OVERRIDES FOR PRINTING */ -/***********************************************************/ -@media print { - /* Hide the sidebar: */ - body { padding-left: 0; } - #tocframe { display: none; } - .nav_table { display: none; } -} diff --git a/Documentation/logo/GNUmakefile b/Documentation/logo/GNUmakefile new file mode 100644 index 0000000000..4a8f2eb72f --- /dev/null +++ b/Documentation/logo/GNUmakefile @@ -0,0 +1,27 @@ +depth = ../.. + +STEPMAKE_TEMPLATES=documentation +XPM_FILES=$(call src-wildcard,*.xpm) +EXTRA_DIST_FILES= $(XPM_FILES) + +lilypond-icon = $(outdir)/lilypond.ico +ly-icon = $(outdir)/ly.ico + +include $(depth)/make/stepmake.make + +ifeq ($(PLATFORM_WINDOWS),yes) + +$(outdir)/%.ico: %.xpm + $(buildscript-dir)/genicon $< $@ + +default: $(lilypond-icon) $(ly-icon) + +endif # PLATFORM_WINDOWS + +local-dist: $(icon) +xgifs: $(OUTGIF_FILES) +pngs: $(OUTPNG_FILES) + +ifeq ($(out),www) +local-WWW-1: $(OUTPNG_FILES) +endif diff --git a/Documentation/logo/lelie-logo.xpm b/Documentation/logo/lelie-logo.xpm new file mode 100644 index 0000000000..15408fb2ef --- /dev/null +++ b/Documentation/logo/lelie-logo.xpm @@ -0,0 +1,215 @@ +/* XPM */ +static char *noname[] = { +/* width height ncolors chars_per_pixel */ +"100 143 65 1", +/* colors */ +" c #ADADAD", +". c #A5A5A5", +"X c #9D9D9D", +"o c #959595", +"O c #8D8D8D", +"+ c #858585", +"@ c #7D7D7D", +"# c #757575", +"$ c #6D6D6D", +"% c #656565", +"& c #5D5D5D", +"* c #555555", +"= c #4D4D4D", +"- c #FCFCFC", +"; c #FAFAFA", +": c #454545", +"> c #F2F2F2", +", c #3D3D3D", +"< c #EAEAEA", +"1 c #353535", +"2 c #E2E2E2", +"3 c #2D2D2D", +"4 c #DADADA", +"5 c #252525", +"6 c #D2D2D2", +"7 c #1D1D1D", +"8 c #CACACA", +"9 c #151515", +"0 c #C2C2C2", +"q c #0D0D0D", +"w c #BABABA", +"e c #050505", +"r c #B2B2B2", +"t c #AAAAAA", +"y c #A2A2A2", +"u c #9A9A9A", +"i c #929292", +"p c #8A8A8A", +"a c #828282", +"s c #7A7A7A", +"d c #727272", +"f c #6A6A6A", +"g c #626262", +"h c #5A5A5A", +"j c #525252", +"k c #FDFDFD", +"l c #4A4A4A", +"z c #F5F5F5", +"x c #424242", +"c c #EDEDED", +"v c #3A3A3A", +"b c #E5E5E5", +"n c #323232", +"m c #DDDDDD", +"M c #2A2A2A", +"N c #D5D5D5", +"B c #222222", +"V c #CDCDCD", +"C c #1A1A1A", +"Z c #C5C5C5", +"A c #121212", +"S c #BDBDBD", +"D c #0A0A0A", +"F c #B5B5B5", +"G c #020202", +/* pixels */ +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkk;kkkkkk;kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkk;kkkkk;kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkk;kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkk;kkkk;kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk.lexGGj*9jkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkhkkkkkkkkwhs+kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk6 kkkkkkkkkkkVeCkkkkkkkkkkkkrsspkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkOkkkkkkkkkkkkkk2G2kkkkkkkkkdkkkkekkkkkkkkkkkkkkkk", +"k;kkkk;kkkk;kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk.Gkkkckkkkkkkkkkkk@kkkkkkkkskk:kkdokkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkk;kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkw2rkkkkkkkkkkkkkkkkk1kkkkkkkdkGykuk@kkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkskk*kkkkkkkkkkkkkkkkrZkkkkkkGGtkm k%kkkkkkkkkkkkkkk", +"kkk;kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkjkkk$kkkkkkkkkkkkkkkkk=kkkkkkwniw kk@kkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk&kkkk3kkkkkkkkkkkkkkkkw6kkkkkk>X6kk4rkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkakkkkk=kkkkkkkkkkkkkkkk=kkkw:vNkkkk$kkkkkkkkkkkkkkkk", +"kkkkkkkkkkk;kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk&k06kkkvckkkkkkkkkkkkkk+zkkqkkkkkk&kkkkkkkkkkkkkkkkk", +"kk;;kk;kkkkkkk;kk;kkkkkkkkkkkkkkkkkkkkkkkkkkkkkukkk+kkkk,kkkkkkkkkkkkkkk%kMkkkkk.ykkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkX8kky+kkkkk:kkkkkkkkkkkkkk$kGZk2Fwykkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkNikkkkk+mkkkknckkkkkkkkkkkkk@l*kZM@vGkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk4okkkkkkkkkkkkkGkkkkkkkkkkkkkZfikXkc$Ckkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkjkkkkkkkkkkkkkkGkkkkkkkkkkkkk9ry,>kktkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk% Zkkkkkkkkkkky.kkkkkkkkkkkXu6f$kkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkokpkknk*kh%kkkkkki4kkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkaikkkkkkkkkkkkkkkkkkkkkkk4rqZFskkk>kgk0>k%z44hk=kkkkkkk:kkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkk+ikkkkkkkkkkkkkkkkkkkkkkkkGhFFkkkk>Akskkvk*kxmZkkkkkkkkdkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkiikkkkkkkkkkkkkkkkkkkkkkk7D+0kkkk*FbNk,kkp.k*kkkkkkkkkzlkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkk>u.kkkkkkkkkkkkkkkkkkkkkkGGrF$;kkGkOkk7knkvkdkkkkkkkkkkzdkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkZoZkkkkkkkkkkkkkkkkkkkkkMM8$skk*zwkk:kkoNS@@kkkkkkkkkkkzMkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkSybkkkkkkkkkkkkkkkkkkkkfDO *kk=kwk>,kvk3kn>g$0kkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkku kkkkkkkkkkkkkkkkkkkV+G%uXkGkykk3kkfk+kjkkk*Mkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkO.kkkkkkkkkkkkkkk4o4k.G@&FS46;k4gkvkvk1gkkkkkG>kkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkiukkkkkkkkkkkkmSkSGG&GtrMFktkk9kk%kqkGckkkkkkGkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkcX kkkkkkkkkkukgGGG+;GMxZkOkkutkvk$k#xkkkkkkkk5kkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkNoVkkkkkkktjdGGsikkkGGVk+kmkBkkdkMkGhkkkkkkkkkjkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk X>kkyakk;;kyk7kkxkGkGykkkkkkkkkkkMkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkphk6k9Gqx1kkkkNSkkkkkSk,kk:k2skGmkkkkkkkkkkkb&kkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk+ukGG&=kkkkkkkkkkkkzakkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk.;G6i>kkkkkkkkkk+tkkjkh;kGpkkskkkkkkkkkkkkwrkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk6kG77n:VOk#kkkkkkkkkkkGkkskkqkjx6k; kkkkkkkkkkkkk&kkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk lGGxX,koykkkkkkkkkkkgbkk3k+tkGkkk$kkkkkkkkkkkkkk3kkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk6kGGGFXdkbyukkkkkkkkkkCkkf;kGk41kkkpkkkkkkkkkkkkk=kkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkk4rGG1nyjm%kkkOakkkkkkDkkknkk1koGtkkkkokkkkkkkkkkkkkjkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkk ,GC,5 cZ6kkkkO@kkkk.gkkONk1kkGZkkkk+kkkkkkkkkkkkkk=kkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkOyGG=l#;%2kkkkkOakkkGkkknkkGkkCfkkkk;kkkkkkkkkkkkkkjkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk4GG:*OV@Zkkkkkkpiktpkk 8k56kv9;kkkkkkkkkkkkkkkkkkk,kkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkcGG#s>ykkkkkkk>obGkkk7kkGkkq8kkkkkkkkkkkkkkkkkkkk7kkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk2CGp*0rkkkkkkkk .akkurkp+kbqokkkkkkkkkkkkkkkkkkkkjkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkm#Gpd;bkkkkkkkkktukkDkkGkkxu>kkkkkkkkkkkkkkkkkkkk=kkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkNGgCkFkkkkkkkkkkpXmik<,kkGSkkkkkkkkkkkkkkkkkkkkk&kkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkktyGtVkkkkNkkkkkkkovkkGkkdd4kkkkkkkkNkkkkkkkkkkkkfkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkSGk.kkkkGkkkkkkk;o0kGkk9rkkkkkkkkkGkkkkkkkkkkkw8kkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkbAhkkkkkGkkkkkkkk2t3wkwx;kkkkkkkkkG2kkkkkkkkkkMkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk83MkkkkFGkkkkkkkkkuokkA*kkkkkkkkkkG&kkkkkkkkkkhkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkA=kkkkkGVkkkkkkkkkd.kGbkkkkkkkkkkGZkkkkkkkkk$;kkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk5ykkkkkGGkkkkkkkkkkfdnzkkkkkkkkkaGkkkkkkkkkkgkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkjkkkkkkrGkkkkkkkkkkkdikkkkkkkkkkGDkkkkkkkkkkkkkkkkkkN&wukkkkkkkkkkkkkkGkkkkkkkkObkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkhkkkkkkkkkkkkkkkkkkGkkgkk9ykkkkkkpkkkkkkk2.kkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkykkkkkkkkkkkkkkkkk2gkjzkXkyskkkkkkkkkbkkkhkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkvkkxkk&k4@#kkkkkkkm5kk*kkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk7kkgkkfk&koZkkkkkk%kk;0kkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk2kkkkkkkkkf8k1kktNkjkiXkkkkkhkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk:kkkkkkkkkekk7kk$kkhk@akkkkfkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkobkkkkkkkk4#kr+kkjkOkkXhkkk ykkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk5kkkkkkkkkCkkGkk6Zk%kkkkkkk7kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkik kkkkkkkkCkkGkkgkk%kkkkkk8pkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkpkskkkkkkkgbkOrkkgkV8kkkkkk9kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk2NkkkkkkkGkkGkkNXkhkkkkkkk3kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkGkkkkkkkukkkkkkk4&kkfkk$kk$kkkkkk$kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkFGkkkkkkk+kkkkkkkqkkFSkkfkz kkkkkkqkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkGGckkkkkkukkkkkkkDkkjkk>ykdkkkkkkk7kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkhGGdkkkkkNSkkkkkk=4kkjkk*kk*kkkkkkk%kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkGGCGkkkkkkkkkkkkkGkka;kk=kk&kkkkkawikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkAGG%Gkkkkkkkkkkkk4&kkjkkkukXckkkkmn$.kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkk>G3Gnv%kkkkkkkkkkkCkkk&kk%kk=kkkkkkg3Xkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkGGe91gGkkkkkkkkkkkCkkpkkkjkk$kkkbS.99@kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkk GGA$B%pskkkkkkkkkd4kk=kkkdkVZkkkkbbdG3kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkGGAG$Gi$v;kkkkkkkk7kk>skk+kk%kkkkkk0OG,okkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkktGBqCaha9dXkkkkkkkk&kkhkkkhkk$kkkkk<#BvG9mpsfN>kkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkGGGeD=,Chtswkkkkkk1kkkjkkkskk+kkkk6mX@:BC:kNrm3$fwitkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkGGGj5*gl$12=kkkkkk1kkNokkozkskkkkkk0y&%1GtFkykkF$kckdpftkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkGAG5en#Dwyk+7kkkkZ kkjkkkxkkgkkkkkkkF hCnGlgO.xz>4b+dyikkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkbot&h akGGG5GG*@syi06.Gkkhkkrwkk bkF2kkkkkkkwp +*=DGGjokkSjNXk tkkkk2ud$2kkkkkkkkk", +"kkkkkkkkkkkkkkk6p3$48wNckknGG=*MfNSt.a*c#*Akkk3kkk*kk&kkkkkkkkkX@loD=Ge$apykkkNkkkm2mVVkkk8sXkkkkkkk", +"kkkkkkkkkkkkkXi4k>0NsZk+sSrGB,Cs,lMAX46fkkGlak&kkk&kk&kkkkkkkkkpt$$,%MGh%>kkkbFrwm2k4>kbkkmkN9#kkkkk", +"kkkkkkkkkkNvy6%SkkkbN8awiSkGeDBpl0Fdc0.k0Si;8G&kk4VkkS2uk", +"kkkkkk%zkkkk<800840kkkkkkkkkFGDG:O aOOkVoa.k%kkkbSk>Gn&GGBnD9uVwkzkkNZ4kkk6VSkkkGGCps&$k$gkDk4k5kkkgkk>kkkkkkkkkkkz0bd#vGvbFkkkk4mkkZNkkkkt6kkzrkkFpNkk>owbkkkrNkmw;y mk", +"kkk$kkkbkykkAkkkkkkkkkkkkkkkkkkkwoZ+$3orkkkkkk4 Zkkkkk.0kkkbkk4kbukkk", +"kkkhkk8Nkkb8>zckkckkbFVkkkkkGBGOj%r;#k2+kkkkkkkkkkkkkkkyww02k.wkkkk", +"kkkXscihna6kwkbzkkk0iVz0y8kckVykkGC7oZGky8,kkkkkkkkkkkkkkwZkkFuh=jll3kkkkkkkk<2kkkkkkkkVw;k ;hckkkkk", +"kkkkklkkk>wr6kkk>opkk.0k2kFkO;ZbkkqGxdM8Fpkkkkkkkkkkkkkkkkk FVkNn%F5kkkkkk2tcckkkk2kVtiukSwyokkkkkkk", +"kkkkkkXOkkkkkkkyVkkkkVSZZ kFNF48Nkk8Gl5FiakkkkkkkkkkkkkkkkkV0 dpka&kkkkkkkkkkkkwyF4kkzzkruykkkkkkkkk", +"kkkkkkkzsykkkNpkkm4wF2w2N8 c #213225", +", c #253529", +"< c #293B2D", +"1 c #28372B", +"2 c #2D3C30", +"3 c #343D34", +"4 c #2D4332", +"5 c #2F4935", +"6 c #314335", +"7 c #304836", +"8 c #344B39", +"9 c #384D3D", +"0 c #374539", +"q c #39503E", +"w c #36503C", +"e c #2A402F", +"r c #3C5242", +"t c #3D5A44", +"y c #3B4E40", +"u c #3F6046", +"i c #44523D", +"p c #415445", +"a c #445B49", +"s c #455948", +"d c #4E564D", +"f c #44624B", +"g c #46694E", +"h c #48644E", +"j c #4B6B52", +"k c #4B6451", +"l c #546B58", +"z c #53735B", +"x c #56785C", +"c c #506F53", +"v c #5B7A63", +"b c #597762", +"n c #5E6E64", +"m c #67755A", +"M c #667767", +"N c #6C736B", +"B c #5C8464", +"V c #599165", +"C c #5F926A", +"Z c #63846B", +"A c #638A6C", +"S c #6A8B72", +"D c #668970", +"F c #6B9374", +"G c #6A9B75", +"H c #6A9775", +"J c #729B7C", +"K c #72957B", +"L c #6E8B70", +"P c #6EA07A", +"I c #72A27C", +"U c #78A37A", +"Y c #6E825E", +"T c #779C81", +"R c #76A581", +"E c #7AA484", +"W c #7AA985", +"Q c #7EAC8A", +"! c #7DA588", +"~ c #E65C00", +"^ c #E96A00", +"/ c #E87600", +"( c #F46A00", +") c #F47601", +"_ c #F17A17", +"` c #DD6A00", +"' c #899070", +"] c #98A879", +"[ c #8DA97A", +"{ c #A8A977", +"} c #EC8500", +"| c #F38400", +" . c #F38B00", +".. c #FA8A05", +"X. c #F49300", +"o. c #FB9302", +"O. c #FB9A02", +"+. c #FC970A", +"@. c #FC9A15", +"#. c #F88C13", +"$. c #FA9526", +"%. c #FDA30B", +"&. c #FCA204", +"*. c #FDA313", +"=. c #FDA31A", +"-. c #F9A919", +";. c #F5AC18", +":. c #EDAB29", +">. c #EBB439", +",. c #FBAB23", +"<. c #F7A927", +"1. c #F8AB34", +"2. c #F9B22A", +"3. c #F8B538", +"4. c #EBAE33", +"5. c #DEB956", +"6. c #DDBC66", +"7. c #DDBE76", +"8. c #E9B747", +"9. c #E6BA56", +"0. c #F7BA46", +"q. c #F5BC56", +"w. c #EFAB47", +"e. c #E4BC66", +"r. c #E4BD75", +"t. c #F9C13C", +"y. c #DDC16B", +"u. c #DCC378", +"i. c #EAC259", +"p. c #F8C248", +"a. c #F7C556", +"s. c #F7CE5A", +"d. c #E8C568", +"f. c #E3C374", +"g. c #E5C777", +"h. c #F5C865", +"j. c #F5D26F", +"k. c #DCC05E", +"l. c #8B9488", +"z. c #9B9C94", +"x. c #989C98", +"c. c #8D938A", +"v. c #82AE8B", +"b. c #83A786", +"n. c #83AE90", +"m. c #8AAB91", +"M. c #85B08E", +"N. c #86B191", +"B. c #8AB494", +"V. c #8CB698", +"C. c #99A398", +"Z. c #91B89A", +"A. c #94B59A", +"S. c #99A687", +"D. c #99BEA2", +"F. c #98B8A1", +"G. c #9CA5A5", +"H. c #A2A29D", +"J. c #A7AB98", +"K. c #ABB488", +"L. c #ACB298", +"P. c #B1B78B", +"I. c #B0B49C", +"U. c #B3B797", +"Y. c #B1AB86", +"T. c #A4A5A3", +"R. c #A5A9A5", +"E. c #A9AAA4", +"W. c #ABACAB", +"Q. c #A5A8A9", +"!. c #ABADB1", +"~. c #AAB3A8", +"^. c #ACB2B3", +"/. c #B1B4A3", +"(. c #B3B4AB", +"). c #B4B8A3", +"_. c #B5B8AB", +"`. c #B8BAAC", +"'. c #B9B9A6", +"]. c #B2B3B3", +"[. c #B5B5B8", +"{. c #B5B9B3", +"}. c #B5B9B9", +"|. c #B9BAB3", +" X c #BCBDBB", +".X c #B8B6B3", +"XX c #B0AEA7", +"oX c #9C9D9F", +"OX c #BDBEC1", +"+X c #B8BBC4", +"@X c #ACB6C1", +"#X c #9DC1A5", +"$X c #A2C4AA", +"%X c #BEC1BC", +"&X c #B9C2B6", +"*X c #B1C7AE", +"=X c #BBC29F", +"-X c #BEC1C2", +";X c #BCC3CB", +":X c #BFC7D0", +">X c #C3B290", +",X c #C3BDB0", +".8.9.e.y..>.0.q.h.e.r..q.a.i.h.e.y.u.wX7.7.5.5.8.6.7.3XyX9X.>.w.8.i.i.i.9.6.7.r.e.5.8.>.8.5.d.y.7.7.e.9.5.8.4.5.y.3XKXUXIXIXIXIXIXUXIXIXUXIXUXHXSXJXUXSXCXCXCXCXCXCXCXCXCXCXCXCXmXmXCXmXNXNXNXnXnXmXnXBXnXBXnXnXnXVXbXVXbXgXdXdXpXpXpX6X7XpX&XF.N.N.N.N.V.n.V.V.Q V.V.Q V.V.Q n.V.V.V.Q V.V.F.V.V.V.V.V.V.V.Q V.V.V.V.V.Q D.Q V.Q D.Q D.#XQ Q D.Q D.Q V.V.V.V.V.V.Q V.V.Q V.B.V.V.V.V.n.n.n.W n.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX^.kXNXnXmXZXmXnXnXnXzXzXlXgXgXgXgXzXVXzXgXgXgXgXgXVXVXVXVXzXgXgXVXgXbXlXzXbXbXbXzXbXgXdXhXdXjXhXmXNXNXNXNXNXMXNXHXSXHX4Xu.u.g.g.g.g.2Xu.g.wXf.d.i.8.9.0.8.w.>.>.0.0.p.i.i.9.9.9.e.9.8.8.>.8.9.i.y.e.6.5.8.8.>.8.5.y.2XAXKXIXIXIXIXIXIXIXIXIXIXUXUXSXIXIXHXCXCXCXUXJXCXUXJXCXCXCXCXCXZXmXNXCXNXmXZXmXmXmXmXnXNXnXnXgXVXnXbXcXdXaXpXsXpXpXsXjXsXA.A.B.N.B.N.V.V.Q V.V.V.V.V.V.V.V.V.Q V.V.n.V.V.V.V.V.V.V.V.V.Q Q V.Q V.V.V.V.V.V.V.V.V.D.Q Q Q Q Q D.Q F.Q V.n.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.W V.V.N.m.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX5XAXnXNXZXmXnXzXzXnXlXbXzXbXgXzXgXgXgXgXzXVXVXVXVXVXzXzXgXVXVXVXgXgXgXbXgXbXbXbXbXzXbXgXlXhXdXNXMXNXmXNXNXmXSXIXIXHX3X7.y.g.g.u.u.g.u.u.g.f.k.i.q.0.0.8.0.8.3.8.8.8.8.8.q.9.9.w.>.4.4.1.4.8.9.i.5.5.5.8.8.8.8.5.y.rXKXKXLXIXIXKXIXIXUXUXIXIXHXIXIXUXIXKXUXCXUXCXJXJXCXCXCXCXCXCXZXCXSXmXmXNXNXNXZXHXmXmXmXnXnXVXgXVXgXgXdXdXaXsXaXpXsXjXsX*X*XB.B.V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q Q Q V.V.V.V.V.V.Q V.V.V.V.V.Q Q D.Q D.D.Q D.Q Q V.V.n.V.V.Q V.Q V.V.Q n.B.V.V.V.V.V.V.V.V.V.V.N.B.B.V.B.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX{.zXmXZXmXnXmXzXzXnXzXzXbXzXgXzXgXgXgXgXgXgXgXgXVXVXgXVXVXVXgXVXVXVXVXVXbXbXbXnXbXzXnXbXzXbXgXNXmXNXNXNXmXNXHXHXHXJXeXf.g.j.g.g.u.u.u.g.g.d.i.9.0.3.8.0.0.8.3.3.>.t.8.8.w.8.w.3.:.:.:.4.>.p.8.9.9.e.9.w.5.8.5.9.y.wX0XLXIXUXLXKXAXHXHXHXKXIXKXUXKXUXUXUXDXDXUXUXCXUXCXCXCXCXCXCXmXCXCXZXHXJXZXmXHXHXnXmXmXnXbXgXgXgXkXdXdXdXsXpXdXaXdXjXpX%XA.V.V.V.V.V.V.V.V.V.V.n.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q Q Q V.n.Q V.V.V.V.V.Q D.Q V.V.Q Q @XQ D.Q F.Q Q V.Q Q V.Q V.m.Q V.V.n.V.V.V.V.V.V.V.V.V.V.V.V.V.B.V.n.V.n.B.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX*XSXZXmXmXmXmXnXnXzXbXgXbXnXgXVXzXgXVXgXgXgXgXdXdXhXgXgXVXVXVXVXBXBXnXnXmXCXmXNXNXNXmXmXmXBXnXmXNXNXNXMXNXNXAXHXFX2Xf.g.j.j.u.g.g.g.d.g.h.i.8.>.>.w.0.0.0.>.w.>.>.>.>.>.3.4.<.;.2.<.:.4.3.8.8.9.w.9.9.8.w.5.5.y.u.u.0XPXLXKXLXHXHXAXAXKXIXUXKXUXUXUXUXUXCXUXCXJXUXUXCXCXCXCXCXCXCXDXZXZXZXZXHXnXZXNXmXnXnXbXgXbXbXdXjXxXxXsXpXiXdXdXdXpX~.V.V.B.Q B.V.V.V.V.V.V.V.V.V.V.V.V.n.n.V.V.V.Q V.Q V.V.Q n.V.V.V.V.G.V.V.V.V.V.V.V.V.V.V.D.V.Q D.Q D.Q V.Q Q n.n.Q V.n.n.V.n.V.V.V.V.V.V.V.n.B.V.V.V.N.B.B.n.n.V.B.n.V.V.Q YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX-XnXZXZXmXmXmXnXzXnXbXzXgXnXVXVXVXVXgXVXdXgXdXVXdXgXgXVXVXmXVXVXmXBXnXmXmXNXmXNXmXZXNXmXNXmXNXNXCXHXmXNXNXAXAXGX2Xg.g.j.j.j.j.j.g.y.d.h.q.i.0.3.4.>.p.p.0.3.>.3.>.3.2.1.2.<.,.;.-.<.:.4.>.>.8.0.9.w.9.5.5.5.i.k.k.y.3XtXHXKXGXGXNXHXHXHXKXKXKXUXKXIXIXJXUXUXJXJXCXUXCXCXCXCXCXCXCXCXCXZXCXZXZXnXHXmXmXBXbXgXgXbXgXdXsXsXpXpXkXaXdXdXdX5XB.V.V.V.Q n.V.V.V.V.V.V.V.V.V.V.n.V.V.V.V.V.V.Q Q Q V.Q V.V.V.V.n.V.V.Q V.Q V.V.V.V.V.V.V.V.V.Q D.D.V.Q Q V.Q Q V.V.V.n.n.n.V.B.n.V.V.B.B.V.n.n.V.V.V.V.V.N.n.n.V.V.V.m.n.n.Q R YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX&X-XZXZXZXmXmXnXnXnXbXnXzXgXzXzXVXgXgXgXgXgXgXdXdXVXhXVXmXmXmXVXmXNXmXmXNXNXNXNXNXNXnXNXmXNXNXmXNXNXNXNXNXNXHXFXwXf.f.g.g.j.j.j.y.d.i.q.q.q.3.2.<.4.3.0.3.3.<.2.,.;.;.<.,.,.=.,.<.:.1.0.p.8.w.8.8.w.w.8.8.8.5.5.9.k.y.2XyXGXKXNXGXGXGXGXKXLXUXUXUXIXIXJXDXUXCXSXCXUXCXUXUXCXUXSXCXCXCXCXCXZXHXZXZXmXmXzXbXbXbXdXdXjXpXpXjXjXpXdXdXdX5XZ.B.V.V.V.B.V.V.Q V.Q Q V.V.V.V.V.V.V.V.V.V.V.V.n.V.V.Q V.V.V.n.V.V.Q V.Q V.V.V.V.V.V.V.V.V.V.V.D.Q D.Q V.Q Q Q n.Q V.Q n.n.n.Q V.V.n.Q B.n.n.n.n.V.V.V.n.n.B.B.B.V.n.V.n.V.V.V.V.R R YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXkXhXZXZXmXzXnXnXnXnXgXnXzXbXzXgXgXgXdXhXjXgXhXhXjXhXiXVXnXmXmXmXNXmXmXNXNXNXNXNXNXNXnXNXBXBXBXHXmXZXHXmXJXHXvXg.f.d.d.d.d.d.d.h.q.9.q.q.0.1.<.<.<.1.3.1.,.,.-.*.%.;.-.=.=.=.-.-.1.>.0.0.8.8.w.>.>.w.8.8.5.5.9.9.5.y.u.4XAXGXMXGXGXNXNXHXNXAXIXUXIXIXUXUXJXJXSXSXIXJXSXSXSXJXJXJXSXCXZXCXmXCXZXmXmXnXnXbXgXgXdXdXdXjXkXaXdXlXdXdXdX^.B.B.B.B.V.V.V.m.Q V.Q Q V.V.V.V.V.V.V.V.V.V.V.V.n.Q V.Q V.V.V.V.V.V.Q V.V.Q V.V.V.Q D.V.V.D.V.V.Q V.V.Q V.Q V.V.V.n.V.n.V.V.V.n.Q n.n.n.n.V.V.V.V.V.V.V.V.n.n.n.V.V.V.n.V.n.V.B.V.$XQ W YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX}.-XZXZXmXZXmXmXmXzXnXzXnXVXgXgXgXgXdXgXhXjXjXgXdXgXVXdXVXZXmXHXZXmXZXmXHXCXNXNXnXBXNXnXBXNXNXmXmXHXmXHXCXHXvXg.f.d.d.d.i.d.i.h.q.0.3.0.0.1.,.=.-.<.2.,.-.*.%.%.%.&.%.%.=.=.-.<.:.1.8.0.8.4.4.3.4.4.4.w.8.w.9.9.9.y.u.3X0XBXGXGXGXGXGXHXGXNXHXIXIXIXUXJXUXIXSXSXSXSXSXSXSXSXJXCXSXCXCXCXCXZXJXmXNXBXnXbXgXgXlXdXdXpXaXdXdXlXdXdXfXA.B.n.B.N.B.V.V.n.Q V.n.V.V.V.V.V.V.V.V.V.V.V.V.V.n.V.V.V.Q V.Q V.Q V.Q V.V.Q V.Q Q D.Q V.V.V.V.V.V.Q V.D.V.V.Q Q n.V.n.n.n.n.V.V.V.B.V.n.n.n.n.B.V.n.n.Q Q Q n.V.n.n.V.n.n.V.n.V.Q V.;X*XYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX:XkXZXZXZXmXmXmXZXnXzXzXzXzXgXgXgXhXgXhXdXgXjXgXdXdXVXVXBXmXmXNXNXCXNXZXNXNXNXNXnXBXNXNXnXBXmXNXNXNXNXHXFXyXr.r.h.d.d.i.9.i.q.q.0.3.3.1.<.=.=.-.-.-.-.%.&.&.O.&.O.&.%.*.-.=.:.:.4.4.w.4.4.:.4.:.:.4.8.4.5.8.9.9.i.y.u.2XvXvXGXGXGXMXGXMXNXKXIXIXIXJXSXIXSXSXSXSXSXSXSXCXSXJXJXCXSXCXCXCXZXZXmXNXNXnXlXgXdXdXdXdXdXdXdXdXjXdX%XF.V.B.N.V.V.V.B.V.B.Q V.n.V.Q V.V.V.V.V.V.V.V.V.V.Q Q n.V.Q Q V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.F.V.F.V.V.Q V.V.V.V.V.V.V.n.V.n.V.n.B.Q n.B.B.V.N.B.B.n.V.V.V.V.V.n.m.V.V.V.V.V.V.Q B.V.kXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX{.;XmXmXZXZXZXZXzXnXnXnXbXnXzXzXgXjXgXgXhXgXhXdXgXdXVXVXnXmXNXNXNXCXNXNXNXNXNXBXNXNXBXNXBXBXBXNXNXNXNXCXFXeXg.r.e.e.e.q.i.p.0.0.3.1.2.1.,.*.%.+.=.=.*.%.&.&.&.O.O.&.%.+.@.;.<.:.1.2.:.:.:.:.<.:.:.:.4.4.8.9.9.9.9.e.y.u.4XvXGXGXGXLXMXLXLXHXIXIXIXJXSXSXSXSXSXSXJXSXSXSXJXCXSXSXNXCXCXCXNXHXmXnXnXbXjXdXdXjXdXdXjXpXjXjXdXdXF.V.B.B.V.V.V.V.V.V.V.V.V.n.n.V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.Q V.Q V.V.V.Q V.V.Q V.Q V.V.V.V.V.Q V.F.D.V.D.V.V.Z.V.Z.V.Q V.n.V.n.V.V.V.N.Q n.Q n.n.n.n.n.n.n.Q n.n.V.V.Q V.V.V.V.V.n.V.$XYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX^.;XNXZXmXZXmXmXnXnXnXgXbXgXgXgXlXgXhXhXhXdXaXhXdXhXVXVXBXNXCXNXCXNXNXNXNXmXNXNXnXNXBXNXBXBXNXNXNXNXAX0X2Xf.e.e.9.e.q.p.p.3.3.2.,.,.<.=.+.&.+.*.*.%.&.&.O.O.O.O.O.&.+.-.,.<.<.;.<.<.:.:.-.<.:.:.:.4.8.8.8.q.9.9.5.6.u.u.tXMXLXvXGXMXLXMXHXHXJXIXSXIXSXSXSXSXSXSXSXSXJXJXSXSXSXCXNXCXNXCXZXZXNXVXgXgXdXgXcXdXdXdXjXjXjXdX^.V.V.B.V.V.V.V.n.V.V.n.V.V.n.n.Q n.V.V.V.V.V.V.V.V.V.n.V.V.V.V.n.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q Q V.V.V.V.V.V.V.V.V.V.V.F.V.V.F.Z.V.V.Q V.V.n.V.V.V.V.n.n.V.V.Q V.V.n.V.V.V.V.B.V.B.V.V.V.V.Q V.V.V.V.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXG.+XzXZXmXZXmXzXnXnXzXnXbXzXzXgXlXgXdXdXdXdXdXhXdXdXiXVXnXNXCXCXCXHXHXmXNXNXBXnXBXNXNXmXnXBXBXNXNXNXAXtXg.f.r.e.h.q.9.p.t.t.3.2.-.-.=.%.&.&.+.+.=.%.+.&.X.O.X.O.O.O.&.*.,.2.-.=.%.-.@.:.$.<.$.:.4.>.8.8.8.9.9.9.5.5.y.u.9XPXLXLXGXLXMXLXHXIXHXIXSXSXSXSXSXJXJXJXSXSXJXJXJXSXNXSXJXCXCXmXHXmXNXbXgXdXgXdXdXdXdXcXjXlXdXjXA.B.N.B.V.n.V.V.V.V.B.Q V.Q Q n.Q V.n.V.V.V.V.V.V.V.n.V.V.Q n.V.V.Q Q V.n.V.n.V.V.Q Q V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.Q V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.n.V.V.Q V.V.V.V.V.V.Q V.V.V.m.B.V.V.V.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXG.gXnXZXZXmXmXmXnXVXbXbXgXgXzXzXbXdXgXdXdXdXgXdXVXdXVXVXNXCXCXCXCXZXNXNXBXBXNXBXNXNXBXmXBXNXNXNXNXHXtXwXj.h.q.9.i.p.p.t.t.3.2.-.%.%.&.O.O.&.+.=.=.%.&.O.X.O.X.O.O.&.*.,.=.*.O.&.&.-.-.-.1.:.:.4.>.8.8.9.8.8.8.5.5.5.y.9XvXvXLXFXGXGXHXHXHXIXSXSXIXSXSXJXJXJXCXSXSXSXSXJXNXSXNXNXCXNXCXZXmXnXVXgXdXdXdXdXdXdXcXbXjXdX%XV.V.V.n.V.n.V.V.Q W R R Q R Q Q Q Q Q V.V.V.V.V.V.V.V.n.V.Q V.V.V.n.V.V.V.V.n.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.Z.Z.V.V.n.V.V.n.n.n.! Q ! Q Q Q V.V.V.V.V.n.V.V.V.V.V.V.V.V.Q V.Q Q B.V.V.m.Q V.B.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX^.gXZXmXZXnXNXnXnXzXzXgXgXbXzXgXgXhXhXhXdXdXiXVXhXVXVXNXNXCXCXZXNXNXNXNXnXBXnXBXBXBXNXNXBXNXNXMXAXtXwXj.h.e.q.p.p.t.p.p.p.3.;.*.+.O.O.O.&.%.=.=.@.O.O.O.X.X.X.O.O.%.@.=.O.O.O.O.%.*.-.$.$.4.w.w.9.8.8.8.8.>.8.8.6.7.0XGXFXGXGXGXGXHXHXSXIXSXHXSXSXSXSXSXSXSXSXSXNXCXCXSXSXNXCXNXCXNXmXmXbXVXdXgXcXdXjXbXdXdXdXcXsXA.B.V.V.V.n.V.Q Q R T R R R R R Q ! ! Q V.V.V.V.V.V.V.V.V.V.V.G.V.V.n.Q V.G.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.V.V.V.V.F.V.n.Q n.m.V.n.V.V.B.B.Q Q V.V.Q n.B.n.V.V.V.V.V.V.V.Q V.n.n.V.B.n.B.V.n.V.B.B.V.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX-XnXnXmXnXzXmXbXzXbXbXgXgXgXgXgXlXhXlXdXaXhXdXdXgXVXnXNXCXZXHXZXBXmXBXNXBXBXBXBXBXnXMXmXNXAXkXAX4Xj.d.s.i.p.p.t.t.p.s.s.3.2.=.+.o.O.O.O.O.+.%.+.O.+.o.X.X. .X.o.o.+.+.O.o.X.O.X.;.@.-.$.:.>.8.t.>.>.>.>.>.>.8.5.7.tXGXFXGXGXGXGXHXHXJXHXJXAXHXSXHXSXSXSXSXSXHXSXSXSXNXSXSXCXNXNXCXNXnXbXgXdXdXdXcXcXgXcXdXcXdX^.v.R T T T T R R R G G R R R R Q Q Q R R Q V.V.V.V.V.V.V.n.V.V.D.V.V.V.Q V.V.V.V.V.G.V.V.Q V.D.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.V.n.V.V.V.V.Q n.n.n.V.V.V.V.V.V.V.n.n.V.V.V.V.n.V.V.V.B.V.V.Q Q B.Q V.V.n.n.Q V.V.n.V.n.n.B.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXx.-XnXmXNXnXnXnXnXzXgXgXgXgXjXgXhXgXdXlXdXhXdXdXhXVXBXNXCXHXZXHXmXBXNXBXmXNXnXNXbXMXnXMXMXAXAX0X4Xg.d.s.i.8.t.3.t.p.p.a.p.1.,.+.o.o.o.X.O.+.o.o.+.O.o.o. . .X.X.X.X.X.X.o.X.X.@.;.;.@.:.<.4.>.t.t.:.:.>.>.5.5.6.7.9XFXGXGXFXGXGXHXHXJXIXUXIXIXSXSXIXHXSXSXSXNXNXSXSXNXNXNXCXCXCXNXnXBXgXdXgXgXjXcXgXcXgXcXcXuXS b c j g j x C G R R G R Q Q R Q R Q R R Q V.V.V.V.V.V.V.V.V.V.V.Q n.V.V.V.V.n.V.V.V.n.V.V.V.V.F.V.V.Q D.V.V.V.V.V.V.V.V.V.V.Q V.V.V.F.V.V.V.Q Q V.V.V.V.n.V.V.Q V.V.V.Q Q V.Q m.V.V.Q V.V.V.V.V.Q V.Q n.V.V.V.n.n.Q V.n.V.n.n.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX!.lXnXNXnXnXnXzXgXzXgXgXlXhXjXhXdXdXhXdXdXaXhXdXVXnXnXNXHXmXmXHXHXmXBXBXBXBXNXMXnXBXBXmXAXBX4Xu.d.d.s.p.0.3.2.2.2.t.p.a.0.1.+.+.o.o.X.o.X. . .O.&.+.o.X.} X. . .X.X. ...o.o.@.@.@.@.;.:.4.4.:.;.;.;.:.k.5.9.6.u.eXvXvXvXGXGXGXMXKXIXUXUXUXUXIXIXUXSXHXHXSXSXSXAXNXSXNXNXNXCXCXmXnXbXgXbXbXjXbXdXbXbXgXbXuXl.b j g g g g g z C G G R G W Q R Q R Q Q R Q V.V.V.V.V.V.V.V.V.V.G.V.V.n.Q V.Q V.V.V.V.V.V.V.V.V.V.V.V.@XF.V.D.V.D.D.V.V.V.Q Q V.Q V.V.V.V.V.V.V.Q V.n.V.V.V.V.n.V.V.V.V.V.Q Q V.n.V.V.V.V.B.V.V.V.B.n.V.V.Q V.V.Q n.n.n.Q n.n.n.N.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX%XnXnXnXnXnXzXnXzXzXzXlXlXgXgXhXdXdXhXdXdXhXdXVXBXnXNXmXHXNXmXmXBXNXBXBXNXnXMXnXBXMXmXAXvX4Xg.y.s.i.p.3.2.;.,.2.3.3.p.0.1.+...o.o.o.o... .X.O.=.,.@.+.X.} } . . . . ...o.X.#.#.;.*.-.:.<.;.;.;.>.:.>.8.9.d.7.2X3X0XcXFXGXGXHXLXUXIXUXUXUXUXIXSXSXSXSXSXHXNXSXCXSXHXJXNXNXNXNXbXbXgXjXbXgXcXdXbXdXVXVXx.z j g g g g g g j v H R R R W R Q R Q Q Q R Q V.V.V.V.F.V.V.V.V.V.n.V.n.V.V.V.V.V.Q V.V.V.V.V.V.V.D.V.V.V.V.V.V.V.V.V.V.V.V.V.Q Q V.V.V.V.n.V.n.V.V.n.n.n.n.V.V.V.V.Q V.V.V.V.Q V.V.n.V.V.V.V.V.V.V.Q V.V.V.V.n.V.V.n.n.n.n.n.n.Q N.V.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX^.AXmXnXZXnXzXVXgXgXbXgXbXgXgXdXdXhXdXiXdXhXgXnXBXZXZXHXmXHXBXNXNXBXNXnXBXBXBXBXBXBXcXqX2Xg.d.d.s.t.2.,.-.=.-.2.3.3.3.-.O.o.o.+.@.+...| .X.@.<.$.+. .} . . . . . ...o.o.@.=.@.*.*.*.;.-.;.:.:.>.>.8.8.i.y.u.u.2X3XtXGXGXGXKXKXKXUXIXIXIXIXIXSXUXHXHXSXSXSXNXSXNXNXCXmXmXnXnXgXgXbXdXbXdXcXVXVXVXiXn a j g g g g g g j z C G R R R Q Q R R Q Q Q Q V.V.V.V.V.V.V.V.V.Q V.V.V.Q V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.V.V.Q Q V.Q m.V.n.V.V.V.V.V.V.n.Q V.n.V.V.V.Q V.V.V.V.V.V.n.V.V.V.V.V.V.V.V.Q V.V.V.V.V.n.V.V.n.n.n.n.n.n.V.V.V.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXA.7XzXzXZXzXnXzXbXbXgXgXgXgXgXhXdXdXdXdXgXdXgXgXnXNXmXHXmXBXMXNXbXNXnXMXBXBXBXnXnXBXBX3Xg.g.d.s.a.t.2.-.-.,.2.2.t.3.,.@.O.O.o.O.@.+.| | | | +.$.@.+. . .} .} | X.} .o.o.=.=.=.+.%.*.*.-.<.:.>.8.8.8.i.5.d.d.u.7. , 5 r t g g g g g j g V R R R R R Q R Q R Q Q V.n.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q Q V.V.V.n.V.V.V.V.D.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.V.n.V.V.V.n.n.n.V.V.V.n.V.V.V.V.V.V.n.V.V.V.B.V.Q Q V.V.V.V.n.n.V.V.V.n.V.V.m.n.n.n.V.Q V.B.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXV V V V V V V J R.jXmXnXnXnXzXgXgXgXgXgXhXdXdXdXiXVXiXdXVXVXnXNXNXNXNXNXBXBXNXBXBXnXBXHXJXHXIXHX8X > e e e e 5 t u g g g z T G R R R Q R Q R Q Q V.V.n.V.V.n.V.V.V.D.F.V.V.D.V.V.V.V.V.V.Q V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.V.V.V.n.V.V.V.V.V.V.Q V.V.V.V.V.V.Q V.m.V.V.V.V.V.V.n.V.V.V.V.V.V.V.V.B.V.V.V.V.n.V.m.V.V.V.V.V.V.n.V.V.V.n.n.n.B.V.Q V.N.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXV V V V V V V V V G &XzXBXnXnXzXVXnXbXVXbXdXjXgXVXiXVXiXiXhXVXnXBXNXNXNXNXmXBXnXNXBXBXBXJXIXIXHXHX0XeXd.d.a.t.2.3.0.s.s.s.p.1.=.+.+.| | ) } } X.o...) ) / / / / ` ` } } ..o.o.o.+.@.*.+.X.X.X.X.O.&.-.<.>.>.>.t.4.>.>.8.5.5.k.y.u.8XvXLXLXAXNXAXNXSXSXSXHXHXSXSXJXJXHXZXHXBXnXBXBXbXgXcXgXcXcXcXcXcXcXE.d > > > ; , ; ; > 5 5 u g j V C R R R R R Q R Q V.V.V.Q V.V.n.V.V.V.V.V.D.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.Q V.V.V.V.n.V.V.V.V.n.n.n.V.V.V.V.n.V.Q m.V.n.n.V.V.n.n.V.V.V.V.n.Q V.Q V.V.n.n.n.n.V.B.n.V.n.n.n.V.V.V.V.V.V.m.V.Q V.n.V.V.n.n.B.B.m.B.Q Q Q n.B.B.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXV V V V V V V V V V R aXBXzXzXnXVXnXgXgXgXhXhXgXVXVXiXdXdXgXgXnXBXNXNXBXNXBXNXBXnXMXbXNXHXUXIXJXHXGXeXg.s.a.3.2.2.3.p.s.s.p.0.=.-.@.+.| } | } X.....| / / / / / / } } } | o.X. .+.@.+.+.X.X.X.X.O.&.-.2.4.>.4.:.:.4.>.8.9.5.y.y.u.9XAXPXAXMXAXAXHXHXAXAXSXHXNXHXNXJXHXHXBXmXmXmXNXbXgXbXbXbXgXcXbXcXdXn > > > ; ; ; ; ; ; e e 5 g B C R R R R R R R Q Q V.V.Q V.V.n.V.V.V.V.V.D.V.V.F.V.V.V.V.n.V.Q V.V.V.Q V.V.V.Q V.V.V.V.n.Q V.Q Q n.Q n.n.V.V.V.n.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.n.n.Q n.N.N.n.V.B.V.V.V.V.V.V.V.V.V.V.V.Q V.n.V.V.n.n.V.n.V.V.n.Q Q Q V.n.n.V.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXV V V V V V V V V V H m.;XlXbXzXbXgXzXbXgXgXgXgXdXVXdXhXgXVXgXnXnXnXNXNXNXHXBXNXMXnXBXHXIXUXHXHXHXHXeXd.i.p.3.2.,.2.3.p.p.0.0.2.<.,.@.X. . .X.+.+.#...) ^ ^ ^ / ` ` / / / | } } ..o.+.O.&.X.X.&.&.&.*.,.2.>.2.:.:.4.>.8.5.k.d.u.2X9XAXAXMXAXAXAXHXHXAXNXSXAXHXSXJXHXZXHXHXVXVXBXmXbXcXbXbXgXcXbXBXdXc.3 1 , > = ; ; ; ; ; e 5 r g C R C R R R R Q Q V.V.V.V.V.V.n.V.n.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q Q n.V.n.V.n.n.V.V.V.V.V.V.Q V.n.V.n.V.V.V.V.V.V.V.n.n.n.n.n.V.n.n.n.Q n.Q V.n.V.V.n.V.V.V.V.V.V.V.Q Q n.n.n.V.V.n.V.V.Q V.Q n.n.n.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXV V V V V V V V V V V H A.hXnXlXgXzXnXgXgXgXgXgXVXdXVXVXgXVXgXBXBXmXmXHXmXNXBXBXMXBXmXAXIXIXIXHXHXMXyXg.q.0.2.-.-.;.2.t.p.3.0.,.=.=.@.+.o.X.o.+.+.#.#.| / ) ^ ) } / / / / / } / | ..o.o.&.&.&.&.O.&.%.-.2.3.2.:.>.5.4.5.9.6.y.u.2X9XHXLXAXHXAXAXHXAXAXAXAXNXJXNXNXCXHXNXmXVXmXmXNXNXnXmXBXBXnXbXbXfXd 7 < > ; ; > ; ; ; ; 5 t g g V C R G R R R Q Q V.V.V.V.n.n.n.n.V.V.V.V.V.V.V.D.D.V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.V.V.Q V.V.V.V.V.n.Q n.V.n.V.V.V.V.Q n.V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.V.Q Q n.V.n.B.n.Q V.n.V.V.V.V.V.V.n.n.n.V.V.V.Q n.Q V.V.n.V.V.B.N.Q n.n.n.n.n.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXV V V V V V V V V V V V H %XjXbXnXgXnXgXgXbXbXgXVXVXBXVXVXgXbXbXBXnXmXmXNXNXbXNXBXnXMXAXIXHXHXAXHXMXvXeXq.3.2.;.-.-.2.t.p.0.3.,.-.3.0.@.+.o.+.o.@.@.#.| / / ( ) / / ^ ^ ` ` / } | . .o.X.X.O.&.*.@.=.=.,.2.2.>.>.>.8.5.6.6.u.g.9XvXLXHXNXMXAXMXMXAXAXAXAXJXHXHXCXHXNXNXBXBXHXmXNXNXNXNXNXnXnXNXnXbXQ.x.l.M ; ; > > e e 5 t g g g V R C R R R R Q V.V.D.V.V.n.Q V.V.V.V.V.V.V.D.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.V.V.n.n.V.V.V.V.V.V.Q n.V.V.V.V.V.V.Q n.V.V.V.V.m.V.Q V.V.Q V.Q n.V.V.V.V.Q n.Q n.Q n.Q N.n.n.n.n.Q n.n.n.V.V.V.V.V.V.m.Q V.Q V.n.n.V.n.Q n.n.N.V.B.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXV V V V V V V V V V V V V T ;XgXBXbXVXbXbXzXnXbXVXnXVXVXbXbXbXbXVXnXmXHXBXBXmXNXmXBXbXHXIXHXHXHXNXMXvXyX9.>.,.,.2.2.p.p.a.0.3.,.1.0.q.<.,.@.=.=.=.$.#.| ) ) ) ( ) ( ( ^ ` ` / | | | .X.O.O.%.,.2.,.=.=.,.,.3.3.0.8.5.9.6.y.u.u.0XLXLXMXAXMXMXAXHXAXAXNXAXAXJXJXJXJXCXBXbXmXmXCXNXZXZXNXmXNXNXNXmXNXnXnXzXiX^.G.n e 5 5 r u g g g V R R R Q W Q V.V.V.V.V.V.V.V.V.V.V.V.V.D.D.V.V.D.V.V.V.V.V.@XV.V.V.V.V.V.V.V.V.Q n.n.Q V.V.V.V.V.V.Q V.Q Q V.V.V.V.V.V.V.V.n.V.Q Q V.V.Q V.Q n.V.V.n.V.n.n.n.Q V.n.V.V.Q B.N.N.V.n.B.B.V.V.V.V.V.V.V.V.n.Q n.n.V.B.n.n.Q n.n.N.N.n.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXV V V V V V V V V V V V V m. XgXgXbXbXVXlXlXbXbXVXVXnXVXbXbXgXbXnXBXnXmXmXNXmXBXMXbXbXnXAXSXHXAXMXGXMX8X9.w.2.2.t.t.s.s.s.a.0.1.3.0.0.<.,.=.=.@.,.$.#.) / ^ ) ( ( ( ( ^ ^ / / / | ) | .+.*.-.2.3.2.-.=.-.2.>.0.i.h.d.r.f.u.u.3X0XLXKXMXMXAXMXMXNXHXAXHXHXHXHXJXHXCXNXVXnXmXZXNXNXmXmXmXmXmXNXnXNXNXnXmXmXnXZXzX:X;XG.t u g g j j D R R R Q Q Q V.Q V.V.Q @XV.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.n.V.V.V.G.V.V.V.V.n.V.V.V.V.Q V.V.Q V.Q V.n.V.V.V.V.V.V.V.Q V.n.V.n.V.Q Q m.V.V.V.n.Q Q V.V.V.V.V.n.n.n.n.Q n.n.n.n.V.n.V.n.Q n.n.Q n.V.n.m.B.B.B.n.Q Q n.n.V.D.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXV V V V V V V V V V V U R.iXdXzXbXVXbXbXgXzXVXVXgXnXgXbXbXcXbXbXbXnXBXmXmXBXNXBXmXBXcXbXMXNXNXAXNXMXvX8Xe.w.3.t.t.p.s.s.j.s.s.0.3.,.-.-.%.*.+.#.#.#.) ) ) ( ( ( ( ) ( ) / ^ / / / / } ..@.,.,.2.2.2.%.;.;.t.t.k.i.s.j.u.g.7.2X3XFXLXHXMXMXGXNXMXAXAXAXAXAXMXNXHXSXNXnXbXNXmXHXmXmXZXmXmXmXmXmXmXmXNXmXNXnXnXBXmXBXmXzXBX;Xx c z B H R R W N.V.N.Q V.V.V.D.Q V.V.V.V.V.V.V.D.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q Q V.V.V.V.V.V.V.Q n.V.V.V.V.V.V.V.n.V.V.n.Q n.n.n.V.V.V.n.n.n.n.V.V.Q Q V.Q n.n.n.n.n.V.Q Q V.V.V.n.n.Q V.V.n.n.V.V.Q V.V.Q n.Q ! Q Q F.:XYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXV V V V V V V C b.~.sXbXzXgXbXgXgXzXbXzXgXbXgXgXbXbXbXgXbXbXbXVXVXVXnXnXNXmXNXMXBXbXcXbXMXNXMXBXGXGX9Xr.8.8.t.p.p.s.j.j.s.p.3.3.,.-.+.O.o...| ) ) ( ( ^ ( ( ( ( ( ( ^ / / / ^ / ` / #.,.<.,.,.2.;.&.;.;.t.8.8.k.i.k.y.7.u.3XvXPXHXLXNXGXNXNXLXAXMXAXAXMXAXSXHXSXmXbXBXmXZXmXHXHXmXmXmXmXmXVXmXnXnXnXnXmXNXmXnXnXnXnXnXnXkX~.v H R W ! n.N.B.B.D.Q V.V.V.V.V.V.V.V.V.V.V.V.V.F.V.V.V.V.V.V.V.V.V.V.D.V.V.V.V.V.V.V.V.n.V.V.V.V.n.V.V.V.Q V.V.V.V.V.Q V.V.V.Q V.V.n.n.V.V.Q n.n.Q Q V.n.n.n.n.Q n.n.V.n.V.Q n.n.n.n.V.Q n.V.n.Q V.Q n.n.Q V.V.Q V.Q n.V.n.V.n.Q Q V.N.V.$XYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXV V V V H G C.dXcXcXzXlXlXlXbXzXgXgXgXVXbXcXbXVXbXbXbXbXbXbXbXgXVXBXBXmXNXBXmXBXbXcXbXBXMXNXNXMXFXvX8Xe.9.q.p.p.s.s.s.s.p.p.3.3.2.@.o.......) ( ( ( ^ ( ( ( ) ( ( / / ) ) ) / / / #.@.=.=.-.;.;.;.;.;.>.8.k.9.9.k.y.y.u.3XvXMXHXMXMXAXMXMXMXMXAXAXAXHXAXAXAXHXnXBXnXNXNXNXJXZXNXmXmXmXmXmXnXBXnXnXmXnXmXBXmXmXnXnXnXnXnXBX;X~.n.W n.n.V.B.n.V.V.V.#XV.V.V.V.V.V.V.V.V.V.F.V.V.F.V.V.V.V.V.V.V.V.V.V.V.V.V.D.V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.Q Q Q G.V.V.n.Q n.n.n.n.n.V.V.n.n.n.n.n.n.n.n.n.n.n.n.n.Q n.V.Q Q n.V.V.V.V.V.Q V.! Q n.n.V.V.n.V.V.Q V.V.V.V.F.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXV F J ~.gXlXlXbXzXlXbXbXbXgXgXzXgXVXgXgXVXgXbXgXbXbXbXVXbXVXbXVXVXnXBXBXBXnXMXbXbXbXbXmXMXBXMXMXvXqXg.q.q.a.p.s.s.s.a.p.3.0.0.0.,.@...#...( ( ~ ( ( ~ ~ ( ( ( ( ( ) | ) | / } } #.@.@.=.,.%.;.;.2.t.t.k.8.5.5.5.y.u.2X9XvXLXMXLXMXGXMXLXMXMXAXMXMXAXAXAXNXnXnXNXBXNXNXnXnXmXnXmXnXBXVXmXmXmXzXBXnXnXnXnXnXnXnXnXnXnXzXBXBXlXlXF.V.B.m.B.B.Q D.Q Q V.V.V.Q Q V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.G.V.V.V.V.V.V.V.V.V.Q Q V.V.V.n.V.V.n.V.V.V.n.V.V.V.V.V.V.V.n.V.n.V.n.n.n.n.n.n.V.V.V.n.n.n.n.n.n.n.n.V.Q n.n.Q V.Q Q V.V.Q V.Q V.V.V.V.V.V.n.Q n.V.V.V.V.V.V.N.N.V.V.Z.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX5X].%XlXlXbXzXbXzXVXVXbXgXlXgXzXgXgXgXcXbXbXbXbXbXbXcXcXVXcXVXgXbXVXMXbXbXnXMXBXbXBXbXMXmXNXMXBXBXvXeXr.q.i.p.a.a.a.0.p.3.p.a.0.0.<.@.#.) ( ~ ~ ( _ ( ( ~ ( ( ) ) ) ) ..#.#.@.@.$.:.:.<.<.-.=.,.2.>.t.9.i.9.5.6.7.7.8XvXLXGXGXMXMXMXGXMXMXMXLXAXAXSXNXNXNXBXnXnXHXmXBXnXNXBXnXBXnXnXBXnXnXBXnXnXnXnXnXzXnXnXnXmXzXBXnXBXzXzXBXBX&XF.V.B.n.Q Q D.Q D.Q Q Q D.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.Q V.V.V.V.@XQ V.V.V.V.V.Q V.V.V.V.V.V.V.Q V.V.n.n.V.V.V.V.V.V.V.V.Q Q n.n.Q V.V.V.Q n.V.Q Q Q Q Q V.Q V.Q V.Q V.n.V.Q Q V.Q V.V.V.V.V.V.n.B.V.n.V.V.V.V.V.V.V.Q V.B.V.V.V.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXH..XpXkXlXlXlXzXbXnXgXzXnXgXbXbXgXbXgXcXgXgXVXVXbXbXbXVXcXgXcXgXcXcXdXVXVXBXNXBXnXnXbXnXBXMXNXMXMXBXvXvXFXwXe.i.i.a.a.a.0.p.p.3.p.0.3.1.#.) ( ~ ~ ~ ( #._ _ ^ ( ( ( ( ) ..#.$.$.<.1.1.w.0.0.1.2.,.<.3.3.8.q.i.e.6.eX2XyXFXFXMXHXMXGXFXGXMXGXMXMXMXAXAXAXAXAXNXNXBXmXNXnXNXBXBXBXBXnXBXnXnXnXnXzXnXnXnXnXnXnXBXnXnXBXzXnXnXzXnXBXzXzXBXlX-XF.V.F.Q Q F.Q #XQ D.Q V.V.V.V.V.V.V.V.Q V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.D.V.V.V.V.Q Q V.V.Q V.V.V.V.V.Q n.Q Q Q Q V.Q Q Q Q Q n.Q V.n.n.Q n.n.V.V.V.V.V.V.V.V.V.V.V.n.Q Q Q V.V.Q V.V.V.V.n.V.V.Q V.n.V.V.V.V.V.V.V.Q B.V.Q B.V.V.V.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX{ YXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXz.(.pXbXzXlXmXzXbXzXVXnXVXVXbXgXgXbXgXgXVXdXdXVXVXcXcXbXbXcXcXcXcXcXcXVXdXVXVXBXBXBXnXbXBXBXnXmXNXNXMXMXbXvXeXg.d.a.a.a.p.p.3.3.3.p.p.3.2.$...( ~ ~ ~ ( #._ ^ ` ^ ( ( ) ....+.@.=.,.1.0.0.a.a.0.0.2.3.3.p.i.i.k.9.6..p.s.s.s.p.1.1.0.q.q.$.w.$.#.) / $.w.w.$... . .o.@.,.2.3.3.t.>.:.:.:.:.4.0.9.e.r.7.3X8XvXGXMXHXMXMXvXFXMXMXvXMXMXHXNXHXAXNXAXSXSXCXNXnXBXbXBXbXbXVXBXbXbXbXbXbXbXzXbXnXbXzXzXnXnXnXnXnXnXnXnXnXnXnXzXnXzXnXbXzXnXzX#XQ D.Q D.Q D.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.D.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.Q V.V.V.n.V.V.V.V.V.V.V.V.Q V.n.n.n.Q Q n.V.V.Q V.Q V.V.V.Q V.Q G.V.Q n.n.V.V.Q V.V.V.V.V.Q V.V.V.V.V.V.n.n.V.V.V.V.V.V.V.n.V.n.V.Q N.N.B.B.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXC.{.nXmXmXmXAXmXzXnXnXzXnXnXgXnXVXVXVXdXcXVXdXhXdXdXdXdXVXcXVXcXVXcXVXdXdXcXdXgXxXVXbXBXbXBXNXNXHXNXNXJXHXMXvXxXvXtXg.d.a.0.3.3.p.s.j.j.j.h.0.1.q.h.s.q.q.$...} } 1.q.0.<.+.X.X.X.*.2.3.3.t.4.;.;.;.;.<.w.q.q.e.u.9XGXHXNXNXMXNXMXBXvXvXMXMXMXGXMXNXJXHXNXNXAXSXHXJXCXCXBXbXbXbXbXVXcXbXcXbXjXbXbXbXgXbXbXbXbXcXbXbXbXnXBXbXzXbXnXbXbXbXzXnXbXbXbXzX@XQ Q Q Q Q D.Q V.V.V.V.Q V.V.Q V.Q V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.Q V.Q V.V.V.V.V.V.V.V.Q V.Q Q V.V.Q Q Q V.Q V.V.Q V.V.V.n.V.V.n.Q V.V.Q Q V.Q V.Q V.Q Q V.n.n.n.V.V.V.V.V.Q Q Q V.n.Q V.V.V.V.V.V.V.V.V.V.V.n.B.V.V.V.V.V.V.V.m.B.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX-XpXdXnXnXNXzXmXnXnXnXzXnXVXgXnXVXVXVXdXdXdXdXiXdXdXdXVXgXcXgXcXVXdXdXcXdXgXdXdXVXcXVXbXBXNXCXJXSXSXJXJXJXHXvXcX0Xg.d.q.a.0.t.i.s.d.j.j.h.p.0.a.s.p.p.2.%.O.X.@.w.0.0.3.=.O.O.O.&.2.t.t.>.2.>.2.<.:.4.8.q.r.r.tXLXAXSXSXAXHXHXMXvXvXvXvXFXMXMXNXNXHXJXHXHXHXCXSXJXJXNXNXbXbXVXbXcXbXcXcXcXbXjXbXbXbXgXbXbXlXbXdXgXbXnXgXgXnXzXgXzXbXzXnXbXnXVXbX@XV.G.Q D.Q D.Q V.V.V.V.V.Q Q V.Q V.V.V.G.V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.Q Q V.V.V.V.Q Q V.n.V.V.V.V.V.V.Q V.V.V.n.V.V.V.V.Q n.Q Q n.n.n.n.n.n.n.V.V.V.V.Q Q Q Q Q Q V.V.V.V.V.V.Q V.V.n.n.V.V.V.V.V.V.V.V.V.V.V.n.N.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXR. XiXlXzXmXNXmXMXMXBXnXVXnXnXzXVXgXdXdXdXdXdXdXdXgXdXcXcXgXVXxXgXxXdXdXxXxXgXdXVXcXbXnXNXNXNXSXSXJXJXJXHXMXcXxX0Xg.d.i.0.q.s.s.j.j.j.h.a.0.p.p.t.2.;.%.%.=.3.a.q.a.a.3.-.O.O.&.;.2.t.i.p.a.i.q.8.9.9..1.<.@.>.0.a.s.d.h.h.a.2.%.&.&.2.p.i.s.j.y.rXtXLXUXIXIXLXIXIXAXKXAXKXGXMXvXvXvXBXGXMXHXCXHXCXHXNXMXNXNXNXSXAXNXNXNXNXNXnXcXVXdXdXbXgXdXbXcXjXbXjXzXbXcXzXbXlXbXVXnXnXnXVXzXgXgXVXiX^.V.B.V.V.V.V.V.V.Q V.Q V.Q V.V.V.V.G.V.V.V.Q V.V.V.V.n.n.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q G.V.V.Q V.V.Q V.V.V.Q V.V.Q V.V.V.Q V.n.G.V.Q V.Q V.V.V.V.V.n.n.Q V.V.Q V.n.V.Q n.Q V.V.V.n.n.Q V.V.V.V.n.Q n.V.Q Q V.n.n.n.V.V.V.n.V.V.V.V.n.V.V.V.V.V.V.V.V.B.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX 3 T.dXVXVXVXnXnXVXnXVXVXVXVXdXdXdXdXdXdXiXiXsXdXdXVXdXdXgXxXdXxXdXsXiXdXVXMXbXbXBXNXAXSXNXJXJXJXNXKXMXBXHXHXFXFXMXCXCXHXFXFXtXFXFX ; i l `.7XiXfXiXaXdXdXVXdXdXgXgXdXdXdXdXxXiXiXiXiXiXfXdXbXBXBXBXcXcXxXxXxXsXxXjXvXbXMXMXMXMXNXLXLXKXKXKXAXKXIXKXUXIXIXIXIXIXLXJXJXKXKXKXKXLXKXUXUXKXKXKXKXJXHXHXHXxXT.].VXBXBXFXVXbXBXMXMXBXcXcXvXBXBXbXvXBXBXMXbXnXmXBXBXBXbXbXdXgXdXiXfXgXbXcXbXcXbXbXnXnXbXVXnXnXVXgXgXgXdXsX7Xp p 3 3 9 8 8 8 y 5 y t u g x T R R Q Q V.V.V.V.V.Q Q Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.Q V.Q V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.n.n.Q V.V.Q Q V.Q V.Q V.n.n.Q V.Q V.n.n.Q V.V.n.V.Q n.n.n.n.Q Q n.Q n.n.n.n.Q V.Q n.n.n.n.G.V.V.V.V.V.n.V.V.V.n.V.V.V.V.V.V.V.V.V.n.n.Q B.B.B.T YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.Z.B.M.v.M.B.M.Z.M.M.Z.B.B.M.U a p p 9 8 7 7 7 < , ; > : , 0 M |.fXfXiXiXiXiXdXdXgXdXhXdXdXdXiXdXxXdXiXfXiXxXcXbXBXBXcXBXcXcXxXsXsXsX6XsXcXbXMXNXMXNXNXLXHXKXKXKXKXKXKXLXIXIXLXIXIXJXHXKXKXKXKXKXUXUXLXIXIXKXKXHXmXHXBXfX,XVXMXbXBXnXVXbXBXNXMXBXcXbXbXbXvXBXBXBXBXMXnXBXNXnXnXVXcXgXdXdXiXiXaXbXbXbXbXbXbXzXbXVXnXbXVXgXcXgXgXaX5Xz.d 3 1 , 1 7 8 7 7 5 5 5 5 5 5 t z T T ! R ! Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.Q V.Q Q Q V.V.V.V.V.V.V.V.V.Q V.V.Q Q Q V.n.V.Q V.Q Q V.n.V.V.Q Q V.n.n.Q n.V.V.V.n.n.Q V.V.V.V.n.Q Q n.n.n.n.Q V.n.n.V.n.V.V.V.n.V.V.V.V.V.n.V.n.V.V.n.V.V.n.V.V.V.B.B.Q n.n.! YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.Z.B.B.B.B.M.v.v.M.B.Z.Z.Z.M.Z.A.B.M.M s q 9 8 8 5 5 1 ; ; > : > : 1 M XX XuX-XaXiXiXdXaXdXdXdXdXVXiXiXiXdXdXiXiXdXcXnXbXbXbXcXcXxXxXxX6X6X6X6XiXdXbXBXNXMXNXNXMXGXGXNXHXHXNXJXGXJXJXHXHXJXHXKXKXHXHXIXHXSXIXIXUXSXSXNXNXNXNXNXBXNXBXNXBXbXBXBXBXNXMXbXcXcXvXbXbXBXMXBXNXBXNXnXbXVXbXbXgXVXdXsXfXgXVXbXbXbXnXnXzXbXVXVXnXgXgXdXdXsXuXH.M l 9 1 1 , 1 < 8 7 7 5 5 5 5 5 5 2 y k z z b T T Q Q V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.n.V.V.G.Q V.V.V.Q Q V.V.V.Q Q V.V.V.V.V.V.V.V.V.V.V.Q Q Q n.n.V.Q Q V.Q V.V.V.n.V.V.n.V.Q Q V.V.V.n.V.V.Q V.V.n.n.V.V.Q Q Q Q Q n.n.n.n.n.n.V.V.n.V.V.V.n.V.V.Q n.n.V.V.V.V.V.n.V.V.V.V.V.n.n.n.n.! YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.Z.B.B.M.Z.B.Z.Z.Z.M.Z.Z.B.B.Z.[ B.B.M.B.T z a p 7 8 7 e > > > > ; > : : m J.E..XuXiXiXiXiXiXdXiXfXdXdXiXdXiXfXiXiXfXsXdXnXMXbXbXBXcXcXxXxXxX6X6XfX,X,XxXcXHXNXNXMXGXMXGXGXGXGXHXJXJXGXHXHXHXGXJXAXSXIXHXHXSXHXIXUXIXUXSXHXSXJXNXNXBXBXbXbXBXbXnXMXAXMXBXvXjXbXBXBXMXmXmXNXBXmXBXnXVXgXVXgXgXVXiXiXgXgXbXbXnXbXbXcXbXzXnXVXVXVXgXaXpX7X(.' 9 i 8 1 , , 1 1 7 0 7 5 5 5 5 5 2 , ; 2 z z z j z T Q V.Q V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.n.V.V.V.Q Q V.V.V.V.V.Q V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.Q n.V.V.V.V.V.n.V.V.V.V.V.V.n.n.n.V.n.Q n.Q V.V.n.n.V.n.n.n.V.Q Q Q n.V.n.n.V.V.n.B.B.n.B.n.B.V.V.n.n.n.Q n.n.B.B.V.V.V.Q V.n.V.V.n.Q YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.B.B.B.Z.B.Z.B.B.B.B.Z.Z.Z.Z.B.B.Z.Z.A.M.v.B.B.F v z u w 8 5 ; ; ; ; > : , l XXE.R.R.E.]. XuXiXiX;XuX1XiXiXfXdXdXdXfXiXiXfXaXcXbXMXbXbXcXcXdXxXsXsX6X6X7XuX,XcXMXHXNXmXMXBXGXFXGXGXvXGXvXGXGXMXMXHXHXAXAXSXSXSXHXIXIXIXUXHXIXHXSXJXNXNXNXBXNXNXBXBXHXAXMXcXjXjXBXBXBXNXMXNXMXNXnXBXBXbXnXVXVXgXgXdXaXVXbXbXbXgXbXbXgXjXlXlXgXgXhXdXiX5X_.E.J.J.Y Y N m 3 1 > < 8 7 7 5 5 5 5 5 , ; , e a z z z z V Q V.V.Q V.n.V.V.Q Q V.V.V.V.V.Q V.V.V.V.V.V.V.Q V.Q V.Q V.V.V.V.Q V.V.V.V.V.V.V.Q V.V.V.Q V.V.n.n.Q n.Q V.V.Q Q V.Q V.Q V.V.n.n.n.n.n.Q V.V.Q V.n.V.V.V.V.V.V.Q Q n.Q n.Q Q V.V.Q n.V.n.n.V.V.n.Q V.V.n.V.V.m.n.V.n.m.Q V.n.V.V.V.V.B. YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.B.Z.B.Z.B.v.M.Z.B.B.Z.B.Z.Z.Z.B.Z.B.M.Z.Z.Z.Z.v.M.B.m.U L x g f w > ; ; ; > 9 l /.E.E.R.R.T.R.E..X[. X5XuX1XfXiXfX1XfXiXfXfXiXiXuXsXcXbXbXbXcXcXcXxXqXsX6XfX,X,X,XxXGXBXNXNXMXcXcXcXcXvXvXvXvXvXqXvXMXMXMXNXAXHXHXHXIXHXHXAXHXIXHXIXHXAXNXBXNXNXBXBXbXBXBXBXbXcXvXBXAXMXBXmXNXmXmXnXnXnXbXVXVXVXcXgXdXdXbXgXBXbXbXbXgXbXgXlXgXhXdXiXiX,X`.E./././.I.L.I.I.U.] m 8 8 8 8 7 5 y 5 5 < , > , e r z z z z b T V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.n.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.Q V.V.V.F.V.Q V.V.n.V.Q V.V.n.n.n.V.V.n.V.V.V.V.V.V.Q n.V.Q Q Q n.V.Q V.V.V.V.V.n.Q V.Q V.n.V.V.V.V.n.V.Q V.V.n.n.n.V.n.V.m.n.n.B.V.V.V.Q V.V.V.n.V.V.V.V.V.n.B.V. YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.Z.M.B.Z.Z.B.M.U M.Z.B.B.Z.B.Z.Z.Z.Z.B.Z.B.Z.B.B.B.M.M.B.B.B.Z.U A B g e > ; ; k L.E.W.E.W.R.R.E.H.T.T.J.E.(.|.,X1X1X1X1X1XfXfXfXiXiXuXiXdXVXVXbXbXcXcXxXxXxX6X6X,X6X,XfXGXMXNXmXHXBXVXsX6XqXqX,X>XqXqX0X0XFXvXGXMXHXHXAXAXAXAXHXIXHXHXSXSXNXNXNXBXHXNXnXBXBXBXbXBXBXNXMXNXNXNXMXmXNXnXBXnXbXnXnXVXgXdXdXcXcXbXbXbXcXgXVXgXVXdXdXaXiX%X|.(.E.XXE./.I.I./.I.I.I.I.I.Y.' Y i 9 8 8 w i 8 < > > < 2 y z z z z z D V.V.Q V.V.Q V.Q V.Q Q V.V.V.V.V.V.n.V.V.V.Q Q V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.n.V.V.n.V.n.V.Q Q V.Q V.V.Q V.V.V.Q V.Q n.V.! Q V.n.V.V.Q V.V.V.G.n.V.V.V.V.n.V.Q V.n.n.Q Q V.Q n.n.V.n.V.V.V.V.n.n.V.n.V.V.n.n.V.V.V.V.V.V.n.V.V.n.. YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.Z.B.B.Z.M.Z.B.B.M.M.B.Z.B.Z.Z.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.B.Z.B.v.P G V q 8 n Q.^.(.W.W.E.R.Q.T.R.T.J.H.H.H.E.!.[.[.,X1X1X1X1XuXuXiXiXiXdXdXdXVXbXbXdXdXsXxX6X6X6X,X7X,XcXMXNXmXmXNXmXbXxX,X,X>X' Y.Y.>X,XqX0XvXvXMXHXMXAXAXAXHXHXSXAXAXAXAXNXNXMXBXnXBXNXBXMXBXMXMXNXBXNXBXmXmXmXnXnXnXbXbXbXcXgXgXgXgXbXbXbXcXgXdXVXdXVXhXdXiX5X}.(.XXI.J.L.I./././.~.I.I.I.I.I.L.L.] Y Y m c Y Y m y > > < 8 y z z z z z T V.V.V.V.V.V.V.V.V.Q V.V.Q V.V.V.V.V.n.V.V.V.V.V.V.V.@XQ Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q G.V.V.Q V.V.V.n.n.V.Q V.V.V.V.V.V.n.Q ! n.n.Q n.n.n.V.Q Q V.V.n.V.V.Q V.n.Q V.Q Q V.Q V.V.Q n.V.n.V.Q Q V.V.n.B.n.n.n.B.Q n.B.n.n.V.n.n.n.V. YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.Z.B.B.B.Z.Z.B.B.B.B.M.Q [ B.B.B.B.Z.Z.B.Z.Z.Z.Z.Z.Z.B.B.Z.Z.B.Z.B.B.Z.B.U P H B K !.^.!.^.W.W.W.E.Q.R.E.R.H.H.H.H.H.T.R.T.W.]..X.X1XOXuX1X1XiXiXdXgXgXcXbXbXcXcXdXfX6X6XfX,X,XfXBXmXBXHXmXBXBXvXxX,X>Xz.' { >X>X>X,XqXqXvXcXMXMXNXHXHXSXAXAXAXNXNXNXNXBXbXNXBXMXNXNXmXMXmXMXNXNXNXNXBXnXnXbXbXbXbXbXgXgXVXcXbXdXbXbXgXdXdXhXdXiXOXOX X|.(./.E.I.L.I.L.I././.I.I.I.I.I.I.L.P.K.S.K.K.{ { S.' l 8 8 y y r z z z z b T V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.V.n.V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.n.Q V.Q Q Q V.V.n.n.n.V.Q V.Q V.Q n.V.Q Q Q n.n.n.n.V.V.V.Q V.V.Q Q n.Q V.V.V.Q V.V.Q V.V.n.m.n.V.V.V.V.V.V.V.V.n.V.V.V.n.n.V.V.n.V.n.n.V.V.V.- YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.Z.B.Z.Z.Z.Z.Z.B.Z.B.Z.Z.Z.B.M.B.B.B.B.Z.Z.Z.B.Z.Z.Z.Z.Z.Z.Z.Z.B.Z.Z.Z.Z.Z.Z.N.R J m.!.^.W.^.W.~.E.E.W.E.Q.Q.T.T.J.H.T.H.H.H.T.T.T.T.W.>XW.]..X X1XuXdXiXgXgXcXbXbXbXcXsX6XfX6X6X,X,XvXGXBXnXBXmXVXVXVXvXyX>X>XY.Y.7.>X>X>X,XqXfXcXvXMXNXNXJXNXNXNXNXMXBXNXbXBXNXNXNXBXNXmXNXNXmXNXnXnXnXnXbXBXbXbXbXbXdXgXcXgXbXgXbXdXdXdXdXuXuXOXOX X|.|.|.(./.XXJ.L.XX/.I.I././.I./././.U.L.U.L.P.L.U.U.K.P.{ { ] ] ' Z z z z z z Z ! V.V.V.V.Q V.V.V.V.V.V.V.V.Q V.V.V.V.V.n.V.V.Q V.V.V.V.Q Q V.V.V.Q V.V.V.V.V.F.V.Q V.V.n.Q Q n.V.V.V.n.n.n.n.Q V.V.V.V.V.Q V.n.n.Q Q n.V.Q Q Q V.V.V.V.V.V.V.n.Q n.n.V.n.V.n.V.n.V.n.V.n.V.n.V.Q V.Q m.B.V.Q m.V.n.V.n.V.V.n.Q m.n.V.N YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXM.M.B.Z.Z.B.Z.B.Z.Z.Z.Z.Z.B.Z.Z.Z.B.Z.B.B.Z.B.Z.Z.B.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.Z.Z.B.B.B.v.G.^.^.^.~.^.W.W.W.W.W.XXT.T.T.oXT.E.H.E.T.T.T.oXoXT.H.H.H.H.H.E.T..XuXdXhXgXgXgXVXVXbXbXsX6X6X6X7X,X6XBXMXbXMXVXVXbXcXcXcXfX,X,XU.>X>X>X'.'.,X,X6X6XxXvXBXBXBXNXMXmXBXbXBXBXBXBXMXBXnXBXNXNXnXNXNXBXBXBXBXcXbXgXbXdXgXdXdXcXgXdXdXdXfX5X|.}.}.].}. X X|. X{.(._.XX~./._.(./.(.(._._.(.'._./.I.I.U.).).).I.U.U.I.=XL.P.P.F.l.B z z b T n.V.V.Q V.n.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.Q Q V.V.Q V.V.V.V.V.V.V.V.n.V.V.Q Q Q Q V.V.V.V.Q V.Q n.V.Q n.V.n.Q V.n.V.n.Q n.n.n.n.V.n.V.V.n.V.V.G.V.Q Q V.Q V.n.n.V.Q V.V.n.V.V.V.n.V.n.V.n.V.V.V.V.V.V.V.V.V.Q V.V.Q V.V.V.$ YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.M.M.B.B.Z.Z.B.M.B.Z.Z.B.Z.Z.B.Z.B.B.Z.B.Z.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.B.M.M.M.Z.Z.M.B.B.V.T.].[.!.].].W.W.].].W.W.W.Q.Q.XXT.T.H.T.H.T.oXoXT.T.T.H.z.H.z.z.H.H.T..X1XiXdXVXVXVXVXgXbXbXbXdX6XfX,X,X6XMXMXBXBXnXnXVXVXcXcXxXxXvXxXfXqX,X,X,X,X6XxXvXcXBXmXMXMXMXBXdXgXdXcXcXbXBXbXBXBXbXBXBXBXBXBXbXbXcXcXdXdXdXiXdXdXaXpXfXiX5X X.X`.`.`.`..X|.|.%X X X`.]._.(.E.(.`.`._._.`.`._.`.`.`.'.'.*X_.`.*X/._.'.).U.I.=XK.] Q Z z b v F n.n.m.V.V.V.V.V.n.n.n.V.V.n.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.n.n.V.V.Q Q V.Q V.V.V.V.n.n.n.V.V.n.V.V.Q V.V.Q Q n.n.V.V.V.n.V.V.n.n.V.V.n.Q V.n.Q n.n.Q V.n.n.n.Q Q V.V.n.Q G.V.V.Q V.V.Q V.V.V.Q V.V.V.V.V.V.G.! YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.B.Z.Z.Z.M.Z.Z.Z.Z.B.M.M.M.Z.B.Z.Z.Z.B.B.B.Z.B.Z.B.Z.Z.Z.[ Z.Z.Z.Z.Z.B.M.Z.M.M.M.B.V.Z.F.{.{.}.^.].].].]..XW.!.].W.XXT.T.W.T.T.H.T.oXT.T.T.T.T.H.H.H.H.z.z.H.z.z.XX1X1XiXhXdXhXcXbXcXVXVXcXdXpX5X7XdXBXBXVXbXVXgXgXVXcXcXcXbXBXbXMXBXMXBXBXHXBXnXNXNXCXMXNXbXdX5X,XuXfXfXfXsXdXcXbXbXbXcXVXcXVXsXiXuX1X,X;X,XOX XuX5X X7X,X5X X|..X`..X.X.X}.|. X X&X|.(./.E.(.(._.`.|._.{.`.`.`.*X`.'.'.'.'._.).*X).U.U.P.K.K.[ J H D D P ! B.B.V.V.V.V.V.V.V.n.Q V.V.V.V.V.n.n.V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.Q V.V.Q V.V.V.V.V.V.V.n.Q Q V.n.Q V.V.V.V.n.Q V.V.V.V.Q V.Q V.Q V.Q Q Q n.n.n.V.V.V.V.Q Q V.V.n.Q V.n.V.n.n.V.n.n.V.n.n.V.Q V.Q n.V.V.V.V.Q V.Q Q V.V.V.Q Q V.V.V.V.Q D. YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.M.M.M.B.Z.Z.Z.B.Z.B.Z.Z.Z.Z.Z.Z.B.Z.Z.Z.Z.Z.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.B.[ Z.M.Z.Z.M.Z.V.A.[.[.{.^.[.].!.XX].].].].W.W.T.XXT.T.XXT.T.E.T.T.T.T.H.H.H.H.z.H.z.z.z.z.z.H.T..XOXiXiXdXgXgXVXVXcXcXcXcXdXsXfXVXBXVXbXnXzXbXVXVXVXvXcXbXbXnXBXnXBXBXmXNXNXNXNXmXNXcX6X7X5X7X5X7XuXpXpXfXsXsXfXxXxXdXdXsXOX X1X,X5X5XOXuX XuX7X X X X5X5X X`..X`.`.`.|.|.|. X|.|.(.E.XX/.(.|.`.'.&X&X'.'.'.'.'.).).'.'.).*X=XU.K.K.{ [ W W W Q V.V.n.V.V.V.B.B.n.V.V.n.V.V.n.n.V.V.m.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.Q V.Q V.V.V.V.V.V.V.V.V.V.V.n.n.V.V.Q Q Q Q V.V.V.V.V.V.n.V.V.n.V.V.Q V.V.Q n.V.Q n.n.n.n.V.V.Q Q V.V.Q n.Q n.V.Q V.Q Q V.n.Q n.n.Q Q n.V.V.Q n.Q Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q a YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.Z.M.M.B.M.B.Z.B.Z.Z.Z.Z.Z.Z.B.Z.Z.Z.B.Z.Z.B.Z.Z.B.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.B.M.M.Z.Z.B.F.[.}.}.[.].].].].].].}.]..X].W.!.W.Q.Q.T.W.T.T.T.T.T.T.oXT.T.T.H.z.z.z.z.H.J.H.H.H.XX[.1XiXdXiXdXgXdXdXdXbXcXdXxXdXbXbXgXbXbXbXgXcXnXbXnXnXnXnXBXmXmXNXNXmXNXmXNXBXbXpX,X5XuX7X6XfX7XpXpXsXsXdXdXdXsXxXcXcXsXfXuXOX5XuX5X5X5X,X5X5X,X-X X7X X X(.XX(.(.|.}.|.|.|.]./.E././.'.'.=X).I.=XU.U.U.U.U.U.L.U.L.U.=XK.K.[ [ [ R R W W n.V.V.V.V.V.V.V.V.V.V.n.V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.Q V.V.V.n.V.Q V.V.V.V.V.G.n.V.V.Q V.Q V.V.V.V.V.V.V.n.n.V.V.V.Q V.V.V.V.V.n.n.n.n.V.Q V.Q V.V.V.V.n.n.Q V.Q V.Q Q V.Q Q V.Q Q V.n.n.Q V.V.Q V.Q V.Q V.Q V.V.V.V.V.V.V.V.V.V.V.Q ! X YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.B.Z.B.B.B.Z.Z.M.M.M.B.B.Z.B.B.Z.Z.B.Z.B.Z.Z.Z.Z.Z.Z.B.Z.Z.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.B.B.Z.Z.Z.D.}.}.}.{.[.[.[.[.]..X].[.].].W.W.W.!.W.Q.T.W.Q.Q.T.T.T.T.T.T.T.oXH.z.z.z.z.z.z.z.z.H.T.T. X1XiXiXdXdXdXgXcXgXcXcXcXgXdXbXbXgXcXbXgXzXnXVXVXnXnXnXmXmXmXmXNXNXBXNXcXjX7X5XfXfX,X6XuX7XfXfXsXsXsXsXdXdXcXdXdXcXcXdXuXuXuX5X5XuXuX5X5X5X5X5X7X&X7X&X|.(.(.].|.|.|.|..X/.XXJ.L.L.L.I.L.L.K.K.P.P.P.P.K.K.P.P.K.K.{ ] [ W W W R R W Q V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.Q V.V.n.V.V.n.V.Q V.V.V.V.Q V.V.n.V.G.V.n.V.V.Q V.Q V.G.V.V.n.n.n.n.n.V.Q V.Q n.n.n.n.V.V.Q V.Q V.V.n.V.V.Q V.n.n.Q V.V.V.V.V.V.V.V.G.V.V.V.V.D.V.V.D.V.V.V.V.Q : . . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.B.Z.Z.Z.B.B.B.Z.M.M.M.B.Z.Z.Z.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.B.B.B.Z.Z.Z.Z.Z.Z.Z.Z.B.B.Z.V.Z.U.*X}.}.}.[.[.[..X[.[.[.[..X].].!.!.W.!.W.W.W.Q.Q.Q.!.T.T.T.T.T.oXT.H.x.H.z.z.z.H.z.z.x.z.H.[.1X1X1XiXiXdXdXdXdXdXdXdXdXcXdXdXcXjXdXgXVXbXBXnXbXnXnXBXmXMXNXMXBXbXvXfX5XuX,X7XfXfX6XfX6XsXsXdXsXdXxXdXdXdXcXdXcXbXcXpX5X5X5XuX5X7X5X5X5X5X5X5X5X5X7X&X`.`.|.|.|..X`./.I.L.K.L.L.U.U.L.K.K.K.P.P.P.P.P.K.P.P.K.{ K.[ [ U W W R R Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.V.Z.F.V.V.D.F.Z.V.V.Q V.Q V.V.V.V.V.V.V.V.V.V.Q Q Q n.V.V.V.V.V.V.V.V.V.n.V.V.V.V.Q Q V.V.V.V.V.n.V.V.V.n.Q V.V.V.V.Q V.n.n.Q V.n.n.V.V.V.Q n.n.n.V.Q Q V.V.V.Q V.V.V.V.V.V.Q Q V.V.Q V.V.V.V.V.V.V.V.V.V.D.V.Q D.Q V.V.V.V.Q z X . YXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.Z.Z.B.Z.B.Z.M.B.M.M.M.B.B.B.Z.Z.Z.D.Z.Z.B.Z.Z.B.Z.Z.Z.B.M.M.B.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.v.B.V.V.~.&X*X X+X}. X[. X+X.X}. X[.[.].].].!.!.XXW.W.!.!.W.W.T.W.T.T.T.T.T.T.T.H.H.z.z.z.z.z.z.z.z.H.]. X,XOX5XOXOXfXfXsXsXxXxXsXxXxXsXjXsXcXcXdXVXbXVXnXBXMXMXVXbXbXcXdXsX,X6X7X6X6XuX7X6XfXsXfXsXsXsXdXxXdXxXdXVXcXbXdXcXdXdXuX7XuX7XuXuX5X5XuX5X5X5X5X7X6X,X&X|.|.|.|././.I.I.L.L.L.U.U.L.U.L.J.K.K.U.U.U.P.P.P.P.P.P.K.] [ v.W R W Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Z.V.D.V.D.V.Z.Z.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.G.V.n.V.V.V.Q V.Q Q V.Q V.V.V.V.V.V.V.Q V.V.V.V.V.V.n.n.G.V.Q V.Q V.Q n.Q V.Q V.Q Q V.Q n.n.V.V.Q V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.Q Q V.Q V.V.V.V.V.V.V.V.V.Q D.Q V.V.Q Q Q G.T o o YXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.B.B.Z.B.Z.B.Z.B.Z.M.Q M.B.B.B.Z.Z.Z.Z.Z.B.B.Z.Z.B.Z.Z.Z.M.v.v.M.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.V.V.!.}.%X}.+X[.}. X X+X X[.OX[.[..X[.].!.].!.XX!.!.!.!.W.W.W.T.T.W.T.T.T.T.H.H.H.H.z.z.z.z.z.z.z.T.(.,XOXuX%X X|.|.%X|.|.|..X,X X,X,X,X X,XsXxXdXxXdXsXdXdXxXiXfXfXfXfXfX,X6X6X6X7X6XfX6XfXiXfXsXxXsXxXdXcXcXcXcXgXcXVXbXbXdX5X5X6XuX7XuXuXuX5XuX5X5X&X,X6X5X7X%X&X`.`./.).I.L.I.I.I./.).).).).I.U.U.U.$XU.=XP.P.P.K.K.v.Q W W Q Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.D.D.V.D.D.D.Q #XD.Q D.V.Q V.V.Q Q V.V.V.n.V.n.V.V.V.V.Q Q V.V.Q V.Q V.V.V.V.V.V.Q n.n.V.V.V.V.V.V.V.n.Q V.V.n.V.V.V.V.Q V.V.Q V.Q Q Q V.Q V.V.n.V.Q V.V.V.V.n.Q V.Q n.Q V.Q n.V.V.V.V.V.n.V.V.V.V.Q @XQ Q Q #XQ D.V.V.Q Q V.Q o . YXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.Z.Z.Z.B.B.B.B.B.M.M.M.M.B.B.B.B.B.Z.B.Z.Z.Z.B.Z.Z.Z.Z.Z.Z.M.M.M.B.B.B.Z.Z.Z.Z.Z.B.Z.Z.Z.Z.D.}.%X-X}. X X X+X X}. X+X[.[.[.[.].!.[.!.[.!.!.!.W.!.W.W.W.W.T.W.W.T.Q.oXT.H.H.oXz.z.z.z.z.H.z.H.XXOXuX X5X|. X|.|.|..X|..X.X(.(.(.XXXX.XxXsXsXdXdXsXsXfXxX,XfX6XfX,XfXfX6X6X6X6XfXfXfXfXfXxXdXdXdXxXcXdXgXcXcXVXVXcXcXcXdXiXuX5X5XuXuX7XuXuX7XuX5X5X5XuX5X5X5X|.`.`./.E.J.I././.'.'.'./.`.'.'.I.U.U.P.P.K.] ] ] [ b.Q Q Q Q N.V.V.V.B.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.D.D.D.#XD.D.D.Q D.Q V.D.V.V.V.V.V.V.n.V.G.Q n.Q Q V.V.V.V.V.V.n.V.V.V.V.V.V.V.Q n.n.Q V.V.n.n.V.V.V.V.n.V.V.n.n.V.Q Q V.V.V.V.Q V.Q Q V.n.V.V.V.V.V.Q V.V.V.V.V.V.n.V.Q V.V.Q V.V.Q n.V.V.n.Q V.D.Q Q D.Q Q D.Q Q Q F.G.V.V.0 o YXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.Z.Z.B.Z.B.Z.Z.B.B.Z.M.M.M.M.M.M.B.B.M.Z.Z.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.[ v.M.M.Z.B.B.Z.Z.Z.Z.Z.A.Z.Z.~.}. X X X}. XOXOX+X}.[.+XOX1X+X.X[.[.].[.].].].].].].W.].!.!.T.W.T.T.Q.T.W.T.oXoXz.z.z.z.z.z.z.H.H.E. X%X5X5X X X X&X|.|.|..X.X'.XX(.XX'.XX,XdXdXxXxXsXsX6XfXfXfXfXqXfXfX,X6X6XxXsXsXsXsXdXxXsXxXsXdXdXcXgXcXVXgXcXcXbXbXcXdX,XuX5XuX5XuX5X7XuXuX7XuX5X5X5X5X%X5X|..X(./.I.J.I.I.XX(.'.'.'.).).I.U.P.P.{ ] [ ] ] ] R W Q Q N.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.D.D.D.D.#XD.#XD.D.V.V.V.Q V.Q V.Q V.V.Q V.V.V.V.V.V.V.Q Q V.Q V.V.V.V.V.V.V.V.V.V.n.Q Q Q V.V.n.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.Q n.n.n.n.n.V.Q n.Q V.V.Q Q V.Q n.Q n.n.n.V.Q V.Q Q n.V.V.Q V.V.V.Q D.D.Q D.Q D.Q Q V.V.Q Q V.n o YXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.B.B.Z.Z.B.Z.B.B.Z.Z.B.Z.[ [ M.B.B.M.B.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.B.B.Z.M.v.M.Z.B.B.Z.B.Z.D.Z.A.Z.Z.A.&X&X%X+X-XOX+X1X1XOX1X1X1X1X1X1X+X.X[.[.[.[.].].].!.W.].W.!.W.W.W.W.W.T.Q.T.T.T.T.oXoXz.z.z.z.z.z.z.T. X;X,X5X X%X%X|.|.|.|..X`..X(.(.(.XXXX].,XxXdXxXsXxXsXiXsXfX6XfXfXfXxXxX6X6X6XsXsXsXxXdXdXdXxXcXVXdXcXcXcXcXVXbXbXbXcXdXuX5XuXuX5X5XuXuXuXuXuXuXuX7XuX7X5X5X5X/.I.I.I.I./.L.J.I.(.'.I.U.U.P.K.K.] { { { [ P P W N.Q V.V.V.V.V.V.V.V.N.V.D.V.V.V.V.V.V.V.V.D.V.V.V.D.D.$XD.$X$X#X#XV.V.V.V.V.V.V.V.V.V.V.Q Q n.Q Q V.V.V.n.n.V.V.Q n.V.V.V.V.V.V.V.n.V.V.n.V.V.V.V.V.V.V.V.V.V.V.V.V.n.V.V.V.V.V.V.Q Q n.n.n.n.n.n.n.n.Q Q Q Q V.V.V.V.n.n.n.V.Q n.Q Q V.Q Q Q V.Q V.Q Q D.Q Q Q D.Q D.V.Q Q V.Q V.D X YXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.Z.Z.Z.Z.B.Z.Z.B.B.Z.B.B.B.Z.B.Q Q M.M.B.B.B.B.B.Z.Z.B.Z.Z.B.Z.Z.Z.M.M.M.B.B.M.B.B.Z.B.Z.Z.Z.F.{.&X X+X X-X XOXOX1XOX1XOX1XOX1XOX}.[.}.[.[. X].[.!.].!.!.W.W.W.W.W.T.W.T.T.T.T.T.oXT.T.oXT.oXoXoXz.z.H.}.,X;X X XOX X X X|.|.,X.X.X'.(.(././.(.(.uXcXcXdXcXdXsXsXxXfXsXfX6X6XxXxX6XsXxXsXxXxXcXdXcXdXcXcXVXdXcXcXcXbXbXbXBXcXfXuXuX5X5XuXuX5XuX5XuXOX5XuXuX,XuXfX7X5X(.J.I.I././.U.'.).)./.U.L.K.{ ' ] { { ' x B G U Q Q Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.D.D.D.D.V.D.#XD.D.$X$X#X#X#X#XV.V.V.V.V.Q V.Q V.V.V.V.V.V.V.Q V.V.V.V.V.Q n.Q n.V.V.Q V.V.V.V.n.n.n.Q V.Q Q V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q Q n.n.Q n.n.n.n.n.Q n.n.n.V.V.V.n.n.n.V.Q V.Q Q V.n.n.Q V.V.V.Q V.D.Q Q D.Q Q Q F.Q Q Q F.V.V.! @ YXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.Z.Z.M.B.Z.B.B.B.B.B.B.B.B.Z.Z.Z.M.Q B.M.M.M.M.B.Z.Z.Z.Z.M.Z.Z.B.Z.M.M.M.M.B.B.B.B.B.B.Z.Z.Z.B.F.}. X X X XOX XOXOX1XiX1XiX;X1X1XOX+X1X[.[.[.[.,X].[.].W.].].W.W.!.W.W.T.T.T.T.T.T.T.T.T.oXT.H.z.x.z.z.H.[.OX,XuX,X5X,X,X X,X X.X|..X`.(.(.XXXXXX(..XfXcXdXcXgXcXcXsXdXsXsXsXsXsXdXxXxXdXdXdXdXxXdXcXcXcXbXcXcXcXbXbXbXbXbXVXdXuXuXuXOXuXuXuXuX,XuX5XuXuXuX;XaXuXiXiX7X|././.).).).U.,X).)./.U.U.P.] ' ' ' i 8 w w c G R Q Q V.V.V.D.V.Z.V.V.V.V.V.V.D.V.V.D.V.V.D.D.V.V.#X@XD.$X$X@X#X$XQ D.D.D.Q D.Q V.D.Q V.V.V.Q Q V.V.V.V.V.V.V.n.V.V.n.Q Q V.V.V.Q n.Q V.Q V.V.V.V.V.Q V.V.V.n.V.V.V.n.V.V.V.Q V.n.V.V.Q n.n.V.n.n.n.n.n.V.n.Q V.Q V.Q Q n.n.Q V.Q V.V.V.n.V.Q Q Q V.V.V.Q D.F.Q D.D.Q Q Q V.Q Q Q V.n.y YXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.B.B.Z.M.B.B.Z.B.M.B.B.B.Z.B.B.M.Z.B.M.M.B.M.B.Z.Z.Z.Z.B.Z.B.B.B.M.B.M.B.M.M.B.M.[ B.B.B.Z.Z.Z.Z.(.}. X X XOXOXuX1X1XOXiXiX1XiX1X1X1X1X X}. X[.[.[.].!.].].W.!.W.!.W.W.W.W.T.T.W.T.T.T.T.T.T.T.oXH.z.oXH.H.].OXiXOX5X X XOX X,X X|.|..X`.'.(.XX(.(.XX(.|.sXgXgXgXbXcXcXdXdXcXcXcXcXdXxXsXxXcXcXdXcXdXVXcXcXVXcXcXbXbXbXbXbXbXbXxXOXOXuX;X,XuXuXuXiXuXuXuX1XuX,XiXuXiXpXfX5X`./.).I.U.U.U.P.P.{ ' m m i 1 * 1 6 w 9 9 w a D Q Q Q Q F.V.V.D.V.V.V.V.V.V.V.V.V.D.V.V.V.V.V.D.V.V.D.D.#X$X#X#XD.V.D.Q D.Q D.V.V.Q V.Q V.Q V.V.V.V.V.V.V.V.n.V.n.V.Q V.V.V.V.V.n.V.V.n.Q Q V.V.V.V.V.V.V.V.V.V.V.Q V.n.V.n.V.n.V.V.Q n.n.n.n.n.n.n.n.n.Q n.Q Q n.Q V.n.n.Q n.V.Q Q V.V.Q V.V.V.V.V.Q Q Q Q D.Q Q V.Q Q Q V.Q Q n.Q T # YXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.Z.Z.B.M.Z.M.Z.B.M.B.B.B.B.B.Z.Z.B.B.Z.Z.M.B.Z.B.Z.Z.B.B.[ B.B.B.B.B.M.Z.B.Z.B.B.M.M.B.B.B.B.B.Z././.|. X5XuXOX XuXiX1XiXiX1XiXiX1XOX1X XOX[..X X X@X].[.].].].].].].!.W.W.W.W.W.T.W.T.W.T.T.T.T.H.H.H.H.H.T.].OX1XuX5X5X5X5XOXOX,X|.|.`..X.X(.(.(.(.(./..X XxXgXcXgXbXbXbXcXgXcXcXcXxXcXcXxXcXcXgXcXcXcXcXcXbXVXvXVXBXbXVXvXbXVXuX XOX,X,XuXOX X5XuX XuX,XuXuX1XiX7XuXuXuXpX&X/.U.U.' N m m l i 1 & & - 1 > < e 0 9 9 9 w r B R Q Q V.V.V.V.Z.Z.Z.V.D.V.V.V.V.V.V.V.D.D.V.V.V.D.D.D.D.D.F.D.Q Q Q V.Q V.Q Q V.Q V.Q V.V.V.V.V.V.V.n.V.V.G.n.V.n.V.V.Q Q n.Q V.V.Q Q Q V.V.Q V.V.V.Q V.V.V.V.G.n.Q V.V.V.V.V.V.V.Q n.n.n.n.n.n.n.n.n.V.Q V.V.Q V.n.n.n.V.n.Q V.V.Q V.V.Q V.Q V.V.V.Q D.Q Q D.Q Q Q V.V.Q V.V.Q n.n.< YXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.B.Z.B.B.M.B.B.B.B.B.Z.Z.Z.Z.Z.Z.B.Z.M.Z.Z.B.B.Z.B.B.B.Z.Z.B.B.B.B.Z.Z.B.B.Z.Z.Z.Z.M.B.B.M.Z.B.Z.L.)._.%XOXuXfXuXuXiXiX-XiXiXuXuX;XOX,XOX,X+X}.}.|.[..X[.].[.].].].].[.[.W.W.W.W.W.T.W.T.W.T.oXoXT.T.H.H.H.H.E.XX,X;XiX1X5X5X XuX X X|.|.|.|.`..X(./.(.(.(.(..XuXdXcXdXbXbXbXbXcXcXcXcXxXcXcXcXcXbXcXvXbXbXcXbXbXbXbXbXcXbXbXBXbXdX|. X.X X X X,X1X,X%X X5X,XOXuXOXuXuXuXuXuXpX7Xl.d k 2 > , , - - $ $ $ - : 2 5 8 9 8 9 9 9 y t H W Q Q V.V.V.V.V.F.V.V.D.D.V.D.V.V.V.V.V.V.V.D.D.D.D.D.@XD.V.V.V.V.Q V.V.Q V.Q Q V.V.V.V.V.V.V.Q Q V.V.V.Q Q Q V.V.V.V.V.V.Q Q Q V.V.Q V.V.Q V.V.V.V.V.V.n.V.V.Q V.V.V.Q V.V.V.V.Q n.n.n.n.n.n.n.n.Q n.V.Q V.Q V.Q n.Q n.n.n.n.n.V.Q V.V.V.Q V.V.V.V.V.V.Q V.Q Q V.Q Q V.Q V.Q V.Q 9 YXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.B.B.B.B.B.B.B.B.B.K.M.M.Z.M.Z.M.M.Z.Z.Z.Z.M.Z.B.Z.Z.Z.B.B.Z.B.Z.Z.Z.B.B.B.Z.Z.Z.Z.Z.Z.B.B.M.B.Z.m.)._.&X-XfXuXuXuXiXiXpXiXaXiXuX;X1X1XOX;X X X X+XOX}.[.[.[.].].].!..X.X.XXXW.W.W.W.W.W.W.T.T.T.T.T.oXH.H.H.E.T.XX X1X1X,XOXuX,X X,X}.|. X|.|.`..X`..X(.'..X(.`.|.uXVXbXbXbXgXbXbXbXVXcXcXbXcXcXbXbXcXcXcXcXbXbXbXbXbXbXBXBXbXbXbXfX X[..X X X X XOXOX-XOX X5X XuXuXuXuXuXuXpXpXfXM : - - % $ # @ @ @ # # $ , 5 5 8 8 9 9 9 9 y y x R Q Q V.V.V.F.V.V.V.D.V.V.V.V.V.D.D.V.V.V.V.D.D.D.D.#XQ V.V.V.V.Q V.V.Q V.V.V.Q Q Q V.Q V.V.V.V.V.V.n.V.Q V.V.V.V.V.Q V.Q V.V.Q V.Q V.Q V.V.V.V.Q Q V.V.V.V.n.Q Q Q n.V.Q Q Q n.n.n.n.n.n.n.n.n.n.V.Q Q V.V.Q Q Q n.V.V.Q Q n.n.n.V.V.Q V.V.V.V.Q V.n.V.Q Q V.Q Q V.Q Q V.V.Q Q ! p YXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.B.M.B.Z.Z.B.M.B.M.Z.Z.B.Z.Z.Z.M.M.B.Z.M.B.Z.Z.Z.Z.B.Z.B.B.Z.B.M.B.Z.Z.B.B.Z.Z.B.Z.Z.Z.Z.Z.M.B.B.A./._.|.%XuXiXiX-XdXuXiXaXhXiXiXuX1X1X XOX;XOXOX X X X X[..X[.].].].!.].].XXXX!.W.W.W.W.W.W.T.W.T.T.T.T.H.H.H.H.E.E..X1X;X1X,X,X X X X X|.|.|.|.`..X`..X(..X.X`.|.|. XiXdXbXbXgXVXbXbXbXVXbXbXcXbXbXbXcXbXbXbXbXbXcXbXbXbXbXVXvXbXbX1X[. X[. X|. X XOXOX X,X X X XOXuXuXiX%XpX%XpXpX(.0 # @ @ @ O X X O @ # : 6 8 8 8 8 8 9 9 9 y y f R Q Q n.Z.V.V.V.F.Q V.V.V.V.V.V.V.V.V.V.V.V.D.V.@XD.D.D.V.V.V.Q V.V.Q Q V.V.n.G.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.G.V.V.V.V.V.V.V.V.V.V.n.V.Q V.V.Q V.V.Q V.Q Q V.n.n.n.n.n.n.n.n.n.n.n.Q n.V.Q V.Q V.Q n.n.V.V.V.V.n.V.Q V.n.V.Q V.Q Q V.V.V.n.n.V.V.V.Q V.Q V.n.V.Q Q V.Q n.a YXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.M.B.Z.M.M.B.B.M.M.B.B.B.B.Z.M.M.Z.M.M.M.B.M.M.Z.M.M.Z.B.B.B.Z.B.M.M.B.Z.Z.Z.B.B.Z.Z.Z.Z.B.M.B.B.B.m.(._.5XuXaXiXaXdXdXiXpXaXdXiX-XiXiXdXuXuX,X5XOX X X X}.,X[.[.,X[.].].].!.!.!.XXXXW.W.W.Q.T.Q.T.T.T.T.T.H.H.E.E.E.E..X1XiX1X1XuX,XuX X-X5X X|.%X X X|.|..X|.|.|.|.|. X XfXdXdXbXbXcXVXbXBXVXBXnXBXbXBXMXbXbXbXbXbXMXbXBXBXBXbXbXbXbX X.X.X[..X[.[.}.OX,X5X X1XuXOX,XuX-XuX5XuXpX%XpXfX3 # @ @ O O o o o # $ < 5 8 5 5 8 8 8 9 8 y y t T W Q Q V.V.V.V.V.@XV.V.V.V.V.V.V.V.V.n.V.V.V.V.V.D.V.V.G.V.V.V.V.V.V.V.V.V.V.n.V.n.V.Q V.V.Q V.V.V.V.V.V.V.V.Q V.V.V.Q n.V.Q Q V.Q V.V.Q Q V.V.V.Q V.V.V.V.Q V.Q n.n.n.n.n.n.n.n.n.n.n.n.V.V.n.Q Q V.n.n.V.Q V.Q V.n.V.V.Q ! V.n.V.Q V.V.Q V.V.V.V.V.G.Q V.V.Q V.Q V.Q n.V.Q V.V.a YXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXM.B.Z.B.Z.M.M.M.M.B.B.M.B.Z.B.M.Z.M.Z.M.M.B.M.Z.M.Z.M.M.Z.B.Z.Z.M.Z.M.M.Z.Z.Z.B.Z.Z.Z.Z.B.Z.Z.B.B.B.B.U.I.|.7XpXpX7XjXaXaXdXaXaX;XpXaXiXaXdXpXuX X XuX X X X[.+X}..X}.[.!.[.!.].XX].].].XXXXW.XXT.T.T.T.T.T.T.E.E.E.XXE.R.(.5X1XuXuX5X;X-X X%XuX X X%X5X5X|.|.|. X|.|. X X X5X5XiXaXgXVXnXVXgXVXnXbXnXbXBXBXBXbXbXBXbXBXbXBXbXbXBXbXMXVXbX1X.X[..X.X+X,X X X X X X1X,X,XOX X XuX5X%XiXuXpXuXN 1 # @ X X o o o @ & 4 y 8 5 8 8 8 8 9 9 9 9 h T ! Q Q V.V.V.V.V.V.V.V.V.D.V.V.V.V.V.V.V.V.V.V.V.V.V.V.D.V.V.Q n.V.V.V.V.n.V.V.n.V.V.Q V.V.V.V.V.V.V.V.V.V.V.Q V.n.V.V.V.V.Q V.Q V.G.V.V.Q V.V.n.n.n.V.V.V.n.n.n.n.n.n.n.n.n.n.n.Q V.V.Q Q Q V.Q Q V.Q V.V.Q Q V.V.! V.V.V.Q V.V.Q V.V.V.Q V.V.V.V.V.V.V.V.V.Q Q Q V.n.n.V.Q V.V.p YXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.B.M.B.B.B.W M.M.M.M.M.M.B.B.B.M.M.M.M.M.M.B.B.Z.B.Z.M.M.Z.B.Z.Z.Z.Z.M.M.M.[ Z.B.M.M.Z.Z.Z.[ B.B.B.B.B.$XU.=X7X7X7XpXpXdXaXdXaXaXaXaXpX-X%XiX%XuX XiXfXiX X}. X+X.X}.}.,X[.[.[.[.].].].].!.!.!.XXXXXXXXT.T.T.T.H.J.J.J.c.' l. XuXuX XuXuX X X%XOX X X X|. X X|.|. X X X X|.|.5X5XiXfXaXdXgXgXgXgXgXVXbXbXcXnXVXnXBXbXBXbXBXnXBXbXBXBXbXbXdXOX.X[. X[.,XuXOX X XuX,XOXOXOX XuXuX%X%X5XiX7XpXiX{.2 & $ @ O o . o @ $ 4 5 8 8 8 5 7 8 9 8 y y j R R R Q Q V.V.V.V.V.V.V.V.V.V.V.F.V.V.V.n.V.n.V.V.V.V.V.V.V.V.V.Q Q V.V.V.V.V.n.V.V.V.V.G.V.V.V.V.Q V.V.V.V.V.V.Q n.V.n.V.V.V.V.Q Q V.V.V.Q V.V.Q V.V.n.V.Q n.V.n.n.n.n.n.n.n.n.Q n.Q Q V.Q V.V.V.n.Q V.Q Q V.Q Q V.V.n.V.V.V.V.V.Q V.Q V.V.n.V.V.V.Q V.Q Q V.V.V.V.Q n.V.Q Q V.Q p YXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.Z.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.Z.M.Z.Z.Z.Z.B.Z.Z.Z.M.Z.Z.Z.B.Z.Z.M.M.Z.Z.M.M.M.Z.Z.Z.B.M.B.B.B.B.K.U.U.=X=X&X7XpX;XdXdXdXhXaXdXdXiXiXiXiX5X-XuX%XiXiXuX X X+X X+X[.[.[.[.[.!.[.].!.XX!.!.XXW.W.XXT.E.H.XXT.J.E.H.l l l d '.OXuXuX X5X-XuXuXuX,X&X X|. X|. X5X X X|. X X X5XOX-XuXuXdXdXgXVXgXVXgXcXgXcXVXVXbXnXBXnXbXMXBXbXbXbXBXVXcX1X X.X X.X X X1X,X X XOXOX,XOXuXuXuXOX%X%XiX%XiXpXiXpXy = $ @ @ o o o # & , 5 8 5 5 w 7 8 8 9 8 t A R W W ! Q Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.n.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.n.Q V.V.V.V.V.V.n.V.V.V.V.V.V.V.V.V.Q Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.n.Q n.Q Q n.Q n.n.Q n.n.Q V.V.Q V.Q V.Q V.n.V.G.V.n.V.Q V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.Q V.V.Q V.V.Q n.V.Q V.Q V.Q V.y YXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXV.Z.W W M.M.M.M.M.B.B.B.B.B.B.B.B.B.Z.M.Z.M.B.Z.Z.[ B.B.Z.Z.Z.Z.M.Z.Z.B.M.M.Z.Z.M.Z.Z.Z.Z.Z.Z.B.M.B.B.Z.K.K.P.=X7X7XsXkXaXdXiXdXkXaXaXaXiXiXpXpXuXuX XuX;X;XOX+X X}.+X X}.[.[.[.[.[.[.[.].].].!.W.XXT.T.E.E.E.E.E.J.N 3 3 , , 1 c. XOXuX-XuXuXuX%XOXuX,X X X5X X5X5X X X5X,X&X X X,XuXuXfXiXiXdXdXgXgXgXgXgXgXdXgXgXcXbXbXnXnXnXbXBXBXBXVXfX X X X X X X XOX X X X X XuXOX XuX,XuXiXuXuXiXiXuXpXpXN = $ $ @ O o X # $ : 5 8 8 8 5 8 7 8 y r b R R W R Q Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.n.V.n.V.V.V.V.Q V.V.V.V.V.V.V.Q n.V.V.Q V.n.V.V.V.V.V.V.V.V.V.V.V.V.V.n.n.n.V.n.V.n.n.V.Q V.Q V.V.Q Q V.Q V.Q V.n.V.n.V.V.V.V.Q V.V.Q V.V.V.V.Q V.V.Q V.Q V.Q Q Q V.Q V.V.n.V.V.V.V.V.Q V.V.V.V.2 YXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.Z.M.M.W M.M.M.M.B.M.M.M.Z.B.M.M.M.M.B.Z.M.Z.M.M.Z.M.Z.Z.Z.Z.Z.Z.Z.B.M.M.B.Z.B.B.Z.Z.Z.Z.Z.M.Z.B.B.B.B.Z.Z.{ P.7X7XkXdXdXdXjXjXhXdXaXaXpXpXiX-XpXiX-XuXOXOXuXOX X+XOX[.[.+X[.[.[..X.X[.].].!.W.W.W.XXW.T.E.J.z.N d 0 4 < > , > , d |.uXuXuX%XiX7X5X X,XuXOX5X X5X X X X1XOX,X XOX,X-XuXuXuXiXfXaXiXdXdXdXdXdXhXdXdXdXgXgXgXbXnXnXBXBXnXbXiX,X X}.}. X1XOX XOX1X X X X1XuX,XuX1X;XuX%XiXuXpX%XiXiXpX+Xy $ $ # + X O * * * e 5 8 5 5 5 e y f B R R W W W Q Q Q V.V.Q V.n.V.V.V.V.V.V.V.V.V.D.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.Q V.V.V.V.V.Q V.Q Q V.V.V.V.V.V.Q Q V.V.V.V.V.Q V.n.V.V.V.V.V.V.V.V.n.V.V.V.Q Q V.Q Q V.n.V.Q Q Q V.Q Q V.n.V.V.Q V.V.n.V.V.n.V.Q V.V.n.n.V.V.V.V.V.V.V.V.Q Q n.V.n.G.V.V.V.V.V.V.V.V.Q Q V.V.n.V.V.Q : YXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.B.v.M.M.M.M.M.M.B.M.M.B.M.M.M.M.Z.Z.M.B.M.M.M.Z.M.M.M.Z.Z.M.B.M.M.Z.Z.M.M.B.Z.Z.Z.M.M.Z.M.Z.Z.M.B.B.B.B.Z.Z.P.=X7XjXcXbXdXdXdXdXdXdXdXaXfXiXaXaXuXuXiXiXiXuXuX XuX-XOX X X}.[.}.[.[.[..X].W.XX(.XXW.oXc.c.N 6 e 3 < 4 0 0 4 , , > 6 `.OXuXuXuXiXiXuXuXuXuXuX X5X5X X7X,XOX,X5XOX5X X XuX5XOXuXuXiXiXiXiXiX1XiXaXiXdXdXdXdXVXgXnXnXnXbXgXsXOX+X1X XOX+X,XuX,XOX,XuX X XOXOXOXuXuX,XuXuX%XuX-XpXuXiXfXiXn - $ $ @ @ & > ; ; e 8 y w u z z T R R W W R W R Q Q F.Q Q F.V.n.n.V.V.V.F.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.n.V.V.V.V.V.V.Q V.V.V.V.V.V.V.Q V.V.V.V.Q V.Q V.V.Q V.Q V.n.V.V.V.V.V.V.Q V.V.Q V.Q V.Q V.n.Q V.V.Q V.n.Q V.V.Q Q Q Q V.n.V.V.Q n.V.V.V.V.Q V.V.G.n.n.n.Q Q V.n.n.V.V.n.V.n.V.Q V.V.V.Q Q V.V.V.Q V.V.n.Q ! # YXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.M.M.v.M.M.M.M.M.B.M.Z.M.B.M.M.M.Z.B.M.B.M.B.Z.M.Z.Z.B.M.Z.Z.Z.M.Z.M.Z.M.Z.M.B.Z.Z.Z.Z.Z.M.B.B.M.Z.M.M.B.B.Z.B.K.=X7XsXdXdXdXsXjXdXbXsXaXpXpXaXpXpXuXuXiX-XuXuXuXOX X X,X X X X X X[.[..X.X`.U.XXT.c.p 3 2 1 3 > e 6 7 8 8 8 7 e > ; : N XuXuXiX%XuXuX,XuXuX,X5XuX5XOX,XuXuX X XOXOX,XOX,X,XuX;XfXuXiXfXuXfX1XuXOX1XuXuXfXuXiXgXlXnXnXbXiX1X1X1X1XOX,XOX,X1XOXOXOXOX,XOX,X,XOXOX,X;XuXuXuXiXpXiXpXuXiXiXp $ $ - ; 1 8 e e t b b T T V R R R Q R Q ! ! W W Q V.V.V.V.Q n.V.V.n.n.V.Q Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q Q V.Q V.V.Q Q n.V.V.V.V.Q Q V.V.V.Q V.V.V.Q V.Q V.n.V.V.V.Q V.V.V.G.V.V.V.V.V.V.n.Q Q n.n.V.Q V.Q n.V.Q V.V.Q V.Q V.Q Q n.Q V.Q n.V.G.V.Q V.V.V.V.n.V.n.n.Q V.V.Q Q V.n.V.Q V.V.V.V.V.V.Q V.Q Q V.V.V.Q V.! T . YXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.B.M.W M.M.M.M.M.M.M.M.M.M.M.Z.[ M.B.M.[ Z.Z.M.M.M.Z.B.Z.M.M.B.M.M.M.M.B.M.B.Z.Z.Z.Z.M.M.B.B.Z.Z.Z.M.Z.B.B.B.B.V.Z.S.C.C.|.E.sXpXpXdXiXaXiXfXiXiXiXiXiXiXiXOXuXuX XuX X+X X X X[.[.`..XH.z.z.d , , : : : : 1 3 8 8 8 8 8 8 8 8 7 : * & p {.uX-XiXuXuXuX;XuXuX;XuX5XuX1X1XOXuXuX XuX1XOXuXOXOXOX,XuXuXuXuXuXOXOX1XuX1XOX1XOXOXOX,XiXbXbXsXOX1XOX,XOX1X+XOXOX1XuX5XOXuXuXuX;XuX X5XuXuXuXuXuXpX%XiXiXuXiXiXc.3 - 1 r M n.T T T Q R R R R R R R R Q R Q Q W Q Q V.V.V.V.V.V.n.V.V.V.V.V.V.n.V.V.V.V.D.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.n.Q V.Q V.n.n.n.V.Q V.V.V.V.V.V.V.V.Q V.Q V.V.n.n.Q V.Q V.V.Q Q Q V.Q V.Q V.Q V.V.n.n.Q V.V.n.Q V.V.Q V.V.V.Q V.V.n.V.V.V.Q V.V.V.n.V.V.V.V.V.Q V.n.Q V.V.V.Q V.G.V.n.T YXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.B.B.v.W M.M.M.M.M.M.M.B.Z.B.M.M.M.B.B.M.M.M.Z.M.B.B.Z.M.Z.M.B.B.M.M.M.M.M.Z.B.Z.Z.Z.Z.B.B.B.B.Z.Z.M.B.B.B.B.B.B.B.M.K v l p 0 d l c.oXW.~.^._.5X X].]. X,X1XOX X XW.T.E.T.T.G.G.' N d ; > > > > < e e 5 3 6 5 5 8 8 8 8 8 8 8 8 4 ; & - 2 c. X1XiXfXfXiXiXuX1XuXuX5X,XuXuXuX5XuXuX,X,XuX X1XuX1XuXuX;XuX,X X1X,XOXiXiXuXuXOX XOXOXuXuX XOXOXuX,XOXuXuXiXOX XOX,XuX5XuX,X%XuX X X5X-X5XiXuX%XiX-X-XiXiXiXiX+Xl ; 3 n T n.@XQ Q Q Q Q Q Q R Q Q Q Q Q Q Q Q V.Q D.V.Q V.V.n.V.V.Q V.n.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.D.V.V.V.Q V.V.V.V.V.Q V.V.V.V.V.V.V.Q V.V.n.V.n.n.V.Q n.V.n.V.V.Q n.Q Q V.V.V.V.Q Q Q V.V.V.n.Q n.n.V.Q V.Q V.Q V.V.Q V.Q V.Q V.Q n.V.Q V.n.V.V.V.V.Q n.V.V.V.V.Q Q V.V.n.Q V.V.V.V.V.n.V.V.V.Q Q V.Q Q V.V.V.Q V.Q T # YXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.Z.B.M.v.M.M.M.M.M.M.B.M.M.M.M.B.M.B.B.M.M.M.M.M.B.M.M.M.M.M.M.M.M.Z.M.Z.Z.M.M.Z.Z.M.M.Z.M.M.M.M.[ B.B.B.M.B.B.B.B.B.b.A k q 9 1 > , : > 6 7 8 a N n N n d d l d l l 0 : : ; > = > = = ; > 1 4 4 5 5 7 7 7 7 7 5 5 5 5 8 8 8 8 w 8 < : & - : d X1XiXiXaXiXiXfXfX1XuXuXuXuXiXiXfXuXuXOXuXOX XuX1X1X1X1X,XW.x.].,X|.,X;X1XuX7XuXuX1X-XuX5XuXOXuXuX;X1XfXuX,XuXuXuX5X5XuXuXuXuX%XuX5X X5X5X%XfXpXuXpXuXuXiXuX,X1Xn r y k Z T Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q V.Q V.Q V.V.F.Q V.n.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.V.n.V.V.V.V.V.Q G.V.n.n.V.n.n.n.Q V.n.V.V.Q Q V.n.Q V.Q V.V.Q V.V.n.! V.n.V.Q Q V.Q Q Q Q V.V.V.Q V.n.n.n.n.n.Q n.n.V.Q V.Q V.V.V.Q V.Q Q n.V.Q n.V.V.Q Q V.n.V.V.Q Q V.n.n.V.Q V.Q V.V.V.D - o YXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.B.M.v.M.v.M.[ M.M.B.M.M.M.B.M.M.M.M.M.M.M.B.M.M.M.M.M.M.Z.M.M.B.M.[ B.M.M.B.Z.M.B.Z.M.M.M.Z.B.Z.B.M.B.Z.Z.Z.Z.Z.B.B.J b q 9 8 < > > > > > 7 8 8 8 0 8 8 7 4 5 3 3 4 < 4 < e e < < 4 4 3 7 5 5 5 5 7 7 7 7 7 8 8 8 8 8 8 9 w q q 0 4 2 , 1 1 p H.1XiXaXfXfXiXiXuXiXuXuXfXiXaXpXpXiXuXuX XOX1X X1XuXOX|.H.d 1 l c.`.1X1X;XiXiXuXiXuXuXuX5X%XuXuX1XfXiXiXiXfXuXuXuXuXuX7XuX-XiX5X5XiXuX5X5XuXuXpXuXpXiXuXuXuX1XiXc.a k r b Z ! Q Q Q D.Q Q D.D.Q Q Q Q V.V.V.Q F.V.F.V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.Q n.G.Q V.V.V.Q V.V.n.n.n.V.n.V.Q Q V.V.V.n.V.V.Q V.Q V.V.V.Q V.V.Q n.Q V.n.V.V.V.Q V.V.V.Q Q Q V.V.V.Q V.Q n.n.n.n.V.Q V.V.V.Q V.V.V.Q V.n.V.Q V.Q V.n.Q V.V.n.V.n.G.V.n.n.n.Q V.n.V.Q V.V.b - $ YXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.B.B.M.v.M.v.M.M.M.M.B.M.B.M.M.M.B.B.B.B.M.M.M.Z.M.M.Z.B.M.M.M.Z.M.M.M.B.Z.M.M.M.B.M.M.M.M.Z.B.B.M.M.M.Z.Z.Z.Z.Z.Z.B.B.J h i 9 9 6 , > > > > e 5 8 8 8 8 8 8 8 8 8 8 8 5 5 5 5 5 5 7 7 7 7 7 8 7 8 7 7 w 8 7 8 8 8 8 8 8 8 i q f j p 9 6 , , 1 1 N ,X%XiXiXiXfXiXiXfXuXuXiXuXuXiXuXuXuXuXuXuXuXuXuX X|.z.d > , , d i N !.,XiXuXiXiXiXiXuXiXuXuXuX1XiXsXdXiXiXuX;XuXiX-XuXiX%XpX%X%X%X5X5X5XuX7XuXpXiXiXiXuXuX,XuXT k k a k v ! Q #XD.Q Q D.Q Q #XQ #XV.V.V.V.V.Q Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.Q V.V.Q V.V.V.n.V.V.n.V.V.V.Q Q n.n.n.V.V.V.V.n.V.Q Q V.V.V.n.V.Q Q n.n.Q Q V.Q n.V.Q n.V.V.V.Q V.Q Q n.n.n.n.n.n.V.Q Q V.V.V.V.Q Q Q n.Q Q V.n.Q Q V.Q Q n.n.n.n.Q Q n.n.Q Q n.Q Q V.Q n & = YXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.B.Z.B.M.M.[ M.M.M.M.M.M.M.M.M.M.M.M.M.B.M.M.Z.M.M.B.M.Z.M.M.B.M.B.M.M.Z.M.B.B.M.Z.M.M.Z.M.Z.M.Z.M.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.M.U g u p 9 0 < , , > > , 8 8 8 8 8 8 8 8 8 9 8 0 7 7 7 5 5 w 5 w 5 w 5 5 w w 5 w 5 w 8 8 8 8 w 8 9 t j c c c q 8 4 > , , , 3 ' X;XaXiXaXaXaXiXuXiXuXfXuXuX1XiX1XiXiX1XiXiX X(.S.i > > > > > > 6 0 N %XuXuXiXfXfXiXiXiXiXfXiXfXiXdXiXiXuXiXiXuXuXiXuXuXpX-XuXuX%XpX7XiX5XpXuXpXiXuXuXuX5X%XC.l r s r b M Q V.V.Q V.V.V.V.V.V.V.Q D.Q Q D.Q V.V.V.D.Q V.Q V.V.Q V.V.V.G.Q V.V.V.Q V.V.V.V.V.V.Q V.V.V.V.V.Q V.V.V.V.V.V.G.V.V.V.V.V.Q V.V.V.V.Q V.V.V.Q V.Q Q V.Q V.V.V.V.V.V.n.V.Q Q V.B.V.V.n.n.n.n.V.Q n.m.Q n.n.Q V.Q V.Q Q Q n.n.n.n.Q n.n.n.B.n.n.V.V.V.V.n.n.Q V.n.n.Q n.V.n.n.n.B.V.V.n.n.n.n.n.n.n.n.n.V.n.V.y + : YXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.B.B.B.Z.B.M.M.M.M.M.M.v.M.M.M.M.M.M.M.M.B.M.B.M.B.M.B.M.M.M.M.Z.M.M.B.M.B.B.M.M.M.M.Z.Z.Z.Z.M.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.U u u p q q 9 7 < 1 > , 9 9 q q q 9 q w i 9 q 8 8 7 8 w 5 5 w 5 w w 5 w 5 5 w 5 w 5 8 8 8 w p f j j x z c c 8 8 5 > , > , : l }.uXdXdXdXdXaXdXiXfXiXuXfXfXiXiXiXiXfXiXuX,XN k q e > > > , > > , < 4 d c. X5X5XfXiXiXhXiXaXiXiXiXiXfXiXiXiXiXuXiXiXiXpXiX%XpXuXuXpXuXuXpX%XuX%XpXpX7XuX7X&X7Xs y r r k v T V.Q V.V.V.Q Q F.Q V.D.Q Q @XV.D.Q D.D.Q D.Q V.Q V.V.V.V.n.V.V.Q Q V.V.V.Q V.Q V.Q V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.Q V.V.V.V.V.V.n.Q n.n.n.Q V.n.V.n.V.V.V.Q V.Q n.n.n.n.n.n.n.Q V.V.V.n.n.Q V.n.V.V.V.V.Q n.n.n.n.n.V.n.B.n.n.V.n.V.n.n.n.n.n.n.n.B.n.B.B.n.n.n.n.n.B.n.n.n.n.n.n.n.V.n.n.n.Q 3 : YXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.M.B.N.B.B.B.M.M.B.M.M.M.M.M.M.M.M.M.B.M.M.M.M.M.B.M.B.[ M.M.B.[ M.Z.M.M.B.B.B.M.M.M.M.Z.Z.Z.M.Z.M.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.B.U g u r p q 9 9 0 0 7 4 p w q 9 9 q q q w q w w 8 8 8 5 w 5 w 5 5 w w 5 w i w w 5 5 w q f g c B C P I G C C 8 7 4 , > , : > < N OX-XdXdXdXdXdXdXdXiXxXiXiXiXdXiXiX1X1X.X' 1 < < 4 , > > > > > : > , > 2 i z.,XOXfXhXiXiXfXiXpXiXiXiXiXaXiXiXiXiXpXiXuXpXpXpXpXpXiXfXuXpX-XuXuXuXpXpXpXuX7X5XM y y r p n T n.n.Q V.V.V.V.F.F.Q Q D.Q Q V.V.V.Q #XQ Q D.V.V.Q V.V.V.V.V.V.V.V.V.G.Q V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.Q Q Q n.n.n.n.V.V.n.V.V.n.V.V.n.Q n.B.V.n.n.n.Q V.V.V.V.V.n.n.V.n.V.n.V.m.n.n.n.n.n.n.n.B.n.n.V.V.V.V.B.Q n.n.Q n.n.n.n.V.n.B.n.n.V.V.V.Q n.n.n.n.n.m.n.V.n.V.! $ - YXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.Z.Z.B.Z.Z.Z.Z.M.M.M.M.M.M.M.M.M.M.B.M.M.B.B.B.B.B.B.Z.Z.Z.B.Z.B.Z.M.Z.Z.M.M.M.Z.Z.M.Z.M.Z.Z.Z.M.Z.Z.Z.M.M.M.Z.Z.M.Z.Z.Z.B.[ V u p p q 9 9 9 q w s z z j h f f i s a s s s f q f u u g g g g u g g g c g g g B V B A H I I I U W I I U g 8 6 , , 1 1 > : M |.uXaXgXgXhXgXdXaXiXfXfXdXhXiXiX1X[.x.N 1 > > < 5 4 1 > , , > > > & & & $ d n `. X1X1XpXpXpXaXiXdXaXdXdXiXdXdXiXaXiXpXpXaXdXdXpXpXpXuXpX7XuX5X|. XuX%X5X X&Xl.r y y r l T V.V.V.Q Q V.Q Q V.V.D.Q #XD.Q V.Q D.Q #XQ Q V.Q V.V.Q V.n.n.Q V.Q V.V.V.n.n.V.V.V.V.V.Q V.V.V.V.V.Q Q V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.Q n.n.n.n.Q V.n.V.n.Q n.Q V.V.n.n.n.V.V.Q Q m.V.Q V.V.V.n.n.n.n.n.n.V.V.n.n.n.Q Q n.n.Q V.n.V.V.n.V.n.n.n.V.n.n.V.V.n.n.V.B.n.V.n.V.V.n.n.n.Q Q n.n.Q n.V.T . $ YXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXM.M.B.Z.Z.Z.B.Z.B.B.B.M.U v.M.M.M.M.M.M.M.M.M.B.B.M.M.B.Z.Z.B.B.B.B.B.Z.Z.B.B.B.B.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.M.Z.Z.Z.B.B.Z.B.Z.M.U x h i i 9 w w w u c x B A H H H J H J K I U I I I U W M.M.M.W M.U [ [ W v.W U U W U U I I U W M.Q U R U I g 6 > > : > , ; & N |.fXdXbXgXzXhXVXdXxXdXdXiXfX X(.' , = > > , e 5 5 5 e > > > > & * % $ $ & & i c.,X X7XfXfXaXaXdXdXiXdXdXgXjXdXaXaXaXdXpXpXpXiXpXdXsXpXaXpX%X&X%X%X-X,X7X&XA.r y y r l D V.n.V.n.n.V.V.Q Q D.Q D.D.Q V.V.Q Q D.D.Q Q Q V.V.V.V.n.V.Q V.V.V.V.V.Q V.V.V.V.V.G.V.V.V.V.Q V.V.V.V.V.V.V.V.Q V.V.V.Q V.Q n.V.V.Q V.V.V.V.Q Q V.n.V.Q V.Q V.V.n.n.V.n.n.V.n.n.n.B.n.n.n.n.Q V.n.V.V.V.n.V.V.V.n.V.n.V.n.Q n.Q V.Q Q V.Q V.B.V.n.V.B.Q n.n.n.n.n.n.V.n.V.B.n.n.V.B.B.Q n.n.n.n.B.n.m.Q t X YXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXv.B.M.B.Z.B.M.B.Z.B.B.Z.B.M.M.M.M.M.M.M.M.M.B.M.M.M.M.B.B.B.Z.Z.B.Z.Z.Z.Z.M.M.M.B.B.B.Z.Z.Z.Z.M.Z.M.Z.M.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.B.B.U z c l h g g B G W Q W b.b.v.M.M.M.M.M.M.v.B.B.M.M.M.W W U M.W M.v.U v.M.M.M.W W Q Q Q Q M.M.Z.M.v.Q Q W G w > , , , ; - & % l |.cXjXlXbXVXVXdXdXuXOXz.n n p , $ - > > 1 5 5 7 8 8 7 1 , ; * * * & % % % % ; 3 ' W. XiXiXaXdXdXdXhXhXdXdXaXaXaXdXaXaXdXdXdXdXdXdXaXpXsXsXpXuXpXpXuX&X7XA.K y y r a Z V.V.V.V.V.n.Q V.Q D.Q Q Q D.V.Q D.D.V.V.Q D.V.V.V.Q n.V.V.V.Q V.Q V.V.V.n.V.V.V.V.V.Q Q V.n.V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.Q n.V.V.V.V.V.V.Q V.n.Q V.n.Q V.V.n.V.n.n.n.V.V.n.n.V.B.Q n.n.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Z.V.V.V.V.n.Q n.Q n.Q V.n.n.n.n.n.n.B.V.n.V.B.V.V.V.V.V.V.V.V.V.V.V.Q - . YXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.Z.Z.B.B.B.B.B.B.Z.B.B.Z.v.M.M.Q M.Q M.M.M.M.B.M.B.Z.Z.B.M.M.M.Z.B.B.M.M.M.B.[ B.B.B.M.Z.Z.Z.Z.M.M.M.M.Z.Z.M.Z.Z.Z.M.Z.Z.B.Z.Z.Z.B.B.v.F B m Y C U M.v.v.v.M.B.B.Z.Z.B.Z.Z.B.Z.A.Z.B.Z.M.M.M.M.M.M.M.v.v.M.M.M.M.M.v.W M.M.B.B.B.Z.M.M.Q W R I V e ; , > - # @ O # d J.bXzXbXVXiXfX,Xc.N N d = & % $ & , , 5 w u f g g g q 5 > * % % % % & % % % * = 1 N X XiXdXdXdXdXdXdXdXjXdXdXdXaXaXaXaXdXdXhXdXdXdXpX;XpXpXpX%XuX X&XZ.V.y y 9 r n T V.V.n.V.V.V.Q Q Q D.Q D.Q V.V.V.Q V.V.D.Q V.Q V.V.V.G.V.n.V.V.Q V.n.n.Q n.V.V.V.Q Q Q Q V.V.Q V.V.Q V.Q V.V.V.V.V.V.Q V.V.Q V.V.V.V.V.V.Q n.n.V.Q Q V.V.Q G.V.n.n.V.n.V.V.V.V.V.Q Q V.n.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.n.V.V.V.V.V.V.V.V.m.B.n.n.n.n.V.V.V.V.Q n.V.n.V.V.V.m.B.n.V.V.V.n.V.n.V.V.n.m.D X YXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXW Z.Z.Z.B.Z.B.M.M.M.B.B.B.B.B.M.v.M.M.M.B.M.M.M.M.Z.B.B.M.Z.Z.M.M.M.M.B.M.B.Z.M.B.B.M.M.Z.Z.M.Z.Z.M.M.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.B.Z.Z.Z.B.Z.Z.Z.Z.B.B.Z.M.B.B.B.B.M.B.Z.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.M.M.M.Z.M.Z.Z.Z.Z.Z.B.Z.Z.Z.Z.Z.Z.Z.Z.B.M.Q W I I I g e > = @ + O O + O < (.5X.X].c.c.d d , 2 $ % % % & = 5 t g j j j j x x j f 7 : & & % % % % % % % % : & 2 N N ].5XfXdXdXhXdXjXjXdXdXhXdXgXgXdXdXdXjXcXdXaXaXpXpX%XpX5X|.~.B.V.F 9 9 r l D V.V.V.n.V.Q F.F.Q Q D.Q D.V.V.V.V.V.V.D.Q V.Q V.Q V.Q V.V.V.V.V.Q V.V.n.V.V.Q V.V.V.V.V.V.V.Q V.V.Q V.V.V.V.V.n.V.V.V.V.n.Q n.Q V.Q n.V.Q V.Q Q Q V.n.Q V.Q Q n.n.V.V.V.V.V.V.n.V.V.n.V.V.n.n.V.n.Q V.V.V.V.V.n.V.V.n.n.Q V.n.V.V.Q V.n.V.n.n.n.n.n.B.n.V.V.N.N.n.n.n.V.Q n.n.V.n.n.n.n.V.V.V.B.V.V.r YXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.Z.B.Z.Z.B.B.B.M.M.B.B.B.B.B.B.B.Z.B.[ Z.Z.M.Z.B.B.Z.M.Z.M.Z.M.M.M.M.M.M.Z.M.M.B.B.M.Z.Z.Z.M.Z.M.M.M.M.M.M.M.Z.M.Z.M.Z.Z.B.B.B.B.Z.Z.Z.Z.Z.Z.D.Z.Z.Z.Z.B.B.B.B.B.M.B.Z.A.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.D.Z.Z.B.Z.Z.Z.Z.Z.B.Q U I I P V w = # X X X X X X # * : d d 0 2 @ X O % % % * = : 5 g j g g j c C P P V j a 5 < : = & & * % % * % % % & > 1 0 C.&XuXiXgXgXdXdXdXdXdXdXdXlXlXdXgXgXlXjXdXdXkXpXpX7X7X|.~.Z.B.M.i 9 p k b b.V.V.n.n.Q V.V.V.V.V.V.V.Q D.V.Q D.V.V.V.V.Q V.Q V.V.V.Q V.V.Q V.Q V.Q V.Q Q V.V.V.V.V.V.V.V.V.Q G.Q V.V.V.V.V.V.V.V.Q n.V.n.V.Q n.n.n.V.n.n.n.n.V.Q n.V.V.Q V.Q Q V.Q V.V.n.n.V.V.m.V.V.V.V.V.V.Q n.V.Q m.V.V.V.V.Q V.n.V.V.V.V.V.Q n.n.V.n.V.Q V.V.Q V.n.V.Q n.V.n.n.V.V.V.V.V.Q V.Q V.Q V.V.V.! $ YXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXQ Z.Z.Z.Z.B.M.Z.B.Z.B.B.Z.B.B.Z.Z.Z.B.Z.B.Z.Z.M.B.B.Z.B.Z.Z.Z.Z.Z.Z.Z.M.M.M.M.B.M.B.B.Z.B.Z.M.Z.M.M.M.M.M.M.M.Z.M.M.M.Z.Z.B.B.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.B.B.B.B.B.B.M.B.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.[ Z.M.M.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.B.Q I P G V B % X o o X o o X X + # O @ # O X X O % - ; : > e t c j j j B C P I U U C f w 8 7 6 , = & % % % * % # % % $ & & ; n |.OX,XiXaXjXdXjXdXlXlXlXlXgXkXjXlXjXdXdXaXpXpX7X`.Z.B.B.B.j 9 9 s b K V.V.V.V.V.Q Q V.V.V.Q V.V.V.V.V.Q V.V.Q n.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.Q V.V.Q V.n.n.n.n.n.n.n.n.Q Q V.n.n.n.n.n.Q n.V.Q n.V.V.V.V.V.V.V.V.n.V.V.n.n.V.V.n.V.n.Q V.V.Q V.V.Q V.n.V.Q V.V.n.V.n.V.n.B.n.Q Q n.V.V.n.V.V.V.V.V.V.V.V.V.V.Z.Q V.Q Q V.m.V.V.n.D . YXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXN.B.M.Z.B.B.Z.B.B.B.B.B.Z.B.Z.B.M.Z.B.Z.Z.B.B.M.M.M.Z.B.Z.Z.Z.Z.Z.Z.M.M.Z.B.B.M.M.M.M.Z.M.Z.Z.Z.M.M.M.M.M.Z.M.Z.M.Z.M.M.M.[ B.B.Z.Z.Z.Z.Z.Z.Z.B.Z.Z.B.Z.Z.B.B.M.B.M.B.[ Z.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.D.Z.Z.Z.Z.Z.Z.Z.D.Z.N.I G G G C < X o o o o o X o o X X O @ @ O O # - > ; , e q j c B V G P P U W W W P B p 8 w 9 8 < > = * * * # * % % @ O # * $ : 3 c.XX X7XuXjXjXjXcXlXlXlXlXlXlXgXdXdXdXjX7X7X*XZ.B.M.B.J 9 y r l Z m.n.V.n.Q V.V.V.Q V.V.V.V.V.V.V.V.Q V.Q V.V.V.V.V.Q V.V.V.V.G.V.V.V.V.Q V.Q V.V.V.V.V.V.V.V.V.V.n.Q Q V.n.V.Q V.V.Q Q V.n.Q n.n.n.Q n.V.Q Q Q V.n.V.Q V.n.Q Q V.V.V.V.V.n.n.V.n.V.V.V.n.V.V.Q V.m.V.Q Q V.V.V.V.V.n.V.V.V.Q V.m.V.Q V.n.Q n.n.V.V.V.V.V.V.V.B.V.B.m.Q Q B.V.V.V.n.V.V.V.n.V.n.V.r YXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.M.N.M.B.M.M.M.B.Z.B.M.M.B.Z.M.B.B.B.B.B.B.B.M.M.Z.M.B.B.Z.M.M.M.Z.Z.Z.M.Z.M.B.M.B.M.Z.Z.M.M.M.Z.Z.M.Z.M.M.M.M.M.Z.M.M.Z.B.B.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.B.Z.Z.Z.Z.B.Z.B.B.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.D.Z.Z.Z.M.M.M.Z.[ M.Z.Z.Z.D.Z.Z.Z.M.M.B.B.B.Z.Z.Z.Z.[ P G G C u # X o o o X X . o o X @ # $ # # $ & : 1 4 w j B C C P G I W v.M.M.N.M.U x q 9 w w 8 < : : ; & * # % % @ @ + # $ $ $ $ & - 2 d E.%X7XpXjXdXjXcXzXlXbXjXjXcXsXkX6XA.B.M.M.B.M.9 y y k b T n.n.n.V.Q Q V.V.Q Q V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.Q G.V.Q n.V.n.n.n.Q V.n.V.Q V.Q V.Q n.Q n.V.Q n.V.n.V.Q V.B.B.V.n.B.V.n.n.n.n.n.V.Q n.n.Q V.Q V.B.n.V.n.V.Q V.V.V.V.V.n.n.n.V.V.n.n.V.n.V.n.V.V.V.V.V.n.n.V.Q V.V.V.V.Q V.V.V.T - YXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXM.B.W M.M.M.M.M.B.M.M.M.M.B.M.B.M.Z.M.M.B.B.Z.Z.M.Z.B.B.Z.Z.M.M.B.M.M.Z.Z.Z.Z.M.M.M.M.M.Z.Z.[ M.Z.M.M.Z.Z.Z.M.M.M.M.M.M.M.M.B.B.Z.Z.Z.B.Z.Z.Z.Z.Z.Z.Z.D.Z.Z.Z.Z.Z.B.Z.B.Z.B.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.M.Z.Z.M.Z.Z.Z.Z.Z.B.[ M.B.M.Z.Z.Z.D.Z.M.I P P C u e # X X O o o . . . X + * * * ; * ; 5 w u x G P I P I [ M.B.B.B.B.B.B.B.R x 9 w 8 8 7 4 > ; ; ; * * % + + + + + + + # & & & : < t p l.A.~.A.5XsXjXxXcXkX0X7X&X).B.B.M.B.B.B.t y y t z D Q V.n.V.Q V.V.V.V.V.V.V.V.V.V.V.Q V.V.Q V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.Q V.V.V.Q V.Q V.Q V.G.V.V.Q Q V.Q Q Q Q V.V.V.V.Q V.Q V.V.V.V.V.Q V.n.Q V.V.Q n.V.V.n.V.V.V.V.Q V.B.V.n.n.n.Q V.V.V.V.V.V.V.V.V.V.V.V.n.V.m.n.n.V.V.V.V.Q Q n.V.V.B.n.n.n.n.B.V.V.k O YXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.Z.M.M.M.B.B.B.B.Z.B.Z.M.M.M.M.B.B.M.M.B.Z.B.M.Z.Z.B.B.B.B.M.Z.B.Z.Z.B.M.Z.Z.Z.Z.M.M.B.B.[ Z.M.M.Z.Z.Z.M.M.M.Z.M.Z.M.M.Z.M.B.Z.B.Z.Z.Z.Z.Z.Z.K.Z.Z.Z.Z.Z.#XZ.Z.K.B.Z.Z.Z.Z.Z.Z.Z.Z.B.Z.Z.Z.D.Z.Z.Z.Z.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.B.Z.B.B.B.Z.D.Z.M.W I I H g w e @ X o . . . . . X # * * 1 e e 8 c V C G U R R I I W M.M.B.B.B.M.M.B.v.R x 8 8 7 8 5 e ; ; ; ; ; * # # + # + O O % & > > 1 8 7 0 g A U M.K.A.'.*X&XkX0X7XqXB.M.B.B.B.Z.Z.v 8 y y z v Q n.V.V.Q Q V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.Q V.V.n.V.V.Q V.V.Q Q V.V.V.V.V.V.Q Q V.V.Q Q V.V.Q Q V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.Q n.Q n.V.V.V.V.n.V.Q n.Q B.n.V.n.V.V.V.n.V.V.V.Q Q V.Q B.V.V.B.V.V.n.V.n.V.V.n.n.V.V.Q V.V.V.V.V.V.n.Q V.n.V.V.n.V.V.n.V.V.V.n.V.B.V.T @ YXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXU Z.Z.B.M.[ Z.B.Z.B.B.Z.B.B.M.M.B.Z.B.M.M.B.B.M.Z.B.M.B.B.M.[ M.M.Z.M.Z.B.Z.B.B.Z.Z.M.B.M.B.B.Z.M.M.Z.Z.M.M.M.M.M.Z.Z.Z.Z.M.Z.B.M.B.B.Z.Z.Z.Z.Z.Z.B.B.Z.Z.Z.Z.Z.Z.M.B.Z.Z.Z.Z.Z.Z.Z.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.Z.Z.Z.#XZ.Z.Z.Z.Z.Z.Z.Z.B.Z.Z.Z.B.M.W W I G c w < * X . . . . . O + * , e 5 w V P P P U U W U U W M.M.B.M.B.B.M.M.M.B.B.M.Z i 8 8 5 5 e ; ; ; ; * % # # % # + + + * > > 1 8 8 0 j x E B.Z.Z.B.Z.Z.Z.$XP.Z.B.B.B.M.B.B.B.H y w w f b D Q V.Q V.V.Q V.V.V.V.Q V.V.Q Q V.V.Q V.Q Q V.V.V.V.n.Q V.V.V.Q V.Q V.Q V.Q V.V.V.V.V.V.Q V.V.V.V.Q V.Q V.V.V.V.Q V.V.V.V.V.V.V.Q V.V.V.Q Q V.V.V.V.V.Q V.V.n.Q V.V.V.Q Q Q V.m.V.V.V.V.n.n.V.n.V.V.V.V.V.m.V.V.V.V.n.n.V.V.V.m.V.V.V.n.V.m.Q V.V.V.n.V.n.n.n.n.V.V.V.m.V.V.V.V.V.V.n.m.n.2 YXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXM.Z.B.Z.Z.Z.B.B.B.B.B.B.B.Z.Z.B.B.B.B.Z.M.M.M.M.B.Z.M.B.B.Z.B.Z.Z.Z.Z.B.B.B.B.Z.M.Z.B.Z.Z.M.M.M.M.M.Z.M.Z.M.M.Z.M.Z.M.Z.M.Z.M.M.B.B.B.Z.Z.Z.Z.Z.Z.B.B.Z.Z.Z.Z.Z.Z.B.B.B.B.B.Z.B.B.B.B.B.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.B.B.Z.Z.Z.Z.B.W W W P x w > * @ o . . . . . O % ; , 4 u B P U I R U W U W v.M.B.B.B.B.M.B.M.M.M.B.B.Z.M.A s w w 8 5 e ; ; ; * % % * * # + @ @ % & & e 8 9 r c x K M.B.B.Z.B.Z.Z.Z.Z.B.A.B.B.B.M.B.B.[ y y y r b b T m.V.Q V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.Q Q V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.Q V.Q V.V.V.Q Q V.Q V.Q Q Q V.V.V.V.Q V.Q V.Q V.Q Q V.V.V.Q G.Q Q V.Q V.Q Q n.V.n.V.n.V.n.n.n.V.V.Q V.V.V.V.B.V.V.V.n.n.V.V.Q V.n.V.n.n.V.V.V.n.n.V.V.V.n.V.V.Q V.V.V.Q V.V.n.V.B.V.n.B.z YXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.B.M.v.M.M.M.B.B.Z.B.B.Z.B.B.Z.M.Z.M.M.M.M.M.M.M.M.M.Z.M.M.Z.Z.Z.B.Z.B.B.B.M.Z.M.M.Z.Z.Z.M.M.M.M.Z.M.Z.M.M.M.M.M.M.M.Z.Z.M.M.M.M.M.M.Z.Z.Z.Z.Z.Z.M.M.Z.Z.Z.Z.Z.B.M.B.B.Z.Z.B.Z.M.Z.M.Z.Z.Z.B.Z.Z.M.M.Z.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.B.B.Z.Z.Z.Z.[ W W U B r , & % O X o o o O @ * & 7 g B G P I U M.M.v.v.v.M.Z.Z.B.B.B.M.Z.M.M.M.Z.M.Z.M.M.V g w 5 5 5 e ; ; % % % % % $ @ @ @ # * & < 7 8 a z x Z W M.Z.Z.B.M.Z.Z.B.Z.#XV.#XQ D.Q Q Q 9 9 9 9 j b b T V.Q V.V.V.V.V.V.V.n.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.n.V.n.V.n.V.V.Q V.n.V.Q n.Q V.V.V.V.V.V.V.n.V.V.V.V.V.Q Q V.V.Q V.Q n.n.Q V.n.Q V.V.Q n.V.V.n.V.V.n.Q Q Q V.V.V.Q V.n.n.V.V.V.m.Q n.V.V.V.n.n.V.V.n.V.V.V.n.V.n.m.Q V.V.V.n.V.V.V.n.n.N.n.V.V.n.V.Q V.V.Q V.V.V.n.V.V.V.n.V.n.T @ YXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXU B.W M.Q v.M.M.M.B.B.M.M.M.B.M.M.Z.Z.Z.M.M.M.M.M.M.M.M.M.M.Z.Z.M.Z.Z.M.M.M.M.M.M.Z.Z.Z.M.Z.M.M.M.M.M.M.M.Z.Z.M.M.M.M.M.M.M.Z.M.M.M.Z.Z.Z.Z.Z.Z.M.M.Z.M.M.M.Z.Z.Z.M.M.M.Z.M.B.Z.Z.Z.M.Z.B.Z.B.Z.Z.Z.Z.M.Z.M.Z.M.M.Z.Z.Z.Z.Z.Z.Z.D.Z.Z.Z.Z.Z.Z.B.Z.Z.Z.M.M.M.W W A s < & % @ + X X O $ & > 7 f x P P U Q M.M.M.B.B.B.Z.B.B.Z.B.Z.M.Z.M.Z.Z.M.Z.M.M.Z.[ V g 5 5 5 5 ; ; % % % % % % @ @ @ @ * & > < 9 j x M v Q B.[ B.Z.B.B.B.Z.Z.Q #XQ Q Q Q #XQ 9 9 9 9 a b b T V.V.V.V.V.V.n.V.n.V.Q V.V.V.V.V.V.V.n.V.V.V.V.V.V.V.V.V.V.n.V.Q V.V.V.n.V.V.V.V.V.V.Q V.V.V.V.V.V.Q Q V.V.V.Q V.V.n.V.Q Q V.n.n.n.Q Q Q V.Q V.V.n.V.V.G.Q V.V.Q Q n.n.n.Q V.V.n.V.Q n.n.Q Q n.V.V.Q V.Q V.n.V.n.B.V.V.V.n.n.V.V.V.V.V.n.n.V.B.n.B.V.V.B.Q V.Q Q n.V.B.n.n.V.n.Q a YXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.M.M.W M.M.M.M.v.M.B.M.M.[ M.M.M.M.M.M.Z.B.B.M.M.M.M.M.Z.M.Z.Z.M.B.B.B.M.M.M.M.M.M.M.Z.Z.M.Z.Z.M.M.M.M.M.M.Z.M.Z.Z.Z.Z.M.M.M.Z.M.M.M.M.Z.M.M.M.M.M.Z.Z.M.M.M.M.Z.B.M.B.Z.Z.M.Z.M.Z.M.M.Z.B.Z.Z.Z.Z.Z.Z.Z.[ Z.Z.Z.Z.Z.Z.Z.[ M.Z.Z.Z.Z.B.Z.Z.Z.Z.B.Z.Z.Z.Z.Z.M.W W D c q < & $ @ # % & & e w f x C I I Q B.M.M.M.B.B.B.Z.B.B.Z.Z.B.Z.M.Z.M.M.M.M.M.M.M.M.W P B u 5 5 e * * % % % % $ + O O O $ & > , a z M x M E B.B.B.B.Z.Z.Z.M.B.V.V.Q #X#XD.D.Q 9 9 9 9 y z b T Q V.V.V.Q V.V.V.n.n.G.V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.Q V.V.Q Q Q V.Q Q V.V.V.V.V.V.V.V.n.Q V.V.Q V.V.V.V.Q V.V.V.V.V.V.n.V.V.Q Q n.n.V.V.V.n.Q V.V.n.V.V.V.n.V.V.V.Q n.n.n.V.V.n.V.V.Q n.n.n.n.V.n.V.V.V.V.V.n.n.V.n.V.V.n.V.V.V.n.V.V.n.n.V.V.n.n.V.Q Q Q V.V.V.n.V.V.n.V.V.m.T @ YXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.V.B.W M.M.M.M.B.B.M.M.M.M.B.Q Q M.M.M.Z.Z.M.M.M.M.M.M.M.Z.M.M.Z.M.M.B.Z.M.M.M.M.M.Z.Z.M.Z.M.M.M.M.M.Z.M.Z.M.M.M.M.M.Z.Z.Z.Z.M.Z.Z.Z.M.Z.M.Z.M.Z.M.Z.Z.Z.M.Z.Z.M.B.B.B.Z.Z.Z.Z.Z.M.Z.Z.Z.B.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.M.M.Z.Z.Z.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.W F x j q 7 , : > , , , 7 q h Z I Q M.B.B.B.B.M.B.M.B.B.B.B.B.M.B.M.Z.M.Z.M.M.M.Z.Z.B.Z.B.[ U V g 8 e * * % % % # @ + O O O @ * & > q x x v M U B.B.B.M.Z.M.B.Z.M.V.V.#XQ #XQ D.Q 9 9 9 9 y k b b ! n.V.n.V.V.V.Q V.n.Q V.Q V.V.V.V.V.V.V.V.V.Q V.V.V.Q V.V.V.V.V.V.V.G.n.V.n.V.Q Q V.V.V.V.V.V.V.V.Q Q V.V.V.V.V.n.V.V.V.n.Q V.n.n.n.Q V.V.Q V.n.n.V.n.n.V.V.V.V.V.V.V.V.n.V.m.V.Q V.V.Q n.n.n.n.m.V.n.n.n.V.V.V.V.V.n.V.V.V.V.Q n.n.B.n.n.B.B.V.V.m.Q B.n.Q Q V.B.V.n.V.V.n.V.6 YXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXM.M.B.B.W v.M.M.M.M.B.M.M.M.B.M.U M.M.Z.M.Z.Z.M.M.M.M.M.B.M.Z.M.M.M.M.M.M.Z.M.Z.M.M.M.M.M.Z.Z.M.M.M.M.M.M.M.M.M.M.M.M.Z.M.Z.Z.Z.Z.M.M.M.Z.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.M.M.M.M.M.B.M.B.Z.Z.Z.Z.M.M.Z.M.Z.M.Z.M.Z.Z.Z.Z.#XZ.M.Z.Z.Z.Z.M.Z.M.M.Z.B.Z.Z.Z.Z.Z.B.Z.Z.Z.Z.M.M.M.J M z g w 5 e > , 1 2 0 h M J M.M.Z.M.Z.M.M.B.B.Z.B.B.B.Z.B.B.M.M.M.Z.M.M.M.M.M.M.Z.Z.Z.M.M.W V g 7 & * % % # # @ + O O O @ & & > 6 z x M v U B.B.B.M.M.B.M.B.B.V.V.V.V.Q #XQ D.Q T 5 9 y r z b T ! V.V.V.V.Q n.Q V.V.Q V.V.Q V.V.V.V.V.V.V.V.V.Q n.V.V.V.n.V.V.V.V.V.Q Q V.V.V.V.V.V.V.V.V.V.V.Q Q V.Q V.V.n.V.Q V.V.V.V.n.V.n.V.n.Q V.Q Q V.Q Q V.n.n.Q V.Q V.V.n.V.V.n.V.V.n.V.V.n.V.V.Q Q V.B.n.n.B.n.V.n.V.n.V.Q V.V.V.Q V.n.n.n.B.B.n.B.n.V.n.n.V.n.n.V.V.V.Q V.V.B.V.K X YXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXB.M.M.M.M.M.v.v.M.M.M.B.M.B.M.M.Q Q M.M.M.M.Z.M.Z.Z.M.M.B.M.B.Z.[ B.Z.M.M.M.Z.[ Z.Z.M.M.M.Z.Z.M.Z.M.M.W M.M.M.Z.Z.M.M.M.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.Z.Z.Z.Z.B.B.M.Z.Z.M.M.Z.Z.M.M.Z.M.Z.Z.Z.Z.Z.D.Z.Z.Z.Z.Z.M.Z.Z.Z.M.M.B.B.B.Z.Z.Z.Z.Z.B.B.B.B.B.Z.Z.Z.U A c z g i w 5 < < 7 j A W B.Z.M.M.Z.Z.B.M.B.Z.B.M.M.B.M.B.Z.B.Z.B.Z.M.[ M.M.M.M.M.M.M.B.Z.M.W x i ; * % % # + @ O X O O $ & : , 1 c M v v U B.B.B.B.B.B.B.M.Z.N.N.B.B.D.Q #XQ Q V.9 9 y y j b Z n.Q V.V.V.V.V.Q Q V.V.V.V.V.V.V.Q V.Q V.V.V.V.Q V.n.V.n.V.V.V.V.Q V.V.V.n.V.V.V.V.V.V.V.V.n.V.V.V.V.V.V.n.n.V.V.Q V.Q V.Q G.V.Q n.n.n.Q V.Q V.V.Q Q V.V.V.V.V.n.V.n.V.n.V.V.V.V.n.V.n.V.! Q Q V.n.n.n.n.n.V.V.V.n.m.V.V.n.n.V.n.n.n.n.n.n.n.n.n.V.V.n.Q n.V.n.n.n.Q n.n.m.> YXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXB.B.v.M.M.B.M.v.v.M.M.M.M.B.M.Q Q M.M.M.M.M.Z.Z.Z.[ M.M.B.Z.M.B.B.M.Z.M.M.Z.M.Z.B.Z.Z.Z.M.Z.M.M.Z.M.M.W M.M.M.M.M.M.M.M.Z.M.M.Z.Z.Z.Z.M.Z.M.M.M.M.M.Z.Z.M.M.Z.Z.Z.Z.Z.M.B.M.M.M.B.M.Z.M.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.B.Z.Z.Z.Z.Z.B.B.M.Z.Z.Z.Z.B.M.K B x x c u i p h Z U B.Z.Z.Z.B.M.Z.M.B.M.B.M.M.M.M.B.M.Z.B.B.B.B.Z.M.M.W M.M.B.M.M.Z.M.B.M.[ K f 6 ; * % + # @ O X O # $ & > 1 < k v v M b.V.B.B.B.Z.B.B.M.B.B.V.B.M.D.Q D.Q V.Q 9 9 y y a b n ! V.V.Q V.V.Q V.Q Q V.V.V.V.V.n.Q V.Q Q V.V.V.V.V.V.V.Q V.V.V.V.V.V.Q V.V.V.Q n.V.V.Q V.V.V.Q V.V.Q V.G.n.n.V.V.Q V.V.n.V.V.n.V.Q n.n.Q V.V.n.V.n.V.Q V.V.Q V.V.V.n.V.V.V.V.V.V.n.V.V.V.Q V.n.Q n.n.n.n.n.B.Q n.B.V.n.V.V.Q Q n.n.n.B.n.n.n.B.V.n.V.V.Q n.Q Q Q n.n.n.n.Z . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXB.Z.B.M.M.B.B.M.v.M.M.M.M.M.B.M.U Q M.M.M.M.M.M.M.Z.Z.B.M.M.M.Z.B.B.M.M.B.M.M.Z.Z.M.M.M.M.Z.M.Z.M.Z.M.M.M.M.M.M.[ M.Z.M.M.M.Z.Z.Z.M.M.M.Z.Z.M.Z.M.Z.M.M.Z.Z.M.Z.Z.M.Z.Z.M.Z.B.Z.M.M.M.M.Z.M.Z.Z.M.M.M.Z.Z.M.Z.Z.Z.Z.D.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.B.B.B.Z.B.B.Z.Z.Z.Q U C Y c V V F b.B.A.Z.A.B.B.Z.N.M.M.M.M.B.Z.Z.B.M.B.B.[ B.B.B.B.M.B.M.M.M.M.M.M.Z.M.B.B.Z.M.Q c w 6 ; * + + + O O + # & & > 1 0 h v v Z v.B.B.B.B.[ Z.B.B.M.V.V.B.N.Q Q V.V.Q V.9 9 y y r j b T Q V.Q V.n.Q V.V.V.V.Q V.Q V.V.V.Q V.Q V.Q V.V.Q V.Q G.Q Q Q Q Q V.V.n.V.Q V.n.V.V.V.V.V.Q n.Q V.V.V.Q Q V.n.V.V.Q V.Q V.V.n.V.V.n.Q V.n.Q n.n.n.Q Q V.n.V.V.V.V.n.n.Q n.Q n.V.V.V.V.n.Q Q n.B.n.V.n.N.V.V.n.Q V.V.V.V.n.Q Q n.B.n.n.n.B.n.V.V.V.V.n.n.Q Q V.n.V.m.B.! O YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXB.B.M.M.B.B.M.M.M.M.M.Q M.M.B.W U M.M.M.Z.M.M.M.Z.Z.M.M.M.M.M.Z.M.M.M.Z.M.M.M.M.Z.M.M.M.M.M.M.Z.Z.Z.M.Z.M.Z.M.M.M.M.M.M.M.Z.Z.M.M.M.Z.M.M.Z.Z.M.[ M.Z.M.Z.M.Z.Z.M.Z.Z.M.Z.M.Z.Z.Z.[ B.Z.B.Z.Z.Z.Z.[ Z.M.M.M.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.B.#XZ.Z.Z.Z.Z.Z.Z.Z.M.Z.M.M.[ M.W W M.M.Z.Z.Z.Z.B.B.B.Z.B.M.M.M.M.Z.Z.B.B.M.M.B.Z.Z.B.M.M.Z.M.Z.M.M.M.M.M.M.B.M.B.M.Z.M.F s 9 0 , % # @ @ @ @ $ & : < 2 r a M M H M.B.B.B.B.B.Z.Z.B.Z.Z.V.B.B.B.B.Z.B.Q Q a y y y 9 g z T V.Q Q V.Q V.Q V.n.V.V.V.Q V.n.V.V.V.V.G.Q V.V.n.V.V.V.V.V.Q n.V.Q V.Q V.Q V.V.V.n.V.n.Q n.V.V.V.V.V.G.Q V.V.V.V.Q V.V.V.n.V.n.Q Q n.n.n.n.n.n.n.n.V.Q V.V.V.V.V.Q Q n.n.V.Q n.V.V.V.n.n.n.V.V.n.V.V.n.n.V.n.n.n.V.n.Q n.n.n.Q B.n.n.n.V.V.V.V.V.V.n.V.Q V.m.V.V.n.Q k YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXB.B.B.B.B.B.M.M.M.B.B.M.[ M.N.B.U v.v.M.M.M.M.M.B.M.M.M.M.M.M.M.M.Z.M.Z.M.M.M.M.M.M.M.M.Z.Z.Z.Z.Z.Z.M.Z.M.Z.M.M.Z.M.Z.Z.M.M.M.Z.Z.M.Z.[ Z.Z.M.M.Z.Z.Z.M.Z.Z.Z.M.M.Z.M.M.Z.Z.Z.Z.Z.Z.Z.B.B.Z.Z.Z.Z.#XZ.Z.M.Z.Z.Z.M.Z.Z.M.Z.M.Z.Z.Z.Z.M.Z.Z.B.M.Z.B.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.B.Z.Z.Z.Z.Z.Z.B.Z.B.M.M.M.B.M.B.B.B.Z.Z.B.B.[ B.M.Z.M.Z.M.M.Z.M.M.M.B.M.M.Z.Z.Z.B.Z.Q j q 9 7 < > ; * # $ & & : < 0 p k v A b.B.B.B.B.B.B.B.Z.Z.Z.Z.Z.B.B.Z.B.Z.Z.D.Q a y 8 y 9 t z Z Q V.V.Q V.Q V.V.V.V.n.V.n.V.V.V.V.Q V.Q V.V.V.V.V.V.Q V.V.Q n.Q V.Q Q V.V.V.V.V.V.V.V.Q Q Q Q Q V.Q V.n.Q V.n.V.Q V.Q V.V.n.V.G.V.n.n.Q n.n.n.n.Q Q n.Q V.Q n.V.n.n.n.n.V.V.n.V.n.V.V.Q V.n.V.V.V.n.n.V.n.V.V.V.V.V.V.n.n.n.n.n.n.n.V.n.n.n.n.n.V.V.V.n.V.n.n.n.V.T o YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXM.B.M.B.B.Z.B.B.B.B.B.B.M.M.B.Q Q M.M.M.M.M.M.M.M.M.B.Z.M.Z.M.Z.M.M.M.Z.M.B.Z.M.M.M.Z.M.Z.Z.Z.M.Z.M.Z.Z.M.Z.Z.M.Z.M.M.Z.Z.M.M.M.M.Z.M.M.M.M.M.Z.M.M.M.Z.M.Z.[ Z.M.Z.Z.Z.Z.Z.Z.B.Z.Z.M.B.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.B.B.[ #XZ.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.B.Z.Z.Z.Z.Z.B.Z.Z.B.B.M.M.M.M.Z.Z.B.B.B.Z.Z.M.B.B.Z.M.M.[ Z.M.Z.Z.M.M.M.B.M.M.Z.Z.Z.B.v.S k t 8 5 1 , , > & & : < 9 p s z S [ M.B.M.B.B.B.B.B.B.M.Z.V.Z.B.M.B.Z.Z.Z.F.V.t 9 y 9 y y k b Q Q Q V.Q V.V.V.V.V.V.Q n.V.V.n.V.V.Q Q V.V.Q V.V.V.V.V.V.V.V.V.Q Q Q Q n.V.V.n.n.V.V.n.n.V.Q Q Q V.V.V.Q V.V.V.Q V.n.n.Q V.V.V.n.V.V.n.V.Q n.n.n.n.Q V.V.Q Q n.n.n.V.n.Q V.V.V.V.V.n.n.n.V.V.Q Q V.V.V.n.Q V.V.V.n.V.n.Q V.V.n.n.V.V.n.n.n.n.V.V.V.V.V.n.V.B.V.m.> YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXB.M.M.B.B.B.Z.M.B.B.B.B.B.B.B.B.Q M.M.M.M.M.Z.M.M.M.M.M.B.M.M.Z.Z.M.M.M.M.Z.M.M.M.M.M.Z.M.M.M.Z.M.Z.Z.M.Z.Z.Z.M.Z.Z.M.M.M.M.Z.Z.M.M.Z.Z.M.M.Z.Z.M.Z.Z.M.Z.M.Z.M.M.M.M.M.M.M.B.B.[ Z.M.Z.Z.D.Z.M.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.M.Z.Z.M.Z.Z.Z.M.M.Z.Z.Z.Z.Z.B.Z.Z.Z.Z.Z.D.Z.Z.M.Z.M.Z.M.Z.M.B.B.B.B.Z.Z.Z.Z.Z.Z.B.Z.B.Z.M.M.M.M.[ Z.Z.Z.Z.Z.Z.B.Z.Z.Z.Z.Z.M.Z.M.M.M.M.M.M.M.M.Z.B.Z.B.B.U M j a q 8 7 0 8 7 < < 0 r s x K v.B.B.B.B.B.B.B.B.B.B.B.B.Z.Z.Z.B.Z.Z.Z.Z.V.V.Z 9 8 8 8 9 a b Q V.Q V.V.V.V.V.V.V.V.! V.V.Q n.V.Q Q V.V.n.V.V.V.Q V.V.V.Q V.Q V.V.n.Q V.V.V.n.n.V.n.V.Q Q V.V.Q V.V.Q V.V.V.V.Q Q n.n.n.Q n.V.Q V.V.V.Q Q n.n.Q V.V.V.V.Q n.n.n.Q V.V.V.B.n.V.V.Q n.n.n.Q V.Q V.V.V.n.V.m.V.n.V.V.V.Q Q V.n.n.n.n.n.n.V.Q n.n.n.V.V.V.n.n.n.V.a YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXM.B.B.Z.B.B.Z.B.M.B.Z.Z.B.M.B.M.v.M.M.M.M.M.B.M.B.M.M.Z.Z.Z.M.Z.M.M.M.Z.M.Z.M.M.M.M.M.M.M.M.M.M.Z.M.M.B.B.M.M.Z.M.Z.[ Z.M.Z.M.Z.M.Z.M.Z.Z.M.Z.M.Z.M.Z.M.Z.M.Z.M.Z.Z.M.Z.M.Z.M.M.Z.Z.M.Z.Z.Z.Z.M.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.[ M.Z.Z.Z.Z.Z.Z.Z.Z.D.Z.Z.Z.Z.Z.Z.Z.B.Z.B.Z.Z.Z.Z.M.Z.B.B.B.Z.Z.M.Z.Z.Z.Z.B.M.B.Z.M.M.M.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.Z.Z.M.Z.B.M.M.M.M.M.B.Z.B.B.B.M.M x c z z j p 9 q 8 9 j v S b.M.B.B.M.B.B.M.B.B.B.B.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.V.Q Q y 9 9 9 y r b ! Q V.V.G.V.V.V.V.V.V.V.V.V.V.V.Q V.Q V.Q V.V.n.V.Q V.V.V.V.V.V.V.n.n.n.V.n.V.Q n.n.n.V.Q Q Q V.V.Q V.V.n.n.Q V.V.Q Q Q V.V.n.V.V.V.V.V.V.V.V.n.V.n.V.n.V.Q n.Q n.n.m.Q V.n.n.n.V.n.n.n.n.V.n.n.V.V.n.V.V.n.V.V.Q Q n.n.n.Q B.Q n.n.Q V.V.V.n.n.n.n.n.V.n.V.n.M YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXB.Z.B.B.B.B.B.Z.Z.B.Z.B.M.M.M.B.M.v.M.M.M.M.B.M.M.Z.M.B.B.B.B.M.Z.M.M.Z.Z.M.Z.M.M.M.M.M.M.M.Z.M.M.Z.Z.Z.Z.Z.M.M.M.M.Z.M.Z.M.Z.M.Z.M.Z.M.M.Z.M.Z.M.Z.M.Z.M.Z.M.Z.M.M.M.Z.Z.B.M.M.B.Z.Z.Z.Z.Z.Z.B.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.D.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.B.B.B.M.Z.Z.Z.M.Z.Z.Z.Z.M.Z.B.Z.B.Z.Z.M.B.Z.Z.M.B.Z.Z.B.Z.Z.Z.M.Z.Z.M.Z.B.M.M.B.M.B.M.Z.B.B.M.K x x z c c x c j h x F E V.Z.B.v.B.B.B.B.B.B.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.V.V.V.g 9 5 9 9 y z R Q Q V.Q V.V.V.V.V.V.n.V.n.V.V.V.V.V.V.V.V.n.V.V.V.Q V.Q V.V.n.V.n.V.Q Q V.V.n.n.n.V.n.n.V.V.Q Q V.V.Q n.n.Q V.V.Q n.n.n.Q Q V.Q V.V.n.V.V.V.V.V.V.V.V.V.Q n.V.V.V.B.V.Q V.n.n.V.n.Q n.n.n.V.n.m.Q Q Q n.V.n.V.V.n.n.n.Q V.V.V.V.n.Q V.V.V.n.n.V.V.V.V.V.n.T YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXB.Z.B.B.B.B.B.Z.Z.Z.B.Z.B.M.M.M.M.v.M.v.M.M.M.M.B.M.B.B.M.M.Z.Z.B.M.Z.Z.M.Z.Z.M.Z.M.M.[ M.M.Z.M.Z.M.Z.Z.Z.Z.Z.Z.M.M.Z.Z.M.Z.M.Z.M.Z.M.Z.M.M.M.M.Z.Z.[ M.Z.M.Z.M.Z.Z.Z.Z.Z.B.M.Z.B.Z.Z.Z.M.Z.B.M.M.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.#XZ.Z.Z.#XZ.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.M.B.Z.M.Z.M.B.Z.Z.M.Z.B.Z.M.M.Z.Z.Z.Z.M.Z.M.Z.M.M.Z.Z.M.Z.M.M.B.B.B.Z.M.B.B.M.M.L x z z x z z c v U Q B.Z.Z.B.M.B.Z.B.Z.K.Z.Z.Z.Z.D.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.V.Q n.b 9 9 9 9 y g T ! n.V.V.Q Q V.V.n.V.V.n.n.Q V.Q V.V.V.V.Q Q G.V.V.V.V.V.V.Q V.V.V.n.Q V.n.n.n.Q V.V.Q n.n.Q V.V.Q Q Q Q Q Q n.V.V.V.Q V.Q V.V.V.V.V.V.Q Q V.n.n.V.Q Q V.Q Q V.n.V.n.n.n.n.n.V.V.Q Q n.V.V.V.n.n.n.V.V.V.V.V.V.n.n.V.n.n.V.n.V.B.Q V.V.V.V.V.V.V.V.V.V.V.V., YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXB.Z.Z.Z.Z.Z.Z.B.M.Z.Z.B.[ M.M.B.B.M.v.v.M.M.M.M.M.Z.Z.Z.M.M.Z.M.M.M.M.Z.M.M.M.M.M.M.M.M.Z.M.M.Z.M.Z.Z.Z.M.Z.Z.Z.M.M.M.M.M.M.M.Z.M.Z.M.M.Z.M.Z.Z.M.M.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.B.B.Z.B.Z.M.Z.Z.B.Z.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.D.Z.#X#XD.#XD.D.#XZ.Z.Z.Z.Z.Z.Z.B.Z.B.Z.Z.Z.M.Z.M.Z.Z.Z.[ Z.Z.Z.Z.Z.B.M.Z.M.Z.Z.Z.Z.Z.M.B.M.Z.Z.Z.Z.Z.Z.Z.M.Z.M.Z.Z.M.B.B.M.M.B.M.M.M.M.Z.M.M.B.M.v.F M x x x x Z J Q v.B.B.B.B.B.B.B.B.B.Z.Z.B.Z.Z.Z.Z.D.Z.Z.Z.B.Z.Z.Z.Z.V.Q V.T y 5 y y y a D Q n.V.V.V.n.Q V.n.n.V.Q V.V.V.Q V.V.Q V.V.Q n.V.V.V.Q V.Q V.V.n.V.V.G.V.n.n.n.n.n.V.n.n.n.V.Q Q V.V.V.V.n.V.V.Q V.V.Q n.V.V.Q V.Q Q V.V.V.n.G.V.n.V.V.Q V.Z.Q m.V.Q n.n.n.n.V.V.Q V.V.n.m.V.n.n.Q V.Q V.Q Q Q m.V.Q Q m.V.Q V.V.n.Q V.n.m.V.V.V.n.V.V.V.T & YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYX M.B.B.Z.B.Z.M.Z.M.Z.Z.Z.M.M.Z.Z.M.M.M.M.M.[ M.M.M.M.B.B.Z.M.M.M.M.B.Z.Z.B.M.M.M.Z.Z.[ M.M.M.M.B.Z.M.Z.M.M.M.Z.Z.M.M.M.M.M.M.M.Z.M.M.Z.M.Z.M.M.Z.M.Z.Z.M.Z.Z.M.M.Z.M.Z.Z.Z.Z.[ Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.#XZ.Z.D.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.D.D.$X$X#X#X#X#X#XZ.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.M.Z.Z.Z.Z.Z.M.M.Z.M.M.Z.M.M.M.Z.Z.Z.Z.Z.Z.M.M.M.M.Z.Z.Z.Z.Z.Z.M.Z.M.[ Z.M.M.Z.M.M.M.Z.Z.M.M.M.M.M.B.B.B.Z.M.U U G V U W M.M.Z.M.M.M.M.Z.M.Z.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.B.B.Z.Z.Z.[ Z.M.B.Z.Z.i 8 9 9 9 a A n.V.V.V.V.V.Q n.Q V.V.V.n.V.V.Q n.n.Q V.V.V.V.V.n.V.Q V.V.Q V.V.V.n.V.Q n.n.n.n.n.n.n.n.n.Q V.V.Q Q G.V.Q V.V.V.n.Q V.V.Q Q V.V.V.m.V.n.n.n.V.n.n.n.n.V.m.V.V.V.V.Q Q V.Q V.n.n.V.n.Q n.V.n.n.m.n.Q n.V.n.m.n.n.n.n.Q V.n.V.n.Q n.V.n.V.n.n.V.V.V.V.V.V.D X YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYX M.B.B.B.B.Z.Z.Z.Z.M.B.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.Z.M.M.M.M.Z.Z.B.Z.Z.M.Z.M.M.M.M.M.Z.M.Z.Z.Z.Z.M.M.Z.M.M.M.Z.Z.M.Z.M.M.Z.Z.M.M.M.M.Z.M.Z.M.M.Z.M.Z.[ Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.D.Z.D.Z.D.$X$X$X$X$X$X#XD.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.Z.M.Z.M.Z.M.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.D.Z.Z.Z.M.Z.M.M.Z.M.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.Z.Z.M.M.Z.B.M.B.B.M.B.B.M.[ M.M.M.M.M.M.M.Z.Z.M.Z.Z.M.M.M.Z.M.Z.Z.Z.M.Z.Z.Z.Z.Z.B.B.B.B.M.B.B.B.Z.j w 8 9 9 a Z n.Q B.Q V.V.V.n.V.V.V.V.V.V.Q n.n.Q V.Q V.Q V.n.V.V.Q Q n.n.n.Q V.V.V.V.V.Q n.n.n.n.n.n.n.Q V.Q V.Q Q V.V.Q Q Q n.n.Q Q V.V.Q Q Q Q B.n.n.V.n.V.V.V.V.n.V.Q Q Q V.V.Q Q V.Q V.n.Q V.V.V.n.V.Q n.n.V.V.n.n.V.n.n.n.B.V.V.V.V.n.V.Q n.n.Q V.m.Q n.V.V.Q ! t YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYX M.B.M.M.Z.Z.M.M.Z.Z.Z.M.Z.Z.B.Z.M.M.Z.Z.M.M.M.M.B.M.M.M.M.M.M.M.M.M.B.B.Z.M.Z.Z.Z.M.Z.M.M.M.M.M.Z.Z.Z.M.Z.Z.M.M.M.Z.Z.M.M.Z.[ M.Z.M.Z.Z.M.M.M.Z.M.M.M.M.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.D.D.Z.Z.Z.Z.Z.Z.#X#X$X$X$X$X$X$X#XZ.Z.Z.Z.M.M.Z.M.Z.Z.Z.M.Z.M.Z.M.Z.Z.M.Z.M.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.M.M.M.M.M.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.M.M.M.M.M.M.B.B.B.M.M.M.M.B.Z.M.M.M.M.M.[ M.M.M.M.M.M.Z.M.Z.M.Z.M.M.Z.M.M.B.B.B.Z.B.M.B.M.B.B.B.m 8 9 9 y t B Q Q B.m.V.V.V.V.V.n.n.V.V.V.Q Q Q V.V.V.Q Q n.V.Q G.Q n.n.n.V.n.V.V.n.V.n.Q n.n.Q n.Q n.Q V.Q V.Q V.Q V.Q Q n.n.n.n.n.Q Q Q n.n.n.Q V.n.V.m.Q V.V.V.n.V.n.V.Q Q Q Q Q Q V.Q Q n.n.V.V.V.V.V.Q n.n.V.n.V.V.V.V.Q Q n.n.V.n.n.V.V.Q n.n.n.n.V.n.V.n.V.m.S - YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYX [ Z.M.Z.B.Z.Z.Z.Z.M.M.M.M.B.Z.Z.M.M.Z.M.Z.B.B.Z.B.Z.Z.Z.Z.M.M.M.B.B.B.B.B.Z.Z.Z.M.Z.Z.M.M.M.Z.B.M.M.M.Z.M.M.M.Z.M.M.M.Z.Z.Z.Z.Z.M.M.Z.Z.Z.M.M.M.Z.Z.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.#XZ.Z.Z.#XZ.Z.#X#X#XZ.#X$X$X*X$X=X$X$X$XZ.Z.Z.Z.Z.Z.Z.M.Z.Z.M.M.M.M.M.M.Z.Z.Z.[ M.Z.M.M.M.M.Z.Z.Z.Z.Z.Z.Z.M.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.M.Z.Z.M.M.M.M.M.M.B.B.M.M.M.M.Z.B.M.M.Z.Z.M.M.M.B.M.Z.M.M.Z.Z.M.Z.[ M.Z.M.Z.Z.M.B.B.M.Z.B.Z.B.M.B.B.B.M.F 9 8 w y s Z n.Q B.Q n.V.V.Q V.V.V.V.V.V.Q n.V.Q V.n.V.V.n.n.V.V.n.n.Q Q Q V.n.n.V.V.n.Q n.n.V.V.V.V.V.V.V.Q Q V.Q Q V.n.n.n.n.n.n.V.Q n.n.V.Q Q Q n.n.V.V.V.n.V.V.V.n.V.V.F.V.V.V.V.Q Q V.V.m.V.n.V.V.V.B.n.n.V.n.V.V.V.n.V.V.V.V.n.V.V.Q V.V.n.n.n.n.n.n.V.V.V.Q y YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYX v.B.M.B.M.M.Z.Z.M.M.M.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.Z.B.Z.B.M.M.M.M.M.Z.M.M.M.Z.Z.M.Z.Z.Z.M.M.M.M.Z.M.Z.M.M.M.Z.M.Z.Z.M.M.Z.M.M.M.Z.Z.Z.Z.Z.M.[ M.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.D.D.Z.Z.Z.Z.D.Z.Z.Z.Z.Z.D.D.#X$X#X#X#X$X$X*X$X*X*X*X$X#X#XZ.Z.Z.Z.M.Z.Z.M.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.M.Z.M.M.M.Z.Z.Z.Z.Z.Z.M.Z.M.M.M.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.M.M.M.M.M.B.M.M.Z.M.M.M.M.B.B.B.Z.M.M.Z.M.M.B.M.M.Z.M.M.M.Z.M.Z.M.Z.M.Z.B.B.Z.M.B.M.M.B.B.B.B.B.W p 9 9 y a Z n.Q n.n.V.n.V.n.V.V.n.V.V.V.Q V.Q n.n.V.n.V.Q V.Q V.V.V.n.n.n.Q Q V.V.n.Q Q n.n.n.Q V.n.V.V.V.Q Q V.Q n.n.n.n.n.n.V.Q V.V.n.n.n.n.n.n.n.n.n.V.V.n.n.V.V.V.V.V.V.n.V.Q V.V.n.V.V.V.V.V.V.V.V.V.V.Q V.V.V.n.V.V.B.V.V.m.V.V.V.m.V.n.n.V.n.n.m.V.Q V.Q l @ YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYX v.M.Z.Z.B.Z.M.Z.Z.M.M.M.Z.M.M.M.Z.Z.Z.M.Z.B.M.M.M.Z.Z.B.Z.Z.M.M.M.M.M.Z.Z.M.Z.M.Z.Z.M.M.M.B.M.M.M.Z.M.Z.M.M.M.Z.M.M.M.Z.Z.M.Z.Z.Z.Z.M.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.D.Z.Z.D.Z.Z.P.Z.Z.Z.Z.Z.Z.Z.#XZ.Z.D.Z.Z.D.#X#X#X$X$X*X*X*X$X$X#X#XZ.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.M.M.Z.Z.Z.Z.#XZ.M.Z.M.Z.M.M.M.Z.Z.Z.M.M.B.M.M.M.M.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.M.B.M.M.M.B.M.B.M.M.M.M.M.M.B.B.B.M.M.M.M.B.M.M.B.M.Z.M.Z.M.Z.M.M.Z.B.Z.M.B.B.B.B.M.M.M.B.B.B.M.B.B.x q 9 r a D n.n.n.n.Q n.V.V.V.V.V.V.n.n.Q Q V.V.V.Q n.V.n.Q Q V.n.n.V.V.n.n.V.Q V.V.n.Q Q n.n.Q V.Q Q Q V.V.Q n.Q V.Q n.n.n.n.Q Q Q Q n.n.n.n.n.n.n.n.Q V.n.V.V.n.n.V.V.Q V.V.V.V.Q V.V.V.n.V.n.n.V.V.V.Q Q V.V.V.V.V.V.Q m.n.V.n.V.n.V.n.n.V.V.V.Q n.Q n.V.Q v @ YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYX W B.B.B.B.Z.[ Z.Z.M.M.M.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.M.M.Z.M.Z.M.Z.Z.Z.M.M.M.Z.M.Z.Z.M.Z.Z.M.Z.M.M.Z.Z.M.M.M.M.M.M.Z.Z.Z.M.Z.Z.M.Z.Z.Z.M.Z.M.M.Z.Z.M.Z.Z.Z.M.Z.Z.M.Z.M.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.D.Z.Z.Z.#XZ.Z.#XZ.D.Z.Z.#XZ.#X$X$X$X=X$X$X$XD.Z.Z.Z.Z.M.Z.Z.M.M.Z.M.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.M.M.Z.Z.M.Z.M.Z.Z.M.M.Z.M.M.M.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.Z.M.Z.Z.Z.Z.M.Z.M.M.M.M.M.B.M.M.M.M.M.M.B.M.Z.Z.M.M.M.M.Z.Z.M.M.Z.Z.M.Z.Z.Z.M.B.M.B.M.M.B.M.B.M.M.B.M.B.M.B.K s 9 y u D n.n.n.n.V.V.m.V.V.V.V.n.n.Q V.n.n.Q V.V.Q V.Q Q Q V.n.V.V.V.Q V.V.Q V.V.Q n.Q Q Q Q G.V.V.V.V.Q V.Q V.V.n.n.n.n.n.Q V.V.Q n.n.n.n.n.n.n.n.Q n.V.V.n.V.V.n.V.V.V.V.V.V.Q V.n.V.V.n.Q V.Q V.Q Q V.Q n.V.n.V.Q V.V.V.n.V.V.V.V.V.n.V.V.n.Q n.Q n.n.M # YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYX ! B.A.B.B.M.M.Z.M.M.M.Z.Z.Z.Z.Z.M.M.M.Z.Z.Z.B.M.Z.M.M.Z.B.B.Z.M.M.M.M.M.Z.Z.Z.M.Z.Z.M.M.B.M.Z.Z.M.Z.M.M.Z.[ Z.M.Z.Z.M.Z.Z.Z.Z.M.M.M.M.M.M.M.M.M.Z.M.Z.M.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.D.D.Z.#XZ.Z.Z.Z.Z.#XZ.D.Z.Z.#XD.Z.#X#X$X$X$X$X$X#XZ.M.M.Z.M.Z.Z.M.Z.M.M.Z.M.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.M.Z.Z.Z.Z.M.M.M.M.M.Z.M.M.[ Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.Z.Z.Z.Z.Z.M.M.M.M.M.M.Z.M.M.M.B.M.B.B.M.B.M.Z.[ M.Z.M.M.Z.M.Z.M.M.M.M.Z.Z.Z.Z.M.B.M.Z.B.B.M.M.M.B.B.M.B.B.M.v.h w y h D Q n.n.V.n.Q V.V.V.n.V.V.V.n.Q V.n.V.Q V.Q n.V.V.V.n.V.Q Q Q V.Q V.V.n.V.V.V.n.n.Q Q Q Q V.Q Q V.Q V.n.Q n.n.n.n.n.V.Q Q Q n.n.n.n.n.n.n.n.n.V.n.V.V.V.m.V.n.V.Q V.n.V.Q V.V.V.V.n.n.n.V.V.V.V.V.V.V.V.V.n.Q V.n.Q n.V.V.n.V.n.V.V.V.Q n.Q V.Q b $ . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYX T B.Z.Z.B.Z.Z.M.Z.Z.M.Z.Z.M.Z.Z.M.M.Z.M.Z.Z.Z.B.B.M.Z.Z.Z.M.Z.M.M.Z.M.M.M.M.Z.Z.B.Z.M.M.Z.Z.Z.M.M.M.M.M.Z.Z.M.Z.M.Z.M.Z.Z.Z.M.Z.M.M.M.Z.M.Z.Z.M.M.M.M.Z.Z.M.Z.M.Z.M.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.D.D.Z.Z.Z.#XZ.Z.P.Z.D.Z.D.Z.Z.Z.Z.#X#X#X$X$X$X#XZ.Z.Z.M.Z.M.Z.M.Z.[ M.Z.M.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.M.M.Z.Z.Z.Z.Z.Z.M.M.M.Z.Z.M.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.Z.Z.M.Z.Z.M.M.M.M.Z.M.M.B.M.B.M.M.Z.M.Z.M.M.Z.M.M.M.Z.M.M.M.Z.M.Z.M.B.B.Z.Z.M.B.Z.Z.M.M.M.M.M.M.M.M.Z.M.M.B.c w y j D n.n.Q n.n.V.V.n.V.V.V.V.V.n.n.n.n.V.Q n.V.n.V.V.n.n.n.Q Q n.n.n.V.V.Q V.V.V.n.V.n.Q V.Q Q V.Q n.n.n.n.n.n.Q F.Q Q F.Q Q D.n.n.n.n.n.n.n.Q Q V.V.V.n.V.n.V.V.V.n.n.m.n.Q n.V.n.V.n.Q V.V.V.n.V.V.V.V.Q V.n.V.V.n.Q n.n.V.V.V.V.n.V.V.n.n.n.! k + YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYX A B.Z.B.Z.Z.M.Z.M.Z.M.M.M.Z.M.Z.Z.Z.Z.M.Z.B.Z.B.Z.Z.Z.M.Z.Z.M.M.M.M.M.M.Z.M.B.B.Z.Z.Z.Z.Z.Z.M.M.M.M.M.M.M.M.M.M.Z.M.Z.M.Z.Z.Z.Z.M.M.M.M.M.M.M.Z.M.Z.M.M.M.Z.M.Z.M.Z.Z.Z.M.Z.M.Z.Z.Z.Z.D.Z.Z.Z.Z.D.Z.D.Z.Z.D.D.Z.Z.Z.D.Z.#XZ.Z.D.#X#X$X$X$X$XD.#XZ.Z.M.M.Z.M.Z.Z.M.M.M.M.Z.Z.M.Z.Z.Z.M.Z.Z.M.Z.M.Z.Z.M.M.Z.M.Z.Z.M.M.M.M.Z.Z.M.Z.M.M.M.M.Z.Z.Z.Z.M.M.M.M.M.M.Z.M.M.M.M.M.M.M.M.B.M.M.B.B.M.M.M.M.M.M.B.M.M.Z.M.M.M.B.Z.M.Z.M.Z.B.Z.Z.B.Z.M.M.M.Z.M.Z.M.M.Z.Z.M.M.M.B.M.c w y n D Q n.B.V.V.V.Q V.V.V.V.V.n.Q Q n.n.n.n.Q V.n.n.n.Q Q Q V.V.V.V.n.V.V.V.V.n.Q V.n.V.V.V.V.V.Q V.V.Q n.n.n.n.Q Q Q Q Q Q Q Q n.n.n.n.n.n.V.Q Q V.n.V.n.V.V.V.V.V.n.V.V.V.V.n.n.V.n.V.Q V.V.Q V.V.Q n.Q n.Q Q Q V.V.n.n.V.n.V.V.Q Q V.Q V.Q T 1 YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYX s Z.B.Z.B.B.M.M.M.Z.M.M.M.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.B.B.Z.M.M.Z.M.M.M.M.Z.M.M.Z.Z.Z.Z.B.Z.Z.B.B.Z.M.M.W M.M.M.M.Z.M.M.Z.M.M.Z.M.Z.M.M.M.M.Z.M.M.M.M.M.Z.Z.M.[ Z.Z.M.M.Z.M.M.M.Z.M.Z.M.Z.Z.Z.Z.Z.#XZ.Z.Z.Z.Z.Z.D.Z.Z.D.Z.Z.Z.Z.#XZ.Z.Z.D.#X#X#X#X#XD.Z.Z.Z.M.Z.M.Z.M.Z.Z.Z.Z.M.Z.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.M.M.Z.Z.M.M.M.Z.Z.Z.M.M.M.M.Z.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.B.M.Z.M.M.M.M.Z.Z.Z.Z.M.M.M.Z.Z.M.Z.M.M.Z.Z.Z.[ Z.Z.M.M.Z.M.M.Z.M.M.M.M.Z.B.B.B w y b D Q n.V.n.n.n.Q V.V.n.V.V.V.n.V.G.V.V.Q n.Q n.n.n.Q Q n.V.n.Q V.V.G.V.Q V.V.V.V.V.V.V.Q Q V.V.n.n.Q n.n.n.n.Q V.Q V.Q Q Q Q n.n.n.n.V.Q Q Q V.n.V.V.V.V.n.n.V.n.V.V.V.n.V.n.n.n.n.V.V.m.n.V.n.Q n.n.V.n.Q V.V.n.V.n.Q Q m.V.m.V.V.n.V.T k @ YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYX > v.Z.Z.B.Z.M.M.M.Z.Z.M.Z.M.Z.Z.Z.M.M.M.Z.Z.M.Z.Z.Z.Z.Z.M.M.M.M.M.M.M.M.M.Z.M.B.B.Z.B.Z.Z.Z.Z.Z.M.M.M.Z.M.M.M.Z.M.Z.M.Z.Z.Z.M.Z.M.M.M.Z.M.Z.M.Z.M.M.M.Z.M.M.M.Z.M.Z.Z.[ M.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.P.D.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.#X#X#X#XZ.Z.#XZ.Z.Z.M.Z.Z.Z.Z.Z.M.M.M.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.[ M.Z.M.Z.M.Z.Z.Z.M.M.Z.Z.Z.Z.M.Z.M.Z.M.M.M.Z.M.M.Z.M.M.M.Z.M.M.M.Z.M.B.M.B.B.B.B.B.M.B.M.M.Z.Z.B.Z.M.Z.Z.M.M.Z.M.M.Z.M.M.Z.M.M.Z.Z.Z.Z.M.Z.Z.[ Z.M.M.M.B.Z.M.M.B.[ c w y z D Q B.n.n.N.V.V.V.n.n.Q V.B.V.Q Q n.V.Q n.V.n.V.V.Q Q n.Q n.Q Q V.Q V.V.Q n.n.V.n.V.V.Q V.Q Q n.n.V.n.n.n.n.Q V.Q Q F.Q D.Q n.n.V.Q Q Q Q V.Q n.Q V.V.n.V.V.n.V.n.V.V.V.V.n.Q n.n.n.n.n.V.n.n.n.Q V.V.V.V.m.V.V.V.V.V.V.Q V.V.V.V.m.l O . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYX X U M.Z.Z.Z.M.Z.M.M.Z.M.Z.M.M.Z.Z.B.M.M.B.M.M.M.Z.M.Z.Z.B.M.Z.M.M.M.Z.Z.M.M.M.Z.B.B.Z.M.Z.Z.M.Z.M.M.M.M.M.M.M.M.Z.M.Z.Z.M.Z.M.M.M.M.M.M.M.M.Z.Z.M.M.Z.M.Z.Z.Z.M.Z.M.M.M.Z.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.D.Z.Z.Z.Z.Z.#XD.Z.Z.Z.M.Z.D.Z.#X#XZ.#XZ.#XD.Z.M.M.M.Z.Z.M.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.M.Z.M.Z.M.M.M.[ Z.Z.Z.Z.M.Z.B.Z.M.M.M.Z.M.M.M.M.M.M.M.M.B.M.M.M.M.M.B.M.Z.M.M.B.[ Z.Z.M.Z.M.M.M.M.M.M.Z.Z.M.Z.Z.M.M.Z.Z.M.M.Z.Z.Z.M.Z.Z.Z.M.M.B.Z.M.Z.M.M.M.Z.Z.g w y b A Q V.B.n.N.V.V.V.V.n.V.V.n.n.n.V.V.n.n.n.n.V.V.Q Q Q Q n.V.V.Q V.V.Q V.V.V.G.Q V.Q V.V.Q V.n.Q n.n.n.n.n.n.V.Q Q Q Q V.Q Q Q Q Q V.Q Q V.Q V.Q Q n.n.V.V.V.V.V.n.V.n.V.V.n.n.V.V.m.Q V.V.n.V.Q V.V.V.V.n.V.V.n.V.V.V.V.Q V.B.V.V.T - YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYX G M.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.M.Z.M.B.M.M.B.M.Z.Z.Z.B.Z.Z.M.Z.M.Z.M.M.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.M.M.M.M.M.M.M.M.M.M.M.Z.Z.M.Z.M.Z.M.Z.Z.M.Z.M.M.Z.Z.M.M.Z.Z.Z.Z.Z.M.Z.Z.M.M.M.M.M.Z.Z.M.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.D.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.M.Z.M.Z.Z.M.M.Z.Z.M.M.M.M.Z.M.M.M.B.B.M.M.M.M.M.B.B.Z.B.M.M.M.M.M.Z.Z.Z.M.Z.Z.Z.Z.M.Z.Z.M.Z.Z.Z.Z.Z.B.Z.M.Z.Z.B.M.Z.Z.[ M.M.M.M.Z.M.B w y b D Q n.n.n.V.V.n.V.V.V.V.V.V.V.V.V.n.V.n.V.V.V.n.V.n.n.Q Q n.n.Q n.Q V.V.V.V.Q V.Q V.Q V.V.Q V.V.n.n.n.n.n.n.Q Q G.Q V.Q V.V.V.V.Q Q V.Q V.Q Q Q V.Q Q Q m.n.m.V.V.V.V.V.n.n.n.n.n.V.V.V.Q Q V.m.Q V.V.n.n.n.V.V.V.V.V.V.V.V.V.B.B.l + YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYX o . V [ M.M.M.Z.Z.Z.Z.Z.M.Z.B.M.M.Z.B.M.M.[ M.M.M.M.M.Z.Z.B.Z.Z.M.M.Z.Z.M.Z.Z.Z.M.M.M.M.Z.Z.Z.M.Z.Z.M.M.Z.M.M.Z.M.M.Z.M.M.Z.M.Z.M.Z.M.M.M.M.M.M.Z.M.M.M.Z.M.M.Z.Z.Z.M.M.Z.M.Z.M.M.Z.Z.Z.M.Z.M.Z.Z.Z.Z.Z.D.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.M.Z.[ M.M.M.M.M.M.M.Z.M.B.Z.M.M.B.B.M.Z.Z.M.B.B.M.Z.M.M.Z.Z.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.M.M.[ Z.M.Z.M.B.B.B.B.B.Z.M.M.Z.Z.Z.c w y b D Q Q n.n.n.n.V.Q V.V.V.V.V.Q n.n.V.Q n.V.V.V.n.V.n.n.Q ! V.n.n.V.V.Q V.V.Q V.V.V.V.V.Q V.V.Q V.V.Q n.n.n.n.Q V.Q V.Q V.V.Q Q V.V.Q V.Q Q Q Q m.n.n.V.V.V.n.n.V.V.V.n.V.Q n.n.V.n.n.n.n.Q V.n.V.V.V.V.V.n.n.n.V.V.Q n.V.V.Q B.V.K , YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYX . o g M.M.Z.M.Z.Z.M.Z.Z.M.M.Z.M.M.B.B.M.M.Z.B.B.B.Z.Z.[ B.Z.Z.M.Z.Z.M.Z.Z.Z.M.M.M.B.Z.M.M.M.Z.M.M.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.M.M.M.M.Z.M.Z.M.M.M.M.Z.M.Z.M.Z.M.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.[ M.Z.M.M.Z.Z.[ Z.Z.Z.Z.Z.Z.Z.#XZ.Z.Z.Z.Z.D.Z.[ Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.Z.M.Z.Z.Z.Z.M.Z.Z.M.M.Z.M.Z.Z.Z.Z.Z.M.M.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.M.M.Z.M.M.Z.Z.M.M.M.M.M.M.B.B.M.M.Z.M.Z.M.B.Z.M.Z.Z.M.M.Z.M.Z.Z.Z.M.Z.Z.Z.M.M.Z.M.Z.M.Z.B.B.Z.M.B.B.B.B.B.B.M.Z.Z.M.M.M.c w r b T Q Q n.n.V.n.V.V.V.m.V.V.n.V.Q V.V.n.n.Q n.V.V.n.Q V.V.Q Q n.n.Q V.V.V.n.V.V.V.Q V.V.V.Q V.Q Q n.n.n.Q Q V.Q V.V.V.Q Q Q Q V.Q Q V.Q V.Q V.n.V.V.V.V.V.V.V.V.n.Q n.n.V.V.Q V.n.V.V.V.V.n.n.Q Q n.V.V.V.n.n.Q Q n.n.n.n.V.V.v.D 2 . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYX , B.B.A.B.Z.B.B.Z.B.Z.[ Z.B.B.B.Z.Z.M.Z.Z.M.Z.Z.B.Z.Z.Z.Z.Z.Z.Z.M.B.M.Z.M.B.M.Z.M.M.M.M.M.Z.B.M.Z.B.Z.Z.Z.Z.M.Z.Z.M.Z.M.M.M.M.Z.M.Z.Z.M.M.Z.Z.M.Z.M.M.Z.M.Z.Z.M.Z.M.M.Z.Z.Z.M.Z.M.Z.M.M.Z.M.Z.M.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.[ Z.Z.Z.Z.Z.Z.Z.M.Z.Z.M.Z.Z.Z.Z.Z.Z.M.Z.Z.M.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.B.M.M.B.B.B.B.M.M.B.Z.M.B.B.M.B.B.B.M.B.B.B.B.B.B.B.B.Z.M.B.B.Z.B.B.B.B.Z.B.Z.Z.M.B.Z.M.M.Z.M.B.B.B.B.B.B.B.B.B.V.Q D.Q Q Q a 8 t b T ! D.Q Q Q D.Q D.Q D.D.Q Q V.n.Q n.n.n.V.V.n.V.Q n.V.n.Q ! n.n.Q V.n.V.V.Q Q V.V.Q n.V.V.Q V.Q n.n.Q n.V.V.n.n.n.n.n.n.n.n.V.Q B.B.Q n.V.Q V.Q V.V.n.V.V.n.V.Q n.n.n.n.Q B.Q V.n.V.V.V.n.n.n.n.V.V.V.n.V.n.Q n.n.n.V.B.Q T l - YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYX o V.B.Z.Z.Z.B.Z.B.B.M.Z.Z.Z.Z.M.M.Z.M.M.Z.Z.B.M.B.B.M.M.M.M.M.Z.Z.Z.M.M.M.M.M.M.Z.M.M.Z.M.B.B.B.B.M.M.B.Z.Z.Z.M.M.Z.M.Z.Z.M.M.M.M.Z.Z.Z.M.M.M.M.M.Z.M.M.M.M.Z.Z.Z.Z.Z.M.M.Z.Z.M.Z.M.Z.Z.Z.Z.Z.[ M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.D.Z.Z.Z.Z.Z.D.Z.Z.Z.Z.M.M.M.Z.Z.Z.M.Z.Z.M.Z.Z.Z.M.M.Z.Z.M.M.Z.Z.Z.M.M.M.Z.B.Z.M.B.Z.B.Z.Z.Z.Z.Z.Z.M.Z.Z.M.B.M.B.M.M.M.B.M.B.M.M.M.M.M.B.B.M.B.M.B.M.B.B.B.B.B.B.B.Z.B.Z.B.B.B.M.B.B.M.Z.M.M.M.M.Z.B.B.B.B.B.Z.B.B.B.B.B.B.V.V.V.V.Q ! t y u b D ! Q Q D.Q D.Q Q D.Q D.Q D.V.n.n.n.n.n.n.V.V.n.V.V.n.V.n.n.n.n.Q V.V.V.V.n.Q V.Q V.V.V.Q n.n.V.Q n.V.n.Q n.n.n.n.V.n.n.n.n.n.Q n.n.B.n.Q Q Q V.Q V.V.V.n.V.V.n.n.n.n.n.n.n.n.n.V.V.n.V.V.n.V.V.V.n.V.Q n.V.n.n.n.n.T n y $ YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYX M.Z.B.M.B.M.M.M.M.M.M.Z.B.M.M.M.Z.B.M.[ Z.Z.Z.Z.B.Z.Z.Z.B.M.M.M.M.M.M.Z.M.M.M.M.M.M.M.M.B.B.M.M.M.M.Z.Z.M.M.Z.M.M.M.M.M.M.M.Z.Z.M.M.Z.Z.M.M.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.M.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.D.Z.Z.D.Z.Z.Z.Z.Z.D.Z.Z.M.M.M.Z.Z.Z.Z.Z.M.Z.M.Z.M.Z.M.M.Z.M.Z.Z.Z.Z.Z.Z.M.M.Z.Z.B.M.B.M.M.Z.Z.D.Z.Z.Z.Z.M.M.Z.M.M.M.B.B.B.M.Z.B.M.M.Z.B.M.B.M.B.M.M.B.B.B.B.M.[ B.B.B.Z.Z.M.Z.B.Z.Z.[ M.B.Z.M.B.B.Z.B.Z.Z.Z.Z.Z.Z.B.M.M.B.B.B.V.V.D.V.D.! y 8 k n v Q Q Q Q Q Q D.Q Q Q D.Q D.V.Q n.n.n.n.V.V.Q V.V.V.n.V.V.V.n.n.n.n.G.Q n.V.V.V.V.n.! Q V.n.Q V.V.Q n.n.n.Q n.V.Q Q V.Q n.V.N.N.n.B.Q B.Q V.V.Q V.Q n.V.V.V.V.Q n.n.n.n.n.n.n.V.V.V.V.V.V.V.V.V.V.V.V.n.V.n.V.V.! 2 YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYX ! Z.Z.Z.M.M.Z.M.B.M.Z.M.B.M.M.M.B.Z.M.M.M.M.B.M.B.Z.M.Z.M.M.M.M.Z.B.M.B.M.Z.M.Z.M.M.M.M.Z.Z.Z.M.M.M.M.M.Z.Z.Z.M.Z.Z.M.M.M.M.Z.M.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.M.M.Z.M.Z.[ Z.Z.Z.M.M.Z.Z.Z.Z.D.D.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.Z.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.M.[ M.M.Z.M.M.Z.Z.Z.M.Z.B.Z.Z.Z.Z.Z.M.M.Z.M.B.B.M.B.M.B.M.Z.M.B.B.M.B.B.M.M.B.B.M.M.M.B.M.B.Z.Z.Z.B.Z.M.Z.Z.Z.B.Z.Z.B.Z.Z.M.M.M.Z.B.B.Z.Z.Z.Z.Z.B.M.B.M.B.Z.V.V.Q F.Q T y y j b T Q D.Q Q @XQ Q Q D.Q Q D.Q G.n.n.Q V.n.n.n.V.V.Q V.V.Q V.Q n.n.Q V.n.Q V.V.V.n.Q V.Q V.Q V.V.n.n.n.n.n.n.Q n.Q Q V.Q V.Q n.V.n.n.n.B.n.Q Q Q V.Q V.n.V.V.V.V.Q n.n.n.n.n.n.n.V.Q m.V.n.n.V.V.n.V.n.m.V.V.V.m.v $ YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYX K Z.B.Z.Z.Z.Z.M.M.B.M.Z.Z.M.B.M.Z.B.Z.Z.M.M.B.B.M.M.M.Z.M.Z.M.B.M.B.Z.Z.M.B.[ M.M.M.M.M.Z.Z.M.Z.M.M.B.Z.Z.M.M.M.Z.Z.M.M.Z.M.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.#XZ.Z.#XZ.Z.Z.Z.Z.Z.M.Z.Z.Z.M.M.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.M.M.M.M.M.Z.Z.M.Z.M.B.M.M.Z.Z.Z.Z.M.M.M.Z.Z.B.M.[ Z.Z.M.M.M.B.M.M.B.M.Z.M.Z.[ Z.M.M.M.M.M.B.M.B.B.B.[ B.Z.Z.B.Z.M.B.M.B.M.B.Z.M.Z.B.Z.M.B.B.Z.B.[ M.B.B.M.M.V.B.B.B.Q ! y y z b T Q Q Q Q Q Q V.V.V.D.V.Q V.V.V.n.Q n.n.Q V.Q V.V.Q V.V.V.Q n.Q n.n.V.Q V.V.Q Q V.Q V.Q n.Q Q n.V.Q V.Q Q V.V.Q V.Q V.n.V.Q n.n.n.n.n.n.n.n.V.Q V.Q V.V.V.n.n.n.n.n.n.n.n.n.n.V.m.Q n.V.V.V.n.V.V.n.V.V.V.n.y @ YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYX b A.M.Z.Z.M.B.M.M.M.B.M.B.Z.Z.B.Z.Z.Z.Z.B.M.M.B.M.M.Z.M.Z.M.M.M.M.M.Z.Z.Z.Z.B.M.Z.Z.M.Z.M.Z.Z.Z.B.Z.M.Z.Z.Z.Z.Z.Z.M.M.Z.M.Z.M.Z.Z.Z.Z.M.Z.Z.Z.Z.M.M.Z.Z.M.Z.M.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.#XZ.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.M.Z.Z.Z.M.Z.Z.Z.Z.M.M.Z.M.M.M.B.M.[ Z.Z.M.M.B.M.Z.Z.M.Z.Z.M.Z.Z.M.M.M.M.M.Z.M.M.Z.M.B.M.M.Z.M.Z.Z.M.M.M.B.B.B.B.B.M.Z.Z.B.B.B.Z.M.M.M.M.M.B.B.M.Z.B.B.B.B.B.B.Z.Z.B.B.M.M.B.B.N.N.B.B.Q T y r z b T Q Q Q Q Q V.Q Q V.V.V.Q V.V.n.n.Q n.Q V.n.V.V.n.V.V.V.V.V.n.V.V.n.n.n.n.Q Q V.Q V.Q V.V.Q Q n.Q Q Q V.V.n.Q V.Q V.Q V.Q V.V.n.B.n.V.n.n.n.Q V.n.n.V.V.n.V.n.n.n.Q n.n.n.n.n.V.V.V.V.V.V.Q n.Q B.n.n.n.n.1 YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYX d B.M.B.M.Z.M.M.M.B.B.M.B.Z.M.Z.Z.B.B.B.B.M.M.M.M.B.M.Z.M.M.M.B.B.Z.M.M.B.Z.M.Z.Z.Z.Z.M.Z.Z.Z.Z.M.M.M.Z.M.Z.M.Z.M.M.Z.M.M.Z.M.M.M.Z.Z.M.Z.M.Z.Z.Z.M.Z.Z.Z.[ Z.Z.M.Z.Z.Z.Z.Z.M.Z.Z.M.M.Z.Z.Z.Z.Z.M.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.[ Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.M.M.M.Z.Z.Z.M.Z.M.M.Z.M.M.M.Z.Z.M.M.B.M.Z.Z.B.M.M.[ M.M.M.M.Z.M.M.B.M.M.M.M.Z.M.M.M.Z.Z.M.M.Z.Z.Z.Z.B.M.M.B.B.M.M.M.Z.B.B.B.Z.Z.B.M.Z.M.M.B.M.B.B.M.[ Z.M.M.Z.M.B.B.B.M.M.N.M.B.N.N.B.B.B.Q T 9 f z b T Q Q Q F.#XQ Q V.V.V.Q V.V.Q V.V.n.Q V.n.V.Q V.Q V.n.V.V.Q Q n.V.n.n.n.Q V.Q V.V.Q V.Q n.n.V.V.Q V.n.Q V.Q V.Q V.Q Q V.V.Q n.n.n.n.Q n.Q n.n.n.V.V.V.V.n.n.Q n.n.V.n.n.n.n.n.n.Q V.V.n.V.n.! n.B.n.V.m.; YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYX 1 B.M.M.M.M.M.M.B.M.M.Z.M.Z.Z.B.Z.B.M.M.B.Z.B.M.M.M.Z.M.B.Z.M.[ Z.M.Z.M.Z.B.M.M.M.M.Z.M.M.M.M.M.Z.M.Z.M.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.M.M.M.M.M.Z.Z.Z.Z.M.M.M.M.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.D.Z.Z.M.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.M.B.M.B.B.Z.Z.Z.B.Z.Z.M.Z.Z.M.Z.M.B.M.M.M.M.M.Z.Z.M.[ Z.M.M.Z.M.Z.B.M.M.M.M.M.M.B.M.M.M.B.M.M.B.Z.Z.Z.B.M.B.M.M.M.M.Z.M.Z.B.M.B.B.B.B.M.B.M.N.N.N.N.M.B.B.Q T 9 k z b ! Q F.Q Q Q Q V.Q V.Q Q V.Q n.n.V.n.Q Q Q V.V.V.V.V.Q V.Q V.V.V.V.V.Q Q V.Q n.n.V.V.Q n.V.V.V.n.V.Q V.n.V.V.V.V.V.Q V.n.n.n.n.n.n.n.n.n.Q V.V.Q V.n.n.V.n.V.V.n.n.n.n.n.n.n.n.n.n.V.V.n.V.n.n.n.n.V.n.y YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYX $ E B.M.B.M.M.M.M.M.B.M.Z.Z.Z.Z.B.Z.Z.M.Z.Z.B.B.B.M.Z.B.Z.M.M.M.B.B.M.B.M.Z.M.M.M.Z.M.M.M.B.M.Z.Z.M.B.M.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.M.M.M.Z.Z.Z.Z.M.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.[ Z.Z.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.M.Z.Z.M.Z.Z.Z.Z.[ M.B.M.Z.Z.B.B.Z.B.Z.B.B.B.M.M.Z.B.M.M.M.M.M.B.B.M.M.M.M.M.Z.Z.M.B.M.M.M.M.B.M.M.M.M.M.M.B.Z.Z.M.Z.B.M.M.M.B.B.B.M.B.M.B.M.B.B.B.B.M.M.B.M.M.M.M.Q Q D.Q Q T 8 j b b Q n.Q V.V.V.V.Q Q V.V.V.Q Q Q n.n.V.Q n.V.Q n.V.V.V.V.V.V.Q V.V.V.Q Q Q V.Q n.n.V.V.Q V.V.Q n.V.n.V.Q V.V.V.Q V.V.Q n.n.n.n.n.n.V.V.V.V.V.V.V.V.n.V.V.V.n.n.n.n.Q V.n.Q Q n.Q V.n.n.Q n.n.n.Q B.V.V.z YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYX . Z v.M.M.Z.M.M.M.B.M.M.M.M.Z.B.Z.M.Z.Z.M.M.M.B.Z.B.B.Z.Z.M.M.B.M.M.B.M.B.M.B.Z.Z.M.M.M.Z.M.M.M.M.Z.M.M.Z.Z.Z.M.Z.Z.M.Z.M.Z.Z.Z.M.Z.M.Z.M.M.M.Z.Z.Z.Z.Z.M.Z.M.M.Z.M.Z.Z.Z.M.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.M.M.Z.Z.M.Z.Z.M.Z.M.Z.M.M.Z.M.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.M.M.M.M.B.M.B.M.Z.Z.Z.Z.Z.B.M.M.B.M.M.B.M.M.M.B.B.M.Z.Z.M.M.Z.Z.M.M.Z.B.M.M.M.M.M.M.M.M.Z.Z.M.Z.M.Z.Z.B.B.M.M.M.M.M.M.B.M.Z.B.B.M.B.B.B.M.M.M.M.B.B.B.D.Q Q D.Q z y z z b n.V.V.V.Q V.Q V.V.V.V.Q V.V.n.V.V.Q Q Q n.n.Q n.n.n.V.V.V.V.V.V.V.V.Q Q Q V.n.n.Q n.Q V.n.V.V.V.Q V.V.V.Q V.V.Q n.Q n.n.n.V.n.Q V.n.Q V.V.V.V.n.V.V.V.Q n.n.Q V.n.V.V.V.Q V.B.n.V.V.Q m.Q V.V.V.n.M YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYX q M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.Z.M.M.Z.B.Z.M.M.M.M.M.Z.B.B.Z.M.M.B.M.M.Z.M.M.M.M.B.Z.[ M.M.M.Z.Z.Z.Z.Z.M.Z.M.Z.M.Z.M.Z.M.Z.Z.M.M.M.M.M.M.Z.M.M.Z.M.M.Z.Z.Z.Z.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.M.M.Z.Z.M.Z.Z.Z.M.Z.Z.Z.Z.M.Z.Z.M.M.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.M.M.M.M.M.Z.M.M.M.Z.B.Z.M.Z.B.Z.M.Z.M.B.B.B.B.M.M.B.Z.Z.Z.B.M.M.M.Z.Z.B.Z.M.M.B.B.M.M.M.B.M.B.M.B.Z.M.[ Z.M.M.B.M.M.M.B.M.B.M.M.B.Z.Z.Z.M.M.M.B.M.M.B.D.Q Q Q Q a y z b b V.n.Q V.V.Q Q V.V.V.V.V.V.V.V.n.V.V.V.n.V.n.Q V.V.V.V.Q V.V.V.V.V.Q Q n.n.n.V.Q n.V.V.Q V.n.n.V.V.Q V.n.V.Q Q Q V.Q n.n.Q V.n.V.V.n.V.Q V.V.V.n.n.V.Q V.V.Q n.n.V.V.V.V.n.n.B.n.n.V.V.V.Q Q V.V.S YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYX & v.M.M.M.M.M.Z.M.M.M.M.M.M.Z.M.M.M.M.Z.Z.M.M.M.Z.M.M.M.Z.M.M.M.M.B.Z.M.Z.M.Z.M.M.M.M.Z.Z.M.M.Z.M.Z.Z.M.Z.M.Z.M.M.Z.M.M.M.Z.M.Z.Z.M.Z.Z.Z.M.M.Z.M.Z.Z.Z.M.Z.Z.M.M.Z.Z.M.Z.Z.Z.Z.M.Z.M.Z.Z.Z.Z.M.Z.Z.Z.M.Z.Z.M.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.Z.Z.M.Z.Z.Z.M.Z.Z.Z.M.M.M.M.M.M.M.Z.M.Z.M.M.M.B.M.Z.B.M.M.B.M.B.B.B.B.M.B.Z.Z.[ Z.M.M.M.M.B.B.M.M.M.M.M.M.B.M.B.Z.Z.B.Z.B.B.B.B.Z.M.B.B.B.B.B.B.Z.M.[ Z.Z.M.M.M.M.[ M.M.Q Q D.V.! y r b b b Q Q Q V.V.n.V.Q V.Q V.V.Q V.V.V.V.n.Q n.Q n.V.V.n.V.V.V.V.V.V.n.V.Q Q n.n.n.Q Q V.Q n.V.Q V.V.n.V.Q V.Q Q n.V.Q Q V.Q n.n.V.V.m.B.n.V.Q n.Q Q V.V.V.Q V.V.Q n.V.V.Q n.V.V.n.n.V.n.Q Q V.V.V.V.D YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYX . J M.M.M.M.M.M.M.M.Z.M.M.M.Z.M.M.M.M.Z.Z.M.M.Z.Z.[ M.M.M.Z.M.Z.M.B.B.M.B.B.M.Z.M.M.M.B.Z.M.Z.M.M.Z.Z.Z.Z.Z.M.M.M.Z.Z.Z.Z.M.M.Z.Z.Z.M.Z.Z.M.Z.M.Z.Z.Z.M.Z.M.Z.Z.Z.M.M.M.Z.Z.Z.Z.M.Z.Z.[ Z.Z.Z.M.Z.M.Z.Z.M.M.Z.M.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.M.M.Z.Z.Z.M.Z.Z.M.M.Z.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.M.Z.Z.Z.Z.Z.M.M.M.M.M.Z.M.M.B.M.M.M.Z.M.Z.[ M.B.M.M.M.M.M.Z.Z.M.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.M.M.B.M.M.M.M.Z.[ B.Z.M.B.Z.M.B.M.B.M.M.B.[ B.M.Z.B.B.B.B.B.B.Z.B.B.M.M.B.Q Q V.V.z 9 a z b Z Q n.Q n.n.n.Q V.G.V.V.V.V.V.V.V.n.Q Q Q Q V.n.V.Q V.Q V.V.Q V.V.V.V.n.n.n.n.Q V.Q V.V.Q Q V.V.V.Q Q n.n.n.n.V.n.n.n.Q n.n.V.V.n.n.n.n.n.Q n.V.V.V.V.V.V.m.n.Q V.V.n.V.V.V.V.V.B.n.V.m.B.V.V.b YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYX a M.M.Z.Z.Z.B.M.Z.Z.Z.M.M.Z.M.M.M.Z.M.Z.Z.Z.M.Z.Z.M.M.M.M.M.M.M.B.M.B.B.M.B.M.M.Z.B.B.M.Z.M.Z.M.Z.M.M.M.Z.M.M.M.M.M.M.M.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.M.M.M.Z.[ Z.Z.Z.Z.M.Z.Z.Z.Z.Z.M.M.Z.M.Z.Z.Z.M.Z.M.M.M.Z.Z.M.M.Z.M.Z.Z.Z.Z.Z.Z.M.Z.M.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.Z.Z.Z.Z.M.Z.M.M.M.M.B.B.M.M.Z.Z.B.M.M.Z.Z.M.Z.B.Z.B.M.B.Z.Z.Z.M.Z.Z.B.Z.M.Z.Z.Z.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.B.B.M.M.M.M.B.B.B.M.M.Z.B.Z.M.B.M.B.B.Z.Z.Z.Z.Z.Z.B.Z.V.V.V.Q a 9 k z b T n.n.V.n.n.n.V.Q V.Q Q V.V.n.V.V.V.Q Q Q V.V.G.Q Q Q V.V.V.V.V.V.n.n.V.Q n.n.Q ! V.Q Q V.V.V.V.Q V.V.n.V.n.V.V.n.n.Q n.n.V.n.V.n.Q n.n.Q B.V.m.Q n.n.V.V.Q n.n.V.n.V.V.V.V.n.V.V.V.V.B.V.V.k YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYX $ M.M.B.Z.Z.Z.M.M.M.Z.M.M.M.B.M.Z.M.M.Z.M.Z.M.Z.B.Z.M.M.M.M.M.[ B.M.B.B.M.M.M.M.B.B.M.B.M.M.B.Z.M.M.M.M.Z.Z.M.M.Z.M.Z.Z.Z.Z.M.M.M.Z.M.Z.M.Z.Z.M.Z.Z.Z.Z.Z.M.Z.M.Z.M.M.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.M.M.Z.M.Z.M.Z.Z.M.M.Z.Z.[ M.M.M.M.M.Z.Z.Z.M.M.M.Z.M.Z.M.Z.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.M.M.Z.M.M.Z.M.Z.M.M.M.M.Z.B.M.Z.M.Z.Z.M.M.Z.Z.Z.Z.Z.Z.M.B.M.B.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.Z.M.M.Z.B.Z.Z.Z.M.Z.Z.B.M.M.M.B.M.M.Z.Z.M.B.M.M.M.Z.B.B.B.M.Z.B.Z.M.B.Z.B.Z.V.V.n.T y 9 g b b ! n.n.n.n.Q Q V.V.V.V.V.V.Q n.V.Q V.n.V.V.V.Q V.V.V.Q V.Q n.V.V.V.V.V.V.n.V.n.n.n.V.n.Q V.Q V.Q V.Q V.n.Q V.n.V.n.G.Q n.V.n.V.V.n.n.n.n.n.n.V.n.V.n.n.n.n.n.n.n.V.V.m.V.V.V.V.n.V.V.n.Q T 1 YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYX . U Z.Z.Z.M.Z.Z.Z.Z.M.Z.Z.M.M.M.M.M.M.M.M.M.Z.Z.B.Z.M.M.M.M.M.B.M.M.M.B.M.M.Z.[ M.B.B.B.B.B.Z.Z.B.M.M.Z.Z.M.M.M.M.M.[ Z.Z.M.Z.M.Z.M.Z.Z.M.M.Z.M.Z.Z.Z.M.Z.M.Z.M.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.Z.M.Z.M.Z.Z.Z.Z.M.Z.Z.Z.Z.M.M.Z.M.Z.M.Z.Z.M.Z.Z.Z.Z.Z.M.M.Z.Z.Z.Z.Z.Z.M.Z.Z.M.M.M.Z.Z.M.M.Z.M.M.B.M.M.Z.[ Z.B.M.Z.M.M.Z.Z.M.Z.Z.M.Z.B.B.B.Z.B.B.M.Z.M.M.B.Z.Z.Z.B.Z.Z.M.M.M.Z.B.Z.B.Z.B.M.B.B.B.M.M.Z.B.B.Z.Z.M.Z.Z.M.M.B.B.B.B.Z.B.B.M.M.B.B.Z.V.V.n.z 9 r z b Z Q Q V.n.Q V.V.Q V.n.V.V.Q Q V.V.Q V.V.V.V.V.V.Q V.V.n.n.n.n.V.n.Q V.Q Q V.V.V.V.n.V.V.V.V.V.V.V.n.n.n.Q Q V.V.V.V.V.n.V.V.V.n.V.V.n.n.n.V.n.B.V.n.V.n.n.V.V.Q Q n.n.V.n.V.n.n.V.V.V.V.l YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYX p B.B.Z.Z.Z.B.Z.B.B.M.B.B.M.M.M.B.M.B.M.M.Z.B.M.B.B.M.Z.M.M.Z.M.M.M.M.B.B.B.M.B.B.B.M.Z.B.B.B.Z.M.Z.B.Z.Z.M.M.M.M.M.Z.B.B.M.M.M.Z.M.M.M.Z.M.Z.M.Z.Z.Z.M.Z.Z.M.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.M.Z.M.Z.Z.M.Z.Z.Z.M.M.M.M.M.Z.M.Z.Z.Z.Z.Z.Z.P.Z.Z.Z.Z.M.Z.M.Z.Z.Z.Z.Z.M.Z.M.M.Z.M.Z.M.Z.M.M.M.M.M.M.Z.M.M.Z.M.M.M.Z.M.Z.Z.M.Z.Z.M.Z.Z.Z.M.Z.Z.Z.Z.M.M.Z.M.Z.Z.Z.M.Z.Z.M.Z.Z.M.Z.M.Z.Z.Z.M.M.M.Z.M.M.Z.Z.M.Z.Z.M.M.Z.Z.M.M.Z.Z.Z.Z.B.B.B.B.B.B.B.K.Z.v.u y g z z T ! V.Q Q V.Q V.V.Q V.V.n.Q n.n.V.Q V.V.V.V.Q n.Q Q V.n.n.V.n.V.Q Q V.Q n.V.V.V.V.V.V.V.n.V.V.n.V.n.n.n.Q V.n.V.n.n.V.V.V.V.V.V.n.n.n.n.V.n.V.Q n.n.N.n.B.B.Q B.Q B.V.B.V.n.n.Q n.V.v & YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYX . v.Z.B.B.B.M.M.M.M.M.B.B.B.[ B.M.M.M.B.M.M.M.M.B.B.B.B.Z.B.Z.M.M.M.B.B.M.B.B.M.M.B.B.B.B.B.Z.Z.M.Z.Z.B.Z.M.M.M.Z.Z.M.Z.B.B.B.B.M.M.Z.M.M.Z.M.Z.M.Z.Z.Z.M.Z.M.M.M.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.M.Z.Z.Z.M.M.M.M.M.M.Z.M.M.M.Z.M.M.Z.M.Z.M.M.M.M.Z.M.M.M.Z.Z.Z.M.Z.Z.Z.Z.M.Z.M.M.Z.M.Z.Z.M.M.Z.Z.Z.Z.Z.M.M.M.M.Z.M.Z.Z.M.M.Z.M.Z.M.M.M.M.Z.M.Z.Z.Z.M.Z.Z.M.Z.M.Z.Z.Z.B.M.B.M.B.B.Z.B.M.G w y z z b T Q Q Q Q Q Q Q V.Q V.V.V.Q n.n.V.Q n.V.V.n.n.n.V.Q Q Q n.Q n.Q Q V.V.V.n.V.Q n.V.V.V.n.V.n.V.V.Q n.n.n.V.V.V.V.V.V.V.n.Q B.V.n.V.n.Q V.V.B.V.Q n.n.N.N.B.m.B.Q V.V.B.V.V.V.V.! j - YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYX L B.Z.B.Z.B.M.M.B.M.B.Z.B.N.M.M.M.M.M.Z.M.B.Z.Z.B.B.B.M.Z.Z.M.M.B.M.M.B.B.M.B.B.M.B.B.[ Z.Z.M.M.B.B.Z.B.Z.Z.M.M.M.Z.M.M.M.B.M.M.M.Z.M.Z.M.Z.Z.M.Z.Z.M.Z.M.[ Z.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.[ Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.M.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.M.M.Z.Z.M.Z.M.M.[ Z.Z.M.M.M.M.M.M.M.M.Z.M.M.M.M.M.Z.M.Z.Z.Z.M.Z.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.Z.M.M.M.M.M.Z.Z.Z.M.Z.Z.M.M.Z.Z.M.M.M.M.M.M.M.Z.M.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.M.B.Z.B.B.Z.B.B.B.z w g z z D Q Q Q V.Q F.V.Q n.n.V.V.V.Q ! Q n.V.V.V.V.V.V.V.V.V.V.Q n.Q n.V.n.n.n.V.V.n.Q n.n.V.m.V.V.n.Q n.V.V.Q n.n.n.V.V.V.n.n.m.n.V.V.n.V.n.V.V.V.V.V.Q n.n.N.n.Q n.B.B.Q V.Q V.n.M y YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYX 1 M.B.Z.B.B.M.M.M.M.M.B.Z.B.M.M.B.B.M.M.M.M.Z.Z.M.M.B.Z.M.Z.Z.M.M.M.B.M.M.B.M.B.M.B.B.Z.M.M.B.Z.Z.Z.M.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.B.B.M.M.M.Z.M.Z.M.Z.Z.Z.Z.M.M.Z.M.M.Z.Z.M.M.Z.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.M.#XZ.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.M.Z.M.Z.M.M.M.Z.M.Z.M.M.Z.M.Z.M.M.M.M.M.M.Z.M.Z.Z.Z.M.Z.M.Z.Z.M.M.M.M.M.M.Z.Z.M.M.M.Z.Z.M.Z.M.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.M.Z.Z.M.Z.Z.Z.Z.Z.M.M.M.Z.M.Z.B.M.B.B.B.B.Z.B.Q a h z z z T Q Q F.Q Q Q F.Q Q n.n.V.n.V.V.Q V.Q V.n.n.V.Q V.V.Q V.V.n.V.n.n.n.n.V.Q V.n.n.n.n.V.n.V.V.V.n.n.Q n.V.Q V.n.n.Q n.n.n.n.n.B.B.n.m.V.n.n.n.V.n.n.n.n.n.n.n.n.n.n.! M t , YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYX I v.B.M.M.M.M.M.M.M.B.B.B.M.M.Z.Z.M.M.Z.M.Z.B.B.M.Z.B.M.M.M.M.M.B.M.B.B.M.B.B.M.B.B.Z.M.B.M.M.Z.M.Z.B.B.Z.Z.Z.M.M.Z.Z.Z.M.Z.M.M.M.M.Z.M.Z.M.Z.M.Z.Z.Z.M.M.Z.M.M.Z.M.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.Z.M.M.M.Z.M.Z.Z.M.M.M.Z.Z.Z.Z.M.M.Z.M.M.Z.M.M.M.M.Z.Z.M.Z.M.M.Z.M.M.Z.M.M.M.Z.Z.Z.Z.M.M.M.Z.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.Z.M.Z.Z.M.Z.M.Z.M.Z.M.M.M.M.Z.M.Z.M.M.M.Z.B.Z.B.B.B.M.B.B.B.Z j j z z D ! Q D.D.Q F.D.Q Q Q Q n.Q B.n.B.n.V.n.n.V.V.V.n.V.Q Q Q Q V.n.n.n.n.Q V.V.V.n.Q Q n.n.V.V.n.n.V.Q V.n.Q V.V.n.n.n.n.n.n.V.V.V.V.V.Q m.V.n.Q Q V.n.n.n.n.n.Q N.! b - . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYX g B.Z.Z.B.B.M.[ M.B.M.B.B.B.M.B.B.[ M.M.M.Z.B.B.B.B.M.M.M.B.M.M.M.M.M.M.M.B.B.M.M.M.M.M.M.B.M.Z.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.M.M.Z.M.M.M.Z.Z.M.Z.Z.M.Z.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.M.M.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.Z.Z.M.Z.M.M.Z.M.Z.M.Z.Z.Z.M.Z.Z.Z.Z.M.Z.M.Z.M.Z.Z.Z.Z.M.Z.M.Z.Z.Z.M.Z.Z.M.[ M.Z.M.M.Z.M.Z.M.Z.M.Z.Z.Z.M.M.Z.M.Z.M.Z.M.M.Z.M.Z.M.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.M.Z.M.Z.Z.Z.Z.Z.B.B.B.B.B.Z.b.z j c j b Q V.Q Q Q Q Q Q Q D.n.n.n.n.B.V.V.V.V.V.Q V.V.n.n.V.Q Q V.Q Q n.m.n.V.V.V.Q V.V.V.V.n.V.n.V.V.V.V.V.Q Q V.V.B.V.B.n.n.n.n.n.n.V.n.V.V.V.V.m.V.V.V.n.n.! ! ! E M 0 + YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYX M.B.B.Z.B.N.N.B.B.M.B.M.B.M.Z.Z.M.M.M.Z.M.M.B.M.B.B.M.M.M.M.M.M.B.M.M.B.M.Z.M.Z.M.B.M.M.B.Z.M.Z.M.Z.B.M.M.[ B.Z.M.Z.M.Z.Z.M.M.M.M.M.Z.Z.M.M.M.Z.Z.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.Z.Z.M.M.Z.M.Z.Z.Z.Z.Z.Z.Z.M.M.M.M.Z.M.Z.M.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.M.M.Z.M.Z.Z.Z.Z.M.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.M.M.M.Z.Z.M.M.Z.M.Z.Z.M.Z.M.Z.M.M.M.Z.Z.M.Z.Z.Z.M.Z.M.Z.Z.Z.Z.M.Z.M.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.M.Z.Z.Z.Z.M.M.Z.Z.Z.Z.Z.Z.M.M.M.Z.Z.Z.M.Z.Z.Z.A.B.B.B.B.B.6 @ & q j C R n.D.F.D.Q Q Q D.Q B.Q n.Q n.V.V.V.n.V.n.n.n.n.V.m.Q Q Q Q V.V.n.V.V.V.Q V.n.V.V.n.n.V.V.V.V.V.V.n.Q V.Q B.V.n.B.n.n.n.n.V.B.V.V.B.V.V.n.T v y O YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYX A B.Z.B.Z.Z.B.B.B.B.M.M.M.Z.B.B.M.Z.M.M.Z.M.M.B.[ M.M.M.M.M.M.M.M.B.B.M.M.M.M.M.M.B.M.M.B.M.Z.B.Z.Z.Z.M.M.M.M.M.M.Z.Z.Z.M.M.M.M.Z.M.Z.Z.M.Z.Z.Z.M.M.Z.Z.M.M.Z.Z.Z.Z.Z.M.Z.Z.M.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.M.M.M.Z.M.M.M.Z.Z.M.Z.Z.Z.M.Z.Z.M.M.Z.Z.Z.Z.M.Z.M.Z.M.Z.M.M.M.Z.Z.M.M.M.Z.[ Z.M.M.M.Z.M.Z.M.M.M.Z.M.Z.Z.M.M.M.Z.Z.M.M.M.M.Z.Z.M.Z.Z.M.M.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.M.Z.Z.Z.Z.M.M.Z.Z.Z.Z.M.M.Z.M.M.Z.Z.Z.Z.M.M.Z.Z.B.Z.Z.A.B.M.B.c O # t A R Q Q Q D.D.Q D.V.V.n.n.V.n.n.V.V.V.n.Q n.n.n.V.V.Q Q Q n.V.V.B.Q V.n.n.n.n.n.n.Q V.n.V.n.V.m.V.V.V.V.m.V.V.B.m.V.n.n.n.n.! l y y 2 : $ o YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYX & M.B.B.B.M.M.B.B.M.M.M.B.B.B.Z.M.B.B.M.M.M.M.M.M.M.M.M.M.M.[ M.M.B.M.B.M.M.M.M.M.B.M.M.M.M.M.M.B.M.Z.M.M.M.Z.B.Z.M.Z.M.M.[ M.M.Z.M.M.M.Z.M.M.Z.Z.Z.Z.Z.M.Z.Z.M.Z.Z.Z.M.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.M.Z.Z.Z.M.Z.Z.Z.Z.M.B.B.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.B.Z.M.Z.Z.M.M.Z.Z.M.M.M.M.Z.M.Z.M.M.M.M.M.M.M.Z.Z.B.M.Z.[ B.Z.M.Z.M.Z.M.M.Z.Z.M.Z.M.M.M.Z.Z.Z.M.M.Z.M.M.Z.Z.M.M.Z.Z.Z.Z.M.Z.M.Z.Z.Z.M.Z.Z.[ M.Z.Z.M.M.Z.Z.M.Z.M.Z.M.Z.Z.B.B.B.M.b.O X . 6 z F ! Q V.V.V.V.V.V.V.V.V.n.V.V.Q B.m.B.Q Q V.n.V.B.n.V.n.Q R W Q N.Q N.N.n.V.m.V.V.V.V.V.V.N.V.n.B.V.V.V.V.B.! z & YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYX . b.Z.Z.Z.B.Z.Z.B.Z.M.M.M.B.M.M.M.B.B.B.M.M.M.M.M.B.B.B.B.B.B.M.B.M.M.B.Z.Z.M.M.M.M.B.B.M.M.Z.Z.M.M.M.M.M.M.M.Z.M.Z.M.Z.M.M.M.Z.M.B.Z.Z.M.Z.Z.M.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.M.Z.M.Z.B.Z.Z.B.M.B.Z.Z.Z.M.Z.Z.Z.M.Z.B.Z.M.Z.Z.Z.Z.Z.M.Z.M.M.M.M.Z.M.M.Z.M.Z.Z.M.M.Z.Z.Z.Z.M.Z.Z.Z.Z.M.M.M.M.Z.M.Z.M.Z.M.M.M.M.M.M.Z.Z.Z.Z.Z.M.Z.M.M.Z.Z.M.Z.M.Z.Z.M.Z.Z.M.M.Z.Z.M.Z.Z.Z.[ M.M.M.Z.Z.Z.B.B.B.B.B.M.d o o . . , t v T ! V.V.V.m.n.V.V.V.V.V.B.Q Q V.n.V.B.B.Q Q R W W ! Q Q N.Q n.V.B.V.V.n.V.n.n.V.V.B.m.B.V.n.M 8 YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYX s M.B.B.B.B.B.B.Z.B.M.M.M.M.B.M.M.Z.M.M.B.B.B.B.Z.B.Z.M.Z.B.Z.M.M.B.[ B.Z.B.B.M.M.[ M.M.Z.Z.B.M.M.B.M.B.Z.Z.Z.Z.Z.M.M.M.M.B.Z.B.B.Z.B.Z.M.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.M.M.M.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.[ M.M.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.M.Z.Z.Z.Z.B.Z.Z.Z.M.Z.Z.M.M.Z.Z.M.M.M.M.M.M.M.M.Z.M.M.Z.M.B.B.M.Z.M.M.Z.Z.Z.M.M.M.M.Z.Z.M.M.M.Z.M.M.M.M.Z.M.M.Z.Z.M.Z.M.Z.M.Z.Z.M.M.Z.Z.M.M.Z.Z.M.Z.M.Z.M.Z.Z.M.M.M.M.Z.M.M.Z.B.B.B.B.B.U X , r l Z S T ! n.n.m.m.V.V.Q V.N.! W W R Q Q ! W E T T T E ! n.n.n.B.V.n.T F b a > YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYX O W M.Z.M.Z.B.M.B.Z.B.B.M.Z.M.M.M.Z.Z.Z.B.M.B.B.Z.B.B.M.B.Z.Z.M.M.M.Z.B.Z.B.Z.Z.B.Z.Z.M.Z.M.Z.M.M.M.M.M.Z.M.Z.M.M.Z.M.M.M.M.M.M.M.M.M.Z.Z.M.Z.Z.M.M.M.Z.M.Z.M.Z.Z.M.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.M.Z.M.Z.Z.B.Z.Z.Z.Z.Z.Z.Z.M.Z.M.M.M.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.M.Z.M.M.M.M.Z.M.M.Z.M.Z.Z.M.Z.Z.M.B.Z.B.M.Z.M.Z.Z.Z.M.Z.Z.M.M.M.Z.M.Z.Z.M.M.M.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.M.M.Z.M.M.Z.M.Z.M.Z.Z.M.M.Z.M.Z.M.M.B.B.B.B.B.i YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYX x v.v.[ Z.Z.M.Z.B.B.B.B.Z.M.M.M.Z.Z.Z.B.B.B.B.B.Z.B.B.M.M.M.Z.M.Z.B.Z.B.Z.Z.B.M.Z.M.Z.Z.Z.M.M.M.Z.M.M.M.Z.M.M.Z.Z.Z.M.M.M.M.M.B.B.Z.Z.M.M.Z.M.M.M.M.M.Z.M.Z.Z.M.M.Z.M.Z.Z.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.M.M.Z.Z.Z.Z.M.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.M.M.Z.Z.M.Z.M.Z.Z.M.Z.M.Z.M.Z.M.M.Z.M.M.M.Z.M.B.M.Z.Z.M.Z.Z.Z.M.Z.Z.M.Z.Z.Z.M.Z.Z.M.M.M.M.Z.M.Z.M.Z.Z.M.Z.Z.Z.Z.M.Z.Z.M.M.M.M.Z.M.M.Z.M.M.Z.M.M.M.Z.M.M.Z.Z.M.Z.B.B.B.B.K X YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYX # v.B.B.Z.B.Z.B.M.M.M.B.B.B.[ M.M.M.B.B.M.B.B.Z.B.B.M.B.B.M.Z.B.B.B.B.B.B.B.Z.Z.Z.Z.Z.Z.M.M.M.M.M.Z.Z.M.M.M.M.M.M.Z.M.M.M.B.Z.Z.M.M.M.Z.M.Z.Z.Z.M.M.Z.Z.Z.Z.Z.M.M.M.M.Z.M.M.Z.Z.Z.M.M.Z.M.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.Z.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.B.M.Z.M.Z.Z.M.M.M.M.Z.Z.Z.Z.Z.M.M.M.M.M.Z.M.Z.M.M.M.M.M.Z.M.Z.M.Z.M.Z.Z.M.M.Z.Z.Z.M.Z.M.M.M.B.M.M.M.M.M.M.Z.M.M.Z.M.Z.M.Z.Z.M.M.M.M.Z.Z.M.M.Z.Z.Z.Z.M.M.M.M.M.M.M.M.m.B.B.> YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYX u B.Z.Z.B.B.B.B.M.M.B.B.B.M.B.M.B.B.M.B.B.Z.B.B.M.[ M.M.B.B.B.B.Z.Z.Z.B.B.Z.B.Z.Z.Z.[ Z.Z.M.B.Z.M.Z.M.M.M.M.M.Z.M.Z.B.B.Z.Z.Z.M.M.M.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.M.Z.M.Z.Z.Z.M.M.M.M.M.Z.Z.M.M.Z.M.M.M.Z.Z.Z.Z.M.Z.M.M.Z.M.Z.Z.M.Z.Z.Z.Z.Z.M.B.Z.Z.M.Z.Z.M.Z.M.Z.Z.M.Z.M.Z.Z.M.M.M.M.M.Z.M.M.Z.M.M.Z.M.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.M.Z.M.Z.M.Z.M.M.B.B.[ M.M.Z.Z.[ M.M.Z.Z.M.Z.M.M.M.M.M.M.M.M.M.Z.M.M.Z.Z.M.M.M.M.M.M.M.M.B.B.S YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYX . o U Z.Z.B.M.B.Z.B.M.M.M.M.Z.B.B.M.M.M.Z.[ B.Z.B.B.M.M.B.M.M.M.B.M.B.B.B.M.B.M.M.M.B.Z.M.Z.Z.Z.Z.Z.M.M.M.M.Z.M.M.M.M.M.B.M.B.Z.M.M.Z.M.M.[ Z.M.Z.M.M.M.M.M.M.M.M.M.Z.Z.M.Z.Z.M.Z.Z.Z.M.Z.M.Z.M.Z.M.Z.Z.Z.Z.M.M.M.M.Z.M.M.Z.M.M.M.Z.M.Z.M.Z.Z.M.M.B.M.M.Z.M.M.M.Z.Z.M.Z.Z.M.Z.M.Z.Z.M.M.Z.M.M.Z.M.M.M.M.M.Z.M.Z.Z.M.Z.M.M.M.M.Z.M.Z.M.Z.Z.M.M.M.M.M.Z.Z.M.M.M.Z.Z.M.Z.Z.Z.Z.Z.M.M.M.Z.M.M.M.Z.M.M.Z.Z.Z.M.M.M.M.Z.M.Z.B.B.v.O YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYX : B.B.B.A.B.A.B.M.M.M.M.M.Z.M.M.M.B.M.B.Z.B.Z.B.Z.Z.B.B.M.B.M.M.M.B.M.M.M.M.M.M.B.B.Z.M.Z.M.Z.M.Z.M.M.M.M.M.M.M.Z.M.Z.Z.M.Z.M.M.M.Z.B.Z.M.M.M.M.Z.Z.M.M.M.M.M.Z.Z.Z.Z.Z.Z.Z.M.M.Z.Z.Z.Z.M.M.Z.Z.M.Z.Z.M.Z.M.M.M.Z.B.M.B.B.B.B.B.Z.Z.Z.Z.M.M.M.Z.Z.M.Z.Z.[ B.B.B.Z.B.Z.B.Z.B.Z.B.B.Z.M.M.Z.M.M.Z.M.M.Z.M.M.Z.Z.Z.Z.M.M.M.M.Z.Z.M.Z.Z.M.M.M.M.Z.Z.M.B.B.M.M.Z.B.B.B.Z.B.B.B.M.B.B.M.M.M.M.Z.Z.Z.M.Z.Z.Z.Z.[ M.Z.M.Z.B.M.l YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYX & ! B.M.Z.B.B.B.B.M.M.M.M.B.B.B.M.M.M.M.B.B.B.M.Z.B.M.Z.B.M.M.B.M.M.Z.M.B.Z.Z.Z.Z.Z.M.Z.Z.M.M.M.Z.M.M.M.M.M.M.M.M.Z.Z.Z.M.Z.M.M.M.B.B.M.M.M.M.M.M.M.M.Z.M.Z.M.Z.Z.Z.Z.M.M.M.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.M.B.M.M.B.Z.Z.Z.Z.Z.M.M.M.M.M.M.M.M.M.Z.Z.Z.Z.B.Z.M.M.B.M.B.B.B.Z.Z.M.M.M.M.M.M.M.M.M.M.Z.M.M.M.Z.M.M.M.Z.Z.M.Z.Z.Z.M.Z.M.Z.M.Z.M.B.B.B.Z.M.[ B.B.B.B.B.M.M.M.M.M.Z.M.M.Z.M.Z.M.Z.M.Z.Z.Z.Z.M.M.Z.B.K . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYX : v.B.M.B.B.M.B.B.M.B.B.M.B.M.M.M.M.M.B.Z.B.B.M.B.M.B.B.Z.B.M.M.M.B.B.M.M.M.Z.Z.B.Z.B.Z.M.Z.M.Z.Z.Z.Z.M.M.M.M.Z.Z.M.Z.M.Z.Z.M.M.M.M.M.B.M.B.Z.M.B.M.M.[ Z.M.Z.M.Z.Z.Z.Z.M.Z.M.M.Z.Z.Z.[ Z.M.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.M.M.M.M.M.M.Z.M.M.Z.Z.M.M.M.M.M.Z.M.B.B.B.B.Z.B.M.B.B.M.M.B.Z.B.M.Z.Z.M.B.M.M.M.M.Z.M.M.Z.M.M.M.M.M.Z.M.M.Z.M.Z.Z.Z.M.M.M.M.Z.M.B.B.M.Z.Z.M.Z.Z.Z.[ B.M.B.B.Z.M.M.Z.Z.M.M.M.M.M.Z.Z.Z.M.M.Z.M.Z.B.: YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYX : v.M.M.B.M.B.B.B.B.Z.B.Z.Z.M.M.B.B.M.Z.M.M.M.B.M.M.M.B.M.Z.M.M.M.Z.M.[ M.M.Z.B.Z.B.Z.M.Z.Z.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.B.M.M.M.M.M.M.M.M.Z.Z.M.Z.Z.Z.Z.Z.Z.M.M.Z.Z.M.Z.Z.M.M.Z.Z.M.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.M.M.B.M.Z.[ M.M.Z.M.Z.B.B.B.B.M.Z.M.M.[ B.M.M.B.B.Z.M.Z.M.M.M.M.B.M.M.Z.Z.M.M.M.M.M.M.Z.M.Z.M.Z.M.Z.Z.M.B.Z.M.M.Z.M.Z.M.Z.B.Z.M.Z.B.Z.B.M.B.B.M.M.M.M.Z.M.Z.M.M.Z.M.Z.Z.M.M.M.M.Z.a YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYX & J M.B.M.B.B.Z.B.B.Z.B.B.Z.M.M.B.M.B.B.B.M.M.M.M.M.B.B.M.M.Z.M.Z.M.M.M.M.B.B.Z.B.Z.M.M.Z.Z.Z.M.Z.M.Z.M.M.M.Z.Z.Z.M.Z.Z.Z.M.Z.M.M.M.M.B.B.M.M.M.M.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.M.Z.Z.Z.M.Z.M.M.Z.Z.Z.M.Z.B.M.M.[ B.B.Z.M.M.Z.B.M.M.M.Z.M.B.B.B.B.M.M.Z.M.B.M.M.M.B.B.B.B.M.Z.Z.Z.Z.B.B.M.M.M.Z.Z.Z.M.M.M.M.M.Z.M.M.M.Z.M.M.M.M.M.M.M.Z.M.Z.M.M.Z.Z.B.Z.B.B.B.M.M.M.Z.M.M.M.M.M.Z.Z.M.M.M.B.Z.Z.B.Z.M.M.V YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYX O c M.M.B.M.B.Z.M.M.B.B.B.B.M.M.M.M.B.M.B.B.M.M.M.M.M.M.M.M.Z.M.M.M.W M.M.M.B.B.B.M.Z.Z.M.M.Z.Z.Z.Z.Z.M.Z.Z.Z.M.Z.M.M.M.B.M.Z.M.M.M.B.M.M.Z.M.Z.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.M.Z.M.Z.M.M.M.Z.M.Z.Z.Z.M.M.Z.M.Z.Z.Z.B.M.M.B.M.B.M.M.B.B.M.B.M.M.M.B.M.B.M.M.M.Z.Z.M.M.M.M.M.B.Z.M.M.Z.M.Z.Z.Z.Z.Z.Z.Z.M.Z.M.M.M.Z.Z.M.Z.Z.M.M.M.Z.M.M.M.Z.Z.M.M.Z.M.M.M.B.M.B.B.M.M.M.B.B.M.Z.Z.M.Z.M.Z.Z.Z.M.M.B.B.Z.B.Z.M.U * YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYX . > F M.M.[ Z.Z.B.B.B.B.B.M.M.M.M.B.M.B.B.M.M.M.M.M.M.M.B.B.M.M.M.W M.M.M.M.B.Z.B.Z.Z.Z.Z.Z.Z.M.Z.M.Z.M.Z.Z.Z.M.M.M.M.Z.Z.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.Z.Z.M.M.Z.Z.M.M.Z.Z.M.M.Z.M.Z.M.Z.Z.Z.M.M.M.Z.Z.Z.Z.Z.Z.M.Z.M.B.B.B.M.M.M.Z.Z.Z.B.M.B.B.Z.M.Z.B.B.M.M.M.M.B.B.B.B.[ B.B.B.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.M.M.M.Z.M.Z.M.M.M.M.Z.Z.Z.M.M.M.M.Z.Z.M.M.M.Z.M.M.Z.B.M.Z.M.B.M.Z.B.Z.Z.Z.M.Z.M.Z.Z.M.Z.B.Z.Z.Z.Z.B.e + YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYX . 6 G B.B.B.B.B.M.B.M.M.M.B.M.M.M.M.B.[ B.B.Z.B.Z.M.B.Z.B.B.Z.M.W M.M.M.B.M.B.Z.Z.M.M.Z.Z.Z.Z.M.M.Z.M.M.Z.M.Z.M.M.Z.M.Z.Z.M.M.M.M.M.Z.M.M.Z.Z.M.Z.M.M.Z.Z.M.M.Z.M.Z.M.Z.Z.M.Z.M.M.Z.Z.M.M.M.Z.Z.Z.Z.Z.M.Z.M.Z.Z.B.Z.B.Z.Z.M.M.M.M.M.M.M.M.M.B.M.B.M.Z.M.M.M.Z.Z.M.B.M.B.B.B.B.B.Z.M.M.Z.M.M.Z.Z.M.Z.M.M.Z.M.Z.M.M.Z.M.M.M.Z.M.M.M.Z.M.Z.M.Z.Z.Z.M.M.Z.M.Z.B.M.Z.M.M.Z.M.M.B.M.M.M.Z.Z.Z.M.Z.Z.Z.Z.B.B.Z.Z.U * o YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYX . , L m.B.M.M.M.M.M.M.B.M.M.M.M.M.M.M.B.B.M.Z.Z.M.B.B.Z.Z.M.Z.W M.M.M.M.B.B.B.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.M.M.Z.M.Z.M.Z.Z.M.Z.Z.M.M.M.M.M.Z.M.M.Z.M.M.M.Z.Z.Z.Z.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.M.M.M.M.Z.M.Z.Z.Z.M.M.Z.M.Z.M.Z.Z.Z.M.Z.M.M.M.M.M.M.M.M.B.M.B.M.M.B.B.B.M.M.Z.M.B.M.M.B.M.M.M.B.M.Z.M.Z.M.Z.M.M.Z.Z.M.Z.M.Z.M.Z.Z.Z.M.Z.M.M.Z.M.Z.M.Z.M.M.Z.Z.M.Z.M.M.B.M.M.B.B.B.M.M.M.Z.Z.Z.B.M.M.M.A.B.B.B.B.B.B.B.Z.B.C X . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYX O B B.M.B.B.M.M.M.M.M.M.M.M.M.B.M.M.M.M.Z.B.M.M.B.B.B.B.B.M.W M.M.M.M.Z.Z.Z.M.M.Z.M.Z.M.Z.Z.B.Z.M.M.M.M.Z.M.Z.Z.Z.Z.M.Z.M.Z.[ M.M.M.M.M.M.M.M.M.Z.M.Z.Z.Z.M.Z.M.Z.Z.Z.M.M.M.M.M.M.M.Z.M.M.M.Z.Z.Z.M.M.[ M.M.Z.Z.Z.Z.Z.M.M.M.B.M.M.M.M.M.Z.M.B.M.Z.Z.M.M.M.B.M.B.M.M.B.M.Z.M.M.M.M.M.M.M.Z.M.Z.Z.M.Z.Z.M.Z.M.M.M.M.M.M.M.M.M.M.M.Z.Z.M.M.M.M.B.B.B.Z.M.M.B.M.B.B.B.B.B.B.B.B.B.M.M.M.M.B.B.B.B.B.B.M.g YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYX O x v.M.M.B.M.M.M.M.M.M.M.M.B.B.B.M.M.M.M.[ Z.Z.Z.B.Z.M.W M.M.M.Z.M.B.M.M.Z.Z.M.M.Z.M.Z.B.Z.Z.M.M.M.M.M.M.Z.M.Z.Z.Z.Z.M.M.M.M.M.M.M.M.M.M.M.M.Z.Z.Z.M.Z.Z.M.M.M.M.Z.Z.M.M.Z.M.Z.Z.M.M.Z.Z.Z.M.M.M.M.M.Z.Z.M.Z.B.Z.Z.M.M.B.M.M.B.M.M.M.M.B.M.Z.M.B.M.M.M.M.M.M.B.M.M.M.M.M.M.M.Z.M.Z.Z.B.Z.Z.Z.M.Z.M.M.M.B.M.Z.[ M.M.M.M.Z.M.Z.Z.Z.Z.Z.M.M.[ Z.Z.Z.M.Z.Z.M.M.M.M.Z.B.B.B.B.S.M.M.B.M.B.B.B.B.Z.B.F & YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYX . x Q M.M.B.B.B.M.B.B.B.M.M.M.M.Z.Z.M.M.Z.B.Z.M.Z.B.M.W M.M.M.M.M.M.M.Z.M.Z.Z.Z.Z.Z.Z.Z.M.Z.B.M.M.M.M.M.Z.M.Z.Z.Z.Z.Z.Z.M.M.M.M.M.Z.M.Z.M.M.M.M.M.M.Z.Z.Z.Z.Z.Z.Z.M.M.M.M.Z.M.M.Z.Z.M.M.M.Z.M.M.M.M.M.M.Z.M.Z.M.M.M.M.M.B.M.B.B.Z.M.Z.M.B.M.M.B.B.Z.[ B.M.M.M.B.M.B.M.Z.M.M.M.M.M.M.B.Z.M.Z.Z.Z.Z.Z.M.Z.Z.B.Z.M.M.M.M.Z.Z.M.Z.Z.M.Z.M.M.B.Z.Z.Z.Z.Z.B.B.B.B.K.B.B.Z.M.B.Z.B.M.B.B.B.B.B.B.B.[ 9 . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYX c U B.Z.Z.Z.Z.Z.Z.B.M.M.M.M.Z.Z.M.M.M.M.Z.Z.Z.M.M.M.M.M.M.M.M.M.M.M.M.M.Z.Z.Z.M.Z.Z.M.Z.M.M.M.M.Z.Z.M.Z.M.Z.Z.Z.M.M.M.M.M.Z.M.Z.Z.Z.M.M.M.M.M.M.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.M.M.M.M.Z.M.M.M.M.Z.Z.M.M.M.M.Z.Z.M.M.M.W M.M.Z.M.M.M.M.Z.M.M.M.Z.M.M.B.M.M.M.B.M.M.B.M.M.M.M.M.M.M.M.M.B.Z.M.Z.Z.M.Z.M.Z.Z.Z.M.M.Z.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.Z.M.Z.M.Z.Z.B.Z.M.B.B.B.B.Z.Z.Z.B.B.B.B.B.v.M.B.B.B.B.M.l X YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX w I M.B.M.B.[ Z.B.B.M.B.M.M.Z.Z.Z.Z.Z.M.M.M.M.M.M.M.M.W M.M.M.M.M.M.Z.M.Z.M.Z.Z.Z.Z.Z.M.M.Z.M.Z.Z.Z.M.M.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.M.Z.Z.M.M.Z.M.M.M.M.Z.M.M.Z.Z.M.M.M.M.M.Z.M.M.Z.M.M.M.M.M.Z.M.M.M.M.M.M.M.Z.Z.M.Z.M.B.M.M.B.B.M.B.M.M.B.M.B.M.M.M.M.M.M.M.M.M.M.M.B.Z.M.Z.M.Z.Z.M.Z.Z.Z.Z.Z.M.M.Z.M.Z.Z.Z.Z.M.Z.Z.M.M.M.Z.Z.B.Z.B.Z.B.Z.B.Z.B.B.B.B.B.B.B.B.v.M.B.M.M.M.Z @ YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX . e U M.M.Z.M.Z.M.Z.B.B.Z.Z.Z.Z.Z.Z.M.Z.Z.M.M.M.B.M.B.B.B.Z.B.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.B.Z.Z.Z.M.Z.Z.Z.M.M.M.Z.M.M.M.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.M.M.M.Z.Z.Z.Z.Z.Z.Z.[ M.M.M.Z.Z.M.Z.M.M.Z.M.M.M.Z.M.Z.Z.M.Z.Z.B.B.B.B.M.W M.M.M.Z.B.B.Z.B.M.B.B.M.M.B.M.M.M.M.M.B.M.M.M.M.M.M.M.M.M.M.M.B.Z.Z.M.Z.M.Z.M.Z.B.Z.Z.B.M.Z.M.Z.M.M.M.M.Z.Z.M.M.M.Z.M.Z.Z.B.B.B.B.Z.M.Z.Z.B.Z.B.B.B.B.B.v.M.M.B.M.Z @ YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX o X * U W M.M.M.Z.M.Z.M.M.Z.M.Z.M.Z.Z.Z.M.M.Z.M.Z.M.B.B.M.Z.M.M.M.Z.M.Z.Z.M.Z.M.M.Z.M.Z.Z.M.Z.M.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.M.Z.M.Z.M.M.M.Z.M.Z.M.Z.Z.Z.Z.Z.Z.M.M.M.M.Z.M.M.M.Z.M.M.Z.Z.Z.M.M.M.Z.M.B.B.B.B.B.M.M.M.M.[ M.M.Z.[ B.B.M.M.Z.M.M.M.B.M.B.M.M.M.M.M.M.M.[ M.M.M.M.M.B.M.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.M.Z.Z.Z.Z.M.M.M.M.Z.Z.Z.Z.Z.Z.Z.M.B.Z.B.M.M.B.B.Z.Z.Z.B.B.B.Z.M.M.M.M.m.x $ YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX J W M.B.B.M.B.B.B.B.Z.B.B.B.Z.B.M.B.B.B.B.M.M.M.B.Z.B.[ M.Z.Z.Z.M.Z.M.Z.B.Z.B.M.Z.M.B.B.M.B.Z.Z.B.Z.Z.B.Z.Z.Z.Z.D.Z.Z.B.M.Z.Z.M.M.M.Z.Z.Z.Z.M.Z.Z.Z.M.M.M.Z.M.M.M.M.M.Z.M.M.M.M.M.M.M.B.M.Z.Z.Z.B.M.Z.Z.M.M.Z.M.M.B.Z.B.M.Z.M.M.B.M.M.M.M.B.M.M.M.B.B.M.M.M.M.M.M.M.M.B.B.Z.Z.Z.Z.Z.Z.Z.Z.M.M.B.M.B.Z.Z.B.M.Z.M.B.B.Z.Z.M.Z.B.M.Z.M.Z.M.M.M.M.Z.Z.Z.Z.M.B.B.B.B.B.M.b.d O YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX C M.M.B.M.B.B.B.B.B.B.B.B.M.B.M.B.M.B.B.[ M.B.B.B.B.M.M.M.M.M.Z.M.Z.B.B.B.B.B.M.M.Z.Z.B.Z.B.M.M.M.M.Z.Z.Z.B.Z.Z.Z.[ Z.Z.M.M.M.Z.M.M.M.Z.Z.Z.Z.Z.Z.M.M.M.M.M.Z.Z.M.M.Z.M.M.M.M.B.B.B.Z.Z.Z.Z.M.M.Z.[ Z.Z.M.M.Z.M.Z.M.M.M.M.B.M.M.Z.B.M.M.B.M.B.B.M.M.M.B.M.M.M.M.[ B.M.B.B.B.M.M.Z.Z.Z.B.B.Z.Z.B.M.M.B.K.B.B.B.B.B.M.B.M.M.M.M.M.M.M.Z.Z.Z.M.Z.M.Z.Z.M.B.B.B.B.M.K < YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX A B.B.M.B.M.M.M.B.B.M.M.B.B.Z.B.B.B.B.M.M.M.Z.Z.Z.B.M.Z.Z.Z.Z.M.Z.B.M.Z.M.B.Z.B.B.M.Z.Z.Z.M.M.Z.M.Z.M.M.Z.Z.B.B.B.B.Z.Z.M.Z.Z.M.M.Z.Z.M.M.Z.M.Z.M.Z.Z.M.Z.M.M.Z.M.M.Z.M.M.M.B.B.B.B.B.M.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.M.M.M.Z.M.M.B.M.M.M.M.M.M.[ B.M.M.M.M.M.M.M.M.M.B.M.Z.Z.Z.Z.Z.Z.M.B.Z.Z.B.Z.M.M.M.M.B.B.B.M.B.B.M.M.M.Z.M.M.Z.Z.Z.B.M.M.M.M.Z.Z.Z.B.B.B.b.k + YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX F M.Z.M.M.M.M.B.B.M.B.B.B.Z.B.Z.B.Z.B.B.M.[ M.Z.B.M.Z.Z.M.M.Z.M.Z.M.Z.Z.Z.M.Z.Z.M.B.M.Z.M.M.M.Z.Z.B.B.M.B.B.B.Z.B.M.M.Z.M.M.M.Z.Z.Z.M.M.M.Z.Z.M.M.M.Z.M.M.M.M.Z.M.M.M.[ M.M.B.M.M.B.B.B.B.Z.M.M.Z.M.Z.M.M.B.B.M.Z.Z.M.M.M.M.M.M.B.M.B.B.M.B.M.M.B.B.B.M.M.M.B.B.B.B.M.Z.M.Z.M.B.Z.B.Z.B.B.Z.M.M.M.B.M.B.B.B.B.M.M.B.B.B.B.M.Z.B.M.Z.B.Z.M.Z.M.Z.Z.B.B.l O . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX A B.B.M.M.M.B.B.M.B.B.B.Z.B.B.Z.B.B.B.M.B.Z.B.B.Z.M.Z.M.M.M.Z.Z.Z.M.Z.B.Z.Z.Z.Z.[ M.M.M.Z.Z.B.Z.Z.Z.M.M.B.B.Z.B.M.Z.Z.M.M.M.Z.Z.Z.M.M.Z.Z.Z.Z.M.Z.M.Z.M.M.Z.Z.Z.M.M.M.M.M.B.M.M.M.M.Z.M.Z.M.Z.M.M.Z.M.Z.M.M.M.M.M.B.Z.[ B.B.M.M.M.B.M.B.B.M.M.M.M.M.M.B.M.M.M.M.M.M.M.Z.Z.Z.M.M.B.B.Z.M.B.M.M.M.B.B.B.B.B.B.B.B.B.B.M.Z.M.Z.Z.Z.Z.Z.B.Z.Z.M.Z.Z.Z.E $ YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX . x B.M.M.B.B.B.Q M.M.B.B.B.Z.B.B.B.Z.B.B.B.B.B.Z.Z.M.M.M.M.Z.M.Z.Z.Z.Z.M.Z.M.M.M.M.M.M.M.Z.M.Z.B.Z.Z.B.B.B.Z.Z.Z.Z.M.M.Z.M.Z.Z.Z.M.Z.Z.M.Z.M.Z.M.Z.Z.M.[ Z.M.Z.B.M.M.M.M.M.B.M.Z.M.B.Z.B.Z.Z.Z.Z.M.Z.M.M.Z.Z.M.M.M.B.Z.M.M.B.M.B.M.B.M.M.M.B.M.M.B.M.B.M.M.M.M.M.M.M.Z.Z.M.Z.Z.B.Z.Z.Z.B.B.M.Z.B.B.B.Z.M.M.B.Z.B.Z.Z.Z.M.M.M.Z.M.Z.M.Z.Z.Z.Z.Z.Z.l @ YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX . A M.M.B.M.[ M.B.B.B.B.B.M.Z.Z.B.Z.B.B.B.B.Z.Z.M.M.M.M.Z.Z.Z.Z.M.M.Z.M.Z.M.M.M.M.M.M.B.M.M.Z.B.B.Z.Z.B.B.B.B.Z.Z.[ M.M.M.M.Z.Z.Z.Z.Z.Z.Z.M.M.Z.Z.M.M.B.Z.Z.M.B.M.B.M.M.M.M.M.M.B.Z.B.Z.Z.Z.Z.Z.Z.M.Z.Z.M.M.M.Z.M.M.M.M.M.M.B.B.B.M.B.M.B.M.B.M.M.Z.M.B.M.M.B.B.M.M.Z.B.B.Z.Z.Z.Z.M.Z.M.M.M.Z.B.B.B.Z.M.B.B.B.M.Z.Z.M.M.M.B.Z.B.B.B.B.B.Z.M.Z.K : . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX O F M.M.v.W [ M.M.B.B.B.B.B.B.Z.B.Z.Z.B.Z.B.B.Z.M.Z.Z.Z.[ M.M.Z.M.Z.Z.B.M.W B.M.M.B.M.B.M.[ B.B.B.Z.B.B.Z.Z.Z.M.M.M.Z.M.Z.Z.Z.M.Z.Z.Z.Z.Z.M.Z.M.M.M.M.B.M.Z.B.M.M.M.M.M.B.B.M.Z.M.B.Z.B.M.Z.Z.Z.Z.M.M.Z.Z.M.M.M.M.M.Z.M.M.Z.B.B.M.M.B.M.B.Z.Z.Z.M.M.M.B.B.M.Z.B.B.Z.Z.Z.M.Z.[ M.M.M.M.Z.M.M.B.B.Z.B.M.M.M.M.Z.B.M.Z.Z.M.[ Z.M.M.B.M.B.B.[ G 4 . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX : L N.W v.v.B.M.B.B.Z.Z.Z.B.B.B.Z.B.B.B.Z.Z.Z.M.Z.M.Z.M.Z.B.Z.B.Z.B.M.M.M.M.M.M.M.M.M.M.M.B.B.Z.Z.B.B.Z.B.Z.M.M.M.Z.M.M.Z.Z.Z.Z.M.Z.Z.M.M.M.M.M.M.M.M.Z.M.M.B.B.Z.M.M.M.M.M.Z.Z.B.Z.M.M.B.B.Z.M.Z.M.Z.Z.M.M.M.M.M.B.Z.M.B.M.M.B.M.B.M.B.[ M.M.M.M.B.B.B.M.Z.B.Z.B.Z.B.M.M.B.M.B.M.B.M.Z.M.Z.B.Z.Z.[ M.M.B.Z.B.B.B.B.M.B.M.M.Z.B.B.M.J l & YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX : A W v.M.B.B.B.B.B.B.B.Z.Z.Z.Z.M.B.B.B.M.M.Z.Z.Z.M.Z.M.B.Z.Z.B.M.B.M.M.W M.M.M.M.M.M.M.B.[ B.Z.Z.Z.Z.B.M.M.M.Z.M.M.Z.M.Z.Z.Z.Z.M.Z.Z.M.M.M.M.Z.Z.Z.Z.Z.Z.Z.M.Z.M.M.M.M.M.B.B.Z.Z.M.M.B.B.M.B.M.M.M.M.B.Z.M.Z.M.M.M.M.M.B.M.B.M.B.M.M.B.Z.M.Z.M.M.M.B.B.M.Z.B.Z.Z.B.Z.M.B.M.M.M.M.M.M.Z.B.Z.B.Z.Z.Z.B.M.B.B.Z.M.B.B.B.M.B.M.W x 9 % . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX $ a U M.v.B.M.B.B.Z.Z.B.Z.B.B.M.B.B.B.Z.B.Z.M.Z.Z.Z.M.M.B.Z.B.Z.Z.Z.Z.M.M.M.B.M.M.M.M.B.B.B.Z.Z.Z.Z.B.M.M.M.M.M.Z.Z.M.Z.M.Z.Z.Z.M.Z.M.M.M.M.M.Z.M.Z.Z.B.Z.M.B.Z.M.M.M.B.M.B.B.Z.B.B.Z.M.B.M.B.Z.M.B.M.B.M.M.M.M.B.M.B.M.M.M.B.B.M.M.B.M.Z.M.M.M.M.M.B.B.M.M.Z.B.Z.B.B.M.M.M.B.M.M.M.Z.B.Z.B.Z.B.B.Z.B.B.Z.Z.B.Z.B.B.M.M.5 o YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX X & h W M.B.B.Z.Z.B.B.B.Z.B.M.[ B.Z.Z.M.M.Z.M.M.Z.M.B.M.M.B.Z.M.M.M.Z.M.B.Z.B.M.M.B.M.B.Z.Z.Z.B.Z.B.Z.Z.M.M.Z.M.M.Z.M.M.M.Z.Z.M.Z.M.M.M.M.Z.M.Z.M.Z.Z.B.Z.B.Z.M.M.M.M.B.M.B.B.B.B.[ B.M.M.Z.M.M.B.B.M.M.B.M.M.M.B.M.M.B.B.M.B.M.B.M.B.M.M.B.Z.M.B.M.B.M.B.Z.Z.B.B.[ M.B.M.M.M.M.Z.M.B.B.B.B.B.B.Z.B.B.Z.B.Z.B.B.B.D ; + . o YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX A Q M.B.B.B.B.B.Z.B.Z.Z.B.B.M.Z.M.Z.Z.Z.M.Z.B.[ M.M.M.B.Z.Z.Z.M.M.M.M.M.M.M.B.B.B.B.B.Z.B.Z.Z.M.M.M.M.B.M.M.Z.Z.M.Z.Z.Z.Z.M.M.M.M.M.M.M.Z.M.Z.M.M.Z.Z.M.M.B.M.M.Z.B.Z.M.M.B.M.B.M.B.B.B.M.[ B.B.M.M.B.M.M.B.Z.M.Z.M.M.Z.B.B.B.M.M.B.M.Z.M.B.M.Z.Z.Z.B.B.B.M.B.M.B.M.M.Z.M.Z.Z.B.B.B.Z.Z.B.Z.B.B.B.Z.Z.B.s @ YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX w U Q B.B.M.M.Z.Z.Z.B.B.B.Z.M.Z.M.M.M.M.M.B.M.M.M.B.B.B.Z.M.M.B.M.M.M.M.M.M.B.B.Z.Z.B.Z.Z.Z.M.M.M.M.M.Z.M.M.Z.M.Z.Z.Z.Z.Z.Z.M.M.Z.Z.M.M.Z.Z.Z.Z.Z.M.M.M.B.B.M.M.B.M.Z.M.M.B.M.M.B.M.M.B.B.B.M.Z.M.B.B.Z.[ Z.M.M.M.M.M.B.B.B.M.Z.M.M.M.B.M.M.B.Z.M.B.B.M.M.M.M.M.M.M.M.Z.M.B.Z.Z.B.B.M.M.M.M.B.B.B.m.2 . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX o V U M.Z.Z.U M.B.Z.B.B.M.Z.Z.Z.M.Z.Z.Z.B.M.M.B.B.B.M.M.M.B.M.B.M.M.M.M.M.M.B.B.B.M.Z.Z.Z.M.Z.Z.Z.Z.M.M.M.Z.M.M.M.Z.M.Z.Z.M.[ M.M.Z.M.Z.M.Z.Z.M.M.M.M.Z.B.M.M.M.M.B.Z.B.B.M.Z.M.M.B.Z.M.B.M.B.B.M.B.M.B.M.M.Z.Z.B.B.M.M.M.M.M.M.[ M.M.M.B.B.B.Z.B.B.M.B.B.B.B.M.Z.M.M.M.B.B.B.B.Z.v.M.M.M.B.M.B.1 YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX w I U D.Z.Z.W v.B.M.Z.M.M.Z.Z.Z.Z.M.Z.B.B.Z.B.M.Z.M.Z.Z.Z.Z.B.M.M.M.M.Z.B.Z.B.M.M.Z.Z.M.M.M.Z.M.M.M.M.Z.Z.M.M.M.M.M.M.M.M.B.M.Z.M.Z.Z.M.Z.M.Z.Z.M.Z.Z.Z.M.M.Z.M.[ B.B.Z.M.B.Z.M.M.M.M.B.B.M.B.B.B.B.Z.M.M.M.M.M.B.M.B.M.B.B.M.B.B.B.M.B.Z.Z.Z.[ B.B.M.B.M.M.M.M.M.M.B.B.B.B.B.M.v.M.B.B.B.s YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX x R B.Z.B.M.v.B.M.Z.M.Z.B.B.Z.B.B.B.B.B.B.B.Z.B.B.B.B.B.B.B.B.M.B.Z.B.Z.B.M.Z.Z.Z.Z.M.Z.Z.M.Z.M.Z.M.Z.M.M.M.M.M.M.M.M.B.M.M.M.M.Z.Z.Z.Z.M.M.Z.Z.Z.B.M.M.M.M.M.B.B.B.M.B.Z.M.Z.Z.B.M.M.K.B.M.Z.M.B.B.B.M.M.M.M.M.Z.Z.Z.Z.B.B.Z.Z.B.Z.Z.M.M.M.B.B.M.B.M.[ M.M.M.Z.B.B.M.M.M.M.B.B.B.B.M YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX > C M.M.B.M.B.M.Z.Z.Z.B.M.B.Z.Z.B.B.Z.B.B.B.M.M.M.M.B.B.B.M.B.B.B.B.B.Z.B.Z.M.Z.M.Z.M.Z.Z.M.M.Z.Z.Z.M.Z.Z.Z.M.Z.M.M.M.Z.M.M.Z.M.Z.Z.Z.Z.Z.Z.Z.B.M.M.M.B.M.M.M.M.Z.B.B.M.M.M.M.B.B.M.B.B.Z.M.B.[ M.M.M.M.B.B.M.Z.M.Z.B.Z.B.B.B.B.B.Z.M.M.M.M.M.B.Z.Z.B.M.Z.M.Z.B.B.M.B.B.B.Z.B.Z.Y YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX t I M.B.Z.Z.Z.M.Z.M.M.B.B.B.B.B.B.M.M.[ M.B.M.B.M.M.M.M.B.B.B.Z.B.B.Z.Z.Z.Z.M.M.Z.M.M.M.M.M.Z.Z.Z.Z.B.Z.Z.Z.Z.M.M.M.M.M.Z.Z.Z.Z.M.Z.M.M.Z.B.M.M.M.M.M.B.M.M.Z.M.Z.M.Z.M.M.B.B.M.B.B.M.B.M.M.B.M.B.B.B.B.B.Z.M.M.B.B.Z.Z.B.B.B.Z.B.B.M.B.B.B.B.Z.Z.B.M.M.M.B.B.B.B.B.M.Z.Z.F YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX c W B.Z.Z.Z.Z.B.M.M.B.B.B.B.B.M.M.M.M.M.M.M.M.B.M.M.B.Z.Z.B.Z.B.Z.Z.Z.Z.M.M.Z.Z.M.Z.M.Z.M.Z.Z.M.Z.Z.Z.Z.M.M.M.Z.M.M.B.Z.M.Z.Z.Z.Z.Z.Z.B.B.M.M.M.M.M.Z.Z.M.B.M.M.Z.Z.Z.M.B.B.B.M.B.M.M.B.M.B.M.M.B.B.B.B.M.B.M.M.M.M.M.B.B.[ Z.Z.B.M.B.Z.M.M.Z.Z.M.Z.B.M.B.B.B.B.B.Z.L . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX v [ M.Z.B.Z.B.Z.B.B.Z.B.B.B.M.M.M.[ M.v.M.M.M.M.B.B.B.Z.Z.B.Z.Z.B.Z.M.M.Z.M.M.M.M.Z.M.Z.Z.Z.Z.B.M.M.M.M.M.M.B.M.B.M.M.Z.M.M.Z.Z.Z.B.Z.M.[ M.M.M.M.M.M.Z.M.B.Z.Z.M.B.M.M.M.M.M.B.M.M.M.M.B.M.B.B.B.M.M.M.M.M.Z.M.Z.B.Z.B.Z.B.M.M.Z.B.B.B.B.A.B.B.Z.B.Z.B.Z.B.Z.M . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX * V v.M.Z.Z.B.V.Z.B.B.Z.Z.B.B.M.B.B.B.M.M.B.B.B.B.Z.B.Z.Z.Z.Z.M.M.Z.M.M.M.M.Z.Z.M.Z.Z.M.Z.Z.Z.Z.Z.M.M.M.B.B.Z.Z.M.M.Z.Z.Z.Z.Z.M.Z.Z.M.M.M.M.M.M.M.M.M.M.M.Z.B.Z.B.B.B.B.B.B.Z.M.M.M.B.M.B.B.Z.B.M.B.B.M.M.Z.B.Z.M.M.B.Z.M.M.M.Z.Z.B.Z.Z.B.Z.B.B.Z.B.B.Z.Z.k YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX + . X V v.B.Z.Z.B.Z.Z.B.M.B.Z.Z.B.B.B.B.B.Z.B.B.B.Z.B.B.B.Z.Z.Z.Z.Z.M.M.M.M.M.Z.Z.M.Z.M.M.M.Z.M.Z.Z.B.M.B.Z.Z.B.Z.M.M.Z.M.Z.Z.Z.Z.Z.Z.M.M.Z.M.M.Z.M.M.M.Z.Z.M.Z.B.B.M.B.M.Z.Z.B.B.B.B.B.B.B.B.Z.M.M.M.M.M.B.M.Z.B.M.B.B.M.M.M.M.Z.B.Z.B.B.Z.A.Z.Z.B.M.U 1 YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX O o o . x U M.B.Z.Z.B.B.B.B.B.B.Z.B.Z.B.M.M.M.Z.B.M.Z.[ B.Z.B.M.Z.M.M.M.Z.Z.M.Z.Z.Z.M.M.Z.M.M.B.Z.Z.B.Z.B.Z.M.Z.M.M.M.M.Z.M.M.M.M.M.B.Z.Z.Z.B.Z.Z.Z.Z.Z.B.M.M.M.M.B.M.B.Z.B.Z.Z.B.B.Z.B.Z.B.B.M.M.Z.M.Z.M.Z.M.B.M.B.B.M.M.[ Z.B.B.B.B.B.B.V.B.Z.B.c . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX g U U B.Z.Z.B.Z.B.B.Z.B.B.Z.M.M.B.M.M.M.Z.Z.M.Z.Z.M.M.M.M.M.Z.M.Z.Z.M.Z.M.M.M.Z.M.M.Z.Z.M.M.M.M.M.M.M.Z.M.M.Z.M.M.Z.M.M.M.Z.Z.M.Z.Z.Z.Z.Z.B.B.B.M.M.M.M.B.B.B.Z.B.Z.Z.B.B.Z.Z.B.M.M.M.B.B.Z.M.M.M.B.M.M.Z.M.M.M.Z.Z.B.Z.B.M.B.B.B.M & YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX . 5 C U M.V.Z.Z.B.B.Z.B.B.B.B.Z.Z.M.M.M.B.B.B.B.Z.Z.M.M.M.M.M.M.M.Z.M.M.M.M.M.M.B.B.Z.Z.M.M.B.M.M.M.M.M.M.M.M.B.M.Z.Z.Z.M.[ Z.Z.Z.Z.M.M.B.B.B.B.B.B.B.B.Z.B.Z.B.B.B.B.Z.Z.M.Z.M.B.Z.B.B.Z.M.M.M.B.B.Z.M.Z.M.M.Z.Z.B.B.Z.M.b.z & YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX . j G W M.Z.Z.Z.B.B.Z.B.B.Z.M.M.Z.B.Z.Z.B.M.Z.M.M.Z.M.M.M.Z.Z.Z.M.W U M.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.M.Z.M.B.M.M.Z.M.Z.B.M.M.Z.B.M.Z.Z.M.M.B.B.M.M.M.Z.M.B.B.B.M.M.B.M.B.B.[ Z.M.Z.B.A.B.M.B.B.M.M.Z.M.Z.M.B.B.Z.Z.Z.v.Z 9 YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX > B P W B.B.Z.B.Z.Z.M.Z.M.Z.M.Z.Z.B.Z.M.M.Z.Z.M.M.M.M.M.Z.M.M.Z.Z.M.Z.M.Z.M.M.Z.B.M.Z.Z.M.M.M.M.M.B.M.Z.B.M.M.M.M.Z.M.Z.Z.M.B.M.B.M.B.M.B.B.[ M.B.M.B.B.B.B.Z.B.B.Z.Z.M.B.B.M.M.B.v.M.M.M.M.B.B.U V a , YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX e B I W M.Z.Z.Z.Z.Z.Z.Z.B.B.M.Z.M.M.Z.Z.M.M.M.Z.M.Z.Z.Z.B.Z.M.M.B.Z.M.B.Z.M.M.M.M.M.M.M.M.M.M.B.B.B.M.M.M.M.Z.Z.B.B.M.B.B.[ M.M.M.Z.Z.Z.B.B.M.B.B.B.Z.Z.B.B.B.B.B.M.B.B.M.M.v.M.M.v.B.[ B * . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX > x P U M.M.M.Z.Z.Z.Z.B.M.M.M.M.M.M.M.M.M.M.M.Z.M.Z.M.Z.M.Z.Z.M.B.B.M.M.Z.[ Z.M.Z.B.B.Z.B.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.B.B.B.Z.Z.M.M.B.M.M.M.M.B.B.B.B.A.B.Z.B.B.B.B.B.m.B.Q v.E E A w + YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX . u V U M.U M.Z.Z.M.M.M.Z.Z.Z.Z.M.M.M.M.M.Z.Z.M.B.M.M.M.M.Z.M.M.W M.W M.Z.B.Z.Z.B.Z.B.Z.B.Z.M.Z.M.Z.M.Z.M.Z.B.B.B.B.B.Z.B.Z.M.M.M.M.B.B.Z.B.A.Z.B.M.b.L s $ YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX o . o + * V V U [ M.Z.Z.Z.Z.Z.Z.M.M.M.Z.Z.Z.M.Z.Z.M.M.M.Z.M.Z.M.M.M.M.Z.Z.M.B.M.M.M.M.M.M.Z.M.M.M.Z.Z.Z.Z.B.B.Z.Z.B.B.M.Z.Z.Z.B.B.M.B.B.m.x s q 0 : $ . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX 8 z F R v.B.Z.Z.Z.Z.Z.Z.Z.Z.B.B.Z.B.B.B.B.M.B.M.B.Z.B.B.B.M.v.U U M.v.M.B.B.B.B.B.B.Z.B.Z.B.Z.Z.B.B.B.B.Z.Z.Z.M.v.M & YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX , f B J v.B.A.Z.B.m.B.Z.B.Z.B.B.v.v.B.B.B.B.B.M.v.W W W W Q M.M.v.B.B.B.Z.Z.B.B.Z.B.B.Z.B.Z.V.B.M.D p YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX 1 s x A K b.v.M.B.v.B.Z.B.B.B.B.W U U W W v.W W R E J U E b.v.M.B.B.B.M.E F M s : YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", +"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX" +}; diff --git a/Documentation/logo/ly.xpm b/Documentation/logo/ly.xpm new file mode 100644 index 0000000000..3a752afe61 --- /dev/null +++ b/Documentation/logo/ly.xpm @@ -0,0 +1,133 @@ +/* XPM */ +static char * eight_transparant_xpm[] = { +"128 128 2 1", +" c None", +". c #000000", +" ", +" ", +" ", +" ", +" ", +" .... ", +" ........ ", +" ......... ", +" ........... ", +" ........... ", +" ............ ", +" ............ ", +" ............. ", +" ............ ", +" ............ ", +" ............. ", +" ............ ", +" ............ ", +" ............. ", +" ............. ", +" .............. ", +" ............. ", +" .............. ", +" .............. ", +" ............... ", +" ............... ", +" ............... ", +" ............... ", +" ............... ", +" .............. ", +" .............. ", +" ............... ", +" .............. ", +" ............... ", +" .............. ", +" .............. ", +" ............... ", +" .............. ", +" .............. ", +" ............. ", +" ............. ", +" ............ ", +" ............ ", +" ........... ", +" ............ ", +" ........... ", +" ........... ", +" .......... ", +" ........... ", +" .......... ", +" ... ........... ", +" ... .......... ", +" ..... .......... ", +" ..... .......... ", +" ..... ......... ", +" ...... ......... ", +" ...... ......... ", +" ...... ......... ", +" ...... ......... ", +" ...... ........ ", +" ....... ........ ", +" ....... ........ ", +" ....... ......... ", +" ....... ........ ", +" ....... ........ ", +" ....... ........ ", +" ....... ........ ", +" ....... ........ ", +" ....... ........ ", +" ....... ........ ", +" ....... ........ ", +" ....... ........ ", +" ....... ........ ", +" ....... ........ ", +" ....... ........ ", +" ....... ....... ", +" ....... ........ ", +" ....... ........ ", +" ....... ........ ", +" ........ ........ ", +" ........ ....... ", +" ........ ........ ", +" ........ ........ ", +" ...................... ........ ", +" .......................... ....... ", +" ............................. ....... ", +" ................................ ....... ", +" ................................. ...... ", +" ................................... ..... ", +" .................................... .... ", +" ...................................... . ", +" ....................................... ", +" ........................................ ", +" ......................................... ", +" .......................................... ", +" .......................................... ", +" ........................................... ", +" ............................................ ", +" ................... ................ ", +" ................ ............... ", +" ................ .............. ", +" .............. .............. ", +" ............ .............. ", +" ........... .............. ", +" .......... .............. ", +" ........ ............. ", +" .... ............. ", +" ............. ", +" ............. ", +" ............. ", +" .............. ", +" ............. ", +" ............. ", +" ............. ", +" ............ ", +" ........... ", +" ......... ", +" ....... ", +" . ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/Documentation/macros.itexi b/Documentation/macros.itexi new file mode 100644 index 0000000000..38609b25ef --- /dev/null +++ b/Documentation/macros.itexi @@ -0,0 +1,477 @@ +@c -*- coding: us-ascii; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + + +@include version.itexi +@include common-macros.itexi + + +@c ***** Displaying text ***** + +@c To get decent quotes in `foo' and ``foo''. + +@macro q{TEXT} +@quoteleft{}\TEXT\@quoteright{} +@end macro + +@macro qq{TEXT} +@quotedblleft{}\TEXT\@quotedblright{} +@end macro + + +@ifhtml + +@macro warning{TEXT} +@cartouche +@b{Note:} \TEXT\ +@end cartouche +@end macro + +@end ifhtml + +@ifnothtml + +@macro warning{TEXT} +@quotation +@quotation +@cartouche +@b{Note:} \TEXT\ +@end cartouche +@end quotation +@end quotation +@end macro + +@end ifnothtml + + + +@c ***** Headings in a doc subsection ***** + +@c Don't insert an empty line after @predefined! Right now +@c it doesn't matter, but a future implementation will probably +@c add some code which needs this restriction. + +@macro predefined +@noindent +@subsubheading Predefined commands +@end macro + +@c The next macro is a dummy currently since texinfo doesn't +@c provide a real ragged-right environment yet. +@c +@c Due to a bug in texi2html (texi2html.pl CVS versions <= 1.245) +@c the macro must not be empty. + +@macro endpredefined +@c +@end macro + + +@macro snippets +@noindent +@subsubheading Selected Snippets +@end macro + + +@c Don't insert an empty line after @seealso! Otherwise we get +@c unwanted extra vertical space in the PDF output. + +@macro seealso +@noindent +@subsubheading See also +@indent +@end macro + + +@macro knownissues +@noindent +@subsubheading Known issues and warnings +@end macro + + + +@c ***** Links and references ***** + +@c Definitions for references: +@c +@c @rglos +@c @rlearning +@c @ruser +@c @ressay +@c @rprogram +@c @rlsr +@c @rinternals +@c +@c All these also have a @...named version which allows to specify the +@c displayed text for the reference as second argument. +@c +@c ***** HTML + bigpage is a special case (other manual names); all other +@c formats are treated similarly. + + +@c *** not TeX *** + +@ifnottex + +@c ** bigpage ** + +@ifset bigpage + +@macro rglos{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,music-glossary-big-page,Music Glossary} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,music-glossary-big-page,Music Glossary} +@end macro + +@macro rlearning{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,learning-big-page,Learning Manual} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,learning-big-page,Learning Manual} +@end macro + +@macro ruser{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,notation-big-page,Notation Reference} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,notation-big-page,Notation Reference} +@end macro + +@macro ressay{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,essay-big-page,Essay} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,essay-big-page,Essay} +@end macro + +@macro rprogram{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,application-big-page,Application Usage} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,application-big-page,Application Usage} +@end macro + +@macro rlsr{TEXT} +@ref{\TEXT\,,,snippets-big-page,Snippets} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@ref{\TEXT\,,\DISPLAY\,snippets-big-page,Snippets} +@end macro + +@macro rinternals{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,internals-big-page,Internals Reference} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,internals-big-page,Internals Reference} +@end macro + +@end ifset + + +@c ** not bigpage ** + +@ifclear bigpage + +@ifnotinfo + +@macro rglos{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,music-glossary,Music Glossary} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,music-glossary,Music Glossary} +@end macro + +@macro rlearning{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,learning,Learning Manual} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,,learning,Learning Manual} +@end macro + +@macro ruser{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,notation,Notation Reference} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,notation,Notation Reference} +@end macro + +@macro ressay{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,essay,Essay} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,essay,Essay} +@end macro + +@macro rprogram{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,application,Application Usage} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,application,Application Usage} +@end macro + +@macro rlsr{TEXT} +@ref{\TEXT\,,,snippets,Snippets} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@ref{\TEXT\,,\DISPLAY\,snippets,Snippets} +@end macro + +@macro rinternals{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,internals,Internals Reference} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,internals,Internals Reference} +@end macro + +@end ifnotinfo + +@ifinfo + +@macro rglos{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,music-glossary,Music Glossary} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,music-glossary,Music Glossary} +@end macro + +@macro rlearning{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-learning,Learning Manual} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-learning,Learning Manual} +@end macro + +@macro ruser{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-notation,Notation Reference} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-notation,Notation Reference} +@end macro + +@macro ressay{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-essay,Essay} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-essay,Essay} +@end macro + +@macro rprogram{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-application,Application Usage} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-application,Application Usage} +@end macro + +@macro rlsr{TEXT} +@ref{\TEXT\,,,lilypond-snippets,Snippets} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@ref{\TEXT\,,\DISPLAY\,lilypond-snippets,Snippets} +@end macro + +@macro rinternals{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-internals,Internals Reference} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-internals,Internals Reference} +@end macro + +@end ifinfo + +@end ifclear + +@end ifnottex + + +@c *** TeX *** + +@iftex + +@c All commands below should work in the middle of the line; +@c we thus must not use @vindex directly since it works only if placed +@c on a line of its own. To overcome this problem, we define a +@c replacement macro using the internal definition of @vindex which +@c delimits arguments in the standard way (i.e., with braces). + +@tex +\gdef\lilyvindex#1{\doind{vr}{\code #1}\ignorespaces} +@end tex + +@macro rglos{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,music-glossary,Music Glossary} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,music-glossary,Music Glossary} +@end macro + +@macro rlearning{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,learning,Learning Manual} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,learning,Learning Manual} +@end macro + +@macro ruser{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,notation,Notation Reference} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,notation,Notation Reference} +@end macro + +@macro ressay{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,essay,Essay} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,essay,Essay} +@end macro + +@macro rprogram{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,application,Application Usage} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,application,Application Usage} +@end macro + +@macro rlsr{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,snippets,Snippets} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,snippets,Snippets} +@end macro + +@macro rinternals{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,internals,Internals Reference} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,internals,Internals Reference} +@end macro + +@end iftex + +@c ***** Macros specific to the web site ***** + +@ifset web + +@c LEGALESE + +@macro logoLegalLinux +Tux the Linux Penguin was created by +@uref{mailto:lewing@@isc.tamu.edu, lewing@@isc.tamu.edu} with +@uref{http://www.isc.tamu.edu/~lewing/gimp/, the Gnu Image +Manipulation Program}. + +@end macro + +@macro logoLegalFreeBSD +The FreeBSD logo is a registered trademark of +@uref{http://www.freebsd.org/, The FreeBSD Foundation}. + +@end macro + +@macro logoLegalMacOSX +The @qq{X image} is not a registered trademark. It was created by +@uref{http://en.wikipedia.org/wiki/User:Nihonjoe, Nihonjoe} and +@uref{http://en.wikipedia.org/wiki/User:CyberSkull, CyberSkull}, and +placed under the GNU Free Documentation License version 1.2 or later. +We found the image on +@uref{http://commons.wikimedia.org/wiki/File:Mac_OS_X_Userbox_X.png, +this Wikipedia Commons page}. + +@end macro + +@macro logoLegalWindows +The @qq{four colored rectangles image} is not a registered +trademark. It was created by +@uref{http://en.wikipedia.org/wiki/User:Rohitbd, Rohitbd} and +placed under the GNU Free Documentation License version 1.2. We +found the image on +@uref{http://commons.wikimedia.org/wiki/Category:Microsoft_Windows_logos, +this Wikipedia Commons page}. + +@end macro + +@end ifset diff --git a/Documentation/misc/GNUmakefile b/Documentation/misc/GNUmakefile index bb3beb4998..17eb63922e 100644 --- a/Documentation/misc/GNUmakefile +++ b/Documentation/misc/GNUmakefile @@ -2,14 +2,14 @@ depth = ../.. NAME = documentation -STEPMAKE_TEMPLATES=documentation texinfo +STEPMAKE_TEMPLATES = documentation texinfo TEXTS = $(call src-wildcard,ANNOUNCE-*[0-9]) $(call src-wildcard,CHANGES-*[0-9]) $(call src-wildcard,ChangeLog*[0-9]) $(call src-wildcard,NEWS-*[0-9]) EXTRA_DIST_FILES = $(TEXTS) include $(depth)/make/stepmake.make -default: local-doc +default: local-txt-doc #urg default local-WWW target uses footify before its time; # must add footify with txt-to-html target diff --git a/Documentation/music-glossary.tely b/Documentation/music-glossary.tely new file mode 100644 index 0000000000..d8a8af3ba0 --- /dev/null +++ b/Documentation/music-glossary.tely @@ -0,0 +1,8874 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- +@setfilename music-glosssary.info +@settitle Music Glossary +@documentencoding UTF-8 +@documentlanguage en + +@include macros.itexi + +@afourpaper + +@c see lilypond.tely for info installation note +@dircategory LilyPond +@direntry +* Glossary: (music-glossary). Glossary of music terms. +@end direntry + +@titlepage +@title Music Glossary +@author Christian Mondrup @c Original author of LilyPond glossary +@c Danish glossary +@author François Pinard @c Original glossary of GNU music project, +@c French glossary +@author Mats Bengtsson @c Swedish glossary +@author David González @c Spanish glossary +@author Bjoern Jacke @c German glossary +@author Neil Jerram @c English glossary translations +@author Heikki Junes @c Finnish glossary +@author Kurtis Kroon @c English glossary maintenance, beg. Oct. 2007 +@author Adrian Mariano @c Italian glossary +@author Han-Wen Nienhuys @c Dutch glossary +@author Jan Nieuwenhuizen @c Dutch glossary + +@c Fixes by Jean-Pierre Coulon and `Dirk', alphabetized by last name, KK, 10/07 +@c Updates to the German translation by Till Rettig, 12/07 + +Copyright @copyright{} 1999--2009 by the authors + + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.1 + or any later version published by the Free Software Foundation, + without Invariant Sections. + +@end titlepage + + +@c TODO: multiple omfcreators? +@ignore +@omfcreator Christian Mondrup, Kurt Kroon +@omfdescription Glossary of musical terms with translations +@omftype glossary +@omfcategory Applications|Publishing +@omflanguage English +@end ignore + +@ifnottex +@node Top +@top Music glossary +@end ifnottex + + +@ifnottex + +@ifhtml +@ifclear bigpage +This document is also available as a +@uref{source/Documentation/music-glossary.pdf,PDF} and as +@uref{source/Documentation/music-glossary-big-page.html,one big page}. +@end ifclear +@ifset bigpage +This document is also available as a +@uref{source/Documentation/music-glossary.pdf,PDF} and as a +@uref{source/Documentation/music-glossary/index.html,HTML indexed multiple pages}. +@end ifset +@end ifhtml + +This glossary was brought you by: + +@itemize + +@item @b{Christian Mondrup}: Original author of LilyPond glossary, Danish, +@item @b{François Pinard}: Original glossary of GNU music project, French, + +@item @b{Han-Wen Nienhuys}: Dutch, +@item @b{Jan Nieuwenhuizen}: Dutch, + +@item @b{Neil Jerram}: English, +@item @b{Kurtis Kroon}: English, + +@item @b{Heikki Junes}: Finnish, + +@item @b{Bjoern Jacke}: German, + +@item @b{Adrian Mariano}: Italian, + +@item @b{David González}: Spanish, + +@item @b{Mats Bengtsson}: Swedish, + +@end itemize + +with additional contributions: thanks to all who have contributed. + +@ignore + +The list is rather long ... + +@itemize + +@item Danish: +@itemize +@item Rune Zedeler, @emph{pace} +@item Eyolf Østrem +@end itemize + +@item Dutch: +@itemize +@item Alard de Boer +@end itemize + +@item English: +@itemize +@item Trevor Bača +@item Trevor Daniels +@item Andrew Hawryluk +@item Ian Hulin +@item Kieren MacMillan +@item Patrick McCarty +@item Ralph Palmer +@item Carl D. Sorensen +@item Anh Hai Trinh +@end itemize + +@item Finnish: +@itemize +@item Risto Vääräniemi +@end itemize + +@item German: +@itemize +@item Orm Finnendahl +@item Reinhold Kainhofer +@item Werner Lemberg +@item Till Rettig +@item Thomas Scharkowski +@end itemize + +@item Italian +@itemize +@item Andrea Valle +@end itemize + +@item Spanish +@itemize +@item Francisco Vila +@end itemize + +@item Swedish +@itemize +@item Simon Dahlbacka +@end itemize + +@end itemize +@end ignore + +@* +Copyright 1999--2009 by the authors + + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.1 + or any later version published by the Free Software Foundation, + without Invariant Sections. + +@* +@end ifnottex + +@c @pagesizes 10.3in +@c @everyheading @| @thispage @| +@c @evenheading @thispage @| @| +@c @oddheading @| @| @thispage @| + +This is the Music Glossary (MG) for GNU LilyPond version @version{}. +For more information about how this fits with the other +documentation, see +FIXME FIXME FIXME +@c @rlearning{About the documentation}. + + +@c arrowref +@macro aref{word} +@iftex +@w{@expansion{}@strong{\word\}}@c +@end iftex +@ifnottex +@expansion{}@ref{\word\, @strong{\word\}}@c +@end ifnottex +@end macro + +@menu +* Musical terms A-Z:: +* Duration names notes and rests:: +* Pitch names:: +@end menu + + +@node Musical terms A-Z +@chapter Musical terms A-Z + +Languages in this order. +@itemize +@item UK - British English (where it differs from American English) +@item ES - Spanish +@item I - Italian +@item F - French +@item D - German +@item NL - Dutch +@item DK - Danish +@item S - Swedish +@item FI - Finnish +@end itemize + + +@menu +* A:: +* a due:: +* accelerando:: +* accent:: +* accessory:: +* acciaccatura:: +* accidental:: +* adagio:: +* al niente:: +* alla breve:: +* allegro:: +* alteration:: +* alto:: +* alto clef:: +* ambitus:: +* anacrusis:: +* ancient minor scale:: +* andante:: +* appoggiatura:: +* arpeggio:: +* articulation:: +* ascending interval:: +* augmentation:: +* augmented interval:: +* autograph:: +* B:: +* backfall:: +* bar:: +* bar line:: +* baritone:: +* baritone clef:: +* bass:: +* bass clef:: +* beam:: +* beat:: +* beat repeat:: +* bind:: +* brace:: +* bracket:: +* brass:: +* breath mark:: +* breve:: +* C:: +* C clef:: +* cadence:: +* cadenza:: +* caesura:: +* canon:: +* cent:: +* central C:: +* chord:: +* chromatic scale:: +* chromaticism:: +* church mode:: +* clef:: +* cluster:: +* comma:: +* common meter:: +* common time:: +* complement:: +* compound interval:: +* compound meter:: +* compound time:: +* concert pitch:: +* conjunct movement:: +* consonance:: +* contralto:: +* copying music:: +* counterpoint:: +* countertenor:: +* crescendo:: +* cue-notes:: +* custos:: +* cut time:: +* D:: +* da capo:: +* dal niente:: +* dal segno:: +* decrescendo:: +* descending interval:: +* diatonic scale:: +* didymic comma:: +* diminished interval:: +* diminuendo:: +* diminution:: +* direct:: +* disjunct movement:: +* dissonance:: +* dissonant interval:: +* divisio:: +* doit:: +* dominant:: +* dominant ninth chord:: +* dominant seventh chord:: +* dorian mode:: +* dot (augmentation dot):: +* dotted note:: +* double appoggiatura:: +* double bar line:: +* double dotted note:: +* double flat:: +* double sharp:: +* double time signature:: +* double trill:: +* duple meter:: +* duplet:: +* duration:: +* dynamics:: +* E:: +* ecclesiastical mode:: +* eighth note:: +* eighth rest:: +* elision:: +* embellishment:: +* engraving:: +* enharmonic:: +* equal temperament:: +* expression mark:: +* extender line:: +* F:: +* F clef:: +* fall:: +* feathered beam:: +* fermata:: +* fifth:: +* figured bass:: +* fingering:: +* flag:: +* flageolet:: +* flat:: +* forefall:: +* forte:: +* fourth:: +* Frenched score:: +* Frenched staff:: +* Frenched staves:: +* fugue:: +* functional harmony:: +* G:: +* G clef:: +* glissando:: +* grace notes:: +* grand staff:: +* grave:: +* gruppetto:: +* H:: +* hairpin:: +* half note:: +* half rest:: +* harmonic cadence:: +* harmonics:: +* harmony:: +* hemiola:: +* homophony:: +* hook:: +* hymn meter:: +* interval:: +* inversion:: +* inverted interval:: +* just intonation:: +* key:: +* key signature:: +* laissez vibrer:: +* largo:: +* leading note:: +* ledger line:: +* legato:: +* legato curve:: +* leger line:: +* ligature:: +* lilypond:: +* line:: +* loco:: +* long appoggiatura:: +* longa:: +* lyric tie:: +* lyrics:: +* major:: +* major interval:: +* maxima:: +* meantone temperament:: +* measure:: +* measure repeat:: +* mediant:: +* melisma:: +* melisma line:: +* melodic cadence:: +* mensural notation:: +* mensuration sign:: +* meter:: +* metronome:: +* metronome mark:: +* metronomic indication:: +* mezzo:: +* mezzo-soprano:: +* middle C:: +* minor:: +* minor interval:: +* mixolydian mode:: +* mode:: +* modulation:: +* mordent:: +* motif:: +* motive:: +* movement:: +* multi-measure rest:: +* natural:: +* neighbor tones:: +* ninth:: +* non-legato:: +* note:: +* note head:: +* note names:: +* note value:: +* octavation:: +* octave:: +* octave mark:: +* octave marking:: +* octave sign:: +* ornament:: +* ossia:: +* part:: +* pause:: +* pennant:: +* percent repeat:: +* percussion:: +* perfect interval:: +* phrase:: +* phrasing:: +* piano:: +* pickup:: +* pitch:: +* pizzicato:: +* polymeter:: +* polymetric:: +* polymetric time signature:: +* polyphony:: +* portato:: +* presto:: +* proportion:: +* Pythagorean comma:: +* quadruplet:: +* quality:: +* quarter note:: +* quarter rest:: +* quarter tone:: +* quintuplet:: +* rallentando:: +* relative key:: +* repeat:: +* rest:: +* rhythm:: +* ritardando:: +* ritenuto:: +* scale:: +* scale degree:: +* scordatura:: +* score:: +* second:: +* semibreve:: +* semitone:: +* seventh:: +* sextolet:: +* sextuplet:: +* shake:: +* sharp:: +* simile:: +* simple meter:: +* sixteenth note:: +* sixteenth rest:: +* sixth:: +* sixty-fourth note:: +* sixty-fourth rest:: +* slash repeat:: +* slur:: +* solmization:: +* sonata:: +* sonata form:: +* song texts:: +* soprano:: +* staccato:: +* staff:: +* staves:: +* stem:: +* stringendo:: +* strings:: +* strong beat:: +* subdominant:: +* submediant:: +* subtonic:: +* sul G:: +* superdominant:: +* supertonic:: +* symphony:: +* syncopation:: +* syntonic comma:: +* system:: +* temperament:: +* tempo indication:: +* tenor:: +* tenth:: +* tenuto:: +* third:: +* thirty-second note:: +* thirty-second rest:: +* thorough bass:: +* tie:: +* time:: +* time signature:: +* tone:: +* tonic:: +* transposing instrument:: +* transposition:: +* treble clef:: +* tremolo:: +* triad:: +* trill:: +* triple meter:: +* triplet:: +* tritone:: +* tuning fork:: +* tuplet:: +* turn:: +* unison:: +* upbeat:: +* voice:: +* volta:: +* weak beat:: +* whole note:: +* whole rest:: +* whole tone:: +* woodwind:: +@end menu + + +@node A +@section A + +@itemize +@item ES: la +@item I: la +@item F: la +@item D: A, a +@item NL: a +@item DK: a +@item S: a +@item FI: A, a +@end itemize + +@seealso +@ref{Pitch names}. + + +@node a due +@section a due + +ES: a dos, +I: a due, +F: à deux, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: kahdelle. + +Abbreviated @notation{a2} or @notation{a 2}. In orchestral scores, +@notation{a due} indicates that: + +@enumerate + +@item A single part notated on a single staff that normally carries parts +for two players (e.g. first and second oboes) is to be played by both +players. + +@item Or conversely, that two pitches or parts notated on a staff that +normally carries a single part (e.g. first violin) are to be played by +different players, or groups of players (@q{desks}). + +@end enumerate + +@seealso +No cross-references. + + +@node accelerando +@section accelerando + +ES: accelerando, +I: accelerando, +F: accelerando, en accélérant, +D: accelerando, schneller werden, +NL: accelerando, +DK: accelerando, +S: accelerando, +FI: accelerando, kiihdyttäen. + +[Italian: @q{speed up, accelerate}] + +Increase tempo + +@seealso +No cross-references. + + +@node accent +@section accent + +ES: acento, +I: accento, +F: accent, +D: Akzent, +NL: accent, +DK: accent, +S: accent, +FI: aksentti, korostus. + +The stress of one tone over others. + +@seealso +No cross-references. + + +@node accessory +@section accessory + +@seealso +@ref{ornament}. + + +@node acciaccatura +@section acciaccatura + +ES: ?, +I: acciaccatura, +F: acciaccatura, appoggiature brève, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: ?. + +A grace note which takes its time from the rest or note preceding the +principal note to which it is attached. The acciaccatura is drawn as a small +eighth note (quaver) with a line drawn through the flag and stem. + +@seealso +@ref{appoggiatura}, @ref{grace notes}, @ref{ornament}. + + +@node accidental +@section accidental + +ES: alteración accidental, +I: accidento, +F: altération accidentelle, +D: Versetzungszeichen, Akzidenz, +NL: toevallig (verplaatsings)teken, +DK: løst fortegn, +S: tillfälligt förtecken, +FI: tilapäinen etumerkki. + +An accidental alters a note by: + +@itemize + +@item Raising its pitch: +@itemize +@item By two semitones—@notation{double sharp} +@item By one semitone—@notation{sharp} +@end itemize + +@item Lowering its pitch: +@itemize +@item By one semitone—@notation{flat} +@item By two semitones—@notation{double flat} +@end itemize + +@item Or canceling the effects of the key signature or previous accidentals. +@end itemize + +@lilypond[quote,notime] +\score { + \new Staff { + \relative c'' { + \set Staff.extraNatural = ##f + gisis1 gis g! ges geses + } + } + \addlyrics { + \markup { + \center-column { double sharp } + } + sharp + natural + flat + \markup { + \center-column { double flat } + } + } + \layout { + \context { + \Score + \override SpacingSpanner + #'base-shortest-duration = #(ly:make-moment 1 32) + } + } +} +@end lilypond + +@seealso +@ref{alteration}, @ref{semitone}, @ref{whole tone}. + + +@node adagio +@section adagio + +ES: adagio, +I: adagio, +F: adagio, lent, +D: Adagio, Langsam, +NL: adagio, +DK: adagio, +S: adagio, +FI: adagio, hitaasti. + +[Italian: @q{comfortable, easy}] + +@itemize + +@item Slow tempo, slower -- especially in even meter -- than +@notation{andante} and faster than @notation{largo}. + +@item A movement in slow tempo, especially the second (slow) movement +of sonatas, symphonies, etc. + +@end itemize + +@seealso +@ref{andante}, @ref{largo}, @ref{sonata}. + + +@node al niente +@section al niente + +ES: ?, +I: al niente, +F: al niente, en mourant, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: häviten olemattomiin. + +[Italian: @q{to nothing}] Used with @notation{decrescendo} to indicate +that the sound should fade away to nothing. + +@notation{Al niente} is indicated by circling the tip of the hairpin: + +@lilypond[quote,relative=2] +\override Hairpin #'circled-tip = ##t +c1\< +c2\> c\< +c1\! +@end lilypond + +or with the actual phrase @notation{al niente}: + +@lilypond[quote,relative=2] +\dimTextDecresc +\override DynamicTextSpanner #'(bound-details right text) = + \markup { \italic { al niente } } +c1\> ~ +c1 ~ +c1\! +@end lilypond + +Since one does not crescendo @emph{to} nothing, it is not correct to use +@notation{al niente} with @notation{crescendo}. Instead, one should use +@emph{dal niente} (@notation{@b{from} nothing}). + +@seealso +@ref{crescendo}, @ref{dal niente}, @ref{decrescendo}, @ref{hairpin}. + + +@node alla breve +@section alla breve + +ES: ?, +I: ?, +F: alla breve, à la brève, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: ?. + +[Italian: @q{on the breve}] Twice as fast as the notation indicates. + +Also called @notation{in cut-time}. The name derives from mensural +notation, where the @notation{tactus} (or beat) is counted on the semibreve +(the modern whole note). Counting @q{on the breve} shifts the tactus to the +next longest note value, which (in modern usage) effectively halves all note +values. + +In mensural notation, breves and semibreves can have a ternary relationship, +in which case @notation{alla breve} means thrice (not twice) as fast. In +practice, this complication may not have mattered, since Gaffurius's system +of multiplex proportions makes it easy to explicitly state which proportion +is needed. + +@seealso +@ref{breve}, @ref{hemiola}, @ref{mensural notation}, @ref{note value}, +@ref{proportion}, @ref{whole note}. + + +@node allegro +@section allegro + +ES: allegro, +I: allegro, +F: allegro, gaiement, +D: Allegro, Schnell, Fröhlich, Lustig, +NL: allegro, +DK: allegro, +S: allegro, +FI: allegro, nopeasti. + +[Italian: @q{cheerful}] Quick tempo. Also used as a title for pieces in a +quick tempo, especially the first and last movements of a sonata. + +@seealso +@ref{sonata}. + + +@node alteration +@section alteration + +ES: alteración, +I: alterazione, +F: altération, +D: Alteration, +NL: verhoging of verlaging, +DK: Forandring, +S: Förändring, +FI: muunnettu. + +An alteration is the modification, raising or lowering, of a note's +pitch. It is established by an accidental. + +@c TODO: add second meaning from mensural notation + +@seealso +@ref{accidental}. + + +@node alto +@section alto + +ES: alto, +I: contralto, +F: alto, +D: Alt, +NL: alt, +DK: alt, +S: alt, +FI: altto, matala naisääni. + +A female voice of low range (@emph{contralto}). Originally the alto was a +high male voice (hence the name), which by castration or the use of falsetto +reached the height of the natural female voice. This type of voice is also +known as countertenor. + +@seealso +@ref{countertenor}. + + +@node alto clef +@section alto clef + +ES: clave de do en tercera, +I: chiave di contralto, +F: clef d'ut troisième ligne, +D: Altschlüssel, Bratschenschlüssel, +NL: alt sleutel, +DK: altnøgle, +S: altklav, +FI: alttoavain. + +C clef setting middle C on the middle line of the staff. + +@seealso +@ref{C clef}. + + +@node ambitus +@section ambitus + +ES: ámbito, +I: ambitus, +F: ambitus, tessiture, +D: Ambitus, +NL: ambitus, +DK: ambitus, +S: ambitus, +FI: ambitus, ääniala, soitinala. + +[Latin: past participle of @emph{ambire}, @q{to go around}; plural: ambitus] +Denotes a range of pitches for a given voice in a part of music. It may +also denote the pitch range that a musical instrument is capable of playing. +Sometimes anglicized to @emph{ambit} (pl. @emph{ambits}). + +@seealso +No cross-references. + + +@node anacrusis +@section anacrusis + +ES: anacrusa, +I: anacrusi, +F: anacrouse, levée, +D: Auftakt, +NL: opmaat, +DK: optakt, +S: upptakt, +FI: kohotahti. + +An anacrusis (also known as pickup or upbeat) is an incomplete measure +of music before a section of music. It also refers to the initial +note(s) of a melody occurring in that incomplete measure. + +@lilypond[quote,relative=1] +\key f \major +\time 4/4 +\partial 4 f4 +bes4. a8 bes4 c +bes4( a) g f +bes4. a8 bes4 c +f,2. \bar "||" +@end lilypond + +@seealso +@ref{measure}, @ref{meter}. + + +@node ancient minor scale +@section ancient minor scale + +ES: escala menor natural, +I: scala minore naturale, +F: forme du mode mineur ancien, troisème mode, mode hellénique, +D: reines Moll, natürliches Moll, +NL: authentieke mineurtoonladder, +DK: ren mol, +S: ren mollskala, +FI: luonnollinen molliasteikko. + +Also called @q{natural minor scale}. + +@lilypond[quote,notime,relative=2] +a1 b c d e f g a +@end lilypond + + +@seealso +@ref{diatonic scale}. + + +@node andante +@section andante + +ES: andante, +I: andante, +F: andante, allant, +D: Andante, Gehend, +NL: andante, +DK: andante, +S: andante, +FI: andante, käyden. + +[Italian: present participle of @emph{andare}, @q{to walk}] + +Walking tempo/character. + +@seealso +No cross-references. + + +@node appoggiatura +@section appoggiatura + +ES: apoyatura, +I: appoggiatura, +F: appoggiature, (port de voix), +D: Vorschlag, Vorhalt +NL: voorslag, +DK: forslag, +S: förslag, +FI: appoggiatura, etuhele. + +Ornamental note, usually a second, that is melodically connected with +the main note following it. In music before the 19th century +appoggiature were usually performed on the beat, after that mostly +before the beat. While the short appoggiatura is performed as a short +note regardless of the duration of the main note the duration of the +long appoggiatura is proportional to that of the main note. + +@lilypond[quote,relative=2] +\key d \major +\time 4/4 +4_"notation" r +\grace g16 +fis8 e16 fis +\grace a16 +g8 fis16 g | +a4 \bar "||" + +\set Score.measurePosition = #ZERO-MOMENT +4_"performance" r +g16( fis) e fis +a16 ( g) fis g | +a4 \bar "||" +@end lilypond + +An appoggiatura may have more notes preceding the main note. + +@lilypond[quote,relative=2] +\key as \major +\time 2/4 +\grace bes16 as8-"notation" as16 bes as8 g | +\grace { as16[( bes] } 4) +\grace { as16[( bes] } 4) \bar "||" + +\grace bes16 as8-"performance" as16 bes as8 g | +<< + { + \voiceOne + as32 bes c8. as32 bes c8. + } + \new Voice { + \voiceTwo + as16 ~ as8. as16 ~ as8. + } +>> +@end lilypond + +@seealso +No cross-references. + + +@node arpeggio +@section arpeggio + +ES: arpegio, +I: arpeggio, +F: arpège, +D: Arpeggio, Akkordbrechungen, gebro@-chener Akkord, +NL: gebroken akoord, +DK: arpeggio, akkordbrydning, +S: arpeggio, +FI: arpeggio, murtosointu. + +[Italian: @q{harp-like, played like a harp}] + +@lilypond[quote,line-width=13\cm] +\new PianoStaff << + \context Staff = "SA" { + \relative c'' { + \clef treble + \time 4/4 + r8 g16 c e g, c e r8 g,16 c e g, c e + r8 a,16 d f a, d f r8 a,16 d f a, d f + \bar "||" + } + } + \context Staff = "SB" { + \relative c' { + \clef bass + << + { + \voiceOne + r16 e8. ( e4) r16 e8. ( e4) + r16 d8. ( d4) r16 d8. ( d4) + } + \new Voice { + \voiceTwo + c2 c + c2 c + } + >> + } + } +>> +@end lilypond + +@seealso +No cross-references. + + +@node articulation +@section articulation + +ES: articulación, +I: articulazione, +F: articulation, +D: Artikulation, +NL: articulatie, +DK: ?, +S: ?, +FI: artikulaatio, ilmaisu. + +Articulation refers to notation which indicates how a note or notes +should be played. Slurs, accents, staccato, and legato are all +examples of articulation. + +@seealso +No cross-references. + + +@node ascending interval +@section ascending interval + +ES: intervalo ascendente, +I: intervallo ascendente, +F: intervalle ascendant, +D: steigendes Intervall, +NL: stijgend interval, +DK: stigende interval, +S: stigande intervall, +FI: nouseva intervalli. + +A distance between a starting lower note and a higher ending note. + +@seealso +No cross-references. + + +@node augmented interval +@section augmented interval + +ES: intervalo aumentado, +I: intervallo aumentato, +F: intervalle augmenté, +D: übermäßiges Intervall, +NL: overmatig interval, +DK: forstørret interval, +S: överstigande intervall, +FI: ylinouseva intervalli. + +@seealso +@ref{interval}. + + +@node augmentation +@section augmentation + +ES: aumentación, +I: aumentazione, +F: augmentation, +D: Augmentation, +NL: Augmentatio, +DK: Forøgelse, +S: Förstoring, +FI: aika-arvojen pidentäminen. + +@c TODO: add definition. + +This is a placeholder for augmentation (wrt mensural notation). + +@seealso +@ref{diminution}, @ref{mensural notation}. + + +@node autograph +@section autograph + +ES: manuscrito, +I: autografo, +F: manuscrit, autographe +D: Autograph, Handschrift, +NL: manuscript, +DK: håndskrift, autograf, +S: handskrift, +FI: käsinkirjoitettu nuotti. + +@itemize + +@item A manuscript written in the composer's own hand. + +@item Music prepared for photoreproduction by freehand drawing, with +the aid of a straightedge ruler and T-square only, which attempts to +emulate engraving. This required more skill than did engraving. + +@end itemize + +@seealso +No cross-references. + + +@node B +@section B + +@itemize +@item ES: si +@item I: si +@item F: si +@item D: H, h +@item NL: b +@item DK: h +@item S: h +@item FI: H, h +@end itemize + +@seealso +@ref{H}, @ref{Pitch names} + + +@node backfall +@section backfall + +@seealso +@ref{appoggiatura}. + + +@node bar +@section bar + +@seealso +@ref{measure}. + + +@node bar line +@section bar line + +ES: barra, línea divisoria, +I: stanghetta, barra (di divisione), +F: barre (de mesure), +D: Taktstrich, +NL: maatstreep, +DK: taktstreg, +S: taktstreck, +FI: tahtiviiva. + +A vertical line through the staff (or through multiple staves) that +separates measures. Used very infrequently during the Renaissance (mostly +in secular music, or in sacred music to indicate congruences between parts +in otherwise-unmetered music). + +@seealso +@ref{measure}. + + +@node baritone +@section baritone + +ES: barítono, +I: baritono, +F: bariton, +D: Bariton, +NL: bariton, +DK: baryton, +S: baryton, +FI: baritoni, keskikorkuinen miesääni. + +The male voice intermediate in pitch between the bass and the tenor. + +@c F: clef de troisième ligne dropped + +@seealso +@ref{bass}, @ref{tenor}. + + +@node baritone clef +@section baritone clef + +ES: clave de fa en tercera, +I: chiave di baritono, +F: clef d'ut cinquième ligne, clef de fa troisième, +D: Baritonschlüssel, +NL: baritonsleutel, +DK: barytonnøgle, +S: barytonklav, +FI: baritoniavain. + +C or F clef setting middle C on the upper staff line. + +@seealso +@ref{C clef}, @ref{F clef}. + + +@node bass +@section bass + +ES: bajo, +I: basso, +F: basse, +D: Bass, +NL: bas, +DK: bas, +S: bas, +FI: basso, matala miesääni. + +@itemize + +@item The lowest male voice. + +@item Sometimes, especially in jazz music, used as an abbreviation for +double bass. + +@end itemize + +@seealso +@ref{strings}. + + +@node bass clef +@section bass clef + +ES: clave de fa en cuarta, +I: chiave di basso, +F: clef de fa quatrième ligne, +D: Bassschlüssel, +NL: bassleutel, +DK: basnøgle, +S: basklav, +FI: bassoavain. + +A clef setting with middle C on the first top ledger line. + +@seealso +@ref{F clef}. + + +@node beam +@section beam + +ES: barra +I: coda, +F: ligature, barre (de croches), +D: Balken, +NL: waardestreep, +DK: bjælke, +S: balk, +FI: palkki. + +Line connecting a series of notes (shorter than a quarter note). The +number of beams determines the note value of the connected notes. + +@lilypond[quote,notime,relative=2,line-width=13\cm] +g8-"1/8"[ g g g] s16 +g16-"1/16"[ g g g] s +g32-"1/32"[ s g s g s g] s16 +g64-"1/64"[ s32 g64 s32 g64 s32 g64] s32 +@end lilypond + +@seealso +@ref{feathered beam}. + + +@node beat +@section beat + +ES: tiempo, parte (de compás) +I: tempi, +F: temps, +D: Takt, Taktschlag, Zeit (im Takt), +NL: tel, +DK: (takt)slag, +S: taktslag, +FI: aika-arvo. + +Note value used for counting, most often half-, fourth-, and eighth notes. +The base counting value and the number of them in each measure is indicated +at the start of the music by the @notation{time signature}. + +@lilypond[quote,relative=2] +\key g \major +\time 4/4 +g4 c b a | g1 \bar "||" +\time 3/8 +g8 d' c | b c a | g4. \bar "||" +@end lilypond + +@seealso +@ref{time signature}. + + +@node beat repeat +@section beat repeat + +@seealso +@ref{percent repeat}. + + +@node bind +@section bind + +@seealso +@ref{tie}. + + +@node brace +@section brace + +ES: llave, corchete, +I: graffa, +F: accolade, +D: Klammer, Akkolade, +NL: accolade, teksthaak, +DK: klamme, +S: klammer, +FI: yhdistävä sulkumerkki. + +Symbol at the start of a system connecting staves. + +Curly braces are used for connecting piano staves, and sometimes for connecting +the staves of like instruments in an orchestral score when written on different +staves (e.g. first and second flutes): + +@lilypond[quote] +\new GrandStaff << + \context Staff = "SA" { + \relative c'' { + \clef treble + g4 e c2 + } + } + \context Staff = "SB" { + \relative c { + \clef bass + c1 + \bar "|." + } + } +>> +@end lilypond + +Angular brackets for connecting parts in an orchestral or choral score: + +@lilypond[quote] +\new StaffGroup << + \context Staff = "SA" { + \relative c'' { + \clef treble + g4 e c2 + } + } + \context Staff = "SB" { + \relative c { + \clef bass + c1 + \bar "|." + } + } +>> +@end lilypond + +@seealso +No cross-references. + + +@node bracket +@section bracket + +ES: corchete, +I: ?, +F: crochet, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: sulkumerkki. + +@seealso +@ref{brace} + + +@node brass +@section brass + +ES: metales, +I: ottoni, +D: Blechbläser, +NL: koper (blazers), +F: cuivres, +DK: messingblæsere, +S: brassinstrument, mässingsinstrument, +FI: vaskisoitin. + +A family of blown musical instruments made of brass, all using a cup +formed mouth piece. The brass instruments commonly used in a symphony +orchestra are trumpet, trombone, french horn, and tuba. + +@seealso +No cross-references. + + +@node breath mark +@section breath mark + +ES: respiración, +I: respiro, +F: respiration, +D: Atemzeichen, Trennungszeichen, +NL: repercussieteken, +DK: vejrtrækningstegn, +S: andningstecken, +FI: hengitysmerkki. + +Indication of where to breathe in vocal and wind instrument parts. + +@seealso +@ref{caesura}. + + +@node breve +@section breve + +@itemize +@item US: breve, double-whole note +@item ES: cuadrada, breve +@item I: breve +@item F: brève +@item D: Brevis +@item NL: brevis +@item DK: brevis +@item S: brevis +@item FI: brevis, kaksoiskokonuotti +@end itemize + +Note value: twice the length of a @notation{whole note} (@notation{semibreve}). + +Mainly used in music from before 1650. In mensural notation, it was a note +of fairly short duration—hence the name, which is Latin for @q{short} or +@q{of short duration}. + +@lilypond[quote,notime,relative=2] +g\breve +@end lilypond + +@seealso +@ref{mensural notation}, @ref{note value}, @ref{semibreve}. + + +@node C +@section C + +@itemize +@item ES: do +@item I: do +@item F: ut, do +@item D: C, c +@item NL: c +@item DK: c +@item S: c +@item FI: C, c +@end itemize + +@seealso +@ref{Pitch names}. + + +@node C clef +@section C clef + +ES: clave de do, +I: chiave di do, +F: clef d'ut, +D: C-Schlüssel, +NL: C-sleutel, +DK: c-nøgle, +S: c-klav, +FI: C-avain. + +Clef symbol indicating the position of the middle C. Used on all note +lines. + +@lilypond[quote,notime,relative=1,line-width=13.0\cm] +\new Staff { + \override Staff.Clef #'full-size-change = ##t + \clef soprano c1 + \clef mezzosoprano c1 + \clef alto c1 + \clef tenor c1 + \clef baritone c1 +} +\addlyrics { + \override Lyrics . LyricText #'self-alignment-X = #LEFT + "Soprano " "Mezzosoprano " "Alto " "Tenor " "Baritone " +} +@end lilypond + +@seealso +No cross-references. + + +@node cadence +@section cadence + +ES: cadencia, +I: cadenza, +F: cadence, +D: Kadenz, +NL: cadens, +DK: kadence, +S: kadens, +FI: kadenssi, lopuke. + +@seealso +@ref{harmonic cadence}, @ref{functional harmony}. + + +@node cadenza +@section cadenza + +ES: cadenza, +I: cadenza, +F: cadence, +D: Kadenz, +NL: cadens, +DK: kadence, +S: kadens, +FI: kadenssi, lopuke. + +An extended, improvisatory style section inserted near the end of +movement. The purpose of a cadenza is to give singers or players a +chance to exhibit their technical skill and -- not last -- their +ability to improvise. Since the middle of the 19th century, however, +most cadenzas have been written down by the composer. + +@seealso +No cross-references. + + +@node caesura +@section caesura + +ES: cesura, +I: cesura, +F: césure, +D: Zäsur, +NL: ?, +DK: ?, +S: ?, +FI: välimerkki. + +[Latin: from the supine of @emph{caedere} @q{to cut down}] + +The break between two musical phrases, sometimes (but not always) marked by a +rest or a breath mark. + +@seealso +@ref{breath mark}. + + +@node canon +@section canon + +ES: canon, +I: canone, +F: canon, +D: Kanon, +NL: canon, +DK: kanon, +S: kanon, +FI: kaanon, tarkka jäljittely. + +@seealso +@ref{counterpoint}. + + +@node cent +@section cent + +ES: cent, +I: cent, +F: cent, +D: Cent, +NL: cent, +DK: cent, +S: cent, +FI: sentti, puolisävelaskeleen sadasosa tasavireisessä +viritysjärjestelmässä. + +Logarithmic unit of measuring pitch differences. 1@tie{}cent is 1/1200 of +an octave (1/100 of an equally tempered semitone). + +@seealso +@ref{equal temperament}, @ref{semitone}. + + +@node central C +@section central C + +@seealso +@ref{middle C}. + + +@node chord +@section chord + +ES: acorde, +I: accordo, +F: accord, +D: Akkord, +NL: akkoord, +DK: akkord, +S: ackord, +FI: sointu. + +Three or more tones sounding simultaneously. In traditional European music +the base chord is a @emph{triad} consisting of two thirds. @emph{Major} +(major + minor third) as well as @emph{minor} (minor + major third) chords +may be extended with more thirds. Four-tone @emph{seventh chords} and +five-tone @emph{ninth} major chords are most often used as dominants +(functional harmony). Chords having no third above the lower notes to +define their mood are a special case called @q{open chords}. The lack of +the middle third means their quality is ambivalent -- neither major nor +minor. + +@lilypond[quote,notime,line-width=13.0\cm] +<< + \new Staff { + \relative c'' { + \set Staff.extraNatural = ##f + 1 + + + + + + } + } + \lyrics { + "major " + "minor " + "diminished " + "augmented " + "seventh-chord " + "ninth-chord" + } +>> +@end lilypond + +@seealso +@ref{functional harmony}, @ref{interval}, @ref{inversion}, @ref{quality}, +@ref{third}. + + +@node chromatic scale +@section chromatic scale + +ES: escala cromática, +I: scala cromatica, +F: gamme chromatique, +D: chro@-ma@-ti@-sche Tonleiter, +NL: chromatische toonladder, +DK: kromatisk skala, +S: kromatisk skala, +FI: kromaattinen asteikko. + +A scale consisting of all 12 semitones. + +@lilypond[quote,notime,relative=1,line-width=13.0\cm] +c1 cis d dis e f fis g gis a ais b c +@end lilypond + +@seealso +@ref{semitone}. + + +@node chromaticism +@section chromaticism + +ES: cromatismo, +I: cromatismo, +F: chromatisme, +D: Chromatik, +NL: chromatiek, +DK: kromatik, +S: kromatik, +FI: kromatiikka. + +Using tones extraneous to a diatonic scale (minor, major). + +@seealso +@ref{diatonic scale}. + + +@node church mode +@section church mode + +ES: modo eclesiástico, +I: modo ecclesiastico, +F: mode ecclésiastique, mode d'église, +D: Kirchentonart, +NL: kerktoonladder, +DK: kirketoneart, +S: kyrkotonart, +FI: moodi, kirkkosävellaji. + +@seealso +@ref{diatonic scale}. + + +@node clef +@section clef + +ES: clave, +I: chiave, +F: clé, clef, +D: Schlüssel, Notenschlüssel, +NL: sleutel, +DK: nøgle, +S: klav, +FI: avain, nuottiavain. + +The clef indicates which lines of the staff correspond to which +pitches. The three clef symbols in common use are: + +@lilypond[quote] +\markup { + \left-column { + \line { The Treble or G clef: } + \strut + \line { The Bass or F clef: } + \strut + \line { The Alto or C clef: } + } + \hspace #0.5 + \left-column { + \musicglyph #"clefs.G" + \strut + \musicglyph #"clefs.F" + \strut + \musicglyph #"clefs.C" + } +} +@end lilypond + +Imagine a large staff of 11 lines centered on middle C, sometimes +called a @q{grand staff}, with the bottom line representing low G and +the top line high F: + +@lilypond[quote] +\score { + << + %-- Note names above treble staff --% + \new NoteNames { + \set printOctaveNames = ##t + g,1 b, d f a + \once \override NoteName #'color = #red + c'1 + e'1 g' b' d'' f'' + } + %-- Treble Staff --% + \new Staff = "G" { + \override Staff.Clef #'stencil = ##f + \clef "G" + s1 s s s s s + e'1 g' b' d'' f'' + s1 + } + %-- Alto Staff reduced to a single line on middle C --% + \new Staff = "C" { + \override Staff.StaffSymbol #'line-count = #1 + \override Staff.StaffSymbol #'color = #red + \override Staff.Clef #'stencil = ##f + \clef "C" + s1 s s s s + \override NoteHead #'color = #red + c'1 + s1 s s s s s + } + %-- Bass Staff --% + \new Staff = "F" { + \override Staff.Clef #'stencil = ##f + \clef "F" + g,1 b, d f a + s1 s s s s s s + } + >> + \layout { + \context { + \Score + \override SpacingSpanner + #'base-shortest-duration = #(ly:make-moment 1 1) + \override NonMusicalPaperColumn + #'line-break-system-details = #'((alignment-offsets . (3 0 -3 -6))) + \override BarLine #'stencil = ##f + } + \context { + \Staff + \remove "Time_signature_engraver" + } + } +} +@end lilypond + +Staves of five lines are usually used, and the clef superimposed on +them indicates which five lines have been selected from this +@samp{grand staff}. For example, the treble or G clef indicates that +the top five lines have been selected: + +@lilypond[quote] +\score { + << + %-- Note names above treble staff --% + \new NoteNames { + \set printOctaveNames = ##t + g,1 b, d f a + \once \override NoteName #'color = #red + c'1 + s1 + e'1 g' b' d'' f'' + } + %-- Treble Staff --% + \new Staff = "G" { + \once \override Staff.Clef #'stencil = ##f + \clef "G" + s1 s s s s s s + \override Staff.Clef #'full-size-change = ##t + \set Staff.forceClef = ##t + \clef "G" + e'1 g' b' d'' f'' + } + %-- Alto Staff reduced to a single line on middle C --% + \new Staff = "C" { + \override Staff.StaffSymbol #'line-count = #1 + \override Staff.StaffSymbol #'color = #red + \override Staff.Clef #'stencil = ##f + \clef "C" + s1 s s s s + \override NoteHead #'color = #red + c'1 + } + %-- Bass Staff --% + \new Staff = "F" { + \override Staff.Clef #'stencil = ##f + \clef "F" + g,1 b, d f a + } + >> + \layout { + \context { + \Score + \override SpacingSpanner + #'base-shortest-duration = #(ly:make-moment 2 1) + \override NonMusicalPaperColumn + #'line-break-system-details = #'((alignment-offsets . (3 0 -3 -6))) + \override BarLine #'stencil = ##f + } + \context { + \Staff + \remove "Time_signature_engraver" + } + } +} +@end lilypond + +The @q{curl} of the G clef is centered on the line that represents the +pitch G. + +In the same way, the bass or F clef indicates that the bottom five +lines have been selected from the @samp{grand staff}, and the alto or +C clef indicates the middle five lines have been selected. This +relationship is shown below, where the notes show an arpeggio on a C +major chord. + +@lilypond[quote] +\score { + << + %-- Treble Staff --% + \new Staff = "G" { + \clef "G" + s1 s s s + e'1 g' c'' s + } + %-- Alto Staff --% + \new Staff = "C" { + \override Staff.StaffSymbol #'line-count = #1 + \once \override Staff.Clef #'stencil = ##f + \stopStaff + \clef "C" + s1 s s + \startStaff + \revert Staff.StaffSymbol #'stencil + \override Staff.StaffSymbol #'color = #red + c'1 + s1 s s s s + \stopStaff \startStaff + \revert Staff.StaffSymbol #'line-count + \revert Staff.StaffSymbol #'color + \stopStaff \startStaff + \override Staff.Clef #'full-size-change = ##t + \set Staff.forceClef = ##t + \clef "C" + s1 s + c1 e g c' e' g' c'' + } + %-- Bass Staff --% + \new Staff = "F" { + \clef "F" + c1 e g + s1 s s s s + } + >> + \layout { + \context { + \Score + \override SpacingSpanner #'base-shortest-duration = + #(ly:make-moment 2 1) + \override NonMusicalPaperColumn + #'line-break-system-details = #'((alignment-offsets . (0 -3 -6))) + \override BarLine #'stencil = ##f + } + \context { + \Staff + \remove "Time_signature_engraver" + } + } +} +@end lilypond + +@seealso +@ref{C clef}, @ref{F clef}, @ref{G clef}. + + +@node cluster +@section cluster + +ES: racimo, +I: ?, +F: cluster, +D: Cluster, +NL: ?, +DK: ?, +S: ?, +FI: klusteri, cluster. + +A @emph{cluster} is a range of simultaneously sounding pitches that +may change over time. The set of available pitches to apply usually +depends on the acoustic source. Thus, in piano music, a cluster +typically consists of a continuous range of the semitones as provided +by the piano's fixed set of a chromatic scale. In choral music, each +singer of the choir typically may sing an arbitrary pitch within the +cluster's range that is not bound to any diatonic, chromatic or other +scale. In electronic music, a cluster (theoretically) may even cover +a continuous range of pitches, thus resulting in colored noise, such +as pink noise. + +Clusters can be denoted in the context of ordinary staff notation by +engraving simple geometrical shapes that replace ordinary notation of +notes. Ordinary notes as musical events specify starting time and +duration of pitches; however, the duration of a note is expressed by +the shape of the note head rather than by the horizontal graphical +extent of the note symbol. In contrast, the shape of a cluster +geometrically describes the development of a range of pitches +(vertical extent) over time (horizontal extent). Still, the +geometrical shape of a cluster covers the area in which any single +pitch contained in the cluster would be notated as an ordinary note. + +@lilypond[quote,relative=2] +\makeClusters { 4 8 } +@end lilypond + +@seealso +No cross-references. + + +@node comma +@section comma + +ES: coma, comma, +I: comma, +F: comma, +D: Komma, +NL: komma, +DK: komma, +S: komma, +FI: komma, korvinkuultava ero äänenkorkeudessa. + +Difference in pitch between a note derived from pure tuning and the +same note derived from some other tuning method. + +@seealso +@ref{didymic comma}, @ref{Pythagorean comma}, @ref{syntonic comma}, +@ref{temperament}. + + +@node common meter +@section common meter + +Another name for @ref{common time}. + +@seealso +@ref{common time}, @ref{meter}. + + +@node common time +@section common time + +ES: compasillo, +I: ?, +F: mesure à 4/4, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: C-merkintä. + +4/4 time. The symbol, which resembles a capital letter C, comes from +mensural notation. + +@seealso +@ref{mensural notation}, @ref{meter}. + + +@node complement +@section complement + +ES: intervalo invertido, +I: rivolto, +F: intervalle complémentaire, +D: Komplementärintervall, +NL: complementair interval, +DK: komplementærinterval, +S: komplementärintervall (?), +FI: täydentävä intervalli. + +@seealso +@ref{inverted interval}. + + +@node compound interval +@section compound interval + +ES: intervalo compuesto, +I: intervallo composto, +F: intervalle composé, +D: weites Intervall, +NL: samengesteld interval, +DK: sammensat interval, +S: sammansatt intervall, +FI: oktaavia laajempi intervalli. + +Intervals larger than an octave. + +@seealso +@ref{interval}. + + +@node compound meter +@section compound meter + +ES: compás compuesto, compás de subdivisión ternaria, +I: ?, +F: mesure composée, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: kolmijakoinen tahtilaji. + +A meter that includes a triplet subdivision within the beat, such as +6/8, 9/8, 12/8. + +@seealso +@ref{meter}, @ref{simple meter}. + + +@node compound time +@section compound time + +ES: compás compuesto, compás de amalgama (def. 2), +I: ?, +F: temps composé, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: yhdistetty tahtilajiosoitus. + +@enumerate + +@item +A meter that includes a triplet subdivision within the beat: see +@ref{compound meter}. + +@item +A time signature that additively combines two or more unequal meters, e.g., +@q{3/8 + 2/8} instead of @q{5/8}. Sometimes called additive time signatures. + +@end enumerate + +@lilypond[quote,line-width=13.0\cm] +#(define ((compound-time one two three num) grob) + (grob-interpret-markup grob + (markup + #:override '(baseline-skip . 0) + #:number + #:line ( + #:left-column (one num) + #:vcenter "+" + #:left-column (two num) + #:vcenter "+" + #:left-column (three num))))) + +\relative c' { + \key f \major + #(set-time-signature 8 8 '(3 2 3)) + \override Staff.TimeSignature #'stencil = + #(compound-time "3" "2" "3" "8") + c8 d e f4 d8 c bes + c4 g'8 e c f4. + \bar "||" +} +@end lilypond + +@seealso +@ref{compound meter}, @ref{meter}, @ref{polymetric time signature}. + + +@node concert pitch +@section concert pitch + +ES: en Do, afinación de concierto, +I: ?, +F: tonalité de concert, en ut, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: konserttikorkeus. + +The pitch at which the piano and other nontransposing instruments play: such +instruments are said to be @q{in C}. The following list includes some (but not +all) instruments that play in concert pitch: + +@c Let's see how easy (or hard) it is to put bulleted lists in tables. + +@multitable {alto trombone} {tenor trombone} {bass trombone} +@headitem Woodwinds @tab Brass @tab Strings + +@item +@itemize +@item flute +@item oboe +@item bassoon +@end itemize + +@tab + +@itemize +@item alto trombone +@item tenor trombone +@item bass trombone +@end itemize + +@tab + +@itemize +@item violin +@item viola +@item violoncello +@end itemize + +@end multitable + +The trombones are a special case: although they are said to be @q{in F} (alto or +bass) or @q{in B-flat} (tenor), this refers to their fundamental note, not to +their parts' transposition. (In fact, the trombones' parts are written at +concert pitch with an appropriate clef -- alto, tenor or bass.) This differs +from other instruments @q{in F}, @q{in B-flat}, and so on, which are transposing +instruments. + +Instruments that play @q{in C} but in a different octave than what is written +are, technically speaking, @emph{transposing instruments}: + +@itemize + +@item piccolo (plays an octave higher than written) +@item celesta (plays an octave higher than written) +@item classical guitar (plays an octave lower than written) +@item double bass (plays an octave lower than written) + +@end itemize + +@seealso +@ref{transposing instrument}. + + +@node conjunct movement +@section conjunct movement + +ES: movimiento conjunto, +I: moto congiunto, +F: mouvement conjoint, +D: schritt@-weise, stufenweise Bewegung, +NL: stapsgewijze, trapsgewijze beweging, +DK: trinvis bevægelse, +S: stegvis rörelse, +FI: asteittainen liike. + +Progressing melodically by intervals of a second, as contrasted with +@emph{disjunct movement}. + +@lilypond[quote,relative=2,line-width=13.0\cm] +\key g \major +\time 4/4 +g4 g g a | b2 a | g4 b a a | g1 \bar "||" +@end lilypond + +@seealso +@ref{disjunct movement}. + + +@node consonance +@section consonance + +ES: consonancia, +I: consonanza, +F: consonance, +D: Konsonanz, +NL: consonant, +DK: konsonans, +S: konsonans, +FI: konsonanssi, sopusointi. + +@seealso +@ref{harmony}. + + +@node contralto +@section contralto + +ES: contralto, +I: contralto, +F: contralto, +D: Alt, +NL: contralto, +DK: alt, +S: alt, +FI: kontra-altto. + +@seealso +@ref{alto}. + + +@node copying music +@section copying music + +A music copyist did fast freehand scores and parts on preprinted staff +lines for performance. Some of their conventions (e.g., the placement +of note heads on stems) varied slightly from those of engravers. Some +of their working methods were superior and could well be adopted by +music typesetters. + +@c Copying music required more skill than engraving. Flagged for NPOV + +@seealso +No cross-references. + + +@node counterpoint +@section counterpoint + +ES: contrapunto, +I: contrappunto, +F: contrepoint, +D: Kontrapunkt, +NL: contrapunt, +DK: kontrapunkt, +S: kontrapunkt, +FI: kontrapunkti, ääni ääntä vastaan. + +From Latin @emph{punctus contra punctum}, note against note. The +combination into a single musical fabric of lines or parts which have +distinct melodic significance. A frequently used polyphonic technique +is imitation, in its strictest form found in the canon needing only +one part to be written down while the other parts are performed with a +given displacement. Imitation is also the contrapuntal technique +used in the @emph{fugue} which, since the music of the baroque era, +has been one of the most popular polyphonic composition methods. + +@lilypond[quote,staffsize=12,line-width=13.0\cm] +\new PianoStaff << + \context Staff = SA \relative c' { + \key bes \major + \time 4/4 + \clef treble + << \context Voice = rha { + \stemUp + r1 | r2 r8 g'8 bes d, | + cis4 d r8 e!16 f g8 f16 e | + f8 g16 a bes8 a16 g a8 + } + \context Voice = rhb { + \stemDown + r1 | r | r | r2 s8 + } + >> + } + \context Staff = SB \relative c' { + \clef bass + \key bes \major + << \context Voice = lha { + \stemUp + r8 d es g, fis4 g | r8 a16 bes c8 bes16 a bes4 g | + r8 a16 g f8 g16 a bes8 g e! cis' | + d4. e!8 f + } + \context Voice = lhb { + \stemDown + r1 | r | r | r2 s8 + } >> + } +>> +@end lilypond + +@seealso +No cross-references. + + +@node countertenor +@section countertenor + +ES: contratenor, +I: controtenore, +F: contre-tenor, +D: Countertenor, Kontratenor, +NL: contratenor, +DK: kontratenor, +S: kontratenor, counter tenor, +FI: kontratenori. + +@seealso +@ref{contralto}. + + +@node crescendo +@section crescendo + +ES: crescendo, +I: crescendo, +F: crescendo, +D: Crescendo, lauter werden, +NL: crescendo, +DK: crescendo, +S: crescendo, +FI: cresendo, voimistuen. + +Increasing volume. Indicated by a rightwards opening horizontal wedge +(hairpin) or the abbreviation @notation{cresc.}. + +@lilypond[quote,relative=2] +\key g \major +\time 4/4 +g4\< a b c | d1\! \bar "|." +@end lilypond + +@seealso +@ref{decrescendo}, @ref{hairpin}. + + +@node cue-notes +@section cue-notes + +ES: notas guía, +I: notine, +F: petites notes précédant l'entrée d'un instrument, réplique, @q{à défaut}, +D: Stichnoten, +NL: stichnoten, +DK: stiknoder, +S: inprickningar, +FI: vihjenuotit. + +Notes belonging to one part printed in another to hint when to start +playing. Usually printed in a smaller type. + +@seealso +Compare: @ref{ossia}. + + +@node custos +@section custos + +ES: custos, +I: ?, +F: guidon, +D: Notenzeiger, Custos, +NL: ?, +DK: ?, +S: ?, +FI: vihje. + +A custos (plural: custodes) is a staff symbol that appears at the end of a +staff line with monophonic musical contents (i.e., with a single voice). It +anticipates the pitch of the first note of the following line and thus helps +the player or singer to manage line breaks during performance, which +enhances the readability of a score. + +Custodes were frequently used in music notation until the 16th century. +There were different appearences for different notation styles. Nowadays, +they have survived only in special forms of musical notation such as the +@emph{Editio Vaticana}, dating from the beginning of the 20th century + +@lilypond[quote,ragged-right] +\score { + \new Staff { + \override Staff.Custos #'neutral-direction = #DOWN + \override Staff.Custos #'style = #'hufnagel + c'1 \break + 1 + } + \layout { + \context { + \Staff + \consists "Custos_engraver" + } + } +} +@end lilypond + +@seealso +No cross-references. + + +@node cut time +@section cut time + +@seealso +@ref{alla breve}. + + +@node D +@section D + +@itemize +@item ES: re +@item I: re +@item F: ré +@item D: D, d +@item NL: d +@item DK: d +@item S: d +@item FI: D, d +@end itemize + +@seealso +@ref{Pitch names} + + +@node da capo +@section da capo + +ES: da capo, +I: da capo, +F: da capo, depuis le commencement, +D: da capo, von Anfang, +NL: da capo, +DK: da capo, +S: da capo, +FI: da capo, alusta. + +Abbreviated @notation{D.C.}. Indicates that the piece is to be repeated from +the beginning to the end or to a certain place marked @emph{fine}. + +@seealso +No cross-references. + + +@node dal niente +@section dal niente + +ES: ?, +I: dal niente, +F: partant de rien, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: tyhjästä ilmaantuen. + +[Italian: @q{from nothing}] Used with @notation{crescendo} to indicate +that the sound should gradually increase from nothing. + +@seealso +@ref{al niente}. + + +@node dal segno +@section dal segno + +ES: dal segno, +I: dal segno, +F: dal segno, depuis le signe, +D: dal segno, ab dem Zeichen, +NL: dal segno, +DK: dal segno, +S: dal segno, +FI: dal segno, lähtien merkistä. + +Abbreviated @notation{D.S.}. Repetition, not from the beginning, but from +another place frequently near the beginning marked by a sign +(@notation{segno}): + +@lilypond[quote,relative=2] +\key g \major +\time 4/4 +d1 +g,4^\segno a b c +b4 a g2-\markup { + \italic "D.S. " + \tiny \raise #1 + \musicglyph #"scripts.segno" +} +\bar "|." +@end lilypond + +@seealso +No cross-references. + + +@node decrescendo +@section decrescendo + +ES: decrescendo, +I: decrescendo, +D: Decrescendo, leiser werden, +NL: decrescendo, +DK: decrescendo, +S: decrescendo, +FI: decresendo, hiljentyen. + +Decreasing tone volume. Indicated by a leftwards opening horizontal +wedge (hairpin) or the abbreviation @notation{decresc.}. + +@lilypond[quote,relative=2] +\key g \major +\time 4/4 +d4\> c b a | g1 \! \bar "|." +@end lilypond + +@seealso +@ref{crescendo}, @ref{diminuendo}, @ref{hairpin}. + + +@node descending interval +@section descending interval + +ES: intervalo descendente, +I: intervallo discendente, +F: intervalle descendant, +D: fallendes Intervall, absteigendes Intervall, +NL: dalend interval, +DK: faldende interval, +S: fallande intervall, +FI: laskeva intervalli. + +A distance between a starting higher note and a lower ending note. + +@seealso +No cross-references. + + +@node diatonic scale +@section diatonic scale + +ES: escala diatónica, +I: scala diatonica, +F: gamme diatonique, +D: diatonische Tonleiter, +NL: diatonische toonladder, +DK: diatonisk skala, +S: diatonisk skala, +FI: diatoninen asteikko. + +A scale consisting of 5@w{ }whole tones and 2@w{ }semitones (S). Scales +played on the white keys of a piano keybord are diatonic. These scales +are sometimes called, somewhat inaccurately, @q{church modes}). + +These @emph{modes} are used in Gregorian chant and in pre-baroque early music +but also to some extent in newer jazz music. + +@lilypond[quote,notime,relative=1] +<< + { + c1 d + e^"~~ S" f g a b^"~~ S" c + } + \lyrics { + Ionian + } +>> +@end lilypond + +@lilypond[quote,notime,relative=1] +<< + { + d1 + e^"~~ S" f g a b^"~~ S" c d + } + \lyrics { + Dorian + } +>> +@end lilypond + +@lilypond[quote,notime,relative=1] +<< + { + e1^"~~ S" f g a b^"~~ S" c d e + } + \lyrics { + Phrygian + } +>> +@end lilypond + +@lilypond[quote,notime,relative=1] +<< + { + f1 g a + b^"~~ S" c d e^"~~ S" f + } + \lyrics { + Lydian + } +>> +@end lilypond + +@lilypond[quote,notime,relative=2] +<< + { + g1 a + b^"~~ S" c d e^"~~ S" f g + } + \lyrics { + Mixolydian + } +>> +@end lilypond + +@lilypond[quote,notime,relative=2] +<< + { + a1 + b^"~~ S" c d e^"~~ S" f g a + } + \lyrics { + Aeolian + } +>> +@end lilypond + +@lilypond[quote,notime,relative=2] +<< + { + b1^"~~ S" c d e^"~~ S" f g a b + } + \lyrics { + Locrian + } +>> +@end lilypond + +From the beginning of the 17th century the scales used in European +compositional music are primarily the major and the minor scales. In +the harmonic minor scale type an augmented second (A) occurs between +the 6th and 7th tone. + +@lilypond[quote,notime,relative=1] +<< + { + c1 d + e^"~~ S" f g a b^"~~ S" c + } + \lyrics { + Major + } +>> +@end lilypond + +@lilypond[quote,notime,relative=2] +<< + { + a1 + b^"~~ S" c d e^"~~ S" f g a + } + \lyrics { + "Ancient (or Natural) minor" + } +>> +@end lilypond + +@lilypond[quote,notime,relative=2] +<< + { + a1 + b^"~~ S" c d e^"~~ S" f!^"~~ A" gis^"~~ S" a + } + \lyrics { + "Harmonic minor" + } +>> +@end lilypond + +@lilypond[quote,notime,relative=2] +<< + { + a1 + b^"~~ S" c d e fis gis^"~~ S" a + } + \lyrics { + "Melodic minor ascending" + } +>> +@end lilypond + +@lilypond[quote,notime,relative=3] +<< + { + a1 + g! f!^"~~ S" e d c^"~~ S" b a + } + \lyrics { + "Melodic minor descending" + } +>> +@end lilypond + +@seealso +@ref{semitone}, @ref{whole tone}. + + +@node didymic comma +@section didymic comma + +@seealso +@ref{syntonic comma}. + + +@node diminished interval +@section diminished interval + +ES: intervalo disminuido, +I: intervallo diminuito, +F: intervalle diminué, +D: vermindertes Intervall, +NL: verminderd interval, +DK: formindsket interval, +S: förminskat intervall, +FI: vähennetty intervalli. + +@seealso +@ref{interval}. + + +@node diminuendo +@section diminuendo + +ES: diminuendo, +I: diminuendo, +F: diminuendo, en diminuant, +D: diminuendo, +NL: diminuendo, +DK: diminuendo, +S: diminuendo, +FI: diminuendo, hiljentyen. + +@seealso +@ref{decrescendo}. + + +@node diminution +@section diminution + +ES: ?, +I: ?, +F: diminution, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: aika-arvojen tihennys. + +This is a stub for diminution (@emph{wrt} mensural notation). + +@seealso +@ref{augmentation}, @ref{mensural notation}. + + +@node direct +@section direct + +ES: ?, +I: ?, +F: ?, +D: Weiser, Zeiger, +NL: ?, +DK: ?, +S: ?, +FI: suora. + +@seealso +@ref{custos}. + + +@node disjunct movement +@section disjunct movement + +ES: movimiento disjunto, +I: moto disgiunto, +F: mouvement disjoint, +D: sprunghafte Bewegung, +NL: sprongsgewijze beweging, +DK: springende bevægelse, +S: hoppande rörelse, +FI: melodian hyppivä liike. + +Progressing melodically by intervals larger than a major second, as contrasted +with conjunct movement. + +@lilypond[quote,relative=1] +\key a \major +\time 4/4 { + \partial 8 e8 | + a4. gis8 b a e cis | + fis2 d4. + \bar "||" } +@end lilypond + +@seealso +@ref{conjunct movement}. + + +@node dissonance +@section dissonance + +Another name for @ref{dissonant interval}. + +@seealso +@ref{dissonant interval}, @ref{harmony}. + + +@node dissonant interval +@section dissonant interval + +ES: intervalo disonante, disonancia, +I: intervallo dissonante, dissonanza, +F: intervalle dissonant, dissonance, +D: Dissonanz, +NL: dissonant interval, dissonant, +DK: dissonerende interval, dissonans, +S: dissonans, +FI: dissonanssi, dissonoiva intervalli, riitasointi. + +@seealso +@ref{harmony}. + + +@node divisio +@section divisio + +ES: ?, +I: ?, +F: ?, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: jäsennysmerkki. + +[Latin: @q{division}; pl. @emph{divisiones}] In Gregorian chant, a +vertical stroke through part or all of the staff that serves to +structure a chant into phrases and sections. There are four types: + +@itemize + +@item @emph{divisio minima}, a short pause + +@item @emph{divisio maior}, a medium pause + +@item @emph{divisio maxima}, a long pause + +@item @emph{finalis}, to indicate the end of a chant, or the end of a +section in a long antiphonal or responsorial chant. + +@end itemize + +TODO: musical example here? + +@seealso +No cross-references. + + +@node doit +@section doit + +ES: ?, +I: ?, +F: saut, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: nousu. + +Indicator for a indeterminately rising pitch bend. Compare with +@emph{glissando}, which has determinate starting and ending pitches. + +@seealso +@ref{fall}, @ref{glissando}. + + +@node dominant +@section dominant + +ES: dominante, +I: dominante, +F: dominante, +D: Dominante, +NL: dominant, +DK: dominant, +S: dominant, +FI: dominantti, huippusointu. + +The fifth @emph{scale degree} in @emph{functional harmony}. + +@seealso +@ref{functional harmony}, @ref{scale degree}. + + +@node dominant ninth chord +@section dominant ninth chord + +ES: acorde de novena de dominante, +I: accordo di nona di dominante, +F: accord de neuvième de dominante, +D: Domi@-nant@-nonen@-akkord, +NL: dominant noon akkoord, +DK: dominantnoneakkord, +S: dominantnonackord, +FI: dominanttinoonisointu. + +@seealso +@ref{chord}, @ref{functional harmony}. + + +@node dominant seventh chord +@section dominant seventh chord + +ES: acorde de séptima de dominante, +I: accordo di settima di dominante, +F: accord de septième de dominante, +D: Dominantseptakkord, +NL: dominant septiem akkoord, +DK: dominantseptimakkord, +S: dominantseptimackord, +FI: dominanttiseptimisointu. + +@seealso +@ref{chord}, @ref{functional harmony}. + + +@node dorian mode +@section dorian mode + +ES: modo dórico, +I: modo dorico, +F: mode dorien, +D: dorisch, dorischer Kirchenton, +NL: dorische toonladder, +DK: dorisk skala, +S: dorisk tonart, +FI: doorinen moodi. + +@seealso +@ref{diatonic scale}. + + +@node dot (augmentation dot) +@section dot (augmentation dot) + +ES: puntillo, +I: punto (di valore), +F: point, +D: Punkt (Verlängerungspunkt), +NL: punt, +DK: punkt, +S: punkt, +FI: piste. + +@seealso +@ref{dotted note}, @ref{note value}. + + +@node dotted note +@section dotted note + +ES: nota con puntillo, +I: nota puntata, +F: note pointée, +D: punktierte Note, +NL: gepuncteerde noot, +DK: punkteret node, +S: punkterad not, +FI: pisteellinen nuotti. + +@seealso +@ref{note value}. + + +@node double appoggiatura +@section double appoggiatura + +ES: apoyatura doble, +I: appoggiatura doppia, +F: appoggiature double, +D: doppelter Vorschlag, +NL: dubbele voorslag, +DK: dobbelt forslag, +S: dubbelslag, +FI: kaksoisappogiatura, kaksoisetuhele. + +@seealso +@ref{appoggiatura}. + + +@node double bar line +@section double bar line + +ES: doble barra, +I: doppia barra, +F: double barre, +D: Doppelstrich, +NL: dubbele maatstreep, +DK: dobbeltstreg, +S: dubbelstreck, +FI: kaksoistahtiviiva. + +Indicates the end of a section within a movement. + +@seealso +No cross-references. + + +@node double dotted note +@section double dotted note + +ES: nota con doble puntillo, +I: nota doppiamente puntata, +F: note doublement pointée, +D: doppelt punktierte Note, +NL: dubbelgepuncteerde noot, +DK: dob@-belt@-punk@-te@-ret node, +S: dub@-bel@-punk@-te@-rad not, +FI: kaksoispisteellinen nuotti. + +@seealso +@ref{note value}. + + +@node double flat +@section double flat + +ES: doble bemol, +I: doppio bemolle, +F: double bémol, +D: Doppel-B, +NL: dubbelmol, +DK: dob@-belt-b, +S: dubbelbe, +FI: kaksoisalennusmerkki. + +@seealso +@ref{accidental}. + + +@node double sharp +@section double sharp + +ES: doble sostenido, +I: doppio diesis, +F: double dièse, +D: Doppelkreuz, +NL: dubbelkruis, +DK: dob@-belt@-kryds, +S: dubbelkors, +FI: kaksoisylennysmerkki. + +@seealso +@ref{accidental}. + + +@node double time signature +@section double time signature + +ES: ?, +I: ?, +F: ?, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: kaksois-aika-arvomerkintä. + +@seealso +@ref{polymetric time signature}. + + +@node double trill +@section double trill + +ES: trino doble, +I: doppio trillo, +F: trille double, +D: Doppeltriller, +NL: dubbele triller, +DK: dobbelttrille, +S: dubbeldrill, +FI: kaksoistrilli. + +A simultaneous trill on two notes, usually in the distance of a third. + +@seealso +No cross-references. + + +@node duple meter +@section duple meter + +ES: tiempo binario, +I: tempo binario, +F: métrique binaire, +D: in zwei, grader Takt, +NL: tweedelige maatsoort, +DK: todelt takt, +S: tvåtakt, +FI: kaksoistempo. + +@seealso +@ref{meter}. + + +@node duplet +@section duplet + +ES: dosillo, +I: duina, +F: duolet, +D: Duole, +NL: duool, +DK: duol, +S: duol, +FI: duoli. + +@seealso +@ref{note value}. + + +@node duration +@section duration + +ES: duración, +I: durata, +F: durée, +D: Dauer, Länge, +NL: duur, lengte, +DK: varighed, +S: tonlängd, +FI: kesto, aika-arvo. + +@seealso +@ref{note value}. + + +@node dynamics +@section dynamics + +ES: dinámica, matices, +I: ?, +F: nuances, +D: Dynamik, Lautstärke, +NL: ?, +DK: ?, +S: ?, +FI: äänen voimakkuusvaihtelu, dynamiikka. + +The aspect of music relating to degrees of loudness, or changes from +one degree to another. The terms, abbreviations, and symbols used to +indicate this information are called dynamic marks. + +@seealso +@ref{piano}, @ref{forte}, @ref{crescendo}, @ref{decrescendo}, +@ref{diminuendo}. + + +@node E +@section E + +@itemize +@item ES: mi +@item I: mi +@item F: mi +@item D: E, e +@item NL: e +@item DK: e +@item S: e +@item FI: E, e +@end itemize + +@seealso +@ref{Pitch names} + + +@node ecclesiastical mode +@section ecclesiastical mode + +@seealso +@ref{church mode}, @ref{diatonic scale}. + + +@node eighth note +@section eighth note + +@itemize +@item UK: quaver +@item ES: corchea +@item I: croma +@item F: croche +@item D: Achtel, Achtelnote +@item NL: achtste noot +@item DK: ottendedelsnode +@item S: åttondelsnot +@item FI: kahdeksasosanuotti +@end itemize + +@seealso +@ref{note value}. + + +@node eighth rest +@section eighth rest + +@itemize +@item UK: quaver rest +@item ES: silencio de corchea +@item I: pausa di croma +@item F: demi-soupir +@item D: Achtelpause +@item NL: achtste rust +@item DK: ottendedelspause +@item S: åttonddelspaus +@item FI: kahdeksasosatauko +@end itemize + +@seealso +@ref{note value}. + + +@node elision +@section elision + +@c TODO: add languages + +ES: sinalefa, +I: ?, +F: élision, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: tavujen yhdistäminen yhteen ääneen. + +More properly @emph{synalepha} [New Lat. > Gr. @emph{συναλοιφη}, from Greek +@emph{συναλοιφην} @q{to smear together}]. + +The singing of several syllables on a single note. Elision may be indicated +by a lyric tie, which looks like (and serves the same function) as a musical +tie. + +@seealso +@ref{lyric tie}. + + +@node embellishment +@section embellishment + +@seealso +@ref{ornament}. + + +@node engraving +@section engraving + +ES: grabado, +I: incisione, +F: gravure, +D: Notenstich, Notendruck +NL: steken, +DK: nodestik, +S: nottryck, +FI: painatus. + +Engraving means incising or etching a metal plate for printing. +Photoengraving means drawing music with ink in a manner similar to +drafting or engineering drawing, using similar tools. + +The traditional process of music printing is done through cutting in a +plate of metal. Now also the term for the art of music typesetting. + +@seealso +No cross-references. + + +@node enharmonic +@section enharmonic + +ES: enarmónico, +I: enarmonico, +F: enharmonique, +D: enharmonisch, +NL: enharmonisch, +DK: enharmonisk, +S: enharmonisk, +FI: enharmoninen. + +Two notes, intervals, or scales are enharmonic if they have different +names but equal pitch. + +@lilypond[quote,notime,line-width=13.0\cm] +<< + \new Staff { + \relative c'' { + gis1 as + } + } + \lyrics { + "g sharp " "a flat " "dim fifth " "augm fourth" + } +>> +@end lilypond + +@seealso +No cross-references. + + +@node equal temperament +@section equal temperament + +ES: temperamento igual, +I: temperamento equabile, +F: tempérament égal, +D: gleichschwebende Stimmung, +NL: ge@-lijk@-zwe@-ven@-de temperatuur, +DK: ligesvævende temperatur, +S: liksvävande temperatur, +FI: tasavireinen. + +A tuning system that divides the octave into 12 equal semitones (each of +which is precisely equal to 100 cents). + +@seealso +@ref{cent}, @ref{semitone}, @ref{temperament}. + + +@node expression mark +@section expression mark + +ES: expresión, +I: segno d'espressione, +F: signe d'expression, indication de nuance, +D: Vortragszeichen, +NL: voordrachtsteken, +DK: foredragsbetegnelse, +S: föredragsbeteckning, +FI: nyanssiosoitus, esitysmerkki. + +Performance indications concerning: + +@itemize + +@item volume, dynamics (for example, @notation{forte}, +@notation{crescendo}), + +@item tempo (for example, @notation{andante}, @notation{allegro}). + +@end itemize + +@seealso +@ref{allegro}, @ref{andante}, @ref{crescendo}, @ref{forte}. + + +@node extender line +@section extender line + +ES: línea de extensión [de melisma, de bajo cifrado, etc.], +I: ?, +F: ligne d'extension [de mélisme, de basse chiffrée, etc.], +D: Fülllinie, +NL: ?, +DK: ?, +S: ?, +FI: pidennysviiva. + +The generic term (in LilyPond) for a line (or dash) of arbitrary length that +extends text (without indicating the musical @emph{function} of that text). + +Used in many contexts, for example: + +@itemize + +@item In vocal music to indicate the syllable for a melisma. Called +@q{extension} in the +@uref{http://www.dolmetsch.com/defse1.htm,Dolmetsch Online Music +Dictionary}. + +@item +In figured bass to indicate that: + +@itemize + +@item The extended note should be held through a change in harmony, when applied +to one figure --OR-- +@item The chord thus represented should be held above a moving bass line, when +applied to more than one figure. +@item These uses were not completely standardized, and some composers used a +single extender line to indicate the latter case. + +@end itemize + +@item +In string music to indicate that all notes in the passage thus indicated should +be played on the same string. On the violin, for example, a series of notes to +be played on the G string would be indicated @notation{sul G}, another series to be +played on the D string would be indicated @notation{sul D}, and so on. + +@item +With an octave mark to indicate that a passage is to be played higher or lower +by the given number of octaves. + +@end itemize + +@seealso +@ref{melisma}, @ref{sul G}, @ref{thorough bass}, @ref{octave mark}, +@ref{octave marking}. + + +@node F +@section F + +@itemize +@item ES: fa +@item I: fa +@item F: fa +@item D: F, f +@item NL: f +@item DK: f +@item S: f +@item FI: F, f +@end itemize + +@seealso +@ref{Pitch names} + + +@node F clef +@section F clef + +ES: clave de fa, +I: chiave di fa, +F: clef de fa, +D: F-Schlüssel, +NL: F-sleutel, +DK: F-nøgle, +S: f-klav, +FI: F-avain. + +The position between the dots of the key symbol is the line of the F +below central@w{ }C. Used on the third, fourth and fifth note line. +A digit@w{ }8 above the clef symbol indicates that the notes must be +played an octave higher (for example, bass recorder) while 8@w{ }below +the clef symbol indicates playing an octave lower (for example, on the +Double Bass). + +@lilypond[quote,notime,line-width=13.0\cm] +<< + \relative c { + \override Staff.Clef #'full-size-change = ##t + \clef varbaritone + f1 + \clef bass + f1 + \clef subbass + f1 + \clef "F^8" + f1 + \clef "F_8" + f1 + } + \lyrics { + "varbaritone " + "bass " + "sub-bass " + "octave up " + "octave down" + } +>> +@end lilypond + +@seealso +@ref{baritone clef}, @ref{strings}. + + +@node fall +@section fall + +ES: ?, +I: ?, +F: chute, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: lasku. + +Indicator for a indeterminately falling pitch bend. Compare with +@emph{glissando}, which has determinate starting and ending pitches. + +@seealso +@ref{doit}, @ref{glissando}. + + +@node feathered beam +@section feathered beam + +ES: barra punteada, +I: ?, +F: ligature en soufflet, lien de croches en soufflet, +D: gespreizter Balken, +NL: ?, +DK: ?, +S: ?, +FI: kiilapalkki. + +A type of beam used to indicate that a small group of notes should be +played at an increasing or decreasing tempo -- depending on the +direction of @q{feathering} -- but without changing the overall tempo +of the piece. + +@seealso +Internals Reference: @ruser{Manual beams} + + +@node fermata +@section fermata + +@c F: 'point d'orgue' on a note, 'point d'arret' on a rest. + +ES: calderón, +I: corona, +F: point d'orgue, point d'arrêt, +D: Fermate, +NL: fermate, +DK: fermat, +S: fermat, +FI: fermaatti, pidäke. + +Prolonged note or rest of indefinite duration. + +@lilypond[quote,relative=2] +\time 4/4 +a4 b c2^\fermata +\bar "|." +@end lilypond + +@seealso +No cross-references. + + +@node fifth +@section fifth + +ES: quinta, +I: quinta, +F: quinte, +D: Quinte, +NL: kwint, +DK: kvint, +S: kvint, +FI: kvintti. + +@seealso +@ref{interval}. + + +@node figured bass +@section figured bass + +ES: bajo cifrado, +I: basso continuo, basso numerato, +F: basse chiffrée, basse continue, +D: Generalbass, bezifferter Bass, +NL: basso continuo, becijferde bas +DK: generalbas, +S: generalbas, +FI: kenraalibasso, numeroitu basso. + +Also called @q{thorough bass}. + +A method of indicating an accompaniment part by the bass notes only, +together with figures designating the chief intervals and chords to be +played above the bass notes. + +@lilypond[quote,line-width=13.0\cm] +\new GrandStaff << + \new Staff = "rh" \with { + fontSize = #-3 + \override StaffSymbol #'staff-space = #(magstep -3) + } \relative c'' { + \clef treble + \key es \major + \time 4/4 + << + \context Voice = "rha" { + \voiceOne + es4 d c bes + bes4 + } + \context Voice = "rhb" { + \voiceTwo + 8 as g f es + 4 + } + >> + } + \new Staff = "lh" \relative c' { + \clef bass + \key es \major + es8 c d bes c as bes16 as g f + es4 + } + \figures { + s8 <6> s <4 2> s <6> s16 s <6> <4 2> + } +>> +@end lilypond + +@seealso +@ref{chord}, @ref{interval}. + + +@node fingering +@section fingering + +ES: digitación, +I: diteggiatura, +F: doigté, +D: Fingersatz, +NL: vingerzetting, +DK: fingersætning, +S: fingersättning, +FI: sormitus. + +Figures to the side or above the note that methodically indicate which +fingers to use while playing a passage. + +@seealso +No cross-references. + + +@node flag +@section flag + +ES: corchete, +I: coda (uncinata), bandiera, +F: crochet, +D: Fahne, Fähnchen, +NL: vlaggetje, +DK: fane, +S: flagga, +FI: lippu, viiri. + +Ornament at the end of the stem of a note used for notes with values less +than a quarter note. The number of flags determines the note value. + +@lilypond[quote,notime,relative=2] +g8-"8th" s8 +g16-"16th" s8 +g32-"32nd" s8 +g64-"64th" s8 +@end lilypond + +@seealso +@ref{note value}. + + +@node flageolet +@section flageolet + +ES: ?, +I: ?, +F: flageolet, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: flageolet-ääni. + +An articulation for string players that means the note or passage is to +be played in harmonics. + +Also: + +@itemize + +@item A duct flute similar to the recorder. + +@item An organ stop of flute scale at 1' or 2' pitch. + +@end itemize + +@seealso +@ref{articulation}, @ref{harmonics}. + + +@node flat +@section flat + +ES: bemol, +I: bemolle, +F: bémol, +D: B, +NL: mol, +DK: b, +S: beförtecken, +FI: alennusmerkki. + +@seealso +@ref{accidental}. + + +@node forefall +@section forefall + +@seealso +@ref{appoggiatura}. + + +@node forte +@section forte + +ES: forte, +I: forte, +F: forte, +D: forte, laut, +NL: forte, +DK: forte, +S: forte, +FI: forte, voimakkaasti. + +[Italian: @q{loud}] + +Abbreviated @notation{@b{f}}. Variants include: + +@itemize +@item @emph{mezzo forte}, medium loud (notated @notation{@b{mf}}), +@item @emph{fortissimo}, very loud (notated @notation{@b{ff}}). +@end itemize + +@seealso +No cross-references. + + +@node fourth +@section fourth + +ES: cuarta, +I: quarta, +F: quarte, +D: Quarte, +NL: kwart, +DK: kvart, +S: kvart, +FI: kvartti. + +@seealso +@ref{interval}. + + +@node Frenched score +@section Frenched score + +ES: partitura a la francesa, +I: ?, +F: ?, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: partituuri francesan tapaan. + +A @q{condensed} score, produced by omitting staves for instruments that are not +playing at the moment, and by moving up additional systems from following pages +to take up the space thus liberated, which reduces the total number of pages +used to print the work. + +The specific rules for @q{frenching} a score differ from publisher to publisher. +If you are producing scores for eventual publication by a commercial publisher, +you may wish to procure a copy of their style manual. + +@seealso +@ref{Frenched staff}. + + +@node Frenched staff +@section Frenched staff + +ES: pentagrama a la francesa, +I: ?, +F: ?, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: karsittu nuotinnus. + +[Pl. @emph{Frenched staves}] Analogous to Frenched scores (@emph{q.v}), a +Frenched staff has unneeded measures or sections removed. This is useful +for producing, for example, an @emph{ossia} staff. + +@seealso +@ref{ossia}. + + +@node Frenched staves +@section Frenched staves + +Plural of @ref{Frenched staff}. + + +@node fugue +@section fugue + +ES: fuga, +I: fuga, +F: fugue, +D: Fuge, +NL: fuga, +DK: fuga, +S: fuga, +FI: fuuga. + +@seealso +@ref{counterpoint}. + + +@node functional harmony +@section functional harmony + +ES: armonía funcional, +I: armonia funzionale, +F: étude des functions, +D: Funktionslehre, +NL: functionele harmonie, +DK: funktionsanalyse, funktionsharmonik, +S: funktionslära, +FI: harmoniajärjestelmä. + +A system of harmonic analysis. + +It is based on the idea that, in a given key, there are only three +functionally different chords: tonic (T, the chord on the first note of the +scale), subdominant (S, the chord on the fourth note), and dominant (D, the +chord on the fifth note). Others are considered to be variants of the base +chords. + +TODO: what does the @q{p} mean in Sp, Dp, Tp? + +@lilypond[quote,notime,relative=2,line-width=13.0\cm] +<< + { + 1 + + } + \lyrics { + T Sp Dp S D Tp + \markup { D \translate #'(-2 . 0) | } + } +>> +@end lilypond + +@seealso +No cross-references. + + +@node G +@section G + +@itemize +@item ES: sol +@item I: sol +@item F: sol +@item D: G, g +@item NL: g +@item DK: g +@item S: g +@item FI: G, g +@end itemize + +@seealso +@ref{Pitch names} + + +@node G clef +@section G clef + +ES: clave de sol, +I: chiave di sol, +F: clef de sol, +D: G-Schlüssel, Violinschlüssel, +NL: G-sleutel, +DK: g-nøgle, +S: g-klav, +FI: G-avain. + +A clef symbol that indicates G above middle@w{ }C. Used on the first and +second note lines. A digit 8 above the clef symbol indicates that the notes +must be played an octave higher while 8 below the clef symbol indicates +playing or singing an octave lower (used most frequently to notate the tenor +part in modern choral scores). + +@lilypond[quote,notime] +\relative c'' { + \override Staff.Clef #'full-size-change = ##t + \set Score.proportionalNotationDuration = #(ly:make-moment 1 8) + \clef french + g1 + \clef treble + g1 + \clef "G^8" + g1 + \clef "G_8" + g1 +} +\addlyrics { + "french violin clef" + "violin clef" + "octave up" + "octave down" + } +@end lilypond + +@seealso +No cross-references. + + +@node glissando +@section glissando + +ES: glissando, +I: glissando, +F: glissando, +D: Glissando, +NL: glissando, +DK: glissando, +S: glissando, +FI: glissando, liukuen. + +Letting the pitch slide fluently from one note to the other. + +@seealso +No cross-references. + + +@node grace notes +@section grace notes + +ES: notas de adorno, +I: abbellimenti, +F: ornement, fioriture, +D: Verzierungen, Vorschläge, Vor@-schlags@-noten, +NL: versieringen, +DK: forsiringer, +S: ornament, +FI: korunuotit. + +Notes printed in small types to indicate that their time values are not +counted in the rhythm of the bar. + +@seealso +@ref{acciaccatura}, @ref{appoggiatura}, @ref{grace notes}, +@ref{ornament}. + + +@node grand staff +@section grand staff + +ES: sistema de piano, +I: accolatura, +F: système [de portées], accolade, +D: Akkolade, Klaviersystem, +NL: piano systeem, +DK: klaversystem, +S: ackolad, böjd klammer, +FI: kaksoisnuottiviivasto. + +A combination of two staves with a brace. Usually used for piano music. + +@seealso +@ref{brace}. + + +@node grave +@section grave + +ES: grave, +I: grave, +F: grave, lent, +D: Grave, Langsam, +NL: grave, ernstig, +DK: grave, +S: grave, +FI: grave, raskaasti. + +[Italian] Slow, solemn. + +@seealso +No cross-references. + + +@node gruppetto +@section gruppetto + +@seealso +@ref{turn}. + + +@node H +@section H + +@itemize +@item ES: si +@item I: si +@item F: si +@item D: H, h +@item NL: b +@item DK: h +@item S: h +@item FI: H, h +@end itemize + +Letter name used for @notation{B natural} in German and Scandinavian +usage. In the standard usage of these countries, @notation{B} means +@notation{B flat}. + +@seealso +@ref{Pitch names}, @ref{B}. + + +@node hairpin +@section hairpin + +Graphical version of the @notation{crescendo} and @notation{decrescendo} +dynamic marks. + +@lilypond[quote,relative=2] +c1\< +c2\> c\< +c1\! +@end lilypond + +@seealso +@ref{crescendo}, @ref{decrescendo}. + + +@node half note +@section half note + +@itemize +@item UK: minim, +@item ES: blanca, +@item I: minima, +@item F: blanche, +@item D: Halbe, halbe Note, +@item NL: halve noot, +@item DK: halvnode, +@item S: halvnot, +@item FI: puolinuotti. +@end itemize + +@seealso +@ref{note value}. + + +@node half rest +@section half rest + +@itemize +@item UK: minim rest, +@item ES: silencio de blanca, +@item I: pausa di minima, +@item F: demi-pause, +@item D: halbe Pause, +@item NL: halve, rust, +@item DK: halvnodespause, +@item S: halvpaus, +@item FI: puolitauko. +@end itemize + +@seealso +@ref{note value}. + + +@node harmonic cadence +@section harmonic cadence + +ES: cadencia (armónica), +I: cadenza (armonica), +F: cadence harmonique, +D: Schlusskadenz, +NL: harmonische cadens, +DK: harmonisk kadence, +S: (harmonisk) kadens, +FI: harmoninen kadenssi. + +A sequence of chords that terminates a musical phrase or section. + +@lilypond[quote] +\new PianoStaff << + \context Staff = "SA" \relative c'' { + \clef treble + \time 4/4 + \partial 4 4 | + 2 + } + << + \context Staff = "SB" \relative c { + \clef bass + \partial 4 c4 | f, g c2 + \bar "|." + } + \lyrics { + T4 S D T + } + >> +>> +@end lilypond + + +@seealso +@ref{functional harmony}. + + +@node harmonics +@section harmonics + +ES: sonidos del flautín, +I: suoni flautati, +F: flageolet, sons harmoniques, +D: Flageolett-Töne, +NL: ?, +DK: ?, +S: ?, +FI: harmoniset äänet, huiluäänet. + +The general class of pitches produced by sounding the second or higher +harmonic of a tone producer: string, column of air, and so on. + +On stringed instruments, these pitches sound rather flute-like; hence, +their name in languages other than English. They are produced by +lightly touching the string at a node for the desired mode of vibration +while it is being bowed or plucked. + +For instruments of the violin family, there are two types of harmonics: +natural harmonics, which are those played on the open string; and +artificial harmonics, which are produced on stopped strings. + +@seealso +No cross-references. + + +@node harmony +@section harmony + +ES: armonía, +I: armonia, +F: harmonie, +D: Harmonie, Zusammenklang, +NL: harmonie, +DK: samklang, +S: samklang, +FI: harmonia, yhteissointi. + +Tones sounding simultaneously. Two note harmonies fall into the +categories @emph{consonances} and @emph{dissonances}. + +Consonances: + +@lilypond[quote,notime,relative=2,line-width=13.0\cm] + 1_"unison " s + _"third " s + _"fourth " s + _"fifth " s + _"sixth " s + _"octave " s + _"tenth" s s +@end lilypond + +Dissonances: + +@lilypond[quote,notime,relative=2,line-width=13.0\cm] + 1_"second " s s + _"seventh " s s + _"ninth" s s +@end lilypond + +For harmony that uses three or more notes, see @ref{chord}. + +@seealso +@ref{chord}. + + +@node hemiola +@section hemiola + +ES: hemiolia, +I: ?, +F: hémiole, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: 3/2 -suhde. + +[Greek: in Latin, @emph{sesquialtera}] The ratio 3:2. + +Most frequently, a proportion (@emph{q.v.}) of three notes of equal value in the +time normally occupied by two. The resulting rhythm can be expressed in modern +terms as a substitution (for example) of a bar in 3/2 for one of 6/4, or of a +bar in 3/4 for one of 6/8. During the Baroque era, hemiola is most frequently +as a special effect (or @emph{affect}) at cadences. + +For example, this phrase in 6/4 time + +@lilypond[quote,relative=1,line-width=13.0\cm] +\key c \major +\time 6/4 +c2. e | d2 c d | c1. \bar "||" +@end lilypond + +may be thought of having alternating time signatures + +@lilypond[quote,relative=1,line-width=13.0\cm] +\key c \major +\time 6/4 +c2. e +\time 3/2 +d2 c d +\time 6/4 +c1. \bar "||" +@end lilypond + +and is therefore a polymeter (second definition) of considerable antiquity. + +@seealso +@ref{mensural notation}, @ref{meter}, @ref{polymeter}, @ref{proportion}. + + +@node homophony +@section homophony + +ES: homofonía, +I: omofonia, +F: homophonie, +D: Homophonie, +NL: homofonie, +DK: homofoni, +S: homofoni, +FI: homofonia, yksiäänisyys. + +Music in which one voice leads melodically supported by the other voices in +the same rhythm (more or less). In contrast to @emph{polyphony}. + +@seealso +@ref{polyphony}. + + +@node hook +@section hook + +@seealso +@ref{flag}. + + +@node hymn meter +@section hymn meter + +ES: ?, +I: ?, +F: ?, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: säkeiden tavumäärät. + +A group or list of numbers that indicate the number of syllables in a line +of a hymn's verse. Different hymnals have different ways of noting the hymn +meter: for example, consider a hymn that has four lines in two couplets +alternating regularly between eight and seven syllables. The @emph{English +Hymnal} notes this as 87.@w{ }87. Other hymnals may note it as 8787, 87.87, +or 8@w{ }7@w{ }8@w{ }7. + +Some frequently-used hymn meters have traditional names: + +@itemize +@item 66.86 is called Short Meter (abbreviated SM or S.M.) +@item 86.86 is called Common Meter (CM or C.M.) +@item 88.88 is called Long Meter (LM or L.M.) +@end itemize + +Some hymns and their tunes are doubled versions of a simpler meter: for +easier reading, a hymn with a meter of 87.87.87.87 is usually written +87.87D. The traditional names above also have doubled versions: + +@itemize +@item 66.86.66.86 is Double Short Meter (DSM or D.S.M.) +@item 86.86.86.86 is Double Common Meter (DCM or D.C.M.) +@item 88.88.88.88 is Double Long Meter (DLM or D.L.M.) +@end itemize + +@seealso +No cross-references. + + +@node interval +@section interval + +ES: intervalo, +I: intervallo, +F: intervalle, +D: Intervall, +NL: interval, +DK: interval, +S: intervall, +FI: intervalli, kahden sävelen korkeusero. + +Difference in pitch between two notes. Intervals may be diminished, minor, +perfect, major, or augmented. The augmented fourth and the diminished fifth +are identical (or @emph{enharmonic}) on an equal-tempered twelve-tone scale +and are called @emph{tritonus} because they consist of three whole tones. +The addition of such two intervals forms an octave. + +@lilypond[quote,notime,line-width=13.0\cm] +<< +\context Voice \relative c'' { +% Prime or unison + < g g >1 + < g gis >^"aug" +% Second + < gis as >^"dim" + < g! as >^"min" + < g a! >^"maj" + < g ais >^"aug" +% Third + < gis bes >^"dim" + < g! bes >^"min" + < g b! >^"maj" + < g bis >^"aug" +% Fourth + < g ces >^"dim" + < g c! >^"per" + < g cis >^"aug" +% Fifth + < g des' >^"dim" + < g d' >^"per" + < g dis >^"aug" +% Sixth + < gis es' >^"dim" + < g! es' >^"min" + < g e'! >^"maj" + < g eis' >^"aug" +% Seventh + < gis f'! >^"dim" + < g! f'! >^"min" + < g fis' >^"maj" + < g fisis' >^"aug" +% Octave + < g ges' >^"dim" + < g g' >^"per" + < g gis' >^"aug" +} +\context Lyrics \lyrics { + "unison " "unison " + "second " "second " "second " "second " + "third " "third " "third " "third " + "fourth " "fourth " "fourth " + "fifth " "fifth " "fifth " + "sixth " "sixth " "sixth " "sixth " + "seventh" "seventh" "seventh" "seventh" + "octave " "octave " "octave " +} +>> +@end lilypond + +@seealso +@ref{enharmonic}, @ref{whole tone}. + + +@node inversion +@section inversion + +ES: ?, +I: ?, +F: renversement, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: käännös. + +When a chord sounds with a bass note that differs from the root of the +chord, it is said to be @emph{inverted}. The number of inversions that a +chord can have is one fewer than the number of constituent notes. For +example, triads (which have three constituent notes) can have three +positions, two of which are inversions: + +@table @dfn +@item Root position +The root note is in the bass, and above that are the third and the fifth. A +triad built on the first scale degree, for example, is marked @notation{I}. + +@item First inversion +The third is in the bass, and above it are the fifth and the root. This +creates an interval of a sixth and a third above the bass note, and so is +marked in figured Roman notation as @notation{6/3}. This is commonly +abbreviated to @notation{I6} (or @notation{Ib}) since the sixth is the +characteristic interval of the inversion, and so always implies +@notation{6/3}. + +@item Second inversion +The fifth is in the bass, and above it are the root and the third. This +creates an interval of a sixth and a fourth above the bass note, and so is +marked as @notation{I6/4} or @notation{Ic}. Second inversion is the most +unstable chord position. +@end table + +@seealso +No cross-references. + + +@node inverted interval +@section inverted interval + +ES: intervalo invertido, +I: intervallo rivolto, +F: intervalle renversé, +D: umgekehrtes Intervall, +NL: interval inversie, +DK: omvendingsinterval, +S: intervallets omvändning, +FI: käänteisintervalli. + +The difference between an interval and an octave. + +@lilypond[quote,notime,relative=2,line-width=13.0\cm] +1_"second " s s _"seventh " s s \bar "||" +_"third " s s _"sixth " s s \bar "||" +_"fourth " s s _"fifth " s s \bar "||" +@end lilypond + +@seealso +No cross-references. + + +@node just intonation +@section just intonation + +ES: entonación justa, +I: intonazione giusta, +F: intonation juste, +D: reine Stimmung, +NL: reine stemming, +DK: ren stemning, +S: ren stämning, +FI: puhdas viritys. + +Tuning system in which the notes are obtained by adding and subtracting +natural fifths and thirds. + +@seealso +@ref{temperament}. + + +@node key +@section key + +ES: tonalidad, +I: tonalità, +F: tonalité, +D: Tonart, +NL: toonsoort, +DK: toneart, +S: tonart, +FI: tonaliteetti. + +According to the 12@w{ }tones of the @emph{chromatic scale} there are +12@w{ }keys, one on@w{ }c, one on c-sharp, etc. + +@seealso +@ref{chromatic scale}, @ref{key signature}. + + +@node key signature +@section key signature + +ES: armadura (de la clave), +I: armatura di chiave, +F: armure, armature [de la clé], +D: Vorzeichen, Tonart, +NL: toon@-soort (voortekens), +DK: faste fortegn, +S: tonartssignatur, +FI: sävellajiosoitus. + +The sharps or flats appearing at the beginning of each staff indicating the +key of the music. + +@seealso +@ref{accidental}. + + +@node laissez vibrer +@section laissez vibrer + +ES: dejar vibrar, +I: ?, +F: laissez vibrer, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: antaa väristä. + +[French: @q{Let vibrate}] Most frequently associated with harp +parts. Marked @notation{l.v.} in the score. + +@seealso +No cross-references. + + +@node largo +@section largo + +ES: largo, +I: largo, +F: largo, large, ample, +D: Largo, Langsam, Breit, +NL: largo, +DK: largo, +S: largo, +FI: largo, hitaasti, leveästi. + +[Italian: @q{wide}.] Very slow in tempo, usually combined with great +expressiveness. @emph{Larghetto} is less slow than largo. + + +@node leading note +@section leading note + +ES: sensible, +I: sensibile, +F: (note) sensible, +D: Leitton, +NL: leidtoon, +DK: ledetone, +S: ledton, +FI: johtosävel. + +The seventh @emph{scale degree}, a @emph{semitone} below the tonic; so +called because of its strong tendency to @q{lead up} (resolve upwards) +to the tonic scale degree. + +@seealso +@ref{scale degree}, @ref{semitone}. + + +@node ledger line +@section ledger line + +ES: línea adicional, +I: tagli addizionali, +F: ligne supplémentaire, +D: Hilfslinie, +NL: hulplijntje, +DK: hjælpelinie, +S: hjälplinje, +FI: apuviiva. + +A ledger line is an extension of the staff. + +@lilypond[quote,notime,relative=2] +a,1 +s1 +c''1 +@end lilypond + +@seealso +No cross-references. + + +@node legato +@section legato + +ES: legato, +I: legato, +F: legato, lié, +D: legato, gebunden, +NL: legato, +DK: legato, +S: legato, +FI: legato, sitoen. + +To be performed (a) without any perceptible interruption between the +notes, unlike (b) @notation{leggiero} or @notation{non-legato}, (c) +@notation{portato}, or (d) @notation{staccato}. + +@lilypond[quote,notime,line-width=13.0\cm] +<< + \context Staff \relative c'' { + c4-( d e-) \bar "||" + c4-- d-- e-- \bar "||" + c4-.-( d-. e-.-) \bar "||" + c4-. d-. e-. \bar "||" + } + \lyrics { + a2. + b + c + d + } +>> +@end lilypond + +@seealso +@ref{staccato}. + + +@node legato curve +@section legato curve + +@seealso +@ref{slur}, @ref{legato}. + + +@node leger line +@section leger line + +@seealso +@ref{ledger line}. + + +@node ligature +@section ligature + +ES: ligadura, +I: ?, +F: ligature, +DE: Ligatur, +NL: ?, +DK: ?, +S: ?, +FI: ligatuura. + +A ligature is a coherent graphical symbol that represents at least two +distinct notes. Ligatures originally appeared in the manuscripts of +Gregorian chant notation around the 9th century to denote ascending or +descending sequences of notes. In early notation, ligatures were used for +monophonic tunes (Gregorian chant) and very soon denoted also the way of +performance in the sense of articulation. With the invention of the metric +system of the white mensural notation, the need for ligatures to denote such +patterns disappeared. + +@seealso +@ref{mensural notation}. + + +@node lilypond +@section lilypond + +UK: lily pond, +ES: estanque de nenúfares, +I: stagno del giglio, +F: étang de nénuphars, étang de nymphéas, +D: Seerosenteich, +NL: le@-lie@-vij@-ver, +DK: liliedam, +S: liljedamm, +FI: liljalampi. + +A pond with lilies floating in it. + +Also, the name of a music typesetting program. + +@seealso +No cross-references. + + +@node line +@section line + +ES: línea, +I: linea, +F: ligne, +D: Linie, Notenlinie, +NL: lijn, +DK: nodelinie, +S: notlinje, +FI: viiva, nuottiviiva. + +@seealso +@ref{staff}. + + +@node loco +@section loco + +ES: en su lugar, +I: loco, +F: ?, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: kirjoitetussa äänenkorkeudessa. + +[Italian: @q{place}] Instruction to play the following passage at the +written pitch. Cancels octave mark (q.v.). + +@seealso +@ref{octave mark}, @ref{octave marking}. + + +@node long appoggiatura +@section long appoggiatura + +ES: apoyatura larga, +I: appoggiatura lunga, +F: appoggiature longue, +D: Vorhalt, +NL: Lange voorslag, +DK: langt forslag, +S: långt förslag, +FI: pitkä appoggiatura, pitkä etuhele. + +@seealso +@ref{appoggiatura}. + + +@node longa +@section longa + +@itemize +@item US: long, longa, +@item ES: longa, +@item I: longa, +@item F: longa, longue, +@item D: Longa, +@item NL: longa, +@item DK: longa, +@item S: longa, +@item FI: longa. +@end itemize + +Note value: twice the length of a @notation{breve}. + +@lilypond[quote,notime,relative=2] +\override NoteHead #'style = #'mensural +g\longa g\breve +@end lilypond + +@seealso +@ref{breve}, @ref{note value}. + + +@node lyric tie +@section lyric tie + +ES: ligadura de letra, +I: ?, +F: ligature de mots, +D: Textbindung, +NL: ?, +DK: ?, +S: ?, +FI: sidonta sanoituksessa. + +@c TODO: add languages + +@seealso +@ref{elision}. + + +@node lyrics +@section lyrics + +ES: letra (de la canción), +I: ?, +F: paroles, +D: Liedtext, Gesangtext, +NL: liedtekst, +DK: ?, +S: ?, +FI: sanoitus. + +@c Definition? + +@seealso +No cross-references. + + +@node major +@section major + +ES: mayor, +I: maggiore, +F: [mode] majeur, +D: Dur, +NL: majeur, +DK: dur, +S: dur, +FI: duuri. + +@seealso +@ref{diatonic scale}. + + +@node major interval +@section major interval + +ES: intervalo mayor, +I: intervallo maggiore, +F: intervalle majeur, +D: großes Intervall, +NL: groot interval, +DK: stort interval, +S: stort intervall, +FI: suuri intervalli. + +@seealso +@ref{interval}. + + +@node maxima +@section maxima + +ES: ?, +I: ?, +F: maxima, maxime, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: ?. + +Note value: twice the length of a @notation{longa}. + +The maxima is the largest duration in use during the 15th and 16th centuries. +Like the longa, the maxima can be either two or three times as long as the +@notation{longa} (called @notation{binary} and @notation{ternary}, +respectively). By the late 15th century, most composers used the smaller +proportion by default. + +@seealso +@ref{Duration names notes and rests}, @ref{longa}, @ref{note value}. + + +@node meantone temperament +@section meantone temperament + +ES: afinación mesotónica, +I: accordatura mesotonica, +F: tempérament mésotonique, +D: mitteltönige Stimmung, +NL: middenstemming, middentoonstemming, +DK: middeltonetemperatur, +S: medeltonstemperatur, +FI: keskisävelviritys. + +Temperament yielding acoustically pure thirds by decreasing the natural +fifth by 16@w{ }cents. Due to the non-circular character of this +temperament only a limited set of keys are playable. Used for tuning +keyboard instruments for performance of pre-1650 music. + +@seealso +@ref{cent}, @ref{temperament}. + + +@node measure +@section measure + +ES: compás, +I: misura, battuta, +F: mesure, +D: Takt, +NL: maat, +DK: takt, +S: takt, +FI: tahti. + +A group of beats (units of musical time) the first of which bears an accent. +Such groups in numbers of two or more recur consistently throughout the +composition and are separated from each other by bar lines. + +@seealso +@ref{bar line}, @ref{beat}, @ref{meter}. + + +@node measure repeat +@section measure repeat + +@seealso +@ref{percent repeat}. + + +@node mediant +@section mediant + +ES: mediante, +I: mediante, modale, +F: médiante, +NL: mediant, +D: Mediante, +DK: mediant, +S: mediant, +FI: keskisävel. + +@itemize + +@item The third @b{scale degree}. + +@item A @emph{chord} having its base tone a third from that of another +chord. For example, the tonic chord may be replaced by its lower +mediant (variant tonic). + +@end itemize + +@seealso +@ref{chord}, @ref{functional harmony}, @ref{relative key}. + + +@node melisma +@section melisma + +ES: melisma, +I: ?, +F: mélisme, tenue, +D: Melisma, +NL: melisma, +DK: ?, +S: ?, +FI: melisma, laulettavan tavun sävelkuvio. + +A melisma (Greek: plural @emph{melismata}) is a group of notes or tones sung +on one syllable, especially as applied to liturgical chant. + +@seealso +No cross-references. + + +@node melisma line +@section melisma line + +@c TODO: add languages + +ES: línea de melisma, +I: ?, +F: trait de mélisme, trait de tenue, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: melismaviiva. + +@seealso +@ref{extender line}. + + +@node melodic cadence +@section melodic cadence + +@seealso +@ref{cadenza}. + + +@node mensural notation +@section mensural notation + +@c TODO: add languages + +ES: notación mensural, +I: ?, +F: notation mensurale, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: mensuraalinuotinnus. + +A system of duration notation whose principles were first established in the +mid-13th century, and that (with various changes) remained in use until about +1600. As such, it is the basis for the notation of rhythms in Western musical +notation. + +Franco of Cologne (ca. 1250) is credited with the first systematic explanation +of the notation's principles, so the notation of this earliest period is called +@q{Franconian}. Franco's system made use of three note values -- long, breve, +and semibreve -- each of which was normally equivalent to three of the next +lower note value. + +Then, in the first half of the 14th century, Philippe de Vitry and Jehan de Murs +added several note values (the minim, semiminim and fusa) and extended Franco's +principles to govern the relationship between these values. They also put the +duple division of note values on an equal footing with the earlier (preferred) +triple division. + +TODO: continue description of French and Italian black notation, and the +relationship betwixt them. + +@b{White or void mensural notation} + +In the 15th century, hollow (or void) notes began to substitute for the earlier +solid black ones, which were then free to assume the function of red (or +colored) notes in the earlier notation. ... + +TODO: add to definition (including summary info on proportional notation) + +@seealso +@ref{augmentation}, @ref{diminution}, @ref{ligature}, @ref{proportion}. +@c TODO: more cross-references? + + +@node mensuration sign +@section mensuration sign + +@c TODO: add languages + +ES: ?, +I: ?, +F: signe de mensuration, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: ?. + +The ancestor of the time signature, mensuration signs were used to indicate the +relationship between two sets of note durations—specifically, the ratio of +breves to semibreves (called @notation{tempus}), and of semibreves to minims +(called @notation{prolatio}). + +Each ratio was represented with a single single sign, and was either +three-to-one (ternary) or two-to-one (binary), as in modern music notation. +Unlike modern music notation, the @emph{ternary} ratio was the preferred +one—applied to the @emph{tempus}, it was called @emph{perfect}, and was +represented by a complete circle; applied to the @emph{prolatio}, it was called +@emph{major} and was represented by a dot in the middle of the sign. The binary +ratio applied to the @emph{tempus} was called @emph{imperfect}, and was +represented by an incomplete circle; applied to @emph{prolatio}, it was called +@emph{minor} and was represented by the lack of an internal dot. There are four +possible combinations, which can be represented in modern time signatures with +and without reduction of note values. (These signs are hard-coded in LilyPond +with reduction.) + +@table @dfn +@item perfect @emph{tempus} with major @emph{prolatio} +Indicated by a complete circle with an internal dot. In modern time signatures, +this equals: +@itemize +@item 9/4, with reduction or +@item 9/2, without reduction +@end itemize + +@item perfect @emph{tempus} and minor @emph{prolatio} +Indicated by a complete circle without an internal dot. In modern time +signatures, this equals: +@itemize +@item 3/2, with reduction or +@item 3/1, without reduction +@end itemize + +@item imperfect @emph{tempus} and major @emph{prolatio} +Indicated by an incomplete circle with an internal dot. In modern time +signatures, this equals: +@itemize +@item 6/4, with reduction or +@item 6/2, without reduction +@end itemize + +@item imperfect @emph{tempus} and minor @emph{prolatio} +Indicated by an incomplete circle without an internal dot. In modern time +signatures, this equals: +@itemize +@item 4/4, with reduction or +@item 2/1, without reduction +@end itemize +@end table + +The last mensuration sign @emph{looks} like common-time because it @emph{is}, +with note values reduced from the original semibreve to a modern quarter note. +Being doubly imperfect, this sign represented the (theoretically) +least-preferred mensuration, but it was actually used fairly often. + +This system extended to the ratio of longer note values to each other: + +@itemize + + @item maxima to longa, called: + + @itemize + + @item @notation{modus maximorum}, + @item @notation{modus major}, or + @item @notation{maximodus}) + + @end itemize + + @item longa to breve, called: + + @itemize + + @item @notation{modus longarum}, + @item @notation{modus minor}, or + @item @notation{modus} + + @end itemize + +@end itemize + +In the absence of any other indication, these modes were assumed to be +binary. The mensuration signs only indicated tempus and prolatio, so +composers needed another way to indicate these longer ratios (called modes. +Around the middle of the 15th century started to use groups of rests at the +beginning of the staff, preceding the mensuration sign. + + +Two mensuration signs have survived to the present day: the C-shaped sign, +which originally designated @notation{tempus imperfectum} and +@notation{prolatio minor} now stands for @notation{common time}; and the +slashed C, which designated the same with @notation{diminution} now stands +for @notation{cut-time} (essentially, it has not lost its original meaning). + +@seealso +@ref{diminution}, @ref{proportion}, @ref{time signature}. +@c TODO: more cross-references? + + +@node meter +@section meter + +ES: tiempo, compás, +I: tempo, misura, +F: indication de mesure, mesure, +D: Taktart, Metrum, +NL: maatsoort, +DK: taktart, +S: taktart, +FI: aika-arvo. + +The pattern of note values and accents in a composition or a section thereof. +There are a couple ways to classify @q{traditional} meter (i.e. not polymeter): +by grouping beats and by subdividing the primary beat. + +@b{By grouping beats}: + +@itemize + + @item @b{duple}: groups of two. + @item @b{triple}: groups of three. + @item @b{quadruple}: groups of four. A special case of duple meter. + @item @b{quintuple}: groups of five beats. + @item @b{sextuple} meter: groups of six. A special case of: + + @itemize + + @item duple meter, subdivided in three; or + @item triple meter, subdivided in two. + + @end itemize + + @item @b{septuple} meter: groups of seven. + @item and so on. + +@end itemize + +Other than triple meter and its subdivided variants (see below), meters that +feature odd groupings of beats (e.g. quintuple or septuple meter) are not +frequently used prior to the 20th Century. + +@b{By subdividing the primary beat}: + +@itemize + + @item simple: subdivided in groups of two. + + @itemize + + @item duple: 2/2, 2/4, 2/8 + @item triple: 3/2, 3/4, 3/8 + @item quadruple: 4/2, 4/4 (also called common time), 4/8 + + @end itemize + + @item compound: subdivided in groups of three. + + @itemize + + @item duple: 6/8 + @item triple: 9/8 + @item quadruple: 12/8 + + @end itemize + +@end itemize + +Time signatures are placed at the beginning of a composition (or section) to +indicate the meter. For instance, a piece written in simple triple meter with a +beat on each quarter note is conventionally written with a time signature of +3/4. Here are some combinations of the two classifications above: + +Simple duple meter (F.J. Haydn, 1732-1809; or a Croatian folk tune): + +@lilypond[quote,line-width=13.0\cm] +\relative c'' { + \time 2/4 + \key g \major + g8. a16 b8 a | c b a16( fis) g8 | e' d c b | a2 \bar "||"} +@end lilypond + +Simple triple meter: + +@lilypond[quote,line-width=13.0\cm] +\relative c'' { + \time 3/4 + \key c \minor + c es d8 c | d4 b g | d' f es8 d | es d c2 \bar "||"} +@end lilypond + +Simple quadruple meter (French folk tune, @emph{Au clair de la lune}): + +@lilypond[quote,line-width=13.0\cm] +\relative c'' { + \time 4/4 + \key g \major + g4 g g a | b2 a | g4 b a a | g1 \bar "||"} +@end lilypond + +Simple quintuple meter (B. Marcello, 1686-1739): + +@lilypond[quote,line-width=13.0\cm] +\relative c'' { + \time 5/4 + \key c \major + r4 cis8 bis ais4 dis c8 ais | + aes4 bes8 aes ges4 aes f8 es \bar "||"} +@end lilypond + +(Aside: this is an example of @emph{Augenmusik}: the accidentals are thus in +the source, with sharps in the accompaniment where the voice has flats and +@emph{vice versa}.) + +Compound duple meter (unknown): + +@lilypond[quote,line-width=13.0\cm] +\relative c' { + \time 6/8 + \key f \major + f8 f g a bes16 a g f | + g8 g bes a c16 a bes g + \bar "||"} +@end lilypond + +Compound triple meter (J.S. Bach, 1685-1750): + +@lilypond[quote,line-width=13.0\cm] +\relative c' { + \time 9/8 + \key g \major + r8 g'( a) b( d c) c( e d) | + d( g fis) g( d b) g( a b) + \bar "||"} +@end lilypond + +Compound quadruple meter (P. Yon, 1886-1943): + +@lilypond[quote,line-width=13.0\cm] +\relative c' { + \time 12/8 + \key e \major + b'8.( a16) gis8 a8.( gis16) fis8 gis8.( fis16) e8 fis4 b,8 | + e4 e8 fis( gis) a b4.~ b4 b8 + \bar "||"} +@end lilypond + +@ignore +@b{@q{Monometer} vs Polymeter} + +TODO: add information from discussion on lilypond-user related to polymeter. +@end ignore + +@seealso +@ref{accent}, @ref{hemiola}, @ref{note value}, @ref{time signature} + + +@node metronome +@section metronome + +ES: metrónomo, +I: metronomo, +F: métronome, +D: Metronom, +NL: metronoom, +DK: me@-tro@-nom, +S: me@-tro@-nom, +FI: metronomi. + +Device used to indicate the exact tempo of a piece. + +Invented ca. 1812 by Dietrich Nikolaus Winkler of Amsterdam, but takes its name +from Johann Nepomuk Mälzel, who copied the device, added a scale of tempo +divisions, and patented it as a @q{metronome}. The inevitable lawsuit that +followed acknowledged Winkler as the creator, but by then Mälzel had already +sold many of them, and people had taken to calling it a Mälzel Metronome. + +@seealso +@ref{metronome mark}. + + +@node metronome mark +@section metronome mark + +ES: indicación metronómica, +I: indicazione metronomica, +F: indication métronomique, +D: Metronomangabe, +NL: metronoom aanduiding, +DK: metronomtal, +S: metronomangivelse, +FI: metronomiosoitus. + +Exact tempo indication (in beats per minute). Abbreviated @notation{M.M.} or +@notation{MM}, which is short for Mälzels Metronom (or Mälzel's Mark, +@emph{anglice}). + +@seealso +@ref{metronome} + + +@node metronomic indication +@section metronomic indication + +@seealso +@ref{metronome mark} + + +@node mezzo +@section mezzo + +ES: ?, +I: mezzo, +F: mezzo, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: kohtalaisen, melko. + +[Italian: @q{medium}] + +Used to qualify other indications, such as: + +@itemize + +@item Dynamics + @itemize + @item @notation{mezzo piano} is @q{medium quiet} (that is, not as quiet as + @notation{piano}) + @item @notation{mezzo forte} is @q{medium loud} (that is, not as loud as + @notation{forte}) + @end itemize + +@item Voice + @itemize + @item Pitchwise, a mezzo-soprano's voice lies between that of contraltos and + sopranos + @end itemize + +@end itemize + +@seealso +No cross-references. + + +@node mezzo-soprano +@section mezzo-soprano + +ES: mezzosoprano, +I: mezzo-soprano, +F: mezzo-soprano, +D: Mezzosopran, +NL: mezzosopraan, +DK: mezzosopran, +S: mezzosopran, +FI: mezzosopraano. + +The female voice between soprano and contralto. + +@seealso +@ref{soprano}, @ref{contralto}. + + +@node middle C +@section middle C + +ES: do central, +I: do centrale, +F: do central, do 3 +D: eingestrichenes@w{ }c, +NL: centrale@w{ }c, +DK: enstreget@w{ }c, +S: ettstruket@w{ }c, +FI: keski-C. + +First C below the 440 Hz A. + +@lilypond[quote,notime,relative=1] +\override Staff.Clef #'full-size-change = ##t + \clef bass c1 s + \clef alto c s + \clef treble c s +@end lilypond + +@seealso +No cross-references. + + +@node minor +@section minor + +ES: menor, +I: minore, +F: (mode) mineur, +D: Moll, +NL: mineur, +DK: mol, +S: moll, +FI: molli. + +@seealso +@ref{diatonic scale}. + + +@node minor interval +@section minor interval + +ES: intervalo menor, +I: intervallo minore, +F: intervalle mineur, +D: kleines Intervall, +NL: klein interval, +DK: lille interval, +S: litet intervall, +FI: pieni intervalli. + +@seealso +@ref{interval}. + + +@node mixolydian mode +@section mixolydian mode + +@seealso +@ref{diatonic scale}. + + +@node mode +@section mode + +ES: modo, +I: modo, +F: mode, +D: Kirchentonart, Modus, +NL: modus, +DK: skala, +S: modus, skala, +FI: moodi, kirkkosävelasteikko. + +@seealso +@ref{church mode}, @ref{diatonic scale}. + + +@node modulation +@section modulation + +ES: modulación, +I: modulazione, +F: modulation, +D: Modulation, +NL: modulatie, +DK: modulation, +S: modulering, +FI: modulaatio, sävellajin vaihdos. + +Moving from one @ref{key} to another. For example, the second subject +of a @ref{sonata form} movement modulates to the dominant key if the +key is major and to the @ref{relative key} if the key is minor. + +@seealso +No cross-references. + + +@node mordent +@section mordent + +I: mordente, +F: mordant, +D: Mordent, +NL: mordent, +DK: mordent, +S: mordent, +FI: mordent, korukuvio. + +@seealso +@ref{ornament}. + + +@node motif +@section motif + +@seealso +@ref{motive}. + + +@node motive +@section motive + +ES: motivo, +I: inciso, +F: motif, incise, +D: Motiv, +NL: motief, +DK: motiv, +S: motiv, +FI: teema, sävelaihe. + +The briefest intelligible and self-contained fragment of a musical +theme or subject. + +@lilypond[quote,line-width=13.0\cm] +\score{ +\relative c'' { + \set Score.implicitTimeSignatureVisibility = #all-invisible + \override Score.TimeSignature #'break-visibility = #all-invisible + \time 4/4 + \key g \major + \partial 8 g16\startGroup fis | + g8\stopGroup d16\startGroup c d8\stopGroup g16 fis g8 b,16 a b8 g'16 fis | + g8 g,16 a b8 cis d16 s +} +\layout { + \context { + \Staff \consists "Horizontal_bracket_engraver" +}} +} +@end lilypond + +@seealso +No cross-references. + + +@node movement +@section movement + +ES: movimiento, +I: movimento, +F: mouvement, +D: Satz, +NL: deel, +DK: sats, +S: sats, +FI: osa. + +Greater musical works like @ref{symphony} and @ref{sonata} most often consist of +several -- more or less -- independent pieces called movements. + +@seealso +No cross-references. + + +@node multi-measure rest +@section multi-measure rest + +ES: compases de espera, +I: pausa multipla, +F: pause multiple, mesure à compter, +NL: meermaats rust, +D: mehrtaktige Pause, Kirchenpause, +DK: flertaktspause, +S: flertaktspaus, +FI: usean tahdin mittainen tauko. + +Multi-measure rests are conventionally typeset with a combination of +longa, breve and whole rests for shorter and a long horizontal bar for +longer spans of rest, with a number above to indicate the duration (in +measures) of the rest. The former style is called @q{Kirchenpausen} in +German, as a reminiscence of its use in Renaissance vocal polyphony. + +@lilypond[quote,relative=2] +a1 +\set Score.skipBars = ##t +R1*3 +a1 +\set Score.skipBars = ##t +R1*122 +a1 +@end lilypond + +@seealso +@ref{longa}, @ref{breve}. + + +@node natural +@section natural + +ES: becuadro, +I: bequadro, +F: bécarre, +D: Auflösungszeichen, +NL: herstellingsteken, +DK: op@-løsningstegn, +S: återställningstecken, +FI: palautusmerkki. + +@seealso +@ref{accidental}. + + +@node neighbor tones +@section neighbor tones + +@c TODO: add definition. + +ES: ?, +I: ?, +F: tons voisins, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: ?. + +@seealso +@ref{acciaccatura}, @ref{appoggiatura}, @ref{grace notes}, +@ref{ornament}. + + +@node ninth +@section ninth + +ES: novena, +I: nona, +F: neuvième, +D: None, +NL: noon, +DK: none, +S: nona, +FI: nooni. + +@seealso +@ref{interval}. + + +@node non-legato +@section non-legato + +@seealso +@ref{legato}. + + +@node note +@section note + +ES: nota, +I: nota, +F: note, +D: Note, +NL: noot, +DK: node, +S: not, +FI: nuotti. + +Notes are signs by means of which music is fixed in writing. The term is also +used for the sound indicated by a note, and even for the key of the piano +which produces the sound. However, a clear distinction between the terms tone +and @ref{note} is strongly recommended. Briefly, one sees a note, +and hears a tone. + +@seealso +No cross-references. + + +@node note head +@section note head + +ES: cabeza, +I: testa, testina, capocchia, +F: tête de note, +D: Notenkopf, +NL: nootballetje, +DK: nodehovede, +S: nothuvud, +FI: nuotin pää. + +A head-like sign which indicates pitch by its position on a @notation{staff} +provided with a @notation{clef}, and duration by a variety of shapes such as +hollow or black heads with or without @notation{stems}, @notation{flags}, etc. +For percussion instruments (often having no defined pitch) the note head may +indicate the instrument. + +@seealso +@ref{clef}, @ref{flag}, @ref{staff}, @ref{stem}. + + +@node note names +@section note names + +@seealso +@ref{Pitch names} + + +@node note value +@section note value + +ES: valor (duración), +I: valore, durata, +F: durée, valeur (d'une note), +D: Notenwert, +NL: nootwaarde, +DK nodeværdi, +S: notvärde, +FI: nuotin aika-arvo. + +Note values (durations) are measured as fractions—in modern usage, one-half—of +the next higher note value. The longest duration in current use is the +@notation{breve} (equal to two whole notes), but sometimes (especially in music +dating from the Baroque era or earlier) the @notation{longa} (four whole notes) +or @notation{maxima} (eight whole notes) may be found. + +As used in mensural notation, this fraction was more flexible: it could also +be one-third the higher note value. Composers indicated which proportions +to use with various signs—two of which survive to the present day: the +C-shaped sign for @notation{common time}, and the slashed C for +@notation{alla breve} or @notation{cut-time}. + +@c TODO -- add maxima to this example, in a way that doesn't break it. + +@lilypond[quote,notime,line-width=13.0\cm] +\relative c'' { + \override NoteHead #'style = #'mensural + a\longa_"longa" a\breve_"breve" + \revert NoteHead #'style + a1_"1/1" a2_"1/2" a4_"1/4" s16 a8_"1/8" s16 + a16_"1/16" s16 a32_"1/32" s16 a64_"1/64" s32 } +@end lilypond + +@c TODO -- add maxima rest to this example + +@lilypond[quote,notime,line-width=13.0\cm] +\relative c'' { + r\longa_"longa" r\breve_"breve" + r1_"1/1" r2_"1/2" r4_"1/4" s16 r8_"1/8" s16 + r16_"1/16" s16 r32_"1/32" s16 r64_"1/64" s32 } +@end lilypond + +An augmentation dot after a note increases its duration by half; a second dot +increases it by half of the first addition (that is, by a fourth of the original +duration). More dots can be used to add further halved fractions of the +original note value (1/8, 1/16, etc.), but they are not frequently encountered. + +@lilypond[quote,line-width=13.0\cm] +\relative c'' { + \time 4/4 + g4._"pointed" g8 g2 | g4 ~ g8 g g2 \bar "||" + g4.._"double pointed" g16 g2 | g4 ~ g8 ~ g16 g g2 \bar "||" } +@end lilypond + +Alternatively note values may be subdivided by other ratios. Most common is +subdivision by@w{ }3 (@emph{triplets}) and@w{ }5 (@emph{quintuplets}). +Subdivisions by@w{ }2 (@emph{duplets}) or@w{ }4 (@emph{quadruplets}) of +dotted notes are also frequently used. + +@lilypond[quote,line-width=13.0\cm] +\relative c'' { + \time 4/4 + \times 2/3 {g8_"triplets" g g} g4 g8 g g4 \bar "||" + \times 2/5 {g8_"quintuplets" g g g g} g4 g8 g g4 \bar "||" +} +@end lilypond + +@lilypond[quote,line-width=13.0\cm] +\relative c'' { + \time 3/4 + \times 3/2 {g4_"duplets" g} | + g4 g g \bar "||" + \times 6/4 {g8_"quadruplets" g g g} | + g8 g g g g4 \bar "||" +} +@end lilypond + +@seealso +@ref{common time}. + + +@node octavation +@section octavation + +@seealso +@ref{octave marking}. + + +@node octave +@section octave + +ES: octava, +I: ottava, +F: octave, +D: Oktave, +NL: octaaf, +DK: oktav, +S: oktav, +FI: oktaavi. + +The interval of an octave, sometimes abbreviated @notation{8ve}. + +For uses like @notation{all'ottava} or @notation{8va} with an extender line or +bracket, or @notation{loco} see octave marking. + +@seealso +@ref{interval}, @ref{octave marking}. + + +@node octave mark +@section octave mark + +ES: indicación de octava, +I: ?, +F: indication d'octave, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: oktaavamerkki. + +The phrase, abbreviation, or other mark used (with or without an extender line +or bracket) to indicate that the music is to be played in a different octave: + +@itemize + +@item @notation{15ma}: play two octaves higher +@item @notation{8va}: play one octave higher +@item @notation{8vb}: play one octave lower +@item @notation{8va} (written below the passage): unusual, same as +@notation{8vb} +@item @notation{15vb}: play two octaves lower +@item @notation{15va} (written below the passage): unusual, same as +@notation{15vb} + +@end itemize + +For longer passages, it may be more practical to mark the octave change at the +beginning with a phrase (see the list below for examples), but without a bracket +or extender line. Then, when the music returns to the written pitch, the octave +change is cancelled with the word @notation{loco} (q.v.). + +To parallel the list above: + +@itemize + +@item @notation{15ma}: @notation{alla quindicesima (alta)} +@item @notation{8va}: @notation{all'ottava} or @notation{ottava sopra} +@item @notation{8vb}: @notation{all'ottava bassa}, @notation{ottava sotto} +@item @notation{15vb}: @notation{alla quindicesima (bassa)} + +@end itemize + +In the phrases above, @notation{quindicesima} is sometimes replaced with +@notation{quindecima}, which is Latin. + +The music on an entire staff can be marked to be played in a different octave by +putting a small 8 or 15 above or below the clef at the beginning. This octave +mark can be applied to any clef, but it is most frequently used with the G and F +clefs. + +@seealso +@ref{F clef}, @ref{G clef}, @ref{loco}, @ref{octave marking}. + + +@node octave marking +@section octave marking + +ES: a la octava, +I: all'ottava, +F: octaviation, +D: Oktavierung, +NL: octaveren, +DK: oktavering, +S: oktavering, +FI: oktaavamerkintä. + +The practice of marking music -- an entire staff, a passage, etc. -- to indicate +that it is to be played in a different octave. If applied to the clef at the +beginning of the staff, all music on that staff is to played at the indicated +octave. + +For a list of the specific marks used, see @ref{octave mark}. + +@seealso +@ref{interval}, @ref{loco}, @ref{octave}, @ref{octave mark}. + + +@node octave sign +@section octave sign + +@seealso +@ref{octave mark}. + + +@node ornament +@section ornament + +ES: adorno, +I: abbellimento, fioriture, +F: agrément, ornement, +D: Verzierung, Ornament, +NL: versiering, +DK: forsiring, +S: ornament, +FI: koru, hele. + +Most commonly used is the @emph{trill}, the rapid alternation of a given note +with the diatonic @ref{second} above it. In the music from the +middle of the 19th century and onwards the trill is performed with the main +note first while in the music from the preceding baroque and classic periods +the upper note is played first. + +@lilypond[quote,line-width=13.0\cm] +<< + \context Staff = sa { + \relative c'' { + c2._"pre-1850" b4\trill | c1 \bar "||" + c2._"post-1850" b4\trill | c1 \bar "||" + } + } + \relative c'' { + c2. c32 b c b c b c b | c1 + c2. b32 c b c \times 4/5 { b c b c b } | c1 + } +>> +@end lilypond + +Other frequently used ornaments are the @emph{turn}, the @emph{mordent}, and +the @emph{prall} (inverted mordent). + +@lilypond[quote,line-width=13.0\cm] +<< + \context Staff = sa { + \relative c'' { + a4_"turn" b\turn c2 \bar "||" + g4_"mordent" a b\mordent a \bar "||" + e'4_"prall" d\prall c2 \bar "||" + } + } + \relative c'' { + a4 c16[ b a b] c2 + g4 a b16-[ a b8] a4 + e'4 e32[ d e d ~ d8] c2 + } +>> +@end lilypond + +@seealso +@ref{acciaccatura}, @ref{appoggiatura}, @ref{grace notes}. + + +@node ossia +@section ossia + +ES: ossia, +I: ossia, +F: ossia, alternative, +D: Ossia, +NL: alternatief, +DK: ossia, +S: ossia, +FI: ossia, vaihtoehtoinen esitystapa. + +Ossia (otherwise) marks an alternative. It is an added staff or piano +score, usually only a few measures long, which presents another version +of the music, for example for small hands. + +@seealso +Compare: @ref{cue-notes}. + + +@node part +@section part + +ES: parte, +I: voce, parte, +F: partie, +D: Stimme, +NL: partij, +DK: stemme, +S: stämma, +FI: stemma, instrumenttiosuus. + +@itemize + +@item In instrumental or choral music, the music for a single +instrument or voice. + +@item in contrapuntal music, a single melodic line in the contrapuntal +web. + +@end itemize + +@seealso +@ref{counterpoint} + + +@node pause +@section pause + +@seealso +@ref{fermata}. + + +@node pennant +@section pennant + +@seealso +@ref{flag}. + + +@node percent repeat +@section percent repeat + +LilyPond-specific term to indicate the repetition of a musical expression on a +single staff, as opposed to the more usual definition of repeat, which affects +all parts. The musical expression can be anything from a single note or note +pattern to one or more measures. There are other names for this symbol: + +@itemize + +@item simile mark +@item slash mark, or slash repeat +@item beat repeat +@item measure (or multi-measure) repeat + +@end itemize + +@lilypond[quote,relative=2,line-width=13.0\cm] +\time 4/4 + \repeat percent 4 { c4_"Beat (or slash) repeat" } + \repeat percent 2 { c4 e g b_"Measure repeat" } + \repeat percent 2 { c,2 es | f4 fis g c_"Multi-measure repeat" | } +@end lilypond + +@seealso +@ref{repeat}, +@uref{http://www.music.vt.edu/musicdictionary/textr/Repeat.html,University of +Vermont Music Dictionary}. + + +@node percussion +@section percussion + +ES: percusión, +I: percussioni, +F: percussion, +D: Schlagzeug, Schlagwerk, +NL: slagwerk, +DK: slagtøj, +S: slagverk, +FI: lyömäsoittimet. + +A family of musical instruments which are played on by striking or +shaking. Percussion instruments commonly used in a symphony orchestra are +kettledrums (I: @emph{timpani}, D: @emph{Pauken}), snare drum, bass drum, +tambourine, cymbals, chinese gong (tam-tam), triangle, celesta, glockenspiel, +and xylophone. + +@seealso +No cross-references. + + +@node perfect interval +@section perfect interval + +ES: intervalo justo, +I: intervallo giusto, +F: intervalle juste, +D: reines Intervall, +NL: rein interval, +DK: rent interval, +S: rent intervall, +FI: puhdas intervalli. + +@seealso +@ref{interval}. + + +@node phrase +@section phrase + +ES: frase, +I: frase, +F: phrase, +D: Phrase, +NL: frase, zin, +DK: frase, +S: fras, +FI: fraasi, lause. + +A natural division of the melodic line, comparable to a sentence of speech. + +@seealso +@ref{caesura}. + + +@node phrasing +@section phrasing + +ES: fraseo, +I: fraseggio, +F: phrasé, +D: Phrasierung, +NL: frasering, +DK: frasering, +S: fra@-se@-ring, +FI: fraseeraus, jäsentäminen. + +The clear rendering in musical performance of the @notation{phrases} of the +melody. Phrasing may be indicated by a @notation{slur}. + +@seealso +@ref{phrase}, @ref{slur}. + + +@node piano +@section piano + +ES: piano, +I: piano, +F: piano, +D: piano, leise, +NL: piano, +DK: piano, +S: piano, +FI, piano, hiljaa. + +@emph{piano} (@b{p}) soft, @emph{pianissimo} (@b{pp}) very soft, +@emph{mezzo piano} (@b{mp}) medium soft. + +@seealso +No cross-references. + + +@node pickup +@section pickup + +ES: anacrusa, +I: anacrusi, +F: anacrouse, levée, +D: Auftakt, +NL: opmaat, +DK: optakt, +S: upptakt, +FI: kohotahti. + +@seealso +@ref{anacrusis}. + + +@node pitch +@section pitch + +ES: altura, +I: altezza, +F: hauteur, +D: Tonhöhe, +NL: toonhoogte, +DK: tonehøjde, +S: tonhöjd, +FI: sävelkorkeus. + +@enumerate + +@item The perceived quality of a sound that is primarily a function of its +fundamental frequency. + +@item [FR. ton; DE. Ton; ES. tono] Any point on the continuum of musical pitch. + +@item [FR. diapason; DE. Kammerton, Stimmung; ES. diapasón] The standardized +association of a particular frequency with a particular pitch name, e.g., c' = +256 Hz. + +@end enumerate + +@seealso +@ref{Pitch names}. + + +@node pizzicato +@section pizzicato + +ES: pizzicato, +I: pizzicato, +F: pizzicato, +D: pizzicato, +NL: pizzicato, getokkeld, +DK: pizzicato, +S: pizzicato, +FI: pizzicato, näppäillen. + +A technique for stringed instruments, abbr. @emph{pizz}. To play by plucking +the strings. + +@seealso +No cross-references. + + +@node polymeter +@section polymeter + +ES: compás polimétrico, +I: ?, +F: polymétrie, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: monia tahtiosoituksia sisältävä. + +@itemize + +@item The @emph{simultaneous} use of two or more meters, in two or more +parts. + +@item The @emph{successive} use of different meters in one or more parts. + +@end itemize + +@seealso +@ref{polymetric} (adj.) + + +@node polymetric +@section polymetric + +ES: polimétrico, +I: ?, +F: polymétrique, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: monia tahtiosoituksia yhtäaikaa tai peräkkäin sisältävä. + +Characterized by @emph{polymeter}: using two or more metric frameworks +simultaneously or in alternation. + +@seealso +@ref{polymeter} (noun) + + +@node polymetric time signature +@section polymetric time signature + +ES: compás polimétrico, +I: ?, +F: ?, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: vaihtelevan tahtiosoitusmerkintä. + +A time signature that indicates regularly alternating polymetric time. + +@seealso +@ref{polymetric}. + + +@node polyphony +@section polyphony + +ES: polifonía, +I: polifonia, +F: polyphonie, +D: Polyphonie, Mehrstimmigkeit, +NL: polyfonie, +DK: polyfoni, +S: polyfoni, +FI: polyfonia, moniäänisyys. + +Music written in a combination of several simultaneous voices (parts) +of a more or less pronounced individuality. + +@seealso +@ref{counterpoint}. + + +@node portato +@section portato + +[Italian: past participle of @emph{portare}, @q{to carry}] + +A stroke in which each of several notes is separated slightly within a slur, +without changing the bow's direction. It is used for passages of a +@notation{cantabile} character. + +@seealso +@ref{legato}. + + +@node presto +@section presto + +ES: presto, +I: presto, +F: presto, très rapide, enlevé, +D: Presto, Sehr schnell, +NL: presto, Sehr schnell, +DK: presto, +S: presto, +FI: presto, hyvin nopeasti. + +[Italian] + +Very quick, i.e., quicker than @ref{allegro}; @emph{prestissimo} +denotes the highest possible degree of speed. + +@seealso +No cross-references. + + +@node proportion +@section proportion + +ES: proporción, +I: proprozione (?), +F: proportion, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: suhde. + +[Latin: @emph{proportio}] Described in great detail by Gaffurius, in +@emph{Practica musicae} (published in Milan in 1496). In mensural notation, +proportion is: + +@enumerate + +@item A ratio that expresses the relationship between the note values that +follow with those that precede; + +@item A ratio between the note values of a passage and the @q{normal} +relationship of note values to the metrical pulse. (A special case of the +first definition.) + +@end enumerate + +The most common proportions are: + +@itemize +@item 2:1 (or simply 2), expressed by a vertical line through the +mensuration sign (the origin of the @notation{alla breve} time signature), +or by turning the sign backwards +@item 3:1 (or simply 3) +@item 3:2 (@emph{sesquialtera}) +@end itemize + +To @q{cancel} any of these, the inverse proportion is applied. Thus: + +@itemize +@item 1:2 cancels 2:1 +@item 1:3 cancels 3:1 +@item 2:3 cancels 3:2 +@item and so on. +@end itemize + +Gaffurius enumerates five basic types of major:minor proportions and their +inverses: + +@enumerate +@item Multiplex, if the major number is an exact multiple of the minor (2:1, +3:1, 4:2, 6:3); and its inverse, Submultiplex (1:2, 1:3, 2:4, 3:6) + +@item Epimoria or Superparticular [orig. @emph{Epimoria seu Superparticularis}], +if the major number is one more than the minor (3:2, 4:3, 5:4); and its +inverse, Subsuperparticular (2:3, 3:4, 4:5) + +@item Superpartiens, if the major number is one less than twice the minor +(5:3, 7:4, 9:5, 11:6); and its inverse, subsuperpartiens (3:5, 4:7, 5:9, 6:11) + +@item Multiplexsuperparticular, if the major number is one more than twice the +minor (5:2, 7:3, 9:4); and its inverse, Submultiplexsuperparticular (2:5, 3:7, +4:9) + +@item Multiplexsuperpartiens, if the major number is one less than some other +multiple (usually three or four) of the minor (8:3, 11:4, 14:5, 11:3); and its +inverse, Submultiplexsuperpartiens (3:8, 4:11, 5:14, 3:11) + +@end enumerate + +He then continues to subdivide each type in various ways. For the multiplex +proportions, for example, he indicates how many times greater the major number +is than the minor: + +@itemize + +@item If two times greater, the proportion is @emph{dupla}. If inverted, it's +called @emph{subdupla}. Examples: 2:1, 4:2, and 6:3. + +@item If three, @emph{tripla}; and its inversion, @emph{subtripla}. Example: +3:1, 6:2, and 9:3. + +@item If four, @emph{quadrupla}; and its inversion, @emph{subquadrupla}. +Example: 4:1, 8:2, and 12:3 + +@end itemize + +Other proportions were possible, but whether they were frequently used is +another question: + +@itemize + +@item 33:9, @emph{triplasuperbipartientetertias} +@item 51:15, @emph{triplasuperbipartientequintas} + +@end itemize + +@c TODO: add an example or two. O => 4/3, and its modern equivalent + +@seealso +@ref{mensural notation}. + + +@node Pythagorean comma +@section Pythagorean comma + +ES: coma pitagórica, +I: comma pitagorico, +F: comma pythagoricien, +D: Pythagoräisches Komma, +NL: komma van Pythagoras, +DK: pythagoræisk komma, +S: pytagoreiskt komma, +FI: pytagorinen komma. + +Originally, the interval by which the sum of six whole tones exceeds the octave +-- (9:8)^6 - 2:1 = 531441:524288, or 23.5 cents. + +Modern acoustical theory defines it as the interval by which twelve fifths +exceed seven octaves. To put it another way: A sequence of fifths that starts +on C eventually circles back to C. However, this C is 23.5 @ref{cent}s higher +than the C obtained by adding 7 octaves. The difference between those two +pitches is the Pythagorean comma. + +@seealso +@ref{cent}, @ref{temperament}. + + +@node quadruplet +@section quadruplet + +ES: cuatrillo, +I: quartina, +F: quartolet, +D: Quartole, +NL: kwartool, +DK: kvartol, +S: kvartol, +FI: kvartoli. + +@seealso +@ref{note value}. + + +@node quality +@section quality + +ES: ?, +I: qualità (?), +F: qualité (?), +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: laatu. + +The quality of a triad is determined by the precise arrangement of its +intervals. Tertian triads can be described as a series of three notes. The +first element is the root note (or simply @q{root}) of the chord, the second +note is the @q{third} of the chord, and the last note is the @q{fifth} of +the chord. These are described below: + +@multitable {Chord name} {Component intervals} {Example} {C, CM, Cma, Cmaj, CΔ} +@headitem Chord name + @tab Component intervals + @tab Example + @tab Symbol +@item major triad @tab major third/perfect fifth + @tab C-E-G + @tab C, CM, Cma, Cmaj, CΔ +@item minor triad @tab minor third/perfect fifth + @tab C-E♭-G + @tab Cm, Cmi, Cmin, C- +@item augmented triad @tab major third/augmented fifth + @tab C-E-G♯ + @tab C+, C^+, Caug +@item diminished triad @tab minor third/diminished fifth + @tab C-E♭-G♭ + @tab Cm(♭5), Cº, Cdim +@end multitable + +There are various types of seventh chords depending on the quality of the +original chord and the quality of the seventh added. + +Five common types of seventh chords have standard symbols. The chord quality +indications are sometimes superscripted and sometimes not (e.g. Dm7, Dm^7, +and D^m7 are all identical). The last three chords are not commonly used +except in jazz. + +@seealso +@ref{chord}. + + +@node quarter note +@section quarter note + +@itemize +@item UK: crotchet +@item ES: negra +@item I: semiminima, nera +@item F: noire +@item D: Viertel, Viertelnote +@item NL: kwartnoot +@item DK: fjerdedelsnode +@item S: fjärdedelsnot +@item FI: neljäsosanuotti +@end itemize + +@seealso +@ref{note value}. + + +@node quarter rest +@section quarter rest + +@itemize +@item UK: crotchet rest +@item ES: silencio de negra +@item I: pausa di semiminima +@item F: soupir +@item D: Viertelpause +@item NL: kwartrust +@item DK: fjerdedelspause +@item S: fjärdedelspaus +@item FI: neljäsosatauko +@end itemize + +@seealso +@ref{note value}. + + +@node quarter tone +@section quarter tone + +ES: cuarto de tonno, +I: ?, +F: quart de ton, +D: Viertelton, +NL: kwart toon, +DK: ?, +S: kvartston, +FI: neljännessävelaskel. + +An interval equal to half a semitone. + +@seealso +@ref{interval} + + +@node quintuplet +@section quintuplet + +ES: cinquillo, quintillo. +I: quintina, +F: quintolet, +D: Quintole, +NL: kwintool, +DK: kvintol, +S: kvintol, +FI: kvintoli. + +@seealso +@ref{note value}. + + +@node rallentando +@section rallentando + +ES: rallentando, +I: rallentando, +F: rallentando, en ralentissant, +D: rallentando, langsamer werden, +NL: rallentando, +DK: rallentando, +S: rallentando, +FI: rallerdando, hidastuen. + +[Italian] A performance indication, abbreviated @notation{rall.}. + +@seealso +@ref{ritardando}. + + +@node relative key +@section relative key + +ES: tono relativo, +I: tonalità relativa, +F: tonalité relative, +D: Paralleltonart, +NL: paralleltoonsoort, +DK: paralleltoneart, +S: parallelltonart, +FI: rinnakkaissävellaji. + +Major and minor keys that have the same key signature. + +@lilypond[quote,notime,relative=1,line-width=13.0\cm] +\key es \major +es1_"e flat major" f g as bes c d es +\bar "||" +@end lilypond + +@lilypond[quote,notime,relative=1,line-width=13.0\cm] +\key c \minor +c1_"c minor" d es f g a! b! c +\bar "||" +@end lilypond + +@seealso +@ref{key}, @ref{key signature}, @ref{major}, @ref{minor}. + + +@node repeat +@section repeat + +ES: repetición, +I: ritornello, +F: barre de reprise, +D: Wiederholung, +NL: herhaling, +DK: gen@-ta@-gel@-se, +S: repris, +FI: toisto. + +@lilypond[quote,relative=2,line-width=13.0\cm] +\key g \major +\time 4/4 +\repeat volta 2 { + g4 g d' d + e4 e d2 + c4 c b b + a a g2 +} +@end lilypond + +@seealso +No cross-references. + + +@node rest +@section rest + +ES: silencio, +I: pausa, +F: silence, +D: Pause, +NL: rust, +DK: pause, +S: paus, +FI: tauko. + +@c F: 'pause' if you mean a whole rest, 'silence' if you do not want to +@c specify the rest's value. + +@seealso +@ref{note value}. + + +@node rhythm +@section rhythm + +ES: ritmo, +I: ritmo, +F: rythme, +D: Rhythmus, +NL: ritme, +DK: rytme, +S: rytm, +FI: rytmi. + +@itemize + +@item Metrical rhythm in which every time value is a multiple or +fraction of a fixed unit of time, called @emph{beat}, and in which the +normal @emph{accent} recurs in regular intervals, called @emph{measure}. +The basic scheme of time values is called @emph{meter}. + +@item Measured rhythm which lacks regularly recurrent accent. In +modern notation such music appears as a free alternation of different +measures. + +@item Free rhythm, i.e., the use of temporal values having no common +metrical unit (beat). + +@end itemize + +@seealso +@ref{accent}, @ref{beat}, @ref{measure}, @ref{meter}. + +@node ritardando +@section ritardando + +ES: ritardando, +I: ritardando, +F: ritardando, en ralentissant, +D: ritardando, langsamer werden, +NL: ritardando, +DK: ritardando, +S: ritardando, +FI: ritardando, hidastuen, + +Gradually slackening in speed. Mostly abbreviated to rit.@: or ritard. + +@seealso +No cross-references. + + +@node ritenuto +@section ritenuto + +ES: ritenuto, +I: ritenuto, +F: ritenuto, en retenant, +D: ritenuto, +NL: ritenuto, +DK: ritenuto, +S: ritenuto, +FI: ritenuto, hidastaen. + +Immediate reduction of speed. + +@seealso +No cross-references. + + +@node scale +@section scale + +ES: escala, +I: scala, +F: gamme, +D: Tonleiter, +NL: toonladder, +DK: Skala, +S: skala, +FI: asteikko, sävelasteikko. + +@seealso +@ref{diatonic scale}. + + +@node scale degree +@section scale degree + +ES: grado (de la escala), +I: grado della scala, +F: degré [de la gamme], +D: Tonleiterstufe, +NL: trap [van de toonladder], +DK: skalatrin, +S: skalsteg (?), +FI: sävelaste, asteikon sävel. + +Names and symbols used in harmonic analysis to denote tones of the +scale as roots of chords. The most important are degrees I = tonic +(T), IV = sub@-do@-mi@-nant (S) and V = dominant (D). + +@lilypond[quote,notime,line-width=13.0\cm] +<< +\new Staff \relative c' { + c1 d e f g a b c +} + \lyrics { + << { I II III IV V VI VII I } + { T "" "" S D } >> +} +>> +@end lilypond + +@seealso +@ref{functional harmony}. + + +@node scordatura +@section scordatura + +ES: encordado, +I: scordatura, +F: à cordes ravallées, +D: Skordatur, +NL: ?, +DK: ?, +S: ?, +FI: epätavallinen viritys. + +[Italian: @emph{scordare}, @q{to mistune}] Unconventional +tuning of stringed instruments, particularly lutes or violins. Used +to: + +@itemize + +@item facilitate pitch combinations that would otherwise be difficult +or impossible + +@item alter the characteristic timbre of the instrument, for example, +to increase brilliance + +@item reinforce certain sonorities or tonalities by making them +available on open strings + +@item imitate other instruments + +@item etc. + +@end itemize + +Tunings that could be called @var{scordatura} first appeared early in +the 16th Century and became commonplace in the 17th. + +@seealso +No cross-references. + + +@node score +@section score + +ES: partitura, +I: partitura, +F: partition, conducteur (full score), +D: Partitur (full score), Klavierauszug (vocal score), +NL: partituur, +DK: partitur, +S: partitur, +FI: partituuri. + +A copy of orchestral, choral, or chamber music showing what each +instrument is to play, each voice to sing, having each part arranged +one underneath the other on different staves @ref{staff}. + +@seealso +No cross-references. + + +@node second +@section second + +ES: segunda, +I: secunda, +F: seconde, +D: Sekunde, +NL: secunde, +DK: sekund, +S: sekund, +FI: sekunti. + +The interval between two neighboring tones of a scale. A diatonic scale +consists of alternating semitones and whole tones, hence the size of a +second depends on the scale degrees in question. + +@seealso +@ref{diatonic scale}, @ref{interval}, @ref{semitone}, @ref{whole tone}. + + +@node semibreve +@section semibreve + +@itemize +@item US: whole note, +@item ES: redonda, +@item I: semibreve, +@item F: ronde, +@item D: Ganze, ganze Note, +@item NL: hele noot, +@item DK: helnode, +@item S: helnot, +@item FI: kokonuotti. +@end itemize + +Note value: called @notation{whole note} in the US. + +The semibreve is the basis for the @notation{tactus} in mensural notation +(i.e. music written before ca. 1600). + +@seealso +@ref{mensural notation}, @ref{note value}. + + +@node semitone +@section semitone + +ES: semitono, +I: semitono, +F: demi-ton, +D: Halbton, +NL: halve toon, +DK: halvtone, +S: halvton, +FI: puolisävel. + +The interval of a minor second. The (usually) smallest interval in European +composed music. The interval between two neighboring tones on the piano +keyboard -- including black and white keys -- is a semitone. An octave may +be divided into 12@w{ }semitones. + +@lilypond[quote,notime,relative=2,line-width=13.0\cm] +g1 gis s a bes s b! c +@end lilypond + +@seealso +@ref{interval}, @ref{chromatic scale}. + + +@node seventh +@section seventh + +ES: séptima, +I: settima, +F: septième, +D: Septime, +NL: septiem, +DK: septim, +S: septim, +FI: septimi. + +@seealso +@ref{interval}. + + +@node sextolet +@section sextolet + +@seealso +@ref{sextuplet}, @ref{note value}. + + +@node sextuplet +@section sextuplet + +ES: seisillo, +I: sestina, +F: sextolet, +D: Sextole, +NL: sextool, +DK: sekstol, +S: sextol, +FI: sekstoli. + +@seealso +@ref{note value}. + + +@node shake +@section shake + +@seealso +@ref{trill}. + + +@node sharp +@section sharp + +ES: sostenido, +I: diesis, +F: dièse, +D: Kreuz, +NL: kruis, +DK: kryds, +S: kors@-förtecken, +FI: korotusmerkki. + +@seealso +@ref{accidental}. + + +@node simile +@section simile + +ES: simile, +I: simile, +F: simile, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: samoin. + +[Italian: @q{in the same manner}] Performance direction: the music thus marked +is to be played in the same manner (i.e. with the same articulations, dynamics, +etc.) as the music that precedes it. + +@seealso +TODO: Where else could I refer the reader? + + +@node simple meter +@section simple meter + +ES: compás simple, compás de subdivisión binaria, +I: ?, +F: mesure binaire, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: kaksijakoinen tahtiosoitus. + +A meter in which the basic beat is subdivided in two: that is, a meter +that does not include triplet subdivision of the beat. + +@seealso +@ref{compound meter}, @ref{meter}. + + +@node sixteenth note +@section sixteenth note + +@itemize +@item UK: semiquaver +@item ES: semicorchea +@item I: semicroma +@item F: double croche +@item D: Sechzehntel, Sechzehntelnote +@item NL: zestiende noot +@item DK: sekstendedelsnode +@item S: sextondelsnot +@item FI: kuudestoistaosanuotti +@end itemize + +@seealso +@ref{note value}. + + +@node sixteenth rest +@section sixteenth rest + +@itemize +@item UK: semiquaver rest +@item ES: silencio de semicorchea +@item I: pausa di semicroma +@item F: quart de soupir +@item D: Sechzehntelpause +@item NL: zestiende rust +@item DK: sekstendedelspause +@item S: sextondelspaus +@item FI: kuudestoistaosatauko +@end itemize + +@seealso +@ref{note value}. + + +@node sixth +@section sixth + +ES: sexta, +I: sesta, +F: sixte, +D: Sexte, +NL: sext, +DK: sekst, +S: sext, +FI: seksti. + +@seealso +@ref{interval}. + + +@node sixty-fourth note +@section sixty-fourth note + +@itemize +@item UK: hemidemisemiquaver +@item ES: semifusa +@item I: semibiscroma +@item F: quadruple croche +@item D: Vierundsechzigstel, Vierundsechzigstelnote +@item NL: vierenzestigste noot +@item DK: fi@-re@-og@-tred@-sinds@-ty@-ven@-de@-dels@-no@-de +@item S: sextiofjärdedelsnot +@item FI: kuudeskymmenesneljäsosanuotti +@end itemize + +@seealso +@ref{note value}. + + +@node sixty-fourth rest +@section sixty-fourth rest + +@itemize +@item UK: hemidemisemiquaver rest +@item ES: silencio de semifusa +@item I: pausa di semibiscroma +@item F: seizième de soupir +@item D: Vierundsechzigstelpause +@item NL: vierenzestigste rust +@item DK: fi@-re@-og@-tred@-sinds@-ty@-ven@-de@-dels@-pau@-se +@item S: sextiofjärdedelspaus +@item FI: kuudeskymmenesneljäsosatauko +@end itemize + +@seealso +@ref{note value}. + + +@node slash repeat +@section slash repeat + +@seealso +@ref{percent repeat}. + + +@node slur +@section slur + +ES: ligadura (de expresión), +I: legatura (di portamento or espressiva), +F: liaison, coulé, +D: Bogen (Legatobogen, Phrasierungsbogen), +NL: fraseringsboog, legatoboog, streekboog, +DK: legatobue, fraseringsbue, +S: båge, +FI: kaari. + +A slur above or below a group of notes indicates that they are to be +played @ref{legato}, e.g., with one stroke of the violin bow or with +one breath in singing. + +@seealso +No cross-references. + + +@node solmization +@section solmization + +ES: solmisación, +I: solmisazione, +F: solmisation, +D: Solmisation, +NL: solmizatie, +DK: solmisation, +S: solmisation, +FI: suhteelliset laulunimet. + +General term for systems of designating the degrees of the +@notation{scale}, not by letters, but by syllables (@emph{do} (@emph{ut}), +@emph{re}, @emph{mi}, @emph{fa}, @emph{sol}, @emph{la}, @emph{si} +(@emph{ti})). + +@seealso +@ref{scale}, @ref{scale degree}. + + +@node sonata +@section sonata + +ES: sonata, +I: sonata, +F: sonate, +D: Sonate, +NL: sonate, +DK: sonate, +S: sonat, +FI: sonaatti. + +In its present-day meaning a sonata denotes an instrumental +composition for piano or for some other instrument with piano +accompaniment, which consists of three or four independant pieces, +called movements. + +@seealso +No cross-references. + + +@node sonata form +@section sonata form + +ES: forma sonata, +I: forma sonata, +F: [en] forme de sonate, +D: Sonatenform, +NL: hoofdvorm, sonatevorm, +DK: sonateform, +S: sonatform, +FI: sonaattimuoto. + +A form used frequently for single movements of the @emph{sonata}, +@emph{symphony}, quartet, etc. A movement written in sonata form falls into +three sections called @notation{exposition}, @notation{development} and +@notation{recapitulation}. In the exposition the composer introduces some +musical ideas, consisting of a number of themes; in the development section the +composer @emph{develops} this material, and in the recapitulation the composer +repeats the exposition, with certain modifications. The exposition contains a +number of themes that fall into two groups, often called first and second +subject. Other melodies occurring in each group are considered as continuations +of these two. The second theme is in another key, normally in the key of the +@notation{dominant} if the @notation{tonic} is @notation{major}, and in the +@notation{relative key} if the tonic is @notation{minor}. + +@seealso +@ref{dominant}, @ref{major}, @ref{minor}, @ref{relative key}, @ref{sonata}, +@ref{symphony}, @ref{tonic}. + + +@node song texts +@section song texts + +@seealso +@ref{lyrics}. + + +@node soprano +@section soprano + +ES: soprano, +I: soprano, +F: soprano, +D: Sopran, +NL: sopraan, +DK: sopran, +S: sopran, +FI: sopraano, korkea naisääni. + +The highest female voice. + +@seealso +No cross-references. + + +@node staccato +@section staccato + +ES: picado, +I: staccato, +F: staccato, piqué, détaché, +D: staccato, +NL: staccato, +DK: staccato, +S: staccato, +FI: staccato, lyhyesti, terävästi. + +Playing the note(s) short. Staccato is indicated by a dot above or +below the note head. + +@lilypond[quote,relative=2] +\key d \major +\time 4/4 + \partial 8 a8 | + d4-\staccato cis-\staccato b-\staccato cis-\staccato | + d2. + \bar "||" +@end lilypond + +@seealso +No cross-references. + + +@node staff +@section staff + +UK: stave, +ES: pentagrama, +I: pentagramma, rigo (musicale), +F: portée, +D: Notensystem, Notenzeile, +NL: (noten)balk, partij, +DK: nodesystem, +S: notsystem, +FI: nuottiviivasto. + +A staff (plural: staves) is a series of (normally five) horizontal +lines upon and between which the musical notes are written, thus +indicating (in connection with a @ref{clef}) their pitch. Staves for +@ref{percussion} instruments may have fewer lines. + +@seealso +No cross-references. + + +@node staves +@section staves + +@seealso +@ref{staff}. + + +@node stem +@section stem + +ES: plica, +I: gamba, +F: hampe, +D: Hals, Notenhals, Stiel, +NL: stok, +DK: hals, +S: skaft, +FI: nuottipalkki. + +Vertical line above or below a @ref{note head} shorter than a +whole note. + +@lilypond[quote,notime,relative=2] +\set Score.autoBeaming = ##f + g2_"1/2" g' s16 + g,4_"1/4" g' s16 + g,8_"1/8" g' s16 + g,16_"1/16" g' s16 +@end lilypond + +@seealso +@ref{beam}. + + +@node stringendo +@section stringendo + +ES: ?, +I: stringendo, +F: stringendo, en accélérant, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: kiihdyttäen, nopeuttaen. + +[Italian: @q{pressing}] Pressing, urging, or hastening the time, as to a +climax. + +@seealso +@ref{accelerando}. + + +@node strings +@section strings + +ES: arcos, cuerdas, +I: archi, +F: cordes, +D: Streicher, +NL: strijkers, +DK: strygere, +S: stråkar, +FI: jouset. + +A family of stringed musical instruments played with a bow. Strings +commonly used in a symphony orchestra are violin, viola, violoncello, +and double bass. + +@seealso +No cross-references. + + +@node strong beat +@section strong beat + +ES: tiempo fuerte, +I: tempo forte, +F: temps fort, +D: betonter Taktteil oder Taktschlag, +NL: thesis, +D: betonet taktslag, +S: betonat taktslag, +FI: tahdin vahva isku. + +@seealso +@ref{beat}, @ref{accent}, @ref{measure}, @ref{rhythm}. + + +@node subdominant +@section subdominant + +ES: subdominante, +I: sottodominante, +F: sous-dominante, +D: Subdominante, +NL: subdominant, +DK: subdominant, +S: subdominant, +FI: subdominantti, alidominantti. + +The fourth @notation{scale degree}. + +@seealso +@ref{functional harmony}, @ref{scale degree}. + + +@node submediant +@section submediant + +ES: submediante, +I: sopratonica, +F: sous-médiante, +D: Submediante, +NL: submediant, +DK: Submediant, +S: submediant, +FI: alikeskisävel. + +The sixth @notation{scale degree}. + +@seealso +@ref{functional harmony}, @ref{scale degree}, @ref{superdominant}. + + +@node subtonic +@section subtonic + +ES: subtónica, +I: sottotonica, +F: sous-tonique, +D: Subtonika, +NL: subtonica, +DK: Subtonika, +S: subtonika, +FI: subtoonika, alitoonika. + +The seventh @ref{scale degree}. + +@seealso +@ref{functional harmony}, @ref{scale degree}. + + +@node sul G +@section sul G + +ES: sobre la cuerda de Sol, +I: sul g, +F: sur la G, +D: auf G, auf der G-Saite, +NL: ?, +DK: ?, +S: ?, +FI: G-kielellä. + +Indicates that the indicated passage (or note) should be played on the +G string. + +@seealso +No cross-references. + + +@node superdominant +@section superdominant + +ES: superdominante, +I: sopradominante, +F: sus-dominante, +D: Superdominante, +NL: superdominant, +DK: superdominant, +S: superdominant, +FI: ylidominantti. + +The sixth @ref{scale degree}. + +@seealso +@ref{functional harmony}, @ref{scale degree}, @ref{submediant}. + + +@node supertonic +@section supertonic + +ES: supertónica, +I: sopratonica, +F: sus-tonique, +D: Supertonika, +NL: supertonica, +DK: supertonika, +S: supertonika, +FI: ylitoonika. + +The second @ref{scale degree}. + +@seealso +@ref{functional harmony}, @ref{scale degree}. + + +@node symphony +@section symphony + +ES: sinfonía, +I: sinfonia, +F: symphonie, +D: Sinfonie, Symphonie, +NL: symfonie, +DK: symfoni, +S: symfoni, +FI: sinfonia. + +A symphony may be defined as a @emph{sonata} for orchestra. + +@seealso +@ref{sonata}. + + +@node syncopation +@section syncopation + +ES: síncopa, +I: sincope, +F: syncope, +D: Synkope, +NL: syncope, +DK: synkope, +S: synkop, +FI: synkooppi. + +Any deliberate upsetting of the normal pulse of @ref{meter}, +@ref{accent}, and @ref{rhythm}. The occidental system of musical +rhythm rests upon the grouping of equal beats into groups of two or +three, with a regularly recurrent accent on the first beat of each +group. Any deviation from this scheme is felt as a disturbance or +contradiction between the underlaying (normal) pulse and the actual +(abnormal) rhythm. + +@lilypond[quote,relative=1] +\time 2/4 +\partial 8 d16 dis +e16 c'8 e,16 c'8 e,16 c' ~ +c4 +@end lilypond + +@seealso +No cross-references. + + +@node syntonic comma +@section syntonic comma + +ES: coma sintónica, coma de Dídimo, +I: comma sintonico (o didimico), +F: comma syntonique, +D: syntonisches Komma, +NL: syntonische komma, +DK: syntonisk komma, +S: syntoniskt komma, +FI: syntoninen komma, terssien taajuusero luonnollisessa ja +Pytagorisessa viritysjärjestelmässä. + +Named after Ptolemy's syntonic diatonic genus. Originally, the difference +by which the ditone exceeds the pure major third obtained by Pythagorean +tuning -- (9:8)^2 - 5:4 = 81:80, or 21.5@w{ }cents. + +Modern acoustical theory defines it as the interval by which four fifths exceed +the sum of two octaves plus a major third. (3:2)^4 - (2:1)^2 + (5:4) + +This comma is also known as the comma of Didymus, or didymic comma. + +@seealso +@ref{Pythagorean comma} + + +@node system +@section system + +ES: sistema, +I: accollatura, +F: système, +D: Notensystem, Partitur, +NL: systeem, +DK: system, +S: system, +FI: nuottijärjestelmä. + +The collection of staves (@notation{staff}), two or more, as used for writing +down of keyboard, chamber, choral, or orchestral music. + +@seealso +@ref{staff}. + + +@node temperament +@section temperament + +ES: temperamento, +I: temperamento, +F: tempérament, +D: Stimmung, Tem@-pe@-ra@-tur, +NL: stemming, temperatuur, +DK: temperatur, +S: temperatur, +FI: viritysjärjestelmä. + +Systems of tuning in which the intervals deviate from the acoustically +pure intervals. + +@seealso +@ref{meantone temperament}, @ref{equal temperament}. + + +@node tempo indication +@section tempo indication + +ES: indicación de tempo, +I: indicazione di tempo, +F: indication de tempo, +D: Zeitmaß, Tempobezeichnung, +NL: tempo aanduiding, +DK: tempobetegelse, +S: tempobeteckning, +FI: tempomerkintä. + +The rate of speed of a composition or a section thereof, ranging from the +slowest to the quickest, as is indicated by tempo marks as @notation{largo}, +@notation{adagio}, @notation{andante}, @notation{allegro}, and +@notation{presto}. + +@seealso +@ref{adagio}, @ref{allegro}, @ref{andante}, @ref{largo}, @ref{presto}. + + + +@node tenor +@section tenor + +ES: tenor, +I: tenore, +F: ténor, +D: Tenor, +NL: tenor, +DK: tenor, +S: tenor, +FI: tenori, korkea miesääni. + +The highest @q{natural} male voice (apart from @notation{countertenor}). + +@seealso +@ref{countertenor}. + + +@node tenth +@section tenth + +ES: décima, +I: decima, +F: dixième, +D: Dezime, +NL: deciem, +DK: decim, +S: decima, +FI: desimi. + +@seealso +@ref{note value}. + + +@node tenuto +@section tenuto + +ES: subrayado (tenuto), +I: tenuto, +F: tenue, tenuto, +D: gehalten, tenuo, +NL: tenuto, +DK: tenuto, +S: tenuto, +FI: viiva, tenuto. + +An indication that a particular note should be held for the whole +length, although this can vary depending on the composer and era. + +@seealso +No cross-references. + + +@node third +@section third + +ES: tercera, +I: terza, +F: tierce, +D: Terz, +NL: terts, +DK: terts, +S: ters, +FI: terssi. + +@seealso +@ref{interval}. + + +@node thirty-second note +@section thirty-second note + +@itemize +@item UK: demisemiquaver +@item ES: fusa +@item I: biscroma +@item F: triple croche +@item D: Zweiunddreissigstel, Zweiunddreissigstelnote +@item NL: twee@-endertig@-ste (32e) noot +@item DK: toogtredivtedelsnode +@item S: trettiotvåondelsnot +@item FI: kolmaskymmeneskahdesosanuotti +@end itemize + +@seealso +@ref{note value}. + + +@node thirty-second rest +@section thirty-second rest + +@itemize +@item UK: demisemiquaver rest +@item ES: silencio de fusa +@item I: pausa di biscroma +@item F: huitième de soupir +@item D: Zweiunddreissigstel@-pause +@item NL: twee@-endertig@-ste (32e) rust +@item DK: toogtredivtedelspause +@item S: trettiotvåondelspaus +@item FI: kolmaskymmeneskahdesosatauko +@end itemize + +@seealso +@ref{note value}. + + +@node thorough bass +@section thorough bass + +@seealso +@ref{figured bass}. + + +@node tie +@section tie + +ES: ligadura de prolongación, ligadura de unión, +I: legatura (di valore), +F: liaison (de tenue), +D: Haltebogen, Bindebogen, +NL: overbinding, bindingsboog, +DK: bindebue, +S: bindebåge, överbindning, +FI: sitominen. + +A curved line, identical in appearance with the @ref{slur}, which +connects two succesive notes of the same pitch, and which has the +function of uniting them into a single sound (tone) equal to the +combined durations. + +@lilypond[quote,notime,relative=2] +g2 ~ g4. r8 +@end lilypond + + +@node time +@section time + +@seealso +@ref{meter}. + + +@node time signature +@section time signature + +ES: indicación de compás, +I: segni di tempo, +F: métrique, chiffrage (chiffres indicateurs), indication de mesure, +D: Taktangabe, Angabe der Taktart, +NL: maatsoort, +DK: taktangivelse, +S: taktartssignatur, +FI: tahtiosoitus. + +The sign placed at the beginning of a composition to indicate its +meter. It most often takes the form of a fraction, but a few signs +derived from mensural notation and proportions are also employed. + +@seealso +@ref{mensural notation}, @ref{mensuration sign}, @ref{meter}. + + +@node tone +@section tone + +ES: tono, +I: suono, +F: ton, son, +D: Ton, +NL: toon, +DK: tone, +S: ton, +FI: ääni. + +A sound of definite pitch and duration, as distinct from @emph{noise}. +Tone is a primary building material of music. + +@c Music from the 20th century may be based on atonal sounds. Meh, not so much + +@seealso +No cross-references. + + +@node tonic +@section tonic + +ES: tónica, +I: tonica, +F: tonique, +D: Tonika, +NL: tonica, +DK: tonika, +S: tonika, +FI: toonika. + +The first @notation{scale degree}. + +@seealso +@ref{functional harmony}, @ref{scale degree}. + + +@node transposing instrument +@section transposing instrument + +ES: instrumento transpositor, +I: ?, +F: instrument transpositeur, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: transponoitava soitin. + +Instruments whose notated pitch is different from their sounded pitch. Except +for those whose notated and sounding pitches differ by one or more octaves (to +reduce the number of ledger lines needed), most such instruments are identified +by the letter name of the pitch class of their fundamental. The pitch class is +the note that @emph{sounds} (disregarding the octave in which it sounds) when +the instrument plays a notated C. + +For example: when played on the B-flat clarinet, the note middle C @emph{sounds} +the B-flat one tone lower. If played on the A clarinet, the same written +note sounds the A (one and half tones -- a minor third -- lower). + +Not all transposing instruments include the pitch class in their name: + +@itemize + +@item English horn (in F) + +@item Alto flute (in G) + +@end itemize + +@seealso +@ref{concert pitch}. + + +@node transposition +@section transposition + +ES: transporte, +I: trasposizione, +F: transposition, +D: Transposition, +NL: transpositie, +DK: transposition, +S: transponering, +FI: transponointi. + +Shifting a melody up or down in pitch, while keeping the same +relative pitches. + +@lilypond[quote,line-width=13.0\cm] +\context Staff { + \time 3/4 + \relative c'' { + \key g \major + d4 g,8 a b c | d4 g, g | e' c8 d e fis | g4 g, g \bar "|." + } +} +@end lilypond + +@lilypond[quote,line-width=13.0\cm] +\context Staff { + \time 3/4 + \transpose c bes \relative c'' { + \key g \major + d4 g,8 a b c | d4 g, g | e' c8 d e fis | g4 g, g \bar "|." + } +} +@end lilypond + +@seealso +No cross-references. + + +@node treble clef +@section treble clef + +ES: clave de sol, +I: chiave di violino, +F: clef de sol, +D: Violinschlüssel, Sopranschlüssel, +NL: viool sleutel, +DK: diskantnøgle, +S: diskantklav, +FI: diskanttiavain. + +@seealso +@ref{G clef}. + + +@node tremolo +@section tremolo + +ES: trémolo, +I: tremolo, +F: trémolo, +D: Tremolo, +NL: tremolo, +DK: tremolo, +S: tremolo, +FI: tremolo. + +On stringed instruments: + +@enumerate + +@item The quick reiteration of the same tone, produced by a rapid +up-and-down movement of the bow. + +@item Or, the rapid alternation between two notes of a @ref{chord}, usually +in the distance of a third (@ref{interval}). + +@end enumerate + +@lilypond[quote,notime,relative=1] + e2:32_"a" + f:32 [ e8:16 f:16 g:16 a:16 ] s4 + \repeat tremolo 8 { e32_"b" g } +@end lilypond + +@seealso +@ref{strings} + + +@node triad +@section triad + +ES: tríada, +I: triade, +F: triade, accord parfait, accord de trois sons, +D: Drei@-klang, +NL: drieklank, +DK: treklang, +S: treklang, +FI: kolmisointu. + +@seealso +@ref{chord}. + + +@node trill +@section trill + +ES: trino, +I: trillo, +F: trille, tremblement, battement (cadence), +D: Triller, +NL: triller, +DK: trille, +S: drill, +FI: trilli. + +@seealso +@ref{ornament}. + + +@node triple meter +@section triple meter + +ES: compás ternario, +I: tempo ternario, +F: mesure ternaire, +D: in drei, ungerader Takt, +NL: driedelige maatsoort, +DK: tredelt takt, +S: tretakt, +FI: kolmijakoinen. + +@seealso +@ref{meter}. + + +@node triplet +@section triplet + +ES: tresillo, +I: terzina, +F: triolet, +D: Triole, +NL: triool, +DK: triol, +S: triol, +FI: trioli. + +@seealso +@ref{note value}. + + +@node tritone +@section tritone + +ES: tritono, +I: tritono, +F: triton, +D: Tritonus, +NL: tritoon, +DK: tritonus, +S: tritonus, +FI: tritonus. + +@seealso +@ref{interval}. + + +@node tuning fork +@section tuning fork + +ES: diapasón, horquilla de afinación, +I: diapason, corista, +F: diapason, +D: Stimmgabel, +NL: stemvork, +DK: stemmegaffel, +S: stämgaffel, +FI: viritysavain. + +A two-pronged piece of steel used to indicate an absolute pitch, usually for +@emph{A} above middle C (440 cps/Hz), which is the international tuning +standard. Tuning forks for other pitches are available. + +@seealso +@ref{middle C}. + + +@node tuplet +@section tuplet + +A non-standard subdivision of a beat or part of a beat, usually +indicated with a bracket and a number indicating the number of +subdivisions. + +@seealso +@ref{triplet}, @ref{note value}. + + +@node turn +@section turn + +ES: grupeto (circular), +I: gruppetto, +F: grupetto, +D: Doppelschlag, +NL: dubbelslag, +DK: dobbeltslag, +S: dubbelslag, +FI: korukuvio. + +@seealso +@ref{ornament}. + + +@node unison +@section unison + +ES: unísono, +I: unisono, +F: unisson, +D: unisono, +NL: unisono, +DK: unison, +S: unison, +FI: unisono, yksiäänisesti. + +Playing of the same notes or the same melody by various instruments +(voices) or by the whole orchestra (choir), either at exactly the same +pitch or in a different octave. + +@seealso +No cross-references. + + +@node upbeat +@section upbeat + +ES: anacrusa, +I: anacrusi, +F: anacrouse, levée, +D: Auftakt, +NL: opmaat, +DK: optakt, +S: upptakt, +FI: kohotahti. + +@seealso +@ref{anacrusis} + + +@node voice +@section voice + +ES: voz, +I: voce, +F: voix, +D: Stimme, +NL: stem, +DK: stemme, +S: stämma, +FI: ääni, lauluääni. + +@itemize + + @item Human voices: + + @itemize + @item @ref{soprano} + @item @ref{mezzo-soprano} + @item @ref{contralto} + @item @ref{tenor} + @item @ref{baritone} + @item @ref{bass} + @end itemize + + @item A melodic layer or part of a polyphonic composition. + +@end itemize + +@seealso +No cross-references. + + +@node volta +@section volta + +ES: vez, primera y segunda vez, +I: volta, +F: volta, fois, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: yksi kertauksen maaleista. + +[Italian: @q{time} (instance, not duration)] An ending, such as a first +or second ending. LilyPond extends this idea to any number, and allows any text +(not just a number) -- to serve as the @notation{volta} text. + +@seealso +No cross-references. + + +@node weak beat +@section weak beat + +ES: tiempo débil, +I: tempo debole, arsi, +F: temps faible, +D: unbetonter Taktteil oder Taktschlag, +NL: arsis, +DK: ubetonet taktslag, +S: obetonat taktslag, +FI: tahdin heikko isku. + +@seealso +@ref{beat}, @ref{measure}, @ref{rhythm}. + + +@node whole note +@section whole note + +@itemize +@item UK: semibreve +@item ES: redonda +@item I: semibreve +@item F: ronde +@item D: Ganze, ganze Note +@item NL: hele noot +@item DK: helnode +@item S: helnot +@item FI: kokonuotti +@end itemize + +@seealso +@ref{note value}. + + +@node whole rest +@section whole rest + +@itemize +@item UK: semibreve rest +@item ES: silencio de redonda +@item I: pausa di semibreve +@item F: pause +@item D: ganze Pause, ganztaktige Pause +@item NL: hele rust +@item DK: helnodespause +@item S: helpaus +@item FI: kokotauko +@end itemize + +@seealso +@ref{note value}. + + +@node whole tone +@section whole tone + +ES: tono (entero), +I: tono intero, +F: ton entier, +D: Ganzton, +NL: hele toon, +DK: heltone, +S: helton, +FI: kokoaskel. + +The interval of a major second. The interval between two tones +on the piano keyboard with exactly one key between them -- including +black and white keys -- is a whole tone. + +@seealso +@ref{interval}. + + +@node woodwind +@section woodwind + +ES: maderas, +I: legni, +F: les bois, +D: Holzbläser, +NL: houtblazers, +DK træblæsere, +S: träblåsare, +FI: puupuhaltimet. + +A family of blown wooden musical instruments. Today some of these +instruments are actually made from metal. The woodwind instruments +commonly used in a symphony orchestra are flute, oboe, clarinet, +saxophone, and bassoon. + +@seealso +No cross-references. + + +@node Duration names notes and rests +@chapter Duration names notes and rests + +@multitable @columnfractions .12 .22 .22 .22 .22 + +@headitem Lang. @tab note name + @tab rest name + @tab note name + @tab rest name +@item @strong{US} @tab long + @tab long rest + @tab breve + @tab breve rest +@item @strong{UK} @tab longa + @tab longa rest + @tab breve + @tab breve rest +@item @strong{ES} @tab longa + @tab silencio de longa + @tab cuadrada + @tab silencio de cuadrada +@item @strong{IT} @tab longa + @tab pausa di longa + @tab breve + @tab pausa di breve +@item @strong{FR} @tab longa + @tab quadruple-pause + @tab brève + @tab double-pause +@item @strong{DE} @tab Longa + @tab longa Pause + @tab Brevis + @tab brevis Pause +@item @strong{NL} @tab longa + @tab longa rust + @tab brevis + @tab brevis rust +@item @strong{DK} @tab longa + @tab longanodespause + @tab brevis + @tab brevis(nodes)pause +@item @strong{SE} @tab longa + @tab longapaus + @tab brevis + @tab brevispaus +@item @strong{FI} @tab longa-nuotti + @tab longa-tauko + @tab brevis-nuotti, kaksoiskoko@-nuotti + @tab brevis-tauko, kaksoiskoko@-tauko + +@end multitable + +@multitable @columnfractions .12 .22 .22 .22 .22 + +@headitem Lang. @tab note name + @tab rest name + @tab note name + @tab rest name +@item @strong{US} @tab whole note + @tab whole rest + @tab half note + @tab half rest +@item @strong{UK} @tab semibreve + @tab semibreve rest + @tab minim + @tab minim rest +@item @strong{ES} @tab redonda + @tab silencio de redonda + @tab blanca + @tab silencio de blanca +@item @strong{IT} @tab semibreve + @tab pause di semibreve + @tab minima + @tab pausa di minima +@item @strong{FR} @tab ronde + @tab pause + @tab blanche + @tab demi-pause +@item @strong{DE} @tab ganze Note + @tab ganze Pause + @tab halbe Note + @tab halbe Pause +@item @strong{NL} @tab hele noot + @tab hele rust + @tab halve noot + @tab halve rust +@item @strong{DK} @tab helnode + @tab helnodespause + @tab halvnode + @tab halvnodespause +@item @strong{SE} @tab helnot + @tab helpaus + @tab halvnot + @tab halvpaus +@item @strong{FI} @tab kokonuotti + @tab kokotauko + @tab puolinuotti + @tab puolitauko + +@end multitable + +@multitable @columnfractions .12 .22 .22 .22 .22 + +@headitem Lang. @tab note name + @tab rest name + @tab note name + @tab rest name +@item @strong{US} @tab quarter note + @tab quarter rest + @tab eighth note + @tab eighth rest +@item @strong{UK} @tab crotchet + @tab crotchet rest + @tab quaver + @tab quaver rest +@item @strong{ES} @tab negra + @tab silencio de negra + @tab corchea + @tab silencio de corchea +@item @strong{IT} @tab semiminima, nera + @tab pausa di semiminima, pausa di nera + @tab croma + @tab pausa di croma +@item @strong{FR} @tab noire + @tab soupir* + @tab croche* + @tab demi-soupir +@item @strong{DE} @tab Viertelnote + @tab Viertelpause + @tab Achtelnote + @tab Achtelpause +@item @strong{NL} @tab kwartnoot + @tab kwartrust + @tab achtste noot + @tab achtste rust +@item @strong{DK} @tab fjerdedelsnode + @tab fjerdedelspause + @tab ottendedelsnode + @tab ottendedelspause +@item @strong{SE} @tab fjärdedelsnot + @tab fjärdedelspaus + @tab åttondelsnot + @tab åttondelspaus +@item @strong{FI} @tab neljäsosa@-nuotti + @tab neljäsosa@-tauko + @tab kahdeksasosa@-nuotti + @tab kahdeksasosa@-tauko + +@end multitable + +* About the French naming system: @notation{croche} refers to the note's +@q{hook}. Therefore, from the eighth note on, the note names mean @q{hook}, +@q{doubled hook}, @q{trebled hook}, and so on. + +The rest names are based on the @notation{soupir}, or quarter rest. +Subsequent rests are expressed as fractions thereof: half a +@notation{soupir}, a quarter of a @notation{soupir}, and so on. + +Each of the following tables contains one type of note and its matching rest, +with abbreviations that apply to both notes and rests. Just switch the part +that means @q{note} with the part that means @q{rest}, for example: + +@itemize + +@item English: 16th @strong{note}, 16th @strong{rest} +@item German: 32tel-@strong{Note}, 32tel-@strong{Pause} +@item Finnish: 64-osa@strong{nuotti}, 64-osa@strong{tauko} + +@end itemize + +Editor's note: I put a dash @q{-} when I could not find a language-specific +abbreviation for a duration name. If you know of one that I missed, please +send it to me, care of the lilypond-user discussion list. + +@multitable @columnfractions .10 .35 .35 .20 + +@headitem Lang. @tab Note name + @tab Rest name + @tab Abbr. +@item @strong{US} @tab sixteenth note + @tab sixteenth rest + @tab 16th note +@item @strong{UK} @tab semiquaver + @tab semiquaver rest + @tab - +@item @strong{ES} @tab semicorchea + @tab silencio de semicorchea + @tab - +@item @strong{IT} @tab semicroma + @tab pausa di semicroma + @tab - +@item @strong{FR} @tab double croche + @tab quart de soupir + @tab - +@item @strong{DE} @tab Sechzehntelnote + @tab Sechzehntelpause + @tab 16tel-Note +@item @strong{NL} @tab zes@-ti@-ende noot + @tab zes@-ti@-ende rust + @tab 16e noot +@item @strong{DK} @tab sekstendedelsnode + @tab sekstendedelspause + @tab - +@item @strong{SE} @tab sextondelsnot + @tab sextondelspaus + @tab - +@item @strong{FI} @tab kuudes@-toistaosa@-nuotti + @tab kuudes@-toistaosa@-tauko + @tab 16-osanuotti + +@end multitable + +@multitable @columnfractions .10 .35 .35 .20 + +@headitem Lang. @tab Note name + @tab Rest name + @tab Abbr. +@item @strong{US} @tab thirty-second note + @tab thirty-second rest + @tab 32nd note +@item @strong{UK} @tab demisemiquaver + @tab demisemiquaver rest + @tab - +@item @strong{ES} @tab fusa + @tab silencio de fusa + @tab - +@item @strong{IT} @tab biscroma + @tab pausa di biscroma + @tab - +@item @strong{FR} @tab triple croche + @tab huitième de soupir + @tab - +@item @strong{DE} @tab Zweiunddreißig@-stelnote + @tab Zweiunddreißig@-stelpause + @tab 32tel-Note +@item @strong{NL} @tab twee@-endertigste noot + @tab twee@-endertigste rust + @tab 32e noot +@item @strong{DK} @tab toogtredivtedelsnode + @tab toogtredivtedelspause + @tab - +@item @strong{SE} @tab trettio@-tvåondelsnot + @tab trettio@-tvåondelspaus + @tab - +@item @strong{FI} @tab kolmas@-kymmenes@-kahdesosa@-nuotti + @tab kolmas@-kymmenes@-kahdesosa@-tauko + @tab 32-osanuotti + +@end multitable + +@multitable @columnfractions .10 .35 .35 .20 + +@headitem Lang. @tab Note name + @tab Rest name + @tab Abbr. +@item @strong{US} @tab sixty-fourth note + @tab sixty-fourth rest + @tab 64th note +@item @strong{UK} @tab hemidemisemiquaver + @tab hemidemisemiquaver rest + @tab - +@item @strong{ES} @tab semifusa + @tab silencio de semifusa + @tab - +@item @strong{IT} @tab semibiscroma + @tab pausa di semibiscroma + @tab - +@item @strong{FR} @tab quadruple croche + @tab seizième de soupir + @tab - +@item @strong{DE} @tab Vierundsechzigstelnote + @tab Vierundsechzigstelpause + @tab 64tel-Note +@item @strong{NL} @tab vierenzestigste noot + @tab vierenzestigste rust + @tab 64e noot +@item @strong{DK} @tab fireog@-tredsindstyven@-dedelsnode + @tab fireog@-tredsindstyven@-dedelspause + @tab - +@item @strong{SE} @tab sextiofjärdedelsnot + @tab sextiofjärdedelspaus + @tab - +@item @strong{FI} @tab kuudes@-kymmenes@-neljäsosa@-nuotti + @tab kuudes@-kymmenes@-neljäsosa@-tauko + @tab 64-osanuotti + +@end multitable + +@multitable @columnfractions .10 .35 .35 .20 + +@headitem Lang. @tab Note name + @tab Rest name + @tab Abbr. +@item @strong{US} @tab one-hundred-twenty-eighth note + @tab one-hundred-twenty-eighth rest + @tab 128th note +@item @strong{UK} @tab semihemidemisemiquaver + @tab semihemidemisemiquaver rest + @tab - +@item @strong{ES} @tab garrapatea + @tab silencio de garrapatea + @tab - +@item @strong{IT} @tab fusa + @tab pausa di fusa + @tab - +@item @strong{FR} @tab quintuple croche + @tab trente-deuxième de soupir @tab - +@item @strong{DE} @tab Hundert@-achtundzwanzigstel@-note + @tab Hundert@-achtundzwanzigstel@-pause @tab 128tel-Note +@item @strong{NL} @tab honderd@-acht@-en@-twintigste noot + @tab honderd@-acht@-en@-twintigste rust + @tab 128e noot +@item @strong{DK} @tab hundrede@-otte@-og@-tyvendedels@-node + @tab hundrede@-otte@-og@-tyvendedels@-pause + @tab - +@item @strong{SE} @tab hundratjugoåttondelsnot + @tab hundratjugoåttondelspaus + @tab - +@item @strong{FI} @tab sadas@-kahdes@-kymmenes@-kahdeksasosa@-nuotti + @tab sadas@-kahdes@-kymmenes@-kahdeksasosa@-tauko + @tab 128-osanuotti + +@end multitable + +@multitable @columnfractions .10 .35 .35 .20 + +@headitem Lang. @tab Note name + @tab Rest name + @tab Abbr. +@item @strong{US} @tab two-hundred-fifty-sixth note + @tab two-hundred-fifty-sixth rest + @tab 256th note +@item @strong{UK} @tab demisemihemidemisemiquaver + @tab demisemihemidemisemiquaver rest + @tab - +@item @strong{ES} @tab semigarrapatea + @tab silencio de semigarrapatea @tab - +@item @strong{IT} @tab semifusa + @tab pausa di semifusa + @tab - +@item @strong{FR} @tab sextuple croche + @tab soixante-quatrième de soupir @tab - +@item @strong{DE} @tab Zweihundert@-sechsundfünfzigstel@-note + @tab Zweihundert@-sechsundfünfzigstelpause @tab 256tel-Note +@item @strong{NL} @tab tweehonderd@-zesenvijftigste noot + @tab tweehonderd@-zesenvijftigste rust + @tab 256e noot +@item @strong{DK} @tab tohundrede@-seks@-og@-halvtredsendedels@-node + @tab tohundrede@-seks@-og@-halvtredsendedels@-pause + @tab - +@item @strong{SE} @tab tvåhundra@-femtiosjättedelsnot + @tab tvåhundra@-femtiosjättedelspaus + @tab - +@item @strong{FI} @tab kahdes@-sadas@-viides@-kymmenes@-kuudesosa@-nuotti + @tab kahdes@-sadas@-viides@-kymmenes@-kuudesosa@-tauko + @tab 256-osanuotti + +@end multitable + +@seealso +@ref{mensural notation} + + +@node Pitch names +@chapter Pitch names + +@ignore + -is/-es endings for Danish per Rune Zedeler, pace, + and for Finnish per Risto Vääräniemi; + -iss/-ess endings for Swedish per Mats Bengtsson + originally spaced with @columnfractions .105 .145 .125 .125 .125 .125 .125 .125 + + NOTE: Please leave the first line as-is -- that is, do not wrap it to + multiple lines -- as texinfo needs it to allow enough space for the + table entries. (For the curious, it's a list of the widest items in + each column of the table. Romance pitch names are two characters, + except for g (sol) ... so there you go.) +@end ignore + +@multitable {g-sharp} {sol sostenido} {sol diesis} {sol dièse} {Gis} {gis} {gis} {giss} {gis} +@headitem EN @tab ES @tab I @tab F @tab D @tab NL @tab DK @tab S @tab FI +@item @strong{c} @tab do @tab do @tab ut @tab C @tab c @tab c @tab c @tab c +@item @strong{c-sharp} @tab do sostenido @tab do diesis @tab ut dièse + @tab Cis @tab cis @tab cis @tab ciss @tab cis +@item @strong{d-flat} @tab re bemol @tab re bemolle @tab ré bémol @tab Des + @tab des @tab des @tab dess @tab des +@item @strong{d} @tab re @tab re @tab ré @tab D @tab d @tab d @tab d @tab d +@item @strong{d-sharp} @tab re sostenido @tab re diesis @tab re dièse @tab Dis + @tab dis @tab dis @tab diss @tab dis +@item @strong{e-flat} @tab mi bemol @tab mi bemolle @tab mi bémol @tab Es + @tab es @tab es @tab ess @tab es +@item @strong{e} @tab mi @tab mi @tab mi @tab E @tab e @tab e @tab e @tab e +@item @strong{f-flat} = e @tab fa bemol @tab fa bemolle @tab fa bémol + @tab Fes @tab fes @tab fes @tab fess @tab fes +@item @strong{f} @tab fa @tab fa @tab fa @tab F @tab f @tab f @tab f @tab f +@item @strong{e-sharp} = f @tab mi sostenido @tab mi diesis @tab mi dièse + @tab Eis @tab eis @tab eis @tab eiss @tab eis +@item @strong{f-sharp} @tab fa sostenido @tab fa diesis @tab fa dièse @tab Fis + @tab fis @tab fis @tab fiss @tab fis +@item @strong{g-flat} @tab sol bemol @tab sol bemolle @tab sol bémol @tab Ges + @tab ges @tab ges @tab gess @tab ges +@item @strong{g} @tab sol @tab sol @tab sol @tab G @tab g @tab g @tab g @tab g +@item @strong{g-sharp} @tab sol sostenido @tab sol diesis @tab sol dièse + @tab Gis @tab gis @tab gis @tab giss @tab gis +@item @strong{a-flat} @tab la bemol @tab la bemolle @tab la bémol @tab As + @tab as @tab as @tab ass @tab as +@item @strong{a} @tab la @tab la @tab la @tab A @tab a @tab a @tab a @tab a +@item @strong{a-sharp} @tab la sostenido @tab la diesis @tab la dièse @tab Ais + @tab ais @tab ais @tab aiss @tab ais +@item @strong{b-flat} @tab si bemol @tab si bemolle @tab si bémol @tab B + @tab bes @tab b @tab b @tab b +@item @strong{b} @tab si @tab si @tab si @tab H @tab b @tab h @tab h @tab h +@item @strong{c-flat} = b @tab do bemol @tab do bemolle @tab ut bémol @tab Ces + @tab ces @tab ces @tab cess @tab ces +@item @strong{b-sharp} = c @tab si sostenido @tab si diesis @tab si dièse + @tab His @tab bis @tab his @tab hiss @tab his +@end multitable + + +@menu +* Literature used:: +@end menu + +@node Literature used +@unnumberedsec Literature used + +@itemize +@item Apel, Willi, ed. @cite{The Harvard Dictionary of Music}. +Cambridge: Belknap Press (Harvard University Press), 1944. + +@item Krohn, Felix. @cite{Lyhyt musiikkioppi}. Porvoo, Helsinki, Finland: +WSOY, 1976. + +@item Leuchtmann, Horst, ed. @cite{Polyglottes Wörterbuch der musikalischen +Terminologie}. Kassel, 1980. + +@item Hornby, Albert Sydney. @cite{Oxford Advanced Learner's Dictionary of +Current English}, 3rd ed. London: Oxford University Press, 1974. + +@item Porter, Noah. @cite{Webster's Revised Unabridged Dictionary}. +Springfield, Massachusetts: G. & C. Merriam Company, 1913. + +@item Randall, Don, ed. @cite{The New Harvard Dictionary of Music}. +Cambridge: Belknap Press (Harvard University Press), 1986. + +@item Riemann, Hugo. @cite{Musik-lexicon}. Berlin, 1929. + +@end itemize + +@bye diff --git a/Documentation/notation.tely b/Documentation/notation.tely new file mode 100644 index 0000000000..ff1d35e253 --- /dev/null +++ b/Documentation/notation.tely @@ -0,0 +1,232 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore +@setfilename lilypond-notation.info +@settitle GNU LilyPond Notation Reference +@documentencoding UTF-8 +@documentlanguage en + +@include macros.itexi + +@afourpaper + +@c Keep this here, since it pertains to the direntry below. +@ignore +Distributions will want to install lilypond.info in postinstall, doing: + + install-info --info-dir=/usr/share/info out[-www]/lilypond.info + + * Prepend GNU for dir, must be unique. + + * Do not list the `lilypond' node at toplevel, so that `info lilypond' + goes to Top. + + * List all commands in direntry. + +@c * lilypond: (lilypond-application)Running LilyPond. Invoking the +@c LilyPond program. +@end ignore + + +@c +@c Info files are no longer installed in a subdirectory, images are +@c expected to be found in lilypond/ subdirectory. +@dircategory GNU LilyPond --- the music typesetter +@direntry +* LilyPond Learning Manual: (lilypond-learning). Start here. +* Music Glossary: (music-glossary). For non-English users. +* LilyPond: (lilypond-notation). LilyPond Notation Reference. +* LilyPond Snippets: (lilypond-snippets). Short tricks, tips, and examples. +* LilyPond Internals Reference: (lilypond-internals). Definitions for tweaking. +* LilyPond Application Usage: (lilypond-application). Installing and running applications. +* abc2ly: (lilypond-application)Invoking abc2ly. Importing ABC. +* convert-ly: (lilypond-application)Updating files with convert-ly. Older LilyPond versions. +* etf2ly: (lilypond-application)Invoking etf2ly. Importing Finale. +* lilypond-book: (lilypond-application)LilyPond-book. Integrating text and music. +* midi2ly: (lilypond-application)Invoking midi2ly. Importing MIDI. +* musicxml2ly: (lilypond-application)Invoking musicxml2ly. Importing MusicXML. +@end direntry + +@c don't remove this comment. +@ignore +@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival +@omfdescription Notation Reference of the LilyPond music engraving system +@omftype user manual +@omfcategory Applications|Publishing +@omflanguage English +@end ignore + +@ifnottex +@node Top +@top GNU LilyPond --- Notation Reference +@chapheading The music typesetter +@c HJJ: Info needs `@top', which is a synonym for `@unnumbered' in TeX. +@end ifnottex + + +@ifhtml +@ifclear bigpage +This document is also available as a +@uref{source/Documentation/notation.pdf,PDF} and as +@uref{source/Documentation/notation-big-page.html,one big page}. +@end ifclear +@ifset bigpage +This document is also available as a +@uref{source/Documentation/notation.pdf,PDF} and as a +@uref{source/Documentation/notation/index.html,HTML indexed multiple pages}. +@end ifset +@end ifhtml + + +@c This produces the unified index +@syncodeindex fn cp +@syncodeindex vr cp + + +@finalout + +@titlepage +@title LilyPond +@subtitle The music typesetter +@titlefont{Notation Reference} +@author The LilyPond development team + +Copyright @copyright{} 1999--2009 by the authors + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections. +A copy of the license is included in the section entitled ``GNU +Free Documentation License''. +@end quotation + +@vskip 20pt + +For LilyPond version @version{} +@end titlepage + +@copying +Copyright @copyright{} 1999--2009 by the authors + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections. +A copy of the license is included in the section entitled ``GNU +Free Documentation License''. +@end quotation +@end copying + +@ifnottex +This file documents GNU LilyPond. + +Copyright 1999--2009 by the authors + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections. +A copy of the license is included in the section entitled ``GNU +Free Documentation License''. +@end quotation +@end ifnottex + +@ifnottex +This is the Notation Reference (NR) for GNU LilyPond version @version{}. +For more information about how this fits with the other +documentation, see +FIXME FIXME FIXME +@c @rlearning{About the documentation}. + +@cindex web site +@cindex URL + +More information can be found at +@uref{http://@/www@/.lilypond@/.org/}. The website contains on-line copies +of this and other documentation. + +@include dedication.itely + +@menu +* Musical notation:: Musical notation. +* Specialist notation:: Notation which is only used for + specific purposes. +* General input and output:: General information about + LilyPond input and output. +* Spacing issues:: Display of output on paper. +* Changing defaults:: Tuning output. +* Interfaces for programmers:: Expert usage. + +Appendices + +* Notation manual tables:: Tables and charts. +* Cheat sheet:: Summary of LilyPond syntax. +* LilyPond grammar:: Syntax diagram for LilyPond parser. +* GNU Free Documentation License:: License of this document. +* LilyPond command index:: +* LilyPond index:: +@end menu +@end ifnottex +@c * Literature list:: Reference works about music notation. + +@contents + + +@include notation/notation.itely +@include notation/specialist.itely + +@include notation/input.itely +@include notation/spacing.itely + +@include notation/changing-defaults.itely +@include notation/programming-interface.itely + + +@c @include notation/literature.itely +@include notation/notation-appendices.itely +@include notation/cheatsheet.itely + +@node LilyPond grammar +@appendix LilyPond grammar + +This appendix contains a description of the LilyPond grammar, as +output from the parser. + +@verbatiminclude ly-grammar.txt + +@include fdl.itexi + +@node LilyPond command index +@appendix LilyPond command index + +This index lists all the LilyPond commands and keywords with links +to those sections of the manual which describe or discuss their +use. Each link is in two parts. The first part points to the +exact location in the manual where the command or keyword appears; +the second part points to the start of the section of the manual +in which the command or keyword appears. + +@printindex ky + +@node LilyPond index +@appendix LilyPond index + +In addition to all the LilyPond commands and keywords, this index +lists musical terms and words which relate to each of them, with +links to those sections of the manual which describe or discuss +that topic. Each link is in two parts. The first part points to +the exact location in the manual where the topic appears; the +second part points to the start of the section of the manual where +that topic is discussed. + +@printindex cp + +@bye diff --git a/Documentation/notation/GNUmakefile b/Documentation/notation/GNUmakefile new file mode 100644 index 0000000000..c93c9e0624 --- /dev/null +++ b/Documentation/notation/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/notation/ancient.itely b/Documentation/notation/ancient.itely new file mode 100644 index 0000000000..c6ae58e19b --- /dev/null +++ b/Documentation/notation/ancient.itely @@ -0,0 +1,2562 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@c vim: foldmethod=marker +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + +@node Ancient notation +@section Ancient notation + +@lilypondfile[quote]{ancient-headword.ly} + +@cindex Vaticana, Editio +@cindex Medicaea, Editio +@cindex hufnagel +@cindex Petrucci +@cindex mensural + + +@menu +* Overview of the supported styles:: +* Ancient notation---common features:: +* Typesetting mensural music:: +* Typesetting Gregorian chant:: +* Working with ancient music---scenarios and solutions:: +@end menu + + +Support for ancient notation includes features for mensural +notation and Gregorian chant notation. These features can be +accessed either by modifying style properties of graphical objects +such as note heads and rests, or by using one of the pre-defined +contexts for mensural or Gregorian notation. + +Many graphical objects, such as note heads and flags, accidentals, +time signatures, and rests, provide a @code{style} property, which +can be changed to emulate several different styles of ancient +notation. See + +@itemize +@item @ref{Mensural note heads}, +@item @ref{Mensural accidentals and key signatures}, +@item @ref{Mensural rests}, +@item @ref{Mensural clefs}, +@item @ref{Gregorian clefs}, +@item @ref{Mensural flags}, +@item @ref{Mensural time signatures}. +@end itemize + +Some notational concepts are introduced specifically for ancient +notation, + +@itemize +@item @ref{Custodes}, +@item @ref{Divisiones}, +@item @ref{Ligatures}. +@end itemize + +@c {{{1 Overview of the supported styles +@node Overview of the supported styles +@subsection Overview of the supported styles + + +Three styles are available for typesetting Gregorian chant: + +@itemize +@item @emph{Editio Vaticana} is a complete style for +Gregorian chant, following the appearance of the Solesmes +editions, the official chant books of the Vatican since 1904. +LilyPond has support for all the notational signs used in this +style, including ligatures, @emph{custodes}, and special signs +such as the quilisma and the oriscus. + +@cindex Solesmes +@cindex Vaticana, Editio + +@item The @emph{Editio Medicaea} style offers certain features +used in the Medicaea (or Ratisbona) editions which were used prior +to the Solesmes editions. The most significant differences from +the @emph{Vaticana} style are the clefs, which have +downward-slanted strokes, and the noteheads, which are square and +regular. + +@cindex Ratisbona, Editio +@cindex Medicaea, Editio + +@item The @emph{Hufnagel} (@qq{horseshoe nail}) or @emph{Gothic} +style mimics the writing style in chant manuscripts from Germany +and Central Europe during the middle ages. It is named after the +basic note shape (the @emph{virga}), which looks like a small +nail. +@cindex hufnagel +@end itemize + +Three styles emulate the appearance of late-medieval and +renaissance manuscripts and prints of mensural music: + +@itemize +@item The @emph{Mensural} style most closely resembles the +writing style used in late-medieval and early renaissance +manuscripts, with its small and narrow, diamond-shaped noteheads +and its rests which approach a hand-drawn style. + +@cindex mensural + +@item The @emph{Neomensural} style is a modernized and +stylized version of the former: the noteheads are broader and the +rests are made up of straight lines. This style is particularly +suited, e.g., for incipits of transcribed pieces of mensural +music. + +@cindex neomensural + +@item The @emph{Petrucci} style is named after Ottaviano Petrucci +(1466-1539), the first printer to use movable type for music (in +his @emph{Harmonice musices odhecaton}, 1501). The style uses +larger note heads than the other mensural styles. + +@cindex Petrucci + +@end itemize + +@emph{Baroque} and @emph{Classical} are not complete styles +but differ from the default style only in some details: certain +noteheads (Baroque) and the quarter rest (Classical). + +Only the mensural style has alternatives for all aspects of the +notation. Thus, there are no rests or flags in the Gregorian +styles, since these signs are not used in plainchant notation, and +the Petrucci style has no flags or accidentals of its own. + +Each element of the notation can be changed independently of the +others, so that one can use mensural flags, petrucci noteheads, +classical rests and vaticana clefs in the same piece, if one +wishes. + +@c {{{1 Ancient notation, general +@node Ancient notation---common features +@subsection Ancient notation---common features + +@menu +* Pre-defined contexts:: +* Ligatures:: +* Custodes:: +* Figured bass support:: +@end menu + +@c {{{2 Pre-defined contexts +@node Pre-defined contexts +@unnumberedsubsubsec Pre-defined contexts + +For Gregorian chant and mensural notation, there are pre-defined +voice and staff contexts available, which set all the various +notation signs to values suitable for these styles. If one is +satisfied with these defaults, one can proceed directly with note +entry without worrying about the details on how to customize a +context. See one of the pre-defined contexts +@code{VaticanaVoice}, @code{VaticanaStaff}, @code{MensuralVoice}, +and @code{MensuralStaff}. See further + +@itemize +@item @ref{Gregorian chant contexts}, +@item @ref{Mensural contexts}. +@end itemize + + +@c {{{2 Ligatures +@node Ligatures +@unnumberedsubsubsec Ligatures + +@cindex Ligatures + +@c TODO: Should double check if I recalled things correctly when I wrote +@c down the following paragraph by heart. + +A ligature is a graphical symbol that represents at least two +distinct notes. Ligatures originally appeared in the manuscripts +of Gregorian chant notation to denote ascending or descending +sequences of notes on the same syllable. They are also used in +mensural notation. + +Ligatures are entered by @emph{enclosing} them in @code{\[} and +@code{\]}. Some ligature styles may need additional input syntax +specific for this particular type of ligature. By default, the +@rinternals{LigatureBracket} engraver just puts a square bracket +above the ligature. + +@lilypond[quote,ragged-right,verbatim] +\transpose c c' { + \[ g c a f d' \] + a g f + \[ e f a g \] +} +@end lilypond + +Two other ligature styles are available: the Vaticana for +Gregorian chant, and the Mensural for mensural music (only white +mensural ligatures are supported for mensural music, and with +certain limitations). To use any of these styles, the default +@code{Ligature_bracket_engraver} has to be replaced with one of the +specialized ligature engravers in the @rinternals{Voice} context, +as explained in @ref{White mensural ligatures} and @ref{Gregorian +square neume ligatures}. + + +@seealso +@c TODO: nothing here yet ... + + +@knownissues + +Ligatures need special spacing that has not yet been implemented. As +a result, there is too much space between ligatures most of the time, +and line breaking often is unsatisfactory. Also, lyrics do not +correctly align with ligatures. + +Accidentals must not be printed within a ligature, but instead need to +be collected and printed in front of it. + +The syntax still uses the deprecated infix style @code{\[ music expr +\]}. For consistency reasons, it will eventually be changed to +postfix style @code{note\[ ... note\]}. + +@c Alternatively, the file +@c @file{gregorian@/-init@/.ly} can be included; it provides a scheme +@c function +@c @example +@c \ligature @var{music expr} +@c @end example +@c with the same effect and is believed to be stable. + +@c TODO: this does not seem to work at the moment. +@c -- eo + + + +@c {{{2 Custodes +@node Custodes +@unnumberedsubsubsec Custodes + +@cindex custos +@cindex custodes + +A @emph{custos} (plural: @emph{custodes}; Latin word for @qq{guard}) is a +symbol that appears at the end of a staff. It anticipates the pitch +of the first note of the following line, thus helping the performer +to manage line breaks during performance. + +Custodes were frequently used in music notation until the +seventeenth century. Nowadays, they have survived only in a few +particular forms of musical notation such as contemporary editions +of Gregorian chant like the @emph{Editio Vaticana}. There are +different custos glyphs used in different flavors of notational +style. + +For typesetting custodes, just put a @rinternals{Custos_engraver} into the +@rinternals{Staff} context when declaring the @code{\layout} block, +and change the style of the custos with an @code{\override} if +desired, as shown in the following example: + +@lilypond[quote,ragged-right] +\score { + \relative c'' { + a1 + \break + g + } + \layout { + \context { + \Staff + \consists Custos_engraver + \override Custos #'style = #'mensural + } + } +} +@end lilypond + +The custos glyph is selected by the @code{style} property. The styles +supported are @code{vaticana}, @code{medicaea}, @code{hufnagel}, and +@code{mensural}. They are demonstrated in the following fragment + +@lilypond[quote,ragged-right,fragment] +\new Lyrics \lyricmode { + \markup { \column { + \typewriter "vaticana" + \line { " " \musicglyph #"custodes.vaticana.u0" } + } } + \markup { \column { + \typewriter "medicaea" + \line { " " \musicglyph #"custodes.medicaea.u0" } + }} + \markup { \column { + \typewriter "hufnagel" + \line { " " \musicglyph #"custodes.hufnagel.u0" } + }} + \markup { \column { + \typewriter "mensural" + \line { " " \musicglyph #"custodes.mensural.u0" } + }} +} +@end lilypond + + +@seealso +Internals Reference: @rinternals{Custos}. + +Examples: +@rlsr{Ancient notation}. + + +@c {{{2 Figured bass support +@node Figured bass support +@unnumberedsubsubsec Figured bass support + +There is limited support for figured bass notation from the +Baroque period; see @ref{Figured bass}. + + +@c {{{1 Typesetting mensural music +@node Typesetting mensural music +@subsection Typesetting mensural music + +@menu +* Mensural contexts:: +* Mensural clefs:: +* Mensural time signatures:: +* Mensural note heads:: +* Mensural flags:: +* Mensural rests:: +* Mensural accidentals and key signatures:: +* Annotational accidentals (musica ficta):: +* White mensural ligatures:: +@end menu + + + +@c {{{2Mensural contexts +@node Mensural contexts +@unnumberedsubsubsec Mensural contexts + +@cindex MensuralVoiceContext +@cindex MensuralStaffContext + +The predefined @code{MensuralVoice} and @code{MensuralStaff} +contexts can be used to engrave a piece in mensural style. These +contexts initialize all relevant context properties and grob +properties to proper values, so you can immediately go ahead +entering the chant, as the following excerpt demonstrates: + +@lilypond[quote,ragged-right,verbatim] +\score { + << + \new MensuralVoice = "discantus" \transpose c c' { + \override Score.BarNumber #'transparent = ##t { + c'1\melisma bes a g\melismaEnd + f\breve + \[ f1\melisma a c'\breve d'\melismaEnd \] + c'\longa + c'\breve\melisma a1 g1\melismaEnd + fis\longa^\signumcongruentiae + } + } + \new Lyrics \lyricsto "discantus" { + San -- ctus, San -- ctus, San -- ctus + } + >> +} +@end lilypond + + +@seealso +TODO: nothing here yet ... + + +@c {{{2 Mensural clefs +@node Mensural clefs +@unnumberedsubsubsec Mensural clefs + +@cindex clefs + +The following table shows all mensural clefs that are supported via +the @code{\clef} command. Some of the clefs use the same glyph, +but differ only with respect to the line they are printed on. In +such cases, a trailing number in the name is used to enumerate +these clefs, numbered from the lowest to the highest line. Still, +you can manually force a clef glyph to be typeset on an arbitrary +line, as described in @ref{Clef}. The note printed to the right +side of each clef in the example column denotes the @code{c'} with +respect to that clef. + +Petrucci used C clefs with differently balanced left-side vertical +beams, depending on which staff line it is printed. + +@multitable @columnfractions .4 .4 .2 +@item +@b{Description} +@tab +@b{Supported Clefs} +@tab +@b{Example} + +@item +mensural C clef +@tab +@code{mensural-c1}, @code{mensural-c2},@* +@code{mensural-c3}, @code{mensural-c4} +@tab +@lilypond[fragment,relative=1,notime] + \clef "mensural-c2" + \override NoteHead #'style = #'mensural + c +@end lilypond + +@item +mensural F clef +@tab +@code{mensural-f} +@tab +@lilypond[fragment,relative=1,notime] + \clef "mensural-f" + \override NoteHead #'style = #'mensural + c +@end lilypond + +@item +mensural G clef +@tab +@code{mensural-g} +@tab +@lilypond[fragment,relative=1,notime] + \clef "mensural-g" + \override NoteHead #'style = #'mensural + c +@end lilypond + +@item +neomensural C clef +@tab +@code{neomensural-c1}, @code{neomensural-c2},@* +@code{neomensural-c3}, @code{neomensural-c4} +@tab +@lilypond[fragment,relative=1,notime] + \clef "neomensural-c2" c +@end lilypond + +@item +petrucci style C clefs, for use on different staff lines +(the example shows the 2nd staff line C clef) +@tab +@code{petrucci-c1}, @code{petrucci-c2},@* +@code{petrucci-c3}, @code{petrucci-c4},@* +@code{petrucci-c5} +@tab +@lilypond[fragment,relative=1,notime] + \clef "petrucci-c2" + \override NoteHead #'style = #'mensural + c +@end lilypond + +@item +petrucci style F clef +@tab +@code{petrucci-f} +@tab +@lilypond[fragment,relative=1,notime] + \clef "petrucci-f" + \override NoteHead #'style = #'mensural + c +@end lilypond + +@item +petrucci style G clef +@tab +@code{petrucci-g} +@tab +@lilypond[fragment,relative=1,notime] + \clef "petrucci-g" + \override NoteHead #'style = #'mensural + c +@end lilypond +@end multitable + + +@seealso +Notation Reference: see @ref{Clef}. + + +@knownissues + +The mensural g clef is mapped to the Petrucci g clef. + + +@c {{{2Mensural time signatures +@node Mensural time signatures +@unnumberedsubsubsec Mensural time signatures + +@cindex mensuration sign +@cindex time signatures + +There is limited support for mensuration signs (which are similar to, but +not exactly the same as time signatures). The glyphs are hard-wired to +particular time fractions. In other words, to get a particular mensuration +sign with the @code{\time n/m} command, @code{n} and @code{m} have to be +chosen according to the following table + +@lilypond[quote,ragged-right] +\layout { + indent = 0.0 + \context { + \Staff + \remove Staff_symbol_engraver + \remove Clef_engraver + \remove Time_signature_engraver + } +} +{ + \set Score.timing = ##f + \set Score.barAlways = ##t + s_\markup { "\\time 4/4" }^\markup { " " \musicglyph +#"timesig.neomensural44" } + s + s_\markup { "\\time 2/2" }^\markup { " " \musicglyph +#"timesig.neomensural22" } + s + s_\markup { "\\time 6/4" }^\markup { " " \musicglyph +#"timesig.neomensural64" } + s + s_\markup { "\\time 6/8" }^\markup { " " \musicglyph +#"timesig.neomensural68" } + \break + s_\markup { "\\time 3/2" }^\markup { " " \musicglyph +#"timesig.neomensural32" } + s + s_\markup { "\\time 3/4" }^\markup { " " \musicglyph +#"timesig.neomensural34" } + s + s_\markup { "\\time 9/4" }^\markup { " " \musicglyph +#"timesig.neomensural94" } + s + s_\markup { "\\time 9/8" }^\markup { " " \musicglyph +#"timesig.neomensural98" } + \break + s_\markup { "\\time 4/8" }^\markup { " " \musicglyph +#"timesig.neomensural48" } + s + s_\markup { "\\time 2/4" }^\markup { " " \musicglyph +#"timesig.neomensural24" } +} +@end lilypond + +Use the @code{style} property of grob @rinternals{TimeSignature} +to select ancient time signatures. Supported styles are +@code{neomensural} and @code{mensural}. The above table uses the +@code{neomensural} style. The following examples show the +differences in style: + +@lilypond[ragged-right,fragment,relative=1,quote] +{ + \textLengthOn + + \time 2/2 + c1^\markup { \hspace #-2.0 \typewriter default } + + \override Staff.TimeSignature #'style = #'numbered + \time 2/2 + c1^\markup { \hspace #-2.0 \typewriter numbered } + + \override Staff.TimeSignature #'style = #'mensural + \time 2/2 + c1^\markup { \hspace #-2.0 \typewriter mensural } + + \override Staff.TimeSignature #'style = #'neomensural + \time 2/2 + c1^\markup { \hspace #-2.0 \typewriter neomensural } + \override Staff.TimeSignature #'style = #'single-digit + \time 2/2 + c1^\markup { \hspace #-2.0 \typewriter single-digit } +} +@end lilypond + + +@seealso +Notation Reference: @ref{Time signature}, gives a general introduction to +the use of time signatures. + + +@knownissues + +Ratios of note durations do not change with the time signature. For +example, the ratio of 1 breve = 3 semibreves (@emph{tempus perfectum}) must +be made by hand, by setting + +@example +breveTP = #(ly:make-duration -1 0 3 2) +@dots{} +@{ c\breveTP f1 @} +@end example + +@noindent +This sets @code{breveTP} to 3/2 times 2 = 3 times a whole note. + +The @code{mensural68alt} and @code{neomensural68alt} symbols +(alternate symbols for 6/8) are not addressable with @code{\time}. +Use @code{\markup @{\musicglyph #"timesig.mensural68alt" @}} instead. + + +@c {{{2Mensural note heads +@node Mensural note heads +@unnumberedsubsubsec Mensural note heads + +@cindex note heads, ancient + +For ancient notation, a note head style other than the @code{default} style +may be chosen. This is accomplished by setting the @code{style} property of +the @rinternals{NoteHead} object to @code{baroque}, @code{neomensural}, +@code{mensural} or @code{petrucci}. + +The @code{baroque} style differs from the @code{default} style by: + +@itemize +@item Providing a @code{maxima} notehead, and +@item Using a square shape for @code{\breve} note heads. +@end itemize + +The @code{neomensural}, @code{mensural}, and @code{petrucci} styles differ from +the @code{baroque} style by: + +@itemize +@item Using rhomboidal heads for semibreves and all smaller durations, and +@item Centering the stems on the note heads. +@end itemize + + +The following example demonstrates the @code{petrucci} style: + +@c Renaissance music doesn't use bar lines ... but they do help to +@c separate the notes for easier identification. + +@lilypond[quote,fragment,ragged-right,verbatim] +\set Score.skipBars = ##t +\autoBeamOff +\override NoteHead #'style = #'petrucci +a'\maxima a'\longa a'\breve a'1 a'2 a'4 a'8 a'16 a' + +@end lilypond + + +@seealso +@ref{Note head styles} gives an overview of all available note head styles. + + +@c {{{2Mensural flags +@node Mensural flags +@unnumberedsubsubsec Mensural flags + +@cindex flags + +Use the @code{flag-style} property of grob @rinternals{Stem} to +select ancient flags. Besides the @code{default} flag style, +only the @code{mensural} style is supported. + +@lilypond[quote,fragment,ragged-right,verbatim] +\override Stem #'flag-style = #'mensural +\override Stem #'thickness = #1.0 +\override NoteHead #'style = #'mensural +\autoBeamOff +c'8 d'8 e'8 f'8 c'16 d'16 e'16 f'16 c'32 d'32 e'32 f'32 s8 +c''8 d''8 e''8 f''8 c''16 d''16 e''16 f''16 c''32 d''32 e''32 f''32 +@end lilypond + +Note that the innermost flare of each mensural flag always is +vertically aligned with a staff line. + +There is no particular flag style for neo-mensural or Petrucci notation. +@c Hence, +@c when typesetting the incipit of a transcribed piece of mensural +@c music, the default flag style should be used. +There are no flags in Gregorian chant notation. + + +@seealso +TODO: nothing here yet ... + + +@knownissues + +The attachment of ancient flags to stems is slightly off. +@c due to a change in early 2.3.x. + +Vertically aligning each flag with a staff line assumes that stems +always end either exactly on or exactly in the middle between two +staff lines. This may not always be true when using advanced layout +features of classical notation (which however are typically out of +scope for mensural notation). + +@c {{{2Mensural rests +@node Mensural rests +@unnumberedsubsubsec Mensural rests + +@cindex rests, ancient + +Use the @code{style} property of grob @rinternals{Rest} to select +ancient rests. Supported styles are @code{classical}, +@code{neomensural}, and @code{mensural}. @code{classical} differs +from the @code{default} style only in that the quarter rest looks +like a horizontally mirrored 8th rest. The @code{mensural} and +the @code{neomensural} styles mimic the appearance of rests in +manuscripts and prints up to the 16th century. + +The following example demonstrates the @code{mensural} and +@code{neomensural} styles: + +@lilypond[quote,fragment,ragged-right,verbatim] +\set Score.skipBars = ##t +\override Rest #'style = #'classical +r\longa^"classical" r\breve r1 r2 r4 r8 r16 s \break +\override Rest #'style = #'mensural +r\longa^"mensural" r\breve r1 r2 r4 r8 r16 s \break +\override Rest #'style = #'neomensural +r\longa^"neomensural" r\breve r1 r2 r4 r8 r16 +@end lilypond + +There are no 32th and 64th rests specifically for the mensural or +neo-mensural style. Instead, the rests from the default style will be +taken. + +See @rlsr{Ancient notation} for a chart of all rests. + +@seealso +Notation Reference: @ref{Rests}, gives a general introduction into the use of +rests. + + +@c {{{2Mensural accidentals and key signatures +@node Mensural accidentals and key signatures +@unnumberedsubsubsec Mensural accidentals and key signatures + +@cindex accidentals +@cindex key signature + +The @code{mensural} style provides a sharp and a flat sign +different from the default style. If called for, the natural sign +will be taken from the @code{vaticana} style. + +@lilypond[quote,ragged-right,staffsize=26] +\score { +{ + \textLengthOn + s^\markup { + \column { + "mensural" + \line { " " \musicglyph #"accidentals.mensural-1" + " " \musicglyph #"accidentals.mensural1" } + } + } +} +\layout { + interscoreline = 1 + \context { \Score \remove "Bar_number_engraver" } + \context { \Staff + \remove "Clef_engraver" + \remove "Key_engraver" + \remove "Time_signature_engraver" + \remove "Staff_symbol_engraver" + \override VerticalAxisGroup #'minimum-Y-extent = ##f + } + } +} +@end lilypond + +The style for accidentals and key signatures is controlled by the +@code{glyph-name-alist} property of the grobs @rinternals{Accidental} and +@rinternals{KeySignature}, respectively; e.g.: + +@code{\override Staff.Accidental #'glyph-name-alist = +#alteration-mensural-glyph-name-alist} + + +@seealso +Notation Reference: @ref{Pitches}, @ref{Accidentals}, and +@ref{Automatic accidentals} give a general introduction of the use of +accidentals. @ref{Key signature} gives a general introduction of +the use of key signatures. + +Internals Reference: @rinternals{KeySignature}. + + +@c {{{2 Annotational accidentals (musica ficta) +@node Annotational accidentals (musica ficta) +@unnumberedsubsubsec Annotational accidentals (@emph{musica ficta}) + +In European music from before about 1600, singers were expected to +chromatically alter notes at their own initiative according to +certain rules. This is called @notation{musica ficta}. In modern +transcriptions, these accidentals are usually printed over the +note. + +@cindex Accidental, musica ficta +@cindex Musica ficta + +Support for such suggested accidentals is included, and can be +switched on by setting @code{suggestAccidentals} to true. + +@funindex suggestAccidentals + +@lilypond[verbatim,fragment,relative=1] +fis gis +\set suggestAccidentals = ##t +ais bis +@end lilypond + +This will treat @emph{every} subsequent accidental as @emph{musica +ficta} until it is unset with @code{\set suggestAccidentals = +##f}. A more practical way is to use @code{\once \set +suggestAccidentals = ##t}, which can even be defined as a +convenient shorthand: + +@lilypond[quote,verbatim] +ficta = { \once \set suggestAccidentals = ##t } +\score { \relative c'' + \new MensuralVoice { + \once \set suggestAccidentals = ##t + bes4 a2 g2 \ficta fis8 \ficta e! fis2 g1 + } +} +@end lilypond + + +@seealso +Internals Reference: @rinternals{Accidental_engraver} engraver and +the @rinternals{AccidentalSuggestion} object. + + +@c {{{2White mensural ligatures +@node White mensural ligatures +@unnumberedsubsubsec White mensural ligatures + +@cindex Mensural ligatures +@cindex White mensural ligatures + +There is limited support for white mensural ligatures. + +To engrave white mensural ligatures, in the layout block, replace +the @rinternals{Ligature_bracket_engraver} with the +@rinternals{Mensural_ligature_engraver} in the @rinternals{Voice} +context: + +@example +\layout @{ + \context @{ + \Voice + \remove Ligature_bracket_engraver + \consists Mensural_ligature_engraver + @} +@} +@end example + +There is no additional input language to describe the shape of a +white mensural ligature. The shape is rather determined solely from +the pitch and duration of the enclosed notes. While this approach may +take a new user a while to get accustomed to, it has the great advantage +that the full musical information of the ligature is known internally. +This is not only required for correct MIDI output, but also allows for +automatic transcription of the ligatures. + +For example, + +@c @example +@c \set Score.timing = ##f +@c \set Score.defaultBarType = "empty" +@c \override NoteHead #'style = #'neomensural +@c \override Staff.TimeSignature #'style = #'neomensural +@c \clef "petrucci-g" +@c \[ c'\maxima g \] +@c \[ d\longa c\breve f e d \] +@c \[ c'\maxima d'\longa \] +@c \[ e'1 a g\breve \] +@c @end example +@lilypond[quote,ragged-right,verbatim] +\score { + \transpose c c' { + \set Score.timing = ##f + \set Score.defaultBarType = "empty" + \override NoteHead #'style = #'neomensural + \override Staff.TimeSignature #'style = #'neomensural + \clef "petrucci-g" + \[ c'\maxima g \] + \[ d\longa c\breve f e d \] + \[ c'\maxima d'\longa \] + \[ e'1 a g\breve \] + } + \layout { + \context { + \Voice + \remove Ligature_bracket_engraver + \consists Mensural_ligature_engraver + } + } +} +@end lilypond + +Without replacing @rinternals{Ligature_bracket_engraver} with +@rinternals{Mensural_ligature_engraver}, the same music transcribes +to the following + +@lilypond[quote,ragged-right] +\transpose c c' { + \set Score.timing = ##f + \set Score.defaultBarType = "empty" + \override NoteHead #'style = #'neomensural + \override Staff.TimeSignature #'style = #'neomensural + \clef "petrucci-g" + \[ c'\maxima g \] + \[ d\longa c\breve f e d \] + \[ c'\maxima d'\longa \] + \[ e'1 a g\breve \] +} +@end lilypond + + +@seealso +TODO: nothing here yet ... + + +@knownissues + +Horizontal spacing of ligatures is poor. + + +@c {{{1 Typesetting Gregorian chant +@node Typesetting Gregorian chant +@subsection Typesetting Gregorian chant + +@menu +* Gregorian chant contexts:: +* Gregorian clefs:: +* Gregorian accidentals and key signatures:: +* Divisiones:: +* Gregorian articulation signs:: +* Augmentum dots (@emph{morae}):: +* Gregorian square neume ligatures:: +@end menu + +When typesetting a piece in Gregorian chant notation, the +@rinternals{Vaticana_ligature_engraver} automatically selects the +proper note heads, so there is no need to explicitly set the note +head style. Still, the note head style can be set, e.g., to +@code{vaticana_punctum} to produce punctum neumes. Similarly, the +@rinternals{Mensural_ligature_engraver} automatically assembles +mensural ligatures. See @ref{Ligatures}, for how ligature +engravers work. + + +@c {{{2Gregorian chant contexts +@node Gregorian chant contexts +@unnumberedsubsubsec Gregorian chant contexts + +@cindex VaticanaVoiceContext +@cindex VaticanaStaffContext + +The predefined @code{VaticanaVoiceContext} and +@code{VaticanaStaffContext} can be used to engrave a piece of +Gregorian chant in the style of the Editio Vaticana. These contexts +initialize all relevant context properties and grob properties to +proper values, so you can immediately go ahead entering the chant, as +the following excerpt demonstrates: + +@lilypond[quote,ragged-right,verbatim] +\include "gregorian.ly" +\score { + << + \new VaticanaVoice = "cantus" { + \[ c'\melisma c' \flexa a \] + \[ a \flexa \deminutum g\melismaEnd \] + f \divisioMinima + \[ f\melisma \pes a c' c' \pes d'\melismaEnd \] + c' \divisioMinima \break + \[ c'\melisma c' \flexa a \] + \[ a \flexa \deminutum g\melismaEnd \] f \divisioMinima + } + \new Lyrics \lyricsto "cantus" { + San- ctus, San- ctus, San- ctus + } + >> +} +@end lilypond + + +@seealso +TODO: nothing here yet ... + + +@c {{{2 Gregorian clefs +@node Gregorian clefs +@unnumberedsubsubsec Gregorian clefs + +@cindex clefs + +The following table shows all Gregorian clefs that are supported via +the @code{\clef} command. Some of the clefs use the same glyph, +but differ only with respect to the line they are printed on. In +such cases, a trailing number in the name is used to enumerate +these clefs, numbered from the lowest to the highest line. Still, +you can manually force a clef glyph to be typeset on an arbitrary +line, as described in @ref{Clef}. The note printed to the right +side of each clef in the example column denotes the @code{c'} with +respect to that clef. + +@multitable @columnfractions .4 .4 .2 +@item +@b{Description} +@tab +@b{Supported Clefs} +@tab +@b{Example} + +@item +Editio Vaticana style do clef +@tab +@code{vaticana-do1}, @code{vaticana-do2},@* +@code{vaticana-do3} +@tab +@lilypond[fragment,relative=1,notime] + \override Staff.StaffSymbol #'line-count = #4 + \override Staff.StaffSymbol #'color = #red + \override Staff.LedgerLineSpanner #'color = #red + \override Voice.Stem #'transparent = ##t + \override NoteHead #'style = #'vaticana.punctum + \clef "vaticana-do2" + c +@end lilypond + +@item +Editio Vaticana style fa clef +@tab +@code{vaticana-fa1}, @code{vaticana-fa2} +@tab +@lilypond[fragment,relative=1,notime] + \override Staff.StaffSymbol #'line-count = #4 + \override Staff.StaffSymbol #'color = #red + \override Staff.LedgerLineSpanner #'color = #red + \override Voice.Stem #'transparent = ##t + \override NoteHead #'style = #'vaticana.punctum + \clef "vaticana-fa2" + c +@end lilypond + +@item +Editio Medicaea style do clef +@tab +@code{medicaea-do1}, @code{medicaea-do2},@* +@code{medicaea-do3} +@tab +@lilypond[fragment,relative=1,notime] + \override Staff.StaffSymbol #'line-count = #4 + \override Staff.StaffSymbol #'color = #red + \override Staff.LedgerLineSpanner #'color = #red + \override Voice.Stem #'transparent = ##t + \override NoteHead #'style = #'medicaea.punctum + \clef "medicaea-do2" + c +@end lilypond + +@item +Editio Medicaea style fa clef +@tab +@code{medicaea-fa1}, @code{medicaea-fa2} +@tab +@lilypond[fragment,relative=1,notime] + \override Staff.StaffSymbol #'line-count = #4 + \override Staff.StaffSymbol #'color = #red + \override Staff.LedgerLineSpanner #'color = #red + \override Voice.Stem #'transparent = ##t + \override NoteHead #'style = #'medicaea.punctum + \clef "medicaea-fa2" + c +@end lilypond + +@item +hufnagel style do clef +@tab +@code{hufnagel-do1}, @code{hufnagel-do2},@* +@code{hufnagel-do3} +@tab +@lilypond[fragment,relative=1,notime] + \override Staff.StaffSymbol #'line-count = #4 + \override Staff.StaffSymbol #'color = #red + \override Staff.LedgerLineSpanner #'color = #red + \override Voice.Stem #'transparent = ##t + \override NoteHead #'style = #'hufnagel.punctum + \clef "hufnagel-do2" + c +@end lilypond + +@item +hufnagel style fa clef +@tab +@code{hufnagel-fa1}, @code{hufnagel-fa2} +@tab +@lilypond[fragment,relative=1,notime] + \override Staff.StaffSymbol #'line-count = #4 + \override Staff.StaffSymbol #'color = #red + \override Staff.LedgerLineSpanner #'color = #red + \override Voice.Stem #'transparent = ##t + \override NoteHead #'style = #'hufnagel.punctum + \clef "hufnagel-fa2" + c +@end lilypond + +@item +hufnagel style combined do/fa clef +@tab +@code{hufnagel-do-fa} +@tab +@lilypond[fragment,relative=1,notime] + \override Staff.StaffSymbol #'color = #red + \override Staff.LedgerLineSpanner #'color = #red + \override Voice.Stem #'transparent = ##t + \override NoteHead #'style = #'hufnagel.punctum + \clef "hufnagel-do-fa" + c +@end lilypond +@end multitable + + +@seealso +Notation Reference: see @ref{Clef}. + + +@c {{{2 Gregorian accidentals and key signatures +@node Gregorian accidentals and key signatures +@unnumberedsubsubsec Gregorian accidentals and key signatures + +@cindex accidentals +@cindex key signature + +Accidentals for the three different Gregorian styles are available: + +@lilypond[quote,ragged-right,staffsize=26] +\score { +{ + \textLengthOn + s^\markup { + \column { + "vaticana" + \line { " " \musicglyph #"accidentals.vaticana-1" + " " \musicglyph #"accidentals.vaticana0" } + } + \column { + "medicaea" + \line { " " \musicglyph #"accidentals.medicaea-1" } + } + \column { + "hufnagel" + \line { " " \musicglyph #"accidentals.hufnagel-1" } + } + } +} +\layout { + interscoreline = 1 + \context { \Score \remove "Bar_number_engraver" } + \context { \Staff + \remove "Clef_engraver" + \remove "Key_engraver" + \remove "Time_signature_engraver" + \remove "Staff_symbol_engraver" + \override VerticalAxisGroup #'minimum-Y-extent = ##f + } + } +} +@end lilypond + +As shown, not all accidentals are supported by each style. When +trying to access an unsupported accidental, LilyPond will switch to a +different style. + +@c @lilypondfile[verbatim,lilyquote,texidoc,doctitle] +@c {ancient-accidentals.ly} + +The style for accidentals and key signatures is controlled by the +@code{glyph-name-alist} property of the grobs @rinternals{Accidental} and +@rinternals{KeySignature}, respectively; e.g.: + +@code{\override Staff.Accidental #'glyph-name-alist = +#alteration-mensural-glyph-name-alist} + + +@seealso +Notation Reference: @ref{Pitches}, @ref{Accidentals}, and +@ref{Automatic accidentals} give a general introduction of the use of +accidentals. @ref{Key signature} gives a general introduction of +the use of key signatures. + +Internals Reference: @rinternals{KeySignature}. + + +@c {{{2Divisiones +@node Divisiones +@unnumberedsubsubsec Divisiones + +@cindex divisio +@cindex divisiones +@cindex finalis + +There are no rests in Gregorian chant notation; instead, it uses +@ref{Divisiones}. + +A @emph{divisio} (plural: @emph{divisiones}; Latin word for +@q{division}) is a staff context symbol that is used to indicate +the phrase and section structure of Gregorian music. The musical meaning of +@emph{divisio minima}, @emph{divisio maior}, and @emph{divisio maxima} +can be characterized as short, medium, and long pause, somewhat like +the breathmarks from @ref{Breath marks}. The @emph{finalis} sign not +only marks the end of a chant, but is also frequently used within a +single antiphonal/responsorial chant to mark the end of each section. + +To use divisiones, include the file @file{gregorian@/.ly}. It +contains definitions that you can apply by just inserting +@code{\divisioMinima}, @code{\divisioMaior}, @code{\divisioMaxima}, +and @code{\finalis} at proper places in the input. Some editions use +@emph{virgula} or @emph{caesura} instead of divisio minima. +Therefore, @file{gregorian@/.ly} also defines @code{\virgula} and +@code{\caesura} + +@lilypondfile[quote,ragged-right]{divisiones.ly} + + +@predefined +@funindex \virgula +@code{\virgula}, +@funindex \caesura +@code{\caesura}, +@funindex \divisioMinima +@code{\divisioMinima}, +@funindex \divisioMaior +@code{\divisioMaior}, +@funindex \divisioMaxima +@code{\divisioMaxima}, +@funindex \finalis +@code{\finalis}. +@endpredefined + + +@c {{{2Gregorian articulations +@node Gregorian articulation signs +@unnumberedsubsubsec Gregorian articulation signs + +@cindex articulations + +In addition to the standard articulation signs described in +section @ref{Articulations and ornamentations}, articulation signs +specifically designed for use with notation in @emph{Editio +Vaticana} style are provided. + +@lilypond[quote,ragged-right,verbatim] +\include "gregorian.ly" +\score { + \new VaticanaVoice { + \override TextScript #'font-family = #'typewriter + \override TextScript #'font-shape = #'upright + \override Script #'padding = #-0.1 + a\ictus_"ictus " \break + a\circulus_"circulus " \break + a\semicirculus_"semicirculus " \break + a\accentus_"accentus " \break + \[ a_"episema" \episemInitium \pes b \flexa a b \episemFinis \flexa a \] + } +} +@end lilypond + + +@seealso +TODO: nothing here yet ... + + +@knownissues + +Some articulations are vertically placed too closely to the +corresponding note heads. + +The episema line is not displayed in many cases. If it is displayed, +the right end of the episema line is often too far to the right. + + +@c {{{2Augmentum dots (@emph{morae}) +@node Augmentum dots (@emph{morae}) +@unnumberedsubsubsec Augmentum dots (@emph{morae}) + +Augmentum dots, also called @emph{morae}, are added with the music +function @code{\augmentum}. Note that @code{\augmentum} is +implemented as a unary music function rather than as head prefix. It +applies to the immediately following music expression only. That is, +@code{\augmentum \virga c} will have no visible effect. Instead, say +@code{\virga \augmentum c} or @code{\augmentum @{\virga c@}}. Also +note that you can say @code{\augmentum @{a g@}} as a shortcut for +@code{\augmentum a \augmentum g}. + +@lilypond[quote,ragged-right,verbatim] +\include "gregorian.ly" +\score { + \new VaticanaVoice { + \[ \augmentum a \flexa \augmentum g \] + \augmentum g + } +} +@end lilypond + + +@seealso +Notation Reference: @ref{Breath marks}. + +Internals Reference: @rinternals{BreathingSign}. + +Examples: @rlsr{Ancient notation}. + + +@c {{{2Gregorian square neumes ligatures +@node Gregorian square neume ligatures +@unnumberedsubsubsec Gregorian square neume ligatures + +@cindex Square neumes ligatures +@cindex Gregorian square neumes ligatures + +There is limited support for Gregorian square neumes notation +(following the style of the Editio Vaticana). Core ligatures can +already be typeset, but essential issues for serious typesetting are +still lacking, such as (among others) horizontal alignment of multiple +ligatures, lyrics alignment, and proper handling of accidentals. + +The support for Gregorian neumes is enabled by @code{\include}ing +"gregorian.ly" at the beginning of the file. This makes available +a number of extra commands to produce the neume symbols used in +plainchant notation. + + + +Note heads can be @emph{modified} and/or @emph{joined}. + +@itemize +@item The shape of +the note head can be modified by @emph{prefixing} the note name +with any of the following commands: +@funindex \virga +@code{\virga}, +@funindex \stropha +@code{\stropha}, +@funindex \inclinatum +@code{\inclinatum}, +@funindex \auctum +@code{\auctum}, +@funindex \descendens +@code{\descendens}, +@funindex \ascendens +@code{\ascendens}, +@funindex \oriscus +@code{\oriscus}, +@funindex \quilisma +@code{\quilisma}, +@funindex \deminutum +@code{\deminutum}, +@funindex \cavum +@code{\cavum}, +@funindex \linea +@code{\linea}. + +@item Ligatures, properly speaking (i.e. notes joined together), are +produced by placing one of the joining commands @code{\pes} or +@code{\flexa}, for upwards and downwards movement, respectively, +@emph{between} the notes to be joined. +@end itemize + +A note name without any qualifiers will produce a @emph{punctum}. +All other neumes, including the single-note neumes with a +different shape such as the @emph{virga}, are in principle +considered as ligatures and should therefore be placed +between @code{\[...\]}. +@c Regarding the @emph{punctum}, @code{b} and @code{\[ b \]} are +@c equivalent. + +@noindent +Single-note neumes: + +@itemize +@item The @emph{punctum} is the basic note shape (in the +@emph{Vaticana} style: a square with some curvation for +typographical finesse). In addition to the regular +@emph{punctum}, there is also the oblique @emph{punctum +inclinatum}, produced with the prefix @code{\inclinatum}. The +regular @emph{punctum} can be modified with @code{\cavum}, which +produces a hollow note, and @code{\linea}, which draws vertical +lines on either side of the note. + +@item The @emph{virga} has a descending stem on the right side. It is +produced by the modifier @code{\virga}. +@end itemize + +@noindent +Ligatures + +Unlike most other neumes notation systems, the typographical +appearance of ligatures is not directly dictated by the input +commands, but follows certain conventions dependent on musical +meaning. For example, a three-note ligature with the musical shape +low-high-low, such as @code{\[ a \pes b \flexa g \]}, produces a +Torculus consisting of three Punctum heads, while the shape +high-low-high, such as @code{\[ a \flexa g \pes b \]}, produces a +Porrectus with a curved flexa shape and only a single Punctum +head. There is no command to explicitly typeset the curved flexa +shape; the decision of when to typeset a curved flexa shape is +based on the musical input. The idea of this approach is to +separate the musical aspects of the input from the notation style +of the output. This way, the same input can be reused to typeset +the same music in a different style of Gregorian chant notation. + +@noindent +Liquescent neumes + +Another main category of notes in Gregorian chant is the so-called +liquescent neumes. They are used under certain circumstances at +the end of a syllable which ends in a @q{liquescent} letter, i.e. +the sounding consonants that can hold a tone (the nasals, l, r, v, +j, and their diphtong equivalents). Thus, the liquescent neumes +are never used alone (although some of them can be produced), and +they always fall at the end of a ligature. + +Liquescent neumes are represented graphically in two different, +more or less interchangeable ways: with a smaller note or by +@q{twisting} the main note upwards or downwards. The first is +produced by making a regular @code{pes} or @code{flexa} and +modifying the shape of the second note: @code{\[ a \pes \deminutum +b \] }, the second by modifying the shape of a single-note neume +with @code{\auctum} and one of the direction markers +@code{\descendens} or @code{\ascendens}, e.g. @code{ \[ \auctum +\descendens a \] }. + +@noindent +Special signs + +A third category of signs is made up of a small number of signs +with a special meaning (which, incidentally, in most cases is only +vaguely known): the @emph{quilisma}, the @emph{oriscus}, and the +@emph{strophicus}. These are all produced by prefixing a note name +with the corresponding modifier, @code{\quilisma}, +@code{\oriscus}, or @code{\stropha}. + +Virtually, within the ligature delimiters @code{\[} and @code{\]}, +any number of heads may be accumulated to form a single ligature, +and head prefixes like @code{\pes}, @code{\flexa}, @code{\virga}, +@code{\inclinatum}, etc. may be mixed in as desired. The use of +the set of rules that underlies the construction of the ligatures +in the above table is accordingly extrapolated. This way, +infinitely many different ligatures can be created. + +Note that the use of these signs in the music itself follows +certain rules, which are not checked by LilyPond. E.g., the +@emph{quilisma} is always the middle note of an ascending +ligature, and usually falls on a half-tone step, but it is +perfectly possible, although incorrect, to make a single-note +quilisma. + +In addition to the note signs, gregorian.ly also defines the +commands @code{\versus}, @code{\responsum}, @code{\ij}, +@code{\iij}, @code{\IJ}, and @code{\IIJ}, that will produce the +corresponding characters, e.g. for use in lyrics, as section +markers, etc. These commands use special unicode characters and +will only work if a font is used which supports them. + + +@c neume table + +The following table shows a limited, but still representative pool +of Gregorian ligatures, together with the code fragments that +produce the ligatures. The table is based on the extended neumes +table of the 2nd volume of the Antiphonale Romanum (@emph{Liber +Hymnarius}), published 1983 by the monks of Solesmes. The first +column gives the name of the ligature, with the main form in +boldface and the liquescent forms in italics. The third column +shows the code fragment that produces this ligature, using +@code{g}, @code{a}, and @code{b} as example pitches. + + +@b{Single-note neums} + +@multitable @columnfractions .4 .2 .4 + +@item +@b{Basic} and @emph{Liquescent} forms +@tab +@b{Output} +@tab +@b{LilyPond@* +code} + +@c TODO: \layout block is identical in all of the below examples. +@c Therefore, it should somehow be included rather than duplicated all +@c the time. --jr + +@c why not make variables in ly/engraver-init.ly? --hwn + +@c Because it's just used to typeset plain notes without +@c a staff for demonstration purposes rather than something +@c special of Gregorian chant notation. --jr + + +@item +@b{Punctum} +@tab +@lilypond[staffsize=26,line-width=1.5\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Punctum + \[ b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ b \]} + +@item +@tab +@lilypond[staffsize=26,line-width=1.5\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Punctum + \[ \cavum b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \cavum b \]} + +@item +@tab +@lilypond[staffsize=26,line-width=1.5\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Punctum + \[ \linea b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \linea b \]} + +@item +@emph{Punctum Auctum Ascendens} +@tab +@lilypond[staffsize=26,line-width=2.5\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Punctum Auctum Ascendens + \[ \auctum \ascendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \auctum \ascendens b \]} + +@item +@emph{Punctum Auctum Descendens} +@tab +@lilypond[staffsize=26,line-width=2.5\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Punctum Auctum Descendens + \[ \auctum \descendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \auctum \descendens b \]} + +@item +@b{Punctum inclinatum} +@tab +@lilypond[staffsize=26,line-width=1.5\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Punctum Inclinatum + \[ \inclinatum b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \inclinatum b \]} + +@item +@emph{Punctum Inclinatum Auctum} +@tab +@lilypond[staffsize=26,line-width=2.5\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Punctum Inclinatum Auctum + \[ \inclinatum \auctum b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \inclinatum \auctum b \]} + +@item +@emph{Punctum Inclinatum Parvum} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Punctum Inclinatum Parvum + \[ \inclinatum \deminutum b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \inclinatum \deminutum b \]} + +@item +@b{Virga} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Virga + \[ \virga b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab + +@end multitable + +@noindent +@b{Two-note ligatures} + +@multitable @columnfractions .4 .2 .4 + +@item +@b{Clivis vel Flexa} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Clivis vel Flexa + \[ b \flexa g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ b \flexa g \]} + + +@item +@emph{Clivis Aucta Descendens} +@tab +@lilypond[staffsize=26,line-width=2.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Clivis Aucta Descendens + \[ b \flexa \auctum \descendens g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ b \flexa \auctum \descendens g \]} + +@item +@emph{Clivis Aucta Ascendens} +@tab +@lilypond[staffsize=26,line-width=2.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Clivis Aucta Ascendens + \[ b \flexa \auctum \ascendens g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ b \flexa \auctum \ascendens g \]} + +@item +@emph{Cephalicus} +@tab +@lilypond[staffsize=26,line-width=2.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Cephalicus + \[ b \flexa \deminutum g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ b \flexa \deminutum g \]} + +@item +@b{Podatus/Pes} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Podatus vel Pes + \[ g \pes b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \pes b \]} + +@item +@emph{Pes Auctus Descendens} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Pes Auctus Descendens + \[ g \pes \auctum \descendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \pes \auctum \descendens b \]} + +@item +@emph{Pes Auctus Ascendens} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Pes Auctus Ascendens + \[ g \pes \auctum \ascendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \pes \auctum \ascendens b \]} + +@item +@emph{Epiphonus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Epiphonus + \[ g \pes \deminutum b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \pes \deminutum b \]} + +@item +@emph{Pes Initio Debilis} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Pes Initio Debilis + \[ \deminutum g \pes b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \deminutum g \pes b \]} + +@item +@emph{Pes Auctus Descendens Initio Debilis} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Pes Auctus Descendens Initio Debilis + \[ \deminutum g \pes \auctum \descendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \deminutum g \pes \auctum \descendens b \]} + +@end multitable + +@noindent +@b{Multi-note ligatures} + +@multitable @columnfractions .4 .2 .4 + +@item +@b{Torculus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Torculus + \[ a \pes b \flexa g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ a \pes b \flexa g \]} + +@item +@emph{Torculus Auctus Descendens} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Torculus Auctus Descendens + \[ a \pes b \flexa \auctum \descendens g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ a \pes b \flexa \auctum \descendens g \]} + +@item +@emph{Torculus Deminutus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Torculus Deminutus + \[ a \pes b \flexa \deminutum g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ a \pes b \flexa \deminutum g \]} + +@item +@emph{Torculus Initio Debilis} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Torculus Initio Debilis + \[ \deminutum a \pes b \flexa g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \deminutum a \pes b \flexa g \]} + +@item +@emph{Torculus Auctus Descendens Initio Debilis} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Torculus Auctus Descendens Initio Debilis + \[ \deminutum a \pes b \flexa \auctum \descendens g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \deminutum a \pes b \flexa \auctum \descendens g \]} + +@item +@emph{Torculus Deminutus Initio Debilis} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Torculus Deminutus Initio Debilis + \[ \deminutum a \pes b \flexa \deminutum g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \deminutum a \pes b \flexa \deminutum g \]} + +@item +@b{Porrectus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Porrectus + \[ a \flexa g \pes b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ a \flexa g \pes b \]} + +@item +@emph{Porrectus Auctus Descendens} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Porrectus Auctus Descendens + \[ a \flexa g \pes \auctum \descendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ a \flexa g \pes \auctum \descendens b \]} + +@item +@emph{Porrectus Deminutus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Porrectus Deminutus + \[ a \flexa g \pes \deminutum b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ a \flexa g \pes \deminutum b \]} + +@item +@b{Climacus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Climacus + \[ \virga b \inclinatum a \inclinatum g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \virga b \inclinatum a \inclinatum g \]} + +@item +@emph{Climacus Auctus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Climacus Auctus + \[ \virga b \inclinatum a \inclinatum \auctum g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \virga b \inclinatum a \inclinatum \auctum g \]} + +@item +@emph{Climacus Deminutus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Climacus Deminutus + \[ \virga b \inclinatum a \inclinatum \deminutum g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \virga b \inclinatum a \inclinatum \deminutum g \]} + +@item +@b{Scandicus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Scandicus + \[ g \pes a \virga b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \pes a \virga b \]} + +@item +@emph{Scandicus Auctus Descendens} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Scandicus Auctus Descendens + \[ g \pes a \pes \auctum \descendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \pes a \pes \auctum \descendens b \]} + +@item +@emph{Scandicus Deminutus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Scandicus Deminutus + \[ g \pes a \pes \deminutum b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \pes a \pes \deminutum b \]} + +@end multitable + +@noindent +@b{Special Signs} + +@multitable @columnfractions .4 .2 .4 + +@item +@b{Quilisma} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Quilisma + \[ g \pes \quilisma a \pes b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \pes \quilisma a \pes b \]} + +@item +@emph{Quilisma Pes Auctus Descendens} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Quilisma Pes Auctus Descendens + \[ g \quilisma a \pes \auctum \descendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \quilisma g \pes \auctum \descendens b \]} + +@item +@b{Oriscus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Oriscus + \[ \oriscus b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \oriscus b \]} + +@item +@emph{Pes Quassus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Pes Quassus + \[ \oriscus g \pes \virga b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \oriscus g \pes \virga b \]} + +@item +@emph{Pes Quassus Auctus Descendens} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Pes Quassus Auctus Descendens + \[ \oriscus g \pes \auctum \descendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \oriscus g \pes \auctum \descendens b \]} + +@item +@b{Salicus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Salicus + \[ g \oriscus a \pes \virga b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \oriscus a \pes \virga b \]} + +@item +@emph{Salicus Auctus Descendens} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Salicus Auctus Descendens + \[ g \oriscus a \pes \auctum \descendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \oriscus a \pes \auctum \descendens b \]} + +@item +@b{(Apo)stropha} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Stropha + \[ \stropha b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \stropha b \]} + +@item +@emph{Stropha Aucta} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Stropha Aucta + \[ \stropha \auctum b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \stropha \auctum b \]} + +@item +@b{Bistropha} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Bistropha + \[ \stropha b \stropha b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \stropha b \stropha b \]} + +@item +@b{Tristropha} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Tristropha + \[ \stropha b \stropha b \stropha b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \stropha b \stropha b \stropha b \]} + +@item +@emph{Trigonus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Trigonus + \[ \stropha b \stropha b \stropha a \] + } + \layout { \neumeDemoLayout } +} +@end lilypond +@tab +@code{\[ \stropha b \stropha b \stropha a \]} + +@end multitable + + +@predefined +The following head prefixes are supported: +@funindex \virga +@code{\virga}, +@funindex \stropha +@code{\stropha}, +@funindex \inclinatum +@code{\inclinatum}, +@funindex \auctum +@code{\auctum}, +@funindex \descendens +@code{\descendens}, +@funindex \ascendens +@code{\ascendens}, +@funindex \oriscus +@code{\oriscus}, +@funindex \quilisma +@code{\quilisma}, +@funindex \deminutum +@code{\deminutum}, +@funindex \cavum +@code{\cavum}, +@funindex \linea +@code{\linea}. +@endpredefined + +Head prefixes can be accumulated, though restrictions apply. For +example, either @code{\descendens} or @code{\ascendens} can be applied +to a head, but not both to the same head. + +@funindex \pes +@funindex \flexa +Two adjacent heads can be tied together with the @code{\pes} and +@code{\flexa} infix commands for a rising and falling line of melody, +respectively. + +@funindex \augmentum +Use the unary music function @code{\augmentum} to add augmentum dots. + + +@seealso +TODO: nothing here yet ... + + +@knownissues + +When an @code{\augmentum} dot appears at the end of the last staff +within a ligature, it is sometimes vertically placed wrong. As a +workaround, add an additional skip note (e.g. @code{s8}) as last note +of the staff. + +@code{\augmentum} should be implemented as a head prefix rather than a +unary music function, such that @code{\augmentum} can be intermixed +with head prefixes in arbitrary order. + + + +@c Working with ancient music: scenarios and solutions:: {{{1 +@node Working with ancient music---scenarios and solutions +@subsection Working with ancient music---scenarios and solutions + +@menu +* Incipits:: +* Mensurstriche layout:: +* Transcribing Gregorian chant:: +* Ancient and modern from one source:: +* Editorial markings:: +@end menu + +Working with ancient music frequently involves particular tasks +which differ considerably from the modern notation for which +LilyPond is designed. In the rest of this section, a number of +typical scenarios are outlined, with suggestions of solutions. +These involve: + +@itemize +@item how to make incipits (i.e. prefatory material to indicate +what the original has looked like) to modern transcriptions of +mensural music; +@item how to achieve the @emph{Mensurstriche} layout frequently +used for modern transcriptions of polyphonic music; +@item how to transcribe Gregorian chant in modern notation; +@item how to generate both ancient and modern notation from the +same source. +@end itemize + +@c {{{2Incipits +@node Incipits +@unnumberedsubsubsec Incipits + +@c TODO Add text +@c clefs, mensuration signs etc from lsr and -user +@c use snippet Transcription-of-ancient-music-with-incipit +TBC + + +@seealso +@c ... and reference to other sections ... + + +@c {{{2Mensurstriche layout +@node Mensurstriche layout +@unnumberedsubsubsec Mensurstriche layout + +@emph{Mensurstriche} (@q{mensuration lines}) is the accepted term +for bar lines that are drawn between the staves of a system but +not through the staves themselves. It is a common way to preserve +the rhythmic appearance of the original, i.e. not having to break +syncopated notes at bar lines, while still providing the +orientation aids that bar lines give. + + +@lilypondfile[verbatim,lilyquote,texidoc] +{mensurstriche-layout-bar-lines-between-the-staves.ly} + +@c This simple setup will take care of the +@c TODO Add text about lyrics to the lowest line, to be placed +@c outside the StaffGroup. +@c from lsr and -user +@c TBC + + +@seealso +@c ... and reference to other sections ... + + +@c {{{2Transcribing Gregorian chant +@node Transcribing Gregorian chant +@unnumberedsubsubsec Transcribing Gregorian chant + +Gregorian chant can be transcribed into modern notation with a +number of simple tweaks. + +@b{Stems}. Stems can be left out altogether by @code{\remove}-ing +the @code{Stem_engraver} from the Voice context: + +@example +\layout @{ + ... + \context @{ + \Voice + \remove "Stem_engraver" + @} +@} +@end example + +However, in some transcription styles, stems are used +occasionally, for example to indicate the transition from a +single-tone recitative to a fixed melodic gesture. In these cases, +one can use either @code{\override Stem #'transparent = ##t} or +@code{\override Stem #'length = #0} instead, and restore the stem +when needed with the corresponding @code{\once \override Stem +#'transparent = ##f} (see example below). + +@b{Timing.} For unmetered chant, there are several alternatives. + +The Time_signature_engraver can be removed from the Staff context +without any negative side effects. The alternative, to make it +transparent, will leave an empty space in the score, since the +invisible signature will still take up space. + +In many cases, @code{\set Score.timing = ##f} will give good +results. Another alternative is to use \@code{\CadenzaOn} and +@code{\CadenzaOff}. + +To remove the barlines, the radical approach is to @code{\remove} +the Bar_engraver from the Staff context. Again, one may want to +use @code{\override BarLine #'transparent = ##t} instead, if an +occasional barline is wanted. + +A common type of transcription is recitativic chant where the +repeated notes are indicated with a single breve. The text to +the recitation tone can be dealt with in two different ways: +either set as a single, left-aligned syllable: + +@lilypond[verbatim,ragged-right] +\include "gregorian.ly" +chant = \relative c' { + \clef "G_8" + c\breve c4 b4 a c2 c4 \divisioMaior + c\breve c4 c f, f \finalis +} + +verba = \lyricmode { + \once \override LyricText #'self-alignment-X = #-1 + "Noctem quietam et" fi -- nem per -- fec -- tum + \once \override LyricText #'self-alignment-X = #-1 + "concedat nobis Dominus" om -- ni -- po -- tens. +} +\score { + \new Staff << + \new Voice = "melody" \chant + \new Lyrics = "one" \lyricsto melody \verba + >> + \layout { + \context { + \Staff + \remove "Time_signature_engraver" + \remove "Bar_engraver" + \override Stem #'transparent = ##t + } + } +} +@end lilypond + +This works fine, as long as the text doesn't span a line break. If +that is the case, an alternative is to add hidden notes to the +score, here in combination with changing stem visibility: + + +@lilypond[verbatim,ragged-right] +\include "gregorian.ly" +chant = \relative c' { + \clef "G_8" + \set Score.timing = ##f + c\breve \override NoteHead #'transparent = ##t c c c c c + \revert NoteHead #'transparent + \override Stem #'transparent = ##f \stemUp c4 b4 a + \override Stem #'transparent = ##t c2 c4 \divisioMaior + c\breve \override NoteHead #'transparent = ##t c c c c c c c + \revert NoteHead #'transparent c4 c f, f \finalis +} + +verba = \lyricmode { + No -- ctem qui -- e -- tam et fi -- nem per -- fec -- tum + con -- ce -- dat no -- bis Do -- mi -- nus om -- ni -- po -- tens. +} + +\score { + \new Staff << + \new Voice = "melody" \chant + \new Lyrics \lyricsto "melody" \verba + >> + \layout { + \context { + \Staff + \remove "Time_signature_engraver" + \override BarLine #'transparent = ##t + \override Stem #'transparent = ##t + } + } +} +@end lilypond + +Another common situation is transcription of neumatic or +melismatic chants, i.e. chants with a varying number of notes +to each syllable. In this case, one would want to set the +syllable groups clearly apart, usually also the subdivisions of a +longer melisma. One way to achieve this is to use a fixed +@code{\time}, e.g. 1/4, and let each syllable or note group fill +one of these measures, with the help of tuplets or shorter +durations. If the barlines and all other rhythmical indications +are made transparent, and the space around the barlines is +increased, this will give a fairly good representation in modern +notation of the original. + +To avoid that syllables of different width (such as @qq{-ri} and +@qq{-rum}) spread the syllable note groups unevenly apart, the +@code{#'X-extent} property of the @code{LyricText} object may be +set to a fixed value. Another, more cumbersome way would be to +add the syllables as @code{\markup} elements. If further +adjustments are necessary, this can be easily done with +@code{s} @q{notes}. + +@lilypond[verbatim,quote] +spiritus = \relative c' { + \time 1/4 + \override Lyrics.LyricText #'X-extent = #'(0 . 3) + d4 \times 2/3 { f8 a g } g a a4 g f8 e + d4 f8 g g8 d f g a g f4 g8 a a4 s + \times 2/3 { g8 f d } e f g a g4 +} + +spirLyr = \lyricmode { + Spi -- ri -- _ _ tus _ Do -- mi -- ni _ re -- ple -- _ vit _ + or -- _ bem _ ter -- ra -- _ rum, al -- _ _ le -- _ lu + -- _ ia. +} +\score { + \new Staff << + \new Voice = "chant" \spiritus + \new Lyrics = "one" \lyricsto "chant" \spirLyr + >> + \layout { + \context { + \Staff + \remove "Time_signature_engraver" + \override BarLine #'X-extent = #'(-1 . 1) + \override Stem #'transparent = ##t + \override Beam #'transparent = ##t + \override BarLine #'transparent = ##t + \override TupletNumber #'transparent = ##t + } + } +} +@end lilypond + +@c extract from 1.6.1.1 + +@seealso +@c ... and reference to other sections ... + +@c {{{2Ancient and modern from one source +@node Ancient and modern from one source +@unnumberedsubsubsec Ancient and modern from one source + +@c TODO Add text +@c Here among others the snippets about reducing note length +TBC + +@seealso +@c ... and reference to other sections ... + +@c {{{2Editorial markings +@node Editorial markings +@unnumberedsubsubsec Editorial markings + +@c {{{2Baroque rhythmic notation +@c @node Baroque rhythmic notation +@c @unnumberedsubsubsec Baroque rhythmic notation + +@c TODO Add text +@c try Till Rettig +@c Add example of white noteheads: +@c In the french baroque some composers used white noteheads in slow pieces, +@c mainly in 3/2-time. A quarter looks there like a eighth with a white +@c notehead. (Franz-Rudolf Kuhnen) + +@c TODO Add example of this: +@c I was referring to e.g. notated a8. a16, which should, if I +@c remember correctly, be interpreted more like a8.. a32 (in the french +@c style). The editor might want to show that rythmic figure above the +@c staff as an hint to performers. (Karl Hammer) + + +TBC + + +@seealso +@c ... and reference to other sections ... + diff --git a/Documentation/notation/changing-defaults.itely b/Documentation/notation/changing-defaults.itely new file mode 100644 index 0000000000..bb1013e249 --- /dev/null +++ b/Documentation/notation/changing-defaults.itely @@ -0,0 +1,3377 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + +@node Changing defaults +@chapter Changing defaults + +The purpose of LilyPond's design is to provide the finest quality +output by default. Nevertheless, it may happen that you need to +change this default layout. The layout is controlled through a large +number of @q{knobs and switches} collectively called @q{properties}. +A tutorial introduction to accessing and modifying these properties +can be found in the Learning Manual, see @rlearning{Tweaking output}. +This should be read first. This chapter covers similar ground, but +in a style more appropriate to a reference manual. + +@cindex Internals Reference + +The definitive description of the controls available for tuning can +be found in a separate document: @rinternalsnamed{Top,the Internals +Reference}. That manual lists all the variables, functions and +options available in LilyPond. It is written as a HTML document, +which is available +@c leave the @uref as one long line. +@uref{http://@/lilypond@/.org/@/doc/@/stable/@/Documentation/@/user/@/lilypond@/-internals/,on@/-line}, +and is also included with the LilyPond documentation package. + +Internally, LilyPond uses Scheme (a LISP dialect) to provide +infrastructure. Overriding layout decisions in effect accesses the +program internals, which requires Scheme input. Scheme elements are +introduced in a @code{.ly} file with the hash mark +@code{#}.@footnote{@rlearning{Scheme tutorial}, contains a short tutorial +on entering numbers, lists, strings, and symbols in Scheme.} + + +@menu +* Interpretation contexts:: +* Explaining the Internals Reference:: +* Modifying properties:: +* Useful concepts and properties:: +* Advanced tweaks:: +@end menu + + +@node Interpretation contexts +@section Interpretation contexts + +This section describes what contexts are, and how to modify them. + +@menu +* Contexts explained:: +* Creating contexts:: +* Keeping contexts alive:: +* Modifying context plug-ins:: +* Changing context default settings:: +* Defining new contexts:: +* Aligning contexts:: +@end menu + + +@seealso +Learning Manual: +@rlearning{Contexts and engravers}. + +Installed files: +@file{ly/@/engraver@/-init@/.ly}, +@file{ly/@/performer@/-init@/.ly}. + +Snippets: +@rlsr{Contexts and engravers}. + +Internals Reference: +@rinternals{Contexts}, +@rinternals{Engravers and Performers}. + + +@node Contexts explained +@subsection Contexts explained + +@ignore +@c TODO Rethink and rewrite + +>> > > - list of contexts: my *danger unmaintainable* +>> > > alarm just went off. I'm + +I knew it would... And leaving out some of them is perfectly fine +with me. +I do think that a list like this, with the main contexts and a +brief +description of what they do (perhaps also with a note about what +default +behavior is associated with each of them, but this may be +unmanageable), +should be there, and then we could simply list the remaining ones +without +further explanation and with links to the IR. +@end ignore + +@c TODO Improve layout, order and consistency of wording -td + +@c TODO Add introduction which explains contexts in generality -td + +@c TODO Describe propagation of property values -td + +Contexts are arranged hierarchically: + +@menu +* Score - the master of all contexts:: +* Top-level contexts - staff containers:: +* Intermediate-level contexts - staves:: +* Bottom-level contexts - voices:: +@end menu + +@node Score - the master of all contexts +@unnumberedsubsubsec Score - the master of all contexts + +This is the top level notation context. No other context can +contain a Score context. By default the Score context handles +the administration of time signatures and makes sure that items +such as clefs, time signatures, and key-signatures are aligned +across staves. + +A Score context is instantiated implicitly when a +@code{\score @{@dots{}@}} or @code{\layout @{@dots{}@}} block is +processed, or explicitly when a @code{\new Score} command is +executed. + +@node Top-level contexts - staff containers +@unnumberedsubsubsec Top-level contexts - staff containers + +@strong{@emph{StaffGroup}} + +Groups staves while adding a bracket on the left side, grouping +the staves together. The bar lines of the contained staves are +connected vertically. @code{StaffGroup} only consists of a collection +of staves, with a bracket in front and spanning bar lines. + +@strong{@emph{ChoirStaff}} + +Identical to @code{StaffGroup} except that the bar lines of the +contained staves are not connected vertically. + +@strong{@emph{GrandStaff}} + +A group of staves, with a brace on the left side, grouping the +staves together. The bar lines of the contained staves are +connected vertically. + +@strong{@emph{PianoStaff}} + +Just like @code{GrandStaff}, but with support for instrument names +to the left of each system. + +@node Intermediate-level contexts - staves +@unnumberedsubsubsec Intermediate-level contexts - staves + +@strong{@emph{Staff}} + +Handles clefs, bar lines, keys, accidentals. It can contain +@code{Voice} contexts. + +@strong{@emph{RhythmicStaff}} + +Like @code{Staff} but for printing rhythms. Pitches are ignored; +the notes are printed on one line. + +@strong{@emph{TabStaff}} + +Context for generating tablature. By default lays the music +expression out as a guitar tablature, printed on six lines. + +@strong{@emph{DrumStaff}} + +Handles typesetting for percussion. Can contain @code{DrumVoice} + +@strong{@emph{VaticanaStaff}} + +Same as @code{Staff}, except that it is designed for typesetting +a piece in gregorian style. + +@strong{@emph{MensuralStaff}} + +Same as @code{Staff}, except that it is designed for typesetting +a piece in mensural style. + +@node Bottom-level contexts - voices +@unnumberedsubsubsec Bottom-level contexts - voices + +Voice-level contexts initialise certain properties and start +appropriate engravers. Being bottom-level contexts, they cannot +contain other contexts. + +@strong{@emph{Voice}} + +Corresponds to a voice on a staff. This context handles the +conversion of dynamic signs, stems, beams, super- and sub-scripts, +slurs, ties, and rests. You have to instantiate this explicitly +if you require multiple voices on the same staff. + +@strong{@emph{VaticanaVoice}} + +Same as @code{Voice}, except that it is designed for typesetting +a piece in gregorian style. + +@strong{@emph{MensuralVoice}} + +Same as @code{Voice}, with modifications for typesetting a piece in +mensural style. + +@strong{@emph{Lyrics}} + +Corresponds to a voice with lyrics. Handles the printing of a +single line of lyrics. + +@strong{@emph{DrumVoice}} + +The voice context used in a percussion staff. + +@strong{@emph{FiguredBass}} + +The context in which @code{BassFigure} objects are created from +input entered in @code{\figuremode} mode. + +@strong{@emph{TabVoice}} + +The voice context used within a @code{TabStaff} context. Usually +left to be created implicitly. + +@strong{@emph{CueVoice}} + +A voice context used to render notes of a reduced size, intended +primarily for adding cue notes to a staff, see @ref{Formatting +cue notes}. Usually left to be created implicitly. + +@strong{@emph{ChordNames}} + +Typesets chord names. + +@ignore +TODO + +Then the following, which I don't know what to do with: + + * GregorianTranscriptionVoice + * GregorianTranscriptionStaff + + * FretBoards + Engraves fretboards from chords. Not easy... Not +documented. + There is now some documentation on FretBoards in the NR, under + instrument-specific notation -- cds. + + * NoteNames + + * Global + Hard coded entry point for LilyPond. Cannot be tuned. + * Devnull + Silently discards all musical information given to this +context. + +@end ignore + +@node Creating contexts +@subsection Creating contexts + +@c TODO \new Score and \score +@c TODO more complete descriptions rather than learning style + +For scores with only one voice and one staff, contexts are +created automatically. For more complex scores, it is necessary to +create them by hand. There are three commands that do this. + +@itemize + +@item +The easiest command is @code{\new}, and it also the quickest to type. +It is prepended to a music expression, for example + +@funindex \new +@cindex new contexts +@cindex Context, creating + +@example +\new @var{type} @var{music expression} +@end example + +@noindent +where @var{type} is a context name (like @code{Staff} or +@code{Voice}). This command creates a new context, and starts +interpreting the @var{music expression} with that. + +A practical application of @code{\new} is a score with many +staves. Each part that should be on its own staff, is preceded with +@code{\new Staff}. + +@lilypond[quote,verbatim,relative=2,ragged-right,fragment] +<< + \new Staff { c4 c } + \new Staff { d4 d } +>> +@end lilypond + +The @code{\new} command may also give a name to the context, + +@example +\new @var{type} = @var{id} @var{music} +@end example +However, this user specified name is only used if there is no other +context already earlier with the same name. + + +@funindex \context + +@item +Like @code{\new}, the @code{\context} command also directs a music +expression to a context object, but gives the context an explicit name. The +syntax is + +@example +\context @var{type} = @var{id} @var{music} +@end example + +This form will search for an existing context of type @var{type} +called @var{id}. If that context does not exist yet, a new +context with the specified name is created. This is useful if +the context is referred to later on. For example, when +setting lyrics the melody is in a named context + +@example +\context Voice = "@b{tenor}" @var{music} +@end example + +@noindent +so the texts can be properly aligned to its notes, + +@example +\new Lyrics \lyricsto "@b{tenor}" @var{lyrics} +@end example + +@noindent + +Another possible use of named contexts is funneling two different +music expressions into one context. In the following example, +articulations and notes are entered separately, + +@example +music = @{ c4 c4 @} +arts = @{ s4-. s4-> @} +@end example + +They are combined by sending both to the same @code{Voice} context, + +@example +<< + \new Staff \context Voice = "A" \music + \context Voice = "A" \arts +>> +@end example +@lilypond[quote,ragged-right] +music = { c4 c4 } +arts = { s4-. s4-> } +\relative c'' << + \new Staff \context Voice = "A" \music + \context Voice = "A" \arts +>> +@end lilypond + +With this mechanism, it is possible to define an Urtext (original +edition), with the option to put several distinct articulations on the +same notes. + +@cindex creating contexts + +@item +The third command for creating contexts is +@example +\context @var{type} @var{music} +@end example + + +@noindent +This is similar to @code{\context} with @code{= @var{id}}, but matches +any context of type @var{type}, regardless of its given name. + +This variant is used with music expressions that can be interpreted at +several levels. For example, the @code{\applyOutput} command (see +@ref{Running a function on all layout objects}). Without an explicit +@code{\context}, it is usually applied to @code{Voice} + +@example +\applyOutput #'@var{context} #@var{function} % apply to Voice +@end example + +To have it interpreted at the @code{Score} or @code{Staff} level use +these forms + +@example +\applyOutput #'Score #@var{function} +\applyOutput #'Staff #@var{function} +@end example + +@end itemize + +@node Keeping contexts alive +@subsection Keeping contexts alive + +@cindex contexts, keeping alive +@cindex contexts, lifetime + +Contexts are usually terminated at the first musical moment in +which they have nothing to do. So @code{Voice} contexts die as +soon as they contain no events; @code{Staff} contexts die as soon +as all the @code{Voice} contexts within them contain no events; etc. +This can cause difficulties if earlier contexts which have died +have to be referenced, for example, when changing staves with +@code{\change} commands, associating lyrics with a voice with +@code{\lyricsto} commands, or when adding further musical events to +an earlier context. + +There is an exception to this general rule: just one of the +@code{Voice} contexts in a @code{Staff} context or in a +@code{<<...>>} construct will always persist to the end of the +enclosing @code{Staff} context or @code{<<...>>} construct, even +though there may be periods when it has nothing to do. The context +to persist in this way will be the first one encountered in the +first enclosed @code{@{...@}} construct, ignoring any in enclosed +@code{<<...>>} constructs. + +Any context can be kept alive by ensuring it has something to do at +every musical moment. @code{Staff} contexts are kept alive by +ensuring one of their voices is kept alive. One way of doing this +is to add spacer rests to a voice in parallel with the real music. +These need to be added to every @code{Voice} context which needs to +be kept alive. If several voices are to be used sporadically it is +safest to keep them all alive rather than attempting to rely on the +exceptions mentioned above. + +In the following example, both voice A and voice B are kept alive +in this way for the duration of the piece: + +@lilypond[quote,verbatim] +musicA = \relative c'' { d4 d d d } +musicB = \relative c'' { g4 g g g } +keepVoicesAlive = { + << + \new Voice = "A" { s1*5 } % Keep Voice "A" alive for 5 bars + \new Voice = "B" { s1*5 } % Keep Voice "B" alive for 5 bars + >> +} + +music = { + \context Voice = "A" { + \voiceOneStyle + \musicA + } + \context Voice = "B" { + \voiceTwoStyle + \musicB + } + \context Voice = "A" { \musicA } + \context Voice = "B" { \musicB } + \context Voice = "A" { \musicA } +} + +\score { + \new Staff << + \keepVoicesAlive + \music + >> +} +@end lilypond + +@cindex lyrics, aligning with sporadic melody + +The following example shows how a sporadic melody line with lyrics +might be written using this approach. In a real situation the +melody and accompaniment would consist of several different +sections, of course. + +@lilypond[quote,verbatim] +melody = \relative c'' { a4 a a a } +accompaniment = \relative c' { d4 d d d } +words = \lyricmode { These words fol -- low the mel -- o -- dy } +\score { + << + \new Staff = "music" { + << + \new Voice = "melody" { + \voiceOne + s1*4 % Keep Voice "melody" alive for 4 bars + } + { + \new Voice = "accompaniment" { + \voiceTwo + \accompaniment + } + << + \context Voice = "melody" { \melody } + \context Voice = "accompaniment" { \accompaniment } + >> + \context Voice = "accompaniment" { \accompaniment } + << + \context Voice = "melody" { \melody } + \context Voice = "accompaniment" { \accompaniment } + >> + } + >> + } + \new Lyrics \with { alignAboveContext = #"music" } + \lyricsto "melody" { \words } + >> +} +@end lilypond + +An alternative way, which may be better in many circumstances, is +to keep the melody line alive by simply including spacer notes to +line it up correctly with the accompaniment: + +@lilypond[quote,verbatim] +melody = \relative c'' { + s1 % skip a bar + a4 a a a + s1 % skip a bar + a4 a a a +} +accompaniment = \relative c' { + d4 d d d + d4 d d d + d4 d d d + d4 d d d +} +words = \lyricmode { These words fol -- low the mel -- o -- dy } + +\score { + << + \new Staff = "music" { + << + \new Voice = "melody" { + \voiceOne + \melody + } + \new Voice = "accompaniment" { + \voiceTwo + \accompaniment + } + >> + } + \new Lyrics \with { alignAboveContext = #"music" } + \lyricsto "melody" { \words } + >> +} +@end lilypond + + +@node Modifying context plug-ins +@subsection Modifying context plug-ins + +@c TODO Should this be Modifying engravers or Modifying contexts? + +Notation contexts (like @code{Score} and @code{Staff}) not only +store properties, +they also contain plug-ins called @q{engravers} that create notation +elements. For example, the @code{Voice} context contains a +@code{Note_head_engraver} and the @code{Staff} context contains a +@code{Key_signature_engraver}. + +For a full a description of each plug-in, see +@ifhtml +@rinternals{Engravers and Performers}. +@end ifhtml +@ifnothtml +Internals Reference @expansion{} Translation @expansion{} Engravers. +@end ifnothtml +Every context described in +@ifhtml +@rinternals{Contexts} +@end ifhtml +@ifnothtml +Internals Reference @expansion{} Translation @expansion{} Context. +@end ifnothtml +lists the engravers used for that context. + + +It can be useful to shuffle around these plug-ins. This is done by +starting a new context with @code{\new} or @code{\context}, and +modifying it, + +@funindex \with + +@example +\new @var{context} \with @{ + \consists @dots{} + \consists @dots{} + \remove @dots{} + \remove @dots{} + @emph{etc.} +@} +@{ + @emph{..music..} +@} +@end example + +@noindent +where the @dots{} should be the name of an engraver. Here is a simple +example which removes @code{Time_signature_engraver} and +@code{Clef_engraver} from a @code{Staff} context, + +@lilypond[quote,relative=1,verbatim,fragment] +<< + \new Staff { + f2 g + } + \new Staff \with { + \remove "Time_signature_engraver" + \remove "Clef_engraver" + } { + f2 g2 + } +>> +@end lilypond + +In the second staff there are no time signature or clef symbols. This +is a rather crude method of making objects disappear since it will affect +the entire staff. This method also influences the spacing, which may or +may not be desirable. More sophisticated methods of blanking objects +are shown in @rlearning{Visibility and color of objects}. + +The next example shows a practical application. Bar lines and time +signatures are normally synchronized across the score. This is done +by the @code{Timing_translator} and @code{Default_bar_line_engraver}. +This plug-in keeps an administration of time signature, location +within the measure, etc. By moving these engraver from @code{Score} to +@code{Staff} context, we can have a score where each staff has its own +time signature. + +@cindex polymetric scores +@cindex Time signatures, multiple + +@lilypond[quote,relative=1,ragged-right,verbatim,fragment] +\new Score \with { + \remove "Timing_translator" + \remove "Default_bar_line_engraver" +} << + \new Staff \with { + \consists "Timing_translator" + \consists "Default_bar_line_engraver" + } { + \time 3/4 + c4 c c c c c + } + \new Staff \with { + \consists "Timing_translator" + \consists "Default_bar_line_engraver" + } { + \time 2/4 + c4 c c c c c + } +>> +@end lilypond + +@knownissues + +Usually the order in which the engravers are specified +does not matter, but in a few special cases the order +is important, for example where one engraver writes +a property and another reads it, or where one engraver +creates a grob and another must process it. The order in +which the engravers are specified is the order in which +they are called to carry out their processing. + +The following orderings are important: the +@code{Bar_engraver} must normally be first, and +the @code{New_fingering_engraver} must come before +the @code{Script_column_engraver}. There may be others +with ordering dependencies. + +@node Changing context default settings +@subsection Changing context default settings + +The context settings which are to be used by default in +@code{Score}, @code{Staff} and @code{Voice} contexts may be specified +in a @code{\layout} block, as illustrated in the following example. +The @code{\layout} block should be placed within the @code{\score} +block to which it is to apply, but outside any music. + +Note that the @code{\set} command itself and the context must be +omitted when the context default values are specified in this way: + +@lilypond[quote,verbatim] +\score { + \relative c'' { + a4^"Really small, thicker stems, no time signature" a a a + a a a a + } + \layout { + \context { + \Staff + fontSize = #-4 + \override Stem #'thickness = #4.0 + \remove "Time_signature_engraver" + } + } +} +@end lilypond + +In this example, the @code{\Staff} command specifies that the +subsequent specifications are to be applied to all staves within +this score block. + +Modifications can be made to the @code{Score} context or all +@code{Voice} contexts in a similar way. + +@knownissues + +It is not possible to collect context changes in a variable and apply +them to a @code{\context} definition by referring to that variable. + +The @code{\RemoveEmptyStaffContext} will overwrite your current +@code{\Staff} settings. If you wish to change the defaults for a +staff which uses @code{\RemoveEmptyStaffContext}, you must do so +after calling @code{\RemoveEmptyStaffContext}, ie + +@example +\layout @{ + \context @{ + \RemoveEmptyStaffContext + + \override Stem #'thickness = #4.0 + @} +@} +@end example + +@c TODO: add \with in here. + + + +@node Defining new contexts +@subsection Defining new contexts + +Specific contexts, like @code{Staff} and @code{Voice}, are made of +simple building blocks. It is possible to create new types of +contexts with different combinations of engraver plug-ins. + +The next example shows how to build a different type of +@code{Voice} context from scratch. It will be similar to +@code{Voice}, but only prints centered slash note heads. It can be used +to indicate improvisation in jazz pieces, + +@lilypond[quote,ragged-right] +\layout { \context { + \name ImproVoice + \type "Engraver_group" + \consists "Note_heads_engraver" + \consists "Rhythmic_column_engraver" + \consists "Text_engraver" + \consists Pitch_squash_engraver + squashedPosition = #0 + \override NoteHead #'style = #'slash + \override Stem #'transparent = ##t + \alias Voice +} +\context { \Staff + \accepts "ImproVoice" +}} + +\relative c'' { + a4 d8 bes8 \new ImproVoice { c4^"ad lib" c + c4 c^"undress" c_"while playing :)" c } + a1 +} +@end lilypond + + +These settings are defined within a @code{\context} block inside a +@code{\layout} block, + +@example +\layout @{ + \context @{ + @dots{} + @} +@} +@end example + +In the following discussion, the example input shown should go in place +of the @dots{} in the previous fragment. + +First it is necessary to define a name for the new context: + +@example +\name ImproVoice +@end example + +Since it is similar to the @code{Voice}, we want commands that work +on (existing) @code{Voice}s to remain working. This is achieved by +giving the new context an alias @code{Voice}, + +@example +\alias Voice +@end example + +The context will print notes and instructive texts, so we need to add +the engravers which provide this functionality, + +@example +\consists Note_heads_engraver +\consists Text_engraver +@end example + +but we only need this on the center line, + +@example +\consists Pitch_squash_engraver +squashedPosition = #0 +@end example + +The @rinternals{Pitch_squash_engraver} modifies note heads (created +by @rinternals{Note_heads_engraver}) and sets their vertical +position to the value of @code{squashedPosition}, in this case@tie{}@code{0}, +the center line. + +The notes look like a slash, and have no stem, + +@example +\override NoteHead #'style = #'slash +\override Stem #'transparent = ##t +@end example + +All these plug-ins have to cooperate, and this is achieved with a +special plug-in, which must be marked with the keyword @code{\type}. +This should always be @code{Engraver_group}. + +@example +\type "Engraver_group" +@end example + +Put together, we get + +@example +\context @{ + \name ImproVoice + \type "Engraver_group" + \consists "Note_heads_engraver" + \consists "Text_engraver" + \consists Pitch_squash_engraver + squashedPosition = #0 + \override NoteHead #'style = #'slash + \override Stem #'transparent = ##t + \alias Voice +@} +@end example + +@funindex \accepts +Contexts form hierarchies. We want to hang the @code{ImproVoice} +under @code{Staff}, just like normal @code{Voice}s. Therefore, we +modify the @code{Staff} definition with the @code{\accepts} +command, + +@example +\context @{ + \Staff + \accepts ImproVoice +@} +@end example + +@funindex \denies +The opposite of @code{\accepts} is @code{\denies}, +which is sometimes needed when reusing existing context definitions. + +Putting both into a @code{\layout} block, like + +@example +\layout @{ + \context @{ + \name ImproVoice + @dots{} + @} + \context @{ + \Staff + \accepts "ImproVoice" + @} +@} +@end example + +Then the output at the start of this subsection can be entered as + +@example +\relative c'' @{ + a4 d8 bes8 + \new ImproVoice @{ + c4^"ad lib" c + c4 c^"undress" + c c_"while playing :)" + @} + a1 +@} +@end example + + +@node Aligning contexts +@subsection Aligning contexts + +New contexts may be aligned above or below existing contexts. This +could be useful in setting up a vocal staff (@rlearning{Vocal ensembles}) and +in ossia, + +@c TODO Better example needed. Ref LM, and expand on it. + +@cindex ossia +@funindex alignAboveContext +@funindex alignBelowContext + +@lilypond[quote,ragged-right] +ossia = { f4 f f f } +\score{ + \relative c' \new Staff = "main" { + c4 c c c + << + \new Staff \with { alignAboveContext = #"main" } \ossia + { d8 f d f d f d f } + >> + } +} +@end lilypond + +@cindex nested contexts +@cindex contexts, nested + +@funindex \accepts +@funindex \denies + +Contexts like @code{PianoStaff} can contain other contexts +nested within them. Contexts which are acceptable for nesting +are defined by the @qq{accepts} list of a context. Contexts +which are not in this list are placed below the outer context +in the printed score. +For example, the @code{PianoStaff} context is defined by default +to accept @code{Staff} and @code{FiguredBass} contexts within +it, but not (for example) a @code{Lyrics} context. So in the +following structure the lyrics are placed below the piano staff +rather than between the two staves: + +@lilypond[verbatim,quote,relative=1] +\new PianoStaff +<< + \new Staff { e4 d c2 } + \addlyrics { Three blind mice } + \new Staff { + \clef "bass" + { c,1 } + } +>> +@end lilypond + +The @qq{accepts} list of a context can be modified to include +additional nested contexts, so if we wanted the lyrics to appear +between the two staves we could use: + +@lilypond[verbatim,quote,relative=1] +\new PianoStaff \with { \accepts Lyrics } +<< + \new Staff { e4 d c2 } + \addlyrics { Three blind mice } + \new Staff { + \clef "bass" + { c,1 } + } +>> +@end lilypond + +The opposite of @code{\accepts} is @code{\denies}; this removes a +context from the @qq{accepts} list. + +@node Explaining the Internals Reference +@section Explaining the Internals Reference + + +@menu +* Navigating the program reference:: +* Layout interfaces:: +* Determining the grob property:: +* Naming conventions:: +@end menu + +@node Navigating the program reference +@subsection Navigating the program reference + +@c TODO remove this (it's in the LM) +@c Replace with more factual directions + +Suppose we want to move the fingering indication in the fragment +below: + +@lilypond[quote,fragment,relative=2,verbatim] +c-2 +\stemUp +f +@end lilypond + +If you visit the documentation on fingering instructions (in +@ref{Fingering instructions}), you will notice: + +@quotation +@strong{See also} + +Internals Reference: @rinternals{Fingering}. + +@end quotation + + +@c outdated info; probably will delete. +@ignore +This fragment points to two parts of the program reference: a page +on @code{FingeringEvent} and one on @code{Fingering}. + +The page on @code{FingeringEvent} describes the properties of the music +expression for the input @code{-2}. The page contains many links +forward. For example, it says + +@quotation +Accepted by: @rinternals{Fingering_engraver}, +@end quotation + +@noindent +That link brings us to the documentation for the Engraver, the +plug-in, which says + +@quotation +This engraver creates the following layout objects: @rinternals{Fingering}. +@end quotation + +In other words, once the @code{FingeringEvent}s are interpreted, the +@code{Fingering_engraver} plug-in will process them. +@end ignore + +@ignore +@c I can't figure out what this is supposed to mean. -gp + +The @code{Fingering_engraver} is also listed to create +@rinternals{Fingering} objects, + +@c old info? it doesn't make any sense to me with our current docs. +This is also the +second bit of information listed under @b{See also} in the Notation +manual. +@end ignore + +@ifnothtml +The programmer's reference is available as an HTML document. It is +highly recommended that you read it in HTML form, either online or +by downloading the HTML documentation. This section will be much more +difficult to understand if you are using the +PDF manual. +@end ifnothtml + +Follow the link to @rinternals{Fingering}. At the top of the +page, you will see + +@quotation +Fingering objects are created by: @rinternals{Fingering_engraver} and +@rinternals{New_fingering_engraver}. +@end quotation + +By following related links inside the program reference, we can follow the +flow of information within the program: + +@itemize + +@item @rinternals{Fingering}: +@rinternals{Fingering} objects are created by: +@rinternals{Fingering_engraver} + +@item @rinternals{Fingering_engraver}: +Music types accepted: @rinternals{fingering-event} + +@item @rinternals{fingering-event}: +Music event type @code{fingering-event} is in Music expressions named +@rinternals{FingeringEvent} +@end itemize + +This path goes against the flow of information in the program: it +starts from the output, and ends at the input event. You could +also start at an input event, and read with the flow of +information, eventually ending up at the output object(s). + +The program reference can also be browsed like a normal document. It +contains chapters on +@ifhtml +@rinternals{Music definitions}, +@end ifhtml +@ifnothtml +@code{Music definitions} +@end ifnothtml +on @rinternals{Translation}, and the @rinternals{Backend}. Every +chapter lists all the definitions used and all properties that may be +tuned. + + +@node Layout interfaces +@subsection Layout interfaces + +@cindex interface, layout +@cindex layout interface +@cindex grob + +The HTML page that we found in the previous section describes the +layout object called @rinternals{Fingering}. Such an object is a +symbol within the score. It has properties that store numbers (like +thicknesses and directions), but also pointers to related objects. A +layout object is also called a @emph{Grob}, which is short for Graphical +Object. For more details about Grobs, see @rinternals{grob-interface}. + +The page for @code{Fingering} lists the definitions for the +@code{Fingering} object. For example, the page says + +@quotation +@code{padding} (dimension, in staff space): + +@code{0.5} +@end quotation + +@noindent +which means that the number will be kept at a distance of at least 0.5 +of the note head. + + +Each layout object may have several functions as a notational or +typographical element. For example, the Fingering object +has the following aspects + +@itemize +@item +Its size is independent of the horizontal spacing, unlike slurs or beams. + +@item +It is a piece of text. Granted, it is usually a very short text. + +@item +That piece of text is typeset with a font, unlike slurs or beams. + +@item +Horizontally, the center of the symbol should be aligned to the +center of the note head. + +@item +Vertically, the symbol is placed next to the note and the staff. + +@item +The vertical position is also coordinated with other superscript +and subscript symbols. +@end itemize + +Each of these aspects is captured in so-called @emph{interface}s, +which are listed on the @rinternals{Fingering} page at the bottom + +@quotation +This object supports the following interfaces: +@rinternals{item-interface}, +@rinternals{self-alignment-interface}, +@rinternals{side-position-interface}, @rinternals{text-interface}, +@rinternals{text-script-interface}, @rinternals{font-interface}, +@rinternals{finger-interface}, and @rinternals{grob-interface}. +@end quotation + +Clicking any of the links will take you to the page of the respective +object interface. Each interface has a number of properties. Some of +them are not user-serviceable (@q{Internal properties}), but others +can be modified. + +We have been talking of @emph{the} @code{Fingering} object, but actually it +does not amount to much. The initialization file (see +@rlearning{Other sources of information}) +@file{scm/@/define@/-grobs@/.scm} shows the soul of the @q{object}, + +@example +(Fingering + . ((padding . 0.5) + (avoid-slur . around) + (slur-padding . 0.2) + (staff-padding . 0.5) + (self-alignment-X . 0) + (self-alignment-Y . 0) + (script-priority . 100) + (stencil . ,ly:text-interface::print) + (direction . ,ly:script-interface::calc-direction) + (font-encoding . fetaNumber) + (font-size . -5) ; don't overlap when next to heads. + (meta . ((class . Item) + (interfaces . (finger-interface + font-interface + text-script-interface + text-interface + side-position-interface + self-alignment-interface + item-interface)))))) +@end example + +@noindent +As you can see, the @code{Fingering} object is nothing more than a +bunch of variable settings, and the webpage in the Internals Reference +is directly generated from this definition. + + +@node Determining the grob property +@subsection Determining the grob property + +@c TODO remove this (it's in the LM) +@c Replace with more factual directions + +Recall that we wanted to change the position of the @b{2} in + +@lilypond[quote,fragment,relative=2,verbatim] +c-2 +\stemUp +f +@end lilypond + +Since the @b{2} is vertically positioned next to its note, we have to +meddle with the interface associated with this positioning. This is +done using @code{side-position-interface}. The page for this interface +says + +@quotation +@code{side-position-interface} + +Position a victim object (this one) next to other objects (the +support). The property @code{direction} signifies where to put the +victim object relative to the support (left or right, up or down?) +@end quotation + +@cindex padding +@noindent +Below this description, the variable @code{padding} is described as + +@quotation +@table @code +@item padding +(dimension, in staff space) + +Add this much extra space between objects that are next to each other. +@end table +@end quotation + +By increasing the value of @code{padding}, we can move the +fingering away from the note head. The following command inserts +3 staff spaces of white +between the note and the fingering: +@example +\once \override Voice.Fingering #'padding = #3 +@end example + +Inserting this command before the Fingering object is created, +i.e., before @code{c2}, yields the following result: + +@lilypond[quote,relative=2,fragment,verbatim] +\once \override Voice.Fingering #'padding = #3 +c-2 +\stemUp +f +@end lilypond + + +In this case, the context for this tweak is @code{Voice}. This +fact can also be deduced from the program reference, for the page for +the @rinternals{Fingering_engraver} plug-in says + +@quotation +Fingering_engraver is part of contexts: @dots{} @rinternals{Voice} +@end quotation + + +@node Naming conventions +@subsection Naming conventions + +Another thing that is needed, is an overview of the various naming +conventions: + + scheme functions: lowercase-with-hyphens (incl. one-word +names) + scheme functions: ly:plus-scheme-style + music events, music classes and music properties: +as-scheme-functions + Grob interfaces: scheme-style + backend properties: scheme-style (but X and Y!) + contexts (and MusicExpressions and grobs): Capitalized or +CamelCase + context properties: lowercaseFollowedByCamelCase + engravers: +Capitalized_followed_by_lowercase_and_with_underscores + +Which of these are conventions and which are rules? +Which are rules of the underlying language, and which are +LP-specific? + + +@node Modifying properties +@section Modifying properties + +@c TODO change the menu and subsection node names to use +@c backslash once the new macro to handle the refs +@c is available. Need to find and change all refs at +@c the same time. -td + +@menu +* Overview of modifying properties:: +* The set command:: +* The override command:: +* The tweak command:: +* set versus override:: +@end menu + + +@node Overview of modifying properties +@subsection Overview of modifying properties + +Each context is responsible for creating certain types of graphical +objects. The settings used for printing these objects are also stored by +context. By changing these settings, the appearance of objects can be +altered. + +The syntax for this is + +@example +\override @var{context}.@var{name} #'@var{property} = #@var{value} +@end example + +Here @var{name} is the name of a graphical object, like +@code{Stem} or @code{NoteHead}, and @var{property} is an internal +variable of the formatting system (@q{grob property} or @q{layout +property}). The latter is a symbol, so it must be quoted. The +subsection @ref{Modifying properties}, explains what to fill in +for @var{name}, @var{property}, and @var{value}. Here we only +discuss the functionality of this command. + +The command + +@verbatim +\override Staff.Stem #'thickness = #4.0 +@end verbatim + +@noindent +makes stems thicker (the default is 1.3, with staff line thickness as a +unit). Since the command specifies @code{Staff} as context, it only +applies to the current staff. Other staves will keep their normal +appearance. Here we see the command in action: + +@lilypond[quote,verbatim,relative=2,fragment] +c4 +\override Staff.Stem #'thickness = #4.0 +c4 +c4 +c4 +@end lilypond + +The @code{\override} command changes the definition of the @code{Stem} +within the current @code{Staff}. After the command is interpreted +all stems are thickened. + +Analogous to @code{\set}, the @var{context} argument may be left out, +causing the default context @code{Voice} to be used. Adding +@code{\once} applies the change during one timestep only. + +@lilypond[quote,fragment,verbatim,relative=2] +c4 +\once \override Stem #'thickness = #4.0 +c4 +c4 +@end lilypond + +The @code{\override} must be done before the object is +started. Therefore, when altering @emph{Spanner} objects such as slurs +or beams, the @code{\override} command must be executed at the moment +when the object is created. In this example, + +@lilypond[quote,fragment,verbatim,relative=2] +\override Slur #'thickness = #3.0 +c8[( c +\override Beam #'thickness = #0.6 +c8 c]) +@end lilypond + +@noindent +the slur is fatter but the beam is not. This is because the command for +@code{Beam} comes after the Beam is started, so it has no effect. + +Analogous to @code{\unset}, the @code{\revert} command for a context +undoes an @code{\override} command; like with @code{\unset}, it only +affects settings that were made in the same context. In other words, the +@code{\revert} in the next example does not do anything. + +@example +\override Voice.Stem #'thickness = #4.0 +\revert Staff.Stem #'thickness +@end example + +Some tweakable options are called @q{subproperties} and reside inside +properties. To tweak those, use commands of the form + +@c leave this as a long long +@example +\override @var{context}.@var{name} #'@var{property} #'@var{subproperty} = #@var{value} +@end example + +@noindent +such as + +@example +\override Stem #'(details beamed-lengths) = #'(4 4 3) +@end example + + +@seealso +Internals: @rinternals{OverrideProperty}, @rinternals{RevertProperty}, +@rinternals{PropertySet}, @rinternals{Backend}, and +@rinternals{All layout objects}. + + +@knownissues + +The back-end is not very strict in type-checking object properties. +Cyclic references in Scheme values for properties can cause hangs +or crashes, or both. + + + +@node The set command +@subsection The @code{\set} command + +@cindex properties +@funindex \set +@cindex changing properties + +Each context can have different @emph{properties}, variables contained +in that context. They can be changed during the interpretation step. +This is achieved by inserting the @code{\set} command in the music, + +@example +\set @var{context}.@var{prop} = #@var{value} +@end example + +For example, +@lilypond[quote,verbatim,relative=2,fragment] +R1*2 +\set Score.skipBars = ##t +R1*2 +@end lilypond + +This command skips measures that have no notes. The result is that +multi-rests are condensed. The value assigned is a Scheme object. In +this case, it is @code{#t}, the boolean True value. + +If the @var{context} argument is left out, then the current bottom-most +context (typically @code{ChordNames}, @code{Voice}, or +@code{Lyrics}) is used. In this example, + +@lilypond[quote,verbatim,relative=2,fragment] +c8 c c c +\set autoBeaming = ##f +c8 c c c +@end lilypond + +@noindent +the @var{context} argument to @code{\set} is left out, so automatic +beaming is switched off in the current @rinternals{Voice}. Note that +the bottom-most context does not always contain the property that you +wish to change -- for example, attempting to set the @code{skipBars} +property (of the bottom-most context, in this case @code{Voice}) will +have no effect. + +@lilypond[quote,verbatim,relative=2,fragment] +R1*2 +\set skipBars = ##t +R1*2 +@end lilypond + +Contexts are hierarchical, so if a bigger context was specified, for +example @code{Staff}, then the change would also apply to all +@code{Voice}s in the current stave. The change is applied +@q{on-the-fly}, during the music, so that the setting only affects the +second group of eighth notes. + +@funindex \unset + +There is also an @code{\unset} command, +@example +\unset @var{context}.@var{prop} +@end example + +@noindent +which removes the definition of @var{prop}. This command removes +the definition only if it is set in @var{context}, so + +@example +\set Staff.autoBeaming = ##f +@end example + +@noindent +introduces a property setting at @code{Staff} level. The setting also +applies to the current @code{Voice}. However, + +@example +\unset Voice.autoBeaming +@end example + +@noindent +does not have any effect. To cancel this setting, the @code{\unset} +must be specified on the same level as the original @code{\set}. In +other words, undoing the effect of @code{Staff.autoBeaming = ##f} +requires +@example +\unset Staff.autoBeaming +@end example + +Like @code{\set}, the @var{context} argument does not have to be +specified for a bottom context, so the two statements + +@example +\set Voice.autoBeaming = ##t +\set autoBeaming = ##t +@end example + +@noindent +are equivalent. + + +@cindex \once +Settings that should only apply to a single time-step can be entered +with @code{\once}, for example in + +@lilypond[quote,verbatim,relative=2,fragment] +c4 +\once \set fontSize = #4.7 +c4 +c4 +@end lilypond + +the property @code{fontSize} is unset automatically after the second +note. + +A full description of all available context properties is in the +program reference, see +@ifhtml +@rinternals{Tunable context properties}. +@end ifhtml +@ifnothtml +Translation @expansion{} Tunable context properties. +@end ifnothtml + + + +@node The override command +@subsection The @code{\override} command + +Commands which change output generally look like + +@example +\override Voice.Stem #'thickness = #3.0 +@end example + +@noindent +To construct this tweak we must determine these bits of information: + +@itemize +@item the context: here @code{Voice}. +@item the layout object: here @code{Stem}. +@item the layout property: here @code{thickness}. +@item a sensible value: here @code{3.0}. +@end itemize + +Some tweakable options are called @q{subproperties} and reside inside +properties. To tweak those, use commands in the form + +@example +\override Stem #'(details beamed-lengths) = #'(4 4 3) +@end example + +@cindex internal documentation +@cindex finding graphical objects +@cindex graphical object descriptions +@cindex tweaking +@funindex \override +@cindex internal documentation + +For many properties, regardless of the data type of the property, setting the +property to false ( @code{##f} ) will result in turning it off, causing +LilyPond to ignore that property entirely. This is particularly useful for +turning off grob properties which may otherwise be causing problems. + +We demonstrate how to glean this information from the notation manual +and the program reference. + + +@node The tweak command +@subsection The @code{\tweak} command + +@funindex \tweak +@cindex tweaking + +In some cases, it is possible to take a short-cut for tuning +graphical objects. For objects that are created directly from +an item in the input file, you can use the @code{\tweak} command. +For example: + +@lilypond[relative=2,verbatim] +< c + \tweak #'color #red + d + g + \tweak #'duration-log #1 + a +> 4 +-\tweak #'padding #8 +-^ +@end lilypond + +@cindex chord, modifying one note in + +But the main use of the @code{\tweak} command is to modify just +one of a number of notation elements which start at the same musical +moment, like the notes of a chord, or tuplet brackets which start +at the same time. + +For an introduction to the syntax and uses of the tweak command +see @rlearning{Tweaking methods}. + +The @code{\tweak} command sets a property in the following object +directly, without requiring the grob name or context to be +specified. For this to work, it is necessary for the @code{\tweak} +command to remain immediately adjacent to the object to which it is +to apply after the input file has been converted to a music stream. +This is often not the case, as many additional elements are inserted +into the music stream implicitly. For example, when a note which is +not part of a chord is processed, LilyPond implicitly inserts a +@code{ChordEvent} event before the note, so separating the tweak +from the note. However, if chord symbols are placed round the +tweak and the note, the @code{\tweak} command comes after the +@code{ChordEvent} in the music stream, so remaining adjacent to the +note, and able to modify it. + +So, this works: + +@lilypond[relative=2,verbatim,quote] +<\tweak #'color #red c>4 +@end lilypond + +@noindent +but this does not: + +@lilypond[relative=2,verbatim,quote] +\tweak #'color #red c4 +@end lilypond + +When several similar items are placed at the same musical moment, +the @code{\override} command cannot be used to modify just one of +them -- this is where the @code{\tweak} command must be used. +Items which may appear more than once at the same musical moment +include the following: + +@c TODO expand to include any further uses of \tweak +@itemize +@item note heads of notes inside a chord +@item articulation signs on a single note +@item ties between notes in a chord +@item tuplet brackets starting at the same time +@end itemize + +@c TODO add examples of these + +@noindent +and @code{\tweak} may be used to modify any single occurrence of +these items. + +Notably the @code{\tweak} command cannot be used to modify stems, +beams or accidentals directly, since these are generated later by +note heads, rather than by music elements in the input stream. +Nor can a @code{\tweak} command be used to modify clefs or time +signatures, since these become separated from any preceding +@code{\tweak} command in the input stream by the automatic +insertion of extra elements required to specify the context. + +But the @code{\tweak} command can be used as an alternative to +the @code{\override} command to modify those notational elements +that do not cause any additional implicit elements to be added +before them in the music stream. For example, slurs may be +modified in this way: + +@lilypond[verbatim,quote,relative=1] +c-\tweak #'thickness #5 ( d e f) +@end lilypond + +Also several @code{\tweak} commands may be placed before a +notational element -- all affect it: + +@lilypond[verbatim,quote,relative=1] +c +-\tweak #'style #'dashed-line +-\tweak #'dash-fraction #0.2 +-\tweak #'thickness #3 +-\tweak #'color #red + \glissando +f' +@end lilypond + +The music stream which is generated from a section of an input file, +including any automatically inserted elements, may be examined, +see @ref{Displaying music expressions}. This may be helpful in +determining what may be modified by a @code{\tweak} command. + + +@seealso +Learning Manual: +@rlearning{Tweaking methods}. + +Notation Reference: +@ref{Displaying music expressions}. + + +@knownissues + +@cindex tweaks in a variable +The @code{\tweak} command cannot be used inside a variable. + +@cindex tweaks in lyrics +The @code{\tweak} commands cannot be used in @code{\lyricmode}. + +@cindex tweaking control points +@cindex control points, tweaking + +The @code{\tweak} command cannot be used to modify the control +points of just one of several ties in a chord, other than the first +one encountered in the input file. + +@node set versus override +@subsection @code{\set} vs. @code{\override} + +We have seen two methods of changing properties: @code{\set} and +@code{\override}. There are actually two different kinds of +properties. + +Contexts can have properties, which are usually named in +@code{studlyCaps}. They mostly control the translation from +music to notation, eg. @code{localKeySignature} (for determining +whether to print accidentals), @code{measurePosition} (for +determining when to print a bar line). Context properties can +change value over time while interpreting a piece of music; +@code{measurePosition} is an obvious example of +this. Context properties are modified with @code{\set}. + +There is a special type of context property: the element +description. These properties are named in @code{StudlyCaps} +(starting with capital letters). They contain the +@q{default settings} for said graphical object as an +association list. See @file{scm/@/define@/-grobs@/.scm} +to see what kind of settings there are. Element descriptions +may be modified with @code{\override}. + +@code{\override} is actually a shorthand; + +@example +\override @var{context}.@var{name} #'@var{property} = #@var{value} +@end example + +@noindent +is more or less equivalent to + +@c leave this long line -gp +@example +\set @var{context}.@var{name} #'@var{property} = #(cons (cons '@var{property} @var{value}) }, @code{--} +@end itemize + +Direction indicators affect only the next note: + +@lilypond[verbatim,quote,relative=2] +c2( c) +c2_( c) +c2( c) +c2^( c) +@end lilypond + +@strong{The direction property} + +The position or direction of many layout objects is controlled +by the @code{direction} property. + +The value of the @code{direction} property may be +set to @code{1}, meaning @qq{up} or @qq{above}, or to @code{-1}, +meaning @qq{down} or @qq{below}. The symbols @code{UP} and +@code{DOWN} may be used instead of @code{1} and @code{-1} +respectively. The default direction may be specified by setting +@code{direction} to @code{0} or @code{CENTER}. Alternatively, +in many cases predefined commands +exist to specify the direction. These are all of the form + +@noindent +@code{\xxxUp}, @code{xxxDown}, @code{xxxNeutral} + +@noindent +where @code{xxxNeutral} means @qq{use the default direction}. +See @rlearning{Within-staff objects}. + +In a few cases, arpeggio being the only common example, the value +of the @code{direction} property specifies whether the object +is to be placed to the right or left of the parent object. In +this case @code{-1} or @code{LEFT} means @qq{to the left} and +@code{1} or @code{RIGHT} means @qq{to the right}. @code{0} +or @code{CENTER} means @qq{use the default} direction, as before. + +@ignore +These all have side-axis set to #X +AmbitusAccidental - direction has no effect +Arpeggio - works +StanzaNumber - not tried +TrillPitchAccidental - not tried +TrillPitchGroup - not tried +@end ignore + +These indications affect all notes until they are cancelled. + +@lilypond[verbatim,quote,relative=2] +c2( c) +\slurDown +c2( c) +c2( c) +\slurNeutral +c2( c) +@end lilypond + + +@node Context layout order +@subsection Context layout order + +@cindex contexts, layout order + +Contexts are normally positioned in a system from top to bottom +in the order in which they are encountered in the input file. When +contexts are nested, the outer context will include inner nested +contexts as specified in the input file, provided the inner contexts +are included in the outer context's @qq{accepts} list. Nested +contexts which are not included in the outer context's @qq{accepts} +list will be repositioned below the outer context rather than nested +within it. + +Note that a context will be silently created implicitly if a command +is encountered when there is no suitable context available to +contain it. This can give rise to unexpected new staves or scores. + +The default order in which contexts are laid out and the +@qq{accepts} list can be changed, see @ref{Aligning contexts}. + +@seealso +Learning Manual: +@rlearning{An extra staff appears}. + +@node Distances and measurements +@subsection Distances and measurements + +@cindex distances, absolute +@cindex distances, scaled + +@funindex \mm +@funindex \cm +@funindex \in +@funindex \pt + +Distances in LilyPond are of two types: absolute and scaled. + +Absolute distances are used for specifying margins, indents, and +other page layout details, and are by default specified in +millimeters. Distances may be specified in other units by +following the quantity by @code{\mm}, @code{\cm}, +@code{\in}@tie{}(inches), or @code{\pt}@tie{}(points, 1/72.27 +of an inch). Page layout distances can also be specified in +scalable units (see the following paragraph) by appending +@code{\staff-space} to the quantity. +Page layout is described in detail in @ref{Page formatting}. + +Scaled distances are always specified in units of the staff-space +or, rarely, the half staff-space. The staff-space is the distance +between two adjacent staff lines. The default value can be changed +globally by setting the global staff size, or it can be overridden +locally by changing the @code{staff-space} property of +@code{StaffSymbol}. Scaled distances automatically scale with any +change to the either the global staff size or the +@code{staff-space} property of @code{StaffSymbol}, but fonts scale +automatically only with changes to the global staff size. +The global staff size thus enables the overall size of a rendered +score to be easily varied. For the methods of setting the global +staff size see @ref{Setting the staff size}. + +@funindex magstep + +If just a section of a score needs to be rendered to a different +scale, for example an ossia section or a footnote, the global staff +size cannot simply be changed as this would affect the entire score. +In such cases the change in size is made by overriding both the +@code{staff-space} property of @code{StaffSymbol} and the size of +the fonts. A Scheme function, @code{magstep}, is available to +convert from a font size change to the equivalent change in +@code{staff-space}. For an explanation and an example of its use, +see @rlearning{Length and thickness of objects}. + + +@seealso +Learning Manual: +@rlearning{Length and thickness of objects}. + +Notation Reference: +@ref{Page formatting}, +@ref{Setting the staff size}. + + +@node Staff symbol properties +@subsection Staff symbol properties + +@cindex adjusting staff symbol +@cindex drawing staff symbol +@cindex staff symbol, setting of + +@c TODO Extend or remove this section. See also NR 1.6.2 Staff symbol +@c Need to think of uses for these properties. Eg 'line-positions +@c is used in a snippet to thicken centre line. +@c If retained, add @ref to here in 1.6.2 -td + +The vertical position of staff lines and the number of staff lines +can be defined at the same time. As the following example shows, +note positions are not influenced by the staff line positions. + +@warning{The @code{'line-positions} property overrides the +@code{'line-count} property. The number of staff lines is +implicitly defined by the number of elements in the list of values +for @code{'line-positions}.} + +@lilypond[verbatim,quote,relative=1] +\new Staff \with { + \override StaffSymbol #'line-positions = #'(7 3 0 -4 -6 -7) +} +{ a4 e' f b | d1 } +@end lilypond + +The width of a staff can be modified. The units are staff +spaces. The spacing of objects inside the staff is not affected by +this setting. + +@lilypond[verbatim,quote,relative=1] +\new Staff \with { + \override StaffSymbol #'width = #23 +} +{ a4 e' f b | d1 } +@end lilypond + + +@node Spanners +@subsection Spanners + +Many objects of musical notation extend over several notes or even +several bars. Examples are slurs, beams, tuplet brackets, volta +repeat brackets, crescendi, trills, and glissandi. Such objects +are collectively called @qq{spanners}, and have special properties to control +their appearance and behaviour. Some of these properties are common +to all spanners; others are restricted to a sub-set of the spanners. + +All spanners support the @code{spanner-interface}. A few, esentially +those that draw a straight line between the two objects, support in +addition the @code{line-spanner-interface}. + +@unnumberedsubsubsec Using the @code{spanner-interface} + +This interface provides two properties that apply to several spanners. + +@strong{@i{The @code{minimum-length} property}} + +The minimum length of the spanner is specified by the +@code{minimum-length} property. Increasing this usually has the +necessary effect of increasing the spacing of the notes between the +two end points. However, this override has no effect on +many spanners, as their length is determined by other considerations. +A few examples where it is effective are shown below. + +@ignore +Works for: + Tie + MultiMeasureRest + Hairpin + Slur + PhrasingSlur + +Works as long as callback is made: + Glissando + Beam + +Works not at all for: + LyricSpace + LyricHyphen + LyricExtender + TextSpanner + System + +@end ignore + +@lilypond[verbatim,quote,relative=2] +a~a +a +% increase the length of the tie +-\tweak #'minimum-length #5 +~a +@end lilypond + +@lilypond[verbatim,quote,relative=2] +a1 +\compressFullBarRests +R1*23 +% increase the length of the rest bar +\once \override MultiMeasureRest #'minimum-length = #20 +R1*23 +a1 +@end lilypond + +@lilypond[verbatim,quote,relative=2] +a \< a a a \! +% increase the length of the hairpin +\override Hairpin #'minimum-length = #20 +a \< a a a \! +@end lilypond + +This override can also be used to increase the length of slurs and +phrasing slurs: + +@lilypond[verbatim,quote,relative=2] +a( a) +a +-\tweak #'minimum-length #5 +( a) + +a\( a\) +a +-\tweak #'minimum-length #5 +\( a\) +@end lilypond + +For some layout objects, the @code{minimum-length} property becomes +effective only if the @code{set-spacing-rods} procedure is called +explicitly. To do this, the @code{springs-and-rods} property should +be set to @code{ly:spanner::set-spacing-rods}. For example, +the minimum length of a glissando has no effect unless the +@code{springs-and-rods} property is set: + +@lilypond[verbatim,quote,relative=1] +% default +e \glissando c' + +% not effective alone +\once \override Glissando #'minimum-length = #20 +e, \glissando c' + +% effective only when both overrides are present +\once \override Glissando #'minimum-length = #20 +\once \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods +e, \glissando c' +@end lilypond + +The same is true of the @code{Beam} object: + +@lilypond[verbatim,quote,relative=1] +% not effective alone +\once \override Beam #'minimum-length = #20 +e8 e e e + +% effective only when both overrides are present +\once \override Beam #'minimum-length = #20 +\once \override Beam #'springs-and-rods = #ly:spanner::set-spacing-rods +e8 e e e +@end lilypond + +@strong{@i{The @code{to-barline} property}} + +The second useful property of the @code{spanner-interface} is +@code{to-barline}. By default this is true, causing hairpins and +other spanners which are terminated on the first note of a measure to +end instead on the immediately preceding bar line. If set to false, +the spanner will extend beyond the bar line and end on the note +itself: + +@lilypond[verbatim,quote,relative=2] +a \< a a a a \! a a a \break +\override Hairpin #'to-barline = ##f +a \< a a a a \! a a a +@end lilypond + +This property is not effective for all spanners. For example, +seting it to @code{#t} has no effect on slurs or phrasing slurs +or on other spanners for which terminating on the bar line would +not be meaningful. + +@unnumberedsubsubsec Using the @code{line-spanner-interface} + +Objects which support the @code{line-spanner-interface} include + +@itemize +@item @code{DynamicTextSpanner} +@item @code{Glissando} +@item @code{TextSpanner} +@item @code{TrillSpanner} +@item @code{VoiceFollower} +@end itemize + +The routine responsible for drawing the stencils for these spanners is +@code{ly:line-interface::print}. This routine determines the +exact location of the two end points and draws a line +between them, in the style requested. The locations of the two +end points of the spanner are computed on-the-fly, but it is +possible to override their Y-coordinates. The +properties which need to be specified are nested +two levels down within the property hierarchy, but the syntax of +the @code{\override} command is quite simple: + +@lilypond[relative=2,quote,verbatim] +e2 \glissando b +\once \override Glissando #'(bound-details left Y) = #3 +\once \override Glissando #'(bound-details right Y) = #-2 +e2 \glissando b +@end lilypond + +The units for the @code{Y} property are @code{staff-space}s, +with the center line of the staff being the zero point. +For the glissando, this is the value for @code{Y} at the +X-coordinate corresponding to the center point of each note head, +if the line is imagined to be extended to there. + +If @code{Y} is not set, the value is computed from the vertical +position of the corresponding attachment point of the spanner. + +In case of a line break, the values for the end points are +specified by the @code{left-broken} and @code{right-broken} +sub-lists of @code{bound-details}. For example: + +@lilypond[relative=2,ragged-right,verbatim,fragment] +\override Glissando #'breakable = ##t +\override Glissando #'(bound-details right-broken Y) = #-3 +c1 \glissando \break +f1 +@end lilypond + + +A number of further properties of the @code{left} and +@code{right} sub-lists of the @code{bound-details} property +may be modified in the same way as @code{Y}: + +@table @code +@item Y +This sets the Y-coordinate of the end point, in @code{staff-space}s +offset from the staff center line. By default, it is the center of +the bound object, so a glissando points to the vertical center of +the note head. + +For horizontal spanners, such as text spanners and trill spanners, +it is hardcoded to 0. + +@item attach-dir +This determines where the line starts and ends in the X-direction, +relative to the bound object. So, a value of @code{-1} (or +@code{LEFT}) makes the line start/end at the left side of the note +head it is attached to. + +@item X +This is the absolute X-coordinate of the end point. It is usually +computed on the fly, and overriding it has little useful effect. + +@item stencil +Line spanners may have symbols at the beginning or end, which is +contained in this sub-property. This is for internal use; it is +recommended that @code{text} be used instead. + +@item text +This is a markup that is evaluated to yield the stencil. It is used +to put @i{cresc.}, @i{tr} and other text on horizontal spanners. + +@lilypond[quote,ragged-right,fragment,relative=2,verbatim] +\override TextSpanner #'(bound-details left text) + = \markup { \small \bold Slower } +c2\startTextSpan b c a\stopTextSpan +@end lilypond + +@item stencil-align-dir-y +@item stencil-offset +Without setting one of these, the stencil is simply put at the +end-point, centered on the line, as defined by the @code{X} and +@code{Y} sub-properties. Setting either @code{stencil-align-dir-y} +or @code{stencil-offset} will move the symbol at the edge vertically +relative to the end point of the line: + +@lilypond[relative=1,fragment,verbatim] +\override TextSpanner + #'(bound-details left stencil-align-dir-y) = #-2 +\override TextSpanner + #'(bound-details right stencil-align-dir-y) = #UP + +\override TextSpanner + #'(bound-details left text) = #"ggg" +\override TextSpanner + #'(bound-details right text) = #"hhh" +c4^\startTextSpan c c c \stopTextSpan +@end lilypond + +Note that negative values move the text @emph{up}, contrary to the +effect that might be expected, as a value of @code{-1} or +@code{DOWN} means align the @emph{bottom} edge of the text with +the spanner line. A value of @code{1} or @code{UP} aligns +the top edge of the text with the spanner line. + +@item arrow +Setting this sub-property to @code{#t} produces an arrowhead at the +end of the line. + +@item padding +This sub-property controls the space between the specified +end point of the line and the actual end. Without padding, a +glissando would start and end in the center of each note head. + +@end table + +The music function @code{\endSpanners} terminates the spanner +which starts on the immediately following note prematurely. It +is terminated after exactly one note, or at the following bar line +if @code{to-barline} is true and a bar line occurs before the next +note. + +@lilypond[verbatim,quote,ragged-right,relative=2,fragment] +\endSpanners +c2 \startTextSpan c2 c2 +\endSpanners +c2 \< c2 c2 +@end lilypond + +When using @code{\endSpanners} it is not necessary to close +\startTextSpan with \stopTextSpan, nor is it necessary to close +hairpins with @code{\!}. + + +@seealso +Internals Reference: @rinternals{TextSpanner}, +@rinternals{Glissando}, @rinternals{VoiceFollower}, +@rinternals{TrillSpanner}, +@rinternals{line-spanner-interface}. + + +@node Visibility of objects +@subsection Visibility of objects + +@cindex objects, visibility of +@cindex grobs, visibility of +@cindex visibility of objects + +There are four main ways in which the visibility of layout objects +can be controlled: their stencil can be removed, they can be made +transparent, they can be colored white, or their +@code{break-visibility} property can be overridden. The first +three apply to all layout objects; the last to just a few -- the +@emph{breakable} objects. The Learning Manual introduces these +four techniques, see @rlearning{Visibility and color of objects}. + +There are also a few other techniques which are specific to +certain layout objects. These are covered under Special +considerations. + +@menu +* Removing the stencil:: +* Making objects transparent:: +* Painting objects white:: +* Using break-visibility:: +* Special considerations:: +@end menu + + +@node Removing the stencil +@unnumberedsubsubsec Removing the stencil + +@cindex stencil, removing + +Every layout object has a stencil property. By default this is set +to the specific function which draws that object. If this property +is overridden to @code{#f} no function will be called and the object +will not be drawn. The default action can be recovered with +@code{\revert}. + +@lilypond[quote,verbatim,relative=1] +a1 a +\override Score.BarLine #'stencil = ##f +a a +\revert Score.BarLine #'stencil +a a a +@end lilypond + +@node Making objects transparent +@unnumberedsubsubsec Making objects transparent + +@cindex transparent, making objects + +Every layout object has a transparent property which by default is +set to @code{#f}. If set to @code{#t} the object still occupies +space but is made invisible. + +@lilypond[quote,verbatim,relative=2] +a4 a +\once \override NoteHead #'transparent = ##t +a a +@end lilypond + +@node Painting objects white +@unnumberedsubsubsec Painting objects white + +@cindex objects, coloring +@cindex coloring objects +@cindex layers +@cindex printing order +@cindex overwriting objects +@cindex objects, overwriting +@cindex grobs, overwriting + +Every layout object has a color property which by default is set +to @code{black}. If this is overridden to @code{white} the object +will be indistinguishable from the white background. However, +if the object crosses other objects the color of the crossing +points will be determined by the order in which they are drawn, +and this may leave a ghostly image of the white object, as shown +here: + +@lilypond[quote,verbatim,relative=2] +\override Staff.Clef #'color = #white +a1 +@end lilypond + +This may be avoided by changing the order of printing the objects. +All layout objects have a @code{layer} property which should be set +to an integer. Objects with the lowest value of @code{layer} are +drawn first, then objects with progressively higher values are drawn, +so objects with higher values overwrite objects with lower values. +By default most objects are assigned a @code{layer} value of +@code{1}, although a few objects, including @code{StaffSymbol} and +@code{BarLine}, are assigned a value of @code{0}. The order of +printing objects with the same value of @code{layer} is indeterminate. + +In the example above the white clef, with a default @code{layer} +value of @code{1}, is drawn after the staff lines (default +@code{layer} value @code{0}), so overwriting them. To change this, +the @code{Clef} object must be given in a lower value of +@code{layer}, say @code{-1}, so that it is drawn earlier: + +@lilypond[quote,verbatim,relative=2] +\override Staff.Clef #'color = #white +\override Staff.Clef #'layer = #-1 +a1 +@end lilypond + +@node Using break-visibility +@unnumberedsubsubsec Using break-visibility + +@c TODO Add making other objects breakable + +@cindex break-visibility + +Most layout objects are printed only once, but some like +bar lines, clefs, time signatures and key signatures, may need +to be printed twice when a line break occurs -- once at the end +of the line and again at the start of the next line. Such +objects are called @emph{breakable}, and have a property, the +@code{break-visibility} property to control their visibility +at the three positions in which they may appear -- at the +start of a line, within a line if they are changed, and at the +end of a line if a change takes place there. + +For example, the time signature +by default will be printed at the start of the first line, but +nowhere else unless it changes, when it will be printed at the +point at which the change occurs. If this change occurs at the +end of a line the new time signature will be printed at the start +of the next line and a cautionary time signature will be printed +at the end of the previous line as well. + +This behaviour is controlled by the @code{break-visibility} +property, which is explained in +@c Leave this ref on a newline - formats incorrectly otherwise -td +@rlearning{Visibility and color of objects}. This property takes +a vector of three booleans which, in order, determine whether the +object is printed at the end of, within the body of, or at the +beginning of a line. Or to be more precise, before a line break, +where there is no line break, or after a line break. + +Alternatively, these eight combinations may be specified +by pre-defined functions, defined in @file{scm/output-lib.scm}, +where the last three columns indicate whether the layout objects +will be visible in the positions shown at the head of the columns: + +@multitable {@code{begin-of-line-invisible}} {@code{'#(#t #t #t)}} {yes} {yes} {yes} +@headitem Function @tab Vector @tab Before @tab At no @tab After +@headitem form @tab form @tab break @tab break @tab break + +@item @code{all-visible} @tab @code{'#(#t #t #t)} @tab yes @tab yes @tab yes +@item @code{begin-of-line-visible} @tab @code{'#(#f #f #t)} @tab no @tab no @tab yes +@item @code{center-visible} @tab @code{'#(#f #t #f)} @tab no @tab yes @tab no +@item @code{end-of-line-visible} @tab @code{'#(#t #f #f)} @tab yes @tab no @tab no +@item @code{begin-of-line-invisible} @tab @code{'#(#t #t #f)} @tab yes @tab yes @tab no +@item @code{center-invisible} @tab @code{'#(#t #f #t)} @tab yes @tab no @tab yes +@item @code{end-of-line-invisible} @tab @code{'#(#f #t #t)} @tab no @tab yes @tab yes +@item @code{all-invisible} @tab @code{'#(#f #f #f)} @tab no @tab no @tab no +@end multitable + +The default settings of @code{break-visibility} depend on the +layout object. The following table shows all the layout objects +of interest which are affected by @code{break-visibility} and the +default setting of this property: + +@multitable @columnfractions .3 .3 .4 + +@headitem Layout object @tab Usual context @tab Default setting + +@c omit Ambitus as it appears not to be affected by break-visibility -td +@c @item @code{Ambitus} @tab as specified @tab @code{begin-of-line-visible} +@item @code{BarLine} @tab @code{Score} @tab calculated +@item @code{BarNumber} @tab @code{Score} @tab @code{begin-of-line-visible} +@c omit the following item until it can be explained -td +@c @item @code{BreakAlignGroup} @tab @code{Score} @tab calculated +@item @code{BreathingSign} @tab @code{Voice} @tab @code{begin-of-line-invisible} +@item @code{Clef} @tab @code{Staff} @tab @code{begin-of-line-visible} +@item @code{Custos} @tab @code{Staff} @tab @code{end-of-line-visible} +@item @code{DoublePercentRepeat} @tab @code{Voice} @tab @code{begin-of-line-invisible} +@c omit KeyCancellation until it can be explained -td +@c @item @code{KeyCancellation} @tab ?? @tab @code{begin-of-line-invisible} +@item @code{KeySignature} @tab @code{Staff} @tab @code{begin-of-line-visible} +@c omit LeftEdge until it can be explained -td +@c @item @code{LeftEdge} @tab @code{Score} @tab @code{center-invisible} +@item @code{OctavateEight} @tab @code{Staff} @tab @code{begin-of-line-visible} +@item @code{RehearsalMark} @tab @code{Score} @tab @code{end-of-line-invisible} +@item @code{TimeSignature} @tab @code{Staff} @tab @code{all-visible} + +@end multitable + +The example below shows the use of the vector form to control the +visibility of barlines: + +@lilypond[quote,verbatim,relative=1,ragged-right] +f4 g a b +f4 g a b +% Remove bar line at the end of the current line +\once \override Score.BarLine #'break-visibility = #'#(#f #t #t) +\break +f4 g a b +f4 g a b +@end lilypond + +Although all three components of the vector used to override +@code{break-visibility} must be present, not all of them are +effective with every layout object, and some combinations may +even give errors. The following limitations apply: + +@itemize @bullet +@item Bar lines cannot be printed at start of line. +@item A bar number cannot be printed at the start of the first +line unless it is set to be different from 1. +@item Clef -- see below +@item Double percent repeats are either all printed or all +suppressed. Use begin-of line-invisible to print and +all-invisible to suppress. +@item Key signature -- see below +@item OctavateEight -- see below +@end itemize + +@node Special considerations +@unnumberedsubsubsec Special considerations + +@strong{@emph{Visibility following explicit changes}} + +@cindex key signature, visibility following explicit change +@cindex explicitKeySignatureVisibility +@cindex clef, visibility following explicit change +@cindex explicitClefVisibility + +The @code{break-visibility} property controls the visibility of +key signatures and changes of clef only at the start of lines, +i.e. after a break. It has no effect on the visibility of the +key signature or clef following an explicit key change or an +explicit clef change within or at the end of a line. In the +following example the key signature following the explicit change +to B-flat major is still visible, even though @code{all-invisible} +is set. + +@lilypond[quote,verbatim,relative=1,ragged-right] +\key g \major +f4 g a b +% Try to remove all key signatures +\override Staff.KeySignature #'break-visibility = #all-invisible +\key bes \major +f4 g a b +\break +f4 g a b +f4 g a b +@end lilypond + +The visibility of such explicit key signature and clef changes is +controlled by the @code{explicitKeySignatureVisibility} and +@code{explicitClefVisibility} properties. These are the equivalent +of the @code{break-visibility} property and both take a vector of +three booleans or the predefined functions listed above, exactly like +@code{break-visibility}. Both are properties of the Staff context, +not the layout objects themselves, and so they are set using the +@code{\set} command. Both are set by default to @code{all-visible}. +These properties control only the visibility of key signatures and +clefs resulting from explicit changes and do not affect key +signatures and clefs at the beginning of lines; +@code{break-visibility} must still be overridden in the appropriate +object to remove these. + +@lilypond[quote,verbatim,relative=1,ragged-right] +\key g \major +f4 g a b +\set Staff.explicitKeySignatureVisibility = #all-invisible +\override Staff.KeySignature #'break-visibility = #all-invisible +\key bes \major +f4 g a b \break +f4 g a b +f4 g a b +@end lilypond + +@strong{@emph{Visibility of cautionary accidentals}} + +To remove the cautionary accidentals printed at an explicit key +change, set the Staff context property @code{printKeyCancellation} +to @code{#f}: + +@lilypond[quote,verbatim,relative=1,ragged-right] +\key g \major +f4 g a b +\set Staff.explicitKeySignatureVisibility = #all-invisible +\set Staff.printKeyCancellation = ##f +\override Staff.KeySignature #'break-visibility = #all-invisible +\key bes \major +f4 g a b \break +f4 g a b +f4 g a b +@end lilypond + +With these overrides only the accidentals before the notes remain +to indicate the change of key. + +@c TODO Add visibility of cautionary accidentals before notes + +@strong{@emph{Automatic bars}} + +@cindex automaticBars +@cindex bar lines, suppressing + +As a special case, the printing of bar lines can also be turned off +by setting the @code{automaticBars} property in the Score context. +If set to @code{#f}, bar lines will not be printed automatically; +they must be explicitly created with a @code{\bar} command. Unlike +the @code{\cadenzaOn} predefined command, measures are still counted. +Bar generation will resume according to that count if this property +is later set to @code{#t}. When set to @code{#f}, line breaks can +occur only at explicit @code{\bar} commands. + +@c TODO Add example + +@strong{@emph{Octavated clefs}} + +@cindex octavated clefs, visibility of +@cindex visibility of octavated clefs +@cindex clefs, visibility of octavation + +The small octavation symbol on octavated clefs is produced by the +@code{OctavateEight} layout object. Its visibility is controlled +independently from that of the @code{Clef} object, so it is +necessary to apply any required @code{break-visibility} overrides +to both the @code{Clef} and the @code{OctavateEight} layout objects +to fully suppress such clef symbols at the start of each line. + +For explicit clef changes, the @code{explicitClefVisibility} +property controls both the clef symbol and any octavation symbol +associated with it. + + +@seealso +Learning Manual: +@rlearning{Visibility and color of objects} + + +@node Line styles +@subsection Line styles + +Some performance indications, e.g., @i{rallentando} and +@i{accelerando} and @i{trills} are written as text and are +extended over many measures with lines, sometimes dotted or wavy. + +These all use the same routines as the glissando for drawing the +texts and the lines, and tuning their behavior is therefore also +done in the same way. It is done with a spanner, and the routine +responsible for drawing the spanners is +@code{ly:line-interface::print}. This routine determines the +exact location of the two @i{span points} and draws a line +between them, in the style requested. + +Here is an example showing the different line styles available, +and how to tune them. + +@lilypond[relative=2,ragged-right,verbatim,fragment] +d2 \glissando d'2 +\once \override Glissando #'style = #'dashed-line +d,2 \glissando d'2 +\override Glissando #'style = #'dotted-line +d,2 \glissando d'2 +\override Glissando #'style = #'zigzag +d,2 \glissando d'2 +\override Glissando #'style = #'trill +d,2 \glissando d'2 +@end lilypond + +The locations of the end-points of the spanner are computed +on-the-fly for every graphic object, but it is possible to +override these: + +@c FIXME Complete +@lilypond[relative=2,ragged-right,verbatim,fragment] +e2 \glissando f +\once \override Glissando #'(bound-details right Y) = #-2 +e2 \glissando f +@end lilypond + +The value for @code{Y} is set to @code{-2} for the right end +point. The left side may be similarly adjusted by specifying +@code{left} instead of @code{right}. + +If @code{Y} is not set, the value is computed from the vertical +position of the left and right attachment points of the spanner. + +Other adjustments of spanners are possible, for details, see +@ref{Spanners}. + +@node Rotating objects +@subsection Rotating objects + +Both layout objects and elements of markup text can be rotated by +any angle about any point, but the method of doing so differs. + +@menu +* Rotating layout objects:: +* Rotating markup:: +@end menu + +@node Rotating layout objects +@unnumberedsubsubsec Rotating layout objects + +@cindex rotating objects +@cindex objects, rotating + +All layout objects which support the @code{grob-interface} can be +rotated by setting their @code{rotation} property. This takes a +list of three items: the angle of rotation counter-clockwise, +and the x and y coordinates of the point relative to the object's +reference point about which the rotation is to be performed. The +angle of rotation is specified in degrees and the coordinates in +staff-spaces. + +The angle of rotation and the coordinates of the rotation point must +be determined by trial and error. + +@cindex hairpins, angled +@cindex angled hairpins + +There are only a few situations where the rotation of layout +objects is useful; the following example shows one situation where +they may be: + +@lilypond[quote,verbatim,relative=1] +g4\< e' d' f\! +\override Hairpin #'rotation = #'(20 -1 0) +g,,4\< e' d' f\! +@end lilypond + +@node Rotating markup +@unnumberedsubsubsec Rotating markup + +All markup text can be rotated to lie at any angle by prefixing it +with the @code{\rotate} command. The command takes two arguments: +the angle of rotation in degrees counter-clockwise and the text to +be rotated. The extents of the text are not rotated: they take +their values from the extremes of the x and y coordinates of the +rotated text. In the following example the +@code{outside-staff-priority} property for text is set to @code{#f} +to disable the automatic collision avoidance, which would push some +of the text too high. + +@lilypond[quote,verbatim,relative=1] +\override TextScript #'outside-staff-priority = ##f +g4^\markup { \rotate #30 "a G" } +b^\markup { \rotate #30 "a B" } +des^\markup { \rotate #30 "a D-Flat" } +fis^\markup { \rotate #30 "an F-Sharp" } +@end lilypond + +@node Advanced tweaks +@section Advanced tweaks + +This section discusses various approaches to fine tuning the +appearance of the printed score. + +@menu +* Aligning objects:: +* Vertical grouping of grobs:: +* Modifying stencils:: +* Modifying shapes:: +@end menu + + +@seealso +Learning Manual: +@rlearning{Tweaking output}, +@rlearning{Other sources of information}. + +Notation Reference: +@ref{Explaining the Internals Reference}, +@ref{Modifying properties}, +@ref{Interfaces for programmers}. + +Installed Files: +@file{scm/@/define@/-grobs@/.scm}. + +Snippets: +@rlsr{Tweaks and overrides}. + +Internals Reference: +@rinternals{All layout objects}. + + +@node Aligning objects +@subsection Aligning objects + +Graphical objects which support the @code{self-alignment-interface} and/or +the @code{side-position-interface} can be +aligned to a previously placed object in a variety of ways. For a list of these objects, see +@rinternals{self-alignment-interface} and @rinternals{side-position-interface}. + +All graphical objects have a reference point, a horizontal extent and a +vertical extent. The horizontal extent is a pair of numbers +giving the displacements from the reference point of the left and +right edges, displacements to the left being negative. The +vertical extent is a pair of numbers giving the displacement from +the reference point to the bottom and top edges, displacements down +being negative. + +An object's position on a staff is given by the values of the +@code{X-offset} and @code{Y-offset} properties. The value of +@code{X-offset} gives the displacement from the x coordinate of +the reference point of the parent object, and the value of +@code{Y-offset} gives the displacement from the center line of the +staff. The values of @code{X-offset} and +@code{Y-offset} may be set directly or may be set to be calculated +by procedures in order to achieve alignment with the parent object +in several ways. + +@warning{Many objects have special positioning considerations which +cause any setting of @code{X-offset} or @code{Y-offset} to be +ignored or modified, even though the object supports the +@code{self-alignment-interface}.} + +For example, an accidental can be repositioned +vertically by setting @code{Y-offset} but any changes to +@code{X-offset} have no effect. + +Rehearsal marks may be aligned with +breakable objects such as bar lines, clef symbols, time signature +symbols and key signatures. There are special properties to be +found in the @code{break-aligned-interface} for positioning rehearsal +marks on such objects. + +@menu +* Setting @code{X-offset} and @code{Y-offset} directly:: +* Using the @code{side-position-interface}:: +* Using the @code{self-alignment-interface}:: +* Using the @code{break-alignable-interface}:: +@end menu + +@node Setting @code{X-offset} and @code{Y-offset} directly +@unnumberedsubsubsec Setting @code{X-offset} and @code{Y-offset} directly + +Numerical values may be given to the @code{X-offset} and @code{Y-offset} +properties of many objects. The following example shows three +notes with the default fingering position and the positions with @code{X-offset} +and @code{Y-offset} modified. + +@lilypond[verbatim,quote,relative=2] +a-3 +a +-\tweak #'X-offset #0 +-\tweak #'Y-offset #0 +-3 +a +-\tweak #'X-offset #-1 +-\tweak #'Y-offset #1 +-3 +@end lilypond + +@c TODO write more + +@node Using the @code{side-position-interface} +@unnumberedsubsubsec Using the @code{side-position-interface} + +An object which supports the @code{side-position-interface} can be +placed next to its parent object so that +the specified edges of the two objects touch. The object may be +placed above, below, to the right or to the left of the parent. +The parent cannot be specified; it is determined by the order of +elements in the input stream. Most objects have the associated +note head as their parent. + +The values of the @code{side-axis} and @code{direction} properties +determine where the object is to be placed, as follows: + +@c TODO add an example of each to the table + +@multitable @columnfractions .3 .3 .3 +@headitem @code{side-axis} @tab @code{direction} @tab +@headitem property @tab property @tab Placement + +@item @code{0} @tab @code{-1} @tab left +@item @code{0} @tab @code{1} @tab right +@item @code{1} @tab @code{-1} @tab below +@item @code{1} @tab @code{1} @tab above + +@end multitable + +When @code{side-axis} is @code{0}, @code{X-offset} should be set to +the procedure @code{ly:side-position-interface::x-aligned-side}. +This procedure will return the correct value of @code{X-offset} to +place the object to the left or right side of the parent according +to value of @code{direction}. + +When @code{side-axis} is @code{1}, @code{Y-offset} should be set to +the procedure @code{ly:side-position-interface::y-aligned-side}. +This procedure will return the correct value of @code{Y-offset} to +place the object to the top or bottom of the parent according +to value of @code{direction}. + +@c TODO Add examples + +@node Using the @code{self-alignment-interface} +@unnumberedsubsubsec Using the @code{self-alignment-interface} + +@emph{Self-aligning objects horizontally} + +The horizontal alignment of an object which supports the +@code{self-alignment-interface} is controlled by the value of +the @code{self-alignment-X} property, provided the object's +@code{X-offset} property is set to +@code{ly:self-alignment-interface::x-aligned-on-self}. +@code{self-alignment-X} may be given any +real value, in units of half the total X extent of the +object. Negative values move the object to the right, positive +to the left. A value of @code{0} centers the object on the +reference point of its parent, a value of @code{-1} aligns the +left edge of the object on the reference point of its parent, +and a value of @code{1} aligns the right edge of the object on the +reference point of its parent. The symbols @code{LEFT}, +@code{CENTER} and @code{RIGHT} may be used instead of the values +@code{-1, 0, 1} respectively. + +Normally the @code{\override} command would be used to modify the +value of @code{self-alignment-X}, but the @code{\tweak} command +can be used to separately align several annotations on a single +note: + +@lilypond[quote,verbatim,relative=1] +a' +-\tweak #'self-alignment-X #-1 +^"left-aligned" +-\tweak #'self-alignment-X #0 +^"center-aligned" +-\tweak #'self-alignment-X #RIGHT +^"right-aligned" +-\tweak #'self-alignment-X #-2.5 +^"aligned further to the right" +@end lilypond + +@emph{Self-aligning objects vertically} + +Objects may be aligned vertically in an analogous way to aligning +them horizontally if the @code{Y-offset} property is set to +@code{ly:self-alignment-interface::y-aligned-on-self}. However, +other mechanisms are often involved in vertical alignment: the +value of @code{Y-offset} is just one variable taken into account. +This may make adjusting the value of some objects tricky. +The units are just half the vertical extent of the object, which +is usually quite small, so quite large numbers may be required. +A value of @code{-1} aligns the lower edge of the object with +the reference point of the parent object, a value of @code{0} +aligns the center of the object with the reference point of the +parent, and a value of @code{1} aligns the top edge of the object +with the reference point of the parent. The symbols @code{DOWN}, +@code{CENTER}, @code{UP} may be substituted for @code{-1, 0, 1} +respectively. + +@emph{Self-aligning objects in both directions} + +By setting both @code{X-offset} and @code{Y-offset}, an object may +be aligned in both directions simultaneously. + +The following example shows how to adjust a fingering mark so +that it nestles close to the note head. + +@lilypond[quote,verbatim,relative=2] +a +-\tweak #'self-alignment-X #0.5 % move horizontally left +-\tweak #'Y-offset #ly:self-alignment-interface::y-aligned-on-self +-\tweak #'self-alignment-Y #-1 % move vertically up +-3 % third finger +@end lilypond + +@ignore +@unnumberedsubsubsec Using the @code{aligned-on-parent} procedures + +@c Cannot document as they do not seem to operate consistently on all objects -td +@c TODO investigate further + +The @code{aligned-on-parent} procedures are used in the same way +as the @code{aligned-on-self} procedures, they difference being +that they permit an object to be aligned with the @emph{edges} of +the parent rather than the parent's reference point. The following +example shows the difference: + +@c TODO Add example + +@lilypond[verbatim,quote] +@end lilypond + +@end ignore + +@ignore +@unnumberedsubsubsec Using the @code{centered-on-parent} procedures + +@c Cannot document as they do not seem to operate consistently on all objects -td +@c TODO investigate further + +@end ignore + +@c TODO The align-interface, BassFigureAlignment and VerticalAlignment + +@node Using the @code{break-alignable-interface} +@unnumberedsubsubsec Using the @code{break-alignable-interface} + +@cindex align to objects +@cindex break-align-symbols + +Rehearsal marks and bar numbers may be aligned with notation +objects other than bar lines. These objects include @code{ambitus}, +@code{breathing-sign}, @code{clef}, @code{custos}, @code{staff-bar}, +@code{left-edge}, @code{key-cancellation}, @code{key-signature}, and +@code{time-signature}. + +By default, rehearsal marks and bar numbers will be horizontally +centered above the object: + +@lilypond[verbatim,quote,relative=1] +e1 +% the RehearsalMark will be centered above the Clef +\override Score.RehearsalMark #'break-align-symbols = #'(clef) +\key a \major +\clef treble +\mark "↓" +e +% the RehearsalMark will be centered above the TimeSignature +\override Score.RehearsalMark #'break-align-symbols = #'(time-signature) +\key a \major +\clef treble +\time 3/4 +\mark "↓" +e2. +@end lilypond + +A list of possible target alignment objects may be specified. If +some of the objects are invisible at that point due to the setting +of @code{break-visibility} or the explicit visibility settings for +keys and clefs, the rehearsal mark or bar number is aligned to the +first object in the list which is visible. If no objects in the +list are visible the object is aligned to the bar line. If the bar +line is invisible the object is aligned to the place where the bar +line would be. + +@lilypond[verbatim,quote,relative=1] +e1 +% the RehearsalMark will be centered above the Key Signature +\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef) +\key a \major +\clef treble +\mark "↓" +e +% the RehearsalMark will be centered above the Clef +\set Staff.explicitKeySignatureVisibility = #all-invisible +\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef) +\key a \minor +\clef bass +\mark "↓" +e, +@end lilypond + +The alignment of the rehearsal mark relative to the notation object +can be changed, as shown in the following example. In a score with +multiple staves, this setting should be done for all the staves. + +@lilypond[verbatim,quote,relative=1] +% The RehearsalMark will be centered above the KeySignature +\override Score.RehearsalMark #'break-align-symbols = #'(key-signature) +\key a \major +\clef treble +\time 4/4 +\mark "↓" +e1 +% The RehearsalMark will be aligned with the left edge of the KeySignature +\once \override Score.KeySignature #'break-align-anchor-alignment = #LEFT +\mark "↓" +\key a \major +e +% The RehearsalMark will be aligned with the right edge of the KeySignature +\once \override Score.KeySignature #'break-align-anchor-alignment = #RIGHT +\key a \major +\mark "↓" +e +@end lilypond + +The rehearsal mark can also be offset to the right or left of the left edge +by an arbitrary amount. The units are staff-spaces: + +@lilypond[verbatim,quote,relative=1] +% The RehearsalMark will be aligned with the left edge of the KeySignature +% and then shifted right by 3.5 staff-spaces +\override Score.RehearsalMark #'break-align-symbols = #'(key-signature) +\once \override Score.KeySignature #'break-align-anchor = #3.5 +\key a \major +\mark "↓" +e +% The RehearsalMark will be aligned with the left edge of the KeySignature +% and then shifted left by 2 staff-spaces +\once \override Score.KeySignature #'break-align-anchor = #-2 +\key a \major +\mark "↓" +e +@end lilypond + + +@node Vertical grouping of grobs +@subsection Vertical grouping of grobs + +@c FIXME Expand this section + +The VerticalAlignment and VerticalAxisGroup grobs work together. +VerticalAxisGroup groups together different grobs like Staff, Lyrics, +etc. VerticalAlignment then vertically aligns the different grobs +grouped together by VerticalAxisGroup. There is usually only one +VerticalAlignment per score but every Staff, Lyrics, etc. has its own +VerticalAxisGroup. + + +@node Modifying stencils +@subsection Modifying stencils + +All layout objects have a @code{stencil} property which is part of +the @code{grob-interface}. By default, this property is usually +set to a function specific to the object that is tailor-made to +render the symbol which represents it in the output. For example, +the standard setting for the @code{stencil} property of the +@code{MultiMeasureRest} object is @code{ly:multi-measure-rest::print}. + +The standard symbol for any object can be replaced by modifying the +@code{stencil} property to reference a different, specially-written, +procedure. This requires a high level of knowledge of the internal +workings of LilyPond, but there is an easier way which can often +produce adequate results. + +This is to set the @code{stencil} property to the procedure which +prints text -- @code{ly:text-interface::print} -- and to add a +@code{text} property to the object which is set to contain the +markup text which produces the required symbol. Due to the +flexibility of markup, much can be achieved -- see in particular +@ref{Graphic notation inside markup}. + +The following example demonstrates this by changing the note head +symbol to a cross within a circle. + +@lilypond[verbatim,quote] +XinO = { + \once \override NoteHead #'stencil = #ly:text-interface::print + \once \override NoteHead #'text = \markup { + \combine + \halign #-0.7 \draw-circle #0.85 #0.2 ##f + \musicglyph #"noteheads.s2cross" + } +} +\relative c'' { + a a \XinO a a +} +@end lilypond + +Any of the glyphs in the feta Font can be supplied to the +@code{\musicglyph} markup command -- see @ref{The Feta font}. + +@c TODO Add inserting eps files or ref to later + +@c TODO Add inserting Postscript or ref to later + + +@seealso +Notation Reference: +@ref{Graphic notation inside markup}, +@ref{Formatting text}, +@ref{Text markup commands}, +@ref{The Feta font}. + + +@node Modifying shapes +@subsection Modifying shapes + +@menu +* Modifying ties and slurs:: +@end menu + +@node Modifying ties and slurs +@unnumberedsubsubsec Modifying ties and slurs + +@cindex slurs, modifying +@cindex ties, modifying +@cindex Bézier curves +@cindex Bézier control points + +Ties, slurs and phrasing slurs are drawn as third-order Bézier +curves. If the shape of the tie or slur which is calculated +automatically is not optimum, the shape may be modified manually by +explicitly specifying the four control points required to define +a third-order Bézier curve. + +Third-order or cubic Bézier curves are defined by four control +points. The first and fourth control points are precisely the +starting and ending points of the curve. The intermediate two +control points define the shape. Animations showing how the curve +is drawn can be found on the web, but the following description +may be helpful. The curve starts from the first control point +heading directly towards the second, gradually bending over to +head towards the third and continuing to bend over to head towards +the fourth, arriving there travelling directly from the third +control point. The curve is entirely contained in the +quadrilateral defined by the four control points. + +Here is an example of a case where the tie is not optimum, and +where @code{\tieDown} would not help. + +@lilypond[verbatim,quote,relative=1] +<< + { e1 ~ e } +\\ + { r4 } +>> +@end lilypond + +One way of improving this tie is to manually modify its control +points, as follows. + +The coordinates of the Bézier control points are specified in units +of staff-spaces. The X@tie{}coordinate is relative to the reference +point of the note to which the tie or slur is attached, and the +Y@tie{}coordinate is relative to the staff center line. The +coordinates are entered as a list of four pairs of decimal numbers +(reals). One approach is to estimate the coordinates of the two +end points, and then guess the two intermediate points. The optimum +values are then found by trial and error. + +It is useful to remember that a symmetric curve requires symmetric +control points, and that Bézier curves have the useful property that +transformations of the curve such as translation, rotation and +scaling can be achieved by applying the same transformation to the +curve's control points. + +For the example above the following override gives a satisfactory +tie. Note the placement -- it has to be immediately before the note +to which the start of the tie (or slur) is attached. + +@lilypond[verbatim,quote,relative=1] +<< + { + \once \override Tie + #'control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1)) + e1 ~ e1 + } +\\ + { r4 4 } +>> +@end lilypond + +@knownissues + +It is not possible to modify shapes of ties or slurs by changing +the @code{control-points} property if there are more than one at +the same musical moment, not even by using the @code{\tweak} +command. + + + + diff --git a/Documentation/notation/cheatsheet.itely b/Documentation/notation/cheatsheet.itely new file mode 100644 index 0000000000..34cf29ad44 --- /dev/null +++ b/Documentation/notation/cheatsheet.itely @@ -0,0 +1,299 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + + +@c TODO: add tablature. + +@node Cheat sheet +@appendix Cheat sheet + + +@multitable @columnfractions .35 .3 .35 + +@item @b{Syntax} +@tab @b{Description} +@tab @b{Example} + +@item @code{1 2 8 16} +@tab durations +@tab +@lilypond[fragment,relative=2,notime] +\set Staff.autoBeaming = ##f +\override Staff.Clef #'break-visibility = #all-invisible +c1 c2 c8 c16 +@end lilypond + +@item @code{c4. c4..} +@tab augmentation dots +@tab +@lilypond[fragment,relative=2,notime] +\override Staff.Clef #'break-visibility = #all-invisible +c4. c4.. +@end lilypond + +@item @code{c d e f g a b } +@tab scale +@tab +@lilypond[fragment,relative=1,notime] +c d e f g a b +@end lilypond + +@item @code{fis bes} +@tab alteration +@tab +@lilypond[fragment,relative=1,notime] +fis bes +@end lilypond + +@item @code{\clef treble \clef bass } +@tab clefs +@tab +@lilypond[fragment,notime] +\clef treble +s4_" " +\clef bass +s4_" " +@end lilypond + +@item @code{\time 3/4 \time 4/4 } +@tab time signature +@tab +@lilypond[fragment] +\override Staff.Clef #'stencil = #empty-stencil +\time 3/4 +s4_" " +\time 4/4 +s16_" " +@end lilypond + + +@item @code{r4 r8} +@tab rest +@tab +@lilypond[relative=2,notime,fragment] +\override Staff.Clef #'break-visibility = #all-invisible +r4 r8 +@end lilypond + +@item @code{d ~ d} +@tab tie +@tab +@lilypond[relative=2,notime,fragment] +\set Score.timing = ##f +\set Staff.autoBeaming = ##f +d ~ d +@end lilypond + +@item @code{\key es \major } +@tab key signature +@tab +@lilypond[notime,fragment] +\clef treble +\key es \major +\hideNotes +c128 +@end lilypond + +@item @var{note}@code{'} +@tab raise octave +@tab +@lilypond[relative=2,notime,fragment] +\set Score.timing = ##f +\set Staff.autoBeaming = ##f +a a' +@end lilypond + +@item @var{note}@code{,} +@tab lower octave +@tab +@lilypond[relative=2,notime,fragment] +\set Score.timing = ##f +\set Staff.autoBeaming = ##f +c c, +@end lilypond + + +@item @code{c( d e)} +@tab slur +@tab +@lilypond[fragment,relative=2] +\set Score.timing = ##f +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\set Staff.autoBeaming = ##f +c( d e) +@end lilypond + + +@item @code{c\( c( d) e\)} +@tab phrasing slur +@tab +@lilypond[fragment,relative=2] +\set Score.timing = ##f +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\set Staff.autoBeaming = ##f +c\( c( d) e\) +@end lilypond + + +@item @code{a8[ b]} +@tab beam +@tab +@lilypond[fragment,relative=2] +\set Score.timing = ##f +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\set Staff.autoBeaming = ##f +a8-[ b-] +@end lilypond + + +@item @code{<< \new Staff ... >>} +@tab more staves +@tab +@lilypond[fragment] +<< \new Staff { + \set Staff.implicitTimeSignatureVisibility = #all-invisible + c'1 + } + \new Staff { + \set Staff.implicitTimeSignatureVisibility = #all-invisible + c'1 + } >> +@end lilypond + + +@item @code{c-> c-.} +@tab articulations +@tab +@lilypond[fragment,relative=2] +\set Staff.implicitTimeSignatureVisibility = #all-invisible +c-> c-. +@end lilypond + + +@item @code{c2\mf c\sfz} +@tab dynamics +@tab +@lilypond[fragment,relative=2] +\set Staff.implicitTimeSignatureVisibility = #all-invisible +c2\mf c\sfz +@end lilypond + + +@item @code{a\< a a\!} +@tab crescendo +@tab +@lilypond[fragment,relative=2] +\set Score.timing = ##f +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\set Staff.autoBeaming = ##f +a\< a a\! +@end lilypond + +@item @code{a\> a a\!} +@tab decrescendo +@tab +@lilypond[fragment,relative=2] +\set Score.timing = ##f +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\set Staff.autoBeaming = ##f +a\> a a\! +@end lilypond + + +@item @code{< >} +@tab chord +@tab +@lilypond[fragment,relative=2] +\set Staff.implicitTimeSignatureVisibility = #all-invisible + +@end lilypond + + +@item @code{\partial 8} +@tab pickup / upbeat +@tab +@lilypond[fragment,relative=2] +\partial 8 +f8 c2 d e +@end lilypond + + +@item @code{\times 2/3 @{f g a@}} +@tab triplets +@tab +@lilypond[relative=1,fragment] +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\times 2/3 { f8 g a } +@end lilypond + + +@item @code{\grace} +@tab grace notes +@tab +@lilypond[relative=2,fragment] +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\context Voice { \grace b16 c4 } +@end lilypond + +@item @code{\lyricmode @{ twinkle @}} +@tab entering lyrics +@tab +twinkle + + +@item @code{\new Lyrics} +@tab printing lyrics +@tab +@lilypond[fragment] +\new Lyrics \lyricmode { twinkle } +@end lilypond + +@item @code{twin -- kle} +@tab lyric hyphen +@tab +@lilypond[fragment,relative=2] +\set Staff.implicitTimeSignatureVisibility = #all-invisible +<< + { g'1 g } + \new Lyrics \lyricsto "" { twin -- kle } +>> +@end lilypond + +@item @code{\chordmode @{ c:dim f:maj7 @}} +@tab chords +@tab +@lilypond[fragment,relative=2] +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\chordmode { c:dim f:maj7 } +@end lilypond + +@item @code{\context ChordNames} +@tab printing chord names +@tab +@lilypond[fragment,relative=2] +\chords { c:dim f:maj7 } +@end lilypond + +@item @code{<<@{e f@} \\ @{c d@}>>} +@tab polyphony +@tab +@lilypond[fragment,relative=2] +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\context Staff <<{e f} \\ {c d}>> +@end lilypond + + +@item @code{s4 s8 s16} +@tab spacer rests +@tab + +@end multitable + diff --git a/Documentation/notation/chords.itely b/Documentation/notation/chords.itely new file mode 100644 index 0000000000..0619f02b24 --- /dev/null +++ b/Documentation/notation/chords.itely @@ -0,0 +1,1156 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + + +@node Chord notation +@section Chord notation + +@lilypondfile[quote]{chords-headword.ly} + +Chords can be entered either as normal notes or in chord mode and displayed +using a variety of traditional European chord naming conventions. Chord +names and figured bass notation can also be displayed. + +@menu +* Chord mode:: +* Displaying chords:: +* Figured bass:: +@end menu + + +@node Chord mode +@subsection Chord mode + +@cindex chord chords + +Chord mode is used to enter chords using an indicator of the chord +structure, rather than the chord pitches. + +@menu +* Chord mode overview:: +* Common chords:: +* Extended and altered chords:: +@end menu + +@node Chord mode overview +@unnumberedsubsubsec Chord mode overview + +@cindex chord names +@cindex chord mode + +Chords can be entered as simultaneous music, as discussed in +@ref{Chorded notes}. + +Chords can also be entered in @qq{chord mode}, which is an input +mode that focuses on the structures of chords in traditional +European music, rather than on specific pitches. This is +convenient for those who are familiar with using chord names to +describe chords. More information on different input modes can be +found at @ref{Input modes}. + +@lilypond[verbatim,quote,ragged-right,relative=1] +\chordmode { c1 g a g c } +@end lilypond + +Chords entered using chord mode are music elements, and can be +transposed just like chords entered using simultaneous music. +@code{\chordmode} is absolute, as @code{\relative} has no effect +on @code{chordmode} blocks. However, in @code{\chordmode} the +absolute pitches are one octave higher than in note mode. + +Chord mode and note mode can be mixed in sequential music: + +@lilypond[verbatim,quote,ragged-right,relative=1] +2 +\chordmode { c2 f } +2 +\chordmode { f2 g } +@end lilypond + + +@seealso +Music Glossary: +@rglos{chord}. + +Notation Reference: +@ref{Chorded notes}, +@ref{Input modes}. + +Snippets: +@rlsr{Chords} + + +@knownissues + +When chord mode and note mode are mixed in sequential music, and +chord mode comes first, the note mode will create a new @code{Staff} +context. + +@lilypond[verbatim,quote,ragged-right,relative=1] +\chordmode { c2 f } +2 +@end lilypond + +To avoid this behavior, explicitly create the @code{Staff} context: + +@lilypond[verbatim,quote,ragged-right,relative=1] +\new Staff { + \chordmode { c2 f } + 2 +} +@end lilypond + +@node Common chords +@unnumberedsubsubsec Common chords + +@cindex triads +@cindex seventh chords +@cindex root of chord +@cindex modifiers, in chords. +@cindex chord quality + +Major triads are entered by including the root and an +optional duration: + +@lilypond[verbatim,quote,relative=1,ragged-right] +\chordmode { c2 f4 g } +@end lilypond + +Minor, augmented, and diminished triads are entered by placing +@code{:} and a quality modifier string after the duration: + +@lilypond[verbatim,quote,ragged-right,relative=1] +\chordmode { c2:m f4:aug g:dim } +@end lilypond + +Seventh chords can be created: + +@lilypond[quote,ragged-right,fragment,verbatim,relative=1] +\chordmode { c1:7 c:m7 c:maj7 c:dim7 c:aug7 } +@end lilypond + +@funindex aug +@funindex dim +@funindex maj +@funindex m + +The table belows shows the actions of the quality modifiers on +triads and seventh chords. The default seventh step added to +chords is a minor or flatted seventh, which makes the dominant +seventh the basic seventh chord. All alterations are relative to +the dominant seventh. A more complete table of modifier usage +is found at @ref{Common chord modifiers}. + +@c @table @code +@multitable @columnfractions .2 .4 .3 + +@item +@b{Modifier} +@tab +@b{Action} +@tab +@b{Example} + +@item +None +@tab +The default action; produces a major triad. +@tab +@lilypond[line-width=4\cm, noragged-right] +\chordmode { + \override Staff.TimeSignature #'stencil = ##f + c1 +} +@end lilypond + +@item +m, m7 +@tab +The minor chord. This modifier lowers the 3rd. +@tab +@lilypond[line-width=4\cm, noragged-right] +\chordmode { + \override Staff.TimeSignature #'stencil = ##f + c1:m c:m7 +} +@end lilypond + + +@item +dim, dim7 +@tab +The diminished chord. This modifier lowers the 3rd, 5th and (if +present) the 7th step. +@tab +@lilypond[line-width=4\cm, noragged-right] +\chordmode { + \override Staff.TimeSignature #'stencil = ##f + c1:dim c:dim7 +} +@end lilypond + +@item +aug +@tab +The augmented chord. This modifier raises the 5th step. +@tab +@lilypond[line-width=4\cm, noragged-right] +\chordmode { + \override Staff.TimeSignature #'stencil = ##f + c1:aug +} +@end lilypond + +@item +maj, maj7 +@tab +The major 7th chord. This modifier adds a raised 7th step. The +@code{7} following @code{maj} is optional. Do NOT use this modifier +to create a major triad. +@tab +@lilypond[line-width=4\cm, noragged-right] +\chordmode { + \override Staff.TimeSignature #'stencil = ##f + c1:maj c:maj7 +} +@end lilypond + +@end multitable + + +@seealso +Notation Reference: +@ref{Common chord modifiers}, +@ref{Extended and altered chords}. + +Snippets: +@rlsr{Chords}. + +@knownissues +Only one quality modifier should be used per chord, typically on the +highest step present in the chord. Chords with more than quality +modifier will be parsed without an error or warning, but the results +are unpredictable. Chords that cannot be achieved with a single +quality modifier should be altered by individual pitches, as described +in @ref{Extended and altered chords}. + + +@node Extended and altered chords +@unnumberedsubsubsec Extended and altered chords + +@cindex extended chords +@cindex altered chords + +Chord structures of arbitrary complexity can be created in chord +mode. The modifier string can be used to extend a chord, add or +remove chord steps, raise or lower chord steps, and add a bass note +or create an inversion. + +The first number following the @code{:} is taken to be the extent +of the chord. The chord is constructed by sequentially adding +thirds to the root until the specified number has been reached. +Note that the seventh step added as part of an extended chord will be the +minor or flatted seventh, not the major seventh. +If the extent is not a third (e.g., 6), thirds are added up to the +highest third below the extent, and then the step of the extent is +added. The largest possible value for the extent is 13. Any +larger value is interpreted as 13. + +@lilypond[quote,ragged-right,fragment,verbatim,relative=1] +\chordmode { + c1:2 c:3 c:4 c:5 + c1:6 c:7 c:8 c:9 + c1:10 c:11 c:12 c:13 + c1:14 +} +@end lilypond + +@noindent +Note that both @code{c:5} and @code{c} produce a C major triad. + +Since an unaltered 11 does not sound good when combined with an +unaltered 13, the 11 is removed from a @code{:13} chord (unless it +is added explicitly). + +@lilypond[quote,ragged-right,fragment,verbatim,relative=1] +\chordmode { + c1:13 c:13.11 c:m13 +} +@end lilypond + +@cindex additions, in chords + +Individual steps can be added to a chord. Additions follow the +extent and are prefixed by a dot (@code{.}). The basic seventh +step added to a chord is the minor or flatted seventh, rather than +the major seventh. + +@lilypond[quote,verbatim,fragment,relative=1] +\chordmode { + c1:5.6 c:3.7.8 c:3.6.13 +} +@end lilypond + +Added steps can be as high as desired. + +@lilypond[quote,verbatim,fragment,relative=1] +\chordmode { + c4:5.15 c:5.20 c:5.25 c:5.30 +} +@end lilypond + +@cindex chord steps, altering + +Added chord steps can be altered by suffixing a @code{-} or @code{+} +sign to the number. To alter a step that is automatically included +as part of the basic chord structure, add it as an altered step. + +@lilypond[quote,verbatim,fragment,relative=1] +\chordmode { + c1:7+ c:5+.3- c:3-.5-.7- +} +@end lilypond + +@cindex removals, in chords + +@funindex ^ + +Following any steps to be added, a series of steps to be removed +is introduced in a modifier string with a prefix of @code{^}. +If more than one step is to be removed, the steps to be +removed are separated by @code{.} following the +initial @code{^}. + +@lilypond[quote,verbatim,fragment,relative=1] +\chordmode { + c1^3 c:7^5 c:9^3 c:9^3.5 c:13.11^3.7 +} +@end lilypond + +@funindex sus + +The modifier @code{sus} can be added to the modifier string to +create suspended chords. This removes the 3rd step from the chord. +Append either @code{2} or @code{4} to add the 2nd or 4th step to the +chord. @code{sus} is equivalent to @code{^3}; @code{sus4} is +equivalent to @code{.4^3}. + +@lilypond[quote,ragged-right,fragment,verbatim] +\chordmode { + c1:sus c:sus2 c:sus4 c:5.4^3 +} +@end lilypond + +@funindex / +@cindex chord inversions +@cindex bass note, for chords + +Inversions (putting a pitch other than the root on the bottom of the +chord) and added bass notes can be specified by appending +@code{/}@var{pitch} to the chord. + +@lilypond[quote,ragged-right,fragment,verbatim, relative=2] +\chordmode { + c1 c/g c/f +} +@end lilypond + +@funindex /+ + +A bass note that is part of the chord can be added, instead of +moved as part of an inversion, by using @code{/+}@var{pitch}. + +@lilypond[quote,ragged-right,fragment,verbatim] +\chordmode { + c1 c/g c/+g +} +@end lilypond + +Chord modifiers that can be used to produce a variety of +standard chords are shown in +@ref{Common chord modifiers}. + + +@seealso +Notation Reference: +@ref{Common chord modifiers}. + +Snippets: +@rlsr{Chords} + + +@knownissues + +Each step can only be present in a chord once. The following +simply produces the augmented chord, since @code{5+} is +interpreted last. + +@lilypond[quote,ragged-right,verbatim,fragment] +\chordmode { c1:5.5-.5+ } +@end lilypond + +Only the second inversion can be created by adding a bass +note. The first inversion requires changing the root of +the chord. + +@lilypond[quote,ragged-right,verbatim,fragment] +\chordmode { + c'1: c':/g e:6-3-^5 e:m6-^5 +} +@end lilypond + +@node Displaying chords +@subsection Displaying chords + +Chords can be displayed by name, in addition to the standard display +as notes on a staff. + +@menu +* Printing chord names:: +* Customizing chord names:: +@end menu + +@node Printing chord names +@unnumberedsubsubsec Printing chord names + +@cindex printing chord names +@cindex chord names +@cindex chords + +Chord names are printed in the @code{ChordNames} context: + +@lilypond[verbatim,quote,relative=1,ragged-right] +\new ChordNames { + \chordmode { + c2 f4. g8 + } +} +@end lilypond + +Chords can be entered as simultaneous notes or through the use of +chord mode. The displayed chord name will be the same, regardless +of the mode of entry, unless there are inversions or added bass notes: + +@lilypond[verbatim,quote,relative=1] +<< + \new ChordNames { + 2 + 1 + \chordmode { + c2 f:sus4 c1:/f + } + } + { + 2 + 1 + \chordmode { + c2 f:sus4 c1:/f + } + } +>> +@end lilypond + +@cindex no chord symbol +@cindex N.C. symbol +@cindex indicating No Chord in ChordNames + +Rests passed to a @code{ChordNames} context will cause the +@code{noChordSymbol} markup to be displayed. + +@lilypond[verbatim, quote, relative=1] +<< + \new ChordNames \chordmode { + c1 + r1 + g1 + c1 + } + \new Score \chordmode { + c1 + r1 + g1 + c1 + } +>> +@end lilypond + +@funindex{\chords} + +@code{\chords @{ ... @}} is a shortcut notation for +@code{\new ChordNames @{ \chordmode @{ ... @} @}}. + +@lilypond[verbatim,quote,ragged-right, relative=1] +\chords { + c2 f4.:m g8:maj7 +} +@end lilypond + +@lilypond[verbatim,quote,ragged-right, relative=1] +\new ChordNames { + \chordmode { + c2 f4.:m g8:maj7 + } +} +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{showing-chords-at-changes.ly} + +@c @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +@c {adding-bar-lines-to-chordnames-context.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{simple-lead-sheet.ly} + + +@seealso +Music Glossary: +@rglos{chord}. + +Notation Reference: +@ref{Writing music in parallel}. + +Snippets: +@rlsr{Chords}. + +Internals Reference: +@rinternals{ChordNames}, +@rinternals{ChordName}, +@rinternals{Chord_name_engraver}, +@rinternals{Volta_engraver}, +@rinternals{Bar_engraver}. + + +@knownissues + +Chords containing inversions or altered bass notes are not named +properly if entered using simultaneous music. + + +@node Customizing chord names +@unnumberedsubsubsec Customizing chord names + +@cindex customizing chord names + +There is no unique system for naming chords. Different musical +traditions use different names for the same set of chords. There +are also different symbols displayed for a given chord name. The +names and symbols displayed for chord names are customizable. + +@cindex jazz chords +@cindex chords, jazz + +The basic chord name layout is a system for Jazz music, proposed +by Klaus Ignatzek (see @ressay{Literature list}). The chord naming +system can be modified as described below. An alternate jazz +chord system has been developed using these modifications. +The Ignatzek and alternate +Jazz notation are shown on the chart in @ref{Chord +name chart}. + +@c TODO -- Change this so we don't have a non-verbatim example. +@c Make short example in docs, then move longer example to +@c appendix, where the length of the snippet won't matter. + +In addition to the different naming systems, different note names +are used for the root in different languages. The predefined +variables @code{\germanChords}, @code{\semiGermanChords}, +@code{\italianChords} and @code{\frenchChords} set these variables. +The effect is demonstrated here: + +@lilypondfile[ragged-right]{chord-names-languages.ly} + +If none of the existing settings give the desired output, the chord +name display can be tuned through the following properties. + +@table @code + +@funindex chordRootNamer + +@item chordRootNamer + +The chord name is usually printed as a letter for the root with an +optional alteration. The transformation from pitch to letter is +done by this function. Special note names (for example, the German +@q{H} for a B-chord) can be produced by storing a new function in +this property. + +@funindex majorSevenSymbol + +@item majorSevenSymbol + +This property contains the markup object used to follow the output +of @code{chordRootNamer} to identify a major 7 chord. Predefined +options are @code{whiteTriangleMarkup} and +@code{blackTriangleMarkup}. + +@funindex chordNoteNamer + +@item chordNoteNamer + +When the chord name contains additional pitches other than the root +(e.g., an added bass note), this function is used to print the +additional pitch. By default the pitch is printed using +@code{chordRootNamer}. The @code{chordNoteNamer} property can be set +to a specialized function to change this behavior. For example, the +bass note can be printed in lower case. + +@funindex chordNameSeparator + +@item chordNameSeparator + +Different parts of a chord name are normally separated by a slash. +By setting @code{chordNameSeparator}, you can use any desired markup +for a separator. + +@funindex chordNameExceptions + +@item chordNameExceptions + +This property is a list of pairs. The first item in each pair +is a set of pitches used to identify the steps present in the chord. +The second item is a markup that will follow the @code{chordRootNamer} +output to create the chord name. + +@funindex chordPrefixSpacer +@item chordPrefixSpacer + +The @q{m} for minor chords is usually printed immediately to the +right of the root of the chord. A spacer can be placed between +the root and @q{m} by setting @code{chordPrefixSpacer}. +The spacer is not used when the root is altered. + +@end table + + +@predefined +@funindex major seven symbols +@code{\whiteTriangleMarkup}, +@code{\blackTriangleMarkup}, +@funindex \germanChords +@code{\germanChords}, +@funindex \semiGermanChords +@code{\semiGermanChords}, +@funindex \italianChords +@code{\italianChords}, +@funindex \frenchChords +@code{\frenchChords}. +@endpredefined + + +@snippets + +@cindex exceptions, chord names. +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{chord-name-exceptions.ly} + +@c TODO - tweak snippet to use \blackTriangleMarkup as well +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{chord-name-major7.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{adding-bar-lines-to-chordnames-context.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{volta-below-chords.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-chord-separator.ly} + + +@seealso +Notation Reference: +@ref{Chord name chart}, +@ref{Common chord modifiers}. + +Installed Files: +@file{scm/@/chords@/-ignatzek@/.scm}, +@file{scm/@/chord@/-entry@/.scm}, +@file{ly/@/chord@/-modifier@/-init@/.ly}. + +Snippets: +@rlsr{Chords}. + +@c Internals Reference: +@c @r internals{}. + + +@knownissues + +Chord names are determined from both the pitches that are present +in the chord and the information on the chord structure that may +have been entered in @code{\chordmode}. If the simultaneous pitches +method of entering chords is used, undesired names result from +inversions or bass notes. + +@lilypond[quote,ragged-right,verbatim] +myChords = \relative c' { + \chordmode { c1 c/g c/f } + 1 +} +<< + \new ChordNames { \myChords } + \new Staff { \myChords } +>> +@end lilypond + + +@node Figured bass +@subsection Figured bass + +@lilypondfile[quote]{figured-bass-headword.ly} + +Figured bass notation can be displayed. + +@menu +* Introduction to figured bass:: +* Entering figured bass:: +* Displaying figured bass:: +@end menu + +@node Introduction to figured bass +@unnumberedsubsubsec Introduction to figured bass + +@cindex Basso continuo +@cindex Thorough bass +@cindex Figured bass +@cindex Bass, thorough +@cindex Bass, figured + +@c TODO: musicological blurb about FB + + +LilyPond has support for figured bass, also called thorough bass +or basso continuo: + +@lilypond[quote,ragged-right,verbatim,fragment] +<< + \new Voice { \clef bass dis4 c d ais g fis} + \new FiguredBass { + \figuremode { + < 6 >4 < 7\+ >8 < 6+ [_!] > + < 6 >4 <6 5 [3+] > + < _ >4 < 6 5/>4 + } + } +>> +@end lilypond + +The support for figured bass consists of two parts: there is an +input mode, introduced by @code{\figuremode}, that accepts +entry of bass figures, and there is a context named +@code{FiguredBass} that takes care of displaying +@code{BassFigure} objects. Figured bass can also be displayed +in @code{Staff} contexts. + +@code{\figures@{ ... @}} is a shortcut notation for +@code{\new FiguredBass @{ \figuremode @{ ... @} @}}. + + +Although the support for figured bass may superficially resemble chord +support, it is much simpler. @code{\figuremode} mode simply +stores the figures and the @code{FiguredBass} context prints them +as entered. There is no conversion to pitches. + +@ignore +Figures are created as markup texts. Any of the standard markup +properties can be used to modify the display of figures. For +example, the vertical spacing of the figures may be set with +@code{baseline-skip}. +@end ignore + + +@seealso +Music Glossary: +@rglos{figured bass}. + +Snippets: +@rlsr{Chords} + + +@node Entering figured bass +@unnumberedsubsubsec Entering figured bass + +@code{\figuremode} is used to switch the input mode to figure mode. +More information on different input modes can be +found at @ref{Input modes}. + +In figure mode, a group of bass figures is delimited by +@code{<} and @code{>}. The duration is entered after the @code{>}. + +@lilypond[verbatim,quote,ragged-right,fragment] +\new FiguredBass { + \figuremode { + <6 4>2 + } +} +@end lilypond + + +Accidentals (including naturals) can be added to figures: + +@lilypond[verbatim,quote,ragged-right,fragment] +\figures { + <7! 6+ 4-> <5++> <3--> +} +@end lilypond + +Augmented and diminished steps can be indicated: + +@lilypond[verbatim,quote,ragged-right,fragment] +\figures { + <6\+ 5/> <7/> +} +@end lilypond + +A backward slash through a figure (typically used for raised +sixth steps) can be created: + +@lilypond[verbatim,quote,ragged-right,fragment] +\figures { + <6> <6\\> +} +@end lilypond + +Vertical spaces and brackets can be be included in figures: + +@lilypond[verbatim,quote,ragged-right,fragment] +\figures { + <[12 _!] 8 [6 4]> +} +@end lilypond + +Any text markup can be inserted as a figure: + +@lilypond[verbatim,quote,ragged-right,fragment] +\figures { + <\markup { \tiny \number 6 \super (1) } 5> +} +@end lilypond + +@c NOTE: We need to include notes any time we use extenders to +@c avoid extraneous staff creation due to Staff.use... in +@c \bassFigureExtendersOn + +Continuation lines can be used to indicate repeated figures: + +@lilypond[verbatim,quote,ragged-right,fragment] +<< + { + \clef bass + e4 d c b, + e4 d c b, + } + \figures { + \bassFigureExtendersOn + <6 4>4 <6 3> <7 3> <7 3> + \bassFigureExtendersOff + <6 4>4 <6 3> <7 3> <7 3> + } +>> +@end lilypond + +@noindent +In this case, the extender lines replace existing figures, +unless the continuation lines have been explicitly terminated. + +@lilypond[verbatim,quote,ragged-right,fragment] +<< + \figures { + \bassFigureExtendersOn + <6 4>4 <6 4> <6\! 4\!> <6 4> + } + { + \clef bass + d4 d c c + } +>> +@end lilypond + +The table below summarizes the figure modifiers available. + +@multitable @columnfractions .1 .5 .4 + +@item +@b{Modifier} +@tab +@b{Purpose} +@tab +@b{Example} + +@item ++, -, ! +@tab +Accidentals +@tab +@lilypond[line-width=4\cm] +\figures { + <7! 6+ 4-> <5++> <3--> +} +@end lilypond + +@item +\+, / +@tab +Augmented and diminished steps +@tab +@lilypond[line-width=4\cm] +\figures { + <6\+ 5/> <7/> +} +@end lilypond + +@item +\\ +@tab +Raised sixth step +@tab +@lilypond[line-width=4\cm] +\figures { + <6\\> +} +@end lilypond + +@item +\! +@tab +End of continuation line +@tab +@lilypond[line-width=4\cm] +<< + \figures { + \bassFigureExtendersOn + <6 4> <6 4> <6\! 4\!> <6 4> + } + { + \clef bass + d d c c + } +>> +@end lilypond + +@end multitable + + +@predefined +@cindex figured bass extender lines +@code{\bassFigureExtendersOn}, +@code{\bassFigureExtendersOff}. +@endpredefined + + +@snippets +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-the-positions-of-figured-bass-alterations.ly} + + +@seealso +@c Music Glossary: +@c @rglos{}. +@c +@c Learning Manual: +@c @rlearning{}. +@c +@c Notation Reference: +@c @ref{}. +@c +@c Application Usage: +@c @rprogram{}. +@c +@c Installed Files: +@c @file{}. +@c +Snippets: +@rlsr{Chords}. + +Internals Reference: +@rinternals{BassFigure}, +@rinternals{BassFigureAlignment}, +@rinternals{BassFigureLine}, +@rinternals{BassFigureBracket}, +@rinternals{BassFigureContinuation}, +@rinternals{FiguredBass}. + + +@c @knownissues + + +@node Displaying figured bass +@unnumberedsubsubsec Displaying figured bass + +Figured bass can be displayed using the @code{FiguredBass} context, +or in most staff contexts. + +When displayed in a @code{FiguredBass} context, the vertical location +of the figures is independent of the notes on the staff. + +@lilypond[verbatim,ragged-right,fragment,quote] +<< + \relative c'' { + c4 c'8 r8 c,4 c' + } + \new FiguredBass { + \figuremode { + <4>4 <10 6>8 s8 + <6 4>4 <6 4> + } + } +>> +@end lilypond + +@noindent +In the example above, the @code{FiguredBass} context must be +explicitly instantiated to avoid creating a second (empty) staff. + + +Figured bass can also be added to @code{Staff} contexts +directly. In this case, the vertical position of the +figures is adjusted automatically. + +@lilypond[verbatim,ragged-right,fragment,quote] +<< + \new Staff = myStaff + \figuremode { + <4>4 <10 6>8 s8 + <6 4>4 <6 4> + } + %% Put notes on same Staff as figures + \context Staff = myStaff + { + \clef bass + c4 c'8 r8 c4 c' + } +>> +@end lilypond + + +When added in a @code{Staff} context, figured bass can be displayed above +or below the staff. + +@lilypond[verbatim,ragged-right,fragment,quote] +<< + \new Staff = myStaff + \figuremode { + <4>4 <10 6>8 s8 + \bassFigureStaffAlignmentDown + <6 4>4 <6 4> + } + %% Put notes on same Staff as figures + \context Staff = myStaff + { + \clef bass + c4 c'8 r8 c4 c' + } +>> +@end lilypond + + +@predefined +@cindex figured bass alignment +@code{\bassFigureStaffAlignmentDown}, +@code{\bassFigureStaffAlignmentUp}, +@code{\bassFigureStaffAlignmentNeutral}. +@endpredefined + + +@c @snippets + + +@seealso +@c Music Glossary: +@c @rglos{}. +@c +@c Learning Manual: +@c @rlearning{}. +@c +@c Notation Reference: +@c @ref{}. +@c +@c Application Usage: +@c @rprogram{}. +@c +@c Installed Files: +@c @file{}. +@c +Snippets: +@rlsr{Chords}. + +Internals Reference: +@rinternals{BassFigure}, +@rinternals{BassFigureAlignment}, +@rinternals{BassFigureLine}, +@rinternals{BassFigureBracket}, +@rinternals{BassFigureContinuation}, +@rinternals{FiguredBass}. + + +@knownissues + +To ensure that continuation lines work properly, it is +safest to use the same rhythm in the figure line as in +the bass line. + +@lilypond[verbatim,ragged-right,fragment,quote] +<< + { + \clef bass + \repeat unfold 4 { f16. g32 } f8. es16 d8 es + } + \figures { + \bassFigureExtendersOn + % The extenders are correct here, with the same rhythm as the bass + \repeat unfold 4 { <6 4->16. <6 4->32 } + <5>8. r16 <6>8 <6\! 5-> + } +>> +<< + { + \clef bass + \repeat unfold 4 { f16. g32 } f8. es16 d8 es + } + \figures { + \bassFigureExtendersOn + % The extenders are incorrect here, even though the timing is the same + <6 4->4 <6 4->4 + <5>8. r16 <6>8 <6\! 5-> + } +>> +@end lilypond + +When using extender lines, adjacent figures with the same number in +a different figure location can cause the figure positions to invert. + +@lilypond[verbatim,ragged-right,fragment,quote,relative=1] +<< + { fis4 g g, e' } + \figures { + \bassFigureExtendersOn + <6 5>4 <5\! 4> < 5 _!> <6> + } +>> +@end lilypond + +To avoid this problem, simply turn on extenders after the figure that +begins the extender line and turn them off at the end of the extender line. + +@lilypond[verbatim,ragged-right,fragment,quote,relative=1] +<< + { fis4 g g, e' } + \figures { + <6 5>4 <5 4> + \bassFigureExtendersOn + < 5 _!>4 <6> + \bassFigureExtendersOff + } +>> +@end lilypond + diff --git a/Documentation/notation/editorial.itely b/Documentation/notation/editorial.itely new file mode 100644 index 0000000000..9712d58fde --- /dev/null +++ b/Documentation/notation/editorial.itely @@ -0,0 +1,708 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + +@node Editorial annotations +@section Editorial annotations + +@lilypondfile[quote]{editorial-headword.ly} + +This section discusses the various ways to change the appearance of +notes and add analysis or educational emphasis. + +@menu +* Inside the staff:: +* Outside the staff:: +@end menu + + +@node Inside the staff +@subsection Inside the staff + +This section discusses how to add emphasis to elements that are +inside the staff. + +@menu +* Selecting notation font size:: +* Fingering instructions:: +* Hidden notes:: +* Coloring objects:: +* Parentheses:: +* Stems:: +@end menu + +@node Selecting notation font size +@unnumberedsubsubsec Selecting notation font size + +@cindex font size (notation) scaling +@cindex font size (notation) +@cindex selecting font size (notation) +@cindex notation font size +@cindex note heads + +@funindex fontSize +@funindex font-size +@funindex magstep +@funindex \huge +@funindex \large +@funindex \normalsize +@funindex \small +@funindex \tiny +@funindex \teeny +@funindex huge +@funindex large +@funindex normalsize +@funindex small +@funindex tiny +@funindex teeny + +The font size of notation elements may be altered. It does not +change the size of variable symbols, such as beams or slurs. + +@warning{For font sizes of text, see +@ref{Selecting font and font size}.} + +@lilypond[verbatim,quote,relative=2] +\huge +c4.-> d8---3 +\large +c4.-> d8---3 +\normalsize +c4.-> d8---3 +\small +c4.-> d8---3 +\tiny +c4.-> d8---3 +\teeny +c4.-> d8---3 +@end lilypond + +Internally, this sets the @code{fontSize} property. This in turn +causes the @code{font-size} property to be set in all layout +objects. The value of @code{font-size} is a number indicating the +size relative to the standard size for the current staff height. +Each step up is an increase of approximately 12% of the font size. +Six steps is exactly a factor of two. The Scheme function +@code{magstep} converts a @code{font-size} number to a scaling +factor. The @code{font-size} property can also be set directly, +so that only certain layout objects are affected. + +@lilypond[verbatim,quote,relative=2] +\set fontSize = #3 +c4.-> d8---3 +\override NoteHead #'font-size = #-4 +c4.-> d8---3 +\override Script #'font-size = #2 +c4.-> d8---3 +\override Stem #'font-size = #-5 +c4.-> d8---3 +@end lilypond + +@cindex standard font size (notation) +@cindex font size (notation), standard + +@funindex font-interface +@funindex font-size + +Font size changes are achieved by scaling the design size that is +closest to the desired size. The standard font size (for +@w{@code{font-size = #0}}) depends on the standard staff height. +For a 20pt staff, a 10pt font is selected. + +The @code{font-size} property can only be set on layout objects +that use fonts. These are the ones supporting the +@code{font-interface} layout interface. + + +@predefined +@code{\teeny}, +@code{\tiny}, +@code{\small}, +@code{\normalsize}, +@code{\large}, +@code{\huge}. +@endpredefined + + +@seealso +Snippets: +@rlsr{Editorial annotations}. + +Internals Reference: +@rinternals{font-interface}. + + +@node Fingering instructions +@unnumberedsubsubsec Fingering instructions + +@cindex fingering +@cindex finger change + +@funindex \finger +@funindex finger + +Fingering instructions can be entered using +@var{note}-@var{digit}: + +@lilypond[verbatim,quote,relative=2] +c4-1 d-2 f-4 e-3 +@end lilypond + +Markup texts may be used for finger changes. + +@lilypond[verbatim,quote,relative=2] +c4-1 d-2 f-4 c^\markup { \finger "2 - 3" } +@end lilypond + +@cindex thumb-script + +@funindex \thumb +@funindex thumb + +A thumb-script can be added (e.g., in cello music) to indicate +that a note should be played with the thumb. + +@lilypond[verbatim,quote,relative=2] +2 +@end lilypond + +@cindex fingering chords +@cindex fingering instructions for chords +@cindex chords, fingering + +Fingerings for chords can also be added to individual notes of the +chord by adding them after the pitches. + +@lilypond[verbatim,quote,relative=2] +2 +@end lilypond + +Fingering instructions may be manually placed above or below the +staff, see @ref{Direction and placement}. + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{controlling-the-placement-of-chord-fingerings.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{allowing-fingerings-to-be-printed-inside-the-staff.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{avoiding-collisions-with-chord-fingerings.ly} + + +@seealso +Notation Reference: +@ref{Direction and placement} + +Snippets: +@rlsr{Editorial annotations}. + +Internals Reference: +@rinternals{FingeringEvent}, +@rinternals{fingering-event}, +@rinternals{Fingering_engraver}, +@rinternals{New_fingering_engraver}, +@rinternals{Fingering}. + + +@node Hidden notes +@unnumberedsubsubsec Hidden notes + +@cindex hidden notes +@cindex invisible notes +@cindex transparent notes +@cindex notes, hidden +@cindex notes, invisible +@cindex notes, transparent + +@funindex \hideNotes +@funindex hideNotes +@funindex \unHideNotes +@funindex unHideNotes + +Hidden (or invisible or transparent) notes can be useful in +preparing theory or composition exercises. + +@lilypond[verbatim,quote,relative=2] +c4 d +\hideNotes +e4 f +\unHideNotes +g a +\hideNotes +b +\unHideNotes +c +@end lilypond + +Notation objects which are attached to invisible notes are still +visible. + +@lilypond[verbatim,quote,relative=2] +c4( d) +\hideNotes +e4(\p f)-- +@end lilypond + + +@predefined +@code{\hideNotes}, +@code{\unHideNotes}. +@endpredefined + + +@seealso +Learning Manual: +@rlearning{Visibility and color of objects}. + +Notation Reference: +@ref{Invisible rests}, +@ref{Visibility of objects}, +@ref{Hiding staves}. + +Snippets: +@rlsr{Editorial annotations}. + +Internals Reference: +@rinternals{Note_spacing_engraver}, +@rinternals{NoteSpacing}. + + +@node Coloring objects +@unnumberedsubsubsec Coloring objects + +@cindex colored objects +@cindex objects, colored +@cindex colors +@cindex coloring objects +@cindex colored notes +@cindex coloring notes +@cindex notes, colored +@cindex x11 color +@cindex x11-color +@cindex with-color + +@funindex color +@funindex \with-color +@funindex with-color +@funindex x11-color + +Individual objects may be assigned colors. Valid color names +are listed in the @ref{List of colors}. + +@lilypond[verbatim,quote,relative=2] +\override NoteHead #'color = #red +c4 c +\override NoteHead #'color = #(x11-color 'LimeGreen) +d +\override Stem #'color = #blue +e +@end lilypond + + +The full range of colors defined for X11 can be accessed by using +the Scheme function @code{x11-color}. The function takes one +argument; this can be a symbol in the form @var{'FooBar} or a +string in the form @var{"FooBar"}. The first form is quicker to +write and is more efficient. However, using the second form it is +possible to access X11 colors by the multi-word form of its name. + +If @code{x11-color} cannot make sense of the parameter then the +color returned defaults to black. + +@lilypond[verbatim,quote,relative=2] +\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2) +\set Staff.instrumentName = \markup { + \with-color #(x11-color 'navy) "Clarinet" +} + +gis8 a +\override Beam #'color = #(x11-color "medium turquoise") +gis a +\override Accidental #'color = #(x11-color 'DarkRed) +gis a +\override NoteHead #'color = #(x11-color "LimeGreen") +gis a +% this is deliberate nonsense; note that the stems remain black +\override Stem #'color = #(x11-color 'Boggle) +b2 cis +@end lilypond + +@cindex rgb-color +@cindex color, rgb +@cindex rgb color + +@funindex rgb-color + +Exact RGB colors can be specified using the Scheme function +@code{rgb-color}. + +@lilypond[verbatim,quote,relative=2] +\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2) +\set Staff.instrumentName = \markup { + \with-color #(x11-color 'navy) "Clarinet" +} + +\override Stem #'color = #(rgb-color 0 0 0) +gis8 a +\override Stem #'color = #(rgb-color 1 1 1) +gis8 a +\override Stem #'color = #(rgb-color 0 0 0.5) +gis4 a +@end lilypond + + +@seealso +Notation Reference: +@ref{List of colors}, @ref{The +tweak command}. + +Snippets: +@rlsr{Editorial annotations}. + + +@cindex x11 color +@cindex colored notes in chords +@cindex notes, colored in chords +@cindex color in chords + +@funindex x11-color + +@knownissues +An X11 color is not necessarily exactly the same shade as a +similarly named normal color. + +Not all X11 colors are distinguishable in a web browser, i.e., +a web browser might not display a difference between @code{'LimeGreen} +and @code{'ForestGreen}. For web use normal colors are recommended +(i.e., @code{#blue}, @code{#green}, @code{#red}). + + +Notes in a chord cannot be colored with @code{\override}; use +@code{\tweak} instead, see @ref{The tweak command}. + + +@node Parentheses +@unnumberedsubsubsec Parentheses + +@cindex ghost notes +@cindex notes, ghost +@cindex notes, parenthesized +@cindex parentheses + +@funindex \parenthesize +@funindex parenthesize + +Objects may be parenthesized by prefixing @code{\parenthesize} to +the music event. When prefixed to a chord, it parenthesizes every +note. Individual notes inside a chord may also be parenthesized. + +@lilypond[verbatim,quote,relative=2] +c2 \parenthesize d +c2 \parenthesize +c2 +@end lilypond + +Non-note objects may be parenthesized as well. For articulations, +a hyphen is needed before the @code{\parenthesize} command. + +@lilypond[verbatim,quote,relative=2] +c2-\parenthesize -. d +c2 \parenthesize r +@end lilypond + + +@seealso +Snippets: +@rlsr{Editorial annotations}. + +Internals Reference: +@rinternals{Parenthesis_engraver}, +@rinternals{ParenthesesItem}, +@rinternals{parentheses-interface}. + + +@knownissues + +Parenthesizing a chord prints parentheses around each individual +note, instead of a single large parenthesis around the entire +chord. + + +@node Stems +@unnumberedsubsubsec Stems + +@cindex stem +@cindex stem, invisible +@cindex invisible stem + +@funindex \stemUp +@funindex stemUp +@funindex \stemDown +@funindex stemDown +@funindex \stemNeutral +@funindex stemNeutral +@cindex stem, direction +@cindex stem, up +@cindex stem, down +@cindex stem, neutral + +Whenever a note is found, a @code{Stem} object is created +automatically. For whole notes and rests, they are also created but +made invisible. + +Stems may be manually placed to point up or down; see +@ref{Direction and placement}. + + +@predefined +@code{\stemUp}, +@code{\stemDown}, +@code{\stemNeutral}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{default-direction-of-stems-on-the-center-line-of-the-staff.ly} + + +@seealso +Notation Reference: +@ref{Direction and placement}. + +Snippets: +@rlsr{Editorial annotations}. + +Internals Reference: +@rinternals{Stem_engraver}, +@rinternals{Stem}, +@rinternals{stem-interface}. + + +@node Outside the staff +@subsection Outside the staff + +This section discusses how to add emphasis to elements in the staff +from outside of the staff. + +@menu +* Balloon help:: +* Grid lines:: +* Analysis brackets:: +@end menu + +@node Balloon help +@unnumberedsubsubsec Balloon help + +@cindex balloon +@cindex notation, explaining +@cindex balloon help +@cindex help, balloon + +@funindex \balloonGrobText +@funindex \balloonText +@funindex Balloon_engraver +@funindex balloonGrobText +@funindex balloonText +@funindex \balloonLengthOn +@funindex balloonLengthOn +@funindex \balloonLengthOff +@funindex balloonLengthOff + +Elements of notation can be marked and named with the help of a +square balloon. The primary purpose of this feature is to explain +notation. + +@lilypond[verbatim,quote,relative=2] +\new Voice \with { \consists "Balloon_engraver" } +{ + \balloonGrobText #'Stem #'(3 . 4) \markup { "I'm a Stem" } + a8 + \balloonGrobText #'Rest #'(-4 . -4) \markup { "I'm a rest" } + r + 2. +} +@end lilypond + + +There are two music functions, @code{balloonGrobText} and +@code{balloonText}; the former is used like +@w{@code{\once \override}} to attach text to any grob, and the +latter is used like @code{\tweak}, typically within chords, to +attach text to an individual note. + +Balloon text normally influences note spacing, but this can be +altered: + +@lilypond[verbatim,quote,relative=2] +\new Voice \with { \consists "Balloon_engraver" } +{ + \balloonLengthOff + \balloonGrobText #'Stem #'(3 . 4) \markup { "I'm a Stem" } + a8 + \balloonGrobText #'Rest #'(-4 . -4) \markup { "I'm a rest" } + r + \balloonLengthOn + 2. +} +@end lilypond + + +@predefined +@code{\balloonLengthOn}, +@code{\balloonLengthOff}. +@endpredefined + + +@seealso +Snippets: +@rlsr{Editorial annotations}. + +Internals Reference: +@rinternals{Balloon_engraver}, +@rinternals{BalloonTextItem}, +@rinternals{balloon-interface}. + + +@node Grid lines +@unnumberedsubsubsec Grid lines + +@cindex grid lines +@cindex lines, grid +@cindex vertical lines between staves +@cindex lines, vertical between staves + +@funindex Grid_point_engraver +@funindex Grid_line_span_engraver +@funindex gridInterval + +Vertical lines can be drawn between staves synchronized with the +notes. + +The @code{Grid_point_engraver} must be used to create the end +points of the lines, while the @code{Grid_line_span_engraver} must +be used to actually draw the lines. By default this centers grid +lines horizontally below and to the left side of each note head. +Grid lines extend from the middle lines of each staff. The +@code{gridInterval} must specify the duration between the grid +lines. + +@lilypond[verbatim,quote] +\layout { + \context { + \Staff + \consists "Grid_point_engraver" + gridInterval = #(ly:make-moment 1 4) + } + \context { + \Score + \consists "Grid_line_span_engraver" + } +} + +\score { + \new ChoirStaff << + \new Staff \relative c'' { + \stemUp + c4. d8 e8 f g4 + } + \new Staff \relative c { + \clef bass + \stemDown + c4 g' f e + } + >> +} +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{grid-lines--changing-their-appearance.ly} + + +@seealso +Snippets: +@rlsr{Editorial annotations}. + +Internals Reference: +@rinternals{Grid_line_span_engraver}, +@rinternals{Grid_point_engraver}, +@rinternals{GridLine}, +@rinternals{GridPoint}, +@rinternals{grid-line-interface}, +@rinternals{grid-point-interface}. + + +@node Analysis brackets +@unnumberedsubsubsec Analysis brackets + +@cindex brackets +@cindex bracket, phrasing +@cindex phrasing bracket +@cindex musicological analysis +@cindex analysis, musicological +@cindex note grouping bracket +@cindex horizontal bracket +@cindex bracket, horizontal + +@funindex Horizontal_bracket_engraver +@funindex \startGroup +@funindex startGroup +@funindex \stopGroup +@funindex stopGroup + +Brackets are used in musical analysis to indicate structure in musical +pieces. Simple horizontal brackets are supported. + +@lilypond[verbatim,quote] +\layout { + \context { + \Voice + \consists "Horizontal_bracket_engraver" + } +} +\relative c'' { + c2\startGroup + d\stopGroup +} +@end lilypond + +Analysis brackets may be nested. + +@lilypond[verbatim,quote] +\layout { + \context { + \Voice + \consists "Horizontal_bracket_engraver" + } +} +\relative c'' { + c4\startGroup\startGroup + d4\stopGroup + e4\startGroup + d4\stopGroup\stopGroup +} +@end lilypond + + +@seealso +Snippets: +@rlsr{Editorial annotations}. + +Internals Reference: +@rinternals{Horizontal_bracket_engraver}, +@rinternals{HorizontalBracket}, +@rinternals{horizontal-bracket-interface}, +@rinternals{Staff}. + diff --git a/Documentation/notation/expressive.itely b/Documentation/notation/expressive.itely new file mode 100644 index 0000000000..696816ca29 --- /dev/null +++ b/Documentation/notation/expressive.itely @@ -0,0 +1,1149 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + +@node Expressive marks +@section Expressive marks + +@lilypondfile[quote]{expressive-headword.ly} + +This section lists various expressive marks that can be +created in a score. + +@menu +* Attached to notes:: +* Curves:: +* Lines:: +@end menu + + +@node Attached to notes +@subsection Attached to notes + +This section explains how to create expressive marks that are +attached to notes: articulations, ornamentations, and dynamics. +Methods to create new dynamic markings are also discussed. + +@menu +* Articulations and ornamentations:: +* Dynamics:: +* New dynamic marks:: +@end menu + +@node Articulations and ornamentations +@unnumberedsubsubsec Articulations and ornamentations + +@cindex articulations +@cindex ornamentation +@cindex scripts +@cindex ornaments +@cindex espressivo +@cindex fermata +@cindex upbow +@cindex downbow +@cindex foot marks +@cindex organ pedal marks +@cindex pedal marks, organ +@cindex turn +@cindex open +@cindex stopped +@cindex flageolet +@cindex reverseturn +@cindex trill +@cindex prall +@cindex mordent +@cindex prallprall +@cindex prallmordent +@cindex prall, up +@cindex prall, down +@cindex thumb marking +@cindex segno +@cindex coda +@cindex varcoda + +@funindex - + +A variety of symbols that denote articulations, ornamentations, +and other performance indications can be attached to a note using +this syntax: + +@example +@var{note}\@var{name} +@end example + +The possible values for @var{name} are listed in @ref{List of +articulations}. For example: + +@lilypond[verbatim,quote,relative=2] +c4\staccato c\mordent b2\turn +c1\fermata +@end lilypond + +@cindex marcato +@cindex tenuto +@cindex staccatissimo +@cindex accent +@cindex staccato +@cindex portato + +Some of these articulations have shorthands for easier entry. +Shorthands are appended to the note name, and their syntax +consists of a dash @code{-} followed by a symbol signifying the +articulation. Predefined shorthands exist for @notation{marcato}, +@notation{stopped}, @notation{tenuto}, @notation{staccatissimo}, +@notation{accent}, @notation{staccato}, and @notation{portato}. +Their corresponding output appears as follows: + +@lilypond[verbatim,quote,relative=2] +c4-^ c-+ c-- c-| +c4-> c-. c2-_ +@end lilypond + +The rules for the default placement of articulations are defined +in @file{scm/@/script@/.scm}. Articulations and ornamentations +may be manually placed above or below the staff; see +@ref{Direction and placement}. + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{modifying-default-values-for-articulation-shorthand-notation.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{controlling-the-vertical-ordering-of-scripts.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{creating-a-delayed-turn.ly} + +@seealso +Music Glossary: +@rglos{tenuto}, +@rglos{accent}, +@rglos{staccato}, +@rglos{portato}. + +Notation Reference: +@ref{Direction and placement}, +@ref{List of articulations}, +@ref{Trills}. + +Installed Files: +@file{scm/@/script@/.scm}. + +Snippets: +@rlsr{Expressive marks}. + +Internals Reference: +@rinternals{Script}, +@rinternals{TextScript}. + + +@node Dynamics +@unnumberedsubsubsec Dynamics + +@cindex absolute dynamics +@cindex dynamics +@cindex dynamics, absolute + +@funindex \ppppp +@funindex ppppp +@funindex \pppp +@funindex pppp +@funindex \ppp +@funindex ppp +@funindex \pp +@funindex pp +@funindex \p +@funindex p +@funindex \mp +@funindex mp +@funindex \mf +@funindex mf +@funindex \f +@funindex f +@funindex \ff +@funindex ff +@funindex \fff +@funindex fff +@funindex \ffff +@funindex ffff +@funindex \fp +@funindex fp +@funindex \sf +@funindex sf +@funindex \sff +@funindex sff +@funindex \sp +@funindex sp +@funindex \spp +@funindex spp +@funindex \sfz +@funindex sfz +@funindex \rfz +@funindex rfz + +Absolute dynamic marks are specified using a command after a note, +such as @code{c4\ff}. The available dynamic marks are +@code{\ppppp}, @code{\pppp}, @code{\ppp}, @code{\pp}, @code{\p}, +@code{\mp}, @code{\mf}, @code{\f}, @code{\ff}, @code{\fff}, +@code{\ffff}, @code{\fffff}, @code{\fp}, @code{\sf}, @code{\sff}, +@code{\sp}, @code{\spp}, @code{\sfz}, and @code{\rfz}. Dynamic +marks may be manually placed above or below the staff; see +@ref{Direction and placement}. + +@lilypond[verbatim,quote,relative=2] +c2\ppp c\mp +c2\rfz c^\mf +c2_\spp c^\ff +@end lilypond + +@cindex hairpin +@cindex crescendo +@cindex decrescendo +@cindex diminuendo + +@funindex \< +@funindex \> +@funindex \! +@funindex \cr +@funindex cr +@funindex \decr +@funindex decr + +A @notation{crescendo} mark is started with @code{\<} and +terminated with @code{\!}, an absolute dynamic, or an additional +crescendo or decrescendo mark. A @notation{decrescendo} mark is +started with @code{\>} and is also terminated with @code{\!}, an +absolute dynamic, or another crescendo or decrescendo mark. +@code{\cr} and @code{\decr} may be used instead of @code{\<} and +@code{\>}. @notation{Hairpins} are engraved by default using this +notation. + +@lilypond[verbatim,quote,relative=2] +c2\< c\! +d2\< d\f +e2\< e\> +f2\> f\! +e2\> e\mp +d2\> d\> +c1\! +@end lilypond + +Spacer rests are needed to engrave multiple marks on one note. + +@cindex multiple dynamic marks on one note +@cindex dynamic marks, multiple on one note + +@lilypond[verbatim,quote,relative=2] +c4\< c\! d\> e\! +<< f1 { s4 s4\< s4\> s4\! } >> +@end lilypond + +@cindex espressivo articulation + +@funindex \espressivo +@funindex espressivo + +In some situations the @code{\espressivo} articulation mark may be +the appropriate choice to indicate a crescendo and decrescendo on +one note: + +@lilypond[verbatim,quote,relative=2] +c2 b4 a +g1\espressivo +@end lilypond + + +@funindex \crescTextCresc +@funindex crescTextCresc +@funindex \dimTextDecresc +@funindex dimTextDecresc +@funindex \dimTextDecr +@funindex dimTextDecr +@funindex \dimTextDim +@funindex dimTextDim +@funindex \crescHairpin +@funindex crescHairpin +@funindex \dimHairpin +@funindex dimHairpin + +Crescendos and decrescendos can be engraved as textual markings +instead of hairpins. Dashed lines are printed to indicate their +extent. The built-in commands that enable these text modes are +@code{\crescTextCresc}, @code{\dimTextDecresc}, +@code{\dimTextDecr}, and @code{\dimTextDim}. The corresponding +@code{\crescHairpin} and @code{\dimHairpin} commands will revert +to hairpins again: + +@lilypond[verbatim,quote,relative=2] +\crescTextCresc +c2\< d | e f\! +\dimTextDecresc +e2\> d | c b\! +\crescHairpin +c2\< d | e f\! +\dimHairpin +e2\> d\! +@end lilypond + + +To create new absolute dynamic marks or text that should be +aligned with dynamics, see @ref{New dynamic marks}. + +@cindex dynamics, vertical positioning +@cindex vertical positioning of dynamics + +@funindex DynamicLineSpanner + + +Vertical positioning of dynamics is handled by +@rinternals{DynamicLineSpanner}. +@funindex \dynamicUp +@funindex dynamicUp +@funindex \dynamicDown +@funindex dynamicDown +@funindex \dynamicNeutral +@funindex dynamicNeutral + + +@predefined +@code{\dynamicUp}, +@code{\dynamicDown}, +@code{\dynamicNeutral}, +@code{\crescTextCresc}, +@code{\dimTextDim}, +@code{\dimTextDecr}, +@code{\dimTextDecresc}, +@code{\crescHairpin}, +@code{\dimHairpin}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{setting-hairpin-behavior-at-bar-lines.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{setting-the-minimum-length-of-hairpins.ly} + +@cindex al niente +@cindex niente, al + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{printing-hairpins-using-al-niente-notation.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{vertically-aligned-dynamics-and-textscripts.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{hiding-the-extender-line-for-text-dynamics.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-text-and-spanner-styles-for-text-dynamics.ly} + + +@seealso +Music Glossary: +@rglos{al niente}, +@rglos{crescendo}, +@rglos{decrescendo}, +@rglos{hairpin}. + +Learning Manual: +@rlearning{Articulation and dynamics}. + +Notation Reference: +@ref{Direction and placement}, +@ref{New dynamic marks}, +@ref{What goes into the MIDI output?}, +@ref{Controlling MIDI dynamics}. + +Snippets: +@rlsr{Expressive marks}. + +Internals Reference: +@rinternals{DynamicText}, +@rinternals{Hairpin}, +@rinternals{DynamicLineSpanner}. + + +@node New dynamic marks +@unnumberedsubsubsec New dynamic marks + +@cindex new dynamic marks +@cindex dynamic marks, new + +The easiest way to create dynamic indications is to use +@code{\markup} objects. + +@lilypond[verbatim,quote] +moltoF = \markup { molto \dynamic f } + +\relative c' { + 16_\moltoF + 2.. +} +@end lilypond + +@cindex dynamics, editorial +@cindex dynamics, parenthesis +@cindex editorial dynamics +@funindex \bracket +@funindex bracket +@funindex \dynamic +@funindex dynamic + +In markup mode, editorial dynamics (within parentheses or square +brackets) can be created. The syntax for markup mode is described +in @ref{Formatting text}. + +@lilypond[verbatim,quote] +roundF = \markup { \center-align \concat { \bold { \italic ( } + \dynamic f \bold { \italic ) } } } +boxF = \markup { \bracket { \dynamic f } } +\relative c' { + c1_\roundF + c1_\boxF +} +@end lilypond + +@cindex make-dynamic-script +@funindex make-dynamic-script + +Simple, centered dynamic marks are easily created with the +@code{make-dynamic-script} function. + +@lilypond[verbatim,quote] +sfzp = #(make-dynamic-script "sfzp") +\relative c' { + c4 c c\sfzp c +} +@end lilypond + +In general, @code{make-dynamic-script} takes any markup object as its +argument. The dynamic font only contains the characters +@code{f,m,p,r,s} and @code{z}, so if a dynamic mark that includes +plain text or punctuation symbols is desired, markup commands that +reverts font family and font encoding to normal text should be used, +for example @code{\normal-text}. The interest of using +@code{make-dynamic-script} instead of an ordinary markup is ensuring +the vertical alignment of markup objects and hairpins that are +attached to the same note head. + +@lilypond[verbatim,quote] +roundF = \markup { \center-align \concat { + \normal-text { \bold { \italic ( } } + \dynamic f + \normal-text { \bold { \italic ) } } } } +boxF = \markup { \bracket { \dynamic f } } +mfEspress = \markup { \center-align \line { + \hspace #3.7 mf \normal-text \italic espress. } } +roundFdynamic = #(make-dynamic-script roundF) +boxFdynamic = #(make-dynamic-script boxF) +mfEspressDynamic = #(make-dynamic-script mfEspress) +\relative c' { + c4_\roundFdynamic\< d e f + g,1~_\boxFdynamic\> + g + g'~\mfEspressDynamic + g +} +@end lilypond + +The Scheme form of markup mode may be used instead. Its syntax is +explained in @ref{Markup construction in Scheme}. + +@lilypond[verbatim,quote] +moltoF = #(make-dynamic-script + (markup #:normal-text "molto" + #:dynamic "f")) +\relative c' { + 16 + 2..\moltoF +} +@end lilypond + +Font settings in markup mode are described in +@ref{Selecting font and font size}. + + +@seealso +Notation Reference: +@ref{Formatting text}, +@ref{Selecting font and font size}, +@ref{Markup construction in Scheme}, +@ref{What goes into the MIDI output?}, +@ref{Controlling MIDI dynamics}. + +Snippets: +@rlsr{Expressive marks}. + + +@node Curves +@subsection Curves + +This section explains how to create various expressive marks that +are curved: normal slurs, phrasing slurs, breath marks, falls, and +doits. + +@menu +* Slurs:: +* Phrasing slurs:: +* Breath marks:: +* Falls and doits:: +@end menu + +@node Slurs +@unnumberedsubsubsec Slurs + +@cindex slurs + +@notation{Slurs} are entered using parentheses: + +@warning{In polyphonic music, a slur must be terminated +in the same voice it began.} + +@lilypond[verbatim,quote,relative=2] +f4( g a) a8 b( +a4 g2 f4) +2( 2) +@end lilypond + +@cindex slurs, manual placement +@cindex slurs, below notes +@cindex slurs, above notes +@funindex \slurDown +@funindex slurDown +@funindex \slurNeutral +@funindex slurNeutral + +Slurs may be manually placed above or below the staff; see +@ref{Direction and placement}. + +@cindex phrasing slur +@cindex multiple slurs +@cindex simultaneous slurs +@cindex slur, phrasing +@cindex slurs, multiple +@cindex slurs, simultaneous + +Simultaneous or overlapping slurs are not permitted, but a phrasing +slur can overlap a slur. This permits two slurs to be printed at +once. For details, see @ref{Phrasing slurs}. + +@cindex slur style +@cindex slur, solid +@cindex slur, dotted +@cindex slur, dashed +@cindex solid slur +@cindex dotted slur +@cindex dashed slur +@cindex style, slur +@funindex \slurDashed +@funindex slurDashed +@funindex \slurDotted +@funindex slurDotted +@funindex \slurSolid +@funindex slurSolid + +Slurs can be solid, dotted, or dashed. Solid is the default slur +style: + +@lilypond[verbatim,quote,relative=1] +c4( e g2) +\slurDashed +g4( e c2) +\slurDotted +c4( e g2) +\slurSolid +g4( e c2) +@end lilypond + +@funindex \slurHalfDashed +@funindex slurHalfDashed +@funindex \slurHalfSolid +@funindex slurHalfSolid +@cindex slur, half dashed and half solid + +Slurs can also be made half-dashed (the first half dashed, the +second half solid) or half-solid (the first half solid, the second +half dashed): + +@lilypond[verbatim,quote,relative=1] +c4( e g2) +\slurHalfDashed +g4( e c2) +\slurHalfSolid +c4( e g2) +\slurSolid +g4( e c2) +@end lilypond + +@funindex \slurDashPattern +@funindex slurDashPattern +@cindex slur, defining dash patterns + +Custom dash patterns for slurs can be defined: + +@lilypond[verbatim,quote,relative=1] +c4( e g2) +\slurDashPattern #0.7 #0.75 +g4( e c2) +\slurDashPattern #0.5 #2.0 +c4( e g2) +\slurSolid +g4( e c2) +@end lilypond + + + +@funindex \slurUp +@funindex slurUp + + +@predefined +@code{\slurUp}, +@code{\slurDown}, +@code{\slurNeutral}, +@code{\slurDashed}, +@code{\slurDotted}, +@code{\slurHalfDashed}, +@code{\slurHalfSolid}, +@code{\slurDashPattern}, +@code{\slurSolid}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{using-double-slurs-for-legato-chords.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{positioning-text-markups-inside-slurs.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{making-slurs-with-complex-dash-structure.ly} + +@seealso +Music Glossary: +@rglos{slur}. + +Learning Manual: +@rlearning{On the un-nestedness of brackets and ties}. + +Notation Reference: +@ref{Direction and placement}, +@ref{Phrasing slurs}. + +Snippets: +@rlsr{Expressive marks}. + +Internals Reference: +@rinternals{Slur}. + + +@node Phrasing slurs +@unnumberedsubsubsec Phrasing slurs + +@cindex phrasing slurs +@cindex phrasing marks +@cindex slur, phrasing +@cindex mark, phrasing +@funindex \( +@funindex \) + +@notation{Phrasing slurs} (or phrasing marks) that indicate a +musical sentence are written using the commands @code{\(} and +@code{\)} respectively: + +@lilypond[verbatim,quote,relative=2] +c4\( d( e) f( +e2) d\) +@end lilypond + +@funindex \phrasingSlurUp +@funindex phrasingSlurUp +@funindex \phrasingSlurDown +@funindex phrasingSlurDown +@funindex \phrasingSlurNeutral +@funindex phrasingSlurNeutral + +Typographically, a phrasing slur behaves almost exactly like a +normal slur. However, they are treated as different objects; a +@code{\slurUp} will have no effect on a phrasing slur. Phrasing +may be manually placed above or below the staff; see +@ref{Direction and placement}. + +@cindex simultaneous phrasing slurs +@cindex multiple phrasing slurs +@cindex slur, simultaneous phrasing +@cindex slur, multiple phrasing +@cindex phrasing slur, simultaneous +@cindex phrasing slur, multiple + +Simultaneous or overlapping phrasing slurs are not permitted. + +@funindex phrasingSlurDashed +@funindex \phrasingSlurDashed +@funindex \phrasingSlurDotted +@funindex phrasingSlurDotted +@funindex \phrasingSlurSolid +@funindex phrasingSlurSolid +@cindex phrasing slur, dashed +@cindex dashed phrasing slur +@cindex phrasing slur, dotted +@cindex dotted phrasing slurs +@cindex slur, dashed phrasing +@cindex slur, dotted phrasing + +Phrasing slurs can be solid, dotted, or dashed. Solid is the default +style for phrasing slurs: + +@lilypond[verbatim,quote,relative=1] +c4\( e g2\) +\phrasingSlurDashed +g4\( e c2\) +\phrasingSlurDotted +c4\( e g2\) +\phrasingSlurSolid +g4\( e c2\) +@end lilypond + +@funindex phrasingSlurHalfDashed +@funindex \phrasingSlurHalfDashed +@funindex \phrasingSlurHalfSolid +@funindex phrasingSlurHalfSolid +@cindex phrasing slur, half solid and half dashed +@cindex slur, half solid and half dashed phrasing + +Phrasing slurs can also be made half-dashed (the first half dashed, the +second half solid) or half-solid (the first half solid, the second +half dashed): + +@lilypond[verbatim,quote,relative=1] +c4\( e g2\) +\phrasingSlurHalfDashed +g4\( e c2\) +\phrasingSlurHalfSolid +c4\( e g2\) +\phrasingSlurSolid +g4\( e c2\) +@end lilypond + +@funindex \phrasingSlurDashPattern +@funindex phrasingSlurDashPattern +@cindex phrasing slur, defining dash patterns +@cindex slur, phrasing, defining dash patterns +@cindex slur, definind dash patterns for phrasing + +Custom dash patterns for phrasing slurs can be defined: + +@lilypond[verbatim,quote,relative=1] +c4\( e g2\) +\phrasingSlurDashPattern #0.7 #0.75 +g4\( e c2\) +\phrasingSlurDashPattern #0.5 #2.0 +c4\( e g2\) +\phrasingSlurSolid +g4\( e c2\) +@end lilypond + +Dash pattern definitions for phrasing slurs have the same structure +as dash pattern definitions for slurs. For more information about +complex dash patterns, see the snippets under @ref{Slurs}. + +@predefined +@code{\phrasingSlurUp}, +@code{\phrasingSlurDown}, +@code{\phrasingSlurNeutral}, +@code{\phrasingSlurDashed}, +@code{\phrasingSlurDotted}, +@code{\phrasingSlurHalfDashed}, +@code{\phrasingSlurHalfSolid}, +@code{\phrasingSlurDashPattern}, +@code{\phrasingSlurSolid}. +@endpredefined + + +@seealso +Learning Manual: +@rlearning{On the un-nestedness of brackets and ties}. + +Notation Reference: +@ref{Direction and placement}, +@ref{Slurs}. + +Snippets: +@rlsr{Expressive marks}. + +Internals Reference: +@rinternals{PhrasingSlur}. + + +@node Breath marks +@unnumberedsubsubsec Breath marks + +@cindex breath marks +@cindex pause mark +@funindex \breathe +@funindex breathe + +Breath marks are entered using @code{\breathe}: + +@lilypond[verbatim,quote,relative=2] +c2. \breathe d4 +@end lilypond + +Musical indicators for breath marks in ancient notation, +divisiones, are supported. For details, see @ref{Divisiones}. + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-the-breath-mark-symbol.ly} + +@cindex caesura +@cindex railroad tracks + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{inserting-a-caesura.ly} + + +@seealso +Music Glossary: +@rglos{caesura}. + +Notation Reference: +@ref{Divisiones}. + +Snippets: +@rlsr{Expressive marks}. + +Internals Reference: +@rinternals{BreathingSign}. + + +@node Falls and doits +@unnumberedsubsubsec Falls and doits + +@cindex falls +@cindex doits +@funindex \bendAfter +@funindex bendAfter + +@notation{Falls} and @notation{doits} can be added to notes using +the @code{\bendAfter} command. The direction of the fall or doit +is indicated with a plus or minus (up or down). The number +indicates the pitch interval that the fall or doit will extend +@emph{beyond} the main note. + +@lilypond[verbatim,quote,relative=2] +c2-\bendAfter #+4 +c2-\bendAfter #-4 +c2-\bendAfter #+8 +c2-\bendAfter #-8 +@end lilypond + +The dash @code{-} immediately preceding the @code{\bendAfter} +command is @emph{required} when writing falls and doits. + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{adjusting-the-shape-of-falls-and-doits.ly} + + +@seealso +Music Glossary: +@rglos{fall}, +@rglos{doit}. + +Snippets: +@rlsr{Expressive marks}. + + +@node Lines +@subsection Lines + +This section explains how to create various expressive marks that +follow a linear path: glissandos, arpeggios, and trills. + +@menu +* Glissando:: +* Arpeggio:: +* Trills:: +@end menu + +@node Glissando +@unnumberedsubsubsec Glissando + +@cindex glissando +@funindex \glissando +@funindex glissando + +A @notation{glissando} is created by attaching @code{\glissando} +to a note: + +@lilypond[verbatim,quote,relative=2] +g2\glissando g' +c2\glissando c, +@end lilypond + +Different styles of glissandi can be created. For details, see +@ref{Line styles}. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{contemporary-glissando.ly} + + +@seealso +Music Glossary: +@rglos{glissando}. + +Notation Reference: +@ref{Line styles}. + +Snippets: +@rlsr{Expressive marks}. + +Internals Reference: +@rinternals{Glissando}. + + +@knownissues + +Printing text over the line (such as @notation{gliss.}) is not +supported. + + +@node Arpeggio +@unnumberedsubsubsec Arpeggio + +@cindex arpeggio +@cindex broken chord +@cindex chord, broken + +@funindex \arpeggio +@funindex arpeggio +@funindex \arpeggioArrowUp +@funindex arpeggioArrowUp +@funindex \arpeggioArrowDown +@funindex arpeggioArrowDown +@funindex \arpeggioNormal +@funindex arpeggioNormal + +An @notation{arpeggio} on a chord (also known as a broken chord) +is denoted by appending @code{\arpeggio} to the chord construct: + +@lilypond[verbatim,quote,relative=1] +1\arpeggio +@end lilypond + +Different types of arpeggios may be written. +@code{\arpeggioNormal} reverts to a normal arpeggio: + +@lilypond[verbatim,quote,relative=1] +2\arpeggio + +\arpeggioArrowUp +2\arpeggio + +\arpeggioArrowDown +2\arpeggio + +\arpeggioNormal +2\arpeggio +@end lilypond + +@cindex arpeggio symbols, special +@cindex special arpeggio symbols + +@funindex \arpeggioBracket +@funindex arpeggioBracket +@funindex \arpeggioParenthesis +@funindex arpeggioParenthesis +@funindex \arpeggioParenthesisDashed +@funindex arpeggioParenthesisDashed + +Special @emph{bracketed} arpeggio symbols can be created: + +@lilypond[verbatim,quote,relative=1] +2 + +\arpeggioBracket +2\arpeggio + +\arpeggioParenthesis +2\arpeggio + +\arpeggioParenthesisDashed +2\arpeggio + +\arpeggioNormal +2\arpeggio +@end lilypond + +The dash properties of the parenthesis arpeggio are controlled +with the @code{'dash-details} property, which is described at @ref{Slurs}. + +Arpeggios can be explicitly written out with ties. For more +information, see @ref{Ties}. + + +@predefined +@code{\arpeggio}, +@code{\arpeggioArrowUp}, +@code{\arpeggioArrowDown}, +@code{\arpeggioNormal}, +@code{\arpeggioBracket}, +@code{\arpeggioParenthesis} +@code{\arpeggioParenthesisDashed}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{creating-cross-staff-arpeggios-in-a-piano-staff.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{creating-cross-staff-arpeggios-in-other-contexts.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{creating-arpeggios-across-notes-in-different-voices.ly} + + +@seealso +Music Glossary: +@rglos{arpeggio}. + +Notation Reference: +@ref{Slurs}, +@ref{Ties}. + +Snippets: +@rlsr{Expressive marks}. + +Internals Reference: +@rinternals{Arpeggio}, +@rinternals{Slur}, +@rinternals{PianoStaff}. + + +@knownissues + +@cindex cross-staff parenthesis-style arpeggio +@cindex arpeggio, parenthesis-style, cross-staff +@cindex arpeggio, cross-staff parenthesis-style + +It is not possible to mix connected arpeggios and unconnected +arpeggios in one @code{PianoStaff} at the same point in +time. + +The parenthesis-style arpeggio brackets do not work for +cross-staff arpeggios. + + +@node Trills +@unnumberedsubsubsec Trills + +@cindex trills + +@funindex \trill +@funindex trill +@funindex \startTrillSpan +@funindex startTrillSpan +@funindex \stopTrillSpan +@funindex stopTrillSpan + +Short @notation{trills} without an extender line are printed with +@code{\trill}; see @ref{Articulations and ornamentations}. + +Longer trills with an extender line are made with +@code{\startTrillSpan} and @code{\stopTrillSpan}: + +@lilypond[verbatim,quote,relative=2] +d1~\startTrillSpan +d1 +c2\stopTrillSpan r2 +@end lilypond + +In the following example, a trill is combined with grace notes. +The syntax of this construct and the method to precisely position +the grace notes are described in @ref{Grace notes}. + +@lilypond[verbatim,quote,relative=2] +c1 \afterGrace +d1\startTrillSpan { c32[ d]\stopTrillSpan } +e2 r2 +@end lilypond + +@cindex pitched trills +@cindex trills, pitched +@funindex \pitchedTrill +@funindex pitchedTrill + +Trills that require an auxiliary note with an explicit pitch can +be typeset with the @code{\pitchedTrill} command. The first +argument is the main note, and the second is the @emph{trilled} +note, printed as a stemless note head in parentheses. + +@lilypond[verbatim,quote,relative=1] +\pitchedTrill e2\startTrillSpan fis +d\stopTrillSpan +@end lilypond + +@cindex pitched trill with forced accidental +@cindex trill, pitched with forced accidental +@cindex accidental, forced for pitched trill + +In the following example, the second pitched trill is ambiguous; +the accidental of the trilled note is not printed. As a +workaround, the accidentals of the trilled notes can be forced. +The second measure illustrates this method: + +@lilypond[verbatim,quote,relative=2] +\pitchedTrill eis4\startTrillSpan fis +g\stopTrillSpan +\pitchedTrill eis4\startTrillSpan fis +g\stopTrillSpan +\pitchedTrill eis4\startTrillSpan fis +g\stopTrillSpan +\pitchedTrill eis4\startTrillSpan fis! +g\stopTrillSpan +@end lilypond + + +@predefined +@code{\startTrillSpan}, +@code{\stopTrillSpan}. +@endpredefined + + +@seealso +Music Glossary: +@rglos{trill}. + +Notation Reference: +@ref{Articulations and ornamentations}, +@ref{Grace notes}. + +Snippets: +@rlsr{Expressive marks}. + +Internals Reference: +@rinternals{TrillSpanner}. + diff --git a/Documentation/notation/fretted-strings.itely b/Documentation/notation/fretted-strings.itely new file mode 100644 index 0000000000..1f153e3d9b --- /dev/null +++ b/Documentation/notation/fretted-strings.itely @@ -0,0 +1,1334 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + +@node Fretted string instruments +@section Fretted string instruments + +@lilypondfile[quote]{fretted-headword.ly} + +This section discusses several aspects of music notation that are unique +to fretted string instruments. + +@cindex tablature +@cindex tablature, guitar +@cindex tablature, banjo +@cindex guitar tablature +@cindex banjo tablature + +@menu +* Common notation for fretted strings:: +* Guitar:: +* Banjo:: +@end menu + +@node Common notation for fretted strings +@subsection Common notation for fretted strings + +This section discusses common notation that is unique +to fretted string instruments. + +@menu +* References for fretted strings:: +* String number indications:: +* Default tablatures:: +* Custom tablatures:: +* Fret diagram markups:: +* Predefined fret diagrams:: +* Automatic fret diagrams:: +* Right-hand fingerings:: +@end menu + +@node References for fretted strings +@unnumberedsubsubsec References for fretted strings + +Music for fretted string instruments is normally notated on +a single staff, either in traditional music notation or in +tablature. Sometimes the two types are combined, and it is +especially common in popular music to use chord diagrams above +a staff of traditional notation. The guitar and the banjo are +transposing instruments, sounding an octave lower than written. +Scores for these instruments should use the @code{"treble_8"} clef. +Some other elements pertinent to fretted string instruments +are covered elsewhere: + +@itemize +@item Fingerings are indicated as shown in @ref{Fingering instructions}. + +@item Instructions for @notation{Laissez vibrer} ties +as well as ties on arpeggios and tremolos can be found in +@ref{Ties}. + +@item Instructions for handling multiple voices can be found +in @ref{Collision resolution}. + +@item Instructions for indicating harmonics can be found in +@ref{Harmonics}. + +@end itemize + + +@seealso +Notation Reference: +@ref{Fingering instructions}, +@ref{Ties}, +@ref{Collision resolution}, +@ref{Instrument names}, +@ref{Writing music in parallel}, +@ref{Arpeggio}, +@ref{List of articulations}, +@ref{Clef}. + + +@node String number indications +@unnumberedsubsubsec String number indications + +@cindex string numbers +@cindex string vs. fingering numbers +@cindex fingering vs. string numbers + +The string on which a note should be played may be indicated by +appending @code{\@var{number}} to a note inside a chord construct +@code{<>}. + +@warning{String numbers @strong{must} be defined inside a chord +construct even if there is only a single note.} + +@lilypond[verbatim,quote,relative=0] +\clef "treble_8" +4 2 +1 +@end lilypond + +When fingerings and string indications are used together, their +placement is controlled by the order in which the two items appear +in the code: + +@lilypond[verbatim,quote,relative=1] +\clef "treble_8" +2 + +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{controlling-the-placement-of-chord-fingerings.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{allowing-fingerings-to-be-printed-inside-the-staff.ly} + + +@seealso +Notation Reference: +@ref{Fingering instructions}. + +Snippets: +@rlsr{Fretted strings}. + +Internals Reference: +@rinternals{StringNumber}, +@rinternals{Fingering}. + + +@node Default tablatures +@unnumberedsubsubsec Default tablatures + +@cindex tablatures, basic +@cindex tablatures, default + +@funindex TabStaff +@funindex TabVoice + +Tablature notation is used for notating music for plucked string +instruments. Pitches are not denoted with note heads, but by +numbers indicating on which string and fret a note must be played. +LilyPond offers limited support for tablature. + +The string number associated with a note is given as a backslash +followed by a number. By default, string 1 is the highest, +and the tuning defaults to the standard guitar tuning (with 6 strings). +The notes are printed as tablature, by using @code{TabStaff} and +@code{TabVoice} contexts + +@lilypond[quote,ragged-right,fragment,verbatim] +\new TabStaff { + a,4\5 c'\2 a\3 e'\1 + e\4 c'\2 a\3 e'\1 +} +@end lilypond + +@funindex minimumFret + +@cindex fret + + +When no string is specified for a note, the note is assigned to +the highest string that can generate the note with a fret number +greater than or equal to the value of @code{minimumFret}. +The default value for @code{minimumFret} is 0. + + +@lilypond[quote,ragged-right,verbatim] +\new StaffGroup << + \new Staff \relative c { + \clef "treble_8" + c16 d e f g4 + c,16 d e f g4 + } + \new TabStaff \relative c { + c16 d e f g4 + \set TabStaff.minimumFret = #5 + c,16 d e f g4 + } +>> +@end lilypond + +@cindex harmonic indications in tablature notation +@cindex tablature and harmonic indications +@cindex slides in tablature notation +@cindex tablature and slides + +Harmonic indications and slides can be added to tablature +notation. + +@lilypond[fragment, verbatim, quote, relative=1] +\new TabStaff { + \new TabVoice { + d\2\glissando e\2 + } +} +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{stem-and-beam-behavior-in-tablature.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{polyphony-in-tablature.ly} + + +@seealso +Notation Reference: +@ref{Stems}. + +Snippets: +@rlsr{Fretted strings}. + +Internals Reference: +@rinternals{TabNoteHead}, +@rinternals{TabStaff}, +@rinternals{TabVoice}, +@rinternals{Beam}. + + +@knownissues + +Chords are not handled in a special way, and hence the automatic +string selector may easily select the same string for two notes in +a chord. + +In order to handle @code{\partcombine}, a @code{TabStaff} must use +specially-created voices: + +@lilypond[quote,ragged-right,verbatim] +melodia = \partcombine { e4 g g g }{ e4 e e e } +<< + \new TabStaff << + \new TabVoice = "one" s1 + \new TabVoice = "two" s1 + \new TabVoice = "shared" s1 + \new TabVoice = "solo" s1 + { \melodia } + >> +>> +@end lilypond + +Guitar special effects are limited to harmonics and slides. + +@node Custom tablatures +@unnumberedsubsubsec Custom tablatures + +@cindex tablatures, custom +@cindex tablature, banjo +@cindex tablature, mandolin +@cindex tablature, bass guitar +@cindex tablature, predefined string tunings +@cindex fretted instruments, predefined string tunings +@cindex predefined string tunings for fretted instruments + +@funindex StringTunings + +LilyPond tabulature automatically calculates the fret for +a note based on the string to which the note is assigned. +In order to do this, the tuning of the strings must be +specified. The tuning of the strings is given in the +@code{StringTunings} property. + +LilyPond comes with predefined string tunings for banjo, mandolin, +guitar and bass guitar. LilyPond automatically sets the correct +transposition for predefined tunings. The following example is +for bass guitar, which sounds an octave lower than written. + +@lilypond[quote,ragged-right,verbatim] +<< + \new Staff { + \clef "bass_8" + \relative c, { + c4 d e f + } + } + \new TabStaff { + \set TabStaff.stringTunings = #bass-tuning + \relative c, { + c4 d e f + } + } +>> +@end lilypond + +The default string tuning is @code{guitar-tuning}, which +is the standard EADGBE tuning. Some other predefined tunings are +@code{guitar-open-g-tuning}, @code{mandolin-tuning} and +@code{banjo-open-g-tuning}. The predefined string tunings +are found in @code{scm/output-lib.scm}. + +A string tuning is a Scheme list of string pitches, +one for each string, ordered by string number from 1 to N, +where string 1 is at the top of the tablature staff and +string N is at the bottom. This ordinarily results in ordering +from highest pitch to lowest pitch, but some instruments +(e.g. ukulele) do not have strings ordered by pitch. + +A string pitch in a string tuning list is the pitch difference +of the open string from middle C measured in semitones. The +string pitch must be an integer. LilyPond calculates the actual +pitch of the string by adding the string tuning pitch to the +actual pitch for middle C. + +LilyPond automatically calculates the number of strings in the +@code{TabStaff} as the number of elements in @code{stringTunings}. + +Any desired string tuning can be created. For example, we can +define a string tuning for a four-string instrument with pitches +of @code{a''}, @code{d''}, @code{g'}, and @code{c'}: + + +@lilypond[quote,verbatim] +mynotes = { + c'4 e' g' c'' | + e'' g'' b'' c''' +} + +<< + \new Staff { + \clef treble + \mynotes + } + \new TabStaff { + \set TabStaff.stringTunings = #'(21 14 7 0) + \mynotes + } +>> +@end lilypond + + +@seealso +Installed Files: +@file{scm/output-lib.scm}. + +Snippets: +@rlsr{Fretted strings}. + +Internals Reference: +@rinternals{Tab_note_heads_engraver}. + + +@node Fret diagram markups +@unnumberedsubsubsec Fret diagram markups + +@cindex fret diagrams +@cindex chord diagrams +@cindex diagrams, fret +@cindex diagrams, chord for fretted instruments +@cindex fret diagrams, custom +@cindex custom fret diagrams + +Fret diagrams can be added to music as a markup to the desired +note. The markup contains information about the desired fret +diagram. There are three different fret-diagram markup +interfaces: standard, terse, and verbose. The three interfaces +produce equivalent markups, but have varying amounts of +information in the markup string. Details about the markup +interfaces are found at @ref{Text markup commands}. + +The standard fret diagram markup string indicates the string +number and the fret number for each dot to be placed on the string. +In addition, open and unplayed (muted) strings can be indicated. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + c1 d:m + } + } + \context Staff { + \clef "treble_8" + < c e g c' e' > 1 ^\markup + \fret-diagram #"6-x;5-3;4-2;3-o;2-1;1-o;" + < d a d' f'> ^\markup + \fret-diagram #"6-x;5-x;4-o;3-2;2-3;1-1;" + } +>> +@end lilypond + +@cindex barre indications + +Barre indications can be added to the diagram from +the fret-diagram markup string. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + f1 g + } + } + \context Staff { + \clef "treble_8" + < f, c f a c' f'>1 ^\markup + \fret-diagram #"c:6-1-1;6-1;5-3;4-3;3-2;2-1;1-1;" + < g, d g b d' g'> ^\markup + \fret-diagram #"c:6-1-3;6-3;5-5;4-5;3-4;2-3;1-3;" + } +>> +@end lilypond + +@cindex fret-diagram markup + +@funindex fret-diagram +@funindex \fret-diagram + +The size of the fret diagram, and the number of frets in the diagram +can be changed in the fret-diagram markup string. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + f1 g + } + } + \context Staff { + \clef "treble_8" + < f, c f a c' f'>1 ^\markup + \fret-diagram #"s:1.5;c:6-1-1;6-1;5-3;4-3;3-2;2-1;1-1;" + < g, b, d g b g'> ^\markup + \fret-diagram #"h:6;6-3;5-2;4-o;3-o;2-o;1-3;" + } +>> +@end lilypond + +The number of strings in a fret diagram can be changed to accomodate +different instruments such as banjos and ukeleles with the fret-diagram +markup string. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + a1 + } + } + \context Staff { + %% A chord for ukelele + a'1 ^\markup \fret-diagram #"w:4;4-2-2;3-1-1;2-o;1-o;" + } +>> +@end lilypond + +Fingering indications can be added, and the location of fingering labels +can be controlled by the fret-diagram markup string. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + c1 d:m + } + } + \context Staff { + \clef "treble_8" + < c e g c' e' > 1 ^\markup + \fret-diagram #"f:1;6-x;5-3-3;4-2-2;3-o;2-1-1;1-o;" + < d a d' f'> ^\markup + \fret-diagram #"f:2;6-x;5-x;4-o;3-2-2;2-3-3;1-1-1;" + } +>> +@end lilypond + +Dot radius and dot position can be controlled with the fret-diagram +markup string. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + c1 d:m + } + } + \context Staff { + \clef "treble_8" + < c e g c' e' > 1 ^\markup + \fret-diagram #"d:0.35;6-x;5-3;4-2;3-o;2-1;1-o;" + < d a d' f'> ^\markup + \fret-diagram #"p:0.2;6-x;5-x;4-o;3-2;2-3;1-1;" + } +>> +@end lilypond + +@cindex fret-diagram-terse markup + +@funindex fret-diagram-terse +@funindex \fret-diagram-terse + +The fret-diagram-terse markup string omits string numbers; the string +number is implied by the presence of semicolons. There is one semicolon +for each string in the diagram. The first semicolon corresponds to the +highest string number and the last semicolon corresponds to the first string. +Mute strings, open strings, and fret numbers can be indicated. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + c1 d:m + } + } + \context Staff { + \clef "treble_8" + < c e g c' e' > 1 ^\markup + \fret-diagram-terse #"x;3;2;o;1;o;" + < d a d' f'> ^\markup + \fret-diagram-terse #"x;x;o;2;3;1;" + } +>> +@end lilypond + +Barre indicators can be included in the fret-diagram-terse markup string. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + f1 g + } + } + \context Staff { + \clef "treble_8" + < f, c f a c' f'>1 ^\markup + \fret-diagram-terse #"1-(;3;3;2;1;1-);" + < g, d g b d' g'> ^\markup + \fret-diagram-terse #"3-(;5;5;4;3;3-);" + } +>> +@end lilypond + +Fingering indications can be included in the fret-diagram-terse markup string. + +@c Need to use override to enable fingerings to show this -- can we do so? +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + c1 d:m + } + } + \context Staff { + \override Voice.TextScript + #'(fret-diagram-details finger-code) = #'below-string + \clef "treble_8" + < c e g c' e' > 1 ^\markup + \fret-diagram-terse #"x;3-3;2-2;o;1-1;o;" + < d a d' f'> ^\markup + \fret-diagram-terse #"x;x;o;2-2;3-3;1-1;" + } +>> +@end lilypond + +Other fret diagram properties must be adjusted using @code{\override} when using +the fret-diagram-terse markup. + +@cindex fret-diagram-verbose markup + +@funindex fret-diagram-verbose +@funindex \fret-diagram-verbose + +The fret-diagram-verbose markup string is in the format of a Scheme list. Each +element of the list indicates an item to be placed on the fret diagram. + +@lilypond[quote, verbatim] +<< \context ChordNames { + \chordmode { + c1 d:m + } + } + \context Staff { + \clef "treble_8" + < c e g c' e' > 1 ^\markup + \fret-diagram-verbose #'( + (mute 6) + (place-fret 5 3) + (place-fret 4 2) + (open 3) + (place-fret 2 1) + (open 1) + ) + < d a d' f'> ^\markup + \fret-diagram-verbose #'( + (mute 6) + (mute 5) + (open 4) + (place-fret 3 2) + (place-fret 2 3) + (place-fret 1 1) + ) + } +>> +@end lilypond + +Fingering indications and barres can be included in a +fret-diagram-verbose markup string. Unique to the +fret-diagram-verbose interface is a capo indication that +can be placed on the fret diagram. The capo indication is +a thick bar that covers all strings. The fret with the +capo will be the lowest fret in the fret diagram. + +@c \override is necessary to make fingering visible +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + f1 g c + } + } + \context Staff { + \clef "treble_8" + \override Voice.TextScript + #'(fret-diagram-details finger-code) = #'below-string + + < f, c f a c' f'>1 ^\markup + \fret-diagram-verbose #'( + (place-fret 6 1) + (place-fret 5 3) + (place-fret 4 3) + (place-fret 3 2) + (place-fret 2 1) + (place-fret 1 1) + (barre 6 1 1) + ) + < g, b, d g b g'> ^\markup + \fret-diagram-verbose #'( + (place-fret 6 3 2) + (place-fret 5 2 1) + (open 4) + (open 3) + (open 2) + (place-fret 1 3 3) + ) + < c e g c' e'> ^\markup + \fret-diagram-verbose #'( + (capo 3) + (mute 6) + (place-fret 4 5 1) + (place-fret 3 5 2) + (place-fret 2 5 3) + ) + } +>> +@end lilypond + +All other fret diagram properties must be adjusted using @code{\override} +when using the fret-diagram-verbose markup. + +@ignore +The following example shows the three fret-diagram markup +interfaces, along with examples of common tweaks. For example, +the size of the verbose fret diagram is reduced to 0.75, and the +finger indications are specified to appear below the diagram. The +terse diagram includes tweaks to specify placement of finger code +and color of dots. + +@lilypond[verbatim,ragged-right,quote] +\new Voice { + \clef "treble_8" + d^\markup \fret-diagram #"6-x;5-x;4-o;3-2;2-3;1-2;" + d d d + fis^\markup \override #'(size . 0.75) { + \override #'(finger-code . below-string) { + \fret-diagram-verbose #'((place-fret 6 2 1) (barre 6 1 2) + (place-fret 5 4 3) + (place-fret 4 4 4) + (place-fret 3 3 2) + (place-fret 2 2 1) + (place-fret 1 2 1)) + } + } + fis fis fis + c^\markup \override #'(dot-radius . 0.35) { + \override #'(finger-code . in-dot) { + \override #'(dot-color . white) { + \fret-diagram-terse #"x;3-1-(;5-2;5-3;5-4;3-1-);" + } + } + } + c c c +} +@end lilypond +@end ignore + +@cindex customized fret diagram +@cindex fret diagram, customized +@cindex diagram, fret, customized + +@funindex fret-diagram-interface + +The graphical layout of a fret diagram can be customized according to +user preference through the properties of the @code{fret-diagram-interface}. +Details are found at @rinternals{fret-diagram-interface}. For a fret diagram +markup, the interface properties belong to @code{Voice.TextScript}. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{customizing-markup-fret-diagrams.ly} + + +@seealso +Notation Reference: +@ref{Text markup commands}. + +Snippets: +@rlsr{Fretted strings}. + +Internals Reference: +@rinternals{fret-diagram-interface}. + + +@node Predefined fret diagrams +@unnumberedsubsubsec Predefined fret diagrams + + +@cindex fret diagrams +@cindex chord diagrams + +@funindex FretBoards +@funindex stringTunings + +Fret diagrams can be displayed using the @code{FretBoards} context. By +default, the @code{FretBoards} context will display fret diagrams that +are stored in a lookup table: + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-guitar-fretboards.ly" +\context FretBoards { + \chordmode { + c1 d + } +} +@end lilypond + +The default predefined fret diagrams are contained in the file +@code{predefined-guitar-fretboards.ly}. Fret diagrams are +stored based on the pitches of a chord and the value of +@code{stringTunings} that is currently in use. +@code{predefined-guitar-fretboards.ly} contains predefined +fret diagrams only for @code{guitar-tuning}. Predefined fret +diagrams can be added for other instruments or other tunings +by following the examples found in +@code{predefined-guitar-fretboards.ly}. + +Chord pitches can be entered +either as simultaneous music or using chord mode (see +@ref{Chord mode overview}). + +@lilypond[verbatim, ragged-right,quote] +\include "predefined-guitar-fretboards.ly" +\context FretBoards { + \chordmode {c1} + 1 +} +@end lilypond + +@cindex chord names with fret diagrams +@cindex fret diagrams with chord names + +@funindex ChordNames +@funindex chordmode +@funindex \chordmode + +It is common that both chord names and fret diagrams are displayed together. +This is achieved by putting a @code{ChordNames} context in parallel with +a @code{FretBoards} context and giving both contexts the same music. + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-guitar-fretboards.ly" +mychords = \chordmode{ + c1 f g +} + +<< + \context ChordNames { + \mychords + } + \context FretBoards { + \mychords + } +>> +@end lilypond + +@cindex transposing fret diagrams +@cindex fret diagrams, transposing +@cindex diagrams, fret, transposing + +Predefined fret diagrams are transposable, as long as a diagram for the +transposed chord is stored in the fret diagram table. + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-guitar-fretboards.ly" +mychords = \chordmode{ + c1 f g +} + +mychordlist = { + \mychords + \transpose c e { \mychords} +} +<< + \context ChordNames { + \mychordlist + } + \context FretBoards { + \mychordlist + } +>> +@end lilypond + + +The predefined fret diagram table contains seven chords (major, minor, +augmented, diminished, dominant seventh, major seventh, minor seventh) +for each of 17 keys. A complete list of the predefined fret diagrams is +shown in @ref{Predefined fretboard diagrams}. If there is no entry in +the table for a chord, the FretBoards engraver will calculate a +fret-diagram using the automatic fret diagram functionality described in +@ref{Automatic fret diagrams}. + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-guitar-fretboards.ly" +mychords = \chordmode{ + c1 c:9 +} + +<< + \context ChordNames { + \mychords + } + \context FretBoards { + \mychords + } +>> +@end lilypond + +@cindex fret diagrams, adding custom +@cindex custom fret diagrams, adding +@cindex adding custom fret diagrams + +Fret diagrams can be added to the fret diagram table. To add a diagram, +you must specify the chord for the diagram, the tuning to be used, and +a definition for the diagram. The diagram definition can be either a +fret-diagram-terse definition string or a fret-diagram-verbose +marking list. + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-guitar-fretboards.ly" + +\storePredefinedDiagram \chordmode {c:9} + #guitar-tuning + #"x;3-2;2-1;3-3;3-4;x;" + +mychords = \chordmode{ + c1 c:9 +} + +<< + \context ChordNames { + \mychords + } + \context FretBoards { + \mychords + } +>> +@end lilypond + +Different fret diagrams for the same chord name can be stored using different +octaves of pitches. The different octave should be at least two octaves +above or below the default octave, because the octaves above and below the +default octave are used for transposing fretboards. + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-guitar-fretboards.ly" + +\storePredefinedDiagram \chordmode {c''} + #guitar-tuning + #(offset-fret 2 (chord-shape 'bes guitar-tuning)) + +mychords = \chordmode{ + c1 c'' +} + +<< + \context ChordNames { + \mychords + } + \context FretBoards { + \mychords + } +>> +@end lilypond + +@cindex fretted instruments, chord shapes +@cindex chord shapes for fretted instruments + +@funindex \addChordShape +@funindex add ChordShape +@funindex storePredefinedDiagram +@funindex \storePredefinedDiagram + +In addition to fret diagrams, LilyPond stores an internal list of chord +shapes. The chord shapes are fret diagrams that can be shifted along +the neck to different posistions to provide different chords. Chord +shapes can be added to the internal list and then used to define +predefined fret diagrams. Because they can be moved to various +positions on the neck, chord shapes will normally not contain +any open strings. Like fret diagrams, chord shapes can be +entered as either fret-diagram-terse strings or fret-diagram-verbose +marking lists. + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-guitar-fretboards.ly" + +% add a new chord shape + +\addChordShape #'powerf #guitar-tuning #"1-1;3-3;3-4;x;x;x;" + +% add some new chords based on the power chord shape + +\storePredefinedDiagram \chordmode {f''} + #guitar-tuning + #(chord-shape 'powerf guitar-tuning) +\storePredefinedDiagram \chordmode {g''} + #guitar-tuning + #(offset-fret 2 (chord-shape 'powerf guitar-tuning)) + +mychords = \chordmode{ + f1 f'' g g'' +} + +<< + \context ChordNames { + \mychords + } + \context FretBoards { + \mychords + } +>> +@end lilypond + +The graphical layout of a fret diagram can be customized according to +user preference through the properties of the @code{fret-diagram-interface}. +Details are found at @rinternals{fret-diagram-interface}. For a +predefined fret diagram, the interface properties belong to +@code{FretBoards.FretBoard}. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{customizing-fretboard-fret-diagrams.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{defining-predefined-fretboards-for-other-instruments.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{chordchanges-for-fretboards.ly} + +@seealso +Notation Reference: +@ref{Custom tablatures}, +@ref{Automatic fret diagrams}, +@ref{Chord mode overview}, +@ref{Predefined fretboard diagrams}. + +Installed Files: +@file{ly/predefined-guitar-fretboards.ly}, +@file{ly/predefined-guitar-ninth-fretboards.ly}. + +Snippets: +@rlsr{Fretted strings}. + +Internals Reference: +@rinternals {fret-diagram-interface}. + + +@node Automatic fret diagrams +@unnumberedsubsubsec Automatic fret diagrams + +@cindex fret diagrams, automatic +@cindex chord diagrams, automatic +@cindex automatic fret diagrams +@cindex automatic chord diagrams + +Fret diagrams can be automatically created from entered notes using the +@code{FretBoards} context. If no predefined diagram is available for +the entered notes in the active @code{stringTunings}, this context +calculates strings and frets that can be used to play the notes. + +@lilypond[quote,ragged-right,verbatim] +<< + \context ChordNames { + \chordmode { + f1 g + } + } + \context FretBoards { + < f, c f a c' f'>1 + < g,\6 b, d g b g'> + } + \context Staff { + \clef "treble_8" + < f, c f a c' f'>1 + < g, b, d g b' g'> + } +>> +@end lilypond + +@funindex predefinedFretboardsOff +@funindex \predefinedFretboardsOff +@funindex predefinedFretboardsOn +@funindex \predefinedFretboardsOn + +As no predefined diagrams are loaded by default, automatic calculation +of fret diagrams is the default behavior. Once default diagrams are +loaded, automatic calculation can be enabled and disabled with predefined +commands: + +@lilypond[quote,ragged-right,verbatim] + +\storePredefinedDiagram + #guitar-tuning + #"x;3-1-(;5-2;5-3;5-4;3-1-1);" +<< + \context ChordNames { + \chordmode { + c1 c c + } + } + \context FretBoards { + 1 + \predefinedFretboardsOff + + \predefinedFretboardsOn + + } + \context Staff { + \clef "treble_8" + 1 + + + } +>> +@end lilypond + + + +Sometimes the fretboard calculator will be unable to find +an accceptable diagram. This can often be remedied by +manually assigning a note to a string. In many cases, only one +note need be manually placed on a string; the rest of +the notes will then be placed appropriately by the @code{FretBoards} +context. + +@cindex fret diagrams, adding fingerings +@cindex fingerings, adding to fret diagrams + +Fingerings can be added to FretBoard fret diagrams. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + c1 d:m + } + } + \context FretBoards { + < c-3 e-2 g c'-1 e' > 1 + < d a-2 d'-3 f'-1> + } + \context Staff { + \clef "treble_8" + < c e g c' e' > 1 + < d a d' f'> + } +>> +@end lilypond + +The minimum fret to be used in calculating strings and frets for +the FretBoard context can be set with the @code{minimumFret} +property. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + d1:m d:m + } + } + \context FretBoards { + < d a d' f'> + \set FretBoards.minimumFret = #5 + < d a d' f'> + } + \context Staff { + \clef "treble_8" + < d a d' f'> + < d a d' f'> + } +>> +@end lilypond + +The strings and frets for the @code{FretBoards} context depend +on the @code{stringTunings} property, which has the same meaning +as in the TabStaff context. See @ref{Custom tablatures} for +information on the @code{stringTunings} property. + +The graphical layout of a fret diagram can be customized according to +user preference through the properties of the @code{fret-diagram-interface}. +Details are found at @rinternals{fret-diagram-interface}. For a +@code{FretBoards} fret diagram, the interface properties belong to +@code{FretBoards.FretBoard}. + + +@predefined +@code{\predefinedFretboardsOff}, +@code{\predefinedFretboardsOn}. +@endpredefined + + +@seealso +Notation Reference: +@ref{Custom tablatures}. + +Snippets: +@rlsr{Fretted strings}. + +Internals Reference: +@rinternals {fret-diagram-interface}. + + +@node Right-hand fingerings +@unnumberedsubsubsec Right-hand fingerings + +@cindex fretted instruments, right hand fingerings +@cindex fingerings, right hand for fretted instruments +@cindex right hand fingerings for fretted instruments + +@funindex rightHandFinger +@funindex \rightHandFinger + +Right-hand fingerings @var{p-i-m-a} must be entered within a +chord construct @code{<>} for them to be printed in the score, +even when applied to a single note. + +@warning{There @strong{must} be a hyphen after the note and a space +before the closing @code{>}.} + +@lilypond[quote,verbatim,relative=0] +\clef "treble_8" +4 + + + +1 +@end lilypond + +For convenience, you can abbreviate @code{\rightHandFinger} to something +short, for example @code{RH}, + +@example +#(define RH rightHandFinger) +@end example + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{placement-of-right-hand-fingerings.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{fingerings,-string-indications,-and-right-hand-fingerings.ly} + + +@seealso +Snippets: +@rlsr{Fretted strings}. + +Internals Reference: +@rinternals{StrokeFinger}. + + +@node Guitar +@subsection Guitar + +Most of the notational issues associated with guitar music are +covered sufficiently in the general fretted strings section, but there +are a few more worth covering here. Occasionally users want to +create songbook-type documents having only lyrics with chord +indications above them. Since LilyPond is a music typesetter, +it is not recommended for documents that have no music notation +in them. A better alternative is a word processor, text editor, +or, for experienced users, a typesetter like GuitarTeX. + +@menu +* Indicating position and barring:: +* Indicating harmonics and dampened notes:: +@end menu + +@node Indicating position and barring +@unnumberedsubsubsec Indicating position and barring + +@cindex indicating position and barring for fretted instruments +@cindex fretted instruments, indicating position and barring + +This example demonstrates how to include guitar position and +barring indications. + +@lilypond[quote,ragged-right,fragment,verbatim,relative=0] +\clef "treble_8" +b16 d g b e +\textSpannerDown +\override TextSpanner #'(bound-details left text) = #"XII " + g16\startTextSpan + b16 e g e b g\stopTextSpan +e16 b g d +@end lilypond + + +@seealso +Notation Reference: +@ref{Text spanners}. + +Snippets: +@rlsr{Fretted strings}, +@rlsr{Expressive marks}. + + +@node Indicating harmonics and dampened notes +@unnumberedsubsubsec Indicating harmonics and dampened notes + +@cindex fretted instruments, dampened notes +@cindex fretted instruments, harmonics +@cindex dampened notes on fretted instruments +@cindex harmonics on fretted instruments + +Special note heads can be used to indicate dampened notes or +harmonics. Harmonics are normally further explained with a +text markup. + +@lilypond[quote,ragged-right,fragment,verbatim] +\relative c' { + \clef "treble_8" + \override Staff.NoteHead #'style = #'cross + g8 a b c b4 + \override Staff.NoteHead #'style = #'harmonic-mixed + d^\markup { \italic { \fontsize #-2 { "harm. 12" }}} 1 +} +@end lilypond + + +@seealso +Snippets: +@rlsr{Fretted strings}. + +Notation Reference: +@ref{Special note heads}, +@ref{Note head styles}. + + +@node Banjo +@subsection Banjo + +@menu +* Banjo tablatures:: +@end menu + +@node Banjo tablatures +@unnumberedsubsubsec Banjo tablatures + +@cindex banjo tablatures +@cindex tablature, banjo + +LilyPond has basic support for the five-string banjo. When making tablatures +for five-string banjo, use the banjo tablature format function to get +correct fret numbers for the fifth string: + +@c due to crazy intervals of banjo music, absolute pitch is recommended + +@lilypond[quote,ragged-right,fragment,verbatim] +\new TabStaff << + \set TabStaff.tablatureFormat = #fret-number-tablature-format-banjo + \set TabStaff.stringTunings = #banjo-open-g-tuning + { + \stemDown + g8 d' g'\5 a b g e d' | + g4 d''8\5 b' a'\2 g'\5 e'\2 d' | + g4 + } +>> +@end lilypond + +@cindex banjo tunings +@cindex tunings, banjo + +@funindex banjo-c-tuning +@funindex banjo-modal-tuning +@funindex banjo-open-d-tuning +@funindex banjo-open-dm-tuning +@funindex four-string-banjo + +A number of common tunings for banjo are predefined in LilyPond: +@code{banjo-c-tuning} (gCGBD), @code{banjo-modal-tuning} (gDGCD), +@code{banjo-open-d-tuning} (aDF#AD) and @code{banjo-open-dm-tuning} +(aDFAD). + +These tunings may be converted to four-string banjo tunings using the +@code{four-string-banjo} function: + +@example +\set TabStaff.stringTunings = #(four-string-banjo banjo-c-tuning) +@end example + + +@seealso +Snippets: +@rlsr{Fretted strings}. + +The file @file{scm/@/output@/-lib@/.scm} contains predefined banjo tunings. diff --git a/Documentation/notation/input.itely b/Documentation/notation/input.itely new file mode 100644 index 0000000000..28c1307249 --- /dev/null +++ b/Documentation/notation/input.itely @@ -0,0 +1,2025 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + +@node General input and output +@chapter General input and output + +This section deals with general LilyPond input and output issues, +rather than specific notation. + +@menu +* Input structure:: +* Titles and headers:: +* Working with input files:: +* Controlling output:: +* MIDI output:: +@end menu + + +@node Input structure +@section Input structure + +The main format of input for LilyPond are text files. By convention, +these files end with @code{.ly}. + +@menu +* Structure of a score:: +* Multiple scores in a book:: +* File structure:: +@end menu + + +@node Structure of a score +@subsection Structure of a score + +@funindex \score + +A @code{\score} block must contain a single music expression +delimited by curly brackets: + +@example +\score @{ +... +@} +@end example + +@warning{There must be @strong{only one} outer music expression in +a @code{\score} block, and it @strong{must} be surrounded by +curly brackets.} + +This single music expression may be of any size, and may contain +other music expressions to any complexity. All of these examples +are music expressions: + +@example +@{ c'4 c' c' c' @} +@end example + +@lilypond[verbatim,quote] +{ + { c'4 c' c' c'} + { d'4 d' d' d'} +} +@end lilypond + +@lilypond[verbatim,quote] +<< + \new Staff { c'4 c' c' c' } + \new Staff { d'4 d' d' d' } +>> +@end lilypond + +@example +@{ + \new GrandStaff << + \new StaffGroup << + \new Staff @{ \flute @} + \new Staff @{ \oboe @} + >> + \new StaffGroup << + \new Staff @{ \violinI @} + \new Staff @{ \violinII @} + >> + >> +@} +@end example + +Comments are one exception to this general rule. (For others see +@ref{File structure}.) Both single-line comments and comments +delimited by @code{%@{ .. %@}} may be placed anywhere within an +input file. They may be placed inside or outside a @code{\score} +block, and inside or outside the single music expression within a +@code{\score} block. + + +@seealso +Learning Manual: +@rlearning{Working on input files}, +@rlearning{Music expressions explained}, +@rlearning{Score is a (single) compound musical expression}. + + +@node Multiple scores in a book +@subsection Multiple scores in a book + +@funindex \book +@cindex movements, multiple + +A document may contain multiple pieces of music and text. Examples +of these are an etude book, or an orchestral part with multiple +movements. Each movement is entered with a @code{\score} block, + +@example +\score @{ + @var{..music..} +@} +@end example + +and texts are entered with a @code{\markup} block, + +@example +\markup @{ + @var{..text..} +@} +@end example + +@funindex \book + +All the movements and texts which appear in the same @code{.ly} file +will normally be typeset in the form of a single output file. + +@example +\score @{ + @var{..} +@} +\markup @{ + @var{..} +@} +\score @{ + @var{..} +@} +@end example + +However, if you want multiple output files from the same @code{.ly} +file, then you can add multiple @code{\book} blocks, where each such +@code{\book} block will result in a separate output. If you do not +specify any @code{\book} block in the file, LilyPond will implicitly +treat the full file as a single @code{\book} block, see @ref{File +structure}. One important exception is within lilypond-book documents, +where you explicitly have to add a @code{\book} block, otherwise only +the first @code{\score} or @code{\markup} will appear in the output. + +The header for each piece of music can be put inside the @code{\score} +block. The @code{piece} name from the header will be printed before +each movement. The title for the entire book can be put inside the +@code{\book}, but if it is not present, the @code{\header} which is at +the top of the file is inserted. + +@example +\header @{ + title = "Eight miniatures" + composer = "Igor Stravinsky" +@} +\score @{ + @dots{} + \header @{ piece = "Romanze" @} +@} +\markup @{ + ..text of second verse.. +@} +\markup @{ + ..text of third verse.. +@} +\score @{ + @dots{} + \header @{ piece = "Menuetto" @} +@} +@end example + +@funindex \bookpart + +Pieces of music may be grouped into book parts using @code{\bookpart} +blocks. Book parts are separated by a page break, and can start with a +title, like the book itself, by specifying a @code{\header} block. + +@example +\bookpart @{ + \header @{ + title = "Book title" + subtitle = "First part" + @} + \score @{ @dots{} @} + @dots{} +@} +\bookpart @{ + \header @{ + subtitle = "Second part" + @} + \score @{ @dots{} @} + @dots{} +@} +@end example + +@node File structure +@subsection File structure + +@funindex \paper +@funindex \midi +@funindex \layout +@funindex \header +@funindex \score +@funindex \book +@funindex \bookpart + +A @code{.ly} file may contain any number of toplevel expressions, where a +toplevel expression is one of the following: + +@itemize @bullet +@item +An output definition, such as @code{\paper}, @code{\midi}, and +@code{\layout}. Such a definition at the toplevel changes the default +book-wide settings. If more than one such definition of +the same type is entered at the top level any definitions in the later +expressions have precedence. + +@item +A direct scheme expression, such as +@code{#(set-default-paper-size "a7" 'landscape)} or +@code{#(ly:set-option 'point-and-click #f)}. + +@item +A @code{\header} block. This sets the global header block. This +is the block containing the definitions for book-wide settings, like +composer, title, etc. + +@item +A @code{\score} block. This score will be collected with other +toplevel scores, and combined as a single @code{\book}. +This behavior can be changed by setting the variable +@code{toplevel-score-handler} at toplevel. The default handler is +defined in the init file @file{../scm/@/lily@/.scm}. + +@item +A @code{\book} block logically combines multiple movements +(i.e., multiple @code{\score} blocks) in one document. If there +are a number of @code{\score}s, one output file will be created +for each @code{\book} block, in which all corresponding movements +are concatenated. The only reason to explicitly specify +@code{\book} blocks in a @code{.ly} file is if you wish to create +multiple output files from a single input file. One exception is +within lilypond-book documents, where you explicitly have to add +a @code{\book} block if you want more than a single @code{\score} +or @code{\markup} in the same example. This behavior can be +changed by setting the variable @code{toplevel-book-handler} at +toplevel. The default handler is defined in the init file +@file{../scm/@/lily@/.scm}. + +@item +A @code{\bookpart} block. A book may be divided into several parts, +using @code{\bookpart} blocks, in order to ease the page breaking, +or to use different @code{\paper} settings in different parts. + +@item +A compound music expression, such as +@example +@{ c'4 d' e'2 @} +@end example + +This will add the piece in a @code{\score} and format it in a +single book together with all other toplevel @code{\score}s and music +expressions. In other words, a file containing only the above +music expression will be translated into + +@example +\book @{ + \score @{ + \new Staff @{ + \new Voice @{ + @{ c'4 d' e'2 @} + @} + @} + @} + \layout @{ @} + \header @{ @} +@} +@end example + +This behavior can be changed by setting the variable +@code{toplevel-music-handler} at toplevel. The default handler is +defined in the init file @file{../scm/@/lily@/.scm}. + +@item +A markup text, a verse for example +@example +\markup @{ + 2. The first line verse two. +@} +@end example + +Markup texts are rendered above, between or below the scores or music +expressions, wherever they appear. + +@cindex variables + +@item +A variable, such as +@example +foo = @{ c4 d e d @} +@end example + +This can be used later on in the file by entering @code{\foo}. The +name of a variable should have alphabetic characters only; no +numbers, underscores or dashes. + +@end itemize + +The following example shows three things that may be entered at +toplevel + +@example +\layout @{ + % Don't justify the output + ragged-right = ##t +@} + +\header @{ + title = "Do-re-mi" +@} + +@{ c'4 d' e2 @} +@end example + + +At any point in a file, any of the following lexical instructions can +be entered: + +@itemize +@item @code{\version} +@item @code{\include} +@item @code{\sourcefilename} +@item @code{\sourcefileline} +@item +A single-line comment, introduced by a leading @code{%} sign. + +@item +A multi-line comment delimited by @code{%@{ .. %@}}. + +@end itemize + +@cindex whitespace + +Whitespace between items in the input stream is generally ignored, +and may be freely omitted or extended to enhance readability. +However, whitespace should always be used in the following +circumstances to avoid errors: + +@itemize +@item Around every opening and closing curly bracket. +@item After every command or variable, i.e. every item that +begins with a @code{\} sign. +@item After every item that is to be interpreted as a Scheme +expression, i.e. every item that begins with a @code{#} sign. +@item To separate all elements of a Scheme expression. +@item In @code{lyricmode} to separate all the terms in both +@code{\override} and @code{\set} commands. In particular, spaces +must be used around the dot and the equals sign in commands like +@code{\override Score . LyricText #'font-size = #5} and before and +after the entire command. + +@end itemize + +@seealso +Learning Manual: +@rlearning{How LilyPond input files work}. + + +@node Titles and headers +@section Titles and headers + +Almost all printed music includes a title and the composer's name; +some pieces include a lot more information. + +@menu +* Creating titles:: +* Custom titles:: +* Reference to page numbers:: +* Table of contents:: +@end menu + + +@node Creating titles +@subsection Creating titles + +Titles are created for each @code{\score} block, as well as for the full +input file (or @code{\book} block) and book parts (created by +@code{\bookpart} blocks). + +The contents of the titles are taken from the @code{\header} blocks. +The header block for a book supports the following + + +@table @code +@funindex dedication +@item dedication +The dedicatee of the music, centered at the top of the first page. + +@funindex title +@item title +The title of the music, centered just below the dedication. + +@funindex subtitle +@item subtitle +Subtitle, centered below the title. + +@funindex subsubtitle +@item subsubtitle +Subsubtitle, centered below the subtitle. + +@funindex poet +@item poet +Name of the poet, flush-left below the subsubtitle. + +@funindex instrument +@item instrument +Name of the instrument, centered below the subsubtitle. Also +centered at the top of pages (other than the first page). + +@funindex composer +@item composer +Name of the composer, flush-right below the subsubtitle. + +@funindex meter +@item meter +Meter string, flush-left below the poet. + +@funindex arranger +@item arranger +Name of the arranger, flush-right below the composer. + +@funindex piece +@item piece +Name of the piece, flush-left below the meter. + +@funindex opus +@item opus +Name of the opus, flush-right below the arranger. + +@cindex page breaks, forcing +@funindex breakbefore +@item breakbefore +This forces the title to start on a new page (set to ##t or ##f). + +@funindex copyright +@item copyright +Copyright notice, centered at the bottom of the first page. To +insert the copyright symbol, see @ref{Text encoding}. + +@funindex tagline +@item tagline +Centered at the bottom of the last page. + +@end table + +Here is a demonstration of the fields available. Note that you +may use any @ref{Formatting text}, commands in the header. + +@lilypond[quote,verbatim,line-width=11.0\cm] +\paper { + line-width = 9.0\cm + paper-height = 10.0\cm +} + +\book { + \header { + dedication = "dedicated to me" + title = \markup \center-column { "Title first line" "Title second line, +longer" } + subtitle = "the subtitle," + subsubtitle = #(string-append "subsubtitle LilyPond version " +(lilypond-version)) + poet = "Poet" + composer = \markup \center-column { "composer" \small "(1847-1973)" } + texttranslator = "Text Translator" + meter = \markup { \teeny "m" \tiny "e" \normalsize "t" \large "e" \huge +"r" } + arranger = \markup { \fontsize #8.5 "a" \fontsize #2.5 "r" \fontsize +#-2.5 "r" \fontsize #-5.3 "a" \fontsize #7.5 "nger" } + instrument = \markup \bold \italic "instrument" + piece = "Piece" + } + + \score { + { c'1 } + \header { + piece = "piece1" + opus = "opus1" + } + } + \markup { + and now... + } + \score { + { c'1 } + \header { + piece = "piece2" + opus = "opus2" + } + } +} +@end lilypond + +As demonstrated before, you can use multiple @code{\header} blocks. +When same fields appear in different blocks, the latter is used. +Here is a short example. + +@example +\header @{ + composer = "Composer" +@} +\header @{ + piece = "Piece" +@} +\score @{ + \new Staff @{ c'4 @} + \header @{ + piece = "New piece" % overwrite previous one + @} +@} +@end example + +If you define the @code{\header} inside the @code{\score} block, then +normally only the @code{piece} and @code{opus} headers will be printed. +Note that the music expression must come before the @code{\header}. + +@lilypond[quote,verbatim,line-width=11.0\cm] +\score { + { c'4 } + \header { + title = "title" % not printed + piece = "piece" + opus = "opus" + } +} +@end lilypond + +@funindex print-all-headers +@noindent +You may change this behavior (and print all the headers when defining +@code{\header} inside @code{\score}) by using + +@example +\paper@{ + print-all-headers = ##t +@} +@end example + +@cindex copyright +@cindex tagline + +The default footer is empty, except for the first page, where the +@code{copyright} field from @code{\header} is inserted, and the last +page, where @code{tagline} from @code{\header} is added. The default +tagline is @qq{Music engraving by LilyPond (@var{version})}.@footnote{Nicely +printed parts are good PR for us, so please leave the tagline if you +can.} + +Headers may be completely removed by setting them to false. + +@example +\header @{ + tagline = ##f + composer = ##f +@} +@end example + + +@node Custom titles +@subsection Custom titles + +A more advanced option is to change the definitions of the following +variables in the @code{\paper} block. The init file +@file{../ly/titling-init.ly} lists the default layout. + +@table @code +@funindex bookTitleMarkup +@item bookTitleMarkup + This is the title added at the top of the entire output document. +Typically, it has the composer and the title of the piece + +@funindex scoreTitleMarkup +@item scoreTitleMarkup + This is the title put over a @code{\score} block. Typically, it has +the name of the movement (@code{piece} field). + +@funindex oddHeaderMarkup +@item oddHeaderMarkup + This is the page header for odd-numbered pages. + +@funindex evenHeaderMarkup +@item evenHeaderMarkup + This is the page header for even-numbered pages. If unspecified, + the odd header is used instead. + + By default, headers are defined such that the page number is on the + outside edge, and the instrument is centered. + +@funindex oddFooterMarkup +@item oddFooterMarkup + This is the page footer for odd-numbered pages. + +@funindex evenFooterMarkup +@item evenFooterMarkup + This is the page footer for even-numbered pages. If unspecified, + the odd header is used instead. + + By default, the footer has the copyright notice on the first, and + the tagline on the last page. +@end table + + +@cindex \paper +@cindex header +@cindex footer +@cindex page layout +@cindex titles + +The following definition will put the title flush left, and the +composer flush right on a single line. + +@verbatim +\paper { + bookTitleMarkup = \markup { + \fill-line { + \fromproperty #'header:title + \fromproperty #'header:composer + } + } +} +@end verbatim + +@node Reference to page numbers +@subsection Reference to page numbers + +A particular place of a score can be marked using the @code{\label} +command, either at top-level or inside music. This label can then be +referred to in a markup, to get the number of the page where the marked +point is placed, using the @code{\page-ref} markup command. + +@lilypond[verbatim,line-width=11.0\cm] +\header { tagline = ##f } +\book { + \label #'firstScore + \score { + { + c'1 + \pageBreak \mark A \label #'markA + c' + } + } + + \markup { The first score begins on page \page-ref #'firstScore "0" "?" } + \markup { Mark A is on page \page-ref #'markA "0" "?" } +} +@end lilypond + +The @code{\page-ref} markup command takes three arguments: +@enumerate +@item the label, a scheme symbol, eg. @code{#'firstScore}; +@item a markup that will be used as a gauge to estimate the dimensions +of the markup; +@item a markup that will be used in place of the page number if the label +is not known; +@end enumerate + +The reason why a gauge is needed is that, at the time markups are +interpreted, the page breaking has not yet occurred, so the page numbers +are not yet known. To work around this issue, the actual markup +interpretation is delayed to a later time; however, the dimensions of +the markup have to be known before, so a gauge is used to decide these +dimensions. If the book has between 10 and 99 pages, it may be "00", +ie. a two digit number. + + +@predefined +@funindex \label +@code{\label}, +@funindex \page-ref +@code{\page-ref}. +@endpredefined + + +@node Table of contents +@subsection Table of contents +A table of contents is included using the @code{\markuplines \table-of-contents} +command. The elements which should appear in the table of contents are +entered with the @code{\tocItem} command, which may be used either at +top-level, or inside a music expression. + +@verbatim +\markuplines \table-of-contents +\pageBreak + +\tocItem \markup "First score" +\score { + { + c' % ... + \tocItem \markup "Some particular point in the first score" + d' % ... + } +} + +\tocItem \markup "Second score" +\score { + { + e' % ... + } +} +@end verbatim + +The markups which are used to format the table of contents are defined +in the @code{\paper} block. The default ones are @code{tocTitleMarkup}, +for formatting the title of the table, and @code{tocItemMarkup}, for +formatting the toc elements, composed of the element title and page +number. These variables may be changed by the user: + +@verbatim +\paper { + %% Translate the toc title into French: + tocTitleMarkup = \markup \huge \column { + \fill-line { \null "Table des matières" \null } + \hspace #1 + } + %% use larger font size + tocItemMarkup = \markup \large \fill-line { + \fromproperty #'toc:text \fromproperty #'toc:page + } +} +@end verbatim + +Note how the toc element text and page number are referred to in +the @code{tocItemMarkup} definition. + +New commands and markups may also be defined to build more elaborated +table of contents: +@itemize +@item first, define a new markup variable in the @code{\paper} block +@item then, define a music function which aims at adding a toc element +using this markup paper variable. +@end itemize + +In the following example, a new style is defined for entering act names +in the table of contents of an opera: + +@verbatim +\paper { + tocActMarkup = \markup \large \column { + \hspace #1 + \fill-line { \null \italic \fromproperty #'toc:text \null } + \hspace #1 + } +} + +tocAct = +#(define-music-function (parser location text) (markup?) + (add-toc-item! 'tocActMarkup text)) +@end verbatim + +@lilypond[line-width=11.0\cm] +\header { tagline = ##f } +\paper { + tocActMarkup = \markup \large \column { + \hspace #1 + \fill-line { \null \italic \fromproperty #'toc:text \null } + \hspace #1 + } +} + +tocAct = +#(define-music-function (parser location text) (markup?) + (add-toc-item! 'tocActMarkup text)) + +\book { + \markuplines \table-of-contents + \tocAct \markup { Atto Primo } + \tocItem \markup { Coro. Viva il nostro Alcide } + \tocItem \markup { Cesare. Presti omai l'Egizzia terra } + \tocAct \markup { Atto Secondo } + \tocItem \markup { Sinfonia } + \tocItem \markup { Cleopatra. V'adoro, pupille, saette d'Amore } + \markup \null +} +@end lilypond + + +@seealso +Init files: @file{../ly/@/toc@/-init@/.ly}. + + +@predefined +@funindex \table-of-contents +@code{\table-of-contents}, +@funindex \tocItem +@code{\tocItem}. +@endpredefined + + +@node Working with input files +@section Working with input files + +@menu +* Including LilyPond files:: +* Different editions from one source:: +* Text encoding:: +* Displaying LilyPond notation:: +@end menu + + +@node Including LilyPond files +@subsection Including LilyPond files + +@funindex \include +@cindex including files + +A large project may be split up into separate files. To refer to +another file, use + +@example +\include "otherfile.ly" +@end example + +The line @code{\include "otherfile.ly"} is equivalent to pasting the +contents of @file{otherfile.ly} into the current file at the place +where the @code{\include} appears. For example, in a large +project you might write separate files for each instrument part +and create a @qq{full score} file which brings together the +individual instrument files. Normally the included file will +define a number of variables which then become available +for use in the full score file. Tagged sections can be +marked in included files to assist in making them usable in +different places in a score, see @ref{Different editions from +one source}. + +Files in the current working directory may be referenced by +specifying just the file name after the @code{\include} command. +Files in other locations may be included by giving either a full +path reference or a relative path reference (but use the UNIX +forward slash, /, rather than the DOS/Windows back slash, \, as the +directory separator.) For example, if @file{stuff.ly} is located +one directory higher than the current working directory, use + +@example +\include "../stuff.ly" +@end example + +@noindent +or if the included orchestral parts files are all located in a +subdirectory called @file{parts} within the current directory, use + +@example +\include "parts/VI.ly" +\include "parts/VII.ly" +... etc +@end example + +Files which are to be included can also contain @code{\include} +statements of their own. By default, these second-level +@code{\include} statements are not interpreted until they have +been brought into the main file, so the file names they specify +must all be relative to the directory containing the main file, +not the directory containing the included file. However, +this behavior can be changed by passing the option +@code{-drelative-includes} option at the command line +(or by adding @code{#(ly:set-option 'relative-includes #t)} +at the top of the main input file). With @code{relative-includes} +set, the path for each @code{\include} command will be taken +relative to the file containing that command. This behavior is +recommended and it will become the default behavior in a future +version of lilypond. + +Files can also be included from a directory in a search path +specified as an option when invoking LilyPond from the command +line. The included files are then specified using just their +file name. For example, to compile @file{main.ly} which includes +files located in a subdirectory called @file{parts} by this method, +cd to the directory containing @file{main.ly} and enter + +@example +lilypond --include=parts main.ly +@end example + +and in main.ly write + +@example +\include "VI.ly" +\include "VII.ly" +... etc +@end example + +Files which are to be included in many scores may be placed in +the LilyPond directory @file{../ly}. (The location of this +directory is installation-dependent - see +@rlearning{Other sources of information}). These files can then +be included simply by naming them on an @code{\include} statement. +This is how the language-dependent files like @file{english.ly} are +included. + +LilyPond includes a number of files by default when you start +the program. These includes are not apparent to the user, but the +files may be identified by running @code{lilypond --verbose} from +the command line. This will display a list of paths and files that +LilyPond uses, along with much other information. Alternatively, +the more important of these files are discussed in +@rlearning{Other sources of information}. These files may be +edited, but changes to them will be lost on installing a new +version of LilyPond. + +Some simple examples of using @code{\include} are shown in +@rlearning{Scores and parts}. + + +@seealso +Learning Manual: +@rlearning{Other sources of information}, +@rlearning{Scores and parts}. + + +@knownissues + +If an included file is given a name which is the same as one in +LilyPond's installation files, LilyPond's file from the +installation files takes precedence. + + + +@node Different editions from one source +@subsection Different editions from one source + +Several mechanisms are available to facilitate the generation +of different versions of a score from the same music source. +Variables are perhaps most useful for combining lengthy sections +of music and/or annotation in various ways, while tags are more +useful for selecting one from several alternative shorter sections +of music. Whichever method is used, separating the notation from +the structure of the score will make it easier to change the +structure while leaving the notation untouched. + +@menu +* Using variables:: +* Using tags:: +@end menu + +@node Using variables +@unnumberedsubsubsec Using variables + +@cindex variables, use of + +If sections of the music are defined in variables they can be +reused in different parts of the score, see @rlearning{Organizing +pieces with variables}. For example, an @notation{a cappella} +vocal score frequently includes a piano reduction of the parts +for rehearsal purposes which is identical to the vocal music, so +the music need be entered only once. Music from two variables +may be combined on one staff, see @ref{Automatic part combining}. +Here is an example: + +@lilypond[verbatim,quote] +sopranoMusic = \relative c'' { a4 b c b8( a)} +altoMusic = \relative g' { e4 e e f } +tenorMusic = \relative c' { c4 b e d8( c) } +bassMusic = \relative c' { a4 gis a d, } +allLyrics = \lyricmode {King of glo -- ry } +<< + \new Staff = "Soprano" \sopranoMusic + \new Lyrics \allLyrics + \new Staff = "Alto" \altoMusic + \new Lyrics \allLyrics + \new Staff = "Tenor" { + \clef "treble_8" + \tenorMusic + } + \new Lyrics \allLyrics + \new Staff = "Bass" { + \clef "bass" + \bassMusic + } + \new Lyrics \allLyrics + \new PianoStaff << + \new Staff = "RH" { + \set Staff.printPartCombineTexts = ##f + \partcombine + \sopranoMusic + \altoMusic + } + \new Staff = "LH" { + \set Staff.printPartCombineTexts = ##f + \clef "bass" + \partcombine + \tenorMusic + \bassMusic + } + >> +>> +@end lilypond + +Separate scores showing just the vocal parts or just the piano +part can be produced by changing just the structural statements, +leaving the musical notation unchanged. + +For lengthy scores, the variable definitions may be placed in +separate files which are then included, see @ref{Including +LilyPond files}. + +@node Using tags +@unnumberedsubsubsec Using tags + +@funindex \tag +@funindex \keepWithTag +@funindex \removeWithTag +@cindex tag +@cindex keep tagged music +@cindex remove tagged music + +The @code{\tag #'@var{partA}} command marks a music expression +with the name @var{partA}. +Expressions tagged in this way can be selected or filtered out by +name later, using either @code{\keepWithTag #'@var{name}} or +@code{\removeWithTag #'@var{name}}. The result of applying these filters +to tagged music is as follows: +@multitable @columnfractions .5 .5 +@headitem Filter + @tab Result +@item +Tagged music preceded by @code{\keepWithTag #'@var{name}} + @tab Untagged music and music tagged with @var{name} is included; + music tagged with any other tag name is excluded. +@item +Tagged music preceded by @code{\removeWithTag #'@var{name}} +@tab Untagged music and music tagged with any tag name other than + @var{name} is included; music tagged with @var{name} is + excluded. +@item +Tagged music not preceded by either @code{\keepWithTag} or +@code{\removeWithTag} +@tab All tagged and untagged music is included. +@end multitable + +The arguments of the @code{\tag}, @code{\keepWithTag} and +@code{\removeWithTag} commands should be a symbol +(such as @code{#'score} or @code{#'part}), followed +by a music expression. + +In the following example, we see two versions of a piece of music, +one showing trills with the usual notation, and one with trills +explicitly expanded: + +@lilypond[verbatim,quote] +music = \relative g' { + g8. c32 d + \tag #'trills {d8.\trill } + \tag #'expand {\repeat unfold 3 {e32 d} } + c32 d + } + +\score { + \keepWithTag #'trills \music +} +\score { + \keepWithTag #'expand \music +} +@end lilypond + +@noindent +Alternatively, it is sometimes easier to exclude sections of music: + +@lilypond[verbatim,quote] +music = \relative g' { + g8. c32 d + \tag #'trills {d8.\trill } + \tag #'expand {\repeat unfold 3 {e32 d} } + c32 d + } + +\score { + \removeWithTag #'expand + \music +} +\score { + \removeWithTag #'trills + \music +} +@end lilypond + +Tagged filtering can be applied to articulations, texts, etc. by +prepending + +@example +-\tag #'@var{your-tag} +@end example + +to an articulation. For example, this would define a note with a +conditional fingering indication and a note with a conditional +annotation: + +@example +c1-\tag #'finger ^4 +c1-\tag #'warn ^"Watch!" +@end example + +Multiple tags may be placed on expressions with multiple +@code{\tag} entries: + +@lilypond[quote,verbatim] +music = \relative c'' { + \tag #'a \tag #'both { a a a a } + \tag #'b \tag #'both { b b b b } +} +<< +\keepWithTag #'a \music +\keepWithTag #'b \music +\keepWithTag #'both \music +>> +@end lilypond + +Multiple @code{\removeWithTag} filters may be applied to a single +music expression to remove several differently named tagged sections: + +@lilypond[verbatim,quote] +music = \relative c'' { +\tag #'A { a a a a } +\tag #'B { b b b b } +\tag #'C { c c c c } +\tag #'D { d d d d } +} +{ +\removeWithTag #'B +\removeWithTag #'C +\music +} +@end lilypond + +Two or more @code{\keepWithTag} filters applied to a single music +expression will cause @emph{all} tagged sections to be removed, as +the first filter will remove all tagged sections except the one +named, and the second filter will remove even that tagged section. + + +@seealso +Learning Manual: +@rlearning{Organizing pieces with variables}. + +Notation Reference: +@ref{Automatic part combining}, +@ref{Including LilyPond files}. + + +@ignore +@c This warning is more general than this placement implies. +@c Rests are not merged whether or not they come from tagged sections. +@c Should be deleted? -td + +@knownissues + +Multiple rests are not merged if you create a score with more +than one tagged section at the same place. + +@end ignore + +@node Text encoding +@subsection Text encoding + +@cindex Unicode +@cindex UTF-8 +@cindex non-ASCII characters + +LilyPond uses the character repertoire defined by the Unicode +consortium and ISO/IEC 10646. This defines a unique name and +code point for the character sets used in virtually all modern +languages and many others too. Unicode can be implemented using +several different encodings. LilyPond uses the UTF-8 encoding +(UTF stands for Unicode Transformation Format) which represents +all common Latin characters in one byte, and represents other +characters using a variable length format of up to four bytes. + +The actual appearance of the characters is determined by the +glyphs defined in the particular fonts available - a font defines +the mapping of a subset of the Unicode code points to glyphs. +LilyPond uses the Pango library to layout and render multi-lingual +texts. + +LilyPond does not perform any input-encoding conversions. This +means that any text, be it title, lyric text, or musical +instruction containing non-ASCII characters, must be encoded in +UTF-8. The easiest way to enter such text is by using a +Unicode-aware editor and saving the file with UTF-8 encoding. Most +popular modern editors have UTF-8 support, for example, vim, Emacs, +jEdit, and GEdit do. All MS Windows systems later than NT use +Unicode as their native character encoding, so even Notepad can +edit and save a file in UTF-8 format. A more functional +alternative for Windows is BabelPad. + +If a LilyPond input file containing a non-ASCII character is not +saved in UTF-8 format the error message + +@example +FT_Get_Glyph_Name () error: invalid argument +@end example + +will be generated. + +Here is an example showing Cyrillic, Hebrew and Portuguese +text: + +@lilypond[quote] +%c No verbatim here as the code does not display correctly in PDF +% Cyrillic +bulgarian = \lyricmode { + Жълтата дюля беше щастлива, че пухът, който цъфна, замръзна като гьон. +} + +% Hebrew +hebrew = \lyricmode { + זה כיף סתם לשמוע איך תנצח קרפד עץ טוב בגן. +} + +% Portuguese +portuguese = \lyricmode { + à vo -- cê uma can -- ção legal +} + +\relative { + c2 d e f g f e +} +\addlyrics { \bulgarian } +\addlyrics { \hebrew } +\addlyrics { \portuguese } +@end lilypond + +To enter a single character for which the Unicode code point is +known but which is not available in the editor being used, use +either @code{\char ##xhhhh} or @code{\char #dddd} within a +@code{\markup} block, where @code{hhhh} is the hexadecimal code for +the character required and @code{dddd} is the corresponding decimal +value. Leading zeroes may be omitted, but it is usual to specify +all four characters in the hexadecimal representation. (Note that +the UTF-8 encoding of the code point should @emph{not} be used +after @code{\char}, as UTF-8 encodings contain extra bits indicating +the number of octets.) Unicode code charts and a character name +index giving the code point in hexadecimal for any character can be +found on the Unicode Consortium website, +@uref{http://www.unicode.org/}. + +For example, @code{\char ##x03BE} and @code{\char #958} would both +enter the Unicode U+03BE character, which has the Unicode name +@qq{Greek Small Letter Xi}. + +Any Unicode code point may be entered in this way and if all special +characters are entered in this format it is not necessary to save +the input file in UTF-8 format. Of course, a font containing all +such encoded characters must be installed and available to LilyPond. + +The following example shows Unicode hexadecimal values being entered +in four places -- in a rehearsal mark, as articulation text, in +lyrics and as stand-alone text below the score: + +@lilypond[quote,verbatim] +\score { + \relative c'' { + c1 \mark \markup { \char ##x03EE } + c1_\markup { \tiny { \char ##x03B1 " to " \char ##x03C9 } } + } + \addlyrics { O \markup { \concat{ Ph \char ##x0153 be! } } } +} +\markup { "Copyright 2008--2009" \char ##x00A9 } +@end lilypond + +@cindex copyright sign + +To enter the copyright sign in the copyright notice use: + +@example +\header @{ + copyright = \markup @{ \char ##x00A9 "2008" @} +@} +@end example + +@node Displaying LilyPond notation +@subsection Displaying LilyPond notation + +@funindex \displayLilyMusic +Displaying a music expression in LilyPond notation can be +done using the music function @code{\displayLilyMusic}. For example, + +@example +@{ + \displayLilyMusic \transpose c a, @{ c e g a bes @} +@} +@end example + +will display + +@example +@{ a, cis e fis g @} +@end example + +By default, LilyPond will print these messages to the console along +with all the other messages. To split up these messages and save +the results of @code{\display@{STUFF@}}, redirect the output to +a file. + +@c TODO What happens under Windows? + +@example +lilypond file.ly >display.txt +@end example + + + +@node Controlling output +@section Controlling output + +@menu +* Extracting fragments of music:: +* Skipping corrected music:: +@end menu + +@node Extracting fragments of music +@subsection Extracting fragments of music + +It is possible to quote small fragments of a large score directly from +the output. This can be compared to clipping a piece of a paper score +with scissors. + +This is done by defining the measures that need to be cut out +separately. For example, including the following definition + + +@verbatim +\layout { + clip-regions + = #(list + (cons + (make-rhythmic-location 5 1 2) + (make-rhythmic-location 7 3 4))) +} +@end verbatim + +@noindent +will extract a fragment starting halfway the fifth measure, ending in +the seventh measure. The meaning of @code{5 1 2} is: after a 1/2 note +in measure 5, and @code{7 3 4} after 3 quarter notes in measure 7. + +More clip regions can be defined by adding more pairs of +rhythmic-locations to the list. + +In order to use this feature, LilyPond must be invoked with +@code{-dclip-systems}. The clips are output as EPS files, and are +converted to PDF and PNG if these formats are switched on as well. + +For more information on output formats, see @rprogram{Invoking lilypond}. + +@node Skipping corrected music +@subsection Skipping corrected music + + +@funindex skipTypesetting +@funindex showFirstLength +@funindex showLastLength + +When entering or copying music, usually only the music near the end (where +you +are adding notes) is interesting to view and correct. To speed up +this correction process, it is possible to skip typesetting of all but +the last few measures. This is achieved by putting + +@verbatim +showLastLength = R1*5 +\score { ... } +@end verbatim + +@noindent +in your source file. This will render only the last 5 measures +(assuming 4/4 time signature) of every @code{\score} in the input +file. For longer pieces, rendering only a small part is often an order +of magnitude quicker than rendering it completely. When working on the +beginning of a score you have already typeset (e.g. to add a new part), +the @code{showFirstLength} property may be useful as well. + +Skipping parts of a score can be controlled in a more fine-grained +fashion with the property @code{Score.skipTypesetting}. When it is +set, no typesetting is performed at all. + +This property is also used to control output to the MIDI file. Note that +it skips all events, including tempo and instrument changes. You have +been warned. + +@lilypond[quote,fragment,ragged-right,verbatim] +\relative c'' { + c8 d + \set Score.skipTypesetting = ##t + e e e e e e e e + \set Score.skipTypesetting = ##f + c d b bes a g c2 } +@end lilypond + +In polyphonic music, @code{Score.skipTypesetting} will affect all +voices and staves, saving even more time. + + + +@node MIDI output +@section MIDI output + +@cindex Sound +@cindex MIDI + +MIDI (Musical Instrument Digital Interface) is a standard for +connecting and controlling digital instruments. A MIDI file is a +series of notes in a number of tracks. It is not an actual +sound file; you need special software to translate between the +series of notes and actual sounds. + +Pieces of music can be converted to MIDI files, so you can listen to +what was entered. This is convenient for checking the music; octaves +that are off or accidentals that were mistyped stand out very much +when listening to the MIDI output. + +@c TODO Check this +The midi output allocates a channel for each staff, and one for global +settings. Therefore the midi file should not have more than 15 staves +(or 14 if you do not use drums). Other staves will remain silent. + +@menu +* Creating MIDI files:: +* MIDI block:: +* What goes into the MIDI output?:: +* Repeats in MIDI:: +* Controlling MIDI dynamics:: +* Percussion in MIDI:: +@end menu + +@node Creating MIDI files +@subsection Creating MIDI files + +To create a MIDI output file from a LilyPond input file, add a +@code{\midi} block to a score, for example, + +@example +\score @{ + @var{...music...} + \midi @{ @} +@} +@end example + +If there is a @code{\midi} block in a @code{\score} with no +@code{\layout} block, only MIDI output will be produced. When +notation is needed too, a @code{\layout} block must be also be +present. + +@example +\score @{ + @var{...music...} + \midi @{ @} + \layout @{ @} +@} +@end example + +Pitches, rhythms, ties, dynamics, and tempo changes are interpreted +and translated correctly to the MIDI output. Dynamic marks, +crescendi and decrescendi translate into MIDI volume levels. +Dynamic marks translate to a fixed fraction of the available MIDI +volume range. Crescendi and decrescendi make the volume vary +linearly between their two extremes. The effect of dynamic markings +on the MIDI output can be removed completely, see @ref{MIDI block}. + +The initial tempo and later tempo changes can be specified +with the @code{\tempo} command within the music notation. These +are reflected in tempo changes in the MIDI output. This command +will normally result in the metronome mark being printed, but this +can be suppressed, see @ref{Metronome marks}. An alternative way +of specifying the inital or overall MIDI tempo is described below, +see @ref{MIDI block}. + +Due to some limitations on Windows, the default extension for +MIDI files on Windows is @code{.mid}. Other operating systems still +use the extension @code{.midi}. If a different extension is preferred, +insert the following line at the top-level of the input file, +before the start of any @code{\book}, @code{\bookpart} or @code{\score} blocks: + +@example +#(ly:set-option 'midi-extension "midi") +@end example + +The line above will set the default extension for MIDI files to +@code{.midi}. + +Alternatively, this option can also be supplied on the command line: + +@example +lilypond … -dmidi-extension=midi lilyFile.ly +@end example + + +@unnumberedsubsubsec Instrument names + +@cindex instrument names +@funindex Staff.midiInstrument + +The MIDI instrument to be used is specified by setting the +@code{Staff.midiInstrument} property to the instrument name. +The name should be chosen from the list in @ref{MIDI instruments}. + +@example +\new Staff @{ + \set Staff.midiInstrument = #"glockenspiel" + @var{...notes...} +@} +@end example + +@example +\new Staff \with @{midiInstrument = #"cello"@} @{ + @var{...notes...} +@} +@end example + +If the selected instrument does not exactly match an instrument from +the list of MIDI instruments, the Grand Piano (@code{"acoustic grand"}) +instrument is used. + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{changing-midi-output-to-one-channel-per-voice.ly} + +@knownissues + +@c In 2.11 the following no longer seems to be a problem -td +@ignore +Unterminated (de)crescendos will not render properly in the midi file, +resulting in silent passages of music. The workaround is to explicitly +terminate the (de)crescendo. For example, + +@example +@{ a\< b c d\f @} +@end example + +@noindent +will not work properly but + +@example +@{ a\< b c d\!\f @} +@end example + +@noindent +will. +@end ignore + +Changes in the MIDI volume take place only on starting a note, so +crescendi and decrescendi cannot affect the volume of a +single note. + +Not all midi players correctly handle tempo changes in the midi +output. Players that are known to work include MS Windows Media +Player and @uref{http://@/timidity@/.sourceforge@/.net/,timidity}. + +@node MIDI block +@subsection MIDI block +@cindex MIDI block + +A @code{\midi} block must appear within a score block if MIDI output +is required. It is analogous to the layout block, but somewhat +simpler. Often, the @code{\midi} block is left empty, but it +can contain context rearrangements, new context definitions or code +to set the values of properties. For example, the following will +set the initial tempo exported to a MIDI file without causing a tempo +indication to be printed: + +@example +\score @{ + @var{...music...} + \midi @{ + \context @{ + \Score + tempoWholesPerMinute = #(ly:make-moment 72 4) + @} + @} +@} +@end example + +In this example the tempo is set to 72 quarter note +beats per minute. This kind of tempo specification cannot take +a dotted note length as an argument. If one is required, break +the dotted note into smaller units. For example, a tempo of 90 +dotted quarter notes per minute can be specified as 270 eighth +notes per minute: + +@example +tempoWholesPerMinute = #(ly:make-moment 270 8) +@end example + +@cindex MIDI context definitions + +Context definitions follow precisely the same syntax as those +within a @code{\layout} block. Translation modules for sound are +called performers. The contexts for MIDI output are defined in +@file{../ly/@/performer@/-init@/.ly}, +see @rlearning{Other sources of information}. +For example, to remove the effect of dynamics +from the MIDI output, insert the following lines in the +@code{\midi@{ @}} block. + +@example +\midi @{ + ... + \context @{ + \Voice + \remove "Dynamic_performer" + @} +@} +@end example + +MIDI output is created only when a @code{\midi} block is included +within a score block defined with a @code{\score} command. If it +is placed within an explicitly instantiated score context (i.e. +within a @code{\new Score} block) the file will fail. To solve +this, enclose the @code{\new Score} and the @code{\midi} commands +in a @code{\score} block. + +@example +\score @{ + \new Score @{ @dots{}notes@dots{} @} + \midi @{ @} +@} +@end example + +@node What goes into the MIDI output? +@subsection What goes into the MIDI output? + +@c TODO Check grace notes - timing is suspect? + +@unnumberedsubsubsec Supported in MIDI + +@cindex Pitches in MIDI +@cindex MIDI, Pitches +@cindex Quarter tones in MIDI +@cindex MIDI, quarter tones +@cindex Microtones in MIDI +@cindex MIDI, microtones +@cindex Chord names in MIDI +@cindex MIDI, chord names +@cindex Rhythms in MIDI +@cindex MIDI, Rhythms +@c TODO etc + +The following items of notation are reflected in the MIDI output: + +@itemize +@item Pitches +@item Microtones (See @ref{Accidentals}. Rendering needs a +player that supports pitch bend.) +@item Chords entered as chord names +@item Rhythms entered as note durations, including tuplets +@item Tremolos entered without @q{@code{:}[@var{number}]} +@item Ties +@item Dynamic marks +@item Crescendi, decrescendi over multiple notes +@item Tempo changes entered with a tempo marking +@item Lyrics +@end itemize + +@unnumberedsubsubsec Unsupported in MIDI + +@c TODO index as above + +The following items of notation have no effect on the MIDI output: + +@itemize +@item Rhythms entered as annotations, e.g. swing +@item Tempo changes entered as annotations with no tempo marking +@item Staccato and other articulations and ornamentations +@item Slurs and Phrasing slurs +@item Crescendi, decrescendi over a single note +@item Tremolos entered with @q{@code{:}[@var{number}]} +@item Figured bass +@item Microtonal chords +@end itemize + + +@node Repeats in MIDI +@subsection Repeats in MIDI + +@cindex repeats in MIDI +@funindex \unfoldRepeats + +With a few minor additions, all types of repeats can be represented +in the MIDI output. This is achieved by applying the +@code{\unfoldRepeats} music function. This function changes all +repeats to unfold repeats. + +@lilypond[quote,verbatim] +\unfoldRepeats { + \repeat tremolo 8 {c'32 e' } + \repeat percent 2 { c''8 d'' } + \repeat volta 2 {c'4 d' e' f'} + \alternative { + { g' a' a' g' } + {f' e' d' c' } + } +} +\bar "|." +@end lilypond + +When creating a score file using @code{\unfoldRepeats} for MIDI, +it is necessary to make two @code{\score} blocks: one for MIDI +(with unfolded repeats) and one for notation (with volta, tremolo, +and percent repeats). For example, + +@example +\score @{ + @var{..music..} + \layout @{ .. @} +@} +\score @{ + \unfoldRepeats @var{..music..} + \midi @{ .. @} +@} +@end example + +@node Controlling MIDI dynamics +@subsection Controlling MIDI dynamics + +MIDI dynamics are implemented by the Dynamic_performer which lives +by default in the Voice context. It is possible to control the +overall MIDI volume, the relative volume of dynamic markings and +the relative volume of different instruments. + +@unnumberedsubsubsec Dynamic marks + +Dynamic marks are translated to a fixed fraction of the available +MIDI volume range. The default fractions range from 0.25 for +@notation{ppppp} to 0.95 for @notation{fffff}. The set of dynamic +marks and the associated fractions can be seen in +@file{../scm/midi.scm}, see @rlearning{Other sources of information}. +This set of fractions may be changed or extended by providing a +function which takes a dynamic mark as its argument and returns the +required fraction, and setting +@code{Score.dynamicAbsoluteVolumeFunction} to this function. + +For example, if a @notation{rinforzando} dynamic marking, +@code{\rfz}, is required, this will not by default +have any effect on the MIDI volume, as this dynamic marking is not +included in the default set. Similarly, if a new dynamic marking +has been defined with @code{make-dynamic-script} that too will not +be included in the default set. The following example shows how the +MIDI volume for such dynamic markings might be added. The Scheme +function sets the fraction to 0.9 if a dynamic mark of rfz is +found, or calls the default function otherwise. + +@lilypond[verbatim,quote] +#(define (myDynamics dynamic) + (if (equal? dynamic "rfz") + 0.9 + (default-dynamic-absolute-volume dynamic))) + +\score { + \new Staff { + \set Staff.midiInstrument = #"cello" + \set Score.dynamicAbsoluteVolumeFunction = #myDynamics + \new Voice { + \relative c'' { + a\pp b c-\rfz + } + } + } + \layout {} + \midi {} +} +@end lilypond + +Alternatively, if the whole table of fractions needs to be +redefined, it would be better to use the +@notation{default-dynamic-absolute-volume} procedure in +@file{../scm/midi.scm} and the associated table as a model. +The final example in this section shows how this might be done. + +@unnumberedsubsubsec Overall MIDI volume + +The minimum and maximum overall volume of MIDI dynamic markings is +controlled by setting the properties @code{midiMinimumVolume} and +@code{midiMaximumVolume} at the @code{Score} level. These +properties have an effect only on dynamic marks, so if they +are to apply from the start of the score a dynamic mark must be +placed there. The fraction corresponding to each dynamic mark is +modified with this formula + +@example +midiMinimumVolume + (midiMaximumVolume - midiMinimumVolume) * fraction +@end example + +In the following example the dynamic range of the overall MIDI +volume is limited to the range 0.2 - 0.5. + +@lilypond[verbatim,quote] +\score { + << + \new Staff { + \key g \major + \time 2/2 + \set Staff.midiInstrument = #"flute" + \new Voice \relative c''' { + r2 g\mp g fis ~ + fis4 g8 fis e2 ~ + e4 d8 cis d2 + } + } + \new Staff { + \key g \major + \set Staff.midiInstrument = #"clarinet" + \new Voice \relative c'' { + b1\p a2. b8 a + g2. fis8 e + fis2 r + } + } + >> + \layout { } + \midi { + \context { + \Score + tempoWholesPerMinute = #(ly:make-moment 72 2) + midiMinimumVolume = #0.2 + midiMaximumVolume = #0.5 + } + } +} +@end lilypond + +@unnumberedsubsubsec Equalizing different instruments (i) + +If the minimum and maximum MIDI volume properties are set in +the @code{Staff} context the relative volumes of the MIDI +instruments can be controlled. This gives a basic instrument +equalizer, which can enhance the quality of the MIDI output +remarkably. + +In this example the volume of the clarinet is reduced relative +to the volume of the flute. There must be a dynamic +mark on the first note of each instrument for this to work +correctly. + +@lilypond[verbatim,quote] +\score { + << + \new Staff { + \key g \major + \time 2/2 + \set Staff.midiInstrument = #"flute" + \set Staff.midiMinimumVolume = #0.7 + \set Staff.midiMaximumVolume = #0.9 + \new Voice \relative c''' { + r2 g\mp g fis ~ + fis4 g8 fis e2 ~ + e4 d8 cis d2 + } + } + \new Staff { + \key g \major + \set Staff.midiInstrument = #"clarinet" + \set Staff.midiMinimumVolume = #0.3 + \set Staff.midiMaximumVolume = #0.6 + \new Voice \relative c'' { + b1\p a2. b8 a + g2. fis8 e + fis2 r + } + } + >> + \layout { } + \midi { + \context { + \Score + tempoWholesPerMinute = #(ly:make-moment 72 2) + } + } +} +@end lilypond + +@unnumberedsubsubsec Equalizing different instruments (ii) + +If the MIDI minimum and maximum volume properties are not set +LilyPond will, by default, apply a small degree of equalization +to a few instruments. The instruments and the equalization +applied are shown in the table @notation{instrument-equalizer-alist} +in @file{../scm/midi.scm}. + +This basic default equalizer can be replaced by setting +@code{instrumentEqualizer} in the @code{Score} context to a new +Scheme procedure which accepts a MIDI instrument name as its only +argument and returns a pair of fractions giving the minimum and +maximum volumes to be applied to that instrument. This replacement +is done in the same way as shown for resetting the +@code{dynamicAbsoluteVolumeFunction} at the start of this section. +The default equalizer, @notation{default-instrument-equalizer}, in +@file{../scm/midi.scm} shows how such a procedure might be written. + +The following example sets the relative flute and clarinet volumes +to the same values as the previous example. + +@lilypond[verbatim,quote] +#(define my-instrument-equalizer-alist '()) + +#(set! my-instrument-equalizer-alist + (append + '( + ("flute" . (0.7 . 0.9)) + ("clarinet" . (0.3 . 0.6))) + my-instrument-equalizer-alist)) + +#(define (my-instrument-equalizer s) + (let ((entry (assoc s my-instrument-equalizer-alist))) + (if entry + (cdr entry)))) + +\score { + << + \new Staff { + \key g \major + \time 2/2 + \set Score.instrumentEqualizer = #my-instrument-equalizer + \set Staff.midiInstrument = #"flute" + \new Voice \relative c''' { + r2 g\mp g fis ~ + fis4 g8 fis e2 ~ + e4 d8 cis d2 + } + } + \new Staff { + \key g \major + \set Staff.midiInstrument = #"clarinet" + \new Voice \relative c'' { + b1\p a2. b8 a + g2. fis8 e + fis2 r + } + } + >> + \layout { } + \midi { + \context { + \Score + tempoWholesPerMinute = #(ly:make-moment 72 2) + } + } +} +@end lilypond + +@ignore +@c Delete when satisfied this is adequately covered elsewhere -td + +@n ode Microtones in MIDI +@s ubsection Microtones in MIDI + +@cindex microtones in MIDI + +Microtones consisting of half sharps and half flats are exported +to the MIDI file and render correctly in MIDI players which support +pitch bending. See @ref{Note names in other languages}. Here is +an example showing all the half sharps and half flats. It can be +copied out and compiled to test microtones in your MIDI player. + +@lilypond[verbatim,quote] +\score { + \relative c' { + c cih cis cisih + d dih ees eeh + e eih f fih + fis fisih g gih + gis gisih a aih + bes beh b bih + } + \layout {} + \midi {} +} +@end lilypond +@end ignore + + +@node Percussion in MIDI +@subsection Percussion in MIDI + +Percussion instruments are generally notated in a @code{DrumStaff} +context and when notated in this way they are outputted correctly +to MIDI channel@tie{}10, but some pitched percussion instruments, +like the xylophone, marimba, vibraphone, timpani, etc., are +treated like @qq{normal} instruments and music for these instruments +should be entered in a normal @code{Staff} context, not a +@code{DrumStaff} context, to obtain the correct MIDI output. + +Some non-pitched percussion sounds included in the general MIDI +standard, like melodic tom, taiko drum, synth drum, etc., cannot +be reached via MIDI channel@tie{}10, so the notation for such +instruments should also be entered in a normal @code{Staff} +context, using suitable normal pitches. + +Many percussion instruments are not included in the general MIDI +standard, e.g. castanets. The easiest, although unsatisfactory, +method of producing some MIDI output when writing for such +instruments is to substitute the nearest sound from the standard +set. + +@c TODO Expand with examples, and any other issues + +@knownissues + +Because the general MIDI standard does not contain rim shots, the +sidestick is used for this purpose instead. + + diff --git a/Documentation/notation/keyboards.itely b/Documentation/notation/keyboards.itely new file mode 100644 index 0000000000..c1adb583b6 --- /dev/null +++ b/Documentation/notation/keyboards.itely @@ -0,0 +1,651 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + +@node Keyboard and other multi-staff instruments +@section Keyboard and other multi-staff instruments + +@lilypondfile[quote]{keyboard-headword.ly} + +This section discusses several aspects of music notation that are +unique to keyboard instruments and other instruments notated on +many staves, such as harps and vibraphones. For the purposes of +this section this entire group of multi-staff instruments is called +@qq{keyboards} for short, even though some of them do not have a +keyboard. + +@menu +* Common notation for keyboards:: +* Piano:: +* Accordion:: +* Harp:: +@end menu + +@node Common notation for keyboards +@subsection Common notation for keyboards + +This section discusses notation issues that may arise for most +keyboard instruments. + +@menu +* References for keyboards:: +* Changing staff manually:: +* Changing staff automatically:: +* Staff-change lines:: +* Cross-staff stems:: +@end menu + +@node References for keyboards +@unnumberedsubsubsec References for keyboards + +@cindex piano staves +@cindex staves, piano +@cindex staves, keyboard instruments +@cindex staves, keyed instruments +@cindex keyboard instrument staves +@cindex keyed instrument staves + +@funindex PianoStaff + +Keyboard instruments are usually notated with Piano staves. These +are two or more normal staves coupled with a brace. The same +notation is also used for other keyed instruments. +Organ music is normally written with two staves inside a +@code{PianoStaff} group and third, normal staff for the pedals. + +The staves in keyboard music are largely independent, but +sometimes voices can cross between the two staves. This +section discusses notation techniques particular to keyboard +music. + +Several common issues in keyboard music are covered elsewhere: + +@itemize + +@item Keyboard music usually contains multiple voices and the +number of voices may change regularly; this is described in +@ref{Collision resolution}. + +@item Keyboard music can be written in parallel, as described in +@ref{Writing music in parallel}. + +@item Fingerings are indicated with @ref{Fingering instructions}. + +@item Organ pedal indications are inserted as articulations, see +@ref{List of articulations}. + +@item Vertical grid lines can be shown with @ref{Grid lines}. + +@item Keyboard music often contains @notation{Laissez vibrer} ties +as well as ties on arpeggios and tremolos, described in +@ref{Ties}. + +@item Placing arpeggios across multiple voices and staves is +covered in @ref{Arpeggio}. + +@item Tremolo marks are described in @ref{Tremolo repeats}. + +@item Several of the tweaks that can occur in keyboard music are +demonstrated in @rlearning{Real music example}. + +@item Hidden notes can be used to produce ties that cross voices, +as shown in @rlearning{Other uses for tweaks}. + +@end itemize + +@c @snippets +@c @lilypondfile[verbatim,lilyquote,texidoc,doctitle] +@c {forcing-visibility-of-systems-with-multi-bar-rests-when-using-\RemoveEmptyStaffContext.ly} +@c http://lsr.dsi.unimi.it/LSR/Item?u=1&id=312 + +@seealso +Learning Manual: +@rlearning{Real music example}, +@rlearning{Other uses for tweaks}. + +Notation Reference: +@ref{Grouping staves}, +@ref{Instrument names}, +@ref{Collision resolution}, +@ref{Writing music in parallel}, +@ref{Fingering instructions}, +@ref{List of articulations}, +@ref{Grid lines}, +@ref{Ties}, +@ref{Arpeggio}, +@ref{Tremolo repeats}. + +Internals Reference: +@rinternals{PianoStaff}. + +Snippets: +@rlsr{Keyboards}. + + +@knownissues + +@cindex keyboard music, centering dynamics +@cindex dynamics, centered in keyboard music +@cindex piano music, centering dynamics +@cindex centered dynamics in piano music +@funindex staff-padding + +Dynamics are not automatically centered, but workarounds do exist. One +option is the @q{piano centered dynamics} template under +@rlearning{Piano templates}; another option is to increase the +@code{staff-padding} of dynamics as discussed in @rlearning{Moving +objects}. + +@node Changing staff manually +@unnumberedsubsubsec Changing staff manually + +@cindex changing staff manually +@cindex manual staff changes +@cindex staff changes, manual +@cindex cross-staff notes +@cindex notes, cross-staff +@cindex cross-staff beams +@cindex beams, cross-staff + +@funindex \change +@funindex change + +Voices can be switched between staves manually, using the command + +@example +\change Staff = @var{staffname} +@end example + +@noindent +The string @var{staffname} is the name of the staff. It switches +the current voice from its current staff to the staff called +@var{staffname}. Typical values for @var{staffname} are +@code{"up"} and @code{"down"}, or @code{"RH"} and @code{"LH"}. + +The staff to which the voice is being switched must exist at the +time of the switch. If necessary, staves should be @qq{kept alive}, +see @ref{Keeping contexts alive}. + +Cross-staff notes are beamed automatically: + +@lilypond[verbatim,quote] +\new PianoStaff << + \new Staff = "up" { + 8 + \change Staff = "down" + g8 fis g + \change Staff = "up" + 8 + \change Staff = "down" + e8 dis e + \change Staff = "up" + } + \new Staff = "down" { + \clef bass + % keep staff alive + s1 + } +>> +@end lilypond + +If the beaming needs to be tweaked, make any changes to the stem +directions first. The beam positions are then measured from the +center of the staff that is closest to the beam. For a simple +example of beam tweaking, see @rlearning{Fixing overlapping +notation}. + + +@seealso +Learning Manual: +@rlearning{Fixing overlapping notation}. + +Notation Reference: +@ref{Stems}, +@ref{Automatic beams}, +@ref{Keeping contexts alive}. + +Snippets: +@rlsr{Keyboards}. + +Internals Reference: +@rinternals{Beam}, +@rinternals{ContextChange}. + + +@node Changing staff automatically +@unnumberedsubsubsec Changing staff automatically + +@cindex changing staff automatically +@cindex automatic staff changes +@cindex staff changes, automatic + +@funindex \autochange +@funindex autochange +@funindex PianoStaff + +Voices can be made to switch automatically between the top and the +bottom staff. The syntax for this is + +@example +\autochange @dots{}@var{music}@dots{} +@end example + +@noindent +This will create two staves inside the current staff group +(usually a @code{PianoStaff}), called @code{"up"} and +@code{"down"}. The lower staff will be in the bass clef by default. +The autochanger switches on the basis of the pitch (middle@tie{}C is the +turning point), and it looks ahead skipping over rests to switch +in advance. + +@lilypond[quote,verbatim] +\new PianoStaff { + \autochange { + g4 a b c' + d'4 r a g + } +} +@end lilypond + +@cindex relative music and autochange +@cindex autochange and relative music + +@funindex \relative +@funindex relative + +A @code{\relative} section that is outside of @code{\autochange} +has no effect on the pitches of the music, so if necessary, put +@code{\relative} inside @code{\autochange}. + +If additional control is needed over the individual staves, they +can be created manually with the names @code{"up"} and +@code{"down"}. The @code{\autochange} command will then switch +its voice between the existing staves. + +@warning{If staves are created manually, they @emph{must} be named +@code{"up"} and @code{"down"}.} + +For example, staves must be created manually in order to place a +key signature in the lower staff: + +@lilypond[quote,verbatim] +\new PianoStaff << + \new Staff = "up" { + \new Voice = "melOne" { + \key g \major + \autochange \relative c' { + g8 b a c b d c e + d8 r fis, g a2 + } + } + } + \new Staff = "down" { + \key g \major + \clef bass + } +>> +@end lilypond + + +@seealso +Notation Reference: +@ref{Changing staff manually}. + +Snippets: +@rlsr{Keyboards}. + +Internals Reference: +@rinternals{AutoChangeMusic}. + + +@knownissues + +@cindex chords, splitting across staves with \autochange + +The staff switches may not end up in optimal places. For high +quality output, staff switches should be specified manually. + +Chords will not be split across the staves; they will be assigned to a +staff based on the first note named in the chord construct. + +@node Staff-change lines +@unnumberedsubsubsec Staff-change lines + +@cindex staff-change line +@cindex staff change line +@cindex cross-staff line +@cindex cross staff line +@cindex line, staff-change follower +@cindex line, cross-staff +@cindex line, staff-change +@cindex follow voice +@cindex voice, following +@cindex staff switching +@cindex cross-staff + +@funindex followVoice +@funindex \showStaffSwitch +@funindex showStaffSwitch +@funindex \hideStaffSwitch +@funindex hideStaffSwitch + +Whenever a voice switches to another staff, a line connecting the +notes can be printed automatically: + +@lilypond[quote,verbatim,relative=1] +\new PianoStaff << + \new Staff = "one" { + \showStaffSwitch + c1 + \change Staff = "two" + b2 a + } + \new Staff = "two" { + \clef bass + s1*2 + } +>> +@end lilypond + + +@predefined +@code{\showStaffSwitch}, +@code{\hideStaffSwitch}. +@endpredefined + + +@seealso +Snippets: +@rlsr{Keyboards}. + +Internals Reference: +@rinternals{Note_head_line_engraver}, +@rinternals{VoiceFollower}. + + +@node Cross-staff stems +@unnumberedsubsubsec Cross-staff stems + +@cindex cross-staff notes +@cindex cross staff notes +@cindex notes, cross-staff +@cindex cross-staff stems +@cindex cross staff stems +@cindex stems, cross-staff +@cindex chords, cross-staff +@cindex cross-staff chords +@cindex cross staff chords + +@funindex Stem +@funindex cross-staff +@funindex length +@funindex flag-style + +Chords that cross staves may be produced: + +@lilypond[verbatim,quote] +\new PianoStaff << + \new Staff { + \relative c' { + f8 e4 d8 d f e4 + } + } + \new Staff { + \relative c' { + << { + \clef bass + % stems may overlap the other staff + \override Stem #'cross-staff = ##t + % extend the stems to reach other other staff + \override Stem #'length = #12 + % do not print extra flags + \override Stem #'flag-style = #'no-flag + % prevent beaming as needed + a8 g4 f8 f bes\noBeam g4 + } + \\ + { + f,2 bes4 c + } >> + } + } +>> +@end lilypond + +@snippets +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{indicating-cross-staff-chords-with-arpeggio-bracket.ly} + + +@seealso +Snippets: +@rlsr{Keyboards}. + +Internals Reference: +@rinternals{Stem}. + + +@node Piano +@subsection Piano + +This section discusses notation issues that relate most directly to the +piano. + +@menu +* Piano pedals:: +@end menu + +@node Piano pedals +@unnumberedsubsubsec Piano pedals + +@cindex piano pedals +@cindex pedals, piano +@cindex sustain pedal +@cindex pedal, sustain +@cindex sostenuto pedal +@cindex pedal, sostenuto +@cindex una corda +@cindex tre corde +@cindex sos. +@cindex U.C. + +@funindex \sustainOn +@funindex sustainOn +@funindex \sustainOff +@funindex sustainOff +@funindex \sostenutoOn +@funindex sostenutoOn +@funindex \sostenutoOff +@funindex sostenutoOff +@funindex \unaCorda +@funindex unaCorda +@funindex \treCorde +@funindex treCorde + +Pianos generally have three pedals that alter the way sound is +produced: @notation{sustain}, @notation{sostenuto} +(@notation{sos.}), and @notation{una corda} (@notation{U.C.}). +Sustain pedals are also found on vibraphones and celestas. + +@lilypond[quote,verbatim,relative=2] +c4\sustainOn d e g +1\sustainOff +c4\sostenutoOn e g c, +1\sostenutoOff +c4\unaCorda d e g +1\treCorde +@end lilypond + +@cindex pedal indication styles +@cindex pedal indication, text +@cindex pedal indication, bracket +@cindex pedal indication, mixed +@cindex pedal sustain style +@cindex sustain pedal style + +@funindex pedalSustainStyle +@funindex mixed +@funindex bracket +@funindex text + +There are three styles of pedal indications: text, bracket, and mixed. +The sustain pedal and the una corda pedal use the text style by default +while the sostenuto pedal uses mixed by default. + +@lilypond[quote,verbatim,relative=2] +c4\sustainOn g c2\sustainOff +\set Staff.pedalSustainStyle = #'mixed +c4\sustainOn g c d +d\sustainOff\sustainOn g, c2\sustainOff +\set Staff.pedalSustainStyle = #'bracket +c4\sustainOn g c d +d\sustainOff\sustainOn g, c2 +\bar "|." +@end lilypond + +The placement of the pedal commands matches the physical movement of the +sustain pedal during piano performance. Pedalling to the final bar line +is indicated by omitting the final pedal off command. + + +@seealso +Notation Reference: +@ref{Ties}. + +Snippets: +@rlsr{Keyboards}. + +Internals Reference: +@rinternals{SustainPedal}, +@rinternals{SustainPedalLineSpanner}, +@rinternals{SustainEvent}, +@rinternals{SostenutoPedal}, +@rinternals{SostenutoPedalLineSpanner}, +@rinternals{SostenutoEvent}, +@rinternals{UnaCordaPedal}, +@rinternals{UnaCordaPedalLineSpanner}, +@rinternals{UnaCordaEvent}, +@rinternals{PianoPedalBracket}, +@rinternals{Piano_pedal_engraver}. + + +@node Accordion +@subsection Accordion + +@cindex accordion + +This section discusses notation that is unique to the accordion. + +@menu +* Discant symbols:: +@end menu + +@node Discant symbols +@unnumberedsubsubsec Discant symbols + +@cindex accordion discant symbols +@cindex discant symbols, accordion +@cindex accordion shifts +@cindex accordion shift symbols + +Accordions are often built with more than one set of reeds that may be +in unison with, an octave above, or an octave below the written pitch. +Each accordion maker has different names for the @notation{shifts} that +select the various reed combinations, such as @notation{oboe}, +@notation{musette}, or @notation{bandonium}, so a system of symbols has +come into use to simplify the performance instructions. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{accordion-discant-symbols.ly} + + +@seealso +Snippets: +@rlsr{Keyboards}. + + +@node Harp +@subsection Harp + +This section discusses notation issues that are unique to the harp. + +@menu +* References for harps:: +* Harp pedals:: +@end menu + +@node References for harps +@unnumberedsubsubsec References for harps +@cindex harps +@cindex bisbiglando + +Some common characteristics of harp music are covered elsewhere: + +@itemize + +@item The glissando is the most characterisic harp technique, +@ref{Glissando}. + +@item A @notation{bisbigliando} is written as a tremelo @ref{Tremolo +repeats} + +@item Natural harmonics are covered under @ref{Harmonics}. + +@item For directional arpeggios and non-arpeggios, see @ref{Arpeggio}. + +@end itemize + +@seealso +Notation Reference: +@ref{Tremolo repeats} +@ref{Glissando} +@ref{Arpeggio} +@ref{Harmonics} + +@node Harp pedals +@unnumberedsubsubsec Harp pedals + +@cindex harp pedals +@cindex harp pedal diagrams +@cindex pedals, harp +@cindex pedal diagrams, harp + +Harps have seven strings per octave that may be sounded at the natural, +flattened, or sharpened pitch. In lever harps, each string is adjusted +individually, but in pedal harps every string with the same pitch name +is controlled by a single pedal. From the player's left to right, the +pedals are D, C, and B on the left and E, F, G, and A on the right. +The position of the pedals may be indicated with text marks: + +@lilypond[quote,verbatim,relative=2] +\textLengthOn +cis1_\markup \concat \vcenter { [D \flat C \sharp B|E \sharp F \sharp G A \flat] } +c!1_\markup \concat \vcenter {[ C \natural ]} +@end lilypond + +or pedal diagrams: + +@lilypond[quote,verbatim,relative=2] +\textLengthOn +cis1_\markup { \harp-pedal #"^v-|vv-^" } +c!1_\markup { \harp-pedal #"^o--|vv-^" } +@end lilypond + +The @code{\harp-pedal} command accepts a string of characters, where +@code{^} is the highest pedal position (flattened pitch), @code{-} is +the middle pedal postion (natural pitch), @code{v} is the lowest pedal +position (sharpened pitch), and @code{|} is the divider. A prefixed +@code{o} will circle the following pedal symbol. + +@seealso +Notation Reference: +@ref{Text scripts} +@ref{Instrument Specific Markup} diff --git a/Documentation/notation/notation-appendices.itely b/Documentation/notation/notation-appendices.itely new file mode 100644 index 0000000000..af9eeacc6f --- /dev/null +++ b/Documentation/notation/notation-appendices.itely @@ -0,0 +1,1043 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + +@node Notation manual tables +@appendix Notation manual tables + +@c Please do not delete the following @ignore block. +@ignore +Note for editors and translators: In the following menu, two entries +are needed to link to a pair of automatically generated sections. +Please keep them and, if using emacs, do not run +texinfo-all-menus-update without manually restoring them back. These +menu entries are: + +* Text markup commands:: +* Text markup list commands:: + +and they should go just after +* Note head styles:: + +and just before +* List of articulations:: +@end ignore + +@menu +* Chord name chart:: +* Common chord modifiers:: +* Predefined fretboard diagrams:: +* MIDI instruments:: +* List of colors:: +* The Feta font:: +* Note head styles:: +* Text markup commands:: +* Text markup list commands:: +* List of articulations:: +* Percussion notes:: +* Technical glossary:: +* All context properties:: +* Layout properties:: +* Identifiers:: +* Scheme functions:: +@end menu + + + +@node Chord name chart +@appendixsec Chord name chart + +The following charts shows two standard systems for printing chord +names, along with the pitches they represent. + +@lilypondfile{chord-names-jazz.ly} + +@node Common chord modifiers +@appendixsec Common chord modifiers + +The following table shows chord modifiers that can be used in +@code{\chordmode} to generate standard chord structures. + +@multitable @columnfractions .2 .3 .2 .2 + +@item +@b{Chord type} +@tab +@b{Intervals} +@tab +@b{Modifier(s)} +@tab +@b{Example} + + +@item +Major +@tab +Major third, perfect fifth +@tab +@code{5} or nothing +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:5 +} +@end lilypond + +@item +Minor +@tab +Minor third, perfect fifth +@tab +@code{m} or @code{m5} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m +} +@end lilypond + +@item +Augmented +@tab +Major third, augmented fifth +@tab +@code{aug} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:aug +} +@end lilypond + +@item +Diminished +@tab +Minor third, diminished fifth +@tab +@code{dim} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:dim +} +@end lilypond + +@item +Dominant seventh +@tab +Major triad, minor seventh +@tab +@code{7} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:7 +} +@end lilypond + +@item +Major seventh +@tab +Major triad, major seventh +@tab +@code{maj7} or @code{maj} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:maj7 +} +@end lilypond + +@item +Minor seventh +@tab +Minor triad, minor seventh +@tab +@code{m7} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m7 +} +@end lilypond + +@item +Diminished seventh +@tab +Diminished triad, diminished seventh +@tab +@code{dim7} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:dim7 +} +@end lilypond + +@item +Augmented seventh +@tab +Augmented triad, minor seventh +@tab +@code{aug7} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:aug7 +} +@end lilypond + +@item +Half-diminished seventh +@tab +Diminished triad, minor seventh +@tab +@code{m7.5-} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m7.5- +} +@end lilypond + +@item +Minor-major seventh +@tab +Minor triad, major seventh +@tab +@code{maj7.5-} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:maj7.5- +} +@end lilypond + +@item +Major sixth +@tab +Major triad, sixth +@tab +@code{6} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:6 +} +@end lilypond + +@item +Minor sixth +@tab +Minor triad, sixth +@tab +@code{m6} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m6 +} +@end lilypond + +@item +Dominant ninth +@tab +Dominant seventh, major ninth +@tab +@code{9} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:9 +} +@end lilypond + +@item +Major ninth +@tab +Major seventh, major ninth +@tab +@code{maj9} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:maj9 +} +@end lilypond + +@item +Minor ninth +@tab +Minor seventh, major ninth +@tab +@code{m9} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m9 +} +@end lilypond + +@item +Dominant eleventh +@tab +Dominant ninth, perfect eleventh +@tab +@code{11} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:11 +} +@end lilypond + +@item +Major eleventh +@tab +Major ninth, perfect eleventh +@tab +@code{maj11} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:maj11 +} +@end lilypond + +@item +Minor eleventh +@tab +Minor ninth, perfect eleventh +@tab +@code{m11} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m11 +} +@end lilypond + +@item +Dominant thirteenth +@tab +Dominant ninth, major thirteenth +@tab +@code{13} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:13 +} +@end lilypond + +@item +Dominant thirteenth +@tab +Dominant eleventh, major thirteenth +@tab +@code{13.11} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:13.11 +} +@end lilypond + +@item +Major thirteenth +@tab +Major eleventh, major thirteenth +@tab +@code{maj13.11} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:maj13.11 +} +@end lilypond + +@item +Minor thirteenth +@tab +Minor eleventh, major thirteenth +@tab +@code{m13.11} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m13.11 +} +@end lilypond + +@item +Suspended second +@tab +Major second, perfect fifth +@tab +@code{sus2} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:sus2 +} +@end lilypond + +@item +Suspended fourth +@tab +Perfect fourth, perfect fifth +@tab +@code{sus4} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:sus4 +} +@end lilypond + + +@end multitable + +@node Predefined fretboard diagrams +@appendixsec Predefined fretboard diagrams + +The chart below shows the predefined fretboard diagrams. + +@lilypondfile{display-predefined-fretboards.ly} + +@node MIDI instruments +@appendixsec MIDI instruments + +The following is a list of names that can be used for the +@code{midiInstrument} property. + +@example +acoustic grand contrabass lead 7 (fifths) +bright acoustic tremolo strings lead 8 (bass+lead) +electric grand pizzicato strings pad 1 (new age) +honky-tonk orchestral harp pad 2 (warm) +electric piano 1 timpani pad 3 (polysynth) +electric piano 2 string ensemble 1 pad 4 (choir) +harpsichord string ensemble 2 pad 5 (bowed) +clav synthstrings 1 pad 6 (metallic) +celesta synthstrings 2 pad 7 (halo) +glockenspiel choir aahs pad 8 (sweep) +music box voice oohs fx 1 (rain) +vibraphone synth voice fx 2 (soundtrack) +marimba orchestra hit fx 3 (crystal) +xylophone trumpet fx 4 (atmosphere) +tubular bells trombone fx 5 (brightness) +dulcimer tuba fx 6 (goblins) +drawbar organ muted trumpet fx 7 (echoes) +percussive organ french horn fx 8 (sci-fi) +rock organ brass section sitar +church organ synthbrass 1 banjo +reed organ synthbrass 2 shamisen +accordion soprano sax koto +harmonica alto sax kalimba +concertina tenor sax bagpipe +acoustic guitar (nylon) baritone sax fiddle +acoustic guitar (steel) oboe shanai +electric guitar (jazz) english horn tinkle bell +electric guitar (clean) bassoon agogo +electric guitar (muted) clarinet steel drums +overdriven guitar piccolo woodblock +distorted guitar flute taiko drum +guitar harmonics recorder melodic tom +acoustic bass pan flute synth drum +electric bass (finger) blown bottle reverse cymbal +electric bass (pick) shakuhachi guitar fret noise +fretless bass whistle breath noise +slap bass 1 ocarina seashore +slap bass 2 lead 1 (square) bird tweet +synth bass 1 lead 2 (sawtooth) telephone ring +synth bass 2 lead 3 (calliope) helicopter +violin lead 4 (chiff) applause +viola lead 5 (charang) gunshot +cello lead 6 (voice) +@end example + + +@node List of colors +@appendixsec List of colors + +@subsubheading Normal colors + +Usage syntax is detailed in @ref{Coloring objects}. + +@cindex List of colors +@cindex Colors, list of + +@verbatim +black white red green +blue cyan magenta yellow +grey darkred darkgreen darkblue +darkcyan darkmagenta darkyellow +@end verbatim + + +@subsubheading X color names + +X color names come several variants: + +Any name that is spelled as a single word with capitalization +(e.g. @q{LightSlateBlue}) can also be spelled as space separated +words without capitalization (e.g. @q{light slate blue}). + +The word @q{grey} can always be spelled @q{gray} (e.g. @q{DarkSlateGray}). + +Some names can take a numerical suffix (e.g. @q{LightSalmon4}). + + +@subsubheading Color Names without a numerical suffix: + +@verbatim +snow GhostWhite WhiteSmoke gainsboro FloralWhite +OldLace linen AntiqueWhite PapayaWhip BlanchedAlmond +bisque PeachPuff NavajoWhite moccasin cornsilk +ivory LemonChiffon seashell honeydew MintCream +azure AliceBlue lavender LavenderBlush MistyRose +white black DarkSlateGrey DimGrey SlateGrey +LightSlateGrey grey LightGrey MidnightBlue navy +NavyBlue CornflowerBlue DarkSlateBlue SlateBlue MediumSlateBlue +LightSlateBlue MediumBlue RoyalBlue blue DodgerBlue +DeepSkyBlue SkyBlue LightSkyBlue SteelBlue LightSteelBlue +LightBlue PowderBlue PaleTurquoise DarkTurquoise MediumTurquoise +turquoise cyan LightCyan CadetBlue MediumAquamarine +aquamarine DarkGreen DarkOliveGreen DarkSeaGreen SeaGreen +MediumSeaGreen LightSeaGreen PaleGreen SpringGreen LawnGreen +green chartreuse MediumSpringGreen GreenYellow LimeGreen +YellowGreen ForestGreen OliveDrab DarkKhaki khaki +PaleGoldenrod LightGoldenrodYellow LightYellow yellow gold +LightGoldenrod goldenrod DarkGoldenrod RosyBrown IndianRed +SaddleBrown sienna peru burlywood beige +wheat SandyBrown tan chocolate firebrick +brown DarkSalmon salmon LightSalmon orange +DarkOrange coral LightCoral tomato OrangeRed +red HotPink DeepPink pink LightPink +PaleVioletRed maroon MediumVioletRed VioletRed magenta +violet plum orchid MediumOrchid DarkOrchid +DarkViolet BlueViolet purple MediumPurple thistle +DarkGrey DarkBlue DarkCyan DarkMagenta DarkRed +LightGreen +@end verbatim + + +@subsubheading Color names with a numerical suffix + +In the following names the suffix N can be a number in the range 1-4: + +@verbatim +snowN seashellN AntiqueWhiteN bisqueN PeachPuffN +NavajoWhiteN LemonChiffonN cornsilkN ivoryN honeydewN +LavenderBlushN MistyRoseN azureN SlateBlueN RoyalBlueN +blueN DodgerBlueN SteelBlueN DeepSkyBlueN SkyBlueN +LightSkyBlueN LightSteelBlueN LightBlueN LightCyanN PaleTurquoiseN +CadetBlueN turquoiseN cyanN aquamarineN DarkSeaGreenN +SeaGreenN PaleGreenN SpringGreenN greenN chartreuseN +OliveDrabN DarkOliveGreenN khakiN LightGoldenrodN LightYellowN +yellowN goldN goldenrodN DarkGoldenrodN RosyBrownN +IndianRedN siennaN burlywoodN wheatN tanN +chocolateN firebrickN brownN salmonN LightSalmonN +orangeN DarkOrangeN coralN tomatoN OrangeRedN +redN DeepPinkN HotPinkN pinkN LightPinkN +PaleVioletRedN maroonN VioletRedN magentaN orchidN +plumN MediumOrchidN DarkOrchidN purpleN MediumPurpleN +thistleN +@end verbatim + + +@subsubheading Grey Scale + +A grey scale can be obtained using: + +@example +greyN +@end example + +@noindent +Where N is in the range 0-100. + + +@node The Feta font +@appendixsec The Feta font + +@cindex Feta font +@cindex Font, Feta + +The following symbols are available in the Emmentaler font and may be +accessed directly using text markup such as @code{g^\markup @{ +\musicglyph #"scripts.segno" @}}, see @ref{Formatting text}. + + +@menu +* Clef glyphs:: +* Time Signature glyphs:: +* Number glyphs:: +* Accidental glyphs:: +* Default Notehead glyphs:: +* Special Notehead glyphs:: +* Shape-note Notehead glyphs:: +* Rest glyphs:: +* Flag glyphs:: +* Dot glyphs:: +* Dynamic glyphs:: +* Script glyphs:: +* Arrowhead glyphs:: +* Bracket-tip glyphs:: +* Pedal glyphs:: +* Accordion glyphs:: +* Vaticana glyphs:: +* Medicaea glyphs:: +* Hufnagel glyphs:: +* Mensural glyphs:: +* Neomensural glyphs:: +* Petrucci glyphs:: +* Solesmes glyphs:: +@end menu + + +@node Clef glyphs +@unnumberedsubsec Clef glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #clefs +@end lilypond + + +@node Time Signature glyphs +@unnumberedsubsec Time Signature glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #timesig +@end lilypond + + +@node Number glyphs +@unnumberedsubsec Number glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #numbers +@end lilypond + + +@node Accidental glyphs +@unnumberedsubsec Accidental glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #accidentals +@end lilypond + + +@node Default Notehead glyphs +@unnumberedsubsec Default Notehead glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #default-noteheads +@end lilypond + + +@node Special Notehead glyphs +@unnumberedsubsec Special Notehead glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #special-noteheads +@end lilypond + + +@node Shape-note Notehead glyphs +@unnumberedsubsec Shape-note Notehead glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #shape-note-noteheads +@end lilypond + + +@node Rest glyphs +@unnumberedsubsec Rest glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #rests +@end lilypond + + +@node Flag glyphs +@unnumberedsubsec Flag glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #flags +@end lilypond + + +@node Dot glyphs +@unnumberedsubsec Dot glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #dots +@end lilypond + + +@node Dynamic glyphs +@unnumberedsubsec Dynamic glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #dynamics +@end lilypond + + +@node Script glyphs +@unnumberedsubsec Script glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #scripts +@end lilypond + + +@node Arrowhead glyphs +@unnumberedsubsec Arrowhead glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #arrowheads +@end lilypond + + +@node Bracket-tip glyphs +@unnumberedsubsec Bracket-tip glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #brackettips +@end lilypond + + +@node Pedal glyphs +@unnumberedsubsec Pedal glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #pedal +@end lilypond + + +@node Accordion glyphs +@unnumberedsubsec Accordion glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #accordion +@end lilypond + + +@node Vaticana glyphs +@unnumberedsubsec Vaticana glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #vaticana +@end lilypond + + +@node Medicaea glyphs +@unnumberedsubsec Medicaea glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #medicaea +@end lilypond + + +@node Hufnagel glyphs +@unnumberedsubsec Hufnagel glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #hufnagel +@end lilypond + + +@node Mensural glyphs +@unnumberedsubsec Mensural glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #mensural +@end lilypond + + +@node Neomensural glyphs +@unnumberedsubsec Neomensural glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #neomensural +@end lilypond + + +@node Petrucci glyphs +@unnumberedsubsec Petrucci glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #petrucci +@end lilypond + + +@node Solesmes glyphs +@unnumberedsubsec Solesmes glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #solesmes +@end lilypond + + +@node Note head styles +@appendixsec Note head styles + +@cindex note head styles +The following styles may be used for note heads. + +@lilypondfile[noindent]{note-head-style.ly} + +@include markup-commands.tely + +@include markup-list-commands.tely + +@node List of articulations +@appendixsec List of articulations + +@cindex accent +@cindex marcato +@cindex staccatissimo +@cindex espressivo +@cindex fermata +@cindex stopped +@cindex staccato +@cindex portato +@cindex tenuto +@cindex upbow +@cindex downbow +@cindex foot marks +@cindex organ pedal marks +@cindex turn +@cindex open +@cindex stopped +@cindex flageolet +@cindex reverseturn +@cindex trill +@cindex prall +@cindex mordent +@cindex prallprall +@cindex prallmordent +@cindex prall, up +@cindex prall, down +@cindex thumb marking +@cindex segno +@cindex coda +@cindex varcoda + + +@lilypondfile[quote,texidoc]{script-chart.ly} + + +@node Percussion notes +@appendixsec Percussion notes + +@lilypondfile[quote]{percussion-chart.ly} + + +@node Technical glossary +@appendixsec Technical glossary + +A glossary of the technical terms and concepts used internally. + +@menu +* callback:: +* glyph:: +* grob:: +* lexer:: +* output-def:: +* parser:: +* parser variable:: +* prob:: +* simple-closure:: +* smob:: +* stencil:: +@end menu + +@node callback +@unnumberedsubsec callback + +@cindex callback + +A @strong{callback} is a routine, function or method whose reference is +passed as an argument in a call to another routine, so allowing +the called routine to invoke it. The technique enables a lower- +level software layer to call a function defined in a higher +layer. Callbacks are used extensively in LilyPond to permit +user-level Scheme code to define how many low-level actions are +performed. + +@node glyph +@unnumberedsubsec glyph + +@cindex glyph +@cindex font +@cindex typeface + +A @strong{glyph} is a particular graphical representation of a typographic +character, or a combination of two characters formating a ligature. +A set of glyphs with a single style and shape comprise a font, and +a set of fonts covering several styles and sizes comprise a typeface. + +@node grob +@unnumberedsubsec grob + +@cindex grob +@cindex layout objects +@cindex graphical objects + +LilyPond objects which represent items of notation in the printed +output such as note heads, stems, slurs, ties, fingering, clefs, +etc are called @q{Layout objects}, often known as @q{GRaphical +OBjects}, or @strong{grobs} for short. + +@node lexer +@unnumberedsubsec lexer + +@cindex lexer + +A @strong{lexer} is a program which converts a sequence of +characters into a sequence of tokens, a process called lexical +analysis. The LilyPond lexer converts an input @code{.ly} file +into a tokenized file more suited to the next stage of processing, +parsing, see @ref{parser}. + +@node output-def +@unnumberedsubsec output-def +TODO + +@node parser +@unnumberedsubsec parser + +@cindex parser + +A @strong{parser} analyzes the sequence of tokens produced by +a lexer to determine its grammatical structure as defined by the +rules governing the format of an input file. + +@node parser variable +@unnumberedsubsec parser variable + +These are variables defined directly in Scheme. Their direct +use by users is strongly discouraged, because their scoping +semantics can be confusing. + +When the value of such a variable is changed in a @code{.ly} file, +the change is global, and unless explicitly reverted, the new value +will persist to the end of the file, affecting subsequent +@code{\score} blocks as well as external files added with the +@code{\include} command. This can lead to unintended consequences +and in complex typesetting projects the consequent errors can be +difficult to track down. + +LilyPond uses the following parser variables: + +@itemize +@item afterGraceFraction +@item musicQuotes +@item mode +@item output-count +@item output-suffix +@item parseStringResult +@item partCombineListener +@item pitchnames +@item toplevel-bookparts +@item toplevel-scores +@item showLastLength +@item showFirstLength +@end itemize + +@node prob +@unnumberedsubsec prob +TODO + +@node simple-closure +@unnumberedsubsec simple-closure +TODO + +@node smob +@unnumberedsubsec smob +TODO + +@node stencil +@unnumberedsubsec stencil +TODO + + +@node All context properties +@appendixsec All context properties + +@include context-properties.tely + + +@node Layout properties +@appendixsec Layout properties + +@include layout-properties.tely + + +@node Identifiers +@appendixsec Identifiers + +@include identifiers.tely + + +@node Scheme functions +@appendixsec Scheme functions + +@include scheme-functions.tely + diff --git a/Documentation/notation/notation.itely b/Documentation/notation/notation.itely new file mode 100644 index 0000000000..4f18a28fee --- /dev/null +++ b/Documentation/notation/notation.itely @@ -0,0 +1,35 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + +@node Musical notation +@chapter Musical notation + +This chapter explains how to create musical notation. + +@menu +* Pitches:: Writing and display the pitches of notes. +* Rhythms:: Writing and displaying the durations of notes. +* Expressive marks:: Adding expression to notes. +* Repeats:: Repeat music. +* Simultaneous notes:: More than one note at once. +* Staff notation:: Displaying staves. +* Editorial annotations:: Special notation to increase legibility. +* Text:: Adding text to scores. +@end menu + +@include notation/pitches.itely +@include notation/rhythms.itely +@include notation/expressive.itely +@include notation/repeats.itely +@include notation/simultaneous.itely +@include notation/staff.itely +@include notation/editorial.itely +@include notation/text.itely + diff --git a/Documentation/notation/percussion.itely b/Documentation/notation/percussion.itely new file mode 100644 index 0000000000..f182b78a9a --- /dev/null +++ b/Documentation/notation/percussion.itely @@ -0,0 +1,595 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + +@node Percussion +@section Percussion + +@menu +* Common notation for percussion:: +@end menu + +@node Common notation for percussion +@subsection Common notation for percussion + +Rhythmic music is primarily used for percussion and drum notation, but it can +also be used to show the rhythms of melodies. + +@menu +* References for percussion:: +* Basic percussion notation:: +* Drum rolls:: +* Pitched percussion:: +* Percussion staves:: +* Custom percussion staves:: +* Ghost notes:: +@end menu + +@node References for percussion +@unnumberedsubsubsec References for percussion + +TODO add more. + +@itemize + +@item Some percussion may be notated on a rhythmic staff; this is +discussed in @ref{Showing melody rhythms}, and +@ref{Instantiating new staves}. + +@item MIDI output is discussed in a separate section; please see +@ref{Percussion in MIDI}. + +@end itemize + + +@seealso +Notation Reference: +@ref{Showing melody rhythms}, +@ref{Instantiating new staves}. +@ref{Percussion in MIDI}. + +Snippets: @rlsr{Percussion}. + + +@node Basic percussion notation +@unnumberedsubsubsec Basic percussion notation + +@cindex percussion +@cindex drums + +Percussion notes may be entered in @code{\drummode} mode, which is +similar to the standard mode for entering notes. The simplest way +to enter percussion notes is to use the @code{\drums} command, +which creates the correct context and entry mode for percussion: + +@lilypond[quote,verbatim] +\drums { + hihat4 hh bassdrum bd +} +@end lilypond + +This is shorthand for: + +@lilypond[quote,verbatim] +\new DrumStaff { + \drummode { + hihat4 hh bassdrum bd + } +} +@end lilypond + +Each piece of percussion has a full name and an abbreviated name, +and both can be used in input files. The full list of percussion +note names may be found in @ref{Percussion notes}. + +Note that the normal notation of pitches (such as @code{cis4}) in +a @code{DrumStaff} context will cause an error message. +Percussion clefs are added automatically to a @code{DrumStaff} +contex, but other clefs may also be used. + +There are a few issues concerning MIDI support for percussion +instruments; for details please see @ref{Percussion in MIDI}. + + +@seealso +Notation Reference: @ref{Percussion in MIDI}, @ref{Percussion notes}. + +File: @file{ly/@/drumpitch@/-init@/.ly} + +Snippets: @rlsr{Percussion}. + + +@node Drum rolls +@unnumberedsubsubsec Drum rolls + +Drum rolls are indicated with three slashes across the stem. For +quarter notes or longer the three slashes are shown explicitly, +eighth notes are shown with two slashes (the beam being the +third), and drum rolls shorter than eighths have one stem slash to +supplement the beams. This is achieved with the tremolo notation, +@code{:32}, as described in @ref{Tremolo repeats}. Here is an +example of some snare rolls: + +@lilypond[quote,verbatim] +\drums { + \time 2/4 + sn16 sn8 sn16 sn8 sn8:32 ~ + sn8 sn8 sn4:32 ~ + sn4 sn8 sn16 sn16 + sn4 r4 +} +@end lilypond + +Sticking can be indicated by placing @code{^"R"} or @code{^"L"} +after the note. The @code{staff-padding} property may be +overridden to achieve a pleasing baseline. + +@lilypond[quote,verbatim] +\drums { + \repeat unfold 2 { + sn16 ^"L" sn^"R" sn^"L" sn^"L" sn^"R" sn^"L" sn^"R" sn^"R" + } +} +@end lilypond + + +@seealso +Snippets: @rlsr{Percussion}. + + +@node Pitched percussion +@unnumberedsubsubsec Pitched percussion + +Certain pitched percussion instruments (e.g. xylophone, +vibraphone, and timpani) are written using normal staves. +This is covered in other sections of the manual. + + +@seealso +@c TODO: possibly link to an alternate section of NR 3.5, if +@c "percussion in MIDI" gets a separate subsubsection for +@c pitched percussion sounds. -gp +Notation Reference: @ref{Percussion in MIDI}. + +Snippets: @rlsr{Percussion}. + + +@node Percussion staves +@unnumberedsubsubsec Percussion staves + +@cindex percussion +@cindex drums + +A percussion part for more than one instrument typically uses a +multiline staff where each position in the staff refers to one +piece of percussion. To typeset the music, the notes must be +interpreted in @code{DrumStaff} and @code{DrumVoice} context. + +@lilypond[quote,verbatim] +up = \drummode { + crashcymbal4 hihat8 halfopenhihat hh hh hh openhihat +} +down = \drummode { + bassdrum4 snare8 bd r bd sn4 +} +\new DrumStaff << + \new DrumVoice { \voiceOne \up } + \new DrumVoice { \voiceTwo \down } +>> +@end lilypond + +The above example shows verbose polyphonic notation. The short +polyphonic notation, described in @rlearning{I'm hearing Voices}, +can also be used if the voices are instantiated by hand first. +For example, + +@lilypond[quote,verbatim] +\new DrumStaff << + \new DrumVoice = "1" { s1*2 } + \new DrumVoice = "2" { s1*2 } + \drummode { + bd4 sn4 bd4 sn4 + << { + \repeat unfold 16 hh16 + } \\ { + bd4 sn4 bd4 sn4 + } >> + } +>> +@end lilypond + +There are also other layout possibilities. To use these, set the +property @code{drumStyleTable} in context @code{DrumVoice}. The +following variables have been predefined: + +@c FIXME: decide what to do about this table. (ie verbatim or not) +@table @code + +@item drums-style +This is the default. It typesets a typical drum kit on a +five-line staff: + +@lilypond[quote,line-width=10.0\cm] +nam = \lyricmode { + cymc cyms cymr hh hhc hho hhho hhp + cb hc bd sn ss tomh tommh tomml toml tomfh tomfl } +mus = \drummode { + cymc cyms cymr hh hhc hho hhho hhp \break + cb hc bd sn ss tomh tommh tomml toml tomfh tomfl s16 } +\score { + << \new DrumStaff \with { + \remove Bar_engraver + \remove Time_signature_engraver + \override Stem #'transparent = ##t + \override Stem #'Y-extent = ##f + \override VerticalAxisGroup #'minimum-Y-extent = #'(-4.0 . 5.0) + } \mus + \new Lyrics \nam + >> + \layout { + \context { + \Score + \override LyricText #'font-family = #'typewriter + \override BarNumber #'transparent =##T + } + } +} +@end lilypond + +The drum scheme supports six different toms. When there are fewer +toms, simply select the toms that produce the desired result. For +example, to get toms on the three middle lines you use +@code{tommh}, @code{tomml}, and @code{tomfh}. + +@item timbales-style +This typesets timbales on a two line staff: + +@lilypond[quote,ragged-right] +nam = \lyricmode { timh ssh timl ssl cb } +mus = \drummode { timh ssh timl ssl cb s16 } + +<< + \new DrumStaff \with { + \remove Bar_engraver + \remove Time_signature_engraver + \override Stem #'transparent = ##t + \override Stem #'Y-extent = ##f + \override StaffSymbol #'line-count = #2 + \override StaffSymbol #'staff-space = #2 + \override VerticalAxisGroup #'minimum-Y-extent = #'(-3.0 . 4.0) + drumStyleTable = #timbales-style + } \mus + \new Lyrics { + \override LyricText #'font-family = #'typewriter + \nam + } +>> +@end lilypond + +@item congas-style +This typesets congas on a two line staff: + +@lilypond[quote,ragged-right] +nam = \lyricmode { cgh cgho cghm ssh cgl cglo cglm ssl } +mus = \drummode { cgh cgho cghm ssh cgl cglo cglm ssl s16 } + +<< + \new DrumStaff \with { + \remove Bar_engraver + \remove Time_signature_engraver + drumStyleTable = #congas-style + \override StaffSymbol #'line-count = #2 + + %% this sucks; it will lengthen stems. + \override StaffSymbol #'staff-space = #2 + \override Stem #'transparent = ##t + \override Stem #'Y-extent = ##f + } \mus + \new Lyrics { + \override LyricText #'font-family = #'typewriter + \nam + } +>> +@end lilypond + +@item bongos-style +This typesets bongos on a two line staff: + +@lilypond[quote,ragged-right] +nam = \lyricmode { boh boho bohm ssh bol bolo bolm ssl } +mus = \drummode { boh boho bohm ssh bol bolo bolm ssl s16 } + +<< + \new DrumStaff \with { + \remove Bar_engraver + \remove Time_signature_engraver + \override StaffSymbol #'line-count = #2 + drumStyleTable = #bongos-style + + %% this sucks; it will lengthen stems. + \override StaffSymbol #'staff-space = #2 + \override Stem #'transparent = ##t + \override Stem #'Y-extent = ##f + } \mus + \new Lyrics { + \override LyricText #'font-family = #'typewriter + \nam + } +>> +@end lilypond + +@item percussion-style +To typeset all kinds of simple percussion on one line staves: + +@lilypond[quote,ragged-right] +nam = \lyricmode { tri trio trim gui guis guil cb cl tamb cab mar hc } +mus = \drummode { tri trio trim gui guis guil cb cl tamb cab mar hc s16 } + +<< + \new DrumStaff \with{ + \remove Bar_engraver + drumStyleTable = #percussion-style + \override StaffSymbol #'line-count = #1 + \remove Time_signature_engraver + \override Stem #'transparent = ##t + \override Stem #'Y-extent = ##f + } \mus + \new Lyrics { + \override LyricText #'font-family = #'typewriter + \nam + } +>> +@end lilypond +@end table + + +@node Custom percussion staves +@unnumberedsubsubsec Custom percussion staves + +If you do not like any of the predefined lists you can define your +own list at the top of your file. + +@lilypond[quote,verbatim] +#(define mydrums '( + (bassdrum default #f -1) + (snare default #f 0) + (hihat cross #f 1) + (pedalhihat xcircle "stopped" 2) + (lowtom diamond #f 3))) +up = \drummode { hh8 hh hh hh hhp4 hhp } +down = \drummode { bd4 sn bd toml8 toml } + +\new DrumStaff << + \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) + \new DrumVoice { \voiceOne \up } + \new DrumVoice { \voiceTwo \down } +>> +@end lilypond + + +@snippets + +FIXME: MOVE ALL THESE TO LSR! -gp + +Here are some examples: + +Two Woodblocks, entered with wbh (high woodblock) and wbl (low woodblock) + +@lilypond[quote,verbatim] +% These lines define the position of the woodblocks in the stave; +% if you like, you can change it or you can use special note heads +% for the woodblocks. +#(define mydrums '((hiwoodblock default #t 3) + (lowoodblock default #t -2))) + +woodstaff = { + % This defines a staff with only two lines. + % It also defines the positions of the two lines. + \override Staff.StaffSymbol #'line-positions = #'(-2 3) + + % This is neccessary; if not entered, the barline would be too short! + \override Staff.BarLine #'bar-size = #3 +} + +\new DrumStaff { + \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) + + % with this you load your new drum style table + \woodstaff + + \drummode { + \time 2/4 + wbl8 wbl16 wbl wbh8-> wbl | + wbl8 wbl16 wbh-> ~ wbh wbl16 r8 | + } +} +@end lilypond + +Note that in this special case the length of the barline must +altered with @code{\override Staff.BarLine #'bar-size #number}. +Otherwise it would be too short. And you have also to define the +positions of the two stafflines. For more information about these +delicate things have a look at @ref{Staff symbol}. + +A tambourine, entered with @q{tamb}: + +@lilypond[quote,verbatim] +#(define mydrums '((tambourine default #t 0))) + +tambustaff = { + \override Staff.StaffSymbol #'line-positions = #'( 0 ) + \override Staff.BarLine #'bar-size = #3 + \set DrumStaff.instrumentName = #"Tambourine" +} + +\new DrumStaff { + \tambustaff + \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) + + \drummode { + \time 6/8 + tamb8. tamb16 tamb8 tamb tamb tamb | + tamb4. tamb8 tamb tamb | + % the trick with the scaled duration and the shorter rest + % is neccessary for the correct ending of the trill-span! + tamb2.*5/6 \startTrillSpan s8 \stopTrillSpan | + } +} +@end lilypond + +Music for Tam-Tam (entered with @q{tt}): + +@lilypond[quote,verbatim] +#(define mydrums '((tamtam default #t 0))) + +tamtamstaff = { + \override Staff.StaffSymbol #'line-positions = #'( 0 ) + \override Staff.BarLine #'bar-size = #3 + \set DrumStaff.instrumentName = #"Tamtam" +} + +\new DrumStaff { + \tamtamstaff + \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) + + \drummode { + tt 1 \pp \laissezVibrer + } +} +@end lilypond + +Two different bells, entered with @q{cb} (cowbell) and @q{rb} (ridebell) + +@lilypond[quote,verbatim] +#(define mydrums '((ridebell default #t 3) + (cowbell default #t -2))) + +bellstaff = { + \override DrumStaff.StaffSymbol #'line-positions = #'(-2 3) + \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) + \override Staff.BarLine #'bar-size = #3 + \set DrumStaff.instrumentName = #"Different Bells" +} + +\new DrumStaff { + \bellstaff + \drummode { + \time 2/4 + rb8 rb cb cb16 rb-> ~ | + rb16 rb8 rb16 cb8 cb | + } +} +@end lilypond + +Here an short example by maestro Stravinsky (from @q{L'histoire du Soldat}) + +@lilypond[quote,verbatim] +#(define mydrums '((bassdrum default #t 4) + (snare default #t -4) + (tambourine default #t 0))) + +global = { + \time 3/8 s4. + \time 2/4 s2*2 + \time 3/8 s4. + \time 2/4 s2 +} + +drumsA = { + \context DrumVoice << + { \global } + { \drummode { + \autoBeamOff + \stemDown sn8 \stemUp tamb s8 | + sn4 \stemDown sn4 | + \stemUp tamb8 \stemDown sn8 \stemUp sn16 \stemDown sn \stemUp sn8 | + \stemDown sn8 \stemUp tamb s8 | + \stemUp sn4 s8 \stemUp tamb + } + } + >> +} + +drumsB = { + \drummode { + s4 bd8 s2*2 s4 bd8 s4 bd8 s8 + } +} + +\layout { + indent = #40 +} + +\score { + \new StaffGroup << + \new DrumStaff { + \set DrumStaff.instrumentName = \markup { + \column { + "Tambourine" + "et" + "caisse claire s. timbre" + } + } + \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) + \drumsA + } + + \new DrumStaff { + \set DrumStaff.instrumentName = #"Grosse Caisse" + \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) + \drumsB } + >> +} +@end lilypond + + +@seealso +Snippets: @rlsr{Percussion}. + +Internals Reference: @rinternals{DrumStaff}, @rinternals{DrumVoice}. + + +@c TODO: check name -gp +@node Ghost notes +@unnumberedsubsubsec Ghost notes + +Ghost notes for drums and percussion may be created using the +@code{\parenthesize} command detailed in @ref{Parentheses}. +However, the default @code{\drummode} does not include the +@code{Parenthesis_engraver} plugin which allows this. + +@lilypond[quote,ragged-right,verbatim,fragment] +\new DrumStaff \with { + \consists "Parenthesis_engraver" +} +<< + \context DrumVoice = "1" { s1 } + \context DrumVoice = "2" { s1 } + \drummode { + << + { + hh8[ hh] hh16 + < \parenthesize sn > hh + < \parenthesize sn > hh8 hh + } \\ + { + bd4 r4 bd8 bd r8 bd + } + >> + } +>> +@end lilypond + +@noindent +Also note that you must add chords (@code{< >} brackets) +around each @code{\parenthesize} statement. + + +@seealso +Snippets: @rlsr{Percussion}. diff --git a/Documentation/notation/pitches.itely b/Documentation/notation/pitches.itely new file mode 100644 index 0000000000..f6e853d14b --- /dev/null +++ b/Documentation/notation/pitches.itely @@ -0,0 +1,2493 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + + +@node Pitches +@section Pitches + +@lilypondfile[quote]{pitches-headword.ly} + +This section discusses how to specify the pitch of notes. There +are three steps to this process: input, modification, and output. + +@menu +* Writing pitches:: +* Changing multiple pitches:: +* Displaying pitches:: +* Note heads:: +@end menu + + +@node Writing pitches +@subsection Writing pitches + +This section discusses how to input pitches. There are two +different ways to place notes in octaves: absolute and relative +mode. In most cases, relative mode will be more convenient. + +@menu +* Absolute octave entry:: +* Relative octave entry:: +* Accidentals:: +* Note names in other languages:: +@end menu + + +@node Absolute octave entry +@unnumberedsubsubsec Absolute octave entry + +@cindex pitch names +@cindex pitches +@cindex absolute +@cindex absolute octave specification +@cindex octave specification, absolute +@cindex absolute octave entry +@cindex octave entry, absolute + +A pitch name is specified using lowercase letters@tie{}@code{a} +through@tie{}@code{g}. The note names @code{c} to @code{b} are +engraved in the octave below middle C. + +@c don't use c' here. +@lilypond[verbatim,quote,fragment] +\clef bass +c d e f +g a b c +d e f g +@end lilypond + +@cindex octave changing mark + +@funindex ' +@funindex , + +Other octaves may be specified with a single quote@tie{}(@code{'}) +or comma@tie{}(@code{,}) character. Each@tie{}@code{'} raises the +pitch by one octave; each@tie{}@code{,} lowers the pitch by an +octave. + +@lilypond[verbatim,quote,fragment] +\clef treble +c' c'' e' g +d'' d' d c +\clef bass +c, c,, e, g +d,, d, d c +@end lilypond + + +@seealso +Music Glossary: +@rglos{Pitch names}. + +Snippets: +@rlsr{Pitches}. + + +@node Relative octave entry +@unnumberedsubsubsec Relative octave entry + +@cindex relative +@cindex relative octave entry +@cindex octave entry, relative +@cindex relative octave specification +@cindex ocatve specification, relative + +@funindex relative +@funindex \relative + +When octaves are specified in absolute mode it is easy to +accidentally put a pitch in the wrong octave. Relative octave +mode reduces these errors since most of the time it is not +necessary to indicate any octaves at all. Furthermore, in +absolute mode a single mistake may be difficult to spot, while in +relative mode a single error puts the rest of the piece off by one +octave. + +@example +\relative @var{startpitch} @var{musicexpr} +@end example + +In relative mode, each note is assumed to be as close to the +previous note as possible. This means that the octave of each +pitch inside @var{musicexpr} is calculated as follows: + +@itemize +@item +If no octave changing mark is used on a pitch, its octave is +calculated so that the interval with the previous note is less +than a fifth. This interval is determined without considering +accidentals. + +@item +An octave changing mark@tie{}@code{'} or@tie{}@code{,} can be +added to respectively raise or lower a pitch by an extra octave, +relative to the pitch calculated without an octave mark. + +@item +Multiple octave changing marks can be used. For example, +@code{''}@tie{}and@tie{}@code{,,} will alter the pitch by two +octaves. + +@item +The pitch of the first note is relative to +@code{@var{startpitch}}. @var{startpitch} is specified in +absolute octave mode, and it is recommended that it be a octave of +@code{c}. + +@end itemize + +Here is the relative mode shown in action: + +@lilypond[verbatim,quote] +\relative c { + \clef bass + c d e f + g a b c + d e f g +} +@end lilypond + +Octave changing marks are used for intervals greater than a +fourth: + +@lilypond[verbatim,quote] +\relative c'' { + c g c f, + c' a, e'' c +} +@end lilypond + +A note sequence without a single octave mark can nevertheless span +large intervals: + +@lilypond[verbatim,quote] +\relative c { + c f b e + a d g c +} +@end lilypond + +When @code{\relative} blocks are nested, the innermost +@code{\relative} block applies. + +@lilypond[verbatim,quote] +\relative c' { + c d e f + \relative c'' { + c d e f + } +} +@end lilypond + +@code{\relative} has no effect on @code{\chordmode} blocks. + +@lilypond[verbatim,quote] +\new Staff { + \relative c''' { + \chordmode { c1 } + } + \chordmode { c1 } +} +@end lilypond + +@code{\relative} is not allowed inside of @code{\chordmode} blocks. + +Music inside a @code{\transpose} block is absolute unless a +@code{\relative} is included. + +@lilypond[verbatim,quote] +\relative c' { + d e + \transpose f g { + d e + \relative c' { + d e + } + } +} +@end lilypond + + +@cindex chords and relative octave entry +@cindex relative octave entry and chords + +If the preceding item is a chord, the first note of the chord is +used as the reference point for the octave placement of a +following note or chord. Inside chords, the next note is always +relative to the preceding one. Examine the next example +carefully, paying attention to the @code{c} notes. + +@lilypond[verbatim,quote] +\relative c' { + c + + + +} +@end lilypond + +As explained above, the octave of pitches is calculated only with +the note names, regardless of any alterations. Therefore, an +E-double-sharp following a B will be placed higher, while an +F-double-flat will be placed lower. In other words, a +double-augmented fourth is considered a smaller interval than a +double-diminished fifth, regardless of the number of semitones +that each interval contains. + +@lilypond[verbatim,quote] +\relative c'' { + c2 fis + c2 ges + b2 eisis + b2 feses +} +@end lilypond + + +@seealso +Music Glossary: +@rglos{fifth}, +@rglos{interval}, +@rglos{Pitch names}. + +Notation Reference: +@ref{Octave checks}. + +Snippets: +@rlsr{Pitches}. + +Internals Reference: +@rinternals{RelativeOctaveMusic}. + + +@cindex relative octave entry and transposition +@cindex transposition and relative octave entry + +@funindex \transpose +@funindex transpose +@funindex \chordmode +@funindex chordmode +@funindex \relative +@funindex relative + + +@c DEPRECATED +If no @var{startpitch} is specified for @code{\relative}, +then@tie{}@code{c'} is assumed. However, this is a deprecated +option and may disappear in future versions, so its use is +discouraged. + + + +@node Accidentals +@unnumberedsubsubsec Accidentals + +@cindex accidental +@cindex key signature +@cindex clef + +@c duplicated in Key signature and Accidentals +@warning{New users are sometimes confused about accidentals and +key signatures. In LilyPond, note names are the raw input; key +signatures and clefs determine how this raw input is displayed. +An unaltered note like@tie{}@code{c} means @q{C natural}, +regardless of the key signature or clef. For more information, +see @rlearning{Accidentals and key signatures}.} + +@cindex note names, Dutch +@cindex note names, default +@cindex default note names +@cindex sharp +@cindex flat +@cindex double sharp +@cindex sharp, double +@cindex double flat +@cindex flat, double +@cindex natural sign +@cindex natural pitch + +A @notation{sharp} pitch is made by adding @code{is} to the note +name, and a @notation{flat} pitch by adding @code{es}. As you +might expect, a @notation{double sharp} or @notation{double flat} +is made by adding @code{isis} or @code{eses}. This syntax is +derived from Dutch note naming conventions. To use other names +for accidentals, see @ref{Note names in other languages}. + +@lilypond[verbatim,quote,relative=2] +ais1 aes aisis aeses +@end lilypond + +A natural will cancel the effect of an accidental or key +signature. However, naturals are not encoded into the note name +syntax with a suffix; a natural pitch is shown as a simple note +name: + +@lilypond[verbatim,quote,relative=2] +a4 aes a2 +@end lilypond + +@cindex quarter tones +@cindex semi-flats +@cindex semi-sharps + +Quarter tones may be added; the following is a series of Cs with +increasing pitches: + +@lilypond[verbatim,quote,relative=2] +ceseh1 ces ceh c cih cis cisih +@end lilypond + + + +@cindex accidental, reminder +@cindex accidental, cautionary +@cindex accidental, parenthesized +@cindex reminder accidental +@cindex cautionary accidental +@cindex parenthesized accidental + +@funindex ? +@funindex ! + + +Normally accidentals are printed automatically, but you may also +print them manually. A reminder accidental can be forced by +adding an exclamation mark@tie{}@code{!} after the pitch. A +cautionary accidental (i.e., an accidental within parentheses) can +be obtained by adding the question mark@tie{}@code{?} after the +pitch. These extra accidentals can also be used to produce +natural signs. + +@lilypond[verbatim,quote,relative=2] +cis cis cis! cis? c c c! c? +@end lilypond + +@cindex accidental on tied note +@cindex tied note, accidental + +Accidentals on tied notes are only printed at the beginning of a +new system: + +@lilypond[verbatim,quote,relative=2] +cis1 ~ cis ~ +\break +cis +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{preventing-extra-naturals-from-being-automatically-added.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{makam-example.ly} + + +@seealso +Music Glossary: +@rglos{sharp}, +@rglos{flat}, +@rglos{double sharp}, +@rglos{double flat}, +@rglos{Pitch names}, +@rglos{quarter tone}. + +Learning Manual: +@rlearning{Accidentals and key signatures}. + +Notation Reference: +@ref{Automatic accidentals}, +@ref{Annotational accidentals (musica ficta)}, +@ref{Note names in other languages}. + +Snippets: +@rlsr{Pitches}. + +Internals Reference: +@rinternals{Accidental_engraver}, +@rinternals{Accidental}, +@rinternals{AccidentalCautionary}, +@rinternals{accidental-interface}. + + +@cindex accidental, quarter-tone +@cindex quarter-tone accidental + +@knownissues + +There are no generally accepted standards for denoting +quarter-tone accidentals, so LilyPond's symbol does not conform to +any standard. + + + +@node Note names in other languages +@unnumberedsubsubsec Note names in other languages + +@cindex note names, other languages +@cindex pitch names, other languages +@cindex language, note names in other +@cindex language, pitch names in other + +There are predefined sets of note and accidental names for various +other languages. To use them, include the language-specific init +file listed below. For example, to use English note names, add +@code{@w{\include "english.ly"}} to the input file. + +@warning{Because some other include files (such as @code{@w{predefined-fretboards.ly}}) +use default (Nederlands) note names, the @code{@bs{}include} +command for the language file should be placed after all other +LilyPond distribution files.} + +The available language files and the note names they define are: + +@quotation +@multitable {@file{nederlands.ly}} {do re mi fa sol la sib si} +@headitem Language File + @tab Note Names +@item @file{nederlands.ly} + @tab c d e f g a bes b +@item @file{arabic.ly} + @tab do re mi fa sol la sib si +@item @file{catalan.ly} + @tab do re mi fa sol la sib si +@item @file{deutsch.ly} + @tab c d e f g a b h +@item @file{english.ly} + @tab c d e f g a bf b +@item @file{espanol.ly} + @tab do re mi fa sol la sib si +@item @file{italiano.ly} + @tab do re mi fa sol la sib si +@item @file{norsk.ly} + @tab c d e f g a b h +@item @file{portugues.ly} + @tab do re mi fa sol la sib si +@item @file{suomi.ly} + @tab c d e f g a b h +@item @file{svenska.ly} + @tab c d e f g a b h +@item @file{vlaams.ly} + @tab do re mi fa sol la sib si +@end multitable +@end quotation + +@noindent +and the accidental suffixes they define are: + +@quotation +@multitable {@file{nederlands.ly}} {-s/-sharp} {-ess/-es} {-ss/-x/-sharpsharp} {-essess/-eses} +@headitem Language File + @tab sharp @tab flat @tab double sharp @tab double flat +@item @file{nederlands.ly} + @tab -is @tab -es @tab -isis @tab -eses +@item @file{arabic.ly} + @tab -d @tab -b @tab -dd @tab -bb +@item @file{catalan.ly} + @tab -d/-s @tab -b @tab -dd/-ss @tab -bb +@item @file{deutsch.ly} + @tab -is @tab -es @tab -isis @tab -eses +@item @file{english.ly} + @tab -s/-sharp @tab -f/-flat @tab -ss/-x/-sharpsharp + @tab -ff/-flatflat +@item @file{espanol.ly} + @tab -s @tab -b @tab -ss/-x @tab -bb +@item @file{italiano.ly} + @tab -d @tab -b @tab -dd @tab -bb +@item @file{norsk.ly} + @tab -iss/-is @tab -ess/-es @tab -ississ/-isis + @tab -essess/-eses +@item @file{portugues.ly} + @tab -s @tab -b @tab -ss @tab -bb +@item @file{suomi.ly} + @tab -is @tab -es @tab -isis @tab -eses +@item @file{svenska.ly} + @tab -iss @tab -ess @tab -ississ @tab -essess +@item @file{vlaams.ly} + @tab -k @tab -b @tab -kk @tab -bb +@end multitable +@end quotation + +In Dutch, @code{aes} is contracted to @code{as}, but both forms +are accepted in LilyPond. Similarly, both @code{es} and +@code{ees} are accepted. This also applies to +@code{aeses}@tie{}/@tie{}@code{ases} and +@code{eeses}@tie{}/@tie{}@code{eses}. Sometimes only these +contracted names are defined in the corresponding language files. + +@lilypond[verbatim,quote,relative=2] +a2 as e es a ases e eses +@end lilypond + + +@cindex microtones +@cindex semi-sharp +@cindex semi-flat +@cindex sesqui-sharp +@cindex sesqui-flat + +Some music uses microtones whose alterations are fractions of a +@q{normal} sharp or flat. The note names for quarter-tones +defined in the various language files are listed in the following +table. Here the prefixes @notation{semi-} and @notation{sesqui-} +mean @q{half} and @q{one and a half}, respectively. For the other +languages, no special names have been defined yet. + +@quotation +@multitable {@file{nederlands.ly}} {@b{semi-sharp}} {@b{semi-flat}} {@b{sesqui-sharp}} {@b{sesqui-flat}} +@headitem Language File + @tab semi-sharp @tab semi-flat @tab sesqui-sharp @tab sesqui-flat + +@item @file{nederlands.ly} + @tab -ih @tab -eh @tab -isih @tab -eseh +@item @file{arabic.ly} + @tab -sd @tab -sb @tab -dsd @tab -bsb +@item @file{deutsch.ly} + @tab -ih @tab -eh @tab -isih @tab -eseh +@item @file{english.ly} + @tab -qs @tab -qf @tab -tqs @tab -tqf +@item @file{espanol.ly} + @tab -cs @tab -cb @tab -tcs @tab -tcb +@item @file{italiano.ly} + @tab -sd @tab -sb @tab -dsd @tab -bsb +@item @file{portugues.ly} + @tab -sqt @tab -bqt @tab -stqt @tab -btqt +@end multitable +@end quotation + + +@seealso +Music Glossary: +@rglos{Pitch names}. + +Snippets: +@rlsr{Pitches}. + + +@node Changing multiple pitches +@subsection Changing multiple pitches + +This section discusses how to modify pitches. + +@menu +* Octave checks:: +* Transpose:: +@end menu + +@node Octave checks +@unnumberedsubsubsec Octave checks + +@cindex octave correction +@cindex octave check +@cindex control pitch + +@funindex = +@funindex \octaveCheck +@funindex octaveCheck +@funindex controlpitch + +In relative mode, it is easy to forget an octave changing mark. +Octave checks make such errors easier to find by displaying a +warning and correcting the octave if a note is found in an +unexpected octave. + +To check the octave of a note, specify the absolute octave after +the @code{=}@tie{}symbol. This example will generate a warning +(and change the pitch) because the second note is the absolute +octave @code{d''} instead of @code{d'} as indicated by the octave +correction. + +@lilypond[verbatim,quote] +\relative c'' { + c2 d='4 d + e2 f +} +@end lilypond + +The octave of notes may also be checked with the +@code{\octaveCheck}@tie{}@var{controlpitch} command. +@var{controlpitch} is specified in absolute mode. This checks +that the interval between the previous note and the +@var{controlpitch} is within a fourth (i.e., the normal +calculation of relative mode). If this check fails, a warning is +printed, but the previous note is not changed. Future notes are +relative to the @var{controlpitch}. + +@lilypond[verbatim,quote] +\relative c'' { + c2 d + \octaveCheck c' + e2 f +} +@end lilypond + +Compare the two bars below. The first and third @code{\octaveCheck} +checks fail, but the second one does not fail. + +@lilypond[verbatim,quote] +\relative c'' { + c4 f g f + + c4 + \octaveCheck c' + f + \octaveCheck c' + g + \octaveCheck c' + f +} +@end lilypond + + +@seealso +Snippets: +@rlsr{Pitches}. + +Internals Reference: +@rinternals{RelativeOctaveCheck}. + + +@node Transpose +@unnumberedsubsubsec Transpose + +@cindex transpose +@cindex transposing +@cindex transposition +@cindex transposition of pitches +@cindex transposition of notes +@cindex pitches, transposition of +@cindex notes, transposition of + +@funindex \transpose +@funindex transpose + +A music expression can be transposed with @code{\transpose}. The +syntax is + +@example +\transpose @var{frompitch} @var{topitch} @var{musicexpr} +@end example + +@noindent +This means that @var{musicexpr} is transposed by the interval +between the pitches @var{frompitch} and @var{topitch}: any note +with pitch @var{frompitch} is changed to @var{topitch} and any +other note is transposed by the same interval. Both pitches are +entered in absolute mode. + +@warning{Music inside a @code{@bs{}transpose} block is absolute +unless a @code{@bs{}relative} is included in the block.} + +Consider a piece written in the key of D-major. It can be +transposed up to E-major; note that the key signature is +automatically transposed as well. + +@lilypond[verbatim,quote] +\transpose d e { + \relative c' { + \key d \major + d4 fis a d + } +} +@end lilypond + +@cindex transposing instruments +@cindex instruments, transposing + +If a part written in C (normal @notation{concert pitch}) is to be +played on the A clarinet (for which an A is notated as a C and +thus sounds a minor third lower than notated), the appropriate +part will be produced with: + +@lilypond[verbatim,quote] +\transpose a c' { + \relative c' { + \key c \major + c4 d e g + } +} +@end lilypond + +@noindent +Note that we specify @w{@code{\key c \major}} explicitly. If we +do not specify a key signature, the notes will be transposed but +no key signature will be printed. + +@code{\transpose} distinguishes between enharmonic pitches: both +@w{@code{\transpose c cis}} or @w{@code{\transpose c des}} will +transpose up a semitone. The first version will print sharps and +the notes will remain on the same scale step, the second version +will print flats on the scale step above. + +@lilypond[verbatim,quote] +music = \relative c' { c d e f } +\new Staff { + \transpose c cis { \music } + \transpose c des { \music } +} +@end lilypond + + +@code{\transpose} may also be used in a different way, to input +written notes for a transposing instrument. The previous examples +show how to enter pitches in C (or @notation{concert pitch}) and +typeset them for a transposing instrument, but the opposite is +also possible if you for example have a set of instrumental parts +and want to print a conductor's score. For example, when entering +music for a B-flat trumpet that begins on a notated E (concert D), +one would write: + +@example +musicInBflat = @{ e4 @dots{} @} +\transpose c bes, \musicInBflat +@end example + +@noindent +To print this music in F (e.g., rearranging to a French horn) you +could wrap the existing music with another @code{\transpose}: + +@example +musicInBflat = @{ e4 @dots{} @} +\transpose f c' @{ \transpose c bes, \musicInBflat @} +@end example + +@noindent +For more information about transposing instruments, +see @ref{Instrument transpositions}. + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{transposing-pitches-with-minimum-accidentals-smart-transpose.ly} + + +@seealso +Notation Reference: +@ref{Relative octave entry}, +@ref{Instrument transpositions}. + +Snippets: +@rlsr{Pitches}. + +Internals Reference: +@rinternals{TransposedMusic}. + + +@funindex \transpose +@funindex transpose +@funindex \chordmode +@funindex chordmode +@funindex \relative +@funindex relative + +@knownissues + +The relative conversion will not affect @code{\transpose}, +@code{\chordmode} or @code{\relative} sections in its argument. +To use relative mode within transposed music, an additional +@code{\relative} must be placed inside @code{\transpose}. + +@node Displaying pitches +@subsection Displaying pitches + +This section discusses how to alter the output of pitches. + +@menu +* Clef:: +* Key signature:: +* Ottava brackets:: +* Instrument transpositions:: +* Automatic accidentals:: +* Ambitus:: +@end menu + + +@node Clef +@unnumberedsubsubsec Clef + +@cindex G clef +@cindex C clef +@cindex F clef +@cindex treble clef +@cindex violin clef +@cindex alto clef +@cindex tenor clef +@cindex bass clef +@cindex french clef +@cindex soprano clef +@cindex mezzosoprano clef +@cindex baritone clef +@cindex varbaritone clef +@cindex subbass clef +@cindex clef +@cindex ancient clef +@cindex clef, ancient +@cindex clef, G +@cindex clef, C +@cindex clef, F +@cindex clef, treble +@cindex clef, violin +@cindex clef, alto +@cindex clef, tenor +@cindex clef, bass +@cindex clef, french +@cindex clef, soprano +@cindex clef, mezzosoprano +@cindex clef, baritone +@cindex clef, varbaritone +@cindex subbass clef, subbass + +@funindex \clef +@funindex clef + +The clef may be altered. Middle C is shown in every example. + +@lilypond[verbatim,quote,relative=1] +\clef treble +c2 c +\clef alto +c2 c +\clef tenor +c2 c +\clef bass +c2 c +@end lilypond + +Other clefs include: + +@lilypond[verbatim,quote,relative=1] +\clef french +c2 c +\clef soprano +c2 c +\clef mezzosoprano +c2 c +\clef baritone +c2 c + +\break + +\clef varbaritone +c2 c +\clef subbass +c2 c +\clef percussion +c2 c +\clef tab +c2 c + +\break + +\clef G +c2 c +\clef F +c2 c +\clef C +c2 c + +@end lilypond + +Further supported clefs are described under @ref{Mensural clefs} +and @ref{Gregorian clefs}. + +@cindex transposing clefs +@cindex clef, transposing +@cindex octave transposition +@cindex choral tenor clef +@cindex tenor clef, choral + +By adding@tie{}@code{_8} or@tie{}@code{^8} to the clef name, the +clef is transposed one octave down or up, respectively, +and@tie{}@code{_15} and@tie{}@code{^15} transpose by two octaves. +The clef name must be enclosed in quotes when it contains +underscores or digits. + +@lilypond[verbatim,quote,relative=2] +\clef treble +c2 c +\clef "treble_8" +c2 c +\clef "bass^15" +c2 c +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{tweaking-clef-properties.ly} + + +@seealso +Notation Reference: +@ref{Mensural clefs}, @ref{Gregorian clefs}. + +Snippets: +@rlsr{Pitches}. + +Internals Reference: +@rinternals{Clef_engraver}, +@rinternals{Clef}, +@rinternals{OctavateEight}, +@rinternals{clef-interface}. + + +@node Key signature +@unnumberedsubsubsec Key signature + +@cindex key signature + +@funindex \key +@funindex key + +@c duplicated in Key signature and Accidentals +@warning{New users are sometimes confused about accidentals and +key signatures. In LilyPond, note names are the raw input; key +signatures and clefs determine how this raw input is displayed. +An unaltered note like@tie{}@code{c} means @q{C natural}, +regardless of the key signature or clef. For more information, +see @rlearning{Accidentals and key signatures}.} + +The key signature indicates the tonality in which a piece is +played. It is denoted by a set of alterations (flats or sharps) +at the start of the staff. The key signature may be altered: + +@example +\key @var{pitch} @var{mode} +@end example + +@funindex \major +@funindex major +@funindex \minor +@funindex minor +@funindex \ionian +@funindex ionian +@funindex \locrian +@funindex locrian +@funindex \aeolian +@funindex aeolian +@funindex \mixolydian +@funindex mixolydian +@funindex \lydian +@funindex lydian +@funindex \phrygian +@funindex phrygian +@funindex \dorian +@funindex dorian + +@cindex church modes +@cindex modes +@cindex major +@cindex minor +@cindex ionian +@cindex locrian +@cindex aeolian +@cindex mixolydian +@cindex lydian +@cindex phrygian +@cindex dorian + +@noindent +Here, @var{mode} should be @code{\major} or @code{\minor} to get a +key signature of @var{pitch}-major or @var{pitch}-minor, +respectively. You may also use the standard mode names, also +called @notation{church modes}: @code{\ionian}, @code{\dorian}, +@code{\phrygian}, @code{\lydian}, @code{\mixolydian}, +@code{\aeolian}, and @code{\locrian}. + +@lilypond[verbatim,quote,relative=2] +\key g \major +fis1 +f +fis +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{non-traditional-key-signatures.ly} + + +@seealso +Music Glossary: +@rglos{church mode}, +@rglos{scordatura}. + +Learning Manual: +@rlearning{Accidentals and key signatures}. + +Snippets: +@rlsr{Pitches}. + +Internals Reference: +@rinternals{KeyChangeEvent}, +@rinternals{Key_engraver}, +@rinternals{Key_performer}, +@rinternals{KeyCancellation}, +@rinternals{KeySignature}, +@rinternals{key-cancellation-interface}, +@rinternals{key-signature-interface}. + + +@node Ottava brackets +@unnumberedsubsubsec Ottava brackets + +@cindex ottava +@cindex 15ma +@cindex 8va +@cindex 8ve +@cindex octavation + +@funindex set-octavation +@funindex \ottava +@funindex ottava + +@notation{Ottava brackets} introduce an extra transposition of an +octave for the staff: + +@lilypond[verbatim,quote,relative=2] +a'2 b +\ottava #1 +a b +\ottava #0 +a b +@end lilypond + +The @code{ottava} function also takes -1 (for 8va bassa), +2@tie{}(for 15ma), and -2 (for 15ma bassa) as arguments. + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{ottava-text.ly} + + +@seealso +Music Glossary: +@rglos{octavation}. + +Snippets: +@rlsr{Pitches}. + +Internals Reference: +@rinternals{Ottava_spanner_engraver}, +@rinternals{OttavaBracket}, +@rinternals{ottava-bracket-interface}. + + +@node Instrument transpositions +@unnumberedsubsubsec Instrument transpositions + +@cindex transposition, MIDI +@cindex transposition, instrument +@cindex transposing instrument +@cindex MIDI +@cindex MIDI transposition + +@funindex \transposition +@funindex transposition + +When typesetting scores that involve transposing instruments, some +parts can be typeset in a different pitch than the +@notation{concert pitch}. In these cases, the key of the +@notation{transposing instrument} should be specified; otherwise +the MIDI output and cues in other parts will produce incorrect +pitches. For more information about quotations, see +@ref{Quoting other voices}. + +@example +\transposition @var{pitch} +@end example + +The pitch to use for @code{\transposition} should correspond to +the real sound heard when a@tie{}@code{c'} written on the staff is +played by the transposing instrument. This pitch is entered in +absolute mode, so an instrument that produces a real sound which +is one tone higher than the printed music should use +@w{@code{\transposition d'}}. @code{\transposition} should +@emph{only} be used if the pitches are @emph{not} being entered in +concert pitch. + +Here are a few notes for violin and B-flat clarinet where the +parts have been entered using the notes and key as they appear in +each part of the conductor's score. The two instruments are +playing in unison. + +@lilypond[verbatim,quote] +\new GrandStaff << + \new Staff = "violin" { + \relative c'' { + \set Staff.instrumentName = #"Vln" + \set Staff.midiInstrument = #"violin" + % not strictly necessary, but a good reminder + \transposition c' + + \key c \major + g4( c8) r c r c4 + } + } + \new Staff = "clarinet" { + \relative c'' { + \set Staff.instrumentName = \markup { Cl (B\flat) } + \set Staff.midiInstrument = #"clarinet" + \transposition bes + + \key d \major + a4( d8) r d r d4 + } + } +>> +@end lilypond + +The @code{\transposition} may be changed during a piece. For +example, a clarinetist may switch from an A clarinet to a B-flat +clarinet. + +@lilypond[verbatim,quote,relative=2] +\set Staff.instrumentName = #"Cl (A)" +\key a \major +\transposition a +c d e f +\textLengthOn +s1*0^\markup { Switch to B\flat clarinet } +R1 + +\key bes \major +\transposition bes +c2 g +@end lilypond + + +@seealso +Music Glossary: +@rglos{concert pitch}, +@rglos{transposing instrument}. + +Notation Reference: +@ref{Quoting other voices}, @ref{Transpose}. + +Snippets: +@rlsr{Pitches}. + + +@node Automatic accidentals +@unnumberedsubsubsec Automatic accidentals + +@cindex accidental style +@cindex accidental style, default +@cindex accidentals +@cindex accidentals, automatic +@cindex automatic accidentals +@cindex default accidental style + +@funindex set-accidental-style +@funindex voice +@funindex default + +There are many different conventions on how to typeset +accidentals. LilyPond provides a function to specify which +accidental style to use. This function is called as follows: + +@example +\new Staff << + #(set-accidental-style 'voice) + @{ @dots{} @} +>> +@end example + +The accidental style applies to the current @code{Staff} by +default (with the exception of the styles @code{piano} and +@code{piano-cautionary}, which are explained below). Optionally, +the function can take a second argument that determines in which +scope the style should be changed. For example, to use the same +style in all staves of the current @code{StaffGroup}, use: + +@example +#(set-accidental-style 'voice 'StaffGroup) +@end example + +The following accidental styles are supported. To demonstrate +each style, we use the following example: + + +@lilypond[verbatim,quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 4 + \change Staff = up + cis' + \change Staff = down + + \change Staff = up + dis' | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'default) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'default) + \musicB + } + >> +} +@end lilypond + +Note that the last lines of this example can be replaced by the +following, as long as the same accidental style should be used in +both staves. + +@example +\new PianoStaff @{ + << + \context Staff = "up" @{ + %%% change the next line as desired: + #(set-accidental-style 'default 'Score) + \musicA + @} + \context Staff = "down" @{ + \musicB + @} + >> +@} +@end example + + +@c don't use verbatim in this table. +@table @code +@item default + +@cindex default accidental style +@cindex accidental style, default + +@funindex default + +This is the default typesetting behavior. It corresponds to +eighteenth-century common practice: accidentals are remembered to +the end of the measure in which they occur and only in their own +octave. Thus, in the example below, no natural signs are printed +before the@tie{}@code{b} in the second measure or the +last@tie{}@code{c}: + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 4 + \change Staff = up + cis' + \change Staff = down + + \change Staff = up + dis' | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'default) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'default) + \musicB + } + >> +} +@end lilypond + +@item voice + +@cindex accidental style, voice +@cindex voice accidental style +@cindex accidental style, modern +@cindex modern accidental style +@cindex accidental style, modern-cautionary +@cindex modern-cautionary accidental style + +@funindex voice + +The normal behavior is to remember the accidentals at +@code{Staff}-level. In this style, however, accidentals are +typeset individually for each voice. Apart from that, the rule is +similar to @code{default}. + +As a result, accidentals from one voice do not get canceled in +other voices, which is often an unwanted result: in the following +example, it is hard to determine whether the second@tie{}@code{a} +should be played natural or sharp. The @code{voice} option should +therefore be used only if the voices are to be read solely by +individual musicians. If the staff is to be used by one musician +(e.g., a conductor or in a piano score) then @code{modern} or +@code{modern-cautionary} should be used instead. + + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 4 + \change Staff = up + cis' + \change Staff = down + + \change Staff = up + dis' | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'voice) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'voice) + \musicB + } + >> +} +@end lilypond + +@item modern + +@cindex accidentals, modern style +@cindex modern style accidentals + +@funindex modern + +This rule corresponds to the common practice in the twentieth +century. It prints the same accidentals as @code{default}, with +two exceptions that serve to avoid ambiguity: after temporary +accidentals, cancellation marks are printed also in the following +measure (for notes in the same octave) and, in the same measure, +for notes in other octaves. Hence the naturals before +the@tie{}@code{b} and the@tie{}@code{c} in the second measure of +the upper staff: + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 4 + \change Staff = up + cis' + \change Staff = down + + \change Staff = up + dis' | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'modern) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'modern) + \musicB + } + >> +} +@end lilypond + +@item modern-cautionary + +@cindex accidentals, modern cautionary style +@cindex modern accidental style +@cindex modern cautionary accidental style +@cindex modern style accidentals +@cindex modern style cautionary accidentals + +@funindex modern-cautionary + +This rule is similar to @code{modern}, but the @q{extra} +accidentals (the ones not typeset by @code{default}) are typeset +as cautionary accidentals. They are by default printed with +parentheses, but they can also be printed in reduced size by +defining the @code{cautionary-style} property of +@code{AccidentalSuggestion}. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 4 + \change Staff = up + cis' + \change Staff = down + + \change Staff = up + dis' | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'modern-cautionary) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'modern-cautionary) + \musicB + } + >> +} +@end lilypond + +@item modern-voice + +@cindex accidental style, modern +@cindex accidentals, modern +@cindex accidentals, multivoice +@cindex modern accidental style +@cindex modern accidentals +@cindex multivoice accidentals + +@funindex modern-voice + +This rule is used for multivoice accidentals to be read both by +musicians playing one voice and musicians playing all voices. +Accidentals are typeset for each voice, but they @emph{are} +canceled across voices in the same @code{Staff}. Hence, +the@tie{}@code{a} in the last measure is canceled because the +previous cancellation was in a different voice, and +the@tie{}@code{d} in the lower staff is canceled because of the +accidental in a different voice in the previous measure: + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 4 + \change Staff = up + cis' + \change Staff = down + + \change Staff = up + dis' | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'modern-voice) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'modern-voice) + \musicB + } + >> +} +@end lilypond + +@cindex accidental style, cautionary, modern voice +@cindex accidental style, modern voice cautionary +@cindex accidental style, voice, modern cautionary + +@funindex modern-voice-cautionary + +@item modern-voice-cautionary + +This rule is the same as @code{modern-voice}, but with the extra +accidentals (the ones not typeset by @code{voice}) typeset as +cautionaries. Even though all accidentals typeset by +@code{default} @emph{are} typeset with this rule, some of them are +typeset as cautionaries. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 4 + \change Staff = up + cis' + \change Staff = down + + \change Staff = up + dis' | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'modern-voice-cautionary) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'modern-voice-cautionary) + \musicB + } + >> +} +@end lilypond + +@item piano + +@cindex accidental style, piano +@cindex accidentals, piano +@cindex piano accidental style +@cindex piano accidentals + +@funindex piano + +This rule reflects twentieth-century practice for piano notation. +Its behavior is very similar to @code{modern} style, but here +accidentals also get canceled across the staves in the same +@code{GrandStaff} or @code{PianoStaff}, hence all the +cancellations of the final notes. + +This accidental style applies to the current @code{GrandStaff} or +@code{PianoStaff} by default. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 4 + \change Staff = up + cis' + \change Staff = down + + \change Staff = up + dis' | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'piano) + \musicA + } + \context Staff = "down" { + \musicB + } + >> +} +@end lilypond + +@item piano-cautionary + +@cindex accidentals, piano cautionary +@cindex cautionary accidentals, piano +@cindex piano cautionary accidentals +@cindex accidental style, piano cautionary +@cindex cautionary accidental style, piano +@cindex piano cautionary accidental style + +@funindex piano-cautionary + +This is the same as @code{piano} but with the extra accidentals +typeset as cautionaries. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 4 + \change Staff = up + cis' + \change Staff = down + + \change Staff = up + dis' | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'piano-cautionary) + \musicA + } + \context Staff = "down" { + \musicB + } + >> +} +@end lilypond + + +@item neo-modern + +@cindex neo-modern accidental style +@cindex accidental style, neo-modern + +@funindex neo-modern + +This rule reproduces a common practice in contemporary music: +accidentals are printed like with @code{modern}, but they are printed +again if the same note appears later in the same measure -- except +if the note is immediately repeated. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 4 + \change Staff = up + cis' + \change Staff = down + + \change Staff = up + dis' | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'neo-modern) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'neo-modern) + \musicB + } + >> +} +@end lilypond + +@item neo-modern-cautionary + +@cindex neo-modern-cautionary accidental style +@cindex accidental style, neo-modern-cautionary + +@funindex neo-modern-cautionary + +This rule is similar to @code{neo-modern}, but the extra +accidentals are printed as cautionary accidentals. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 4 + \change Staff = up + cis' + \change Staff = down + + \change Staff = up + dis' | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'neo-modern-cautionary) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'neo-modern-cautionary) + \musicB + } + >> +} +@end lilypond + + +@item dodecaphonic + +@cindex dodecaphonic accidental style +@cindex dodecaphonic style, neo-modern + +@funindex dodecaphonic + +This rule reflects a practice introduced by composers at +the beginning of the 20th century, in an attempt to +abolish the hierarchy between natural and non-natural notes. +With this style, @emph{every} note gets an accidental sign, +including natural signs. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 4 + \change Staff = up + cis' + \change Staff = down + + \change Staff = up + dis' | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'dodecaphonic) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'dodecaphonic) + \musicB + } + >> +} +@end lilypond + + +@item teaching + +@cindex teaching accidental style +@cindex accidental style, teaching + +@funindex teaching + +This rule is intended for students, and makes it easy to create +scale sheets with automagically created cautionary accidentals. +Accidentals are printed like with @code{modern}, but cautionary +accidentals are added for all sharp or flat tones specified by the +key signature, except if the note is immediately repeated. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 4 + \change Staff = up + cis' + \change Staff = down + + \change Staff = up + dis' | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + \key fis \minor + #(set-accidental-style 'teaching) + \musicA + } + \context Staff = "down" { + \key fis \minor + #(set-accidental-style 'teaching) + \musicB + } + >> +} +@end lilypond + + + +@item no-reset + +@cindex accidental style, no reset +@cindex no reset accidental style + +@funindex no-reset + +This is the same as @code{default} but with accidentals lasting +@q{forever} and not only within the same measure: + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 4 + \change Staff = up + cis' + \change Staff = down + + \change Staff = up + dis' | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'no-reset) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'no-reset) + \musicB + } + >> +} +@end lilypond + +@item forget + +@cindex forget accidental style +@cindex accidental style, forget + +@funindex forget + +This is the opposite of @code{no-reset}: Accidentals are not +remembered at all -- and hence all accidentals are typeset +relative to the key signature, regardless of what came before in +the music. Unlike @code{dodecaphonic}, this rule never prints +any naturals. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 4 + \change Staff = up + cis' + \change Staff = down + + \change Staff = up + dis' | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'forget) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'forget) + \musicB + } + >> +} +@end lilypond +@end table + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{dodecaphonic-style-accidentals-for-each-note-including-naturals.ly} + + +@seealso +Snippets: +@rlsr{Pitches}. + +Internals Reference: +@rinternals{Accidental}, +@rinternals{Accidental_engraver}, +@rinternals{GrandStaff} and +@rinternals{PianoStaff}, +@rinternals{Staff}, +@rinternals{AccidentalSuggestion}, +@rinternals{AccidentalPlacement}, +@rinternals{accidental-suggestion-interface}. + + +@cindex accidentals and simultaneous notes +@cindex simultaneous notes and accidentals +@cindex accidentals in chords +@cindex chords, accidentals in + +@knownissues + +Simultaneous notes are considered to be entered in sequential +mode. This means that in a chord the accidentals are typeset as +if the notes in the chord happen one at a time, in the order in +which they appear in the input file. This is a problem when +accidentals in a chord depend on each other, which does not happen +for the default accidental style. The problem can be solved by +manually inserting@tie{}@code{!} and@tie{}@code{?} for the +problematic notes. + + +@node Ambitus +@unnumberedsubsubsec Ambitus + +@cindex ambitus +@cindex range of pitches +@cindex pitch range + +The term @notation{ambitus} (pl. ambitus) denotes a range of +pitches for a given voice in a part of music. It may also denote +the pitch range that a musical instrument is capable of playing. +Ambitus are printed on vocal parts so that performers can easily +determine if it matches their capabilities. + +Ambitus are denoted at the beginning of a piece near the initial +clef. The range is graphically specified by two note heads that +represent the lowest and highest pitches. Accidentals are only +printed if they are not part of the key signature. + +@lilypond[verbatim,quote] +\layout { + \context { + \Voice + \consists "Ambitus_engraver" + } +} + +\relative c'' { + aes c e2 + cis,1 +} +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{adding-ambitus-per-voice.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{ambitus-with-multiple-voices.ly} + + +@seealso +Music Glossary: +@rglos{ambitus}. + +Snippets: +@rlsr{Pitches}. + +Internals Reference: +@rinternals{Ambitus_engraver}, +@rinternals{Voice}, +@rinternals{Staff}, +@rinternals{Ambitus}, +@rinternals{AmbitusAccidental}, +@rinternals{AmbitusLine}, +@rinternals{AmbitusNoteHead}, +@rinternals{ambitus-interface}. + + +@knownissues + +There is no collision handling in the case of multiple per-voice +ambitus. + + +@node Note heads +@subsection Note heads + +This section suggests ways of altering note heads. + +@menu +* Special note heads:: +* Easy notation note heads:: +* Shape note heads:: +* Improvisation:: +@end menu + +@node Special note heads +@unnumberedsubsubsec Special note heads + +@cindex note heads, special +@cindex note heads, cross +@cindex note heads, diamond +@cindex note heads, parlato +@cindex note heads, harmonic +@cindex note heads, guitar +@cindex special note heads +@cindex cross note heads +@cindex diamond note heads +@cindex parlato note heads +@cindex harmonic note heads +@cindex guitar note heads +@cindex note head styles +@cindex styles, note heads + +@funindex cross + +Note heads may be altered: + +@lilypond[verbatim,quote,relative=2] +c4 b a b +\override NoteHead #'style = #'cross +c4 b a b +\revert NoteHead #'style +c4 d e f +@end lilypond + +There is a shorthand for diamond shapes which can only be used +inside chords: + +@lilypond[verbatim,quote,relative=2] +2 4 +@end lilypond + +To see all note head styles, see @ref{Note head styles}. + + +@seealso +Snippets: +@rlsr{Pitches}. + +Notation Reference: +@ref{Note head styles}, +@ref{Chorded notes}. + +Internals Reference: +@rinternals{note-event}, +@rinternals{Note_heads_engraver}, +@rinternals{Ledger_line_engraver}, +@rinternals{NoteHead}, +@rinternals{LedgerLineSpanner}, +@rinternals{note-head-interface}, +@rinternals{ledger-line-spanner-interface}. + + +@node Easy notation note heads +@unnumberedsubsubsec Easy notation note heads + +@cindex note heads, practice +@cindex practice note heads +@cindex note heads, easy notation +@cindex easy notation +@cindex Hal Leonard +@cindex beginners' music +@cindex music, beginners' +@cindex easy play note heads +@cindex note heads, easy play + +@funindex \easyHeadsOn +@funindex easyHeadsOn +@funindex \easyHeadsOff +@funindex easyHeadsOff + +The @q{easy play} note head includes a note name inside the head. +It is used in music for beginners. To make the letters readable, +it should be printed in a large font size. To print with a larger +font, see @ref{Setting the staff size}. + +@lilypond[verbatim,quote] +#(set-global-staff-size 26) +\relative c' { + \easyHeadsOn + c2 e4 f + g1 + \easyHeadsOff + c,1 +} +@end lilypond + + +@predefined +@code{\easyHeadsOn}, +@code{\easyHeadsOff}. +@endpredefined + + +@seealso +Notation Reference: +@ref{Setting the staff size}. + +Snippets: +@rlsr{Pitches}. + +Internals Reference: +@rinternals{note-event}, +@rinternals{Note_heads_engraver}, +@rinternals{NoteHead}, +@rinternals{note-head-interface}. + + +@node Shape note heads +@unnumberedsubsubsec Shape note heads + +@cindex note heads, shape +@cindex note heads, Aiken +@cindex note heads, sacred harp +@cindex shape notes +@cindex Aiken shape note heads +@cindex sacred harp note heads + +@funindex \key +@funindex key +@funindex \aikenHeads +@funindex aikenHeads +@funindex \sacredHarpHeads +@funindex sacredHarpHeads + +In shape note head notation, the shape of the note head +corresponds to the harmonic function of a note in the scale. This +notation was popular in nineteenth-century American song books. +Shape note heads can be produced: + +@lilypond[verbatim,quote,relative=2] +\aikenHeads +c, d e f g a b c +\sacredHarpHeads +c, d e f g a b c +@end lilypond + +Shapes are typeset according to the step in the scale, where the +base of the scale is determined by the @code{\key} command. + + +@predefined +@code{\aikenHeads}, +@code{\sacredHarpHeads}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{applying-note-head-styles-depending-on-the-step-of-the-scale.ly} + +To see all note head styles, see @ref{Note head styles}. + + +@seealso +Snippets: +@rlsr{Pitches}. + +Notation Reference: +@ref{Note head styles}. + +Internals Reference: +@rinternals{note-event}, +@rinternals{Note_heads_engraver}, +@rinternals{NoteHead}, +@rinternals{note-head-interface}. + + +@node Improvisation +@unnumberedsubsubsec Improvisation + +@cindex improvisation +@cindex slashed note heads +@cindex note heads, improvisation +@cindex note heads, slashed + +@funindex \improvisationOn +@funindex improvisationOn +@funindex \improvisationOff +@funindex improvisationOff + +Improvisation is sometimes denoted with slashed note heads, where +the performer may choose any pitch but should play the specified +rhythm. Such note heads can be created: + +@lilypond[verbatim,quote,relative=2] +\new Voice \with { + \consists "Pitch_squash_engraver" +} { + e8 e g a a16( bes) a8 g + \improvisationOn + e8 ~ + e2 ~ e8 f4 f8 ~ + f2 + \improvisationOff + a16( bes) a8 g e +} +@end lilypond + + +@predefined +@code{\improvisationOn}, +@code{\improvisationOff}. +@endpredefined + + +@seealso +Snippets: +@rlsr{Pitches}. + +Internals Reference: +@rinternals{Pitch_squash_engraver}, +@rinternals{Voice}, +@rinternals{RhythmicStaff}. + + diff --git a/Documentation/notation/programming-interface.itely b/Documentation/notation/programming-interface.itely new file mode 100644 index 0000000000..ecee99c8fd --- /dev/null +++ b/Documentation/notation/programming-interface.itely @@ -0,0 +1,1516 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + +@node Interfaces for programmers +@chapter Interfaces for programmers + +Advanced tweaks may be performed by using Scheme. If you are +not familiar with Scheme, you may wish to read our +@rlearning{Scheme tutorial}. + +@menu +* Music functions:: +* Programmer interfaces:: +* Building complicated functions:: +* Markup programmer interface:: +* Contexts for programmers:: +* Scheme procedures as properties:: +* Using Scheme code instead of \tweak:: +* Difficult tweaks:: +@end menu + + +@node Music functions +@section Music functions + +This section discusses how to create music functions within LilyPond. + +@menu +* Overview of music functions:: +* Simple substitution functions:: +* Paired substitution functions:: +* Mathematics in functions:: +* Void functions:: +* Functions without arguments:: +* Overview of available music functions:: +@end menu + +@node Overview of music functions +@subsection Overview of music functions + +Making a function which substitutes a variable into LilyPond +code is easy. The general form of these functions is + +@example +function = +#(define-music-function (parser location @var{var1} @var{var2}...@var{vari}... ) + (@var{var1-type?} @var{var2-type?}...@var{vari-type?}...) + #@{ + @emph{...music...} + #@}) +@end example + +@noindent +where + +@multitable @columnfractions .33 .66 +@item @var{vari} @tab @var{i}th variable +@item @var{vari-type?} @tab type of @var{i}th variable +@item @var{...music...} @tab normal LilyPond input, using + variables as @code{#$var1}, etc. +@end multitable + +There following input types may be used as variables +in a music function. This list is not exhaustive; see +other documentation specifically about Scheme for more +variable types. + +@multitable @columnfractions .33 .66 +@headitem Input type @tab @var{vari-type?} notation +@item Integer @tab @code{integer?} +@item Float (decimal number) @tab @code{number?} +@item Text string @tab @code{string?} +@item Markup @tab @code{markup?} +@item Music expression @tab @code{ly:music?} +@item A pair of variables @tab @code{pair?} +@end multitable + +The @code{parser} and @code{location} arguments are mandatory, +and are used in some advanced situations. The @code{parser} +argument is used to gain access to the value of another LilyPond +variable. The @code{location} argument +is used to set the @q{origin} of the music expression that is built +by the music function, so that in case of a syntax error LilyPond +can tell the user an appropriate place to look in the input file. + + +@node Simple substitution functions +@subsection Simple substitution functions + +Here is a simple example, + +@lilypond[quote,verbatim,ragged-right] +padText = #(define-music-function (parser location padding) (number?) + #{ + \once \override TextScript #'padding = #$padding + #}) + +\relative c''' { + c4^"piu mosso" b a b + \padText #1.8 + c4^"piu mosso" d e f + \padText #2.6 + c4^"piu mosso" fis a g +} +@end lilypond + +Music expressions may be substituted as well, + +@lilypond[quote,verbatim,ragged-right] +custosNote = #(define-music-function (parser location note) + (ly:music?) + #{ + \once \override Voice.NoteHead #'stencil = + #ly:text-interface::print + \once \override Voice.NoteHead #'text = + \markup \musicglyph #"custodes.mensural.u0" + \once \override Voice.Stem #'stencil = ##f + $note + #}) + +{ c' d' e' f' \custosNote g' } +@end lilypond + +Multiple variables may be used, + +@lilypond[quote,verbatim,ragged-right] +tempoPadded = #(define-music-function (parser location padding tempotext) + (number? string?) +#{ + \once \override Score.MetronomeMark #'padding = $padding + \tempo \markup { \bold $tempotext } +#}) + +\relative c'' { + \tempo \markup { "Low tempo" } + c4 d e f g1 + \tempoPadded #4.0 #"High tempo" + g4 f e d c1 +} +@end lilypond + + +@node Paired substitution functions +@subsection Paired substitution functions + +Some @code{\override} commands require a pair of numbers +(called a @code{cons cell} in Scheme). To pass these numbers +into a function, either use a @code{pair?} variable, or +insert the @code{cons} into the music function. + +@quotation +@example +manualBeam = +#(define-music-function (parser location beg-end) + (pair?) +#@{ + \once \override Beam #'positions = #$beg-end +#@}) + +\relative @{ + \manualBeam #'(3 . 6) c8 d e f +@} +@end example +@end quotation + +@noindent +or + +@lilypond[quote,verbatim,ragged-right] +manualBeam = +#(define-music-function (parser location beg end) + (number? number?) +#{ + \once \override Beam #'positions = #(cons $beg $end) +#}) + +\relative { + \manualBeam #3 #6 c8 d e f +} +@end lilypond + + +@node Mathematics in functions +@subsection Mathematics in functions + +Music functions can involve Scheme programming in +addition to simple substitution, + +@lilypond[quote,verbatim,ragged-right] +AltOn = #(define-music-function (parser location mag) (number?) + #{ \override Stem #'length = #$(* 7.0 mag) + \override NoteHead #'font-size = + #$(inexact->exact (* (/ 6.0 (log 2.0)) (log mag))) #}) + +AltOff = { + \revert Stem #'length + \revert NoteHead #'font-size +} + +{ c'2 \AltOn #0.5 c'4 c' + \AltOn #1.5 c' c' \AltOff c'2 } +@end lilypond + +@noindent +This example may be rewritten to pass in music expressions, + +@lilypond[quote,verbatim,ragged-right] +withAlt = #(define-music-function (parser location mag music) (number? ly:music?) + #{ \override Stem #'length = #$(* 7.0 mag) + \override NoteHead #'font-size = + #$(inexact->exact (* (/ 6.0 (log 2.0)) (log mag))) + $music + \revert Stem #'length + \revert NoteHead #'font-size #}) + +{ c'2 \withAlt #0.5 {c'4 c'} + \withAlt #1.5 {c' c'} c'2 } +@end lilypond + +@node Void functions +@subsection Void functions + +A music function must return a music expression, but sometimes we +may want to have a function which does not involve music (such as +turning off Point and Click). To do this, we return a @code{void} +music expression. + +That is why the form +that is returned is the @code{(make-music ...)}. With the +@code{'void} property set to @code{#t}, the parser is told to +actually disregard this returned music +expression. Thus the important part of the void music function is the +processing done by the function, not the music expression that is +returned. + +@example +noPointAndClick = +#(define-music-function (parser location) () + (ly:set-option 'point-and-click #f) + (make-music 'SequentialMusic 'void #t)) +... +\noPointAndClick % disable point and click +@end example + + +@node Functions without arguments +@subsection Functions without arguments + +In most cases a function without arguments should be written +with an variable, + +@example +dolce = \markup@{ \italic \bold dolce @} +@end example + +However, in rare cases it may be useful to create a music function +without arguments, + +@example +displayBarNum = +#(define-music-function (parser location) () + (if (eq? #t (ly:get-option 'display-bar-numbers)) + #@{ \once \override Score.BarNumber #'break-visibility = ##f #@} + #@{#@})) +@end example + +To actually display bar numbers where this function is called, +invoke @command{lilypond} with + +@example +lilypond -d display-bar-numbers FILENAME.ly +@end example + + +@node Overview of available music functions +@subsection Overview of available music functions + +@c fixme ; this should be move somewhere else? +The following commands are music functions + +@include identifiers.tely + + + +@node Programmer interfaces +@section Programmer interfaces + +This section contains information about mixing LilyPond +and Scheme. + +@menu +* Input variables and Scheme:: +* Internal music representation:: +@end menu + + +@node Input variables and Scheme +@subsection Input variables and Scheme + +The input format supports the notion of variables: in the following +example, a music expression is assigned to a variable with the name +@code{traLaLa}. + +@example +traLaLa = @{ c'4 d'4 @} +@end example + +@noindent + +There is also a form of scoping: in the following example, the +@code{\layout} block also contains a @code{traLaLa} variable, which is +independent of the outer @code{\traLaLa}. +@example +traLaLa = @{ c'4 d'4 @} +\layout @{ traLaLa = 1.0 @} +@end example +@c +In effect, each input file is a scope, and all @code{\header}, +@code{\midi}, and @code{\layout} blocks are scopes nested inside that +toplevel scope. + +Both variables and scoping are implemented in the GUILE module system. +An anonymous Scheme module is attached to each scope. An assignment of +the form +@example +traLaLa = @{ c'4 d'4 @} +@end example + +@noindent +is internally converted to a Scheme definition +@example +(define traLaLa @var{Scheme value of `@code{... }'}) +@end example + +This means that input variables and Scheme variables may be freely +mixed. In the following example, a music fragment is stored in the +variable @code{traLaLa}, and duplicated using Scheme. The result is +imported in a @code{\score} block by means of a second variable +@code{twice}: + +@lilypond[verbatim] +traLaLa = { c'4 d'4 } + +%% dummy action to deal with parser lookahead +#(display "this needs to be here, sorry!") + +#(define newLa (map ly:music-deep-copy + (list traLaLa traLaLa))) +#(define twice + (make-sequential-music newLa)) + +{ \twice } +@end lilypond + +@c Due to parser lookahead + +In this example, the assignment happens after parser has verified that +nothing interesting happens after @code{traLaLa = @{ ... @}}. Without +the dummy statement in the above example, the @code{newLa} definition +is executed before @code{traLaLa} is defined, leading to a syntax +error. + +The above example shows how to @q{export} music expressions from the +input to the Scheme interpreter. The opposite is also possible. By +wrapping a Scheme value in the function @code{ly:export}, a Scheme +value is interpreted as if it were entered in LilyPond syntax. +Instead of defining @code{\twice}, the example above could also have +been written as + +@example +... +@{ #(ly:export (make-sequential-music (list newLa))) @} +@end example + +Scheme code is evaluated as soon as the parser encounters it. To +define some Scheme code in a macro (to be called later), use +@ref{Void functions}, or + +@example +#(define (nopc) + (ly:set-option 'point-and-click #f)) + +... +#(nopc) +@{ c'4 @} +@end example + + +@knownissues + +Mixing Scheme and LilyPond variables is not possible with the +@code{--safe} option. + + +@node Internal music representation +@subsection Internal music representation + +When a music expression is parsed, it is converted into a set of +Scheme music objects. The defining property of a music object is that +it takes up time. Time is a rational number that measures the length +of a piece of music in whole notes. + +A music object has three kinds of types: +@itemize +@item +music name: Each music expression has a name. For example, a note +leads to a @rinternals{NoteEvent}, and @code{\simultaneous} leads to +a @rinternals{SimultaneousMusic}. A list of all expressions +available is in the Internals Reference manual, under +@rinternals{Music expressions}. + +@item +@q{type} or interface: Each music name has several @q{types} or +interfaces, for example, a note is an @code{event}, but it is also a +@code{note-event}, a @code{rhythmic-event}, and a +@code{melodic-event}. All classes of music are listed in the +Internals Reference, under +@rinternals{Music classes}. + +@item +C++ object: Each music object is represented by an object of the C++ +class @code{Music}. +@end itemize + +The actual information of a music expression is stored in properties. +For example, a @rinternals{NoteEvent} has @code{pitch} and +@code{duration} properties that store the pitch and duration of that +note. A list of all properties available is in the internals manual, +under @rinternals{Music properties}. + +A compound music expression is a music object that contains other +music objects in its properties. A list of objects can be stored in +the @code{elements} property of a music object, or a single @q{child} +music object in the @code{element} property. For example, +@rinternals{SequentialMusic} has its children in @code{elements}, +and @rinternals{GraceMusic} has its single argument in +@code{element}. The body of a repeat is stored in the @code{element} +property of @rinternals{RepeatedMusic}, and the alternatives in +@code{elements}. + + + +@node Building complicated functions +@section Building complicated functions + +This section explains how to gather the information necessary +to create complicated music functions. + +@menu +* Displaying music expressions:: +* Music properties:: +* Doubling a note with slurs (example):: +* Adding articulation to notes (example):: +@end menu + + +@node Displaying music expressions +@subsection Displaying music expressions + +@cindex internal storage +@cindex displaying music expressions +@cindex internal representation, displaying +@cindex displayMusic +@funindex \displayMusic + +When writing a music function it is often instructive to inspect how +a music expression is stored internally. This can be done with the +music function @code{\displayMusic} + +@example +@{ + \displayMusic @{ c'4\f @} +@} +@end example + +@noindent +will display + +@example +(make-music + 'SequentialMusic + 'elements + (list (make-music + 'EventChord + 'elements + (list (make-music + 'NoteEvent + 'duration + (ly:make-duration 2 0 1 1) + 'pitch + (ly:make-pitch 0 0 0)) + (make-music + 'AbsoluteDynamicEvent + 'text + "f"))))) +@end example + +By default, LilyPond will print these messages to the console along +with all the other messages. To split up these messages and save +the results of @code{\display@{STUFF@}}, redirect the output to +a file. + +@example +lilypond file.ly >display.txt +@end example + +With a bit of reformatting, the above information is +easier to read, + +@example +(make-music 'SequentialMusic + 'elements (list (make-music 'EventChord + 'elements (list (make-music 'NoteEvent + 'duration (ly:make-duration 2 0 1 1) + 'pitch (ly:make-pitch 0 0 0)) + (make-music 'AbsoluteDynamicEvent + 'text "f"))))) +@end example + +A @code{@{ ... @}} music sequence has the name @code{SequentialMusic}, +and its inner expressions are stored as a list in its @code{'elements} +property. A note is represented as an @code{EventChord} expression, +containing a @code{NoteEvent} object (storing the duration and +pitch properties) and any extra information (in this case, an +@code{AbsoluteDynamicEvent} with a @code{"f"} text property. + + +@node Music properties +@subsection Music properties + +The @code{NoteEvent} object is the first object of the +@code{'elements} property of @code{someNote}. + +@example +someNote = c' +\displayMusic \someNote +===> +(make-music + 'EventChord + 'elements + (list (make-music + 'NoteEvent + 'duration + (ly:make-duration 2 0 1 1) + 'pitch + (ly:make-pitch 0 0 0)))) +@end example + +The @code{display-scheme-music} function is the function used by +@code{\displayMusic} to display the Scheme representation of a music +expression. + +@example +#(display-scheme-music (first (ly:music-property someNote 'elements))) +===> +(make-music + 'NoteEvent + 'duration + (ly:make-duration 2 0 1 1) + 'pitch + (ly:make-pitch 0 0 0)) +@end example + +Then the note pitch is accessed through the @code{'pitch} property +of the @code{NoteEvent} object, + +@example +#(display-scheme-music + (ly:music-property (first (ly:music-property someNote 'elements)) + 'pitch)) +===> +(ly:make-pitch 0 0 0) +@end example + +The note pitch can be changed by setting this 'pitch property, + +@funindex \displayLilyMusic + +@example +#(set! (ly:music-property (first (ly:music-property someNote 'elements)) + 'pitch) + (ly:make-pitch 0 1 0)) ;; set the pitch to d'. +\displayLilyMusic \someNote +===> +d' +@end example + + +@node Doubling a note with slurs (example) +@subsection Doubling a note with slurs (example) + +Suppose we want to create a function which translates +input like @code{a} into @code{a( a)}. We begin +by examining the internal representation of the music +we want to end up with. + +@example +\displayMusic@{ a'( a') @} +===> +(make-music + 'SequentialMusic + 'elements + (list (make-music + 'EventChord + 'elements + (list (make-music + 'NoteEvent + 'duration + (ly:make-duration 2 0 1 1) + 'pitch + (ly:make-pitch 0 5 0)) + (make-music + 'SlurEvent + 'span-direction + -1))) + (make-music + 'EventChord + 'elements + (list (make-music + 'NoteEvent + 'duration + (ly:make-duration 2 0 1 1) + 'pitch + (ly:make-pitch 0 5 0)) + (make-music + 'SlurEvent + 'span-direction + 1))))) +@end example + +The bad news is that the @code{SlurEvent} expressions +must be added @q{inside} the note (or more precisely, +inside the @code{EventChord} expression). + +Now we examine the input, + +@example +(make-music + 'SequentialMusic + 'elements + (list (make-music + 'EventChord + 'elements + (list (make-music + 'NoteEvent + 'duration + (ly:make-duration 2 0 1 1) + 'pitch + (ly:make-pitch 0 5 0)))))) +@end example + +So in our function, we need to clone this expression (so that we +have two notes to build the sequence), add @code{SlurEvents} to the +@code{'elements} property of each one, and finally make a +@code{SequentialMusic} with the two @code{EventChords}. + +@example +doubleSlur = #(define-music-function (parser location note) (ly:music?) + "Return: @{ note ( note ) @}. + `note' is supposed to be an EventChord." + (let ((note2 (ly:music-deep-copy note))) + (set! (ly:music-property note 'elements) + (cons (make-music 'SlurEvent 'span-direction -1) + (ly:music-property note 'elements))) + (set! (ly:music-property note2 'elements) + (cons (make-music 'SlurEvent 'span-direction 1) + (ly:music-property note2 'elements))) + (make-music 'SequentialMusic 'elements (list note note2)))) +@end example + + +@node Adding articulation to notes (example) +@subsection Adding articulation to notes (example) + +The easy way to add articulation to notes is to merge two music +expressions into one context, as explained in +@ref{Creating contexts}. However, suppose that we want to write +a music function which does this. + +A @code{$variable} inside the @code{#@{...#@}} notation is like +using a regular @code{\variable} in classical LilyPond +notation. We know that + +@example +@{ \music -. -> @} +@end example + +@noindent +will not work in LilyPond. We could avoid this problem by attaching +the articulation to a fake note, + +@example +@{ << \music s1*0-.-> @} +@end example + +@noindent +but for the sake of this example, we will learn how to do this in +Scheme. We begin by examining our input and desired output, + +@example +% input +\displayMusic c4 +===> +(make-music + 'EventChord + 'elements + (list (make-music + 'NoteEvent + 'duration + (ly:make-duration 2 0 1 1) + 'pitch + (ly:make-pitch -1 0 0)))) +===== +% desired output +\displayMusic c4-> +===> +(make-music + 'EventChord + 'elements + (list (make-music + 'NoteEvent + 'duration + (ly:make-duration 2 0 1 1) + 'pitch + (ly:make-pitch -1 0 0)) + (make-music + 'ArticulationEvent + 'articulation-type + "marcato"))) +@end example + +We see that a note (@code{c4}) is represented as an @code{EventChord} +expression, with a @code{NoteEvent} expression in its elements list. To +add a marcato articulation, an @code{ArticulationEvent} expression must +be added to the elements property of the @code{EventChord} +expression. + +To build this function, we begin with + +@example +(define (add-marcato event-chord) + "Add a marcato ArticulationEvent to the elements of `event-chord', + which is supposed to be an EventChord expression." + (let ((result-event-chord (ly:music-deep-copy event-chord))) + (set! (ly:music-property result-event-chord 'elements) + (cons (make-music 'ArticulationEvent + 'articulation-type "marcato") + (ly:music-property result-event-chord 'elements))) + result-event-chord)) +@end example + +The first line is the way to define a function in Scheme: the function +name is @code{add-marcato}, and has one variable called +@code{event-chord}. In Scheme, the type of variable is often clear +from its name. (this is good practice in other programming languages, +too!) + +@example +"Add a marcato..." +@end example + +@noindent +is a description of what the function does. This is not strictly +necessary, but just like clear variable names, it is good practice. + +@example +(let ((result-event-chord (ly:music-deep-copy event-chord))) +@end example + +@code{let} is used to declare local variables. Here we use one local +variable, named @code{result-event-chord}, to which we give the value +@code{(ly:music-deep-copy event-chord)}. @code{ly:music-deep-copy} is +a function specific to LilyPond, like all functions prefixed by +@code{ly:}. It is use to make a copy of a music +expression. Here we copy @code{event-chord} (the parameter of the +function). Recall that our purpose is to add a marcato to an +@code{EventChord} expression. It is better to not modify the +@code{EventChord} which was given as an argument, because it may be +used elsewhere. + +Now we have a @code{result-event-chord}, which is a +@code{NoteEventChord} expression and is a copy of @code{event-chord}. We +add the marcato to its elements list property. + +@example +(set! place new-value) +@end example + +Here, what we want to set (the @q{place}) is the @q{elements} property of +@code{result-event-chord} expression. + +@example +(ly:music-property result-event-chord 'elements) +@end example + +@code{ly:music-property} is the function used to access music properties +(the @code{'elements}, @code{'duration}, @code{'pitch}, etc, that we +see in the @code{\displayMusic} output above). The new value is the +former elements property, with an extra item: the +@code{ArticulationEvent} expression, which we copy from the +@code{\displayMusic} output, + +@example +(cons (make-music 'ArticulationEvent + 'articulation-type "marcato") + (ly:music-property result-event-chord 'elements)) +@end example + +@code{cons} is used to add an element to a list without modifying the +original list. This is what we +want: the same list as before, plus the new @code{ArticulationEvent} +expression. The order inside the elements property is not important here. + +Finally, once we have added the marcato articulation to its @code{elements} +property, we can return @code{result-event-chord}, hence the last line of +the function. + +Now we transform the @code{add-marcato} function into a music +function, + +@example +addMarcato = #(define-music-function (parser location event-chord) + (ly:music?) + "Add a marcato ArticulationEvent to the elements of `event-chord', + which is supposed to be an EventChord expression." + (let ((result-event-chord (ly:music-deep-copy event-chord))) + (set! (ly:music-property result-event-chord 'elements) + (cons (make-music 'ArticulationEvent + 'articulation-type "marcato") + (ly:music-property result-event-chord 'elements))) + result-event-chord)) +@end example + +We may verify that this music function works correctly, + +@example +\displayMusic \addMarcato c4 +@end example + + +@node Markup programmer interface +@section Markup programmer interface + +Markups are implemented as special Scheme functions which produce a +Stencil object given a number of arguments. + +@menu +* Markup construction in Scheme:: +* How markups work internally:: +* New markup command definition:: +* New markup list command definition:: +@end menu + + +@node Markup construction in Scheme +@subsection Markup construction in Scheme + +@cindex defining markup commands + +The @code{markup} macro builds markup expressions in Scheme while +providing a LilyPond-like syntax. For example, +@example +(markup #:column (#:line (#:bold #:italic "hello" #:raise 0.4 "world") + #:larger #:line ("foo" "bar" "baz"))) +@end example + +@noindent +is equivalent to: +@example +\markup \column @{ \line @{ \bold \italic "hello" \raise #0.4 "world" @} + \larger \line @{ foo bar baz @} @} +@end example + +@noindent +This example demonstrates the main translation rules between regular +LilyPond markup syntax and Scheme markup syntax. + +@quotation +@multitable @columnfractions .3 .3 +@item @b{LilyPond} @tab @b{Scheme} +@item @code{\markup markup1} @tab @code{(markup markup1)} +@item @code{\markup @{ markup1 markup2 ... @}} @tab + @code{(markup markup1 markup2 ... )} +@item @code{\command} @tab @code{#:command} +@item @code{\variable} @tab @code{variable} +@item @code{\center-column @{ ... @}} @tab @code{#:center-column ( ... )} +@item @code{string} @tab @code{"string"} +@item @code{#scheme-arg} @tab @code{scheme-arg} +@end multitable +@end quotation + +The whole Scheme language is accessible inside the +@code{markup} macro. For example, You may use function calls inside +@code{markup} in order to manipulate character strings. This is +useful when defining new markup commands (see +@ref{New markup command definition}). + + +@knownissues + +The markup-list argument of commands such as @code{#:line}, +@code{#:center}, and @code{#:column} cannot be a variable or +the result of a function call. + +@lisp +(markup #:line (function-that-returns-markups)) +@end lisp + +@noindent +is invalid. One should use the @code{make-line-markup}, +@code{make-center-markup}, or @code{make-column-markup} functions +instead, + +@lisp +(markup (make-line-markup (function-that-returns-markups))) +@end lisp + + +@node How markups work internally +@subsection How markups work internally + +In a markup like + +@example +\raise #0.5 "text example" +@end example + +@noindent +@code{\raise} is actually represented by the @code{raise-markup} +function. The markup expression is stored as + +@example +(list raise-markup 0.5 (list simple-markup "text example")) +@end example + +When the markup is converted to printable objects (Stencils), the +@code{raise-markup} function is called as + +@example +(apply raise-markup + @var{\layout object} + @var{list of property alists} + 0.5 + @var{the "text example" markup}) +@end example + +The @code{raise-markup} function first creates the stencil for the +@code{text example} string, and then it raises that Stencil by 0.5 +staff space. This is a rather simple example; more complex examples +are in the rest +of this section, and in @file{scm/@/define@/-markup@/-commands@/.scm}. + + +@node New markup command definition +@subsection New markup command definition + +New markup commands can be defined +with the @code{define-markup-command} Scheme macro. + +@lisp +(define-markup-command (@var{command-name} @var{layout} @var{props} @var{arg1} @var{arg2} ...) + (@var{arg1-type?} @var{arg2-type?} ...) + ..command body..) +@end lisp + +The arguments are + +@table @var +@item argi +@var{i}th command argument +@item argi-type? +a type predicate for the i@var{th} argument +@item layout +the @q{layout} definition +@item props +a list of alists, containing all active properties. +@end table + +As a simple example, we show how to add a @code{\smallcaps} command, +which selects a small caps font. Normally we could select the +small caps font, + +@example +\markup @{ \override #'(font-shape . caps) Text-in-caps @} +@end example + +@noindent +This selects the caps font by setting the @code{font-shape} property to +@code{#'caps} for interpreting @code{Text-in-caps}. + +To make the above available as @code{\smallcaps} command, we must +define a function using @code{define-markup-command}. The command should +take a single argument of type @code{markup}. Therefore the start of the +definition should read + +@example +(define-markup-command (smallcaps layout props argument) (markup?) +@end example + +@noindent + +What follows is the content of the command: we should interpret +the @code{argument} as a markup, i.e., + +@example +(interpret-markup layout @dots{} argument) +@end example + +@noindent +This interpretation should add @code{'(font-shape . caps)} to the active +properties, so we substitute the following for the @dots{} in the +above example: + +@example +(cons (list '(font-shape . caps) ) props) +@end example + +@noindent +The variable @code{props} is a list of alists, and we prepend to it by +cons'ing a list with the extra setting. + + +Suppose that we are typesetting a recitative in an opera and +we would like to define a command that will show character names in a +custom manner. Names should be printed with small caps and moved a +bit to the left and top. We will define a @code{\character} command +which takes into account the necessary translation and uses the newly +defined @code{\smallcaps} command: + +@example +#(define-markup-command (character layout props name) (string?) + "Print the character name in small caps, translated to the left and + top. Syntax: \\character #\"name\"" + (interpret-markup layout props + (markup #:hspace 0 #:translate (cons -3 1) #:smallcaps name))) +@end example + +There is one complication that needs explanation: texts above and below +the staff are moved vertically to be at a certain distance (the +@code{padding} property) from the staff and the notes. To make sure +that this mechanism does not annihilate the vertical effect of our +@code{#:translate}, we add an empty string (@code{#:hspace 0}) before the +translated text. Now the @code{#:hspace 0} will be put above the notes, +and the +@code{name} is moved in relation to that empty string. The net effect is +that the text is moved to the upper left. + +The final result is as follows: + +@example +@{ + c''^\markup \character #"Cleopatra" + e'^\markup \character #"Giulio Cesare" +@} +@end example + +@lilypond[quote,ragged-right] +#(define-markup-command (smallcaps layout props str) (string?) + "Print the string argument in small caps. Syntax: \\smallcaps #\"string\"" + (interpret-markup layout props + (make-line-markup + (map (lambda (s) + (if (= (string-length s) 0) + s + (markup #:large (string-upcase (substring s 0 1)) + #:translate (cons -0.6 0) + #:tiny (string-upcase (substring s 1))))) + (string-split str #\Space))))) + +#(define-markup-command (character layout props name) (string?) + "Print the character name in small caps, translated to the left and + top. Syntax: \\character #\"name\"" + (interpret-markup layout props + (markup #:hspace 0 #:translate (cons -3 1) #:smallcaps name))) + +{ + c''^\markup \character #"Cleopatra" c'' c'' c'' + e'^\markup \character #"Giulio Cesare" e' e' e' +} +@end lilypond + +We have used the @code{caps} font shape, but suppose that our font +does not have a small-caps variant. In that case we have to fake +the small caps font by setting a string in upcase with the first +letter a little larger: + +@example +#(define-markup-command (smallcaps layout props str) (string?) + "Print the string argument in small caps." + (interpret-markup layout props + (make-line-markup + (map (lambda (s) + (if (= (string-length s) 0) + s + (markup #:large (string-upcase (substring s 0 1)) + #:translate (cons -0.6 0) + #:tiny (string-upcase (substring s 1))))) + (string-split str #\Space))))) +@end example + +The @code{smallcaps} command first splits its string argument into +tokens separated by spaces (@code{(string-split str #\Space)}); for +each token, a markup is built with the first letter made large and +upcased (@code{#:large (string-upcase (substring s 0 1))}), and a +second markup built with the following letters made tiny and upcased +(@code{#:tiny (string-upcase (substring s 1))}). As LilyPond +introduces a space between markups on a line, the second markup is +translated to the left (@code{#:translate (cons -0.6 0) ...}). Then, +the markups built for each token are put in a line by +@code{(make-line-markup ...)}. Finally, the resulting markup is passed +to the @code{interpret-markup} function, with the @code{layout} and +@code{props} arguments. + +Note: there is now an internal command @code{\smallCaps} which can +be used to set text in small caps. See +@ref{Text markup commands}, for details. + +@knownissues + +Currently, the available combinations of arguments (after the standard +@var{layout} and @var{props} arguments) to a markup command defined with +@code{define-markup-command} are limited as follows. + +@table @asis +@item (no argument) +@itemx @var{list} +@itemx @var{markup} +@itemx @var{markup markup} +@itemx @var{scm} +@itemx @var{scm markup} +@itemx @var{scm scm} +@itemx @var{scm scm markup} +@itemx @var{scm scm markup markup} +@itemx @var{scm markup markup} +@itemx @var{scm scm scm} +@end table + +@noindent +In the above table, @var{scm} represents native Scheme data types like +@q{number} or @q{string}. + +As an example, it is not possible to use a markup command @code{foo} with +four arguments defined as + +@example +#(define-markup-command (foo layout props + num1 str1 num2 str2) + (number? string? number? string?) + ...) +@end example + +@noindent +If you apply it as, say, + +@example +\markup \foo #1 #"bar" #2 #"baz" +@end example + +@cindex Scheme signature +@cindex signature, Scheme +@noindent +@command{lilypond} complains that it cannot parse @code{foo} due to its +unknown Scheme signature. + + +@node New markup list command definition +@subsection New markup list command definition +Markup list commands are defined with the +@code{define-markup-list-command} Scheme macro, which is similar to the +@code{define-markup-command} macro described in +@ref{New markup command definition}, except that where the latter returns +a single stencil, the former returns a list stencils. + +In the following example, a @code{\paragraph} markup list command is +defined, which returns a list of justified lines, the first one being +indented. The indent width is taken from the @code{props} argument. +@example +#(define-markup-list-command (paragraph layout props args) (markup-list?) + (let ((indent (chain-assoc-get 'par-indent props 2))) + (interpret-markup-list layout props + (make-justified-lines-markup-list (cons (make-hspace-markup indent) + args))))) +@end example + +Besides the usual @code{layout} and @code{props} arguments, the +@code{paragraph} markup list command takes a markup list argument, named +@code{args}. The predicate for markup lists is @code{markup-list?}. + +First, the function gets the indent width, a property here named +@code{par-indent}, from the property list @code{props} If the property +is not found, the default value is @code{2}. Then, a list of justified +lines is made using the @code{make-justified-lines-markup-list} +function, which is related to the @code{\justified-lines} +built-in markup list command. An horizontal space is added at the +beginning using the @code{make-hspace-markup} function. Finally, the +markup list is interpreted using the @code{interpret-markup-list} +function. + +This new markup list command can be used as follows: +@example +\markuplines @{ + \paragraph @{ + The art of music typography is called \italic @{(plate) engraving.@} + The term derives from the traditional process of music printing. + Just a few decades ago, sheet music was made by cutting and stamping + the music into a zinc or pewter plate in mirror image. + @} + \override-lines #'(par-indent . 4) \paragraph @{ + The plate would be inked, the depressions caused by the cutting + and stamping would hold ink. An image was formed by pressing paper + to the plate. The stamping and cutting was completely done by + hand. + @} +@} +@end example + +@node Contexts for programmers +@section Contexts for programmers + +@menu +* Context evaluation:: +* Running a function on all layout objects:: +@end menu + +@node Context evaluation +@subsection Context evaluation + +@cindex calling code during interpreting +@funindex \applyContext + +Contexts can be modified during interpretation with Scheme code. The +syntax for this is +@example +\applyContext @var{function} +@end example + +@var{function} should be a Scheme function taking a single argument, +being the context to apply it to. The following code will print the +current bar number on the standard output during the compile: + +@example +\applyContext + #(lambda (x) + (format #t "\nWe were called in barnumber ~a.\n" + (ly:context-property x 'currentBarNumber))) +@end example + + + +@node Running a function on all layout objects +@subsection Running a function on all layout objects + + +@cindex calling code on layout objects +@funindex \applyOutput + + +The most versatile way of tuning an object is @code{\applyOutput}. Its +syntax is +@example +\applyOutput @var{context} @var{proc} +@end example + +@noindent +where @var{proc} is a Scheme function, taking three arguments. + +When interpreted, the function @var{proc} is called for every layout +object found in the context @var{context}, with the following +arguments: +@itemize +@item the layout object itself, +@item the context where the layout object was created, and +@item the context where @code{\applyOutput} is processed. +@end itemize + + +In addition, the cause of the layout object, i.e., the music +expression or object that was responsible for creating it, is in the +object property @code{cause}. For example, for a note head, this is a +@rinternals{NoteHead} event, and for a @rinternals{Stem} object, +this is a @rinternals{NoteHead} object. + +Here is a function to use for @code{\applyOutput}; it blanks +note-heads on the center-line: + +@lilypond[quote,verbatim,ragged-right] +#(define (blanker grob grob-origin context) + (if (and (memq 'note-head-interface (ly:grob-interfaces grob)) + (eq? (ly:grob-property grob 'staff-position) 0)) + (set! (ly:grob-property grob 'transparent) #t))) + +\relative { + e4 g8 \applyOutput #'Voice #blanker b d2 +} +@end lilypond + + +@node Scheme procedures as properties +@section Scheme procedures as properties + +Properties (like thickness, direction, etc.) can be set at fixed values +with \override, e.g. + +@example +\override Stem #'thickness = #2.0 +@end example + +Properties can also be set to a Scheme procedure, + +@lilypond[fragment,verbatim,quote,relative=2] +\override Stem #'thickness = #(lambda (grob) + (if (= UP (ly:grob-property grob 'direction)) + 2.0 + 7.0)) +c b a g b a g b +@end lilypond + +@noindent +In this case, the procedure is executed as soon as the value of the +property is requested during the formatting process. + +Most of the typesetting engine is driven by such callbacks. +Properties that typically use callbacks include + +@table @code +@item stencil + The printing routine, that constructs a drawing for the symbol +@item X-offset + The routine that sets the horizontal position +@item X-extent + The routine that computes the width of an object +@end table + +The procedure always takes a single argument, being the grob. + +If routines with multiple arguments must be called, the current grob +can be inserted with a grob closure. Here is a setting from +@code{AccidentalSuggestion}, + +@example +(X-offset . + ,(ly:make-simple-closure + `(,+ + ,(ly:make-simple-closure + (list ly:self-alignment-interface::centered-on-x-parent)) + ,(ly:make-simple-closure + (list ly:self-alignment-interface::x-aligned-on-self))))) +@end example + +@noindent +In this example, both @code{ly:self-alignment-interface::x-aligned-on-self} and +@code{ly:self-alignment-interface::centered-on-x-parent} are called +with the grob as argument. The results are added with the @code{+} +function. To ensure that this addition is properly executed, the whole +thing is enclosed in @code{ly:make-simple-closure}. + +In fact, using a single procedure as property value is equivalent to + +@example +(ly:make-simple-closure (ly:make-simple-closure (list @var{proc}))) +@end example + +@noindent +The inner @code{ly:make-simple-closure} supplies the grob as argument +to @var{proc}, the outer ensures that result of the function is +returned, rather than the @code{simple-closure} object. + + +@node Using Scheme code instead of \tweak +@section Using Scheme code instead of @code{\tweak} + +The main disadvantage of @code{\tweak} is its syntactical +inflexibility. For example, the following produces a syntax error. + +@example +F = \tweak #'font-size #-3 -\flageolet + +\relative c'' @{ + c4^\F c4_\F +@} +@end example + +@noindent +With other words, @code{\tweak} doesn't behave like an articulation +regarding the syntax; in particular, it can't be attached with +@code{^} and @code{_}. + +Using Scheme, this problem can be circumvented. The route to the +result is given in @ref{Adding articulation to notes (example)}, +especially how to use @code{\displayMusic} as a helping guide. + +@example +F = #(let ((m (make-music 'ArticulationEvent + 'articulation-type "flageolet"))) + (set! (ly:music-property m 'tweaks) + (acons 'font-size -3 + (ly:music-property m 'tweaks))) + m) + +\relative c'' @{ + c4^\F c4_\F +@} +@end example + +@noindent +Here, the @code{tweaks} properties of the flageolet object +@code{m} (created with @code{make-music}) are extracted with +@code{ly:music-property}, a new key-value pair to change the +font size is prepended to the property list with the +@code{acons} Scheme function, and the result is finally +written back with @code{set!}. The last element of the +@code{let} block is the return value, @code{m} itself. + + + +@node Difficult tweaks +@section Difficult tweaks + +There are a few classes of difficult adjustments. + +@itemize + + +@item +One type of difficult adjustment is the appearance of spanner objects, +such as slur and tie. Initially, only one of these objects is created, +and they can be adjusted with the normal mechanism. However, in some +cases the spanners cross line breaks. If this happens, these objects +are cloned. A separate object is created for every system that it is +in. These are clones of the original object and inherit all +properties, including @code{\override}s. + + +In other words, an @code{\override} always affects all pieces of a +broken spanner. To change only one part of a spanner at a line break, +it is necessary to hook into the formatting process. The +@code{after-line-breaking} callback contains the Scheme procedure that +is called after the line breaks have been determined, and layout +objects have been split over different systems. + +In the following example, we define a procedure +@code{my-callback}. This procedure + +@itemize +@item +determines if we have been split across line breaks +@item +if yes, retrieves all the split objects +@item +checks if we are the last of the split objects +@item +if yes, it sets @code{extra-offset}. +@end itemize + +This procedure is installed into @rinternals{Tie}, so the last part +of the broken tie is translated up. + +@lilypond[quote,verbatim,ragged-right] +#(define (my-callback grob) + (let* ( + ; have we been split? + (orig (ly:grob-original grob)) + + ; if yes, get the split pieces (our siblings) + (siblings (if (ly:grob? orig) + (ly:spanner-broken-into orig) '() ))) + + (if (and (>= (length siblings) 2) + (eq? (car (last-pair siblings)) grob)) + (ly:grob-set-property! grob 'extra-offset '(-2 . 5))))) + +\relative c'' { + \override Tie #'after-line-breaking = + #my-callback + c1 ~ \break c2 ~ c +} +@end lilypond + +@noindent +When applying this trick, the new @code{after-line-breaking} callback +should also call the old one @code{after-line-breaking}, if there is +one. For example, if using this with @code{Hairpin}, +@code{ly:hairpin::after-line-breaking} should also be called. + + +@item Some objects cannot be changed with @code{\override} for +technical reasons. Examples of those are @code{NonMusicalPaperColumn} +and @code{PaperColumn}. They can be changed with the +@code{\overrideProperty} function, which works similar to @code{\once +\override}, but uses a different syntax. + +@example +\overrideProperty +#"Score.NonMusicalPaperColumn" % Grob name +#'line-break-system-details % Property name +#'((next-padding . 20)) % Value +@end example + +Note, however, that @code{\override}, applied to +@code{NonMusicalPaperColumn} and @code{PaperColumn}, still works as +expected within @code{\context} blocks. + +@end itemize + + + + + diff --git a/Documentation/notation/repeats.itely b/Documentation/notation/repeats.itely new file mode 100644 index 0000000000..967b80912e --- /dev/null +++ b/Documentation/notation/repeats.itely @@ -0,0 +1,531 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + +@node Repeats +@section Repeats + +@lilypondfile[quote]{repeats-headword.ly} + +Repetition is a central concept in music, and multiple notations +exist for repetitions. LilyPond supports the following kinds of +repeats: + + +@table @code +@item volta +The repeated music is not written out but enclosed between repeat bar +lines. If the repeat is at the beginning of a piece, a repeat bar +line is only printed at the end of the repeat. Alternative endings +(volte) are printed left to right with brackets. This is the standard +notation for repeats with alternatives. + +@item unfold +The repeated music is fully written out, as many times as +specified by @var{repeatcount}. This is useful when +entering repetitious music. + +@item percent +These are beat or measure repeats. They look like single slashes or +percent signs. + +@item tremolo +This is used to write tremolo beams. + +@end table + + +@menu +* Long repeats:: +* Short repeats:: +@end menu + +@node Long repeats +@subsection Long repeats + +This section discusses how to input long (usually multi-measure) +repeats. The repeats can take two forms: repeats enclosed between +repeat signs; or written out repeats, used to input repetitious music. +Repeat signs can also be controlled manually. + +@menu +* Normal repeats:: +* Manual repeat marks:: +* Written-out repeats:: +@end menu + +@cindex volta +@cindex prima volta +@cindex seconda volta +@cindex volta, prima +@cindex volta, seconda +@cindex repeat, normal +@cindex normal repeat +@cindex repeat with alternate endings +@cindex alternate endings +@funindex \repeat +@funindex \alternative +@funindex \partial + +@node Normal repeats +@unnumberedsubsubsec Normal repeats + +The syntax for a normal repeat is + +@example +\repeat volta @var{repeatcount} @var{musicexpr} +@end example + +where @var{musicexpr} is a music expression. Alternate endings can be +produced using @code{\alternative}. In order to delimit the alternate +endings, the group of alternatives must be enclosed in a set of +braces. If there are more repeats than there are alternate endings, +the earliest repeats are given the first alternative. + +Normal repeats without alternate endings: + +@lilypond[verbatim,quote,relative=2] +\repeat volta 2 { c4 d e f } +c2 d +\repeat volta 2 { d4 e f g } +@end lilypond + +Normal repeats with alternate endings: + +@lilypond[verbatim,quote,relative=2] +\repeat volta 4 { c4 d e f } +\alternative { + { d2 e } + { f2 g } +} +c1 +@end lilypond + +@warning{Do not include @code{@bs{}relative} inside a +@code{@bs{}repeat}. It will cause unwanted staves to appear. +See @rlearning{An extra staff appears}.} + +@cindex repeat with upbeat +@cindex upbeat in a repeat +@cindex anacrucis in a repeat +@cindex repeat with anacrucis +@cindex repeat with pickup +@cindex pickup in a repeat +@funindex \partial + +Repeats with upbeats can be entered in two ways: + +@lilypond[verbatim,quote,relative=2] +\partial 4 +e | +\repeat volta 4 { c2 d | e2 f | } +\alternative { + { g4 g g e } + { a4 a a a | b2. } +} +@end lilypond + +@noindent +or + +@lilypond[verbatim,quote,relative=2] +\partial 4 +\repeat volta 4 { e4 | c2 d | e2 f | } +\alternative { + { \partial 4*3 g4 g g } + { a4 a a a | b2. } +} +@end lilypond + + +@cindex repeats with ties +@cindex alternative endings with ties +@cindex ties in repeats +@cindex ties in alternative endings +@funindex \repeatTie + +Ties may be added to a second ending: + +@lilypond[verbatim,quote,relative=2] +c1 +\repeat volta 2 { c4 d e f ~ } +\alternative { + { f2 d } + { f2\repeatTie f, } +} +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{shortening-volta-brackets.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{adding-volta-brackets-to-additional-staves.ly} + + +@seealso +Music Glossary: @rglos{repeat}, @rglos{volta}. + +Notation Reference: @ref{Bar lines}, @ref{Modifying context plug-ins}. + +Snippets: @rlsr{Repeats}. + +Internals Reference: @rinternals{VoltaBracket}, +@rinternals{RepeatedMusic}, @rinternals{VoltaRepeatedMusic}, +@rinternals{UnfoldedRepeatedMusic}. + + +@knownissues + +@cindex repeat, ambiguous +@cindex nested repeat +@cindex repeat, nested +@cindex repeat timing information +@cindex repeat and measure number +@cindex timing information and repeats +@cindex measure number and repeats +@cindex repeat and slur +@cindex slur and repeat + +A nested repeat like + +@example +\repeat @dots{} +\repeat @dots{} +\alternative +@end example + +@noindent +is ambiguous, since it is is not clear to which @code{\repeat} the +@code{\alternative} belongs. This ambiguity is resolved by always +having the @code{\alternative} belong to the inner @code{\repeat}. +For clarity, it is advisable to use braces in such situations. + +Timing information is not remembered at the start of an alternative, +so after a repeat timing information must be reset by hand; for +example, by setting @code{Score.measurePosition} or entering +@code{\partial}. Similarly, slurs are also not repeated. + + + +@node Manual repeat marks +@unnumberedsubsubsec Manual repeat marks + +@cindex manual repeat mark +@cindex repeat, manual +@cindex start repeat +@cindex repeat, start +@cindex end repeat +@cindex repeat, end +@cindex repeat number, changing +@cindex repeat volta, changing +@cindex volta bracket +@cindex bracket, volta +@funindex repeatCommands +@funindex start-repeat + +@warning{These methods are only used for displaying unusual repeat +constructs, and may produce unexpected behavior. In most cases, +repeats should be created using the standard @code{\\repeat} command +or by printing the relevant bar lines. For more information, see +@ref{Bar lines}.} + +The property @code{repeatCommands} can be used to control the +layout of repeats. Its value is a Scheme list of repeat commands. + +@table @code +@item start-repeat +Print a @code{|:} bar line. + +@lilypond[verbatim,quote,relative=2] +c1 +\set Score.repeatCommands = #'(start-repeat) +d4 e f g +c1 +@end lilypond + +As per standard engraving practice, repeat signs are not printed +at the beginning of a piece. + +@item end-repeat +Print a @code{:|} bar line: + +@lilypond[verbatim,quote,relative=2] +c1 +d4 e f g +\set Score.repeatCommands = #'(end-repeat) +c1 +@end lilypond + +@item (volta @var{number}) ... (volta #f) +Create a new volta with the specified number. The volta bracket must +be explicitly terminated, or it will not be printed. + +@lilypond[verbatim,quote,relative=2] +f4 g a b +\set Score.repeatCommands = #'((volta "2")) +g4 a g a +\set Score.repeatCommands = #'((volta #f)) +c1 +@end lilypond + +@end table + +Multiple repeat commands may occur at the same point: + +@lilypond[verbatim,quote,relative=2] +f4 g a b +\set Score.repeatCommands = #'((volta "2, 5") end-repeat) +g4 a g a +c1 +\set Score.repeatCommands = #'((volta #f) (volta "95") end-repeat) +b1 +\set Score.repeatCommands = #'((volta #f)) +@end lilypond + +@cindex volta bracket with text +@cindex text in volta bracket + +Text can be included with the volta bracket. The text can be a +number or numbers or markup text, see @ref{Formatting text}. The +simplest way to use markup text is to define the markup first, +then include the markup in a Scheme list. + +@lilypond[verbatim,quote] +voltaAdLib = \markup { 1. 2. 3... \text \italic { ad lib. } } +\relative c'' { + c1 + \set Score.repeatCommands = #(list(list 'volta voltaAdLib) 'start-repeat) + c4 b d e + \set Score.repeatCommands = #'((volta #f) (volta "4.") end-repeat) + f1 + \set Score.repeatCommands = #'((volta #f)) +} +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{printing-a-repeat-sign-at-the-beginning-of-a-piece.ly} + + +@seealso +Notation Reference: +@ref{Bar lines}, +@ref{Formatting text}. + +Snippets: +@rlsr{Repeats}. + +Internals Reference: +@rinternals{VoltaBracket}, +@rinternals{RepeatedMusic}, +@rinternals{VoltaRepeatedMusic}. + + +@node Written-out repeats +@unnumberedsubsubsec Written-out repeats + +@cindex written-out repeats +@cindex repetitious music +@cindex repeats, written-out +@cindex repeat, unfold +@cindex unfold music +@cindex unfold repeat +@cindex unfold repeat with alternate endings +@cindex unfold music with alternate endings +@cindex alternate ending in written-out repeats +@funindex unfold + +By using the @code{unfold} command, repeats can be used to simplify +the writing out of repetitious music. The syntax is + +@example +\repeat unfold @var{repeatcount} @var{musicexpr} +@end example + +where @var{musicexpr} is a music expression and @var{repeatcount} is +the number of times @var{musicexpr} is repeated. + +@lilypond[verbatim,quote,relative=2] +c1 +\repeat unfold 2 { c4 d e f } +c1 +@end lilypond + +Unfold repeats can be made with alternate endings. If there are +more repeats than there are alternate endings, the first +alternative ending is applied to the earliest endings. + +@lilypond[verbatim,quote,relative=2] +c1 +\repeat unfold 2 { g4 f e d } + \alternative { + { cis2 g' } + { cis,2 b } + } +c1 +@end lilypond + + +@seealso +Snippets: @rlsr{Repeats}. + +Internals Reference: @rinternals{RepeatedMusic}, +@rinternals{UnfoldedRepeatedMusic}. + + +@node Short repeats +@subsection Short repeats + +This section discusses how to input short repeats. Short repeats can +take two basic forms: repeats of a single note to two measures, +represented by slashes or percent signs; and tremolos. + +@menu +* Percent repeats:: +* Tremolo repeats:: +@end menu + +@node Percent repeats +@unnumberedsubsubsec Percent repeats + +@cindex percent repeats +@cindex measure repeats +@cindex repeat, percent +@cindex repeat, measure +@cindex repeat, short +@funindex \repeat percent +@funindex percent + +Repeated short patterns of notes are supported. The music is printed +once, and the pattern is replaced with a special sign. Patterns that +are shorter than one measure are replaced by slashes, and patterns of +one or two measures are replaced by percent-like signs. The syntax is + +@example +@code{\repeat percent @var{number} @var{musicexpr}} +@end example + +where @var{musicexpr} is a music expression. + +@lilypond[verbatim,quote,relative=2] +\repeat percent 4 { c4 } +\repeat percent 2 { b4 a g f } +\repeat percent 2 { c2 es | f4 fis g c | } +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{percent-repeat-counter.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{percent-repeat-count-visibility.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{isolated-percent-repeats.ly} + + +@seealso +Music Glossary: @rglos{percent repeat}, @rglos{simile}. + +Snippets: @rlsr{Repeats}. + +Internals Reference: @rinternals{RepeatSlash}, +@rinternals{PercentRepeat}, @rinternals{DoublePercentRepeat}, +@rinternals{DoublePercentRepeatCounter}, +@rinternals{PercentRepeatCounter}, @rinternals{PercentRepeatedMusic}. + + +@knownissues + +Only three kinds of percent repeats are supported: a single slash +representing a single beat (regardless of the duration of the repeated +notes); a single slash with dots representing one full measure; and +two slashes with dots crossing a bar line representing two full +measures. Neither multiple slashes representing single beat repeats +consisting of sixteenth or shorter notes, nor two slashes with dots +representing single beat repeats consisting of notes of varying +durations, are supported. + + +@node Tremolo repeats +@unnumberedsubsubsec Tremolo repeats + +@cindex tremolo beams +@cindex tremolo +@cindex repeat, tremolo +@funindex \repeat tremolo +@funindex tremolo + +Tremolos can take two forms: alternation between two chords or two +notes, and rapid repetition of a single note or chord. Tremolos +consisting of an alternation are indicated by adding beams between the +notes or chords being alternated, while tremolos consisting of the +rapid repetition of a single note are indicated by adding beams or +slashes to a single note. + +To place tremolo marks between notes, use @code{\repeat} with +tremolo style: + +@lilypond[quote,verbatim,relative=2] +\repeat tremolo 8 { c16 d } +\repeat tremolo 6 { c16 d } +\repeat tremolo 2 { c16 d } +@end lilypond + +The @code{\repeat tremolo} syntax expects exactly two notes within +the braces, and the number of repetitions must correspond to a +note value that can be expressed with plain or dotted notes. Thus, +@code{\repeat tremolo 7} is valid and produces a double dotted +note, but @code{\repeat tremolo 9} is not. + +The duration of the tremolo equals the duration of the +braced expression multiplied by the number of repeats: +@code{\repeat tremolo 8 @{ c16 d16 @}} gives a whole note tremolo, +notated as two whole notes joined by tremolo beams. + +There are two ways to put tremolo marks on a single note. The +@code{\repeat tremolo} syntax is also used here, in which case +the note should not be surrounded by braces: + +@lilypond[quote,verbatim,ragged-right] +\repeat tremolo 4 c'16 +@end lilypond + +@cindex tremolo marks +@funindex tremoloFlags +@funindex : + +The same output can be obtained by adding +@q{@code{:}[@var{number}]} after the note. The number indicates +the duration of the subdivision, and it must be at least 8. A +@var{number} value of 8 gives one line across the note stem. If +the length is omitted, the last value (stored in +@code{tremoloFlags}) is used + +@lilypond[quote,verbatim,relative=2] +c2:8 c:32 +c: c: +@end lilypond + + +@seealso +Snippets: @rlsr{Repeats}. + +@cindex tremolo, cross-staff +@cindex cross-staff tremolo + +@knownissues + +Cross-staff tremolos do not work well. + diff --git a/Documentation/notation/rhythms.itely b/Documentation/notation/rhythms.itely new file mode 100644 index 0000000000..9b74a3e945 --- /dev/null +++ b/Documentation/notation/rhythms.itely @@ -0,0 +1,2740 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + +@node Rhythms +@section Rhythms + +@lilypondfile[quote]{rhythms-headword.ly} + +This section discusses rhythms, rests, durations, beaming and bars. + +@menu +* Writing rhythms:: +* Writing rests:: +* Displaying rhythms:: +* Beams:: +* Bars:: +* Special rhythmic concerns:: +@end menu + + +@node Writing rhythms +@subsection Writing rhythms + +@menu +* Durations:: +* Tuplets:: +* Scaling durations:: +* Ties:: +@end menu + +@node Durations +@unnumberedsubsubsec Durations + +@cindex durations, of notes +@cindex note durations +@cindex length of notes +@cindex note lengths + +@funindex \longa +@funindex longa +@funindex \breve +@funindex breve +@funindex \maxima +@funindex maxima + +Durations are designated by numbers and dots. Durations are entered +as their reciprocal values. For example, a quarter note is entered +using a @code{4} (since it is a 1/4 note), and a half note is entered +using a @code{2} (since it is a 1/2 note). For notes longer than a +whole you must use the @code{\longa} (a double breve) and +@code{\breve} commands. Durations as short as 128th notes may be +specified. Shorter values are possible, but only as beamed notes. + +@c Two 64th notes are needed to obtain beams +@lilypond[quote,verbatim,relative=2] +\time 8/1 +c\longa c\breve c1 c2 +c4 c8 c16 c32 c64 c128 c128 +@end lilypond + +Here are the same durations with automatic beaming turned off. + +@c not strictly "writing rhythms"; more of a "displaying" thing, +@c but it's ok here. -gp +@lilypond[quote,verbatim,relative=2] +\time 8/1 +\autoBeamOff +c\longa c\breve c1 c2 +c4 c8 c16 c32 c64 c128 c128 +@end lilypond + +A note with the duration of a quadruple breve may be entered with +@code{\maxima}, but this is supported only within ancient music +notation. For details, see @ref{Ancient notation}. + +@cindex duration, default +@cindex default note duration +@cindex note duration, default + +If the duration is omitted, it is set to the previously +entered duration. The default for the first note is a quarter +note. + +@lilypond[quote,verbatim,relative=2] +a a a2 a a4 a a1 a +@end lilypond + +@cindex notes, dotted +@cindex dotted notes +@cindex notes, double-dotted +@cindex double-dotted notes + +@funindex . + +To obtain dotted note lengths, place a dot (@code{.}) after the +duration. Double-dotted notes are specified by appending two +dots, and so on. + +@lilypond[quote,verbatim,relative=2] +a4 b c4. b8 a4. b4.. c8. +@end lilypond + +Some durations cannot be represented with just binary durations +and dots; they can be represented only by tying two or more +notes together. For details, see @ref{Ties}. + +For ways of specifying durations for the syllables of lyrics and +ways of aligning lyrics to notes, see @ref{Vocal music}. + +Optionally, notes can be spaced strictly proportionately to their +duration. For details of this and other settings which control +proportional notation, see @ref{Proportional notation}. + +@funindex \dotsUp +@funindex dotsUp +@funindex \dotsDown +@funindex dotsDown +@funindex \dotsNeutral +@funindex dotsNeutral + +Dots are normally moved up to avoid staff lines, except in +polyphonic situations. Dots may be manually placed above or below +the staff; see @ref{Direction and placement}. + + +@predefined +@code{\autoBeamOn}, +@code{\autoBeamOff}, +@code{\dotsUp}, +@code{\dotsDown}, +@code{\dotsNeutral}. +@endpredefined + + +@seealso +Music Glossary: +@rglos{breve}, +@rglos{longa}, +@rglos{maxima}, +@rglos{note value}, +@rglos{Duration names notes and rests}. + +Notation Reference: +@ref{Automatic beams}, +@ref{Ties}, +@ref{Stems}, +@ref{Writing rhythms}, +@ref{Writing rests}, +@ref{Vocal music}, +@ref{Ancient notation}, +@ref{Proportional notation}. + +Snippets: +@rlsr{Rhythms}. + +Internals Reference: +@rinternals{Dots}, +@rinternals{DotColumn}. + + +@knownissues + +@c Deliberately duplicated in Durations and Rests. -gp +There is no fundamental limit to rest durations (both in terms of +longest and shortest), but the number of glyphs is limited: +rests from 128th to maxima (8 x whole) may be printed. + + +@node Tuplets +@unnumberedsubsubsec Tuplets + +@cindex tuplets +@cindex triplets + +@funindex \times +@funindex times + +Tuplets are made from a music expression by multiplying all the +durations with a fraction: + +@example +\times @var{fraction} @{ @var{music} @} +@end example + +@noindent +The duration of @var{music} will be multiplied by the +fraction. The fraction's denominator will be printed over or +under the notes, optionally with a bracket. The most common +tuplet is the triplet in which 3 notes have the duration of 2, so +the notes are 2/3 of their written length. + +@lilypond[quote,verbatim,relative=2] +a2 \times 2/3 { b4 b b } +c4 c \times 2/3 { b4 a g } +@end lilypond + +@cindex tuplet bracket placement + +@funindex \tupletUp +@funindex tupletUp +@funindex \tupletDown +@funindex tupletDown +@funindex \tupletNeutral +@funindex tupletNeutral + +Tuplet brackets may be manually placed above or below the staff; +see @ref{Direction and placement}. + +Tuplets may be nested: + +@lilypond[quote,verbatim,relative=2] +\autoBeamOff +c4 \times 4/5 { f8 e f \times 2/3 { e[ f g] } } f4 | +@end lilypond + +Modifying nested tuplets which begin at the same musical moment +must be done with @code{\tweak}. + +To modify the duration of notes without printing a tuplet bracket, +see @ref{Scaling durations}. + + +@predefined +@code{\tupletUp}, +@code{\tupletDown}, +@code{\tupletNeutral}. +@endpredefined + + +@snippets + +@cindex tuplet formatting +@cindex triplet formatting + +@funindex tupletNumberFormatFunction +@funindex tupletSpannerDuration + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{entering-several-tuplets-using-only-one--times-command.ly} + +@cindex Tuplet number changes + +@funindex TupletNumber + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{changing-the-tuplet-number.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{non-default-tuplet-numbers.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{permitting-line-breaks-within-beamed-tuplets.ly} + + +@seealso +Music Glossary: +@rglos{triplet}, +@rglos{tuplet}, +@rglos{polymetric}. + +Learning Manual: @rlearning{Tweaking methods}. + +Notation Reference: +@ref{Time administration}, +@ref{Scaling durations}, +@ref{The tweak command}, +@ref{Polymetric notation}. + +Snippets: +@rlsr{Rhythms}. + +Internals Reference: +@rinternals{TupletBracket}, +@rinternals{TupletNumber}, +@rinternals{TimeScaledMusic}. + +@cindex grace notes within tuplet brackets + +@knownissues +When the first note on a staff is a grace note followed by a +tuplet the grace note must be placed before the @code{\times} +command to avoid errors. Anywhere else, grace notes may be +placed within tuplet brackets. + + +@node Scaling durations +@unnumberedsubsubsec Scaling durations + +@cindex scaling durations +@cindex durations, scaling + +You can alter the duration of single notes, rests or chords by a +fraction @code{N/M} by appending @code{*N/M} (or @code{*N} if @code{M} +is 1) to the duration. This will not affect the appearance of the +notes or rests produced, but the altered duration will be used in +calculating the position within the measure and setting the duration +in the MIDI output. Multiplying factors may be combined such as +@code{*L*M/N}. + +In the following example, the first three notes take up exactly +two beats, but no triplet bracket is printed. + +@lilypond[quote,relative=2,verbatim] +\time 2/4 +% Alter durations to triplets +a4*2/3 gis4*2/3 a4*2/3 +% Normal durations +a4 a4 +% Double the duration of chord +4*2 +% Duration of quarter, appears like sixteenth +b16*4 c4 +@end lilypond + +The duration of skip or spacing notes may also be modified by +a multiplier. This is useful for skipping many measures, e.g., +@code{s1*23}. + +@cindex compressing music +@cindex expanding music + +@funindex \scaleDurations +@funindex scaleDurations + +Longer stretches of music may be compressed by a fraction in the +same way, as if every note, chord or rest had the fraction as a +multiplier. This leaves the appearance of the music unchanged but +the internal duration of the notes will be multiplied by the +fraction @emph{num}/@emph{den}. The spaces around the dot are +required. Here is an example showing how music can be compressed +and expanded: + +@lilypond[quote,relative=2,verbatim] +\time 2/4 +% Normal durations +4 c8 a +% Scale music by *2/3 +\scaleDurations #'(2 . 3) { + 4. c8 a f +} +% Scale music by *2 +\scaleDurations #'(2 . 1) { + 4 c8 b +} +@end lilypond + +One application of this command is in polymetric +notation, see @ref{Polymetric notation}. + + +@seealso +Notation Reference: +@ref{Tuplets}, +@ref{Invisible rests}, +@ref{Polymetric notation}. + +Snippets: +@rlsr{Rhythms}. + + +@node Ties +@unnumberedsubsubsec Ties + +@cindex tie + +@funindex ~ + +A tie connects two adjacent note heads of the same pitch. The tie +in effect extends the duration of a note. + +@warning{Ties should not be confused with @emph{slurs}, which +indicate articulation, or @emph{phrasing slurs}, which indicate +musical phrasing. A tie is just a way of extending a note +duration, similar to the augmentation dot.} + +A tie is entered using the tilde symbol (@code{~}). + +@lilypond[quote,verbatim,relative=2] +a2 ~ a +@end lilypond + +Ties are used either when the note crosses a bar line, or when +dots cannot be used to denote the rhythm. Ties should also be +used when note values cross larger subdivisions of the measure: + +@lilypond[verbatim,quote] +\relative c' { + r8 c8 ~ c2 r4 | + r8^"not" c2 ~ c8 r4 +} +@end lilypond + +If you need to tie many notes across bar lines, it may be +easier to use automatic note splitting, see @ref{Automatic note +splitting}. This mechanism automatically splits long notes, and +ties them across bar lines. + +@cindex ties and chords +@cindex chords and ties + +When a tie is applied to a chord, all note heads whose pitches +match are connected. When no note heads match, no ties will be +created. Chords may be partially tied by placing the tie inside +the chord. + +@lilypond[quote,verbatim,relative=1] + ~ + +@end lilypond + +@cindex repeating ties +@cindex ties, repeating +@cindex volta brackets and ties +@cindex ties and volta brackets + +@funindex \repeatTie +@funindex repeatTie + +When a second alternative of a repeat starts with a tied note, you +have to specify the repeated tie as follows: + +@lilypond[quote,relative=2,verbatim] +\repeat volta 2 { c g 2 ~ } +\alternative { + % First alternative: following note is tied normally + { 2. r4 } + % Second alternative: following note has a repeated tie + { 2\repeatTie d4 c } } +@end lilypond + +@cindex laissez vibrer +@cindex ties, laissez vibrer + +@funindex \laissezVibrer +@funindex laissezVibrer + +@notation{L.v.}@: ties (@notation{laissez vibrer}) indicate that +notes must not be damped at the end. It is used in notation for +piano, harp and other string and percussion instruments. They can +be entered as follows: + +@lilypond[quote,verbatim,relative=1] +1\laissezVibrer +@end lilypond + +@cindex ties, placement + +@funindex \tieUp +@funindex tieUp +@funindex \tieDown +@funindex tieDown +@funindex \tieNeutral +@funindex tieNeutral + +Ties may be manually placed above or below the staff; see +@ref{Direction and placement}. + +@cindex ties, appearance +@cindex ties, dotted +@cindex ties, dashed +@cindex dashed ties +@cindex dotted ties + +@funindex \tieDotted +@funindex tieDotted +@funindex \tieDashed +@funindex tieDashed +@funindex \tieSolid +@funindex tieSolid + +Ties may be made dashed, dotted, or a combination of solid and +dashed. + +@lilypond[quote, verbatim, relative=1] +\tieDotted +c2 ~ c +\tieDashed +c2 ~ c +\tieHalfDashed +c2 ~ c +\tieHalfSolid +c2 ~ c +\tieSolid +c2 ~ c +@end lilypond + +Custom dash patterns can be specified: + +@lilypond[quote, verbatim, relative=1] +\tieDashPattern #0.3 #0.75 +c2 ~ c +\tieDashPattern #0.7 #1.5 +c2 ~ c +\tieSolid +c2 ~ c +@end lilypond + +Dash pattern definitions for ties have the same structure as +dash pattern definitions for slurs. +For more information about complex dash patterns, +see the snippets under @ref{Slurs}. + +@predefined +@code{\tieUp}, +@code{\tieDown}, +@code{\tieNeutral}, +@code{\tieDotted}, +@code{\tieDashed}, +@code{\tieDashPattern}, +@code{\tieHalfDashed}, +@code{\tieHalfSolid}, +@code{\tieSolid}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{using-ties-with-arpeggios.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{engraving-ties-manually.ly} + + +@seealso +Music Glossary: +@rglos{tie}, +@rglos{laissez vibrer}. + +Notation Reference: +@ref{Slurs}, +@ref{Automatic note splitting}. + +Snippets: +@rlsr{Rhythms}. + +Internals Reference: +@rinternals{LaissezVibrerTie}, +@rinternals{LaissezVibrerTieColumn}, +@rinternals{TieColumn}, +@rinternals{Tie}. + + +@knownissues + +Switching staves when a tie is active will not produce a slanted +tie. + +Changing clefs or octavations during a tie is not really +well-defined. In these cases, a slur may be preferable. + + + +@node Writing rests +@subsection Writing rests + +Rests are entered as part of the music in music expressions. + +@menu +* Rests:: +* Invisible rests:: +* Full measure rests:: +@end menu + +@node Rests +@unnumberedsubsubsec Rests + +@cindex rest +@cindex rest, entering durations +@cindex maxima rest +@cindex longa rest +@cindex breve rest + +@funindex \rest +@funindex rest +@funindex r +@funindex \maxima +@funindex maxima +@funindex \longa +@funindex longa +@funindex \breve +@funindex breve + +Rests are entered like notes with the note name @code{r}. +Durations longer than a whole rest use the predefined +commands shown: + +@c \time 16/1 is used to avoid spurious bar lines +@c and long tracts of empty measures +@lilypond[fragment,quote,verbatim] +\new Staff { + % These two lines are just to prettify this example + \time 16/1 + \override Staff.TimeSignature #'stencil = ##f + % Print a maxima rest, equal to four breves + r\maxima + % Print a longa rest, equal to two breves + r\longa + % Print a breve rest + r\breve + r1 r2 r4 r8 r16 r32 r64 r128 +} +@end lilypond + +@cindex rest, multi-measure +@cindex rest, whole-measure + +Whole measure rests, centered in the middle of the measure, must be +entered as multi-measure rests. They can be used for a single +measure as well as many measures and are discussed in @ref{Full +measure rests}. + +@cindex rest, specifying vertical position + +To explicitly specify a rest's vertical position, write a note +followed by @code{\rest}. A rest of the duration of the note will +be placed at the staff position where the note would appear. This +allows for precise manual formatting of polyphonic music, since the +automatic rest collision formatter will not move these rests. + +@lilypond[quote,verbatim,relative=2] +a4\rest d4\rest +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{rest-styles.ly} + + +@seealso +Music Glossary: +@rglos{breve}, +@rglos{longa}, +@rglos{maxima}. + +Notation Reference: +@ref{Full measure rests}. + +Snippets: +@rlsr{Rhythms}. + +Internals Reference: +@rinternals{Rest}. + + +@knownissues + +@c Deliberately duplicated in Durations and Rests. -gp +There is no fundamental limit to rest durations (both in terms of +longest and shortest), but the number of glyphs is limited: there +are rests from 128th to maxima (8 x whole). + + +@node Invisible rests +@unnumberedsubsubsec Invisible rests + +@cindex skip +@cindex invisible rest +@cindex rest, invisible +@cindex spacer note +@cindex spacer rest + +@funindex s +@funindex \skip +@funindex skip + +An invisible rest (also called a @q{spacer rest}) can be entered +like a note with the note name@tie{}@code{s}: + +@lilypond[verbatim,quote,relative=2] +c4 c s c +s2 c +@end lilypond + +@cindex lyrics, skip + +Spacer rests are available only in note mode and chord mode. In +other situations, for example, when entering lyrics, @code{\skip} +is used to skip a musical moment. @code{\skip} requires an +explicit duration. + +@lilypond[quote,verbatim,relative=2] +<< + { + a2 \skip2 a2 a2 + } + \new Lyrics { + \lyricmode { + foo2 \skip 1 bla2 + } + } +>> +@end lilypond + +A spacer rest implicitly causes @code{Staff} and @code{Voice} +contexts to be created if none exist, just like notes and rests +do: + +@lilypond[quote,verbatim,fragment] +s1 s s +@end lilypond + +@code{\skip} simply skips musical time; it creates no output of +any kind. + +@lilypond[quote,verbatim,fragment] +% This is valid input, but does nothing +\skip 1 \skip1 \skip 1 +@end lilypond + + +@seealso +Learning Manual: +@rlearning{Visibility and color of objects}. + +Notation Reference: +@ref{Hidden notes}, +@ref{Visibility of objects}. + +Snippets: +@rlsr{Rhythms}. + +Internals Reference: +@rinternals{SkipMusic}. + + +@node Full measure rests +@unnumberedsubsubsec Full measure rests + +@cindex multi-measure rests +@cindex full-measure rests +@cindex rest, multi-measure +@cindex rest, full-measure +@cindex whole rest for a full measure +@cindex rest, whole for a full measure + +@funindex R + +Rests for one or more full measures are entered like notes with +the note name uppercase @code{R}: + +@lilypond[quote,verbatim,relative=2] +% Rest measures contracted to single measure +\compressFullBarRests +R1*4 +R1*24 +R1*4 +b2^"Tutti" b4 a4 +@end lilypond + +The duration of full-measure rests is identical to the duration +notation used for notes. The duration in a multi-measure rest must +always be an integral number of measure-lengths, so augmentation dots +or fractions must often be used: + +@lilypond[quote,fragment,verbatim] +\compressFullBarRests +\time 2/4 +R1 | R2 | +\time 3/4 +R2. | R2.*2 | +\time 13/8 +R1*13/8 | R1*13/8*12 | +\time 10/8 +R4*5*4 | +@end lilypond + +A full-measure rest is printed as either a whole or breve rest, +centered in the measure, depending on the time signature. + +@lilypond[quote,verbatim,fragment] +\time 4/4 +R1 | +\time 6/4 +R1*3/2 | +\time 8/4 +R1*2 | +@end lilypond + +@cindex multi-measure rest, expanding +@cindex multi-measure rest, contracting + +@funindex \expandFullBarRests +@funindex expandFullBarRests +@funindex \compressFullBarRests +@funindex compressFullBarRests + +By default a multi-measure rest is expanded in the printed score to +show all the rest measures explicitly. Alternatively, a multi-measure +rest can be shown as a single measure containing a multi-measure rest +symbol, with the number of measures of rest printed above the measure: + +@lilypond[quote,fragment,verbatim] +% Default behavior +\time 3/4 r2. | R2.*2 | +\time 2/4 R2 | +\time 4/4 +% Rest measures contracted to single measure +\compressFullBarRests +r1 | R1*17 | R1*4 | +% Rest measures expanded +\expandFullBarRests +\time 3/4 +R2.*2 | +@end lilypond + + +@cindex text on multi-measure rest +@cindex multi-measure rest, attaching text +@cindex script on multi-measure rest +@cindex multi-measure rest, script +@cindex fermata on multi-measure rest +@cindex multi-measure rest, attaching fermata +@cindex markup on multi-measure rest +@cindex multi-measure rest with markup + +@funindex \fermataMarkup +@funindex fermataMarkup +@funindex MultiMeasureRestText + +Markups can be added to multi-measure rests. +The predefined command @code{\fermataMarkup} +is provided for adding fermatas. + +@lilypond[quote,verbatim,fragment] +\compressFullBarRests +\time 3/4 +R2.*10^\markup { \italic "ad lib." } +R2.^\fermataMarkup +@end lilypond + +@warning{ +Markups attached to a multi-measure rest are +objects of type @code{MultiMeasureRestText}, not +@code{TextScript}. Overrides must be directed to the correct +object, or they will be ignored. See the following example. +} + +@lilypond[quote,verbatim,fragment] +% This fails, as the wrong object name is specified +\override TextScript #'padding = #5 +R1^"wrong" +% This is correct and works +\override MultiMeasureRestText #'padding = #5 +R1^"right" +@end lilypond + +When a multi-measure rest immediately follows a @code{\partial} +setting, resulting bar-check warnings may not be displayed. + + +@funindex \textLengthOn +@funindex textLengthOn +@funindex \textLengthOff +@funindex textLenthOff +@funindex \fermataMarkup +@funindex fermataMarkup +@funindex \compressFullBarRests +@funindex compressFullBarRests +@funindex \expandFullBarRests +@funindex expandFullBarRests + +@predefined +@code{\textLengthOn}, +@code{\textLengthOff}, +@code{\fermataMarkup}, +@code{\compressFullBarRests}, +@code{\expandFullBarRests}. +@endpredefined + + +@snippets + +@cindex church rest +@cindex rest, church +@cindex kirchenpausen + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{changing-form-of-multi-measure-rests.ly} + +@cindex multi-measure rests, positioning +@cindex positioning multi-measure rests + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{positioning-multi-measure-rests.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{multi-measure-rest-markup.ly} + + +@seealso +Music Glossary: +@rglos{multi-measure rest}. + +Notation Reference: +@ref{Durations}, +@ref{Text}, +@ref{Formatting text}, +@ref{Text scripts}. + +Snippets: +@rlsr{Rhythms}. + +Internals Reference: +@rinternals{MultiMeasureRest}, +@rinternals{MultiMeasureRestNumber}, +@rinternals{MultiMeasureRestText}. + + +@cindex fingerings and multi-measure rests +@cindex multi-measure rests and fingerings + +@knownissues + +If an attempt is made to use fingerings (e.g., +@code{R1*10-4}) to put numbers over multi-measure rests, the +fingering numeral (4) may collide with the bar counter +numeral (10). + +@cindex condensing rests +@cindex rest, condensing ordinary + +There is no way to automatically condense multiple ordinary rests +into a single multi-measure rest. + +@cindex rest, collisions of + +Multi-measure rests do not take part in rest collisions. + +@node Displaying rhythms +@subsection Displaying rhythms + +@menu +* Time signature:: +* Upbeats:: +* Unmetered music:: +* Polymetric notation:: +* Automatic note splitting:: +* Showing melody rhythms:: +@end menu + +@node Time signature +@unnumberedsubsubsec Time signature + +@cindex time signature +@cindex meter + +@funindex \time +@funindex time + +The time signature is set as follows: + +@lilypond[quote,verbatim,relative=2] +\time 2/4 c2 +\time 3/4 c2. +@end lilypond + +@cindex time signature, visibility of + +Time signatures are printed at the beginning of a piece +and whenever the time signature changes. If a change takes place +at the end of a line a warning time signature sign is printed +there. This default behavior may be changed, see +@ref{Visibility of objects}. + +@lilypond[quote,verbatim,relative=2] +\time 2/4 +c2 c +\break +c c +\break +\time 4/4 +c c c c +@end lilypond + +@cindex time signature style +@cindex meter style + +@funindex \numericTimeSignature +@funindex numericTimeSignature +@funindex \defaultTimeSignature +@funindex defaultTimeSignature + +The time signature symbol that is used in 2/2 and 4/4 time can be +changed to a numeric style: + +@lilypond[quote,verbatim,relative=2] +% Default style +\time 4/4 c1 +\time 2/2 c1 +% Change to numeric style +\numericTimeSignature +\time 4/4 c1 +\time 2/2 c1 +% Revert to default style +\defaultTimeSignature +\time 4/4 c1 +\time 2/2 c1 +@end lilypond + + +Mensural time signatures are covered in +@ref{Mensural time signatures}. + + +@predefined +@code{\numericTimeSignature}, +@code{\defaultTimeSignature}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{changing-the-time-signature-without-affecting-the-beaming.ly} + +@cindex compound time signatures +@cindex time signature, compound + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{compound-time-signatures.ly} + + +@seealso +Music Glossary: +@rglos{time signature} + +Notation Reference: +@ref{Mensural time signatures}, +@ref{Time administration}. + +Snippets: +@rlsr{Rhythms}. + +Internals Reference: +@rinternals{TimeSignature}, +@rinternals{Timing_translator}. + + +@node Upbeats +@unnumberedsubsubsec Upbeats + +@cindex anacrusis +@cindex upbeat +@cindex partial measure +@cindex measure, partial +@cindex pickup measure +@cindex measure, change length + +@funindex measurePosition +@funindex \partial +@funindex partial + +Partial or pick-up measures, such as an anacrusis or upbeat, are +entered using the @code{\partial} command, with the syntax + +@example +\partial @var{duration} +@end example + +@noindent +where @code{duration} is the rhythmic length of the interval +before the start of the first complete measure: + +@lilypond[quote,verbatim,relative=2] +\partial 4 e4 | +a2. c,4 | +@end lilypond + +The partial measure can be any duration less than a full measure: + +@lilypond[quote,verbatim,relative=2] +\partial 8*3 c8 d e | +a2. c,4 | +@end lilypond + +Internally, @code{\partial} is translated into + +@example +\set Timing.measurePosition = -@var{duration} +@end example + +@noindent +The property @code{measurePosition} contains a rational number +indicating how much of the measure has passed at this point. Note +that this is set to a negative number by the @code{\partial} +command: i.e., @code{\partial 4} is internally translated to +@code{-4}, meaning @qq{there is a quarter note left in the measure.} + + +@seealso +Music Glossary: +@rglos{anacrusis}. + +Notation Reference: +@ref{Grace notes}. + +Snippets: +@rlsr{Rhythms}. + +Internal Reference: +@rinternals{Timing_translator}. + + +@knownissues + +The @code{\partial} command is intended to be used only at the +beginning of a piece. If you use it after the beginning, some +odd warnings may occur. + +@node Unmetered music +@unnumberedsubsubsec Unmetered music + +@cindex bar lines, turning off +@cindex bar numbering, turning off +@cindex cadenza +@cindex unmetered music + +@funindex \cadenzaOn +@funindex cadenzaOn +@funindex \cadenzaOff +@funindex cadenzaOff + +Bar lines and bar numbers are calculated automatically. For +unmetered music (some cadenzas, for example), this is not desirable. +To turn off automatic calculation of bar lines and bar numbers, +use the command @code{\cadenzaOn}, and use @code{\cadenzaOff} +to turn them on again. + +@lilypond[verbatim,relative=2,fragment] +c4 d e d +\cadenzaOn +c4 c d8 d d f4 g4. +\cadenzaOff +\bar "|" +d4 e d c +@end lilypond + +Bar numbering is resumed at the end of the cadenza as if the +cadenza were not there: + +@lilypond[verbatim,relative=2,fragment] +% Show all bar numbers +\override Score.BarNumber #'break-visibility = #all-visible +c4 d e d +\cadenzaOn +c4 c d8 d d f4 g4. +\cadenzaOff +\bar "|" +d4 e d c +@end lilypond + + +@predefined +@code{\cadenzaOn}, +@code{\cadenzaOff}. +@endpredefined + + +@seealso +Music Glossary: +@rglos{cadenza}. + +Notation Reference: +@ref{Visibility of objects}. + +Snippets: +@rlsr{Rhythms}. + + +@cindex cadenza line breaks +@cindex cadenza page breaks +@cindex unmetered music, line breaks +@cindex unmetered music, page breaks +@cindex breaks in unmetered music +@cindex line breaks in cadenzas +@cindex page breaks in cadenzas +@cindex line breaks in unmetered music +@cindex page breaks in unmetered music + +@knownissues + +LilyPond will insert line breaks and page breaks only at a +bar line. Unless the unmetered music ends before the end of the +staff line, you will need to insert invisible bar lines with + +@example +\bar "" +@end example + +@noindent +to indicate where breaks can occur. + + +@node Polymetric notation +@unnumberedsubsubsec Polymetric notation + +@c This section necessarily uses \set +@c This is acceptable -td + +@cindex double time signatures +@cindex signatures, polymetric +@cindex time signatures, polymetric +@cindex time signatures, double +@cindex polymetric signatures +@cindex meter, polymetric + +@funindex timeSignatureFraction +@funindex \scaleDurations +@funindex scaleDurations +@funindex \times +@funindex times + +Polymetric notation is supported, either explicitly or by modifying +the visible time signature symbol and scaling the note durations. + +@strong{@i{Staves with different time signatures, equal measure lengths}} + +This notation can be created by setting a common time signature +for each staff but replacing the symbol manually by setting +@code{timeSignatureFraction} to the desired fraction and scaling +the printed durations in each staff to the common time +signature; see @ref{Time signature}. The scaling is done with +@code{\scaleDurations}, which is used in a similar way to +@code{\times}, but does not create a tuplet bracket; see +@ref{Scaling durations}. + +@cindex beaming in polymetric music +@cindex beaming in polymetric meter + +In this example, music with the time signatures of 3/4, 9/8, and +10/8 are used in parallel. In the second staff, shown durations +are multiplied by 2/3, as 2/3 * 9/8 = 3/4, and in the third +staff, shown durations are multiplied by 3/5, as 3/5 * 10/8 = 3/4. +It will often be necessary to insert beams manually, as the +duration scaling affects the autobeaming rules. + +@lilypond[quote,verbatim,fragment] +\relative c' << + \new Staff { + \time 3/4 + c4 c c | + c c c | + } + \new Staff { + \time 3/4 + \set Staff.timeSignatureFraction = #'(9 . 8) + \scaleDurations #'(2 . 3) + \repeat unfold 6 { c8[ c c] } + } + \new Staff { + \time 3/4 + \set Staff.timeSignatureFraction = #'(10 . 8) + \scaleDurations #'(3 . 5) { + \repeat unfold 2 { c8[ c c] } + \repeat unfold 2 { c8[ c] } | + c4. c4. \times 2/3 { c8[ c c] } c4 + } + } +>> +@end lilypond + +@strong{@i{Staves with different time signatures, unequal bar lengths}} + +Each staff can be given its own independent time signature by +moving the @code{Timing_translator} and the +@code{Default_bar_line_engraver} to the @code{Staff} context. + +@lilypond[quote,verbatim] +\layout { + \context { + \Score + \remove "Timing_translator" + \remove "Default_bar_line_engraver" + } + \context { + \Staff + \consists "Timing_translator" + \consists "Default_bar_line_engraver" + } +} + +% Now each staff has its own time signature. + +\relative c' << + \new Staff { + \time 3/4 + c4 c c | + c c c | + } + \new Staff { + \time 2/4 + c4 c | + c c | + c c | + } + \new Staff { + \time 3/8 + c4. | + c8 c c | + c4. | + c8 c c | + } +>> +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{compound-time-signatures.ly} + + +@seealso +Music Glossary: +@rglos{polymetric}, +@rglos{polymetric time signature}, +@rglos{meter}. + +Notation Reference: +@ref{Time signature}, +@ref{Scaling durations}. + +Snippets: +@rlsr{Rhythms}. + +Internals Reference: +@rinternals{TimeSignature}, +@rinternals{Timing_translator}, +@rinternals{Default_bar_line_engraver}, +@rinternals{Staff}. + + +@knownissues + +When using different time signatures in parallel, notes +at the same moment will be be placed at the same horizontal +location. However, the bar lines in the different staves +will cause the note spacing to be less regular in each of the +individual staves than would be normal without the different +time signatures. + +@node Automatic note splitting +@unnumberedsubsubsec Automatic note splitting + +@cindex notes, splitting +@cindex splitting notes + +@funindex Note_heads_engraver +@funindex Completion_heads_engraver + +Long notes which overrun bar lines can be converted automatically +to tied notes. This is done by replacing the +@code{Note_heads_engraver} with the +@code{Completion_heads_engraver}. In the following +example, notes crossing the bar lines are split and tied. + +@lilypond[quote,verbatim,relative=1] +\new Voice \with { + \remove "Note_heads_engraver" + \consists "Completion_heads_engraver" +} + +{ c2. c8 d4 e f g a b c8 c2 b4 a g16 f4 e d c8. c2 } +@end lilypond + +This engraver splits all running notes at the bar line, and +inserts ties. One of its uses is to debug complex scores: if the +measures are not entirely filled, then the ties show exactly how +much each measure is off. + + +@seealso +Music Glossary: @rglos{tie} + +Learning Manual: +@rlearning{Engravers explained}, +@rlearning{Adding and removing engravers}. + +Snippets: +@rlsr{Rhythms}. + +Internals Reference: +@rinternals{Note_heads_engraver}, +@rinternals{Completion_heads_engraver}, +@rinternals{Forbid_line_break_engraver}. + + +@knownissues + +Not all durations (especially those containing tuplets) can be +represented exactly with normal notes and dots, but the +@code{Completion_heads_engraver} will not insert tuplets. + +The @code{Completion_heads_engraver} only affects notes; it does not +split rests. + + +@node Showing melody rhythms +@unnumberedsubsubsec Showing melody rhythms + +@cindex melody rhythms, showing +@cindex rhythms, showing melody + +Sometimes you might want to show only the rhythm of a melody. This +can be done with the rhythmic staff. All pitches of notes on such a +staff are squashed, and the staff itself has a single line + +@lilypond[quote,relative=1,verbatim] +<< + \new RhythmicStaff { + \new Voice = "myRhythm" { + \time 4/4 + c4 e8 f g2 + r4 g g f + g1 + } + } + \new Lyrics { + \lyricsto "myRhythm" { + This is my song + I like to sing + } + } +>> +@end lilypond + +@cindex guitar chord charts +@cindex strumming rhythms, showing +@cindex guitar strumming rhythms, showing + +@funindex Pitch_squash_engraver +@funindex \improvisationOn +@funindex improvisationOn +@funindex \improvisationOff +@funindex improvisationOff + +Guitar chord charts often show the strumming rhythms. This can +be done with the @code{Pitch_squash_engraver} and +@code{\improvisationOn}. + + +@lilypond[quote,verbatim] +<< + \new ChordNames { + \chordmode { + c1 f g c + } + } + + \new Voice \with { + \consists Pitch_squash_engraver + } \relative c'' { + \improvisationOn + c4 c8 c c4 c8 c + f4 f8 f f4 f8 f + g4 g8 g g4 g8 g + c4 c8 c c4 c8 c + } +>> +@end lilypond + + +@predefined +@code{\improvisationOn}, +@code{\improvisationOff}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{guitar-strum-rhythms.ly} + + +@seealso +Snippets: +@rlsr{Rhythms}. + +Internals Reference: +@rinternals{RhythmicStaff}, +@rinternals{Pitch_squash_engraver}. + + +@node Beams +@subsection Beams + +@menu +* Automatic beams:: +* Setting automatic beam behavior:: +* Manual beams:: +* Feathered beams:: +@end menu + +@node Automatic beams +@unnumberedsubsubsec Automatic beams + +By default, beams are inserted automatically: + +@cindex beams, manual +@cindex manual beams +@cindex beams, setting rules for +@cindex beams, custom rules for + +@funindex \autoBeamOn +@funindex autoBeamOn +@funindex \autoBeamOff +@funindex autoBeamOff + +@lilypond[quote,verbatim,relative=2] +\time 2/4 c8 c c c +\time 6/8 c c c c8. c16 c8 +@end lilypond + +If these automatic decisions are not satisfactory, beaming can be +entered explicitly; see @ref{Manual beams}. Beams @emph{must} be +entered manually if beams are to be extended over rests. + +If automatic beaming is not required, it may be turned off with +@code{\autoBeamOff} and on with @code{\autoBeamOn}: + +@lilypond[quote,relative=1,verbatim] +c4 c8 c8. c16 c8. c16 c8 +\autoBeamOff +c4 c8 c8. c16 c8. +\autoBeamOn +c16 c8 +@end lilypond + +@cindex melismata, beams +@cindex beams and melismata + +@warning{If beams are used to indicate melismata in songs, then +automatic beaming should be switched off with @code{\autoBeamOff} +and the beams indicated manually.} + +Beaming patterns that differ from the automatic defaults can be +created; see @ref{Setting automatic beam behavior}. + + +@predefined +@code{\autoBeamOff}, +@code{\autoBeamOn}. +@endpredefined + + +@snippets + +@cindex line breaks and beams +@cindex beams and line breaks + +@funindex breakable + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{beams-across-line-breaks.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{changing-beam-knee-gap.ly} + + +@seealso +Notation Reference: +@ref{Manual beams}, +@ref{Setting automatic beam behavior}. + +Installed Files: +@file{scm/@/auto@/-beam@/.scm}. + +Snippets: +@rlsr{Rhythms}. + +Internals Reference: @rinternals{Beam}. + + +@knownissues + +Beams can collide with note heads and accidentals in other voices. + + +@node Setting automatic beam behavior +@unnumberedsubsubsec Setting automatic beam behavior + + +@cindex automatic beams, tuning +@cindex tuning automatic beaming +@cindex automatic beam generation +@cindex autobeam +@cindex lyrics and beaming + +@funindex autoBeaming +@funindex beamSettings +@funindex measureLength +@funindex beatLength +@funindex \time +@funindex time +@funindex \set +@funindex set + +The placement of automatic beams is determined by the time signature. +Three types of rules are used for determining the end of automatic +beams: @emph{default} rules +for the time signature, @emph{explicit} rules for the beam in the time +signature, and the @emph{beatLength} for the time signature. + +The following rules, in order of priority, apply when determining +the appearance of beams: + +@itemize + +@item If a manual beam is specified with @code{[..]} set the beam +as specified, otherwise + +@item if @code{\autoBeamOff} is in force do not beam, otherwise + +@item if an explicit beam-ending rule is defined for the beam type +in the time signature, use it to determine the valid +places where beams may end, otherwise + +@item if a default beam-ending rule is defined in the time signature, +use it to group notes with beams, otherwise + +@item use the value of @code{beatLength} to group notes with beams + +@end itemize + +@i{@strong{Modifying the grouping of beats}} + +By default @code{beatLength} is +derived from the time signature set by the @code{\time} command. +The @code{beatLength} is set to be one over the denominator +of the time signature. + +@code{beatLength} is a @i{moment}, +a unit of musical duration. A quantity of type @i{moment} is +created by the scheme function @code{ly:make-moment}. For more +information about this function, see @ref{Time administration}. + +Autobeam and beam subdivide settings are stored in the +@code{beamSettings} property. Default values of @code{beamSettings} +are determined in @file{scm/beam-settings.scm}. Entries in +@code{beamSettings} are indexed by time signature and +rule type. + +Time signature should be a scheme pair , e.g. @code{#'(4 . 4)}. + +Rule type should be @code{#'end} for beam ending and @code{#'subdivide} for +beam subdivision. + +The ending and subdivision rules consist of a scheme alist +(or list of pairs) that +indicates the beam type and the grouping to be applied to that +beam type. + +@example +#'((beam-type1 . grouping-1) + (beam-type2 . grouping-2) + (beam-type3 . grouping-3)) +@end example + +Beam type is either a scheme pair indicating the duration +of the beam, e.g. @code{(1 . 16)}, or @code{*} to indicate a +default rule, which applies to all beams if no explicit rule is +defined. + +Grouping is a scheme list indicating the grouping to be applied to +the beam. For default rules (where beam type is +@code{*}, the grouping is in units of @code{beatLength}. +For explicit rules, the grouping is in units of the beam type. + +Beam settings are changed with +@code{\overrideBeamSettings} and @code{\revertBeamSettings}. + +@lilypond[quote,relative=2,verbatim] + \time 5/16 + c8^"beats" c16 c8 | + \overrideBeamSettings #'Score #'(5 . 16) #'end #'((* . (2 3))) + c8^"(2+3)" c16 c8 + \overrideBeamSettings #'Score #'(5 . 16) #'end #'((* . (3 2))) + c8^"(3+2)" c16 c8 +@end lilypond + +Beam setting changes can be limited to specific contexts. If no +setting is included in a lower-level context, the setting of the +enclosing context will apply. + +@lilypond[quote, verbatim,relative=1] +\new Staff << + \time 7/8 + \new Voice = one { + \relative c'' { + \overrideBeamSettings #'Staff #'(7 . 8) #'end #'((* . (2 3 2))) + a8 a a a a a a + } + } + \new Voice = two { + \relative c' { + \voiceTwo + \overrideBeamSettings #'Voice #'(7 . 8) #'end #'((* . (1 3 3))) + f8 f f f f f f + } + } +>> +@end lilypond + +When multiple voices are used the @code{Staff} context must be +specified if the beaming is to be applied to all voices in the +staff: + +@lilypond[quote,verbatim,relative=2] +\time 7/8 +% rhythm 3-1-1-2 +% Context Voice specified -- does not work correctly +% Because of autogenerated voices, all beating will +% be at beatLength (1 . 8) +\overrideBeamSettings #'Voice #'(7 . 8) #'end #'((* . (3 1 1 2))) +<< {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >> + +% Works correctly with context Staff specified +\overrideBeamSettings #'Staff #'(7 . 8) #'end #'((* . (3 1 1 2))) +<< {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >> +@end lilypond + +@funindex revertBeamSettings + +Beam settings can be reverted to get back to default behavior. This +is accomplished by using @code{\revertBeamSettings}. The arguments +are the same as for @code{\overrideBeamSettings}, except no value +for @var{grouping} is given: + +@example +\revertBeamSettings context time-signature rule-type +@end example + + +@lilypond[quote,verbatim,relative=2] +\time 4/4 +\repeat unfold 16 {a16} +% set default rule for (1 1 1 1) grouping +\overrideBeamSettings #'Score #'(4 . 4) #'end #'((* . (1 1 1 1))) +\repeat unfold 16 {a16} +% revert the new rule +\revertBeamSettings #'Score #'(4 . 4) #'end +\repeat unfold 16 {a16} +@end lilypond + +@snippets + +@cindex beams, subdividing + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{sub-dividing-beams.ly} + +@cindex measure groupings +@cindex beats, grouping +@cindex grouping beats +@cindex measure sub-grouping + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{conducting-signs,-measure-grouping-signs.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{beam-endings-in-score-context.ly} + +@cindex beam, last in score +@cindex beam, last in polyphonic voice + +@knownissues + +If a score ends while an automatic beam has not been ended and is +still accepting notes, this last beam will not be typeset at all. +The same holds for polyphonic voices, entered with @code{<< +@dots{} \\ @dots{} >>}. If a polyphonic voice ends while an +automatic beam is still accepting notes, it is not typeset. + + +@seealso +Snippets: +@rlsr{Rhythms}. + + +@node Manual beams +@unnumberedsubsubsec Manual beams + +@cindex beams, manual +@cindex manual beams + +@funindex ] +@funindex [ + +In some cases it may be necessary to override the automatic +beaming algorithm. For example, the autobeamer will not put beams +over rests or bar lines, and in choral scores the beaming is +often set to follow the meter of the lyrics rather than the +notes. Such beams can be specified manually by +marking the begin and end point with @code{[} and @code{]} + +@lilypond[quote,relative=1,verbatim] +{ + r4 r8[ g' a r8] r8 g[ | a] r8 +} +@end lilypond + + +@funindex \noBeam +@funindex noBeam + +Individual notes may be marked with @code{\noBeam} to prevent them +from being beamed: + +@lilypond[quote,verbatim,relative=2] +\time 2/4 c8 c\noBeam c c +@end lilypond + +@funindex stemLeftBeamCount +@funindex stemRightBeamCount + +Even more strict manual control with the beams can be achieved by +setting the properties @code{stemLeftBeamCount} and +@code{stemRightBeamCount}. They specify the number of beams to +draw on the left and right side, respectively, of the next note. +If either property is set, its value will be used only once, and +then it is erased. In this example, the last @code{f} is printed +with only one beam on the left side, i.e., the eighth-note beam of +the group as a whole. + +@lilypond[quote,relative=2,verbatim] +a8[ r16 f g a] +a8[ r16 +\set stemLeftBeamCount = #2 +\set stemRightBeamCount = #1 +f +\set stemLeftBeamCount = #1 +g a] +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{flat-flags-and-beam-nibs.ly} + +@node Feathered beams +@unnumberedsubsubsec Feathered beams + +@cindex beams, feathered +@cindex feathered beams + +@funindex \featherDurations +@funindex featherDurations +@funindex grow-direction + +Feathered beams are used to indicate that a small group of notes +should be played at an increasing (or decreasing) tempo, without +changing the overall tempo of the piece. The extent of the +feathered beam must be indicated manually using @code{[} and +@code{]}, and the beam feathering is turned on by specifying a +direction to the @code{Beam} property @code{grow-direction}. + +If the placement of the notes and the sound in the MIDI output is to +reflect the ritardando or accelerando indicated by the feathered beam +the notes must be grouped as a music expression delimited by braces +and preceded by a @code{featherDurations} command which specifies +the ratio between the durations of the first and last notes in the +group. + +The square brackets show the extent of the beam and the braces show +which notes are to have their durations modified. Normally these +would delimit the same group of notes, but this is not required: the +two commands are independent. + +In the following example the eight 16th notes occupy exactly the +same time as a half note, but the first note is one half as long +as the last one, with the intermediate notes gradually +lengthening. The first four 32nd notes gradually speed up, while +the last four 32nd notes are at a constant tempo. + +@lilypond[relative=1,verbatim,quote] +\override Beam #'grow-direction = #LEFT +\featherDurations #(ly:make-moment 2 1) +{ c16[ c c c c c c c] } +\override Beam #'grow-direction = #RIGHT +\featherDurations #(ly:make-moment 2 3) +{ c32[ d e f] } +% revert to non-feathered beams +\override Beam #'grow-direction = #'() +{ g32[ a b c] } +@end lilypond + +@noindent +The spacing in the printed output represents the +note durations only approximately, but the MIDI output is exact. + +@knownissues + +The @code{\featherDurations} command only works with very short +music snippets, and when numbers in the fraction are small. + + +@seealso +Snippets: +@rlsr{Rhythms}. + + +@node Bars +@subsection Bars + + +@menu +* Bar lines:: +* Bar numbers:: +* Bar and bar number checks:: +* Rehearsal marks:: +@end menu + +@node Bar lines +@unnumberedsubsubsec Bar lines + +@cindex bar lines +@cindex measure lines +@cindex closing bar lines +@cindex bar lines, closing +@cindex double bar lines +@cindex bar lines, double +@cindex repeat bars + +@funindex \bar +@funindex bar + +Bar lines delimit measures, and are also used to indicate +repeats. Normally, simple bar lines are automatically inserted +into the printed output at places based on the current time +signature. + +The simple bar lines inserted automatically can be changed to +other types with the @code{\bar} command. For example, a closing +double bar line is usually placed at the end of a piece: + +@lilypond[quote,relative=1,verbatim] +e4 d c2 \bar "|." +@end lilypond + +It is not invalid if the final note in a measure does not +end on the automatically entered bar line: the note is assumed +to carry over into the next measure. But if a long sequence +of such carry-over measures appears the music can appear compressed +or even flowing off the page. This is because automatic line +breaks happen only at the end of complete measures, i.e., where +all notes end before the end of a measure. + +@warning{An incorrect duration can cause line breaks to be +inhibited, leading to a line of highly compressed music or +music which flows off the page.} + +@cindex line breaks +@cindex bar lines, invisible +@cindex measure lines, invisible + +Line breaks are also permitted at manually inserted bar lines +even within incomplete measures. To allow a line break without +printing a bar line, use + +@example +\bar "" +@end example + +@noindent +This will insert an invisible bar line and allow (but not +force) a line break to occur at this point. The bar number +counter is not increased. To force a line break see +@ref{Line breaking}. + +@cindex manual bar lines +@cindex manual measure lines +@cindex bar lines, manual +@cindex measure lines, manual + +This and other special bar lines may be inserted manually at any +point. When they coincide with the end of a measure they replace the +simple bar line which would have been inserted there automatically. +When they do not coincide with the end of a measure the specified bar +line is inserted at that point in the printed output. Such insertions +do not affect the calculation and placement of subsequent automatic +bar lines. + +Two types of simple bar lines and five types of double bar lines are available +for manual insertion: + +@lilypond[quote,relative=1,verbatim] +f1 \bar "|" +f \bar "." +g \bar "||" +a \bar ".|" +b \bar ".|." +c \bar "|.|" +d \bar "|." +e +@end lilypond + +@noindent +together with dotted and dashed bar lines: + +@lilypond[quote,relative=1,verbatim] +f1 \bar ":" +g \bar "dashed" +a +@end lilypond + +@noindent +and five types of repeat bar line: + +@lilypond[quote,relative=1,verbatim] +f1 \bar "|:" +g \bar ":|:" +a \bar ":|.|:" +b \bar ":|.:" +c \bar ":|" +d +@end lilypond + +Additionally, a bar line can be printed as a simple tick: +@lilypond[quote,relative=1,verbatim] +f1 \bar "'" +@end lilypond +However, as such ticks are typically used in Gregorian chant, it is preferable +to use @code{\divisioMinima} there instead, described in the section +@ref{Divisiones} in Gregorian chant. + + +@cindex repeats + +Although the bar line types signifying repeats may be inserted +manually they do not in themselves cause LilyPond to recognize +a repeated section. Such repeated sections are better entered +using the various repeat commands (see @ref{Repeats}), which +automatically print the appropriate bar lines. + +In addition, you can specify @code{"||:"}, which is equivalent to +@code{"|:"} except at line breaks, where it gives a double bar +line at the end of the line and a start repeat at the beginning of +the next line. + +@lilypond[quote,relative=2,verbatim] +c c c c +\bar "||:" +c c c c \break +\bar "||:" +c c c c +@end lilypond + +In scores with many staves, a @code{\bar} command in one staff is +automatically applied to all staves. The resulting bar lines are +connected between different staves of a @code{StaffGroup}, +@code{PianoStaff}, or @code{GrandStaff}. + +@lilypond[quote,fragment,verbatim] +<< + \new StaffGroup << + \new Staff { + e'4 d' + \bar "||" + f' e' + } + \new Staff { \clef bass c4 g e g } + >> + \new Staff { \clef bass c2 c2 } +>> +@end lilypond + + +@cindex default bar lines, changing +@cindex bar lines, default, changing + +@snippets + +@funindex whichBar +@funindex defaultBarType +@funindex \bar +@funindex bar +@funindex bartype + +The command @code{\bar }@var{bartype} is a shortcut for +@code{\set Timing.whichBar = }@var{bartype}. A bar line is +created whenever the @code{whichBar} property is +set. + +The default bar type used for automatically inserted bar lines is +@code{"|"}. This may be changed at any time +with @code{\set Timing.defaultBarType = }@var{bartype}. + + +@seealso +Notation Reference: +@ref{Line breaking}, +@ref{Repeats}, +@ref{Grouping staves}. + +Snippets: +@rlsr{Rhythms}. + +Internals Reference: @rinternals{BarLine} (created at +@rinternals{Staff} level), @rinternals{SpanBar} (across +staves), @rinternals{Timing_translator} (for Timing +properties). + + +@node Bar numbers +@unnumberedsubsubsec Bar numbers + +@cindex bar numbers +@cindex measure numbers +@cindex numbers, bar +@cindex numbers, measure + +@funindex currentBarNumber + +Bar numbers are typeset by default at the start of every line except +the first line. The number itself is stored in the +@code{currentBarNumber} property, which is normally updated +automatically for every measure. It may also be set manually: + +@lilypond[verbatim,quote,fragment,relative=1] +c1 c c c +\break +\set Score.currentBarNumber = #50 +c1 c c c +@end lilypond + +@cindex bar numbers, regular spacing + +@funindex barNumberVisibility +@funindex BarNumber + +Bar numbers can be typeset at regular intervals instead of just at +the beginning of every line. To do this the default behavior +must be overridden to permit bar numbers to be printed at places +other than the start of a line. This is controlled by the +@code{break-visibility} property of @code{BarNumber}. This takes +three values which may be set to @code{#t} or @code{#f} to specify +whether the corresponding bar number is visible or not. The order +of the three values is @code{end of line visible}, @code{middle of +line visible}, @code{beginning of line visible}. In the following +example bar numbers are printed at all possible places: + +@lilypond[verbatim,quote,relative=1] +\override Score.BarNumber #'break-visibility = #'#(#t #t #t) +\set Score.currentBarNumber = #11 +% Permit first bar number to be printed +\bar "" +c1 | c | c | c +\break +c1 | c | c | c +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{printing-the-bar-number-for-the-first-measure.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{printing-bar-numbers-at-regular-intervals.ly} + +@cindex measure number, format +@cindex bar number, format + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{printing-bar-numbers-inside-boxes-or-circles.ly} + +@cindex bar number alignment + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{aligning-bar-numbers.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{removing-bar-numbers-from-a-score.ly} + + +@seealso +Snippets: +@rlsr{Rhythms}. + +Internals Reference: @rinternals{BarNumber}. + + +@cindex bar number collision +@cindex collision, bar number + +@knownissues + +Bar numbers may collide with the top of the @code{StaffGroup} bracket, +if there is one. To solve this, the @code{padding} property of +@code{BarNumber} can be used to position the number correctly. See +@rinternals{StaffGroup} and @rinternals{BarNumber} for more. + + + +@node Bar and bar number checks +@unnumberedsubsubsec Bar and bar number checks + +@cindex bar check +@cindex bar number check +@cindex measure check +@cindex measure number check + +@funindex barCheckSynchronize +@funindex | + +Bar checks help detect errors in the entered durations. A bar check +may be entered using the bar symbol, @code{|}, at any place where a +bar line is expected to fall. If bar check lines are encountered at +other places, a list of warnings is printed in the log file, showing +the line numbers and lines in which the bar checks failed. In the +next example, the second bar check will signal an error. + +@example +\time 3/4 c2 e4 | g2 | +@end example + +Bar checks can also be used in lyrics, for example + +@example +\lyricmode @{ + \time 2/4 + Twin -- kle | Twin -- kle | +@} +@end example + +An incorrect duration can result in a completely garbled score, +especially if the score is polyphonic, so a good place to start +correcting input is by scanning for failed bar checks and +incorrect durations. + +If successive bar checks are off by the same musical interval, +only the first warning message is displayed. This allows the +warning to focus on the source of the timing error. + + +@funindex | +@funindex pipeSymbol + +It is also possible to redefine the action taken when a bar check +or pipe symbol, @code{|}, is encountered in the input, so that +it does something other than a bar check. This is done by +assigning a music expression to @code{pipeSymbol}. +In the following example @code{|} is set to insert a double bar +line wherever it appears in the input, rather than checking +for end of bar. + +@lilypond[quote,verbatim] +pipeSymbol = \bar "||" +{ + c'2 c'2 | + c'2 c'2 + c'2 | c'2 + c'2 c'2 +} +@end lilypond + +@funindex \barNumberCheck +@funindex barNumberCheck + +When copying large pieces of music, it can be helpful to check that +the LilyPond bar number corresponds to the original that you are +entering from. This can be checked with @code{\barNumberCheck}, for +example, + +@verbatim +\barNumberCheck #123 +@end verbatim + +@noindent +will print a warning if the @code{currentBarNumber} is not 123 +when it is processed. + + +@seealso +Snippets: +@rlsr{Rhythms}. + + +@node Rehearsal marks +@unnumberedsubsubsec Rehearsal marks + +@cindex rehearsal marks +@cindex mark, rehearsal + +@funindex \mark +@funindex mark + +To print a rehearsal mark, use the @code{\mark} command. + +@lilypond[quote,verbatim,relative=2] +c1 \mark \default +c1 \mark \default +c1 \mark #8 +c1 \mark \default +c1 \mark \default +@end lilypond + +@noindent +The letter@tie{}@q{I} is skipped in accordance with engraving +traditions. If you wish to include the letter @q{I}, then use + +@example +\set Score.markFormatter = #format-mark-alphabet +@end example + +The mark is incremented automatically if you use @code{\mark +\default}, but you can also use an integer argument to set the +mark manually. The value to use is stored in the property +@code{rehearsalMark}. + +@cindex rehearsal mark format +@cindex rehearsal mark style +@cindex style, rehearsal mark +@cindex format, rehearsal mark +@cindex mark, rehearsal, style +@cindex mark, rehearsal, format +@cindex rehearsal mark, manual +@cindex mark, rehearsal, manual +@cindex custom rehearsal mark +@cindex manual rehearsal mark + +The style is defined by the property @code{markFormatter}. It is +a function taking the current mark (an integer) and the current +context as argument. It should return a markup object. In the +following example, @code{markFormatter} is set to a pre-defined +procedure. After a few measures, it is set to a procedure that +produces a boxed number. + +@lilypond[quote,verbatim,relative=2] +\set Score.markFormatter = #format-mark-numbers +c1 \mark \default +c1 \mark \default +\set Score.markFormatter = #format-mark-box-numbers +c1 \mark \default +\set Score.markFormatter = #format-mark-circle-numbers +c1 \mark \default +\set Score.markFormatter = #format-mark-circle-letters +c1 +@end lilypond + +The file @file{scm/@/translation@/-functions@/.scm} contains the +definitions of @code{format-mark-numbers} (the default format), +@code{format-mark-box-numbers}, @code{format-mark-letters} and +@code{format-mark-box-letters}. These can be used as inspiration +for other formatting functions. + +You may use @code{format-mark-barnumbers}, +@code{format-mark-box-barnumbers}, and +@code{format-mark-circle-barnumbers} to get bar numbers instead of +incremented numbers or letters. + +Other styles of rehearsal mark can be specified manually: + +@example +\mark "A1" +@end example + +@noindent +Note that @code{Score.markFormatter} does not affect marks specified +in this manner. However, it is possible to apply a @code{\markup} to the +string. + +@example +\mark \markup@{ \box A1 @} +@end example + +@cindex segno +@cindex coda +@cindex D.S. al Fine +@cindex fermata +@cindex music glyphs +@cindex glyphs, music + +@funindex \musicglyph +@funindex musicglyph + +Music glyphs (such as the segno sign) may be printed inside a +@code{\mark} + +@lilypond[quote,verbatim,relative=1] +c1 \mark \markup { \musicglyph #"scripts.segno" } +c1 \mark \markup { \musicglyph #"scripts.coda" } +c1 \mark \markup { \musicglyph #"scripts.ufermata" } +c1 +@end lilypond + +@noindent +See @ref{The Feta font}, for a list of symbols which may be +printed with @code{\musicglyph}. + +For common tweaks to the positioning of rehearsal marks, see +@ref{Formatting text}. + + +@seealso +Notation Reference: +@ref{The Feta font}, +@ref{Formatting text}. + +Installed Files: +@file{scm/@/translation@/-functions@/.scm} contains +the definition of @code{format-mark-numbers} and +@code{format-mark-letters}. They can be used as inspiration for +other formatting functions. + +Snippets: +@rlsr{Rhythms}. + +Internals Reference: @rinternals{RehearsalMark}. + + +@node Special rhythmic concerns +@subsection Special rhythmic concerns + + +@menu +* Grace notes:: +* Aligning to cadenzas:: +* Time administration:: +@end menu + +@node Grace notes +@unnumberedsubsubsec Grace notes + +@cindex ornaments +@cindex grace notes +@cindex appoggiatura +@cindex acciaccatura + +@funindex \grace +@funindex grace + +Grace notes are ornaments that are written out. Grace notes +are printed in a smaller font and take up no logical time +in a measure. + +@lilypond[quote,relative=2,verbatim] +c4 \grace c16 c4 +\grace { c16[ d16] } c2 +@end lilypond + +LilyPond also supports two special types of grace notes, the +@emph{acciaccatura} -- an unmeasured grace note indicated by a slurred +small note with a slashed stem -- and the @emph{appoggiatura}, which +takes a fixed fraction of the main note and appears in small print +without a slash. + +@lilypond[quote,relative=2,verbatim] +\grace c8 b4 +\acciaccatura d8 c4 +\appoggiatura e8 d4 +\acciaccatura { g16[ f] } e4 +@end lilypond + +The placement of grace notes is synchronized between different +staves. In the following example, there are two sixteenth grace +notes for every eighth grace note + +@lilypond[quote,relative=2,verbatim] +<< \new Staff { e2 \grace { c16[ d e f] } e2 } + \new Staff { c2 \grace { g8[ b] } c2 } >> +@end lilypond + +@cindex grace notes, following + +@funindex \afterGrace +@funindex afterGrace + +If you want to end a note with a grace, use the @code{\afterGrace} +command. It takes two arguments: the main note, and the grace +notes following the main note. + +@lilypond[quote,verbatim,relative=2] +c1 \afterGrace d1 { c16[ d] } c1 +@end lilypond + +This will put the grace notes after a space lasting 3/4 of the +length of the main note. The default fraction 3/4 can be changed by +setting @code{afterGraceFraction}. The following example shows +the results from setting the space at the default, at 15/16, and +finally at 1/2 of the main note. + +@lilypond[quote,verbatim,relative=2] +<< + \new Staff { + c1 \afterGrace d1 { c16[ d] } c1 + } + \new Staff { + #(define afterGraceFraction (cons 15 16)) + c1 \afterGrace d1 { c16[ d] } c1 + } + \new Staff { + #(define afterGraceFraction (cons 1 2)) + c1 \afterGrace d1 { c16[ d] } c1 + } +>> +@end lilypond + +The space between the main note and the grace note may also be +specified using spacers. The following example places the grace +note after a space lasting 7/8 of the main note. + +@lilypond[quote,verbatim,relative=2] +\new Voice { + << { d1^\trill_( } + { s2 s4. \grace { c16[ d] } } >> + c1) +} +@end lilypond + +@cindex tweaking grace notes +@cindex grace notes, tweaking +@cindex grace notes, changing layout settings + +A @code{\grace} music expression will introduce special +typesetting settings, for example, to produce smaller type, and +set directions. Hence, when introducing layout tweaks to +override the special settings, they should be placed inside +the grace expression. The overrides should also be reverted +inside the grace expression. Here, the grace note's default stem +direction is overridden and then reverted. + +@lilypond[quote,verbatim,relative=2] +\new Voice { + \acciaccatura { + \stemDown + f16-> + \stemNeutral + } + g4 e c2 +} +@end lilypond + + +@cindex stem, with slash + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{using-grace-note-slashes-with-normal-heads.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{tweaking-grace-layout-within-music.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{redefining-grace-note-global-defaults.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{positioning-grace-notes-with-floating-space.ly} + + +@seealso +Music Glossary: +@rglos{grace notes}, +@rglos{acciaccatura}, +@rglos{appoggiatura}. + +Installed Files: @file{ly/@/grace@/-init@/.ly}. + +Snippets: @rlsr{Rhythms}. + +Internals Reference: @rinternals{GraceMusic}. + + +@knownissues + +@cindex acciaccatura, multi-note +@cindex multi-note acciaccatura +@cindex grace-note synchronization + +A multi-note beamed @i{acciaccatura} is printed without a slash, +and looks exactly the same as a multi-note beamed +@i{appoggiatura}. + +@c TODO Add link to LSR snippet to add slash when available + +Grace note synchronization can also lead to surprises. Staff +notation, such as key signatures, bar lines, etc., are also +synchronized. Take care when you mix staves with grace notes and +staves without, for example, + +@lilypond[quote,relative=2,verbatim] +<< + \new Staff { e4 \bar "|:" \grace c16 d2. } + \new Staff { c4 \bar "|:" d2. } +>> +@end lilypond + +@noindent +This can be remedied by inserting grace skips of the corresponding +durations in the other staves. For the above example + +@lilypond[quote,relative=2,verbatim] +<< + \new Staff { e4 \bar "|:" \grace c16 d2. } + \new Staff { c4 \bar "|:" \grace s16 d2. } +>> +@end lilypond + +Grace sections should only be used within sequential music +expressions. Nesting or juxtaposing grace sections is not +supported, and might produce crashes or other errors. + +@node Aligning to cadenzas +@unnumberedsubsubsec Aligning to cadenzas + +@cindex cadenza +@cindex cadenza, aligning to +@cindex aligning to cadenza + +In an orchestral context, cadenzas present a special problem: when +constructing a score that includes a measured cadenza or other solo +passage, all other instruments should skip just as many notes as the +length of the cadenza, otherwise they will start too soon or too late. + +One solution to this problem is to use the functions +@code{mmrest-of-length} and @code{skip-of-length}. These Scheme +functions take a defined piece of music as an argument and generate a +multi-measure rest or @code{\skip} exactly as long as the piece. + +@lilypond[verbatim,quote] +MyCadenza = \relative c' { + c4 d8 e f g g4 + f2 g4 g +} + +\new GrandStaff << + \new Staff { + \MyCadenza c'1 + \MyCadenza c'1 + } + \new Staff { + #(ly:export (mmrest-of-length MyCadenza)) + c'1 + #(ly:export (skip-of-length MyCadenza)) + c'1 + } +>> +@end lilypond + + +@seealso +Music Glossary: +@rglos{cadenza}. + +Snippets: +@rlsr{Rhythms}. + + +@node Time administration +@unnumberedsubsubsec Time administration + +@cindex time administration +@cindex timing (within the score) +@cindex music, unmetered +@cindex unmetered music + +@funindex currentBarNumber +@funindex measurePosition +@funindex measureLength + +Time is administered by the @code{Timing_translator}, which by +default is to be found in the @code{Score} context. An alias, +@code{Timing}, is added to the context in which the +@code{Timing_translator} is placed. + +The following properties of @code{Timing} are used +to keep track of timing within the score. + +@cindex bar number +@cindex measure number + +@table @code +@item currentBarNumber +The current measure number. For an example showing the +use of this property see @ref{Bar numbers}. + +@item measureLength +The length of the measures in the current time signature. For a +4/4 time this is@tie{}1, and for 6/8 it is 3/4. Its value +determines when bar lines are inserted and how automatic beams +should be generated. + +@item measurePosition +The point within the measure where we currently are. This +quantity is reset by subtracting @code{measureLength} whenever +@code{measureLength} is reached or exceeded. When that happens, +@code{currentBarNumber} is incremented. + +@item timing +If set to true, the above variables are updated for every time +step. When set to false, the engraver stays in the current +measure indefinitely. + +@end table + +Timing can be changed by setting any of these variables +explicitly. In the next example, the default 4/4 time +signature is printed, but @code{measureLength} is set to 5/4. +At 4/8 through the third measure, the @code{measurePosition} is +advanced by 1/8 to 5/8, shortening that bar by 1/8. +The next bar line then falls at 9/8 rather than 5/4. + +@lilypond[quote,verbatim,relative=1] +\set Score.measureLength = #(ly:make-moment 5 4) +c1 c4 +c1 c4 +c4 c4 +\set Score.measurePosition = #(ly:make-moment 5 8) +b4 b4 b8 +c4 c1 +@end lilypond + +@noindent +As the example illustrates, @code{ly:make-moment n m} constructs a +duration of n/m of a whole note. For example, +@code{ly:make-moment 1 8} is an eighth note duration and +@code{ly:make-moment 7 16} is the duration of seven sixteenths +notes. + + +@seealso +This manual: @ref{Bar numbers}, @ref{Unmetered music} + +Snippets: +@rlsr{Rhythms}. + +Internals Reference: @rinternals{Timing_translator}, +@rinternals{Score} + diff --git a/Documentation/notation/simultaneous.itely b/Documentation/notation/simultaneous.itely new file mode 100644 index 0000000000..f3d8be5d05 --- /dev/null +++ b/Documentation/notation/simultaneous.itely @@ -0,0 +1,833 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + + +@node Simultaneous notes +@section Simultaneous notes + +@lilypondfile[quote]{simultaneous-headword.ly} + +Polyphony in music refers to having more than one voice occurring +in a piece of music. Polyphony in LilyPond refers to having more +than one voice on the same staff. + +@menu +* Single voice:: +* Multiple voices:: +@end menu + + +@node Single voice +@subsection Single voice + +This section discusses simultaneous notes inside the same voice. + +@menu +* Chorded notes:: +* Simultaneous expressions:: +* Clusters:: +@end menu + + +@node Chorded notes +@unnumberedsubsubsec Chorded notes + +@cindex chords +@cindex brackets, angle +@cindex angle brackets +@cindex relative pitch in chords + +@funindex < +@funindex > +@funindex <...> + +A chord is formed by enclosing a set of pitches between @code{<} +and @code{>}. A chord may be followed by a duration and/or a set +of articulations, just like simple notes: + +@lilypond[verbatim,quote,relative=1] +2 4-> -. +@end lilypond + +Relative mode can be used for pitches in chords. The octave of each +pitch is chosen using the preceding pitch as a reference except in +the case of the first pitch in a chord: the reference for the first +pitch is the @emph{first} pitch of the preceding chord. + +For more information about chords, see @ref{Chord notation}. + + +@seealso +Music Glossary: +@rglos{chord}. + +Learning Manual: +@rlearning{Combining notes into chords}. + +Notation Reference: +@ref{Chord notation}. + +Snippets: +@rlsr{Simultaneous notes}. + + +@node Simultaneous expressions +@unnumberedsubsubsec Simultaneous expressions + +One or more music expressions enclosed in double angle brackets are +taken to be simultaneous. If the first expression begins with a +single note or if the whole simultaneous expression appears +explicitly within a single voice, the whole expression is placed on +a single staff; otherwise the elements of the simultaneous +expression are placed on separate staves. + +The following examples show simultaneous expressions on one staff: + +@lilypond[quote,verbatim,relative=2] +\new Voice { % explicit single voice + << { a4 b g2 } { d4 g c,2 } >> +} +@end lilypond + +@lilypond[quote,verbatim,relative=2] +% single first note +a << { a4 b g } { d4 g c, } >> +@end lilypond + +This can be useful if the simultaneous sections have identical +rhythms, but attempts to attach notes with different durations +to the same stem will cause errors. + +The following example shows how simultaneous expressions can +generate multiple staves implicitly: + +@lilypond[quote,verbatim,relative=2] +% no single first note +<< { a4 b g2 } { d4 g2 c,4 } >> +@end lilypond + +Here different rhythms cause no problems. + + +@node Clusters +@unnumberedsubsubsec Clusters + +@cindex cluster +@cindex note cluster + +@funindex \makeClusters +@funindex makeClusters + +A cluster indicates a continuous range of pitches to be played. +They can be denoted as the envelope of a set of notes. They are +entered by applying the function @code{\makeClusters} to a sequence +of chords, e.g., + +@lilypond[quote,relative=2,verbatim] +\makeClusters { 2 } +@end lilypond + +Ordinary notes and clusters can be put together in the same staff, +even simultaneously. In such a case no attempt is made to +automatically avoid collisions between ordinary notes and clusters. + + +@seealso +Music Glossary: +@rglos{cluster}. + +Snippets: +@rlsr{Simultaneous notes}. + +Internals Reference: +@rinternals{ClusterSpanner}, +@rinternals{ClusterSpannerBeacon}, +@rinternals{Cluster_spanner_engraver}. + + +@knownissues + +Clusters look good only if they span at least two chords; otherwise +they appear too narrow. + +Clusters do not have a stem and cannot indicate durations by +themselves, but the length of the printed cluster is determined by +the durations of the defining chords. Separate clusters need a +separating rest between them. + +Clusters do not produce MIDI output. + +@node Multiple voices +@subsection Multiple voices + +This section discusses simultaneous notes in multiple voices or +multiple staves. + +@menu +* Single-staff polyphony:: +* Voice styles:: +* Collision resolution:: +* Automatic part combining:: +* Writing music in parallel:: +@end menu + + +@node Single-staff polyphony +@unnumberedsubsubsec Single-staff polyphony + +@cindex single-staff polyphony +@cindex polyphony, single-staff +@cindex voice +@cindex lyrics assigned to one voice + +@funindex \voiceOne +@funindex voiceOne +@funindex \voiceOne ... \voiceFour +@funindex Voice +@funindex \oneVoice +@funindex oneVoice + +@strong{@i{Explicitly instantiating voices}} + +The basic structure needed to achieve multiple independent +voices in a single staff is illustrated in the following example: + +@lilypond[quote,relative=3,verbatim] +\new Staff << + \new Voice = "first" + { \voiceOne r8 r16 g e8. f16 g8[ c,] f e16 d } + \new Voice= "second" + { \voiceTwo d16 c d8~ d16 b c8~ c16 b c8~ c16 b8. } +>> +@end lilypond + +Here, voices are instantiated explicitly and are given names. The +@code{\voiceOne} ... @code{\voiceFour} commands set up the voices +so that first and third voices get stems up, second and fourth +voices get stems down, third and fourth voice note heads are +horizontally shifted, and rests in the respective voices are +automatically moved to avoid collisions. The @code{\oneVoice} +command returns all the voice settings to the neutral default +directions. + +@strong{@i{Temporary polyphonic passages}} + +A temporary polyphonic passage can be created with the following +construct: + +@example +<< @{ \voiceOne ... @} + \new Voice @{ \voiceTwo ... @} +>> \oneVoice +@end example + +Here, the first expression within a temporary polyphonic passage is +placed into the @code{Voice} context which was in use immediately +before the polyphonic passage, and that same @code{Voice} context +continues after the temporary section. Other expressions within +the angle brackets are assigned to distinct temporary voices. +This allows lyrics to be assigned to one continuing voice before, +during and after a polyphonic section: + +@lilypond[quote, verbatim, relative=2] +<< + \new Voice = "melody" { + a4 + << + { + \voiceOne + g f + } + \new Voice { + \voiceTwo + d2 + } + >> + \oneVoice + e4 + } + \new Lyrics \lyricsto "melody" { + This is my song. + } +>> +@end lilypond + +Here, the @code{\voiceOne} and @code{\voiceTwo} commands are +required to define the settings of each voice. + +@strong{@i{The double backslash construct}} + +The @code{<< @{...@} \\ @{...@} >>} construct, where the two (or +more) expressions are separated by double backslashes, behaves +differently to the similar construct without the double backslashes: +@emph{all} the expressions within this contruct are assigned +to new @code{Voice} contexts. These new @code{Voice} contexts +are created implicitly and are given the fixed names @code{"1"}, +@code{"2"}, etc. + +The first example could be typeset as follows: + +@lilypond[quote,relative=3,verbatim] +<< + { r8 r16 g e8. f16 g8[ c,] f e16 d } + \\ + { d16 c d8~ d16 b c8~ c16 b c8~ c16 b8. } +>> +@end lilypond + +This syntax can be used where it does not matter that temporary +voices are created and then discarded. These implicitly created +voices are given the settings equivalent to the effect of the +@code{\voiceOne} ... @code{\voiceFour} commands, in the order in +which they appear in the code. + +In the following example, the intermediate voice has stems up, +therefore we enter it in the third place, so it becomes voice +three, which has the stems up as desired. Spacer rests are +used to avoid printing doubled rests. + +@lilypond[quote,relative=3,verbatim] +<< + { r8 g g g g f16 ees f8 d } + \\ + { ees,8 r ees r d r d r } + \\ + { d'8 s c s bes s a s } +>> +@end lilypond + +In all but the simplest works it is advisable to create explicit +@code{Voice} contexts as explained in @rlearning{Contexts and engravers} and +@rlearning{Explicitly instantiating voices}. + +@strong{@i{Identical rhythms}} + +In the special case that we want to typeset parallel pieces of music +that have the same rhythm, we can combine them into a single +@code{Voice} context, thus forming chords. To achieve this, enclose +them in a simple simultaneous music construct within an explicit voice: + +@lilypond[quote,relative=2,verbatim] +\new Voice << + { e4 f8 d e16 f g8 d4 } + { c4 d8 b c16 d e8 b4 } +>> +@end lilypond + +This method leads to strange beamings and warnings if the pieces of +music do not have the same rhythm. + + +@predefined +@code{\voiceOne}, +@code{\voiceTwo}, +@code{\voiceThree}, +@code{\voiceFour}, +@code{\oneVoice}. +@endpredefined + + +@seealso +Learning Manual: +@rlearning{Voices contain music}, +@rlearning{Explicitly instantiating voices}. + +Notation Reference: +@ref{Percussion staves}, +@ref{Invisible rests}, +@ref{Stems}. + +Snippets: +@rlsr{Simultaneous notes}. + + +@node Voice styles +@unnumberedsubsubsec Voice styles + +@cindex voice styles +@cindex styles, voice +@cindex coloring voices +@funindex \voiceOneStyle +@funindex \voiceTwoStyle +@funindex \voiceThreeStyle +@funindex \voiceFourStyle +@funindex \voiceNeutralStyle + +Voices may be given distinct colors and shapes, allowing them to be +easily identified: + +@lilypond[quote,relative=2,verbatim] +<< + { \voiceOneStyle d4 c2 b4 } + \\ + { \voiceTwoStyle e,2 e } + \\ + { \voiceThreeStyle b2. c4 } + \\ + { \voiceFourStyle g'2 g } +>> +@end lilypond + +The @code{\voiceNeutralstyle} command is used to revert to the +standard presentation. + + +@predefined +@code{\voiceOneStyle}, +@code{\voiceTwoStyle}, +@code{\voiceThreeStyle}, +@code{\voiceFourStyle}, +@code{\voiceNeutralStyle}. +@endpredefined + + +@seealso +Learning Manual: +@rlearning{I'm hearing Voices}, +@rlearning{Other sources of information}. + +Snippets: +@rlsr{Simultaneous notes}. + + +@node Collision resolution +@unnumberedsubsubsec Collision resolution + +@cindex merging notes +@cindex note collisions +@cindex collisions +@cindex shift note +@cindex multiple voices +@cindex voices, multiple +@cindex polyphonic music +@cindex shifting voices +@cindex voices, multiple +@cindex shift rest, automatic +@funindex \shiftOn +@funindex shiftOn +@funindex \shiftOnn +@funindex shiftOnn +@funindex \shiftOnnn +@funindex shiftOnnn +@funindex \shiftOff +@funindex shiftOff +@funindex \mergeDifferentlyDottedOn +@funindex mergeDifferentlyDottedOn +@funindex \mergeDifferentlyDottedOff +@funindex mergeDifferentlyDottedOff +@funindex \mergeDifferentlyHeadedOn +@funindex mergeDifferentlyHeadedOn +@funindex \mergeDifferentlyHeadedOff +@funindex mergeDifferentlyHeadedOff + +The note heads of notes in different voices with the same pitch, +same note head and opposite stem direction are automatically +merged, but notes with different note heads or the same stem +direction are not. Rests opposite a stem in a different voice +are shifted vertically. + +@lilypond[quote,verbatim,relative=2] +<< + { + c8 d e d c d c4 + g'2 fis + } \\ { + c2 c8. b16 c4 + e,2 r + } \\ { + \oneVoice + s1 + e8 a b c d2 + } +>> +@end lilypond + +Notes with different note heads may be merged, with the +exception of half-note heads and quarter-note heads: + +@lilypond[quote,verbatim,relative=2] +<< + { + \mergeDifferentlyHeadedOn + c8 d e d c d c4 + g'2 fis + } \\ { + c2 c8. b16 c4 + e,2 r + } \\ { + \oneVoice + s1 + e8 a b c d2 + } +>> +@end lilypond + +Note heads with different dots may be merged: + +@lilypond[quote,relative=2,verbatim] +<< + { + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + c8 d e d c d c4 + g'2 fis + } \\ { + c2 c8. b16 c4 + e,2 r + } \\ { + \oneVoice + s1 + e8 a b c d2 + } +>> +@end lilypond + + +The half note and eighth note at the start of the second measure +are incorrectly merged because @code{\mergeDifferentlyHeadedOn} +cannot successfully complete the merge when three or more notes +line up in the same column, and in this case a warning is given. +To allow the merge to work properly a @code{\shift} must be applied +to the note that should not be merged. Here, @code{\shiftOn} is +applied to move the top @notation{g} out of the column, and +@code{\mergeDifferentlyHeadedOn} then works properly. + +@lilypond[quote,relative=2,verbatim] +<< + { + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + c8 d e d c d c4 + \shiftOn + g'2 fis + } \\ { + c2 c8. b16 c4 + e,2 r + } \\ { + \oneVoice + s1 + e8 a b c d2 + } + +>> +@end lilypond + +The @code{\shiftOn}, @code{\shiftOnn}, and @code{\shiftOnnn} +commands specify the degree to which chords of the current voice +should be shifted. The outer voices (normally: voices one and +two) have @code{\shiftOff}, while the inner voices (three and +four) have @code{\shiftOn}. @code{\shiftOnn} and +@code{\shiftOnnn} define further shift levels. + +Notes are only merged if they have opposing stem directions (e.g. in +@code{Voice} 1 and 2). + + +@predefined +@code{\mergeDifferentlyDottedOn}, +@code{\mergeDifferentlyDottedOff}, +@code{\mergeDifferentlyHeadedOn}, +@code{\mergeDifferentlyHeadedOff}. + +@code{\shiftOn}, +@code{\shiftOnn}, +@code{\shiftOnnn}, +@code{\shiftOff}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{additional-voices-to-avoid-collisions.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{forcing-horizontal-shift-of-notes.ly} + + +@seealso +Music Glossary: +@rglos{polyphony}. + +Learning Manual: +@rlearning{Multiple notes at once}, +@rlearning{Voices contain music}, +@rlearning{Collisions of objects}. + +Snippets: +@rlsr{Simultaneous notes}. + +Internals Reference: +@rinternals{NoteColumn}, +@rinternals{NoteCollision}, +@rinternals{RestCollision}. + + +@knownissues + +@ignore +@c TODO investigate! Sometimes it works, sometimes not. --FV +The requirements for successfully merging different note heads that +are at the same time differently dotted are not clear. +@end ignore + +There is no support for chords where the same note occurs with +different accidentals in the same chord. In this case, it is +recommended to use enharmonic transcription, or to use special +cluster notation (see @ref{Clusters}). + + +@node Automatic part combining +@unnumberedsubsubsec Automatic part combining + +@cindex automatic part combining +@cindex part combiner +@cindex combining parts +@cindex a due part +@cindex solo part +@funindex \partcombine +@funindex partcombine + +Automatic part combining is used to merge two parts of music onto +a staff. It is aimed at typesetting orchestral scores. When the +two parts are identical for a period of time, only one is shown. +In places where the two parts differ, they are typeset as separate +voices, and stem directions are set automatically. Also, solo and +@notation{a due} parts are identified and marked by default. + +The syntax for part combining is: + +@example +\partcombine @var{musicexpr1} @var{musicexpr2} +@end example + +The following example demonstrates the basic functionality of the +part combiner: putting parts on one staff and setting stem +directions and polyphony. The same variables are used for the +independent parts and the combined staff. + +@lilypond[quote,verbatim] +instrumentOne = \relative c' { + c4 d e f + R1 + d'4 c b a + b4 g2 f4 + e1 +} + +instrumentTwo = \relative g' { + R1 + g4 a b c + d c b a + g f( e) d + e1 +} + +<< + \new Staff \instrumentOne + \new Staff \instrumentTwo + \new Staff \partcombine \instrumentOne \instrumentTwo +>> +@end lilypond + +The notes in the third measure appear only once, although they were +specified in both parts. Stem, slur, and tie directions are set +automatically, depending whether there is a solo or unison. When +needed in polyphony situations, the first part (with context called +@code{one}) always gets up stems, while the second (called @code{two}) +always gets down stems. In solo situations, the first and second +parts get marked with @q{Solo} and @q{Solo II}, respectively. The +unisono (@notation{a due}) parts are marked by default with the text +@qq{a2}. + +Both arguments to @code{\partcombine} will be interpreted as +@code{Voice} contexts. If using relative octaves, +@code{\relative} should be specified for both music expressions, +i.e., + +@example +\partcombine + \relative @dots{} @var{musicexpr1} + \relative @dots{} @var{musicexpr2} +@end example + +@noindent +A @code{\relative} section that is outside of @code{\partcombine} +has no effect on the pitches of @var{musicexpr1} and +@var{musicexpr2}. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{combining-two-parts-on-the-same-staff.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-partcombine-texts.ly} + + +@seealso +Music Glossary: +@rglos{a due}, +@rglos{part}. + +Notation Reference: +@ref{Writing parts}. + +Snippets: +@rlsr{Simultaneous notes}. + +Internals Reference: +@rinternals{PartCombineMusic}, +@rinternals{Voice}. + + +@knownissues + +@code{\partcombine} can only accept two voices. + +When @code{printPartCombineTexts} is set, if the two voices play +the same notes on and off, the part combiner may typeset @code{a2} +more than once in a measure. + +@code{\partcombine} cannot be inside @code{\times}. + +@code{\partcombine} cannot be inside @code{\relative}. + +Internally, the @code{\partcombine} interprets both arguments as +@code{Voice}s and decides when the parts can be combined. When they have +different durations they cannot be combined and are given the names +@code{one} and @code{two}. Consequently, if the arguments switch to +differently named @rinternals{Voice} contexts, the events in those will +be ignored. Likewise, partcombining isn't designed to work with lyrics; +when one of the voices is explicitly named in order to attach lyrics to +it, the partcombining stops working. + +@code{\partcombine} only observes onset times of notes. It cannot +determine whether a previously started note is playing or not, leading +to various problems. + + +@node Writing music in parallel +@unnumberedsubsubsec Writing music in parallel + +@cindex writing music in parallel +@cindex interleaved music +@cindex parallel music +@funindex \parallelMusic +@funindex parallelMusic + +Music for multiple parts can be interleaved in input code. The +function @code{\parallelMusic} accepts a list with the names of a +number of variables to be created, and a musical expression. The +content of alternate measures from the expression become the value +of the respective variables, so you can use them afterwards to +print the music. + +@warning{Bar checks @code{|} must be used, and the measures must +be of the same length.} + +@lilypond[quote,verbatim] +\parallelMusic #'(voiceA voiceB voiceC) { + % Bar 1 + r8 g'16 c'' e'' g' c'' e'' r8 g'16 c'' e'' g' c'' e'' | + r16 e'8.~ e'4 r16 e'8.~ e'4 | + c'2 c'2 | + + % Bar 2 + r8 a'16 d'' f'' a' d'' f'' r8 a'16 d'' f'' a' d'' f'' | + r16 d'8.~ d'4 r16 d'8.~ d'4 | + c'2 c'2 | + +} +\new StaffGroup << + \new Staff << \voiceA \\ \voiceB >> + \new Staff { \clef bass \voiceC } +>> +@end lilypond + +Relative mode may be used. Note that the @code{\relative} command +is not used inside @code{\parallelMusic} itself. The notes are +relative to the preceding note in the voice, not to the previous +note in the input -- in other words, relative notes for +@code{voiceA} ignore the notes in @code{voiceB}. + +@lilypond[quote,verbatim] +\parallelMusic #'(voiceA voiceB voiceC) { + % Bar 1 + r8 g16 c e g, c e r8 g,16 c e g, c e | + r16 e8.~ e4 r16 e8.~ e4 | + c2 c | + + % Bar 2 + r8 a,16 d f a, d f r8 a,16 d f a, d f | + r16 d8.~ d4 r16 d8.~ d4 | + c2 c | + + } +\new StaffGroup << + \new Staff << \relative c'' \voiceA \\ \relative c' \voiceB >> + \new Staff \relative c' { \clef bass \voiceC } +>> +@end lilypond + +This works quite well for piano music. This example maps four +consecutive measures to four variables: + +@lilypond[quote,verbatim] +global = { + \key g \major + \time 2/4 +} + +\parallelMusic #'(voiceA voiceB voiceC voiceD) { + % Bar 1 + a8 b c d | + d4 e | + c16 d e fis d e fis g | + a4 a | + + % Bar 2 + e8 fis g a | + fis4 g | + e16 fis g a fis g a b | + a4 a | + + % Bar 3 ... +} + +\score { + \new PianoStaff << + \new Staff { + \global + << + \relative c'' \voiceA + \\ + \relative c' \voiceB + >> + } + \new Staff { + \global \clef bass + << + \relative c \voiceC + \\ + \relative c \voiceD + >> + } + >> +} +@end lilypond + + +@seealso +Learning Manual: +@rlearning{Organizing pieces with variables}. + +Snippets: +@rlsr{Simultaneous notes}. diff --git a/Documentation/notation/spacing.itely b/Documentation/notation/spacing.itely new file mode 100644 index 0000000000..70ef916fc0 --- /dev/null +++ b/Documentation/notation/spacing.itely @@ -0,0 +1,2658 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + +@ignore +GDP TODO list + +Negative numbers are allowed: +> Are you sure? The following works well +> \paper{ +> first-page-number = -2 +> } +> and prints page number -1 on the second page, for example. + + +In 5.2.1 the @refbugs (line 495 in spacing.itely on master) it +states: + +"@code{layout-set-staff-size} does not change the distance between +the +staff lines." + +Could we add a sentence: +"Use instead the pair fontSize = #@var{N} + \override StaffSymbol #'staff-space = #(magstep +@var{N}) +inside the Staff context to change the size of the font and the +distance between +staff lines accordingly." + +Actually I found, that the @internalsref{StaffSymbol} at line 481 +sends to an uncomplete +documentation. The property staff-space is not explained here. I +thought Y-extent might be of +help, but it is in turn explained by x-space which again is +missing from the list. Who has the +knowledge to fix this? + + +Clarify +http://code.google.com/p/lilypond/issues/detail?id=68 + +@end ignore + + +@node Spacing issues +@chapter Spacing issues + +The global paper layout is determined by three factors: the page layout, the +line breaks, and the spacing. These all influence each other. The +choice of spacing determines how densely each system of music is set. +This influences where line breaks are chosen, and thus ultimately, how +many pages a piece of music takes. + +Globally speaking, this procedure happens in four steps: first, +flexible distances (@q{springs}) are chosen, based on durations. All +possible line breaking combinations are tried, and a @q{badness} score +is calculated for each. Then the height of each possible system is +estimated. Finally, a page breaking and line breaking combination is chosen +so that neither the horizontal nor the vertical spacing is too cramped +or stretched. + +Settings which influence layout may be placed in two blocks. +The @code{\paper @{...@}} block is placed outside any +@code{\score @{...@}} blocks and contains settings that +relate to the entire document. The @code{\layout @{...@}} +block is placed within a @code{\score @{...@}} block and +contains settings for that particular score. If you have +only one @code{\score @{...@}} block the two have the same +effect. In general the commands shown in this chapter can +be placed in either. + +@menu +* Paper and pages:: +* Music layout:: +* Breaks:: +* Vertical spacing:: +* Horizontal spacing:: +* Fitting music onto fewer pages:: +@end menu + + +@node Paper and pages +@section Paper and pages + +This section deals with the boundaries that define the area +within which music can be printed. + +@menu +* Paper size:: +* Page formatting:: +@end menu + + +@node Paper size +@subsection Paper size + +@cindex paper size +@cindex page size + +Two functions are available for changing the paper size: +@code{set-default-paper-size} and @code{set-paper-size}. +@code{set-default-paper-size} must be placed in the toplevel +scope, and @code{set-paper-size} must be placed in a @code{\paper} +block: + +@example +#(set-default-paper-size "a4") +@end example + +@example +\paper @{ + #(set-paper-size "a4") +@} +@end example + +@noindent +@code{set-default-paper-size} sets the size of all pages, whereas +@code{set-paper-size} only sets the size of the pages that the +@code{\paper} block applies to. For example, if the @code{\paper} +block is at the top of the file, then it will apply the paper size +to all pages. If the @code{\paper} block is inside a +@code{\book}, then the paper size will only apply to that book. + +Common paper sizes are available, including @code{a4}, +@code{letter}, @code{legal}, and @code{11x17} (also known as +tabloid). Many more paper sizes are supported by default. For +details, see @file{scm/@/paper@/.scm}, and search for the +definition of @code{paper-alist}. + +@c TODO add a new appendix for paper sizes (auto-generated) -pm + +@warning{The default paper size is @code{a4}.} + +Extra sizes may be added by editing the definition of +@code{paper-alist} in the initialization file +@file{scm/@/paper@/.scm}, however they will be overridden on a +subsequent install. + +@cindex orientation +@cindex landscape + +If the symbol @code{'landscape} is supplied as an argument to +@code{set-default-paper-size}, pages will be rotated by 90 +degrees, and wider line widths will be set accordingly. + +@example +#(set-default-paper-size "a6" 'landscape) +@end example + +Setting the paper size will adjust a number of @code{\paper} +variables, such as margins. To use a particular paper size with +altered @code{\paper} variables, set the paper size before setting +the variables. + + +@seealso +Installed Files: +@file{scm/@/paper@/.scm}. + +Snippets: +@rlsr{Spacing}. + + +@node Page formatting +@subsection Page formatting + +Margins, headers, and footers and other layout variables are +automatically set according to the paper size. + +This section lists and describes a number of paper variables that +may be altered. + +@menu +* Vertical dimensions:: +* Horizontal dimensions:: +* Other layout variables:: +@end menu + + +@node Vertical dimensions +@unnumberedsubsubsec Vertical dimensions + +These variables are used to set different vertical dimensions on a +page: + +@funindex \paper + +@table @code + +@item after-title-space +@funindex after-title-space + +The amount of space between the title and the first system. +Default: @code{5\mm}. + +@item before-title-space +@funindex before-title-space + +Amount of space between the last system of the previous piece and the +title of the next. Default: @code{10\mm}. + +@item between-system-padding +@funindex between-system-padding + +The minimum amount of white space that will always be present +between the bottom-most symbol of one system, and the top-most of +the next system. Default: @code{4\mm}. + +Increasing this will put systems whose bounding boxes almost touch +farther apart. + +@item between-system-space +@funindex between-system-space + +The distance between systems. It is the ideal distance between +the center of the bottom staff of one system and the center of the +top staff of the next system. Default: @code{20\mm}. + +Increasing this value will provide a more even appearance of the +page at the cost of using more vertical space. + +@item between-title-space +@funindex between-title-space + +Amount of space between consecutive titles (e.g., the title of the +book and the title of a piece). Default: @code{2\mm}. + +@item bottom-margin +@funindex bottom-margin + +The margin between footer and bottom of the page. Default: +@code{6\mm}. + +@item foot-separation +@funindex foot-separation + +Distance between the bottom-most music system and the page +footer. Default: @code{4\mm}. + +@item head-separation +@funindex head-separation + +Distance between the header markup (@code{oddHeaderMarkup} and +@code{evenHeaderMarkup}) and the title markup +(@code{bookTitleMarkup}, @code{title}, and others). If the header +markup and title markup are not present, it is the distance +between @code{top-margin} and the spot where the title markup +would normally appear. Default: @code{4\mm}. + +@item page-top-space +@funindex page-top-space + +Distance from the top of the printable area to the center of the +first staff. This only works for staves that are vertically +small. Big staves are set with the top of their bounding box +aligned to the top of the printable area. Default: @code{12\mm}. + +@item paper-height +@funindex paper-height + +The height of the page. Default: the height of the current paper +size. For details, see @ref{Paper size}. + +@item top-margin +@funindex top-margin + +The margin between header and top of the page. Default: +@code{5\mm}. + +@end table + + +@snippets + +The header and footer are created by the functions make-footer and +make-header, defined in \paper. The default implementations are in +ly/paper-defaults.ly and ly/titling-init.ly. + +The page layout itself is done by two functions in the \paper block, +page-music-height and page-make-stencil. The former tells the +line-breaking algorithm how much space can be spent on a page, the +latter creates the actual page given the system to put on it. + +You can define paper block values in Scheme. In that case mm, in, pt, +and cm are variables defined in paper-defaults.ly with values in +millimeters. That is why the value 2 cm must be multiplied in the +example + +@example +\paper @{ + #(define bottom-margin (* 2 cm)) +@} +@end example + + +Example: + +@example +\paper@{ + paper-width = 2\cm + top-margin = 3\cm + bottom-margin = 3\cm + ragged-last-bottom = ##t +@} +@end example + +This second example centers page numbers at the bottom of every page. + +@example +\paper @{ + print-page-number = ##t + print-first-page-number = ##t + oddHeaderMarkup = \markup \fill-line @{ " " @} + evenHeaderMarkup = \markup \fill-line @{ " " @} + oddFooterMarkup = \markup @{ \fill-line @{ + \bold \fontsize #3 \on-the-fly #print-page-number-check-first + \fromproperty #'page:page-number-string @} @} + evenFooterMarkup = \markup @{ \fill-line @{ + \bold \fontsize #3 \on-the-fly #print-page-number-check-first + \fromproperty #'page:page-number-string @} @} +@} +@end example + +You can also define these values in Scheme. In that case @code{mm}, +@code{in}, @code{pt}, and @code{cm} are variables defined in +@file{paper-defaults.ly} with values in millimeters. That is why the +value must be multiplied in the example + +@example +\paper @{ + #(define bottom-margin (* 2 cm)) +@} +@end example + +The header and footer are created by the functions @code{make-footer} +and @code{make-header}, defined in @code{\paper}. The default +implementations are in @file{ly/@/paper@/-defaults@/.ly} and +@file{ly/@/titling@/-init@/.ly}. + +The page layout itself is done by two functions in the +@code{\paper} block, @code{page-music-height} and +@code{page-make-stencil}. The former tells the line-breaking algorithm +how much space can be spent on a page, the latter creates the actual +page given the system to put on it. + + +@seealso +Notation Reference: +@ref{Vertical spacing between systems}. + +Snippets: +@rlsr{Spacing}. + + +@node Horizontal dimensions +@unnumberedsubsubsec Horizontal dimensions + +@warning{If @code{paper-width} is manually set, @code{line-width}, +@code{left-margin}, @code{indent}, and @code{short-indent} may +have to be adjusted as well.} + +There are a few variables that determine the horizontal dimensions +on a page: + +@table @code + +@item horizontal-shift +@funindex horizontal-shift + +The amount that all systems (including titles and system +separators) are shifted to the right. Default: @code{0.0}. + +@item indent +@funindex indent + +The level of indentation for the first system in a score. +Default: @code{paper-width} divided by @code{14}, as determined by +@code{set-default-paper-size} or @code{set-paper-size}. + +@item left-margin +@funindex left-margin + +The margin between the left edge of the page and the beginning of +each system. Default: @code{10\mm}, as determined by +@code{set-default-paper-size} or @code{set-paper-size}. + +@item line-width +@funindex line-width + +The width of music systems. Default: @code{paper-width} minus +@code{20\mm}, as determined by @code{set-default-paper-size} or +@code{set-paper-size}. + +@item paper-width +@funindex paper-width + +The width of the page. Default: the width of the current paper +size. For details, see @ref{Paper size}. + +@item short-indent +@funindex short-indent + +The level of indentation for all systems in a score besides the +first system. Default: @code{0}, as determined by +@code{set-default-paper-size} or @code{set-paper-size}. + +@end table + + +@seealso +Snippets: +@rlsr{Spacing}. + + +@knownissues + +The option @code{right-margin} is defined but doesn't set the +right margin yet. The value for the right margin has to be +defined by adjusting the values of @code{left-margin} and +@code{line-width}. + + +@node Other layout variables +@unnumberedsubsubsec Other layout variables + +These variables can be used to adjust page layout in general. + +@table @code + +@item auto-first-page-number +@funindex auto-first-page-number + +The page breaking algorithm is affected by the first page number +being odd or even. If set to true, the page breaking algorithm +will decide whether to start with an odd or even number. This +will result in the first page number remaining as is or being +increased by one. Default: @code{##f}. + +@ignore + +FIXME: this variable is used, but I don't know what it does. -pm +@item blank-after-score-page-force +@funindex blank-after-score-page-force + +Default: @code{2}. + +@end ignore + +@item blank-last-page-force +@funindex blank-last-page-force + +The penalty for ending the score on an odd-numbered page. +Default: @code{0}. + +@item blank-page-force +@funindex blank-page-force + +The penalty for having a blank page in the middle of a +score. This is not used by @code{ly:optimal-breaking} since it will +never consider blank pages in the middle of a score. Default: +@code{5}. + +@item first-page-number +@funindex first-page-number + +The value of the page number on the first page. Default: +@code{#1}. + +@item max-systems-per-page +The maximum number of systems that will be placed on a page. This +is currently supported only by the @code{ly:optimal-breaking} algorithm. +Default: unset. + +@item min-systems-per-page +The minimum number of systems that will be placed on a page. This +may cause pages to be overfilled if it is made too large. This is +currently supported only by the @code{ly:optimal-breaking} algorithm. +Default: unset. + +@item page-breaking-between-system-padding +@funindex page-breaking-between-system-padding + +Tricks the page breaker into thinking that +@code{between-system-padding} is set to something different than +it really is. For example, if this variable is set to something +substantially larger than @code{between-system-padding}, then the +page-breaker will put fewer systems on each page. Default: unset. + +@item page-count +@funindex page-count + +The number of pages to be used for a score. Default: unset. + +@item page-limit-inter-system-space +@funindex page-limit-inter-system-space + +If set to true, limits space between systems on a page with a lot +of space left. Default: @code{##f}. For details, see +@ref{Vertical spacing between systems}. + +@item page-limit-inter-system-space-factor +@funindex page-limit-inter-system-space-factor + +The factor used by @code{page-limit-inter-system-space}. Default: +@code{1.4}. For details, see +@ref{Vertical spacing between systems}. + +@item page-spacing-weight +@funindex page-spacing-weight + +The relative importance of page (vertical) spacing and line +(horizontal) spacing. High values will make page spacing more +important. Default: @code{#10}. + +@item print-all-headers +@funindex print-all-headers + +If set to true, this will print all headers for each \score in the +output. Normally only the piece and opus header variables are +printed. Default: @code{##f}. + +@item print-first-page-number +@funindex print-first-page-number + +If set to true, a page number is printed on the first page. +Default: @code{##f}. + +@item print-page-number +@funindex print-page-number + +If set to false, page numbers are not printed. Default: +@code{##t}. + +@item ragged-bottom +@funindex ragged-bottom + +If set to true, systems will not spread vertically across the +page. This does not affect the last page. Default: @code{##f}. + +This should be set to true for pieces that have only two or three +systems per page, for example orchestral scores. + +@item ragged-last +@funindex ragged-last + +If set to true, the last system in the score will not fill the +line width. Instead the last system ends at its natural +horizontal length. Default: @code{##f}. + +@item ragged-last-bottom +@funindex ragged-last-bottom + +If set to false, systems will spread vertically across the last +page. Default: @code{##t}. + +Pieces that amply fill two pages or more should have this set to +true. + +It also affects the last page of book parts, ie parts of a book created +with @code{\bookpart} blocks. + +@item ragged-right +@funindex ragged-right + +If set to true, systems will not fill the line width. Instead, +systems end at their natural horizontal length. Default: +@code{##f}. + +If the score has only one system, the default value is @code{##t}. + +@item system-separator-markup +@funindex system-separator-markup + +A markup object that is inserted between systems. This is often +used for orchestral scores. Default: unset. + +The markup command @code{\slashSeparator} is provided as a sensible +default, for example + +@lilypond[quote,ragged-right] +#(set-default-paper-size "a6" 'landscape) +\book { + \score { + \relative { c1 \break c1 } + } + \paper { + system-separator-markup = \slashSeparator + } +} +@end lilypond + +@item system-count +@funindex system-count + +The number of systems to be used for a score. +Default: unset. + +@item systems-per-page +@funindex systems-per-page + +The number of systems that should be placed on each page. +This is currently supported only by the @code{ly:optimal-breaking} algorithm. +Default: unset. + +@end table + + +@seealso +Snippets: +@rlsr{Spacing}. + + +@knownissues + +The default page header puts the page number and the @code{instrument} +field from the @code{\header} block on a line. + +The titles (from the @code{\header@{@}} section) are treated as a +system, so @code{ragged-bottom} and @code{ragged-last-bottom} will +add space between the titles and the first system of the score. + + +@node Music layout +@section Music layout + +@menu +* Setting the staff size:: +* Score layout:: +@end menu + + +@node Setting the staff size +@subsection Setting the staff size + +@cindex font size, setting +@cindex staff size, setting +@funindex layout file + +The default @strong{staff size} is set to 20 points. +This may be changed in two ways: + +To set the staff size globally for all scores in a file (or +in a @code{book} block, to be precise), use @code{set-global-staff-size}. + +@example +#(set-global-staff-size 14) +@end example + +@noindent +This sets the global default size to 14pt staff height and scales all +fonts accordingly. + +To set the staff size individually for each score, use +@example +\score@{ + ... + \layout@{ + #(layout-set-staff-size 15) + @} +@} +@end example + +The Feta font provides musical symbols at eight different +sizes. Each font is tuned for a different staff size: at a smaller size +the font becomes heavier, to match the relatively heavier staff lines. +The recommended font sizes are listed in the following table: + +@quotation +@multitable @columnfractions .15 .2 .22 .2 + +@item @b{font name} +@tab @b{staff height (pt)} +@tab @b{staff height (mm)} +@tab @b{use} + +@item feta11 +@tab 11.22 +@tab 3.9 +@tab pocket scores + +@item feta13 +@tab 12.60 +@tab 4.4 +@tab + +@item feta14 +@tab 14.14 +@tab 5.0 +@tab + +@item feta16 +@tab 15.87 +@tab 5.6 +@tab + +@item feta18 +@tab 17.82 +@tab 6.3 +@tab song books + +@item feta20 +@tab 20 +@tab 7.0 +@tab standard parts + +@item feta23 +@tab 22.45 +@tab 7.9 +@tab + +@item feta26 +@tab 25.2 +@tab 8.9 +@tab +@c modern rental material? + +@end multitable +@end quotation + +These fonts are available in any sizes. The context property +@code{fontSize} and the layout property @code{staff-space} (in +@rinternals{StaffSymbol}) can be used to tune the size for individual +staves. The sizes of individual staves are relative to the global size. + + +@seealso +Notation Reference: +@ref{Selecting notation font size}. + +Snippets: +@rlsr{Spacing}. + + +@knownissues + +@code{layout-set-staff-size} does not change the distance between the +staff lines. + + +@node Score layout +@subsection Score layout + +@funindex \layout + +While @code{\paper} contains settings that relate to the page formatting +of the whole document, @code{\layout} contains settings for score-specific +layout. + +@example +\layout @{ + indent = 2.0\cm + \context @{ \Staff + \override VerticalAxisGroup #'minimum-Y-extent = #'(-6 . 6) + @} + \context @{ \Voice + \override TextScript #'padding = #1.0 + \override Glissando #'thickness = #3 + @} +@} +@end example + + +@seealso +Notation Reference: +@ref{Changing context default settings}. + +Snippets: +@rlsr{Spacing}. + + +@node Breaks +@section Breaks + +@menu +* Line breaking:: +* Page breaking:: +* Optimal page breaking:: +* Optimal page turning:: +* Minimal page breaking:: +* Explicit breaks:: +* Using an extra voice for breaks:: +@end menu + + +@node Line breaking +@subsection Line breaking + +@cindex line breaks +@cindex breaking lines + +Line breaks are normally determined automatically. They are chosen +so that lines look neither cramped nor loose, and consecutive +lines have similar density. Occasionally you might want to +override the automatic breaks; you can do this by specifying +@code{\break}. This will force a line break at this point. However, +line breaks can only occur at the end of @q{complete} bars, i.e., +where there are no notes or tuplets left @q{hanging} over the bar +line. If you want to have a line break where there is no bar line, +you can force an invisible bar line by entering @code{\bar ""}, +although again there must be no notes left hanging over in any of +the staves at this point, or it will be ignored. + +The opposite command, @code{\noBreak}, forbids a line break at the +bar line where it is inserted. + +The most basic settings influencing line spacing are @code{indent} +and @code{line-width}. They are set in the @code{\layout} block. +They control the indentation of the first line of music, and the +lengths of the lines. + +If @code{ragged-right} is set to true in the @code{\layout} block, +then systems end at their natural horizontal length, instead of +being spread horizontally to fill the whole line. This is useful +for short fragments, and for checking how tight the natural +spacing is. + +@c TODO Check and add para on default for ragged-right + +The option @code{ragged-last} is similar to @code{ragged-right}, +but affects only the last line of the piece. + +@example +\layout @{ +indent = #0 +line-width = #150 +ragged-last = ##t +@} +@end example + + + +@cindex regular line breaks +@cindex four bar music. + +For line breaks at regular intervals use @code{\break} separated by +skips and repeated with @code{\repeat}. For example, this would +cause the following 28 measures (assuming 4/4 time) to be broken +every 4 measures, and only there: + +@example +<< \repeat unfold 7 @{ + s1 \noBreak s1 \noBreak + s1 \noBreak s1 \break @} + @emph{the real music} +>> +@end example + +@c TODO Check this +A linebreaking configuration can be saved as a @code{.ly} file +automatically. This allows vertical alignments to be stretched to +fit pages in a second formatting run. This is fairly new and +complicated. More details are available in +@rlsr{Spacing}. + + +@predefined +@funindex \break +@code{\break}, +@funindex \noBreak +@code{\noBreak}. +@endpredefined + + +@seealso +Internals Reference: +@rinternals{LineBreakEvent}. + +Snippets: +@rlsr{Spacing}. + + +@knownissues + +Line breaks can only occur if there is a @q{proper} bar line. A note +which is hanging over a bar line is not proper, such as + +@lilypond[quote,ragged-right,relative=2,fragment,verbatim] +c4 c2 << c2 {s4 \break } >> % this does nothing +c2 c4 | % a break here would work +c4 c2 c4 ~ \break % as does this break +c4 c2 c4 +@end lilypond + +This can be avoided by removing the @code{Forbid_line_break_engraver}. +Note that manually forced line breaks have to be added in parallel +with the music. + +@lilypond[quote,ragged-right,verbatim] +\new Voice \with { + \remove Forbid_line_break_engraver +} { + c4 c2 << c2 {s4 \break } >> % now the break is allowed + c2 c4 +} +@end lilypond + +Similarly, line breaks are normally forbidden when beams cross bar +lines. This behavior can be changed by setting +@code{\override Beam #'breakable = ##t}. + + +@node Page breaking +@subsection Page breaking + +The default page breaking may be overridden by inserting +@code{\pageBreak} or @code{\noPageBreak} commands. These commands are +analogous to @code{\break} and @code{\noBreak}. They should be +inserted at a bar line. These commands force and forbid a page-break +from happening. Of course, the @code{\pageBreak} command also forces +a line break. + +The @code{\pageBreak} and @code{\noPageBreak} commands may also be +inserted at top-level, between scores and top-level markups. + +There are also analogous settings to @code{ragged-right} and +@code{ragged-last} which have the same effect on vertical spacing: +@code{ragged-bottom} and @code{ragged-last-bottom}. If set to +@code{##t} the systems on all pages or just the last page +respectively will not be justified vertically. + +For more details see @ref{Vertical spacing}. + +Page breaks are computed by the @code{page-breaking} function. LilyPond +provides three algorithms for computing page breaks, +@code{ly:optimal-breaking}, @code{ly:page-turn-breaking} and +@code{ly:minimal-breaking}. The default is @code{ly:optimal-breaking}, +but the value can be changed in the @code{\paper} block: + +@example +\paper@{ + #(define page-breaking ly:page-turn-breaking) +@} +@end example + +@funindex \bookpart + +When a book has many scores and pages, the page breaking problem may be +difficult to solve, requiring large processing time and memory. To ease +the page breaking process, @code{\bookpart} blocks are used to divide +the book into several parts: the page breaking occurs separately on each +part. Different page breaking functions may also be used in different +book parts. + +@example +\bookpart @{ + \header @{ + subtitle = "Preface" + @} + \paper @{ + %% In a part consisting mostly of text, + %% ly:minimal-breaking may be prefered + #(define page-breaking ly:minimal-breaking) + @} + \markup @{ @dots{} @} + @dots{} +@} +\bookpart @{ + %% In this part, consisting of music, the default optimal + %% page breaking function is used. + \header @{ + subtitle = "First movement" + @} + \score @{ @dots{} @} + @dots{} +@} +@end example + + +@predefined +@funindex \pageBreak +@code{\pageBreak}, +@funindex \noPageBreak +@code{\noPageBreak}. +@endpredefined + + +@seealso +Snippets: +@rlsr{Spacing}. + + +@node Optimal page breaking +@subsection Optimal page breaking + +@funindex ly:optimal-breaking + +The @code{ly:optimal-breaking} function is LilyPond's default method of +determining page breaks. It attempts to find a page breaking that minimizes +cramping and stretching, both horizontally and vertically. Unlike +@code{ly:page-turn-breaking}, it has no concept of page turns. + + +@seealso +Snippets: +@rlsr{Spacing}. + + +@node Optimal page turning +@subsection Optimal page turning + +@funindex ly:page-turn-breaking + +Often it is necessary to find a page breaking configuration so that there is +a rest at the end of every second page. This way, the musician can turn the +page without having to miss notes. The @code{ly:page-turn-breaking} function +attempts to find a page breaking minimizing cramping and stretching, but with +the additional restriction that it is only allowed to introduce page turns +in specified places. + +There are two steps to using this page breaking function. First, you +must enable it in the @code{\paper} block, as explained in @ref{Page +breaking}. Then you must tell the function where you would like to allow +page breaks. + +There are two ways to achieve the second step. First, you can specify each +potential page turn manually, by inserting @code{\allowPageTurn} into your +input file at the appropriate places. + +If this is too tedious, you can add a @code{Page_turn_engraver} to a Staff or +Voice context. The @code{Page_turn_engraver} will scan the context for +sections without notes (note that it does not scan for rests; it scans for +the absence of notes. This is so that single-staff polyphony with rests in one +of the parts does not throw off the @code{Page_turn_engraver}). When it finds +a sufficiently long section without notes, the @code{Page_turn_engraver} will +insert an @code{\allowPageTurn} at the final bar line in that section, unless +there is a @q{special} bar line (such as a double bar), in which case the +@code{\allowPageTurn} will be inserted at the final @q{special} bar line in +the section. + +@funindex minimumPageTurnLength +The @code{Page_turn_engraver} reads the context property +@code{minimumPageTurnLength} to determine how long a note-free section must +be before a page turn is considered. The default value for +@code{minimumPageTurnLength} is @code{#(ly:make-moment 1 1)}. If you want +to disable page turns, you can set it to something very large. + +@example +\new Staff \with @{ \consists "Page_turn_engraver" @} +@{ + a4 b c d | + R1 | % a page turn will be allowed here + a4 b c d | + \set Staff.minimumPageTurnLength = #(ly:make-moment 5 2) + R1 | % a page turn will not be allowed here + a4 b r2 | + R1*2 | % a page turn will be allowed here + a1 +@} +@end example + +@funindex minimumRepeatLengthForPageTurn +The @code{Page_turn_engraver} detects volta repeats. It will only allow a page +turn during the repeat if there is enough time at the beginning and end of the +repeat to turn the page back. The @code{Page_turn_engraver} can also disable +page turns if the repeat is very short. If you set the context property +@code{minimumRepeatLengthForPageTurn} then the @code{Page_turn_engraver} will +only allow turns in repeats whose duration is longer than this value. + +The page turning commands, @code{\pageTurn}, @code{\noPageTurn} and +@code{\allowPageTurn}, may also be used at top-level, between scores and +top-level markups. + + +@predefined +@funindex \pageTurn +@code{\pageTurn}, +@funindex \noPageTurn +@code{\noPageTurn}, +@funindex \allowPageTurn +@code{\allowPageTurn}. +@endpredefined + + +@seealso +Snippets: +@rlsr{Spacing}. + + +@knownissues + +There should only be one @code{Page_turn_engraver} in a score. If there is more +than one, they will interfere with each other. + + +@node Minimal page breaking +@subsection Minimal page breaking + +@funindex ly:minimal-breaking + +The @code{ly:minimal-breaking} function performs minimal computations to +calculate the page breaking: it fills a page with as many systems as +possible before moving to the next one. Thus, it may be preferred for +scores with many pages, where the other page breaking functions could be +too slow or memory demanding, or a lot of texts. It is enabled using: + +@example +\paper @{ + #(define page-breaking ly:minimal-breaking) +@} +@end example + + +@seealso +Snippets: +@rlsr{Spacing}. + + +@node Explicit breaks +@subsection Explicit breaks + +Lily sometimes rejects explicit @code{\break} and @code{\pageBreak} +commands. There are two commands to override this behavior: + +@example +\override NonMusicalPaperColumn #'line-break-permission = ##f +\override NonMusicalPaperColumn #'page-break-permission = ##f +@end example + +When @code{line-break-permission} is overridden to false, Lily will insert +line breaks at explicit @code{\break} commands and nowhere else. When +@code{page-break-permission} is overridden to false, Lily will insert +page breaks at explicit @code{\pageBreak} commands and nowhere else. + +@lilypond[quote,verbatim] +\paper { + indent = #0 + ragged-right = ##t + ragged-bottom = ##t +} + +\score { + \new Score \with { + \override NonMusicalPaperColumn #'line-break-permission = ##f + \override NonMusicalPaperColumn #'page-break-permission = ##f + } { + \new Staff { + \repeat unfold 2 { c'8 c'8 c'8 c'8 } \break + \repeat unfold 4 { c'8 c'8 c'8 c'8 } \break + \repeat unfold 6 { c'8 c'8 c'8 c'8 } \break + \repeat unfold 8 { c'8 c'8 c'8 c'8 } \pageBreak + \repeat unfold 8 { c'8 c'8 c'8 c'8 } \break + \repeat unfold 6 { c'8 c'8 c'8 c'8 } \break + \repeat unfold 4 { c'8 c'8 c'8 c'8 } \break + \repeat unfold 2 { c'8 c'8 c'8 c'8 } + } + } +} +@end lilypond + + +@seealso +Snippets: +@rlsr{Spacing}. + + +@node Using an extra voice for breaks +@subsection Using an extra voice for breaks + +Line- and page-breaking information usually appears within note entry directly. + +@example +\new Score @{ + \new Staff @{ + \repeat unfold 2 @{ c'4 c'4 c'4 c'4 @} + \break + \repeat unfold 3 @{ c'4 c'4 c'4 c'4 @} + @} +@} +@end example + +This makes @code{\break} and @code{\pageBreak} commands easy to enter but mixes +music entry with information that specifies how music should lay out +on the page. You can keep music entry and line- and page-breaking +information in two separate places by introducing an extra voice to +contain the breaks. This extra voice +contains only skips together with @code{\break}, @code{pageBreak} and other +breaking layout information. + +@lilypond[quote,verbatim] +\new Score { + \new Staff << + \new Voice { + s1 * 2 \break + s1 * 3 \break + s1 * 6 \break + s1 * 5 \break + } + \new Voice { + \repeat unfold 2 { c'4 c'4 c'4 c'4 } + \repeat unfold 3 { c'4 c'4 c'4 c'4 } + \repeat unfold 6 { c'4 c'4 c'4 c'4 } + \repeat unfold 5 { c'4 c'4 c'4 c'4 } + } + >> +} +@end lilypond + +This pattern becomes especially helpful when overriding +@code{line-break-system-details} and the other useful but long properties of +@code{NonMusicalPaperColumnGrob}, as explained in @ref{Vertical spacing}. + +@lilypond[quote,verbatim] +\new Score { + \new Staff << + \new Voice { + + \overrideProperty "Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 0)) + s1 * 2 \break + + \overrideProperty "Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 35)) + s1 * 3 \break + + \overrideProperty "Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 70)) + s1 * 6 \break + + \overrideProperty "Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 105)) + s1 * 5 \break + } + \new Voice { + \repeat unfold 2 { c'4 c'4 c'4 c'4 } + \repeat unfold 3 { c'4 c'4 c'4 c'4 } + \repeat unfold 6 { c'4 c'4 c'4 c'4 } + \repeat unfold 5 { c'4 c'4 c'4 c'4 } + } + >> +} +@end lilypond + + +@seealso +Notation Reference: +@ref{Vertical spacing}. + +Snippets: +@rlsr{Spacing}. + + +@node Vertical spacing +@section Vertical spacing + +@cindex vertical spacing +@cindex spacing, vertical + +Vertical spacing is controlled by three things: the amount of +space available (i.e., paper size and margins), the amount of +space between systems, and the amount of space between +staves inside a system. + +@menu +* Vertical spacing inside a system:: +* Vertical spacing between systems:: +* Explicit staff and system positioning:: +* Two-pass vertical spacing:: +* Vertical collision avoidance:: +@end menu + + +@node Vertical spacing inside a system +@subsection Vertical spacing inside a system + +@cindex distance between staves +@cindex staff distance +@cindex space between staves +@cindex space inside systems + +The height of each system is determined automatically. To prevent +staves from bumping into each other, some minimum distances are set. +By changing these, you can put staves closer together. This +reduces the amount of space each system requires, and may result +in having more systems per page. + +Normally staves are stacked vertically. To make staves maintain a +distance, their vertical size is padded. This is done with the +property @code{minimum-Y-extent}. When applied to a +@rinternals{VerticalAxisGroup}, it controls the size of a horizontal +line, such as a staff or a line of lyrics. @code{minimum-Y-extent} +takes a pair of numbers, so +if you want to make it smaller than its default @code{#'(-4 . 4)} +then you could set + +@example +\override Staff.VerticalAxisGroup #'minimum-Y-extent = #'(-3 . 3) +@end example + +@noindent +This sets the vertical size of the current staff to 3 staff spaces on +either side of the center staff line. The value @code{(-3 . 3)} is +interpreted as an interval, where the center line is the 0, so the +first number is generally negative. The numbers need not match; +for example, the staff can be made larger at the bottom by setting +it to @code{(-6 . 4)}. + +@ignore +FIXME: update this section + +After page breaks are determined, the vertical spacing within each +system is reevaluated in order to fill the page more evenly; if a page +has space left over, systems are stretched in order to fill that space. +The amount of stretching can be configured though the @code{max-stretch} +property of the @rinternals{VerticalAlignment} grob. By default, +@code{max-stretch} is set to zero, disabling stretching. To enable +stretching, a sane value for @code{max-stretch} +is @code{ly:align-interface::calc-max-stretch}. + +In some situations, you may want to stretch most of a system while +leaving some parts fixed. For example, if a piano part occurs in the +middle of an orchestral score, you may want to leave the piano staves +close to each other while stretching the rest of the score. The +@code{keep-fixed-while-stretching} property of +@rinternals{VerticalAxisGroup} can be used to achieve this. When set +to @code{##t}, this property keeps its staff (or line of lyrics) from +moving relative to the one directly above it. In the example above, +you would override @code{keep-fixed-while-stretching} to @code{##t} in +the second piano staff: + +@lilypond[verbatim] +#(set-default-paper-size "a6") +#(set-global-staff-size 14.0) + +\book { +\paper { + ragged-last-bottom = ##f +} + +\new Score \with +{ + \override VerticalAlignment #'max-stretch = #ly:align-interface::calc-max-stretch +} +{ +\new GrandStaff +<< + \new StaffGroup + << + \new Staff {c' d' e' f'} + \new Staff {c' d' e' f'} + \new Staff {c' d' e' f'} + >> + + \new PianoStaff + << + \new Staff {c' d' e' f'} + \new Staff \with { + \override VerticalAxisGroup #'keep-fixed-while-stretching = ##t + } + {c' d' e' f'} + >> + + \new StaffGroup + << + \new Staff {c' d' e' f'} + \new Staff {c' d' e' f'} + >> +>> +} +} +@end lilypond +@end ignore + +Vertical alignment of staves is handled by the +@code{VerticalAlignment} object. The context parameters +specifying the vertical extent are described in connection with +the @code{Axis_group_engraver}. + + +@seealso +Snippets: +@rlsr{Spacing}. + +@c @lsr{spacing,page-spacing.ly}, +@c @lsr{spacing,alignment-vertical-spacing.ly}. + +Internals Reference: +@rinternals{VerticalAlignment}, +@rinternals{Axis_group_engraver}. + + +@node Vertical spacing between systems +@subsection Vertical spacing between systems + +Space between systems are controlled by four @code{\paper} variables, + +@example +\paper @{ + between-system-space = 1.5\cm + between-system-padding = #1 + ragged-bottom=##f + ragged-last-bottom=##f +@} +@end example + +When only a couple of flat systems are placed on a page, the resulting +vertical spacing may be non-elegant: one system at the top of the page, +and the other at the bottom, with a huge gap between them. To avoid this +situation, the space added between the systems can be limited. This +feature is activated by setting to @code{#t} the +@code{page-limit-inter-system-space} variable in the @code{\paper} +block. The paper variable @code{page-limit-inter-system-space-factor} +determines how much the space can be increased: for instance, the value +@code{1.3} means that the space can be 30% larger than what it would be +on a ragged-bottom page. + +In the following example, if the inter system space were not limited, +the second system of page 1 would be placed at the page bottom. By +activating the space limitation, the second system is placed closer to +the first one. By setting @code{page-limit-inter-system-space-factor} to +@code{1}, the spacing would the same as on a ragged-bottom page, like +the last one. + +@lilypond[verbatim] +#(set-default-paper-size "a6") +\book { + \paper { + page-limit-inter-system-space = ##t + page-limit-inter-system-space-factor = 1.3 + + oddFooterMarkup = \markup "page bottom" + evenFooterMarkup = \markup "page bottom" + oddHeaderMarkup = \markup \fill-line { + "page top" \fromproperty #'page:page-number-string } + evenHeaderMarkup = \markup \fill-line { + "page top" \fromproperty #'page:page-number-string } + } + \new Staff << \repeat unfold 4 { g'4 g' g' g' \break } + { s1*2 \pageBreak } >> +} +@end lilypond + + +@seealso +Snippets: +@rlsr{Spacing}. + + +@node Explicit staff and system positioning +@subsection Explicit staff and system positioning + +One way to understand the @code{VerticalAxisGroup} and @code{\paper} +settings explained in the previous two sections is as a collection of +different settings that primarily concern the amount of vertical padding +different staves and systems running down the page. + +It is possible to approach vertical spacing in a different way using +@code{NonMusicalPaperColumn #'line-break-system-details}. Where +@code{VerticalAxisGroup} and @code{\paper} settings specify vertical padding, +@code{NonMusicalPaperColumn #'line-break-system-details} specifies exact +vertical positions on the page. + +@code{NonMusicalPaperColumn #'line-break-system-details} accepts an associative +list of five different settings: + +@itemize +@item @code{X-offset} +@item @code{Y-offset} +@item @code{alignment-offsets} +@item @code{alignment-extra-space} +@item @code{fixed-alignment-extra-space} +@end itemize + +Grob overrides, including the overrides for @code{NonMusicalPaperColumn} +below, can occur in any of three different places in an input file: + +@itemize +@item in the middle of note entry directly +@item in a @code{\context} block +@item in the @code{\with} block +@end itemize + +When we override @code{NonMusicalPaperColumn}, we use the usual +@code{\override} command in @code{\context} blocks and in the +@code{\with} block. On the other hand, when we override +@code{NonMusicalPaperColumn} in the middle of note entry, +use the special @code{\overrideProperty} command. Here are some +example @code{NonMusicalPaperColumn} overrides with the special +@code{\overrideProperty} command: + +@example +\overrideProperty NonMusicalPaperColumn + #'line-break-system-details #'((X-offset . 20)) + +\overrideProperty NonMusicalPaperColumn + #'line-break-system-details #'((Y-offset . 40)) + +\overrideProperty NonMusicalPaperColumn + #'line-break-system-details #'((X-offset . 20) (Y-offset . 40)) + +\overrideProperty NonMusicalPaperColumn + #'line-break-system-details #'((alignment-offsets . (0 -15))) + +\overrideProperty NonMusicalPaperColumn + #'line-break-system-details #'((X-offset . 20) (Y-offset . 40) + (alignment-offsets . (0 -15))) +@end example + +To understand how each of these different settings work, we begin +by looking at an example that includes no overrides at all. + +@c \book { } is required in these examples to ensure the spacing +@c overrides can be seen between systems. -np + +@lilypond[quote] +\header { tagline = ##f } +\paper { left-margin = 0\mm } +\book { + \score { + << + \new Staff << + \new Voice { + s1*5 \break + s1*5 \break + s1*5 \break + } + \new Voice { \repeat unfold 15 { c'4 c' c' c' } } + >> + \new Staff { + \repeat unfold 15 { d'4 d' d' d' } + } + >> + } +} +@end lilypond + +This score isolates line- and page-breaking information in a dedicated +voice. This technique of creating a breaks voice will help keep layout +separate from music entry as our example becomes more complicated. +See @ref{Using an extra voice for breaks}. + +Explicit @code{\breaks} evenly divide the music into six measures per +line. Vertical spacing results from LilyPond's defaults. To set +the vertical startpoint of each system explicitly, we can set +the @code{Y-offset} pair in the @code{line-break-system-details} +attribute of the @code{NonMusicalPaperColumn} grob: + +@lilypond[quote] +\header { tagline = ##f } +\paper { left-margin = 0\mm } +\book { + \score { + << + \new Staff << + \new Voice { + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 0)) + s1*5 \break + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 40)) + s1*5 \break + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 80)) + s1*5 \break + } + \new Voice { \repeat unfold 15 { c'4 c' c' c' } } + >> + \new Staff { + \repeat unfold 15 { d'4 d' d' d' } + } + >> + } +} +@end lilypond + +Note that @code{line-break-system-details} takes an associative list of +potentially many values, but that we set only one value here. Note, +too, that the @code{Y-offset} property here determines the exact vertical +position on the page at which each new system will render. + +Now that we have set the vertical startpoint of each system +explicitly, we can also set the vertical startpoint of each staff +within each system manually. We do this using the @code{alignment-offsets} +subproperty of @code{line-break-system-details}. + +@lilypond[quote] +\header { tagline = ##f } +\paper { left-margin = 0\mm } +\book { + \score { + << + \new Staff << + \new Voice { + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 20) + (alignment-offsets . (0 -15))) + s1*5 \break + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 60) + (alignment-offsets . (0 -15))) + s1*5 \break + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 100) + (alignment-offsets . (0 -15))) + s1*5 \break + } + \new Voice { \repeat unfold 15 { c'4 c' c' c' } } + >> + \new Staff { + \repeat unfold 15 { d'4 d' d' d' } + } + >> + } +} +@end lilypond + +Note that here we assign two different values to the +@code{line-break-system-details} attribute of the +@code{NonMusicalPaperColumn} grob. Though the +@code{line-break-system-details} attribute alist accepts many +additional spacing parameters (including, for example, a corresponding +@code{X-offset} pair), we need only set the @code{Y-offset} and +@code{alignment-offsets} pairs to control the vertical startpoint of +every system and every staff. Finally, note that @code{alignment-offsets} +specifies the vertical positioning of staves but not of staff groups. + +@lilypond[quote] +\header { tagline = ##f } +\paper { left-margin = 0\mm } +\book { + \score { + << + \new Staff << + \new Voice { + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 0) + (alignment-offsets . (0 -30 -40))) + s1*5 \break + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 60) + (alignment-offsets . (0 -10 -20))) + s1*5 \break + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 100) + (alignment-offsets . (0 -10 -40))) + s1*5 \break + } + \new Voice { \repeat unfold 15 { c'4 c' c' c' } } + >> + \new StaffGroup << + \new Staff { \repeat unfold 15 { d'4 d' d' d' } } + \new Staff { \repeat unfold 15 { e'4 e' e' e' } } + >> + >> + } +} +@end lilypond + +Some points to consider: + +@itemize +@item When using @code{alignment-offsets}, lyrics count as a staff. + +@item The units of the numbers passed to @code{X-offset}, +@code{Y-offset} and @code{alignment-offsets} are interpreted as multiples +of the distance between adjacent staff lines. Positive values move staves +and lyrics up, negative values move staves and lyrics down. + +@item Because the @code{NonMusicalPaperColumn #'line-break-system-details} +settings given here allow the positioning of staves and systems anywhere +on the page, it is possible to violate paper or margin boundaries or even +to print staves or systems on top of one another. Reasonable values +passed to these different settings will avoid this. +@end itemize + + +@seealso +Snippets: +@rlsr{Spacing}. + + +@node Two-pass vertical spacing +@subsection Two-pass vertical spacing + +@warning{Two-pass vertical spacing is deprecated and will be removed in +a future version of LilyPond. Systems are now stretched automatically +in a single pass. See @ref{Vertical spacing inside a system}.} + +In order to automatically stretch systems so that they should fill the +space left on a page, a two-pass technique can be used: + +@enumerate +@item In the first pass, the amount of vertical space used to increase +the height of each system is computed and dumped to a file. +@item In the second pass, spacing inside the systems are +stretched according to the data in the page layout file. +@end enumerate + +The @code{ragged-bottom} property adds space between systems, while +the two-pass technique adds space between staves inside a system. + +To allow this behavior, a @code{tweak-key} variable has to be set in +each score @code{\layout} block, and the tweaks included in each score +music, using the @code{\scoreTweak} music function. + +@quotation +@verbatim +%% include the generated page layout file: +\includePageLayoutFile + +\score { + \new StaffGroup << + \new Staff << + %% Include this score tweaks: + \scoreTweak "scoreA" + { \clef french c''1 \break c''1 } + >> + \new Staff { \clef soprano g'1 g'1 } + \new Staff { \clef mezzosoprano e'1 e'1 } + \new Staff { \clef alto g1 g1 } + \new Staff { \clef bass c1 c1 } + >> + \header { + piece = "Score with tweaks" + } + %% Define how to name the tweaks for this score: + \layout { #(define tweak-key "scoreA") } +} +@end verbatim +@end quotation + +For the first pass, the @code{dump-tweaks} option should be set to +generate the page layout file. + +@example +lilypond -dbackend=null -d dump-tweaks .ly +lilypond .ly +@end example + + +@seealso +Snippets: +@rlsr{Spacing}. + + +@node Vertical collision avoidance +@subsection Vertical collision avoidance + +@funindex outside-staff-priority +@funindex outside-staff-padding +@funindex outside-staff-horizontal-padding + +Intuitively, there are some objects in musical notation that belong +to the staff and there are other objects that should be placed outside +the staff. Objects belonging outside the staff include things such as +rehearsal marks, text and dynamic markings (from now on, these will +be called outside-staff objects). LilyPond's rule for the +vertical placement of outside-staff objects is to place them as close +to the staff as possible but not so close that they collide with +another object. + +LilyPond uses the @code{outside-staff-priority} property to determine +whether a grob is an outside-staff object: if @code{outside-staff-priority} +is a number, the grob is an outside-staff object. In addition, +@code{outside-staff-priority} tells LilyPond in which order the objects +should be placed. + +First, LilyPond places all the objects that do not belong outside +the staff. Then it sorts the outside-staff objects according to their +@code{outside-staff-priority} (in increasing order). One by one, LilyPond +takes the outside-staff objects and places them so that they do +not collide with any objects that have already been placed. That +is, if two outside-staff grobs are competing for the same space, the one +with the lower @code{outside-staff-priority} will be placed closer to +the staff. + +@lilypond[quote,ragged-right,relative=2,fragment,verbatim] +c4_"Text"\pp +r2. +\once \override TextScript #'outside-staff-priority = #1 +c4_"Text"\pp % this time the text will be closer to the staff +r2. +% by setting outside-staff-priority to a non-number, +% we disable the automatic collision avoidance +\once \override TextScript #'outside-staff-priority = ##f +\once \override DynamicLineSpanner #'outside-staff-priority = ##f +c4_"Text"\pp % now they will collide +@end lilypond + +The vertical padding between an outside-staff object and the +previously-positioned grobs can be controlled with +@code{outside-staff-padding}. + +@lilypond[quote,ragged-right,relative=2,fragment,verbatim] +\once \override TextScript #'outside-staff-padding = #0 +a'^"This text is placed very close to the note" +\once \override TextScript #'outside-staff-padding = #3 +c^"This text is padded away from the previous text" +c^"This text is placed close to the previous text" +@end lilypond + + +By default, outside-staff objects are placed only to avoid +a horizontal collision with previously-positioned grobs. This +can lead to situations in which objects are placed very close to each +other horizontally. The vertical spacing between staffs can +also be set so that outside staff objects are interleaved. +Setting @code{outside-staff-horizontal-padding} +causes an object to be offset vertically so that such a situation +doesn't occur. + +@lilypond[quote,ragged-right,relative=2,fragment,verbatim] +% the markup is too close to the following note +c4^"Text" +c4 +c''2 +% setting outside-staff-horizontal-padding fixes this +R1 +\once \override TextScript #'outside-staff-horizontal-padding = #1 +c,,4^"Text" +c4 +c''2 +@end lilypond + + +@seealso +Snippets: +@rlsr{Spacing}. + + +@node Horizontal spacing +@section Horizontal spacing + +@cindex horizontal spacing +@cindex spacing, horizontal + +@menu +* Horizontal spacing overview:: +* New spacing area:: +* Changing horizontal spacing:: +* Line length:: +* Proportional notation:: +@end menu + + +@node Horizontal spacing overview +@subsection Horizontal spacing overview + +The spacing engine translates differences in durations into stretchable +distances (@q{springs}) of differing lengths. Longer durations get +more space, shorter durations get less. The shortest durations get a +fixed amount of space (which is controlled by +@code{shortest-duration-space} in the @rinternals{SpacingSpanner} +object). The longer the duration, the more space it gets: doubling a +duration adds a fixed amount (this amount is controlled by +@code{spacing-increment}) of space to the note. + +For example, the following piece contains lots of half, quarter, and +8th notes; the eighth note is followed by 1 note head width (NHW). +The quarter note is followed by 2 NHW, the half by 3 NHW, etc. + +@lilypond[quote,fragment,verbatim,relative=1] +c2 c4. c8 c4. c8 c4. c8 c8 +c8 c4 c4 c4 +@end lilypond + +Normally, @code{spacing-increment} is set to 1.2 staff space, which is +approximately the width of a note head, and +@code{shortest-duration-space} is set to 2.0, meaning that the +shortest note gets 2.4 staff space (2.0 times the +@code{spacing-increment}) of horizontal space. This space is counted +from the left edge of the symbol, so the shortest notes are generally +followed by one NHW of space. + +If one would follow the above procedure exactly, then adding a single +32nd note to a score that uses 8th and 16th notes, would widen up the +entire score a lot. The shortest note is no longer a 16th, but a 32nd, +thus adding 1 NHW to every note. To prevent this, the shortest +duration for spacing is not the shortest note in the score, but rather +the one which occurs most frequently. + + +The most common shortest duration is determined as follows: in every +measure, the shortest duration is determined. The most common shortest +duration is taken as the basis for the spacing, with the stipulation +that this shortest duration should always be equal to or shorter than +an 8th note. The shortest duration is printed when you run +@code{lilypond} with the @code{--verbose} option. + +These durations may also be customized. If you set the +@code{common-shortest-duration} in @rinternals{SpacingSpanner}, then +this sets the base duration for spacing. The maximum duration for this +base (normally an 8th), is set through @code{base-shortest-duration}. + +@funindex common-shortest-duration +@funindex base-shortest-duration +@funindex stem-spacing-correction +@funindex spacing + +Notes that are even shorter than the common shortest note are +followed by a space that is proportional to their duration relative to +the common shortest note. So if we were to add only a few 16th notes +to the example above, they would be followed by half a NHW: + +@lilypond[quote,fragment,verbatim,relative=2] +c2 c4. c8 c4. c16[ c] c4. c8 c8 c8 c4 c4 c4 +@end lilypond + + +In the introduction +FIXME FIXME FIXME +@c (see @rlearning{Engraving}), +it was explained that stem +directions influence spacing. This is controlled with the +@code{stem-spacing-correction} property in the +@rinternals{NoteSpacing}, object. These are generated for every +@rinternals{Voice} context. The @code{StaffSpacing} object +(generated in @rinternals{Staff} context) contains the same property +for controlling the stem/bar line spacing. The following example shows +these corrections, once with default settings, and once with +exaggerated corrections: + +@lilypond[quote,ragged-right] +{ + c'4 e''4 e'4 b'4 | + b'4 e''4 b'4 e''4| + \override Staff.NoteSpacing #'stem-spacing-correction = #1.5 + \override Staff.StaffSpacing #'stem-spacing-correction = #1.5 + c'4 e''4 e'4 b'4 | + b'4 e''4 b'4 e''4| +} +@end lilypond + +Proportional notation is supported; see @ref{Proportional notation}. + + +@seealso +Snippets: +@rlsr{Spacing}. + +Internals Reference: +@rinternals{SpacingSpanner}, +@rinternals{NoteSpacing}, +@rinternals{StaffSpacing}, +@rinternals{NonMusicalPaperColumn}. + + +@knownissues + +There is no convenient mechanism to manually override spacing. The +following work-around may be used to insert extra space into a score, +adjusting the padding value as necessary. +@example + \override Score.NonMusicalPaperColumn #'padding = #10 +@end example + +No work-around exists for decreasing the amount of space. + + +@node New spacing area +@subsection New spacing area + +New sections with different spacing parameters can be started with +@code{newSpacingSection}. This is useful when there are +sections with a different notions of long and short notes. + +In the following example, the time signature change introduces a new +section, and hence the 16ths notes are spaced wider. + +@lilypond[relative,fragment,verbatim,quote] +\time 2/4 +c4 c8 c +c8 c c4 c16[ c c8] c4 +\newSpacingSection +\time 4/16 +c16[ c c8] +@end lilypond + +The @code{\newSpacingSection} command creates a new +@code{SpacingSpanner} object, and hence new @code{\override}s +may be used in that location. + + +@seealso +Snippets: +@rlsr{Spacing}. + +Internals Reference: +@rinternals{SpacingSpanner}. + + +@node Changing horizontal spacing +@subsection Changing horizontal spacing + +Horizontal spacing may be altered with the +@code{base-shortest-duration} property. Here +we compare the same music; once without altering +the property, and then altered. Larger values +of @code{ly:make-moment} will produce smaller +music. Note that @code{ly:make-moment} constructs +a duration, so @code{1 4} is a longer duration +than @code{1 16}. + +@lilypond[verbatim,line-width=12\cm] +\score { + \relative c'' { + g4 e e2 | f4 d d2 | c4 d e f | g4 g g2 | + g4 e e2 | f4 d d2 | c4 e g g | c,1 | + d4 d d d | d4 e f2 | e4 e e e | e4 f g2 | + g4 e e2 | f4 d d2 | c4 e g g | c,1 | + } +} +@end lilypond + +@lilypond[verbatim,line-width=12\cm] +\score { + \relative c'' { + g4 e e2 | f4 d d2 | c4 d e f | g4 g g2 | + g4 e e2 | f4 d d2 | c4 e g g | c,1 | + d4 d d d | d4 e f2 | e4 e e e | e4 f g2 | + g4 e e2 | f4 d d2 | c4 e g g | c,1 | + } + \layout { + \context { + \Score + \override SpacingSpanner + #'base-shortest-duration = #(ly:make-moment 1 16) + } + } +} +@end lilypond + + +@snippets + +By default, spacing in tuplets depends on various non-duration +factors (such as accidentals, clef changes, etc). To disregard +such symbols and force uniform equal-duration spacing, use +@code{Score.SpacingSpanner #'uniform-stretching}. This +property can only be changed at the beginning of a score, + +@lilypond[quote,ragged-right,relative=2,fragment,verbatim] +\new Score \with { + \override SpacingSpanner #'uniform-stretching = ##t +} << + \new Staff{ + \times 4/5 { + c8 c8 c8 c8 c8 + } + c8 c8 c8 c8 + } + \new Staff{ + c8 c8 c8 c8 + \times 4/5 { + c8 c8 c8 c8 c8 + } + } +>> +@end lilypond + +When @code{strict-note-spacing} is set, notes are spaced without +regard for clefs, bar lines, and grace notes, + +@lilypond[quote,ragged-right,relative=2,fragment,verbatim] +\override Score.SpacingSpanner #'strict-note-spacing = ##t +\new Staff { c8[ c \clef alto c \grace { c16[ c] } c8 c c] c32[ c32] } +@end lilypond + + +@seealso +Snippets: +@rlsr{Spacing}. + + +@node Line length +@subsection Line length + +@cindex page breaks +@cindex breaking pages + +@funindex indent +@funindex line-width +@funindex ragged-right +@funindex ragged-last + +@c Although line-width can be set in \layout, it should be set in paper +@c block, to get page layout right. +@c Setting indent in \paper block makes not much sense, but it works. + +@c Bit verbose and vague, use examples? +The most basic settings influencing the spacing are @code{indent} and +@code{line-width}. They are set in the @code{\layout} block. They +control the indentation of the first line of music, and the lengths of +the lines. + +If @code{ragged-right} is set to true in the @code{\layout} block, then +systems ends at their natural horizontal length, instead of being spread +horizontally to fill the whole line. This is useful for +short fragments, and for checking how tight the natural spacing is. + +@cindex page layout +@cindex vertical spacing + +The option @code{ragged-last} is similar to @code{ragged-right}, but +only affects the last line of the piece. No restrictions are put on +that line. The result is similar to formatting text paragraphs. In a +paragraph, the last line simply takes its natural horizontal length. +@c Note that for text there are several options for the last line. +@c While Knuth TeX uses natural length, lead typesetters use the same +@c stretch as the previous line. eTeX uses \lastlinefit to +@c interpolate between both these solutions. + +@example +\layout @{ + indent = #0 + line-width = #150 + ragged-last = ##t +@} +@end example + + +@seealso +Snippets: +@rlsr{Spacing}. + + +@node Proportional notation +@subsection Proportional notation + +LilyPond supports proportional notation, a type of horizontal spacing +in which each note consumes an amount of horizontal space exactly +equivalent to its rhythmic duration. This type of proportional spacing +is comparable to horizontal spacing on top of graph paper. Some late +20th- and early 21st-century scores use proportional notation to +clarify complex rhythmic relationships or to facilitate the placement +of timelines or other graphics directly in the score. + +LilyPond supports five different settings for proportional notation, +which may be used together or alone: + +@itemize +@item @code{proportionalNotationDuration} +@item @code{uniform-stretching} +@item @code{strict-note-spacing} +@item @code{\remove Separating_line_group_engraver} +@item @code{\override PaperColumn #'used = ##t} +@end itemize + +In the examples that follow, we explore these five different +proportional notation settings and examine how these settings interact. + +We start with the following one-measure example, which uses classical +spacing with ragged-right turned on. + +@lilypond[quote,verbatim,ragged-right] +\new Score << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } +>> +@end lilypond + +Notice that the half note which begins the measure takes up far less +than half of the horizontal space of the measure. Likewise, the +sixteenth notes and sixteenth-note quintuplets (or twentieth notes) +which end the measure together take up far more than half the +horizontal space of the measure. + +In classical engraving, this spacing may be exactly what we want +because we can borrow horizontal space from the half note and conserve +horizontal space across the measure as a whole. + +On the other hand, if we want to insert a measured timeline or other +graphic above or below our score, we need proportional notation. We +turn proportional notation on with the proportionalNotationDuration +setting. + +@lilypond[quote,verbatim,ragged-right] +\new Score \with { + proportionalNotationDuration = #(ly:make-moment 1 20) +} << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } +>> +@end lilypond + +The half note at the beginning of the measure and the faster notes in +the second half of the measure now occupy equal amounts of horizontal +space. We could place a measured timeline or graphic above or below +this example. + +The @code{proportionalNotationDuration} setting is a context setting that +lives in @code{Score}. Recall that context settings appear in one of +three locations in our input file -- in a @code{\with} block, in a +@code{\context} block, or directly in music entry +preceded by the @code{\set} command. As with all +context settings, users can pick which of the three different +locations they would like to set @code{proportionalNotationDuration}. + +The @code{proportionalNotationDuration} setting takes a single argument, +which is the reference duration against which all music will be +spaced. The LilyPond Scheme function make-moment takes two arguments +-- a numerator and denominator which together express some fraction of +a whole note. The call @code{#(ly:make-moment 1 20)} therefore produces a +reference duration of a twentieth note. The values +@code{#(ly:make-moment 1 16)}, @code{#(ly:make-moment 1 8)}, and +@code{#(ly:make-moment 3 97)} are all possible as well. + +How do we select the right reference duration to pass to +@code{proportionalNotationDuration}? Usually by a process of trial and error, +beginning with a duration close to the fastest (or smallest) duration +in the piece. Smaller reference durations space music loosely; larger +reference durations space music tightly. + +@lilypond[quote,verbatim,ragged-right] +\new Score \with { + proportionalNotationDuration = #(ly:make-moment 1 8) +} << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } +>> + +\new Score \with { + proportionalNotationDuration = #(ly:make-moment 1 16) +} << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } +>> + +\new Score \with { + proportionalNotationDuration = #(ly:make-moment 1 32) +} << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } +>> +@end lilypond + +Note that too large a reference duration -- such as the eighth note, +above -- spaces music too tightly and can cause note head collisions. +Note also that proportional notation in general takes up more +horizontal space that does classical spacing. Proportional spacing +provides rhythmic clarity at the expense of horizontal space. + +Next we examine how to optimally space overlapping tuplets. + +We start by examining what happens to our original example, with +classical spacing, when we add a second staff with a different type of +tuplet. + +@lilypond[quote,verbatim,ragged-right] +\new Score << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + \new RhythmicStaff { + \times 8/9 { + c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 + } + } +>> +@end lilypond + +The spacing is bad because the evenly notes of the bottom staff do not +stretch uniformly. Classical engraving includes very few complex +triplets and so classical engraving rules can generate this type of +result. Setting @code{proportionalNotationDuration} remedies this +situation considerably. + +@lilypond[quote,verbatim,ragged-right] +\new Score \with { + proportionalNotationDuration = #(ly:make-moment 1 20) +} << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + \new RhythmicStaff { + \times 8/9 { + c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 + } + } +>> +@end lilypond + +But if we look very carefully we can see that notes of the second half +of the 9-tuplet space ever so slightly more widely than do the notes +of the first half of the 9-tuplet. To ensure uniform stretching, we +turn on @code{uniform-stretching}, which is a property of +@code{SpacingSpanner}. + +@lilypond[quote,verbatim,ragged-right] +\new Score \with { + proportionalNotationDuration = #(ly:make-moment 1 20) + \override SpacingSpanner #'uniform-stretching = ##t +} << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + \new RhythmicStaff { + \times 8/9 { + c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 + } + } +>> +@end lilypond + +Our two-staff example now spaces exactly, our rhythmic +relationships are visually clear, and we can include a measured +timeline or graphic if we want. + +Note that the LilyPond's proportional notation package expects +that all proportional scores set the SpacingSpanner's +'uniform-stretching attribute to ##t. Setting +proportionalNotationDuration without also setting the +SpacingSpanner's 'uniform-stretching attribute to ##t will, for +example, cause Skips to consume an incorrect amount of horizontal +space. + +The SpacingSpanner is an abstract grob that lives in the Score +context. As with our settings of proportionalNotationDuration, +overrides to the SpacingSpanner can occur in any of three +different places in our input file – in the Score \with block, in +a Score \context block, or in note entry directly. + +There is by default only one @code{SpacingSpanner} per @code{Score}. This +means that, by default, @code{uniform-stretching} is either turned on for the +entire score or turned off for the entire score. We can, however, +override this behavior and turn on different spacing features at +different places in the score. We do this with the command +@code{\newSpacingSection}. See @ref{New spacing area}, for more info. + +Next we examine the effects of the @code{Separating_line_group_engraver} and +see why proportional scores frequently remove this engraver. The following +example shows that there is a small amount of @qq{preferatory} space +just before the first note in each system. + +@lilypond[quote,verbatim,ragged-right] +\paper { + indent = #0 +} + +\new Staff { + c'1 + \break + c'1 +} +@end lilypond + + +The amount of this preferatory space is the same whether after a time +signature, a key signature or a clef. @code{Separating_line_group_engraver} +is responsible for this space. Removing @code{Separating_line_group_engraver} +reduces this space to zero. + +@lilypond[quote,verbatim,ragged-right] +\paper { + indent = #0 +} + +\new Staff \with { + \remove Separating_line_group_engraver +} { + c'1 + \break + c'1 +} +@end lilypond + +Nonmusical elements like time signatures, key signatures, clefs and +accidentals are problematic in proportional notation. None of these +elements has rhythmic duration. But all of these elements consume +horizontal space. Different proportional scores approach these +problems differently. + +It may be possible to avoid spacing problems with key signatures +simply by not having any. This is a valid option since most +proportional scores are contemporary music. The same may be true +of time signatures, especially for those scores +that include a measured timeline or other graphic. But these scores +are exceptional and most proportional scores include at least some +time signatures. Clefs and accidentals are even more essential. + +So what strategies exist for spacing nonmusical elements in a +proportional context? One good option is the @code{strict-note-spacing} +property of @code{SpacingSpanner}. Compare the two scores below: + +@lilypond[quote,verbatim,ragged-right] +\new Staff { + \set Score.proportionalNotationDuration = #(ly:make-moment 1 16) + c''8 + c''8 + c''8 + \clef alto + d'8 + d'2 +} + +\new Staff { + \set Score.proportionalNotationDuration = #(ly:make-moment 1 16) + \override Score.SpacingSpanner #'strict-note-spacing = ##t + c''8 + c''8 + c''8 + \clef alto + d'8 + d'2 +} +@end lilypond + +Both scores are proportional, but the spacing in the first score +is too loose because of the clef change. The spacing of the second +score remains strict, however, because strict-note-spacing is +turned on. Turning on strict-note-spacing causes the width of +time signatures, key signatures, clefs and accidentals to play no +part in the spacing algorithm. + +In addition to the settings given here, there are other settings +that frequently appear in proportional scores. These include: + +@itemize +@item @code{\override SpacingSpanner #'strict-grace-spacing = ##t} +@item @code{tupletFullLength = ##t} +@item @code{\override Beam #'breakable = ##t} +@item @code{\override Glissando #'breakable = ##t} +@item @code{\override TextSpanner #'breakable = ##t} +@item @code{\remove Forbid_line_break_engraver in the Voice context} +@end itemize + +These settings space grace notes strictly, extend tuplet brackets to +mark both rhythmic start- and stop-points, and allow spanning elements +to break across systems and pages. See the respective parts of the manual +for these related settings. + + +@seealso +Notation Reference: +@ref{New spacing area}. + +Snippets: +@rlsr{Spacing}. + + +@node Fitting music onto fewer pages +@section Fitting music onto fewer pages + +Sometimes you can end up with one or two staves on a second +(or third, or fourth...) page. This is annoying, especially +if you look at previous pages and it looks like there is plenty +of room left on those. + +When investigating layout issues, @code{annotate-spacing} is an +invaluable tool. This command prints the values of various layout +spacing variables; for more details see the following section, +@ref{Displaying spacing}. + +@menu +* Displaying spacing:: +* Changing spacing:: +@end menu + + +@node Displaying spacing +@subsection Displaying spacing + +@funindex annotate-spacing +@cindex spacing, display of layout + +To graphically display the dimensions of vertical layout variables +that may be altered for page formatting, set +@code{annotate-spacing} in the @code{\paper} block: + +@c need to have \book{} otherwise we get the separate systems. -hwn +@lilypond[verbatim,quote] +#(set-default-paper-size "a6" 'landscape) +\book { + \score { { c4 } } + \paper { annotate-spacing = ##t } +} +@end lilypond + + +@noindent +All layout dimensions are displayed in staff-spaces, regardless +of the units specified in the @code{\paper} or @code{\layout} block. +In the above example, @code{paper-height} has a value of 59.75 +@code{staff-spaces}, and the @code{staff-size} is 20 points (the +default value). Note that: + +@multitable {1 staff-space} {staff-size)/4 * (25.4/72.27) mm} + +@item 1 point +@tab = (25.4/72.27) mm + +@item 1 staff-space +@tab = (@code{staff-size})/4 pts +@item +@tab = (@code{staff-size})/4 * (25.4/72.27) mm + +@end multitable + +@noindent +In this case, one @code{staff-space} is approximately equal to +1.757mm. Thus the @code{paper-height} measurement of 59.75 +@code{staff-spaces} is equivalent to 105 millimeters, the height +of @code{a6} paper in landscape orientation. The pairs +(@var{a},@var{b}) are intervals, where @var{a} is the lower +edge and @var{b} the upper edge of the interval. + + +@seealso +@ref{Setting the staff size} +Snippets: +@rlsr{Spacing}. + + +@node Changing spacing +@subsection Changing spacing + +The output of @code{annotate-spacing} reveals vertical dimensions +in great detail. For details about modifying margins and other +layout variables, see @ref{Page formatting}. + +Other than margins, there are a few other options to save space: + +@itemize +@item +Force systems to move as close together as possible (to fit as +many systems as possible onto a page) while being spaced so that +there is no blank space at the bottom of the page. + +@example +\paper @{ + between-system-padding = #0.1 + between-system-space = #0.1 + ragged-last-bottom = ##f + ragged-bottom = ##f +@} +@end example + +@item +Force the number of systems. This can help in two ways. Just +setting a value, even the same value as the number of systems +being typeset by default, will sometimes cause more systems to +be fitted onto each page, as an estimation step is then bypassed, +giving a more accurate fit to each page. Also, forcing an actual +reduction in the number of systems may save a further page. For +example, if the default layout has 11 systems, the following +assignment will force a layout with 10 systems. + +@example +\paper @{ + system-count = #10 +@} +@end example + +@item +Avoid (or reduce) objects that increase the vertical size of a +system. For example, volta repeats (or alternate repeats) require +extra space. If these repeats are spread over two systems, they +will take up more space than one system with the volta repeats and +another system without. For example, dynamics that @q{stick out} of +a system can be moved closer to the staff: + +@lilypond[verbatim,quote,relative=1] +e4 c g\f c +\override DynamicText #'extra-offset = #'( -2.2 . 2.0) +e4 c g\f c +@end lilypond + +@item +Alter the horizontal spacing via @code{SpacingSpanner}. For more +details, see @ref{Changing horizontal spacing}. The following +example illustrates the default spacing: + +@lilypond[verbatim,quote] +\score { + \relative c'' { + g4 e e2 | + f4 d d2 | + c4 d e f | + g4 g g2 | + g4 e e2 | + } +} +@end lilypond + +@noindent +The next example modifies @code{common-shortest-duration} from a +value of @code{1/4} to @code{1/2}. The quarter note is the most +common and shortest duration in this example, so by making this +duration longer, a @q{squeezing} effect occurs: + +@lilypond[verbatim,quote] +\score { + \relative c'' { + g4 e e2 | + f4 d d2 | + c4 d e f | + g4 g g2 | + g4 e e2 | + } + \layout { + \context { + \Score + \override SpacingSpanner + #'common-shortest-duration = #(ly:make-moment 1 2) + } + } +} +@end lilypond + +@noindent +The @code{common-shortest-duration} property cannot be modified +dynamically, so it must always be placed in a @code{\context} +block so that it applies to the whole score. + +@end itemize + + +@seealso +Notation Reference: +@ref{Page formatting}, +@ref{Changing horizontal spacing}. + +Snippets: +@rlsr{Spacing}. diff --git a/Documentation/notation/specialist.itely b/Documentation/notation/specialist.itely new file mode 100644 index 0000000000..e98730ce35 --- /dev/null +++ b/Documentation/notation/specialist.itely @@ -0,0 +1,38 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + +@node Specialist notation +@chapter Specialist notation + +This chapter explains how to create musical notation for specific +types of instrument or in specific styles. + +@menu +* Vocal music:: +* Keyboard and other multi-staff instruments:: +* Unfretted string instruments:: +* Fretted string instruments:: +* Percussion:: +* Wind instruments:: +* Chord notation:: +* Ancient notation:: +* World music:: +@end menu + +@include notation/vocal.itely +@include notation/keyboards.itely +@include notation/unfretted-strings.itely +@include notation/fretted-strings.itely +@include notation/percussion.itely +@include notation/wind.itely +@include notation/chords.itely +@include notation/ancient.itely +@include notation/world.itely + diff --git a/Documentation/notation/staff.itely b/Documentation/notation/staff.itely new file mode 100644 index 0000000000..6489782175 --- /dev/null +++ b/Documentation/notation/staff.itely @@ -0,0 +1,1360 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + +@node Staff notation +@section Staff notation + +@lilypondfile[quote]{staff-headword.ly} + +This section explains how to influence the appearance of staves, +how to print scores with more than one staff, and how to add tempo +indications and cue notes to staves. + +@menu +* Displaying staves:: +* Modifying single staves:: +* Writing parts:: +@end menu + + +@node Displaying staves +@subsection Displaying staves + +This section describes the different methods of creating and +grouping staves. + +@menu +* Instantiating new staves:: +* Grouping staves:: +* Nested staff groups:: +@end menu + + +@node Instantiating new staves +@unnumberedsubsubsec Instantiating new staves + +@cindex new staff +@cindex staff initiation +@cindex staff instantiation +@cindex staff, new +@cindex staff, single +@cindex staff, drum +@cindex staff, percussion +@cindex drum staff +@cindex percussion staff +@cindex Gregorian transcription staff +@cindex rhythmic staff +@cindex tabstaff +@cindex tablature + +@funindex \drummode +@funindex drummode +@funindex DrumStaff +@funindex RhythmicStaff +@funindex TabStaff +@funindex MensuralStaff +@funindex VaticanaStaff +@funindex GregorianTranscriptionStaff + +@notation{Staves} (singular: @notation{staff}) are created with +the @code{\new} or @code{\context} commands. For details, see +@ref{Creating contexts}. + +The basic staff context is @code{Staff}: + +@lilypond[verbatim,quote,relative=2] +\new Staff { c4 d e f } +@end lilypond + +The @code{DrumStaff} context creates a five-line staff set up for +a typical drum set. Each instrument is shown with a different +symbol. The instruments are entered in drum mode following a +@code{\drummode} command, with each instrument specified by name. +For details, see @ref{Percussion staves}. + +@lilypond[verbatim,quote] +\new DrumStaff { + \drummode { cymc hh ss tomh } +} +@end lilypond + +@code{RhythmicStaff} creates a single-line staff that only +displays the rhythmic values of the input. Real durations are +preserved. For details, see @ref{Showing melody rhythms}. + +@lilypond[verbatim,quote,relative=2] +\new RhythmicStaff { c4 d e f } +@end lilypond + +@code{TabStaff} creates a tablature with six strings in standard +guitar tuning. For details, see @ref{Default tablatures}. + +@lilypond[verbatim,quote,relative=2] +\new TabStaff { c4 d e f } +@end lilypond + +There are two staff contexts specific for the notation of ancient +music: @code{MensuralStaff} and @code{VaticanaStaff}. They are +described in @ref{Pre-defined contexts}. + +The @code{GregorianTranscriptionStaff} context creates a staff to +notate modern Gregorian chant. It does not show bar lines. + +@lilypond[verbatim,quote,relative=2] +\new GregorianTranscriptionStaff { c4 d e f e d } +@end lilypond + +New single staff contexts may be defined. For details, see +@ref{Defining new contexts}. + + +@seealso +Music Glossary: +@rglos{staff}, +@rglos{staves}. + +Notation Reference: +@ref{Creating contexts}, +@ref{Percussion staves}, +@ref{Showing melody rhythms}, +@ref{Default tablatures}, +@ref{Pre-defined contexts}, +@ref{Staff symbol}, +@ref{Gregorian chant contexts}, +@ref{Mensural contexts}, +@ref{Defining new contexts}. + +Snippets: +@rlsr{Staff notation}. + +Internals Reference: +@rinternals{Staff}, +@rinternals{DrumStaff}, +@rinternals{GregorianTranscriptionStaff}, +@rinternals{RhythmicStaff}, +@rinternals{TabStaff}, +@rinternals{MensuralStaff}, +@rinternals{VaticanaStaff}, +@rinternals{StaffSymbol}. + + +@node Grouping staves +@unnumberedsubsubsec Grouping staves + +@cindex start of system +@cindex staff, multiple +@cindex staves, multiple +@cindex system start delimiters +@cindex bracket, vertical +@cindex brace, vertical +@cindex choir staff +@cindex grand staff +@cindex piano staff +@cindex staff group +@cindex staff, choir +@cindex staff, piano +@cindex staff, grand +@cindex system + +Various contexts exist to group single staves together in order to +form multi-stave systems. Each grouping context sets the style of +the system start delimiter and the behavior of bar lines. + +If no context is specified, the default properties will be used: +the group is started with a vertical line, and the bar lines are +not connected. + +@lilypond[verbatim,quote,relative=2] +<< + \new Staff { c1 c } + \new Staff { c1 c } +>> +@end lilypond + +In the @code{StaffGroup} context, the group is started with a +bracket and bar lines are drawn through all the staves. + +@lilypond[verbatim,quote,relative=2] +\new StaffGroup << + \new Staff { c1 c } + \new Staff { c1 c } +>> +@end lilypond + +In a @code{ChoirStaff}, the group starts with a bracket, but bar +lines are not connected. + +@lilypond[verbatim,quote,relative=2] +\new ChoirStaff << + \new Staff { c1 c } + \new Staff { c1 c } +>> +@end lilypond + +In a @code{GrandStaff}, the group begins with a brace, and bar +lines are connected between the staves. + +@lilypond[verbatim,quote,relative=2] +\new GrandStaff << + \new Staff { c1 c } + \new Staff { c1 c } +>> +@end lilypond + +The @code{PianoStaff} is identical to a @code{GrandStaff}, except +that it supports printing the instrument name directly. For +details, see @ref{Instrument names}. + +@lilypond[verbatim,quote,relative=2] +\new PianoStaff << + \set PianoStaff.instrumentName = #"Piano" + \new Staff { c1 c } + \new Staff { c1 c } +>> +@end lilypond + +Each staff group context sets the property +@code{systemStartDelimiter} to one of the following values: +@code{SystemStartBar}, @code{SystemStartBrace}, or +@code{SystemStartBracket}. A fourth delimiter, +@code{SystemStartSquare}, is also available, but it must be +explicitly specified. + +New staff group contexts may be defined. For details, see +@ref{Defining new contexts}. + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{use-square-bracket-at-the-start-of-a-staff-group.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{display-bracket-with-only-one-staff-in-a-system.ly} + +@cindex mensurstriche layout +@cindex renaissance music +@cindex transcription of mensural music +@cindex mensural music, transcription of + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{mensurstriche-layout-bar-lines-between-the-staves.ly} + + +@seealso +Music Glossary: +@rglos{brace}, +@rglos{bracket}, +@rglos{grand staff}. + +Notation Reference: +@ref{Instrument names}, +@ref{Defining new contexts}. + +Snippets: +@rlsr{Staff notation}. + +Internals Reference: +@rinternals{Staff}, +@rinternals{StaffGroup}, +@rinternals{ChoirStaff}, +@rinternals{GrandStaff}, +@rinternals{PianoStaff}, +@rinternals{SystemStartBar}, +@rinternals{SystemStartBrace}, +@rinternals{SystemStartBracket}, +@rinternals{SystemStartSquare}. + + +@node Nested staff groups +@unnumberedsubsubsec Nested staff groups + +@cindex staff, nested +@cindex staves, nested +@cindex nesting of staves +@cindex system start delimiters, nested +@cindex nested staff brackets +@cindex brackets, nesting of +@cindex braces, nesting of + +Staff-group contexts can be nested to arbitrary depths. In this +case, each child context creates a new bracket adjacent to the +bracket of its parent group. + +@lilypond[verbatim,quote,relative=2] +\new StaffGroup << + \new Staff { c2 c | c2 c } + \new StaffGroup << + \new Staff { g2 g | g2 g } + \new StaffGroup \with { + systemStartDelimiter = #'SystemStartSquare + } + << + \new Staff { e2 e | e2 e } + \new Staff { c2 c | c2 c } + >> + >> +>> +@end lilypond + +New nested staff group contexts can be defined. For details, see +@ref{Defining new contexts}. + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{nesting-staves.ly} + + +@seealso +Notation Reference: +@ref{Grouping staves}, +@ref{Instrument names}, +@ref{Defining new contexts}. + +Snippets: +@rlsr{Staff notation}. + +Internals Reference: +@rinternals{StaffGroup}, +@rinternals{ChoirStaff}, +@rinternals{SystemStartBar}, +@rinternals{SystemStartBrace}, +@rinternals{SystemStartBracket}, +@rinternals{SystemStartSquare}. + + +@node Modifying single staves +@subsection Modifying single staves + +This section explains how to change specific attributes of one +staff: for example, modifying the number of staff lines or the +staff size. Methods to start and stop staves and set ossia +sections are also described. + +@menu +* Staff symbol:: +* Ossia staves:: +* Hiding staves:: +@end menu + + +@node Staff symbol +@unnumberedsubsubsec Staff symbol + +@cindex adjusting staff symbol +@cindex drawing staff symbol +@cindex staff symbol, setting of +@cindex staff symbol, drawing +@cindex stop staff lines +@cindex start staff lines +@cindex staff lines, amount of +@cindex staff lines, number of +@cindex staff line, thickness of +@cindex amount of staff lines +@cindex thickness of staff lines +@cindex ledger lines, setting +@cindex setting of ledger lines +@cindex spacing of ledger lines +@cindex number of staff lines + +The lines of a staff belong to the @code{StaffSymbol} grob. +@code{StaffSymbol} properties can be modified to change the +appearance of a staff, but they must be modified before the staff +is created. + +The number of staff lines may be changed. The clef position and +the position of middle C may need to be modified to fit the new +staff. For an explanation, refer to the snippet section in +@ref{Clef}. + +@lilypond[verbatim,quote,relative=2] +\new Staff \with { + \override StaffSymbol #'line-count = #3 +} +{ d4 d d d } +@end lilypond + +Staff line thickness can be modified. The thickness of ledger +lines and stems are also affected, since they depend on staff line +thickness. + +@lilypond[verbatim,quote,relative=1] +\new Staff \with { + \override StaffSymbol #'thickness = #3 +} +{ e4 d c b } +@end lilypond + +Ledger line thickness can be set independently of staff line +thickness. In the example the two numbers are factors multiplying +the staff line thickness and the staff line spacing. The two +contributions are added to give the ledger line thickness. + +@lilypond[verbatim,quote,relative=1] +\new Staff \with { + \override StaffSymbol #'ledger-line-thickness = #'(1 . 0.2) +} +{ e4 d c b } +@end lilypond + +The distance between staff lines can be changed. This setting +affects the spacing of ledger lines as well. + +@lilypond[verbatim,quote,relative=1] +\new Staff \with { + \override StaffSymbol #'staff-space = #1.5 +} +{ a4 b c d } +@end lilypond + +Further details about the properties of @code{StaffSymbol} can be +found in @rinternals{staff-symbol-interface}. + +@cindex stopping a staff +@cindex starting a staff +@cindex staff, starting +@cindex staff, stopping + +@funindex \startStaff +@funindex startStaff +@funindex \stopStaff +@funindex stopStaff + +Modifications to staff properties in the middle of a score can be +placed between @code{\stopStaff} and @code{\startStaff}: + +@lilypond[verbatim,quote,relative=2] +c2 c +\stopStaff +\override Staff.StaffSymbol #'line-count = #2 +\startStaff +b2 b +\stopStaff +\revert Staff.StaffSymbol #'line-count +\startStaff +a2 a +@end lilypond + +@noindent +In general, @code{\startStaff} and @code{\stopStaff} can be used +to stop or start a staff in the middle of a score. + +@lilypond[verbatim,quote,relative=2] +c4 b a2 +\stopStaff +b4 c d2 +\startStaff +e4 d c2 +@end lilypond + + +@predefined +@code{\startStaff}, +@code{\stopStaff}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{making-some-staff-lines-thicker-than-the-others.ly} + + +@seealso +Music Glossary: +@rglos{line}, +@rglos{ledger line}, +@rglos{staff}. + +Notation Reference: +@ref{Clef}. + +Snippets: +@rlsr{Staff notation}. + +Internals Reference: +@rinternals{StaffSymbol}, +@rinternals{staff-symbol-interface}. + + +@node Ossia staves +@unnumberedsubsubsec Ossia staves + +@cindex staff, Frenched +@cindex ossia +@cindex Frenched staves +@cindex staff, resizing of +@cindex resizing of staves + +@funindex \startStaff +@funindex startStaff +@funindex \stopStaff +@funindex stopStaff + +@notation{Ossia} staves can be set by creating a new simultaneous +staff in the appropriate location: + +@lilypond[verbatim,quote] +\new Staff \relative c'' { + c4 b d c + << + { c4 b d c } + \new Staff { e4 d f e } + >> + c4 b c2 +} +@end lilypond + +@noindent +However, the above example is not what is usually desired. To +create ossia staves that are above the original staff, have no +time signature or clef, and have a smaller font size, tweaks must +be used. The Learning Manual describes a specific technique to +achieve this goal, beginning with +@rlearning{Nesting music expressions}. + +The following example uses the @code{alignAboveContext} property +to align the ossia staff. This method is most appropriate when +only a few ossia staves are needed. + +@lilypond[verbatim,quote] +\new Staff = main \relative c'' { + c4 b d c + << + { c4 b d c } + + \new Staff \with { + \remove "Time_signature_engraver" + alignAboveContext = #"main" + fontSize = #-3 + \override StaffSymbol #'staff-space = #(magstep -3) + \override StaffSymbol #'thickness = #(magstep -3) + firstClef = ##f + } + { e4 d f e } + >> + c4 b c2 +} +@end lilypond + +If many isolated ossia staves are needed, creating an empty +@code{Staff} context with a specific @emph{context id} may be more +appropriate; the ossia staves may then be created by +@emph{calling} this context and using @code{\startStaff} and +@code{\stopStaff} at the desired locations. The benefits of this +method are more apparent if the piece is longer than the following +example. + +@lilypond[verbatim,quote,ragged-right] +<< + \new Staff = ossia \with { + \remove "Time_signature_engraver" + \override Clef #'transparent = ##t + fontSize = #-3 + \override StaffSymbol #'staff-space = #(magstep -3) + \override StaffSymbol #'thickness = #(magstep -3) + } + { \stopStaff s1*6 } + + \new Staff \relative c' { + c4 b c2 + << + { e4 f e2 } + \context Staff = ossia { + \startStaff e4 g8 f e2 \stopStaff + } + >> + g4 a g2 \break + c4 b c2 + << + { g4 a g2 } + \context Staff = ossia { + \startStaff g4 e8 f g2 \stopStaff + } + >> + e4 d c2 + } +>> +@end lilypond + + +Using the @code{\RemoveEmptyStaffContext} command to create ossia +staves may be used as an alternative. This method is most +convenient when ossia staves occur immediately following a line +break. For more information about +@code{\RemoveEmptyStaffContext}, see @ref{Hiding staves}. + +@lilypond[verbatim,quote,ragged-right] +<< + \new Staff = ossia \with { + \remove "Time_signature_engraver" + \override Clef #'transparent = ##t + fontSize = #-3 + \override StaffSymbol #'staff-space = #(magstep -3) + \override StaffSymbol #'thickness = #(magstep -3) + } \relative c'' { + R1*3 + c4 e8 d c2 + } + \new Staff \relative c' { + c4 b c2 + e4 f e2 + g4 a g2 \break + c4 b c2 + g4 a g2 + e4 d c2 + } +>> + +\layout { + \context { + \RemoveEmptyStaffContext + \override VerticalAxisGroup #'remove-first = ##t + } +} +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{vertically-aligning-ossias-and-lyrics.ly} + + +@seealso +Music Glossary: +@rglos{ossia}, +@rglos{staff}, +@rglos{Frenched staff}. + +Learning Manual: +@rlearning{Nesting music expressions}, +@rlearning{Size of objects}, +@rlearning{Length and thickness of objects}. + +Notation Reference: +@ref{Hiding staves}. + +Snippets: +@rlsr{Staff notation}. + +Internals Reference: +@rinternals{StaffSymbol}. + + +@node Hiding staves +@unnumberedsubsubsec Hiding staves + +@cindex Frenched score +@cindex Frenched staff +@cindex staff, hiding +@cindex staff, empty +@cindex hiding of staves +@cindex empty staves + +@funindex \RemoveEmptyStaffContext +@funindex RemoveEmptyStaffContext +@funindex Staff_symbol_engraver +@funindex \stopStaff +@funindex stopStaff + + +Staff lines can be hidden by removing the +@code{Staff_symbol_engraver} from the @code{Staff} context. As an +alternative, @code{\stopStaff} may be used. + +@lilypond[verbatim,quote] +\new Staff \with { + \remove "Staff_symbol_engraver" +} +\relative c''' { a8 f e16 d c b a2 } +@end lilypond + + +Empty staves can be hidden by setting the +@code{\RemoveEmptyStaffContext} command in the @code{\layout} +block. In orchestral scores, this style is known as @q{Frenched +Score}. By default, this command hides and removes all empty +staves in a score except for those in the first system. + +@warning{A staff is considered empty when it contains only +multi-measure rests, skips, spacer rests, or a combination of these +elements.} + +@lilypond[verbatim,quote,ragged-right] +\layout { + \context { + \RemoveEmptyStaffContext + } +} + +\relative c' << + \new Staff { + e4 f g a \break + b1 \break + a4 b c2 + } + \new Staff { + c,4 d e f \break + R1 \break + f4 g c,2 + } +>> +@end lilypond + +@cindex ossia + +@noindent +@code{\RemoveEmptyStaffContext} can also be used to create ossia +sections for a staff. For details, see @ref{Ossia staves}. + +@cindex hiding ancient staves +@cindex hiding rhythmic staves + +@funindex \RemoveEmptyStaffContext +@funindex RemoveEmptyStaffContext +@funindex \AncientRemoveEmptyStaffContext +@funindex AncientRemoveEmptyStaffContext +@funindex \RemoveEmptyRhythmicStaffContext +@funindex RemoveEmptyRhythmicStaffContext + +The @code{\AncientRemoveEmptyStaffContext} command may be used to +hide empty staves in ancient music contexts. Similarly, +@code{\RemoveEmptyRhythmicStaffContext} may be used to hide empty +@code{RhythmicStaff} contexts. + + +@predefined +@code{\RemoveEmptyStaffContext}, +@code{\AncientRemoveEmptyStaffContext}, +@code{\RemoveEmptyRhythmicStaffContext}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{removing-the-first-empty-line.ly} + + +@seealso +Music Glossary: +@rglos{Frenched staff}. + +Learning Manual: +@rlearning{Visibility and color of objects}. + +Notation Reference: +@ref{Staff symbol}, +@ref{Ossia staves}, +@ref{Hidden notes}, +@ref{Invisible rests}, +@ref{Visibility of objects}. + +Snippets: +@rlsr{Staff notation}. + +Internals Reference: +@rinternals{ChordNames}, +@rinternals{FiguredBass}, +@rinternals{Lyrics}, +@rinternals{Staff}, +@rinternals{VerticalAxisGroup}, +@rinternals{Staff_symbol_engraver}. + + +@knownissues + +Removing @code{Staff_symbol_engraver} also hides bar lines. If +bar line visibility is forced, formatting errors may occur. In +this case, use the following overrides instead of removing the +engraver: + +@example +\override StaffSymbol #'stencil = ##f +\override NoteHead #'no-ledgers = ##t +@end example + + +@node Writing parts +@subsection Writing parts + +This section explains how to insert tempo indications and +instrument names into a score. Methods to quote other voices and +format cue notes are also described. + +@menu +* Metronome marks:: +* Instrument names:: +* Quoting other voices:: +* Formatting cue notes:: +@end menu + + +@node Metronome marks +@unnumberedsubsubsec Metronome marks + +@cindex tempo +@cindex beats per minute +@cindex metronome mark +@cindex metronome marking with text + +@funindex \tempo +@funindex tempo + +A basic metronome mark is simple to write: + +@lilypond[verbatim,quote,relative=1] +\tempo 4 = 120 +c2 d +e4. d8 c2 +@end lilypond + +Tempo indications with text can be used instead: + +@lilypond[verbatim,quote,relative=2] +\tempo "Allegretto" +c4 e d c +b4. a16 b c4 r4 +@end lilypond + +Combining a metronome mark and text will automatically place the +metronome mark within parentheses: + +@lilypond[verbatim,quote,relative=2] +\tempo "Allegro" 4 = 160 +g4 c d e +d4 b g2 +@end lilypond + +In general, the text can be any markup object: + +@lilypond[verbatim,quote,relative=2] +\tempo \markup { \italic Faster } 4 = 132 +a8-. r8 b-. r gis-. r a-. r +@end lilypond + +A parenthesized metronome mark with no textual indication may be +written by including an empty string in the input: + +@lilypond[verbatim,quote,relative=2] +\tempo "" 8 = 96 +d4 g e c +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{printing-metronome-and-rehearsal-marks-below-the-staff.ly} + +@c perhaps also an example of how to move it horizontally? + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-the-tempo-without-a-metronome-mark.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{creating-metronome-marks-in-markup-mode.ly} + +For more details, see @ref{Formatting text}. + + +@seealso +Music Glossary: +@rglos{metronome}, +@rglos{metronomic indication}, +@rglos{tempo indication}, +@rglos{metronome mark}. + +Notation Reference: +@ref{Formatting text}, +@ref{MIDI output}. + +Snippets: +@rlsr{Staff notation}. + +Internals Reference: +@rinternals{MetronomeMark}. + + +@node Instrument names +@unnumberedsubsubsec Instrument names + +@cindex instrument names +@cindex instrument names, short + +Instrument names can be printed on the left side of staves in the +@code{Staff} and @code{PianoStaff} contexts. The value of +@code{instrumentName} is used for the first staff, and the value +of @code{shortInstrumentName} is used for all succeeding staves. + +@lilypond[verbatim,quote,ragged-right,relative=1] +\set Staff.instrumentName = #"Violin " +\set Staff.shortInstrumentName = #"Vln " +c4.. g'16 c4.. g'16 +\break +c1 +@end lilypond + +Markup mode can be used to create more complicated instrument +names: + +@lilypond[verbatim,quote,relative=2] +\set Staff.instrumentName = \markup { + \column { "Clarinetti" + \line { "in B" \smaller \flat } } } +c4 c,16 d e f g2 +@end lilypond + +@cindex instrument names, centering + +When two or more staff contexts are grouped together, the +instrument names and short instrument names are centered by +default. To center multi-line instrument names, +@code{\center-column} must be used: + +@lilypond[verbatim,quote,indent=1.5\cm,relative=2] +<< + \new Staff { + \set Staff.instrumentName = #"Flute" + f2 g4 f + } + \new Staff { + \set Staff.instrumentName = \markup \center-column { + Clarinet + \line { "in B" \smaller \flat } + } + c4 b c2 + } +>> +@end lilypond + +@funindex indent +@funindex short-indent + +However, if the instrument names are longer, the instrument names +in a staff group may not be centered unless the @code{indent} and +@code{short-indent} settings are increased. For details about +these settings, see @ref{Horizontal dimensions}. + +@lilypond[verbatim,quote,ragged-right] +\layout { + indent = 3.0\cm + short-indent = 1.5\cm +} + +\relative c'' << + \new Staff { + \set Staff.instrumentName = #"Alto Flute in G" + \set Staff.shortInstrumentName = #"Fl." + f2 g4 f \break + g4 f g2 + } + \new Staff { + \set Staff.instrumentName = #"Clarinet" + \set Staff.shortInstrumentName = #"Clar." + c,4 b c2 \break + c2 b4 c + } +>> +@end lilypond + +@cindex instrument names, adding to other contexts + +To add instrument names to other contexts (such as +@code{GrandStaff}, @code{ChoirStaff}, or @code{StaffGroup}), +@code{Instrument_name_engraver} must be added to that context. +For details, see @ref{Modifying context plug-ins}. + +@cindex instrument names, changing +@cindex changing instrument names + +Instrument names may be changed in the middle of a piece: + +@lilypond[verbatim,quote,ragged-right,relative=1] +\set Staff.instrumentName = #"First" +\set Staff.shortInstrumentName = #"one" +c1 c c c \break +c1 c c c \break +\set Staff.instrumentName = #"Second" +\set Staff.shortInstrumentName = #"two" +c1 c c c \break +c1 c c c \break +@end lilypond + +@cindex instrument switch +@cindex switching instruments + +@funindex \addInstrumentDefinition +@funindex addInstrumentDefinition +@funindex \instrumentSwitch +@funindex instrumentSwitch + +If an instrument @emph{switch} is needed, +@code{\addInstrumentDefinition} may be used in combination with +@code{\instrumentSwitch} to create a detailed list of the +necessary changes for the switch. The +@code{\addInstrumentDefinition} command has two arguments: an +identifying string, and an association list of context properties +and values to be used for the instrument. It must be placed in +the toplevel scope. @code{\instrumentSwitch} is used in the music +expression to declare the instrument switch: + +@lilypond[verbatim,quote,ragged-right] +\addInstrumentDefinition #"contrabassoon" + #`((instrumentTransposition . ,(ly:make-pitch -1 0 0)) + (shortInstrumentName . "Cbsn.") + (clefGlyph . "clefs.F") + (middleCPosition . 6) + (clefPosition . 2) + (instrumentCueName . ,(make-bold-markup "cbsn.")) + (midiInstrument . "bassoon")) + +\new Staff \with { + instrumentName = #"Bassoon" +} +\relative c' { + \clef tenor + \compressFullBarRests + c2 g' + R1*16 + \instrumentSwitch "contrabassoon" + c,,2 g \break + c,1 ~ | c1 +} +@end lilypond + + +@seealso +Notation Reference: +@ref{Horizontal dimensions}, +@ref{Modifying context plug-ins}. + +Snippets: +@rlsr{Staff notation}. + +Internals Reference: +@rinternals{InstrumentName}, +@rinternals{PianoStaff}, +@rinternals{Staff}. + + +@node Quoting other voices +@unnumberedsubsubsec Quoting other voices + +@cindex cues +@cindex quoting other voices +@cindex fragments +@cindex cue notes + +@funindex \addQuote +@funindex addQuote +@funindex \quoteDuring +@funindex quoteDuring +@funindex \transposition +@funindex transposition + +It is very common for one voice to double some of the music from +another voice. For example, the first and second violins may play the +same notes during a passage of music. In LilyPond this is accomplished +by letting one voice @emph{quote} the other voice without having to +re-enter it. + +Before a part can be quoted, the @code{\addQuote} command must be used +to initialize the quoted fragment. This command must be used in the +toplevel scope. The first argument is an identifying string, and the +second is a music expression: + +@example +flute = \relative c'' @{ + a4 gis g gis +@} +\addQuote "flute" @{ \flute @} +@end example + +The @code{\quoteDuring} command is used to indicate the point where the +quotation begins. It is followed by two arguments: the name of the +quoted voice, as defined with @code{\addQuote}, and a music expression +that indicates the duration of the quote, usually spacer rests or +multi-measure rests. The corresponding music from the quoted voice is +inserted into the music expression: + +@lilypond[verbatim,quote] +flute = \relative c'' { + a4 gis g gis +} +\addQuote "flute" { \flute } + +\relative c' { + c4 cis \quoteDuring #"flute" { s2 } +} +@end lilypond + +If the music expression used for @code{\quoteDuring} contains +anything but a spacer rest or multi-measure rest, a polyphonic +situation is created, which is often not desirable: + +@lilypond[verbatim,quote] +flute = \relative c'' { + a4 gis g gis +} +\addQuote "flute" { \flute } + +\relative c' { + c4 cis \quoteDuring #"flute" { c4 b } +} +@end lilypond + +Quotations recognize instrument transposition settings for both +the source and target instruments if the @code{\transposition} +command is used. For details about @code{\transposition}, see +@ref{Instrument transpositions}. + +@lilypond[verbatim,quote] +clarinet = \relative c'' { + \transposition bes + a4 gis g gis +} +\addQuote "clarinet" { \clarinet } + +\relative c' { + c4 cis \quoteDuring #"clarinet" { s2 } +} +@end lilypond + +It is possible to tag quotations with unique names in order to +process them in different ways. For details about this procedure, +see @ref{Using tags}. + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{quoting-another-voice-with-transposition.ly} + +@cindex note-event +@cindex articulation-event +@cindex dynamic-event +@cindex rest-event + +@funindex quotedEventTypes + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{quoting-another-voice.ly} + + +@seealso +Notation Reference: +@ref{Instrument transpositions}, +@ref{Using tags}. + +Snippets: +@rlsr{Staff notation}. + +Internals Reference: +@rinternals{QuoteMusic}, +@rinternals{Voice}. + + +@knownissues + +Only the contents of the first @code{Voice} occurring in an +@code{\addQuote} command will be considered for quotation, so +@var{music} cannot contain @code{\new} and @code{\context Voice} +statements that would switch to a different Voice. + +Quoting grace notes is broken and can even cause LilyPond to +crash. + +Quoting nested triplets may result in poor notation. + +In earlier versions of LilyPond (pre 2.11), @code{addQuote} was +written entirely in lower-case letters: @code{\addquote}. + + +@node Formatting cue notes +@unnumberedsubsubsec Formatting cue notes + +@cindex cues +@cindex cue notes +@cindex cue notes, formatting +@cindex fragments +@cindex quoting other voices +@cindex cues, formatting + +@funindex \cueDuring +@funindex cueDuring +@funindex \quoteDuring +@funindex quoteDuring + +The previous section explains how to create quotations. The +@code{\cueDuring} command is a more specialized form of +@code{\quoteDuring}, being particularly useful for inserting cue +notes into a part. The syntax is as follows: + +@example +\cueDuring #@var{partname} #@var{voice} @var{music} +@end example + +This command copies the corresponding measures from @var{partname} +into a @code{CueVoice} context. The @code{CueVoice} is created +implicitly, and occurs simultaneously with @var{music}, which +creates a polyphonic situation. The @var{voice} argument +determines whether the cue notes should be notated as a first or +second voice; @code{UP} corresponds to the first voice, and +@code{DOWN} corresponds to the second. + +@lilypond[verbatim,quote] +oboe = \relative c'' { + r2 r8 d16 f e g f a + g8 g16 g g2. +} +\addQuote "oboe" { \oboe } + +\new Voice \relative c'' { + \cueDuring #"oboe" #UP { R1 } + g2 c, +} +@end lilypond + +@noindent +In the above example, the @code{Voice} context had to be +explicitly declared, or else the entire music expression would +belong to the @code{CueVoice} context. + +The name of the cued instrument can be printed by setting the +@code{instrumentCueName} property in the @code{CueVoice} context. + +@lilypond[verbatim,quote] +oboe = \relative c''' { + g4 r8 e16 f e4 d +} +\addQuote "oboe" { \oboe } + +\new Staff \relative c'' << + \new CueVoice \with { + instrumentCueName = "ob." + } + \new Voice { + \cueDuring #"oboe" #UP { R1 } + g4. b8 d2 + } +>> +@end lilypond + +@cindex removing cues +@cindex removing cue notes +@cindex cue notes, removing + +@funindex \killCues +@funindex killCues +@funindex \transposedCueDuring +@funindex transposedCueDuring + +In addition to printing the name of the cued instrument, when cue +notes end, the name of the original instrument should be printed, +and any other changes introduced by the cued part should be +undone. This can be accomplished by using +@code{\addInstrumentDefinition} and @code{\instrumentSwitch}. For +an example and explanation, see @ref{Instrument names}. + +The @code{\killCues} command removes cue notes from a music +expression. This can be useful if cue notes need to be removed +from a part but may be restored at a later time. + +@lilypond[verbatim,quote] +flute = \relative c''' { + r2 cis2 r2 dis2 +} +\addQuote "flute" { \flute } + +\new Voice \relative c'' { + \killCues { + \cueDuring #"flute" #UP { R1 } + g4. b8 d2 + } +} +@end lilypond + +The @code{\transposedCueDuring} command is useful for adding +instrumental cues from a completely different register. The +syntax is similar to @code{\cueDuring}, but it requires one extra +argument to specify the transposition of the cued instrument. For +more information about transposition, see +@ref{Instrument transpositions}. + +@lilypond[verbatim,quote] +piccolo = \relative c''' { + \clef "treble^8" + R1 + c8 c c e g2 + a4 g g2 +} +\addQuote "piccolo" { \piccolo } + +cbassoon = \relative c, { + \clef "bass_8" + c4 r g r + \transposedCueDuring #"piccolo" #UP c,, { R1 } + c4 r g r +} + +<< + \new Staff = "piccolo" \piccolo + \new Staff = "cbassoon" \cbassoon +>> +@end lilypond + +It is possible to tag cued parts with unique names in order to +process them in different ways. For details about this procedure, +see @ref{Using tags}. + +@cindex notes, smaller +@cindex smaller notes + +A @code{CueVoice} context may be created explicitly if notes of a +smaller size are required, for example to set an alternative +sequence of notes more suitable for a higher or lower voice. + +@lilypond[verbatim,relative=2] +\time 12/8 +\key ees \major +g4 ees8 f4 g8 +\stemDown +<< + { d4. bes4 c8 } + \new CueVoice + { g'4. f4 ees8 } +>> +\stemUp +d2. d2. +@end lilypond + +@seealso +Notation Reference: +@ref{Instrument transpositions}, +@ref{Instrument names}, +@ref{Using tags}. + +Snippets: +@rlsr{Staff notation}. + +Internals Reference: +@rinternals{CueVoice}, +@rinternals{Voice}. + + +@knownissues + +Collisions can occur with rests, when using @code{\cueDuring}, +between @code{Voice} and @code{CueVoice} contexts. + diff --git a/Documentation/notation/text.itely b/Documentation/notation/text.itely new file mode 100644 index 0000000000..41b8fb34a4 --- /dev/null +++ b/Documentation/notation/text.itely @@ -0,0 +1,1520 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + +@node Text +@section Text + +@lilypondfile[quote]{text-headword.ly} + +This section explains how to include text (with various +formatting) in music scores. + +@noindent +Some text elements that are not dealt with here are discussed in other +specific sections: @ref{Vocal music}, @ref{Titles and headers}. + +@menu +* Writing text:: +* Formatting text:: +* Fonts:: +@end menu + +@node Writing text +@subsection Writing text + +This section introduces different ways of adding text to a score. + +@cindex Text, other languages +@warning{To write accented and special text (such as characters +from other languages), simply insert the characters directly into +the LilyPond file. The file must be saved as UTF-8. For more +information, see @ref{Text encoding}.} + +@menu +* Text scripts:: +* Text spanners:: +* Text marks:: +* Separate text:: +@end menu + + +@node Text scripts +@unnumberedsubsubsec Text scripts + +@cindex Text scripts +@cindex text items, non-empty +@cindex non-empty texts +@cindex quoted text + +Simple @qq{quoted text} indications may be added to a score, as +demonstrated in the following example. Such indications may be +manually placed above or below the staff, using the syntax described +in @ref{Direction and placement}. + +@lilypond[quote,verbatim,relative=2] +a8^"pizz." g f e a4-"scherz." f +@end lilypond + +This syntax is actually a shorthand; more complex text +formatting may be added to a note by explicitly using a +@code{\markup} block, as described in @ref{Formatting text}. + +@lilypond[quote,verbatim,relative=2] +a8^\markup { \italic pizz. } g f e +a4_\markup { \tiny scherz. \bold molto } f +@end lilypond + +By default, text indications do not influence the note spacing. +However, their widths can be taken into account: +in the following example, the first text string does not affect +spacing, whereas the second one does. + +@lilypond[quote,verbatim,relative=2] +a8^"pizz." g f e +\textLengthOn +a4_"scherzando" f +@end lilypond + + +@funindex \textLengthOn +@funindex textLengthOn +@funindex \textLengthOff +@funindex textLengthOff + +@predefined +@code{\textLengthOn}, +@code{\textLengthOff}. +@endpredefined + + +@seealso +Notation Reference: +@ref{Formatting text}, +@ref{Direction and placement}. + +Snippets: +@rlsr{Text}. + +Internals Reference: +@rinternals{TextScript}. + +@cindex text outside margin +@cindex margin, text running over +@cindex text, keeping inside margin +@cindex lyrics, keeping inside margin + + +@knownissues + +Checking to make sure that text scripts and lyrics are within the +margins is a relatively large computational task. To speed up +processing, LilyPond does not perform such calculations by +default; to enable it, use + +@example +\override Score.PaperColumn #'keep-inside-line = ##t +@end example + + +@node Text spanners +@unnumberedsubsubsec Text spanners + +@cindex text spanners + +Some performance indications, e.g., @notation{rallentando} or +@notation{accelerando}, are written as text and are extended over +multiple notes with dotted lines. Such objects, called @qq{spanners}, +may be created from one note to another using the following syntax: + +@lilypond[verbatim,quote,relative=2] +\override TextSpanner #'(bound-details left text) = "rit." +b1\startTextSpan +e,\stopTextSpan +@end lilypond + +@cindex text spanners, formatting +@cindex formatting text spanners + +@noindent +The string to be printed is set through object properties. By default +it is printed in italic characters, but different formatting can be +obtained using @code{\markup} blocks, as described in @ref{Formatting +text}. + +@lilypond[quote,relative=2,verbatim] +\override TextSpanner #'(bound-details left text) = + \markup { \upright "rit." } +b1\startTextSpan c +e,\stopTextSpan +@end lilypond + +The line style, as well as the text string, can be defined as an +object property. This syntax is described in @ref{Line styles}. + + +@funindex \textSpannerUp +@funindex textSpannerUp +@funindex \textSpannerDown +@funindex textSpannerDown +@funindex \textSpannerNeutral +@funindex textSpannerNeutral + + +@predefined +@code{\textSpannerUp}, +@code{\textSpannerDown}, +@code{\textSpannerNeutral}. +@endpredefined + + +@seealso +Notation Reference: +@ref{Line styles}, +@ref{Dynamics}. + +Snippets: +@rlsr{Text}. + +Internals Reference: +@rinternals{TextSpanner}. + + +@node Text marks +@unnumberedsubsubsec Text marks + + +@cindex text marks +@cindex marks, text +@cindex text on bar line +@cindex coda on bar line +@cindex segno on bar line +@cindex fermata on bar line +@cindex bar lines, symbols on + +@funindex \mark +@funindex mark +@funindex \markup +@funindex markup + +Various text elements may be added to a score using +the syntax described in @ref{Rehearsal marks}: + +@c \mark needs to be placed on a separate line (it's not +@c attached to an object like \markup is). -vv + +@lilypond[verbatim,quote,relative=2] +c4 +\mark "Allegro" +c c c +@end lilypond + +This syntax makes it possible to put any text on a bar line; +more complex text formatting may be added using a @code{\markup} +block, as described in @ref{Formatting text}: + +@lilypond[quote,verbatim,relative=1] +1 +\mark \markup { \italic { colla parte } } +2 +1 +@end lilypond + +@noindent +This syntax also allows to print special signs, like coda, segno +or fermata, by specifying the appropriate symbol name as explained in +@ref{Music notation inside markup}: + +@lilypond[quote,verbatim,relative=2] +2 +\mark \markup { \musicglyph #"scripts.ufermata" } +1 +@end lilypond + +@noindent +Such objects are only typeset above the top staff of the score; depending on +whether they are specified at the end or the middle of a bar, they +can be placed above the bar line or between notes. When specified at a +line break, the mark will be printed at the beginning of the next line. + +@lilypond[quote,verbatim,relative=2] +\mark "Allegro" +c1 c +\mark "assai" \break +c c +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{printing-marks-at-the-end-of-a-line-or-a-score.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{aligning-marks-with-various-notation-objects.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{printing-marks-on-every-staff.ly} + + +@seealso +Notation Reference: +@ref{Rehearsal marks}, +@ref{Formatting text}, +@ref{Music notation inside markup}, +@ref{The Feta font}. + +Snippets: +@rlsr{Text}. + +Internals Reference: +@rinternals{RehearsalMark}. + + +@knownissues +@c To be removed when Issue 69 in the tracker gets fixed. -vv + +If a mark is entered at the end of the last bar of the score (where +there is no next line), then the mark will not be printed at +all. + +@node Separate text +@unnumberedsubsubsec Separate text + +@cindex separate text +@cindex text, separate +@cindex standalone text +@cindex top-level text +@cindex text, top-level +@cindex text, standalone + +@funindex \markup +@funindex markup + +A @code{\markup} block can exist by itself, outside of any +any @code{\score} block, as a @qq{top-level +expression}. This syntax is described in @ref{File structure}. + +@lilypond[verbatim,quote] +\markup { + Tomorrow, and tomorrow, and tomorrow... +} +@end lilypond + +@noindent +This allows printing text separately from the music, which is +particularly useful when the input file contains several music pieces, +as described in @ref{Multiple scores in a book}. + +@lilypond[quote,verbatim] +\score { + c'1 +} +\markup { + Tomorrow, and tomorrow, and tomorrow... +} +\score { + c'1 +} +@end lilypond + +Separate text blocks can be spread over multiple pages, +making it possible to print text documents or books entirely +within LilyPond. This feature, and the specific syntax it +requires, are described in @ref{Multi-page markup}. + + +@funindex \markup +@funindex markup +@funindex \markuplines +@funindex markuplines + +@predefined +@code{\markup}, +@code{\markuplines}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{stand-alone-two-column-markup.ly} + +@seealso +Notation Reference: @ref{Formatting text}, +@ref{File structure}, +@ref{Multiple scores in a book}, +@ref{Multi-page markup}. + +Snippets: +@rlsr{Text}. + +Internals Reference: @rinternals{TextScript}. + + +@node Formatting text +@subsection Formatting text + +This section presents basic and advanced text formatting, +using the @code{\markup} mode specific syntax. + +@menu +* Text markup introduction:: +* Selecting font and font size:: +* Text alignment:: +* Graphic notation inside markup:: +* Music notation inside markup:: +* Multi-page markup:: +@end menu + +@node Text markup introduction +@unnumberedsubsubsec Text markup introduction + +@cindex markup +@cindex text markup +@cindex markup text +@cindex typeset text + +@funindex \markup +@funindex markup + +A @code{\markup} block is used to typeset text with an extensible +syntax called @qq{markup mode}. + +@cindex markup expressions +@cindex expressions, markup +@cindex markup syntax +@cindex synatax, markup + +The markup syntax is similar to LilyPond's usual syntax: a +@code{\markup} expression is enclosed in curly braces @code{@{ +@dots{} @}}. A single word is regarded as a minimal expression, +and therefore does not need to be enclosed with braces. + +Unlike simple @qq{quoted text} indications, @code{\markup} blocks may +contain nested expressions or markup commands, entered using the +backslash @code{\} character. Such commands only affect the first +following expression. + +@lilypond[quote,verbatim,relative=2] +a1-\markup intenso +a2^\markup { poco \italic più forte } +c e1 +d2_\markup { \italic "string. assai" } +e +b1^\markup { \bold { molto \italic agitato } } +c +@end lilypond + +@cindex special characters in markup mode +@cindex markup mode, special characters +@cindex reserved characters, printing +@cindex printing reserved characters +@cindex printing special characters +@cindex quoted text in markup mode +@cindex markup mode, quoted text + +A @code{\markup} block may also contain quoted text strings. Such +strings are treated as minimal text expressions, and therefore any +markup command or special character (such as @code{\} and @code{#}) +will be printed verbatim without affecting the formatting of the text. +Double quotation marks themselves may be printed by preceding them +with backslashes. + +@lilypond[quote,verbatim,relative=2] +a1^"\italic markup..." +a_\markup { \italic "... prints \"italic\" letters!" } +a a +@end lilypond + +To be treated as a distinct expression, a list of words needs to be +enclosed with double quotes or preceded by a command. The way markup +expressions are defined affects how these expressions will be stacked, +centered and aligned; in the following example, the second +@code{\markup} expression is treated the same as the first one: + +@lilypond[quote,verbatim,relative=2] +c1^\markup { \center-column { a bbb c } } +c1^\markup { \center-column { a { bbb c } } } +c1^\markup { \center-column { a \line { bbb c } } } +c1^\markup { \center-column { a "bbb c" } } +@end lilypond + +Markups can be stored in variables. Such variables may be +directly attached to notes: + +@lilypond[quote,verbatim] +allegro = \markup { \bold \large Allegro } + +{ + d''8.^\allegro + d'16 d'4 r2 +} +@end lilypond + + +@noindent +An exhaustive list of @code{\markup}-specific commands can be found in +@ref{Text markup commands}. + + +@seealso +Notation Reference: +@ref{Text markup commands}. + +Snippets: +@rlsr{Text}. + +Installed files: +@file{scm/@/markup@/.scm}. + + +@knownissues + +Syntax errors for markup mode can be confusing. + + +@node Selecting font and font size +@unnumberedsubsubsec Selecting font and font size + +@cindex font switching +@cindex changing fonts +@cindex switching fonts + +@funindex \italic +@funindex italic +@funindex \bold +@funindex bold +@funindex \underline +@funindex underline + +Basic font switching is supported in markup mode: + +@lilypond[quote,verbatim,relative=2] +d1^\markup { + \bold { Più mosso } + \italic { non troppo \underline Vivo } +} +r2 r4 r8 +d,_\markup { \italic quasi \smallCaps Tromba } +f1 d2 r +@end lilypond + +@cindex font size +@cindex text size + +@funindex \fontsize +@funindex fontsize +@funindex \smaller +@funindex smaller +@funindex \larger +@funindex larger +@funindex \magnify +@funindex magnify + +The size of the characters can also be altered in different ways: +@itemize +@item +the font size can be set to predefined standard sizes, + +@item +the font size can be set to an absolute value, + +@item +the font size can also be changed relatively to its previous value. +@end itemize + +@noindent +The following example demonstrates these three methods: + +@lilypond[quote,verbatim,relative=1] +f1_\markup { + \tiny espressivo + \large e + \normalsize intenso +} +a^\markup { + \fontsize #5 Sinfonia + \fontsize #2 da + \fontsize #3 camera +} +bes^\markup { (con + \larger grande + \smaller emozione + \magnify #0.6 { e sentimento } ) +} +d c2 r8 c bes a g1 +@end lilypond + +@cindex subscript +@cindex superscript + +@funindex \super +@funindex super +@funindex \sub +@funindex sub + +Text may be printed as subscript or superscript. By default these are +printed in a smaller size, but a normal size can be used as well: + +@lilypond[quote,verbatim] +\markup { + \column { + \line { 1 \super st movement } + \line { 1 \normal-size-super st movement + \sub { (part two) } } + } +} +@end lilypond + +@cindex font families + +The markup mode provides an easy way to select alternate font +families. The default serif font, of roman type, is automatically +selected unless specified otherwise; on the last line of the following +example, there is no difference between the first and the second word. + +@lilypond[quote,verbatim] +\markup { + \column { + \line { Act \number 1 } + \line { \sans { Scene I. } } + \line { \typewriter { Verona. An open place. } } + \line { Enter \roman Valentine and Proteus. } + } +} +@end lilypond + +@noindent +Some of these font families, used for specific items such as numbers +or dynamics, do not provide all characters, as mentioned in @ref{New +dynamic marks} and @ref{Manual repeat marks}. + +@c \concat is actually documented in Align (it is not +@c a font-switching command). But we need it here. -vv + +When used inside a word, some font-switching or formatting commands +may produce an unwanted blank space. This can easily be solved by +concatenating the text elements together: + +@lilypond[quote,verbatim] +\markup { + \column { + \line { + \concat { 1 \super st } + movement + } + \line { + \concat { \dynamic p , } + \italic { con dolce espressione } + } + } +} +@end lilypond + +An exhaustive list of font switching commands and custom font usage +commands can be found in @ref{Font}. + +Defining custom font sets is also possible, as explained in +@ref{Fonts}. + +@funindex \teeny +@funindex teeny +@funindex \tiny +@funindex tiny +@funindex \small +@funindex small +@funindex \normalsize +@funindex normalsize +@funindex \large +@funindex large +@funindex \huge +@funindex huge +@funindex \smaller +@funindex smaller +@funindex \larger +@funindex larger + + +@predefined +@code{\teeny}, +@code{\tiny}, +@code{\small}, +@code{\normalsize}, +@code{\large}, +@code{\huge}, +@code{\smaller}, +@code{\larger}. +@endpredefined + + +@seealso +Notation Reference: +@ref{Font}, +@ref{New dynamic marks}, +@ref{Manual repeat marks}, +@ref{Fonts}. + +Snippets: +@rlsr{Text}. + +Internals Reference: +@rinternals{TextScript}. + +Installed files: +@file{scm/@/define@/-markup@/-commands@/.scm}. + + +@node Text alignment +@unnumberedsubsubsec Text alignment + +@cindex text, aligning +@cindex aligning text +@cindex aligning markup text +@cindex aligning markups +@cindex markups, aligning +@cindex markup text, aligning + +This subsection discusses how to place text in markup mode. Markup +objects can also be moved as a whole, using the syntax described in +@rlearning{Moving objects}. + +@c Padding commands should be mentioned on this page, but +@c most of these require \box to be more clearly illustrated. -vv + +@cindex text, horizontal alignment +@cindex horizontal text alignment + +@funindex \left-align +@funindex left-align +@funindex \center-align +@funindex center-align +@funindex \right-align +@funindex right-align + +Markup objects may be aligned in different ways. By default, a text +indication is aligned on its left edge: in the following example, +there is no difference between the first and the second markup. + +@lilypond[quote,verbatim,relative=2] +d1-\markup { poco } +f +d-\markup { \left-align poco } +f +d-\markup { \center-align { poco } } +f +d-\markup { \right-align poco } +@end lilypond + +@funindex \halign +@funindex halign + +Horizontal alignment may be fine-tuned using a numeric value: + +@lilypond[quote,verbatim,relative=2] +a1-\markup { \halign #-1 poco } +e' +a,-\markup { \halign #0 poco } +e' +a,-\markup { \halign #0.5 poco } +e' +a,-\markup { \halign #2 poco } +@end lilypond + +@noindent +Some objects may have alignment procedures of their own, and therefore +are not affected by these commands. It is possible to move such +markup objects as a whole, as shown for instance in @ref{Text marks}. + +@cindex text, vertical alignment +@cindex vertical text alignment + +@funindex \raise +@funindex raise +@funindex \lower +@funindex lower +@funindex \null +@funindex null + +@c QUERY Should the function of ``\null'' be clarified? rp + +Vertical alignment is a bit more complex. As stated above, markup +objects can be moved as a whole; however, it is also possible to move +specific elements inside a markup block. In this case, the element to +be moved needs to be preceded with an @emph{anchor point}, that can be +another markup element or an invisible object. The following example +demonstrates these two possibilities; the last markup in this example +has no anchor point, and therefore is not moved. + +@lilypond[quote,verbatim,relative=1] +d2^\markup { + Acte I + \raise #2 { Scène 1 } +} +a' +g_\markup { + \null + \lower #4 \bold { Très modéré } +} +a +d,^\markup { + \raise #4 \italic { Une forêt. } +} +a'4 a g2 a +@end lilypond + +@funindex \general-align +@funindex general-align +@funindex \translate +@funindex translate +@funindex \translate-scaled +@funindex translate-scaled + +Some commands can affect both the horizontal and vertical alignment of +text objects in markup mode. Any object affected by these commands +must be preceded with an anchor point: + +@lilypond[quote,verbatim,relative=1] +d2^\markup { + Acte I + \translate #'(-1 . 2) "Scène 1" +} +a' +g_\markup { + \null + \general-align #Y #3.2 \bold "Très modéré" +} +a +d,^\markup { + \null + \translate-scaled #'(-1 . 2) \teeny "Une forêt." +} +a'4 a g2 a +@end lilypond + +@cindex multi-line markup +@cindex markup, multi-line +@cindex multi-line text +@cindex text, multi-line +@cindex text in columns +@cindex columns, text + +@funindex \column +@funindex column +@funindex \center-column +@funindex center-column + +A markup object may include several lines of text. In the following +example, each element or expression is placed on its own line, either +left-aligned or centered: + +@lilypond[quote,verbatim] +\markup { + \column { + a + "b c" + \line { d e f } + } + \hspace #10 + \center-column { + a + "b c" + \line { d e f } + } +} +@end lilypond + +@cindex centering text on the page +@cindex text, centering on the page +@cindex markup, centering on the page + +@funindex \fill-line +@funindex fill-line + +Similarly, a list of elements or expressions may be spread to fill the +entire horizontal line width (if there is only one element, it will be +centered on the page). These expressions can, in turn, include +multi-line text or any other markup expression: + +@lilypond[quote,verbatim] +\markup { + \fill-line { + \line { William S. Gilbert } + \center-column { + \huge \smallCaps "The Mikado" + or + \smallCaps "The Town of Titipu" + } + \line { Sir Arthur Sullivan } + } +} +\markup { + \fill-line { 1885 } +} +@end lilypond + +@cindex wordwrapped text +@cindex justified text +@cindex text, justified +@cindex text, wordwrapped +@cindex markup text, wordwrapped +@cindex markup text, justified + +@funindex \wordwrap +@funindex wordwrap +@funindex \justify +@funindex justify + +Long text indications can also be automatically wrapped accordingly to +the given line width. These will be either left-aligned or justified, +as shown in the following example. + +@lilypond[quote,verbatim] +\markup { + \column { + \line \smallCaps { La vida breve } + \line \bold { Acto I } + \wordwrap \italic { + (La escena representa el corral de una casa de + gitanos en el Albaicín de Granada. Al fondo una + puerta por la que se ve el negro interior de + una Fragua, iluminado por los rojos resplandores + del fuego.) + } + \hspace #0 + + \line \bold { Acto II } + \override #'(line-width . 50) + \justify \italic { + (Calle de Granada. Fachada de la casa de Carmela + y su hermano Manuel con grandes ventanas abiertas + a través de las que se ve el patio + donde se celebra una alegre fiesta) + } + } +} +@end lilypond + +@cindex text alignment commands +@cindex markup text alignment commands +@cindex alignment, text, commands + +An exhaustive list of text alignment commands can be found in +@ref{Align}. + + +@seealso +Learning Manual: +@rlearning{Moving objects}. + +Notation Reference: +@ref{Align}, +@ref{Text marks}. + +Snippets: +@rlsr{Text}. + +Internals Reference: @rinternals{TextScript}. + +Installed files: +@file{scm/@/define@/-markup@/-commands@/.scm}. + + +@node Graphic notation inside markup +@unnumberedsubsubsec Graphic notation inside markup + +@cindex graphics, embedding +@cindex drawing graphic objects +@cindex graphic objects, drawing +@cindex embedding graphic objects +@cindex graphic objects, embedding + +Various graphic objects may be added to a score, using markup +commands. + +@cindex decorating text +@cindex framing text +@cindex text, framing +@cindex text, decorating +@cindex markup text, decorating +@cindex markup text, framing + +@funindex \box +@funindex box +@funindex \circle +@funindex circle +@funindex \rounded-box +@funindex rounded-box +@funindex \bracket +@funindex bracket +@funindex \hbracket +@funindex hbracket + +Some markup commands allow decoration of text elements with graphics, +as demonstrated in the following example. + +@lilypond[quote,verbatim] +\markup \fill-line { + \center-column { + \circle Jack + \box "in the box" + \null + \line { + Erik Satie + \hspace #3 + \bracket "1866 - 1925" + } + \null + \rounded-box \bold Prelude + } +} +@end lilypond + +@cindex padding around text +@cindex text padding +@cindex markup text padding + +@funindex \pad-markup +@funindex pad-markup +@funindex \pad-x +@funindex pad-x +@funindex \pad-to-box +@funindex pad-to-box +@funindex \pad-around +@funindex pad-around + +Some commands may require an increase in the padding around the text; +this is achieved with some markup commands exhaustively described in +@ref{Align}. + +@lilypond[quote,verbatim] +\markup \fill-line { + \center-column { + \box "Charles Ives (1874 - 1954)" + \null + \box \pad-markup #2 "THE UNANSWERED QUESTION" + \box \pad-x #8 "A Cosmic Landscape" + \null + } +} +\markup \column { + \line { + \hspace #10 + \box \pad-to-box #'(-5 . 20) #'(0 . 5) + \bold "Largo to Presto" + } + \pad-around #3 + "String quartet keeps very even time, +Flute quartet keeps very uneven time." +} +@end lilypond + +@cindex graphic notation +@cindex symbols, non-musical +@cindex non-musical symbols +@cindex notation, graphic + +@funindex \combine +@funindex combine +@funindex \draw-circle +@funindex draw-circle +@funindex \filled-box +@funindex filled-box +@funindex \triangle +@funindex triangle +@funindex \draw-line +@funindex draw-line +@funindex \arrow-head +@funindex arrow-head + +Other graphic elements or symbols may be printed without requiring any +text. As with any markup expression, such objects can be combined. + +@lilypond[quote,verbatim] +\markup { + \combine + \draw-circle #4 #0.4 ##f + \filled-box #'(-4 . 4) #'(-0.5 . 0.5) #1 + \hspace #5 + + \center-column { + \triangle ##t + \combine + \draw-line #'(0 . 4) + \arrow-head #Y #DOWN ##f + } +} +@end lilypond + +@cindex embedded graphics +@cindex images, embedding +@cindex graphics, embedding +@cindex postscript + +@funindex \epsfile +@funindex epsfile +@funindex \postscript +@funindex postscript + +Advanced graphic features include the ability to include external +image files converted to the Encapsulated PostScript format +(@emph{eps}), or to directly embed graphics into the input file, using +native PostScript code. In such a case, it may be useful to +explicitely specify the size of the drawing, as demonstrated below: + +@lilypond[quote,verbatim,relative=1] +c1^\markup { + \combine + \epsfile #X #10 #"./context-example.eps" + \with-dimensions #'(0 . 6) #'(0 . 10) + \postscript #" + -2 3 translate + 2.7 2 scale + newpath + 2 -1 moveto + 4 -2 4 1 1 arct + 4 2 3 3 1 arct + 0 4 0 3 1 arct + 0 0 1 -1 1 arct + closepath + stroke" + } +c +@end lilypond + +An exhaustive list of graphics-specific commands can be found in +@ref{Graphic}. + + +@seealso +Notation Reference: +@ref{Graphic}, +@ref{Editorial annotations}. + +Snippets: +@rlsr{Text}. + +Internals Reference: @rinternals{TextScript}. + +Installed files: +@file{scm/@/define@/-markup@/-commands@/.scm}, +@file{scm/@/stencil@/.scm}. + + +@node Music notation inside markup +@unnumberedsubsubsec Music notation inside markup + +@cindex notation inside markup +@cindex music inside markup +@cindex markup, music notation inside + +Various musical notation elements may be added to a score, inside a +markup object. + +Notes and accidentals can be entered using markup commands: + +@lilypond[quote,verbatim,relative=2] +a2 a^\markup { + \note #"4" #1 + = + \note-by-number #1 #1 #1.5 +} +b1_\markup { + \natural \semiflat \flat + \sesquiflat \doubleflat +} +\glissando +a1_\markup { + \natural \semisharp \sharp + \sesquisharp \doublesharp +} +\glissando b +@end lilypond + +Other notation objects may also be printed +in markup mode: + +@lilypond[quote,verbatim,relative=1] +g1 bes +ees-\markup { + \finger 4 + \tied-lyric #"~" + \finger 1 +} +fis_\markup { \dynamic rf } +bes^\markup { + \beam #8 #0.1 #0.5 +} +cis +d-\markup { + \markalphabet #8 + \markletter #8 +} +@end lilypond + +More generally, any available musical symbol may be included +separately in a markup object, as demonstrated below; an exhaustive +list of these symbols and their names can be found in @ref{The Feta +font}. + +@lilypond[quote,verbatim,relative=2] +c2 +c'^\markup { \musicglyph #"eight" } +c,4 +c,8._\markup { \musicglyph #"clefs.G_change" } +c16 +c2^\markup { \musicglyph #"timesig.neomensural94" } +@end lilypond + +@noindent +Another way of printing non-text glyphs is described in @ref{Fonts +explained}. This is useful for printing braces of various sizes. + +The markup mode also supports diagrams for specific +instruments: + +@lilypond[quote,verbatim,relative=2] +c1^\markup { + \fret-diagram-terse #"x;x;o;2;3;2;" +} +c^\markup { + \harp-pedal #"^-v|--ov^" +} +c +c^\markup { + \combine + \musicglyph #"accordion.accDiscant" + \combine + \raise #0.5 \musicglyph #"accordion.accDot" + \raise #1.5 \musicglyph #"accordion.accDot" +} +@end lilypond + +@c The accordion diagram is actually taken from a snippet. + +@noindent +Such diagrams are documented in @ref{Instrument Specific Markup}. + +@cindex score inside markup +@cindex markup, score inside + +A whole score can even be nested inside a markup object. In such a +case, the nested @code{\score} block must contain a @code{\layout} +block, as demonstrated here: + +@lilypond[quote,verbatim,relative=1] +c4 d^\markup { + \score { + \relative c' { c4 d e f } + \layout { } + } +} +e f | +c d e f +@end lilypond + +An exhaustive list of music notation related commands can be found in +@ref{Music}. + + +@seealso +Notation Reference: +@ref{Music}, +@ref{The Feta font}, +@ref{Fonts explained}. + +Snippets: +@rlsr{Text}. + +Internals Reference: @rinternals{TextScript}. + +Installed files: +@file{scm/@/define@/-markup@/-commands@/.scm}, +@file{scm/@/fret@/-diagrams@/.scm}, +@file{scm/@/harp@/-pedals@/.scm}. + + +@node Multi-page markup +@unnumberedsubsubsec Multi-page markup + +@cindex multi-page markup +@cindex markup, multi-page +@cindex markup text, multi-page +@cindex text spread over multiple pages + +@funindex \markuplines +@funindex markuplines +@funindex \justified-lines +@funindex justified-lines +@funindex \wordwrap-lines +@funindex wordwrap-lines + +Although standard markup objects are not breakable, a specific syntax +makes it possible to enter lines of text that can spread over multiple +pages: + +@lilypond[quote,verbatim] +\markuplines { + \justified-lines { + A very long text of justified lines. + ... + } + \wordwrap-lines { + Another very long paragraph. + ... + } + ... +} +@end lilypond + +This syntax accepts a list of markups, that can be +@itemize +@item +the result of a markup list command, +@item +a list of markups, +@item +a list of markup lists. +@end itemize + +An exhaustive list of markup list commands can be found in +@ref{Text markup list commands}. + + +@seealso +Notation Reference: +@ref{Text markup list commands}, +@ref{New markup list command definition}. + +Snippets: +@rlsr{Text}. + +Internals Reference: @rinternals{TextScript}. + +Installed files: +@file{scm/@/define@/-markup@/-commands@/.scm}. + +@funindex \markuplines +@funindex markuplines + +@predefined +@code{\markuplines}. +@endpredefined + + +@node Fonts +@subsection Fonts + +This section presents the way fonts are handled, and how they may be +changed in scores. + +@menu +* Fonts explained:: +* Single entry fonts:: +* Entire document fonts:: +@end menu + +@node Fonts explained +@unnumberedsubsubsec Fonts explained + +@cindex Pango +@cindex fonts, explained +@cindex braces, various sizes +@cindex fonts, non-text in markup +@cindex non-text fonts in markup + +@funindex font-interface + +Fonts are handled through several libraries. FontConfig is used to +detect available fonts on the system; the selected fonts are rendered +using Pango. + +Music notation fonts can be described as a set of specific glyphs, +ordered in several families. The following syntax allows various +LilyPond @code{feta} non-text fonts to be used directly in markup +mode: + +@lilypond[quote,verbatim,relative=2] +a1^\markup { + \vcenter { + \override #'(font-encoding . fetaBraces) + \lookup #"brace120" + \override #'(font-encoding . fetaNumber) + \column { 1 3 } + \override #'(font-encoding . fetaDynamic) + sf + \override #'(font-encoding . fetaMusic) + \lookup #"noteheads.s0petrucci" + } +} +@end lilypond + +@noindent +However, all these glyphs except the braces of various sizes contained +in @code{fetaBraces} are available using the simpler syntax described +in @ref{Music notation inside markup}. + +When using the glyphs contained in @code{fetaBraces}, the size of the +brace is specified by the numerical part of the glyph name, in +arbitrary units. Any integer from @code{0} to @code{575} inclusive +may be specified, @code{0} giving the smallest brace. The optimum +value must be determined by trial and error. These glyphs are all +left braces; right braces may be obtained by rotation, see +@ref{Rotating objects}. + +Three families of text fonts are made available: the @emph{roman} +(serif) font, that defaults to New Century Schoolbook, the @emph{sans} +font and the monospaced @emph{typewriter} font -- these last two +families are determined by the Pango installation. + +Each family may include different shapes and series. The following +example demonstrates the ability to select alternate families, shapes, +series and sizes. The value supplied to @code{font-size} is the +required change from the default size. + +@lilypond[quote,verbatim,relative=2] +\override Score.RehearsalMark #'font-family = #'typewriter +\mark \markup "Ouverture" +\override Voice.TextScript #'font-shape = #'italic +\override Voice.TextScript #'font-series = #'bold +d2.^\markup "Allegro" +\override Voice.TextScript #'font-size = #-3 +c4^smaller +@end lilypond + +@noindent +A similar syntax may be used in markup mode; however in this case it +is preferable to use the simpler syntax explained in @ref{Selecting +font and font size}: + +@lilypond[quote,verbatim] +\markup { + \column { + \line { + \override #'(font-shape . italic) + \override #'(font-size . 4) + Idomeneo, + } + \line { + \override #'(font-family . typewriter) + { + \override #'(font-series . bold) + re + di + } + \override #'(font-family . sans) + Creta + } + } +} +@end lilypond + +Although it is easy to switch between preconfigured fonts, it is also +possible to use other fonts, as explained in the following sections: +@ref{Single entry fonts} and @ref{Entire document fonts}. + + +@seealso +Notation Reference: +@ref{The Feta font}, +@ref{Music notation inside markup}, +@ref{Selecting font and font size}, +@ref{Font}. + + +@node Single entry fonts +@unnumberedsubsubsec Single entry fonts + +Any font that is installed on the operating system and recognized by +FontConfig may be used in a score, using the following syntax: + +@lilypond[quote,verbatim,relative=2] +\override Staff.TimeSignature #'font-name = #"Charter" +\override Staff.TimeSignature #'font-size = #2 +\time 3/4 + +a1_\markup { + \override #'(font-name . "Vera Bold") + { Vera Bold } +} +@end lilypond + +@cindex fonts, finding available +@cindex finding available fonts +@cindex listing available fonts +@cindex available fonts, listing + +@funindex show-available-fonts + +The following command displays a list of all available fonts on the +operating system: + +@example +lilypond -dshow-available-fonts x +@end example + +@noindent +The last argument of the command can be anything, but has to be +present. + + +@seealso +Notation Reference: +@ref{Fonts explained}, +@ref{Entire document fonts}. + +Snippets: +@rlsr{Text}. + +Installed files: +@file{lily/@/font@/-config@/-scheme@/.cc}. + + +@node Entire document fonts +@unnumberedsubsubsec Entire document fonts + +It is possible to change the fonts to be used as the default fonts in +the @emph{roman}, @emph{sans} and @emph{typewriter} font families by +specifying them, in that order, as shown in the example below. For an +explanation of fonts, see @ref{Fonts explained}. + +@cindex font families, setting +@cindex fonts, changing for entire document + +@funindex make-pango-font-tree + +@lilypond[verbatim,quote] +\paper { + myStaffSize = #20 + #(define fonts + (make-pango-font-tree "Times New Roman" + "Nimbus Sans" + "Luxi Mono" + (/ myStaffSize 20))) +} + +\relative c'{ + c1-\markup { + roman, + \sans sans, + \typewriter typewriter. } +} +@end lilypond + +@c we don't do Helvetica / Courier, since GS incorrectly loads +@c Apple TTF fonts + + +@seealso +Notation Reference: +@ref{Fonts explained}, +@ref{Single entry fonts}, +@ref{Selecting font and font size}, +@ref{Font}. + diff --git a/Documentation/notation/unfretted-strings.itely b/Documentation/notation/unfretted-strings.itely new file mode 100644 index 0000000000..63c40b4393 --- /dev/null +++ b/Documentation/notation/unfretted-strings.itely @@ -0,0 +1,212 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + +@node Unfretted string instruments +@section Unfretted string instruments + +@lilypondfile[quote] +{unfretted-headword.ly} + +@cindex orchestral strings +@cindex strings, orchestral +@cindex strings, writing for + +This section provides information and references which are helpful +when writing for unfretted string instruments, principally +orchestral strings. + +@menu +* Common notation for unfretted strings:: +@end menu + +@node Common notation for unfretted strings +@subsection Common notation for unfretted strings + +There is little specialist notation for unfretted string +instruments. The music is notated on a single staff, and +usually only a single voice is required. Two voices might +be required for some double-stopped or divisi passages. + +@menu +* References for unfretted strings:: +* Bowing indications:: +* Harmonics:: +* Snap (Bartok) pizzicato:: +@end menu + +@node References for unfretted strings +@unnumberedsubsubsec References for unfretted strings + +Most of the notation which is useful for orchestral strings +and other bowed instruments is covered elsewhere: + +@itemize + +@item Textual indications such as @qq{pizz.} and @qq{arco} are +added as simple text -- see @ref{Text scripts}. + +@item Fingerings, including the thumb indication, are described +in @ref{Fingering instructions}. + +@item Double stopping is normally indicated by writing a chord, +see @ref{Chorded notes}. Directives for playing chords may be +added, see @ref{Arpeggio}. + +@item A template for a string quartet can be found in +@rlearning{String quartet}. Others are shown in the snippets. + +@end itemize + + +@seealso +Learning Manual: +@rlearning{String quartet}. + +Notation Reference: +@ref{Text scripts}, +@ref{Fingering instructions}, +@ref{Chorded notes}, +@ref{Arpeggio}. + +Snippets: +@rlsr{Unfretted strings}. + + +@node Bowing indications +@unnumberedsubsubsec Bowing indications + +@funindex \upbow +@funindex \downbow +@funindex \open + +@cindex bowing indications +@cindex up bow indication +@cindex down bow indication +@cindex open string indication +@cindex string, indicating open + +Bowing indications are created as articulations, which are +described in @ref{Articulations and ornamentations}. + +The bowing commands, @code{\upbow} and @code{\downbow}, are used +with slurs as follows: + +@lilypond[verbatim,quote,relative=2] +c4(\downbow d) e(\upbow f) +@end lilypond + +@noindent +and the following example shows three ways in which an open A +string on a violin might be indicated: + +@lilypond[verbatim,quote,relative=2] +a4 \open +a^\markup { \teeny "II" } +a2^\markup { \small "sul A" } +@end lilypond + + +@predefined +@code{\downbow}, +@code{\upbow}, +@code{\open}. +@endpredefined + + +@seealso +Notation Reference: +@ref{Articulations and ornamentations}, +@ref{Slurs}. + + +@node Harmonics +@unnumberedsubsubsec Harmonics + +@funindex \harmonic + +@strong{@i{Natural harmonics}} + +@cindex note heads, diamond-shaped +@cindex diamond-shaped note heads +@cindex natural harmonics +@cindex harmonics, natural +@funindex \harmonicsOn +@funindex \harmonicsOff + +Natural harmonics can be notated in several ways. A diamond-shaped +note head generally means to touch the string where you would stop +the note if it were not a diamond. + +@lilypond[verbatim,quote,relative=2] +d4 e4. +\harmonicsOn +d8 e e +d4 e4. +\harmonicsOff +d8 e e +@end lilypond + +Alternatively a normal note head is shown at the pitch to be +sounded together with a small circle to indicate it should be +played as a harmonic: + +@lilypond[verbatim,quote,relative=2] +d2^\flageolet d_\flageolet +@end lilypond + +A smaller circle may be created, see the snippet list in +@ref{References for unfretted strings}. + +@strong{@i{Artificial harmonics}} + +@cindex artificial harmonics +@cindex harmonics, artifical + +Artificial harmonics are notated with two notes, one with a normal +note head indicating the stopped position and one with an open +diamond note head to indicate the harmonic position. + +@c TODO If the default for harmonicDots is changed, change this +Artificial harmonics indicated with @code{\harmonic} do not show the +dots. The context property @code{harmonicDots} should be set if +dots are required. + +@lilypond[verbatim,quote,relative=1] +2. 4 +\set harmonicDots = ##t +2. 4 +@end lilypond + +@warning{@code{@bs{}harmonic} @strong{must} be placed inside a +chord construct even if there is only a single note. Normally +@code{@bs{}harmonicsOn} would be used in this situation.} + + +@seealso +Music Glossary: +@rglos{harmonics}. + +Notation Reference: +@ref{Special note heads}, +@ref{References for unfretted strings}. + + +@node Snap (Bartok) pizzicato +@unnumberedsubsubsec Snap (Bartók) pizzicato + +@cindex pizzicato, Bartók +@cindex pizzicato, snap +@cindex Bartók pizzicato +@cindex snap pizzicato + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{snap-pizzicato-markup-bartok-pizzicato.ly} diff --git a/Documentation/notation/vocal.itely b/Documentation/notation/vocal.itely new file mode 100644 index 0000000000..3736331f83 --- /dev/null +++ b/Documentation/notation/vocal.itely @@ -0,0 +1,1343 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + +@node Vocal music +@section Vocal music + +@c TODO: inspirational headword + +This section explains how to typeset vocal music, and make sure +that the lyrics will be aligned with the notes of their melody. + +@menu +* Common notation for vocal music:: +* Entering lyrics:: +* Aligning lyrics to a melody:: +* Specific uses of lyrics:: +* Stanzas:: +@end menu + + +@node Common notation for vocal music +@subsection Common notation for vocal music + +This section discusses issues related to vocal music in general, and +to some particular styles of vocal music. + +@menu +* References for vocal music and lyrics:: +* Opera:: +* Song books:: +* Spoken music:: +* Chants:: +* Ancient vocal music:: +@end menu + + +@node References for vocal music and lyrics +@unnumberedsubsubsec References for vocal music and lyrics + +@c TODO: split this section in two parts? -vv + +Various issues may arise when engraving vocal music. Some of these +are discussed in this section, while others are explained elsewhere: + +@itemize +@item +Most styles of vocal music use written text as lyrics. An introduction +to this notation is to be found in @rlearning{Setting simple songs}. + +@item +Vocal music is likely to require the use of @code{markup} mode, either +for lyrics of for other text elements (character's names, etc.). +This syntax is described in @ref{Text markup introduction}. + +@item +Lead sheets may be printed by combining vocal parts and @q{chord mode}; +this syntax is explained in @ref{Chord notation}. + +@item +@q{Ambitus} may be added at the beginning of vocal staves, as explained +in @ref{Ambitus}. + +@item +Vocal parts may be printed using traditional clefs, as shown in @ref{Clef}. + +@item +Ancient vocal music is supported, as explained in @ref{Ancient notation}. +@end itemize + + +@node Opera +@unnumberedsubsubsec Opera + +@c TODO +TBC + +@c add characters names snippet -vv + +@node Song books +@unnumberedsubsubsec Song books + +@c TODO +TBC + +@snippets +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{simple-lead-sheet.ly} + + +@seealso +Notation Reference: +@ref{Chord notation}. + + +@node Spoken music +@unnumberedsubsubsec Spoken music +@cindex parlato +@cindex Sprechgesang +Such effects as @q{parlato} or @q{Sprechgesang} require perfomers to speak +without pitch but still with rhythm; these are notated by cross +note heads, as demonstrated in @ref{Special note heads}. + +@c TODO add "marking-notes-on-spoken-parts" snippet -vv +@c add "showing the rhythm of a melody" snip +@c add "one staff-line notation" +@c add "improvisation" ref +@c add "lyrics independents of notes" ref + +@node Chants +@unnumberedsubsubsec Chants + +@c TODO Add text from lsr and -user +TBC + +@node Ancient vocal music +@unnumberedsubsubsec Ancient vocal music + +@c TODO +TBC + +@c Add "Printing both the ancient and the modern clef in vocal music" snippet, +@c and "Transcription of Ancient music with incipit" snippet. -vv + + +@seealso +Notation Reference: +@ref{Ancient notation}. + + +@node Entering lyrics +@subsection Entering lyrics + +@c TODO add one sentence here. -vv + +@menu +* Lyrics explained:: +* Setting simple songs:: +* Working with lyrics and variables:: +@end menu + + +@node Lyrics explained +@unnumberedsubsubsec Lyrics explained + +@cindex lyrics +@funindex \lyricmode +@cindex punctuation +@cindex spaces, in lyrics +@cindex quotes, in lyrics + +@c FIXME: this section is to be rewritten. +Since LilyPond input files are text, there is at least one +issue to consider when working with vocal music: +song texts must be interpreted as text, not notes. For example, the +input@tie{}@code{d} should be interpreted as a one letter syllable, +not the note@tie{}D. +Therefore, a special lyric mode has to be used, either explicitly +or using some abbreviated methods. + +Lyrics are entered in a special input mode, which can be introduced +by the keyword @code{\lyricmode}, or by using @code{\addlyrics} or +@code{\lyricsto}. In this mode you can enter lyrics, +with punctuation and accents, and the input @code{d} is not parsed as +a pitch, but rather as a one letter syllable. Syllables are entered +like notes, but with pitches replaced by text. For example, + +@example +\lyricmode @{ Twin-4 kle4 twin- kle litt- le star2 @} +@end example + +There are two main methods to specify the horizontal placement +of the syllables, either by specifying the duration of each syllable +explicitly, like in the example above, or by automatically aligning +the lyrics to a melody or other voice of music, using @code{\addlyrics} +or @code{\lyricsto}. +@c TODO: broken +@c For more details see @ref{The Lyrics context}. + +A word or syllable of lyrics begins with an alphabetic character, and ends +with +any space or digit. The following characters can be any character +that is not a digit or white space. + +Any character that is not a digit or white space will be regarded as +part of the syllable; one important consequence of this is that a word +can end with @code{@}}, which often leads to the following mistake: + +@example +\lyricmode @{ lah- lah@} +@end example + +In this example, the @code{@}} is included in the final syllable, so the +opening brace is not balanced and the input file will probably not +compile. + + +@funindex \property in \lyricmode + +@noindent +Similarly, a period which follows an alphabetic sequence is included in +the resulting string. As a consequence, spaces must be inserted around +property commands: do @emph{not} write + +@example +\override Score.LyricText #'font-shape = #'italic +@end example + +@noindent +but instead use + +@example +\override Score . LyricText #'font-shape = #'italic +@end example + +@funindex _ +@cindex spaces, in lyrics +@cindex quotes, in lyrics +@cindex ties, in lyrics + +In order to assign more than one syllable to a single note, you can +surround them with quotes or use a @code{_} character, to get spaces +between syllables, or use tilde symbol (@code{~}) to get a lyric tie. + +@lilypond[quote,ragged-right,fragment,verbatim] +\time 3/4 +\relative c' { c2 e4 g2 e4 } +\addlyrics { gran- de_a- mi- go } +\addlyrics { pu- "ro y ho-" nes- to } +\addlyrics { pu- ro~y~ho- nes- to } +@end lilypond + +@noindent +The lyric tie is implemented with the Unicode character +@code{U+203F}; therefore a font that includes this glyph +(such as DejaVuLGC) has to be used. More explanations about +text and non-text fonts can be found in @ref{Fonts}. + + +To enter lyrics with characters from non-English languages, or with +accented and special characters (such as the heart symbol or slanted quotes), +simply insert the characters directly into the input file and save +it with UTF-8 encoding. See @ref{Text encoding}, for more info. + +@lilypond[quote,ragged-right,fragment,verbatim] +\relative c' { e4 f e d e f e2 } +\addlyrics { He said: “Let my peo ple go”. } +@end lilypond + +To use normal quotes in lyrics, add a backslash before the +quotes. For example, + +@lilypond[quote,ragged-right,fragment,verbatim] +\relative c' { \time 3/4 e4 e4. e8 d4 e d c2. } +\addlyrics { "\"I" am so lone- "ly\"" said she } +@end lilypond + +The full definition of a word start in Lyrics mode is somewhat more +complex. + +A word in Lyrics mode begins with: an alphabetic character, @code{_}, +@code{?}, @code{!}, @code{:}, @code{'}, the control characters @code{^A} +through @code{^F}, @code{^Q} through @code{^W}, @code{^Y}, @code{^^}, +any 8-bit character with ASCII code over 127, or a two-character +combination of a backslash followed by one of @code{`}, @code{'}, +@code{"}, or @code{^}. + +@c " to balance double quotes for not-so-bright context-sensitive editors + +To define variables containing lyrics, the function @code{lyricmode} +must be used. + +@example +verseOne = \lyricmode @{ Joy to the world the Lord is come @} +\score @{ + << + \new Voice = "one" \relative c'' @{ + \autoBeamOff + \time 2/4 + c4 b8. a16 g4. f8 e4 d c2 + @} + \addlyrics @{ \verseOne @} + >> +@} +@end example + + +@seealso +Notation Reference: +@ref{Fonts}. + +Internals Reference: +@rinternals{LyricText}, +@rinternals{LyricSpace}. + + +@c FIXME: this title has to be changed (possible confusion with LM) -vv +@node Setting simple songs +@unnumberedsubsubsec Setting simple songs + +@cindex \addlyrics + +The easiest way to add lyrics to a melody is to append + +@example +\addlyrics @{ @var{the lyrics} @} +@end example + +@noindent +to a melody. Here is an example, + +@lilypond[ragged-right,verbatim,fragment,quote] +\time 3/4 +\relative c' { c2 e4 g2. } +\addlyrics { play the game } +@end lilypond + +More stanzas can be added by adding more +@code{\addlyrics} sections + +@lilypond[ragged-right,verbatim,fragment,quote] +\time 3/4 +\relative c' { c2 e4 g2. } +\addlyrics { play the game } +\addlyrics { speel het spel } +\addlyrics { joue le jeu } +@end lilypond + +The command @code{\addlyrics} cannot handle polyphony settings. For these +cases you should use @code{\lyricsto} and @code{\lyricmode}, as will be +introduced in @ref{Lyrics explained}. + +@c TODO: one additional section may be needed here, +@c such as "advanced lyric syntax" or whatever -vv + +@node Working with lyrics and variables +@unnumberedsubsubsec Working with lyrics and variables + +@cindex lyrics, variables + +To define variables containing lyrics, the function @code{\lyricmode} +must be used. You do not have to enter durations though, if you add +@code{\addlyrics} or @code{\lyricsto} +when invoking your variable. + +@example +verseOne = \lyricmode @{ Joy to the world the Lord is come @} +\score @{ + << + \new Voice = "one" \relative c'' @{ + \autoBeamOff + \time 2/4 + c4 b8. a16 g4. f8 e4 d c2 + @} + \addlyrics @{ \verseOne @} + >> +@} +@end example + +For different or more complex orderings, the best way is to setup the +hierarchy of staves and lyrics first, e.g., +@example +\new ChoirStaff << + \new Voice = "soprano" @{ @emph{music} @} + \new Lyrics = "sopranoLyrics" @{ s1 @} + \new Lyrics = "tenorLyrics" @{ s1 @} + \new Voice = "tenor" @{ @emph{music} @} +>> +@end example + +and then combine the appropriate melodies and lyric lines + +@example +\context Lyrics = sopranoLyrics \lyricsto "soprano" +@emph{the lyrics} +@end example + +@noindent + +The final input would resemble + +@example +<<\new ChoirStaff << @emph{setup the music} >> + \lyricsto "soprano" @emph{etc} + \lyricsto "alto" @emph{etc} +@emph{etc} +>> +@end example + +@ignore +@c FIXME +http://code.google.com/p/lilypond/issues/detail?id=329 +The problem cannot be reproduced. +The following has no sense, because the issue seems to be fixed. +A comment is in tracker waiting for response ---FV + + +Be careful when defining a variable with lyrics that creates a new +context, for example, using the deprecated @code{\lyrics} command. See +the next erroneous example: + +@example +words = \lyrics{ %warning: this creates a new context + one two +} +<< + \new Voice = "sop" { c1 } + \new Lyrics \lyricsto "sop" { \words } + \new Voice = "alt" { c2 c } + \new Lyrics \lyricsto "alt" { \words } +>> +@end example + +the problem is that \lyricsto will try to connect the "sop" melody with the context +created by "\new Lyrics". + +Then \lyrics in \words creates another context, and the original "\new Lyrics" one +remains empty. + +@end ignore + + +@seealso +@c TODO: document \new Staff << Voice \lyricsto >> bug +Internals Reference: +@rinternals{LyricCombineMusic}, +@rinternals{Lyrics}. + + +@node Aligning lyrics to a melody +@subsection Aligning lyrics to a melody + +@funindex \lyricmode +@funindex \addlyrics +@funindex \lyricsto + +@c FIXME: this stuff is to be rewritten. -vv + +Aligning of text with melodies can be made automatically, but if you +specify the durations of the syllables it can also be made manually. +Lyrics aligning and typesetting are prepared with the help of skips, +hyphens and extender lines. + +Lyrics are printed by interpreting them in the context called +@rinternals{Lyrics}. + +@example +\new Lyrics \lyricmode @dots{} +@end example + +There are two main methods to specify the horizontal placement +of the syllables: + +@itemize +@item +by automatically aligning +the lyrics to a melody or other voice of music, using @code{\addlyrics} +or @code{\lyricsto}. + +@item +or by specifying the duration of each syllable +explicitly, using @code{\lyricmode} +@end itemize + +The @code{Voice} context containing the melody to which the lyrics +are being aligned must not have @qq{died}, or the lyrics after that +point will be lost. This can happen if there are periods when that +voice has nothing to do. For methods of keeping contexts alive, see +@ref{Keeping contexts alive}. + + +@menu +* Automatic syllable durations:: +* Manual syllable durations:: +* Multiple syllables to one note:: +* Multiple notes to one syllable:: +* Skipping notes:: +* Extenders and hyphens:: +* Lyrics and repeats:: +@end menu + +@node Automatic syllable durations +@unnumberedsubsubsec Automatic syllable durations + +@cindex automatic syllable durations +@cindex lyrics and melodies + +The lyrics can be aligned under a given melody +automatically. This is achieved by combining the +melody and the lyrics with the @code{\lyricsto} expression + +@example +\new Lyrics \lyricsto @var{name} @dots{} +@end example + +This aligns the lyrics to the +notes of the @rinternals{Voice} context called @var{name}, which must +already exist. Therefore normally the @code{Voice} is specified first, and +then the lyrics are specified with @code{\lyricsto}. The command +@code{\lyricsto} switches to @code{\lyricmode} mode automatically, so the +@code{\lyricmode} keyword may be omitted. + +The following example uses different commands for entering lyrics. + +@lilypond[quote,fragment,ragged-right,verbatim] +<< + \new Voice = "one" \relative c'' { + \autoBeamOff + \time 2/4 + c4 b8. a16 g4. f8 e4 d c2 + } + +% not recommended: left aligns syllables + \new Lyrics \lyricmode { Joy4 to8. the16 world!4. the8 Lord4 is come.2 } + +% wrong: durations needed + \new Lyrics \lyricmode { Joy to the earth! the Sa -- viour reigns. } + +%correct + \new Lyrics \lyricsto "one" { No more let sins and sor -- rows grow. } +>> +@end lilypond + +The second stanza is not properly aligned because the durations +were not specified. A solution for that would be to use @code{\lyricsto}. + +The @code{\addlyrics} command is actually just a convenient way +to write a more complicated LilyPond structure that sets up the +lyrics. + +@example +@{ MUSIC @} +\addlyrics @{ LYRICS @} +@end example + +@noindent +is the same as + +@example +\new Voice = "blah" @{ music @} +\new Lyrics \lyricsto "blah" @{ LYRICS @} +@end example + +@node Manual syllable durations +@unnumberedsubsubsec Manual syllable durations + +Lyrics can also be entered without @code{\addlyrics} or +@code{\lyricsto}. In this case, +syllables are entered like notes -- but with pitches replaced by text -- and the +duration of each syllable must be entered explicitly. For example: + +@example +play2 the4 game2. +sink2 or4 swim2. +@end example + +The alignment to a melody can be specified with the +@code{associatedVoice} property, + +@example +\set associatedVoice = #"lala" +@end example + +@noindent +The value of the property (here: @code{"lala"}) should be the name of +a @rinternals{Voice} context. Without this setting, extender lines +will not be formatted properly. + +Here is an example demonstrating manual lyric durations, + +@lilypond[relative=1,ragged-right,verbatim,fragment,quote] +<< \new Voice = "melody" { + \time 3/4 + c2 e4 g2. + } + \new Lyrics \lyricmode { + \set associatedVoice = #"melody" + play2 the4 game2. + } >> +@end lilypond + + +@seealso +Notation Reference: +@ref{Keeping contexts alive}. + +Internals Reference: +@rinternals{Lyrics}. + + +@node Multiple syllables to one note +@unnumberedsubsubsec Multiple syllables to one note + + +@funindex _ +@cindex ties, in lyrics + +In order to assign more than one syllable to a single note, you can +surround them with quotes or use a @code{_} character, to get spaces +between syllables, or use tilde symbol (@code{~}) to get a lyric +tie@footnote{The lyric ties is implemented with the Unicode character +U+203F, so be +sure to have a font (Like DejaVuLGC) installed that includes this +glyph.}. + +@lilypond[quote,ragged-right,fragment,verbatim] +\time 3/4 +\relative c' { c2 e4 g2 e4 } +\addlyrics { gran- de_a- mi- go } +\addlyrics { pu- "ro y ho-" nes- to } +\addlyrics { pu- ro~y~ho- nes- to } +@end lilypond + + +@seealso +Internals Reference: +@rinternals{LyricCombineMusic}. + +@c Here come the section which used to be "Melismata" +@c the new title might be more self-explanatory + + +@node Multiple notes to one syllable +@unnumberedsubsubsec Multiple notes to one syllable + +@cindex melisma +@cindex melismata +@cindex phrasing, in lyrics + +Sometimes, particularly in Medieval music, several notes are to be sung on one +single syllable; such vocalises are called melismas, or melismata. + +@c this method seems to be the simplest; therefore +@c it might be better to present it first - vv + +You can define melismata entirely in the lyrics, by entering @code{_} +for every extra note that has to be added to the melisma. + +@c FIXME: clarify: __ is used to crate a lyric extender, +@c _ is used to add a note to a melisma, so both __ and _ are needed. + +@c verbose! --FV +@c duplicated: TODO fix +Additionaly, you can make an extender line to be typeset to indicate +the melisma in the score, writing a double underscore next to the +first syllable of the melisma. This example shows the three elements +that are used for this purpose (all of them surrounded by spaces): +double hyphens to separate syllables in a word, underscores to add +notes to a melisma, and a double underscore to put an extender line. + +@c wrong: extender line only on last syllable of a word. Change example +@lilypond[relative=1,verbatim,fragment,quote] +{ \set melismaBusyProperties = #'() + c d( e) f f( e) e e } +\addlyrics + { Ky -- _ _ ri __ _ _ _ e } +@end lilypond + +In this case, you can also have ties and slurs in the melody if you +set @code{melismaBusyProperties}, as is done in the example above. + +However, the @code{\lyricsto} command can also +detect melismata automatically: it only puts one +syllable under a tied or slurred group of notes. If you want to force +an unslurred group of notes to be a melisma, insert @code{\melisma} +after the first note of the group, and @code{\melismaEnd} after the +last one, e.g., + +@lilypond[quote,relative=2,ragged-right,fragment,verbatim] +<< + \new Voice = "lala" { + \time 3/4 + f4 g8 + \melisma + f e f + \melismaEnd + e2 + } + \new Lyrics \lyricsto "lala" { + la di __ daah + } +>> +@end lilypond + +In addition, notes are considered a melisma if they are manually +beamed, and automatic beaming (see @ref{Setting automatic beam +behavior}) is switched off. + +@c FIXME: this now links to LM -vv + +@cindex SATB +@cindex choral score + +A complete example of a SATB score setup is in section +@rlearning{Vocal ensembles}. + + +@predefined +@funindex \melisma +@code{\melisma}, +@funindex \melismaEnd +@code{\melismaEnd}. +@endpredefined + + +@seealso +@c @lsr{vocal,lyric@/-combine.ly}. + + +@knownissues + +Melismata are not detected automatically, and extender lines must be +inserted by hand. + +@node Skipping notes +@unnumberedsubsubsec Skipping notes + +Making a lyric line run slower than the melody can be achieved by +inserting @code{\skip}s into the lyrics. For every @code{\skip}, +the text will be delayed another note. The @code{\skip} command +must be followed by a valid duration, but this is ignored when +@code{\skip} is used in lyrics. + +For example, + +@lilypond[verbatim,ragged-right,quote] +\relative c' { c c g' } +\addlyrics { + twin -- \skip 4 + kle +} +@end lilypond + + +@node Extenders and hyphens +@unnumberedsubsubsec Extenders and hyphens + +@cindex melisma +@cindex extender + +@c leave this as samp. -gp +In the last syllable of a word, melismata are sometimes indicated with +a long horizontal line starting in the melisma syllable, and ending in +the next one. Such a line is called an extender line, and it is +entered as @samp{ __ } (note the spaces before and after the two +underscore characters). + +@warning{Melismata are indicated in the score with extender lines, +which are entered as one double underscore; but short melismata can +also be entered by skipping individual notes, which are entered as +single underscore characters; these do not make an extender line to be +typeset by default.} + +@cindex hyphens + +@c leave this as samp. -gp +Centered hyphens are entered as @samp{ -- } between syllables of a same word +(note the spaces before and after the two hyphen characters). The hyphen +will be centered between the syllables, and its length will be adjusted +depending on the space between the syllables. + +In tightly engraved music, hyphens can be removed. Whether this +happens can be controlled with the @code{minimum-distance} (minimum +distance between two syllables) and the @code{minimum-length} +(threshold below which hyphens are removed). + + +@seealso +Internals Reference: +@rinternals{LyricExtender}, +@rinternals{LyricHyphen} + + +@node Lyrics and repeats +@unnumberedsubsubsec Lyrics and repeats + +@c TODO New section. Add text +TBC + + +@node Specific uses of lyrics +@subsection Specific uses of lyrics + +@c FIXME This whole section is to be reorganized. -vv + +Often, different stanzas of one song are put to one melody in slightly +differing ways. Such variations can still be captured with +@code{\lyricsto}. + +@menu +* Divisi lyrics:: +* Lyrics independent of notes:: +* Spacing out syllables:: +* Centering lyrics between staves:: +@end menu + + + +@node Divisi lyrics +@unnumberedsubsubsec Divisi lyrics + +You can display alternate (or divisi) lyrics by naming voice +contexts and attaching lyrics to those specific contexts. + +@lilypond[verbatim,ragged-right,quote] +\score{ << + \new Voice = "melody" { + \relative c' { + c4 + << + { \voiceOne c8 e } + \new Voice = "splitpart" { \voiceTwo c4 } + >> + \oneVoice c4 c | c + } + } + \new Lyrics \lyricsto "melody" { we shall not o- ver- come } + \new Lyrics \lyricsto "splitpart" { will } +>> } +@end lilypond + + +You can use this trick to display different lyrics for a repeated +section. + +@lilypond[verbatim,ragged-right,quote] +\score{ << + \new Voice = "melody" \relative c' { + c2 e | g e | c1 | + \new Voice = "verse" \repeat volta 2 {c4 d e f | g1 | } + a2 b | c1} + \new Lyrics = "mainlyrics" \lyricsto melody \lyricmode { + do mi sol mi do + la si do } + \context Lyrics = "mainlyrics" \lyricsto verse \lyricmode { + do re mi fa sol } + \new Lyrics = "repeatlyrics" \lyricsto verse \lyricmode { + dodo rere mimi fafa solsol } +>> +} +@end lilypond + + + +@node Lyrics independent of notes +@unnumberedsubsubsec Lyrics independent of notes + +@cindex Devnull context + +In some complex vocal music, it may be desirable to place +lyrics completely independently of notes. Music defined +inside @code{lyricrhythm} disappears into the +@code{Devnull} context, but the rhythms can still be used +to place the lyrics. + +@lilypond[quote,verbatim,ragged-right] +voice = { + c''2 + \tag #'music { c''2 } + \tag #'lyricrhythm { c''4. c''8 } + d''1 +} + +lyr = \lyricmode { I like my cat! } + +<< + \new Staff \keepWithTag #'music \voice + \new Devnull="nowhere" \keepWithTag #'lyricrhythm \voice + \new Lyrics \lyricsto "nowhere" \lyr + \new Staff { c'8 c' c' c' c' c' c' c' + c' c' c' c' c' c' c' c' } +>> +@end lilypond + +This method is recommended only if the music in the @code{Devnull} +context does not contain melismata. Melismata are defined by the +@code{Voice} context. Connecting lyrics to a @code{Devnull} context +makes the voice/lyrics links to get lost, and so does the info on +melismata. Therefore, if you link lyrics to a @code{Devnull} context, +the implicit melismata get ignored. + +@c Conclusion: do not use devnull for lyrics -FV + +@c this clarifies http://code.google.com/p/lilypond/issues/detail?id=248 + +@node Spacing out syllables +@unnumberedsubsubsec Spacing out syllables + +@cindex Spacing lyrics +@cindex Lyrics, increasing space between + +To increase the spacing between lyrics, set the minimum-distance property of +LyricSpace. + +@lilypond[relative,verbatim,fragment,quote,ragged-right] +{ + c c c c + \override Lyrics.LyricSpace #'minimum-distance = #1.0 + c c c c +} +\addlyrics { + longtext longtext longtext longtext + longtext longtext longtext longtext +} +@end lilypond + +To make this change for all lyrics in the score, set the property in the +layout. + +@lilypond[verbatim,quote,ragged-right] +\score { + \relative c' { + c c c c + c c c c + } + \addlyrics { + longtext longtext longtext longtext + longtext longtext longtext longtext + } + \layout { + \context { + \Lyrics + \override LyricSpace #'minimum-distance = #1.0 + } + } +} +@end lilypond + +@c @snippets +@c This snippet has been renamed to "lyrics-alignment.ly" +@c update as soon as lsr/is updated -vv +@c @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +@c {lyrics-alignment.ly} + +@c TODO: move to LSR -vv +@snippets + +Checking to make sure that text scripts and lyrics are within the margins is +a relatively large computational task. To speed up processing, LilyPond does +not perform such calculations by default; to enable it, use + +@example +\override Score.PaperColumn #'keep-inside-line = ##t +@end example + +To make lyrics avoid bar lines as well, use + +@example +\layout @{ + \context @{ + \Lyrics + \consists "Bar_engraver" + \consists "Separating_line_group_engraver" + \override BarLine #'transparent = ##t + @} +@} +@end example + +@c TODO Create and add lsr example of lyricMelismaAlignment +@c It's used like this to center-align all lyric syllables, +@c even when notes are tied. -td + +@ignore +\layout +{ + \context { \Score lyricMelismaAlignment = #0 } +} +@end ignore + + +@node Centering lyrics between staves +@unnumberedsubsubsec Centering lyrics between staves + +@c TODO Add text from -user +TBC + +@node Stanzas +@subsection Stanzas + +@menu +* Adding stanza numbers:: +* Adding dynamics marks to stanzas:: +* Adding singers' names to stanzas:: +* Stanzas with different rhythms:: +* Printing stanzas at the end:: +* Printing stanzas at the end in multiple columns:: +@end menu + + +@node Adding stanza numbers +@unnumberedsubsubsec Adding stanza numbers + +@cindex stanza number + +Stanza numbers can be added by setting @code{stanza}, e.g., + +@lilypond[quote,ragged-right,verbatim,relative=2,fragment] +\new Voice { + \time 3/4 g2 e4 a2 f4 g2. +} \addlyrics { + \set stanza = #"1. " + Hi, my name is Bert. +} \addlyrics { + \set stanza = #"2. " + Oh, ché -- ri, je t'aime +} +@end lilypond + + +@noindent +These numbers are put just before the start of the first syllable. + +@c TODO Create and add snippet to show how two lines of a +@c stanza can be grouped together, along these lines: +@c (might need improving a bit) -td + +@ignore +leftbrace = \markup { \override #'(font-encoding . fetaBraces) \lookup +#"brace105" } + +stanzaOneOne = { + \set stanza = \markup { "1. " \leftbrace } + \lyricmode { Child, you're mine and I love you. + Lend thine ear to what I say. + + } +} + +stanzaOneThree = { +% \set stanza = \markup { " "} + \lyricmode { Child, I have no great -- er joy + Than to have you walk in truth. + + } +} + +\new Voice { + \repeat volta 2 { c'8 c' c' c' c' c' c'4 + c'8 c' c' c' c' c' c'4 } +} \addlyrics { \stanzaOneOne } + \addlyrics { \stanzaOneThree } + +@end ignore + +@node Adding dynamics marks to stanzas +@unnumberedsubsubsec Adding dynamics marks to stanzas + +Stanzas differing in loudness may be indicated by putting a +dynamics mark before each stanza. In LilyPond, everything coming in +front of a stanza goes into the @code{StanzaNumber} object; dynamics marks +are no different. For technical reasons, you have to set the stanza +outside @code{\lyricmode}: + +@lilypond[quote,ragged-right,verbatim] +text = { + \set stanza = \markup { \dynamic "ff" "1. " } + \lyricmode { + Big bang + } +} + +<< + \new Voice = "tune" { + \time 3/4 + g'4 c'2 + } +\new Lyrics \lyricsto "tune" \text +>> +@end lilypond + +@node Adding singers' names to stanzas +@unnumberedsubsubsec Adding singers' names to stanzas + +@cindex singer name +@cindex name of singer + +Names of singers can also be added. They are printed at the start of +the line, just like instrument names. They are created by setting +@code{vocalName}. A short version may be entered as @code{shortVocalName}. + +@lilypond[fragment,ragged-right,quote,verbatim,relative=2] +\new Voice { + \time 3/4 g2 e4 a2 f4 g2. +} \addlyrics { + \set vocalName = #"Bert " + Hi, my name is Bert. +} \addlyrics { + \set vocalName = #"Ernie " + Oh, ché -- ri, je t'aime +} +@end lilypond + +@node Stanzas with different rhythms +@unnumberedsubsubsec Stanzas with different rhythms + +@subsubheading Ignoring melismata + +One possibility is that the text has a melisma in one stanza, but +multiple syllables in another one. One solution is to make the faster +voice ignore the melisma. This is done by setting +@code{ignoreMelismata} in the Lyrics context. + +@lilypond[verbatim,ragged-right,quote] +<< + \relative c' \new Voice = "lahlah" { + \set Staff.autoBeaming = ##f + c4 + \slurDotted + f8.[( g16]) + a4 + } + \new Lyrics \lyricsto "lahlah" { + more slow -- ly + } + \new Lyrics \lyricsto "lahlah" { + go + \set ignoreMelismata = ##t + fas -- ter + \unset ignoreMelismata + still + } +>> +@end lilypond + +@knownissues +Unlike most @code{\set} commands, @code{\set ignoreMelismata} does +not work if prefixed with @code{\once}. It is necessary to use +@code{\set} and @code{\unset} to bracket the lyrics where melismata +are to be ignored. + +@subsubheading Switching to an alternative melody + +More complex variations in text underlay are possible. It is possible +to switch the melody for a line of lyrics during the text. This is +done by setting the @code{associatedVoice} property. In the example + +@lilypond[ragged-right,quote] +<< + \relative c' \new Voice = "lahlah" { + \set Staff.autoBeaming = ##f + c4 + << + \new Voice = "alternative" { + \voiceOne + \times 2/3 { + % show associations clearly. + \override NoteColumn #'force-hshift = #-3 + f8 f g + } + } + { + \voiceTwo + f8.[ g16] + \oneVoice + } >> + a8( b) c + } + \new Lyrics \lyricsto "lahlah" { + Ju -- ras -- sic Park + } + \new Lyrics \lyricsto "lahlah" { + % Tricky: need to set associatedVoice + % one syllable too soon! + \set associatedVoice = alternative % applies to "ran" + Ty -- + ran -- + no -- + \set associatedVoice = lahlah % applies to "rus" + sau -- rus Rex + } >> +@end lilypond + +@noindent +the text for the first stanza is set to a melody called @q{lahlah}, + +@example +\new Lyrics \lyricsto "lahlah" @{ + Ju -- ras -- sic Park +@} +@end example + + +The second stanza initially is set to the @code{lahlah} context, but +for the syllable @q{ran}, it switches to a different melody. +This is achieved with +@example +\set associatedVoice = alternative +@end example + +@noindent +Here, @code{alternative} is the name of the @code{Voice} context +containing the triplet. + +@c FIXME: make this easier to understand -vv +This command must be one syllable too early, before @q{Ty} in this +case. In other words, changing the associatedVoice happens one step +later than expected. This is for technical reasons, and it is not a +bug. + +@example +\new Lyrics \lyricsto "lahlah" @{ + \set associatedVoice = alternative % applies to "ran" + Ty -- + ran -- + no -- + \set associatedVoice = lahlah % applies to "rus" + sau -- rus Rex +@} +@end example + +@noindent +The underlay is switched back to the starting situation by assigning +@code{lahlah} to @code{associatedVoice}. + + +@node Printing stanzas at the end +@unnumberedsubsubsec Printing stanzas at the end + +Sometimes it is appropriate to have one stanza set +to the music, and the rest added in verse form at +the end of the piece. This can be accomplished by adding +the extra verses into a @code{\markup} section outside +of the main score block. Notice that there are two +different ways to force linebreaks when using +@code{\markup}. + +@lilypond[ragged-right,verbatim,quote] +melody = \relative c' { +e d c d | e e e e | +d d e d | c1 | +} + +text = \lyricmode { +\set stanza = #"1." Ma- ry had a lit- tle lamb, +its fleece was white as snow. +} + +\score{ << + \new Voice = "one" { \melody } + \new Lyrics \lyricsto "one" \text +>> + \layout { } +} +\markup { \column{ + \line{ Verse 2. } + \line{ All the children laughed and played } + \line{ To see a lamb at school. } + } +} +\markup{ + \wordwrap-string #" + Verse 3. + + Mary took it home again, + + It was against the rule." +} +@end lilypond + + +@node Printing stanzas at the end in multiple columns +@unnumberedsubsubsec Printing stanzas at the end in multiple columns + +When a piece of music has many verses, they are often printed in +multiple columns across the page. An outdented verse number often +introduces each verse. The following example shows how to produce such +output in LilyPond. + +@lilypond[ragged-right,quote,verbatim] +melody = \relative c' { + c c c c | d d d d +} + +text = \lyricmode { + \set stanza = #"1." This is verse one. + It has two lines. +} + +\score{ << + \new Voice = "one" { \melody } + \new Lyrics \lyricsto "one" \text + >> + \layout { } +} + +\markup { + \fill-line { + \hspace #0.1 % moves the column off the left margin; + % can be removed if space on the page is tight + \column { + \line { \bold "2." + \column { + "This is verse two." + "It has two lines." + } + } + \hspace #0.1 % adds vertical spacing between verses + \line { \bold "3." + \column { + "This is verse three." + "It has two lines." + } + } + } + \hspace #0.1 % adds horizontal spacing between columns; + % if they are still too close, add more " " pairs + % until the result looks good + \column { + \line { \bold "4." + \column { + "This is verse four." + "It has two lines." + } + } + \hspace #0.1 % adds vertical spacing between verses + \line { \bold "5." + \column { + "This is verse five." + "It has two lines." + } + } + } + \hspace #0.1 % gives some extra space on the right margin; + % can be removed if page space is tight + } +} +@end lilypond + + +@seealso +Internals Reference: +@rinternals{LyricText}, +@rinternals{StanzaNumber}. + + + + diff --git a/Documentation/notation/wind.itely b/Documentation/notation/wind.itely new file mode 100644 index 0000000000..6507197554 --- /dev/null +++ b/Documentation/notation/wind.itely @@ -0,0 +1,223 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + +@node Wind instruments +@section Wind instruments + +@lilypondfile[quote]{wind-headword.ly} + +This section includes some elements of music notation that arise when +writing for winds. + +@menu +* Common notation for wind instruments:: +* Bagpipes:: +@end menu + +@node Common notation for wind instruments +@subsection Common notation for wind instruments + +This section discusses some issues common to most wind instruments. + +@menu +* References for wind instruments:: +* Fingerings:: +@end menu + +@node References for wind instruments +@unnumberedsubsubsec References for wind instruments + +@cindex wind instruments + +Many notation issues for wind instruments pertain to breathing and +tonguing: + +@itemize +@item Breathing can be specified by rests or @ref{Breath marks}. +@item Legato playing is indicated by @ref{Slurs}. +@item Different types of tonguings, ranging from legato to non-legato to +stacatto are usually shown by articulation marks, sometimes combined +with slurs, see @ref{Articulations and ornamentations} and @ref{List of +articulations}. +@item Flutter tonguing is usually indicated by placing a tremolo mark +and a text markup on the note. See @ref{Tremolo repeats}. +@end itemize + +There are also other aspects of musical notation that can apply to wind +instruments: + +@itemize +@item Many wind instruments are transposing intruments, see +@ref{Instrument transpositions}. +@item The slide glissando are characteristic of the trombone, but other +winds may perform keyed or valved glissandi. See @ref{Glissando}. +@item Harmonic series glissandi, which are possible on all brass +instruments but common for French Horns, are usually written out as +@ref{Grace notes}. +@item Pitch inflections at the end of a note are discussed in @ref{Falls +and doits}. +@item Key slaps or valve slaps are often shown by the @code{cross} style +of @ref{Special note heads}. +@item Woodwinds can overblow low notes to sound harmonics. These are +shown by the @code{flageolet} articulation. See @ref{List of articulations}. +@item The use of brass mutes is usually indicated by a text markup, but +where there are many rapid changes it is better to use the +@code{stopped} and @code{open} articulations. See @ref{Articulations and +ornamentations} and @ref{List of articulations}. +@item Stopped horns are indicated by the @code{stopped} articulation. +See @ref{Articulations and ornamentations}. +@end itemize + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing--flageolet-mark-size.ly} + + +@seealso +Notation Reference: +@ref{Breath marks}, +@ref{Slurs}, +@ref{Articulations and ornamentations}, +@ref{List of articulations}, +@ref{Tremolo repeats}, +@ref{Instrument transpositions}, +@ref{Glissando}, +@ref{Grace notes}, +@ref{Falls and doits}, +@ref{Special note heads}, + +Snippets: +@rlsr{Winds} + + +@node Fingerings +@unnumberedsubsubsec Fingerings +@c TODO add link to LSR snippet by Libero Mureddo once he has added +@c it (after August 15th). +All wind instruments other than the trombone require the use of several +fingers to produce each pitch. + +TBC + +@node Bagpipes +@subsection Bagpipes + +This section includes extra information for writing for bagpipes. + +@menu +* Bagpipe definitions:: +* Bagpipe example:: +@end menu + +@node Bagpipe definitions +@unnumberedsubsubsec Bagpipe definitions + +@cindex bagpipe +@cindex Scottish highland bagpipe +@cindex grace notes +@funindex \taor +@funindex taor +@funindex \hideKeySignature +@funindex hideKeySignature +@funindex \showKeySignature +@funindex showKeySignature + +LilyPond contains special definitions for music for the Scottish +highland bagpipe; to use them, add + +@example +\include "bagpipe.ly" +@end example + +@noindent +at the top of your input file. This lets you add the special grace notes +common to bagpipe music with short commands. For example, you could +write @code{\taor} instead of + +@example +\grace @{ \small G32[ d G e] @} +@end example + +@code{bagpipe.ly} also contains pitch definitions for the bagpipe +notes in the appropriate octaves, so you do not need to worry about +@code{\relative} or @code{\transpose}. + +@lilypond[ragged-right,verbatim,quote,notime] +\include "bagpipe.ly" +{ \grg G4 \grg a \grg b \grg c \grg d \grg e \grg f \grA g A } +@end lilypond + +Bagpipe music nominally uses the key of D Major (even though that +isn't really true). However, since that is the only key that can be used, +the key signature is normally not written out. To set this up correctly, +always start your music with @code{\hideKeySignature}. If you for some +reason want to show the key signature, you can use @code{\showKeySignature} +instead. + +Some modern music use cross fingering on c and f to flatten those notes. +This can be indicated by @code{cflat} or @code{fflat}. Similarly, the +piobaireachd high g can be written @code{gflat} when it occurs in light +music. + + +@seealso +@rlsr{Winds} + + +@node Bagpipe example +@unnumberedsubsubsec Bagpipe example + +@cindex bagpipe example +@cindex Amazing Grace bagpipe example + +This is what the well known tune Amazing Grace looks like in bagpipe +notation. + +@lilypond[verbatim,quote] +\include "bagpipe.ly" +\layout { + indent = 0.0\cm + \context { \Score \remove "Bar_number_engraver" } +} + +\header { + title = "Amazing Grace" + meter = "Hymn" + arranger = "Trad. arr." +} + +{ + \hideKeySignature + \time 3/4 + \grg \partial 4 a8. d16 + \slurd d2 \grg f8[ e32 d16.] + \grg f2 \grg f8 e + \thrwd d2 \grg b4 + \grG a2 \grg a8. d16 + \slurd d2 \grg f8[ e32 d16.] + \grg f2 \grg e8. f16 + \dblA A2 \grg A4 + \grg A2 f8. A16 + \grg A2 \hdblf f8[ e32 d16.] + \grg f2 \grg f8 e + \thrwd d2 \grg b4 + \grG a2 \grg a8. d16 + \slurd d2 \grg f8[ e32 d16.] + \grg f2 e4 + \thrwd d2. + \slurd d2 + \bar "|." +} +@end lilypond + + +@seealso +@rlsr{Winds} diff --git a/Documentation/notation/world.itely b/Documentation/notation/world.itely new file mode 100644 index 0000000000..8550f4b291 --- /dev/null +++ b/Documentation/notation/world.itely @@ -0,0 +1,384 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" + +@node World music +@section World music + +The purpose of this section is to highlight musical notation issues +that are relevant to traditions outside the Western tradition. + +@menu +* Arabic music:: +@end menu + +@node Arabic music +@subsection Arabic music + +This section highlights issues that are relevant to notating Arabic +music. + +@menu +* References for Arabic music:: +* Arabic note names :: +* Arabic key signatures:: +* Arabic time signatures:: +* Arabic music example:: +* Further reading:: +@end menu + + +@node References for Arabic music +@unnumberedsubsubsec References for Arabic music + +@cindex Arabic music +@cindex medium intervals +@cindex maqam +@cindex maqams + +Arabic music so far has been mainly an oral tradition. When music +is transcribed, it is usually in a sketch format, on which +performers are expected to improvise significantly. Increasingly, +Western notation, with a few variations, is adopted in order to +communicate and preserve Arabic music. + +Some elements of Western musical notation such as the +transcription of chords or independent parts, are not required to +typeset the more traditional Arabic pieces. There are however +some different issues, such as the need to indicate medium +intervals that are somewhere between a semi-tone and a tone, in +addition to the minor and major intervals that are used in Western +music. There is also the need to group and indicate a large +number of different maqams (modes) that are part of Arabic music. + +In general, Arabic music notation does not attempt to precisely +indicate microtonal elements that are present in musical practice. + +Several issues that are relevant to Arabic music are covered +elsewhere: + +@itemize +@item Note names and accidentals (including quarter tones) can be +tailored as discussed in @ref{Note names in other languages}. + +@item Additional key signatures can also be tailored as described +in @ref{Key signature}. + +@item Complex time signatures may require that notes be grouped +manually as described in @ref{Manual beams}. + +@item @notation{Takasim} which are rhythmically free +improvisations may be written down omitting bar lines as +described in @ref{Unmetered music}. + +@end itemize + + +@seealso +Notation Reference: +@ref{Note names in other languages}, +@ref{Key signature}, +@ref{Manual beams}. + +Snippets: +@rlsr{World music}. + + +@node Arabic note names +@unnumberedsubsubsec Arabic note names + + +@cindex Arabic note names + +The more traditional Arabic note names can be quite long and are +not suitable for the purpose of music writing, so they are not +used. English note names are not very familiar in Arabic music +education, so Italian or Solfege note names (@code{do, re, mi, fa, +sol, la, si}) are used instead. Modifiers (accidentals) can also +be used, as discussed in @ref{Note names in other languages}. + +For example, this is how the Arabic @notation{rast} scale can be +notated: + +@lilypond[quote,verbatim] +\include "arabic.ly" +\relative do' { + do re misb fa sol la sisb do sisb la sol fa misb re do +} +@end lilypond + + +@cindex Arabic semi-flat symbol +@cindex Semi-flat symbol appearance + +The symbol for semi-flat does not match the symbol which is used +in Arabic notation. The @code{\dwn} symbol defined in +@code{arabic.ly} may be used preceding a flat symbol as a work +around if it is important to use the specific Arabic semi-flat +symbol. The appearance of the semi-flat symbol in the key +signature cannot be altered by using this method. + + +@lilypond[quote,verbatim] +\include "arabic.ly" +\relative do' { + \set Staff.extraNatural = ##f + dod dob dosd \dwn dob dobsb dodsd do do +} +@end lilypond + + +@seealso +Notation Reference: +@ref{Note names in other languages}. + +Snippets: +@rlsr{World music}. + + +@node Arabic key signatures +@unnumberedsubsubsec Arabic key signatures + +@cindex Arabic key signatures + +In addition to the minor and major key signatures, the following +key signatures are defined in @code{arabic.ly}: @notation{bayati}, +@notation{rast}, @notation{sikah}, @notation{iraq}, and +@notation{kurd}. These key signatures define a small number of +maqam groups rather than the large number of maqams that are in +common use. + +In general, a maqam uses the key signature of its group, or a +neighbouring group, and varying accidentals are marked throughout +the music. + +For example to indicate the key signature of a maqam muhayer piece: + +@example +\key re \bayati +@end example + +Here @var{re} is the default pitch of the muhayer maqam, and +@var{bayati} is the name of the base maqam in the group. + +While the key signature indicates the group, it is common for the +title to indicate the more specific maqam, so in this example, the +name of maqam muhayer should appear in the title. + +Other maqams in the same bayati group, as shown in the table below: +(bayati, hussaini, saba, and ushaq) can be indicated in the same +way. These are all variations of the base and most common maqam +in the group, which is bayati. They usually differ from the base +maqam in their upper tetrachords, or certain flow details that +don't change their fundamental nature, as siblings. + +The other maqam in the same group (Nawa) is related to bayati by +modulation which is indicated in the table in parenthesis for +those maqams that are modulations of their base maqam. Arabic +maqams admit of only limited modulations, due to the nature of +Arabic musical instruments. Nawa can be indicated as follows: + +@example +\key sol \bayati +@end example + +In Arabic music, the same term such as bayati that is used to +indicate a maqam group, is also a maqam which is usually the most +important in the group, and can also be thought of as a base +maqam. + +Here is one suggested grouping that maps the more common maqams to +key signatures: + +@multitable @columnfractions 0.1 0.1 0.1 0.6 +@headitem maqam group + @tab key + @tab finalis + @tab Other maqmas in group (finalis) +@item ajam + @tab major + @tab sib + @tab jaharka (fa) +@item bayati + @tab bayati + @tab re + @tab hussaini, muhayer, saba, ushaq, nawa (sol) +@item hijaz + @tab kurd + @tab re + @tab shahnaz, shad arban (sol), hijazkar (do) +@item iraq + @tab iraq + @tab sisb + @tab - +@item kurd + @tab kurd + @tab re + @tab hijazkar kurd (do) +@item nahawand + @tab minor + @tab do + @tab busalik (re), farah faza (sol) +@item nakriz + @tab minor + @tab do + @tab nawa athar, hisar (re) +@item rast + @tab rast + @tab do + @tab mahur, yakah (sol) +@item sikah + @tab sikah + @tab misb + @tab huzam +@end multitable + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{non-traditional-key-signatures.ly} + + +@seealso +Notation Reference: +@ref{Key signature}. + +Learning Manual: +@rlearning{Accidentals and key signatures}. + +Internals Reference: +@rinternals{KeySignature}. + +Snippets: +@rlsr{World music}, +@rlsr{Pitches}. + + +@node Arabic time signatures +@unnumberedsubsubsec Arabic time signatures + +@cindex Arabic time signatures +@cindex Semai form +@cindex taqasim + +Some Arabic and Turkish music classical forms such as +@notation{Semai} use unusual time signatures such as 10/8. This +may lead to an automatic grouping of notes that is quite different +from existing typeset music, where notes may not be grouped on the +beat, but in a manner that is difficult to match by adjusting +automatic beaming. You can override this by switching off +automatic beaming and beaming the notes manually. Where matching +existing typeset music is not an issue, you may still want to +adjust the beaming behaviour and/or use compound time signatures. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{compound-time-signatures.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{arabic-improvisation.ly} + + +@seealso +Notation Reference: +@ref{Manual beams}, +@ref{Automatic beams}, +@ref{Unmetered music}, +@ref{Automatic accidentals}, +@ref{Setting automatic beam behavior}, +@ref{Time signature}. + +Snippets: +@rlsr{World music}. + + +@node Arabic music example +@unnumberedsubsubsec Arabic music example + +@cindex Arabic music example +@cindex Arabic music template +@cindex Template Arabic music + +Here is a template that also uses the start of a Turkish Semai +that is familiar in Arabic music education in order to illustrate +some of the peculiarities of Arabic music notation, such as medium +intervals and unusual modes that are discussed in this section. + +@lilypond[quote,verbatim] +\include "arabic.ly" +\score { + \relative re' { + \set Staff.extraNatural = ##f + \set Staff.autoBeaming = ##f + \key re \bayati + \time 10/8 + + re4 re'8 re16 [misb re do] sisb [la sisb do] re4 r8 + re16 [misb do re] sisb [do] la [sisb sol8] la [sisb] do [re] misb + fa4 fa16 [misb] misb8. [re16] re8 [misb] re [do] sisb + do4 sisb8 misb16 [re do sisb] la [do sisb la] la4 r8 + } + \header { + title = "Semai Muhayer" + composer = "Jamil Bek" + } +} +@end lilypond + + +@seealso +Snippets: +@rlsr{World music} + + +@node Further reading +@unnumberedsubsubsec Further reading + +@enumerate + +@item +The music of the Arabs by Habib Hassan Touma [Amadeus Press, 1996], +contains a discussion of maqams and their method of groupings. + +There are also various web sites that explain maqams and some +provide audio examples such as : + +@itemize @bullet +@item +@uref{http://www.maqamworld.com/} +@item +@uref{http://www.turath.org/} +@end itemize + +There are some variations in the details of how maqams are grouped, +despite agreement on the criteria of grouping maqams that are +related through common lower tetra chords, or through modulation. + +@item +There is not a complete consistency, sometimes even in the same +text on how key signatures for particular maqams should be +specified. It is common, however, to use a key signature per +group, rather than a different key signature for each different +maqam. + +Oud methods by the following authors, contain examples of +mainly Turkish and Arabic compositions. + +@itemize @bullet +@item +Charbel Rouhana +@item +George Farah +@item +Ibrahim Ali Darwish Al-masri +@end itemize +@end enumerate + + diff --git a/Documentation/pictures/GNUmakefile b/Documentation/pictures/GNUmakefile index 4a8f2eb72f..a360164335 100644 --- a/Documentation/pictures/GNUmakefile +++ b/Documentation/pictures/GNUmakefile @@ -1,27 +1,47 @@ depth = ../.. -STEPMAKE_TEMPLATES=documentation -XPM_FILES=$(call src-wildcard,*.xpm) -EXTRA_DIST_FILES= $(XPM_FILES) -lilypond-icon = $(outdir)/lilypond.ico -ly-icon = $(outdir)/ly.ico +BITMAP_IMAGES = $(call src-wildcard,*.png) $(call src-wildcard,*.jpg) +EPS_ILLUSTRATIONS = $(call src-wildcard,*.eps) +SVG_FILES = $(call src-wildcard,*.svg) -include $(depth)/make/stepmake.make +EXTRA_DIST_FILES = $(BITMAP_IMAGES) $(EPS_ILLUSTRATIONS) $(SVG_FILES) -ifeq ($(PLATFORM_WINDOWS),yes) +OUT_PDF_IMAGES = $(EPS_ILLUSTRATIONS:%.eps=$(outdir)/%.pdf) +OUT_BITMAP_IMAGES = $(BITMAP_IMAGES:%=$(outdir)/%) +OUT_BITMAP_IMAGES += $(EPS_ILLUSTRATIONS:%.pdf=$(outdir)/%.png) -$(outdir)/%.ico: %.xpm - $(buildscript-dir)/genicon $< $@ +STEPMAKE_TEMPLATES = documentation -default: $(lilypond-icon) $(ly-icon) +include $(depth)/make/stepmake.make -endif # PLATFORM_WINDOWS +########### +### Targets -local-dist: $(icon) -xgifs: $(OUTGIF_FILES) -pngs: $(OUTPNG_FILES) +default: ifeq ($(out),www) -local-WWW-1: $(OUTPNG_FILES) +local-WWW-1: $(OUT_BITMAP_IMAGES) $(OUT_PDF_IMAGES) endif + +######### +### Rules + +$(outdir)/%-flat-gray.png: %-flat-gray.png + convert -depth 8 -geometry 50x50% $< $@ + +$(outdir)/%-flat-bw.png: %-flat-bw.png + convert -depth 8 -geometry 50x50% $< $@ + +$(outdir)/%.png: %.png + ln -f $< $@ + +$(outdir)/%.jpg: %.jpg + ln -f $< $@ + +$(outdir)/%.png: %.eps + gs -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -q -sOutputFile=$@ -sDEVICE=png16m -dEPSCrop -dNOPAUSE -f $< -c quit + +$(outdir)/%.pdf: %.eps + gs -dAutoRotatePages=/None -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -sOutputFile=$@ -dEPSCrop -c .setpdfwrite -f $< + diff --git a/Documentation/pictures/VTlogo_ITF.png b/Documentation/pictures/VTlogo_ITF.png new file mode 100644 index 0000000000..bb45adfbb4 Binary files /dev/null and b/Documentation/pictures/VTlogo_ITF.png differ diff --git a/Documentation/pictures/annotated-demo.svg b/Documentation/pictures/annotated-demo.svg new file mode 100644 index 0000000000..acc7beea91 --- /dev/null +++ b/Documentation/pictures/annotated-demo.svg @@ -0,0 +1,7437 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + +  + + + та + + + Nacht. + + +  + + +  + + + + + +  + + + + + +  + + + + + + + + + + + + + + +  + + +  + + +  + + +  + + + + + + + + + cresc. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + +  + + +  + + +  + + +  + + +  + + + + + +  + + + + + +  + + + + + +  + + + + + +  + + + + + +  + + + + + +  + + + ほへ + + + ner + + +  + + + + + +  + + + + + +  + + +  + + + + + +  + + + та + + + + + + Schö + + +  + + +  + + + + + +  + + +  + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + +  + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + ちり + + + Tag, + + +  + + + + + +  + + + + + +  + + + + + + + + +  + + + ぬる + + + + + + du + + + + + + + + + + + +  + + +  + + + + + +  + + + + + + + + + + + +  + + +  + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + +  + + +  + + +  + + + f + + +  + + + Жъл + + + bist + + + + + + + + +  + + + + + +  + + + + + +  + + +  + + + + + +  + + + дю + + + + + + er + + +  + + + + + +  + + +  + + + + + +  + + +  + + + + + +  + + + + + + + + +  + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + ля + + + + + + wacht. + + +  + + +  + + + + + +  + + + + + +  + + +  + + +  + + +  + + +  + + + + + +  + + + + + +  + + +  + + + + + +  + + +  + + +  + + +  + + +  + + +  + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6 + + +  + + +  + + +  + + +  + + +  + + + + + + + + +  + + +  + + + + + + + + +  + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + +  + + +  + + +  + + +  + + +  + + + + + + та + + + Licht! + + + + + +  + + + + + +  + + + + + + + + +  + + + + + +  + + +  + + +  + + + та + + + Aus + + +  + + +  + + +  + + + + + + + + +  + + +  + + + + + +  + + +  + + + + + + + + +  + + +  + + +  + + + ほへど + + + + + + gol + + +  + + + + + + + + +  + + +  + + + + + + nen + + +  + + +  + + + + + + + + + + + + de + + +  + + +  + + +  + + +  + + + + + +  + + +  + + + + + + + + + + + + + + + + + +  + + + + + + + + +  + + +  + + +  + + + ぬるを + + + + + + Pfor + + +  + + +  + + + + + +  + + + + + +  + + + + + +  + + +  + + +  + + + ちり + + +  + + + + + +  + + + + + + + + + + + +  + + + + + + + + +  + + + + + +  + + + + + + + + + + + +  + + +  + + + дю + + + brichst + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + +  + + + + + +  + + +  + + + Жъл + + + ten + + +  + + + + + +  + + + + + + + + + + + +  + + + + + +  + + +  + + +  + + +  + + + + + +  + + + + + + + + + + + +  + + +  + + +  + + +  + + +  + + +  + + +  + + +  + + + זה + + + + + + sie + + +  + + + + + +  + + + + + + + + +  + + + + + +  + + +  + + +  + + +  + + + ля + + + + + + du + + + + + + + + +  + + + + + + + + + + + + + + +  + + +  + + + はに + + + + + + durch + + + + + + + + + + + + + + + + + + + + +  + + +  + + + + + + いろ + + + gend + + +  + + + + + + + + + + + + + + + + + + + + +  + + +  + + +  + + +  + + + כיף + + + die + + + + + + + + +  + + + + + +  + + + + + + + + +  + + + + + +  + + +  + + +  + + +  + + +  + + +  + + + + + +  + + + + + +  + + + + + + + + +  + + + + + + + + + + + + + + + + + +  + + + 3 + + +  + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + +  + + + + + + + + + + + + geschwind + + + etwas + + + Lieblich, + + + + + +  + + + + + +  + + + + + + + + +  + + +  + + + + + + + + +  + + +  + + +  + + +  + + + + + + + + +  + + +  + + +  + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + +  + + + + + + + + +  + + +  + + + + + + + + +  + + +  + + + + + + + + +  + + +  + + + + + + + + +  + + +  + + + + + + + + +  + + +  + + + + + + + + +  + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + +  + + +  + + + + + + + + +  + + +  + + +  + + +  + + + + + +  + + +  + + +  + + +  + + +  + + +  + + + + + +  + + +  + + +  + + + + + + + + + + + + + + +  + + + + + +  + + + + + + + + + + + + + + +  + + +  + + +  + + +  + + +  + + +  + + +  + + +  + + + 2. + + + いろはに + + + 1. + + + + + + Sü + + +  + + +  + + + + + +  + + +  + + + כיף + + + ßes + + +  + + +  + + +  + + +  + + + 8 + + + 6 + + +  + + + 8 + + + 6 + + +  + + + 8 + + + 6 + + + 2. + + +  + + + + + + + + + + + + + + + LilyPond demo + + + + + + + + + + + + Slurs avoid accents + Automated collisionresolution + Rest under beamsautomatically moved + Unicode support for all texts + Dots avoid flagsautomatically + Cross staff slurs and beams + Advanced accidental placement + Heavier font and linesfor smaller staves + Horizontal shiftfor tilted slurs + Ledger linesstay separate + Clefs foldedunder other notes + Rounded tipson all symbols + Different thicknessesfor ledger, staff and bar lines + Compensation foroptical illusions + LilyPond's automatic typography + Ledger lines shortenedafter accidentals + Lyrics never collide + + + + + + + + + + + + + diff --git a/Documentation/pictures/background-image.png b/Documentation/pictures/background-image.png new file mode 100644 index 0000000000..dac7f63eb7 Binary files /dev/null and b/Documentation/pictures/background-image.png differ diff --git a/Documentation/pictures/baer-flat-bw.png b/Documentation/pictures/baer-flat-bw.png new file mode 100644 index 0000000000..bb25bd1903 Binary files /dev/null and b/Documentation/pictures/baer-flat-bw.png differ diff --git a/Documentation/pictures/baer-flat-gray.png b/Documentation/pictures/baer-flat-gray.png new file mode 100644 index 0000000000..08cd338380 Binary files /dev/null and b/Documentation/pictures/baer-flat-gray.png differ diff --git a/Documentation/pictures/carter-brey.jpg b/Documentation/pictures/carter-brey.jpg new file mode 100644 index 0000000000..34b970821a Binary files /dev/null and b/Documentation/pictures/carter-brey.jpg differ diff --git a/Documentation/pictures/context-example.eps b/Documentation/pictures/context-example.eps new file mode 100644 index 0000000000..869417a8aa --- /dev/null +++ b/Documentation/pictures/context-example.eps @@ -0,0 +1,3065 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: inkscape 0.42 +%%Pages: 1 +%%Orientation: Portrait +%%BoundingBox: -54 67 257 247 +%%HiResBoundingBox: -54.384930 67.324076 256.78175 246.86789 +%%EndComments +%%Page: 1 1 +0 239 translate +0.80000000 -0.80000000 scale +gsave [1.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000] concat +gsave +0.68627453 0.68627453 0.68627453 setrgbcolor +newpath +20.007931 -1.7765938 moveto +205.39661 -1.7765938 lineto +207.64909 -1.7765938 209.46245 0.036769669 209.46245 2.2892436 curveto +209.46245 131.07783 lineto +209.46245 133.33030 207.64909 135.14366 205.39661 135.14366 curveto +20.007931 135.14366 lineto +17.755457 135.14366 15.942094 133.33030 15.942094 131.07783 curveto +15.942094 2.2892436 lineto +15.942094 0.036769669 17.755457 -1.7765938 20.007931 -1.7765938 curveto +closepath +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.88499999 setlinewidth +1 setlinejoin +0 setlinecap +newpath +20.007931 -1.7765938 moveto +205.39661 -1.7765938 lineto +207.64909 -1.7765938 209.46245 0.036769669 209.46245 2.2892436 curveto +209.46245 131.07783 lineto +209.46245 133.33030 207.64909 135.14366 205.39661 135.14366 curveto +20.007931 135.14366 lineto +17.755457 135.14366 15.942094 133.33030 15.942094 131.07783 curveto +15.942094 2.2892436 lineto +15.942094 0.036769669 17.755457 -1.7765938 20.007931 -1.7765938 curveto +closepath +stroke +gsave +0.84313726 0.84313726 0.84313726 setrgbcolor +newpath +30.771785 79.594475 moveto +195.00948 79.594475 lineto +197.26195 79.594475 199.07532 81.407838 199.07532 83.660312 curveto +199.07532 115.56691 lineto +199.07532 117.81938 197.26195 119.63275 195.00948 119.63275 curveto +30.771785 119.63275 lineto +28.519311 119.63275 26.705948 117.81938 26.705948 115.56691 curveto +26.705948 83.660312 lineto +26.705948 81.407838 28.519311 79.594475 30.771785 79.594475 curveto +closepath +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.88509721 setlinewidth +1 setlinejoin +0 setlinecap +newpath +30.771785 79.594475 moveto +195.00948 79.594475 lineto +197.26195 79.594475 199.07532 81.407838 199.07532 83.660312 curveto +199.07532 115.56691 lineto +199.07532 117.81938 197.26195 119.63275 195.00948 119.63275 curveto +30.771785 119.63275 lineto +28.519311 119.63275 26.705948 117.81938 26.705948 115.56691 curveto +26.705948 83.660312 lineto +26.705948 81.407838 28.519311 79.594475 30.771785 79.594475 curveto +closepath +stroke +gsave +0.84313726 0.84313726 0.84313726 setrgbcolor +newpath +29.540218 15.862391 moveto +195.60888 15.862391 lineto +197.86135 15.862391 199.67471 17.675755 199.67471 19.928229 curveto +199.67471 63.595695 lineto +199.67471 65.848169 197.86135 67.661532 195.60888 67.661532 curveto +29.540218 67.661532 lineto +27.287744 67.661532 25.474380 65.848169 25.474380 63.595695 curveto +25.474380 19.928229 lineto +25.474380 17.675755 27.287744 15.862391 29.540218 15.862391 curveto +closepath +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.88509721 setlinewidth +1 setlinejoin +0 setlinecap +newpath +29.540218 15.862391 moveto +195.60888 15.862391 lineto +197.86135 15.862391 199.67471 17.675755 199.67471 19.928229 curveto +199.67471 63.595695 lineto +199.67471 65.848169 197.86135 67.661532 195.60888 67.661532 curveto +29.540218 67.661532 lineto +27.287744 67.661532 25.474380 65.848169 25.474380 63.595695 curveto +25.474380 19.928229 lineto +25.474380 17.675755 27.287744 15.862391 29.540218 15.862391 curveto +closepath +stroke +gsave +1.0000000 1.0000000 1.0000000 setrgbcolor +newpath +117.71875 42.500000 moveto +113.83588 42.578103 110.65477 45.607155 110.38673 49.481551 curveto +110.11869 53.355946 112.85238 56.794197 116.68750 57.406250 curveto +133.40625 60.281250 lineto +149.31250 63.593750 lineto +149.54010 63.635589 149.76951 63.666872 150.00000 63.687500 curveto +174.11316 67.227299 lineto +176.80789 67.585949 179.48575 66.458490 181.11244 64.280398 curveto +182.73912 62.102307 183.05998 59.214546 181.95109 56.732501 curveto +180.84220 54.250456 178.47714 52.562672 175.76941 52.321049 curveto +151.90625 48.812500 lineto +136.21875 45.531250 lineto +136.12520 45.519066 136.03144 45.508647 135.93750 45.500000 curveto +119.21875 42.625000 lineto +118.72421 42.533144 118.22168 42.491266 117.71875 42.500000 curveto +closepath +eofill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.88499999 setlinewidth +1 setlinejoin +1 setlinecap +newpath +117.71875 42.500000 moveto +113.83588 42.578103 110.65477 45.607155 110.38673 49.481551 curveto +110.11869 53.355946 112.85238 56.794197 116.68750 57.406250 curveto +133.40625 60.281250 lineto +149.31250 63.593750 lineto +149.54010 63.635589 149.76951 63.666872 150.00000 63.687500 curveto +174.11316 67.227299 lineto +176.80789 67.585949 179.48575 66.458490 181.11244 64.280398 curveto +182.73912 62.102307 183.05998 59.214546 181.95109 56.732501 curveto +180.84220 54.250456 178.47714 52.562672 175.76941 52.321049 curveto +151.90625 48.812500 lineto +136.21875 45.531250 lineto +136.12520 45.519066 136.03144 45.508647 135.93750 45.500000 curveto +119.21875 42.625000 lineto +118.72421 42.533144 118.22168 42.491266 117.71875 42.500000 curveto +closepath +stroke +gsave +1.0000000 1.0000000 1.0000000 setrgbcolor +newpath +94.581216 24.203616 moveto +90.530643 24.092562 87.124140 27.218649 86.887678 31.263838 curveto +86.651216 35.309028 89.670291 38.810723 93.706216 39.172366 curveto +118.37500 42.156250 lineto +118.91507 42.215098 119.45993 42.215098 120.00000 42.156250 curveto +150.31250 38.937500 lineto +174.15625 44.937500 lineto +176.80294 45.740486 179.67677 45.021793 181.63391 43.067469 curveto +183.59105 41.113145 184.31388 38.240355 183.51471 35.592507 curveto +182.71553 32.944659 180.52405 30.951468 177.81250 30.406250 curveto +152.68750 24.062500 lineto +151.83039 23.845789 150.94171 23.782312 150.06250 23.875000 curveto +119.21875 27.156250 lineto +95.331216 24.266116 lineto +95.082419 24.232746 94.832104 24.211886 94.581216 24.203616 curveto +94.581216 24.203616 lineto +closepath +eofill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.88499999 setlinewidth +1 setlinejoin +1 setlinecap +newpath +94.581216 24.203616 moveto +90.530643 24.092562 87.124140 27.218649 86.887678 31.263838 curveto +86.651216 35.309028 89.670291 38.810723 93.706216 39.172366 curveto +118.37500 42.156250 lineto +118.91507 42.215098 119.45993 42.215098 120.00000 42.156250 curveto +150.31250 38.937500 lineto +174.15625 44.937500 lineto +176.80294 45.740486 179.67677 45.021793 181.63391 43.067469 curveto +183.59105 41.113145 184.31388 38.240355 183.51471 35.592507 curveto +182.71553 32.944659 180.52405 30.951468 177.81250 30.406250 curveto +152.68750 24.062500 lineto +151.83039 23.845789 150.94171 23.782312 150.06250 23.875000 curveto +119.21875 27.156250 lineto +95.331216 24.266116 lineto +95.082419 24.232746 94.832104 24.211886 94.581216 24.203616 curveto +94.581216 24.203616 lineto +closepath +stroke +gsave +1.0000000 1.0000000 1.0000000 setrgbcolor +newpath +152.56250 87.812500 moveto +152.36383 87.825445 152.16576 87.846295 151.96875 87.875000 curveto +118.31250 91.906250 lineto +94.289106 96.223025 lineto +90.172859 96.714904 87.234727 100.45052 87.726606 104.56677 curveto +88.218485 108.68302 91.954109 111.62115 96.070356 111.12927 curveto +120.09375 106.78125 lineto +151.12500 103.06250 lineto +170.53125 115.28125 lineto +172.79883 116.76854 175.69263 116.91604 178.09969 115.66704 curveto +180.50675 114.41804 182.05221 111.96704 182.14168 109.25670 curveto +182.23115 106.54636 180.85070 103.99878 178.53125 102.59375 curveto +156.84375 88.968750 lineto +155.56582 88.160636 154.07350 87.757600 152.56250 87.812500 curveto +closepath +eofill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.88499999 setlinewidth +1 setlinejoin +1 setlinecap +newpath +152.56250 87.812500 moveto +152.36383 87.825445 152.16576 87.846295 151.96875 87.875000 curveto +118.31250 91.906250 lineto +94.289106 96.223025 lineto +90.172859 96.714904 87.234727 100.45052 87.726606 104.56677 curveto +88.218485 108.68302 91.954109 111.62115 96.070356 111.12927 curveto +120.09375 106.78125 lineto +151.12500 103.06250 lineto +170.53125 115.28125 lineto +172.79883 116.76854 175.69263 116.91604 178.09969 115.66704 curveto +180.50675 114.41804 182.05221 111.96704 182.14168 109.25670 curveto +182.23115 106.54636 180.85070 103.99878 178.53125 102.59375 curveto +156.84375 88.968750 lineto +155.56582 88.160636 154.07350 87.757600 152.56250 87.812500 curveto +closepath +stroke +gsave [3.5370080 0.0000000 0.0000000 3.5370080 -49.697970 -57.425720] concat +gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 31.330290] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.10000000 setlinewidth +1 setlinejoin +1 setlinecap +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +stroke +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 29.572990] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.10000000 setlinewidth +1 setlinejoin +1 setlinecap +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +stroke +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 27.815690] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.10000000 setlinewidth +1 setlinejoin +1 setlinecap +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +stroke +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 26.058390] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.10000000 setlinewidth +1 setlinejoin +1 setlinecap +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +stroke +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 24.301090] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.10000000 setlinewidth +1 setlinejoin +1 setlinecap +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +stroke +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 48.024630] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.10000000 setlinewidth +1 setlinejoin +1 setlinecap +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +stroke +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 46.267330] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.10000000 setlinewidth +1 setlinejoin +1 setlinecap +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +stroke +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 44.510030] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.10000000 setlinewidth +1 setlinejoin +1 setlinecap +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +stroke +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 42.752730] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.10000000 setlinewidth +1 setlinejoin +1 setlinecap +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +stroke +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 40.995430] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.10000000 setlinewidth +1 setlinejoin +1 setlinecap +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +stroke +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 10.000000 33.087590] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +29.256904 -0.10000000 moveto +31.174626 -0.10000000 lineto +31.190289 -0.10000000 31.202899 -0.087390472 31.202899 -0.071727514 curveto +31.202899 0.071727514 lineto +31.202899 0.087390472 31.190289 0.10000000 31.174626 0.10000000 curveto +29.256904 0.10000000 lineto +29.241242 0.10000000 29.228632 0.087390472 29.228632 0.071727514 curveto +29.228632 -0.071727514 lineto +29.228632 -0.087390472 29.241242 -0.10000000 29.256904 -0.10000000 curveto +closepath +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 68.305160 44.510030] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.0000000 -2.0500000 moveto +0.19000000 -2.0500000 lineto +0.19000000 2.0500000 lineto +0.0000000 2.0500000 lineto +0.0000000 -2.0500000 lineto +closepath +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 68.305160 27.815690] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.0000000 -2.0500000 moveto +0.19000000 -2.0500000 lineto +0.19000000 2.0500000 lineto +0.0000000 2.0500000 lineto +0.0000000 -2.0500000 lineto +closepath +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 68.305160 44.510030] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.0000000 -2.0500000 moveto +0.19000000 -2.0500000 lineto +0.19000000 2.0500000 lineto +0.0000000 2.0500000 lineto +0.0000000 -2.0500000 lineto +closepath +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 68.305160 27.815690] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.0000000 -2.0500000 moveto +0.19000000 -2.0500000 lineto +0.19000000 2.0500000 lineto +0.0000000 2.0500000 lineto +0.0000000 -2.0500000 lineto +closepath +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 10.000000 33.087590] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +29.256904 -0.10000000 moveto +31.174626 -0.10000000 lineto +31.190289 -0.10000000 31.202899 -0.087390472 31.202899 -0.071727514 curveto +31.202899 0.071727514 lineto +31.202899 0.087390472 31.190289 0.10000000 31.174626 0.10000000 curveto +29.256904 0.10000000 lineto +29.241242 0.10000000 29.228632 0.087390472 29.228632 0.071727514 curveto +29.228632 -0.071727514 lineto +29.228632 -0.087390472 29.241242 -0.10000000 29.256904 -0.10000000 curveto +closepath +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 48.024630] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.10000000 setlinewidth +1 setlinejoin +1 setlinecap +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +stroke +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 46.267330] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.10000000 setlinewidth +1 setlinejoin +1 setlinecap +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +stroke +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 44.510030] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.10000000 setlinewidth +1 setlinejoin +1 setlinecap +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +stroke +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 42.752730] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.10000000 setlinewidth +1 setlinejoin +1 setlinecap +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +stroke +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 40.995430] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.10000000 setlinewidth +1 setlinejoin +1 setlinecap +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +stroke +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 31.330290] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.10000000 setlinewidth +1 setlinejoin +1 setlinecap +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +stroke +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 29.572990] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.10000000 setlinewidth +1 setlinejoin +1 setlinecap +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +stroke +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 27.815690] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.10000000 setlinewidth +1 setlinejoin +1 setlinecap +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +stroke +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 26.058390] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.10000000 setlinewidth +1 setlinejoin +1 setlinecap +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +stroke +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 24.301090] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.10000000 setlinewidth +1 setlinejoin +1 setlinecap +newpath +0.050000001 0.0000000 moveto +24.783028 0.0000000 lineto +stroke +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 24.718840 36.162860] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.014136244 -6.8000002 moveto +0.14586375 -6.8000002 lineto +0.15369523 -6.8000002 0.16000000 -6.7936954 0.16000000 -6.7858639 curveto +0.16000000 6.7858639 lineto +0.16000000 6.7936954 0.15369523 6.8000002 0.14586375 6.8000002 curveto +0.014136244 6.8000002 lineto +0.0063047647 6.8000002 0.0000000 6.7936954 0.0000000 6.7858639 curveto +0.0000000 -6.7858639 lineto +0.0000000 -6.7936954 0.0063047647 -6.8000002 0.014136244 -6.8000002 curveto +closepath +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 46.881680 35.178770] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +2.6061780 0.12601635 moveto +2.6061780 0.52601635 lineto +0.040000000 0.20000000 lineto +0.040000000 -0.20000000 lineto +2.6061780 0.12601635 lineto +closepath +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.079999998 setlinewidth +1 setlinejoin +1 setlinecap +newpath +2.6061780 0.12601635 moveto +2.6061780 0.52601635 lineto +0.040000000 0.20000000 lineto +0.040000000 -0.20000000 lineto +2.6061780 0.12601635 lineto +closepath +stroke +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 33.786500 44.510030] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.91200000 -1.0760000 moveto +0.64800026 -1.0560000 0.43599985 -0.96799985 0.28400000 -0.81600000 curveto +0.21200007 -0.74400007 0.16399996 -0.67199990 0.12000000 -0.57600000 curveto +0.060000060 -0.46000012 0.027999980 -0.33599985 0.0080000000 -0.18400000 curveto +8.0000000e-09 -0.10400008 8.0000000e-09 0.10000008 0.0080000000 0.18000000 curveto +0.027999980 0.33199985 0.060000060 0.45600012 0.12000000 0.57200000 curveto +0.16399996 0.66799990 0.21200007 0.74000007 0.28400000 0.81200000 curveto +0.42399986 0.95199986 0.60800024 1.0360000 0.84400000 1.0680000 curveto +0.91599993 1.0760000 1.0560000 1.0760000 1.1040000 1.0680000 curveto +1.2799998 1.0280000 1.4240001 0.92399982 1.5360000 0.74800000 curveto +1.5879999 0.66800008 1.6440000 0.54399990 1.6720000 0.44400000 curveto +1.7000000 0.35600009 1.7000000 0.33599997 1.6840000 0.30800000 curveto +1.6480000 0.25600005 1.5640000 0.27200006 1.5480000 0.32800000 curveto +1.5120000 0.45599987 1.5000000 0.49600008 1.4600000 0.57600000 curveto +1.3560001 0.79999978 1.1919998 0.92000000 0.99600000 0.92000000 curveto +0.91600008 0.92000000 0.83199994 0.90399997 0.77600000 0.87600000 curveto +0.63600014 0.81200006 0.57599998 0.68399972 0.55600000 0.40400000 curveto +0.54800001 0.31200009 0.54800001 -0.31600010 0.55600000 -0.41200000 curveto +0.56799999 -0.57599984 0.59200004 -0.68000008 0.63600000 -0.75600000 curveto +0.69199994 -0.85199990 0.78800013 -0.90400002 0.92000000 -0.92000000 curveto +1.0519999 -0.93599998 1.1600001 -0.90799993 1.2560000 -0.84000000 curveto +1.2880000 -0.81600002 1.3440000 -0.76399996 1.3720000 -0.72400000 curveto +1.3720000 -0.72400000 1.3960000 -0.69600000 1.3960000 -0.69600000 curveto +1.3960000 -0.69600000 1.3720000 -0.69200000 1.3720000 -0.69200000 curveto +1.2640001 -0.67600002 1.1840000 -0.60399989 1.1480000 -0.49200000 curveto +1.1400000 -0.46800002 1.1400000 -0.45199996 1.1400000 -0.41200000 curveto +1.1400000 -0.36400005 1.1400000 -0.35199997 1.1480000 -0.32400000 curveto +1.1760000 -0.24400008 1.2320001 -0.18799997 1.3200000 -0.15600000 curveto +1.4079999 -0.12400003 1.4960001 -0.14000006 1.5640000 -0.20400000 curveto +1.6359999 -0.26799994 1.6640000 -0.36400010 1.6440000 -0.46800000 curveto +1.5840001 -0.77599969 1.3799997 -1.0120001 1.1160000 -1.0680000 curveto +1.0800000 -1.0760000 0.95999995 -1.0800000 0.91200000 -1.0760000 curveto +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 26.405840 42.752730] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.84400000 -1.0720000 moveto +0.71600013 -1.0600000 0.63999990 -1.0360000 0.54000000 -0.98800000 curveto +0.30400024 -0.87600011 0.11999992 -0.64799974 0.044000000 -0.38400000 curveto +0.0080000360 -0.26400012 -0.0079999880 -0.10799992 0.0040000000 -0.024000000 curveto +0.035999968 0.19599978 0.24400023 0.35999999 0.47200000 0.34800000 curveto +0.66399981 0.33600001 0.81600003 0.17999980 0.84400000 -0.024000000 curveto +0.87599997 -0.25199977 0.70399977 -0.46000002 0.47200000 -0.47600000 curveto +0.45200002 -0.47600000 0.43200000 -0.47600000 0.43200000 -0.48000000 curveto +0.43200000 -0.48000000 0.44000001 -0.50000003 0.44800000 -0.52800000 curveto +0.53599991 -0.77599975 0.68800020 -0.91200001 0.88800000 -0.92400000 curveto +1.2239997 -0.93999998 1.4760001 -0.64799952 1.5360000 -0.17200000 curveto +1.5440000 -0.10000007 1.5440000 0.084000064 1.5360000 0.14800000 curveto +1.4960000 0.47599967 1.3639997 0.76000029 1.1120000 1.0520000 curveto +1.0560001 1.1159999 0.91999992 1.2520001 0.84400000 1.3160000 curveto +0.63200021 1.5039998 0.38399966 1.6800002 0.040000000 1.8920000 curveto +-0.051999908 1.9439999 -0.060000008 1.9520000 -0.068000000 1.9680000 curveto +-0.087999980 2.0080000 -0.071999956 2.0480000 -0.028000000 2.0680000 curveto +-0.0080000200 2.0800000 0.012000020 2.0760000 0.032000000 2.0680000 curveto +0.063999968 2.0480000 0.10400008 2.0320000 0.18800000 1.9920000 curveto +0.77199942 1.7280003 1.2040003 1.4639997 1.5120000 1.1760000 curveto +1.8399997 0.86800031 2.0360000 0.52399963 2.0840000 0.15600000 curveto +2.1479999 -0.31599953 1.9999997 -0.68000021 1.6560000 -0.89200000 curveto +1.4880002 -0.99199990 1.2799998 -1.0560000 1.0360000 -1.0720000 curveto +0.98000006 -1.0760000 0.86799998 -1.0760000 0.84400000 -1.0720000 curveto +2.3920000 -0.69200000 moveto +2.3440000 -0.68400001 2.2880000 -0.63999995 2.2640000 -0.59200000 curveto +2.2320000 -0.53600006 2.2320000 -0.46799994 2.2640000 -0.41200000 curveto +2.2760000 -0.38400003 2.3160000 -0.34399999 2.3440000 -0.33200000 curveto +2.3999999 -0.30000003 2.4680001 -0.30000003 2.5240000 -0.33200000 curveto +2.5520000 -0.34399999 2.5920000 -0.38400003 2.6040000 -0.41200000 curveto +2.6639999 -0.51999989 2.6039999 -0.66000003 2.4800000 -0.68800000 curveto +2.4560000 -0.69599999 2.4200000 -0.69600000 2.3920000 -0.69200000 curveto +2.3920000 0.30800000 moveto +2.3440000 0.31599999 2.2880000 0.36000005 2.2640000 0.40800000 curveto +2.2320000 0.46399994 2.2320000 0.53200006 2.2640000 0.58800000 curveto +2.2760000 0.61599997 2.3160000 0.65600001 2.3440000 0.66800000 curveto +2.3999999 0.69999997 2.4680001 0.69999997 2.5240000 0.66800000 curveto +2.5520000 0.65600001 2.5920000 0.61599997 2.6040000 0.58800000 curveto +2.6639999 0.48000011 2.6039999 0.33999997 2.4800000 0.31200000 curveto +2.4560000 0.30400001 2.4200000 0.30400000 2.3920000 0.30800000 curveto +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 33.786500 27.815690] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.91200000 -1.0760000 moveto +0.64800026 -1.0560000 0.43599985 -0.96799985 0.28400000 -0.81600000 curveto +0.21200007 -0.74400007 0.16399996 -0.67199990 0.12000000 -0.57600000 curveto +0.060000060 -0.46000012 0.027999980 -0.33599985 0.0080000000 -0.18400000 curveto +8.0000000e-09 -0.10400008 8.0000000e-09 0.10000008 0.0080000000 0.18000000 curveto +0.027999980 0.33199985 0.060000060 0.45600012 0.12000000 0.57200000 curveto +0.16399996 0.66799990 0.21200007 0.74000007 0.28400000 0.81200000 curveto +0.42399986 0.95199986 0.60800024 1.0360000 0.84400000 1.0680000 curveto +0.91599993 1.0760000 1.0560000 1.0760000 1.1040000 1.0680000 curveto +1.2799998 1.0280000 1.4240001 0.92399982 1.5360000 0.74800000 curveto +1.5879999 0.66800008 1.6440000 0.54399990 1.6720000 0.44400000 curveto +1.7000000 0.35600009 1.7000000 0.33599997 1.6840000 0.30800000 curveto +1.6480000 0.25600005 1.5640000 0.27200006 1.5480000 0.32800000 curveto +1.5120000 0.45599987 1.5000000 0.49600008 1.4600000 0.57600000 curveto +1.3560001 0.79999978 1.1919998 0.92000000 0.99600000 0.92000000 curveto +0.91600008 0.92000000 0.83199994 0.90399997 0.77600000 0.87600000 curveto +0.63600014 0.81200006 0.57599998 0.68399972 0.55600000 0.40400000 curveto +0.54800001 0.31200009 0.54800001 -0.31600010 0.55600000 -0.41200000 curveto +0.56799999 -0.57599984 0.59200004 -0.68000008 0.63600000 -0.75600000 curveto +0.69199994 -0.85199990 0.78800013 -0.90400002 0.92000000 -0.92000000 curveto +1.0519999 -0.93599998 1.1600001 -0.90799993 1.2560000 -0.84000000 curveto +1.2880000 -0.81600002 1.3440000 -0.76399996 1.3720000 -0.72400000 curveto +1.3720000 -0.72400000 1.3960000 -0.69600000 1.3960000 -0.69600000 curveto +1.3960000 -0.69600000 1.3720000 -0.69200000 1.3720000 -0.69200000 curveto +1.2640001 -0.67600002 1.1840000 -0.60399989 1.1480000 -0.49200000 curveto +1.1400000 -0.46800002 1.1400000 -0.45199996 1.1400000 -0.41200000 curveto +1.1400000 -0.36400005 1.1400000 -0.35199997 1.1480000 -0.32400000 curveto +1.1760000 -0.24400008 1.2320001 -0.18799997 1.3200000 -0.15600000 curveto +1.4079999 -0.12400003 1.4960001 -0.14000006 1.5640000 -0.20400000 curveto +1.6359999 -0.26799994 1.6640000 -0.36400010 1.6440000 -0.46800000 curveto +1.5840001 -0.77599969 1.3799997 -1.0120001 1.1160000 -1.0680000 curveto +1.0800000 -1.0760000 0.95999995 -1.0800000 0.91200000 -1.0760000 curveto +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 26.405840 29.572990] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +1.1800000 -4.9880000 moveto +1.1560000 -4.9760000 1.1359999 -4.9640000 1.0840000 -4.9160000 curveto +0.95600013 -4.7920001 0.83999992 -4.6359998 0.76000000 -4.4720000 curveto +0.68800007 -4.3320001 0.63599998 -4.1599998 0.61200000 -4.0080000 curveto +0.59200002 -3.8920001 0.58800000 -3.8639998 0.59200000 -3.7040000 curveto +0.59200000 -3.2240005 0.65600021 -2.9119995 0.86800000 -2.3640000 curveto +0.89199998 -2.3080001 0.90800000 -2.2600000 0.90400000 -2.2600000 curveto +0.90400000 -2.2560000 0.87199996 -2.2119999 0.83200000 -2.1600000 curveto +0.46000000 -1.6440000 lineto +0.18400028 -1.2320004 0.051999956 -0.90399964 0.0080000000 -0.54800000 curveto +8.0000000e-09 -0.46400008 8.0000000e-09 -0.27999992 0.0080000000 -0.20000000 curveto +0.023999984 -0.084000116 0.056000040 0.044000108 0.096000000 0.15200000 curveto +0.11999998 0.21999993 0.18400004 0.35200006 0.22400000 0.41200000 curveto +0.48399974 0.82799958 0.92000048 1.0720000 1.4040000 1.0720000 curveto +1.4759999 1.0720000 1.5680001 1.0640000 1.6320000 1.0560000 curveto +1.6800000 1.0480000 lineto +1.6800000 1.1600000 lineto +1.6800000 1.3319998 1.6680000 1.5760001 1.6560000 1.6920000 curveto +1.6240000 1.9719997 1.4999998 2.2120001 1.3200000 2.3360000 curveto +1.1760001 2.4359999 0.99599982 2.4599999 0.81600000 2.3960000 curveto +0.72400009 2.3640000 0.61999994 2.2959999 0.56400000 2.2280000 curveto +0.54800000 2.2080000 lineto +0.58800000 2.2120000 lineto +0.81599977 2.2240000 0.99999999 2.0399998 0.98800000 1.8120000 curveto +0.97600001 1.5960002 0.82399980 1.4320000 0.62400000 1.4200000 curveto +0.46800016 1.4160000 0.30799992 1.4920001 0.22400000 1.6240000 curveto +0.16000006 1.7239999 0.14400004 1.8440002 0.18000000 2.0000000 curveto +0.25599992 2.3439997 0.55600038 2.6000000 0.93600000 2.6360000 curveto +1.2519997 2.6680000 1.5320002 2.5119997 1.7080000 2.2000000 curveto +1.7759999 2.0840001 1.8280000 1.9359999 1.8520000 1.7920000 curveto +1.8720000 1.6680001 1.8880000 1.3959997 1.8880000 1.1360000 curveto +1.8880000 0.99600000 lineto +1.9080000 0.98800000 lineto +2.1039998 0.91600007 2.2720001 0.77999981 2.4000000 0.59200000 curveto +2.5879998 0.31200028 2.6279999 -0.044000328 2.5080000 -0.37200000 curveto +2.4840000 -0.43599994 2.4360000 -0.53600006 2.3960000 -0.59600000 curveto +2.3480000 -0.66799993 2.3119999 -0.71200006 2.2520000 -0.77600000 curveto +2.1680001 -0.85599992 2.0839999 -0.91600005 1.9800000 -0.96800000 curveto +1.8520001 -1.0279999 1.7559998 -1.0560000 1.5720000 -1.0760000 curveto +1.5440000 -1.0800000 lineto +1.5240000 -1.1400000 lineto +1.4680001 -1.3239998 1.3679999 -1.6320002 1.2960000 -1.8360000 curveto +1.2600000 -1.9360000 lineto +1.2680000 -1.9480000 lineto +1.3999999 -2.1239998 1.5320001 -2.3240002 1.6200000 -2.4800000 curveto +1.8199998 -2.8319996 1.9240000 -3.1720003 1.9240000 -3.4960000 curveto +1.9240000 -3.9039996 1.6959997 -4.4840004 1.4000000 -4.8440000 curveto +1.3480001 -4.9039999 1.2880000 -4.9640000 1.2640000 -4.9760000 curveto +1.2400000 -4.9920000 1.2000000 -4.9960000 1.1800000 -4.9880000 curveto +1.4800000 -4.2960000 moveto +1.5319999 -4.2160001 1.5720000 -4.1279999 1.5840000 -4.0560000 curveto +1.6080000 -3.9400001 1.6040000 -3.7359998 1.5720000 -3.5680000 curveto +1.5160001 -3.2440003 1.3639997 -2.9079996 1.0840000 -2.5080000 curveto +1.0600000 -2.4720000 lineto +1.0520000 -2.4840000 lineto +1.0400000 -2.5160000 0.95599997 -2.7560001 0.92400000 -2.8480000 curveto +0.83600009 -3.1119997 0.82000001 -3.2000001 0.83200000 -3.3480000 curveto +0.85999997 -3.7159996 1.0400003 -4.0400002 1.3280000 -4.2560000 curveto +1.3640000 -4.2840000 1.4480000 -4.3360000 1.4520000 -4.3360000 curveto +1.4560000 -4.3360000 1.4680000 -4.3200000 1.4800000 -4.2960000 curveto +1.1440000 -1.6520000 moveto +1.2319999 -1.4040002 1.3360000 -1.0720000 1.3280000 -1.0640000 curveto +1.3280000 -1.0640000 1.3080000 -1.0560000 1.2840000 -1.0520000 curveto +1.1960001 -1.0360000 1.0919999 -0.99199996 1.0200000 -0.94800000 curveto +0.81200021 -0.82000013 0.67999996 -0.61999976 0.63600000 -0.37600000 curveto +0.62800001 -0.31200006 0.62800001 -0.17599994 0.64000000 -0.11200000 curveto +0.68799995 0.15999973 0.85200026 0.37200013 1.1120000 0.50400000 curveto +1.1799999 0.53599997 1.2040000 0.53999999 1.2360000 0.53200000 curveto +1.2999999 0.51600002 1.3320000 0.43199994 1.2960000 0.37200000 curveto +1.2840000 0.35600002 1.2760000 0.35199998 1.2440000 0.33600000 curveto +1.1000001 0.25600008 0.99199996 0.13199986 0.95600000 -0.0040000000 curveto +0.92000004 -0.13599987 0.94800008 -0.27600011 1.0280000 -0.38400000 curveto +1.1119999 -0.49599989 1.2520002 -0.56800002 1.4200000 -0.58400000 curveto +1.4400000 -0.58400000 1.4600000 -0.58800000 1.4600000 -0.58400000 curveto +1.4640000 -0.58400000 1.5000000 -0.40399988 1.5240000 -0.28800000 curveto +1.5879999 0.019999692 1.6320000 0.32800028 1.6560000 0.60800000 curveto +1.6680000 0.73599987 1.6720000 0.84000000 1.6720000 0.84400000 curveto +1.6640000 0.84800000 1.5959999 0.85600000 1.5240000 0.86000000 curveto +1.2720003 0.87599998 1.0639998 0.83599989 0.85200000 0.72800000 curveto +0.74000011 0.67200006 0.64799992 0.60799991 0.56400000 0.52000000 curveto +0.44000012 0.39600012 0.36399997 0.26399985 0.33600000 0.11200000 curveto +0.31600002 0.0080001040 0.32400003 -0.17600017 0.35600000 -0.34400000 curveto +0.41999994 -0.64399970 0.55200024 -0.93600036 0.79600000 -1.3000000 curveto +0.89599990 -1.4479999 1.1080000 -1.7360000 1.1120000 -1.7320000 curveto +1.1160000 -1.7320000 1.1280000 -1.6960000 1.1440000 -1.6520000 curveto +1.7520000 -0.54800000 moveto +1.9199998 -0.49200006 2.0520001 -0.38799985 2.1480000 -0.24000000 curveto +2.2719999 -0.056000184 2.3039999 0.17200020 2.2400000 0.37600000 curveto +2.1880001 0.53999984 2.0639999 0.68800008 1.9200000 0.76400000 curveto +1.8800000 0.78400000 lineto +1.8760000 0.78400000 1.8760000 0.73599994 1.8720000 0.68000000 curveto +1.8440000 0.31200037 1.7839999 -0.088000412 1.6920000 -0.50000000 curveto +1.6920000 -0.50000000 1.6760000 -0.56800000 1.6760000 -0.56800000 curveto +1.6760000 -0.56800000 1.6920000 -0.56800000 1.6920000 -0.56800000 curveto +1.7000000 -0.56400000 1.7280000 -0.55599999 1.7520000 -0.54800000 curveto +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 64.140360 44.510030] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +-0.053691003 -2.0000000 moveto +0.053691003 -2.0000000 lineto +0.059956186 -2.0000000 0.064999998 -1.9949562 0.064999998 -1.9886910 curveto +0.064999998 1.3008770 lineto +0.064999998 1.3071422 0.059956186 1.3121860 0.053691003 1.3121860 curveto +-0.053691003 1.3121860 lineto +-0.059956186 1.3121860 -0.064999998 1.3071422 -0.064999998 1.3008770 curveto +-0.064999998 -1.9886910 lineto +-0.064999998 -1.9949562 -0.059956186 -2.0000000 -0.053691003 -2.0000000 curveto +closepath +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 62.055900 27.815690] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +-0.053691003 3.1878140 moveto +0.053691003 3.1878140 lineto +0.059956186 3.1878140 0.064999998 3.1928578 0.064999998 3.1991230 curveto +0.064999998 5.4886910 lineto +0.064999998 5.4949562 0.059956186 5.5000000 0.053691003 5.5000000 curveto +-0.053691003 5.5000000 lineto +-0.059956186 5.5000000 -0.064999998 5.4949562 -0.064999998 5.4886910 curveto +-0.064999998 3.1991230 lineto +-0.064999998 3.1928578 -0.059956186 3.1878140 -0.053691003 3.1878140 curveto +closepath +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 64.140360 27.815690] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +-0.053691003 -3.5000000 moveto +0.053691003 -3.5000000 lineto +0.059956186 -3.5000000 0.064999998 -3.4949562 0.064999998 -3.4886910 curveto +0.064999998 -0.69912299 lineto +0.064999998 -0.69285781 0.059956186 -0.68781400 0.053691003 -0.68781400 curveto +-0.053691003 -0.68781400 lineto +-0.059956186 -0.68781400 -0.064999998 -0.69285781 -0.064999998 -0.69912299 curveto +-0.064999998 -3.4886910 lineto +-0.064999998 -3.4949562 -0.059956186 -3.5000000 -0.053691003 -3.5000000 curveto +closepath +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 61.941680 47.145980] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.71600000 -0.57200000 moveto +0.43200028 -0.53200004 0.17199989 -0.34799976 0.060000000 -0.11200000 curveto +0.016000044 -0.020000092 4.0000000e-09 0.044000096 0.0040000000 0.14000000 curveto +0.0040000000 0.19599994 0.0040000080 0.21200003 0.012000000 0.24400000 curveto +0.063999948 0.43999980 0.23600024 0.56000001 0.47600000 0.57200000 curveto +0.81599966 0.58399999 1.1800001 0.33999969 1.2800000 0.028000000 curveto +1.3000000 -0.035999936 1.3040000 -0.072000072 1.3040000 -0.14400000 curveto +1.3040000 -0.19999994 1.3040000 -0.21600004 1.2960000 -0.25200000 curveto +1.2760000 -0.32399993 1.2319999 -0.40000005 1.1800000 -0.44800000 curveto +1.1160001 -0.50399994 1.0319999 -0.54400002 0.93200000 -0.56400000 curveto +0.88000005 -0.57599999 0.76799995 -0.57600000 0.71600000 -0.57200000 curveto +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 61.941680 33.087590] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.71600000 -0.57200000 moveto +0.43200028 -0.53200004 0.17199989 -0.34799976 0.060000000 -0.11200000 curveto +0.016000044 -0.020000092 4.0000000e-09 0.044000096 0.0040000000 0.14000000 curveto +0.0040000000 0.19599994 0.0040000080 0.21200003 0.012000000 0.24400000 curveto +0.063999948 0.43999980 0.23600024 0.56000001 0.47600000 0.57200000 curveto +0.81599966 0.58399999 1.1800001 0.33999969 1.2800000 0.028000000 curveto +1.3000000 -0.035999936 1.3040000 -0.072000072 1.3040000 -0.14400000 curveto +1.3040000 -0.19999994 1.3040000 -0.21600004 1.2960000 -0.25200000 curveto +1.2760000 -0.32399993 1.2319999 -0.40000005 1.1800000 -0.44800000 curveto +1.1160001 -0.50399994 1.0319999 -0.54400002 0.93200000 -0.56400000 curveto +0.88000005 -0.57599999 0.76799995 -0.57600000 0.71600000 -0.57200000 curveto +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 61.941680 26.937040] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.71600000 -0.57200000 moveto +0.43200028 -0.53200004 0.17199989 -0.34799976 0.060000000 -0.11200000 curveto +0.016000044 -0.020000092 4.0000000e-09 0.044000096 0.0040000000 0.14000000 curveto +0.0040000000 0.19599994 0.0040000080 0.21200003 0.012000000 0.24400000 curveto +0.063999948 0.43999980 0.23600024 0.56000001 0.47600000 0.57200000 curveto +0.81599966 0.58399999 1.1800001 0.33999969 1.2800000 0.028000000 curveto +1.3000000 -0.035999936 1.3040000 -0.072000072 1.3040000 -0.14400000 curveto +1.3040000 -0.19999994 1.3040000 -0.21600004 1.2960000 -0.25200000 curveto +1.2760000 -0.32399993 1.2319999 -0.40000005 1.1800000 -0.44800000 curveto +1.1160001 -0.50399994 1.0319999 -0.54400002 0.93200000 -0.56400000 curveto +0.88000005 -0.57599999 0.76799995 -0.57600000 0.71600000 -0.57200000 curveto +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 55.839270 44.510030] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +-0.053691003 -0.31218600 moveto +0.053691003 -0.31218600 lineto +0.059956186 -0.31218600 0.064999998 -0.30714219 0.064999998 -0.30087701 curveto +0.064999998 2.9886910 lineto +0.064999998 2.9949562 0.059956186 3.0000000 0.053691003 3.0000000 curveto +-0.053691003 3.0000000 lineto +-0.059956186 3.0000000 -0.064999998 2.9949562 -0.064999998 2.9886910 curveto +-0.064999998 -0.30087701 lineto +-0.064999998 -0.30714219 -0.059956186 -0.31218600 -0.053691003 -0.31218600 curveto +closepath +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 55.839270 27.815690] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +-0.053691003 2.6878140 moveto +0.053691003 2.6878140 lineto +0.059956186 2.6878140 0.064999998 2.6928578 0.064999998 2.6991230 curveto +0.064999998 4.9886910 lineto +0.064999998 4.9949562 0.059956186 5.0000000 0.053691003 5.0000000 curveto +-0.053691003 5.0000000 lineto +-0.059956186 5.0000000 -0.064999998 4.9949562 -0.064999998 4.9886910 curveto +-0.064999998 2.6991230 lineto +-0.064999998 2.6928578 -0.059956186 2.6878140 -0.053691003 2.6878140 curveto +closepath +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 57.923740 27.815690] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +-0.053691003 -4.0000000 moveto +0.053691003 -4.0000000 lineto +0.059956186 -4.0000000 0.064999998 -3.9949562 0.064999998 -3.9886910 curveto +0.064999998 -1.6991230 lineto +0.064999998 -1.6928578 0.059956186 -1.6878140 0.053691003 -1.6878140 curveto +-0.053691003 -1.6878140 lineto +-0.059956186 -1.6878140 -0.064999998 -1.6928578 -0.064999998 -1.6991230 curveto +-0.064999998 -3.9886910 lineto +-0.064999998 -3.9949562 -0.059956186 -4.0000000 -0.053691003 -4.0000000 curveto +closepath +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 55.725040 43.631380] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.71600000 -0.57200000 moveto +0.43200028 -0.53200004 0.17199989 -0.34799976 0.060000000 -0.11200000 curveto +0.016000044 -0.020000092 4.0000000e-09 0.044000096 0.0040000000 0.14000000 curveto +0.0040000000 0.19599994 0.0040000080 0.21200003 0.012000000 0.24400000 curveto +0.063999948 0.43999980 0.23600024 0.56000001 0.47600000 0.57200000 curveto +0.81599966 0.58399999 1.1800001 0.33999969 1.2800000 0.028000000 curveto +1.3000000 -0.035999936 1.3040000 -0.072000072 1.3040000 -0.14400000 curveto +1.3040000 -0.19999994 1.3040000 -0.21600004 1.2960000 -0.25200000 curveto +1.2760000 -0.32399993 1.2319999 -0.40000005 1.1800000 -0.44800000 curveto +1.1160001 -0.50399994 1.0319999 -0.54400002 0.93200000 -0.56400000 curveto +0.88000005 -0.57599999 0.76799995 -0.57600000 0.71600000 -0.57200000 curveto +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 55.725040 32.208940] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.71600000 -0.57200000 moveto +0.43200028 -0.53200004 0.17199989 -0.34799976 0.060000000 -0.11200000 curveto +0.016000044 -0.020000092 4.0000000e-09 0.044000096 0.0040000000 0.14000000 curveto +0.0040000000 0.19599994 0.0040000080 0.21200003 0.012000000 0.24400000 curveto +0.063999948 0.43999980 0.23600024 0.56000001 0.47600000 0.57200000 curveto +0.81599966 0.58399999 1.1800001 0.33999969 1.2800000 0.028000000 curveto +1.3000000 -0.035999936 1.3040000 -0.072000072 1.3040000 -0.14400000 curveto +1.3040000 -0.19999994 1.3040000 -0.21600004 1.2960000 -0.25200000 curveto +1.2760000 -0.32399993 1.2319999 -0.40000005 1.1800000 -0.44800000 curveto +1.1160001 -0.50399994 1.0319999 -0.54400002 0.93200000 -0.56400000 curveto +0.88000005 -0.57599999 0.76799995 -0.57600000 0.71600000 -0.57200000 curveto +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 55.725040 25.179740] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.71600000 -0.57200000 moveto +0.43200028 -0.53200004 0.17199989 -0.34799976 0.060000000 -0.11200000 curveto +0.016000044 -0.020000092 4.0000000e-09 0.044000096 0.0040000000 0.14000000 curveto +0.0040000000 0.19599994 0.0040000080 0.21200003 0.012000000 0.24400000 curveto +0.063999948 0.43999980 0.23600024 0.56000001 0.47600000 0.57200000 curveto +0.81599966 0.58399999 1.1800001 0.33999969 1.2800000 0.028000000 curveto +1.3000000 -0.035999936 1.3040000 -0.072000072 1.3040000 -0.14400000 curveto +1.3040000 -0.19999994 1.3040000 -0.21600004 1.2960000 -0.25200000 curveto +1.2760000 -0.32399993 1.2319999 -0.40000005 1.1800000 -0.44800000 curveto +1.1160001 -0.50399994 1.0319999 -0.54400002 0.93200000 -0.56400000 curveto +0.88000005 -0.57599999 0.76799995 -0.57600000 0.71600000 -0.57200000 curveto +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 51.417580 27.815690] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +-0.053691003 2.1878140 moveto +0.053691003 2.1878140 lineto +0.059956186 2.1878140 0.064999998 2.1928578 0.064999998 2.1991230 curveto +0.064999998 4.4886910 lineto +0.064999998 4.4949562 0.059956186 4.5000000 0.053691003 4.5000000 curveto +-0.053691003 4.5000000 lineto +-0.059956186 4.5000000 -0.064999998 4.4949562 -0.064999998 4.4886910 curveto +-0.064999998 2.1991230 lineto +-0.064999998 2.1928578 -0.059956186 2.1878140 -0.053691003 2.1878140 curveto +closepath +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 51.303360 31.330290] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.71600000 -0.57200000 moveto +0.43200028 -0.53200004 0.17199989 -0.34799976 0.060000000 -0.11200000 curveto +0.016000044 -0.020000092 4.0000000e-09 0.044000096 0.0040000000 0.14000000 curveto +0.0040000000 0.19599994 0.0040000080 0.21200003 0.012000000 0.24400000 curveto +0.063999948 0.43999980 0.23600024 0.56000001 0.47600000 0.57200000 curveto +0.81599966 0.58399999 1.1800001 0.33999969 1.2800000 0.028000000 curveto +1.3000000 -0.035999936 1.3040000 -0.072000072 1.3040000 -0.14400000 curveto +1.3040000 -0.19999994 1.3040000 -0.21600004 1.2960000 -0.25200000 curveto +1.2760000 -0.32399993 1.2319999 -0.40000005 1.1800000 -0.44800000 curveto +1.1160001 -0.50399994 1.0319999 -0.54400002 0.93200000 -0.56400000 curveto +0.88000005 -0.57599999 0.76799995 -0.57600000 0.71600000 -0.57200000 curveto +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 46.995900 44.510030] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +-0.053691003 0.18781400 moveto +0.053691003 0.18781400 lineto +0.059956186 0.18781400 0.064999998 0.19285781 0.064999998 0.19912299 curveto +0.064999998 2.9886910 lineto +0.064999998 2.9949562 0.059956186 3.0000000 0.053691003 3.0000000 curveto +-0.053691003 3.0000000 lineto +-0.059956186 3.0000000 -0.064999998 2.9949562 -0.064999998 2.9886910 curveto +-0.064999998 0.19912299 lineto +-0.064999998 0.19285781 -0.059956186 0.18781400 -0.053691003 0.18781400 curveto +closepath +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 46.995900 27.815690] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +-0.053691003 1.6878140 moveto +0.053691003 1.6878140 lineto +0.059956186 1.6878140 0.064999998 1.6928578 0.064999998 1.6991230 curveto +0.064999998 4.1786911 lineto +0.064999998 4.1849562 0.059956186 4.1900001 0.053691003 4.1900001 curveto +-0.053691003 4.1900001 lineto +-0.059956186 4.1900001 -0.064999998 4.1849562 -0.064999998 4.1786911 curveto +-0.064999998 1.6991230 lineto +-0.064999998 1.6928578 -0.059956186 1.6878140 -0.053691003 1.6878140 curveto +closepath +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 49.080380 27.815690] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +-0.053691003 -3.5000000 moveto +0.053691003 -3.5000000 lineto +0.059956186 -3.5000000 0.064999998 -3.4949562 0.064999998 -3.4886910 curveto +0.064999998 -1.1991230 lineto +0.064999998 -1.1928578 0.059956186 -1.1878140 0.053691003 -1.1878140 curveto +-0.053691003 -1.1878140 lineto +-0.059956186 -1.1878140 -0.064999998 -1.1928578 -0.064999998 -1.1991230 curveto +-0.064999998 -3.4886910 lineto +-0.064999998 -3.4949562 -0.059956186 -3.5000000 -0.053691003 -3.5000000 curveto +closepath +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 46.881680 44.510030] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.71600000 -0.57200000 moveto +0.43200028 -0.53200004 0.17199989 -0.34799976 0.060000000 -0.11200000 curveto +0.016000044 -0.020000092 4.0000000e-09 0.044000096 0.0040000000 0.14000000 curveto +0.0040000000 0.19599994 0.0040000080 0.21200003 0.012000000 0.24400000 curveto +0.063999948 0.43999980 0.23600024 0.56000001 0.47600000 0.57200000 curveto +0.81599966 0.58399999 1.1800001 0.33999969 1.2800000 0.028000000 curveto +1.3000000 -0.035999936 1.3040000 -0.072000072 1.3040000 -0.14400000 curveto +1.3040000 -0.19999994 1.3040000 -0.21600004 1.2960000 -0.25200000 curveto +1.2760000 -0.32399993 1.2319999 -0.40000005 1.1800000 -0.44800000 curveto +1.1160001 -0.50399994 1.0319999 -0.54400002 0.93200000 -0.56400000 curveto +0.88000005 -0.57599999 0.76799995 -0.57600000 0.71600000 -0.57200000 curveto +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 46.881680 30.451640] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.71600000 -0.57200000 moveto +0.43200028 -0.53200004 0.17199989 -0.34799976 0.060000000 -0.11200000 curveto +0.016000044 -0.020000092 4.0000000e-09 0.044000096 0.0040000000 0.14000000 curveto +0.0040000000 0.19599994 0.0040000080 0.21200003 0.012000000 0.24400000 curveto +0.063999948 0.43999980 0.23600024 0.56000001 0.47600000 0.57200000 curveto +0.81599966 0.58399999 1.1800001 0.33999969 1.2800000 0.028000000 curveto +1.3000000 -0.035999936 1.3040000 -0.072000072 1.3040000 -0.14400000 curveto +1.3040000 -0.19999994 1.3040000 -0.21600004 1.2960000 -0.25200000 curveto +1.2760000 -0.32399993 1.2319999 -0.40000005 1.1800000 -0.44800000 curveto +1.1160001 -0.50399994 1.0319999 -0.54400002 0.93200000 -0.56400000 curveto +0.88000005 -0.57599999 0.76799995 -0.57600000 0.71600000 -0.57200000 curveto +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 46.881680 26.058390] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.71600000 -0.57200000 moveto +0.43200028 -0.53200004 0.17199989 -0.34799976 0.060000000 -0.11200000 curveto +0.016000044 -0.020000092 4.0000000e-09 0.044000096 0.0040000000 0.14000000 curveto +0.0040000000 0.19599994 0.0040000080 0.21200003 0.012000000 0.24400000 curveto +0.063999948 0.43999980 0.23600024 0.56000001 0.47600000 0.57200000 curveto +0.81599966 0.58399999 1.1800001 0.33999969 1.2800000 0.028000000 curveto +1.3000000 -0.035999936 1.3040000 -0.072000072 1.3040000 -0.14400000 curveto +1.3040000 -0.19999994 1.3040000 -0.21600004 1.2960000 -0.25200000 curveto +1.2760000 -0.32399993 1.2319999 -0.40000005 1.1800000 -0.44800000 curveto +1.1160001 -0.50399994 1.0319999 -0.54400002 0.93200000 -0.56400000 curveto +0.88000005 -0.57599999 0.76799995 -0.57600000 0.71600000 -0.57200000 curveto +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 42.487180 44.510030] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +-0.053691003 -3.0000000 moveto +0.053691003 -3.0000000 lineto +0.059956186 -3.0000000 0.064999998 -2.9949562 0.064999998 -2.9886910 curveto +0.064999998 0.30087701 lineto +0.064999998 0.30714219 0.059956186 0.31218600 0.053691003 0.31218600 curveto +-0.053691003 0.31218600 lineto +-0.059956186 0.31218600 -0.064999998 0.30714219 -0.064999998 0.30087701 curveto +-0.064999998 -2.9886910 lineto +-0.064999998 -2.9949562 -0.059956186 -3.0000000 -0.053691003 -3.0000000 curveto +closepath +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 42.487180 27.815690] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +-0.053691003 -4.0000000 moveto +0.053691003 -4.0000000 lineto +0.059956186 -4.0000000 0.064999998 -3.9949562 0.064999998 -3.9886910 curveto +0.064999998 -1.6991230 lineto +0.064999998 -1.6928578 0.059956186 -1.6878140 0.053691003 -1.6878140 curveto +-0.053691003 -1.6878140 lineto +-0.059956186 -1.6878140 -0.064999998 -1.6928578 -0.064999998 -1.6991230 curveto +-0.064999998 -3.9886910 lineto +-0.064999998 -3.9949562 -0.059956186 -4.0000000 -0.053691003 -4.0000000 curveto +closepath +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 33.786500 44.510030] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.91200000 -1.0760000 moveto +0.64800026 -1.0560000 0.43599985 -0.96799985 0.28400000 -0.81600000 curveto +0.21200007 -0.74400007 0.16399996 -0.67199990 0.12000000 -0.57600000 curveto +0.060000060 -0.46000012 0.027999980 -0.33599985 0.0080000000 -0.18400000 curveto +8.0000000e-09 -0.10400008 8.0000000e-09 0.10000008 0.0080000000 0.18000000 curveto +0.027999980 0.33199985 0.060000060 0.45600012 0.12000000 0.57200000 curveto +0.16399996 0.66799990 0.21200007 0.74000007 0.28400000 0.81200000 curveto +0.42399986 0.95199986 0.60800024 1.0360000 0.84400000 1.0680000 curveto +0.91599993 1.0760000 1.0560000 1.0760000 1.1040000 1.0680000 curveto +1.2799998 1.0280000 1.4240001 0.92399982 1.5360000 0.74800000 curveto +1.5879999 0.66800008 1.6440000 0.54399990 1.6720000 0.44400000 curveto +1.7000000 0.35600009 1.7000000 0.33599997 1.6840000 0.30800000 curveto +1.6480000 0.25600005 1.5640000 0.27200006 1.5480000 0.32800000 curveto +1.5120000 0.45599987 1.5000000 0.49600008 1.4600000 0.57600000 curveto +1.3560001 0.79999978 1.1919998 0.92000000 0.99600000 0.92000000 curveto +0.91600008 0.92000000 0.83199994 0.90399997 0.77600000 0.87600000 curveto +0.63600014 0.81200006 0.57599998 0.68399972 0.55600000 0.40400000 curveto +0.54800001 0.31200009 0.54800001 -0.31600010 0.55600000 -0.41200000 curveto +0.56799999 -0.57599984 0.59200004 -0.68000008 0.63600000 -0.75600000 curveto +0.69199994 -0.85199990 0.78800013 -0.90400002 0.92000000 -0.92000000 curveto +1.0519999 -0.93599998 1.1600001 -0.90799993 1.2560000 -0.84000000 curveto +1.2880000 -0.81600002 1.3440000 -0.76399996 1.3720000 -0.72400000 curveto +1.3720000 -0.72400000 1.3960000 -0.69600000 1.3960000 -0.69600000 curveto +1.3960000 -0.69600000 1.3720000 -0.69200000 1.3720000 -0.69200000 curveto +1.2640001 -0.67600002 1.1840000 -0.60399989 1.1480000 -0.49200000 curveto +1.1400000 -0.46800002 1.1400000 -0.45199996 1.1400000 -0.41200000 curveto +1.1400000 -0.36400005 1.1400000 -0.35199997 1.1480000 -0.32400000 curveto +1.1760000 -0.24400008 1.2320001 -0.18799997 1.3200000 -0.15600000 curveto +1.4079999 -0.12400003 1.4960001 -0.14000006 1.5640000 -0.20400000 curveto +1.6359999 -0.26799994 1.6640000 -0.36400010 1.6440000 -0.46800000 curveto +1.5840001 -0.77599969 1.3799997 -1.0120001 1.1160000 -1.0680000 curveto +1.0800000 -1.0760000 0.95999995 -1.0800000 0.91200000 -1.0760000 curveto +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 26.405840 42.752730] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.84400000 -1.0720000 moveto +0.71600013 -1.0600000 0.63999990 -1.0360000 0.54000000 -0.98800000 curveto +0.30400024 -0.87600011 0.11999992 -0.64799974 0.044000000 -0.38400000 curveto +0.0080000360 -0.26400012 -0.0079999880 -0.10799992 0.0040000000 -0.024000000 curveto +0.035999968 0.19599978 0.24400023 0.35999999 0.47200000 0.34800000 curveto +0.66399981 0.33600001 0.81600003 0.17999980 0.84400000 -0.024000000 curveto +0.87599997 -0.25199977 0.70399977 -0.46000002 0.47200000 -0.47600000 curveto +0.45200002 -0.47600000 0.43200000 -0.47600000 0.43200000 -0.48000000 curveto +0.43200000 -0.48000000 0.44000001 -0.50000003 0.44800000 -0.52800000 curveto +0.53599991 -0.77599975 0.68800020 -0.91200001 0.88800000 -0.92400000 curveto +1.2239997 -0.93999998 1.4760001 -0.64799952 1.5360000 -0.17200000 curveto +1.5440000 -0.10000007 1.5440000 0.084000064 1.5360000 0.14800000 curveto +1.4960000 0.47599967 1.3639997 0.76000029 1.1120000 1.0520000 curveto +1.0560001 1.1159999 0.91999992 1.2520001 0.84400000 1.3160000 curveto +0.63200021 1.5039998 0.38399966 1.6800002 0.040000000 1.8920000 curveto +-0.051999908 1.9439999 -0.060000008 1.9520000 -0.068000000 1.9680000 curveto +-0.087999980 2.0080000 -0.071999956 2.0480000 -0.028000000 2.0680000 curveto +-0.0080000200 2.0800000 0.012000020 2.0760000 0.032000000 2.0680000 curveto +0.063999968 2.0480000 0.10400008 2.0320000 0.18800000 1.9920000 curveto +0.77199942 1.7280003 1.2040003 1.4639997 1.5120000 1.1760000 curveto +1.8399997 0.86800031 2.0360000 0.52399963 2.0840000 0.15600000 curveto +2.1479999 -0.31599953 1.9999997 -0.68000021 1.6560000 -0.89200000 curveto +1.4880002 -0.99199990 1.2799998 -1.0560000 1.0360000 -1.0720000 curveto +0.98000006 -1.0760000 0.86799998 -1.0760000 0.84400000 -1.0720000 curveto +2.3920000 -0.69200000 moveto +2.3440000 -0.68400001 2.2880000 -0.63999995 2.2640000 -0.59200000 curveto +2.2320000 -0.53600006 2.2320000 -0.46799994 2.2640000 -0.41200000 curveto +2.2760000 -0.38400003 2.3160000 -0.34399999 2.3440000 -0.33200000 curveto +2.3999999 -0.30000003 2.4680001 -0.30000003 2.5240000 -0.33200000 curveto +2.5520000 -0.34399999 2.5920000 -0.38400003 2.6040000 -0.41200000 curveto +2.6639999 -0.51999989 2.6039999 -0.66000003 2.4800000 -0.68800000 curveto +2.4560000 -0.69599999 2.4200000 -0.69600000 2.3920000 -0.69200000 curveto +2.3920000 0.30800000 moveto +2.3440000 0.31599999 2.2880000 0.36000005 2.2640000 0.40800000 curveto +2.2320000 0.46399994 2.2320000 0.53200006 2.2640000 0.58800000 curveto +2.2760000 0.61599997 2.3160000 0.65600001 2.3440000 0.66800000 curveto +2.3999999 0.69999997 2.4680001 0.69999997 2.5240000 0.66800000 curveto +2.5520000 0.65600001 2.5920000 0.61599997 2.6040000 0.58800000 curveto +2.6639999 0.48000011 2.6039999 0.33999997 2.4800000 0.31200000 curveto +2.4560000 0.30400001 2.4200000 0.30400000 2.3920000 0.30800000 curveto +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 40.288490 45.388680] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.71600000 -0.57200000 moveto +0.43200028 -0.53200004 0.17199989 -0.34799976 0.060000000 -0.11200000 curveto +0.016000044 -0.020000092 4.0000000e-09 0.044000096 0.0040000000 0.14000000 curveto +0.0040000000 0.19599994 0.0040000080 0.21200003 0.012000000 0.24400000 curveto +0.063999948 0.43999980 0.23600024 0.56000001 0.47600000 0.57200000 curveto +0.81599966 0.58399999 1.1800001 0.33999969 1.2800000 0.028000000 curveto +1.3000000 -0.035999936 1.3040000 -0.072000072 1.3040000 -0.14400000 curveto +1.3040000 -0.19999994 1.3040000 -0.21600004 1.2960000 -0.25200000 curveto +1.2760000 -0.32399993 1.2319999 -0.40000005 1.1800000 -0.44800000 curveto +1.1160001 -0.50399994 1.0319999 -0.54400002 0.93200000 -0.56400000 curveto +0.88000005 -0.57599999 0.76799995 -0.57600000 0.71600000 -0.57200000 curveto +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 33.786500 27.815690] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.91200000 -1.0760000 moveto +0.64800026 -1.0560000 0.43599985 -0.96799985 0.28400000 -0.81600000 curveto +0.21200007 -0.74400007 0.16399996 -0.67199990 0.12000000 -0.57600000 curveto +0.060000060 -0.46000012 0.027999980 -0.33599985 0.0080000000 -0.18400000 curveto +8.0000000e-09 -0.10400008 8.0000000e-09 0.10000008 0.0080000000 0.18000000 curveto +0.027999980 0.33199985 0.060000060 0.45600012 0.12000000 0.57200000 curveto +0.16399996 0.66799990 0.21200007 0.74000007 0.28400000 0.81200000 curveto +0.42399986 0.95199986 0.60800024 1.0360000 0.84400000 1.0680000 curveto +0.91599993 1.0760000 1.0560000 1.0760000 1.1040000 1.0680000 curveto +1.2799998 1.0280000 1.4240001 0.92399982 1.5360000 0.74800000 curveto +1.5879999 0.66800008 1.6440000 0.54399990 1.6720000 0.44400000 curveto +1.7000000 0.35600009 1.7000000 0.33599997 1.6840000 0.30800000 curveto +1.6480000 0.25600005 1.5640000 0.27200006 1.5480000 0.32800000 curveto +1.5120000 0.45599987 1.5000000 0.49600008 1.4600000 0.57600000 curveto +1.3560001 0.79999978 1.1919998 0.92000000 0.99600000 0.92000000 curveto +0.91600008 0.92000000 0.83199994 0.90399997 0.77600000 0.87600000 curveto +0.63600014 0.81200006 0.57599998 0.68399972 0.55600000 0.40400000 curveto +0.54800001 0.31200009 0.54800001 -0.31600010 0.55600000 -0.41200000 curveto +0.56799999 -0.57599984 0.59200004 -0.68000008 0.63600000 -0.75600000 curveto +0.69199994 -0.85199990 0.78800013 -0.90400002 0.92000000 -0.92000000 curveto +1.0519999 -0.93599998 1.1600001 -0.90799993 1.2560000 -0.84000000 curveto +1.2880000 -0.81600002 1.3440000 -0.76399996 1.3720000 -0.72400000 curveto +1.3720000 -0.72400000 1.3960000 -0.69600000 1.3960000 -0.69600000 curveto +1.3960000 -0.69600000 1.3720000 -0.69200000 1.3720000 -0.69200000 curveto +1.2640001 -0.67600002 1.1840000 -0.60399989 1.1480000 -0.49200000 curveto +1.1400000 -0.46800002 1.1400000 -0.45199996 1.1400000 -0.41200000 curveto +1.1400000 -0.36400005 1.1400000 -0.35199997 1.1480000 -0.32400000 curveto +1.1760000 -0.24400008 1.2320001 -0.18799997 1.3200000 -0.15600000 curveto +1.4079999 -0.12400003 1.4960001 -0.14000006 1.5640000 -0.20400000 curveto +1.6359999 -0.26799994 1.6640000 -0.36400010 1.6440000 -0.46800000 curveto +1.5840001 -0.77599969 1.3799997 -1.0120001 1.1160000 -1.0680000 curveto +1.0800000 -1.0760000 0.95999995 -1.0800000 0.91200000 -1.0760000 curveto +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 26.405840 29.572990] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +1.1800000 -4.9880000 moveto +1.1560000 -4.9760000 1.1359999 -4.9640000 1.0840000 -4.9160000 curveto +0.95600013 -4.7920001 0.83999992 -4.6359998 0.76000000 -4.4720000 curveto +0.68800007 -4.3320001 0.63599998 -4.1599998 0.61200000 -4.0080000 curveto +0.59200002 -3.8920001 0.58800000 -3.8639998 0.59200000 -3.7040000 curveto +0.59200000 -3.2240005 0.65600021 -2.9119995 0.86800000 -2.3640000 curveto +0.89199998 -2.3080001 0.90800000 -2.2600000 0.90400000 -2.2600000 curveto +0.90400000 -2.2560000 0.87199996 -2.2119999 0.83200000 -2.1600000 curveto +0.46000000 -1.6440000 lineto +0.18400028 -1.2320004 0.051999956 -0.90399964 0.0080000000 -0.54800000 curveto +8.0000000e-09 -0.46400008 8.0000000e-09 -0.27999992 0.0080000000 -0.20000000 curveto +0.023999984 -0.084000116 0.056000040 0.044000108 0.096000000 0.15200000 curveto +0.11999998 0.21999993 0.18400004 0.35200006 0.22400000 0.41200000 curveto +0.48399974 0.82799958 0.92000048 1.0720000 1.4040000 1.0720000 curveto +1.4759999 1.0720000 1.5680001 1.0640000 1.6320000 1.0560000 curveto +1.6800000 1.0480000 lineto +1.6800000 1.1600000 lineto +1.6800000 1.3319998 1.6680000 1.5760001 1.6560000 1.6920000 curveto +1.6240000 1.9719997 1.4999998 2.2120001 1.3200000 2.3360000 curveto +1.1760001 2.4359999 0.99599982 2.4599999 0.81600000 2.3960000 curveto +0.72400009 2.3640000 0.61999994 2.2959999 0.56400000 2.2280000 curveto +0.54800000 2.2080000 lineto +0.58800000 2.2120000 lineto +0.81599977 2.2240000 0.99999999 2.0399998 0.98800000 1.8120000 curveto +0.97600001 1.5960002 0.82399980 1.4320000 0.62400000 1.4200000 curveto +0.46800016 1.4160000 0.30799992 1.4920001 0.22400000 1.6240000 curveto +0.16000006 1.7239999 0.14400004 1.8440002 0.18000000 2.0000000 curveto +0.25599992 2.3439997 0.55600038 2.6000000 0.93600000 2.6360000 curveto +1.2519997 2.6680000 1.5320002 2.5119997 1.7080000 2.2000000 curveto +1.7759999 2.0840001 1.8280000 1.9359999 1.8520000 1.7920000 curveto +1.8720000 1.6680001 1.8880000 1.3959997 1.8880000 1.1360000 curveto +1.8880000 0.99600000 lineto +1.9080000 0.98800000 lineto +2.1039998 0.91600007 2.2720001 0.77999981 2.4000000 0.59200000 curveto +2.5879998 0.31200028 2.6279999 -0.044000328 2.5080000 -0.37200000 curveto +2.4840000 -0.43599994 2.4360000 -0.53600006 2.3960000 -0.59600000 curveto +2.3480000 -0.66799993 2.3119999 -0.71200006 2.2520000 -0.77600000 curveto +2.1680001 -0.85599992 2.0839999 -0.91600005 1.9800000 -0.96800000 curveto +1.8520001 -1.0279999 1.7559998 -1.0560000 1.5720000 -1.0760000 curveto +1.5440000 -1.0800000 lineto +1.5240000 -1.1400000 lineto +1.4680001 -1.3239998 1.3679999 -1.6320002 1.2960000 -1.8360000 curveto +1.2600000 -1.9360000 lineto +1.2680000 -1.9480000 lineto +1.3999999 -2.1239998 1.5320001 -2.3240002 1.6200000 -2.4800000 curveto +1.8199998 -2.8319996 1.9240000 -3.1720003 1.9240000 -3.4960000 curveto +1.9240000 -3.9039996 1.6959997 -4.4840004 1.4000000 -4.8440000 curveto +1.3480001 -4.9039999 1.2880000 -4.9640000 1.2640000 -4.9760000 curveto +1.2400000 -4.9920000 1.2000000 -4.9960000 1.1800000 -4.9880000 curveto +1.4800000 -4.2960000 moveto +1.5319999 -4.2160001 1.5720000 -4.1279999 1.5840000 -4.0560000 curveto +1.6080000 -3.9400001 1.6040000 -3.7359998 1.5720000 -3.5680000 curveto +1.5160001 -3.2440003 1.3639997 -2.9079996 1.0840000 -2.5080000 curveto +1.0600000 -2.4720000 lineto +1.0520000 -2.4840000 lineto +1.0400000 -2.5160000 0.95599997 -2.7560001 0.92400000 -2.8480000 curveto +0.83600009 -3.1119997 0.82000001 -3.2000001 0.83200000 -3.3480000 curveto +0.85999997 -3.7159996 1.0400003 -4.0400002 1.3280000 -4.2560000 curveto +1.3640000 -4.2840000 1.4480000 -4.3360000 1.4520000 -4.3360000 curveto +1.4560000 -4.3360000 1.4680000 -4.3200000 1.4800000 -4.2960000 curveto +1.1440000 -1.6520000 moveto +1.2319999 -1.4040002 1.3360000 -1.0720000 1.3280000 -1.0640000 curveto +1.3280000 -1.0640000 1.3080000 -1.0560000 1.2840000 -1.0520000 curveto +1.1960001 -1.0360000 1.0919999 -0.99199996 1.0200000 -0.94800000 curveto +0.81200021 -0.82000013 0.67999996 -0.61999976 0.63600000 -0.37600000 curveto +0.62800001 -0.31200006 0.62800001 -0.17599994 0.64000000 -0.11200000 curveto +0.68799995 0.15999973 0.85200026 0.37200013 1.1120000 0.50400000 curveto +1.1799999 0.53599997 1.2040000 0.53999999 1.2360000 0.53200000 curveto +1.2999999 0.51600002 1.3320000 0.43199994 1.2960000 0.37200000 curveto +1.2840000 0.35600002 1.2760000 0.35199998 1.2440000 0.33600000 curveto +1.1000001 0.25600008 0.99199996 0.13199986 0.95600000 -0.0040000000 curveto +0.92000004 -0.13599987 0.94800008 -0.27600011 1.0280000 -0.38400000 curveto +1.1119999 -0.49599989 1.2520002 -0.56800002 1.4200000 -0.58400000 curveto +1.4400000 -0.58400000 1.4600000 -0.58800000 1.4600000 -0.58400000 curveto +1.4640000 -0.58400000 1.5000000 -0.40399988 1.5240000 -0.28800000 curveto +1.5879999 0.019999692 1.6320000 0.32800028 1.6560000 0.60800000 curveto +1.6680000 0.73599987 1.6720000 0.84000000 1.6720000 0.84400000 curveto +1.6640000 0.84800000 1.5959999 0.85600000 1.5240000 0.86000000 curveto +1.2720003 0.87599998 1.0639998 0.83599989 0.85200000 0.72800000 curveto +0.74000011 0.67200006 0.64799992 0.60799991 0.56400000 0.52000000 curveto +0.44000012 0.39600012 0.36399997 0.26399985 0.33600000 0.11200000 curveto +0.31600002 0.0080001040 0.32400003 -0.17600017 0.35600000 -0.34400000 curveto +0.41999994 -0.64399970 0.55200024 -0.93600036 0.79600000 -1.3000000 curveto +0.89599990 -1.4479999 1.1080000 -1.7360000 1.1120000 -1.7320000 curveto +1.1160000 -1.7320000 1.1280000 -1.6960000 1.1440000 -1.6520000 curveto +1.7520000 -0.54800000 moveto +1.9199998 -0.49200006 2.0520001 -0.38799985 2.1480000 -0.24000000 curveto +2.2719999 -0.056000184 2.3039999 0.17200020 2.2400000 0.37600000 curveto +2.1880001 0.53999984 2.0639999 0.68800008 1.9200000 0.76400000 curveto +1.8800000 0.78400000 lineto +1.8760000 0.78400000 1.8760000 0.73599994 1.8720000 0.68000000 curveto +1.8440000 0.31200037 1.7839999 -0.088000412 1.6920000 -0.50000000 curveto +1.6920000 -0.50000000 1.6760000 -0.56800000 1.6760000 -0.56800000 curveto +1.6760000 -0.56800000 1.6920000 -0.56800000 1.6920000 -0.56800000 curveto +1.7000000 -0.56400000 1.7280000 -0.55599999 1.7520000 -0.54800000 curveto +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 40.288490 25.179740] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.71600000 -0.57200000 moveto +0.43200028 -0.53200004 0.17199989 -0.34799976 0.060000000 -0.11200000 curveto +0.016000044 -0.020000092 4.0000000e-09 0.044000096 0.0040000000 0.14000000 curveto +0.0040000000 0.19599994 0.0040000080 0.21200003 0.012000000 0.24400000 curveto +0.063999948 0.43999980 0.23600024 0.56000001 0.47600000 0.57200000 curveto +0.81599966 0.58399999 1.1800001 0.33999969 1.2800000 0.028000000 curveto +1.3000000 -0.035999936 1.3040000 -0.072000072 1.3040000 -0.14400000 curveto +1.3040000 -0.19999994 1.3040000 -0.21600004 1.2960000 -0.25200000 curveto +1.2760000 -0.32399993 1.2319999 -0.40000005 1.1800000 -0.44800000 curveto +1.1160001 -0.50399994 1.0319999 -0.54400002 0.93200000 -0.56400000 curveto +0.88000005 -0.57599999 0.76799995 -0.57600000 0.71600000 -0.57200000 curveto +fill +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 24.718840 36.162860] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.014136244 -6.8000002 moveto +0.14586375 -6.8000002 lineto +0.15369523 -6.8000002 0.16000000 -6.7936954 0.16000000 -6.7858639 curveto +0.16000000 6.7858639 lineto +0.16000000 6.7936954 0.15369523 6.8000002 0.14586375 6.8000002 curveto +0.014136244 6.8000002 lineto +0.0063047647 6.8000002 0.0000000 6.7936954 0.0000000 6.7858639 curveto +0.0000000 -6.7858639 lineto +0.0000000 -6.7936954 0.0063047647 -6.8000002 0.014136244 -6.8000002 curveto +closepath +fill +grestore +grestore +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 578.75540 111.50110] concat +grestore +gsave [1.7572990 0.0000000 0.0000000 1.7572990 675.79100 389.23080] concat +grestore +gsave [0.96912200 0.0000000 0.0000000 1.0318620 0.0000000 0.0000000] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +268.55099 81.355152 moveto +262.06179 98.465678 lineto +261.94538 98.776073 261.80959 98.950670 261.65440 98.989470 curveto +261.65440 98.989470 lineto +261.57679 99.008869 261.47979 99.018569 261.36340 99.018570 curveto +261.07240 99.018569 260.85900 98.882771 260.72322 98.611176 curveto +260.70381 98.552977 260.67471 98.475378 260.63592 98.378380 curveto +253.88482 80.511265 lineto +253.67142 79.948693 253.32223 79.609199 252.83724 79.492782 curveto +252.56564 79.434601 251.96425 79.405502 251.03307 79.405483 curveto +251.03307 78.503397 lineto +253.12823 78.561616 254.36011 78.590716 254.72871 78.590696 curveto +256.80447 78.590716 258.19155 78.561616 258.88994 78.503397 curveto +258.88994 79.405483 lineto +257.29916 79.405502 256.50378 79.686797 256.50378 80.249370 curveto +256.50378 80.326986 256.56198 80.501583 256.67838 80.773161 curveto +262.23639 95.468426 lineto +267.56161 81.442450 lineto +267.65859 81.151472 267.70709 80.957476 267.70710 80.860460 curveto +267.70709 80.239688 267.32879 79.803195 266.57222 79.550981 curveto +266.54312 79.550981 lineto +266.27151 79.454001 265.95142 79.405502 265.58284 79.405483 curveto +265.58284 78.503397 lineto +267.09600 78.561616 268.20178 78.590716 268.90018 78.590696 curveto +269.88955 78.590716 270.83043 78.561616 271.72284 78.503397 curveto +271.72284 79.405483 lineto +270.09325 79.424902 269.03596 80.074791 268.55099 81.355152 curveto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +286.01071 92.151079 moveto +286.01071 92.151079 lineto +286.01070 94.149252 285.27351 95.798224 283.79915 97.098000 curveto +282.57696 98.164983 281.16078 98.698474 279.55061 98.698475 curveto +277.68824 98.698474 276.11687 98.000086 274.83649 96.603308 curveto +273.69191 95.342331 273.11962 93.858257 273.11962 92.151079 curveto +273.11962 90.172319 273.82770 88.503947 275.24388 87.145959 curveto +276.46606 85.943191 277.91134 85.341801 279.57971 85.341788 curveto +281.46148 85.341801 283.04255 86.088689 284.32294 87.582452 curveto +285.44811 88.882241 286.01070 90.405115 286.01071 92.151079 curveto +279.57971 97.970986 moveto +279.57971 97.970986 lineto +280.87948 97.970987 281.90767 97.427796 282.66427 96.341412 curveto +282.95526 95.817621 lineto +283.38204 94.964038 283.59544 93.664260 283.59545 91.918283 curveto +283.59544 90.055921 283.34324 88.707644 282.83886 87.873448 curveto +282.00467 86.670679 280.90858 86.040189 279.55061 85.981978 curveto +278.34783 85.981990 277.35844 86.466982 276.58246 87.436955 curveto +276.44666 87.592163 276.33026 87.757060 276.23327 87.931647 curveto +275.76767 88.785243 275.53488 90.114120 275.53488 91.918283 curveto +275.53488 93.800058 275.77737 95.167734 276.26237 96.021317 curveto +277.07715 97.282298 278.18293 97.932187 279.57971 97.970986 curveto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +292.00522 85.516385 moveto +292.00522 85.516385 lineto +292.00522 96.195915 lineto +292.00521 96.797307 292.12161 97.165900 292.35441 97.301697 curveto +292.35441 97.301697 lineto +292.58720 97.418096 293.14979 97.476295 294.04218 97.476294 curveto +294.04218 98.378380 lineto +292.06341 98.320181 291.05463 98.291081 291.01583 98.291081 curveto +290.74423 98.291081 289.67725 98.320181 287.81488 98.378380 curveto +287.81488 97.476294 lineto +288.95946 97.476295 289.62875 97.388997 289.82275 97.214398 curveto +289.88095 97.156199 lineto +290.01675 97.001003 290.08464 96.671209 290.08465 96.166815 curveto +290.08465 88.339040 lineto +290.08464 87.563063 289.92945 87.097471 289.61905 86.942263 curveto +289.58996 86.942263 lineto +289.58996 86.942263 lineto +289.56086 86.913163 lineto +289.56086 86.913163 lineto +289.30866 86.796776 288.76547 86.738577 287.93128 86.738566 curveto +287.93128 85.836480 lineto +292.00522 85.516385 lineto +292.12161 80.453066 moveto +292.12161 81.170872 291.80152 81.646164 291.16133 81.878943 curveto +290.96733 81.956559 290.77333 81.995358 290.57934 81.995342 curveto +289.90035 81.995358 289.42506 81.684963 289.15346 81.064157 curveto +289.15346 81.035057 lineto +289.07586 80.841078 289.03706 80.647081 289.03706 80.453066 curveto +289.03706 79.851694 289.30866 79.405502 289.85185 79.114488 curveto +290.06524 78.978709 290.30774 78.910810 290.57934 78.910791 curveto +291.23892 78.910810 291.70452 79.201805 291.97612 79.783777 curveto +292.07311 79.997192 292.12161 80.220288 292.12161 80.453066 curveto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +305.37190 87.145959 moveto +304.67351 86.428183 303.63562 86.069289 302.25825 86.069277 curveto +301.03607 86.069289 300.05638 86.651279 299.31920 87.815249 curveto +298.65961 88.862841 298.32981 90.269318 298.32982 92.034681 curveto +298.32981 94.828240 299.16400 96.661509 300.83238 97.534493 curveto +301.35616 97.825489 301.88965 97.970987 302.43285 97.970986 curveto +304.33401 97.970987 305.60469 96.952504 306.24489 94.915535 curveto +306.30308 94.721542 306.42918 94.624544 306.62318 94.624540 curveto +306.87537 94.624544 307.00147 94.721542 307.00148 94.915535 curveto +307.00147 95.284132 306.78807 95.807923 306.36129 96.486910 curveto +305.41069 97.961287 304.01392 98.698474 302.17096 98.698475 curveto +300.34738 98.698474 298.80511 97.980687 297.54413 96.545109 curveto +296.45774 95.284132 295.91455 93.800058 295.91456 92.092880 curveto +295.91455 90.094720 296.60324 88.426349 297.98062 87.087760 curveto +299.16400 85.923791 300.58017 85.341801 302.22915 85.341788 curveto +303.83932 85.341801 305.07120 85.778294 305.92480 86.651267 curveto +306.42918 87.175070 306.68137 87.776460 306.68138 88.455438 curveto +306.68137 89.192636 306.36128 89.638828 305.72110 89.794017 curveto +305.60469 89.813425 305.47859 89.823125 305.34280 89.823117 curveto +304.66381 89.823125 304.23701 89.512730 304.06242 88.891931 curveto +304.02362 88.775543 304.00422 88.639745 304.00423 88.484538 curveto +304.00422 87.786160 304.34371 87.359367 305.02271 87.204158 curveto +305.13910 87.165370 305.25550 87.145971 305.37190 87.145959 curveto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +319.17554 91.656387 moveto +319.17554 91.656387 lineto +311.05677 91.656387 lineto +311.05677 93.635160 311.34776 95.090136 311.92976 96.021317 curveto +312.86094 97.224099 313.95702 97.873988 315.21800 97.970986 curveto +316.55657 97.970987 317.63325 97.427796 318.44805 96.341412 curveto +318.73904 95.953421 318.97183 95.497529 319.14644 94.973734 curveto +319.20463 94.702142 319.33073 94.566345 319.52473 94.566341 curveto +319.77692 94.566345 319.90302 94.682743 319.90303 94.915535 curveto +319.90302 95.342331 319.63142 95.924321 319.08824 96.661507 curveto +318.29284 97.747891 317.24526 98.397779 315.94549 98.611176 curveto +315.65449 98.669375 315.35379 98.698474 315.04341 98.698475 curveto +313.21983 98.698474 311.66786 98.000086 310.38748 96.603308 curveto +309.22350 95.322932 308.64151 93.780658 308.64151 91.976482 curveto +308.64151 89.958923 309.33990 88.290551 310.73667 86.971362 curveto +311.86185 85.884992 313.18103 85.341801 314.69421 85.341788 curveto +316.88637 85.341801 318.41894 86.272985 319.29194 88.135344 curveto +319.69932 89.008339 319.90302 89.978322 319.90303 91.045297 curveto +319.90302 91.375099 319.83512 91.569095 319.69933 91.627288 curveto +319.64112 91.646694 319.46652 91.656394 319.17554 91.656387 curveto +311.08587 91.045297 moveto +311.08587 91.045297 lineto +317.98246 91.045297 lineto +317.98245 89.202336 317.57506 87.815259 316.76028 86.884064 curveto +316.21708 86.282685 315.52839 85.981990 314.69421 85.981978 curveto +313.70482 85.981990 312.87064 86.437883 312.19165 87.349656 curveto +311.51266 88.222652 311.14406 89.454531 311.08587 91.045297 curveto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +326.78097 92.733070 moveto +326.78097 92.733070 lineto +325.11260 92.403281 324.01652 92.083187 323.49273 91.772785 curveto +323.29873 91.675794 323.11443 91.549696 322.93984 91.394491 curveto +322.10565 90.715510 321.68856 89.891024 321.68856 88.921031 curveto +321.68856 87.563063 322.28994 86.573680 323.49273 85.952878 curveto +324.24931 85.545498 325.19990 85.341801 326.34448 85.341788 curveto +327.43086 85.341801 328.34264 85.613397 329.07984 86.156575 curveto +329.29323 85.981990 329.45812 85.826793 329.57453 85.690983 curveto +329.82672 85.458199 330.02071 85.341801 330.15652 85.341788 curveto +330.35051 85.516398 330.45721 85.749194 330.47662 86.040177 curveto +330.47662 88.979230 lineto +330.47661 89.386633 330.41841 89.609729 330.30202 89.648519 curveto +330.27292 89.648519 lineto +330.24382 89.677619 lineto +330.09832 89.677619 lineto +329.88492 89.677628 329.76852 89.590329 329.74913 89.415723 curveto +329.61332 87.456365 328.80823 86.311785 327.33387 85.981978 curveto +327.02346 85.923791 326.69367 85.894692 326.34448 85.894679 curveto +324.52091 85.894692 323.45393 86.457282 323.14353 87.582452 curveto +323.10473 87.757060 323.08533 87.931657 323.08533 88.106244 curveto +323.08533 89.095637 323.83222 89.794026 325.32600 90.201410 curveto +325.61699 90.279017 326.06318 90.376016 326.66458 90.492406 curveto +328.06135 90.764009 329.06043 91.142303 329.66183 91.627288 curveto +329.77822 91.704893 329.88492 91.792192 329.98192 91.889184 curveto +330.79670 92.703976 331.20409 93.625461 331.20410 94.653639 curveto +331.20409 96.302615 330.52511 97.466595 329.16714 98.145584 curveto +328.42994 98.514178 327.54726 98.698474 326.51908 98.698475 curveto +325.25809 98.698474 324.19111 98.281381 323.31813 97.447195 curveto +322.73614 98.116484 lineto +322.34814 98.504478 322.10565 98.698474 322.00865 98.698475 curveto +321.81465 98.523877 321.70795 98.291081 321.68856 98.000086 curveto +321.68856 94.158947 lineto +321.68856 93.732159 321.75645 93.499363 321.89225 93.460558 curveto +321.89225 93.460558 lineto +321.92135 93.431459 lineto +322.06685 93.431459 lineto +322.26085 93.431464 322.38694 93.538162 322.44514 93.751554 curveto +322.44514 93.790358 322.45484 93.848557 322.47424 93.926151 curveto +322.97863 96.176517 323.93892 97.505395 325.35510 97.912787 curveto +325.70429 98.009786 326.09228 98.058285 326.51908 98.058285 curveto +328.26504 98.058285 329.32233 97.447196 329.69093 96.225014 curveto +329.76852 95.972821 329.80732 95.701225 329.80733 95.410227 curveto +329.80732 93.994054 328.79853 93.101669 326.78097 92.733070 curveto +fill +grestore +grestore +gsave [0.96912200 0.0000000 0.0000000 1.0318620 0.0000000 0.0000000] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +262.24407 16.217230 moveto +262.24407 16.217230 lineto +263.77664 16.585835 264.96002 17.497620 265.79422 18.952587 curveto +266.33739 19.922579 266.60899 20.970162 266.60900 22.095338 curveto +266.60899 23.938312 265.96880 25.461187 264.68844 26.663966 curveto +263.62144 27.653350 262.35076 28.148042 260.87640 28.148042 curveto +258.78122 28.148042 257.09345 27.566052 255.81307 26.402070 curveto +255.81307 26.402070 lineto +255.52208 26.111075 lineto +254.82369 27.236257 254.47449 27.789148 254.47450 27.769748 curveto +254.31930 28.021944 254.17380 28.148042 254.03800 28.148042 curveto +253.84400 27.973445 253.73731 27.740649 253.71791 27.449653 curveto +253.71791 21.629745 lineto +253.71791 21.202958 253.78580 20.970162 253.92160 20.931356 curveto +253.92160 20.931356 lineto +253.95070 20.902256 lineto +254.09620 20.902256 lineto +254.30960 20.902263 254.42599 20.999261 254.44540 21.193252 curveto +254.50359 23.055627 255.06618 24.510603 256.13317 25.558183 curveto +256.24957 25.674581 lineto +257.37474 26.722166 258.90732 27.245957 260.84730 27.245957 curveto +262.30226 27.245957 263.39834 26.605768 264.13554 25.325387 curveto +264.54292 24.627001 264.74662 23.880113 264.74663 23.084722 curveto +264.74662 22.037144 264.44593 21.144759 263.84455 20.407564 curveto +263.32075 19.709183 262.56416 19.233891 261.57478 18.981687 curveto +261.54568 18.952587 lineto +261.54568 18.971995 261.48748 18.962295 261.37109 18.923487 curveto +258.96552 18.341506 257.68514 18.021411 257.52995 17.963203 curveto +255.99737 17.439421 254.89159 16.440338 254.21260 14.965950 curveto +253.88280 14.228775 253.71791 13.452788 253.71791 12.637986 curveto +253.71791 10.872631 254.38719 9.4273548 255.72578 8.3021544 curveto +256.77335 7.4291882 257.99553 6.9926955 259.39232 6.9926750 curveto +261.04128 6.9926955 262.46716 7.5455863 263.66995 8.6513489 curveto +264.04825 9.0296430 lineto +265.06673 7.3709691 lineto +265.20251 7.1187934 265.34801 6.9926955 265.50322 6.9926750 curveto +265.69721 7.1672926 265.80390 7.4000887 265.82332 7.6910640 curveto +265.82332 13.540072 lineto +265.82330 13.947479 265.76510 14.170576 265.64872 14.209362 curveto +265.61962 14.209362 lineto +265.59052 14.238461 lineto +265.44502 14.238461 lineto +265.25101 14.238474 265.13462 14.122076 265.09583 13.889267 curveto +264.55262 9.8735474 262.66116 7.8462813 259.42142 7.8074622 curveto +258.02463 7.8074819 256.95765 8.3700725 256.22047 9.4952357 curveto +256.19137 9.5243352 lineto +255.78397 10.164542 255.58027 10.862931 255.58028 11.619502 curveto +255.58027 12.899897 256.09437 13.918380 257.12255 14.674954 curveto +257.52994 14.985362 257.99553 15.198758 258.51933 15.315144 curveto +262.24407 16.217230 lineto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +278.67622 16.275429 moveto +277.97782 15.557652 276.93994 15.198758 275.56257 15.198746 curveto +274.34038 15.198758 273.36070 15.780749 272.62352 16.944719 curveto +271.96392 17.992312 271.63413 19.398788 271.63413 21.164152 curveto +271.63413 23.957712 272.46832 25.790981 274.13669 26.663966 curveto +274.66048 26.954962 275.19397 27.100459 275.73717 27.100459 curveto +277.63833 27.100459 278.90901 26.081976 279.54921 24.045007 curveto +279.60740 23.851014 279.73349 23.754015 279.92750 23.754012 curveto +280.17969 23.754015 280.30578 23.851014 280.30580 24.045007 curveto +280.30578 24.413604 280.09239 24.937396 279.66561 25.616382 curveto +278.71501 27.090760 277.31823 27.827947 275.47527 27.827948 curveto +273.65170 27.827947 272.10942 27.110159 270.84845 25.674581 curveto +269.76206 24.413604 269.21887 22.929529 269.21887 21.222351 curveto +269.21887 19.224191 269.90756 17.555819 271.28494 16.217230 curveto +272.46832 15.053261 273.88449 14.471270 275.53347 14.471257 curveto +277.14364 14.471270 278.37552 14.907763 279.22911 15.780737 curveto +279.73349 16.304540 279.98569 16.905930 279.98570 17.584909 curveto +279.98569 18.322106 279.66560 18.768299 279.02542 18.923487 curveto +278.90901 18.942896 278.78291 18.952596 278.64712 18.952587 curveto +277.96812 18.952596 277.54133 18.642201 277.36674 18.021402 curveto +277.32793 17.905013 277.30853 17.769215 277.30854 17.614008 curveto +277.30853 16.915630 277.64803 16.488837 278.32703 16.333628 curveto +278.44342 16.294840 278.55981 16.275440 278.67622 16.275429 curveto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +294.83693 21.280550 moveto +294.83693 21.280550 lineto +294.83691 23.278723 294.09973 24.927696 292.62536 26.227473 curveto +291.40317 27.294456 289.98699 27.827947 288.37683 27.827948 curveto +286.51445 27.827947 284.94308 27.129559 283.66270 25.732780 curveto +282.51812 24.471803 281.94583 22.987728 281.94583 21.280550 curveto +281.94583 19.301790 282.65392 17.633418 284.07010 16.275429 curveto +285.29227 15.072660 286.73755 14.471270 288.40593 14.471257 curveto +290.28769 14.471270 291.86876 15.218158 293.14915 16.711922 curveto +294.27432 18.011711 294.83691 19.534586 294.83693 21.280550 curveto +288.40593 27.100459 moveto +288.40593 27.100459 lineto +289.70570 27.100459 290.73388 26.557268 291.49048 25.470885 curveto +291.78148 24.947093 lineto +292.20826 24.093510 292.42165 22.793731 292.42167 21.047754 curveto +292.42165 19.185392 292.16946 17.837114 291.66508 17.002918 curveto +290.83088 15.800148 289.73480 15.169659 288.37683 15.111447 curveto +287.17404 15.111460 286.18466 15.596452 285.40868 16.566425 curveto +285.27287 16.721633 285.15648 16.886530 285.05948 17.061117 curveto +284.59388 17.914713 284.36109 19.243591 284.36109 21.047754 curveto +284.36109 22.929529 284.60358 24.297206 285.08858 25.150790 curveto +285.90336 26.411771 287.00914 27.061660 288.40593 27.100459 curveto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +300.68593 25.238088 moveto +300.68593 25.839480 300.80233 26.208074 301.03513 26.343871 curveto +301.03513 26.343871 lineto +301.06423 26.372970 lineto +301.33582 26.528169 301.94691 26.605768 302.89750 26.605767 curveto +303.50859 26.605767 lineto +303.50859 27.507853 lineto +302.73259 27.449654 301.50072 27.420554 299.81295 27.420554 curveto +299.87114 27.420554 298.76536 27.449654 296.49560 27.507853 curveto +296.49560 26.605767 lineto +297.64018 26.605768 298.30947 26.518469 298.50347 26.343871 curveto +298.56167 26.285672 lineto +298.69746 26.130476 298.76536 25.800681 298.76536 25.296287 curveto +298.76536 17.497610 lineto +298.76536 16.741033 298.61986 16.275440 298.32887 16.100832 curveto +298.09607 15.965046 297.67898 15.887447 297.07759 15.868036 curveto +296.49560 15.868036 lineto +296.49560 14.965950 lineto +300.54044 14.645855 lineto +300.54044 17.846804 lineto +301.06422 16.217241 301.92751 15.198758 303.13030 14.791352 curveto +303.44068 14.694367 303.77048 14.645868 304.11968 14.645855 curveto +305.03146 14.645868 305.68135 14.985362 306.06935 15.664339 curveto +306.20514 15.897147 306.27304 16.149342 306.27305 16.420927 curveto +306.27304 17.099927 305.95294 17.517020 305.31276 17.672207 curveto +305.21575 17.691617 305.11876 17.701316 305.02177 17.701307 curveto +304.42037 17.701316 304.03237 17.439421 303.85778 16.915619 curveto +303.79958 16.779832 303.77048 16.624634 303.77049 16.450026 curveto +303.77048 15.926246 303.99357 15.547952 304.43978 15.315144 curveto +304.40097 15.295757 304.29427 15.286057 304.11968 15.286045 curveto +302.81989 15.286057 301.85961 16.081444 301.23883 17.672207 curveto +300.87023 18.584002 300.68593 19.612185 300.68593 20.756759 curveto +300.68593 25.238088 lineto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +318.39664 20.785858 moveto +318.39664 20.785858 lineto +310.27787 20.785858 lineto +310.27787 22.764632 310.56886 24.219608 311.15086 25.150790 curveto +312.08204 26.353572 313.17812 27.003461 314.43910 27.100459 curveto +315.77768 27.100459 316.85436 26.557268 317.66915 25.470885 curveto +317.96014 25.082893 318.19293 24.627001 318.36754 24.103206 curveto +318.42573 23.831614 318.55183 23.695816 318.74584 23.695812 curveto +318.99802 23.695816 319.12412 23.812214 319.12413 24.045007 curveto +319.12412 24.471803 318.85252 25.053794 318.30934 25.790980 curveto +317.51395 26.877363 316.46636 27.527252 315.16659 27.740649 curveto +314.87559 27.798848 314.57490 27.827947 314.26451 27.827948 curveto +312.44093 27.827947 310.88896 27.129559 309.60858 25.732780 curveto +308.44460 24.452404 307.86261 22.910129 307.86261 21.105953 curveto +307.86261 19.088393 308.56100 17.420021 309.95778 16.100832 curveto +311.08295 15.014461 312.40213 14.471270 313.91531 14.471257 curveto +316.10747 14.471270 317.64004 15.402455 318.51304 17.264814 curveto +318.92042 18.137809 319.12412 19.107793 319.12413 20.174768 curveto +319.12412 20.504570 319.05622 20.698566 318.92043 20.756759 curveto +318.86222 20.776165 318.68763 20.785865 318.39664 20.785858 curveto +310.30697 20.174768 moveto +310.30697 20.174768 lineto +317.20356 20.174768 lineto +317.20355 18.331806 316.79616 16.944729 315.98138 16.013533 curveto +315.43818 15.412155 314.74949 15.111460 313.91531 15.111447 curveto +312.92592 15.111460 312.09174 15.567352 311.41275 16.479126 curveto +310.73376 17.352122 310.36517 18.584002 310.30697 20.174768 curveto +fill +grestore +grestore +gsave [0.96912200 0.0000000 0.0000000 1.0318620 0.0000000 0.0000000] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +-61.621001 60.450596 moveto +-61.621001 60.450596 lineto +-60.088436 60.819201 -58.905056 61.730986 -58.070856 63.185953 curveto +-57.527679 64.155945 -57.256084 65.203528 -57.256069 66.328704 curveto +-57.256084 68.171678 -57.896273 69.694553 -59.176639 70.897332 curveto +-60.243634 71.886716 -61.514313 72.381408 -62.988679 72.381409 curveto +-65.083853 72.381408 -66.771625 71.799418 -68.052000 70.635436 curveto +-68.052000 70.635436 lineto +-68.342995 70.344441 lineto +-69.041387 71.469623 -69.390581 72.022514 -69.390579 72.003114 curveto +-69.545778 72.255310 -69.691276 72.381408 -69.827072 72.381409 curveto +-70.021070 72.206811 -70.127769 71.974015 -70.147167 71.683019 curveto +-70.147167 65.863111 lineto +-70.147168 65.436324 -70.079269 65.203528 -69.943470 65.164722 curveto +-69.943470 65.164722 lineto +-69.914370 65.135622 lineto +-69.768873 65.135622 lineto +-69.555478 65.135629 -69.439080 65.232627 -69.419678 65.426618 curveto +-69.361481 67.288993 -68.798891 68.743969 -67.731905 69.791549 curveto +-67.615506 69.907947 lineto +-66.490329 70.955532 -64.957755 71.479323 -63.017779 71.479323 curveto +-61.562812 71.479323 -60.466730 70.839134 -59.729530 69.558753 curveto +-59.322149 68.860367 -59.118453 68.113479 -59.118440 67.318088 curveto +-59.118453 66.270510 -59.419148 65.378125 -60.020526 64.640930 curveto +-60.544329 63.942549 -61.300916 63.467257 -62.290290 63.215053 curveto +-62.319390 63.185953 lineto +-62.319399 63.205361 -62.377598 63.195661 -62.493987 63.156853 curveto +-64.899556 62.574872 -66.179935 62.254777 -66.335127 62.196569 curveto +-67.867706 61.672787 -68.973488 60.673704 -69.652474 59.199316 curveto +-69.982271 58.462141 -70.147168 57.686154 -70.147167 56.871352 curveto +-70.147168 55.105997 -69.477879 53.660721 -68.139298 52.535520 curveto +-67.091719 51.662554 -65.869540 51.226062 -64.472756 51.226041 curveto +-62.823791 51.226062 -61.397915 51.778952 -60.195123 52.884715 curveto +-59.816829 53.263009 lineto +-58.798345 51.604335 lineto +-58.662560 51.352159 -58.517063 51.226062 -58.361852 51.226041 curveto +-58.167869 51.400659 -58.061170 51.633455 -58.041757 51.924430 curveto +-58.041757 57.773438 lineto +-58.041771 58.180845 -58.099970 58.403942 -58.216354 58.442728 curveto +-58.245454 58.442728 lineto +-58.274553 58.471827 lineto +-58.420051 58.471827 lineto +-58.614061 58.471840 -58.730459 58.355442 -58.769245 58.122633 curveto +-59.312449 54.106913 -61.203918 52.079647 -64.443656 52.040828 curveto +-65.840440 52.040848 -66.907422 52.603439 -67.644606 53.728602 curveto +-67.673706 53.757701 lineto +-68.081103 54.397909 -68.284799 55.096297 -68.284796 55.852868 curveto +-68.284799 57.133263 -67.770708 58.151746 -66.742520 58.908320 curveto +-66.335132 59.218728 -65.869540 59.432124 -65.345742 59.548510 curveto +-61.621001 60.450596 lineto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +-50.601367 60.101402 moveto +-50.601367 60.101402 lineto +-50.601367 68.191074 lineto +-50.601372 70.131045 -50.038781 71.168928 -48.913593 71.304725 curveto +-48.836001 71.324126 -48.748703 71.333825 -48.651697 71.333825 curveto +-47.817518 71.333825 -47.235528 70.790634 -46.905725 69.704251 curveto +-46.769936 69.238660 -46.702037 68.695469 -46.702028 68.074676 curveto +-46.702028 66.474201 lineto +-45.974540 66.474201 lineto +-45.974540 68.132875 lineto +-45.974549 69.723652 -46.420742 70.868233 -47.313119 71.566621 curveto +-47.739920 71.896416 -48.254011 72.061313 -48.855394 72.061314 curveto +-50.484974 72.061313 -51.600455 71.450223 -52.201842 70.228042 curveto +-52.473441 69.646054 -52.609238 68.947665 -52.609235 68.132875 curveto +-52.609235 60.101402 lineto +-55.082696 60.101402 lineto +-55.082696 59.461212 lineto +-53.356126 59.383625 -52.211545 58.297243 -51.648950 56.202063 curveto +-51.454958 55.464891 -51.348259 54.679204 -51.328855 53.845000 curveto +-50.601367 53.845000 lineto +-50.601367 59.199316 lineto +-46.440132 59.199316 lineto +-46.440132 60.101402 lineto +-50.601367 60.101402 lineto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +-34.635265 69.529653 moveto +-35.120267 70.732435 -35.973852 71.518122 -37.196025 71.886716 curveto +-37.584025 72.003114 -38.001118 72.061313 -38.447305 72.061314 curveto +-40.096283 72.061313 -41.366962 71.663620 -42.259345 70.868232 curveto +-42.821938 70.363842 -43.103233 69.733352 -43.103232 68.976762 curveto +-43.103233 67.482990 -42.278747 66.289910 -40.629771 65.397518 curveto +-40.493977 65.319926 -40.348479 65.252027 -40.193278 65.193821 curveto +-39.009902 64.631237 -37.273631 64.282043 -34.984460 64.146238 curveto +-34.838962 64.146238 lineto +-34.838962 63.069555 lineto +-34.838971 61.420591 -35.430661 60.285710 -36.614034 59.664908 curveto +-37.021435 59.451524 -37.457928 59.344826 -37.923513 59.344813 curveto +-39.203898 59.344826 -40.193282 59.723119 -40.891667 60.479696 curveto +-40.949869 60.557306 -41.008068 60.625204 -41.066264 60.683392 curveto +-40.154482 60.799801 -39.659791 61.245994 -39.582187 62.021971 curveto +-39.582192 62.681570 -39.882887 63.108363 -40.484273 63.302351 curveto +-40.620075 63.341159 -40.765572 63.360559 -40.920766 63.360550 curveto +-41.619158 63.360559 -42.045951 63.040464 -42.201146 62.400265 curveto +-42.239948 62.303276 -42.259347 62.167479 -42.259345 61.992872 curveto +-42.259347 60.828901 -41.648258 59.936516 -40.426074 59.315714 curveto +-39.669491 58.908333 -38.815905 58.704637 -37.865314 58.704623 curveto +-36.274547 58.704637 -34.945670 59.238128 -33.878677 60.305098 curveto +-33.199699 61.003498 -32.850505 61.973482 -32.831093 63.215053 curveto +-32.831093 63.244152 lineto +-32.831093 63.738844 lineto +-32.831093 69.558753 lineto +-32.831105 70.121346 -32.656508 70.538439 -32.307302 70.810033 curveto +-32.152116 70.945832 -31.967819 71.013731 -31.754410 71.013730 curveto +-31.075434 71.013731 -30.726240 70.392941 -30.706827 69.151359 curveto +-30.706827 67.521785 lineto +-29.979338 67.521785 lineto +-29.979338 69.151359 lineto +-29.979353 70.567538 -30.561343 71.450223 -31.725311 71.799418 curveto +-31.958120 71.877016 -32.171516 71.915816 -32.365501 71.915816 curveto +-33.316097 71.915816 -33.995085 71.411424 -34.402469 70.402640 curveto +-34.518877 70.131045 -34.596475 69.840050 -34.635265 69.529653 curveto +-34.838962 64.757328 moveto +-37.826521 64.873733 -39.727690 65.785518 -40.542472 67.492685 curveto +-40.755872 67.958282 -40.862571 68.443274 -40.862567 68.947662 curveto +-40.862571 69.937049 -40.416378 70.664537 -39.523988 71.130128 curveto +-39.136000 71.324126 -38.709207 71.421124 -38.243608 71.421124 curveto +-37.234831 71.421124 -36.390945 71.023431 -35.711948 70.228042 curveto +-35.129966 69.568455 -34.838971 68.714869 -34.838962 67.667283 curveto +-34.838962 64.757328 lineto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +-17.670233 62.051071 moveto +-21.482273 71.508422 lineto +-21.637478 71.877016 -21.841175 72.061313 -22.093363 72.061314 curveto +-22.326167 72.061313 -22.500764 71.944915 -22.617155 71.712119 curveto +-22.636562 71.673320 -22.665661 71.605421 -22.704454 71.508422 curveto +-26.894788 61.178085 lineto +-27.108187 60.673704 -27.340983 60.373009 -27.593177 60.275999 curveto +-27.593177 60.246899 lineto +-27.864774 60.149912 -28.407965 60.101413 -29.222751 60.101402 curveto +-29.222751 59.199316 lineto +-28.349766 59.257527 -27.408882 59.286627 -26.400095 59.286614 curveto +-26.031505 59.286627 -24.974223 59.257527 -23.228245 59.199316 curveto +-23.228245 60.101402 lineto +-24.334033 60.101413 -24.886924 60.353609 -24.886919 60.857990 curveto +-24.886924 60.935599 -24.828725 61.100496 -24.712322 61.352682 curveto +-21.453173 69.471454 lineto +-18.485020 62.051071 lineto +-18.368633 61.721286 -18.310434 61.488490 -18.310423 61.352682 curveto +-18.310434 60.673704 -18.649928 60.266310 -19.328907 60.130501 curveto +-19.445315 60.111113 -19.571413 60.101413 -19.707201 60.101402 curveto +-19.707201 59.199316 lineto +-18.717827 59.257527 -17.873941 59.286627 -17.175540 59.286614 curveto +-16.380166 59.286627 -15.652679 59.257527 -14.993075 59.199316 curveto +-14.993075 60.101402 lineto +-16.254068 60.120813 -17.127054 60.712503 -17.612034 61.876474 curveto +-17.612034 61.905573 lineto +-17.631445 61.944382 -17.650845 61.992882 -17.670233 62.051071 curveto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +-3.0813580 65.019224 moveto +-3.0813580 65.019224 lineto +-11.200130 65.019224 lineto +-11.200134 66.997998 -10.909138 68.452974 -10.327144 69.384156 curveto +-9.3959638 70.586938 -8.2998821 71.236827 -7.0388958 71.333825 curveto +-5.7003255 71.333825 -4.6236435 70.790634 -3.8088465 69.704251 curveto +-3.5178620 69.316259 -3.2850659 68.860367 -3.1104575 68.336572 curveto +-3.0522698 68.064980 -2.9261719 67.929182 -2.7321635 67.929178 curveto +-2.4799794 67.929182 -2.3538815 68.045580 -2.3538694 68.278373 curveto +-2.3538815 68.705169 -2.6254769 69.287160 -3.1686566 70.024346 curveto +-3.9640546 71.110729 -5.0116371 71.760618 -6.3114072 71.974015 curveto +-6.6024105 72.032214 -6.9031054 72.061313 -7.2134930 72.061314 curveto +-9.0370698 72.061313 -10.589044 71.362925 -11.869420 69.966146 curveto +-13.033403 68.685770 -13.615393 67.143495 -13.615392 65.339319 curveto +-13.615393 63.321759 -12.917005 61.653387 -11.520225 60.334198 curveto +-10.395047 59.247827 -9.0758691 58.704637 -7.5626875 58.704623 curveto +-5.3705311 58.704637 -3.8379567 59.635821 -2.9649598 61.498180 curveto +-2.5575781 62.371175 -2.3538815 63.341159 -2.3538694 64.408134 curveto +-2.3538815 64.737936 -2.4217804 64.931932 -2.5575662 64.990125 curveto +-2.6157771 65.009531 -2.7903742 65.019231 -3.0813580 65.019224 curveto +-11.171031 64.408134 moveto +-11.171031 64.408134 lineto +-4.2744392 64.408134 lineto +-4.2744494 62.565172 -4.6818426 61.178095 -5.4966200 60.246899 curveto +-6.0398199 59.645521 -6.7285084 59.344826 -7.5626875 59.344813 curveto +-8.5520779 59.344826 -9.3862639 59.800718 -10.065248 60.712492 curveto +-10.744241 61.585488 -11.112835 62.817368 -11.171031 64.408134 curveto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +4.5240794 66.095907 moveto +4.5240794 66.095907 lineto +2.8557012 65.766118 1.7596195 65.446024 1.2358311 65.135622 curveto +1.0418315 65.038631 0.85753462 64.912533 0.68293975 64.757328 curveto +-0.15124852 64.078347 -0.56834154 63.253860 -0.56834058 62.283867 curveto +-0.56834154 60.925899 0.033048404 59.936516 1.2358311 59.315714 curveto +1.9924156 58.908333 2.9429998 58.704637 4.0875862 58.704623 curveto +5.1739625 58.704637 6.0857472 58.976232 6.8229432 59.519411 curveto +7.0363313 59.344826 7.2012286 59.189628 7.3176355 59.053818 curveto +7.5698224 58.821035 7.7638192 58.704637 7.8996263 58.704623 curveto +8.0936136 58.879234 8.2003119 59.112030 8.2197213 59.403012 curveto +8.2197213 62.342066 lineto +8.2197115 62.749469 8.1615125 62.972565 8.0451240 63.011356 curveto +8.0160245 63.011356 lineto +7.9869249 63.040455 lineto +7.8414272 63.040455 lineto +7.6280214 63.040464 7.5116234 62.953165 7.4922327 62.778559 curveto +7.3564260 60.819201 6.5513394 59.674620 5.0769707 59.344813 curveto +4.7665693 59.286627 4.4367748 59.257527 4.0875862 59.257515 curveto +2.2640111 59.257527 1.1970289 59.820118 0.88663655 60.945288 curveto +0.84783478 61.119896 0.82843511 61.294493 0.82843746 61.469080 curveto +0.82843511 62.458474 1.5753226 63.156862 3.0691022 63.564247 curveto +3.3600928 63.641854 3.8062853 63.738852 4.4076812 63.855243 curveto +5.8044519 64.126846 6.8035352 64.505140 7.4049341 64.990125 curveto +7.5213232 65.067730 7.6280214 65.155029 7.7250291 65.252021 curveto +8.5398062 66.066813 8.9471994 66.988298 8.9472099 68.016477 curveto +8.9471994 69.665453 8.2682107 70.829434 6.9102419 71.508422 curveto +6.1730458 71.877016 5.2903605 72.061313 4.2621835 72.061314 curveto +3.0011988 72.061313 1.9342166 71.644220 1.0612338 70.810033 curveto +0.47924295 71.479323 lineto +0.091247431 71.867316 -0.15124852 72.061313 -0.24824561 72.061314 curveto +-0.44224365 71.886716 -0.54894187 71.653920 -0.56834058 71.362925 curveto +-0.56834058 67.521785 lineto +-0.56834154 67.094996 -0.50044268 66.862200 -0.36464378 66.823396 curveto +-0.36464378 66.823396 lineto +-0.33554424 66.794296 lineto +-0.19004653 66.794296 lineto +0.0039488903 66.794301 0.13004678 66.900999 0.18824753 67.114391 curveto +0.18824581 67.153195 0.19794565 67.211394 0.21734707 67.288989 curveto +0.72173689 69.539355 1.6820208 70.868233 3.0982018 71.275626 curveto +3.4473913 71.372625 3.8353848 71.421124 4.2621835 71.421124 curveto +6.0081485 71.421124 7.0654308 70.810034 7.4340336 69.587852 curveto +7.5116234 69.335659 7.5504227 69.064063 7.5504318 68.773065 curveto +7.5504227 67.356892 6.5416396 66.464507 4.5240794 66.095907 curveto +fill +grestore +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +1.1063715 setlinewidth +0 setlinejoin +1 setlinecap +newpath +182.68874 61.446269 moveto +239.20838 80.359267 lineto +stroke +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +1.1210915 setlinewidth +0 setlinejoin +1 setlinecap +newpath +183.89135 40.065168 moveto +244.83751 74.101277 lineto +stroke +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +1.1424956 setlinewidth +0 setlinejoin +1 setlinecap +newpath +25.379291 39.857977 moveto +4.3453306 54.751570 lineto +stroke +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +1.1676413 setlinewidth +0 setlinejoin +1 setlinecap +newpath +26.401801 100.36701 moveto +0.58382064 77.858297 lineto +stroke +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +1.1063715 setlinewidth +0 setlinejoin +1 setlinecap +newpath +209.76401 30.965176 moveto +240.46132 21.586553 lineto +stroke +0.0000000 0.0000000 0.0000000 setrgbcolor +[1.2744309 3.8232932] 0.0000000 setdash +1.2744310 setlinewidth +0 setlinejoin +0 setlinecap +newpath +151.69419 -9.7574803 moveto +151.29749 197.75887 lineto +stroke +gsave +0.68627453 0.68627453 0.68627453 setrgbcolor +newpath +146.02685 142.84831 moveto +156.68525 142.84831 lineto +160.98282 142.84831 164.44260 146.30809 164.44260 150.60566 curveto +164.44260 205.64506 lineto +164.44260 209.94263 160.98282 213.40240 156.68525 213.40240 curveto +146.02685 213.40240 lineto +141.72928 213.40240 138.26950 209.94263 138.26950 205.64506 curveto +138.26950 150.60566 lineto +138.26950 146.30809 141.72928 142.84831 146.02685 142.84831 curveto +closepath +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.88499999 setlinewidth +1 setlinejoin +0 setlinecap +newpath +146.02685 142.84831 moveto +156.68525 142.84831 lineto +160.98282 142.84831 164.44260 146.30809 164.44260 150.60566 curveto +164.44260 205.64506 lineto +164.44260 209.94263 160.98282 213.40240 156.68525 213.40240 curveto +146.02685 213.40240 lineto +141.72928 213.40240 138.26950 209.94263 138.26950 205.64506 curveto +138.26950 150.60566 lineto +138.26950 146.30809 141.72928 142.84831 146.02685 142.84831 curveto +closepath +stroke +gsave +0.84313726 0.84313726 0.84313726 setrgbcolor +newpath +149.01595 148.13576 moveto +153.82477 148.13576 lineto +157.62352 148.13576 160.68172 151.19396 160.68172 154.99271 curveto +160.68172 176.06715 lineto +160.68172 179.86591 157.62352 182.92411 153.82477 182.92411 curveto +149.01595 182.92411 lineto +145.21720 182.92411 142.15900 179.86591 142.15900 176.06715 curveto +142.15900 154.99271 lineto +142.15900 151.19396 145.21720 148.13576 149.01595 148.13576 curveto +closepath +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.88499999 setlinewidth +1 setlinejoin +0 setlinecap +newpath +149.01595 148.13576 moveto +153.82477 148.13576 lineto +157.62352 148.13576 160.68172 151.19396 160.68172 154.99271 curveto +160.68172 176.06715 lineto +160.68172 179.86591 157.62352 182.92411 153.82477 182.92411 curveto +149.01595 182.92411 lineto +145.21720 182.92411 142.15900 179.86591 142.15900 176.06715 curveto +142.15900 154.99271 lineto +142.15900 151.19396 145.21720 148.13576 149.01595 148.13576 curveto +closepath +stroke +gsave +0.84313726 0.84313726 0.84313726 setrgbcolor +newpath +148.76260 185.27272 moveto +153.91584 185.27272 lineto +157.71459 185.27272 160.77279 188.33092 160.77279 192.12968 curveto +160.77279 202.34002 lineto +160.77279 206.13878 157.71459 209.19698 153.91584 209.19698 curveto +148.76260 209.19698 lineto +144.96384 209.19698 141.90564 206.13878 141.90564 202.34002 curveto +141.90564 192.12968 lineto +141.90564 188.33092 144.96384 185.27272 148.76260 185.27272 curveto +closepath +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.88499999 setlinewidth +1 setlinejoin +0 setlinecap +newpath +148.76260 185.27272 moveto +153.91584 185.27272 lineto +157.71459 185.27272 160.77279 188.33092 160.77279 192.12968 curveto +160.77279 202.34002 lineto +160.77279 206.13878 157.71459 209.19698 153.91584 209.19698 curveto +148.76260 209.19698 lineto +144.96384 209.19698 141.90564 206.13878 141.90564 202.34002 curveto +141.90564 192.12968 lineto +141.90564 188.33092 144.96384 185.27272 148.76260 185.27272 curveto +closepath +stroke +gsave [1.4162090 0.0000000 0.0000000 1.4162090 -20.215340 -79.974730] concat +gsave +1.0000000 1.0000000 1.0000000 setrgbcolor +newpath +126.07693 167.57559 moveto +126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto +118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto +116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto +123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto +closepath +eofill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.44125390 setlinewidth +0 setlinejoin +0 setlinecap +newpath +126.07693 167.57559 moveto +126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto +118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto +116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto +123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto +closepath +stroke +grestore +gsave [1.4162090 0.0000000 0.0000000 1.4162090 -20.479480 -64.209730] concat +gsave +1.0000000 1.0000000 1.0000000 setrgbcolor +newpath +126.07693 167.57559 moveto +126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto +118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto +116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto +123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto +closepath +eofill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.44125390 setlinewidth +0 setlinejoin +0 setlinecap +newpath +126.07693 167.57559 moveto +126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto +118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto +116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto +123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto +closepath +stroke +grestore +gsave [1.4162090 0.0000000 0.0000000 1.4162090 -20.363720 -39.930040] concat +gsave +1.0000000 1.0000000 1.0000000 setrgbcolor +newpath +126.07693 167.57559 moveto +126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto +118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto +116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto +123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto +closepath +eofill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.44125390 setlinewidth +0 setlinejoin +0 setlinecap +newpath +126.07693 167.57559 moveto +126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto +118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto +116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto +123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto +closepath +stroke +grestore +gsave [1.0000000 0.0000000 0.0000000 1.0000000 8.6949600 0.0000000] concat +0.0000000 0.0000000 0.0000000 setrgbcolor +[1.2750270 3.8250812] 0.0000000 setdash +1.2750272 setlinewidth +0 setlinejoin +0 setlinecap +newpath +88.417813 -9.9473490 moveto +88.021113 197.76321 lineto +stroke +gsave +0.68627453 0.68627453 0.68627453 setrgbcolor +newpath +84.307164 147.07874 moveto +91.525266 147.07874 lineto +96.252967 147.07874 100.05902 150.88479 100.05902 155.61249 curveto +100.05902 200.00992 lineto +100.05902 204.73763 96.252967 208.54368 91.525266 208.54368 curveto +84.307164 208.54368 lineto +79.579463 208.54368 75.773407 204.73763 75.773407 200.00992 curveto +75.773407 155.61249 lineto +75.773407 150.88479 79.579463 147.07874 84.307164 147.07874 curveto +closepath +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.88499999 setlinewidth +1 setlinejoin +0 setlinecap +newpath +84.307164 147.07874 moveto +91.525266 147.07874 lineto +96.252967 147.07874 100.05902 150.88479 100.05902 155.61249 curveto +100.05902 200.00992 lineto +100.05902 204.73763 96.252967 208.54368 91.525266 208.54368 curveto +84.307164 208.54368 lineto +79.579463 208.54368 75.773407 204.73763 75.773407 200.00992 curveto +75.773407 155.61249 lineto +75.773407 150.88479 79.579463 147.07874 84.307164 147.07874 curveto +closepath +stroke +gsave +0.84313726 0.84313726 0.84313726 setrgbcolor +newpath +86.170554 180.34737 moveto +90.023439 180.34737 lineto +94.286667 180.34737 97.718796 183.77950 97.718796 188.04272 curveto +97.718796 196.57627 lineto +97.718796 200.83950 94.286667 204.27163 90.023439 204.27163 curveto +86.170554 204.27163 lineto +81.907326 204.27163 78.475197 200.83950 78.475197 196.57627 curveto +78.475197 188.04272 lineto +78.475197 183.77950 81.907326 180.34737 86.170554 180.34737 curveto +closepath +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.88499999 setlinewidth +1 setlinejoin +0 setlinecap +newpath +86.170554 180.34737 moveto +90.023439 180.34737 lineto +94.286667 180.34737 97.718796 183.77950 97.718796 188.04272 curveto +97.718796 196.57627 lineto +97.718796 200.83950 94.286667 204.27163 90.023439 204.27163 curveto +86.170554 204.27163 lineto +81.907326 204.27163 78.475197 200.83950 78.475197 196.57627 curveto +78.475197 188.04272 lineto +78.475197 183.77950 81.907326 180.34737 86.170554 180.34737 curveto +closepath +stroke +gsave [1.4162090 0.0000000 0.0000000 1.4162090 -83.803540 -44.855390] concat +gsave +1.0000000 1.0000000 1.0000000 setrgbcolor +newpath +126.07693 167.57559 moveto +126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto +118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto +116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto +123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto +closepath +eofill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.44125390 setlinewidth +0 setlinejoin +0 setlinecap +newpath +126.07693 167.57559 moveto +126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto +118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto +116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto +123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto +closepath +stroke +grestore +gsave +0.84313726 0.84313726 0.84313726 setrgbcolor +newpath +85.116835 152.57442 moveto +91.062910 152.57442 lineto +94.706839 152.57442 97.640400 155.50798 97.640400 159.15191 curveto +97.640400 169.92119 lineto +97.640400 173.56512 94.706839 176.49868 91.062910 176.49868 curveto +85.116835 176.49868 lineto +81.472905 176.49868 78.539345 173.56512 78.539345 169.92119 curveto +78.539345 159.15191 lineto +78.539345 155.50798 81.472905 152.57442 85.116835 152.57442 curveto +closepath +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.88499999 setlinewidth +1 setlinejoin +0 setlinecap +newpath +85.116835 152.57442 moveto +91.062910 152.57442 lineto +94.706839 152.57442 97.640400 155.50798 97.640400 159.15191 curveto +97.640400 169.92119 lineto +97.640400 173.56512 94.706839 176.49868 91.062910 176.49868 curveto +85.116835 176.49868 lineto +81.472905 176.49868 78.539345 173.56512 78.539345 169.92119 curveto +78.539345 159.15191 lineto +78.539345 155.50798 81.472905 152.57442 85.116835 152.57442 curveto +closepath +stroke +gsave [1.4162090 0.0000000 0.0000000 1.4162090 -83.885510 -72.628350] concat +gsave +1.0000000 1.0000000 1.0000000 setrgbcolor +newpath +126.07693 167.57559 moveto +126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto +118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto +116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto +123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto +closepath +eofill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.44125390 setlinewidth +0 setlinejoin +0 setlinecap +newpath +126.07693 167.57559 moveto +126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto +118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto +116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto +123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto +closepath +stroke +grestore +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +1.1210915 setlinewidth +0 setlinejoin +1 setlinecap +newpath +182.46352 108.96177 moveto +241.48733 90.475112 lineto +stroke +gsave +0.68627453 0.68627453 0.68627453 setrgbcolor +newpath +241.48908 165.42336 moveto +252.14749 165.42336 lineto +256.44506 165.42336 259.90483 168.88313 259.90483 173.18070 curveto +259.90483 184.89355 lineto +259.90483 189.19112 256.44506 192.65090 252.14749 192.65090 curveto +241.48908 192.65090 lineto +237.19151 192.65090 233.73174 189.19112 233.73174 184.89355 curveto +233.73174 173.18070 lineto +233.73174 168.88313 237.19151 165.42336 241.48908 165.42336 curveto +closepath +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.79382217 setlinewidth +1 setlinejoin +0 setlinecap +newpath +241.48908 165.42336 moveto +252.14749 165.42336 lineto +256.44506 165.42336 259.90483 168.88313 259.90483 173.18070 curveto +259.90483 184.89355 lineto +259.90483 189.19112 256.44506 192.65090 252.14749 192.65090 curveto +241.48908 192.65090 lineto +237.19151 192.65090 233.73174 189.19112 233.73174 184.89355 curveto +233.73174 173.18070 lineto +233.73174 168.88313 237.19151 165.42336 241.48908 165.42336 curveto +closepath +stroke +gsave +0.84313726 0.84313726 0.84313726 setrgbcolor +newpath +207.46888 185.39404 moveto +212.62212 185.39404 lineto +216.42087 185.39404 219.47908 188.45225 219.47908 192.25100 curveto +219.47908 202.46135 lineto +219.47908 206.26010 216.42087 209.31830 212.62212 209.31830 curveto +207.46888 209.31830 lineto +203.67013 209.31830 200.61192 206.26010 200.61192 202.46135 curveto +200.61192 192.25100 lineto +200.61192 188.45225 203.67013 185.39404 207.46888 185.39404 curveto +closepath +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.79382217 setlinewidth +1 setlinejoin +0 setlinecap +newpath +207.46888 185.39404 moveto +212.62212 185.39404 lineto +216.42087 185.39404 219.47908 188.45225 219.47908 192.25100 curveto +219.47908 202.46135 lineto +219.47908 206.26010 216.42087 209.31830 212.62212 209.31830 curveto +207.46888 209.31830 lineto +203.67013 209.31830 200.61192 206.26010 200.61192 202.46135 curveto +200.61192 192.25100 lineto +200.61192 188.45225 203.67013 185.39404 207.46888 185.39404 curveto +closepath +stroke +gsave [1.4162090 0.0000000 0.0000000 1.4162090 11.220390 -81.039070] concat +gsave +1.0000000 1.0000000 1.0000000 setrgbcolor +newpath +126.07693 167.57559 moveto +126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto +118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto +116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto +123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto +closepath +eofill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.39575738 setlinewidth +0 setlinejoin +0 setlinecap +newpath +126.07693 167.57559 moveto +126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto +118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto +116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto +123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto +closepath +stroke +grestore +gsave [1.4162090 0.0000000 0.0000000 1.4162090 11.153860 -64.681230] concat +gsave +1.0000000 1.0000000 1.0000000 setrgbcolor +newpath +126.07693 167.57559 moveto +126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto +118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto +116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto +123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto +closepath +eofill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.39575738 setlinewidth +0 setlinejoin +0 setlinecap +newpath +126.07693 167.57559 moveto +126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto +118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto +116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto +123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto +closepath +stroke +grestore +gsave [1.4162090 0.0000000 0.0000000 1.4162090 11.269620 -40.401540] concat +gsave +1.0000000 1.0000000 1.0000000 setrgbcolor +newpath +126.07693 167.57559 moveto +126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto +118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto +116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto +123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto +closepath +eofill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.39575738 setlinewidth +0 setlinejoin +0 setlinecap +newpath +126.07693 167.57559 moveto +126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto +118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto +116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto +123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto +closepath +stroke +grestore +gsave +0.84313726 0.84313726 0.84313726 setrgbcolor +newpath +207.48570 151.66121 moveto +212.63893 151.66121 lineto +216.43769 151.66121 219.49589 154.71941 219.49589 158.51817 curveto +219.49589 168.72851 lineto +219.49589 172.52727 216.43769 175.58547 212.63893 175.58547 curveto +207.48570 175.58547 lineto +203.68694 175.58547 200.62874 172.52727 200.62874 168.72851 curveto +200.62874 158.51817 lineto +200.62874 154.71941 203.68694 151.66121 207.48570 151.66121 curveto +closepath +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.79382217 setlinewidth +1 setlinejoin +0 setlinecap +newpath +207.48570 151.66121 moveto +212.63893 151.66121 lineto +216.43769 151.66121 219.49589 154.71941 219.49589 158.51817 curveto +219.49589 168.72851 lineto +219.49589 172.52727 216.43769 175.58547 212.63893 175.58547 curveto +207.48570 175.58547 lineto +203.68694 175.58547 200.62874 172.52727 200.62874 168.72851 curveto +200.62874 158.51817 lineto +200.62874 154.71941 203.68694 151.66121 207.48570 151.66121 curveto +closepath +stroke +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.79382217 setlinewidth +0 setlinejoin +0 setlinecap +newpath +189.69623 157.84667 moveto +200.46117 161.51947 lineto +stroke +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.79382217 setlinewidth +0 setlinejoin +0 setlinecap +newpath +189.76611 171.64361 moveto +200.37931 166.19231 lineto +stroke +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.79382217 setlinewidth +0 setlinejoin +0 setlinecap +newpath +190.10344 196.62466 moveto +200.39129 196.69454 lineto +stroke +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.79382217 setlinewidth +0 setlinejoin +0 setlinecap +newpath +219.64158 195.42700 moveto +233.59024 183.97744 lineto +stroke +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.79382217 setlinewidth +0 setlinejoin +0 setlinecap +newpath +219.54774 163.42573 moveto +233.57825 176.07294 lineto +stroke +gsave [1.0000000 0.0000000 0.0000000 1.0000000 10.947320 0.0000000] concat +gsave +0.68627453 0.68627453 0.68627453 setrgbcolor +newpath +-1.4353113 163.23927 moveto +5.7827902 163.23927 lineto +10.510492 163.23927 14.316547 167.04533 14.316547 171.77303 curveto +14.316547 180.37286 lineto +14.316547 185.10056 10.510492 188.90662 5.7827902 188.90662 curveto +-1.4353113 188.90662 lineto +-6.1630128 188.90662 -9.9690685 185.10056 -9.9690685 180.37286 curveto +-9.9690685 171.77303 lineto +-9.9690685 167.04533 -6.1630128 163.23927 -1.4353113 163.23927 curveto +closepath +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.79382217 setlinewidth +1 setlinejoin +0 setlinecap +newpath +-1.4353113 163.23927 moveto +5.7827902 163.23927 lineto +10.510492 163.23927 14.316547 167.04533 14.316547 171.77303 curveto +14.316547 180.37286 lineto +14.316547 185.10056 10.510492 188.90662 5.7827902 188.90662 curveto +-1.4353113 188.90662 lineto +-6.1630128 188.90662 -9.9690685 185.10056 -9.9690685 180.37286 curveto +-9.9690685 171.77303 lineto +-9.9690685 167.04533 -6.1630128 163.23927 -1.4353113 163.23927 curveto +closepath +stroke +gsave +0.84313726 0.84313726 0.84313726 setrgbcolor +newpath +30.267600 179.29735 moveto +34.120485 179.29735 lineto +38.383713 179.29735 41.815842 182.72948 41.815842 186.99270 curveto +41.815842 189.99991 lineto +41.815842 194.26314 38.383713 197.69527 34.120485 197.69527 curveto +30.267600 197.69527 lineto +26.004372 197.69527 22.572243 194.26314 22.572243 189.99991 curveto +22.572243 186.99270 lineto +22.572243 182.72948 26.004372 179.29735 30.267600 179.29735 curveto +closepath +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.79382217 setlinewidth +1 setlinejoin +0 setlinecap +newpath +30.267600 179.29735 moveto +34.120485 179.29735 lineto +38.383713 179.29735 41.815842 182.72948 41.815842 186.99270 curveto +41.815842 189.99991 lineto +41.815842 194.26314 38.383713 197.69527 34.120485 197.69527 curveto +30.267600 197.69527 lineto +26.004372 197.69527 22.572243 194.26314 22.572243 189.99991 curveto +22.572243 186.99270 lineto +22.572243 182.72948 26.004372 179.29735 30.267600 179.29735 curveto +closepath +stroke +gsave [1.4162090 0.0000000 0.0000000 1.4162090 -117.17870 -47.779320] concat +gsave +1.0000000 1.0000000 1.0000000 setrgbcolor +newpath +126.07693 167.57559 moveto +126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto +118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto +116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto +123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto +closepath +eofill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.39575738 setlinewidth +0 setlinejoin +0 setlinecap +newpath +126.07693 167.57559 moveto +126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto +118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto +116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto +123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto +closepath +stroke +grestore +gsave +0.84313726 0.84313726 0.84313726 setrgbcolor +newpath +29.411494 155.28255 moveto +35.357568 155.28255 lineto +39.001498 155.28255 41.935059 158.21611 41.935059 161.86004 curveto +41.935059 167.29354 lineto +41.935059 170.93747 39.001498 173.87103 35.357568 173.87103 curveto +29.411494 173.87103 lineto +25.767564 173.87103 22.834003 170.93747 22.834003 167.29354 curveto +22.834003 161.86004 lineto +22.834003 158.21611 25.767564 155.28255 29.411494 155.28255 curveto +closepath +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.79382217 setlinewidth +1 setlinejoin +0 setlinecap +newpath +29.411494 155.28255 moveto +35.357568 155.28255 lineto +39.001498 155.28255 41.935059 158.21611 41.935059 161.86004 curveto +41.935059 167.29354 lineto +41.935059 170.93747 39.001498 173.87103 35.357568 173.87103 curveto +29.411494 173.87103 lineto +25.767564 173.87103 22.834003 170.93747 22.834003 167.29354 curveto +22.834003 161.86004 lineto +22.834003 158.21611 25.767564 155.28255 29.411494 155.28255 curveto +closepath +stroke +gsave [1.4162090 0.0000000 0.0000000 1.4162090 -117.85340 -72.983320] concat +gsave +1.0000000 1.0000000 1.0000000 setrgbcolor +newpath +126.07693 167.57559 moveto +126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto +118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto +116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto +123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto +closepath +eofill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.39575738 setlinewidth +0 setlinejoin +0 setlinecap +newpath +126.07693 167.57559 moveto +126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto +118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto +116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto +123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto +closepath +stroke +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.79382217 setlinewidth +0 setlinejoin +0 setlinecap +newpath +41.896572 189.25354 moveto +47.691864 189.50020 lineto +stroke +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.79382217 setlinewidth +0 setlinejoin +0 setlinecap +newpath +42.289125 164.21618 moveto +47.031830 164.21619 lineto +stroke +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.79382217 setlinewidth +0 setlinejoin +0 setlinecap +newpath +14.366305 180.77152 moveto +22.447541 185.61447 lineto +stroke +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.79382217 setlinewidth +0 setlinejoin +0 setlinecap +newpath +14.446518 172.14067 moveto +22.786530 166.35797 lineto +stroke +grestore +grestore +showpage diff --git a/Documentation/pictures/darius-blasband.jpg b/Documentation/pictures/darius-blasband.jpg new file mode 100644 index 0000000000..c679bfe89c Binary files /dev/null and b/Documentation/pictures/darius-blasband.jpg differ diff --git a/Documentation/pictures/double-lily-modified3.png b/Documentation/pictures/double-lily-modified3.png new file mode 100644 index 0000000000..7bdb50b6b7 Binary files /dev/null and b/Documentation/pictures/double-lily-modified3.png differ diff --git a/Documentation/pictures/flat-design.png b/Documentation/pictures/flat-design.png new file mode 100644 index 0000000000..80507a4224 Binary files /dev/null and b/Documentation/pictures/flat-design.png differ diff --git a/Documentation/pictures/henle-flat-bw.png b/Documentation/pictures/henle-flat-bw.png new file mode 100644 index 0000000000..b47660f376 Binary files /dev/null and b/Documentation/pictures/henle-flat-bw.png differ diff --git a/Documentation/pictures/henle-flat-gray.png b/Documentation/pictures/henle-flat-gray.png new file mode 100644 index 0000000000..20326b958a Binary files /dev/null and b/Documentation/pictures/henle-flat-gray.png differ diff --git a/Documentation/pictures/lao_banner_06_on_white_demo.png b/Documentation/pictures/lao_banner_06_on_white_demo.png new file mode 100644 index 0000000000..397c6c8120 Binary files /dev/null and b/Documentation/pictures/lao_banner_06_on_white_demo.png differ diff --git a/Documentation/pictures/lelie-logo.xpm b/Documentation/pictures/lelie-logo.xpm deleted file mode 100644 index 15408fb2ef..0000000000 --- a/Documentation/pictures/lelie-logo.xpm +++ /dev/null @@ -1,215 +0,0 @@ -/* XPM */ -static char *noname[] = { -/* width height ncolors chars_per_pixel */ -"100 143 65 1", -/* colors */ -" c #ADADAD", -". c #A5A5A5", -"X c #9D9D9D", -"o c #959595", -"O c #8D8D8D", -"+ c #858585", -"@ c #7D7D7D", -"# c #757575", -"$ c #6D6D6D", -"% c #656565", -"& c #5D5D5D", -"* c #555555", -"= c #4D4D4D", -"- c #FCFCFC", -"; c #FAFAFA", -": c #454545", -"> c #F2F2F2", -", c #3D3D3D", -"< c #EAEAEA", -"1 c #353535", -"2 c #E2E2E2", -"3 c #2D2D2D", -"4 c #DADADA", -"5 c #252525", -"6 c #D2D2D2", -"7 c #1D1D1D", -"8 c #CACACA", -"9 c #151515", -"0 c #C2C2C2", -"q c #0D0D0D", -"w c #BABABA", -"e c #050505", -"r c #B2B2B2", -"t c #AAAAAA", -"y c #A2A2A2", -"u c #9A9A9A", -"i c #929292", -"p c #8A8A8A", -"a c #828282", -"s c #7A7A7A", -"d c #727272", -"f c #6A6A6A", -"g c #626262", -"h c #5A5A5A", -"j c #525252", -"k c #FDFDFD", -"l c #4A4A4A", -"z c #F5F5F5", -"x c #424242", -"c c #EDEDED", -"v c #3A3A3A", -"b c #E5E5E5", -"n c #323232", -"m c #DDDDDD", -"M c #2A2A2A", -"N c #D5D5D5", -"B c #222222", -"V c #CDCDCD", -"C c #1A1A1A", -"Z c #C5C5C5", -"A c #121212", -"S c #BDBDBD", -"D c #0A0A0A", -"F c #B5B5B5", -"G c #020202", -/* pixels */ -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkk;kkkkkk;kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkk;kkkkk;kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkk;kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkk;kkkk;kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk.lexGGj*9jkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkhkkkkkkkkwhs+kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk6 kkkkkkkkkkkVeCkkkkkkkkkkkkrsspkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkOkkkkkkkkkkkkkk2G2kkkkkkkkkdkkkkekkkkkkkkkkkkkkkk", -"k;kkkk;kkkk;kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk.Gkkkckkkkkkkkkkkk@kkkkkkkkskk:kkdokkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkk;kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkw2rkkkkkkkkkkkkkkkkk1kkkkkkkdkGykuk@kkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkskk*kkkkkkkkkkkkkkkkrZkkkkkkGGtkm k%kkkkkkkkkkkkkkk", -"kkk;kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkjkkk$kkkkkkkkkkkkkkkkk=kkkkkkwniw kk@kkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk&kkkk3kkkkkkkkkkkkkkkkw6kkkkkk>X6kk4rkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkakkkkk=kkkkkkkkkkkkkkkk=kkkw:vNkkkk$kkkkkkkkkkkkkkkk", -"kkkkkkkkkkk;kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk&k06kkkvckkkkkkkkkkkkkk+zkkqkkkkkk&kkkkkkkkkkkkkkkkk", -"kk;;kk;kkkkkkk;kk;kkkkkkkkkkkkkkkkkkkkkkkkkkkkkukkk+kkkk,kkkkkkkkkkkkkkk%kMkkkkk.ykkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkX8kky+kkkkk:kkkkkkkkkkkkkk$kGZk2Fwykkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkNikkkkk+mkkkknckkkkkkkkkkkkk@l*kZM@vGkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk4okkkkkkkkkkkkkGkkkkkkkkkkkkkZfikXkc$Ckkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkjkkkkkkkkkkkkkkGkkkkkkkkkkkkk9ry,>kktkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk% Zkkkkkkkkkkky.kkkkkkkkkkkXu6f$kkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkokpkknk*kh%kkkkkki4kkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkaikkkkkkkkkkkkkkkkkkkkkkk4rqZFskkk>kgk0>k%z44hk=kkkkkkk:kkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkk+ikkkkkkkkkkkkkkkkkkkkkkkkGhFFkkkk>Akskkvk*kxmZkkkkkkkkdkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkiikkkkkkkkkkkkkkkkkkkkkkk7D+0kkkk*FbNk,kkp.k*kkkkkkkkkzlkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkk>u.kkkkkkkkkkkkkkkkkkkkkkGGrF$;kkGkOkk7knkvkdkkkkkkkkkkzdkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkZoZkkkkkkkkkkkkkkkkkkkkkMM8$skk*zwkk:kkoNS@@kkkkkkkkkkkzMkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkSybkkkkkkkkkkkkkkkkkkkkfDO *kk=kwk>,kvk3kn>g$0kkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkku kkkkkkkkkkkkkkkkkkkV+G%uXkGkykk3kkfk+kjkkk*Mkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkO.kkkkkkkkkkkkkkk4o4k.G@&FS46;k4gkvkvk1gkkkkkG>kkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkiukkkkkkkkkkkkmSkSGG&GtrMFktkk9kk%kqkGckkkkkkGkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkcX kkkkkkkkkkukgGGG+;GMxZkOkkutkvk$k#xkkkkkkkk5kkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkNoVkkkkkkktjdGGsikkkGGVk+kmkBkkdkMkGhkkkkkkkkkjkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk X>kkyakk;;kyk7kkxkGkGykkkkkkkkkkkMkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkphk6k9Gqx1kkkkNSkkkkkSk,kk:k2skGmkkkkkkkkkkkb&kkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk+ukGG&=kkkkkkkkkkkkzakkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk.;G6i>kkkkkkkkkk+tkkjkh;kGpkkskkkkkkkkkkkkwrkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk6kG77n:VOk#kkkkkkkkkkkGkkskkqkjx6k; kkkkkkkkkkkkk&kkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk lGGxX,koykkkkkkkkkkkgbkk3k+tkGkkk$kkkkkkkkkkkkkk3kkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk6kGGGFXdkbyukkkkkkkkkkCkkf;kGk41kkkpkkkkkkkkkkkkk=kkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkk4rGG1nyjm%kkkOakkkkkkDkkknkk1koGtkkkkokkkkkkkkkkkkkjkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkk ,GC,5 cZ6kkkkO@kkkk.gkkONk1kkGZkkkk+kkkkkkkkkkkkkk=kkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkOyGG=l#;%2kkkkkOakkkGkkknkkGkkCfkkkk;kkkkkkkkkkkkkkjkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk4GG:*OV@Zkkkkkkpiktpkk 8k56kv9;kkkkkkkkkkkkkkkkkkk,kkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkcGG#s>ykkkkkkk>obGkkk7kkGkkq8kkkkkkkkkkkkkkkkkkkk7kkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk2CGp*0rkkkkkkkk .akkurkp+kbqokkkkkkkkkkkkkkkkkkkkjkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkm#Gpd;bkkkkkkkkktukkDkkGkkxu>kkkkkkkkkkkkkkkkkkkk=kkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkNGgCkFkkkkkkkkkkpXmik<,kkGSkkkkkkkkkkkkkkkkkkkkk&kkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkktyGtVkkkkNkkkkkkkovkkGkkdd4kkkkkkkkNkkkkkkkkkkkkfkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkSGk.kkkkGkkkkkkk;o0kGkk9rkkkkkkkkkGkkkkkkkkkkkw8kkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkbAhkkkkkGkkkkkkkk2t3wkwx;kkkkkkkkkG2kkkkkkkkkkMkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk83MkkkkFGkkkkkkkkkuokkA*kkkkkkkkkkG&kkkkkkkkkkhkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkA=kkkkkGVkkkkkkkkkd.kGbkkkkkkkkkkGZkkkkkkkkk$;kkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk5ykkkkkGGkkkkkkkkkkfdnzkkkkkkkkkaGkkkkkkkkkkgkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkjkkkkkkrGkkkkkkkkkkkdikkkkkkkkkkGDkkkkkkkkkkkkkkkkkkN&wukkkkkkkkkkkkkkGkkkkkkkkObkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkhkkkkkkkkkkkkkkkkkkGkkgkk9ykkkkkkpkkkkkkk2.kkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkykkkkkkkkkkkkkkkkk2gkjzkXkyskkkkkkkkkbkkkhkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkvkkxkk&k4@#kkkkkkkm5kk*kkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk7kkgkkfk&koZkkkkkk%kk;0kkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk2kkkkkkkkkf8k1kktNkjkiXkkkkkhkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk:kkkkkkkkkekk7kk$kkhk@akkkkfkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkobkkkkkkkk4#kr+kkjkOkkXhkkk ykkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk5kkkkkkkkkCkkGkk6Zk%kkkkkkk7kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkik kkkkkkkkCkkGkkgkk%kkkkkk8pkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkpkskkkkkkkgbkOrkkgkV8kkkkkk9kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk2NkkkkkkkGkkGkkNXkhkkkkkkk3kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkGkkkkkkkukkkkkkk4&kkfkk$kk$kkkkkk$kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkFGkkkkkkk+kkkkkkkqkkFSkkfkz kkkkkkqkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkGGckkkkkkukkkkkkkDkkjkk>ykdkkkkkkk7kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkhGGdkkkkkNSkkkkkk=4kkjkk*kk*kkkkkkk%kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkGGCGkkkkkkkkkkkkkGkka;kk=kk&kkkkkawikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkAGG%Gkkkkkkkkkkkk4&kkjkkkukXckkkkmn$.kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkk>G3Gnv%kkkkkkkkkkkCkkk&kk%kk=kkkkkkg3Xkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkGGe91gGkkkkkkkkkkkCkkpkkkjkk$kkkbS.99@kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkk GGA$B%pskkkkkkkkkd4kk=kkkdkVZkkkkbbdG3kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkGGAG$Gi$v;kkkkkkkk7kk>skk+kk%kkkkkk0OG,okkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkktGBqCaha9dXkkkkkkkk&kkhkkkhkk$kkkkk<#BvG9mpsfN>kkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkGGGeD=,Chtswkkkkkk1kkkjkkkskk+kkkk6mX@:BC:kNrm3$fwitkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkGGGj5*gl$12=kkkkkk1kkNokkozkskkkkkk0y&%1GtFkykkF$kckdpftkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkGAG5en#Dwyk+7kkkkZ kkjkkkxkkgkkkkkkkF hCnGlgO.xz>4b+dyikkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkbot&h akGGG5GG*@syi06.Gkkhkkrwkk bkF2kkkkkkkwp +*=DGGjokkSjNXk tkkkk2ud$2kkkkkkkkk", -"kkkkkkkkkkkkkkk6p3$48wNckknGG=*MfNSt.a*c#*Akkk3kkk*kk&kkkkkkkkkX@loD=Ge$apykkkNkkkm2mVVkkk8sXkkkkkkk", -"kkkkkkkkkkkkkXi4k>0NsZk+sSrGB,Cs,lMAX46fkkGlak&kkk&kk&kkkkkkkkkpt$$,%MGh%>kkkbFrwm2k4>kbkkmkN9#kkkkk", -"kkkkkkkkkkNvy6%SkkkbN8awiSkGeDBpl0Fdc0.k0Si;8G&kk4VkkS2uk", -"kkkkkk%zkkkk<800840kkkkkkkkkFGDG:O aOOkVoa.k%kkkbSk>Gn&GGBnD9uVwkzkkNZ4kkk6VSkkkGGCps&$k$gkDk4k5kkkgkk>kkkkkkkkkkkz0bd#vGvbFkkkk4mkkZNkkkkt6kkzrkkFpNkk>owbkkkrNkmw;y mk", -"kkk$kkkbkykkAkkkkkkkkkkkkkkkkkkkwoZ+$3orkkkkkk4 Zkkkkk.0kkkbkk4kbukkk", -"kkkhkk8Nkkb8>zckkckkbFVkkkkkGBGOj%r;#k2+kkkkkkkkkkkkkkkyww02k.wkkkk", -"kkkXscihna6kwkbzkkk0iVz0y8kckVykkGC7oZGky8,kkkkkkkkkkkkkkwZkkFuh=jll3kkkkkkkk<2kkkkkkkkVw;k ;hckkkkk", -"kkkkklkkk>wr6kkk>opkk.0k2kFkO;ZbkkqGxdM8Fpkkkkkkkkkkkkkkkkk FVkNn%F5kkkkkk2tcckkkk2kVtiukSwyokkkkkkk", -"kkkkkkXOkkkkkkkyVkkkkVSZZ kFNF48Nkk8Gl5FiakkkkkkkkkkkkkkkkkV0 dpka&kkkkkkkkkkkkwyF4kkzzkruykkkkkkkkk", -"kkkkkkkzsykkkNpkkm4wF2w2N8 c #213225", -", c #253529", -"< c #293B2D", -"1 c #28372B", -"2 c #2D3C30", -"3 c #343D34", -"4 c #2D4332", -"5 c #2F4935", -"6 c #314335", -"7 c #304836", -"8 c #344B39", -"9 c #384D3D", -"0 c #374539", -"q c #39503E", -"w c #36503C", -"e c #2A402F", -"r c #3C5242", -"t c #3D5A44", -"y c #3B4E40", -"u c #3F6046", -"i c #44523D", -"p c #415445", -"a c #445B49", -"s c #455948", -"d c #4E564D", -"f c #44624B", -"g c #46694E", -"h c #48644E", -"j c #4B6B52", -"k c #4B6451", -"l c #546B58", -"z c #53735B", -"x c #56785C", -"c c #506F53", -"v c #5B7A63", -"b c #597762", -"n c #5E6E64", -"m c #67755A", -"M c #667767", -"N c #6C736B", -"B c #5C8464", -"V c #599165", -"C c #5F926A", -"Z c #63846B", -"A c #638A6C", -"S c #6A8B72", -"D c #668970", -"F c #6B9374", -"G c #6A9B75", -"H c #6A9775", -"J c #729B7C", -"K c #72957B", -"L c #6E8B70", -"P c #6EA07A", -"I c #72A27C", -"U c #78A37A", -"Y c #6E825E", -"T c #779C81", -"R c #76A581", -"E c #7AA484", -"W c #7AA985", -"Q c #7EAC8A", -"! c #7DA588", -"~ c #E65C00", -"^ c #E96A00", -"/ c #E87600", -"( c #F46A00", -") c #F47601", -"_ c #F17A17", -"` c #DD6A00", -"' c #899070", -"] c #98A879", -"[ c #8DA97A", -"{ c #A8A977", -"} c #EC8500", -"| c #F38400", -" . c #F38B00", -".. c #FA8A05", -"X. c #F49300", -"o. c #FB9302", -"O. c #FB9A02", -"+. c #FC970A", -"@. c #FC9A15", -"#. c #F88C13", -"$. c #FA9526", -"%. c #FDA30B", -"&. c #FCA204", -"*. c #FDA313", -"=. c #FDA31A", -"-. c #F9A919", -";. c #F5AC18", -":. c #EDAB29", -">. c #EBB439", -",. c #FBAB23", -"<. c #F7A927", -"1. c #F8AB34", -"2. c #F9B22A", -"3. c #F8B538", -"4. c #EBAE33", -"5. c #DEB956", -"6. c #DDBC66", -"7. c #DDBE76", -"8. c #E9B747", -"9. c #E6BA56", -"0. c #F7BA46", -"q. c #F5BC56", -"w. c #EFAB47", -"e. c #E4BC66", -"r. c #E4BD75", -"t. c #F9C13C", -"y. c #DDC16B", -"u. c #DCC378", -"i. c #EAC259", -"p. c #F8C248", -"a. c #F7C556", -"s. c #F7CE5A", -"d. c #E8C568", -"f. c #E3C374", -"g. c #E5C777", -"h. c #F5C865", -"j. c #F5D26F", -"k. c #DCC05E", -"l. c #8B9488", -"z. c #9B9C94", -"x. c #989C98", -"c. c #8D938A", -"v. c #82AE8B", -"b. c #83A786", -"n. c #83AE90", -"m. c #8AAB91", -"M. c #85B08E", -"N. c #86B191", -"B. c #8AB494", -"V. c #8CB698", -"C. c #99A398", -"Z. c #91B89A", -"A. c #94B59A", -"S. c #99A687", -"D. c #99BEA2", -"F. c #98B8A1", -"G. c #9CA5A5", -"H. c #A2A29D", -"J. c #A7AB98", -"K. c #ABB488", -"L. c #ACB298", -"P. c #B1B78B", -"I. c #B0B49C", -"U. c #B3B797", -"Y. c #B1AB86", -"T. c #A4A5A3", -"R. c #A5A9A5", -"E. c #A9AAA4", -"W. c #ABACAB", -"Q. c #A5A8A9", -"!. c #ABADB1", -"~. c #AAB3A8", -"^. c #ACB2B3", -"/. c #B1B4A3", -"(. c #B3B4AB", -"). c #B4B8A3", -"_. c #B5B8AB", -"`. c #B8BAAC", -"'. c #B9B9A6", -"]. c #B2B3B3", -"[. c #B5B5B8", -"{. c #B5B9B3", -"}. c #B5B9B9", -"|. c #B9BAB3", -" X c #BCBDBB", -".X c #B8B6B3", -"XX c #B0AEA7", -"oX c #9C9D9F", -"OX c #BDBEC1", -"+X c #B8BBC4", -"@X c #ACB6C1", -"#X c #9DC1A5", -"$X c #A2C4AA", -"%X c #BEC1BC", -"&X c #B9C2B6", -"*X c #B1C7AE", -"=X c #BBC29F", -"-X c #BEC1C2", -";X c #BCC3CB", -":X c #BFC7D0", -">X c #C3B290", -",X c #C3BDB0", -".8.9.e.y..>.0.q.h.e.r..q.a.i.h.e.y.u.wX7.7.5.5.8.6.7.3XyX9X.>.w.8.i.i.i.9.6.7.r.e.5.8.>.8.5.d.y.7.7.e.9.5.8.4.5.y.3XKXUXIXIXIXIXIXUXIXIXUXIXUXHXSXJXUXSXCXCXCXCXCXCXCXCXCXCXCXCXmXmXCXmXNXNXNXnXnXmXnXBXnXBXnXnXnXVXbXVXbXgXdXdXpXpXpX6X7XpX&XF.N.N.N.N.V.n.V.V.Q V.V.Q V.V.Q n.V.V.V.Q V.V.F.V.V.V.V.V.V.V.Q V.V.V.V.V.Q D.Q V.Q D.Q D.#XQ Q D.Q D.Q V.V.V.V.V.V.Q V.V.Q V.B.V.V.V.V.n.n.n.W n.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX^.kXNXnXmXZXmXnXnXnXzXzXlXgXgXgXgXzXVXzXgXgXgXgXgXVXVXVXVXzXgXgXVXgXbXlXzXbXbXbXzXbXgXdXhXdXjXhXmXNXNXNXNXNXMXNXHXSXHX4Xu.u.g.g.g.g.2Xu.g.wXf.d.i.8.9.0.8.w.>.>.0.0.p.i.i.9.9.9.e.9.8.8.>.8.9.i.y.e.6.5.8.8.>.8.5.y.2XAXKXIXIXIXIXIXIXIXIXIXIXUXUXSXIXIXHXCXCXCXUXJXCXUXJXCXCXCXCXCXZXmXNXCXNXmXZXmXmXmXmXnXNXnXnXgXVXnXbXcXdXaXpXsXpXpXsXjXsXA.A.B.N.B.N.V.V.Q V.V.V.V.V.V.V.V.V.Q V.V.n.V.V.V.V.V.V.V.V.V.Q Q V.Q V.V.V.V.V.V.V.V.V.D.Q Q Q Q Q D.Q F.Q V.n.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.W V.V.N.m.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX5XAXnXNXZXmXnXzXzXnXlXbXzXbXgXzXgXgXgXgXzXVXVXVXVXVXzXzXgXVXVXVXgXgXgXbXgXbXbXbXbXzXbXgXlXhXdXNXMXNXmXNXNXmXSXIXIXHX3X7.y.g.g.u.u.g.u.u.g.f.k.i.q.0.0.8.0.8.3.8.8.8.8.8.q.9.9.w.>.4.4.1.4.8.9.i.5.5.5.8.8.8.8.5.y.rXKXKXLXIXIXKXIXIXUXUXIXIXHXIXIXUXIXKXUXCXUXCXJXJXCXCXCXCXCXCXZXCXSXmXmXNXNXNXZXHXmXmXmXnXnXVXgXVXgXgXdXdXaXsXaXpXsXjXsX*X*XB.B.V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q Q Q V.V.V.V.V.V.Q V.V.V.V.V.Q Q D.Q D.D.Q D.Q Q V.V.n.V.V.Q V.Q V.V.Q n.B.V.V.V.V.V.V.V.V.V.V.N.B.B.V.B.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX{.zXmXZXmXnXmXzXzXnXzXzXbXzXgXzXgXgXgXgXgXgXgXgXVXVXgXVXVXVXgXVXVXVXVXVXbXbXbXnXbXzXnXbXzXbXgXNXmXNXNXNXmXNXHXHXHXJXeXf.g.j.g.g.u.u.u.g.g.d.i.9.0.3.8.0.0.8.3.3.>.t.8.8.w.8.w.3.:.:.:.4.>.p.8.9.9.e.9.w.5.8.5.9.y.wX0XLXIXUXLXKXAXHXHXHXKXIXKXUXKXUXUXUXDXDXUXUXCXUXCXCXCXCXCXCXmXCXCXZXHXJXZXmXHXHXnXmXmXnXbXgXgXgXkXdXdXdXsXpXdXaXdXjXpX%XA.V.V.V.V.V.V.V.V.V.V.n.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q Q Q V.n.Q V.V.V.V.V.Q D.Q V.V.Q Q @XQ D.Q F.Q Q V.Q Q V.Q V.m.Q V.V.n.V.V.V.V.V.V.V.V.V.V.V.V.V.B.V.n.V.n.B.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX*XSXZXmXmXmXmXnXnXzXbXgXbXnXgXVXzXgXVXgXgXgXgXdXdXhXgXgXVXVXVXVXBXBXnXnXmXCXmXNXNXNXmXmXmXBXnXmXNXNXNXMXNXNXAXHXFX2Xf.g.j.j.u.g.g.g.d.g.h.i.8.>.>.w.0.0.0.>.w.>.>.>.>.>.3.4.<.;.2.<.:.4.3.8.8.9.w.9.9.8.w.5.5.y.u.u.0XPXLXKXLXHXHXAXAXKXIXUXKXUXUXUXUXUXCXUXCXJXUXUXCXCXCXCXCXCXCXDXZXZXZXZXHXnXZXNXmXnXnXbXgXbXbXdXjXxXxXsXpXiXdXdXdXpX~.V.V.B.Q B.V.V.V.V.V.V.V.V.V.V.V.V.n.n.V.V.V.Q V.Q V.V.Q n.V.V.V.V.G.V.V.V.V.V.V.V.V.V.V.D.V.Q D.Q D.Q V.Q Q n.n.Q V.n.n.V.n.V.V.V.V.V.V.V.n.B.V.V.V.N.B.B.n.n.V.B.n.V.V.Q YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX-XnXZXZXmXmXmXnXzXnXbXzXgXnXVXVXVXVXgXVXdXgXdXVXdXgXgXVXVXmXVXVXmXBXnXmXmXNXmXNXmXZXNXmXNXmXNXNXCXHXmXNXNXAXAXGX2Xg.g.j.j.j.j.j.g.y.d.h.q.i.0.3.4.>.p.p.0.3.>.3.>.3.2.1.2.<.,.;.-.<.:.4.>.>.8.0.9.w.9.5.5.5.i.k.k.y.3XtXHXKXGXGXNXHXHXHXKXKXKXUXKXIXIXJXUXUXJXJXCXUXCXCXCXCXCXCXCXCXCXZXCXZXZXnXHXmXmXBXbXgXgXbXgXdXsXsXpXpXkXaXdXdXdX5XB.V.V.V.Q n.V.V.V.V.V.V.V.V.V.V.n.V.V.V.V.V.V.Q Q Q V.Q V.V.V.V.n.V.V.Q V.Q V.V.V.V.V.V.V.V.V.Q D.D.V.Q Q V.Q Q V.V.V.n.n.n.V.B.n.V.V.B.B.V.n.n.V.V.V.V.V.N.n.n.V.V.V.m.n.n.Q R YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX&X-XZXZXZXmXmXnXnXnXbXnXzXgXzXzXVXgXgXgXgXgXgXdXdXVXhXVXmXmXmXVXmXNXmXmXNXNXNXNXNXNXnXNXmXNXNXmXNXNXNXNXNXNXHXFXwXf.f.g.g.j.j.j.y.d.i.q.q.q.3.2.<.4.3.0.3.3.<.2.,.;.;.<.,.,.=.,.<.:.1.0.p.8.w.8.8.w.w.8.8.8.5.5.9.k.y.2XyXGXKXNXGXGXGXGXKXLXUXUXUXIXIXJXDXUXCXSXCXUXCXUXUXCXUXSXCXCXCXCXCXZXHXZXZXmXmXzXbXbXbXdXdXjXpXpXjXjXpXdXdXdX5XZ.B.V.V.V.B.V.V.Q V.Q Q V.V.V.V.V.V.V.V.V.V.V.V.n.V.V.Q V.V.V.n.V.V.Q V.Q V.V.V.V.V.V.V.V.V.V.V.D.Q D.Q V.Q Q Q n.Q V.Q n.n.n.Q V.V.n.Q B.n.n.n.n.V.V.V.n.n.B.B.B.V.n.V.n.V.V.V.V.R R YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXkXhXZXZXmXzXnXnXnXnXgXnXzXbXzXgXgXgXdXhXjXgXhXhXjXhXiXVXnXmXmXmXNXmXmXNXNXNXNXNXNXNXnXNXBXBXBXHXmXZXHXmXJXHXvXg.f.d.d.d.d.d.d.h.q.9.q.q.0.1.<.<.<.1.3.1.,.,.-.*.%.;.-.=.=.=.-.-.1.>.0.0.8.8.w.>.>.w.8.8.5.5.9.9.5.y.u.4XAXGXMXGXGXNXNXHXNXAXIXUXIXIXUXUXJXJXSXSXIXJXSXSXSXJXJXJXSXCXZXCXmXCXZXmXmXnXnXbXgXgXdXdXdXjXkXaXdXlXdXdXdX^.B.B.B.B.V.V.V.m.Q V.Q Q V.V.V.V.V.V.V.V.V.V.V.V.n.Q V.Q V.V.V.V.V.V.Q V.V.Q V.V.V.Q D.V.V.D.V.V.Q V.V.Q V.Q V.V.V.n.V.n.V.V.V.n.Q n.n.n.n.V.V.V.V.V.V.V.V.n.n.n.V.V.V.n.V.n.V.B.V.$XQ W YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX}.-XZXZXmXZXmXmXmXzXnXzXnXVXgXgXgXgXdXgXhXjXjXgXdXgXVXdXVXZXmXHXZXmXZXmXHXCXNXNXnXBXNXnXBXNXNXmXmXHXmXHXCXHXvXg.f.d.d.d.i.d.i.h.q.0.3.0.0.1.,.=.-.<.2.,.-.*.%.%.%.&.%.%.=.=.-.<.:.1.8.0.8.4.4.3.4.4.4.w.8.w.9.9.9.y.u.3X0XBXGXGXGXGXGXHXGXNXHXIXIXIXUXJXUXIXSXSXSXSXSXSXSXSXJXCXSXCXCXCXCXZXJXmXNXBXnXbXgXgXlXdXdXpXaXdXdXlXdXdXfXA.B.n.B.N.B.V.V.n.Q V.n.V.V.V.V.V.V.V.V.V.V.V.V.V.n.V.V.V.Q V.Q V.Q V.Q V.V.Q V.Q Q D.Q V.V.V.V.V.V.Q V.D.V.V.Q Q n.V.n.n.n.n.V.V.V.B.V.n.n.n.n.B.V.n.n.Q Q Q n.V.n.n.V.n.n.V.n.V.Q V.;X*XYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX:XkXZXZXZXmXmXmXZXnXzXzXzXzXgXgXgXhXgXhXdXgXjXgXdXdXVXVXBXmXmXNXNXCXNXZXNXNXNXNXnXBXNXNXnXBXmXNXNXNXNXHXFXyXr.r.h.d.d.i.9.i.q.q.0.3.3.1.<.=.=.-.-.-.-.%.&.&.O.&.O.&.%.*.-.=.:.:.4.4.w.4.4.:.4.:.:.4.8.4.5.8.9.9.i.y.u.2XvXvXGXGXGXMXGXMXNXKXIXIXIXJXSXIXSXSXSXSXSXSXSXCXSXJXJXCXSXCXCXCXZXZXmXNXNXnXlXgXdXdXdXdXdXdXdXdXjXdX%XF.V.B.N.V.V.V.B.V.B.Q V.n.V.Q V.V.V.V.V.V.V.V.V.V.Q Q n.V.Q Q V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.F.V.F.V.V.Q V.V.V.V.V.V.V.n.V.n.V.n.B.Q n.B.B.V.N.B.B.n.V.V.V.V.V.n.m.V.V.V.V.V.V.Q B.V.kXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX{.;XmXmXZXZXZXZXzXnXnXnXbXnXzXzXgXjXgXgXhXgXhXdXgXdXVXVXnXmXNXNXNXCXNXNXNXNXNXBXNXNXBXNXBXBXBXNXNXNXNXCXFXeXg.r.e.e.e.q.i.p.0.0.3.1.2.1.,.*.%.+.=.=.*.%.&.&.&.O.O.&.%.+.@.;.<.:.1.2.:.:.:.:.<.:.:.:.4.4.8.9.9.9.9.e.y.u.4XvXGXGXGXLXMXLXLXHXIXIXIXJXSXSXSXSXSXSXJXSXSXSXJXCXSXSXNXCXCXCXNXHXmXnXnXbXjXdXdXjXdXdXjXpXjXjXdXdXF.V.B.B.V.V.V.V.V.V.V.V.V.n.n.V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.Q V.Q V.V.V.Q V.V.Q V.Q V.V.V.V.V.Q V.F.D.V.D.V.V.Z.V.Z.V.Q V.n.V.n.V.V.V.N.Q n.Q n.n.n.n.n.n.n.Q n.n.V.V.Q V.V.V.V.V.n.V.$XYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX^.;XNXZXmXZXmXmXnXnXnXgXbXgXgXgXlXgXhXhXhXdXaXhXdXhXVXVXBXNXCXNXCXNXNXNXNXmXNXNXnXNXBXNXBXBXNXNXNXNXAX0X2Xf.e.e.9.e.q.p.p.3.3.2.,.,.<.=.+.&.+.*.*.%.&.&.O.O.O.O.O.&.+.-.,.<.<.;.<.<.:.:.-.<.:.:.:.4.8.8.8.q.9.9.5.6.u.u.tXMXLXvXGXMXLXMXHXHXJXIXSXIXSXSXSXSXSXSXSXSXJXJXSXSXSXCXNXCXNXCXZXZXNXVXgXgXdXgXcXdXdXdXjXjXjXdX^.V.V.B.V.V.V.V.n.V.V.n.V.V.n.n.Q n.V.V.V.V.V.V.V.V.V.n.V.V.V.V.n.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q Q V.V.V.V.V.V.V.V.V.V.V.F.V.V.F.Z.V.V.Q V.V.n.V.V.V.V.n.n.V.V.Q V.V.n.V.V.V.V.B.V.B.V.V.V.V.Q V.V.V.V.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXG.+XzXZXmXZXmXzXnXnXzXnXbXzXzXgXlXgXdXdXdXdXdXhXdXdXiXVXnXNXCXCXCXHXHXmXNXNXBXnXBXNXNXmXnXBXBXNXNXNXAXtXg.f.r.e.h.q.9.p.t.t.3.2.-.-.=.%.&.&.+.+.=.%.+.&.X.O.X.O.O.O.&.*.,.2.-.=.%.-.@.:.$.<.$.:.4.>.8.8.8.9.9.9.5.5.y.u.9XPXLXLXGXLXMXLXHXIXHXIXSXSXSXSXSXJXJXJXSXSXJXJXJXSXNXSXJXCXCXmXHXmXNXbXgXdXgXdXdXdXdXcXjXlXdXjXA.B.N.B.V.n.V.V.V.V.B.Q V.Q Q n.Q V.n.V.V.V.V.V.V.V.n.V.V.Q n.V.V.Q Q V.n.V.n.V.V.Q Q V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.Q V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.n.V.V.Q V.V.V.V.V.V.Q V.V.V.m.B.V.V.V.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXG.gXnXZXZXmXmXmXnXVXbXbXgXgXzXzXbXdXgXdXdXdXgXdXVXdXVXVXNXCXCXCXCXZXNXNXBXBXNXBXNXNXBXmXBXNXNXNXNXHXtXwXj.h.q.9.i.p.p.t.t.3.2.-.%.%.&.O.O.&.+.=.=.%.&.O.X.O.X.O.O.&.*.,.=.*.O.&.&.-.-.-.1.:.:.4.>.8.8.9.8.8.8.5.5.5.y.9XvXvXLXFXGXGXHXHXHXIXSXSXIXSXSXJXJXJXCXSXSXSXSXJXNXSXNXNXCXNXCXZXmXnXVXgXdXdXdXdXdXdXcXbXjXdX%XV.V.V.n.V.n.V.V.Q W R R Q R Q Q Q Q Q V.V.V.V.V.V.V.V.n.V.Q V.V.V.n.V.V.V.V.n.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.Z.Z.V.V.n.V.V.n.n.n.! Q ! Q Q Q V.V.V.V.V.n.V.V.V.V.V.V.V.V.Q V.Q Q B.V.V.m.Q V.B.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX^.gXZXmXZXnXNXnXnXzXzXgXgXbXzXgXgXhXhXhXdXdXiXVXhXVXVXNXNXCXCXZXNXNXNXNXnXBXnXBXBXBXNXNXBXNXNXMXAXtXwXj.h.e.q.p.p.t.p.p.p.3.;.*.+.O.O.O.&.%.=.=.@.O.O.O.X.X.X.O.O.%.@.=.O.O.O.O.%.*.-.$.$.4.w.w.9.8.8.8.8.>.8.8.6.7.0XGXFXGXGXGXGXHXHXSXIXSXHXSXSXSXSXSXSXSXSXSXNXCXCXSXSXNXCXNXCXNXmXmXbXVXdXgXcXdXjXbXdXdXdXcXsXA.B.V.V.V.n.V.Q Q R T R R R R R Q ! ! Q V.V.V.V.V.V.V.V.V.V.V.G.V.V.n.Q V.G.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.V.V.V.V.F.V.n.Q n.m.V.n.V.V.B.B.Q Q V.V.Q n.B.n.V.V.V.V.V.V.V.Q V.n.n.V.B.n.B.V.n.V.B.B.V.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX-XnXnXmXnXzXmXbXzXbXbXgXgXgXgXgXlXhXlXdXaXhXdXdXgXVXnXNXCXZXHXZXBXmXBXNXBXBXBXBXBXnXMXmXNXAXkXAX4Xj.d.s.i.p.p.t.t.p.s.s.3.2.=.+.o.O.O.O.O.+.%.+.O.+.o.X.X. .X.o.o.+.+.O.o.X.O.X.;.@.-.$.:.>.8.t.>.>.>.>.>.>.8.5.7.tXGXFXGXGXGXGXHXHXJXHXJXAXHXSXHXSXSXSXSXSXHXSXSXSXNXSXSXCXNXNXCXNXnXbXgXdXdXdXcXcXgXcXdXcXdX^.v.R T T T T R R R G G R R R R Q Q Q R R Q V.V.V.V.V.V.V.n.V.V.D.V.V.V.Q V.V.V.V.V.G.V.V.Q V.D.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.V.n.V.V.V.V.Q n.n.n.V.V.V.V.V.V.V.n.n.V.V.V.V.n.V.V.V.B.V.V.Q Q B.Q V.V.n.n.Q V.V.n.V.n.n.B.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXx.-XnXmXNXnXnXnXnXzXgXgXgXgXjXgXhXgXdXlXdXhXdXdXhXVXBXNXCXHXZXHXmXBXNXBXmXNXnXNXbXMXnXMXMXAXAX0X4Xg.d.s.i.8.t.3.t.p.p.a.p.1.,.+.o.o.o.X.O.+.o.o.+.O.o.o. . .X.X.X.X.X.X.o.X.X.@.;.;.@.:.<.4.>.t.t.:.:.>.>.5.5.6.7.9XFXGXGXFXGXGXHXHXJXIXUXIXIXSXSXIXHXSXSXSXNXNXSXSXNXNXNXCXCXCXNXnXBXgXdXgXgXjXcXgXcXgXcXcXuXS b c j g j x C G R R G R Q Q R Q R Q R R Q V.V.V.V.V.V.V.V.V.V.V.Q n.V.V.V.V.n.V.V.V.n.V.V.V.V.F.V.V.Q D.V.V.V.V.V.V.V.V.V.V.Q V.V.V.F.V.V.V.Q Q V.V.V.V.n.V.V.Q V.V.V.Q Q V.Q m.V.V.Q V.V.V.V.V.Q V.Q n.V.V.V.n.n.Q V.n.V.n.n.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX!.lXnXNXnXnXnXzXgXzXgXgXlXhXjXhXdXdXhXdXdXaXhXdXVXnXnXNXHXmXmXHXHXmXBXBXBXBXNXMXnXBXBXmXAXBX4Xu.d.d.s.p.0.3.2.2.2.t.p.a.0.1.+.+.o.o.X.o.X. . .O.&.+.o.X.} X. . .X.X. ...o.o.@.@.@.@.;.:.4.4.:.;.;.;.:.k.5.9.6.u.eXvXvXvXGXGXGXMXKXIXUXUXUXUXIXIXUXSXHXHXSXSXSXAXNXSXNXNXNXCXCXmXnXbXgXbXbXjXbXdXbXbXgXbXuXl.b j g g g g g z C G G R G W Q R Q R Q Q R Q V.V.V.V.V.V.V.V.V.V.G.V.V.n.Q V.Q V.V.V.V.V.V.V.V.V.V.V.V.@XF.V.D.V.D.D.V.V.V.Q Q V.Q V.V.V.V.V.V.V.Q V.n.V.V.V.V.n.V.V.V.V.V.Q Q V.n.V.V.V.V.B.V.V.V.B.n.V.V.Q V.V.Q n.n.n.Q n.n.n.N.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX%XnXnXnXnXnXzXnXzXzXzXlXlXgXgXhXdXdXhXdXdXhXdXVXBXnXNXmXHXNXmXmXBXNXBXBXNXnXMXnXBXMXmXAXvX4Xg.y.s.i.p.3.2.;.,.2.3.3.p.0.1.+...o.o.o.o... .X.O.=.,.@.+.X.} } . . . . ...o.X.#.#.;.*.-.:.<.;.;.;.>.:.>.8.9.d.7.2X3X0XcXFXGXGXHXLXUXIXUXUXUXUXIXSXSXSXSXSXHXNXSXCXSXHXJXNXNXNXNXbXbXgXjXbXgXcXdXbXdXVXVXx.z j g g g g g g j v H R R R W R Q R Q Q Q R Q V.V.V.V.F.V.V.V.V.V.n.V.n.V.V.V.V.V.Q V.V.V.V.V.V.V.D.V.V.V.V.V.V.V.V.V.V.V.V.V.Q Q V.V.V.V.n.V.n.V.V.n.n.n.n.V.V.V.V.Q V.V.V.V.Q V.V.n.V.V.V.V.V.V.V.Q V.V.V.V.n.V.V.n.n.n.n.n.n.Q N.V.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX^.AXmXnXZXnXzXVXgXgXbXgXbXgXgXdXdXhXdXiXdXhXgXnXBXZXZXHXmXHXBXNXNXBXNXnXBXBXBXBXBXBXcXqX2Xg.d.d.s.t.2.,.-.=.-.2.3.3.3.-.O.o.o.+.@.+...| .X.@.<.$.+. .} . . . . . ...o.o.@.=.@.*.*.*.;.-.;.:.:.>.>.8.8.i.y.u.u.2X3XtXGXGXGXKXKXKXUXIXIXIXIXIXSXUXHXHXSXSXSXNXSXNXNXCXmXmXnXnXgXgXbXdXbXdXcXVXVXVXiXn a j g g g g g g j z C G R R R Q Q R R Q Q Q Q V.V.V.V.V.V.V.V.V.Q V.V.V.Q V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.V.V.Q Q V.Q m.V.n.V.V.V.V.V.V.n.Q V.n.V.V.V.Q V.V.V.V.V.V.n.V.V.V.V.V.V.V.V.Q V.V.V.V.V.n.V.V.n.n.n.n.n.n.V.V.V.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXA.7XzXzXZXzXnXzXbXbXgXgXgXgXgXhXdXdXdXdXgXdXgXgXnXNXmXHXmXBXMXNXbXNXnXMXBXBXBXnXnXBXBX3Xg.g.d.s.a.t.2.-.-.,.2.2.t.3.,.@.O.O.o.O.@.+.| | | | +.$.@.+. . .} .} | X.} .o.o.=.=.=.+.%.*.*.-.<.:.>.8.8.8.i.5.d.d.u.7. , 5 r t g g g g g j g V R R R R R Q R Q R Q Q V.n.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q Q V.V.V.n.V.V.V.V.D.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.V.n.V.V.V.n.n.n.V.V.V.n.V.V.V.V.V.V.n.V.V.V.B.V.Q Q V.V.V.V.n.n.V.V.V.n.V.V.m.n.n.n.V.Q V.B.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXV V V V V V V J R.jXmXnXnXnXzXgXgXgXgXgXhXdXdXdXiXVXiXdXVXVXnXNXNXNXNXNXBXBXNXBXBXnXBXHXJXHXIXHX8X > e e e e 5 t u g g g z T G R R R Q R Q R Q Q V.V.n.V.V.n.V.V.V.D.F.V.V.D.V.V.V.V.V.V.Q V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.V.V.V.n.V.V.V.V.V.V.Q V.V.V.V.V.V.Q V.m.V.V.V.V.V.V.n.V.V.V.V.V.V.V.V.B.V.V.V.V.n.V.m.V.V.V.V.V.V.n.V.V.V.n.n.n.B.V.Q V.N.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXV V V V V V V V V G &XzXBXnXnXzXVXnXbXVXbXdXjXgXVXiXVXiXiXhXVXnXBXNXNXNXNXmXBXnXNXBXBXBXJXIXIXHXHX0XeXd.d.a.t.2.3.0.s.s.s.p.1.=.+.+.| | ) } } X.o...) ) / / / / ` ` } } ..o.o.o.+.@.*.+.X.X.X.X.O.&.-.<.>.>.>.t.4.>.>.8.5.5.k.y.u.8XvXLXLXAXNXAXNXSXSXSXHXHXSXSXJXJXHXZXHXBXnXBXBXbXgXcXgXcXcXcXcXcXcXE.d > > > ; , ; ; > 5 5 u g j V C R R R R R Q R Q V.V.V.Q V.V.n.V.V.V.V.V.D.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.Q V.V.V.V.n.V.V.V.V.n.n.n.V.V.V.V.n.V.Q m.V.n.n.V.V.n.n.V.V.V.V.n.Q V.Q V.V.n.n.n.n.V.B.n.V.n.n.n.V.V.V.V.V.V.m.V.Q V.n.V.V.n.n.B.B.m.B.Q Q Q n.B.B.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXV V V V V V V V V V R aXBXzXzXnXVXnXgXgXgXhXhXgXVXVXiXdXdXgXgXnXBXNXNXBXNXBXNXBXnXMXbXNXHXUXIXJXHXGXeXg.s.a.3.2.2.3.p.s.s.p.0.=.-.@.+.| } | } X.....| / / / / / / } } } | o.X. .+.@.+.+.X.X.X.X.O.&.-.2.4.>.4.:.:.4.>.8.9.5.y.y.u.9XAXPXAXMXAXAXHXHXAXAXSXHXNXHXNXJXHXHXBXmXmXmXNXbXgXbXbXbXgXcXbXcXdXn > > > ; ; ; ; ; ; e e 5 g B C R R R R R R R Q Q V.V.Q V.V.n.V.V.V.V.V.D.V.V.F.V.V.V.V.n.V.Q V.V.V.Q V.V.V.Q V.V.V.V.n.Q V.Q Q n.Q n.n.V.V.V.n.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.n.n.Q n.N.N.n.V.B.V.V.V.V.V.V.V.V.V.V.V.Q V.n.V.V.n.n.V.n.V.V.n.Q Q Q V.n.n.V.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXV V V V V V V V V V H m.;XlXbXzXbXgXzXbXgXgXgXgXdXVXdXhXgXVXgXnXnXnXNXNXNXHXBXNXMXnXBXHXIXUXHXHXHXHXeXd.i.p.3.2.,.2.3.p.p.0.0.2.<.,.@.X. . .X.+.+.#...) ^ ^ ^ / ` ` / / / | } } ..o.+.O.&.X.X.&.&.&.*.,.2.>.2.:.:.4.>.8.5.k.d.u.2X9XAXAXMXAXAXAXHXHXAXNXSXAXHXSXJXHXZXHXHXVXVXBXmXbXcXbXbXgXcXbXBXdXc.3 1 , > = ; ; ; ; ; e 5 r g C R C R R R R Q Q V.V.V.V.V.V.n.V.n.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q Q n.V.n.V.n.n.V.V.V.V.V.V.Q V.n.V.n.V.V.V.V.V.V.V.n.n.n.n.n.V.n.n.n.Q n.Q V.n.V.V.n.V.V.V.V.V.V.V.Q Q n.n.n.V.V.n.V.V.Q V.Q n.n.n.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXV V V V V V V V V V V H A.hXnXlXgXzXnXgXgXgXgXgXVXdXVXVXgXVXgXBXBXmXmXHXmXNXBXBXMXBXmXAXIXIXIXHXHXMXyXg.q.0.2.-.-.;.2.t.p.3.0.,.=.=.@.+.o.X.o.+.+.#.#.| / ) ^ ) } / / / / / } / | ..o.o.&.&.&.&.O.&.%.-.2.3.2.:.>.5.4.5.9.6.y.u.2X9XHXLXAXHXAXAXHXAXAXAXAXNXJXNXNXCXHXNXmXVXmXmXNXNXnXmXBXBXnXbXbXfXd 7 < > ; ; > ; ; ; ; 5 t g g V C R G R R R Q Q V.V.V.V.n.n.n.n.V.V.V.V.V.V.V.D.D.V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.V.V.Q V.V.V.V.V.n.Q n.V.n.V.V.V.V.Q n.V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.V.Q Q n.V.n.B.n.Q V.n.V.V.V.V.V.V.n.n.n.V.V.V.Q n.Q V.V.n.V.V.B.N.Q n.n.n.n.n.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXV V V V V V V V V V V V H %XjXbXnXgXnXgXgXbXbXgXVXVXBXVXVXgXbXbXBXnXmXmXNXNXbXNXBXnXMXAXIXHXHXAXHXMXvXeXq.3.2.;.-.-.2.t.p.0.3.,.-.3.0.@.+.o.+.o.@.@.#.| / / ( ) / / ^ ^ ` ` / } | . .o.X.X.O.&.*.@.=.=.,.2.2.>.>.>.8.5.6.6.u.g.9XvXLXHXNXMXAXMXMXAXAXAXAXJXHXHXCXHXNXNXBXBXHXmXNXNXNXNXNXnXnXNXnXbXQ.x.l.M ; ; > > e e 5 t g g g V R C R R R R Q V.V.D.V.V.n.Q V.V.V.V.V.V.V.D.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.V.V.n.n.V.V.V.V.V.V.Q n.V.V.V.V.V.V.Q n.V.V.V.V.m.V.Q V.V.Q V.Q n.V.V.V.V.Q n.Q n.Q n.Q N.n.n.n.n.Q n.n.n.V.V.V.V.V.V.m.Q V.Q V.n.n.V.n.Q n.n.N.V.B.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXV V V V V V V V V V V V V T ;XgXBXbXVXbXbXzXnXbXVXnXVXVXbXbXbXbXVXnXmXHXBXBXmXNXmXBXbXHXIXHXHXHXNXMXvXyX9.>.,.,.2.2.p.p.a.0.3.,.1.0.q.<.,.@.=.=.=.$.#.| ) ) ) ( ) ( ( ^ ` ` / | | | .X.O.O.%.,.2.,.=.=.,.,.3.3.0.8.5.9.6.y.u.u.0XLXLXMXAXMXMXAXHXAXAXNXAXAXJXJXJXJXCXBXbXmXmXCXNXZXZXNXmXNXNXNXmXNXnXnXzXiX^.G.n e 5 5 r u g g g V R R R Q W Q V.V.V.V.V.V.V.V.V.V.V.V.V.D.D.V.V.D.V.V.V.V.V.@XV.V.V.V.V.V.V.V.V.Q n.n.Q V.V.V.V.V.V.Q V.Q Q V.V.V.V.V.V.V.V.n.V.Q Q V.V.Q V.Q n.V.V.n.V.n.n.n.Q V.n.V.V.Q B.N.N.V.n.B.B.V.V.V.V.V.V.V.V.n.Q n.n.V.B.n.n.Q n.n.N.N.n.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXV V V V V V V V V V V V V m. XgXgXbXbXVXlXlXbXbXVXVXnXVXbXbXgXbXnXBXnXmXmXNXmXBXMXbXbXnXAXSXHXAXMXGXMX8X9.w.2.2.t.t.s.s.s.a.0.1.3.0.0.<.,.=.=.@.,.$.#.) / ^ ) ( ( ( ( ^ ^ / / / | ) | .+.*.-.2.3.2.-.=.-.2.>.0.i.h.d.r.f.u.u.3X0XLXKXMXMXAXMXMXNXHXAXHXHXHXHXJXHXCXNXVXnXmXZXNXNXmXmXmXmXmXNXnXNXNXnXmXmXnXZXzX:X;XG.t u g g j j D R R R Q Q Q V.Q V.V.Q @XV.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.n.V.V.V.G.V.V.V.V.n.V.V.V.V.Q V.V.Q V.Q V.n.V.V.V.V.V.V.V.Q V.n.V.n.V.Q Q m.V.V.V.n.Q Q V.V.V.V.V.n.n.n.n.Q n.n.n.n.V.n.V.n.Q n.n.Q n.V.n.m.B.B.B.n.Q Q n.n.V.D.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXV V V V V V V V V V V U R.iXdXzXbXVXbXbXgXzXVXVXgXnXgXbXbXcXbXbXbXnXBXmXmXBXNXBXmXBXcXbXMXNXNXAXNXMXvX8Xe.w.3.t.t.p.s.s.j.s.s.0.3.,.-.-.%.*.+.#.#.#.) ) ) ( ( ( ( ) ( ) / ^ / / / / } ..@.,.,.2.2.2.%.;.;.t.t.k.i.s.j.u.g.7.2X3XFXLXHXMXMXGXNXMXAXAXAXAXAXMXNXHXSXNXnXbXNXmXHXmXmXZXmXmXmXmXmXmXmXNXmXNXnXnXBXmXBXmXzXBX;Xx c z B H R R W N.V.N.Q V.V.V.D.Q V.V.V.V.V.V.V.D.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q Q V.V.V.V.V.V.V.Q n.V.V.V.V.V.V.V.n.V.V.n.Q n.n.n.V.V.V.n.n.n.n.V.V.Q Q V.Q n.n.n.n.n.V.Q Q V.V.V.n.n.Q V.V.n.n.V.V.Q V.V.Q n.Q ! Q Q F.:XYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXV V V V V V V C b.~.sXbXzXgXbXgXgXzXbXzXgXbXgXgXbXbXbXgXbXbXbXVXVXVXnXnXNXmXNXMXBXbXcXbXMXNXMXBXGXGX9Xr.8.8.t.p.p.s.j.j.s.p.3.3.,.-.+.O.o...| ) ) ( ( ^ ( ( ( ( ( ( ^ / / / ^ / ` / #.,.<.,.,.2.;.&.;.;.t.8.8.k.i.k.y.7.u.3XvXPXHXLXNXGXNXNXLXAXMXAXAXMXAXSXHXSXmXbXBXmXZXmXHXHXmXmXmXmXmXVXmXnXnXnXnXmXNXmXnXnXnXnXnXnXkX~.v H R W ! n.N.B.B.D.Q V.V.V.V.V.V.V.V.V.V.V.V.V.F.V.V.V.V.V.V.V.V.V.V.D.V.V.V.V.V.V.V.V.n.V.V.V.V.n.V.V.V.Q V.V.V.V.V.Q V.V.V.Q V.V.n.n.V.V.Q n.n.Q Q V.n.n.n.n.Q n.n.V.n.V.Q n.n.n.n.V.Q n.V.n.Q V.Q n.n.Q V.V.Q V.Q n.V.n.V.n.Q Q V.N.V.$XYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXV V V V H G C.dXcXcXzXlXlXlXbXzXgXgXgXVXbXcXbXVXbXbXbXbXbXbXbXgXVXBXBXmXNXBXmXBXbXcXbXBXMXNXNXMXFXvX8Xe.9.q.p.p.s.s.s.s.p.p.3.3.2.@.o.......) ( ( ( ^ ( ( ( ) ( ( / / ) ) ) / / / #.@.=.=.-.;.;.;.;.;.>.8.k.9.9.k.y.y.u.3XvXMXHXMXMXAXMXMXMXMXAXAXAXHXAXAXAXHXnXBXnXNXNXNXJXZXNXmXmXmXmXmXnXBXnXnXmXnXmXBXmXmXnXnXnXnXnXBX;X~.n.W n.n.V.B.n.V.V.V.#XV.V.V.V.V.V.V.V.V.V.F.V.V.F.V.V.V.V.V.V.V.V.V.V.V.V.V.D.V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.Q Q Q G.V.V.n.Q n.n.n.n.n.V.V.n.n.n.n.n.n.n.n.n.n.n.n.n.Q n.V.Q Q n.V.V.V.V.V.Q V.! Q n.n.V.V.n.V.V.Q V.V.V.V.F.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXV F J ~.gXlXlXbXzXlXbXbXbXgXgXzXgXVXgXgXVXgXbXgXbXbXbXVXbXVXbXVXVXnXBXBXBXnXMXbXbXbXbXmXMXBXMXMXvXqXg.q.q.a.p.s.s.s.a.p.3.0.0.0.,.@...#...( ( ~ ( ( ~ ~ ( ( ( ( ( ) | ) | / } } #.@.@.=.,.%.;.;.2.t.t.k.8.5.5.5.y.u.2X9XvXLXMXLXMXGXMXLXMXMXAXMXMXAXAXAXNXnXnXNXBXNXNXnXnXmXnXmXnXBXVXmXmXmXzXBXnXnXnXnXnXnXnXnXnXnXzXBXBXlXlXF.V.B.m.B.B.Q D.Q Q V.V.V.Q Q V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.G.V.V.V.V.V.V.V.V.V.Q Q V.V.V.n.V.V.n.V.V.V.n.V.V.V.V.V.V.V.n.V.n.V.n.n.n.n.n.n.V.V.V.n.n.n.n.n.n.n.n.V.Q n.n.Q V.Q Q V.V.Q V.Q V.V.V.V.V.V.n.Q n.V.V.V.V.V.V.N.N.V.V.Z.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX5X].%XlXlXbXzXbXzXVXVXbXgXlXgXzXgXgXgXcXbXbXbXbXbXbXcXcXVXcXVXgXbXVXMXbXbXnXMXBXbXBXbXMXmXNXMXBXBXvXeXr.q.i.p.a.a.a.0.p.3.p.a.0.0.<.@.#.) ( ~ ~ ( _ ( ( ~ ( ( ) ) ) ) ..#.#.@.@.$.:.:.<.<.-.=.,.2.>.t.9.i.9.5.6.7.7.8XvXLXGXGXMXMXMXGXMXMXMXLXAXAXSXNXNXNXBXnXnXHXmXBXnXNXBXnXBXnXnXBXnXnXBXnXnXnXnXnXzXnXnXnXmXzXBXnXBXzXzXBXBX&XF.V.B.n.Q Q D.Q D.Q Q Q D.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.Q V.V.V.V.@XQ V.V.V.V.V.Q V.V.V.V.V.V.V.Q V.V.n.n.V.V.V.V.V.V.V.V.Q Q n.n.Q V.V.V.Q n.V.Q Q Q Q Q V.Q V.Q V.Q V.n.V.Q Q V.Q V.V.V.V.V.V.n.B.V.n.V.V.V.V.V.V.V.Q V.B.V.V.V.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXH..XpXkXlXlXlXzXbXnXgXzXnXgXbXbXgXbXgXcXgXgXVXVXbXbXbXVXcXgXcXgXcXcXdXVXVXBXNXBXnXnXbXnXBXMXNXMXMXBXvXvXFXwXe.i.i.a.a.a.0.p.p.3.p.0.3.1.#.) ( ~ ~ ~ ( #._ _ ^ ( ( ( ( ) ..#.$.$.<.1.1.w.0.0.1.2.,.<.3.3.8.q.i.e.6.eX2XyXFXFXMXHXMXGXFXGXMXGXMXMXMXAXAXAXAXAXNXNXBXmXNXnXNXBXBXBXBXnXBXnXnXnXnXzXnXnXnXnXnXnXBXnXnXBXzXnXnXzXnXBXzXzXBXlX-XF.V.F.Q Q F.Q #XQ D.Q V.V.V.V.V.V.V.V.Q V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.D.V.V.V.V.Q Q V.V.Q V.V.V.V.V.Q n.Q Q Q Q V.Q Q Q Q Q n.Q V.n.n.Q n.n.V.V.V.V.V.V.V.V.V.V.V.n.Q Q Q V.V.Q V.V.V.V.n.V.V.Q V.n.V.V.V.V.V.V.V.Q B.V.Q B.V.V.V.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX{ YXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXz.(.pXbXzXlXmXzXbXzXVXnXVXVXbXgXgXbXgXgXVXdXdXVXVXcXcXbXbXcXcXcXcXcXcXVXdXVXVXBXBXBXnXbXBXBXnXmXNXNXMXMXbXvXeXg.d.a.a.a.p.p.3.3.3.p.p.3.2.$...( ~ ~ ~ ( #._ ^ ` ^ ( ( ) ....+.@.=.,.1.0.0.a.a.0.0.2.3.3.p.i.i.k.9.6..p.s.s.s.p.1.1.0.q.q.$.w.$.#.) / $.w.w.$... . .o.@.,.2.3.3.t.>.:.:.:.:.4.0.9.e.r.7.3X8XvXGXMXHXMXMXvXFXMXMXvXMXMXHXNXHXAXNXAXSXSXCXNXnXBXbXBXbXbXVXBXbXbXbXbXbXbXzXbXnXbXzXzXnXnXnXnXnXnXnXnXnXnXnXzXnXzXnXbXzXnXzX#XQ D.Q D.Q D.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.D.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.Q V.V.V.n.V.V.V.V.V.V.V.V.Q V.n.n.n.Q Q n.V.V.Q V.Q V.V.V.Q V.Q G.V.Q n.n.V.V.Q V.V.V.V.V.Q V.V.V.V.V.V.n.n.V.V.V.V.V.V.V.n.V.n.V.Q N.N.B.B.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXC.{.nXmXmXmXAXmXzXnXnXzXnXnXgXnXVXVXVXdXcXVXdXhXdXdXdXdXVXcXVXcXVXcXVXdXdXcXdXgXxXVXbXBXbXBXNXNXHXNXNXJXHXMXvXxXvXtXg.d.a.0.3.3.p.s.j.j.j.h.0.1.q.h.s.q.q.$...} } 1.q.0.<.+.X.X.X.*.2.3.3.t.4.;.;.;.;.<.w.q.q.e.u.9XGXHXNXNXMXNXMXBXvXvXMXMXMXGXMXNXJXHXNXNXAXSXHXJXCXCXBXbXbXbXbXVXcXbXcXbXjXbXbXbXgXbXbXbXbXcXbXbXbXnXBXbXzXbXnXbXbXbXzXnXbXbXbXzX@XQ Q Q Q Q D.Q V.V.V.V.Q V.V.Q V.Q V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.Q V.Q V.V.V.V.V.V.V.V.Q V.Q Q V.V.Q Q Q V.Q V.V.Q V.V.V.n.V.V.n.Q V.V.Q Q V.Q V.Q V.Q Q V.n.n.n.V.V.V.V.V.Q Q Q V.n.Q V.V.V.V.V.V.V.V.V.V.V.n.B.V.V.V.V.V.V.V.m.B.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX-XpXdXnXnXNXzXmXnXnXnXzXnXVXgXnXVXVXVXdXdXdXdXiXdXdXdXVXgXcXgXcXVXdXdXcXdXgXdXdXVXcXVXbXBXNXCXJXSXSXJXJXJXHXvXcX0Xg.d.q.a.0.t.i.s.d.j.j.h.p.0.a.s.p.p.2.%.O.X.@.w.0.0.3.=.O.O.O.&.2.t.t.>.2.>.2.<.:.4.8.q.r.r.tXLXAXSXSXAXHXHXMXvXvXvXvXFXMXMXNXNXHXJXHXHXHXCXSXJXJXNXNXbXbXVXbXcXbXcXcXcXbXjXbXbXbXgXbXbXlXbXdXgXbXnXgXgXnXzXgXzXbXzXnXbXnXVXbX@XV.G.Q D.Q D.Q V.V.V.V.V.Q Q V.Q V.V.V.G.V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.Q Q V.V.V.V.Q Q V.n.V.V.V.V.V.V.Q V.V.V.n.V.V.V.V.Q n.Q Q n.n.n.n.n.n.n.V.V.V.V.Q Q Q Q Q Q V.V.V.V.V.V.Q V.V.n.n.V.V.V.V.V.V.V.V.V.V.V.n.N.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXR. XiXlXzXmXNXmXMXMXBXnXVXnXnXzXVXgXdXdXdXdXdXdXdXgXdXcXcXgXVXxXgXxXdXdXxXxXgXdXVXcXbXnXNXNXNXSXSXJXJXJXHXMXcXxX0Xg.d.i.0.q.s.s.j.j.j.h.a.0.p.p.t.2.;.%.%.=.3.a.q.a.a.3.-.O.O.&.;.2.t.i.p.a.i.q.8.9.9..1.<.@.>.0.a.s.d.h.h.a.2.%.&.&.2.p.i.s.j.y.rXtXLXUXIXIXLXIXIXAXKXAXKXGXMXvXvXvXBXGXMXHXCXHXCXHXNXMXNXNXNXSXAXNXNXNXNXNXnXcXVXdXdXbXgXdXbXcXjXbXjXzXbXcXzXbXlXbXVXnXnXnXVXzXgXgXVXiX^.V.B.V.V.V.V.V.V.Q V.Q V.Q V.V.V.V.G.V.V.V.Q V.V.V.V.n.n.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q G.V.V.Q V.V.Q V.V.V.Q V.V.Q V.V.V.Q V.n.G.V.Q V.Q V.V.V.V.V.n.n.Q V.V.Q V.n.V.Q n.Q V.V.V.n.n.Q V.V.V.V.n.Q n.V.Q Q V.n.n.n.V.V.V.n.V.V.V.V.n.V.V.V.V.V.V.V.V.B.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX 3 T.dXVXVXVXnXnXVXnXVXVXVXVXdXdXdXdXdXdXiXiXsXdXdXVXdXdXgXxXdXxXdXsXiXdXVXMXbXbXBXNXAXSXNXJXJXJXNXKXMXBXHXHXFXFXMXCXCXHXFXFXtXFXFX ; i l `.7XiXfXiXaXdXdXVXdXdXgXgXdXdXdXdXxXiXiXiXiXiXfXdXbXBXBXBXcXcXxXxXxXsXxXjXvXbXMXMXMXMXNXLXLXKXKXKXAXKXIXKXUXIXIXIXIXIXLXJXJXKXKXKXKXLXKXUXUXKXKXKXKXJXHXHXHXxXT.].VXBXBXFXVXbXBXMXMXBXcXcXvXBXBXbXvXBXBXMXbXnXmXBXBXBXbXbXdXgXdXiXfXgXbXcXbXcXbXbXnXnXbXVXnXnXVXgXgXgXdXsX7Xp p 3 3 9 8 8 8 y 5 y t u g x T R R Q Q V.V.V.V.V.Q Q Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.Q V.Q V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.n.n.Q V.V.Q Q V.Q V.Q V.n.n.Q V.Q V.n.n.Q V.V.n.V.Q n.n.n.n.Q Q n.Q n.n.n.n.Q V.Q n.n.n.n.G.V.V.V.V.V.n.V.V.V.n.V.V.V.V.V.V.V.V.V.n.n.Q B.B.B.T YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.Z.B.M.v.M.B.M.Z.M.M.Z.B.B.M.U a p p 9 8 7 7 7 < , ; > : , 0 M |.fXfXiXiXiXiXdXdXgXdXhXdXdXdXiXdXxXdXiXfXiXxXcXbXBXBXcXBXcXcXxXsXsXsX6XsXcXbXMXNXMXNXNXLXHXKXKXKXKXKXKXLXIXIXLXIXIXJXHXKXKXKXKXKXUXUXLXIXIXKXKXHXmXHXBXfX,XVXMXbXBXnXVXbXBXNXMXBXcXbXbXbXvXBXBXBXBXMXnXBXNXnXnXVXcXgXdXdXiXiXaXbXbXbXbXbXbXzXbXVXnXbXVXgXcXgXgXaX5Xz.d 3 1 , 1 7 8 7 7 5 5 5 5 5 5 t z T T ! R ! Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.Q V.Q Q Q V.V.V.V.V.V.V.V.V.Q V.V.Q Q Q V.n.V.Q V.Q Q V.n.V.V.Q Q V.n.n.Q n.V.V.V.n.n.Q V.V.V.V.n.Q Q n.n.n.n.Q V.n.n.V.n.V.V.V.n.V.V.V.V.V.n.V.n.V.V.n.V.V.n.V.V.V.B.B.Q n.n.! YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.Z.B.B.B.B.M.v.v.M.B.Z.Z.Z.M.Z.A.B.M.M s q 9 8 8 5 5 1 ; ; > : > : 1 M XX XuX-XaXiXiXdXaXdXdXdXdXVXiXiXiXdXdXiXiXdXcXnXbXbXbXcXcXxXxXxX6X6X6X6XiXdXbXBXNXMXNXNXMXGXGXNXHXHXNXJXGXJXJXHXHXJXHXKXKXHXHXIXHXSXIXIXUXSXSXNXNXNXNXNXBXNXBXNXBXbXBXBXBXNXMXbXcXcXvXbXbXBXMXBXNXBXNXnXbXVXbXbXgXVXdXsXfXgXVXbXbXbXnXnXzXbXVXVXnXgXgXdXdXsXuXH.M l 9 1 1 , 1 < 8 7 7 5 5 5 5 5 5 2 y k z z b T T Q Q V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.n.V.V.G.Q V.V.V.Q Q V.V.V.Q Q V.V.V.V.V.V.V.V.V.V.V.Q Q Q n.n.V.Q Q V.Q V.V.V.n.V.V.n.V.Q Q V.V.V.n.V.V.Q V.V.n.n.V.V.Q Q Q Q Q n.n.n.n.n.n.V.V.n.V.V.V.n.V.V.Q n.n.V.V.V.V.V.n.V.V.V.V.V.n.n.n.n.! YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.Z.B.B.M.Z.B.Z.Z.Z.M.Z.Z.B.B.Z.[ B.B.M.B.T z a p 7 8 7 e > > > > ; > : : m J.E..XuXiXiXiXiXiXdXiXfXdXdXiXdXiXfXiXiXfXsXdXnXMXbXbXBXcXcXxXxXxX6X6XfX,X,XxXcXHXNXNXMXGXMXGXGXGXGXHXJXJXGXHXHXHXGXJXAXSXIXHXHXSXHXIXUXIXUXSXHXSXJXNXNXBXBXbXbXBXbXnXMXAXMXBXvXjXbXBXBXMXmXmXNXBXmXBXnXVXgXVXgXgXVXiXiXgXgXbXbXnXbXbXcXbXzXnXVXVXVXgXaXpX7X(.' 9 i 8 1 , , 1 1 7 0 7 5 5 5 5 5 2 , ; 2 z z z j z T Q V.Q V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.n.V.V.V.Q Q V.V.V.V.V.Q V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.Q n.V.V.V.V.V.n.V.V.V.V.V.V.n.n.n.V.n.Q n.Q V.V.n.n.V.n.n.n.V.Q Q Q n.V.n.n.V.V.n.B.B.n.B.n.B.V.V.n.n.n.Q n.n.B.B.V.V.V.Q V.n.V.V.n.Q YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.B.B.B.Z.B.Z.B.B.B.B.Z.Z.Z.Z.B.B.Z.Z.A.M.v.B.B.F v z u w 8 5 ; ; ; ; > : , l XXE.R.R.E.]. XuXiXiX;XuX1XiXiXfXdXdXdXfXiXiXfXaXcXbXMXbXbXcXcXdXxXsXsX6X6X7XuX,XcXMXHXNXmXMXBXGXFXGXGXvXGXvXGXGXMXMXHXHXAXAXSXSXSXHXIXIXIXUXHXIXHXSXJXNXNXNXBXNXNXBXBXHXAXMXcXjXjXBXBXBXNXMXNXMXNXnXBXBXbXnXVXVXgXgXdXaXVXbXbXbXgXbXbXgXjXlXlXgXgXhXdXiX5X_.E.J.J.Y Y N m 3 1 > < 8 7 7 5 5 5 5 5 , ; , e a z z z z V Q V.V.Q V.n.V.V.Q Q V.V.V.V.V.Q V.V.V.V.V.V.V.Q V.Q V.Q V.V.V.V.Q V.V.V.V.V.V.V.Q V.V.V.Q V.V.n.n.Q n.Q V.V.Q Q V.Q V.Q V.V.n.n.n.n.n.Q V.V.Q V.n.V.V.V.V.V.V.Q Q n.Q n.Q Q V.V.Q n.V.n.n.V.V.n.Q V.V.n.V.V.m.n.V.n.m.Q V.n.V.V.V.V.B. YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.B.Z.B.Z.B.v.M.Z.B.B.Z.B.Z.Z.Z.B.Z.B.M.Z.Z.Z.Z.v.M.B.m.U L x g f w > ; ; ; > 9 l /.E.E.R.R.T.R.E..X[. X5XuX1XfXiXfX1XfXiXfXfXiXiXuXsXcXbXbXbXcXcXcXxXqXsX6XfX,X,X,XxXGXBXNXNXMXcXcXcXcXvXvXvXvXvXqXvXMXMXMXNXAXHXHXHXIXHXHXAXHXIXHXIXHXAXNXBXNXNXBXBXbXBXBXBXbXcXvXBXAXMXBXmXNXmXmXnXnXnXbXVXVXVXcXgXdXdXbXgXBXbXbXbXgXbXgXlXgXhXdXiXiX,X`.E./././.I.L.I.I.U.] m 8 8 8 8 7 5 y 5 5 < , > , e r z z z z b T V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.n.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.Q V.V.V.F.V.Q V.V.n.V.Q V.V.n.n.n.V.V.n.V.V.V.V.V.V.Q n.V.Q Q Q n.V.Q V.V.V.V.V.n.Q V.Q V.n.V.V.V.V.n.V.Q V.V.n.n.n.V.n.V.m.n.n.B.V.V.V.Q V.V.V.n.V.V.V.V.V.n.B.V. YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.Z.M.B.Z.Z.B.M.U M.Z.B.B.Z.B.Z.Z.Z.Z.B.Z.B.Z.B.B.B.M.M.B.B.B.Z.U A B g e > ; ; k L.E.W.E.W.R.R.E.H.T.T.J.E.(.|.,X1X1X1X1X1XfXfXfXiXiXuXiXdXVXVXbXbXcXcXxXxXxX6X6X,X6X,XfXGXMXNXmXHXBXVXsX6XqXqX,X>XqXqX0X0XFXvXGXMXHXHXAXAXAXAXHXIXHXHXSXSXNXNXNXBXHXNXnXBXBXBXbXBXBXNXMXNXNXNXMXmXNXnXBXnXbXnXnXVXgXdXdXcXcXbXbXbXcXgXVXgXVXdXdXaXiX%X|.(.E.XXE./.I.I./.I.I.I.I.I.Y.' Y i 9 8 8 w i 8 < > > < 2 y z z z z z D V.V.Q V.V.Q V.Q V.Q Q V.V.V.V.V.V.n.V.V.V.Q Q V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.n.V.V.n.V.n.V.Q Q V.Q V.V.Q V.V.V.Q V.Q n.V.! Q V.n.V.V.Q V.V.V.G.n.V.V.V.V.n.V.Q V.n.n.Q Q V.Q n.n.V.n.V.V.V.V.n.n.V.n.V.V.n.n.V.V.V.V.V.V.n.V.V.n.. YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.Z.B.B.Z.M.Z.B.B.M.M.B.Z.B.Z.Z.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.B.Z.B.v.P G V q 8 n Q.^.(.W.W.E.R.Q.T.R.T.J.H.H.H.E.!.[.[.,X1X1X1X1XuXuXiXiXiXdXdXdXVXbXbXdXdXsXxX6X6X6X,X7X,XcXMXNXmXmXNXmXbXxX,X,X>X' Y.Y.>X,XqX0XvXvXMXHXMXAXAXAXHXHXSXAXAXAXAXNXNXMXBXnXBXNXBXMXBXMXMXNXBXNXBXmXmXmXnXnXnXbXbXbXcXgXgXgXgXbXbXbXcXgXdXVXdXVXhXdXiX5X}.(.XXI.J.L.I./././.~.I.I.I.I.I.L.L.] Y Y m c Y Y m y > > < 8 y z z z z z T V.V.V.V.V.V.V.V.V.Q V.V.Q V.V.V.V.V.n.V.V.V.V.V.V.V.@XQ Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q G.V.V.Q V.V.V.n.n.V.Q V.V.V.V.V.V.n.Q ! n.n.Q n.n.n.V.Q Q V.V.n.V.V.Q V.n.Q V.Q Q V.Q V.V.Q n.V.n.V.Q Q V.V.n.B.n.n.n.B.Q n.B.n.n.V.n.n.n.V. YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.Z.B.B.B.Z.Z.B.B.B.B.M.Q [ B.B.B.B.Z.Z.B.Z.Z.Z.Z.Z.Z.B.B.Z.Z.B.Z.B.B.Z.B.U P H B K !.^.!.^.W.W.W.E.Q.R.E.R.H.H.H.H.H.T.R.T.W.]..X.X1XOXuX1X1XiXiXdXgXgXcXbXbXcXcXdXfX6X6XfX,X,XfXBXmXBXHXmXBXBXvXxX,X>Xz.' { >X>X>X,XqXqXvXcXMXMXNXHXHXSXAXAXAXNXNXNXNXBXbXNXBXMXNXNXmXMXmXMXNXNXNXNXBXnXnXbXbXbXbXbXgXgXVXcXbXdXbXbXgXdXdXhXdXiXOXOX X|.(./.E.I.L.I.L.I././.I.I.I.I.I.I.L.P.K.S.K.K.{ { S.' l 8 8 y y r z z z z b T V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.V.n.V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.n.Q V.Q Q Q V.V.n.n.n.V.Q V.Q V.Q n.V.Q Q Q n.n.n.n.V.V.V.Q V.V.Q Q n.Q V.V.V.Q V.V.Q V.V.n.m.n.V.V.V.V.V.V.V.V.n.V.V.V.n.n.V.V.n.V.n.n.V.V.V.- YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.Z.B.Z.Z.Z.Z.Z.B.Z.B.Z.Z.Z.B.M.B.B.B.B.Z.Z.Z.B.Z.Z.Z.Z.Z.Z.Z.Z.B.Z.Z.Z.Z.Z.Z.N.R J m.!.^.W.^.W.~.E.E.W.E.Q.Q.T.T.J.H.T.H.H.H.T.T.T.T.W.>XW.]..X X1XuXdXiXgXgXcXbXbXbXcXsX6XfX6X6X,X,XvXGXBXnXBXmXVXVXVXvXyX>X>XY.Y.7.>X>X>X,XqXfXcXvXMXNXNXJXNXNXNXNXMXBXNXbXBXNXNXNXBXNXmXNXNXmXNXnXnXnXnXbXBXbXbXbXbXdXgXcXgXbXgXbXdXdXdXdXuXuXOXOX X|.|.|.(./.XXJ.L.XX/.I.I././.I./././.U.L.U.L.P.L.U.U.K.P.{ { ] ] ' Z z z z z z Z ! V.V.V.V.Q V.V.V.V.V.V.V.V.Q V.V.V.V.V.n.V.V.Q V.V.V.V.Q Q V.V.V.Q V.V.V.V.V.F.V.Q V.V.n.Q Q n.V.V.V.n.n.n.n.Q V.V.V.V.V.Q V.n.n.Q Q n.V.Q Q Q V.V.V.V.V.V.V.n.Q n.n.V.n.V.n.V.n.V.n.V.n.V.n.V.Q V.Q m.B.V.Q m.V.n.V.n.V.V.n.Q m.n.V.N YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXM.M.B.Z.Z.B.Z.B.Z.Z.Z.Z.Z.B.Z.Z.Z.B.Z.B.B.Z.B.Z.Z.B.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.Z.Z.B.B.B.v.G.^.^.^.~.^.W.W.W.W.W.XXT.T.T.oXT.E.H.E.T.T.T.oXoXT.H.H.H.H.H.E.T..XuXdXhXgXgXgXVXVXbXbXsX6X6X6X7X,X6XBXMXbXMXVXVXbXcXcXcXfX,X,XU.>X>X>X'.'.,X,X6X6XxXvXBXBXBXNXMXmXBXbXBXBXBXBXMXBXnXBXNXNXnXNXNXBXBXBXBXcXbXgXbXdXgXdXdXcXgXdXdXdXfX5X|.}.}.].}. X X|. X{.(._.XX~./._.(./.(.(._._.(.'._./.I.I.U.).).).I.U.U.I.=XL.P.P.F.l.B z z b T n.V.V.Q V.n.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.Q Q V.V.Q V.V.V.V.V.V.V.V.n.V.V.Q Q Q Q V.V.V.V.Q V.Q n.V.Q n.V.n.Q V.n.V.n.Q n.n.n.n.V.n.V.V.n.V.V.G.V.Q Q V.Q V.n.n.V.Q V.V.n.V.V.V.n.V.n.V.n.V.V.V.V.V.V.V.V.V.Q V.V.Q V.V.V.$ YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.M.M.B.B.Z.Z.B.M.B.Z.Z.B.Z.Z.B.Z.B.B.Z.B.Z.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.B.M.M.M.Z.Z.M.B.B.V.T.].[.!.].].W.W.].].W.W.W.Q.Q.XXT.T.H.T.H.T.oXoXT.T.T.H.z.H.z.z.H.H.T..X1XiXdXVXVXVXVXgXbXbXbXdX6XfX,X,X6XMXMXBXBXnXnXVXVXcXcXxXxXvXxXfXqX,X,X,X,X6XxXvXcXBXmXMXMXMXBXdXgXdXcXcXbXBXbXBXBXbXBXBXBXBXBXbXbXcXcXdXdXdXiXdXdXaXpXfXiX5X X.X`.`.`.`..X|.|.%X X X`.]._.(.E.(.`.`._._.`.`._.`.`.`.'.'.*X_.`.*X/._.'.).U.I.=XK.] Q Z z b v F n.n.m.V.V.V.V.V.n.n.n.V.V.n.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.n.n.V.V.Q Q V.Q V.V.V.V.n.n.n.V.V.n.V.V.Q V.V.Q Q n.n.V.V.V.n.V.V.n.n.V.V.n.Q V.n.Q n.n.Q V.n.n.n.Q Q V.V.n.Q G.V.V.Q V.V.Q V.V.V.Q V.V.V.V.V.V.G.! YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.B.Z.Z.Z.M.Z.Z.Z.Z.B.M.M.M.Z.B.Z.Z.Z.B.B.B.Z.B.Z.B.Z.Z.Z.[ Z.Z.Z.Z.Z.B.M.Z.M.M.M.B.V.Z.F.{.{.}.^.].].].]..XW.!.].W.XXT.T.W.T.T.H.T.oXT.T.T.T.T.H.H.H.H.z.z.H.z.z.XX1X1XiXhXdXhXcXbXcXVXVXcXdXpX5X7XdXBXBXVXbXVXgXgXVXcXcXcXbXBXbXMXBXMXBXBXHXBXnXNXNXCXMXNXbXdX5X,XuXfXfXfXsXdXcXbXbXbXcXVXcXVXsXiXuX1X,X;X,XOX XuX5X X7X,X5X X|..X`..X.X.X}.|. X X&X|.(./.E.(.(._.`.|._.{.`.`.`.*X`.'.'.'.'._.).*X).U.U.P.K.K.[ J H D D P ! B.B.V.V.V.V.V.V.V.n.Q V.V.V.V.V.n.n.V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.Q V.V.Q V.V.V.V.V.V.V.n.Q Q V.n.Q V.V.V.V.n.Q V.V.V.V.Q V.Q V.Q V.Q Q Q n.n.n.V.V.V.V.Q Q V.V.n.Q V.n.V.n.n.V.n.n.V.n.n.V.Q V.Q n.V.V.V.V.Q V.Q Q V.V.V.Q Q V.V.V.V.Q D. YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.M.M.M.B.Z.Z.Z.B.Z.B.Z.Z.Z.Z.Z.Z.B.Z.Z.Z.Z.Z.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.B.[ Z.M.Z.Z.M.Z.V.A.[.[.{.^.[.].!.XX].].].].W.W.T.XXT.T.XXT.T.E.T.T.T.T.H.H.H.H.z.H.z.z.z.z.z.H.T..XOXiXiXdXgXgXVXVXcXcXcXcXdXsXfXVXBXVXbXnXzXbXVXVXVXvXcXbXbXnXBXnXBXBXmXNXNXNXNXmXNXcX6X7X5X7X5X7XuXpXpXfXsXsXfXxXxXdXdXsXOX X1X,X5X5XOXuX XuX7X X X X5X5X X`..X`.`.`.|.|.|. X|.|.(.E.XX/.(.|.`.'.&X&X'.'.'.'.'.).).'.'.).*X=XU.K.K.{ [ W W W Q V.V.n.V.V.V.B.B.n.V.V.n.V.V.n.n.V.V.m.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.Q V.Q V.V.V.V.V.V.V.V.V.V.V.n.n.V.V.Q Q Q Q V.V.V.V.V.V.n.V.V.n.V.V.Q V.V.Q n.V.Q n.n.n.n.V.V.Q Q V.V.Q n.Q n.V.Q V.Q Q V.n.Q n.n.Q Q n.V.V.Q n.Q Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q a YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.Z.M.M.B.M.B.Z.B.Z.Z.Z.Z.Z.Z.B.Z.Z.Z.B.Z.Z.B.Z.Z.B.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.B.M.M.Z.Z.B.F.[.}.}.[.].].].].].].}.]..X].W.!.W.Q.Q.T.W.T.T.T.T.T.T.oXT.T.T.H.z.z.z.z.H.J.H.H.H.XX[.1XiXdXiXdXgXdXdXdXbXcXdXxXdXbXbXgXbXbXbXgXcXnXbXnXnXnXnXBXmXmXNXNXmXNXmXNXBXbXpX,X5XuX7X6XfX7XpXpXsXsXdXdXdXsXxXcXcXsXfXuXOX5XuX5X5X5X,X5X5X,X-X X7X X X(.XX(.(.|.}.|.|.|.]./.E././.'.'.=X).I.=XU.U.U.U.U.U.L.U.L.U.=XK.K.[ [ [ R R W W n.V.V.V.V.V.V.V.V.V.V.n.V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.Q V.V.V.n.V.Q V.V.V.V.V.G.n.V.V.Q V.Q V.V.V.V.V.V.V.n.n.V.V.V.Q V.V.V.V.V.n.n.n.n.V.Q V.Q V.V.V.V.n.n.Q V.Q V.Q Q V.Q Q V.Q Q V.n.n.Q V.V.Q V.Q V.Q V.Q V.V.V.V.V.V.V.V.V.V.V.Q ! X YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.B.Z.B.B.B.Z.Z.M.M.M.B.B.Z.B.B.Z.Z.B.Z.B.Z.Z.Z.Z.Z.Z.B.Z.Z.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.B.B.Z.Z.Z.D.}.}.}.{.[.[.[.[.]..X].[.].].W.W.W.!.W.Q.T.W.Q.Q.T.T.T.T.T.T.T.oXH.z.z.z.z.z.z.z.z.H.T.T. X1XiXiXdXdXdXgXcXgXcXcXcXgXdXbXbXgXcXbXgXzXnXVXVXnXnXnXmXmXmXmXNXNXBXNXcXjX7X5XfXfX,X6XuX7XfXfXsXsXsXsXdXdXcXdXdXcXcXdXuXuXuX5X5XuXuX5X5X5X5X5X7X&X7X&X|.(.(.].|.|.|.|..X/.XXJ.L.L.L.I.L.L.K.K.P.P.P.P.K.K.P.P.K.K.{ ] [ W W W R R W Q V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.Q V.V.n.V.V.n.V.Q V.V.V.V.Q V.V.n.V.G.V.n.V.V.Q V.Q V.G.V.V.n.n.n.n.n.V.Q V.Q n.n.n.n.V.V.Q V.Q V.V.n.V.V.Q V.n.n.Q V.V.V.V.V.V.V.V.G.V.V.V.V.D.V.V.D.V.V.V.V.Q : . . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.B.Z.Z.Z.B.B.B.Z.M.M.M.B.Z.Z.Z.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.B.B.B.Z.Z.Z.Z.Z.Z.Z.Z.B.B.Z.V.Z.U.*X}.}.}.[.[.[..X[.[.[.[..X].].!.!.W.!.W.W.W.Q.Q.Q.!.T.T.T.T.T.oXT.H.x.H.z.z.z.H.z.z.x.z.H.[.1X1X1XiXiXdXdXdXdXdXdXdXdXcXdXdXcXjXdXgXVXbXBXnXbXnXnXBXmXMXNXMXBXbXvXfX5XuX,X7XfXfX6XfX6XsXsXdXsXdXxXdXdXdXcXdXcXbXcXpX5X5X5XuX5X7X5X5X5X5X5X5X5X5X7X&X`.`.|.|.|..X`./.I.L.K.L.L.U.U.L.K.K.K.P.P.P.P.P.K.P.P.K.{ K.[ [ U W W R R Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.V.Z.F.V.V.D.F.Z.V.V.Q V.Q V.V.V.V.V.V.V.V.V.V.Q Q Q n.V.V.V.V.V.V.V.V.V.n.V.V.V.V.Q Q V.V.V.V.V.n.V.V.V.n.Q V.V.V.V.Q V.n.n.Q V.n.n.V.V.V.Q n.n.n.V.Q Q V.V.V.Q V.V.V.V.V.V.Q Q V.V.Q V.V.V.V.V.V.V.V.V.V.D.V.Q D.Q V.V.V.V.Q z X . YXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.Z.Z.B.Z.B.Z.M.B.M.M.M.B.B.B.Z.Z.Z.D.Z.Z.B.Z.Z.B.Z.Z.Z.B.M.M.B.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.v.B.V.V.~.&X*X X+X}. X[. X+X.X}. X[.[.].].].!.!.XXW.W.!.!.W.W.T.W.T.T.T.T.T.T.T.H.H.z.z.z.z.z.z.z.z.H.]. X,XOX5XOXOXfXfXsXsXxXxXsXxXxXsXjXsXcXcXdXVXbXVXnXBXMXMXVXbXbXcXdXsX,X6X7X6X6XuX7X6XfXsXfXsXsXsXdXxXdXxXdXVXcXbXdXcXdXdXuX7XuX7XuXuX5X5XuX5X5X5X5X7X6X,X&X|.|.|.|././.I.I.L.L.L.U.U.L.U.L.J.K.K.U.U.U.P.P.P.P.P.P.K.] [ v.W R W Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Z.V.D.V.D.V.Z.Z.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.G.V.n.V.V.V.Q V.Q Q V.Q V.V.V.V.V.V.V.Q V.V.V.V.V.V.n.n.G.V.Q V.Q V.Q n.Q V.Q V.Q Q V.Q n.n.V.V.Q V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.Q Q V.Q V.V.V.V.V.V.V.V.V.Q D.Q V.V.Q Q Q G.T o o YXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.B.B.Z.B.Z.B.Z.B.Z.M.Q M.B.B.B.Z.Z.Z.Z.Z.B.B.Z.Z.B.Z.Z.Z.M.v.v.M.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.V.V.!.}.%X}.+X[.}. X X+X X[.OX[.[..X[.].!.].!.XX!.!.!.!.W.W.W.T.T.W.T.T.T.T.H.H.H.H.z.z.z.z.z.z.z.T.(.,XOXuX%X X|.|.%X|.|.|..X,X X,X,X,X X,XsXxXdXxXdXsXdXdXxXiXfXfXfXfXfX,X6X6X6X7X6XfX6XfXiXfXsXxXsXxXdXcXcXcXcXgXcXVXbXbXdX5X5X6XuX7XuXuXuX5XuX5X5X&X,X6X5X7X%X&X`.`./.).I.L.I.I.I./.).).).).I.U.U.U.$XU.=XP.P.P.K.K.v.Q W W Q Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.D.D.V.D.D.D.Q #XD.Q D.V.Q V.V.Q Q V.V.V.n.V.n.V.V.V.V.Q Q V.V.Q V.Q V.V.V.V.V.V.Q n.n.V.V.V.V.V.V.V.n.Q V.V.n.V.V.V.V.Q V.V.Q V.Q Q Q V.Q V.V.n.V.Q V.V.V.V.n.Q V.Q n.Q V.Q n.V.V.V.V.V.n.V.V.V.V.Q @XQ Q Q #XQ D.V.V.Q Q V.Q o . YXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.Z.Z.Z.B.B.B.B.B.M.M.M.M.B.B.B.B.B.Z.B.Z.Z.Z.B.Z.Z.Z.Z.Z.Z.M.M.M.B.B.B.Z.Z.Z.Z.Z.B.Z.Z.Z.Z.D.}.%X-X}. X X X+X X}. X+X[.[.[.[.].!.[.!.[.!.!.!.W.!.W.W.W.W.T.W.W.T.Q.oXT.H.H.oXz.z.z.z.z.H.z.H.XXOXuX X5X|. X|.|.|..X|..X.X(.(.(.XXXX.XxXsXsXdXdXsXsXfXxX,XfX6XfX,XfXfX6X6X6X6XfXfXfXfXfXxXdXdXdXxXcXdXgXcXcXVXVXcXcXcXdXiXuX5X5XuXuX7XuXuX7XuX5X5X5XuX5X5X5X|.`.`./.E.J.I././.'.'.'./.`.'.'.I.U.U.P.P.K.] ] ] [ b.Q Q Q Q N.V.V.V.B.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.D.D.D.#XD.D.D.Q D.Q V.D.V.V.V.V.V.V.n.V.G.Q n.Q Q V.V.V.V.V.V.n.V.V.V.V.V.V.V.Q n.n.Q V.V.n.n.V.V.V.V.n.V.V.n.n.V.Q Q V.V.V.V.Q V.Q Q V.n.V.V.V.V.V.Q V.V.V.V.V.V.n.V.Q V.V.Q V.V.Q n.V.V.n.Q V.D.Q Q D.Q Q D.Q Q Q F.G.V.V.0 o YXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.Z.Z.B.Z.B.Z.Z.B.B.Z.M.M.M.M.M.M.B.B.M.Z.Z.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.[ v.M.M.Z.B.B.Z.Z.Z.Z.Z.A.Z.Z.~.}. X X X}. XOXOX+X}.[.+XOX1X+X.X[.[.].[.].].].].].].W.].!.!.T.W.T.T.Q.T.W.T.oXoXz.z.z.z.z.z.z.H.H.E. X%X5X5X X X X&X|.|.|..X.X'.XX(.XX'.XX,XdXdXxXxXsXsX6XfXfXfXfXqXfXfX,X6X6XxXsXsXsXsXdXxXsXxXsXdXdXcXgXcXVXgXcXcXbXbXcXdX,XuX5XuX5XuX5X7XuXuX7XuX5X5X5X5X%X5X|..X(./.I.J.I.I.XX(.'.'.'.).).I.U.P.P.{ ] [ ] ] ] R W Q Q N.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.D.D.D.D.#XD.#XD.D.V.V.V.Q V.Q V.Q V.V.Q V.V.V.V.V.V.V.Q Q V.Q V.V.V.V.V.V.V.V.V.V.n.Q Q Q V.V.n.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.Q n.n.n.n.n.V.Q n.Q V.V.Q Q V.Q n.Q n.n.n.V.Q V.Q Q n.V.V.Q V.V.V.Q D.D.Q D.Q D.Q Q V.V.Q Q V.n o YXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.B.B.Z.Z.B.Z.B.B.Z.Z.B.Z.[ [ M.B.B.M.B.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.B.B.Z.M.v.M.Z.B.B.Z.B.Z.D.Z.A.Z.Z.A.&X&X%X+X-XOX+X1X1XOX1X1X1X1X1X1X+X.X[.[.[.[.].].].!.W.].W.!.W.W.W.W.W.T.Q.T.T.T.T.oXoXz.z.z.z.z.z.z.T. X;X,X5X X%X%X|.|.|.|..X`..X(.(.(.XXXX].,XxXdXxXsXxXsXiXsXfX6XfXfXfXxXxX6X6X6XsXsXsXxXdXdXdXxXcXVXdXcXcXcXcXVXbXbXbXcXdXuX5XuXuX5X5XuXuXuXuXuXuXuX7XuX7X5X5X5X/.I.I.I.I./.L.J.I.(.'.I.U.U.P.K.K.] { { { [ P P W N.Q V.V.V.V.V.V.V.V.N.V.D.V.V.V.V.V.V.V.V.D.V.V.V.D.D.$XD.$X$X#X#XV.V.V.V.V.V.V.V.V.V.V.Q Q n.Q Q V.V.V.n.n.V.V.Q n.V.V.V.V.V.V.V.n.V.V.n.V.V.V.V.V.V.V.V.V.V.V.V.V.n.V.V.V.V.V.V.Q Q n.n.n.n.n.n.n.n.Q Q Q Q V.V.V.V.n.n.n.V.Q n.Q Q V.Q Q Q V.Q V.Q Q D.Q Q Q D.Q D.V.Q Q V.Q V.D X YXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.Z.Z.Z.Z.B.Z.Z.B.B.Z.B.B.B.Z.B.Q Q M.M.B.B.B.B.B.Z.Z.B.Z.Z.B.Z.Z.Z.M.M.M.B.B.M.B.B.Z.B.Z.Z.Z.F.{.&X X+X X-X XOXOX1XOX1XOX1XOX1XOX}.[.}.[.[. X].[.!.].!.!.W.W.W.W.W.T.W.T.T.T.T.T.oXT.T.oXT.oXoXoXz.z.H.}.,X;X X XOX X X X|.|.,X.X.X'.(.(././.(.(.uXcXcXdXcXdXsXsXxXfXsXfX6X6XxXxX6XsXxXsXxXxXcXdXcXdXcXcXVXdXcXcXcXbXbXbXBXcXfXuXuX5X5XuXuX5XuX5XuXOX5XuXuX,XuXfX7X5X(.J.I.I././.U.'.).)./.U.L.K.{ ' ] { { ' x B G U Q Q Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.D.D.D.D.V.D.#XD.D.$X$X#X#X#X#XV.V.V.V.V.Q V.Q V.V.V.V.V.V.V.Q V.V.V.V.V.Q n.Q n.V.V.Q V.V.V.V.n.n.n.Q V.Q Q V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q Q n.n.Q n.n.n.n.n.Q n.n.n.V.V.V.n.n.n.V.Q V.Q Q V.n.n.Q V.V.V.Q V.D.Q Q D.Q Q Q F.Q Q Q F.V.V.! @ YXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.Z.Z.M.B.Z.B.B.B.B.B.B.B.B.Z.Z.Z.M.Q B.M.M.M.M.B.Z.Z.Z.Z.M.Z.Z.B.Z.M.M.M.M.B.B.B.B.B.B.Z.Z.Z.B.F.}. X X X XOX XOXOX1XiX1XiX;X1X1XOX+X1X[.[.[.[.,X].[.].W.].].W.W.!.W.W.T.T.T.T.T.T.T.T.T.oXT.H.z.x.z.z.H.[.OX,XuX,X5X,X,X X,X X.X|..X`.(.(.XXXXXX(..XfXcXdXcXgXcXcXsXdXsXsXsXsXsXdXxXxXdXdXdXdXxXdXcXcXcXbXcXcXcXbXbXbXbXbXVXdXuXuXuXOXuXuXuXuX,XuX5XuXuXuX;XaXuXiXiX7X|././.).).).U.,X).)./.U.U.P.] ' ' ' i 8 w w c G R Q Q V.V.V.D.V.Z.V.V.V.V.V.V.D.V.V.D.V.V.D.D.V.V.#X@XD.$X$X@X#X$XQ D.D.D.Q D.Q V.D.Q V.V.V.Q Q V.V.V.V.V.V.V.n.V.V.n.Q Q V.V.V.Q n.Q V.Q V.V.V.V.V.Q V.V.V.n.V.V.V.n.V.V.V.Q V.n.V.V.Q n.n.V.n.n.n.n.n.V.n.Q V.Q V.Q Q n.n.Q V.Q V.V.V.n.V.Q Q Q V.V.V.Q D.F.Q D.D.Q Q Q V.Q Q Q V.n.y YXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.B.B.Z.M.B.B.Z.B.M.B.B.B.Z.B.B.M.Z.B.M.M.B.M.B.Z.Z.Z.Z.B.Z.B.B.B.M.B.M.B.M.M.B.M.[ B.B.B.Z.Z.Z.Z.(.}. X X XOXOXuX1X1XOXiXiX1XiX1X1X1X1X X}. X[.[.[.].!.].].W.!.W.!.W.W.W.W.T.T.W.T.T.T.T.T.T.T.oXH.z.oXH.H.].OXiXOX5X X XOX X,X X|.|..X`.'.(.XX(.(.XX(.|.sXgXgXgXbXcXcXdXdXcXcXcXcXdXxXsXxXcXcXdXcXdXVXcXcXVXcXcXbXbXbXbXbXbXbXxXOXOXuX;X,XuXuXuXiXuXuXuX1XuX,XiXuXiXpXfX5X`./.).I.U.U.U.P.P.{ ' m m i 1 * 1 6 w 9 9 w a D Q Q Q Q F.V.V.D.V.V.V.V.V.V.V.V.V.D.V.V.V.V.V.D.V.V.D.D.#X$X#X#XD.V.D.Q D.Q D.V.V.Q V.Q V.Q V.V.V.V.V.V.V.V.n.V.n.V.Q V.V.V.V.V.n.V.V.n.Q Q V.V.V.V.V.V.V.V.V.V.V.Q V.n.V.n.V.n.V.V.Q n.n.n.n.n.n.n.n.n.Q n.Q Q n.Q V.n.n.Q n.V.Q Q V.V.Q V.V.V.V.V.Q Q Q Q D.Q Q V.Q Q Q V.Q Q n.Q T # YXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.Z.Z.B.M.Z.M.Z.B.M.B.B.B.B.B.Z.Z.B.B.Z.Z.M.B.Z.B.Z.Z.B.B.[ B.B.B.B.B.M.Z.B.Z.B.B.M.M.B.B.B.B.B.Z././.|. X5XuXOX XuXiX1XiXiX1XiXiX1XOX1X XOX[..X X X@X].[.].].].].].].!.W.W.W.W.W.T.W.T.W.T.T.T.T.H.H.H.H.H.T.].OX1XuX5X5X5X5XOXOX,X|.|.`..X.X(.(.(.(.(./..X XxXgXcXgXbXbXbXcXgXcXcXcXxXcXcXxXcXcXgXcXcXcXcXcXbXVXvXVXBXbXVXvXbXVXuX XOX,X,XuXOX X5XuX XuX,XuXuX1XiX7XuXuXuXpX&X/.U.U.' N m m l i 1 & & - 1 > < e 0 9 9 9 w r B R Q Q V.V.V.V.Z.Z.Z.V.D.V.V.V.V.V.V.V.D.D.V.V.V.D.D.D.D.D.F.D.Q Q Q V.Q V.Q Q V.Q V.Q V.V.V.V.V.V.V.n.V.V.G.n.V.n.V.V.Q Q n.Q V.V.Q Q Q V.V.Q V.V.V.Q V.V.V.V.G.n.Q V.V.V.V.V.V.V.Q n.n.n.n.n.n.n.n.n.V.Q V.V.Q V.n.n.n.V.n.Q V.V.Q V.V.Q V.Q V.V.V.Q D.Q Q D.Q Q Q V.V.Q V.V.Q n.n.< YXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.B.Z.B.B.M.B.B.B.B.B.Z.Z.Z.Z.Z.Z.B.Z.M.Z.Z.B.B.Z.B.B.B.Z.Z.B.B.B.B.Z.Z.B.B.Z.Z.Z.Z.M.B.B.M.Z.B.Z.L.)._.%XOXuXfXuXuXiXiX-XiXiXuXuX;XOX,XOX,X+X}.}.|.[..X[.].[.].].].].[.[.W.W.W.W.W.T.W.T.W.T.oXoXT.T.H.H.H.H.E.XX,X;XiX1X5X5X XuX X X|.|.|.|.`..X(./.(.(.(.(..XuXdXcXdXbXbXbXbXcXcXcXcXxXcXcXcXcXbXcXvXbXbXcXbXbXbXbXbXcXbXbXBXbXdX|. X.X X X X,X1X,X%X X5X,XOXuXOXuXuXuXuXuXpX7Xl.d k 2 > , , - - $ $ $ - : 2 5 8 9 8 9 9 9 y t H W Q Q V.V.V.V.V.F.V.V.D.D.V.D.V.V.V.V.V.V.V.D.D.D.D.D.@XD.V.V.V.V.Q V.V.Q V.Q Q V.V.V.V.V.V.V.Q Q V.V.V.Q Q Q V.V.V.V.V.V.Q Q Q V.V.Q V.V.Q V.V.V.V.V.V.n.V.V.Q V.V.V.Q V.V.V.V.Q n.n.n.n.n.n.n.n.Q n.V.Q V.Q V.Q n.Q n.n.n.n.n.V.Q V.V.V.Q V.V.V.V.V.V.Q V.Q Q V.Q Q V.Q V.Q V.Q 9 YXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.B.B.B.B.B.B.B.B.B.K.M.M.Z.M.Z.M.M.Z.Z.Z.Z.M.Z.B.Z.Z.Z.B.B.Z.B.Z.Z.Z.B.B.B.Z.Z.Z.Z.Z.Z.B.B.M.B.Z.m.)._.&X-XfXuXuXuXiXiXpXiXaXiXuX;X1X1XOX;X X X X+XOX}.[.[.[.].].].!..X.X.XXXW.W.W.W.W.W.W.T.T.T.T.T.oXH.H.H.E.T.XX X1X1X,XOXuX,X X,X}.|. X|.|.`..X`..X(.'..X(.`.|.uXVXbXbXbXgXbXbXbXVXcXcXbXcXcXbXbXcXcXcXcXbXbXbXbXbXbXBXBXbXbXbXfX X[..X X X X XOXOX-XOX X5X XuXuXuXuXuXuXpXpXfXM : - - % $ # @ @ @ # # $ , 5 5 8 8 9 9 9 9 y y x R Q Q V.V.V.F.V.V.V.D.V.V.V.V.V.D.D.V.V.V.V.D.D.D.D.#XQ V.V.V.V.Q V.V.Q V.V.V.Q Q Q V.Q V.V.V.V.V.V.n.V.Q V.V.V.V.V.Q V.Q V.V.Q V.Q V.Q V.V.V.V.Q Q V.V.V.V.n.Q Q Q n.V.Q Q Q n.n.n.n.n.n.n.n.n.n.V.Q Q V.V.Q Q Q n.V.V.Q Q n.n.n.V.V.Q V.V.V.V.Q V.n.V.Q Q V.Q Q V.Q Q V.V.Q Q ! p YXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.B.M.B.Z.Z.B.M.B.M.Z.Z.B.Z.Z.Z.M.M.B.Z.M.B.Z.Z.Z.Z.B.Z.B.B.Z.B.M.B.Z.Z.B.B.Z.Z.B.Z.Z.Z.Z.Z.M.B.B.A./._.|.%XuXiXiX-XdXuXiXaXhXiXiXuX1X1X XOX;XOXOX X X X X[..X[.].].].!.].].XXXX!.W.W.W.W.W.W.T.W.T.T.T.T.H.H.H.H.E.E..X1X;X1X,X,X X X X X|.|.|.|.`..X`..X(..X.X`.|.|. XiXdXbXbXgXVXbXbXbXVXbXbXcXbXbXbXcXbXbXbXbXbXcXbXbXbXbXVXvXbXbX1X[. X[. X|. X XOXOX X,X X X XOXuXuXiX%XpX%XpXpX(.0 # @ @ @ O X X O @ # : 6 8 8 8 8 8 9 9 9 y y f R Q Q n.Z.V.V.V.F.Q V.V.V.V.V.V.V.V.V.V.V.V.D.V.@XD.D.D.V.V.V.Q V.V.Q Q V.V.n.G.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.G.V.V.V.V.V.V.V.V.V.V.n.V.Q V.V.Q V.V.Q V.Q Q V.n.n.n.n.n.n.n.n.n.n.n.Q n.V.Q V.Q V.Q n.n.V.V.V.V.n.V.Q V.n.V.Q V.Q Q V.V.V.n.n.V.V.V.Q V.Q V.n.V.Q Q V.Q n.a YXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.M.B.Z.M.M.B.B.M.M.B.B.B.B.Z.M.M.Z.M.M.M.B.M.M.Z.M.M.Z.B.B.B.Z.B.M.M.B.Z.Z.Z.B.B.Z.Z.Z.Z.B.M.B.B.B.m.(._.5XuXaXiXaXdXdXiXpXaXdXiX-XiXiXdXuXuX,X5XOX X X X}.,X[.[.,X[.].].].!.!.!.XXXXW.W.W.Q.T.Q.T.T.T.T.T.H.H.E.E.E.E..X1XiX1X1XuX,XuX X-X5X X|.%X X X|.|..X|.|.|.|.|. X XfXdXdXbXbXcXVXbXBXVXBXnXBXbXBXMXbXbXbXbXbXMXbXBXBXBXbXbXbXbX X.X.X[..X[.[.}.OX,X5X X1XuXOX,XuX-XuX5XuXpX%XpXfX3 # @ @ O O o o o # $ < 5 8 5 5 8 8 8 9 8 y y t T W Q Q V.V.V.V.V.@XV.V.V.V.V.V.V.V.V.n.V.V.V.V.V.D.V.V.G.V.V.V.V.V.V.V.V.V.V.n.V.n.V.Q V.V.Q V.V.V.V.V.V.V.V.Q V.V.V.Q n.V.Q Q V.Q V.V.Q Q V.V.V.Q V.V.V.V.Q V.Q n.n.n.n.n.n.n.n.n.n.n.n.V.V.n.Q Q V.n.n.V.Q V.Q V.n.V.V.Q ! V.n.V.Q V.V.Q V.V.V.V.V.G.Q V.V.Q V.Q V.Q n.V.Q V.V.a YXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXM.B.Z.B.Z.M.M.M.M.B.B.M.B.Z.B.M.Z.M.Z.M.M.B.M.Z.M.Z.M.M.Z.B.Z.Z.M.Z.M.M.Z.Z.Z.B.Z.Z.Z.Z.B.Z.Z.B.B.B.B.U.I.|.7XpXpX7XjXaXaXdXaXaX;XpXaXiXaXdXpXuX X XuX X X X[.+X}..X}.[.!.[.!.].XX].].].XXXXW.XXT.T.T.T.T.T.T.E.E.E.XXE.R.(.5X1XuXuX5X;X-X X%XuX X X%X5X5X|.|.|. X|.|. X X X5X5XiXaXgXVXnXVXgXVXnXbXnXbXBXBXBXbXbXBXbXBXbXBXbXbXBXbXMXVXbX1X.X[..X.X+X,X X X X X X1X,X,XOX X XuX5X%XiXuXpXuXN 1 # @ X X o o o @ & 4 y 8 5 8 8 8 8 9 9 9 9 h T ! Q Q V.V.V.V.V.V.V.V.V.D.V.V.V.V.V.V.V.V.V.V.V.V.V.V.D.V.V.Q n.V.V.V.V.n.V.V.n.V.V.Q V.V.V.V.V.V.V.V.V.V.V.Q V.n.V.V.V.V.Q V.Q V.G.V.V.Q V.V.n.n.n.V.V.V.n.n.n.n.n.n.n.n.n.n.n.Q V.V.Q Q Q V.Q Q V.Q V.V.Q Q V.V.! V.V.V.Q V.V.Q V.V.V.Q V.V.V.V.V.V.V.V.V.Q Q Q V.n.n.V.Q V.V.p YXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.B.M.B.B.B.W M.M.M.M.M.M.B.B.B.M.M.M.M.M.M.B.B.Z.B.Z.M.M.Z.B.Z.Z.Z.Z.M.M.M.[ Z.B.M.M.Z.Z.Z.[ B.B.B.B.B.$XU.=X7X7X7XpXpXdXaXdXaXaXaXaXpX-X%XiX%XuX XiXfXiX X}. X+X.X}.}.,X[.[.[.[.].].].].!.!.!.XXXXXXXXT.T.T.T.H.J.J.J.c.' l. XuXuX XuXuX X X%XOX X X X|. X X|.|. X X X X|.|.5X5XiXfXaXdXgXgXgXgXgXVXbXbXcXnXVXnXBXbXBXbXBXnXBXbXBXBXbXbXdXOX.X[. X[.,XuXOX X XuX,XOXOXOX XuXuX%X%X5XiX7XpXiX{.2 & $ @ O o . o @ $ 4 5 8 8 8 5 7 8 9 8 y y j R R R Q Q V.V.V.V.V.V.V.V.V.V.V.F.V.V.V.n.V.n.V.V.V.V.V.V.V.V.V.Q Q V.V.V.V.V.n.V.V.V.V.G.V.V.V.V.Q V.V.V.V.V.V.Q n.V.n.V.V.V.V.Q Q V.V.V.Q V.V.Q V.V.n.V.Q n.V.n.n.n.n.n.n.n.n.Q n.Q Q V.Q V.V.V.n.Q V.Q Q V.Q Q V.V.n.V.V.V.V.V.Q V.Q V.V.n.V.V.V.Q V.Q Q V.V.V.V.Q n.V.Q Q V.Q p YXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.Z.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.Z.M.Z.Z.Z.Z.B.Z.Z.Z.M.Z.Z.Z.B.Z.Z.M.M.Z.Z.M.M.M.Z.Z.Z.B.M.B.B.B.B.K.U.U.=X=X&X7XpX;XdXdXdXhXaXdXdXiXiXiXiX5X-XuX%XiXiXuX X X+X X+X[.[.[.[.[.!.[.].!.XX!.!.XXW.W.XXT.E.H.XXT.J.E.H.l l l d '.OXuXuX X5X-XuXuXuX,X&X X|. X|. X5X X X|. X X X5XOX-XuXuXdXdXgXVXgXVXgXcXgXcXVXVXbXnXBXnXbXMXBXbXbXbXBXVXcX1X X.X X.X X X1X,X X XOXOX,XOXuXuXuXOX%X%XiX%XiXpXiXpXy = $ @ @ o o o # & , 5 8 5 5 w 7 8 8 9 8 t A R W W ! Q Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.n.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.n.Q V.V.V.V.V.V.n.V.V.V.V.V.V.V.V.V.Q Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.n.Q n.Q Q n.Q n.n.Q n.n.Q V.V.Q V.Q V.Q V.n.V.G.V.n.V.Q V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.Q V.V.Q V.V.Q n.V.Q V.Q V.Q V.y YXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXV.Z.W W M.M.M.M.M.B.B.B.B.B.B.B.B.B.Z.M.Z.M.B.Z.Z.[ B.B.Z.Z.Z.Z.M.Z.Z.B.M.M.Z.Z.M.Z.Z.Z.Z.Z.Z.B.M.B.B.Z.K.K.P.=X7X7XsXkXaXdXiXdXkXaXaXaXiXiXpXpXuXuX XuX;X;XOX+X X}.+X X}.[.[.[.[.[.[.[.].].].!.W.XXT.T.E.E.E.E.E.J.N 3 3 , , 1 c. XOXuX-XuXuXuX%XOXuX,X X X5X X5X5X X X5X,X&X X X,XuXuXfXiXiXdXdXgXgXgXgXgXgXdXgXgXcXbXbXnXnXnXbXBXBXBXVXfX X X X X X X XOX X X X X XuXOX XuX,XuXiXuXuXiXiXuXpXpXN = $ $ @ O o X # $ : 5 8 8 8 5 8 7 8 y r b R R W R Q Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.n.V.n.V.V.V.V.Q V.V.V.V.V.V.V.Q n.V.V.Q V.n.V.V.V.V.V.V.V.V.V.V.V.V.V.n.n.n.V.n.V.n.n.V.Q V.Q V.V.Q Q V.Q V.Q V.n.V.n.V.V.V.V.Q V.V.Q V.V.V.V.Q V.V.Q V.Q V.Q Q Q V.Q V.V.n.V.V.V.V.V.Q V.V.V.V.2 YXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.Z.M.M.W M.M.M.M.B.M.M.M.Z.B.M.M.M.M.B.Z.M.Z.M.M.Z.M.Z.Z.Z.Z.Z.Z.Z.B.M.M.B.Z.B.B.Z.Z.Z.Z.Z.M.Z.B.B.B.B.Z.Z.{ P.7X7XkXdXdXdXjXjXhXdXaXaXpXpXiX-XpXiX-XuXOXOXuXOX X+XOX[.[.+X[.[.[..X.X[.].].!.W.W.W.XXW.T.E.J.z.N d 0 4 < > , > , d |.uXuXuX%XiX7X5X X,XuXOX5X X5X X X X1XOX,X XOX,X-XuXuXuXiXfXaXiXdXdXdXdXdXhXdXdXdXgXgXgXbXnXnXBXBXnXbXiX,X X}.}. X1XOX XOX1X X X X1XuX,XuX1X;XuX%XiXuXpX%XiXiXpX+Xy $ $ # + X O * * * e 5 8 5 5 5 e y f B R R W W W Q Q Q V.V.Q V.n.V.V.V.V.V.V.V.V.V.D.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.Q V.V.V.V.V.Q V.Q Q V.V.V.V.V.V.Q Q V.V.V.V.V.Q V.n.V.V.V.V.V.V.V.V.n.V.V.V.Q Q V.Q Q V.n.V.Q Q Q V.Q Q V.n.V.V.Q V.V.n.V.V.n.V.Q V.V.n.n.V.V.V.V.V.V.V.V.Q Q n.V.n.G.V.V.V.V.V.V.V.V.Q Q V.V.n.V.V.Q : YXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.B.v.M.M.M.M.M.M.B.M.M.B.M.M.M.M.Z.Z.M.B.M.M.M.Z.M.M.M.Z.Z.M.B.M.M.Z.Z.M.M.B.Z.Z.Z.M.M.Z.M.Z.Z.M.B.B.B.B.Z.Z.P.=X7XjXcXbXdXdXdXdXdXdXdXaXfXiXaXaXuXuXiXiXiXuXuX XuX-XOX X X}.[.}.[.[.[..X].W.XX(.XXW.oXc.c.N 6 e 3 < 4 0 0 4 , , > 6 `.OXuXuXuXiXiXuXuXuXuXuX X5X5X X7X,XOX,X5XOX5X X XuX5XOXuXuXiXiXiXiXiX1XiXaXiXdXdXdXdXVXgXnXnXnXbXgXsXOX+X1X XOX+X,XuX,XOX,XuX X XOXOXOXuXuX,XuXuX%XuX-XpXuXiXfXiXn - $ $ @ @ & > ; ; e 8 y w u z z T R R W W R W R Q Q F.Q Q F.V.n.n.V.V.V.F.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.n.V.V.V.V.V.V.Q V.V.V.V.V.V.V.Q V.V.V.V.Q V.Q V.V.Q V.Q V.n.V.V.V.V.V.V.Q V.V.Q V.Q V.Q V.n.Q V.V.Q V.n.Q V.V.Q Q Q Q V.n.V.V.Q n.V.V.V.V.Q V.V.G.n.n.n.Q Q V.n.n.V.V.n.V.n.V.Q V.V.V.Q Q V.V.V.Q V.V.n.Q ! # YXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.M.M.v.M.M.M.M.M.B.M.Z.M.B.M.M.M.Z.B.M.B.M.B.Z.M.Z.Z.B.M.Z.Z.Z.M.Z.M.Z.M.Z.M.B.Z.Z.Z.Z.Z.M.B.B.M.Z.M.M.B.B.Z.B.K.=X7XsXdXdXdXsXjXdXbXsXaXpXpXaXpXpXuXuXiX-XuXuXuXOX X X,X X X X X X[.[..X.X`.U.XXT.c.p 3 2 1 3 > e 6 7 8 8 8 7 e > ; : N XuXuXiX%XuXuX,XuXuX,X5XuX5XOX,XuXuX X XOXOX,XOX,X,XuX;XfXuXiXfXuXfX1XuXOX1XuXuXfXuXiXgXlXnXnXbXiX1X1X1X1XOX,XOX,X1XOXOXOXOX,XOX,X,XOXOX,X;XuXuXuXiXpXiXpXuXiXiXp $ $ - ; 1 8 e e t b b T T V R R R Q R Q ! ! W W Q V.V.V.V.Q n.V.V.n.n.V.Q Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q Q V.Q V.V.Q Q n.V.V.V.V.Q Q V.V.V.Q V.V.V.Q V.Q V.n.V.V.V.Q V.V.V.G.V.V.V.V.V.V.n.Q Q n.n.V.Q V.Q n.V.Q V.V.Q V.Q V.Q Q n.Q V.Q n.V.G.V.Q V.V.V.V.n.V.n.n.Q V.V.Q Q V.n.V.Q V.V.V.V.V.V.Q V.Q Q V.V.V.Q V.! T . YXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.B.M.W M.M.M.M.M.M.M.M.M.M.M.Z.[ M.B.M.[ Z.Z.M.M.M.Z.B.Z.M.M.B.M.M.M.M.B.M.B.Z.Z.Z.Z.M.M.B.B.Z.Z.Z.M.Z.B.B.B.B.V.Z.S.C.C.|.E.sXpXpXdXiXaXiXfXiXiXiXiXiXiXiXOXuXuX XuX X+X X X X[.[.`..XH.z.z.d , , : : : : 1 3 8 8 8 8 8 8 8 8 7 : * & p {.uX-XiXuXuXuX;XuXuX;XuX5XuX1X1XOXuXuX XuX1XOXuXOXOXOX,XuXuXuXuXuXOXOX1XuX1XOX1XOXOXOX,XiXbXbXsXOX1XOX,XOX1X+XOXOX1XuX5XOXuXuXuX;XuX X5XuXuXuXuXuXpX%XiXiXuXiXiXc.3 - 1 r M n.T T T Q R R R R R R R R Q R Q Q W Q Q V.V.V.V.V.V.n.V.V.V.V.V.V.n.V.V.V.V.D.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.n.Q V.Q V.n.n.n.V.Q V.V.V.V.V.V.V.V.Q V.Q V.V.n.n.Q V.Q V.V.Q Q Q V.Q V.Q V.Q V.V.n.n.Q V.V.n.Q V.V.Q V.V.V.Q V.V.n.V.V.V.Q V.V.V.n.V.V.V.V.V.Q V.n.Q V.V.V.Q V.G.V.n.T YXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.B.B.v.W M.M.M.M.M.M.M.B.Z.B.M.M.M.B.B.M.M.M.Z.M.B.B.Z.M.Z.M.B.B.M.M.M.M.M.Z.B.Z.Z.Z.Z.B.B.B.B.Z.Z.M.B.B.B.B.B.B.B.M.K v l p 0 d l c.oXW.~.^._.5X X].]. X,X1XOX X XW.T.E.T.T.G.G.' N d ; > > > > < e e 5 3 6 5 5 8 8 8 8 8 8 8 8 4 ; & - 2 c. X1XiXfXfXiXiXuX1XuXuX5X,XuXuXuX5XuXuX,X,XuX X1XuX1XuXuX;XuX,X X1X,XOXiXiXuXuXOX XOXOXuXuX XOXOXuX,XOXuXuXiXOX XOX,XuX5XuX,X%XuX X X5X-X5XiXuX%XiX-X-XiXiXiXiX+Xl ; 3 n T n.@XQ Q Q Q Q Q Q R Q Q Q Q Q Q Q Q V.Q D.V.Q V.V.n.V.V.Q V.n.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.D.V.V.V.Q V.V.V.V.V.Q V.V.V.V.V.V.V.Q V.V.n.V.n.n.V.Q n.V.n.V.V.Q n.Q Q V.V.V.V.Q Q Q V.V.V.n.Q n.n.V.Q V.Q V.Q V.V.Q V.Q V.Q V.Q n.V.Q V.n.V.V.V.V.Q n.V.V.V.V.Q Q V.V.n.Q V.V.V.V.V.n.V.V.V.Q Q V.Q Q V.V.V.Q V.Q T # YXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.Z.B.M.v.M.M.M.M.M.M.B.M.M.M.M.B.M.B.B.M.M.M.M.M.B.M.M.M.M.M.M.M.M.Z.M.Z.Z.M.M.Z.Z.M.M.Z.M.M.M.M.[ B.B.B.M.B.B.B.B.B.b.A k q 9 1 > , : > 6 7 8 a N n N n d d l d l l 0 : : ; > = > = = ; > 1 4 4 5 5 7 7 7 7 7 5 5 5 5 8 8 8 8 w 8 < : & - : d X1XiXiXaXiXiXfXfX1XuXuXuXuXiXiXfXuXuXOXuXOX XuX1X1X1X1X,XW.x.].,X|.,X;X1XuX7XuXuX1X-XuX5XuXOXuXuX;X1XfXuX,XuXuXuX5X5XuXuXuXuX%XuX5X X5X5X%XfXpXuXpXuXuXiXuX,X1Xn r y k Z T Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q V.Q V.Q V.V.F.Q V.n.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.n.V.n.V.V.V.V.V.Q G.V.n.n.V.n.n.n.Q V.n.V.V.Q Q V.n.Q V.Q V.V.Q V.V.n.! V.n.V.Q Q V.Q Q Q Q V.V.V.Q V.n.n.n.n.n.Q n.n.V.Q V.Q V.V.V.Q V.Q Q n.V.Q n.V.V.Q Q V.n.V.V.Q Q V.n.n.V.Q V.Q V.V.V.D - o YXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.B.M.v.M.v.M.[ M.M.B.M.M.M.B.M.M.M.M.M.M.M.B.M.M.M.M.M.M.Z.M.M.B.M.[ B.M.M.B.Z.M.B.Z.M.M.M.Z.B.Z.B.M.B.Z.Z.Z.Z.Z.B.B.J b q 9 8 < > > > > > 7 8 8 8 0 8 8 7 4 5 3 3 4 < 4 < e e < < 4 4 3 7 5 5 5 5 7 7 7 7 7 8 8 8 8 8 8 9 w q q 0 4 2 , 1 1 p H.1XiXaXfXfXiXiXuXiXuXuXfXiXaXpXpXiXuXuX XOX1X X1XuXOX|.H.d 1 l c.`.1X1X;XiXiXuXiXuXuXuX5X%XuXuX1XfXiXiXiXfXuXuXuXuXuX7XuX-XiX5X5XiXuX5X5XuXuXpXuXpXiXuXuXuX1XiXc.a k r b Z ! Q Q Q D.Q Q D.D.Q Q Q Q V.V.V.Q F.V.F.V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.Q n.G.Q V.V.V.Q V.V.n.n.n.V.n.V.Q Q V.V.V.n.V.V.Q V.Q V.V.V.Q V.V.Q n.Q V.n.V.V.V.Q V.V.V.Q Q Q V.V.V.Q V.Q n.n.n.n.V.Q V.V.V.Q V.V.V.Q V.n.V.Q V.Q V.n.Q V.V.n.V.n.G.V.n.n.n.Q V.n.V.Q V.V.b - $ YXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.B.B.M.v.M.v.M.M.M.M.B.M.B.M.M.M.B.B.B.B.M.M.M.Z.M.M.Z.B.M.M.M.Z.M.M.M.B.Z.M.M.M.B.M.M.M.M.Z.B.B.M.M.M.Z.Z.Z.Z.Z.Z.B.B.J h i 9 9 6 , > > > > e 5 8 8 8 8 8 8 8 8 8 8 8 5 5 5 5 5 5 7 7 7 7 7 8 7 8 7 7 w 8 7 8 8 8 8 8 8 8 i q f j p 9 6 , , 1 1 N ,X%XiXiXiXfXiXiXfXuXuXiXuXuXiXuXuXuXuXuXuXuXuXuX X|.z.d > , , d i N !.,XiXuXiXiXiXiXuXiXuXuXuX1XiXsXdXiXiXuX;XuXiX-XuXiX%XpX%X%X%X5X5X5XuX7XuXpXiXiXiXuXuX,XuXT k k a k v ! Q #XD.Q Q D.Q Q #XQ #XV.V.V.V.V.Q Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.Q V.V.Q V.V.V.n.V.V.n.V.V.V.Q Q n.n.n.V.V.V.V.n.V.Q Q V.V.V.n.V.Q Q n.n.Q Q V.Q n.V.Q n.V.V.V.Q V.Q Q n.n.n.n.n.n.V.Q Q V.V.V.V.Q Q Q n.Q Q V.n.Q Q V.Q Q n.n.n.n.Q Q n.n.Q Q n.Q Q V.Q n & = YXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.B.Z.B.M.M.[ M.M.M.M.M.M.M.M.M.M.M.M.M.B.M.M.Z.M.M.B.M.Z.M.M.B.M.B.M.M.Z.M.B.B.M.Z.M.M.Z.M.Z.M.Z.M.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.M.U g u p 9 0 < , , > > , 8 8 8 8 8 8 8 8 8 9 8 0 7 7 7 5 5 w 5 w 5 w 5 5 w w 5 w 5 w 8 8 8 8 w 8 9 t j c c c q 8 4 > , , , 3 ' X;XaXiXaXaXaXiXuXiXuXfXuXuX1XiX1XiXiX1XiXiX X(.S.i > > > > > > 6 0 N %XuXuXiXfXfXiXiXiXiXfXiXfXiXdXiXiXuXiXiXuXuXiXuXuXpX-XuXuX%XpX7XiX5XpXuXpXiXuXuXuX5X%XC.l r s r b M Q V.V.Q V.V.V.V.V.V.V.Q D.Q Q D.Q V.V.V.D.Q V.Q V.V.Q V.V.V.G.Q V.V.V.Q V.V.V.V.V.V.Q V.V.V.V.V.Q V.V.V.V.V.V.G.V.V.V.V.V.Q V.V.V.V.Q V.V.V.Q V.Q Q V.Q V.V.V.V.V.V.n.V.Q Q V.B.V.V.n.n.n.n.V.Q n.m.Q n.n.Q V.Q V.Q Q Q n.n.n.n.Q n.n.n.B.n.n.V.V.V.V.n.n.Q V.n.n.Q n.V.n.n.n.B.V.V.n.n.n.n.n.n.n.n.n.V.n.V.y + : YXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.B.B.B.Z.B.M.M.M.M.M.M.v.M.M.M.M.M.M.M.M.B.M.B.M.B.M.B.M.M.M.M.Z.M.M.B.M.B.B.M.M.M.M.Z.Z.Z.Z.M.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.U u u p q q 9 7 < 1 > , 9 9 q q q 9 q w i 9 q 8 8 7 8 w 5 5 w 5 w w 5 w 5 5 w 5 w 5 8 8 8 w p f j j x z c c 8 8 5 > , > , : l }.uXdXdXdXdXaXdXiXfXiXuXfXfXiXiXiXiXfXiXuX,XN k q e > > > , > > , < 4 d c. X5X5XfXiXiXhXiXaXiXiXiXiXfXiXiXiXiXuXiXiXiXpXiX%XpXuXuXpXuXuXpX%XuX%XpXpX7XuX7X&X7Xs y r r k v T V.Q V.V.V.Q Q F.Q V.D.Q Q @XV.D.Q D.D.Q D.Q V.Q V.V.V.V.n.V.V.Q Q V.V.V.Q V.Q V.Q V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.Q V.V.V.V.V.V.n.Q n.n.n.Q V.n.V.n.V.V.V.Q V.Q n.n.n.n.n.n.n.Q V.V.V.n.n.Q V.n.V.V.V.V.Q n.n.n.n.n.V.n.B.n.n.V.n.V.n.n.n.n.n.n.n.B.n.B.B.n.n.n.n.n.B.n.n.n.n.n.n.n.V.n.n.n.Q 3 : YXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.M.B.N.B.B.B.M.M.B.M.M.M.M.M.M.M.M.M.B.M.M.M.M.M.B.M.B.[ M.M.B.[ M.Z.M.M.B.B.B.M.M.M.M.Z.Z.Z.M.Z.M.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.B.U g u r p q 9 9 0 0 7 4 p w q 9 9 q q q w q w w 8 8 8 5 w 5 w 5 5 w w 5 w i w w 5 5 w q f g c B C P I G C C 8 7 4 , > , : > < N OX-XdXdXdXdXdXdXdXiXxXiXiXiXdXiXiX1X1X.X' 1 < < 4 , > > > > > : > , > 2 i z.,XOXfXhXiXiXfXiXpXiXiXiXiXaXiXiXiXiXpXiXuXpXpXpXpXpXiXfXuXpX-XuXuXuXpXpXpXuX7X5XM y y r p n T n.n.Q V.V.V.V.F.F.Q Q D.Q Q V.V.V.Q #XQ Q D.V.V.Q V.V.V.V.V.V.V.V.V.G.Q V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.Q Q Q n.n.n.n.V.V.n.V.V.n.V.V.n.Q n.B.V.n.n.n.Q V.V.V.V.V.n.n.V.n.V.n.V.m.n.n.n.n.n.n.n.B.n.n.V.V.V.V.B.Q n.n.Q n.n.n.n.V.n.B.n.n.V.V.V.Q n.n.n.n.n.m.n.V.n.V.! $ - YXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.Z.Z.B.Z.Z.Z.Z.M.M.M.M.M.M.M.M.M.M.B.M.M.B.B.B.B.B.B.Z.Z.Z.B.Z.B.Z.M.Z.Z.M.M.M.Z.Z.M.Z.M.Z.Z.Z.M.Z.Z.Z.M.M.M.Z.Z.M.Z.Z.Z.B.[ V u p p q 9 9 9 q w s z z j h f f i s a s s s f q f u u g g g g u g g g c g g g B V B A H I I I U W I I U g 8 6 , , 1 1 > : M |.uXaXgXgXhXgXdXaXiXfXfXdXhXiXiX1X[.x.N 1 > > < 5 4 1 > , , > > > & & & $ d n `. X1X1XpXpXpXaXiXdXaXdXdXiXdXdXiXaXiXpXpXaXdXdXpXpXpXuXpX7XuX5X|. XuX%X5X X&Xl.r y y r l T V.V.V.Q Q V.Q Q V.V.D.Q #XD.Q V.Q D.Q #XQ Q V.Q V.V.Q V.n.n.Q V.Q V.V.V.n.n.V.V.V.V.V.Q V.V.V.V.V.Q Q V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.Q n.n.n.n.Q V.n.V.n.Q n.Q V.V.n.n.n.V.V.Q Q m.V.Q V.V.V.n.n.n.n.n.n.V.V.n.n.n.Q Q n.n.Q V.n.V.V.n.V.n.n.n.V.n.n.V.V.n.n.V.B.n.V.n.V.V.n.n.n.Q Q n.n.Q n.V.T . $ YXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXM.M.B.Z.Z.Z.B.Z.B.B.B.M.U v.M.M.M.M.M.M.M.M.M.B.B.M.M.B.Z.Z.B.B.B.B.B.Z.Z.B.B.B.B.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.M.Z.Z.Z.B.B.Z.B.Z.M.U x h i i 9 w w w u c x B A H H H J H J K I U I I I U W M.M.M.W M.U [ [ W v.W U U W U U I I U W M.Q U R U I g 6 > > : > , ; & N |.fXdXbXgXzXhXVXdXxXdXdXiXfX X(.' , = > > , e 5 5 5 e > > > > & * % $ $ & & i c.,X X7XfXfXaXaXdXdXiXdXdXgXjXdXaXaXaXdXpXpXpXiXpXdXsXpXaXpX%X&X%X%X-X,X7X&XA.r y y r l D V.n.V.n.n.V.V.Q Q D.Q D.D.Q V.V.Q Q D.D.Q Q Q V.V.V.V.n.V.Q V.V.V.V.V.Q V.V.V.V.V.G.V.V.V.V.Q V.V.V.V.V.V.V.V.Q V.V.V.Q V.Q n.V.V.Q V.V.V.V.Q Q V.n.V.Q V.Q V.V.n.n.V.n.n.V.n.n.n.B.n.n.n.n.Q V.n.V.V.V.n.V.V.V.n.V.n.V.n.Q n.Q V.Q Q V.Q V.B.V.n.V.B.Q n.n.n.n.n.n.V.n.V.B.n.n.V.B.B.Q n.n.n.n.B.n.m.Q t X YXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXv.B.M.B.Z.B.M.B.Z.B.B.Z.B.M.M.M.M.M.M.M.M.M.B.M.M.M.M.B.B.B.Z.Z.B.Z.Z.Z.Z.M.M.M.B.B.B.Z.Z.Z.Z.M.Z.M.Z.M.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.B.B.U z c l h g g B G W Q W b.b.v.M.M.M.M.M.M.v.B.B.M.M.M.W W U M.W M.v.U v.M.M.M.W W Q Q Q Q M.M.Z.M.v.Q Q W G w > , , , ; - & % l |.cXjXlXbXVXVXdXdXuXOXz.n n p , $ - > > 1 5 5 7 8 8 7 1 , ; * * * & % % % % ; 3 ' W. XiXiXaXdXdXdXhXhXdXdXaXaXaXdXaXaXdXdXdXdXdXdXaXpXsXsXpXuXpXpXuX&X7XA.K y y r a Z V.V.V.V.V.n.Q V.Q D.Q Q Q D.V.Q D.D.V.V.Q D.V.V.V.Q n.V.V.V.Q V.Q V.V.V.n.V.V.V.V.V.Q Q V.n.V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.Q n.V.V.V.V.V.V.Q V.n.Q V.n.Q V.V.n.V.n.n.n.V.V.n.n.V.B.Q n.n.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Z.V.V.V.V.n.Q n.Q n.Q V.n.n.n.n.n.n.B.V.n.V.B.V.V.V.V.V.V.V.V.V.V.V.Q - . YXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.Z.Z.B.B.B.B.B.B.Z.B.B.Z.v.M.M.Q M.Q M.M.M.M.B.M.B.Z.Z.B.M.M.M.Z.B.B.M.M.M.B.[ B.B.B.M.Z.Z.Z.Z.M.M.M.M.Z.Z.M.Z.Z.Z.M.Z.Z.B.Z.Z.Z.B.B.v.F B m Y C U M.v.v.v.M.B.B.Z.Z.B.Z.Z.B.Z.A.Z.B.Z.M.M.M.M.M.M.M.v.v.M.M.M.M.M.v.W M.M.B.B.B.Z.M.M.Q W R I V e ; , > - # @ O # d J.bXzXbXVXiXfX,Xc.N N d = & % $ & , , 5 w u f g g g q 5 > * % % % % & % % % * = 1 N X XiXdXdXdXdXdXdXdXjXdXdXdXaXaXaXaXdXdXhXdXdXdXpX;XpXpXpX%XuX X&XZ.V.y y 9 r n T V.V.n.V.V.V.Q Q Q D.Q D.Q V.V.V.Q V.V.D.Q V.Q V.V.V.G.V.n.V.V.Q V.n.n.Q n.V.V.V.Q Q Q Q V.V.Q V.V.Q V.Q V.V.V.V.V.V.Q V.V.Q V.V.V.V.V.V.Q n.n.V.Q Q V.V.Q G.V.n.n.V.n.V.V.V.V.V.Q Q V.n.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.n.V.V.V.V.V.V.V.V.m.B.n.n.n.n.V.V.V.V.Q n.V.n.V.V.V.m.B.n.V.V.V.n.V.n.V.V.n.m.D X YXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXW Z.Z.Z.B.Z.B.M.M.M.B.B.B.B.B.M.v.M.M.M.B.M.M.M.M.Z.B.B.M.Z.Z.M.M.M.M.B.M.B.Z.M.B.B.M.M.Z.Z.M.Z.Z.M.M.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.B.Z.Z.Z.B.Z.Z.Z.Z.B.B.Z.M.B.B.B.B.M.B.Z.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.M.M.M.Z.M.Z.Z.Z.Z.Z.B.Z.Z.Z.Z.Z.Z.Z.Z.B.M.Q W I I I g e > = @ + O O + O < (.5X.X].c.c.d d , 2 $ % % % & = 5 t g j j j j x x j f 7 : & & % % % % % % % % : & 2 N N ].5XfXdXdXhXdXjXjXdXdXhXdXgXgXdXdXdXjXcXdXaXaXpXpX%XpX5X|.~.B.V.F 9 9 r l D V.V.V.n.V.Q F.F.Q Q D.Q D.V.V.V.V.V.V.D.Q V.Q V.Q V.Q V.V.V.V.V.Q V.V.n.V.V.Q V.V.V.V.V.V.V.Q V.V.Q V.V.V.V.V.n.V.V.V.V.n.Q n.Q V.Q n.V.Q V.Q Q Q V.n.Q V.Q Q n.n.V.V.V.V.V.V.n.V.V.n.V.V.n.n.V.n.Q V.V.V.V.V.n.V.V.n.n.Q V.n.V.V.Q V.n.V.n.n.n.n.n.B.n.V.V.N.N.n.n.n.V.Q n.n.V.n.n.n.n.V.V.V.B.V.V.r YXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.Z.B.Z.Z.B.B.B.M.M.B.B.B.B.B.B.B.Z.B.[ Z.Z.M.Z.B.B.Z.M.Z.M.Z.M.M.M.M.M.M.Z.M.M.B.B.M.Z.Z.Z.M.Z.M.M.M.M.M.M.M.Z.M.Z.M.Z.Z.B.B.B.B.Z.Z.Z.Z.Z.Z.D.Z.Z.Z.Z.B.B.B.B.B.M.B.Z.A.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.D.Z.Z.B.Z.Z.Z.Z.Z.B.Q U I I P V w = # X X X X X X # * : d d 0 2 @ X O % % % * = : 5 g j g g j c C P P V j a 5 < : = & & * % % * % % % & > 1 0 C.&XuXiXgXgXdXdXdXdXdXdXdXlXlXdXgXgXlXjXdXdXkXpXpX7X7X|.~.Z.B.M.i 9 p k b b.V.V.n.n.Q V.V.V.V.V.V.V.Q D.V.Q D.V.V.V.V.Q V.Q V.V.V.Q V.V.Q V.Q V.Q V.Q Q V.V.V.V.V.V.V.V.V.Q G.Q V.V.V.V.V.V.V.V.Q n.V.n.V.Q n.n.n.V.n.n.n.n.V.Q n.V.V.Q V.Q Q V.Q V.V.n.n.V.V.m.V.V.V.V.V.V.Q n.V.Q m.V.V.V.V.Q V.n.V.V.V.V.V.Q n.n.V.n.V.Q V.V.Q V.n.V.Q n.V.n.n.V.V.V.V.V.Q V.Q V.Q V.V.V.! $ YXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXQ Z.Z.Z.Z.B.M.Z.B.Z.B.B.Z.B.B.Z.Z.Z.B.Z.B.Z.Z.M.B.B.Z.B.Z.Z.Z.Z.Z.Z.Z.M.M.M.M.B.M.B.B.Z.B.Z.M.Z.M.M.M.M.M.M.M.Z.M.M.M.Z.Z.B.B.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.B.B.B.B.B.B.M.B.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.[ Z.M.M.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.B.Q I P G V B % X o o X o o X X + # O @ # O X X O % - ; : > e t c j j j B C P I U U C f w 8 7 6 , = & % % % * % # % % $ & & ; n |.OX,XiXaXjXdXjXdXlXlXlXlXgXkXjXlXjXdXdXaXpXpX7X`.Z.B.B.B.j 9 9 s b K V.V.V.V.V.Q Q V.V.V.Q V.V.V.V.V.Q V.V.Q n.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.Q V.V.Q V.n.n.n.n.n.n.n.n.Q Q V.n.n.n.n.n.Q n.V.Q n.V.V.V.V.V.V.V.V.n.V.V.n.n.V.V.n.V.n.Q V.V.Q V.V.Q V.n.V.Q V.V.n.V.n.V.n.B.n.Q Q n.V.V.n.V.V.V.V.V.V.V.V.V.V.Z.Q V.Q Q V.m.V.V.n.D . YXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXN.B.M.Z.B.B.Z.B.B.B.B.B.Z.B.Z.B.M.Z.B.Z.Z.B.B.M.M.M.Z.B.Z.Z.Z.Z.Z.Z.M.M.Z.B.B.M.M.M.M.Z.M.Z.Z.Z.M.M.M.M.M.Z.M.Z.M.Z.M.M.M.[ B.B.Z.Z.Z.Z.Z.Z.Z.B.Z.Z.B.Z.Z.B.B.M.B.M.B.[ Z.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.D.Z.Z.Z.Z.Z.Z.Z.D.Z.N.I G G G C < X o o o o o X o o X X O @ @ O O # - > ; , e q j c B V G P P U W W W P B p 8 w 9 8 < > = * * * # * % % @ O # * $ : 3 c.XX X7XuXjXjXjXcXlXlXlXlXlXlXgXdXdXdXjX7X7X*XZ.B.M.B.J 9 y r l Z m.n.V.n.Q V.V.V.Q V.V.V.V.V.V.V.V.Q V.Q V.V.V.V.V.Q V.V.V.V.G.V.V.V.V.Q V.Q V.V.V.V.V.V.V.V.V.V.n.Q Q V.n.V.Q V.V.Q Q V.n.Q n.n.n.Q n.V.Q Q Q V.n.V.Q V.n.Q Q V.V.V.V.V.n.n.V.n.V.V.V.n.V.V.Q V.m.V.Q Q V.V.V.V.V.n.V.V.V.Q V.m.V.Q V.n.Q n.n.V.V.V.V.V.V.V.B.V.B.m.Q Q B.V.V.V.n.V.V.V.n.V.n.V.r YXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.M.N.M.B.M.M.M.B.Z.B.M.M.B.Z.M.B.B.B.B.B.B.B.M.M.Z.M.B.B.Z.M.M.M.Z.Z.Z.M.Z.M.B.M.B.M.Z.Z.M.M.M.Z.Z.M.Z.M.M.M.M.M.Z.M.M.Z.B.B.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.B.Z.Z.Z.Z.B.Z.B.B.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.D.Z.Z.Z.M.M.M.Z.[ M.Z.Z.Z.D.Z.Z.Z.M.M.B.B.B.Z.Z.Z.Z.[ P G G C u # X o o o X X . o o X @ # $ # # $ & : 1 4 w j B C C P G I W v.M.M.N.M.U x q 9 w w 8 < : : ; & * # % % @ @ + # $ $ $ $ & - 2 d E.%X7XpXjXdXjXcXzXlXbXjXjXcXsXkX6XA.B.M.M.B.M.9 y y k b T n.n.n.V.Q Q V.V.Q Q V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.Q G.V.Q n.V.n.n.n.Q V.n.V.Q V.Q V.Q n.Q n.V.Q n.V.n.V.Q V.B.B.V.n.B.V.n.n.n.n.n.V.Q n.n.Q V.Q V.B.n.V.n.V.Q V.V.V.V.V.n.n.n.V.V.n.n.V.n.V.n.V.V.V.V.V.n.n.V.Q V.V.V.V.Q V.V.V.T - YXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXM.B.W M.M.M.M.M.B.M.M.M.M.B.M.B.M.Z.M.M.B.B.Z.Z.M.Z.B.B.Z.Z.M.M.B.M.M.Z.Z.Z.Z.M.M.M.M.M.Z.Z.[ M.Z.M.M.Z.Z.Z.M.M.M.M.M.M.M.M.B.B.Z.Z.Z.B.Z.Z.Z.Z.Z.Z.Z.D.Z.Z.Z.Z.Z.B.Z.B.Z.B.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.M.Z.Z.M.Z.Z.Z.Z.Z.B.[ M.B.M.Z.Z.Z.D.Z.M.I P P C u e # X X O o o . . . X + * * * ; * ; 5 w u x G P I P I [ M.B.B.B.B.B.B.B.R x 9 w 8 8 7 4 > ; ; ; * * % + + + + + + + # & & & : < t p l.A.~.A.5XsXjXxXcXkX0X7X&X).B.B.M.B.B.B.t y y t z D Q V.n.V.Q V.V.V.V.V.V.V.V.V.V.V.Q V.V.Q V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.Q V.V.V.Q V.Q V.Q V.G.V.V.Q Q V.Q Q Q Q V.V.V.V.Q V.Q V.V.V.V.V.Q V.n.Q V.V.Q n.V.V.n.V.V.V.V.Q V.B.V.n.n.n.Q V.V.V.V.V.V.V.V.V.V.V.V.n.V.m.n.n.V.V.V.V.Q Q n.V.V.B.n.n.n.n.B.V.V.k O YXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXZ.Z.M.M.M.B.B.B.B.Z.B.Z.M.M.M.M.B.B.M.M.B.Z.B.M.Z.Z.B.B.B.B.M.Z.B.Z.Z.B.M.Z.Z.Z.Z.M.M.B.B.[ Z.M.M.Z.Z.Z.M.M.M.Z.M.Z.M.M.Z.M.B.Z.B.Z.Z.Z.Z.Z.Z.K.Z.Z.Z.Z.Z.#XZ.Z.K.B.Z.Z.Z.Z.Z.Z.Z.Z.B.Z.Z.Z.D.Z.Z.Z.Z.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.B.Z.B.B.B.Z.D.Z.M.W I I H g w e @ X o . . . . . X # * * 1 e e 8 c V C G U R R I I W M.M.B.B.B.M.M.B.v.R x 8 8 7 8 5 e ; ; ; ; ; * # # + # + O O % & > > 1 8 7 0 g A U M.K.A.'.*X&XkX0X7XqXB.M.B.B.B.Z.Z.v 8 y y z v Q n.V.V.Q Q V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.Q V.V.n.V.V.Q V.V.Q Q V.V.V.V.V.V.Q Q V.V.Q Q V.V.Q Q V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.V.Q n.Q n.V.V.V.V.n.V.Q n.Q B.n.V.n.V.V.V.n.V.V.V.Q Q V.Q B.V.V.B.V.V.n.V.n.V.V.n.n.V.V.Q V.V.V.V.V.V.n.Q V.n.V.V.n.V.V.n.V.V.V.n.V.B.V.T @ YXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXU Z.Z.B.M.[ Z.B.Z.B.B.Z.B.B.M.M.B.Z.B.M.M.B.B.M.Z.B.M.B.B.M.[ M.M.Z.M.Z.B.Z.B.B.Z.Z.M.B.M.B.B.Z.M.M.Z.Z.M.M.M.M.M.Z.Z.Z.Z.M.Z.B.M.B.B.Z.Z.Z.Z.Z.Z.B.B.Z.Z.Z.Z.Z.Z.M.B.Z.Z.Z.Z.Z.Z.Z.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.Z.Z.Z.#XZ.Z.Z.Z.Z.Z.Z.Z.B.Z.Z.Z.B.M.W W I G c w < * X . . . . . O + * , e 5 w V P P P U U W U U W M.M.B.M.B.B.M.M.M.B.B.M.Z i 8 8 5 5 e ; ; ; ; * % # # % # + + + * > > 1 8 8 0 j x E B.Z.Z.B.Z.Z.Z.$XP.Z.B.B.B.M.B.B.B.H y w w f b D Q V.Q V.V.Q V.V.V.V.Q V.V.Q Q V.V.Q V.Q Q V.V.V.V.n.Q V.V.V.Q V.Q V.Q V.Q V.V.V.V.V.V.Q V.V.V.V.Q V.Q V.V.V.V.Q V.V.V.V.V.V.V.Q V.V.V.Q Q V.V.V.V.V.Q V.V.n.Q V.V.V.Q Q Q V.m.V.V.V.V.n.n.V.n.V.V.V.V.V.m.V.V.V.V.n.n.V.V.V.m.V.V.V.n.V.m.Q V.V.V.n.V.n.n.n.n.V.V.V.m.V.V.V.V.V.V.n.m.n.2 YXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXM.Z.B.Z.Z.Z.B.B.B.B.B.B.B.Z.Z.B.B.B.B.Z.M.M.M.M.B.Z.M.B.B.Z.B.Z.Z.Z.Z.B.B.B.B.Z.M.Z.B.Z.Z.M.M.M.M.M.Z.M.Z.M.M.Z.M.Z.M.Z.M.Z.M.M.B.B.B.Z.Z.Z.Z.Z.Z.B.B.Z.Z.Z.Z.Z.Z.B.B.B.B.B.Z.B.B.B.B.B.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.B.B.Z.Z.Z.Z.B.W W W P x w > * @ o . . . . . O % ; , 4 u B P U I R U W U W v.M.B.B.B.B.M.B.M.M.M.B.B.Z.M.A s w w 8 5 e ; ; ; * % % * * # + @ @ % & & e 8 9 r c x K M.B.B.Z.B.Z.Z.Z.Z.B.A.B.B.B.M.B.B.[ y y y r b b T m.V.Q V.V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.Q Q V.V.V.V.V.V.V.V.Q V.V.V.V.V.V.V.Q V.Q V.V.V.Q Q V.Q V.Q Q Q V.V.V.V.Q V.Q V.Q V.Q Q V.V.V.Q G.Q Q V.Q V.Q Q n.V.n.V.n.V.n.n.n.V.V.Q V.V.V.V.B.V.V.V.n.n.V.V.Q V.n.V.n.n.V.V.V.n.n.V.V.V.n.V.V.Q V.V.V.Q V.V.n.V.B.V.n.B.z YXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.B.M.v.M.M.M.B.B.Z.B.B.Z.B.B.Z.M.Z.M.M.M.M.M.M.M.M.M.Z.M.M.Z.Z.Z.B.Z.B.B.B.M.Z.M.M.Z.Z.Z.M.M.M.M.Z.M.Z.M.M.M.M.M.M.M.Z.Z.M.M.M.M.M.M.Z.Z.Z.Z.Z.Z.M.M.Z.Z.Z.Z.Z.B.M.B.B.Z.Z.B.Z.M.Z.M.Z.Z.Z.B.Z.Z.M.M.Z.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.B.B.Z.Z.Z.Z.[ W W U B r , & % O X o o o O @ * & 7 g B G P I U M.M.v.v.v.M.Z.Z.B.B.B.M.Z.M.M.M.Z.M.Z.M.M.V g w 5 5 5 e ; ; % % % % % $ @ @ @ # * & < 7 8 a z x Z W M.Z.Z.B.M.Z.Z.B.Z.#XV.#XQ D.Q Q Q 9 9 9 9 j b b T V.Q V.V.V.V.V.V.V.n.V.Q V.V.V.V.V.V.V.V.V.V.V.V.V.n.V.n.V.n.V.V.Q V.n.V.Q n.Q V.V.V.V.V.V.V.n.V.V.V.V.V.Q Q V.V.Q V.Q n.n.Q V.n.Q V.V.Q n.V.V.n.V.V.n.Q Q Q V.V.V.Q V.n.n.V.V.V.m.Q n.V.V.V.n.n.V.V.n.V.V.V.n.V.n.m.Q V.V.V.n.V.V.V.n.n.N.n.V.V.n.V.Q V.V.Q V.V.V.n.V.V.V.n.V.n.T @ YXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXU B.W M.Q v.M.M.M.B.B.M.M.M.B.M.M.Z.Z.Z.M.M.M.M.M.M.M.M.M.M.Z.Z.M.Z.Z.M.M.M.M.M.M.Z.Z.Z.M.Z.M.M.M.M.M.M.M.Z.Z.M.M.M.M.M.M.M.Z.M.M.M.Z.Z.Z.Z.Z.Z.M.M.Z.M.M.M.Z.Z.Z.M.M.M.Z.M.B.Z.Z.Z.M.Z.B.Z.B.Z.Z.Z.Z.M.Z.M.Z.M.M.Z.Z.Z.Z.Z.Z.Z.D.Z.Z.Z.Z.Z.Z.B.Z.Z.Z.M.M.M.W W A s < & % @ + X X O $ & > 7 f x P P U Q M.M.M.B.B.B.Z.B.B.Z.B.Z.M.Z.M.Z.Z.M.Z.M.M.Z.[ V g 5 5 5 5 ; ; % % % % % % @ @ @ @ * & > < 9 j x M v Q B.[ B.Z.B.B.B.Z.Z.Q #XQ Q Q Q #XQ 9 9 9 9 a b b T V.V.V.V.V.V.n.V.n.V.Q V.V.V.V.V.V.V.n.V.V.V.V.V.V.V.V.V.V.n.V.Q V.V.V.n.V.V.V.V.V.V.Q V.V.V.V.V.V.Q Q V.V.V.Q V.V.n.V.Q Q V.n.n.n.Q Q Q V.Q V.V.n.V.V.G.Q V.V.Q Q n.n.n.Q V.V.n.V.Q n.n.Q Q n.V.V.Q V.Q V.n.V.n.B.V.V.V.n.n.V.V.V.V.V.n.n.V.B.n.B.V.V.B.Q V.Q Q n.V.B.n.n.V.n.Q a YXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.M.M.W M.M.M.M.v.M.B.M.M.[ M.M.M.M.M.M.Z.B.B.M.M.M.M.M.Z.M.Z.Z.M.B.B.B.M.M.M.M.M.M.M.Z.Z.M.Z.Z.M.M.M.M.M.M.Z.M.Z.Z.Z.Z.M.M.M.Z.M.M.M.M.Z.M.M.M.M.M.Z.Z.M.M.M.M.Z.B.M.B.Z.Z.M.Z.M.Z.M.M.Z.B.Z.Z.Z.Z.Z.Z.Z.[ Z.Z.Z.Z.Z.Z.Z.[ M.Z.Z.Z.Z.B.Z.Z.Z.Z.B.Z.Z.Z.Z.Z.M.W W D c q < & $ @ # % & & e w f x C I I Q B.M.M.M.B.B.B.Z.B.B.Z.Z.B.Z.M.Z.M.M.M.M.M.M.M.M.W P B u 5 5 e * * % % % % $ + O O O $ & > , a z M x M E B.B.B.B.Z.Z.Z.M.B.V.V.Q #X#XD.D.Q 9 9 9 9 y z b T Q V.V.V.Q V.V.V.n.n.G.V.V.V.Q V.V.V.V.V.V.V.V.V.V.V.Q V.V.Q Q Q V.Q Q V.V.V.V.V.V.V.V.n.Q V.V.Q V.V.V.V.Q V.V.V.V.V.V.n.V.V.Q Q n.n.V.V.V.n.Q V.V.n.V.V.V.n.V.V.V.Q n.n.n.V.V.n.V.V.Q n.n.n.n.V.n.V.V.V.V.V.n.n.V.n.V.V.n.V.V.V.n.V.V.n.n.V.V.n.n.V.Q Q Q V.V.V.n.V.V.n.V.V.m.T @ YXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXB.V.B.W M.M.M.M.B.B.M.M.M.M.B.Q Q M.M.M.Z.Z.M.M.M.M.M.M.M.Z.M.M.Z.M.M.B.Z.M.M.M.M.M.Z.Z.M.Z.M.M.M.M.M.Z.M.Z.M.M.M.M.M.Z.Z.Z.Z.M.Z.Z.Z.M.Z.M.Z.M.Z.M.Z.Z.Z.M.Z.Z.M.B.B.B.Z.Z.Z.Z.Z.M.Z.Z.Z.B.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.M.M.Z.Z.Z.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.W F x j q 7 , : > , , , 7 q h Z I Q M.B.B.B.B.M.B.M.B.B.B.B.B.M.B.M.Z.M.Z.M.M.M.Z.Z.B.Z.B.[ U V g 8 e * * % % % # @ + O O O @ * & > q x x v M U B.B.B.M.Z.M.B.Z.M.V.V.#XQ #XQ D.Q 9 9 9 9 y k b b ! n.V.n.V.V.V.Q V.n.Q V.Q V.V.V.V.V.V.V.V.V.Q V.V.V.Q V.V.V.V.V.V.V.G.n.V.n.V.Q Q V.V.V.V.V.V.V.V.Q Q V.V.V.V.V.n.V.V.V.n.Q V.n.n.n.Q V.V.Q V.n.n.V.n.n.V.V.V.V.V.V.V.V.n.V.m.V.Q V.V.Q n.n.n.n.m.V.n.n.n.V.V.V.V.V.n.V.V.V.V.Q n.n.B.n.n.B.B.V.V.m.Q B.n.Q Q V.B.V.n.V.V.n.V.6 YXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXM.M.B.B.W v.M.M.M.M.B.M.M.M.B.M.U M.M.Z.M.Z.Z.M.M.M.M.M.B.M.Z.M.M.M.M.M.M.Z.M.Z.M.M.M.M.M.Z.Z.M.M.M.M.M.M.M.M.M.M.M.M.Z.M.Z.Z.Z.Z.M.M.M.Z.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.M.M.M.M.M.B.M.B.Z.Z.Z.Z.M.M.Z.M.Z.M.Z.M.Z.Z.Z.Z.#XZ.M.Z.Z.Z.Z.M.Z.M.M.Z.B.Z.Z.Z.Z.Z.B.Z.Z.Z.Z.M.M.M.J M z g w 5 e > , 1 2 0 h M J M.M.Z.M.Z.M.M.B.B.Z.B.B.B.Z.B.B.M.M.M.Z.M.M.M.M.M.M.Z.Z.Z.M.M.W V g 7 & * % % # # @ + O O O @ & & > 6 z x M v U B.B.B.M.M.B.M.B.B.V.V.V.V.Q #XQ D.Q T 5 9 y r z b T ! V.V.V.V.Q n.Q V.V.Q V.V.Q V.V.V.V.V.V.V.V.V.Q n.V.V.V.n.V.V.V.V.V.Q Q V.V.V.V.V.V.V.V.V.V.V.Q Q V.Q V.V.n.V.Q V.V.V.V.n.V.n.V.n.Q V.Q Q V.Q Q V.n.n.Q V.Q V.V.n.V.V.n.V.V.n.V.V.n.V.V.Q Q V.B.n.n.B.n.V.n.V.n.V.Q V.V.V.Q V.n.n.n.B.B.n.B.n.V.n.n.V.n.n.V.V.V.Q V.V.B.V.K X YXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXB.M.M.M.M.M.v.v.M.M.M.B.M.B.M.M.Q Q M.M.M.M.Z.M.Z.Z.M.M.B.M.B.Z.[ B.Z.M.M.M.Z.[ Z.Z.M.M.M.Z.Z.M.Z.M.M.W M.M.M.Z.Z.M.M.M.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.Z.Z.Z.Z.B.B.M.Z.Z.M.M.Z.Z.M.M.Z.M.Z.Z.Z.Z.Z.D.Z.Z.Z.Z.Z.M.Z.Z.Z.M.M.B.B.B.Z.Z.Z.Z.Z.B.B.B.B.B.Z.Z.Z.U A c z g i w 5 < < 7 j A W B.Z.M.M.Z.Z.B.M.B.Z.B.M.M.B.M.B.Z.B.Z.B.Z.M.[ M.M.M.M.M.M.M.B.Z.M.W x i ; * % % # + @ O X O O $ & : , 1 c M v v U B.B.B.B.B.B.B.M.Z.N.N.B.B.D.Q #XQ Q V.9 9 y y j b Z n.Q V.V.V.V.V.Q Q V.V.V.V.V.V.V.Q V.Q V.V.V.V.Q V.n.V.n.V.V.V.V.Q V.V.V.n.V.V.V.V.V.V.V.V.n.V.V.V.V.V.V.n.n.V.V.Q V.Q V.Q G.V.Q n.n.n.Q V.Q V.V.Q Q V.V.V.V.V.n.V.n.V.n.V.V.V.V.n.V.n.V.! Q Q V.n.n.n.n.n.V.V.V.n.m.V.V.n.n.V.n.n.n.n.n.n.n.n.n.V.V.n.Q n.V.n.n.n.Q n.n.m.> YXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXB.B.v.M.M.B.M.v.v.M.M.M.M.B.M.Q Q M.M.M.M.M.Z.Z.Z.[ M.M.B.Z.M.B.B.M.Z.M.M.Z.M.Z.B.Z.Z.Z.M.Z.M.M.Z.M.M.W M.M.M.M.M.M.M.M.Z.M.M.Z.Z.Z.Z.M.Z.M.M.M.M.M.Z.Z.M.M.Z.Z.Z.Z.Z.M.B.M.M.M.B.M.Z.M.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.B.Z.Z.Z.Z.Z.B.B.M.Z.Z.Z.Z.B.M.K B x x c u i p h Z U B.Z.Z.Z.B.M.Z.M.B.M.B.M.M.M.M.B.M.Z.B.B.B.B.Z.M.M.W M.M.B.M.M.Z.M.B.M.[ K f 6 ; * % + # @ O X O # $ & > 1 < k v v M b.V.B.B.B.Z.B.B.M.B.B.V.B.M.D.Q D.Q V.Q 9 9 y y a b n ! V.V.Q V.V.Q V.Q Q V.V.V.V.V.n.Q V.Q Q V.V.V.V.V.V.V.Q V.V.V.V.V.V.Q V.V.V.Q n.V.V.Q V.V.V.Q V.V.Q V.G.n.n.V.V.Q V.V.n.V.V.n.V.Q n.n.Q V.V.n.V.n.V.Q V.V.Q V.V.V.n.V.V.V.V.V.V.n.V.V.V.Q V.n.Q n.n.n.n.n.B.Q n.B.V.n.V.V.Q Q n.n.n.B.n.n.n.B.V.n.V.V.Q n.Q Q Q n.n.n.n.Z . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXB.Z.B.M.M.B.B.M.v.M.M.M.M.M.B.M.U Q M.M.M.M.M.M.M.Z.Z.B.M.M.M.Z.B.B.M.M.B.M.M.Z.Z.M.M.M.M.Z.M.Z.M.Z.M.M.M.M.M.M.[ M.Z.M.M.M.Z.Z.Z.M.M.M.Z.Z.M.Z.M.Z.M.M.Z.Z.M.Z.Z.M.Z.Z.M.Z.B.Z.M.M.M.M.Z.M.Z.Z.M.M.M.Z.Z.M.Z.Z.Z.Z.D.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.B.B.B.Z.B.B.Z.Z.Z.Q U C Y c V V F b.B.A.Z.A.B.B.Z.N.M.M.M.M.B.Z.Z.B.M.B.B.[ B.B.B.B.M.B.M.M.M.M.M.M.Z.M.B.B.Z.M.Q c w 6 ; * + + + O O + # & & > 1 0 h v v Z v.B.B.B.B.[ Z.B.B.M.V.V.B.N.Q Q V.V.Q V.9 9 y y r j b T Q V.Q V.n.Q V.V.V.V.Q V.Q V.V.V.Q V.Q V.Q V.V.Q V.Q G.Q Q Q Q Q V.V.n.V.Q V.n.V.V.V.V.V.Q n.Q V.V.V.Q Q V.n.V.V.Q V.Q V.V.n.V.V.n.Q V.n.Q n.n.n.Q Q V.n.V.V.V.V.n.n.Q n.Q n.V.V.V.V.n.Q Q n.B.n.V.n.N.V.V.n.Q V.V.V.V.n.Q Q n.B.n.n.n.B.n.V.V.V.V.n.n.Q Q V.n.V.m.B.! O YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXB.B.M.M.B.B.M.M.M.M.M.Q M.M.B.W U M.M.M.Z.M.M.M.Z.Z.M.M.M.M.M.Z.M.M.M.Z.M.M.M.M.Z.M.M.M.M.M.M.Z.Z.Z.M.Z.M.Z.M.M.M.M.M.M.M.Z.Z.M.M.M.Z.M.M.Z.Z.M.[ M.Z.M.Z.M.Z.Z.M.Z.Z.M.Z.M.Z.Z.Z.[ B.Z.B.Z.Z.Z.Z.[ Z.M.M.M.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.B.#XZ.Z.Z.Z.Z.Z.Z.Z.M.Z.M.M.[ M.W W M.M.Z.Z.Z.Z.B.B.B.Z.B.M.M.M.M.Z.Z.B.B.M.M.B.Z.Z.B.M.M.Z.M.Z.M.M.M.M.M.M.B.M.B.M.Z.M.F s 9 0 , % # @ @ @ @ $ & : < 2 r a M M H M.B.B.B.B.B.Z.Z.B.Z.Z.V.B.B.B.B.Z.B.Q Q a y y y 9 g z T V.Q Q V.Q V.Q V.n.V.V.V.Q V.n.V.V.V.V.G.Q V.V.n.V.V.V.V.V.Q n.V.Q V.Q V.Q V.V.V.n.V.n.Q n.V.V.V.V.V.G.Q V.V.V.V.Q V.V.V.n.V.n.Q Q n.n.n.n.n.n.n.n.V.Q V.V.V.V.V.Q Q n.n.V.Q n.V.V.V.n.n.n.V.V.n.V.V.n.n.V.n.n.n.V.n.Q n.n.n.Q B.n.n.n.V.V.V.V.V.V.n.V.Q V.m.V.V.n.Q k YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXB.B.B.B.B.B.M.M.M.B.B.M.[ M.N.B.U v.v.M.M.M.M.M.B.M.M.M.M.M.M.M.M.Z.M.Z.M.M.M.M.M.M.M.M.Z.Z.Z.Z.Z.Z.M.Z.M.Z.M.M.Z.M.Z.Z.M.M.M.Z.Z.M.Z.[ Z.Z.M.M.Z.Z.Z.M.Z.Z.Z.M.M.Z.M.M.Z.Z.Z.Z.Z.Z.Z.B.B.Z.Z.Z.Z.#XZ.Z.M.Z.Z.Z.M.Z.Z.M.Z.M.Z.Z.Z.Z.M.Z.Z.B.M.Z.B.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.B.Z.Z.Z.Z.Z.Z.B.Z.B.M.M.M.B.M.B.B.B.Z.Z.B.B.[ B.M.Z.M.Z.M.M.Z.M.M.M.B.M.M.Z.Z.Z.B.Z.Q j q 9 7 < > ; * # $ & & : < 0 p k v A b.B.B.B.B.B.B.B.Z.Z.Z.Z.Z.B.B.Z.B.Z.Z.D.Q a y 8 y 9 t z Z Q V.V.Q V.Q V.V.V.V.n.V.n.V.V.V.V.Q V.Q V.V.V.V.V.V.Q V.V.Q n.Q V.Q Q V.V.V.V.V.V.V.V.Q Q Q Q Q V.Q V.n.Q V.n.V.Q V.Q V.V.n.V.G.V.n.n.Q n.n.n.n.Q Q n.Q V.Q n.V.n.n.n.n.V.V.n.V.n.V.V.Q V.n.V.V.V.n.n.V.n.V.V.V.V.V.V.n.n.n.n.n.n.n.V.n.n.n.n.n.V.V.V.n.V.n.n.n.V.T o YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXM.B.M.B.B.Z.B.B.B.B.B.B.M.M.B.Q Q M.M.M.M.M.M.M.M.M.B.Z.M.Z.M.Z.M.M.M.Z.M.B.Z.M.M.M.Z.M.Z.Z.Z.M.Z.M.Z.Z.M.Z.Z.M.Z.M.M.Z.Z.M.M.M.M.Z.M.M.M.M.M.Z.M.M.M.Z.M.Z.[ Z.M.Z.Z.Z.Z.Z.Z.B.Z.Z.M.B.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.B.B.[ #XZ.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.B.Z.Z.Z.Z.Z.B.Z.Z.B.B.M.M.M.M.Z.Z.B.B.B.Z.Z.M.B.B.Z.M.M.[ Z.M.Z.Z.M.M.M.B.M.M.Z.Z.Z.B.v.S k t 8 5 1 , , > & & : < 9 p s z S [ M.B.M.B.B.B.B.B.B.M.Z.V.Z.B.M.B.Z.Z.Z.F.V.t 9 y 9 y y k b Q Q Q V.Q V.V.V.V.V.V.Q n.V.V.n.V.V.Q Q V.V.Q V.V.V.V.V.V.V.V.V.Q Q Q Q n.V.V.n.n.V.V.n.n.V.Q Q Q V.V.V.Q V.V.V.Q V.n.n.Q V.V.V.n.V.V.n.V.Q n.n.n.n.Q V.V.Q Q n.n.n.V.n.Q V.V.V.V.V.n.n.n.V.V.Q Q V.V.V.n.Q V.V.V.n.V.n.Q V.V.n.n.V.V.n.n.n.n.V.V.V.V.V.n.V.B.V.m.> YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXB.M.M.B.B.B.Z.M.B.B.B.B.B.B.B.B.Q M.M.M.M.M.Z.M.M.M.M.M.B.M.M.Z.Z.M.M.M.M.Z.M.M.M.M.M.Z.M.M.M.Z.M.Z.Z.M.Z.Z.Z.M.Z.Z.M.M.M.M.Z.Z.M.M.Z.Z.M.M.Z.Z.M.Z.Z.M.Z.M.Z.M.M.M.M.M.M.M.B.B.[ Z.M.Z.Z.D.Z.M.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.M.Z.Z.M.Z.Z.Z.M.M.Z.Z.Z.Z.Z.B.Z.Z.Z.Z.Z.D.Z.Z.M.Z.M.Z.M.Z.M.B.B.B.B.Z.Z.Z.Z.Z.Z.B.Z.B.Z.M.M.M.M.[ Z.Z.Z.Z.Z.Z.B.Z.Z.Z.Z.Z.M.Z.M.M.M.M.M.M.M.M.Z.B.Z.B.B.U M j a q 8 7 0 8 7 < < 0 r s x K v.B.B.B.B.B.B.B.B.B.B.B.B.Z.Z.Z.B.Z.Z.Z.Z.V.V.Z 9 8 8 8 9 a b Q V.Q V.V.V.V.V.V.V.V.! V.V.Q n.V.Q Q V.V.n.V.V.V.Q V.V.V.Q V.Q V.V.n.Q V.V.V.n.n.V.n.V.Q Q V.V.Q V.V.Q V.V.V.V.Q Q n.n.n.Q n.V.Q V.V.V.Q Q n.n.Q V.V.V.V.Q n.n.n.Q V.V.V.B.n.V.V.Q n.n.n.Q V.Q V.V.V.n.V.m.V.n.V.V.V.Q Q V.n.n.n.n.n.n.V.Q n.n.n.V.V.V.n.n.n.V.a YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXM.B.B.Z.B.B.Z.B.M.B.Z.Z.B.M.B.M.v.M.M.M.M.M.B.M.B.M.M.Z.Z.Z.M.Z.M.M.M.Z.M.Z.M.M.M.M.M.M.M.M.M.M.Z.M.M.B.B.M.M.Z.M.Z.[ Z.M.Z.M.Z.M.Z.M.Z.Z.M.Z.M.Z.M.Z.M.Z.M.Z.M.Z.Z.M.Z.M.Z.M.M.Z.Z.M.Z.Z.Z.Z.M.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.[ M.Z.Z.Z.Z.Z.Z.Z.Z.D.Z.Z.Z.Z.Z.Z.Z.B.Z.B.Z.Z.Z.Z.M.Z.B.B.B.Z.Z.M.Z.Z.Z.Z.B.M.B.Z.M.M.M.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.Z.Z.M.Z.B.M.M.M.M.M.B.Z.B.B.B.M.M x c z z j p 9 q 8 9 j v S b.M.B.B.M.B.B.M.B.B.B.B.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.V.Q Q y 9 9 9 y r b ! Q V.V.G.V.V.V.V.V.V.V.V.V.V.V.Q V.Q V.Q V.V.n.V.Q V.V.V.V.V.V.V.n.n.n.V.n.V.Q n.n.n.V.Q Q Q V.V.Q V.V.n.n.Q V.V.Q Q Q V.V.n.V.V.V.V.V.V.V.V.n.V.n.V.n.V.Q n.Q n.n.m.Q V.n.n.n.V.n.n.n.n.V.n.n.V.V.n.V.V.n.V.V.Q Q n.n.n.Q B.Q n.n.Q V.V.V.n.n.n.n.n.V.n.V.n.M YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXB.Z.B.B.B.B.B.Z.Z.B.Z.B.M.M.M.B.M.v.M.M.M.M.B.M.M.Z.M.B.B.B.B.M.Z.M.M.Z.Z.M.Z.M.M.M.M.M.M.M.Z.M.M.Z.Z.Z.Z.Z.M.M.M.M.Z.M.Z.M.Z.M.Z.M.Z.M.M.Z.M.Z.M.Z.M.Z.M.Z.M.Z.M.M.M.Z.Z.B.M.M.B.Z.Z.Z.Z.Z.Z.B.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.D.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.B.B.B.M.Z.Z.Z.M.Z.Z.Z.Z.M.Z.B.Z.B.Z.Z.M.B.Z.Z.M.B.Z.Z.B.Z.Z.Z.M.Z.Z.M.Z.B.M.M.B.M.B.M.Z.B.B.M.K x x z c c x c j h x F E V.Z.B.v.B.B.B.B.B.B.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.V.V.V.g 9 5 9 9 y z R Q Q V.Q V.V.V.V.V.V.n.V.n.V.V.V.V.V.V.V.V.n.V.V.V.Q V.Q V.V.n.V.n.V.Q Q V.V.n.n.n.V.n.n.V.V.Q Q V.V.Q n.n.Q V.V.Q n.n.n.Q Q V.Q V.V.n.V.V.V.V.V.V.V.V.V.Q n.V.V.V.B.V.Q V.n.n.V.n.Q n.n.n.V.n.m.Q Q Q n.V.n.V.V.n.n.n.Q V.V.V.V.n.Q V.V.V.n.n.V.V.V.V.V.n.T YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXB.Z.B.B.B.B.B.Z.Z.Z.B.Z.B.M.M.M.M.v.M.v.M.M.M.M.B.M.B.B.M.M.Z.Z.B.M.Z.Z.M.Z.Z.M.Z.M.M.[ M.M.Z.M.Z.M.Z.Z.Z.Z.Z.Z.M.M.Z.Z.M.Z.M.Z.M.Z.M.Z.M.M.M.M.Z.Z.[ M.Z.M.Z.M.Z.Z.Z.Z.Z.B.M.Z.B.Z.Z.Z.M.Z.B.M.M.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.#XZ.Z.Z.#XZ.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.M.B.Z.M.Z.M.B.Z.Z.M.Z.B.Z.M.M.Z.Z.Z.Z.M.Z.M.Z.M.M.Z.Z.M.Z.M.M.B.B.B.Z.M.B.B.M.M.L x z z x z z c v U Q B.Z.Z.B.M.B.Z.B.Z.K.Z.Z.Z.Z.D.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.V.Q n.b 9 9 9 9 y g T ! n.V.V.Q Q V.V.n.V.V.n.n.Q V.Q V.V.V.V.Q Q G.V.V.V.V.V.V.Q V.V.V.n.Q V.n.n.n.Q V.V.Q n.n.Q V.V.Q Q Q Q Q Q n.V.V.V.Q V.Q V.V.V.V.V.V.Q Q V.n.n.V.Q Q V.Q Q V.n.V.n.n.n.n.n.V.V.Q Q n.V.V.V.n.n.n.V.V.V.V.V.V.n.n.V.n.n.V.n.V.B.Q V.V.V.V.V.V.V.V.V.V.V.V., YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXB.Z.Z.Z.Z.Z.Z.B.M.Z.Z.B.[ M.M.B.B.M.v.v.M.M.M.M.M.Z.Z.Z.M.M.Z.M.M.M.M.Z.M.M.M.M.M.M.M.M.Z.M.M.Z.M.Z.Z.Z.M.Z.Z.Z.M.M.M.M.M.M.M.Z.M.Z.M.M.Z.M.Z.Z.M.M.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.B.B.Z.B.Z.M.Z.Z.B.Z.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.D.Z.#X#XD.#XD.D.#XZ.Z.Z.Z.Z.Z.Z.B.Z.B.Z.Z.Z.M.Z.M.Z.Z.Z.[ Z.Z.Z.Z.Z.B.M.Z.M.Z.Z.Z.Z.Z.M.B.M.Z.Z.Z.Z.Z.Z.Z.M.Z.M.Z.Z.M.B.B.M.M.B.M.M.M.M.Z.M.M.B.M.v.F M x x x x Z J Q v.B.B.B.B.B.B.B.B.B.Z.Z.B.Z.Z.Z.Z.D.Z.Z.Z.B.Z.Z.Z.Z.V.Q V.T y 5 y y y a D Q n.V.V.V.n.Q V.n.n.V.Q V.V.V.Q V.V.Q V.V.Q n.V.V.V.Q V.Q V.V.n.V.V.G.V.n.n.n.n.n.V.n.n.n.V.Q Q V.V.V.V.n.V.V.Q V.V.Q n.V.V.Q V.Q Q V.V.V.n.G.V.n.V.V.Q V.Z.Q m.V.Q n.n.n.n.V.V.Q V.V.n.m.V.n.n.Q V.Q V.Q Q Q m.V.Q Q m.V.Q V.V.n.Q V.n.m.V.V.V.n.V.V.V.T & YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYX M.B.B.Z.B.Z.M.Z.M.Z.Z.Z.M.M.Z.Z.M.M.M.M.M.[ M.M.M.M.B.B.Z.M.M.M.M.B.Z.Z.B.M.M.M.Z.Z.[ M.M.M.M.B.Z.M.Z.M.M.M.Z.Z.M.M.M.M.M.M.M.Z.M.M.Z.M.Z.M.M.Z.M.Z.Z.M.Z.Z.M.M.Z.M.Z.Z.Z.Z.[ Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.#XZ.Z.D.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.D.D.$X$X#X#X#X#X#XZ.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.M.Z.Z.Z.Z.Z.M.M.Z.M.M.Z.M.M.M.Z.Z.Z.Z.Z.Z.M.M.M.M.Z.Z.Z.Z.Z.Z.M.Z.M.[ Z.M.M.Z.M.M.M.Z.Z.M.M.M.M.M.B.B.B.Z.M.U U G V U W M.M.Z.M.M.M.M.Z.M.Z.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.B.B.Z.Z.Z.[ Z.M.B.Z.Z.i 8 9 9 9 a A n.V.V.V.V.V.Q n.Q V.V.V.n.V.V.Q n.n.Q V.V.V.V.V.n.V.Q V.V.Q V.V.V.n.V.Q n.n.n.n.n.n.n.n.n.Q V.V.Q Q G.V.Q V.V.V.n.Q V.V.Q Q V.V.V.m.V.n.n.n.V.n.n.n.n.V.m.V.V.V.V.Q Q V.Q V.n.n.V.n.Q n.V.n.n.m.n.Q n.V.n.m.n.n.n.n.Q V.n.V.n.Q n.V.n.V.n.n.V.V.V.V.V.V.D X YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYX M.B.B.B.B.Z.Z.Z.Z.M.B.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.Z.M.M.M.M.Z.Z.B.Z.Z.M.Z.M.M.M.M.M.Z.M.Z.Z.Z.Z.M.M.Z.M.M.M.Z.Z.M.Z.M.M.Z.Z.M.M.M.M.Z.M.Z.M.M.Z.M.Z.[ Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.D.Z.D.Z.D.$X$X$X$X$X$X#XD.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.Z.M.Z.M.Z.M.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.D.Z.Z.Z.M.Z.M.M.Z.M.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.Z.Z.M.M.Z.B.M.B.B.M.B.B.M.[ M.M.M.M.M.M.M.Z.Z.M.Z.Z.M.M.M.Z.M.Z.Z.Z.M.Z.Z.Z.Z.Z.B.B.B.B.M.B.B.B.Z.j w 8 9 9 a Z n.Q B.Q V.V.V.n.V.V.V.V.V.V.Q n.n.Q V.Q V.Q V.n.V.V.Q Q n.n.n.Q V.V.V.V.V.Q n.n.n.n.n.n.n.Q V.Q V.Q Q V.V.Q Q Q n.n.Q Q V.V.Q Q Q Q B.n.n.V.n.V.V.V.V.n.V.Q Q Q V.V.Q Q V.Q V.n.Q V.V.V.n.V.Q n.n.V.V.n.n.V.n.n.n.B.V.V.V.V.n.V.Q n.n.Q V.m.Q n.V.V.Q ! t YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYX M.B.M.M.Z.Z.M.M.Z.Z.Z.M.Z.Z.B.Z.M.M.Z.Z.M.M.M.M.B.M.M.M.M.M.M.M.M.M.B.B.Z.M.Z.Z.Z.M.Z.M.M.M.M.M.Z.Z.Z.M.Z.Z.M.M.M.Z.Z.M.M.Z.[ M.Z.M.Z.Z.M.M.M.Z.M.M.M.M.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.D.D.Z.Z.Z.Z.Z.Z.#X#X$X$X$X$X$X$X#XZ.Z.Z.Z.M.M.Z.M.Z.Z.Z.M.Z.M.Z.M.Z.Z.M.Z.M.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.M.M.M.M.M.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.M.M.M.M.M.M.B.B.B.M.M.M.M.B.Z.M.M.M.M.M.[ M.M.M.M.M.M.Z.M.Z.M.Z.M.M.Z.M.M.B.B.B.Z.B.M.B.M.B.B.B.m 8 9 9 y t B Q Q B.m.V.V.V.V.V.n.n.V.V.V.Q Q Q V.V.V.Q Q n.V.Q G.Q n.n.n.V.n.V.V.n.V.n.Q n.n.Q n.Q n.Q V.Q V.Q V.Q V.Q Q n.n.n.n.n.Q Q Q n.n.n.Q V.n.V.m.Q V.V.V.n.V.n.V.Q Q Q Q Q Q V.Q Q n.n.V.V.V.V.V.Q n.n.V.n.V.V.V.V.Q Q n.n.V.n.n.V.V.Q n.n.n.n.V.n.V.n.V.m.S - YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYX [ Z.M.Z.B.Z.Z.Z.Z.M.M.M.M.B.Z.Z.M.M.Z.M.Z.B.B.Z.B.Z.Z.Z.Z.M.M.M.B.B.B.B.B.Z.Z.Z.M.Z.Z.M.M.M.Z.B.M.M.M.Z.M.M.M.Z.M.M.M.Z.Z.Z.Z.Z.M.M.Z.Z.Z.M.M.M.Z.Z.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.#XZ.Z.Z.#XZ.Z.#X#X#XZ.#X$X$X*X$X=X$X$X$XZ.Z.Z.Z.Z.Z.Z.M.Z.Z.M.M.M.M.M.M.Z.Z.Z.[ M.Z.M.M.M.M.Z.Z.Z.Z.Z.Z.Z.M.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.M.Z.Z.M.M.M.M.M.M.B.B.M.M.M.M.Z.B.M.M.Z.Z.M.M.M.B.M.Z.M.M.Z.Z.M.Z.[ M.Z.M.Z.Z.M.B.B.M.Z.B.Z.B.M.B.B.B.M.F 9 8 w y s Z n.Q B.Q n.V.V.Q V.V.V.V.V.V.Q n.V.Q V.n.V.V.n.n.V.V.n.n.Q Q Q V.n.n.V.V.n.Q n.n.V.V.V.V.V.V.V.Q Q V.Q Q V.n.n.n.n.n.n.V.Q n.n.V.Q Q Q n.n.V.V.V.n.V.V.V.n.V.V.F.V.V.V.V.Q Q V.V.m.V.n.V.V.V.B.n.n.V.n.V.V.V.n.V.V.V.V.n.V.V.Q V.V.n.n.n.n.n.n.V.V.V.Q y YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYX v.B.M.B.M.M.Z.Z.M.M.M.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.Z.B.Z.B.M.M.M.M.M.Z.M.M.M.Z.Z.M.Z.Z.Z.M.M.M.M.Z.M.Z.M.M.M.Z.M.Z.Z.M.M.Z.M.M.M.Z.Z.Z.Z.Z.M.[ M.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.D.D.Z.Z.Z.Z.D.Z.Z.Z.Z.Z.D.D.#X$X#X#X#X$X$X*X$X*X*X*X$X#X#XZ.Z.Z.Z.M.Z.Z.M.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.M.Z.M.M.M.Z.Z.Z.Z.Z.Z.M.Z.M.M.M.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.M.M.M.M.M.B.M.M.Z.M.M.M.M.B.B.B.Z.M.M.Z.M.M.B.M.M.Z.M.M.M.Z.M.Z.M.Z.M.Z.B.B.Z.M.B.M.M.B.B.B.B.B.W p 9 9 y a Z n.Q n.n.V.n.V.n.V.V.n.V.V.V.Q V.Q n.n.V.n.V.Q V.Q V.V.V.n.n.n.Q Q V.V.n.Q Q n.n.n.Q V.n.V.V.V.Q Q V.Q n.n.n.n.n.n.V.Q V.V.n.n.n.n.n.n.n.n.n.V.V.n.n.V.V.V.V.V.V.n.V.Q V.V.n.V.V.V.V.V.V.V.V.V.V.Q V.V.V.n.V.V.B.V.V.m.V.V.V.m.V.n.n.V.n.n.m.V.Q V.Q l @ YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYX v.M.Z.Z.B.Z.M.Z.Z.M.M.M.Z.M.M.M.Z.Z.Z.M.Z.B.M.M.M.Z.Z.B.Z.Z.M.M.M.M.M.Z.Z.M.Z.M.Z.Z.M.M.M.B.M.M.M.Z.M.Z.M.M.M.Z.M.M.M.Z.Z.M.Z.Z.Z.Z.M.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.D.Z.Z.D.Z.Z.P.Z.Z.Z.Z.Z.Z.Z.#XZ.Z.D.Z.Z.D.#X#X#X$X$X*X*X*X$X$X#X#XZ.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.M.M.Z.Z.Z.Z.#XZ.M.Z.M.Z.M.M.M.Z.Z.Z.M.M.B.M.M.M.M.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.M.B.M.M.M.B.M.B.M.M.M.M.M.M.B.B.B.M.M.M.M.B.M.M.B.M.Z.M.Z.M.Z.M.M.Z.B.Z.M.B.B.B.B.M.M.M.B.B.B.M.B.B.x q 9 r a D n.n.n.n.Q n.V.V.V.V.V.V.n.n.Q Q V.V.V.Q n.V.n.Q Q V.n.n.V.V.n.n.V.Q V.V.n.Q Q n.n.Q V.Q Q Q V.V.Q n.Q V.Q n.n.n.n.Q Q Q Q n.n.n.n.n.n.n.n.Q V.n.V.V.n.n.V.V.Q V.V.V.V.Q V.V.V.n.V.n.n.V.V.V.Q Q V.V.V.V.V.V.Q m.n.V.n.V.n.V.n.n.V.V.V.Q n.Q n.V.Q v @ YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYX W B.B.B.B.Z.[ Z.Z.M.M.M.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.M.M.Z.M.Z.M.Z.Z.Z.M.M.M.Z.M.Z.Z.M.Z.Z.M.Z.M.M.Z.Z.M.M.M.M.M.M.Z.Z.Z.M.Z.Z.M.Z.Z.Z.M.Z.M.M.Z.Z.M.Z.Z.Z.M.Z.Z.M.Z.M.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.D.Z.Z.Z.#XZ.Z.#XZ.D.Z.Z.#XZ.#X$X$X$X=X$X$X$XD.Z.Z.Z.Z.M.Z.Z.M.M.Z.M.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.M.M.Z.Z.M.Z.M.Z.Z.M.M.Z.M.M.M.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.Z.M.Z.Z.Z.Z.M.Z.M.M.M.M.M.B.M.M.M.M.M.M.B.M.Z.Z.M.M.M.M.Z.Z.M.M.Z.Z.M.Z.Z.Z.M.B.M.B.M.M.B.M.B.M.M.B.M.B.M.B.K s 9 y u D n.n.n.n.V.V.m.V.V.V.V.n.n.Q V.n.n.Q V.V.Q V.Q Q Q V.n.V.V.V.Q V.V.Q V.V.Q n.Q Q Q Q G.V.V.V.V.Q V.Q V.V.n.n.n.n.n.Q V.V.Q n.n.n.n.n.n.n.n.Q n.V.V.n.V.V.n.V.V.V.V.V.V.Q V.n.V.V.n.Q V.Q V.Q Q V.Q n.V.n.V.Q V.V.V.n.V.V.V.V.V.n.V.V.n.Q n.Q n.n.M # YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYX ! B.A.B.B.M.M.Z.M.M.M.Z.Z.Z.Z.Z.M.M.M.Z.Z.Z.B.M.Z.M.M.Z.B.B.Z.M.M.M.M.M.Z.Z.Z.M.Z.Z.M.M.B.M.Z.Z.M.Z.M.M.Z.[ Z.M.Z.Z.M.Z.Z.Z.Z.M.M.M.M.M.M.M.M.M.Z.M.Z.M.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.D.D.Z.#XZ.Z.Z.Z.Z.#XZ.D.Z.Z.#XD.Z.#X#X$X$X$X$X$X#XZ.M.M.Z.M.Z.Z.M.Z.M.M.Z.M.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.M.Z.Z.Z.Z.M.M.M.M.M.Z.M.M.[ Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.Z.Z.Z.Z.Z.M.M.M.M.M.M.Z.M.M.M.B.M.B.B.M.B.M.Z.[ M.Z.M.M.Z.M.Z.M.M.M.M.Z.Z.Z.Z.M.B.M.Z.B.B.M.M.M.B.B.M.B.B.M.v.h w y h D Q n.n.V.n.Q V.V.V.n.V.V.V.n.Q V.n.V.Q V.Q n.V.V.V.n.V.Q Q Q V.Q V.V.n.V.V.V.n.n.Q Q Q Q V.Q Q V.Q V.n.Q n.n.n.n.n.V.Q Q Q n.n.n.n.n.n.n.n.n.V.n.V.V.V.m.V.n.V.Q V.n.V.Q V.V.V.V.n.n.n.V.V.V.V.V.V.V.V.V.n.Q V.n.Q n.V.V.n.V.n.V.V.V.Q n.Q V.Q b $ . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYX T B.Z.Z.B.Z.Z.M.Z.Z.M.Z.Z.M.Z.Z.M.M.Z.M.Z.Z.Z.B.B.M.Z.Z.Z.M.Z.M.M.Z.M.M.M.M.Z.Z.B.Z.M.M.Z.Z.Z.M.M.M.M.M.Z.Z.M.Z.M.Z.M.Z.Z.Z.M.Z.M.M.M.Z.M.Z.Z.M.M.M.M.Z.Z.M.Z.M.Z.M.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.D.D.Z.Z.Z.#XZ.Z.P.Z.D.Z.D.Z.Z.Z.Z.#X#X#X$X$X$X#XZ.Z.Z.M.Z.M.Z.M.Z.[ M.Z.M.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.M.M.Z.Z.Z.Z.Z.Z.M.M.M.Z.Z.M.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.Z.Z.M.Z.Z.M.M.M.M.Z.M.M.B.M.B.M.M.Z.M.Z.M.M.Z.M.M.M.Z.M.M.M.Z.M.Z.M.B.B.Z.Z.M.B.Z.Z.M.M.M.M.M.M.M.M.Z.M.M.B.c w y j D n.n.Q n.n.V.V.n.V.V.V.V.V.n.n.n.n.V.Q n.V.n.V.V.n.n.n.Q Q n.n.n.V.V.Q V.V.V.n.V.n.Q V.Q Q V.Q n.n.n.n.n.n.Q F.Q Q F.Q Q D.n.n.n.n.n.n.n.Q Q V.V.V.n.V.n.V.V.V.n.n.m.n.Q n.V.n.V.n.Q V.V.V.n.V.V.V.V.Q V.n.V.V.n.Q n.n.V.V.V.V.n.V.V.n.n.n.! k + YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYX A B.Z.B.Z.Z.M.Z.M.Z.M.M.M.Z.M.Z.Z.Z.Z.M.Z.B.Z.B.Z.Z.Z.M.Z.Z.M.M.M.M.M.M.Z.M.B.B.Z.Z.Z.Z.Z.Z.M.M.M.M.M.M.M.M.M.M.Z.M.Z.M.Z.Z.Z.Z.M.M.M.M.M.M.M.Z.M.Z.M.M.M.Z.M.Z.M.Z.Z.Z.M.Z.M.Z.Z.Z.Z.D.Z.Z.Z.Z.D.Z.D.Z.Z.D.D.Z.Z.Z.D.Z.#XZ.Z.D.#X#X$X$X$X$XD.#XZ.Z.M.M.Z.M.Z.Z.M.M.M.M.Z.Z.M.Z.Z.Z.M.Z.Z.M.Z.M.Z.Z.M.M.Z.M.Z.Z.M.M.M.M.Z.Z.M.Z.M.M.M.M.Z.Z.Z.Z.M.M.M.M.M.M.Z.M.M.M.M.M.M.M.M.B.M.M.B.B.M.M.M.M.M.M.B.M.M.Z.M.M.M.B.Z.M.Z.M.Z.B.Z.Z.B.Z.M.M.M.Z.M.Z.M.M.Z.Z.M.M.M.B.M.c w y n D Q n.B.V.V.V.Q V.V.V.V.V.n.Q Q n.n.n.n.Q V.n.n.n.Q Q Q V.V.V.V.n.V.V.V.V.n.Q V.n.V.V.V.V.V.Q V.V.Q n.n.n.n.Q Q Q Q Q Q Q Q n.n.n.n.n.n.V.Q Q V.n.V.n.V.V.V.V.V.n.V.V.V.V.n.n.V.n.V.Q V.V.Q V.V.Q n.Q n.Q Q Q V.V.n.n.V.n.V.V.Q Q V.Q V.Q T 1 YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYX s Z.B.Z.B.B.M.M.M.Z.M.M.M.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.B.B.Z.M.M.Z.M.M.M.M.Z.M.M.Z.Z.Z.Z.B.Z.Z.B.B.Z.M.M.W M.M.M.M.Z.M.M.Z.M.M.Z.M.Z.M.M.M.M.Z.M.M.M.M.M.Z.Z.M.[ Z.Z.M.M.Z.M.M.M.Z.M.Z.M.Z.Z.Z.Z.Z.#XZ.Z.Z.Z.Z.Z.D.Z.Z.D.Z.Z.Z.Z.#XZ.Z.Z.D.#X#X#X#X#XD.Z.Z.Z.M.Z.M.Z.M.Z.Z.Z.Z.M.Z.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.M.M.Z.Z.M.M.M.Z.Z.Z.M.M.M.M.Z.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.B.M.Z.M.M.M.M.Z.Z.Z.Z.M.M.M.Z.Z.M.Z.M.M.Z.Z.Z.[ Z.Z.M.M.Z.M.M.Z.M.M.M.M.Z.B.B.B w y b D Q n.V.n.n.n.Q V.V.n.V.V.V.n.V.G.V.V.Q n.Q n.n.n.Q Q n.V.n.Q V.V.G.V.Q V.V.V.V.V.V.V.Q Q V.V.n.n.Q n.n.n.n.Q V.Q V.Q Q Q Q n.n.n.n.V.Q Q Q V.n.V.V.V.V.n.n.V.n.V.V.V.n.V.n.n.n.n.V.V.m.n.V.n.Q n.n.V.n.Q V.V.n.V.n.Q Q m.V.m.V.V.n.V.T k @ YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYX > v.Z.Z.B.Z.M.M.M.Z.Z.M.Z.M.Z.Z.Z.M.M.M.Z.Z.M.Z.Z.Z.Z.Z.M.M.M.M.M.M.M.M.M.Z.M.B.B.Z.B.Z.Z.Z.Z.Z.M.M.M.Z.M.M.M.Z.M.Z.M.Z.Z.Z.M.Z.M.M.M.Z.M.Z.M.Z.M.M.M.Z.M.M.M.Z.M.Z.Z.[ M.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.P.D.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.#X#X#X#XZ.Z.#XZ.Z.Z.M.Z.Z.Z.Z.Z.M.M.M.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.[ M.Z.M.Z.M.Z.Z.Z.M.M.Z.Z.Z.Z.M.Z.M.Z.M.M.M.Z.M.M.Z.M.M.M.Z.M.M.M.Z.M.B.M.B.B.B.B.B.M.B.M.M.Z.Z.B.Z.M.Z.Z.M.M.Z.M.M.Z.M.M.Z.M.M.Z.Z.Z.Z.M.Z.Z.[ Z.M.M.M.B.Z.M.M.B.[ c w y z D Q B.n.n.N.V.V.V.n.n.Q V.B.V.Q Q n.V.Q n.V.n.V.V.Q Q n.Q n.Q Q V.Q V.V.Q n.n.V.n.V.V.Q V.Q Q n.n.V.n.n.n.n.Q V.Q Q F.Q D.Q n.n.V.Q Q Q Q V.Q n.Q V.V.n.V.V.n.V.n.V.V.V.V.n.Q n.n.n.n.n.V.n.n.n.Q V.V.V.V.m.V.V.V.V.V.V.Q V.V.V.V.m.l O . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYX X U M.Z.Z.Z.M.Z.M.M.Z.M.Z.M.M.Z.Z.B.M.M.B.M.M.M.Z.M.Z.Z.B.M.Z.M.M.M.Z.Z.M.M.M.Z.B.B.Z.M.Z.Z.M.Z.M.M.M.M.M.M.M.M.Z.M.Z.Z.M.Z.M.M.M.M.M.M.M.M.Z.Z.M.M.Z.M.Z.Z.Z.M.Z.M.M.M.Z.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.D.Z.Z.Z.Z.Z.#XD.Z.Z.Z.M.Z.D.Z.#X#XZ.#XZ.#XD.Z.M.M.M.Z.Z.M.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.M.Z.M.Z.M.M.M.[ Z.Z.Z.Z.M.Z.B.Z.M.M.M.Z.M.M.M.M.M.M.M.M.B.M.M.M.M.M.B.M.Z.M.M.B.[ Z.Z.M.Z.M.M.M.M.M.M.Z.Z.M.Z.Z.M.M.Z.Z.M.M.Z.Z.Z.M.Z.Z.Z.M.M.B.Z.M.Z.M.M.M.Z.Z.g w y b A Q V.B.n.N.V.V.V.V.n.V.V.n.n.n.V.V.n.n.n.n.V.V.Q Q Q Q n.V.V.Q V.V.Q V.V.V.G.Q V.Q V.V.Q V.n.Q n.n.n.n.n.n.V.Q Q Q Q V.Q Q Q Q Q V.Q Q V.Q V.Q Q n.n.V.V.V.V.V.n.V.n.V.V.n.n.V.V.m.Q V.V.n.V.Q V.V.V.V.n.V.V.n.V.V.V.V.Q V.B.V.V.T - YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYX G M.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.M.Z.M.B.M.M.B.M.Z.Z.Z.B.Z.Z.M.Z.M.Z.M.M.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.M.M.M.M.M.M.M.M.M.M.M.Z.Z.M.Z.M.Z.M.Z.Z.M.Z.M.M.Z.Z.M.M.Z.Z.Z.Z.Z.M.Z.Z.M.M.M.M.M.Z.Z.M.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.D.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.M.Z.M.Z.Z.M.M.Z.Z.M.M.M.M.Z.M.M.M.B.B.M.M.M.M.M.B.B.Z.B.M.M.M.M.M.Z.Z.Z.M.Z.Z.Z.Z.M.Z.Z.M.Z.Z.Z.Z.Z.B.Z.M.Z.Z.B.M.Z.Z.[ M.M.M.M.Z.M.B w y b D Q n.n.n.V.V.n.V.V.V.V.V.V.V.V.V.n.V.n.V.V.V.n.V.n.n.Q Q n.n.Q n.Q V.V.V.V.Q V.Q V.Q V.V.Q V.V.n.n.n.n.n.n.Q Q G.Q V.Q V.V.V.V.Q Q V.Q V.Q Q Q V.Q Q Q m.n.m.V.V.V.V.V.n.n.n.n.n.V.V.V.Q Q V.m.Q V.V.n.n.n.V.V.V.V.V.V.V.V.V.B.B.l + YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYX o . V [ M.M.M.Z.Z.Z.Z.Z.M.Z.B.M.M.Z.B.M.M.[ M.M.M.M.M.Z.Z.B.Z.Z.M.M.Z.Z.M.Z.Z.Z.M.M.M.M.Z.Z.Z.M.Z.Z.M.M.Z.M.M.Z.M.M.Z.M.M.Z.M.Z.M.Z.M.M.M.M.M.M.Z.M.M.M.Z.M.M.Z.Z.Z.M.M.Z.M.Z.M.M.Z.Z.Z.M.Z.M.Z.Z.Z.Z.Z.D.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.M.Z.[ M.M.M.M.M.M.M.Z.M.B.Z.M.M.B.B.M.Z.Z.M.B.B.M.Z.M.M.Z.Z.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.M.M.[ Z.M.Z.M.B.B.B.B.B.Z.M.M.Z.Z.Z.c w y b D Q Q n.n.n.n.V.Q V.V.V.V.V.Q n.n.V.Q n.V.V.V.n.V.n.n.Q ! V.n.n.V.V.Q V.V.Q V.V.V.V.V.Q V.V.Q V.V.Q n.n.n.n.Q V.Q V.Q V.V.Q Q V.V.Q V.Q Q Q Q m.n.n.V.V.V.n.n.V.V.V.n.V.Q n.n.V.n.n.n.n.Q V.n.V.V.V.V.V.n.n.n.V.V.Q n.V.V.Q B.V.K , YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYX . o g M.M.Z.M.Z.Z.M.Z.Z.M.M.Z.M.M.B.B.M.M.Z.B.B.B.Z.Z.[ B.Z.Z.M.Z.Z.M.Z.Z.Z.M.M.M.B.Z.M.M.M.Z.M.M.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.M.M.M.M.Z.M.Z.M.M.M.M.Z.M.Z.M.Z.M.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.[ M.Z.M.M.Z.Z.[ Z.Z.Z.Z.Z.Z.Z.#XZ.Z.Z.Z.Z.D.Z.[ Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.Z.M.Z.Z.Z.Z.M.Z.Z.M.M.Z.M.Z.Z.Z.Z.Z.M.M.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.M.M.Z.M.M.Z.Z.M.M.M.M.M.M.B.B.M.M.Z.M.Z.M.B.Z.M.Z.Z.M.M.Z.M.Z.Z.Z.M.Z.Z.Z.M.M.Z.M.Z.M.Z.B.B.Z.M.B.B.B.B.B.B.M.Z.Z.M.M.M.c w r b T Q Q n.n.V.n.V.V.V.m.V.V.n.V.Q V.V.n.n.Q n.V.V.n.Q V.V.Q Q n.n.Q V.V.V.n.V.V.V.Q V.V.V.Q V.Q Q n.n.n.Q Q V.Q V.V.V.Q Q Q Q V.Q Q V.Q V.Q V.n.V.V.V.V.V.V.V.V.n.Q n.n.V.V.Q V.n.V.V.V.V.n.n.Q Q n.V.V.V.n.n.Q Q n.n.n.n.V.V.v.D 2 . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYX , B.B.A.B.Z.B.B.Z.B.Z.[ Z.B.B.B.Z.Z.M.Z.Z.M.Z.Z.B.Z.Z.Z.Z.Z.Z.Z.M.B.M.Z.M.B.M.Z.M.M.M.M.M.Z.B.M.Z.B.Z.Z.Z.Z.M.Z.Z.M.Z.M.M.M.M.Z.M.Z.Z.M.M.Z.Z.M.Z.M.M.Z.M.Z.Z.M.Z.M.M.Z.Z.Z.M.Z.M.Z.M.M.Z.M.Z.M.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.[ Z.Z.Z.Z.Z.Z.Z.M.Z.Z.M.Z.Z.Z.Z.Z.Z.M.Z.Z.M.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.B.M.M.B.B.B.B.M.M.B.Z.M.B.B.M.B.B.B.M.B.B.B.B.B.B.B.B.Z.M.B.B.Z.B.B.B.B.Z.B.Z.Z.M.B.Z.M.M.Z.M.B.B.B.B.B.B.B.B.B.V.Q D.Q Q Q a 8 t b T ! D.Q Q Q D.Q D.Q D.D.Q Q V.n.Q n.n.n.V.V.n.V.Q n.V.n.Q ! n.n.Q V.n.V.V.Q Q V.V.Q n.V.V.Q V.Q n.n.Q n.V.V.n.n.n.n.n.n.n.n.V.Q B.B.Q n.V.Q V.Q V.V.n.V.V.n.V.Q n.n.n.n.Q B.Q V.n.V.V.V.n.n.n.n.V.V.V.n.V.n.Q n.n.n.V.B.Q T l - YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYX o V.B.Z.Z.Z.B.Z.B.B.M.Z.Z.Z.Z.M.M.Z.M.M.Z.Z.B.M.B.B.M.M.M.M.M.Z.Z.Z.M.M.M.M.M.M.Z.M.M.Z.M.B.B.B.B.M.M.B.Z.Z.Z.M.M.Z.M.Z.Z.M.M.M.M.Z.Z.Z.M.M.M.M.M.Z.M.M.M.M.Z.Z.Z.Z.Z.M.M.Z.Z.M.Z.M.Z.Z.Z.Z.Z.[ M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.D.Z.Z.Z.Z.Z.D.Z.Z.Z.Z.M.M.M.Z.Z.Z.M.Z.Z.M.Z.Z.Z.M.M.Z.Z.M.M.Z.Z.Z.M.M.M.Z.B.Z.M.B.Z.B.Z.Z.Z.Z.Z.Z.M.Z.Z.M.B.M.B.M.M.M.B.M.B.M.M.M.M.M.B.B.M.B.M.B.M.B.B.B.B.B.B.B.Z.B.Z.B.B.B.M.B.B.M.Z.M.M.M.M.Z.B.B.B.B.B.Z.B.B.B.B.B.B.V.V.V.V.Q ! t y u b D ! Q Q D.Q D.Q Q D.Q D.Q D.V.n.n.n.n.n.n.V.V.n.V.V.n.V.n.n.n.n.Q V.V.V.V.n.Q V.Q V.V.V.Q n.n.V.Q n.V.n.Q n.n.n.n.V.n.n.n.n.n.Q n.n.B.n.Q Q Q V.Q V.V.V.n.V.V.n.n.n.n.n.n.n.n.n.V.V.n.V.V.n.V.V.V.n.V.Q n.V.n.n.n.n.T n y $ YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYX M.Z.B.M.B.M.M.M.M.M.M.Z.B.M.M.M.Z.B.M.[ Z.Z.Z.Z.B.Z.Z.Z.B.M.M.M.M.M.M.Z.M.M.M.M.M.M.M.M.B.B.M.M.M.M.Z.Z.M.M.Z.M.M.M.M.M.M.M.Z.Z.M.M.Z.Z.M.M.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.M.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.D.Z.Z.D.Z.Z.Z.Z.Z.D.Z.Z.M.M.M.Z.Z.Z.Z.Z.M.Z.M.Z.M.Z.M.M.Z.M.Z.Z.Z.Z.Z.Z.M.M.Z.Z.B.M.B.M.M.Z.Z.D.Z.Z.Z.Z.M.M.Z.M.M.M.B.B.B.M.Z.B.M.M.Z.B.M.B.M.B.M.M.B.B.B.B.M.[ B.B.B.Z.Z.M.Z.B.Z.Z.[ M.B.Z.M.B.B.Z.B.Z.Z.Z.Z.Z.Z.B.M.M.B.B.B.V.V.D.V.D.! y 8 k n v Q Q Q Q Q Q D.Q Q Q D.Q D.V.Q n.n.n.n.V.V.Q V.V.V.n.V.V.V.n.n.n.n.G.Q n.V.V.V.V.n.! Q V.n.Q V.V.Q n.n.n.Q n.V.Q Q V.Q n.V.N.N.n.B.Q B.Q V.V.Q V.Q n.V.V.V.V.Q n.n.n.n.n.n.n.V.V.V.V.V.V.V.V.V.V.V.V.n.V.n.V.V.! 2 YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYX ! Z.Z.Z.M.M.Z.M.B.M.Z.M.B.M.M.M.B.Z.M.M.M.M.B.M.B.Z.M.Z.M.M.M.M.Z.B.M.B.M.Z.M.Z.M.M.M.M.Z.Z.Z.M.M.M.M.M.Z.Z.Z.M.Z.Z.M.M.M.M.Z.M.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.M.M.Z.M.Z.[ Z.Z.Z.M.M.Z.Z.Z.Z.D.D.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.Z.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.M.[ M.M.Z.M.M.Z.Z.Z.M.Z.B.Z.Z.Z.Z.Z.M.M.Z.M.B.B.M.B.M.B.M.Z.M.B.B.M.B.B.M.M.B.B.M.M.M.B.M.B.Z.Z.Z.B.Z.M.Z.Z.Z.B.Z.Z.B.Z.Z.M.M.M.Z.B.B.Z.Z.Z.Z.Z.B.M.B.M.B.Z.V.V.Q F.Q T y y j b T Q D.Q Q @XQ Q Q D.Q Q D.Q G.n.n.Q V.n.n.n.V.V.Q V.V.Q V.Q n.n.Q V.n.Q V.V.V.n.Q V.Q V.Q V.V.n.n.n.n.n.n.Q n.Q Q V.Q V.Q n.V.n.n.n.B.n.Q Q Q V.Q V.n.V.V.V.V.Q n.n.n.n.n.n.n.V.Q m.V.n.n.V.V.n.V.n.m.V.V.V.m.v $ YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYX K Z.B.Z.Z.Z.Z.M.M.B.M.Z.Z.M.B.M.Z.B.Z.Z.M.M.B.B.M.M.M.Z.M.Z.M.B.M.B.Z.Z.M.B.[ M.M.M.M.M.Z.Z.M.Z.M.M.B.Z.Z.M.M.M.Z.Z.M.M.Z.M.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.#XZ.Z.#XZ.Z.Z.Z.Z.Z.M.Z.Z.Z.M.M.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.M.M.M.M.M.Z.Z.M.Z.M.B.M.M.Z.Z.Z.Z.M.M.M.Z.Z.B.M.[ Z.Z.M.M.M.B.M.M.B.M.Z.M.Z.[ Z.M.M.M.M.M.B.M.B.B.B.[ B.Z.Z.B.Z.M.B.M.B.M.B.Z.M.Z.B.Z.M.B.B.Z.B.[ M.B.B.M.M.V.B.B.B.Q ! y y z b T Q Q Q Q Q Q V.V.V.D.V.Q V.V.V.n.Q n.n.Q V.Q V.V.Q V.V.V.Q n.Q n.n.V.Q V.V.Q Q V.Q V.Q n.Q Q n.V.Q V.Q Q V.V.Q V.Q V.n.V.Q n.n.n.n.n.n.n.n.V.Q V.Q V.V.V.n.n.n.n.n.n.n.n.n.n.V.m.Q n.V.V.V.n.V.V.n.V.V.V.n.y @ YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYX b A.M.Z.Z.M.B.M.M.M.B.M.B.Z.Z.B.Z.Z.Z.Z.B.M.M.B.M.M.Z.M.Z.M.M.M.M.M.Z.Z.Z.Z.B.M.Z.Z.M.Z.M.Z.Z.Z.B.Z.M.Z.Z.Z.Z.Z.Z.M.M.Z.M.Z.M.Z.Z.Z.Z.M.Z.Z.Z.Z.M.M.Z.Z.M.Z.M.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.#XZ.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.M.Z.Z.Z.M.Z.Z.Z.Z.M.M.Z.M.M.M.B.M.[ Z.Z.M.M.B.M.Z.Z.M.Z.Z.M.Z.Z.M.M.M.M.M.Z.M.M.Z.M.B.M.M.Z.M.Z.Z.M.M.M.B.B.B.B.B.M.Z.Z.B.B.B.Z.M.M.M.M.M.B.B.M.Z.B.B.B.B.B.B.Z.Z.B.B.M.M.B.B.N.N.B.B.Q T y r z b T Q Q Q Q Q V.Q Q V.V.V.Q V.V.n.n.Q n.Q V.n.V.V.n.V.V.V.V.V.n.V.V.n.n.n.n.Q Q V.Q V.Q V.V.Q Q n.Q Q Q V.V.n.Q V.Q V.Q V.Q V.V.n.B.n.V.n.n.n.Q V.n.n.V.V.n.V.n.n.n.Q n.n.n.n.n.V.V.V.V.V.V.Q n.Q B.n.n.n.n.1 YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYX d B.M.B.M.Z.M.M.M.B.B.M.B.Z.M.Z.Z.B.B.B.B.M.M.M.M.B.M.Z.M.M.M.B.B.Z.M.M.B.Z.M.Z.Z.Z.Z.M.Z.Z.Z.Z.M.M.M.Z.M.Z.M.Z.M.M.Z.M.M.Z.M.M.M.Z.Z.M.Z.M.Z.Z.Z.M.Z.Z.Z.[ Z.Z.M.Z.Z.Z.Z.Z.M.Z.Z.M.M.Z.Z.Z.Z.Z.M.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.[ Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.M.M.M.Z.Z.Z.M.Z.M.M.Z.M.M.M.Z.Z.M.M.B.M.Z.Z.B.M.M.[ M.M.M.M.Z.M.M.B.M.M.M.M.Z.M.M.M.Z.Z.M.M.Z.Z.Z.Z.B.M.M.B.B.M.M.M.Z.B.B.B.Z.Z.B.M.Z.M.M.B.M.B.B.M.[ Z.M.M.Z.M.B.B.B.M.M.N.M.B.N.N.B.B.B.Q T 9 f z b T Q Q Q F.#XQ Q V.V.V.Q V.V.Q V.V.n.Q V.n.V.Q V.Q V.n.V.V.Q Q n.V.n.n.n.Q V.Q V.V.Q V.Q n.n.V.V.Q V.n.Q V.Q V.Q V.Q Q V.V.Q n.n.n.n.Q n.Q n.n.n.V.V.V.V.n.n.Q n.n.V.n.n.n.n.n.n.Q V.V.n.V.n.! n.B.n.V.m.; YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYX 1 B.M.M.M.M.M.M.B.M.M.Z.M.Z.Z.B.Z.B.M.M.B.Z.B.M.M.M.Z.M.B.Z.M.[ Z.M.Z.M.Z.B.M.M.M.M.Z.M.M.M.M.M.Z.M.Z.M.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.M.M.M.M.M.Z.Z.Z.Z.M.M.M.M.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.D.Z.Z.M.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.M.B.M.B.B.Z.Z.Z.B.Z.Z.M.Z.Z.M.Z.M.B.M.M.M.M.M.Z.Z.M.[ Z.M.M.Z.M.Z.B.M.M.M.M.M.M.B.M.M.M.B.M.M.B.Z.Z.Z.B.M.B.M.M.M.M.Z.M.Z.B.M.B.B.B.B.M.B.M.N.N.N.N.M.B.B.Q T 9 k z b ! Q F.Q Q Q Q V.Q V.Q Q V.Q n.n.V.n.Q Q Q V.V.V.V.V.Q V.Q V.V.V.V.V.Q Q V.Q n.n.V.V.Q n.V.V.V.n.V.Q V.n.V.V.V.V.V.Q V.n.n.n.n.n.n.n.n.n.Q V.V.Q V.n.n.V.n.V.V.n.n.n.n.n.n.n.n.n.n.V.V.n.V.n.n.n.n.V.n.y YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYX $ E B.M.B.M.M.M.M.M.B.M.Z.Z.Z.Z.B.Z.Z.M.Z.Z.B.B.B.M.Z.B.Z.M.M.M.B.B.M.B.M.Z.M.M.M.Z.M.M.M.B.M.Z.Z.M.B.M.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.M.M.M.Z.Z.Z.Z.M.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.[ Z.Z.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.M.Z.Z.M.Z.Z.Z.Z.[ M.B.M.Z.Z.B.B.Z.B.Z.B.B.B.M.M.Z.B.M.M.M.M.M.B.B.M.M.M.M.M.Z.Z.M.B.M.M.M.M.B.M.M.M.M.M.M.B.Z.Z.M.Z.B.M.M.M.B.B.B.M.B.M.B.M.B.B.B.B.M.M.B.M.M.M.M.Q Q D.Q Q T 8 j b b Q n.Q V.V.V.V.Q Q V.V.V.Q Q Q n.n.V.Q n.V.Q n.V.V.V.V.V.V.Q V.V.V.Q Q Q V.Q n.n.V.V.Q V.V.Q n.V.n.V.Q V.V.V.Q V.V.Q n.n.n.n.n.n.V.V.V.V.V.V.V.V.n.V.V.V.n.n.n.n.Q V.n.Q Q n.Q V.n.n.Q n.n.n.Q B.V.V.z YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYX . Z v.M.M.Z.M.M.M.B.M.M.M.M.Z.B.Z.M.Z.Z.M.M.M.B.Z.B.B.Z.Z.M.M.B.M.M.B.M.B.M.B.Z.Z.M.M.M.Z.M.M.M.M.Z.M.M.Z.Z.Z.M.Z.Z.M.Z.M.Z.Z.Z.M.Z.M.Z.M.M.M.Z.Z.Z.Z.Z.M.Z.M.M.Z.M.Z.Z.Z.M.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.M.M.Z.Z.M.Z.Z.M.Z.M.Z.M.M.Z.M.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.M.M.M.M.B.M.B.M.Z.Z.Z.Z.Z.B.M.M.B.M.M.B.M.M.M.B.B.M.Z.Z.M.M.Z.Z.M.M.Z.B.M.M.M.M.M.M.M.M.Z.Z.M.Z.M.Z.Z.B.B.M.M.M.M.M.M.B.M.Z.B.B.M.B.B.B.M.M.M.M.B.B.B.D.Q Q D.Q z y z z b n.V.V.V.Q V.Q V.V.V.V.Q V.V.n.V.V.Q Q Q n.n.Q n.n.n.V.V.V.V.V.V.V.V.Q Q Q V.n.n.Q n.Q V.n.V.V.V.Q V.V.V.Q V.V.Q n.Q n.n.n.V.n.Q V.n.Q V.V.V.V.n.V.V.V.Q n.n.Q V.n.V.V.V.Q V.B.n.V.V.Q m.Q V.V.V.n.M YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYX q M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.Z.M.M.Z.B.Z.M.M.M.M.M.Z.B.B.Z.M.M.B.M.M.Z.M.M.M.M.B.Z.[ M.M.M.Z.Z.Z.Z.Z.M.Z.M.Z.M.Z.M.Z.M.Z.Z.M.M.M.M.M.M.Z.M.M.Z.M.M.Z.Z.Z.Z.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.M.M.Z.Z.M.Z.Z.Z.M.Z.Z.Z.Z.M.Z.Z.M.M.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.M.M.M.M.M.Z.M.M.M.Z.B.Z.M.Z.B.Z.M.Z.M.B.B.B.B.M.M.B.Z.Z.Z.B.M.M.M.Z.Z.B.Z.M.M.B.B.M.M.M.B.M.B.M.B.Z.M.[ Z.M.M.B.M.M.M.B.M.B.M.M.B.Z.Z.Z.M.M.M.B.M.M.B.D.Q Q Q Q a y z b b V.n.Q V.V.Q Q V.V.V.V.V.V.V.V.n.V.V.V.n.V.n.Q V.V.V.V.Q V.V.V.V.V.Q Q n.n.n.V.Q n.V.V.Q V.n.n.V.V.Q V.n.V.Q Q Q V.Q n.n.Q V.n.V.V.n.V.Q V.V.V.n.n.V.Q V.V.Q n.n.V.V.V.V.n.n.B.n.n.V.V.V.Q Q V.V.S YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYX & v.M.M.M.M.M.Z.M.M.M.M.M.M.Z.M.M.M.M.Z.Z.M.M.M.Z.M.M.M.Z.M.M.M.M.B.Z.M.Z.M.Z.M.M.M.M.Z.Z.M.M.Z.M.Z.Z.M.Z.M.Z.M.M.Z.M.M.M.Z.M.Z.Z.M.Z.Z.Z.M.M.Z.M.Z.Z.Z.M.Z.Z.M.M.Z.Z.M.Z.Z.Z.Z.M.Z.M.Z.Z.Z.Z.M.Z.Z.Z.M.Z.Z.M.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.Z.Z.M.Z.Z.Z.M.Z.Z.Z.M.M.M.M.M.M.M.Z.M.Z.M.M.M.B.M.Z.B.M.M.B.M.B.B.B.B.M.B.Z.Z.[ Z.M.M.M.M.B.B.M.M.M.M.M.M.B.M.B.Z.Z.B.Z.B.B.B.B.Z.M.B.B.B.B.B.B.Z.M.[ Z.Z.M.M.M.M.[ M.M.Q Q D.V.! y r b b b Q Q Q V.V.n.V.Q V.Q V.V.Q V.V.V.V.n.Q n.Q n.V.V.n.V.V.V.V.V.V.n.V.Q Q n.n.n.Q Q V.Q n.V.Q V.V.n.V.Q V.Q Q n.V.Q Q V.Q n.n.V.V.m.B.n.V.Q n.Q Q V.V.V.Q V.V.Q n.V.V.Q n.V.V.n.n.V.n.Q Q V.V.V.V.D YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYX . J M.M.M.M.M.M.M.M.Z.M.M.M.Z.M.M.M.M.Z.Z.M.M.Z.Z.[ M.M.M.Z.M.Z.M.B.B.M.B.B.M.Z.M.M.M.B.Z.M.Z.M.M.Z.Z.Z.Z.Z.M.M.M.Z.Z.Z.Z.M.M.Z.Z.Z.M.Z.Z.M.Z.M.Z.Z.Z.M.Z.M.Z.Z.Z.M.M.M.Z.Z.Z.Z.M.Z.Z.[ Z.Z.Z.M.Z.M.Z.Z.M.M.Z.M.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.M.M.Z.Z.Z.M.Z.Z.M.M.Z.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.M.Z.Z.Z.Z.Z.M.M.M.M.M.Z.M.M.B.M.M.M.Z.M.Z.[ M.B.M.M.M.M.M.Z.Z.M.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.M.M.B.M.M.M.M.Z.[ B.Z.M.B.Z.M.B.M.B.M.M.B.[ B.M.Z.B.B.B.B.B.B.Z.B.B.M.M.B.Q Q V.V.z 9 a z b Z Q n.Q n.n.n.Q V.G.V.V.V.V.V.V.V.n.Q Q Q Q V.n.V.Q V.Q V.V.Q V.V.V.V.n.n.n.n.Q V.Q V.V.Q Q V.V.V.Q Q n.n.n.n.V.n.n.n.Q n.n.V.V.n.n.n.n.n.Q n.V.V.V.V.V.V.m.n.Q V.V.n.V.V.V.V.V.B.n.V.m.B.V.V.b YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYX a M.M.Z.Z.Z.B.M.Z.Z.Z.M.M.Z.M.M.M.Z.M.Z.Z.Z.M.Z.Z.M.M.M.M.M.M.M.B.M.B.B.M.B.M.M.Z.B.B.M.Z.M.Z.M.Z.M.M.M.Z.M.M.M.M.M.M.M.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.M.M.M.Z.[ Z.Z.Z.Z.M.Z.Z.Z.Z.Z.M.M.Z.M.Z.Z.Z.M.Z.M.M.M.Z.Z.M.M.Z.M.Z.Z.Z.Z.Z.Z.M.Z.M.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.Z.Z.Z.Z.M.Z.M.M.M.M.B.B.M.M.Z.Z.B.M.M.Z.Z.M.Z.B.Z.B.M.B.Z.Z.Z.M.Z.Z.B.Z.M.Z.Z.Z.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.B.B.M.M.M.M.B.B.B.M.M.Z.B.Z.M.B.M.B.B.Z.Z.Z.Z.Z.Z.B.Z.V.V.V.Q a 9 k z b T n.n.V.n.n.n.V.Q V.Q Q V.V.n.V.V.V.Q Q Q V.V.G.Q Q Q V.V.V.V.V.V.n.n.V.Q n.n.Q ! V.Q Q V.V.V.V.Q V.V.n.V.n.V.V.n.n.Q n.n.V.n.V.n.Q n.n.Q B.V.m.Q n.n.V.V.Q n.n.V.n.V.V.V.V.n.V.V.V.V.B.V.V.k YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYX $ M.M.B.Z.Z.Z.M.M.M.Z.M.M.M.B.M.Z.M.M.Z.M.Z.M.Z.B.Z.M.M.M.M.M.[ B.M.B.B.M.M.M.M.B.B.M.B.M.M.B.Z.M.M.M.M.Z.Z.M.M.Z.M.Z.Z.Z.Z.M.M.M.Z.M.Z.M.Z.Z.M.Z.Z.Z.Z.Z.M.Z.M.Z.M.M.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.M.M.Z.M.Z.M.Z.Z.M.M.Z.Z.[ M.M.M.M.M.Z.Z.Z.M.M.M.Z.M.Z.M.Z.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.M.M.Z.M.M.Z.M.Z.M.M.M.M.Z.B.M.Z.M.Z.Z.M.M.Z.Z.Z.Z.Z.Z.M.B.M.B.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.Z.M.M.Z.B.Z.Z.Z.M.Z.Z.B.M.M.M.B.M.M.Z.Z.M.B.M.M.M.Z.B.B.B.M.Z.B.Z.M.B.Z.B.Z.V.V.n.T y 9 g b b ! n.n.n.n.Q Q V.V.V.V.V.V.Q n.V.Q V.n.V.V.V.Q V.V.V.Q V.Q n.V.V.V.V.V.V.n.V.n.n.n.V.n.Q V.Q V.Q V.Q V.n.Q V.n.V.n.G.Q n.V.n.V.V.n.n.n.n.n.n.V.n.V.n.n.n.n.n.n.n.V.V.m.V.V.V.V.n.V.V.n.Q T 1 YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYX . U Z.Z.Z.M.Z.Z.Z.Z.M.Z.Z.M.M.M.M.M.M.M.M.M.Z.Z.B.Z.M.M.M.M.M.B.M.M.M.B.M.M.Z.[ M.B.B.B.B.B.Z.Z.B.M.M.Z.Z.M.M.M.M.M.[ Z.Z.M.Z.M.Z.M.Z.Z.M.M.Z.M.Z.Z.Z.M.Z.M.Z.M.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.Z.M.Z.M.Z.Z.Z.Z.M.Z.Z.Z.Z.M.M.Z.M.Z.M.Z.Z.M.Z.Z.Z.Z.Z.M.M.Z.Z.Z.Z.Z.Z.M.Z.Z.M.M.M.Z.Z.M.M.Z.M.M.B.M.M.Z.[ Z.B.M.Z.M.M.Z.Z.M.Z.Z.M.Z.B.B.B.Z.B.B.M.Z.M.M.B.Z.Z.Z.B.Z.Z.M.M.M.Z.B.Z.B.Z.B.M.B.B.B.M.M.Z.B.B.Z.Z.M.Z.Z.M.M.B.B.B.B.Z.B.B.M.M.B.B.Z.V.V.n.z 9 r z b Z Q Q V.n.Q V.V.Q V.n.V.V.Q Q V.V.Q V.V.V.V.V.V.Q V.V.n.n.n.n.V.n.Q V.Q Q V.V.V.V.n.V.V.V.V.V.V.V.n.n.n.Q Q V.V.V.V.V.n.V.V.V.n.V.V.n.n.n.V.n.B.V.n.V.n.n.V.V.Q Q n.n.V.n.V.n.n.V.V.V.V.l YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYX p B.B.Z.Z.Z.B.Z.B.B.M.B.B.M.M.M.B.M.B.M.M.Z.B.M.B.B.M.Z.M.M.Z.M.M.M.M.B.B.B.M.B.B.B.M.Z.B.B.B.Z.M.Z.B.Z.Z.M.M.M.M.M.Z.B.B.M.M.M.Z.M.M.M.Z.M.Z.M.Z.Z.Z.M.Z.Z.M.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.M.Z.M.Z.Z.M.Z.Z.Z.M.M.M.M.M.Z.M.Z.Z.Z.Z.Z.Z.P.Z.Z.Z.Z.M.Z.M.Z.Z.Z.Z.Z.M.Z.M.M.Z.M.Z.M.Z.M.M.M.M.M.M.Z.M.M.Z.M.M.M.Z.M.Z.Z.M.Z.Z.M.Z.Z.Z.M.Z.Z.Z.Z.M.M.Z.M.Z.Z.Z.M.Z.Z.M.Z.Z.M.Z.M.Z.Z.Z.M.M.M.Z.M.M.Z.Z.M.Z.Z.M.M.Z.Z.M.M.Z.Z.Z.Z.B.B.B.B.B.B.B.K.Z.v.u y g z z T ! V.Q Q V.Q V.V.Q V.V.n.Q n.n.V.Q V.V.V.V.Q n.Q Q V.n.n.V.n.V.Q Q V.Q n.V.V.V.V.V.V.V.n.V.V.n.V.n.n.n.Q V.n.V.n.n.V.V.V.V.V.V.n.n.n.n.V.n.V.Q n.n.N.n.B.B.Q B.Q B.V.B.V.n.n.Q n.V.v & YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYX . v.Z.B.B.B.M.M.M.M.M.B.B.B.[ B.M.M.M.B.M.M.M.M.B.B.B.B.Z.B.Z.M.M.M.B.B.M.B.B.M.M.B.B.B.B.B.Z.Z.M.Z.Z.B.Z.M.M.M.Z.Z.M.Z.B.B.B.B.M.M.Z.M.M.Z.M.Z.M.Z.Z.Z.M.Z.M.M.M.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.M.Z.Z.Z.M.M.M.M.M.M.Z.M.M.M.Z.M.M.Z.M.Z.M.M.M.M.Z.M.M.M.Z.Z.Z.M.Z.Z.Z.Z.M.Z.M.M.Z.M.Z.Z.M.M.Z.Z.Z.Z.Z.M.M.M.M.Z.M.Z.Z.M.M.Z.M.Z.M.M.M.M.Z.M.Z.Z.Z.M.Z.Z.M.Z.M.Z.Z.Z.B.M.B.M.B.B.Z.B.M.G w y z z b T Q Q Q Q Q Q Q V.Q V.V.V.Q n.n.V.Q n.V.V.n.n.n.V.Q Q Q n.Q n.Q Q V.V.V.n.V.Q n.V.V.V.n.V.n.V.V.Q n.n.n.V.V.V.V.V.V.V.n.Q B.V.n.V.n.Q V.V.B.V.Q n.n.N.N.B.m.B.Q V.V.B.V.V.V.V.! j - YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYX L B.Z.B.Z.B.M.M.B.M.B.Z.B.N.M.M.M.M.M.Z.M.B.Z.Z.B.B.B.M.Z.Z.M.M.B.M.M.B.B.M.B.B.M.B.B.[ Z.Z.M.M.B.B.Z.B.Z.Z.M.M.M.Z.M.M.M.B.M.M.M.Z.M.Z.M.Z.Z.M.Z.Z.M.Z.M.[ Z.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.[ Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.M.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.M.M.Z.Z.M.Z.M.M.[ Z.Z.M.M.M.M.M.M.M.M.Z.M.M.M.M.M.Z.M.Z.Z.Z.M.Z.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.Z.M.M.M.M.M.Z.Z.Z.M.Z.Z.M.M.Z.Z.M.M.M.M.M.M.M.Z.M.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.M.B.Z.B.B.Z.B.B.B.z w g z z D Q Q Q V.Q F.V.Q n.n.V.V.V.Q ! Q n.V.V.V.V.V.V.V.V.V.V.Q n.Q n.V.n.n.n.V.V.n.Q n.n.V.m.V.V.n.Q n.V.V.Q n.n.n.V.V.V.n.n.m.n.V.V.n.V.n.V.V.V.V.V.Q n.n.N.n.Q n.B.B.Q V.Q V.n.M y YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYX 1 M.B.Z.B.B.M.M.M.M.M.B.Z.B.M.M.B.B.M.M.M.M.Z.Z.M.M.B.Z.M.Z.Z.M.M.M.B.M.M.B.M.B.M.B.B.Z.M.M.B.Z.Z.Z.M.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.B.B.M.M.M.Z.M.Z.M.Z.Z.Z.Z.M.M.Z.M.M.Z.Z.M.M.Z.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.M.#XZ.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.M.Z.M.Z.M.M.M.Z.M.Z.M.M.Z.M.Z.M.M.M.M.M.M.Z.M.Z.Z.Z.M.Z.M.Z.Z.M.M.M.M.M.M.Z.Z.M.M.M.Z.Z.M.Z.M.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.M.Z.Z.M.Z.Z.Z.Z.Z.M.M.M.Z.M.Z.B.M.B.B.B.B.Z.B.Q a h z z z T Q Q F.Q Q Q F.Q Q n.n.V.n.V.V.Q V.Q V.n.n.V.Q V.V.Q V.V.n.V.n.n.n.n.V.Q V.n.n.n.n.V.n.V.V.V.n.n.Q n.V.Q V.n.n.Q n.n.n.n.n.B.B.n.m.V.n.n.n.V.n.n.n.n.n.n.n.n.n.n.! M t , YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYX I v.B.M.M.M.M.M.M.M.B.B.B.M.M.Z.Z.M.M.Z.M.Z.B.B.M.Z.B.M.M.M.M.M.B.M.B.B.M.B.B.M.B.B.Z.M.B.M.M.Z.M.Z.B.B.Z.Z.Z.M.M.Z.Z.Z.M.Z.M.M.M.M.Z.M.Z.M.Z.M.Z.Z.Z.M.M.Z.M.M.Z.M.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.Z.M.M.M.Z.M.Z.Z.M.M.M.Z.Z.Z.Z.M.M.Z.M.M.Z.M.M.M.M.Z.Z.M.Z.M.M.Z.M.M.Z.M.M.M.Z.Z.Z.Z.M.M.M.Z.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.Z.M.Z.Z.M.Z.M.Z.M.Z.M.M.M.M.Z.M.Z.M.M.M.Z.B.Z.B.B.B.M.B.B.B.Z j j z z D ! Q D.D.Q F.D.Q Q Q Q n.Q B.n.B.n.V.n.n.V.V.V.n.V.Q Q Q Q V.n.n.n.n.Q V.V.V.n.Q Q n.n.V.V.n.n.V.Q V.n.Q V.V.n.n.n.n.n.n.V.V.V.V.V.Q m.V.n.Q Q V.n.n.n.n.n.Q N.! b - . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYX g B.Z.Z.B.B.M.[ M.B.M.B.B.B.M.B.B.[ M.M.M.Z.B.B.B.B.M.M.M.B.M.M.M.M.M.M.M.B.B.M.M.M.M.M.M.B.M.Z.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.M.M.Z.M.M.M.Z.Z.M.Z.Z.M.Z.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.M.M.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.Z.Z.M.Z.M.M.Z.M.Z.M.Z.Z.Z.M.Z.Z.Z.Z.M.Z.M.Z.M.Z.Z.Z.Z.M.Z.M.Z.Z.Z.M.Z.Z.M.[ M.Z.M.M.Z.M.Z.M.Z.M.Z.Z.Z.M.M.Z.M.Z.M.Z.M.M.Z.M.Z.M.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.M.Z.M.Z.Z.Z.Z.Z.B.B.B.B.B.Z.b.z j c j b Q V.Q Q Q Q Q Q Q D.n.n.n.n.B.V.V.V.V.V.Q V.V.n.n.V.Q Q V.Q Q n.m.n.V.V.V.Q V.V.V.V.n.V.n.V.V.V.V.V.Q Q V.V.B.V.B.n.n.n.n.n.n.V.n.V.V.V.V.m.V.V.V.n.n.! ! ! E M 0 + YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYX M.B.B.Z.B.N.N.B.B.M.B.M.B.M.Z.Z.M.M.M.Z.M.M.B.M.B.B.M.M.M.M.M.M.B.M.M.B.M.Z.M.Z.M.B.M.M.B.Z.M.Z.M.Z.B.M.M.[ B.Z.M.Z.M.Z.Z.M.M.M.M.M.Z.Z.M.M.M.Z.Z.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.Z.Z.M.M.Z.M.Z.Z.Z.Z.Z.Z.Z.M.M.M.M.Z.M.Z.M.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.M.M.Z.M.Z.Z.Z.Z.M.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.M.M.M.Z.Z.M.M.Z.M.Z.Z.M.Z.M.Z.M.M.M.Z.Z.M.Z.Z.Z.M.Z.M.Z.Z.Z.Z.M.Z.M.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.M.Z.Z.Z.Z.M.M.Z.Z.Z.Z.Z.Z.M.M.M.Z.Z.Z.M.Z.Z.Z.A.B.B.B.B.B.6 @ & q j C R n.D.F.D.Q Q Q D.Q B.Q n.Q n.V.V.V.n.V.n.n.n.n.V.m.Q Q Q Q V.V.n.V.V.V.Q V.n.V.V.n.n.V.V.V.V.V.V.n.Q V.Q B.V.n.B.n.n.n.n.V.B.V.V.B.V.V.n.T v y O YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYX A B.Z.B.Z.Z.B.B.B.B.M.M.M.Z.B.B.M.Z.M.M.Z.M.M.B.[ M.M.M.M.M.M.M.M.B.B.M.M.M.M.M.M.B.M.M.B.M.Z.B.Z.Z.Z.M.M.M.M.M.M.Z.Z.Z.M.M.M.M.Z.M.Z.Z.M.Z.Z.Z.M.M.Z.Z.M.M.Z.Z.Z.Z.Z.M.Z.Z.M.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.M.M.M.Z.M.M.M.Z.Z.M.Z.Z.Z.M.Z.Z.M.M.Z.Z.Z.Z.M.Z.M.Z.M.Z.M.M.M.Z.Z.M.M.M.Z.[ Z.M.M.M.Z.M.Z.M.M.M.Z.M.Z.Z.M.M.M.Z.Z.M.M.M.M.Z.Z.M.Z.Z.M.M.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.M.Z.Z.Z.Z.M.M.Z.Z.Z.Z.M.M.Z.M.M.Z.Z.Z.Z.M.M.Z.Z.B.Z.Z.A.B.M.B.c O # t A R Q Q Q D.D.Q D.V.V.n.n.V.n.n.V.V.V.n.Q n.n.n.V.V.Q Q Q n.V.V.B.Q V.n.n.n.n.n.n.Q V.n.V.n.V.m.V.V.V.V.m.V.V.B.m.V.n.n.n.n.! l y y 2 : $ o YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYX & M.B.B.B.M.M.B.B.M.M.M.B.B.B.Z.M.B.B.M.M.M.M.M.M.M.M.M.M.M.[ M.M.B.M.B.M.M.M.M.M.B.M.M.M.M.M.M.B.M.Z.M.M.M.Z.B.Z.M.Z.M.M.[ M.M.Z.M.M.M.Z.M.M.Z.Z.Z.Z.Z.M.Z.Z.M.Z.Z.Z.M.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.M.Z.Z.Z.M.Z.Z.Z.Z.M.B.B.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.B.Z.M.Z.Z.M.M.Z.Z.M.M.M.M.Z.M.Z.M.M.M.M.M.M.M.Z.Z.B.M.Z.[ B.Z.M.Z.M.Z.M.M.Z.Z.M.Z.M.M.M.Z.Z.Z.M.M.Z.M.M.Z.Z.M.M.Z.Z.Z.Z.M.Z.M.Z.Z.Z.M.Z.Z.[ M.Z.Z.M.M.Z.Z.M.Z.M.Z.M.Z.Z.B.B.B.M.b.O X . 6 z F ! Q V.V.V.V.V.V.V.V.V.n.V.V.Q B.m.B.Q Q V.n.V.B.n.V.n.Q R W Q N.Q N.N.n.V.m.V.V.V.V.V.V.N.V.n.B.V.V.V.V.B.! z & YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYX . b.Z.Z.Z.B.Z.Z.B.Z.M.M.M.B.M.M.M.B.B.B.M.M.M.M.M.B.B.B.B.B.B.M.B.M.M.B.Z.Z.M.M.M.M.B.B.M.M.Z.Z.M.M.M.M.M.M.M.Z.M.Z.M.Z.M.M.M.Z.M.B.Z.Z.M.Z.Z.M.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.M.Z.M.Z.B.Z.Z.B.M.B.Z.Z.Z.M.Z.Z.Z.M.Z.B.Z.M.Z.Z.Z.Z.Z.M.Z.M.M.M.M.Z.M.M.Z.M.Z.Z.M.M.Z.Z.Z.Z.M.Z.Z.Z.Z.M.M.M.M.Z.M.Z.M.Z.M.M.M.M.M.M.Z.Z.Z.Z.Z.M.Z.M.M.Z.Z.M.Z.M.Z.Z.M.Z.Z.M.M.Z.Z.M.Z.Z.Z.[ M.M.M.Z.Z.Z.B.B.B.B.B.M.d o o . . , t v T ! V.V.V.m.n.V.V.V.V.V.B.Q Q V.n.V.B.B.Q Q R W W ! Q Q N.Q n.V.B.V.V.n.V.n.n.V.V.B.m.B.V.n.M 8 YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYX s M.B.B.B.B.B.B.Z.B.M.M.M.M.B.M.M.Z.M.M.B.B.B.B.Z.B.Z.M.Z.B.Z.M.M.B.[ B.Z.B.B.M.M.[ M.M.Z.Z.B.M.M.B.M.B.Z.Z.Z.Z.Z.M.M.M.M.B.Z.B.B.Z.B.Z.M.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.M.M.M.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.[ M.M.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.M.Z.Z.Z.Z.B.Z.Z.Z.M.Z.Z.M.M.Z.Z.M.M.M.M.M.M.M.M.Z.M.M.Z.M.B.B.M.Z.M.M.Z.Z.Z.M.M.M.M.Z.Z.M.M.M.Z.M.M.M.M.Z.M.M.Z.Z.M.Z.M.Z.M.Z.Z.M.M.Z.Z.M.M.Z.Z.M.Z.M.Z.M.Z.Z.M.M.M.M.Z.M.M.Z.B.B.B.B.B.U X , r l Z S T ! n.n.m.m.V.V.Q V.N.! W W R Q Q ! W E T T T E ! n.n.n.B.V.n.T F b a > YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYX O W M.Z.M.Z.B.M.B.Z.B.B.M.Z.M.M.M.Z.Z.Z.B.M.B.B.Z.B.B.M.B.Z.Z.M.M.M.Z.B.Z.B.Z.Z.B.Z.Z.M.Z.M.Z.M.M.M.M.M.Z.M.Z.M.M.Z.M.M.M.M.M.M.M.M.M.Z.Z.M.Z.Z.M.M.M.Z.M.Z.M.Z.Z.M.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.M.Z.M.Z.Z.B.Z.Z.Z.Z.Z.Z.Z.M.Z.M.M.M.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.M.Z.M.M.M.M.Z.M.M.Z.M.Z.Z.M.Z.Z.M.B.Z.B.M.Z.M.Z.Z.Z.M.Z.Z.M.M.M.Z.M.Z.Z.M.M.M.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.M.M.Z.M.M.Z.M.Z.M.Z.Z.M.M.Z.M.Z.M.M.B.B.B.B.B.i YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYX x v.v.[ Z.Z.M.Z.B.B.B.B.Z.M.M.M.Z.Z.Z.B.B.B.B.B.Z.B.B.M.M.M.Z.M.Z.B.Z.B.Z.Z.B.M.Z.M.Z.Z.Z.M.M.M.Z.M.M.M.Z.M.M.Z.Z.Z.M.M.M.M.M.B.B.Z.Z.M.M.Z.M.M.M.M.M.Z.M.Z.Z.M.M.Z.M.Z.Z.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.M.M.M.Z.Z.Z.Z.M.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.M.M.Z.Z.M.Z.M.Z.Z.M.Z.M.Z.M.Z.M.M.Z.M.M.M.Z.M.B.M.Z.Z.M.Z.Z.Z.M.Z.Z.M.Z.Z.Z.M.Z.Z.M.M.M.M.Z.M.Z.M.Z.Z.M.Z.Z.Z.Z.M.Z.Z.M.M.M.M.Z.M.M.Z.M.M.Z.M.M.M.Z.M.M.Z.Z.M.Z.B.B.B.B.K X YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYX # v.B.B.Z.B.Z.B.M.M.M.B.B.B.[ M.M.M.B.B.M.B.B.Z.B.B.M.B.B.M.Z.B.B.B.B.B.B.B.Z.Z.Z.Z.Z.Z.M.M.M.M.M.Z.Z.M.M.M.M.M.M.Z.M.M.M.B.Z.Z.M.M.M.Z.M.Z.Z.Z.M.M.Z.Z.Z.Z.Z.M.M.M.M.Z.M.M.Z.Z.Z.M.M.Z.M.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.Z.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.B.M.Z.M.Z.Z.M.M.M.M.Z.Z.Z.Z.Z.M.M.M.M.M.Z.M.Z.M.M.M.M.M.Z.M.Z.M.Z.M.Z.Z.M.M.Z.Z.Z.M.Z.M.M.M.B.M.M.M.M.M.M.Z.M.M.Z.M.Z.M.Z.Z.M.M.M.M.Z.Z.M.M.Z.Z.Z.Z.M.M.M.M.M.M.M.M.m.B.B.> YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYX u B.Z.Z.B.B.B.B.M.M.B.B.B.M.B.M.B.B.M.B.B.Z.B.B.M.[ M.M.B.B.B.B.Z.Z.Z.B.B.Z.B.Z.Z.Z.[ Z.Z.M.B.Z.M.Z.M.M.M.M.M.Z.M.Z.B.B.Z.Z.Z.M.M.M.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.M.Z.M.Z.Z.Z.M.M.M.M.M.Z.Z.M.M.Z.M.M.M.Z.Z.Z.Z.M.Z.M.M.Z.M.Z.Z.M.Z.Z.Z.Z.Z.M.B.Z.Z.M.Z.Z.M.Z.M.Z.Z.M.Z.M.Z.Z.M.M.M.M.M.Z.M.M.Z.M.M.Z.M.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.M.Z.M.Z.M.Z.M.M.B.B.[ M.M.Z.Z.[ M.M.Z.Z.M.Z.M.M.M.M.M.M.M.M.M.Z.M.M.Z.Z.M.M.M.M.M.M.M.M.B.B.S YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYX . o U Z.Z.B.M.B.Z.B.M.M.M.M.Z.B.B.M.M.M.Z.[ B.Z.B.B.M.M.B.M.M.M.B.M.B.B.B.M.B.M.M.M.B.Z.M.Z.Z.Z.Z.Z.M.M.M.M.Z.M.M.M.M.M.B.M.B.Z.M.M.Z.M.M.[ Z.M.Z.M.M.M.M.M.M.M.M.M.Z.Z.M.Z.Z.M.Z.Z.Z.M.Z.M.Z.M.Z.M.Z.Z.Z.Z.M.M.M.M.Z.M.M.Z.M.M.M.Z.M.Z.M.Z.Z.M.M.B.M.M.Z.M.M.M.Z.Z.M.Z.Z.M.Z.M.Z.Z.M.M.Z.M.M.Z.M.M.M.M.M.Z.M.Z.Z.M.Z.M.M.M.M.Z.M.Z.M.Z.Z.M.M.M.M.M.Z.Z.M.M.M.Z.Z.M.Z.Z.Z.Z.Z.M.M.M.Z.M.M.M.Z.M.M.Z.Z.Z.M.M.M.M.Z.M.Z.B.B.v.O YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYX : B.B.B.A.B.A.B.M.M.M.M.M.Z.M.M.M.B.M.B.Z.B.Z.B.Z.Z.B.B.M.B.M.M.M.B.M.M.M.M.M.M.B.B.Z.M.Z.M.Z.M.Z.M.M.M.M.M.M.M.Z.M.Z.Z.M.Z.M.M.M.Z.B.Z.M.M.M.M.Z.Z.M.M.M.M.M.Z.Z.Z.Z.Z.Z.Z.M.M.Z.Z.Z.Z.M.M.Z.Z.M.Z.Z.M.Z.M.M.M.Z.B.M.B.B.B.B.B.Z.Z.Z.Z.M.M.M.Z.Z.M.Z.Z.[ B.B.B.Z.B.Z.B.Z.B.Z.B.B.Z.M.M.Z.M.M.Z.M.M.Z.M.M.Z.Z.Z.Z.M.M.M.M.Z.Z.M.Z.Z.M.M.M.M.Z.Z.M.B.B.M.M.Z.B.B.B.Z.B.B.B.M.B.B.M.M.M.M.Z.Z.Z.M.Z.Z.Z.Z.[ M.Z.M.Z.B.M.l YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYX & ! B.M.Z.B.B.B.B.M.M.M.M.B.B.B.M.M.M.M.B.B.B.M.Z.B.M.Z.B.M.M.B.M.M.Z.M.B.Z.Z.Z.Z.Z.M.Z.Z.M.M.M.Z.M.M.M.M.M.M.M.M.Z.Z.Z.M.Z.M.M.M.B.B.M.M.M.M.M.M.M.M.Z.M.Z.M.Z.Z.Z.Z.M.M.M.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.M.B.M.M.B.Z.Z.Z.Z.Z.M.M.M.M.M.M.M.M.M.Z.Z.Z.Z.B.Z.M.M.B.M.B.B.B.Z.Z.M.M.M.M.M.M.M.M.M.M.Z.M.M.M.Z.M.M.M.Z.Z.M.Z.Z.Z.M.Z.M.Z.M.Z.M.B.B.B.Z.M.[ B.B.B.B.B.M.M.M.M.M.Z.M.M.Z.M.Z.M.Z.M.Z.Z.Z.Z.M.M.Z.B.K . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYX : v.B.M.B.B.M.B.B.M.B.B.M.B.M.M.M.M.M.B.Z.B.B.M.B.M.B.B.Z.B.M.M.M.B.B.M.M.M.Z.Z.B.Z.B.Z.M.Z.M.Z.Z.Z.Z.M.M.M.M.Z.Z.M.Z.M.Z.Z.M.M.M.M.M.B.M.B.Z.M.B.M.M.[ Z.M.Z.M.Z.Z.Z.Z.M.Z.M.M.Z.Z.Z.[ Z.M.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.M.M.M.M.M.M.M.Z.M.M.Z.Z.M.M.M.M.M.Z.M.B.B.B.B.Z.B.M.B.B.M.M.B.Z.B.M.Z.Z.M.B.M.M.M.M.Z.M.M.Z.M.M.M.M.M.Z.M.M.Z.M.Z.Z.Z.M.M.M.M.Z.M.B.B.M.Z.Z.M.Z.Z.Z.[ B.M.B.B.Z.M.M.Z.Z.M.M.M.M.M.Z.Z.Z.M.M.Z.M.Z.B.: YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYX : v.M.M.B.M.B.B.B.B.Z.B.Z.Z.M.M.B.B.M.Z.M.M.M.B.M.M.M.B.M.Z.M.M.M.Z.M.[ M.M.Z.B.Z.B.Z.M.Z.Z.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.B.M.M.M.M.M.M.M.M.Z.Z.M.Z.Z.Z.Z.Z.Z.M.M.Z.Z.M.Z.Z.M.M.Z.Z.M.Z.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.M.M.B.M.Z.[ M.M.Z.M.Z.B.B.B.B.M.Z.M.M.[ B.M.M.B.B.Z.M.Z.M.M.M.M.B.M.M.Z.Z.M.M.M.M.M.M.Z.M.Z.M.Z.M.Z.Z.M.B.Z.M.M.Z.M.Z.M.Z.B.Z.M.Z.B.Z.B.M.B.B.M.M.M.M.Z.M.Z.M.M.Z.M.Z.Z.M.M.M.M.Z.a YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYX & J M.B.M.B.B.Z.B.B.Z.B.B.Z.M.M.B.M.B.B.B.M.M.M.M.M.B.B.M.M.Z.M.Z.M.M.M.M.B.B.Z.B.Z.M.M.Z.Z.Z.M.Z.M.Z.M.M.M.Z.Z.Z.M.Z.Z.Z.M.Z.M.M.M.M.B.B.M.M.M.M.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.M.Z.Z.Z.M.Z.M.M.Z.Z.Z.M.Z.B.M.M.[ B.B.Z.M.M.Z.B.M.M.M.Z.M.B.B.B.B.M.M.Z.M.B.M.M.M.B.B.B.B.M.Z.Z.Z.Z.B.B.M.M.M.Z.Z.Z.M.M.M.M.M.Z.M.M.M.Z.M.M.M.M.M.M.M.Z.M.Z.M.M.Z.Z.B.Z.B.B.B.M.M.M.Z.M.M.M.M.M.Z.Z.M.M.M.B.Z.Z.B.Z.M.M.V YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYX O c M.M.B.M.B.Z.M.M.B.B.B.B.M.M.M.M.B.M.B.B.M.M.M.M.M.M.M.M.Z.M.M.M.W M.M.M.B.B.B.M.Z.Z.M.M.Z.Z.Z.Z.Z.M.Z.Z.Z.M.Z.M.M.M.B.M.Z.M.M.M.B.M.M.Z.M.Z.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.M.Z.M.Z.M.M.M.Z.M.Z.Z.Z.M.M.Z.M.Z.Z.Z.B.M.M.B.M.B.M.M.B.B.M.B.M.M.M.B.M.B.M.M.M.Z.Z.M.M.M.M.M.B.Z.M.M.Z.M.Z.Z.Z.Z.Z.Z.Z.M.Z.M.M.M.Z.Z.M.Z.Z.M.M.M.Z.M.M.M.Z.Z.M.M.Z.M.M.M.B.M.B.B.M.M.M.B.B.M.Z.Z.M.Z.M.Z.Z.Z.M.M.B.B.Z.B.Z.M.U * YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYX . > F M.M.[ Z.Z.B.B.B.B.B.M.M.M.M.B.M.B.B.M.M.M.M.M.M.M.B.B.M.M.M.W M.M.M.M.B.Z.B.Z.Z.Z.Z.Z.Z.M.Z.M.Z.M.Z.Z.Z.M.M.M.M.Z.Z.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.Z.Z.M.M.Z.Z.M.M.Z.Z.M.M.Z.M.Z.M.Z.Z.Z.M.M.M.Z.Z.Z.Z.Z.Z.M.Z.M.B.B.B.M.M.M.Z.Z.Z.B.M.B.B.Z.M.Z.B.B.M.M.M.M.B.B.B.B.[ B.B.B.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.M.M.M.Z.M.Z.M.M.M.M.Z.Z.Z.M.M.M.M.Z.Z.M.M.M.Z.M.M.Z.B.M.Z.M.B.M.Z.B.Z.Z.Z.M.Z.M.Z.Z.M.Z.B.Z.Z.Z.Z.B.e + YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYX . 6 G B.B.B.B.B.M.B.M.M.M.B.M.M.M.M.B.[ B.B.Z.B.Z.M.B.Z.B.B.Z.M.W M.M.M.B.M.B.Z.Z.M.M.Z.Z.Z.Z.M.M.Z.M.M.Z.M.Z.M.M.Z.M.Z.Z.M.M.M.M.M.Z.M.M.Z.Z.M.Z.M.M.Z.Z.M.M.Z.M.Z.M.Z.Z.M.Z.M.M.Z.Z.M.M.M.Z.Z.Z.Z.Z.M.Z.M.Z.Z.B.Z.B.Z.Z.M.M.M.M.M.M.M.M.M.B.M.B.M.Z.M.M.M.Z.Z.M.B.M.B.B.B.B.B.Z.M.M.Z.M.M.Z.Z.M.Z.M.M.Z.M.Z.M.M.Z.M.M.M.Z.M.M.M.Z.M.Z.M.Z.Z.Z.M.M.Z.M.Z.B.M.Z.M.M.Z.M.M.B.M.M.M.Z.Z.Z.M.Z.Z.Z.Z.B.B.Z.Z.U * o YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYX . , L m.B.M.M.M.M.M.M.B.M.M.M.M.M.M.M.B.B.M.Z.Z.M.B.B.Z.Z.M.Z.W M.M.M.M.B.B.B.Z.Z.Z.Z.Z.Z.Z.M.Z.Z.M.M.Z.M.Z.M.Z.Z.M.Z.Z.M.M.M.M.M.Z.M.M.Z.M.M.M.Z.Z.Z.Z.Z.Z.M.M.Z.Z.Z.Z.Z.Z.Z.M.M.M.M.Z.M.Z.Z.Z.M.M.Z.M.Z.M.Z.Z.Z.M.Z.M.M.M.M.M.M.M.M.B.M.B.M.M.B.B.B.M.M.Z.M.B.M.M.B.M.M.M.B.M.Z.M.Z.M.Z.M.M.Z.Z.M.Z.M.Z.M.Z.Z.Z.M.Z.M.M.Z.M.Z.M.Z.M.M.Z.Z.M.Z.M.M.B.M.M.B.B.B.M.M.M.Z.Z.Z.B.M.M.M.A.B.B.B.B.B.B.B.Z.B.C X . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYX O B B.M.B.B.M.M.M.M.M.M.M.M.M.B.M.M.M.M.Z.B.M.M.B.B.B.B.B.M.W M.M.M.M.Z.Z.Z.M.M.Z.M.Z.M.Z.Z.B.Z.M.M.M.M.Z.M.Z.Z.Z.Z.M.Z.M.Z.[ M.M.M.M.M.M.M.M.M.Z.M.Z.Z.Z.M.Z.M.Z.Z.Z.M.M.M.M.M.M.M.Z.M.M.M.Z.Z.Z.M.M.[ M.M.Z.Z.Z.Z.Z.M.M.M.B.M.M.M.M.M.Z.M.B.M.Z.Z.M.M.M.B.M.B.M.M.B.M.Z.M.M.M.M.M.M.M.Z.M.Z.Z.M.Z.Z.M.Z.M.M.M.M.M.M.M.M.M.M.M.Z.Z.M.M.M.M.B.B.B.Z.M.M.B.M.B.B.B.B.B.B.B.B.B.M.M.M.M.B.B.B.B.B.B.M.g YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYX O x v.M.M.B.M.M.M.M.M.M.M.M.B.B.B.M.M.M.M.[ Z.Z.Z.B.Z.M.W M.M.M.Z.M.B.M.M.Z.Z.M.M.Z.M.Z.B.Z.Z.M.M.M.M.M.M.Z.M.Z.Z.Z.Z.M.M.M.M.M.M.M.M.M.M.M.M.Z.Z.Z.M.Z.Z.M.M.M.M.Z.Z.M.M.Z.M.Z.Z.M.M.Z.Z.Z.M.M.M.M.M.Z.Z.M.Z.B.Z.Z.M.M.B.M.M.B.M.M.M.M.B.M.Z.M.B.M.M.M.M.M.M.B.M.M.M.M.M.M.M.Z.M.Z.Z.B.Z.Z.Z.M.Z.M.M.M.B.M.Z.[ M.M.M.M.Z.M.Z.Z.Z.Z.Z.M.M.[ Z.Z.Z.M.Z.Z.M.M.M.M.Z.B.B.B.B.S.M.M.B.M.B.B.B.B.Z.B.F & YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYX . x Q M.M.B.B.B.M.B.B.B.M.M.M.M.Z.Z.M.M.Z.B.Z.M.Z.B.M.W M.M.M.M.M.M.M.Z.M.Z.Z.Z.Z.Z.Z.Z.M.Z.B.M.M.M.M.M.Z.M.Z.Z.Z.Z.Z.Z.M.M.M.M.M.Z.M.Z.M.M.M.M.M.M.Z.Z.Z.Z.Z.Z.Z.M.M.M.M.Z.M.M.Z.Z.M.M.M.Z.M.M.M.M.M.M.Z.M.Z.M.M.M.M.M.B.M.B.B.Z.M.Z.M.B.M.M.B.B.Z.[ B.M.M.M.B.M.B.M.Z.M.M.M.M.M.M.B.Z.M.Z.Z.Z.Z.Z.M.Z.Z.B.Z.M.M.M.M.Z.Z.M.Z.Z.M.Z.M.M.B.Z.Z.Z.Z.Z.B.B.B.B.K.B.B.Z.M.B.Z.B.M.B.B.B.B.B.B.B.[ 9 . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYX c U B.Z.Z.Z.Z.Z.Z.B.M.M.M.M.Z.Z.M.M.M.M.Z.Z.Z.M.M.M.M.M.M.M.M.M.M.M.M.M.Z.Z.Z.M.Z.Z.M.Z.M.M.M.M.Z.Z.M.Z.M.Z.Z.Z.M.M.M.M.M.Z.M.Z.Z.Z.M.M.M.M.M.M.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.M.M.M.M.Z.M.M.M.M.Z.Z.M.M.M.M.Z.Z.M.M.M.W M.M.Z.M.M.M.M.Z.M.M.M.Z.M.M.B.M.M.M.B.M.M.B.M.M.M.M.M.M.M.M.M.B.Z.M.Z.Z.M.Z.M.Z.Z.Z.M.M.Z.Z.Z.Z.Z.Z.M.Z.M.Z.Z.Z.Z.M.Z.M.Z.Z.B.Z.M.B.B.B.B.Z.Z.Z.B.B.B.B.B.v.M.B.B.B.B.M.l X YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX w I M.B.M.B.[ Z.B.B.M.B.M.M.Z.Z.Z.Z.Z.M.M.M.M.M.M.M.M.W M.M.M.M.M.M.Z.M.Z.M.Z.Z.Z.Z.Z.M.M.Z.M.Z.Z.Z.M.M.Z.M.Z.M.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.M.Z.Z.M.M.Z.M.M.M.M.Z.M.M.Z.Z.M.M.M.M.M.Z.M.M.Z.M.M.M.M.M.Z.M.M.M.M.M.M.M.Z.Z.M.Z.M.B.M.M.B.B.M.B.M.M.B.M.B.M.M.M.M.M.M.M.M.M.M.M.B.Z.M.Z.M.Z.Z.M.Z.Z.Z.Z.Z.M.M.Z.M.Z.Z.Z.Z.M.Z.Z.M.M.M.Z.Z.B.Z.B.Z.B.Z.B.Z.B.B.B.B.B.B.B.B.v.M.B.M.M.M.Z @ YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX . e U M.M.Z.M.Z.M.Z.B.B.Z.Z.Z.Z.Z.Z.M.Z.Z.M.M.M.B.M.B.B.B.Z.B.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.B.Z.Z.Z.M.Z.Z.Z.M.M.M.Z.M.M.M.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.M.M.M.Z.Z.Z.Z.Z.Z.Z.[ M.M.M.Z.Z.M.Z.M.M.Z.M.M.M.Z.M.Z.Z.M.Z.Z.B.B.B.B.M.W M.M.M.Z.B.B.Z.B.M.B.B.M.M.B.M.M.M.M.M.B.M.M.M.M.M.M.M.M.M.M.M.B.Z.Z.M.Z.M.Z.M.Z.B.Z.Z.B.M.Z.M.Z.M.M.M.M.Z.Z.M.M.M.Z.M.Z.Z.B.B.B.B.Z.M.Z.Z.B.Z.B.B.B.B.B.v.M.M.B.M.Z @ YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX o X * U W M.M.M.Z.M.Z.M.M.Z.M.Z.M.Z.Z.Z.M.M.Z.M.Z.M.B.B.M.Z.M.M.M.Z.M.Z.Z.M.Z.M.M.Z.M.Z.Z.M.Z.M.M.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.Z.M.Z.M.Z.M.M.M.Z.M.Z.M.Z.Z.Z.Z.Z.Z.M.M.M.M.Z.M.M.M.Z.M.M.Z.Z.Z.M.M.M.Z.M.B.B.B.B.B.M.M.M.M.[ M.M.Z.[ B.B.M.M.Z.M.M.M.B.M.B.M.M.M.M.M.M.M.[ M.M.M.M.M.B.M.Z.Z.Z.Z.Z.Z.Z.Z.M.M.Z.M.Z.Z.Z.Z.M.M.M.M.Z.Z.Z.Z.Z.Z.Z.M.B.Z.B.M.M.B.B.Z.Z.Z.B.B.B.Z.M.M.M.M.m.x $ YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX J W M.B.B.M.B.B.B.B.Z.B.B.B.Z.B.M.B.B.B.B.M.M.M.B.Z.B.[ M.Z.Z.Z.M.Z.M.Z.B.Z.B.M.Z.M.B.B.M.B.Z.Z.B.Z.Z.B.Z.Z.Z.Z.D.Z.Z.B.M.Z.Z.M.M.M.Z.Z.Z.Z.M.Z.Z.Z.M.M.M.Z.M.M.M.M.M.Z.M.M.M.M.M.M.M.B.M.Z.Z.Z.B.M.Z.Z.M.M.Z.M.M.B.Z.B.M.Z.M.M.B.M.M.M.M.B.M.M.M.B.B.M.M.M.M.M.M.M.M.B.B.Z.Z.Z.Z.Z.Z.Z.Z.M.M.B.M.B.Z.Z.B.M.Z.M.B.B.Z.Z.M.Z.B.M.Z.M.Z.M.M.M.M.Z.Z.Z.Z.M.B.B.B.B.B.M.b.d O YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX C M.M.B.M.B.B.B.B.B.B.B.B.M.B.M.B.M.B.B.[ M.B.B.B.B.M.M.M.M.M.Z.M.Z.B.B.B.B.B.M.M.Z.Z.B.Z.B.M.M.M.M.Z.Z.Z.B.Z.Z.Z.[ Z.Z.M.M.M.Z.M.M.M.Z.Z.Z.Z.Z.Z.M.M.M.M.M.Z.Z.M.M.Z.M.M.M.M.B.B.B.Z.Z.Z.Z.M.M.Z.[ Z.Z.M.M.Z.M.Z.M.M.M.M.B.M.M.Z.B.M.M.B.M.B.B.M.M.M.B.M.M.M.M.[ B.M.B.B.B.M.M.Z.Z.Z.B.B.Z.Z.B.M.M.B.K.B.B.B.B.B.M.B.M.M.M.M.M.M.M.Z.Z.Z.M.Z.M.Z.Z.M.B.B.B.B.M.K < YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX A B.B.M.B.M.M.M.B.B.M.M.B.B.Z.B.B.B.B.M.M.M.Z.Z.Z.B.M.Z.Z.Z.Z.M.Z.B.M.Z.M.B.Z.B.B.M.Z.Z.Z.M.M.Z.M.Z.M.M.Z.Z.B.B.B.B.Z.Z.M.Z.Z.M.M.Z.Z.M.M.Z.M.Z.M.Z.Z.M.Z.M.M.Z.M.M.Z.M.M.M.B.B.B.B.B.M.B.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.M.M.M.Z.M.M.B.M.M.M.M.M.M.[ B.M.M.M.M.M.M.M.M.M.B.M.Z.Z.Z.Z.Z.Z.M.B.Z.Z.B.Z.M.M.M.M.B.B.B.M.B.B.M.M.M.Z.M.M.Z.Z.Z.B.M.M.M.M.Z.Z.Z.B.B.B.b.k + YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX F M.Z.M.M.M.M.B.B.M.B.B.B.Z.B.Z.B.Z.B.B.M.[ M.Z.B.M.Z.Z.M.M.Z.M.Z.M.Z.Z.Z.M.Z.Z.M.B.M.Z.M.M.M.Z.Z.B.B.M.B.B.B.Z.B.M.M.Z.M.M.M.Z.Z.Z.M.M.M.Z.Z.M.M.M.Z.M.M.M.M.Z.M.M.M.[ M.M.B.M.M.B.B.B.B.Z.M.M.Z.M.Z.M.M.B.B.M.Z.Z.M.M.M.M.M.M.B.M.B.B.M.B.M.M.B.B.B.M.M.M.B.B.B.B.M.Z.M.Z.M.B.Z.B.Z.B.B.Z.M.M.M.B.M.B.B.B.B.M.M.B.B.B.B.M.Z.B.M.Z.B.Z.M.Z.M.Z.Z.B.B.l O . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX A B.B.M.M.M.B.B.M.B.B.B.Z.B.B.Z.B.B.B.M.B.Z.B.B.Z.M.Z.M.M.M.Z.Z.Z.M.Z.B.Z.Z.Z.Z.[ M.M.M.Z.Z.B.Z.Z.Z.M.M.B.B.Z.B.M.Z.Z.M.M.M.Z.Z.Z.M.M.Z.Z.Z.Z.M.Z.M.Z.M.M.Z.Z.Z.M.M.M.M.M.B.M.M.M.M.Z.M.Z.M.Z.M.M.Z.M.Z.M.M.M.M.M.B.Z.[ B.B.M.M.M.B.M.B.B.M.M.M.M.M.M.B.M.M.M.M.M.M.M.Z.Z.Z.M.M.B.B.Z.M.B.M.M.M.B.B.B.B.B.B.B.B.B.B.M.Z.M.Z.Z.Z.Z.Z.B.Z.Z.M.Z.Z.Z.E $ YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX . x B.M.M.B.B.B.Q M.M.B.B.B.Z.B.B.B.Z.B.B.B.B.B.Z.Z.M.M.M.M.Z.M.Z.Z.Z.Z.M.Z.M.M.M.M.M.M.M.Z.M.Z.B.Z.Z.B.B.B.Z.Z.Z.Z.M.M.Z.M.Z.Z.Z.M.Z.Z.M.Z.M.Z.M.Z.Z.M.[ Z.M.Z.B.M.M.M.M.M.B.M.Z.M.B.Z.B.Z.Z.Z.Z.M.Z.M.M.Z.Z.M.M.M.B.Z.M.M.B.M.B.M.B.M.M.M.B.M.M.B.M.B.M.M.M.M.M.M.M.Z.Z.M.Z.Z.B.Z.Z.Z.B.B.M.Z.B.B.B.Z.M.M.B.Z.B.Z.Z.Z.M.M.M.Z.M.Z.M.Z.Z.Z.Z.Z.Z.l @ YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX . A M.M.B.M.[ M.B.B.B.B.B.M.Z.Z.B.Z.B.B.B.B.Z.Z.M.M.M.M.Z.Z.Z.Z.M.M.Z.M.Z.M.M.M.M.M.M.B.M.M.Z.B.B.Z.Z.B.B.B.B.Z.Z.[ M.M.M.M.Z.Z.Z.Z.Z.Z.Z.M.M.Z.Z.M.M.B.Z.Z.M.B.M.B.M.M.M.M.M.M.B.Z.B.Z.Z.Z.Z.Z.Z.M.Z.Z.M.M.M.Z.M.M.M.M.M.M.B.B.B.M.B.M.B.M.B.M.M.Z.M.B.M.M.B.B.M.M.Z.B.B.Z.Z.Z.Z.M.Z.M.M.M.Z.B.B.B.Z.M.B.B.B.M.Z.Z.M.M.M.B.Z.B.B.B.B.B.Z.M.Z.K : . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX O F M.M.v.W [ M.M.B.B.B.B.B.B.Z.B.Z.Z.B.Z.B.B.Z.M.Z.Z.Z.[ M.M.Z.M.Z.Z.B.M.W B.M.M.B.M.B.M.[ B.B.B.Z.B.B.Z.Z.Z.M.M.M.Z.M.Z.Z.Z.M.Z.Z.Z.Z.Z.M.Z.M.M.M.M.B.M.Z.B.M.M.M.M.M.B.B.M.Z.M.B.Z.B.M.Z.Z.Z.Z.M.M.Z.Z.M.M.M.M.M.Z.M.M.Z.B.B.M.M.B.M.B.Z.Z.Z.M.M.M.B.B.M.Z.B.B.Z.Z.Z.M.Z.[ M.M.M.M.Z.M.M.B.B.Z.B.M.M.M.M.Z.B.M.Z.Z.M.[ Z.M.M.B.M.B.B.[ G 4 . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX : L N.W v.v.B.M.B.B.Z.Z.Z.B.B.B.Z.B.B.B.Z.Z.Z.M.Z.M.Z.M.Z.B.Z.B.Z.B.M.M.M.M.M.M.M.M.M.M.M.B.B.Z.Z.B.B.Z.B.Z.M.M.M.Z.M.M.Z.Z.Z.Z.M.Z.Z.M.M.M.M.M.M.M.M.Z.M.M.B.B.Z.M.M.M.M.M.Z.Z.B.Z.M.M.B.B.Z.M.Z.M.Z.Z.M.M.M.M.M.B.Z.M.B.M.M.B.M.B.M.B.[ M.M.M.M.B.B.B.M.Z.B.Z.B.Z.B.M.M.B.M.B.M.B.M.Z.M.Z.B.Z.Z.[ M.M.B.Z.B.B.B.B.M.B.M.M.Z.B.B.M.J l & YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX : A W v.M.B.B.B.B.B.B.B.Z.Z.Z.Z.M.B.B.B.M.M.Z.Z.Z.M.Z.M.B.Z.Z.B.M.B.M.M.W M.M.M.M.M.M.M.B.[ B.Z.Z.Z.Z.B.M.M.M.Z.M.M.Z.M.Z.Z.Z.Z.M.Z.Z.M.M.M.M.Z.Z.Z.Z.Z.Z.Z.M.Z.M.M.M.M.M.B.B.Z.Z.M.M.B.B.M.B.M.M.M.M.B.Z.M.Z.M.M.M.M.M.B.M.B.M.B.M.M.B.Z.M.Z.M.M.M.B.B.M.Z.B.Z.Z.B.Z.M.B.M.M.M.M.M.M.Z.B.Z.B.Z.Z.Z.B.M.B.B.Z.M.B.B.B.M.B.M.W x 9 % . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX $ a U M.v.B.M.B.B.Z.Z.B.Z.B.B.M.B.B.B.Z.B.Z.M.Z.Z.Z.M.M.B.Z.B.Z.Z.Z.Z.M.M.M.B.M.M.M.M.B.B.B.Z.Z.Z.Z.B.M.M.M.M.M.Z.Z.M.Z.M.Z.Z.Z.M.Z.M.M.M.M.M.Z.M.Z.Z.B.Z.M.B.Z.M.M.M.B.M.B.B.Z.B.B.Z.M.B.M.B.Z.M.B.M.B.M.M.M.M.B.M.B.M.M.M.B.B.M.M.B.M.Z.M.M.M.M.M.B.B.M.M.Z.B.Z.B.B.M.M.M.B.M.M.M.Z.B.Z.B.Z.B.B.Z.B.B.Z.Z.B.Z.B.B.M.M.5 o YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX X & h W M.B.B.Z.Z.B.B.B.Z.B.M.[ B.Z.Z.M.M.Z.M.M.Z.M.B.M.M.B.Z.M.M.M.Z.M.B.Z.B.M.M.B.M.B.Z.Z.Z.B.Z.B.Z.Z.M.M.Z.M.M.Z.M.M.M.Z.Z.M.Z.M.M.M.M.Z.M.Z.M.Z.Z.B.Z.B.Z.M.M.M.M.B.M.B.B.B.B.[ B.M.M.Z.M.M.B.B.M.M.B.M.M.M.B.M.M.B.B.M.B.M.B.M.B.M.M.B.Z.M.B.M.B.M.B.Z.Z.B.B.[ M.B.M.M.M.M.Z.M.B.B.B.B.B.B.Z.B.B.Z.B.Z.B.B.B.D ; + . o YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX A Q M.B.B.B.B.B.Z.B.Z.Z.B.B.M.Z.M.Z.Z.Z.M.Z.B.[ M.M.M.B.Z.Z.Z.M.M.M.M.M.M.M.B.B.B.B.B.Z.B.Z.Z.M.M.M.M.B.M.M.Z.Z.M.Z.Z.Z.Z.M.M.M.M.M.M.M.Z.M.Z.M.M.Z.Z.M.M.B.M.M.Z.B.Z.M.M.B.M.B.M.B.B.B.M.[ B.B.M.M.B.M.M.B.Z.M.Z.M.M.Z.B.B.B.M.M.B.M.Z.M.B.M.Z.Z.Z.B.B.B.M.B.M.B.M.M.Z.M.Z.Z.B.B.B.Z.Z.B.Z.B.B.B.Z.Z.B.s @ YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX w U Q B.B.M.M.Z.Z.Z.B.B.B.Z.M.Z.M.M.M.M.M.B.M.M.M.B.B.B.Z.M.M.B.M.M.M.M.M.M.B.B.Z.Z.B.Z.Z.Z.M.M.M.M.M.Z.M.M.Z.M.Z.Z.Z.Z.Z.Z.M.M.Z.Z.M.M.Z.Z.Z.Z.Z.M.M.M.B.B.M.M.B.M.Z.M.M.B.M.M.B.M.M.B.B.B.M.Z.M.B.B.Z.[ Z.M.M.M.M.M.B.B.B.M.Z.M.M.M.B.M.M.B.Z.M.B.B.M.M.M.M.M.M.M.M.Z.M.B.Z.Z.B.B.M.M.M.M.B.B.B.m.2 . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX o V U M.Z.Z.U M.B.Z.B.B.M.Z.Z.Z.M.Z.Z.Z.B.M.M.B.B.B.M.M.M.B.M.B.M.M.M.M.M.M.B.B.B.M.Z.Z.Z.M.Z.Z.Z.Z.M.M.M.Z.M.M.M.Z.M.Z.Z.M.[ M.M.Z.M.Z.M.Z.Z.M.M.M.M.Z.B.M.M.M.M.B.Z.B.B.M.Z.M.M.B.Z.M.B.M.B.B.M.B.M.B.M.M.Z.Z.B.B.M.M.M.M.M.M.[ M.M.M.B.B.B.Z.B.B.M.B.B.B.B.M.Z.M.M.M.B.B.B.B.Z.v.M.M.M.B.M.B.1 YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX w I U D.Z.Z.W v.B.M.Z.M.M.Z.Z.Z.Z.M.Z.B.B.Z.B.M.Z.M.Z.Z.Z.Z.B.M.M.M.M.Z.B.Z.B.M.M.Z.Z.M.M.M.Z.M.M.M.M.Z.Z.M.M.M.M.M.M.M.M.B.M.Z.M.Z.Z.M.Z.M.Z.Z.M.Z.Z.Z.M.M.Z.M.[ B.B.Z.M.B.Z.M.M.M.M.B.B.M.B.B.B.B.Z.M.M.M.M.M.B.M.B.M.B.B.M.B.B.B.M.B.Z.Z.Z.[ B.B.M.B.M.M.M.M.M.M.B.B.B.B.B.M.v.M.B.B.B.s YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX x R B.Z.B.M.v.B.M.Z.M.Z.B.B.Z.B.B.B.B.B.B.B.Z.B.B.B.B.B.B.B.B.M.B.Z.B.Z.B.M.Z.Z.Z.Z.M.Z.Z.M.Z.M.Z.M.Z.M.M.M.M.M.M.M.M.B.M.M.M.M.Z.Z.Z.Z.M.M.Z.Z.Z.B.M.M.M.M.M.B.B.B.M.B.Z.M.Z.Z.B.M.M.K.B.M.Z.M.B.B.B.M.M.M.M.M.Z.Z.Z.Z.B.B.Z.Z.B.Z.Z.M.M.M.B.B.M.B.M.[ M.M.M.Z.B.B.M.M.M.M.B.B.B.B.M YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX > C M.M.B.M.B.M.Z.Z.Z.B.M.B.Z.Z.B.B.Z.B.B.B.M.M.M.M.B.B.B.M.B.B.B.B.B.Z.B.Z.M.Z.M.Z.M.Z.Z.M.M.Z.Z.Z.M.Z.Z.Z.M.Z.M.M.M.Z.M.M.Z.M.Z.Z.Z.Z.Z.Z.Z.B.M.M.M.B.M.M.M.M.Z.B.B.M.M.M.M.B.B.M.B.B.Z.M.B.[ M.M.M.M.B.B.M.Z.M.Z.B.Z.B.B.B.B.B.Z.M.M.M.M.M.B.Z.Z.B.M.Z.M.Z.B.B.M.B.B.B.Z.B.Z.Y YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX t I M.B.Z.Z.Z.M.Z.M.M.B.B.B.B.B.B.M.M.[ M.B.M.B.M.M.M.M.B.B.B.Z.B.B.Z.Z.Z.Z.M.M.Z.M.M.M.M.M.Z.Z.Z.Z.B.Z.Z.Z.Z.M.M.M.M.M.Z.Z.Z.Z.M.Z.M.M.Z.B.M.M.M.M.M.B.M.M.Z.M.Z.M.Z.M.M.B.B.M.B.B.M.B.M.M.B.M.B.B.B.B.B.Z.M.M.B.B.Z.Z.B.B.B.Z.B.B.M.B.B.B.B.Z.Z.B.M.M.M.B.B.B.B.B.M.Z.Z.F YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX c W B.Z.Z.Z.Z.B.M.M.B.B.B.B.B.M.M.M.M.M.M.M.M.B.M.M.B.Z.Z.B.Z.B.Z.Z.Z.Z.M.M.Z.Z.M.Z.M.Z.M.Z.Z.M.Z.Z.Z.Z.M.M.M.Z.M.M.B.Z.M.Z.Z.Z.Z.Z.Z.B.B.M.M.M.M.M.Z.Z.M.B.M.M.Z.Z.Z.M.B.B.B.M.B.M.M.B.M.B.M.M.B.B.B.B.M.B.M.M.M.M.M.B.B.[ Z.Z.B.M.B.Z.M.M.Z.Z.M.Z.B.M.B.B.B.B.B.Z.L . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX v [ M.Z.B.Z.B.Z.B.B.Z.B.B.B.M.M.M.[ M.v.M.M.M.M.B.B.B.Z.Z.B.Z.Z.B.Z.M.M.Z.M.M.M.M.Z.M.Z.Z.Z.Z.B.M.M.M.M.M.M.B.M.B.M.M.Z.M.M.Z.Z.Z.B.Z.M.[ M.M.M.M.M.M.Z.M.B.Z.Z.M.B.M.M.M.M.M.B.M.M.M.M.B.M.B.B.B.M.M.M.M.M.Z.M.Z.B.Z.B.Z.B.M.M.Z.B.B.B.B.A.B.B.Z.B.Z.B.Z.B.Z.M . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX * V v.M.Z.Z.B.V.Z.B.B.Z.Z.B.B.M.B.B.B.M.M.B.B.B.B.Z.B.Z.Z.Z.Z.M.M.Z.M.M.M.M.Z.Z.M.Z.Z.M.Z.Z.Z.Z.Z.M.M.M.B.B.Z.Z.M.M.Z.Z.Z.Z.Z.M.Z.Z.M.M.M.M.M.M.M.M.M.M.M.Z.B.Z.B.B.B.B.B.B.Z.M.M.M.B.M.B.B.Z.B.M.B.B.M.M.Z.B.Z.M.M.B.Z.M.M.M.Z.Z.B.Z.Z.B.Z.B.B.Z.B.B.Z.Z.k YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX + . X V v.B.Z.Z.B.Z.Z.B.M.B.Z.Z.B.B.B.B.B.Z.B.B.B.Z.B.B.B.Z.Z.Z.Z.Z.M.M.M.M.M.Z.Z.M.Z.M.M.M.Z.M.Z.Z.B.M.B.Z.Z.B.Z.M.M.Z.M.Z.Z.Z.Z.Z.Z.M.M.Z.M.M.Z.M.M.M.Z.Z.M.Z.B.B.M.B.M.Z.Z.B.B.B.B.B.B.B.B.Z.M.M.M.M.M.B.M.Z.B.M.B.B.M.M.M.M.Z.B.Z.B.B.Z.A.Z.Z.B.M.U 1 YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX O o o . x U M.B.Z.Z.B.B.B.B.B.B.Z.B.Z.B.M.M.M.Z.B.M.Z.[ B.Z.B.M.Z.M.M.M.Z.Z.M.Z.Z.Z.M.M.Z.M.M.B.Z.Z.B.Z.B.Z.M.Z.M.M.M.M.Z.M.M.M.M.M.B.Z.Z.Z.B.Z.Z.Z.Z.Z.B.M.M.M.M.B.M.B.Z.B.Z.Z.B.B.Z.B.Z.B.B.M.M.Z.M.Z.M.Z.M.B.M.B.B.M.M.[ Z.B.B.B.B.B.B.V.B.Z.B.c . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX g U U B.Z.Z.B.Z.B.B.Z.B.B.Z.M.M.B.M.M.M.Z.Z.M.Z.Z.M.M.M.M.M.Z.M.Z.Z.M.Z.M.M.M.Z.M.M.Z.Z.M.M.M.M.M.M.M.Z.M.M.Z.M.M.Z.M.M.M.Z.Z.M.Z.Z.Z.Z.Z.B.B.B.M.M.M.M.B.B.B.Z.B.Z.Z.B.B.Z.Z.B.M.M.M.B.B.Z.M.M.M.B.M.M.Z.M.M.M.Z.Z.B.Z.B.M.B.B.B.M & YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX . 5 C U M.V.Z.Z.B.B.Z.B.B.B.B.Z.Z.M.M.M.B.B.B.B.Z.Z.M.M.M.M.M.M.M.Z.M.M.M.M.M.M.B.B.Z.Z.M.M.B.M.M.M.M.M.M.M.M.B.M.Z.Z.Z.M.[ Z.Z.Z.Z.M.M.B.B.B.B.B.B.B.B.Z.B.Z.B.B.B.B.Z.Z.M.Z.M.B.Z.B.B.Z.M.M.M.B.B.Z.M.Z.M.M.Z.Z.B.B.Z.M.b.z & YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX . j G W M.Z.Z.Z.B.B.Z.B.B.Z.M.M.Z.B.Z.Z.B.M.Z.M.M.Z.M.M.M.Z.Z.Z.M.W U M.Z.Z.Z.Z.Z.Z.Z.Z.Z.M.M.M.Z.M.B.M.M.Z.M.Z.B.M.M.Z.B.M.Z.Z.M.M.B.B.M.M.M.Z.M.B.B.B.M.M.B.M.B.B.[ Z.M.Z.B.A.B.M.B.B.M.M.Z.M.Z.M.B.B.Z.Z.Z.v.Z 9 YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX > B P W B.B.Z.B.Z.Z.M.Z.M.Z.M.Z.Z.B.Z.M.M.Z.Z.M.M.M.M.M.Z.M.M.Z.Z.M.Z.M.Z.M.M.Z.B.M.Z.Z.M.M.M.M.M.B.M.Z.B.M.M.M.M.Z.M.Z.Z.M.B.M.B.M.B.M.B.B.[ M.B.M.B.B.B.B.Z.B.B.Z.Z.M.B.B.M.M.B.v.M.M.M.M.B.B.U V a , YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX e B I W M.Z.Z.Z.Z.Z.Z.Z.B.B.M.Z.M.M.Z.Z.M.M.M.Z.M.Z.Z.Z.B.Z.M.M.B.Z.M.B.Z.M.M.M.M.M.M.M.M.M.M.B.B.B.M.M.M.M.Z.Z.B.B.M.B.B.[ M.M.M.Z.Z.Z.B.B.M.B.B.B.Z.Z.B.B.B.B.B.M.B.B.M.M.v.M.M.v.B.[ B * . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX > x P U M.M.M.Z.Z.Z.Z.B.M.M.M.M.M.M.M.M.M.M.M.Z.M.Z.M.Z.M.Z.Z.M.B.B.M.M.Z.[ Z.M.Z.B.B.Z.B.Z.Z.Z.Z.Z.M.Z.Z.Z.Z.Z.Z.B.B.B.Z.Z.M.M.B.M.M.M.M.B.B.B.B.A.B.Z.B.B.B.B.B.m.B.Q v.E E A w + YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX . u V U M.U M.Z.Z.M.M.M.Z.Z.Z.Z.M.M.M.M.M.Z.Z.M.B.M.M.M.M.Z.M.M.W M.W M.Z.B.Z.Z.B.Z.B.Z.B.Z.M.Z.M.Z.M.Z.M.Z.B.B.B.B.B.Z.B.Z.M.M.M.M.B.B.Z.B.A.Z.B.M.b.L s $ YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX o . o + * V V U [ M.Z.Z.Z.Z.Z.Z.M.M.M.Z.Z.Z.M.Z.Z.M.M.M.Z.M.Z.M.M.M.M.Z.Z.M.B.M.M.M.M.M.M.Z.M.M.M.Z.Z.Z.Z.B.B.Z.Z.B.B.M.Z.Z.Z.B.B.M.B.B.m.x s q 0 : $ . YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX 8 z F R v.B.Z.Z.Z.Z.Z.Z.Z.Z.B.B.Z.B.B.B.B.M.B.M.B.Z.B.B.B.M.v.U U M.v.M.B.B.B.B.B.B.Z.B.Z.B.Z.Z.B.B.B.B.Z.Z.Z.M.v.M & YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX , f B J v.B.A.Z.B.m.B.Z.B.Z.B.B.v.v.B.B.B.B.B.M.v.W W W W Q M.M.v.B.B.B.Z.Z.B.B.Z.B.B.Z.B.Z.V.B.M.D p YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX 1 s x A K b.v.M.B.v.B.Z.B.B.B.B.W U U W W v.W W R E J U E b.v.M.B.B.B.M.E F M s : YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", -"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX" -}; diff --git a/Documentation/pictures/logo-debian.png b/Documentation/pictures/logo-debian.png new file mode 100644 index 0000000000..d163414d3b Binary files /dev/null and b/Documentation/pictures/logo-debian.png differ diff --git a/Documentation/pictures/logo-fedora.png b/Documentation/pictures/logo-fedora.png new file mode 100644 index 0000000000..5e0b437dfd Binary files /dev/null and b/Documentation/pictures/logo-fedora.png differ diff --git a/Documentation/pictures/logo-freebsd.png b/Documentation/pictures/logo-freebsd.png new file mode 100644 index 0000000000..df203a116a Binary files /dev/null and b/Documentation/pictures/logo-freebsd.png differ diff --git a/Documentation/pictures/logo-lilypond_Snell-Roundhead-Heaven.png b/Documentation/pictures/logo-lilypond_Snell-Roundhead-Heaven.png new file mode 100644 index 0000000000..4c01f90fcd Binary files /dev/null and b/Documentation/pictures/logo-lilypond_Snell-Roundhead-Heaven.png differ diff --git a/Documentation/pictures/logo-linux.png b/Documentation/pictures/logo-linux.png new file mode 100644 index 0000000000..b30937c581 Binary files /dev/null and b/Documentation/pictures/logo-linux.png differ diff --git a/Documentation/pictures/logo-macosx.png b/Documentation/pictures/logo-macosx.png new file mode 100644 index 0000000000..e0b6fae04a Binary files /dev/null and b/Documentation/pictures/logo-macosx.png differ diff --git a/Documentation/pictures/logo-slackware.png b/Documentation/pictures/logo-slackware.png new file mode 100644 index 0000000000..01765f8b68 Binary files /dev/null and b/Documentation/pictures/logo-slackware.png differ diff --git a/Documentation/pictures/logo-suse.png b/Documentation/pictures/logo-suse.png new file mode 100644 index 0000000000..dba0cd1710 Binary files /dev/null and b/Documentation/pictures/logo-suse.png differ diff --git a/Documentation/pictures/logo-ubuntu.png b/Documentation/pictures/logo-ubuntu.png new file mode 100644 index 0000000000..bb9d0de4ff Binary files /dev/null and b/Documentation/pictures/logo-ubuntu.png differ diff --git a/Documentation/pictures/logo-windows.png b/Documentation/pictures/logo-windows.png new file mode 100644 index 0000000000..d915c654e7 Binary files /dev/null and b/Documentation/pictures/logo-windows.png differ diff --git a/Documentation/pictures/ly.xpm b/Documentation/pictures/ly.xpm deleted file mode 100644 index 3a752afe61..0000000000 --- a/Documentation/pictures/ly.xpm +++ /dev/null @@ -1,133 +0,0 @@ -/* XPM */ -static char * eight_transparant_xpm[] = { -"128 128 2 1", -" c None", -". c #000000", -" ", -" ", -" ", -" ", -" ", -" .... ", -" ........ ", -" ......... ", -" ........... ", -" ........... ", -" ............ ", -" ............ ", -" ............. ", -" ............ ", -" ............ ", -" ............. ", -" ............ ", -" ............ ", -" ............. ", -" ............. ", -" .............. ", -" ............. ", -" .............. ", -" .............. ", -" ............... ", -" ............... ", -" ............... ", -" ............... ", -" ............... ", -" .............. ", -" .............. ", -" ............... ", -" .............. ", -" ............... ", -" .............. ", -" .............. ", -" ............... ", -" .............. ", -" .............. ", -" ............. ", -" ............. ", -" ............ ", -" ............ ", -" ........... ", -" ............ ", -" ........... ", -" ........... ", -" .......... ", -" ........... ", -" .......... ", -" ... ........... ", -" ... .......... ", -" ..... .......... ", -" ..... .......... ", -" ..... ......... ", -" ...... ......... ", -" ...... ......... ", -" ...... ......... ", -" ...... ......... ", -" ...... ........ ", -" ....... ........ ", -" ....... ........ ", -" ....... ......... ", -" ....... ........ ", -" ....... ........ ", -" ....... ........ ", -" ....... ........ ", -" ....... ........ ", -" ....... ........ ", -" ....... ........ ", -" ....... ........ ", -" ....... ........ ", -" ....... ........ ", -" ....... ........ ", -" ....... ........ ", -" ....... ....... ", -" ....... ........ ", -" ....... ........ ", -" ....... ........ ", -" ........ ........ ", -" ........ ....... ", -" ........ ........ ", -" ........ ........ ", -" ...................... ........ ", -" .......................... ....... ", -" ............................. ....... ", -" ................................ ....... ", -" ................................. ...... ", -" ................................... ..... ", -" .................................... .... ", -" ...................................... . ", -" ....................................... ", -" ........................................ ", -" ......................................... ", -" .......................................... ", -" .......................................... ", -" ........................................... ", -" ............................................ ", -" ................... ................ ", -" ................ ............... ", -" ................ .............. ", -" .............. .............. ", -" ............ .............. ", -" ........... .............. ", -" .......... .............. ", -" ........ ............. ", -" .... ............. ", -" ............. ", -" ............. ", -" ............. ", -" .............. ", -" ............. ", -" ............. ", -" ............. ", -" ............ ", -" ........... ", -" ......... ", -" ....... ", -" . ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" "}; diff --git a/Documentation/pictures/nav-active.jpg b/Documentation/pictures/nav-active.jpg new file mode 100644 index 0000000000..a04edf30f4 Binary files /dev/null and b/Documentation/pictures/nav-active.jpg differ diff --git a/Documentation/pictures/nav-bg.jpg b/Documentation/pictures/nav-bg.jpg new file mode 100644 index 0000000000..81cc9b790a Binary files /dev/null and b/Documentation/pictures/nav-bg.jpg differ diff --git a/Documentation/pictures/nav-hover.jpg b/Documentation/pictures/nav-hover.jpg new file mode 100644 index 0000000000..cc4b982bd5 Binary files /dev/null and b/Documentation/pictures/nav-hover.jpg differ diff --git a/Documentation/pictures/orm-finnendahl.jpg b/Documentation/pictures/orm-finnendahl.jpg new file mode 100644 index 0000000000..e1cb456eb0 Binary files /dev/null and b/Documentation/pictures/orm-finnendahl.jpg differ diff --git a/Documentation/pictures/summary-gradient.png b/Documentation/pictures/summary-gradient.png new file mode 100644 index 0000000000..bb723265cb Binary files /dev/null and b/Documentation/pictures/summary-gradient.png differ diff --git a/Documentation/pictures/text-input-1-annotate.svg b/Documentation/pictures/text-input-1-annotate.svg new file mode 100644 index 0000000000..e27f3655c8 --- /dev/null +++ b/Documentation/pictures/text-input-1-annotate.svg @@ -0,0 +1,257 @@ + + + + + + + + + + + + + + + + + { \time 2/4 \clef bass c4 c g g a a g2} + + + + + + + + + + + + + + + + +_("Commands start with \\") + +_("Letters are notes") + + + +_("Numbers are durations") + + + + + image/svg+xml + + + + + + diff --git a/Documentation/pictures/text-input-2-annotate.svg b/Documentation/pictures/text-input-2-annotate.svg new file mode 100644 index 0000000000..dc63cd3fd4 --- /dev/null +++ b/Documentation/pictures/text-input-2-annotate.svg @@ -0,0 +1,224 @@ + + + + + + + \relative c'' { \key c \minor g( <ees c'>) <d f gis b>-. <ees g bes>-.} + + + + + + + + + + + + + + + + + +_("Add articulations") + +_("Add -es for flat, -is for sharp") + +_("Enclose pitches in < > for chords") + + + + image/svg+xml + + + + + + diff --git a/Documentation/pictures/text-input-parts-both-annotate.svg b/Documentation/pictures/text-input-parts-both-annotate.svg new file mode 100644 index 0000000000..d9f020f51b --- /dev/null +++ b/Documentation/pictures/text-input-parts-both-annotate.svg @@ -0,0 +1,193 @@ + + + + + + + + _("hornNotes") =\relative c { \time 2/4 R2*3 r4 f8 a cis4 f e d}_("bassoonNotes") =\relative c { \clef bass r4 d,8 f gis4 c b bes a8 e f4 g d gis f} + + + + + + + + + + + + + _("Enter multi-rest") + + + _("Store notes in variable") + + + + + + image/svg+xml + + + + + diff --git a/Documentation/pictures/text-input-parts-single-annotate.svg b/Documentation/pictures/text-input-parts-single-annotate.svg new file mode 100644 index 0000000000..6e7dae5dcd --- /dev/null +++ b/Documentation/pictures/text-input-parts-single-annotate.svg @@ -0,0 +1,167 @@ + + + + + + + + + + { \set Score.skipBars = ##t \transpose f c' \_("hornNotes")} + + + + + + + + + + + + + + + + + + + + + + _("Condense multi-rests") + + + + _("Transpose for F instrument") + + + + + _("Reuse variable") + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/Documentation/pictures/text-input-pop-annotate.svg b/Documentation/pictures/text-input-pop-annotate.svg new file mode 100644 index 0000000000..01fdd70d05 --- /dev/null +++ b/Documentation/pictures/text-input-pop-annotate.svg @@ -0,0 +1,211 @@ + + + + + + << \chords { c1:m7 f2:7 c2 } \relative c'' { g2 es8( c4.) f8 f es d c2 } \addlyrics { Li ly, got me on my knees }>> + + + + + + + + _("Enter chord names") + + + _("Enter melody") + + + _("Enter lyrics") + + + + + +_("Combine melody and lyrics") + + + + + image/svg+xml + + + + + diff --git a/Documentation/pictures/text-input-score-annotate.svg b/Documentation/pictures/text-input-score-annotate.svg new file mode 100644 index 0000000000..c45a7c7621 --- /dev/null +++ b/Documentation/pictures/text-input-score-annotate.svg @@ -0,0 +1,150 @@ + + + + + + + + + + + << \new Staff \_("hornNotes") \new Staff \_("bassoonNotes")>> + + + + + + + + + + + + + + + + + + + +_("Create staff") + + + + + +_("Combine staffs in parallel") + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/Documentation/po/GNUmakefile b/Documentation/po/GNUmakefile index dc3d16144c..9224f2c1dc 100644 --- a/Documentation/po/GNUmakefile +++ b/Documentation/po/GNUmakefile @@ -10,9 +10,9 @@ LANGS = $(shell $(PYTHON) $(top-src-dir)/python/langdefs.py) DOMAIN=lilypond-doc DOC_PO_SOURCES = python/auxiliar/postprocess_html.py \ scripts/build/texi-gettext.py scripts/auxiliar/translations-status.py -TELY_FILES = $(shell ls $(depth)/Documentation/user/lilypond*.tely) -TELY_FILES += $(foreach l, $(LANGS), $(shell ls $(depth)/Documentation/$(l)/user/lilypond*.tely)) -LSR_LYS := $(shell ls $(depth)/input/lsr/*.ly) +TELY_FILES = $(shell ls $(depth)/Documentation/user/*.tely) +TELY_FILES += $(foreach l, $(LANGS), $(shell ls $(depth)/Documentation/$(l)/*.tely)) +LSR_LYS := $(shell ls $(depth)/Documentation/snippets/*.ly) TELY_FILES += $(LSR_LYS:%.ly=../%.ly) messages: $(outdir)/messages @@ -34,3 +34,7 @@ po-update: for i in $(CATALOGS); do \ msgmerge -U $$i.po lilypond-doc.pot; \ done + +ifeq ($(out),www) +local-WWW-1: messages +endif diff --git a/Documentation/po/de.po b/Documentation/po/de.po index a7ab71cda1..32eead9cf6 100644 --- a/Documentation/po/de.po +++ b/Documentation/po/de.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-06-18 09:15+0200\n" +"POT-Creation-Date: 2009-07-06 23:05+0200\n" "PO-Revision-Date: 2009-06-27 12:38+0300\n" "Last-Translator: Till Rettig \n" "Language-Team: German \n" @@ -463,7 +463,7 @@ msgstr "f ist 4 aufwärts oder 3 runter, also f unter dem b" #. Documentation/user/tutorial.itely:1757 (variable) #. Documentation/user/working.itely:234 (variable) #. Documentation/user/working.itely:249 (variable) -#. Documentation/user/pitches.itely:1120 (context id) +#. Documentation/user/pitches.itely:1132 (context id) msgid "violin" msgstr "Geige" @@ -1854,7 +1854,7 @@ msgstr "eins" #. Documentation/user/fundamental.itely:1242 (variable) #. Documentation/user/fundamental.itely:2646 (variable) -#. Documentation/user/tweaks.itely:3508 (variable) +#. Documentation/user/tweaks.itely:3518 (variable) #. Documentation/user/simultaneous.itely:784 (variable) #. Documentation/user/percussion.itely:497 (variable) #. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:62 (variable) @@ -1906,37 +1906,37 @@ msgid "SopMusic" msgstr "SoprNoten" #. Documentation/user/fundamental.itely:1298 (variable) -#. Documentation/user/tweaks.itely:3510 (variable) +#. Documentation/user/tweaks.itely:3520 (variable) msgid "AltoMusic" msgstr "AltNoten" #. Documentation/user/fundamental.itely:1299 (variable) -#. Documentation/user/tweaks.itely:3511 (variable) +#. Documentation/user/tweaks.itely:3521 (variable) msgid "TenorMusic" msgstr "TenorNoten" #. Documentation/user/fundamental.itely:1300 (variable) -#. Documentation/user/tweaks.itely:3512 (variable) +#. Documentation/user/tweaks.itely:3522 (variable) msgid "BassMusic" msgstr "BassNoten" #. Documentation/user/fundamental.itely:1301 (variable) -#. Documentation/user/tweaks.itely:3513 (variable) +#. Documentation/user/tweaks.itely:3523 (variable) msgid "VerseOne" msgstr "StropheEins" #. Documentation/user/fundamental.itely:1303 (variable) -#. Documentation/user/tweaks.itely:3514 (variable) +#. Documentation/user/tweaks.itely:3524 (variable) msgid "VerseTwo" msgstr "StropheZwei" #. Documentation/user/fundamental.itely:1305 (variable) -#. Documentation/user/tweaks.itely:3515 (variable) +#. Documentation/user/tweaks.itely:3525 (variable) msgid "VerseThree" msgstr "StropheDrei" #. Documentation/user/fundamental.itely:1307 (variable) -#. Documentation/user/tweaks.itely:3516 (variable) +#. Documentation/user/tweaks.itely:3526 (variable) msgid "VerseFour" msgstr "StropheVier" @@ -1945,20 +1945,20 @@ msgid "Sop" msgstr "Sopr" #. Documentation/user/fundamental.itely:1315 (context id) -#. Documentation/user/tweaks.itely:3523 (context id) -#. Documentation/user/input.itely:961 (context id) +#. Documentation/user/tweaks.itely:3533 (context id) +#. Documentation/user/input.itely:982 (context id) msgid "Alto" msgstr "Alt" #. Documentation/user/fundamental.itely:1323 (context id) -#. Documentation/user/tweaks.itely:3531 (context id) -#. Documentation/user/input.itely:963 (context id) +#. Documentation/user/tweaks.itely:3541 (context id) +#. Documentation/user/input.itely:984 (context id) msgid "Tenor" msgstr "Tenor" #. Documentation/user/fundamental.itely:1324 (context id) -#. Documentation/user/tweaks.itely:3532 (context id) -#. Documentation/user/input.itely:968 (context id) +#. Documentation/user/tweaks.itely:3542 (context id) +#. Documentation/user/input.itely:989 (context id) #. input/lsr/jazz-combo-template.ly:229 (variable) msgid "Bass" msgstr "Bass" @@ -2113,7 +2113,7 @@ msgstr "zur Standardgröße zurückgehen" #. Documentation/user/fundamental.itely:2420 (variable) #. Documentation/user/fundamental.itely:2647 (variable) -#. Documentation/user/input.itely:953 (variable) +#. Documentation/user/input.itely:974 (variable) #. input/lsr/orchestra,-choir-and-piano-template.ly:50 (variable) msgid "sopranoMusic" msgstr "SopranNoten" @@ -2133,7 +2133,7 @@ msgid "sopranoWords" msgstr "SopranText" #. Documentation/user/fundamental.itely:2654 (variable) -#. Documentation/user/input.itely:954 (variable) +#. Documentation/user/input.itely:975 (variable) #. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:60 (variable) #. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:52 (variable) #. input/lsr/vocal-ensemble-template.ly:57 (variable) @@ -2148,7 +2148,7 @@ msgid "altoWords" msgstr "AltText" #. Documentation/user/fundamental.itely:2659 (variable) -#. Documentation/user/input.itely:955 (variable) +#. Documentation/user/input.itely:976 (variable) #. input/lsr/orchestra,-choir-and-piano-template.ly:56 (variable) #. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:67 (variable) #. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:59 (variable) @@ -2164,7 +2164,7 @@ msgid "tenorWords" msgstr "TenorText" #. Documentation/user/fundamental.itely:2664 (variable) -#. Documentation/user/input.itely:956 (variable) +#. Documentation/user/input.itely:977 (variable) #. input/lsr/orchestra,-choir-and-piano-template.ly:64 (variable) #. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:74 (variable) #. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:66 (variable) @@ -2345,8 +2345,7 @@ msgstr "Musikalische Ausdrücke ineinander verschachteln" #. Documentation/user/staff.itely:559 (context id) #. Documentation/user/staff.itely:572 (context id) #. Documentation/user/staff.itely:580 (context id) -#. Documentation/user/staff.itely:600 (context id) -#. Documentation/user/staff.itely:613 (context id) +#. Documentation/user/staff.itely:598 (context id) #. @rglos in Documentation/user/staff.itely #. @rglos in Documentation/fr/user/fundamental.itely #. @rglos in Documentation/fr/user/tweaks.itely @@ -2637,208 +2636,208 @@ msgstr "Nur die Dicke des direkt folgenden Bogens vergrößern" msgid "Revert thickness of all following slurs to default of 1.2" msgstr "Die Dicke aller folgenden Bögen zurücksezten auf 1.2" -#. Documentation/user/tweaks.itely:1402 (comment) +#. Documentation/user/tweaks.itely:1412 (comment) msgid "Don't print clefs in this staff" msgstr "Keine Schlüssel in diesem System" -#. Documentation/user/tweaks.itely:1404 (comment) +#. Documentation/user/tweaks.itely:1414 (comment) msgid "Don't print time signatures in this staff" msgstr "Keine Taktangabe in diesem System" -#. Documentation/user/tweaks.itely:1468 (comment) +#. Documentation/user/tweaks.itely:1478 (comment) msgid "Reduce all font sizes by ~24%" msgstr "Alle Schriftgrößen um ~24% verkleinern" -#. Documentation/user/tweaks.itely:1534 (comment) +#. Documentation/user/tweaks.itely:1544 (comment) msgid "Reduce stem length and line spacing to match" msgstr "Die Halslänge und Linienabstand anpassen" -#. Documentation/user/tweaks.itely:1964 (comment) -#. Documentation/user/tweaks.itely:2034 (comment) +#. Documentation/user/tweaks.itely:1974 (comment) +#. Documentation/user/tweaks.itely:2044 (comment) msgid "Set details for later Text Spanner" msgstr "Details für späteren Text-Spanner setzen" -#. Documentation/user/tweaks.itely:1967 (comment) -#. Documentation/user/tweaks.itely:2037 (comment) +#. Documentation/user/tweaks.itely:1977 (comment) +#. Documentation/user/tweaks.itely:2047 (comment) msgid "Place dynamics above staff" msgstr "Dynamik-Zeichen über System setzen" -#. Documentation/user/tweaks.itely:1969 (comment) -#. Documentation/user/tweaks.itely:2041 (comment) +#. Documentation/user/tweaks.itely:1979 (comment) +#. Documentation/user/tweaks.itely:2051 (comment) msgid "Start Ottava Bracket" msgstr "Beginn der Oktavierungsklammer" -#. Documentation/user/tweaks.itely:1972 (comment) -#. Documentation/user/tweaks.itely:1979 (comment) -#. Documentation/user/tweaks.itely:2044 (comment) -#. Documentation/user/tweaks.itely:2051 (comment) +#. Documentation/user/tweaks.itely:1982 (comment) +#. Documentation/user/tweaks.itely:1989 (comment) +#. Documentation/user/tweaks.itely:2054 (comment) +#. Documentation/user/tweaks.itely:2061 (comment) msgid "Add Dynamic Text" msgstr "Dynamik-Text hinzufügen" -#. Documentation/user/tweaks.itely:1974 (comment) -#. Documentation/user/tweaks.itely:2046 (comment) +#. Documentation/user/tweaks.itely:1984 (comment) +#. Documentation/user/tweaks.itely:2056 (comment) msgid "Add Dynamic Line Spanner" msgstr "Dynamic Line Spanner hinzufügen" -#. Documentation/user/tweaks.itely:1976 (comment) -#. Documentation/user/tweaks.itely:2048 (comment) +#. Documentation/user/tweaks.itely:1986 (comment) +#. Documentation/user/tweaks.itely:2058 (comment) msgid "Add Text Script" msgstr "Textbeschriftung hinzufügen" -#. Documentation/user/tweaks.itely:1981 (comment) -#. Documentation/user/tweaks.itely:2053 (comment) +#. Documentation/user/tweaks.itely:1991 (comment) +#. Documentation/user/tweaks.itely:2063 (comment) msgid "Stop Ottava Bracket" msgstr "Ende der Oktavierungsklammer" -#. Documentation/user/tweaks.itely:2039 (comment) +#. Documentation/user/tweaks.itely:2049 (comment) msgid "Place following Ottava Bracket below Text Spanners" msgstr "Nächste Ottava-Klammer unter Text-Spanner setzen" -#. Documentation/user/tweaks.itely:2128 (comment) +#. Documentation/user/tweaks.itely:2138 (comment) msgid "Cause notes to space out to accommodate text" msgstr "Noten spreizen um dem Text Platz zu machen" -#. Documentation/user/tweaks.itely:2151 (comment) +#. Documentation/user/tweaks.itely:2161 (comment) msgid "This markup is short enough to fit without collision" msgstr "Dieser Text ist kurz genug um ohne Kollision zu passen" -#. Documentation/user/tweaks.itely:2155 (comment) +#. Documentation/user/tweaks.itely:2165 (comment) msgid "This is too long to fit, so it is displaced upwards" msgstr "Dieser ist zu lang, darum wird der nach oben verschoben" -#. Documentation/user/tweaks.itely:2159 (comment) -#. Documentation/user/tweaks.itely:2164 (comment) +#. Documentation/user/tweaks.itely:2169 (comment) +#. Documentation/user/tweaks.itely:2174 (comment) msgid "Turn off collision avoidance" msgstr "Abschalten der automatischen Vermeidung von Zusammenstößen" -#. Documentation/user/tweaks.itely:2166 (comment) +#. Documentation/user/tweaks.itely:2176 (comment) msgid "and turn on textLengthOn" msgstr "und Textlänge berücksichtigen" -#. Documentation/user/tweaks.itely:2167 (comment) +#. Documentation/user/tweaks.itely:2177 (comment) msgid "Spaces at end are honored" msgstr "Leerzeichen am Ende werden beachtet" -#. Documentation/user/tweaks.itely:2274 (comment) +#. Documentation/user/tweaks.itely:2284 (comment) msgid "Extend width by 1 staff space" msgstr "Breite um einen Linienabstand vergrößern" -#. Documentation/user/tweaks.itely:2557 (comment) +#. Documentation/user/tweaks.itely:2567 (comment) msgid "This will not work, see below:" msgstr "Das funktioniert nicht, siehe unten" -#. Documentation/user/tweaks.itely:2561 (comment) +#. Documentation/user/tweaks.itely:2571 (comment) msgid "This works:" msgstr "Das funktioniert:" -#. Documentation/user/tweaks.itely:2612 (variable) +#. Documentation/user/tweaks.itely:2622 (variable) msgid "naturalplusflat" msgstr "AuflösungB" -#. Documentation/user/tweaks.itely:2653 (comment) +#. Documentation/user/tweaks.itely:2663 (comment) msgid "Extend width by 1 unit" msgstr "Breite um eine Einheit vergrößern" -#. Documentation/user/tweaks.itely:2655 (comment) +#. Documentation/user/tweaks.itely:2665 (comment) msgid "Align dynamics to a base line 2 units above staff" msgstr "" "Dynamik-Zeichen an einer Linie ausrichten, die 2 Einheiten über dem System " "ist" -#. Documentation/user/tweaks.itely:2959 (variable) -#. Documentation/user/tweaks.itely:3008 (variable) -#. Documentation/user/tweaks.itely:3069 (variable) -#. Documentation/user/tweaks.itely:3139 (variable) -#. Documentation/user/tweaks.itely:3204 (variable) -#. Documentation/user/tweaks.itely:3264 (variable) +#. Documentation/user/tweaks.itely:2969 (variable) +#. Documentation/user/tweaks.itely:3018 (variable) +#. Documentation/user/tweaks.itely:3079 (variable) +#. Documentation/user/tweaks.itely:3149 (variable) +#. Documentation/user/tweaks.itely:3214 (variable) +#. Documentation/user/tweaks.itely:3274 (variable) msgid "rhMusic" msgstr "rhNoten" -#. Documentation/user/tweaks.itely:2964 (comment) -#. Documentation/user/tweaks.itely:3013 (comment) -#. Documentation/user/tweaks.itely:3076 (comment) -#. Documentation/user/tweaks.itely:3148 (comment) -#. Documentation/user/tweaks.itely:3213 (comment) +#. Documentation/user/tweaks.itely:2974 (comment) +#. Documentation/user/tweaks.itely:3023 (comment) +#. Documentation/user/tweaks.itely:3086 (comment) +#. Documentation/user/tweaks.itely:3158 (comment) +#. Documentation/user/tweaks.itely:3223 (comment) msgid "Start polyphonic section of four voices" msgstr "Beginn des polyphonen Abschnitts mit vier Stimmen" -#. Documentation/user/tweaks.itely:2977 (variable) -#. Documentation/user/tweaks.itely:3026 (variable) -#. Documentation/user/tweaks.itely:3089 (variable) -#. Documentation/user/tweaks.itely:3163 (variable) -#. Documentation/user/tweaks.itely:3230 (variable) -#. Documentation/user/tweaks.itely:3292 (variable) +#. Documentation/user/tweaks.itely:2987 (variable) +#. Documentation/user/tweaks.itely:3036 (variable) +#. Documentation/user/tweaks.itely:3099 (variable) +#. Documentation/user/tweaks.itely:3173 (variable) +#. Documentation/user/tweaks.itely:3240 (variable) +#. Documentation/user/tweaks.itely:3302 (variable) msgid "lhMusic" msgstr "lhNoten" -#. Documentation/user/tweaks.itely:2986 (context id) -#. Documentation/user/tweaks.itely:3035 (context id) -#. Documentation/user/tweaks.itely:3098 (context id) -#. Documentation/user/tweaks.itely:3172 (context id) -#. Documentation/user/tweaks.itely:3239 (context id) -#. Documentation/user/tweaks.itely:3301 (context id) -#. Documentation/user/input.itely:974 (context id) +#. Documentation/user/tweaks.itely:2996 (context id) +#. Documentation/user/tweaks.itely:3045 (context id) +#. Documentation/user/tweaks.itely:3108 (context id) +#. Documentation/user/tweaks.itely:3182 (context id) +#. Documentation/user/tweaks.itely:3249 (context id) +#. Documentation/user/tweaks.itely:3311 (context id) +#. Documentation/user/input.itely:995 (context id) msgid "RH" msgstr "RH" -#. Documentation/user/tweaks.itely:2990 (context id) -#. Documentation/user/tweaks.itely:3039 (context id) -#. Documentation/user/tweaks.itely:3102 (context id) -#. Documentation/user/tweaks.itely:3176 (context id) -#. Documentation/user/tweaks.itely:3243 (context id) -#. Documentation/user/tweaks.itely:3305 (context id) -#. Documentation/user/input.itely:980 (context id) +#. Documentation/user/tweaks.itely:3000 (context id) +#. Documentation/user/tweaks.itely:3049 (context id) +#. Documentation/user/tweaks.itely:3112 (context id) +#. Documentation/user/tweaks.itely:3186 (context id) +#. Documentation/user/tweaks.itely:3253 (context id) +#. Documentation/user/tweaks.itely:3315 (context id) +#. Documentation/user/input.itely:1001 (context id) msgid "LH" msgstr "LH" -#. Documentation/user/tweaks.itely:3217 (comment) -#. Documentation/user/tweaks.itely:3279 (comment) +#. Documentation/user/tweaks.itely:3227 (comment) +#. Documentation/user/tweaks.itely:3289 (comment) msgid "Move the c2 out of the main note column so the merge will work" msgstr "" "Verschiebe das c2 aus der Hauptnotenkolumne, damit Verschmelzung funktioniert" -#. Documentation/user/tweaks.itely:3220 (comment) -#. Documentation/user/tweaks.itely:3282 (comment) +#. Documentation/user/tweaks.itely:3230 (comment) +#. Documentation/user/tweaks.itely:3292 (comment) msgid "Stem on the d2 must be down to permit merging" msgstr "Hals vom d2 muss nach unten, damit Verschmelzung gelingt" -#. Documentation/user/tweaks.itely:3277 (comment) +#. Documentation/user/tweaks.itely:3287 (comment) msgid "Reposition the c2 to the right of the merged note" msgstr "c2 neu positionieren rechts von der verschmolzenen Note" -#. Documentation/user/tweaks.itely:3413 (comment) -#. Documentation/user/tweaks.itely:3435 (comment) +#. Documentation/user/tweaks.itely:3423 (comment) +#. Documentation/user/tweaks.itely:3445 (comment) msgid "Visible tempo marking" msgstr "Sichtbare Tempo-Bezeichnung" -#. Documentation/user/tweaks.itely:3417 (comment) -#. Documentation/user/tweaks.itely:3439 (comment) +#. Documentation/user/tweaks.itely:3427 (comment) +#. Documentation/user/tweaks.itely:3449 (comment) msgid "Invisible tempo marking to lengthen fermata in MIDI" msgstr "Unsichtbare Tempo-Bezeichnung um Fermate im MIDI zu verlängern" -#. Documentation/user/tweaks.itely:3420 (comment) -#. Documentation/user/tweaks.itely:3442 (comment) +#. Documentation/user/tweaks.itely:3430 (comment) +#. Documentation/user/tweaks.itely:3452 (comment) msgid "New tempo for next section" msgstr "Neues Tempo im nächsten Abschnitt" -#. Documentation/user/tweaks.itely:3499 (variable) +#. Documentation/user/tweaks.itely:3509 (variable) msgid "emphasize" msgstr "emphasize" -#. Documentation/user/tweaks.itely:3503 (variable) +#. Documentation/user/tweaks.itely:3513 (variable) msgid "normal" msgstr "normal" -#. Documentation/user/tweaks.itely:3509 (variable) +#. Documentation/user/tweaks.itely:3519 (variable) msgid "SopranoMusic" msgstr "SopranNoten" -#. Documentation/user/tweaks.itely:3522 (context id) -#. Documentation/user/input.itely:959 (context id) +#. Documentation/user/tweaks.itely:3532 (context id) +#. Documentation/user/input.itely:980 (context id) msgid "Soprano" msgstr "Sopran" -#. Documentation/user/tweaks.itely:3731 (comment) +#. Documentation/user/tweaks.itely:3741 (comment) msgid "Arrange to obtain color from color-notehead procedure" msgstr "Anordnungen um Farbe von der color-notehead-Prozedur zu erhalten" @@ -3390,7 +3389,7 @@ msgstr "dolce" #. Documentation/user/working.itely:247 (variable) #. Documentation/user/working.itely:296 (variable) -#. Documentation/user/scheme-tutorial.itely:235 (variable) +#. Documentation/user/scheme-tutorial.itely:282 (variable) #. Documentation/user/programming-interface.itely:101 (variable) msgid "padText" msgstr "AbstandText" @@ -3424,6 +3423,8 @@ msgstr "An LilyPond-Projekten arbeiten" #. @section in Documentation/user/working.itely #. @node in Documentation/fr/user/working.itely #. @section in Documentation/fr/user/working.itely +#. @node in Documentation/es/user/working.itely +#. @section in Documentation/es/user/working.itely #. @node in Documentation/de/user/working.itely #. @section in Documentation/de/user/working.itely #. @node in Documentation/ja/user/working.itely @@ -3518,6 +3519,30 @@ msgstr "Wenn etwas nicht funktioniert" msgid "Updating old input files" msgstr "Alte Eingabe-Dateien aktualisieren" +#. @node in Documentation/user/working.itely +#. @subsection in Documentation/user/working.itely +#, fuzzy +msgid "Common errors" +msgstr "Übliche Akkorde" + +#. @node in Documentation/user/working.itely +#. @unnumberedsubsubsec in Documentation/user/working.itely +msgid "Music runs off the page" +msgstr "" + +#. @node in Documentation/user/working.itely +msgid "Apparent error in ../ly/init.ly" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/user/working.itely +msgid "Apparent error in @code{../ly/init.ly}" +msgstr "" + +#. @node in Documentation/user/working.itely +#. @unnumberedsubsubsec in Documentation/user/working.itely +msgid "Error message Unbound variable %" +msgstr "" + #. @node in Documentation/user/working.itely #. @subsection in Documentation/user/working.itely #. @node in Documentation/fr/user/working.itely @@ -3559,6 +3584,10 @@ msgstr "Partituren und Stimmen" #. @node in Documentation/user/working.itely #. @section in Documentation/user/working.itely +#. @node in Documentation/es/user/working.itely +#. @section in Documentation/es/user/working.itely +#. @node in Documentation/de/user/working.itely +#. @section in Documentation/de/user/working.itely msgid "Make and Makefiles" msgstr "Make und Makefiles" @@ -3840,12 +3869,12 @@ msgstr "Texinfo" msgid "xelatex" msgstr "xelatex" -#. Documentation/user/scheme-tutorial.itely:257 (variable) +#. Documentation/user/scheme-tutorial.itely:304 (variable) #. Documentation/user/programming-interface.itely:135 (variable) msgid "tempoPadded" msgstr "tempoVerschoben" -#. Documentation/user/scheme-tutorial.itely:276 (variable) +#. Documentation/user/scheme-tutorial.itely:323 (variable) msgid "pattern" msgstr "Muster" @@ -4319,6 +4348,16 @@ msgstr "Dateien mit convert-ly aktualisieren" msgid "Updating files with @command{convert-ly}" msgstr "Dateien mit @command{convert-ly} aktualisieren" +#. @node in Documentation/user/running.itely +#, fuzzy +msgid "Invoking convert-ly" +msgstr "etf2ly aufrufen" + +#. @subsection in Documentation/user/running.itely +#, fuzzy +msgid "Invoking @command{convert-ly}" +msgstr "@command{etf2ly} aufrufen" + #. @node in Documentation/user/running.itely #. @node in Documentation/es/user/running.itely #. @node in Documentation/de/user/running.itely @@ -4744,11 +4783,11 @@ msgstr "Index der LilyPond-Befehle" msgid "Musical notation" msgstr "Musikalische Notation" -#. Documentation/user/pitches.itely:730 (variable) -#. Documentation/user/input.itely:1043 (variable) -#. Documentation/user/input.itely:1062 (variable) -#. Documentation/user/input.itely:1099 (variable) -#. Documentation/user/input.itely:1114 (variable) +#. Documentation/user/pitches.itely:732 (variable) +#. Documentation/user/input.itely:1064 (variable) +#. Documentation/user/input.itely:1083 (variable) +#. Documentation/user/input.itely:1120 (variable) +#. Documentation/user/input.itely:1135 (variable) #. Documentation/user/changing-defaults.itely:453 (variable) #. Documentation/user/changing-defaults.itely:488 (context id) #. Documentation/user/changing-defaults.itely:538 (context id) @@ -4761,26 +4800,26 @@ msgstr "Musikalische Notation" msgid "music" msgstr "Noten" -#. Documentation/user/pitches.itely:1124 (comment) +#. Documentation/user/pitches.itely:1136 (comment) msgid "not strictly necessary, but a good reminder" msgstr "nicht unbdingt nötig, aber gut zu erinnern" -#. Documentation/user/pitches.itely:1131 (context id) -#. Documentation/user/staff.itely:1121 (variable) +#. Documentation/user/pitches.itely:1143 (context id) +#. Documentation/user/staff.itely:1117 (variable) msgid "clarinet" msgstr "Klarinette" -#. Documentation/user/pitches.itely:1216 (variable) +#. Documentation/user/pitches.itely:1228 (variable) #. Documentation/user/changing-defaults.itely:444 (variable) msgid "musicA" msgstr "NotenA" -#. Documentation/user/pitches.itely:1230 (variable) +#. Documentation/user/pitches.itely:1242 (variable) #. Documentation/user/changing-defaults.itely:445 (variable) msgid "musicB" msgstr "NotenB" -#. Documentation/user/pitches.itely:1249 (context id) +#. Documentation/user/pitches.itely:1261 (context id) #. Documentation/user/keyboards.itely:179 (context id) #. Documentation/user/keyboards.itely:279 (context id) #. Documentation/user/percussion.itely:175 (variable) @@ -4789,7 +4828,7 @@ msgstr "NotenB" msgid "up" msgstr "oben" -#. Documentation/user/pitches.itely:1253 (context id) +#. Documentation/user/pitches.itely:1265 (context id) #. Documentation/user/keyboards.itely:189 (context id) #. Documentation/user/keyboards.itely:288 (context id) #. Documentation/user/percussion.itely:178 (variable) @@ -6049,24 +6088,24 @@ msgstr "Stimme" msgid "Writing music in parallel" msgstr "Musik parallel notieren" -#. Documentation/user/staff.itely:1090 (variable) -#. Documentation/user/staff.itely:1105 (variable) -#. Documentation/user/staff.itely:1273 (variable) +#. Documentation/user/staff.itely:1086 (variable) +#. Documentation/user/staff.itely:1101 (variable) +#. Documentation/user/staff.itely:1269 (variable) msgid "flute" msgstr "Flöte" -#. Documentation/user/staff.itely:1215 (variable) -#. Documentation/user/staff.itely:1236 (variable) +#. Documentation/user/staff.itely:1211 (variable) +#. Documentation/user/staff.itely:1232 (variable) msgid "oboe" msgstr "Oboe" -#. Documentation/user/staff.itely:1294 (variable) -#. Documentation/user/staff.itely:1310 (context id) +#. Documentation/user/staff.itely:1290 (variable) +#. Documentation/user/staff.itely:1306 (context id) msgid "piccolo" msgstr "Piccolo" -#. Documentation/user/staff.itely:1302 (variable) -#. Documentation/user/staff.itely:1311 (context id) +#. Documentation/user/staff.itely:1298 (variable) +#. Documentation/user/staff.itely:1307 (context id) msgid "cbassoon" msgstr "Ktrfgt" @@ -8298,11 +8337,11 @@ msgstr "Arabische Notenbeispiele" msgid "Further reading" msgstr "Weitere Literatur" -#. Documentation/user/input.itely:525 (comment) +#. Documentation/user/input.itely:546 (comment) msgid "not printed" msgstr "nicht gedruckt" -#. Documentation/user/input.itely:957 (variable) +#. Documentation/user/input.itely:978 (variable) msgid "allLyrics" msgstr "alleText" @@ -10525,11 +10564,6 @@ msgstr "Advertencias·y·problemas·conocido" msgid "Automatic behaviour" msgstr "Automatisches Verhalten" -#. @node in Documentation/es/user/working.itely -#. @section in Documentation/es/user/working.itely -msgid "Suggestions for writing LilyPond files" -msgstr "Vorschläge, wie LilyPond-Dateien geschrieben werden sollen" - #. @node in Documentation/es/user/working.itely #. @subsection in Documentation/es/user/working.itely #. @node in Documentation/de/user/working.itely @@ -11853,8 +11887,7 @@ msgstr "semppBeschriftung" #. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:60 (comment) msgid "Solution 2: Using a dynamic script & shifting with" -msgstr "" -"Lösung 2: Dynamik-Skript benutzen und mit" +msgstr "Lösung 2: Dynamik-Skript benutzen und mit" #. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:61 (comment) msgid "\\once \\override ... #'X-offset = .." @@ -11901,7 +11934,8 @@ msgstr "und kann·andere·Elemente·hier·hintun·-->·Kollisionen" #. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:84 (comment) msgid "Drawback: Also, there seems to be some spacing, so it's not exactly the" -msgstr "Nachteil: Es gibt offensichtlich noch Ränder, so dass es nicht genau die" +msgstr "" +"Nachteil: Es gibt offensichtlich noch Ränder, so dass es nicht genau die" #. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:85 (comment) msgid "same alignment as without the additional text" @@ -13315,7 +13349,9 @@ msgstr "" #. input/lsr/utf-8.ly:21 (comment) msgid "Edit this file using a Unicode aware editor, such as GVIM, GEDIT, Emacs" -msgstr "Diese Datei mit einem Editor bearbeiten, der in Unicode speichern kann, wie etwa GVIM, GEDIT, Emacs" +msgstr "" +"Diese Datei mit einem Editor bearbeiten, der in Unicode speichern kann, wie " +"etwa GVIM, GEDIT, Emacs" #. input/lsr/utf-8.ly:39 (comment) msgid "Cyrillic font" @@ -13460,6 +13496,9 @@ msgstr "Fußnoten" msgid "Table of Contents" msgstr "Inhaltsverzeichnis" +#~ msgid "Suggestions for writing LilyPond files" +#~ msgstr "Vorschläge, wie LilyPond-Dateien geschrieben werden sollen" + #~ msgid "Right-align bar numbers" #~ msgstr "Taktnummern rechtsbündig" diff --git a/Documentation/po/es.po b/Documentation/po/es.po index a6db710da5..d5f2ecba45 100644 --- a/Documentation/po/es.po +++ b/Documentation/po/es.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: es\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-06-18 09:15+0200\n" -"PO-Revision-Date: 2009-06-19 17:29+0200\n" +"POT-Creation-Date: 2009-07-06 23:05+0200\n" +"PO-Revision-Date: 2009-07-17 18:03+0200\n" "Last-Translator: Francisco Vila \n" "Language-Team: Español\n" "MIME-Version: 1.0\n" @@ -157,7 +157,7 @@ msgstr "post-GDP" #. @node in Documentation/ja/user/lilypond-learning.tely #. @node in Documentation/ja/user/lilypond-program.tely msgid "Top" -msgstr "Inicio" +msgstr "Arriba" #. @top in Documentation/user/lilypond-learning.tely msgid "GNU LilyPond --- Learning Manual" @@ -465,7 +465,7 @@ msgstr "el Fa está 4 por encima ó 3 por debajo, es el Fa grave" #. Documentation/user/tutorial.itely:1757 (variable) #. Documentation/user/working.itely:234 (variable) #. Documentation/user/working.itely:249 (variable) -#. Documentation/user/pitches.itely:1120 (context id) +#. Documentation/user/pitches.itely:1132 (context id) msgid "violin" msgstr "violin" @@ -1856,7 +1856,7 @@ msgstr "uno" #. Documentation/user/fundamental.itely:1242 (variable) #. Documentation/user/fundamental.itely:2646 (variable) -#. Documentation/user/tweaks.itely:3508 (variable) +#. Documentation/user/tweaks.itely:3518 (variable) #. Documentation/user/simultaneous.itely:784 (variable) #. Documentation/user/percussion.itely:497 (variable) #. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:62 (variable) @@ -1908,37 +1908,37 @@ msgid "SopMusic" msgstr "MusicaSoprano" #. Documentation/user/fundamental.itely:1298 (variable) -#. Documentation/user/tweaks.itely:3510 (variable) +#. Documentation/user/tweaks.itely:3520 (variable) msgid "AltoMusic" msgstr "MusicaAlto" #. Documentation/user/fundamental.itely:1299 (variable) -#. Documentation/user/tweaks.itely:3511 (variable) +#. Documentation/user/tweaks.itely:3521 (variable) msgid "TenorMusic" msgstr "MusicaTenor" #. Documentation/user/fundamental.itely:1300 (variable) -#. Documentation/user/tweaks.itely:3512 (variable) +#. Documentation/user/tweaks.itely:3522 (variable) msgid "BassMusic" msgstr "MusicaBajo" #. Documentation/user/fundamental.itely:1301 (variable) -#. Documentation/user/tweaks.itely:3513 (variable) +#. Documentation/user/tweaks.itely:3523 (variable) msgid "VerseOne" msgstr "EstrofaUno" #. Documentation/user/fundamental.itely:1303 (variable) -#. Documentation/user/tweaks.itely:3514 (variable) +#. Documentation/user/tweaks.itely:3524 (variable) msgid "VerseTwo" msgstr "EstrofaDos" #. Documentation/user/fundamental.itely:1305 (variable) -#. Documentation/user/tweaks.itely:3515 (variable) +#. Documentation/user/tweaks.itely:3525 (variable) msgid "VerseThree" msgstr "EstrofaTres" #. Documentation/user/fundamental.itely:1307 (variable) -#. Documentation/user/tweaks.itely:3516 (variable) +#. Documentation/user/tweaks.itely:3526 (variable) msgid "VerseFour" msgstr "EstrofaCuatro" @@ -1947,21 +1947,21 @@ msgid "Sop" msgstr "Soprano" #. Documentation/user/fundamental.itely:1315 (context id) -#. Documentation/user/tweaks.itely:3523 (context id) -#. Documentation/user/input.itely:961 (context id) +#. Documentation/user/tweaks.itely:3533 (context id) +#. Documentation/user/input.itely:982 (context id) msgid "Alto" msgstr "Alto" #. Documentation/user/fundamental.itely:1323 (context id) -#. Documentation/user/tweaks.itely:3531 (context id) -#. Documentation/user/input.itely:963 (context id) +#. Documentation/user/tweaks.itely:3541 (context id) +#. Documentation/user/input.itely:984 (context id) msgid "Tenor" msgstr "Tenor" # También Líneas divisorias. FVD #. Documentation/user/fundamental.itely:1324 (context id) -#. Documentation/user/tweaks.itely:3532 (context id) -#. Documentation/user/input.itely:968 (context id) +#. Documentation/user/tweaks.itely:3542 (context id) +#. Documentation/user/input.itely:989 (context id) #. input/lsr/jazz-combo-template.ly:229 (variable) msgid "Bass" msgstr "Bajo" @@ -2118,7 +2118,7 @@ msgstr "tamaño predeterminado" #. Documentation/user/fundamental.itely:2420 (variable) #. Documentation/user/fundamental.itely:2647 (variable) -#. Documentation/user/input.itely:953 (variable) +#. Documentation/user/input.itely:974 (variable) #. input/lsr/orchestra,-choir-and-piano-template.ly:50 (variable) msgid "sopranoMusic" msgstr "musicaSoprano" @@ -2138,7 +2138,7 @@ msgid "sopranoWords" msgstr "letraSoprano" #. Documentation/user/fundamental.itely:2654 (variable) -#. Documentation/user/input.itely:954 (variable) +#. Documentation/user/input.itely:975 (variable) #. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:60 (variable) #. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:52 (variable) #. input/lsr/vocal-ensemble-template.ly:57 (variable) @@ -2153,7 +2153,7 @@ msgid "altoWords" msgstr "letraContralto" #. Documentation/user/fundamental.itely:2659 (variable) -#. Documentation/user/input.itely:955 (variable) +#. Documentation/user/input.itely:976 (variable) #. input/lsr/orchestra,-choir-and-piano-template.ly:56 (variable) #. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:67 (variable) #. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:59 (variable) @@ -2169,7 +2169,7 @@ msgid "tenorWords" msgstr "letraTenor" #. Documentation/user/fundamental.itely:2664 (variable) -#. Documentation/user/input.itely:956 (variable) +#. Documentation/user/input.itely:977 (variable) #. input/lsr/orchestra,-choir-and-piano-template.ly:64 (variable) #. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:74 (variable) #. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:66 (variable) @@ -2350,8 +2350,7 @@ msgstr "Anidado de expresiones musicales" #. Documentation/user/staff.itely:559 (context id) #. Documentation/user/staff.itely:572 (context id) #. Documentation/user/staff.itely:580 (context id) -#. Documentation/user/staff.itely:600 (context id) -#. Documentation/user/staff.itely:613 (context id) +#. Documentation/user/staff.itely:598 (context id) #. @rglos in Documentation/user/staff.itely #. @rglos in Documentation/fr/user/fundamental.itely #. @rglos in Documentation/fr/user/tweaks.itely @@ -2642,208 +2641,208 @@ msgstr "Aumentar solamente el grosor de la ligadura siguiente" msgid "Revert thickness of all following slurs to default of 1.2" msgstr "Devolver el grosor de las ligaduras siguientes al valor predeterminado 1.2" -#. Documentation/user/tweaks.itely:1402 (comment) +#. Documentation/user/tweaks.itely:1412 (comment) msgid "Don't print clefs in this staff" msgstr "No imprimir la clave en este pentagrama" -#. Documentation/user/tweaks.itely:1404 (comment) +#. Documentation/user/tweaks.itely:1414 (comment) msgid "Don't print time signatures in this staff" msgstr "No imprimir el compás en este pentagrama" -#. Documentation/user/tweaks.itely:1468 (comment) +#. Documentation/user/tweaks.itely:1478 (comment) msgid "Reduce all font sizes by ~24%" msgstr "Reducir el tamaño de la fuente en un 24% aprox." -#. Documentation/user/tweaks.itely:1534 (comment) +#. Documentation/user/tweaks.itely:1544 (comment) msgid "Reduce stem length and line spacing to match" msgstr "Reducir la longitud de la plica y el espaciado de la línea en coincidencia" -#. Documentation/user/tweaks.itely:1964 (comment) -#. Documentation/user/tweaks.itely:2034 (comment) +#. Documentation/user/tweaks.itely:1974 (comment) +#. Documentation/user/tweaks.itely:2044 (comment) msgid "Set details for later Text Spanner" msgstr "Establecer ajustes para el extensor de texto ulterior" -#. Documentation/user/tweaks.itely:1967 (comment) -#. Documentation/user/tweaks.itely:2037 (comment) +#. Documentation/user/tweaks.itely:1977 (comment) +#. Documentation/user/tweaks.itely:2047 (comment) msgid "Place dynamics above staff" msgstr "Situar la dinámica por encima" # fuzzy. FVD -#. Documentation/user/tweaks.itely:1969 (comment) -#. Documentation/user/tweaks.itely:2041 (comment) +#. Documentation/user/tweaks.itely:1979 (comment) +#. Documentation/user/tweaks.itely:2051 (comment) msgid "Start Ottava Bracket" msgstr "Inicio del corchete de octava" -#. Documentation/user/tweaks.itely:1972 (comment) -#. Documentation/user/tweaks.itely:1979 (comment) -#. Documentation/user/tweaks.itely:2044 (comment) -#. Documentation/user/tweaks.itely:2051 (comment) +#. Documentation/user/tweaks.itely:1982 (comment) +#. Documentation/user/tweaks.itely:1989 (comment) +#. Documentation/user/tweaks.itely:2054 (comment) +#. Documentation/user/tweaks.itely:2061 (comment) msgid "Add Dynamic Text" msgstr "Añadir indicación dinámica textual" -#. Documentation/user/tweaks.itely:1974 (comment) -#. Documentation/user/tweaks.itely:2046 (comment) +#. Documentation/user/tweaks.itely:1984 (comment) +#. Documentation/user/tweaks.itely:2056 (comment) msgid "Add Dynamic Line Spanner" msgstr "Añadir indicación dinámica de extensión de línea" -#. Documentation/user/tweaks.itely:1976 (comment) -#. Documentation/user/tweaks.itely:2048 (comment) +#. Documentation/user/tweaks.itely:1986 (comment) +#. Documentation/user/tweaks.itely:2058 (comment) msgid "Add Text Script" msgstr "Guiones de texto" -#. Documentation/user/tweaks.itely:1981 (comment) -#. Documentation/user/tweaks.itely:2053 (comment) +#. Documentation/user/tweaks.itely:1991 (comment) +#. Documentation/user/tweaks.itely:2063 (comment) msgid "Stop Ottava Bracket" msgstr "Detener el corchete de octava" -#. Documentation/user/tweaks.itely:2039 (comment) +#. Documentation/user/tweaks.itely:2049 (comment) msgid "Place following Ottava Bracket below Text Spanners" msgstr "Situar el corchete de octava ulterior por debajo de los extensores de texto" -#. Documentation/user/tweaks.itely:2128 (comment) +#. Documentation/user/tweaks.itely:2138 (comment) msgid "Cause notes to space out to accommodate text" msgstr "Ocasionar que las notas se espacíen para adecuarse al texto" -#. Documentation/user/tweaks.itely:2151 (comment) +#. Documentation/user/tweaks.itely:2161 (comment) msgid "This markup is short enough to fit without collision" msgstr "Este marcado es corto y cabe sin colisionar" -#. Documentation/user/tweaks.itely:2155 (comment) +#. Documentation/user/tweaks.itely:2165 (comment) msgid "This is too long to fit, so it is displaced upwards" msgstr "Este es muy largo y se desplaza hacia arriba" -#. Documentation/user/tweaks.itely:2159 (comment) -#. Documentation/user/tweaks.itely:2164 (comment) +#. Documentation/user/tweaks.itely:2169 (comment) +#. Documentation/user/tweaks.itely:2174 (comment) msgid "Turn off collision avoidance" msgstr "Desactivar el detector de colisiones" -#. Documentation/user/tweaks.itely:2166 (comment) +#. Documentation/user/tweaks.itely:2176 (comment) msgid "and turn on textLengthOn" msgstr "y activar textLengthOn" -#. Documentation/user/tweaks.itely:2167 (comment) +#. Documentation/user/tweaks.itely:2177 (comment) msgid "Spaces at end are honored" msgstr "Los espacios al final se respetan" -#. Documentation/user/tweaks.itely:2274 (comment) +#. Documentation/user/tweaks.itely:2284 (comment) msgid "Extend width by 1 staff space" msgstr "Aumentar la anchura en un espacio de pentagrama" -#. Documentation/user/tweaks.itely:2557 (comment) +#. Documentation/user/tweaks.itely:2567 (comment) msgid "This will not work, see below:" msgstr "Esto no va a funcionar, véase más abajo:" -#. Documentation/user/tweaks.itely:2561 (comment) +#. Documentation/user/tweaks.itely:2571 (comment) msgid "This works:" msgstr "Esto sí funciona:" -#. Documentation/user/tweaks.itely:2612 (variable) +#. Documentation/user/tweaks.itely:2622 (variable) msgid "naturalplusflat" msgstr "becuadro_y_bemol" -#. Documentation/user/tweaks.itely:2653 (comment) +#. Documentation/user/tweaks.itely:2663 (comment) msgid "Extend width by 1 unit" msgstr "Aumentar la anchura en una unidad" -#. Documentation/user/tweaks.itely:2655 (comment) +#. Documentation/user/tweaks.itely:2665 (comment) msgid "Align dynamics to a base line 2 units above staff" msgstr "Alinear los matices a dos unidades por encima del pentagrama" -#. Documentation/user/tweaks.itely:2959 (variable) -#. Documentation/user/tweaks.itely:3008 (variable) -#. Documentation/user/tweaks.itely:3069 (variable) -#. Documentation/user/tweaks.itely:3139 (variable) -#. Documentation/user/tweaks.itely:3204 (variable) -#. Documentation/user/tweaks.itely:3264 (variable) +#. Documentation/user/tweaks.itely:2969 (variable) +#. Documentation/user/tweaks.itely:3018 (variable) +#. Documentation/user/tweaks.itely:3079 (variable) +#. Documentation/user/tweaks.itely:3149 (variable) +#. Documentation/user/tweaks.itely:3214 (variable) +#. Documentation/user/tweaks.itely:3274 (variable) msgid "rhMusic" msgstr "Musica_m_der" -#. Documentation/user/tweaks.itely:2964 (comment) -#. Documentation/user/tweaks.itely:3013 (comment) -#. Documentation/user/tweaks.itely:3076 (comment) -#. Documentation/user/tweaks.itely:3148 (comment) -#. Documentation/user/tweaks.itely:3213 (comment) +#. Documentation/user/tweaks.itely:2974 (comment) +#. Documentation/user/tweaks.itely:3023 (comment) +#. Documentation/user/tweaks.itely:3086 (comment) +#. Documentation/user/tweaks.itely:3158 (comment) +#. Documentation/user/tweaks.itely:3223 (comment) msgid "Start polyphonic section of four voices" msgstr "Inicio de la sección polifónica de cuatro voces" -#. Documentation/user/tweaks.itely:2977 (variable) -#. Documentation/user/tweaks.itely:3026 (variable) -#. Documentation/user/tweaks.itely:3089 (variable) -#. Documentation/user/tweaks.itely:3163 (variable) -#. Documentation/user/tweaks.itely:3230 (variable) -#. Documentation/user/tweaks.itely:3292 (variable) +#. Documentation/user/tweaks.itely:2987 (variable) +#. Documentation/user/tweaks.itely:3036 (variable) +#. Documentation/user/tweaks.itely:3099 (variable) +#. Documentation/user/tweaks.itely:3173 (variable) +#. Documentation/user/tweaks.itely:3240 (variable) +#. Documentation/user/tweaks.itely:3302 (variable) msgid "lhMusic" msgstr "Muslca_m_izq" -#. Documentation/user/tweaks.itely:2986 (context id) -#. Documentation/user/tweaks.itely:3035 (context id) -#. Documentation/user/tweaks.itely:3098 (context id) -#. Documentation/user/tweaks.itely:3172 (context id) -#. Documentation/user/tweaks.itely:3239 (context id) -#. Documentation/user/tweaks.itely:3301 (context id) -#. Documentation/user/input.itely:974 (context id) +#. Documentation/user/tweaks.itely:2996 (context id) +#. Documentation/user/tweaks.itely:3045 (context id) +#. Documentation/user/tweaks.itely:3108 (context id) +#. Documentation/user/tweaks.itely:3182 (context id) +#. Documentation/user/tweaks.itely:3249 (context id) +#. Documentation/user/tweaks.itely:3311 (context id) +#. Documentation/user/input.itely:995 (context id) msgid "RH" msgstr "MD" -#. Documentation/user/tweaks.itely:2990 (context id) -#. Documentation/user/tweaks.itely:3039 (context id) -#. Documentation/user/tweaks.itely:3102 (context id) -#. Documentation/user/tweaks.itely:3176 (context id) -#. Documentation/user/tweaks.itely:3243 (context id) -#. Documentation/user/tweaks.itely:3305 (context id) -#. Documentation/user/input.itely:980 (context id) +#. Documentation/user/tweaks.itely:3000 (context id) +#. Documentation/user/tweaks.itely:3049 (context id) +#. Documentation/user/tweaks.itely:3112 (context id) +#. Documentation/user/tweaks.itely:3186 (context id) +#. Documentation/user/tweaks.itely:3253 (context id) +#. Documentation/user/tweaks.itely:3315 (context id) +#. Documentation/user/input.itely:1001 (context id) msgid "LH" msgstr "MI" -#. Documentation/user/tweaks.itely:3217 (comment) -#. Documentation/user/tweaks.itely:3279 (comment) +#. Documentation/user/tweaks.itely:3227 (comment) +#. Documentation/user/tweaks.itely:3289 (comment) msgid "Move the c2 out of the main note column so the merge will work" msgstr "" "Sacar el Do blanca de la columna principal de notas para que la fusión " "funcione" -#. Documentation/user/tweaks.itely:3220 (comment) -#. Documentation/user/tweaks.itely:3282 (comment) +#. Documentation/user/tweaks.itely:3230 (comment) +#. Documentation/user/tweaks.itely:3292 (comment) msgid "Stem on the d2 must be down to permit merging" msgstr "La plica del Re blanca debe estar hacia abajo para permitir la fusión" -#. Documentation/user/tweaks.itely:3277 (comment) +#. Documentation/user/tweaks.itely:3287 (comment) msgid "Reposition the c2 to the right of the merged note" msgstr "Recolocar el Do blanca a la derecha de la nota fundida" -#. Documentation/user/tweaks.itely:3413 (comment) -#. Documentation/user/tweaks.itely:3435 (comment) +#. Documentation/user/tweaks.itely:3423 (comment) +#. Documentation/user/tweaks.itely:3445 (comment) msgid "Visible tempo marking" msgstr "Indicación metronómica visible" -#. Documentation/user/tweaks.itely:3417 (comment) -#. Documentation/user/tweaks.itely:3439 (comment) +#. Documentation/user/tweaks.itely:3427 (comment) +#. Documentation/user/tweaks.itely:3449 (comment) msgid "Invisible tempo marking to lengthen fermata in MIDI" msgstr "Indicación metronómica invisible para prolongar el calderón en el MIDI" -#. Documentation/user/tweaks.itely:3420 (comment) -#. Documentation/user/tweaks.itely:3442 (comment) +#. Documentation/user/tweaks.itely:3430 (comment) +#. Documentation/user/tweaks.itely:3452 (comment) msgid "New tempo for next section" msgstr "Tempo nuevo para la sección siguiente" -#. Documentation/user/tweaks.itely:3499 (variable) +#. Documentation/user/tweaks.itely:3509 (variable) msgid "emphasize" msgstr "enfatizar" -#. Documentation/user/tweaks.itely:3503 (variable) +#. Documentation/user/tweaks.itely:3513 (variable) msgid "normal" msgstr "normal" -#. Documentation/user/tweaks.itely:3509 (variable) +#. Documentation/user/tweaks.itely:3519 (variable) msgid "SopranoMusic" msgstr "musicaSoprano" -#. Documentation/user/tweaks.itely:3522 (context id) -#. Documentation/user/input.itely:959 (context id) +#. Documentation/user/tweaks.itely:3532 (context id) +#. Documentation/user/input.itely:980 (context id) msgid "Soprano" msgstr "Soprano" -#. Documentation/user/tweaks.itely:3731 (comment) +#. Documentation/user/tweaks.itely:3741 (comment) msgid "Arrange to obtain color from color-notehead procedure" msgstr "Truco para obtener color a partir del procedimiento color-notehead" @@ -3394,7 +3393,7 @@ msgstr "dolce" #. Documentation/user/working.itely:247 (variable) #. Documentation/user/working.itely:296 (variable) -#. Documentation/user/scheme-tutorial.itely:235 (variable) +#. Documentation/user/scheme-tutorial.itely:282 (variable) #. Documentation/user/programming-interface.itely:101 (variable) msgid "padText" msgstr "textoRelleno" @@ -3428,6 +3427,8 @@ msgstr "Trabajar en proyectos de LilyPond" #. @section in Documentation/user/working.itely #. @node in Documentation/fr/user/working.itely #. @section in Documentation/fr/user/working.itely +#. @node in Documentation/es/user/working.itely +#. @section in Documentation/es/user/working.itely #. @node in Documentation/de/user/working.itely #. @section in Documentation/de/user/working.itely #. @node in Documentation/ja/user/working.itely @@ -3522,6 +3523,29 @@ msgstr "Cuando las cosas no van" msgid "Updating old input files" msgstr "Actualizar archivos de entrada antiguos" +#. @node in Documentation/user/working.itely +#. @subsection in Documentation/user/working.itely +msgid "Common errors" +msgstr "Errores más usuales" + +#. @node in Documentation/user/working.itely +#. @unnumberedsubsubsec in Documentation/user/working.itely +msgid "Music runs off the page" +msgstr "La música se sale de la página" + +#. @node in Documentation/user/working.itely +msgid "Apparent error in ../ly/init.ly" +msgstr "Error aparente en ../ly/init.ly" + +#. @unnumberedsubsubsec in Documentation/user/working.itely +msgid "Apparent error in @code{../ly/init.ly}" +msgstr "Error aparente en @code{../ly/init.ly}" + +#. @node in Documentation/user/working.itely +#. @unnumberedsubsubsec in Documentation/user/working.itely +msgid "Error message Unbound variable %" +msgstr "Mensaje de error Unbound variable %" + #. @node in Documentation/user/working.itely #. @subsection in Documentation/user/working.itely #. @node in Documentation/fr/user/working.itely @@ -3563,6 +3587,10 @@ msgstr "Partituras y particellas" #. @node in Documentation/user/working.itely #. @section in Documentation/user/working.itely +#. @node in Documentation/es/user/working.itely +#. @section in Documentation/es/user/working.itely +#. @node in Documentation/de/user/working.itely +#. @section in Documentation/de/user/working.itely msgid "Make and Makefiles" msgstr "Make y los Makefiles" @@ -3844,12 +3872,12 @@ msgstr "Texinfo" msgid "xelatex" msgstr "xelatex" -#. Documentation/user/scheme-tutorial.itely:257 (variable) +#. Documentation/user/scheme-tutorial.itely:304 (variable) #. Documentation/user/programming-interface.itely:135 (variable) msgid "tempoPadded" msgstr "tempoConRelleno" -#. Documentation/user/scheme-tutorial.itely:276 (variable) +#. Documentation/user/scheme-tutorial.itely:323 (variable) msgid "pattern" msgstr "patron" @@ -3886,7 +3914,7 @@ msgstr "Trucos con Scheme" #. @node in Documentation/user/fdl.itexi #. @appendix in Documentation/user/fdl.itexi msgid "GNU Free Documentation License" -msgstr "Licencia de documentación libre de GNU" +msgstr "GNU Free Documentation License" #. @subheading in Documentation/user/fdl.itexi msgid "ADDENDUM: How to use this License for your documents" @@ -4323,6 +4351,14 @@ msgstr "Actualizar ficheros con convert-ly" msgid "Updating files with @command{convert-ly}" msgstr "Actualizar ficheros con @command{convert-ly}" +#. @node in Documentation/user/running.itely +msgid "Invoking convert-ly" +msgstr "Invocar convert-ly" + +#. @subsection in Documentation/user/running.itely +msgid "Invoking @command{convert-ly}" +msgstr "Invocar @command{convert-ly}" + #. @node in Documentation/user/running.itely #. @node in Documentation/es/user/running.itely #. @node in Documentation/de/user/running.itely @@ -4748,11 +4784,11 @@ msgstr "Índice de instrucciones de LilyPond" msgid "Musical notation" msgstr "Notación musical" -#. Documentation/user/pitches.itely:730 (variable) -#. Documentation/user/input.itely:1043 (variable) -#. Documentation/user/input.itely:1062 (variable) -#. Documentation/user/input.itely:1099 (variable) -#. Documentation/user/input.itely:1114 (variable) +#. Documentation/user/pitches.itely:732 (variable) +#. Documentation/user/input.itely:1064 (variable) +#. Documentation/user/input.itely:1083 (variable) +#. Documentation/user/input.itely:1120 (variable) +#. Documentation/user/input.itely:1135 (variable) #. Documentation/user/changing-defaults.itely:453 (variable) #. Documentation/user/changing-defaults.itely:488 (context id) #. Documentation/user/changing-defaults.itely:538 (context id) @@ -4765,26 +4801,26 @@ msgstr "Notación musical" msgid "music" msgstr "musica" -#. Documentation/user/pitches.itely:1124 (comment) +#. Documentation/user/pitches.itely:1136 (comment) msgid "not strictly necessary, but a good reminder" msgstr "no es imprescindible pero es bueno recordarlo" -#. Documentation/user/pitches.itely:1131 (context id) -#. Documentation/user/staff.itely:1121 (variable) +#. Documentation/user/pitches.itely:1143 (context id) +#. Documentation/user/staff.itely:1117 (variable) msgid "clarinet" msgstr "clarinete" -#. Documentation/user/pitches.itely:1216 (variable) +#. Documentation/user/pitches.itely:1228 (variable) #. Documentation/user/changing-defaults.itely:444 (variable) msgid "musicA" msgstr "musicaA" -#. Documentation/user/pitches.itely:1230 (variable) +#. Documentation/user/pitches.itely:1242 (variable) #. Documentation/user/changing-defaults.itely:445 (variable) msgid "musicB" msgstr "musicaB" -#. Documentation/user/pitches.itely:1249 (context id) +#. Documentation/user/pitches.itely:1261 (context id) #. Documentation/user/keyboards.itely:179 (context id) #. Documentation/user/keyboards.itely:279 (context id) #. Documentation/user/percussion.itely:175 (variable) @@ -4793,7 +4829,7 @@ msgstr "musicaB" msgid "up" msgstr "arriba" -#. Documentation/user/pitches.itely:1253 (context id) +#. Documentation/user/pitches.itely:1265 (context id) #. Documentation/user/keyboards.itely:189 (context id) #. Documentation/user/keyboards.itely:288 (context id) #. Documentation/user/percussion.itely:178 (variable) @@ -6063,24 +6099,24 @@ msgstr "parte" msgid "Writing music in parallel" msgstr "Escribir música en paralelo" -#. Documentation/user/staff.itely:1090 (variable) -#. Documentation/user/staff.itely:1105 (variable) -#. Documentation/user/staff.itely:1273 (variable) +#. Documentation/user/staff.itely:1086 (variable) +#. Documentation/user/staff.itely:1101 (variable) +#. Documentation/user/staff.itely:1269 (variable) msgid "flute" msgstr "flauta" -#. Documentation/user/staff.itely:1215 (variable) -#. Documentation/user/staff.itely:1236 (variable) +#. Documentation/user/staff.itely:1211 (variable) +#. Documentation/user/staff.itely:1232 (variable) msgid "oboe" msgstr "oboe" -#. Documentation/user/staff.itely:1294 (variable) -#. Documentation/user/staff.itely:1310 (context id) +#. Documentation/user/staff.itely:1290 (variable) +#. Documentation/user/staff.itely:1306 (context id) msgid "piccolo" msgstr "flautin" -#. Documentation/user/staff.itely:1302 (variable) -#. Documentation/user/staff.itely:1311 (context id) +#. Documentation/user/staff.itely:1298 (variable) +#. Documentation/user/staff.itely:1307 (context id) msgid "cbassoon" msgstr "cfagot" @@ -8317,11 +8353,11 @@ msgstr "Ejemplo de música árabe" msgid "Further reading" msgstr "Lecturas adicionales" -#. Documentation/user/input.itely:525 (comment) +#. Documentation/user/input.itely:546 (comment) msgid "not printed" msgstr "no impreso" -#. Documentation/user/input.itely:957 (variable) +#. Documentation/user/input.itely:978 (variable) msgid "allLyrics" msgstr "letraCompleta" @@ -10551,11 +10587,6 @@ msgstr "Advertencias y problemas conocidos" msgid "Automatic behaviour" msgstr "Comportamiento automático" -#. @node in Documentation/es/user/working.itely -#. @section in Documentation/es/user/working.itely -msgid "Suggestions for writing LilyPond files" -msgstr "Sugerencias para escribir archivos de LilyPond" - #. @node in Documentation/es/user/working.itely #. @subsection in Documentation/es/user/working.itely #. @node in Documentation/de/user/working.itely @@ -11899,7 +11930,9 @@ msgstr "semppK" #. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:70 (comment) msgid "Solution 3: Padding the dynamic script so the center-alignment" -msgstr "Solución 3: aplicar relleno a la indicación dinámica para que el center-alignment" +msgstr "" +"Solución 3: aplicar relleno a la indicación dinámica para que el center-" +"alignment" #. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:71 (comment) msgid "puts it at the correct position" @@ -13349,7 +13382,9 @@ msgstr "proteste respecto a los subconjuntos de UTF-8 no europeos" #. input/lsr/utf-8.ly:21 (comment) msgid "Edit this file using a Unicode aware editor, such as GVIM, GEDIT, Emacs" -msgstr "Edite este archivo con un editor preparado para Unicode, como GVIM, GEDIT o Emacs" +msgstr "" +"Edite este archivo con un editor preparado para Unicode, como GVIM, GEDIT o " +"Emacs" #. input/lsr/utf-8.ly:39 (comment) msgid "Cyrillic font" diff --git a/Documentation/po/fr.po b/Documentation/po/fr.po index a43ceef1aa..237689963b 100644 --- a/Documentation/po/fr.po +++ b/Documentation/po/fr.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: fr\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-06-18 09:15+0200\n" -"PO-Revision-Date: 2009-06-30 19:25+0200\n" +"POT-Creation-Date: 2009-07-06 23:05+0200\n" +"PO-Revision-Date: 2009-08-04 15:30+0200\n" "Last-Translator: Jean-Charles Malahieude \n" "Language-Team: Français \n" "MIME-Version: 1.0\n" @@ -159,7 +159,7 @@ msgstr "post-GDP" #. @node in Documentation/ja/user/lilypond-learning.tely #. @node in Documentation/ja/user/lilypond-program.tely msgid "Top" -msgstr "Sommaire" +msgstr "" #. @top in Documentation/user/lilypond-learning.tely msgid "GNU LilyPond --- Learning Manual" @@ -467,7 +467,7 @@ msgstr "fa est à 4 crans de plus ou 3 de moins, il sera donc en dessous" #. Documentation/user/tutorial.itely:1757 (variable) #. Documentation/user/working.itely:234 (variable) #. Documentation/user/working.itely:249 (variable) -#. Documentation/user/pitches.itely:1120 (context id) +#. Documentation/user/pitches.itely:1132 (context id) msgid "violin" msgstr "violon" @@ -1863,7 +1863,7 @@ msgstr "un" #. Documentation/user/fundamental.itely:1242 (variable) #. Documentation/user/fundamental.itely:2646 (variable) -#. Documentation/user/tweaks.itely:3508 (variable) +#. Documentation/user/tweaks.itely:3518 (variable) #. Documentation/user/simultaneous.itely:784 (variable) #. Documentation/user/percussion.itely:497 (variable) #. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:62 (variable) @@ -1915,37 +1915,37 @@ msgid "SopMusic" msgstr "SopMusique" #. Documentation/user/fundamental.itely:1298 (variable) -#. Documentation/user/tweaks.itely:3510 (variable) +#. Documentation/user/tweaks.itely:3520 (variable) msgid "AltoMusic" msgstr "AltoMusique" #. Documentation/user/fundamental.itely:1299 (variable) -#. Documentation/user/tweaks.itely:3511 (variable) +#. Documentation/user/tweaks.itely:3521 (variable) msgid "TenorMusic" msgstr "TenorMusique" #. Documentation/user/fundamental.itely:1300 (variable) -#. Documentation/user/tweaks.itely:3512 (variable) +#. Documentation/user/tweaks.itely:3522 (variable) msgid "BassMusic" msgstr "BasseMusique" #. Documentation/user/fundamental.itely:1301 (variable) -#. Documentation/user/tweaks.itely:3513 (variable) +#. Documentation/user/tweaks.itely:3523 (variable) msgid "VerseOne" msgstr "CoupletUn" #. Documentation/user/fundamental.itely:1303 (variable) -#. Documentation/user/tweaks.itely:3514 (variable) +#. Documentation/user/tweaks.itely:3524 (variable) msgid "VerseTwo" msgstr "CoupletDeux" #. Documentation/user/fundamental.itely:1305 (variable) -#. Documentation/user/tweaks.itely:3515 (variable) +#. Documentation/user/tweaks.itely:3525 (variable) msgid "VerseThree" msgstr "CoupletTrois" #. Documentation/user/fundamental.itely:1307 (variable) -#. Documentation/user/tweaks.itely:3516 (variable) +#. Documentation/user/tweaks.itely:3526 (variable) msgid "VerseFour" msgstr "CoupletQuatre" @@ -1954,20 +1954,20 @@ msgid "Sop" msgstr "Sop" #. Documentation/user/fundamental.itely:1315 (context id) -#. Documentation/user/tweaks.itely:3523 (context id) -#. Documentation/user/input.itely:961 (context id) +#. Documentation/user/tweaks.itely:3533 (context id) +#. Documentation/user/input.itely:982 (context id) msgid "Alto" msgstr "Alto" #. Documentation/user/fundamental.itely:1323 (context id) -#. Documentation/user/tweaks.itely:3531 (context id) -#. Documentation/user/input.itely:963 (context id) +#. Documentation/user/tweaks.itely:3541 (context id) +#. Documentation/user/input.itely:984 (context id) msgid "Tenor" msgstr "Tenor" #. Documentation/user/fundamental.itely:1324 (context id) -#. Documentation/user/tweaks.itely:3532 (context id) -#. Documentation/user/input.itely:968 (context id) +#. Documentation/user/tweaks.itely:3542 (context id) +#. Documentation/user/input.itely:989 (context id) #. input/lsr/jazz-combo-template.ly:229 (variable) msgid "Bass" msgstr "Basse" @@ -2122,7 +2122,7 @@ msgstr "retour à la taille par défaut" #. Documentation/user/fundamental.itely:2420 (variable) #. Documentation/user/fundamental.itely:2647 (variable) -#. Documentation/user/input.itely:953 (variable) +#. Documentation/user/input.itely:974 (variable) #. input/lsr/orchestra,-choir-and-piano-template.ly:50 (variable) msgid "sopranoMusic" msgstr "sopranoMusique" @@ -2142,7 +2142,7 @@ msgid "sopranoWords" msgstr "sopranoParoles" #. Documentation/user/fundamental.itely:2654 (variable) -#. Documentation/user/input.itely:954 (variable) +#. Documentation/user/input.itely:975 (variable) #. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:60 (variable) #. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:52 (variable) #. input/lsr/vocal-ensemble-template.ly:57 (variable) @@ -2157,7 +2157,7 @@ msgid "altoWords" msgstr "altoParoles" #. Documentation/user/fundamental.itely:2659 (variable) -#. Documentation/user/input.itely:955 (variable) +#. Documentation/user/input.itely:976 (variable) #. input/lsr/orchestra,-choir-and-piano-template.ly:56 (variable) #. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:67 (variable) #. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:59 (variable) @@ -2173,7 +2173,7 @@ msgid "tenorWords" msgstr "tenorParoles" #. Documentation/user/fundamental.itely:2664 (variable) -#. Documentation/user/input.itely:956 (variable) +#. Documentation/user/input.itely:977 (variable) #. input/lsr/orchestra,-choir-and-piano-template.ly:64 (variable) #. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:74 (variable) #. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:66 (variable) @@ -2226,7 +2226,7 @@ msgstr "basses" #. Documentation/user/fundamental.itely:2707 (comment) msgid "end ChoirStaff" -msgstr "fin du ChoirStaff (système pour chœur)" +msgstr "fin du ChoirStaff (système pour chÅ“ur)" #. Documentation/user/fundamental.itely:2865 (variable) msgid "ManualOneVoiceOneMusic" @@ -2354,8 +2354,7 @@ msgstr "Expressions musicales imbriquées" #. Documentation/user/staff.itely:559 (context id) #. Documentation/user/staff.itely:572 (context id) #. Documentation/user/staff.itely:580 (context id) -#. Documentation/user/staff.itely:600 (context id) -#. Documentation/user/staff.itely:613 (context id) +#. Documentation/user/staff.itely:598 (context id) #. @rglos in Documentation/user/staff.itely #. @rglos in Documentation/fr/user/fundamental.itely #. @rglos in Documentation/fr/user/tweaks.itely @@ -2646,208 +2645,208 @@ msgstr "Épaississement de la prochaine liaison seulement" msgid "Revert thickness of all following slurs to default of 1.2" msgstr "Retour à l'épaisseur par défaut de 1,2 pour les prochaines liaisons" -#. Documentation/user/tweaks.itely:1402 (comment) +#. Documentation/user/tweaks.itely:1412 (comment) msgid "Don't print clefs in this staff" msgstr "pas de clef pour cette portée" -#. Documentation/user/tweaks.itely:1404 (comment) +#. Documentation/user/tweaks.itely:1414 (comment) msgid "Don't print time signatures in this staff" msgstr "pas de métrique pour cette portée" -#. Documentation/user/tweaks.itely:1468 (comment) +#. Documentation/user/tweaks.itely:1478 (comment) msgid "Reduce all font sizes by ~24%" msgstr "Réduction d'environ 24 % de toutes les tailles de fonte" -#. Documentation/user/tweaks.itely:1534 (comment) +#. Documentation/user/tweaks.itely:1544 (comment) msgid "Reduce stem length and line spacing to match" msgstr "" "Réduction de la taille des hampes et de l'interligne pour ne pas déborder" -#. Documentation/user/tweaks.itely:1964 (comment) -#. Documentation/user/tweaks.itely:2034 (comment) +#. Documentation/user/tweaks.itely:1974 (comment) +#. Documentation/user/tweaks.itely:2044 (comment) msgid "Set details for later Text Spanner" msgstr "Réglage des détails du texte avec extension" -#. Documentation/user/tweaks.itely:1967 (comment) -#. Documentation/user/tweaks.itely:2037 (comment) +#. Documentation/user/tweaks.itely:1977 (comment) +#. Documentation/user/tweaks.itely:2047 (comment) msgid "Place dynamics above staff" msgstr "Positionnement des nuances au-dessus de la portée" -#. Documentation/user/tweaks.itely:1969 (comment) -#. Documentation/user/tweaks.itely:2041 (comment) +#. Documentation/user/tweaks.itely:1979 (comment) +#. Documentation/user/tweaks.itely:2051 (comment) msgid "Start Ottava Bracket" msgstr "Début du crochet d'octaviation" -#. Documentation/user/tweaks.itely:1972 (comment) -#. Documentation/user/tweaks.itely:1979 (comment) -#. Documentation/user/tweaks.itely:2044 (comment) -#. Documentation/user/tweaks.itely:2051 (comment) +#. Documentation/user/tweaks.itely:1982 (comment) +#. Documentation/user/tweaks.itely:1989 (comment) +#. Documentation/user/tweaks.itely:2054 (comment) +#. Documentation/user/tweaks.itely:2061 (comment) msgid "Add Dynamic Text" msgstr "Ajout d'une nuance textuelle" -#. Documentation/user/tweaks.itely:1974 (comment) -#. Documentation/user/tweaks.itely:2046 (comment) +#. Documentation/user/tweaks.itely:1984 (comment) +#. Documentation/user/tweaks.itely:2056 (comment) msgid "Add Dynamic Line Spanner" msgstr "Ajout d'une nuance graphique" -#. Documentation/user/tweaks.itely:1976 (comment) -#. Documentation/user/tweaks.itely:2048 (comment) +#. Documentation/user/tweaks.itely:1986 (comment) +#. Documentation/user/tweaks.itely:2058 (comment) msgid "Add Text Script" msgstr "Ajout d'un commentaire textuel" -#. Documentation/user/tweaks.itely:1981 (comment) -#. Documentation/user/tweaks.itely:2053 (comment) +#. Documentation/user/tweaks.itely:1991 (comment) +#. Documentation/user/tweaks.itely:2063 (comment) msgid "Stop Ottava Bracket" msgstr "Fin du crochet d'octaviation" -#. Documentation/user/tweaks.itely:2039 (comment) +#. Documentation/user/tweaks.itely:2049 (comment) msgid "Place following Ottava Bracket below Text Spanners" msgstr "Positionnement du crochet d'octaviation sous le texte avec extension" -#. Documentation/user/tweaks.itely:2128 (comment) +#. Documentation/user/tweaks.itely:2138 (comment) msgid "Cause notes to space out to accommodate text" msgstr "Force les notes à s'espacer selon le texte" -#. Documentation/user/tweaks.itely:2151 (comment) +#. Documentation/user/tweaks.itely:2161 (comment) msgid "This markup is short enough to fit without collision" msgstr "Ce morceau de texte est assez court pour ne pas risquer de collision" -#. Documentation/user/tweaks.itely:2155 (comment) +#. Documentation/user/tweaks.itely:2165 (comment) msgid "This is too long to fit, so it is displaced upwards" msgstr "Celui-ci est trop long pour tenir, il est déplacé vers le haut" -#. Documentation/user/tweaks.itely:2159 (comment) -#. Documentation/user/tweaks.itely:2164 (comment) +#. Documentation/user/tweaks.itely:2169 (comment) +#. Documentation/user/tweaks.itely:2174 (comment) msgid "Turn off collision avoidance" msgstr "Désactivation du processus d'évitement de collision" -#. Documentation/user/tweaks.itely:2166 (comment) +#. Documentation/user/tweaks.itely:2176 (comment) msgid "and turn on textLengthOn" msgstr "activation de textLengthOn" -#. Documentation/user/tweaks.itely:2167 (comment) +#. Documentation/user/tweaks.itely:2177 (comment) msgid "Spaces at end are honored" msgstr "Les espaces de la fin sont pris en compte" -#. Documentation/user/tweaks.itely:2274 (comment) +#. Documentation/user/tweaks.itely:2284 (comment) msgid "Extend width by 1 staff space" msgstr "Élargissement d'un espace" -#. Documentation/user/tweaks.itely:2557 (comment) +#. Documentation/user/tweaks.itely:2567 (comment) msgid "This will not work, see below:" msgstr "La commande suivante est sans résultat ; voir plus loin." -#. Documentation/user/tweaks.itely:2561 (comment) +#. Documentation/user/tweaks.itely:2571 (comment) msgid "This works:" msgstr "Celle-ci produit le résultat escompté" -#. Documentation/user/tweaks.itely:2612 (variable) +#. Documentation/user/tweaks.itely:2622 (variable) msgid "naturalplusflat" msgstr "becarreplusbemol" -#. Documentation/user/tweaks.itely:2653 (comment) +#. Documentation/user/tweaks.itely:2663 (comment) msgid "Extend width by 1 unit" msgstr "Élargissement d'une unité" -#. Documentation/user/tweaks.itely:2655 (comment) +#. Documentation/user/tweaks.itely:2665 (comment) msgid "Align dynamics to a base line 2 units above staff" msgstr "" "Alignement des nuances sur une ligne de base à 2 unités au-dessus de la " "portée" -#. Documentation/user/tweaks.itely:2959 (variable) -#. Documentation/user/tweaks.itely:3008 (variable) -#. Documentation/user/tweaks.itely:3069 (variable) -#. Documentation/user/tweaks.itely:3139 (variable) -#. Documentation/user/tweaks.itely:3204 (variable) -#. Documentation/user/tweaks.itely:3264 (variable) +#. Documentation/user/tweaks.itely:2969 (variable) +#. Documentation/user/tweaks.itely:3018 (variable) +#. Documentation/user/tweaks.itely:3079 (variable) +#. Documentation/user/tweaks.itely:3149 (variable) +#. Documentation/user/tweaks.itely:3214 (variable) +#. Documentation/user/tweaks.itely:3274 (variable) msgid "rhMusic" msgstr "mdMusique" -#. Documentation/user/tweaks.itely:2964 (comment) -#. Documentation/user/tweaks.itely:3013 (comment) -#. Documentation/user/tweaks.itely:3076 (comment) -#. Documentation/user/tweaks.itely:3148 (comment) -#. Documentation/user/tweaks.itely:3213 (comment) +#. Documentation/user/tweaks.itely:2974 (comment) +#. Documentation/user/tweaks.itely:3023 (comment) +#. Documentation/user/tweaks.itely:3086 (comment) +#. Documentation/user/tweaks.itely:3158 (comment) +#. Documentation/user/tweaks.itely:3223 (comment) msgid "Start polyphonic section of four voices" msgstr "Début d'une section polyphonique de quatre voix" -#. Documentation/user/tweaks.itely:2977 (variable) -#. Documentation/user/tweaks.itely:3026 (variable) -#. Documentation/user/tweaks.itely:3089 (variable) -#. Documentation/user/tweaks.itely:3163 (variable) -#. Documentation/user/tweaks.itely:3230 (variable) -#. Documentation/user/tweaks.itely:3292 (variable) +#. Documentation/user/tweaks.itely:2987 (variable) +#. Documentation/user/tweaks.itely:3036 (variable) +#. Documentation/user/tweaks.itely:3099 (variable) +#. Documentation/user/tweaks.itely:3173 (variable) +#. Documentation/user/tweaks.itely:3240 (variable) +#. Documentation/user/tweaks.itely:3302 (variable) msgid "lhMusic" msgstr "mgMusique" -#. Documentation/user/tweaks.itely:2986 (context id) -#. Documentation/user/tweaks.itely:3035 (context id) -#. Documentation/user/tweaks.itely:3098 (context id) -#. Documentation/user/tweaks.itely:3172 (context id) -#. Documentation/user/tweaks.itely:3239 (context id) -#. Documentation/user/tweaks.itely:3301 (context id) -#. Documentation/user/input.itely:974 (context id) +#. Documentation/user/tweaks.itely:2996 (context id) +#. Documentation/user/tweaks.itely:3045 (context id) +#. Documentation/user/tweaks.itely:3108 (context id) +#. Documentation/user/tweaks.itely:3182 (context id) +#. Documentation/user/tweaks.itely:3249 (context id) +#. Documentation/user/tweaks.itely:3311 (context id) +#. Documentation/user/input.itely:995 (context id) msgid "RH" msgstr "MD" -#. Documentation/user/tweaks.itely:2990 (context id) -#. Documentation/user/tweaks.itely:3039 (context id) -#. Documentation/user/tweaks.itely:3102 (context id) -#. Documentation/user/tweaks.itely:3176 (context id) -#. Documentation/user/tweaks.itely:3243 (context id) -#. Documentation/user/tweaks.itely:3305 (context id) -#. Documentation/user/input.itely:980 (context id) +#. Documentation/user/tweaks.itely:3000 (context id) +#. Documentation/user/tweaks.itely:3049 (context id) +#. Documentation/user/tweaks.itely:3112 (context id) +#. Documentation/user/tweaks.itely:3186 (context id) +#. Documentation/user/tweaks.itely:3253 (context id) +#. Documentation/user/tweaks.itely:3315 (context id) +#. Documentation/user/input.itely:1001 (context id) msgid "LH" msgstr "MG" -#. Documentation/user/tweaks.itely:3217 (comment) -#. Documentation/user/tweaks.itely:3279 (comment) +#. Documentation/user/tweaks.itely:3227 (comment) +#. Documentation/user/tweaks.itely:3289 (comment) msgid "Move the c2 out of the main note column so the merge will work" msgstr "Déplace le do2 pour que la fusion puisse fonctionner" -#. Documentation/user/tweaks.itely:3220 (comment) -#. Documentation/user/tweaks.itely:3282 (comment) +#. Documentation/user/tweaks.itely:3230 (comment) +#. Documentation/user/tweaks.itely:3292 (comment) msgid "Stem on the d2 must be down to permit merging" msgstr "La hampe du ré2 ira vers le bas pour permettre la fusion" -#. Documentation/user/tweaks.itely:3277 (comment) +#. Documentation/user/tweaks.itely:3287 (comment) msgid "Reposition the c2 to the right of the merged note" msgstr "Repositionnement du do2 à droite de la note fusionnée" -#. Documentation/user/tweaks.itely:3413 (comment) -#. Documentation/user/tweaks.itely:3435 (comment) +#. Documentation/user/tweaks.itely:3423 (comment) +#. Documentation/user/tweaks.itely:3445 (comment) msgid "Visible tempo marking" msgstr "Indication de tempo visible" -#. Documentation/user/tweaks.itely:3417 (comment) -#. Documentation/user/tweaks.itely:3439 (comment) +#. Documentation/user/tweaks.itely:3427 (comment) +#. Documentation/user/tweaks.itely:3449 (comment) msgid "Invisible tempo marking to lengthen fermata in MIDI" msgstr "Indication de tempo invisible ; utilisée pour le MIDI" -#. Documentation/user/tweaks.itely:3420 (comment) -#. Documentation/user/tweaks.itely:3442 (comment) +#. Documentation/user/tweaks.itely:3430 (comment) +#. Documentation/user/tweaks.itely:3452 (comment) msgid "New tempo for next section" msgstr "Nouveau tempo pour la section suivante" -#. Documentation/user/tweaks.itely:3499 (variable) +#. Documentation/user/tweaks.itely:3509 (variable) msgid "emphasize" msgstr "emphase" -#. Documentation/user/tweaks.itely:3503 (variable) +#. Documentation/user/tweaks.itely:3513 (variable) msgid "normal" msgstr "normal" -#. Documentation/user/tweaks.itely:3509 (variable) +#. Documentation/user/tweaks.itely:3519 (variable) msgid "SopranoMusic" msgstr "SopranoMusique" -#. Documentation/user/tweaks.itely:3522 (context id) -#. Documentation/user/input.itely:959 (context id) +#. Documentation/user/tweaks.itely:3532 (context id) +#. Documentation/user/input.itely:980 (context id) msgid "Soprano" msgstr "Soprano" -#. Documentation/user/tweaks.itely:3731 (comment) +#. Documentation/user/tweaks.itely:3741 (comment) msgid "Arrange to obtain color from color-notehead procedure" msgstr "Arranger pour obtenir une couleur par la procédure color-notehead" @@ -3399,7 +3398,7 @@ msgstr "dolce" #. Documentation/user/working.itely:247 (variable) #. Documentation/user/working.itely:296 (variable) -#. Documentation/user/scheme-tutorial.itely:235 (variable) +#. Documentation/user/scheme-tutorial.itely:282 (variable) #. Documentation/user/programming-interface.itely:101 (variable) msgid "padText" msgstr "decallageTexte" @@ -3433,6 +3432,8 @@ msgstr "Travail sur des projets LilyPond" #. @section in Documentation/user/working.itely #. @node in Documentation/fr/user/working.itely #. @section in Documentation/fr/user/working.itely +#. @node in Documentation/es/user/working.itely +#. @section in Documentation/es/user/working.itely #. @node in Documentation/de/user/working.itely #. @section in Documentation/de/user/working.itely #. @node in Documentation/ja/user/working.itely @@ -3527,6 +3528,29 @@ msgstr "Quand ça ne fonctionne pas" msgid "Updating old input files" msgstr "Mise à jour d'anciens fichiers" +#. @node in Documentation/user/working.itely +#. @subsection in Documentation/user/working.itely +msgid "Common errors" +msgstr "Quelques erreurs des plus courantes" + +#. @node in Documentation/user/working.itely +#. @unnumberedsubsubsec in Documentation/user/working.itely +msgid "Music runs off the page" +msgstr "La musique déborde de la page" + +#. @node in Documentation/user/working.itely +msgid "Apparent error in ../ly/init.ly" +msgstr "Erreur renvoyant à ../ly/init.ly" + +#. @unnumberedsubsubsec in Documentation/user/working.itely +msgid "Apparent error in @code{../ly/init.ly}" +msgstr "Erreur renvoyant à @code{../ly/init.ly}" + +#. @node in Documentation/user/working.itely +#. @unnumberedsubsubsec in Documentation/user/working.itely +msgid "Error message Unbound variable %" +msgstr "Message d'erreur « Unbound variable % »" + #. @node in Documentation/user/working.itely #. @subsection in Documentation/user/working.itely #. @node in Documentation/fr/user/working.itely @@ -3568,6 +3592,10 @@ msgstr "Conducteurs et parties" #. @node in Documentation/user/working.itely #. @section in Documentation/user/working.itely +#. @node in Documentation/es/user/working.itely +#. @section in Documentation/es/user/working.itely +#. @node in Documentation/de/user/working.itely +#. @section in Documentation/de/user/working.itely msgid "Make and Makefiles" msgstr "De la commande @command{make} et des fichiers @code{Makefile}" @@ -3719,7 +3747,7 @@ msgstr "Ensemble vocal" #. @appendixsubsec in Documentation/de/user/templates.itely #. @appendixsubsec in Documentation/ja/user/templates.itely msgid "SATB vocal score" -msgstr "Partition pour chœur à quatre voix mixtes" +msgstr "Partition pour chÅ“ur à quatre voix mixtes" #. @appendixsubsec in Documentation/user/templates.itely #. @appendixsubsec in Documentation/fr/user/templates.itely @@ -3727,7 +3755,7 @@ msgstr "Partition pour chœur à quatre voix mixtes" #. @appendixsubsec in Documentation/de/user/templates.itely #. @appendixsubsec in Documentation/ja/user/templates.itely msgid "SATB vocal score and automatic piano reduction" -msgstr "Partition pour chœur SATB avec réduction pour piano" +msgstr "Partition pour chÅ“ur SATB avec réduction pour piano" #. @appendixsubsec in Documentation/user/templates.itely #. @appendixsubsec in Documentation/fr/user/templates.itely @@ -3735,7 +3763,7 @@ msgstr "Partition pour chœur SATB avec réduction pour piano" #. @appendixsubsec in Documentation/de/user/templates.itely #. @appendixsubsec in Documentation/ja/user/templates.itely msgid "SATB with aligned contexts" -msgstr "Partition pour chœur SATB avec alignement des contextes" +msgstr "Partition pour chÅ“ur SATB avec alignement des contextes" #. @node in Documentation/user/templates.itely #. @appendixsec in Documentation/user/templates.itely @@ -3750,7 +3778,7 @@ msgstr "Modèles pour orchestre" #. @appendixsubsec in Documentation/es/user/templates.itely #. @appendixsubsec in Documentation/de/user/templates.itely msgid "Orchestra, choir and piano" -msgstr "Orchestre, chœur et piano" +msgstr "Orchestre, chÅ“ur et piano" #. @node in Documentation/user/templates.itely #. @appendixsec in Documentation/user/templates.itely @@ -3849,12 +3877,12 @@ msgstr "Texinfo" msgid "xelatex" msgstr "xelatex" -#. Documentation/user/scheme-tutorial.itely:257 (variable) +#. Documentation/user/scheme-tutorial.itely:304 (variable) #. Documentation/user/programming-interface.itely:135 (variable) msgid "tempoPadded" msgstr "tempoDecale" -#. Documentation/user/scheme-tutorial.itely:276 (variable) +#. Documentation/user/scheme-tutorial.itely:323 (variable) msgid "pattern" msgstr "motif" @@ -4328,6 +4356,14 @@ msgstr "Mise à jour des fichiers avec convert-ly" msgid "Updating files with @command{convert-ly}" msgstr "Mise à jour des fichiers avec @command{convert-ly}" +#. @node in Documentation/user/running.itely +msgid "Invoking convert-ly" +msgstr "Utilisation de convert-ly" + +#. @subsection in Documentation/user/running.itely +msgid "Invoking @command{convert-ly}" +msgstr "Utilisation de @command{convert-ly}" + #. @node in Documentation/user/running.itely #. @node in Documentation/es/user/running.itely #. @node in Documentation/de/user/running.itely @@ -4753,11 +4789,11 @@ msgstr "Index des commandes LilyPond" msgid "Musical notation" msgstr "Notation musicale générale" -#. Documentation/user/pitches.itely:730 (variable) -#. Documentation/user/input.itely:1043 (variable) -#. Documentation/user/input.itely:1062 (variable) -#. Documentation/user/input.itely:1099 (variable) -#. Documentation/user/input.itely:1114 (variable) +#. Documentation/user/pitches.itely:732 (variable) +#. Documentation/user/input.itely:1064 (variable) +#. Documentation/user/input.itely:1083 (variable) +#. Documentation/user/input.itely:1120 (variable) +#. Documentation/user/input.itely:1135 (variable) #. Documentation/user/changing-defaults.itely:453 (variable) #. Documentation/user/changing-defaults.itely:488 (context id) #. Documentation/user/changing-defaults.itely:538 (context id) @@ -4770,26 +4806,26 @@ msgstr "Notation musicale générale" msgid "music" msgstr "musique" -#. Documentation/user/pitches.itely:1124 (comment) +#. Documentation/user/pitches.itely:1136 (comment) msgid "not strictly necessary, but a good reminder" msgstr "pas strictement nécessaire, mais en pense-bête" -#. Documentation/user/pitches.itely:1131 (context id) -#. Documentation/user/staff.itely:1121 (variable) +#. Documentation/user/pitches.itely:1143 (context id) +#. Documentation/user/staff.itely:1117 (variable) msgid "clarinet" msgstr "clarinette" -#. Documentation/user/pitches.itely:1216 (variable) +#. Documentation/user/pitches.itely:1228 (variable) #. Documentation/user/changing-defaults.itely:444 (variable) msgid "musicA" msgstr "musiqueA" -#. Documentation/user/pitches.itely:1230 (variable) +#. Documentation/user/pitches.itely:1242 (variable) #. Documentation/user/changing-defaults.itely:445 (variable) msgid "musicB" msgstr "musiqueB" -#. Documentation/user/pitches.itely:1249 (context id) +#. Documentation/user/pitches.itely:1261 (context id) #. Documentation/user/keyboards.itely:179 (context id) #. Documentation/user/keyboards.itely:279 (context id) #. Documentation/user/percussion.itely:175 (variable) @@ -4798,7 +4834,7 @@ msgstr "musiqueB" msgid "up" msgstr "haut" -#. Documentation/user/pitches.itely:1253 (context id) +#. Documentation/user/pitches.itely:1265 (context id) #. Documentation/user/keyboards.itely:189 (context id) #. Documentation/user/keyboards.itely:288 (context id) #. Documentation/user/percussion.itely:178 (variable) @@ -5177,9 +5213,7 @@ msgstr "Fonctionne car le contexte est spécifié" #. Documentation/user/rhythms.itely:1857 (comment) msgid "undo a rule ending 1/16 beams in 4/4 time at 1/4 moment" -msgstr "" -"annulation de la règle de fin de ligature des doubles croches, dans une " -"mesure à 4/4, au moment de la première noire" +msgstr "annulation de la règle de fin de ligature des doubles croches, dans un 4/4, sur la première noire" #. Documentation/user/rhythms.itely:1870 (comment) msgid "this won't revert it!" @@ -6064,24 +6098,24 @@ msgstr "partie" msgid "Writing music in parallel" msgstr "Saisie de musique en parallèle" -#. Documentation/user/staff.itely:1090 (variable) -#. Documentation/user/staff.itely:1105 (variable) -#. Documentation/user/staff.itely:1273 (variable) +#. Documentation/user/staff.itely:1086 (variable) +#. Documentation/user/staff.itely:1101 (variable) +#. Documentation/user/staff.itely:1269 (variable) msgid "flute" msgstr "flute" -#. Documentation/user/staff.itely:1215 (variable) -#. Documentation/user/staff.itely:1236 (variable) +#. Documentation/user/staff.itely:1211 (variable) +#. Documentation/user/staff.itely:1232 (variable) msgid "oboe" msgstr "hautbois" -#. Documentation/user/staff.itely:1294 (variable) -#. Documentation/user/staff.itely:1310 (context id) +#. Documentation/user/staff.itely:1290 (variable) +#. Documentation/user/staff.itely:1306 (context id) msgid "piccolo" msgstr "piccolo" -#. Documentation/user/staff.itely:1302 (variable) -#. Documentation/user/staff.itely:1311 (context id) +#. Documentation/user/staff.itely:1298 (variable) +#. Documentation/user/staff.itely:1307 (context id) msgid "cbassoon" msgstr "cbasson" @@ -8317,11 +8351,11 @@ msgstr "Exemple concret de musique arabe" msgid "Further reading" msgstr "Autres sources d'information" -#. Documentation/user/input.itely:525 (comment) +#. Documentation/user/input.itely:546 (comment) msgid "not printed" msgstr "non imprimé" -#. Documentation/user/input.itely:957 (variable) +#. Documentation/user/input.itely:978 (variable) msgid "allLyrics" msgstr "tuttiParoles" @@ -9397,7 +9431,7 @@ msgstr "Vue d'ensemble de la modification des propriétés" #. @node in Documentation/es/user/changing-defaults.itely #. @node in Documentation/de/user/changing-defaults.itely msgid "The set command" -msgstr "La commande de fixation (@emph{set})" +msgstr "La commande de fixation (set)" #. @subsection in Documentation/user/changing-defaults.itely #. @subsection in Documentation/fr/user/changing-defaults.itely @@ -10544,11 +10578,6 @@ msgstr "" msgid "Automatic behaviour" msgstr "Comportement automatique" -#. @node in Documentation/es/user/working.itely -#. @section in Documentation/es/user/working.itely -msgid "Suggestions for writing LilyPond files" -msgstr "Suggestions de saisie des fichiers LilyPond" - #. @node in Documentation/es/user/working.itely #. @subsection in Documentation/es/user/working.itely #. @node in Documentation/de/user/working.itely @@ -10590,11 +10619,11 @@ msgid "Ignorieren von Melismen" msgstr "Désactivation du traitement des mélismes" #. @top in Documentation/ja/user/lilypond-learning.tely -msgid "GNU LilyPond --- 学習マニュアル" +msgid "GNU LilyPond --- 孊習マニãï¿œã˘ãĞ" msgstr "" #. @top in Documentation/ja/user/lilypond-program.tely -msgid "GNU LilyPond --- アプリケーション使用方法" +msgid "GNU LilyPond --- ã˘プãŞãąãĵãˇã§ã³䜿çᅵᅵ³Â•" msgstr "" #. input/lsr/accordion-discant-symbols.ly:36 (variable) @@ -11193,7 +11222,9 @@ msgstr "Notation moderne :" #. input/lsr/breathing-signs.ly:22 (comment) msgid "by default, \\breathe uses the rcomma, just as if saying:" -msgstr "par défaut, \\breathe produit un @code{rcomma} (virgule vers la droite) comme si l'on avait : " +msgstr "" +"par défaut, \\breathe produit un @code{rcomma} (virgule vers la droite) " +"comme si l'on avait : " #. input/lsr/breathing-signs.ly:23 (comment) msgid "" @@ -11424,7 +11455,8 @@ msgstr "taille 1,0" #. input/lsr/fret-diagrams-explained-and-developed.ly:157 (comment) #. input/lsr/fret-diagrams-explained-and-developed.ly:256 (comment) msgid "roman fret label, finger labels below string, straight barre" -msgstr "indication de fret en chiffre romain, doigté sous la corde, barré rectiligne" +msgstr "" +"indication de fret en chiffre romain, doigté sous la corde, barré rectiligne" #. input/lsr/customizing-markup-fret-diagrams.ly:71 (comment) msgid "standard size" @@ -11436,7 +11468,9 @@ msgstr "orientation à l'italienne, chiffres arabes, M pour corde étoufée" #. input/lsr/customizing-markup-fret-diagrams.ly:91 (comment) msgid "no barre, fret label down or left, small mute label font" -msgstr "sans barré, indication de fret en bas ou à gauche, petite indication d'étouffé" +msgstr "" +"sans barré, indication de fret en bas ou à gauche, petite indication " +"d'étouffé" #. input/lsr/customizing-markup-fret-diagrams.ly:112 (comment) #. input/lsr/fret-diagrams-explained-and-developed.ly:127 (comment) @@ -11507,7 +11541,7 @@ msgstr "" #. input/lsr/demo-midiinstruments.ly:23 (variable) msgid "baseMelody" -msgstr "" +msgstr "baseMelodique" #. input/lsr/display-bracket-with-only-one-staff-in-a-system.ly:55 (comment) msgid "Must be lower than the actual number of staff lines" @@ -12399,11 +12433,11 @@ msgstr "pedale" #. input/lsr/piano-template-with-centered-dynamics.ly:74 (comment) msgid "define Dynamics context" -msgstr "" +msgstr "personnalisation des contextes de nuance (Dynamics)" #. input/lsr/piano-template-with-centered-dynamics.ly:95 (comment) msgid "modify PianoStaff context to accept Dynamics context" -msgstr "" +msgstr "affectation des contextes de nuance personnalisés au PianoStaff" #. input/lsr/polyphony-in-tablature.ly:56 (context id) msgid "tab" @@ -12427,11 +12461,13 @@ msgstr "la dérogation qui suit repositionne le silence sur la ligne médiane" #. input/lsr/positioning-multi-measure-rests.ly:66 (comment) msgid "Multi-measure rests in odd-numbered voices are under the top line" -msgstr "Les silences multi-mesures des voix impaires sont attachés à la ligne du haut" +msgstr "" +"Les silences multi-mesures des voix impaires sont attachés à la ligne du haut" #. input/lsr/positioning-multi-measure-rests.ly:68 (comment) msgid "Multi-measure rests in even-numbered voices are under the bottom line" -msgstr "Les silences multi-mesures des voix paires sont attachés à la ligne du bas" +msgstr "" +"Les silences multi-mesures des voix paires sont attachés à la ligne du bas" #. input/lsr/positioning-multi-measure-rests.ly:70 (comment) msgid "They remain separated even in empty measures" @@ -12439,7 +12475,8 @@ msgstr "Il y en aura deux, même si la mesure est absolument vide" #. input/lsr/positioning-multi-measure-rests.ly:72 (comment) msgid "This brings them together even though there are two voices" -msgstr "Voici ce qui les fusionnera même s'ils appartiennent à deux voix différentes" +msgstr "" +"Voici ce qui les fusionnera même s'ils appartiennent à deux voix différentes" #. input/lsr/positioning-segno-and-coda-with-line-break.ly:28 (comment) #. input/lsr/positioning-segno-and-coda-with-line-break.ly:49 (comment) @@ -12639,14 +12676,14 @@ msgstr "original" # ça c'est ben vrai ! #. input/lsr/redefining-grace-note-global-defaults.ly:49 (variable) msgid "startAcciaccaturaMusic" -msgstr "" +msgstr "ouvreAcciacature" # ça existe ce terme en français ? # ça vient directement de l'italien comme appogiature # ça c'est ben vrai ! #. input/lsr/redefining-grace-note-global-defaults.ly:55 (variable) msgid "stopAcciaccaturaMusic" -msgstr "" +msgstr "fermeAcciacature" #. input/lsr/removing-the-first-empty-line.ly:60 (comment) msgid "To use the setting globally, uncomment the following line:" @@ -13068,11 +13105,11 @@ msgstr "" msgid "" "\\include \\\"piece.ly\\\" %%% uncomment this line when using a " "separate file" -msgstr "" +msgstr "\\include \\\"piece.ly\\\" %%% décommenter cette ligne si utilisation d'un fichier séparé pour les notes" #. input/lsr/string-quartet-template-with-separate-parts.ly:139 (comment) msgid "{ Uncomment this block when using separate files" -msgstr "" +msgstr "garder ce bloc en commentaire si chaque pupitre fait l'objet d'un fichier séparé" #. input/lsr/string-quartet-template-with-separate-parts.ly:141 (comment) msgid "vn1.ly" @@ -13080,7 +13117,7 @@ msgstr "vn1.ly" #. input/lsr/string-quartet-template-with-separate-parts.ly:142 (comment) msgid "(This is the Violin 1 part file)" -msgstr "" +msgstr "La partition pour le premier violon" #. input/lsr/string-quartet-template-with-separate-parts.ly:151 (comment) msgid "vn2.ly" @@ -13088,7 +13125,7 @@ msgstr "vn2.ly" #. input/lsr/string-quartet-template-with-separate-parts.ly:152 (comment) msgid "(This is the Violin 2 part file)" -msgstr "" +msgstr "La partition pour le second violon" #. input/lsr/string-quartet-template-with-separate-parts.ly:161 (comment) msgid "vla.ly" @@ -13096,7 +13133,7 @@ msgstr "vla.ly" #. input/lsr/string-quartet-template-with-separate-parts.ly:162 (comment) msgid "(This is the Viola part file)" -msgstr "" +msgstr "La partition pour l'alto" #. input/lsr/string-quartet-template-with-separate-parts.ly:171 (comment) msgid "vlc.ly" @@ -13104,7 +13141,7 @@ msgstr "vcl.ly" #. input/lsr/string-quartet-template-with-separate-parts.ly:172 (comment) msgid "(This is the Cello part file)" -msgstr "" +msgstr "La partition pour le violoncelle" #. input/lsr/sub-dividing-beams.ly:82 (comment) msgid "Set beam sub-group length to an eighth note" @@ -13253,7 +13290,8 @@ msgstr "3+3+2+3=11, mais 11*1/16<>3/4, beatGrouping ne peut donc s'appliquer," #. input/lsr/using-beatlength-and-beatgrouping.ly:80 (comment) msgid "and beams are grouped at beatLength (1/16) intervals" -msgstr "et les ligatures sont générées sur la base de beatLength (double croche)" +msgstr "" +"et les ligatures sont générées sur la base de beatLength (double croche)" #. input/lsr/using-beatlength-and-beatgrouping.ly:85 (comment) msgid "Specify beams in groups of (3 4 2 3) 1/16th notes" @@ -13429,6 +13467,9 @@ msgstr "Notes de bas de page" msgid "Table of Contents" msgstr "Table des matières" +#~ msgid "Suggestions for writing LilyPond files" +#~ msgstr "Suggestions de saisie des fichiers LilyPond" + #~ msgid "Right-align bar numbers" #~ msgstr "Alignement à droite des numéros de mesure" diff --git a/Documentation/po/ja.po b/Documentation/po/ja.po index 4fdbaa47dd..a6bdd5f748 100644 --- a/Documentation/po/ja.po +++ b/Documentation/po/ja.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ja\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-06-18 09:15+0200\n" +"POT-Creation-Date: 2009-07-06 23:05+0200\n" "PO-Revision-Date: 2009-01-15 13:24+0900\n" "Last-Translator: Yoshiki Sawada \n" "Language-Team: 日本語 \n" @@ -473,7 +473,7 @@ msgstr "f は 4 譜表スペース上あるいは 3 譜表スペース下なの #. Documentation/user/tutorial.itely:1757 (variable) #. Documentation/user/working.itely:234 (variable) #. Documentation/user/working.itely:249 (variable) -#. Documentation/user/pitches.itely:1120 (context id) +#. Documentation/user/pitches.itely:1132 (context id) msgid "violin" msgstr "" @@ -1881,7 +1881,7 @@ msgstr "" #. Documentation/user/fundamental.itely:1242 (variable) #. Documentation/user/fundamental.itely:2646 (variable) -#. Documentation/user/tweaks.itely:3508 (variable) +#. Documentation/user/tweaks.itely:3518 (variable) #. Documentation/user/simultaneous.itely:784 (variable) #. Documentation/user/percussion.itely:497 (variable) #. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:62 (variable) @@ -1933,37 +1933,37 @@ msgid "SopMusic" msgstr "" #. Documentation/user/fundamental.itely:1298 (variable) -#. Documentation/user/tweaks.itely:3510 (variable) +#. Documentation/user/tweaks.itely:3520 (variable) msgid "AltoMusic" msgstr "" #. Documentation/user/fundamental.itely:1299 (variable) -#. Documentation/user/tweaks.itely:3511 (variable) +#. Documentation/user/tweaks.itely:3521 (variable) msgid "TenorMusic" msgstr "" #. Documentation/user/fundamental.itely:1300 (variable) -#. Documentation/user/tweaks.itely:3512 (variable) +#. Documentation/user/tweaks.itely:3522 (variable) msgid "BassMusic" msgstr "" #. Documentation/user/fundamental.itely:1301 (variable) -#. Documentation/user/tweaks.itely:3513 (variable) +#. Documentation/user/tweaks.itely:3523 (variable) msgid "VerseOne" msgstr "" #. Documentation/user/fundamental.itely:1303 (variable) -#. Documentation/user/tweaks.itely:3514 (variable) +#. Documentation/user/tweaks.itely:3524 (variable) msgid "VerseTwo" msgstr "" #. Documentation/user/fundamental.itely:1305 (variable) -#. Documentation/user/tweaks.itely:3515 (variable) +#. Documentation/user/tweaks.itely:3525 (variable) msgid "VerseThree" msgstr "" #. Documentation/user/fundamental.itely:1307 (variable) -#. Documentation/user/tweaks.itely:3516 (variable) +#. Documentation/user/tweaks.itely:3526 (variable) msgid "VerseFour" msgstr "" @@ -1972,20 +1972,20 @@ msgid "Sop" msgstr "" #. Documentation/user/fundamental.itely:1315 (context id) -#. Documentation/user/tweaks.itely:3523 (context id) -#. Documentation/user/input.itely:961 (context id) +#. Documentation/user/tweaks.itely:3533 (context id) +#. Documentation/user/input.itely:982 (context id) msgid "Alto" msgstr "" #. Documentation/user/fundamental.itely:1323 (context id) -#. Documentation/user/tweaks.itely:3531 (context id) -#. Documentation/user/input.itely:963 (context id) +#. Documentation/user/tweaks.itely:3541 (context id) +#. Documentation/user/input.itely:984 (context id) msgid "Tenor" msgstr "" #. Documentation/user/fundamental.itely:1324 (context id) -#. Documentation/user/tweaks.itely:3532 (context id) -#. Documentation/user/input.itely:968 (context id) +#. Documentation/user/tweaks.itely:3542 (context id) +#. Documentation/user/input.itely:989 (context id) #. input/lsr/jazz-combo-template.ly:229 (variable) msgid "Bass" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "デフォルトのサイズに戻す" #. Documentation/user/fundamental.itely:2420 (variable) #. Documentation/user/fundamental.itely:2647 (variable) -#. Documentation/user/input.itely:953 (variable) +#. Documentation/user/input.itely:974 (variable) #. input/lsr/orchestra,-choir-and-piano-template.ly:50 (variable) msgid "sopranoMusic" msgstr "" @@ -2160,7 +2160,7 @@ msgid "sopranoWords" msgstr "" #. Documentation/user/fundamental.itely:2654 (variable) -#. Documentation/user/input.itely:954 (variable) +#. Documentation/user/input.itely:975 (variable) #. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:60 (variable) #. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:52 (variable) #. input/lsr/vocal-ensemble-template.ly:57 (variable) @@ -2175,7 +2175,7 @@ msgid "altoWords" msgstr "" #. Documentation/user/fundamental.itely:2659 (variable) -#. Documentation/user/input.itely:955 (variable) +#. Documentation/user/input.itely:976 (variable) #. input/lsr/orchestra,-choir-and-piano-template.ly:56 (variable) #. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:67 (variable) #. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:59 (variable) @@ -2191,7 +2191,7 @@ msgid "tenorWords" msgstr "" #. Documentation/user/fundamental.itely:2664 (variable) -#. Documentation/user/input.itely:956 (variable) +#. Documentation/user/input.itely:977 (variable) #. input/lsr/orchestra,-choir-and-piano-template.ly:64 (variable) #. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:74 (variable) #. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:66 (variable) @@ -2373,8 +2373,7 @@ msgstr "音楽表記のネスト" #. Documentation/user/staff.itely:559 (context id) #. Documentation/user/staff.itely:572 (context id) #. Documentation/user/staff.itely:580 (context id) -#. Documentation/user/staff.itely:600 (context id) -#. Documentation/user/staff.itely:613 (context id) +#. Documentation/user/staff.itely:598 (context id) #. @rglos in Documentation/user/staff.itely #. @rglos in Documentation/fr/user/fundamental.itely #. @rglos in Documentation/fr/user/tweaks.itely @@ -2665,205 +2664,205 @@ msgstr "直後にあるスラーの太さだけを増やします" msgid "Revert thickness of all following slurs to default of 1.2" msgstr "後に続くすべてのスラーの太さをデフォルトの 1.2 に戻します" -#. Documentation/user/tweaks.itely:1402 (comment) +#. Documentation/user/tweaks.itely:1412 (comment) msgid "Don't print clefs in this staff" msgstr "この譜表には音部記号を譜刻しません" -#. Documentation/user/tweaks.itely:1404 (comment) +#. Documentation/user/tweaks.itely:1414 (comment) msgid "Don't print time signatures in this staff" msgstr "この譜表には拍子記号を譜刻しません" -#. Documentation/user/tweaks.itely:1468 (comment) +#. Documentation/user/tweaks.itely:1478 (comment) msgid "Reduce all font sizes by ~24%" msgstr "すべてのフォント サイズを約 24% 減らします" -#. Documentation/user/tweaks.itely:1534 (comment) +#. Documentation/user/tweaks.itely:1544 (comment) msgid "Reduce stem length and line spacing to match" msgstr "釣り合いをとるためにステムの長さと譜表線の間隔を減らします" -#. Documentation/user/tweaks.itely:1964 (comment) -#. Documentation/user/tweaks.itely:2034 (comment) +#. Documentation/user/tweaks.itely:1974 (comment) +#. Documentation/user/tweaks.itely:2044 (comment) msgid "Set details for later Text Spanner" msgstr "後のテキスト スパナのための詳細を設定" -#. Documentation/user/tweaks.itely:1967 (comment) -#. Documentation/user/tweaks.itely:2037 (comment) +#. Documentation/user/tweaks.itely:1977 (comment) +#. Documentation/user/tweaks.itely:2047 (comment) msgid "Place dynamics above staff" msgstr "譜表の上に強弱記号を配置" -#. Documentation/user/tweaks.itely:1969 (comment) -#. Documentation/user/tweaks.itely:2041 (comment) +#. Documentation/user/tweaks.itely:1979 (comment) +#. Documentation/user/tweaks.itely:2051 (comment) msgid "Start Ottava Bracket" msgstr "オッターバ囲みの開始" -#. Documentation/user/tweaks.itely:1972 (comment) -#. Documentation/user/tweaks.itely:1979 (comment) -#. Documentation/user/tweaks.itely:2044 (comment) -#. Documentation/user/tweaks.itely:2051 (comment) +#. Documentation/user/tweaks.itely:1982 (comment) +#. Documentation/user/tweaks.itely:1989 (comment) +#. Documentation/user/tweaks.itely:2054 (comment) +#. Documentation/user/tweaks.itely:2061 (comment) msgid "Add Dynamic Text" msgstr "強弱記号テキストの追加" -#. Documentation/user/tweaks.itely:1974 (comment) -#. Documentation/user/tweaks.itely:2046 (comment) +#. Documentation/user/tweaks.itely:1984 (comment) +#. Documentation/user/tweaks.itely:2056 (comment) msgid "Add Dynamic Line Spanner" msgstr "強弱記号線スパナの追加" -#. Documentation/user/tweaks.itely:1976 (comment) -#. Documentation/user/tweaks.itely:2048 (comment) +#. Documentation/user/tweaks.itely:1986 (comment) +#. Documentation/user/tweaks.itely:2058 (comment) msgid "Add Text Script" msgstr "テキスト スクリプトの追加" -#. Documentation/user/tweaks.itely:1981 (comment) -#. Documentation/user/tweaks.itely:2053 (comment) +#. Documentation/user/tweaks.itely:1991 (comment) +#. Documentation/user/tweaks.itely:2063 (comment) msgid "Stop Ottava Bracket" msgstr "オッターバ囲みの終了" -#. Documentation/user/tweaks.itely:2039 (comment) +#. Documentation/user/tweaks.itely:2049 (comment) msgid "Place following Ottava Bracket below Text Spanners" msgstr "以下のオッターバ囲みをテキスト スパナの下に配置" -#. Documentation/user/tweaks.itely:2128 (comment) +#. Documentation/user/tweaks.itely:2138 (comment) msgid "Cause notes to space out to accommodate text" msgstr "テキストに合わせて音符の間隔を広げます" -#. Documentation/user/tweaks.itely:2151 (comment) +#. Documentation/user/tweaks.itely:2161 (comment) msgid "This markup is short enough to fit without collision" msgstr "このマークアップは短いため、衝突を起こさずにぴったりと収まります" -#. Documentation/user/tweaks.itely:2155 (comment) +#. Documentation/user/tweaks.itely:2165 (comment) msgid "This is too long to fit, so it is displaced upwards" msgstr "このマークアップは長いため、上の方に再配置されます" -#. Documentation/user/tweaks.itely:2159 (comment) -#. Documentation/user/tweaks.itely:2164 (comment) +#. Documentation/user/tweaks.itely:2169 (comment) +#. Documentation/user/tweaks.itely:2174 (comment) msgid "Turn off collision avoidance" msgstr "衝突回避を off にします" -#. Documentation/user/tweaks.itely:2166 (comment) +#. Documentation/user/tweaks.itely:2176 (comment) msgid "and turn on textLengthOn" msgstr "今度は textLengthOn を on にします" -#. Documentation/user/tweaks.itely:2167 (comment) +#. Documentation/user/tweaks.itely:2177 (comment) msgid "Spaces at end are honored" msgstr "テキスト終端のスペースは尊重されます" -#. Documentation/user/tweaks.itely:2274 (comment) +#. Documentation/user/tweaks.itely:2284 (comment) msgid "Extend width by 1 staff space" msgstr "幅を 1 譜表スペース広げます" -#. Documentation/user/tweaks.itely:2557 (comment) +#. Documentation/user/tweaks.itely:2567 (comment) msgid "This will not work, see below:" msgstr "これは機能しません。以下を見てください:" -#. Documentation/user/tweaks.itely:2561 (comment) +#. Documentation/user/tweaks.itely:2571 (comment) msgid "This works:" msgstr "これは機能します:" -#. Documentation/user/tweaks.itely:2612 (variable) +#. Documentation/user/tweaks.itely:2622 (variable) msgid "naturalplusflat" msgstr "" -#. Documentation/user/tweaks.itely:2653 (comment) +#. Documentation/user/tweaks.itely:2663 (comment) msgid "Extend width by 1 unit" msgstr "幅を 1 単位 (譜表スペース) 広げます" -#. Documentation/user/tweaks.itely:2655 (comment) +#. Documentation/user/tweaks.itely:2665 (comment) msgid "Align dynamics to a base line 2 units above staff" msgstr "強弱記号を譜表から 2 単位上のベース ラインに揃えます" -#. Documentation/user/tweaks.itely:2959 (variable) -#. Documentation/user/tweaks.itely:3008 (variable) -#. Documentation/user/tweaks.itely:3069 (variable) -#. Documentation/user/tweaks.itely:3139 (variable) -#. Documentation/user/tweaks.itely:3204 (variable) -#. Documentation/user/tweaks.itely:3264 (variable) +#. Documentation/user/tweaks.itely:2969 (variable) +#. Documentation/user/tweaks.itely:3018 (variable) +#. Documentation/user/tweaks.itely:3079 (variable) +#. Documentation/user/tweaks.itely:3149 (variable) +#. Documentation/user/tweaks.itely:3214 (variable) +#. Documentation/user/tweaks.itely:3274 (variable) msgid "rhMusic" msgstr "" -#. Documentation/user/tweaks.itely:2964 (comment) -#. Documentation/user/tweaks.itely:3013 (comment) -#. Documentation/user/tweaks.itely:3076 (comment) -#. Documentation/user/tweaks.itely:3148 (comment) -#. Documentation/user/tweaks.itely:3213 (comment) +#. Documentation/user/tweaks.itely:2974 (comment) +#. Documentation/user/tweaks.itely:3023 (comment) +#. Documentation/user/tweaks.itely:3086 (comment) +#. Documentation/user/tweaks.itely:3158 (comment) +#. Documentation/user/tweaks.itely:3223 (comment) msgid "Start polyphonic section of four voices" msgstr "4 つのボイスを持つ多声部セクションの開始" -#. Documentation/user/tweaks.itely:2977 (variable) -#. Documentation/user/tweaks.itely:3026 (variable) -#. Documentation/user/tweaks.itely:3089 (variable) -#. Documentation/user/tweaks.itely:3163 (variable) -#. Documentation/user/tweaks.itely:3230 (variable) -#. Documentation/user/tweaks.itely:3292 (variable) +#. Documentation/user/tweaks.itely:2987 (variable) +#. Documentation/user/tweaks.itely:3036 (variable) +#. Documentation/user/tweaks.itely:3099 (variable) +#. Documentation/user/tweaks.itely:3173 (variable) +#. Documentation/user/tweaks.itely:3240 (variable) +#. Documentation/user/tweaks.itely:3302 (variable) msgid "lhMusic" msgstr "" -#. Documentation/user/tweaks.itely:2986 (context id) -#. Documentation/user/tweaks.itely:3035 (context id) -#. Documentation/user/tweaks.itely:3098 (context id) -#. Documentation/user/tweaks.itely:3172 (context id) -#. Documentation/user/tweaks.itely:3239 (context id) -#. Documentation/user/tweaks.itely:3301 (context id) -#. Documentation/user/input.itely:974 (context id) +#. Documentation/user/tweaks.itely:2996 (context id) +#. Documentation/user/tweaks.itely:3045 (context id) +#. Documentation/user/tweaks.itely:3108 (context id) +#. Documentation/user/tweaks.itely:3182 (context id) +#. Documentation/user/tweaks.itely:3249 (context id) +#. Documentation/user/tweaks.itely:3311 (context id) +#. Documentation/user/input.itely:995 (context id) msgid "RH" msgstr "" -#. Documentation/user/tweaks.itely:2990 (context id) -#. Documentation/user/tweaks.itely:3039 (context id) -#. Documentation/user/tweaks.itely:3102 (context id) -#. Documentation/user/tweaks.itely:3176 (context id) -#. Documentation/user/tweaks.itely:3243 (context id) -#. Documentation/user/tweaks.itely:3305 (context id) -#. Documentation/user/input.itely:980 (context id) +#. Documentation/user/tweaks.itely:3000 (context id) +#. Documentation/user/tweaks.itely:3049 (context id) +#. Documentation/user/tweaks.itely:3112 (context id) +#. Documentation/user/tweaks.itely:3186 (context id) +#. Documentation/user/tweaks.itely:3253 (context id) +#. Documentation/user/tweaks.itely:3315 (context id) +#. Documentation/user/input.itely:1001 (context id) msgid "LH" msgstr "" -#. Documentation/user/tweaks.itely:3217 (comment) -#. Documentation/user/tweaks.itely:3279 (comment) +#. Documentation/user/tweaks.itely:3227 (comment) +#. Documentation/user/tweaks.itely:3289 (comment) msgid "Move the c2 out of the main note column so the merge will work" msgstr "マージが機能するように、c2 をメインの音符列の外に移動させます" -#. Documentation/user/tweaks.itely:3220 (comment) -#. Documentation/user/tweaks.itely:3282 (comment) +#. Documentation/user/tweaks.itely:3230 (comment) +#. Documentation/user/tweaks.itely:3292 (comment) msgid "Stem on the d2 must be down to permit merging" msgstr "マージを可能にするため、d2 のステムは下向きでなければなりません" -#. Documentation/user/tweaks.itely:3277 (comment) +#. Documentation/user/tweaks.itely:3287 (comment) msgid "Reposition the c2 to the right of the merged note" msgstr "c2 をマージされた音符の右側に再配置します" -#. Documentation/user/tweaks.itely:3413 (comment) -#. Documentation/user/tweaks.itely:3435 (comment) +#. Documentation/user/tweaks.itely:3423 (comment) +#. Documentation/user/tweaks.itely:3445 (comment) msgid "Visible tempo marking" msgstr "可視のテンポ記号" -#. Documentation/user/tweaks.itely:3417 (comment) -#. Documentation/user/tweaks.itely:3439 (comment) +#. Documentation/user/tweaks.itely:3427 (comment) +#. Documentation/user/tweaks.itely:3449 (comment) msgid "Invisible tempo marking to lengthen fermata in MIDI" msgstr "MIDI の中でフェルマータの演奏時間を伸ばすための不可視のテンポ記号" -#. Documentation/user/tweaks.itely:3420 (comment) -#. Documentation/user/tweaks.itely:3442 (comment) +#. Documentation/user/tweaks.itely:3430 (comment) +#. Documentation/user/tweaks.itely:3452 (comment) msgid "New tempo for next section" msgstr "次のセクションのための新しいテンポ" -#. Documentation/user/tweaks.itely:3499 (variable) +#. Documentation/user/tweaks.itely:3509 (variable) msgid "emphasize" msgstr "" -#. Documentation/user/tweaks.itely:3503 (variable) +#. Documentation/user/tweaks.itely:3513 (variable) msgid "normal" msgstr "" -#. Documentation/user/tweaks.itely:3509 (variable) +#. Documentation/user/tweaks.itely:3519 (variable) msgid "SopranoMusic" msgstr "" -#. Documentation/user/tweaks.itely:3522 (context id) -#. Documentation/user/input.itely:959 (context id) +#. Documentation/user/tweaks.itely:3532 (context id) +#. Documentation/user/input.itely:980 (context id) msgid "Soprano" msgstr "" -#. Documentation/user/tweaks.itely:3731 (comment) +#. Documentation/user/tweaks.itely:3741 (comment) msgid "Arrange to obtain color from color-notehead procedure" msgstr "color-notehead プロシージャからカラーを取得するための手続き" @@ -3413,7 +3412,7 @@ msgstr "" #. Documentation/user/working.itely:247 (variable) #. Documentation/user/working.itely:296 (variable) -#. Documentation/user/scheme-tutorial.itely:235 (variable) +#. Documentation/user/scheme-tutorial.itely:282 (variable) #. Documentation/user/programming-interface.itely:101 (variable) msgid "padText" msgstr "" @@ -3447,6 +3446,8 @@ msgstr "LilyPond プロジェクトに取り組む" #. @section in Documentation/user/working.itely #. @node in Documentation/fr/user/working.itely #. @section in Documentation/fr/user/working.itely +#. @node in Documentation/es/user/working.itely +#. @section in Documentation/es/user/working.itely #. @node in Documentation/de/user/working.itely #. @section in Documentation/de/user/working.itely #. @node in Documentation/ja/user/working.itely @@ -3541,6 +3542,29 @@ msgstr "うまくいかないとき" msgid "Updating old input files" msgstr "古い入力ファイルをアップデートする" +#. @node in Documentation/user/working.itely +#. @subsection in Documentation/user/working.itely +msgid "Common errors" +msgstr "" + +#. @node in Documentation/user/working.itely +#. @unnumberedsubsubsec in Documentation/user/working.itely +msgid "Music runs off the page" +msgstr "" + +#. @node in Documentation/user/working.itely +msgid "Apparent error in ../ly/init.ly" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/user/working.itely +msgid "Apparent error in @code{../ly/init.ly}" +msgstr "" + +#. @node in Documentation/user/working.itely +#. @unnumberedsubsubsec in Documentation/user/working.itely +msgid "Error message Unbound variable %" +msgstr "" + #. @node in Documentation/user/working.itely #. @subsection in Documentation/user/working.itely #. @node in Documentation/fr/user/working.itely @@ -3582,6 +3606,10 @@ msgstr "楽譜とパート" #. @node in Documentation/user/working.itely #. @section in Documentation/user/working.itely +#. @node in Documentation/es/user/working.itely +#. @section in Documentation/es/user/working.itely +#. @node in Documentation/de/user/working.itely +#. @section in Documentation/de/user/working.itely msgid "Make and Makefiles" msgstr "" @@ -3864,12 +3892,12 @@ msgstr "" msgid "xelatex" msgstr "" -#. Documentation/user/scheme-tutorial.itely:257 (variable) +#. Documentation/user/scheme-tutorial.itely:304 (variable) #. Documentation/user/programming-interface.itely:135 (variable) msgid "tempoPadded" msgstr "" -#. Documentation/user/scheme-tutorial.itely:276 (variable) +#. Documentation/user/scheme-tutorial.itely:323 (variable) msgid "pattern" msgstr "" @@ -4343,6 +4371,16 @@ msgstr "convert-ly を使ってファイルを更新する" msgid "Updating files with @command{convert-ly}" msgstr "@command{convert-ly} を使ってファイルを更新する" +#. @node in Documentation/user/running.itely +#, fuzzy +msgid "Invoking convert-ly" +msgstr "@command{lilypond} を呼び出す" + +#. @subsection in Documentation/user/running.itely +#, fuzzy +msgid "Invoking @command{convert-ly}" +msgstr "@command{convert-ly} を使ってファイルを更新する" + #. @node in Documentation/user/running.itely #. @node in Documentation/es/user/running.itely #. @node in Documentation/de/user/running.itely @@ -4769,11 +4807,11 @@ msgstr "" msgid "Musical notation" msgstr "" -#. Documentation/user/pitches.itely:730 (variable) -#. Documentation/user/input.itely:1043 (variable) -#. Documentation/user/input.itely:1062 (variable) -#. Documentation/user/input.itely:1099 (variable) -#. Documentation/user/input.itely:1114 (variable) +#. Documentation/user/pitches.itely:732 (variable) +#. Documentation/user/input.itely:1064 (variable) +#. Documentation/user/input.itely:1083 (variable) +#. Documentation/user/input.itely:1120 (variable) +#. Documentation/user/input.itely:1135 (variable) #. Documentation/user/changing-defaults.itely:453 (variable) #. Documentation/user/changing-defaults.itely:488 (context id) #. Documentation/user/changing-defaults.itely:538 (context id) @@ -4786,26 +4824,26 @@ msgstr "" msgid "music" msgstr "" -#. Documentation/user/pitches.itely:1124 (comment) +#. Documentation/user/pitches.itely:1136 (comment) msgid "not strictly necessary, but a good reminder" msgstr "" -#. Documentation/user/pitches.itely:1131 (context id) -#. Documentation/user/staff.itely:1121 (variable) +#. Documentation/user/pitches.itely:1143 (context id) +#. Documentation/user/staff.itely:1117 (variable) msgid "clarinet" msgstr "" -#. Documentation/user/pitches.itely:1216 (variable) +#. Documentation/user/pitches.itely:1228 (variable) #. Documentation/user/changing-defaults.itely:444 (variable) msgid "musicA" msgstr "" -#. Documentation/user/pitches.itely:1230 (variable) +#. Documentation/user/pitches.itely:1242 (variable) #. Documentation/user/changing-defaults.itely:445 (variable) msgid "musicB" msgstr "" -#. Documentation/user/pitches.itely:1249 (context id) +#. Documentation/user/pitches.itely:1261 (context id) #. Documentation/user/keyboards.itely:179 (context id) #. Documentation/user/keyboards.itely:279 (context id) #. Documentation/user/percussion.itely:175 (variable) @@ -4814,7 +4852,7 @@ msgstr "" msgid "up" msgstr "" -#. Documentation/user/pitches.itely:1253 (context id) +#. Documentation/user/pitches.itely:1265 (context id) #. Documentation/user/keyboards.itely:189 (context id) #. Documentation/user/keyboards.itely:288 (context id) #. Documentation/user/percussion.itely:178 (variable) @@ -6074,24 +6112,24 @@ msgstr "" msgid "Writing music in parallel" msgstr "" -#. Documentation/user/staff.itely:1090 (variable) -#. Documentation/user/staff.itely:1105 (variable) -#. Documentation/user/staff.itely:1273 (variable) +#. Documentation/user/staff.itely:1086 (variable) +#. Documentation/user/staff.itely:1101 (variable) +#. Documentation/user/staff.itely:1269 (variable) msgid "flute" msgstr "" -#. Documentation/user/staff.itely:1215 (variable) -#. Documentation/user/staff.itely:1236 (variable) +#. Documentation/user/staff.itely:1211 (variable) +#. Documentation/user/staff.itely:1232 (variable) msgid "oboe" msgstr "" -#. Documentation/user/staff.itely:1294 (variable) -#. Documentation/user/staff.itely:1310 (context id) +#. Documentation/user/staff.itely:1290 (variable) +#. Documentation/user/staff.itely:1306 (context id) msgid "piccolo" msgstr "" -#. Documentation/user/staff.itely:1302 (variable) -#. Documentation/user/staff.itely:1311 (context id) +#. Documentation/user/staff.itely:1298 (variable) +#. Documentation/user/staff.itely:1307 (context id) msgid "cbassoon" msgstr "" @@ -8322,11 +8360,11 @@ msgstr "" msgid "Further reading" msgstr "" -#. Documentation/user/input.itely:525 (comment) +#. Documentation/user/input.itely:546 (comment) msgid "not printed" msgstr "" -#. Documentation/user/input.itely:957 (variable) +#. Documentation/user/input.itely:978 (variable) msgid "allLyrics" msgstr "" @@ -10564,11 +10602,6 @@ msgstr "" msgid "Automatic behaviour" msgstr "自動譜刻" -#. @node in Documentation/es/user/working.itely -#. @section in Documentation/es/user/working.itely -msgid "Suggestions for writing LilyPond files" -msgstr "" - #. @node in Documentation/es/user/working.itely #. @subsection in Documentation/es/user/working.itely #. @node in Documentation/de/user/working.itely diff --git a/Documentation/po/lilypond-doc.pot b/Documentation/po/lilypond-doc.pot index b5052ed2fb..70c1350c68 100644 --- a/Documentation/po/lilypond-doc.pot +++ b/Documentation/po/lilypond-doc.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-06-18 09:15+0200\n" +"POT-Creation-Date: 2009-07-06 23:05+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -456,7 +456,7 @@ msgstr "" #. Documentation/user/tutorial.itely:1757 (variable) #. Documentation/user/working.itely:234 (variable) #. Documentation/user/working.itely:249 (variable) -#. Documentation/user/pitches.itely:1120 (context id) +#. Documentation/user/pitches.itely:1132 (context id) msgid "violin" msgstr "" @@ -1846,7 +1846,7 @@ msgstr "" #. Documentation/user/fundamental.itely:1242 (variable) #. Documentation/user/fundamental.itely:2646 (variable) -#. Documentation/user/tweaks.itely:3508 (variable) +#. Documentation/user/tweaks.itely:3518 (variable) #. Documentation/user/simultaneous.itely:784 (variable) #. Documentation/user/percussion.itely:497 (variable) #. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:62 (variable) @@ -1898,37 +1898,37 @@ msgid "SopMusic" msgstr "" #. Documentation/user/fundamental.itely:1298 (variable) -#. Documentation/user/tweaks.itely:3510 (variable) +#. Documentation/user/tweaks.itely:3520 (variable) msgid "AltoMusic" msgstr "" #. Documentation/user/fundamental.itely:1299 (variable) -#. Documentation/user/tweaks.itely:3511 (variable) +#. Documentation/user/tweaks.itely:3521 (variable) msgid "TenorMusic" msgstr "" #. Documentation/user/fundamental.itely:1300 (variable) -#. Documentation/user/tweaks.itely:3512 (variable) +#. Documentation/user/tweaks.itely:3522 (variable) msgid "BassMusic" msgstr "" #. Documentation/user/fundamental.itely:1301 (variable) -#. Documentation/user/tweaks.itely:3513 (variable) +#. Documentation/user/tweaks.itely:3523 (variable) msgid "VerseOne" msgstr "" #. Documentation/user/fundamental.itely:1303 (variable) -#. Documentation/user/tweaks.itely:3514 (variable) +#. Documentation/user/tweaks.itely:3524 (variable) msgid "VerseTwo" msgstr "" #. Documentation/user/fundamental.itely:1305 (variable) -#. Documentation/user/tweaks.itely:3515 (variable) +#. Documentation/user/tweaks.itely:3525 (variable) msgid "VerseThree" msgstr "" #. Documentation/user/fundamental.itely:1307 (variable) -#. Documentation/user/tweaks.itely:3516 (variable) +#. Documentation/user/tweaks.itely:3526 (variable) msgid "VerseFour" msgstr "" @@ -1937,20 +1937,20 @@ msgid "Sop" msgstr "" #. Documentation/user/fundamental.itely:1315 (context id) -#. Documentation/user/tweaks.itely:3523 (context id) -#. Documentation/user/input.itely:961 (context id) +#. Documentation/user/tweaks.itely:3533 (context id) +#. Documentation/user/input.itely:982 (context id) msgid "Alto" msgstr "" #. Documentation/user/fundamental.itely:1323 (context id) -#. Documentation/user/tweaks.itely:3531 (context id) -#. Documentation/user/input.itely:963 (context id) +#. Documentation/user/tweaks.itely:3541 (context id) +#. Documentation/user/input.itely:984 (context id) msgid "Tenor" msgstr "" #. Documentation/user/fundamental.itely:1324 (context id) -#. Documentation/user/tweaks.itely:3532 (context id) -#. Documentation/user/input.itely:968 (context id) +#. Documentation/user/tweaks.itely:3542 (context id) +#. Documentation/user/input.itely:989 (context id) #. input/lsr/jazz-combo-template.ly:229 (variable) msgid "Bass" msgstr "" @@ -2105,7 +2105,7 @@ msgstr "" #. Documentation/user/fundamental.itely:2420 (variable) #. Documentation/user/fundamental.itely:2647 (variable) -#. Documentation/user/input.itely:953 (variable) +#. Documentation/user/input.itely:974 (variable) #. input/lsr/orchestra,-choir-and-piano-template.ly:50 (variable) msgid "sopranoMusic" msgstr "" @@ -2125,7 +2125,7 @@ msgid "sopranoWords" msgstr "" #. Documentation/user/fundamental.itely:2654 (variable) -#. Documentation/user/input.itely:954 (variable) +#. Documentation/user/input.itely:975 (variable) #. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:60 (variable) #. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:52 (variable) #. input/lsr/vocal-ensemble-template.ly:57 (variable) @@ -2140,7 +2140,7 @@ msgid "altoWords" msgstr "" #. Documentation/user/fundamental.itely:2659 (variable) -#. Documentation/user/input.itely:955 (variable) +#. Documentation/user/input.itely:976 (variable) #. input/lsr/orchestra,-choir-and-piano-template.ly:56 (variable) #. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:67 (variable) #. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:59 (variable) @@ -2156,7 +2156,7 @@ msgid "tenorWords" msgstr "" #. Documentation/user/fundamental.itely:2664 (variable) -#. Documentation/user/input.itely:956 (variable) +#. Documentation/user/input.itely:977 (variable) #. input/lsr/orchestra,-choir-and-piano-template.ly:64 (variable) #. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:74 (variable) #. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:66 (variable) @@ -2337,8 +2337,7 @@ msgstr "" #. Documentation/user/staff.itely:559 (context id) #. Documentation/user/staff.itely:572 (context id) #. Documentation/user/staff.itely:580 (context id) -#. Documentation/user/staff.itely:600 (context id) -#. Documentation/user/staff.itely:613 (context id) +#. Documentation/user/staff.itely:598 (context id) #. @rglos in Documentation/user/staff.itely #. @rglos in Documentation/fr/user/fundamental.itely #. @rglos in Documentation/fr/user/tweaks.itely @@ -2629,205 +2628,205 @@ msgstr "" msgid "Revert thickness of all following slurs to default of 1.2" msgstr "" -#. Documentation/user/tweaks.itely:1402 (comment) +#. Documentation/user/tweaks.itely:1412 (comment) msgid "Don't print clefs in this staff" msgstr "" -#. Documentation/user/tweaks.itely:1404 (comment) +#. Documentation/user/tweaks.itely:1414 (comment) msgid "Don't print time signatures in this staff" msgstr "" -#. Documentation/user/tweaks.itely:1468 (comment) +#. Documentation/user/tweaks.itely:1478 (comment) msgid "Reduce all font sizes by ~24%" msgstr "" -#. Documentation/user/tweaks.itely:1534 (comment) +#. Documentation/user/tweaks.itely:1544 (comment) msgid "Reduce stem length and line spacing to match" msgstr "" -#. Documentation/user/tweaks.itely:1964 (comment) -#. Documentation/user/tweaks.itely:2034 (comment) +#. Documentation/user/tweaks.itely:1974 (comment) +#. Documentation/user/tweaks.itely:2044 (comment) msgid "Set details for later Text Spanner" msgstr "" -#. Documentation/user/tweaks.itely:1967 (comment) -#. Documentation/user/tweaks.itely:2037 (comment) +#. Documentation/user/tweaks.itely:1977 (comment) +#. Documentation/user/tweaks.itely:2047 (comment) msgid "Place dynamics above staff" msgstr "" -#. Documentation/user/tweaks.itely:1969 (comment) -#. Documentation/user/tweaks.itely:2041 (comment) +#. Documentation/user/tweaks.itely:1979 (comment) +#. Documentation/user/tweaks.itely:2051 (comment) msgid "Start Ottava Bracket" msgstr "" -#. Documentation/user/tweaks.itely:1972 (comment) -#. Documentation/user/tweaks.itely:1979 (comment) -#. Documentation/user/tweaks.itely:2044 (comment) -#. Documentation/user/tweaks.itely:2051 (comment) +#. Documentation/user/tweaks.itely:1982 (comment) +#. Documentation/user/tweaks.itely:1989 (comment) +#. Documentation/user/tweaks.itely:2054 (comment) +#. Documentation/user/tweaks.itely:2061 (comment) msgid "Add Dynamic Text" msgstr "" -#. Documentation/user/tweaks.itely:1974 (comment) -#. Documentation/user/tweaks.itely:2046 (comment) +#. Documentation/user/tweaks.itely:1984 (comment) +#. Documentation/user/tweaks.itely:2056 (comment) msgid "Add Dynamic Line Spanner" msgstr "" -#. Documentation/user/tweaks.itely:1976 (comment) -#. Documentation/user/tweaks.itely:2048 (comment) +#. Documentation/user/tweaks.itely:1986 (comment) +#. Documentation/user/tweaks.itely:2058 (comment) msgid "Add Text Script" msgstr "" -#. Documentation/user/tweaks.itely:1981 (comment) -#. Documentation/user/tweaks.itely:2053 (comment) +#. Documentation/user/tweaks.itely:1991 (comment) +#. Documentation/user/tweaks.itely:2063 (comment) msgid "Stop Ottava Bracket" msgstr "" -#. Documentation/user/tweaks.itely:2039 (comment) +#. Documentation/user/tweaks.itely:2049 (comment) msgid "Place following Ottava Bracket below Text Spanners" msgstr "" -#. Documentation/user/tweaks.itely:2128 (comment) +#. Documentation/user/tweaks.itely:2138 (comment) msgid "Cause notes to space out to accommodate text" msgstr "" -#. Documentation/user/tweaks.itely:2151 (comment) +#. Documentation/user/tweaks.itely:2161 (comment) msgid "This markup is short enough to fit without collision" msgstr "" -#. Documentation/user/tweaks.itely:2155 (comment) +#. Documentation/user/tweaks.itely:2165 (comment) msgid "This is too long to fit, so it is displaced upwards" msgstr "" -#. Documentation/user/tweaks.itely:2159 (comment) -#. Documentation/user/tweaks.itely:2164 (comment) +#. Documentation/user/tweaks.itely:2169 (comment) +#. Documentation/user/tweaks.itely:2174 (comment) msgid "Turn off collision avoidance" msgstr "" -#. Documentation/user/tweaks.itely:2166 (comment) +#. Documentation/user/tweaks.itely:2176 (comment) msgid "and turn on textLengthOn" msgstr "" -#. Documentation/user/tweaks.itely:2167 (comment) +#. Documentation/user/tweaks.itely:2177 (comment) msgid "Spaces at end are honored" msgstr "" -#. Documentation/user/tweaks.itely:2274 (comment) +#. Documentation/user/tweaks.itely:2284 (comment) msgid "Extend width by 1 staff space" msgstr "" -#. Documentation/user/tweaks.itely:2557 (comment) +#. Documentation/user/tweaks.itely:2567 (comment) msgid "This will not work, see below:" msgstr "" -#. Documentation/user/tweaks.itely:2561 (comment) +#. Documentation/user/tweaks.itely:2571 (comment) msgid "This works:" msgstr "" -#. Documentation/user/tweaks.itely:2612 (variable) +#. Documentation/user/tweaks.itely:2622 (variable) msgid "naturalplusflat" msgstr "" -#. Documentation/user/tweaks.itely:2653 (comment) +#. Documentation/user/tweaks.itely:2663 (comment) msgid "Extend width by 1 unit" msgstr "" -#. Documentation/user/tweaks.itely:2655 (comment) +#. Documentation/user/tweaks.itely:2665 (comment) msgid "Align dynamics to a base line 2 units above staff" msgstr "" -#. Documentation/user/tweaks.itely:2959 (variable) -#. Documentation/user/tweaks.itely:3008 (variable) -#. Documentation/user/tweaks.itely:3069 (variable) -#. Documentation/user/tweaks.itely:3139 (variable) -#. Documentation/user/tweaks.itely:3204 (variable) -#. Documentation/user/tweaks.itely:3264 (variable) +#. Documentation/user/tweaks.itely:2969 (variable) +#. Documentation/user/tweaks.itely:3018 (variable) +#. Documentation/user/tweaks.itely:3079 (variable) +#. Documentation/user/tweaks.itely:3149 (variable) +#. Documentation/user/tweaks.itely:3214 (variable) +#. Documentation/user/tweaks.itely:3274 (variable) msgid "rhMusic" msgstr "" -#. Documentation/user/tweaks.itely:2964 (comment) -#. Documentation/user/tweaks.itely:3013 (comment) -#. Documentation/user/tweaks.itely:3076 (comment) -#. Documentation/user/tweaks.itely:3148 (comment) -#. Documentation/user/tweaks.itely:3213 (comment) +#. Documentation/user/tweaks.itely:2974 (comment) +#. Documentation/user/tweaks.itely:3023 (comment) +#. Documentation/user/tweaks.itely:3086 (comment) +#. Documentation/user/tweaks.itely:3158 (comment) +#. Documentation/user/tweaks.itely:3223 (comment) msgid "Start polyphonic section of four voices" msgstr "" -#. Documentation/user/tweaks.itely:2977 (variable) -#. Documentation/user/tweaks.itely:3026 (variable) -#. Documentation/user/tweaks.itely:3089 (variable) -#. Documentation/user/tweaks.itely:3163 (variable) -#. Documentation/user/tweaks.itely:3230 (variable) -#. Documentation/user/tweaks.itely:3292 (variable) +#. Documentation/user/tweaks.itely:2987 (variable) +#. Documentation/user/tweaks.itely:3036 (variable) +#. Documentation/user/tweaks.itely:3099 (variable) +#. Documentation/user/tweaks.itely:3173 (variable) +#. Documentation/user/tweaks.itely:3240 (variable) +#. Documentation/user/tweaks.itely:3302 (variable) msgid "lhMusic" msgstr "" -#. Documentation/user/tweaks.itely:2986 (context id) -#. Documentation/user/tweaks.itely:3035 (context id) -#. Documentation/user/tweaks.itely:3098 (context id) -#. Documentation/user/tweaks.itely:3172 (context id) -#. Documentation/user/tweaks.itely:3239 (context id) -#. Documentation/user/tweaks.itely:3301 (context id) -#. Documentation/user/input.itely:974 (context id) +#. Documentation/user/tweaks.itely:2996 (context id) +#. Documentation/user/tweaks.itely:3045 (context id) +#. Documentation/user/tweaks.itely:3108 (context id) +#. Documentation/user/tweaks.itely:3182 (context id) +#. Documentation/user/tweaks.itely:3249 (context id) +#. Documentation/user/tweaks.itely:3311 (context id) +#. Documentation/user/input.itely:995 (context id) msgid "RH" msgstr "" -#. Documentation/user/tweaks.itely:2990 (context id) -#. Documentation/user/tweaks.itely:3039 (context id) -#. Documentation/user/tweaks.itely:3102 (context id) -#. Documentation/user/tweaks.itely:3176 (context id) -#. Documentation/user/tweaks.itely:3243 (context id) -#. Documentation/user/tweaks.itely:3305 (context id) -#. Documentation/user/input.itely:980 (context id) +#. Documentation/user/tweaks.itely:3000 (context id) +#. Documentation/user/tweaks.itely:3049 (context id) +#. Documentation/user/tweaks.itely:3112 (context id) +#. Documentation/user/tweaks.itely:3186 (context id) +#. Documentation/user/tweaks.itely:3253 (context id) +#. Documentation/user/tweaks.itely:3315 (context id) +#. Documentation/user/input.itely:1001 (context id) msgid "LH" msgstr "" -#. Documentation/user/tweaks.itely:3217 (comment) -#. Documentation/user/tweaks.itely:3279 (comment) +#. Documentation/user/tweaks.itely:3227 (comment) +#. Documentation/user/tweaks.itely:3289 (comment) msgid "Move the c2 out of the main note column so the merge will work" msgstr "" -#. Documentation/user/tweaks.itely:3220 (comment) -#. Documentation/user/tweaks.itely:3282 (comment) +#. Documentation/user/tweaks.itely:3230 (comment) +#. Documentation/user/tweaks.itely:3292 (comment) msgid "Stem on the d2 must be down to permit merging" msgstr "" -#. Documentation/user/tweaks.itely:3277 (comment) +#. Documentation/user/tweaks.itely:3287 (comment) msgid "Reposition the c2 to the right of the merged note" msgstr "" -#. Documentation/user/tweaks.itely:3413 (comment) -#. Documentation/user/tweaks.itely:3435 (comment) +#. Documentation/user/tweaks.itely:3423 (comment) +#. Documentation/user/tweaks.itely:3445 (comment) msgid "Visible tempo marking" msgstr "" -#. Documentation/user/tweaks.itely:3417 (comment) -#. Documentation/user/tweaks.itely:3439 (comment) +#. Documentation/user/tweaks.itely:3427 (comment) +#. Documentation/user/tweaks.itely:3449 (comment) msgid "Invisible tempo marking to lengthen fermata in MIDI" msgstr "" -#. Documentation/user/tweaks.itely:3420 (comment) -#. Documentation/user/tweaks.itely:3442 (comment) +#. Documentation/user/tweaks.itely:3430 (comment) +#. Documentation/user/tweaks.itely:3452 (comment) msgid "New tempo for next section" msgstr "" -#. Documentation/user/tweaks.itely:3499 (variable) +#. Documentation/user/tweaks.itely:3509 (variable) msgid "emphasize" msgstr "" -#. Documentation/user/tweaks.itely:3503 (variable) +#. Documentation/user/tweaks.itely:3513 (variable) msgid "normal" msgstr "" -#. Documentation/user/tweaks.itely:3509 (variable) +#. Documentation/user/tweaks.itely:3519 (variable) msgid "SopranoMusic" msgstr "" -#. Documentation/user/tweaks.itely:3522 (context id) -#. Documentation/user/input.itely:959 (context id) +#. Documentation/user/tweaks.itely:3532 (context id) +#. Documentation/user/input.itely:980 (context id) msgid "Soprano" msgstr "" -#. Documentation/user/tweaks.itely:3731 (comment) +#. Documentation/user/tweaks.itely:3741 (comment) msgid "Arrange to obtain color from color-notehead procedure" msgstr "" @@ -3377,7 +3376,7 @@ msgstr "" #. Documentation/user/working.itely:247 (variable) #. Documentation/user/working.itely:296 (variable) -#. Documentation/user/scheme-tutorial.itely:235 (variable) +#. Documentation/user/scheme-tutorial.itely:282 (variable) #. Documentation/user/programming-interface.itely:101 (variable) msgid "padText" msgstr "" @@ -3411,6 +3410,8 @@ msgstr "" #. @section in Documentation/user/working.itely #. @node in Documentation/fr/user/working.itely #. @section in Documentation/fr/user/working.itely +#. @node in Documentation/es/user/working.itely +#. @section in Documentation/es/user/working.itely #. @node in Documentation/de/user/working.itely #. @section in Documentation/de/user/working.itely #. @node in Documentation/ja/user/working.itely @@ -3505,6 +3506,29 @@ msgstr "" msgid "Updating old input files" msgstr "" +#. @node in Documentation/user/working.itely +#. @subsection in Documentation/user/working.itely +msgid "Common errors" +msgstr "" + +#. @node in Documentation/user/working.itely +#. @unnumberedsubsubsec in Documentation/user/working.itely +msgid "Music runs off the page" +msgstr "" + +#. @node in Documentation/user/working.itely +msgid "Apparent error in ../ly/init.ly" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/user/working.itely +msgid "Apparent error in @code{../ly/init.ly}" +msgstr "" + +#. @node in Documentation/user/working.itely +#. @unnumberedsubsubsec in Documentation/user/working.itely +msgid "Error message Unbound variable %" +msgstr "" + #. @node in Documentation/user/working.itely #. @subsection in Documentation/user/working.itely #. @node in Documentation/fr/user/working.itely @@ -3546,6 +3570,10 @@ msgstr "" #. @node in Documentation/user/working.itely #. @section in Documentation/user/working.itely +#. @node in Documentation/es/user/working.itely +#. @section in Documentation/es/user/working.itely +#. @node in Documentation/de/user/working.itely +#. @section in Documentation/de/user/working.itely msgid "Make and Makefiles" msgstr "" @@ -3827,12 +3855,12 @@ msgstr "" msgid "xelatex" msgstr "" -#. Documentation/user/scheme-tutorial.itely:257 (variable) +#. Documentation/user/scheme-tutorial.itely:304 (variable) #. Documentation/user/programming-interface.itely:135 (variable) msgid "tempoPadded" msgstr "" -#. Documentation/user/scheme-tutorial.itely:276 (variable) +#. Documentation/user/scheme-tutorial.itely:323 (variable) msgid "pattern" msgstr "" @@ -4306,6 +4334,14 @@ msgstr "" msgid "Updating files with @command{convert-ly}" msgstr "" +#. @node in Documentation/user/running.itely +msgid "Invoking convert-ly" +msgstr "" + +#. @subsection in Documentation/user/running.itely +msgid "Invoking @command{convert-ly}" +msgstr "" + #. @node in Documentation/user/running.itely #. @node in Documentation/es/user/running.itely #. @node in Documentation/de/user/running.itely @@ -4731,11 +4767,11 @@ msgstr "" msgid "Musical notation" msgstr "" -#. Documentation/user/pitches.itely:730 (variable) -#. Documentation/user/input.itely:1043 (variable) -#. Documentation/user/input.itely:1062 (variable) -#. Documentation/user/input.itely:1099 (variable) -#. Documentation/user/input.itely:1114 (variable) +#. Documentation/user/pitches.itely:732 (variable) +#. Documentation/user/input.itely:1064 (variable) +#. Documentation/user/input.itely:1083 (variable) +#. Documentation/user/input.itely:1120 (variable) +#. Documentation/user/input.itely:1135 (variable) #. Documentation/user/changing-defaults.itely:453 (variable) #. Documentation/user/changing-defaults.itely:488 (context id) #. Documentation/user/changing-defaults.itely:538 (context id) @@ -4748,26 +4784,26 @@ msgstr "" msgid "music" msgstr "" -#. Documentation/user/pitches.itely:1124 (comment) +#. Documentation/user/pitches.itely:1136 (comment) msgid "not strictly necessary, but a good reminder" msgstr "" -#. Documentation/user/pitches.itely:1131 (context id) -#. Documentation/user/staff.itely:1121 (variable) +#. Documentation/user/pitches.itely:1143 (context id) +#. Documentation/user/staff.itely:1117 (variable) msgid "clarinet" msgstr "" -#. Documentation/user/pitches.itely:1216 (variable) +#. Documentation/user/pitches.itely:1228 (variable) #. Documentation/user/changing-defaults.itely:444 (variable) msgid "musicA" msgstr "" -#. Documentation/user/pitches.itely:1230 (variable) +#. Documentation/user/pitches.itely:1242 (variable) #. Documentation/user/changing-defaults.itely:445 (variable) msgid "musicB" msgstr "" -#. Documentation/user/pitches.itely:1249 (context id) +#. Documentation/user/pitches.itely:1261 (context id) #. Documentation/user/keyboards.itely:179 (context id) #. Documentation/user/keyboards.itely:279 (context id) #. Documentation/user/percussion.itely:175 (variable) @@ -4776,7 +4812,7 @@ msgstr "" msgid "up" msgstr "" -#. Documentation/user/pitches.itely:1253 (context id) +#. Documentation/user/pitches.itely:1265 (context id) #. Documentation/user/keyboards.itely:189 (context id) #. Documentation/user/keyboards.itely:288 (context id) #. Documentation/user/percussion.itely:178 (variable) @@ -6035,24 +6071,24 @@ msgstr "" msgid "Writing music in parallel" msgstr "" -#. Documentation/user/staff.itely:1090 (variable) -#. Documentation/user/staff.itely:1105 (variable) -#. Documentation/user/staff.itely:1273 (variable) +#. Documentation/user/staff.itely:1086 (variable) +#. Documentation/user/staff.itely:1101 (variable) +#. Documentation/user/staff.itely:1269 (variable) msgid "flute" msgstr "" -#. Documentation/user/staff.itely:1215 (variable) -#. Documentation/user/staff.itely:1236 (variable) +#. Documentation/user/staff.itely:1211 (variable) +#. Documentation/user/staff.itely:1232 (variable) msgid "oboe" msgstr "" -#. Documentation/user/staff.itely:1294 (variable) -#. Documentation/user/staff.itely:1310 (context id) +#. Documentation/user/staff.itely:1290 (variable) +#. Documentation/user/staff.itely:1306 (context id) msgid "piccolo" msgstr "" -#. Documentation/user/staff.itely:1302 (variable) -#. Documentation/user/staff.itely:1311 (context id) +#. Documentation/user/staff.itely:1298 (variable) +#. Documentation/user/staff.itely:1307 (context id) msgid "cbassoon" msgstr "" @@ -8283,11 +8319,11 @@ msgstr "" msgid "Further reading" msgstr "" -#. Documentation/user/input.itely:525 (comment) +#. Documentation/user/input.itely:546 (comment) msgid "not printed" msgstr "" -#. Documentation/user/input.itely:957 (variable) +#. Documentation/user/input.itely:978 (variable) msgid "allLyrics" msgstr "" @@ -10510,11 +10546,6 @@ msgstr "" msgid "Automatic behaviour" msgstr "" -#. @node in Documentation/es/user/working.itely -#. @section in Documentation/es/user/working.itely -msgid "Suggestions for writing LilyPond files" -msgstr "" - #. @node in Documentation/es/user/working.itely #. @subsection in Documentation/es/user/working.itely #. @node in Documentation/de/user/working.itely diff --git a/Documentation/snippets.tely b/Documentation/snippets.tely new file mode 100644 index 0000000000..3e2b7cec59 --- /dev/null +++ b/Documentation/snippets.tely @@ -0,0 +1,166 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- +@setfilename lilypond-snippets.info +@settitle LilyPond snippets +@documentencoding UTF-8 +@documentlanguage en + +@iftex +@afourpaper +@end iftex + +@c This disables @lydoctitle definition in common-macros.itexi +@set snippets-sections + +@include macros.itexi + +@ifnothtml +@macro lydoctitle{TEXT} +@unnumberedsec \TEXT\ +@end macro +@end ifnothtml + +@ifhtml +@macro lydoctitle{TEXT} +@node \TEXT\ +@unnumberedsec \TEXT\ +@end macro +@end ifhtml + +@finalout + +@titlepage +@title LilyPond +@subtitle The music typesetter +@titlefont{Snippets} +@author LilyPond Snippet Repository contributors + +@vskip 20pt + +This document shows a selected set of LilyPond snippets from the +@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository} +(LSR). It is in the public domain. + +We would like to address many thanks to Sebastiano Vigna for maintaining +LSR web site and database, and the University of Milano for hosting LSR. + +Please note that this document is not an exact subset of LSR: some +snippets come from @file{input/new} LilyPond sources directory, and +snippets from LSR are converted through @command{convert-ly}, as LSR is +based on a stable LilyPond version, and this document is for version +@c @value{version}. + +Snippets are grouped by tags; tags listed in the table of contents match +a section of LilyPond notation manual. Snippets may have several tags, +and not all LSR tags may appear in this document. + +In the HTML version of this document, you can click on the file name +or figure for each example to see the corresponding input file. + +@end titlepage + +@iftex +@contents +@end iftex + +@ifnottex +@node Top +@top GNU LilyPond --- Snippets List + +@ifhtml +@ifclear bigpage +This document is also available as a +@uref{source/Documentation/snippets.pdf,PDF} and as +@uref{source/Documentation/snippets-big-page.html,one big page}. +@end ifclear +@ifset bigpage +This document is also available as a +@uref{source/Documentation/snippets.pdf,PDF} and as +@uref{source/Documentation/snippets/index.html,HTML indexed multiple pages}. +@end ifset +@end ifhtml + +This document shows a selected set of LilyPond snippets from the +@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository} +(LSR). It is in the public domain. + +Please note that it is not an exact subset of LSR: some snippets come +from @file{Documentation/snippets/new} LilyPond sources directory, and +snippets from LSR are converted through @command{convert-ly}, as LSR is +based on a stable LilyPond version, and this document is for version +@version{}. + +Snippets are grouped by tags; tags listed in the table of contents match +a section of LilyPond notation manual. Snippets may have several tags, +and not all LSR tags may appear in this document. + +In the HTML version of this document, you can click on the file name +or figure for each example to see the corresponding input file. +@end ifnottex + +@c maybe generate/update @menu and @includes automatically? --jm +@menu +Musical notation +* Pitches:: +* Rhythms:: +* Expressive marks:: +* Repeats:: +* Simultaneous notes:: +* Staff notation:: +* Editorial annotations:: +* Text:: + +Specialist notation +* Vocal music:: +* Chords:: +* Keyboards:: +* Percussion:: +* Fretted strings:: +* Unfretted strings:: +* Winds:: +* Ancient notation:: +* World music:: + +Other collections +* Contexts and engravers:: +* Tweaks and overrides:: +* Paper and layout:: +* Titles:: +* Spacing:: +* MIDI:: +* Templates:: +@end menu + +@contents + + +@c Please take care of naming every .itely +@c with an existing tag name. + +@include pitches.itely +@include rhythms.itely +@include expressive-marks.itely +@include repeats.itely +@include simultaneous-notes.itely +@include staff-notation.itely +@include editorial-annotations.itely +@include text.itely + +@include vocal-music.itely +@include chords.itely +@include keyboards.itely +@include percussion.itely +@include fretted-strings.itely +@include unfretted-strings.itely +@include winds.itely +@include ancient-notation.itely +@include world-music.itely + +@include contexts-and-engravers.itely +@include tweaks-and-overrides.itely +@include paper-and-layout.itely +@include titles.itely +@include spacing.itely +@include midi.itely +@include template.itely + +@bye diff --git a/Documentation/snippets/GNUmakefile b/Documentation/snippets/GNUmakefile new file mode 100644 index 0000000000..2a6f9ed8cc --- /dev/null +++ b/Documentation/snippets/GNUmakefile @@ -0,0 +1,7 @@ +depth = ../.. + +SUBDIRS = new +EXTRA_DIST_FILES = $(call src-wildcard,*.snippet-list) \ + $(call src-wildcard,*.ly) $(call src-wildcard,*.itely) + +include $(depth)/make/stepmake.make diff --git a/Documentation/snippets/README b/Documentation/snippets/README new file mode 100644 index 0000000000..f3c1608129 --- /dev/null +++ b/Documentation/snippets/README @@ -0,0 +1,5 @@ +This directory contains examples generated automatically from LSR +http://lsr.dsi.unimi.it/ + +To update this directory and find addtional information, see +the Contributors' Guide, section "LSR to Git". diff --git a/Documentation/snippets/accordion-discant-symbols.ly b/Documentation/snippets/accordion-discant-symbols.ly new file mode 100644 index 0000000000..d68ab119f1 --- /dev/null +++ b/Documentation/snippets/accordion-discant-symbols.ly @@ -0,0 +1,195 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "keyboards" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Los símbolos específicos de acordeón discanto se escriben mediante +@code{\\markup}. Se puede trucar la colocación vertical de los +símbolos modificando los argumentos de @code{\\raise}. + +" + doctitlees = "Símbolos de acordeón discanto" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + doctitlede = "Symbole für Akkordeon-Diskantregister" + texidocde = " +Diskantregister für Akkordeon können mit @code{\\markup} dargestellt werden. +Die vertikale Position der einzelnen Elemente werden mit @code{\\raise} +angepasst. +" + + texidoc = " +Accordion discant-specific symbols are added using @code{\\markup}. The +vertical placement of the symbols can be tweaked by changing the +@code{\\raise} arguments. + + + +" + doctitle = "Accordion-discant symbols" +} % begin verbatim + +discant = \markup { + \musicglyph #"accordion.accDiscant" +} +dot = \markup { + \musicglyph #"accordion.accDot" +} + +\layout { ragged-right = ##t } + +% 16 voets register +accBasson = ^\markup { + \combine + \discant + \raise #0.5 \dot +} + +% een korig 8 en 16 voets register +accBandon = ^\markup { + \combine + \discant + \combine + \raise #0.5 \dot + \raise #1.5 \dot +} + +accVCello = ^\markup { + \combine + \discant + \combine + \raise #0.5 \dot + \combine + \raise #1.5 \dot + \translate #'(1 . 0) \raise #1.5 \dot +} + +% 4-8-16 voets register +accHarmon = ^\markup { + \combine + \discant + \combine + \raise #0.5 \dot + \combine + \raise #1.5 \dot + \raise #2.5 \dot +} + +accTrombon = ^\markup { + \combine + \discant + \combine + \raise #0.5 \dot + \combine + \raise #1.5 \dot + \combine + \translate #'(1 . 0) \raise #1.5 \dot + \translate #'(-1 . 0) \raise #1.5 \dot +} + +% eenkorig 4 en 16 voets register +accOrgan = ^\markup { + \combine + \discant + \combine + \raise #0.5 \dot + \raise #2.5 \dot +} + +accMaster = ^\markup { + \combine + \discant + \combine + \raise #0.5 \dot + \combine + \raise #1.5 \dot + \combine + \translate #'(1 . 0) \raise #1.5 \dot + \combine + \translate #'(-1 . 0) \raise #1.5 \dot + \raise #2.5 \dot +} + +accAccord = ^\markup { + \combine + \discant + \combine + \raise #1.5 \dot + \combine + \translate #'(1 . 0) \raise #1.5 \dot + \combine + \translate #'(-1 . 0) \raise #1.5 \dot + \raise #2.5 \dot +} + +accMusette = ^\markup { + \combine + \discant + \combine + \raise #1.5 \dot + \combine + \translate #'(1 . 0) \raise #1.5 \dot + \translate #'(-1 . 0) \raise #1.5 \dot +} + +accCeleste = ^\markup { + \combine + \discant + \combine + \raise #1.5 \dot + \translate #'(-1 . 0) \raise #1.5 \dot +} + +accOboe = ^\markup { + \combine + \discant + \combine + \raise #1.5 \dot + \raise #2.5 \dot +} + +accClarin = ^\markup { + \combine + \discant + \raise #1.5 \dot +} + +accPiccolo = ^\markup { + \combine + \discant + \raise #2.5 \dot +} + +accViolin = ^\markup { + \combine + \discant + \combine + \raise #1.5 \dot + \combine + \translate #'(1 . 0) \raise #1.5 \dot + \raise #2.5 \dot +} + +\relative c'' { + c4 d\accBasson e f + c4 d\accBandon e f + c4 d\accVCello e f + c4 d\accHarmon e f + c4 d\accTrombon e f + \break + c4 d\accOrgan e f + c4 d\accMaster e f + c4 d\accAccord e f + c4 d\accMusette e f + c4 d\accCeleste e f + \break + c4 d\accOboe e f + c4 d\accClarin e f + c4 d\accPiccolo e f + c4 d\accViolin e f +} + diff --git a/Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly b/Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly new file mode 100644 index 0000000000..9adfd97e0e --- /dev/null +++ b/Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly @@ -0,0 +1,65 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "chords, ancient-notation, contexts-and-engravers" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Al escribir un bajo cifrado, existe una forma de especificar si +queremos que las cifras se sitúen encima o debajo de las notas del +bajo, mediante la definición de la propiedad +@code{BassFigureAlignmentPositioning #'direction} (exclusivamente +dentro de un contexto @code{Staff}). Se puede elegir entre +@code{#UP} (o @code{#1}, arriba), @code{#CENTER} (o @code{#0}, +centrado) y @code{#DOWN} (o @code{#-1}, abajo). + +Como podemos ver, esta propiedad se puede cambiar tantas veces +como queramos. Utilice @code{\\once \\override} si no quiere que el +truco se aplique a toda la partitura. + +" + doctitlees = "Añadir un bajo cifrado encima o debajo de las notas" + +%% Translation of GIT committish: 7eb450e8e6c935410b8f3212cb53e5a731f4f33f + doctitlefr = "Ajout d'une basse chiffrée au-dessus ou au-dessous des notes" + + texidoc = " +When writing a figured bass, here's a way to specify if you want your +figures to be placed above or below the bass notes, by defining the +@code{BassFigureAlignmentPositioning #'direction} property (exclusively +in a @code{Staff} context). Choices are @code{#UP} (or @code{#1}), +@code{#CENTER} (or @code{#0}) and @code{#DOWN} (or @code{#-1}). + +As you can see here, this property can be changed as many times as you +wish. Use @code{\\once \\override} if you don't want the tweak to apply +to the whole score. + +" + doctitle = "Adding a figured bass above or below the notes" +} % begin verbatim + +bass = { + \clef bass + g4 b, c d + e d8 c d2 +} +continuo = \figuremode { + <_>4 <6>8 + \once \override Staff.BassFigureAlignmentPositioning #'direction = #CENTER + <5/>8 <_>4 + \override Staff.BassFigureAlignmentPositioning #'direction = #UP + <_+>4 <6> + \set Staff.useBassFigureExtenders = ##t + \override Staff.BassFigureAlignmentPositioning #'direction = #DOWN + <4>4. <4>8 <_+>4 +} +\score { + << + \new Staff = bassStaff \bass + \context Staff = bassStaff \continuo + >> +} + + diff --git a/Documentation/snippets/adding-ambitus-per-voice.ly b/Documentation/snippets/adding-ambitus-per-voice.ly new file mode 100644 index 0000000000..01c33fe59f --- /dev/null +++ b/Documentation/snippets/adding-ambitus-per-voice.ly @@ -0,0 +1,48 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "pitches, staff-notation, vocal-music" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + doctitlees = "Añadir un ámbito por voz" + texidoces = " +Se puede añadir un ámbito por cada voz. En este caso, el ámbito se +debe desplazar manualmente para evitar colisiones. + +" +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d +texidocde = " +Ambitus können pro Stimme gesetzt werden. In diesem Fall müssen sie +manual verschoben werden, um Zusammenstöße zu verhindern. + +" +doctitlede = "Ambitus pro Stimme hinzufügen" + + texidoc = " +Ambitus can be added per voice. In this case, the ambitus must be moved +manually to prevent collisions. + +" + doctitle = "Adding ambitus per voice" +} % begin verbatim + +\new Staff << + \new Voice \with { + \consists "Ambitus_engraver" + } \relative c'' { + \override Ambitus #'X-offset = #2.0 + \voiceOne + c4 a d e + f1 + } + \new Voice \with { + \consists "Ambitus_engraver" + } \relative c' { + \voiceTwo + es4 f g as + b1 + } +>> + diff --git a/Documentation/snippets/adding-an-extra-staff-at-a-line-break.ly b/Documentation/snippets/adding-an-extra-staff-at-a-line-break.ly new file mode 100644 index 0000000000..1f1adc7c54 --- /dev/null +++ b/Documentation/snippets/adding-an-extra-staff-at-a-line-break.ly @@ -0,0 +1,62 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "staff-notation, contexts-and-engravers, breaks" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Al añadir un pentagrama nuevo en un salto de línea, por desgracia +se añade un espacio adicional al final de la línea antes del salto +(reservado para hacer sitio a un cambio de armadura que de todas +formas no se va a imprimir). La solución alternativa es añadir un +ajuste para @code{Staff.explicitKeySignatureVisibility} como se +muestra en el ejemplo. En las versiones 2.10 y anteriores, +también se necesita un ajuste similar para las indicaciones de +compás (véase el ejemplo). + +" + doctitlees = "Añadir un pentagrama adicional en un salto de línea" + + texidoc = " +When adding a new staff at a line break, some extra space is +unfortunately added at the end of the line before the break (to fit in +a key signature change, which will never be printed anyway). The +workaround is to add a setting of +@code{Staff.explicitKeySignatureVisibility} as is shown in the example. +In versions 2.10 and earlier, a similar setting for the time signatures +is also required (see the example). + + + +" + doctitle = "Adding an extra staff at a line break" +} % begin verbatim + +\score { + \new StaffGroup \relative c'' { + \new Staff + \key f \major + c1 c^"Unwanted extra space" \break + << { c1 | c } + \new Staff { + \key f \major + \once \override Staff.TimeSignature #'stencil = ##f + c1 | c + } + >> + c1 | c^"Fixed here" \break + << { c1 | c } + \new Staff { + \once \set Staff.explicitKeySignatureVisibility = #end-of-line-invisible + % The next line is not needed in 2.11.x or later: + \once \override Staff.TimeSignature #'break-visibility = #end-of-line-invisible + \key f \major + \once \override Staff.TimeSignature #'stencil = ##f + c1 | c + } + >> + } +} + diff --git a/Documentation/snippets/adding-an-extra-staff.ly b/Documentation/snippets/adding-an-extra-staff.ly new file mode 100644 index 0000000000..ea62fe5f0f --- /dev/null +++ b/Documentation/snippets/adding-an-extra-staff.ly @@ -0,0 +1,40 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "staff-notation, contexts-and-engravers" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Se puede añadir (posiblemente de forma temporal) un pentagrama +nuevo una vez que la pieza ha comenzado. + +" + doctitlees = "Añadir un pentagrama nuevo" + + texidoc = " +An extra staff can be added (possibly temporarily) after the start of a +piece. + +" + doctitle = "Adding an extra staff" +} % begin verbatim + +\score { + << + \new Staff \relative c'' { c1 | c | c | c | c } + \new StaffGroup \relative c'' { + \new Staff { + c1 | c << + c1 \new Staff { + \once \override Staff.TimeSignature #'stencil = ##f + c1 + } + >> + c1 + } + } + >> +} + diff --git a/Documentation/snippets/adding-bar-lines-to-chordnames-context.ly b/Documentation/snippets/adding-bar-lines-to-chordnames-context.ly new file mode 100644 index 0000000000..5b344efb41 --- /dev/null +++ b/Documentation/snippets/adding-bar-lines-to-chordnames-context.ly @@ -0,0 +1,41 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "chords" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Para añadir indicaciones de línea divisoria dentro del contexto de +los nombres de acorde @code{ChordNames}, incluya el grabador +@code{Bar_engraver}. + +" + doctitlees = "Añadir barras de compás al contexto de nombres de acorde (ChordNames)" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Um Taktstriche in einem @code{ChordNames}-Kontext anzeigen zu lassen, muss der +@code{Bar_engraver} hinzugefügt werden. + +" + doctitlede = "Tatkstriche in einen ChordNames-Kontext hinzufügen" + + texidoc = " +To add bar line indications in the @code{ChordNames} context, add the +@code{Bar_engraver}. + +" + doctitle = "Adding bar lines to ChordNames context" +} % begin verbatim + +\new ChordNames \with { + \override BarLine #'bar-size = #4 + \consists "Bar_engraver" +} +\chordmode { + f1:maj7 f:7 bes:7 +} + + diff --git a/Documentation/snippets/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.ly b/Documentation/snippets/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.ly new file mode 100644 index 0000000000..f9db9218bc --- /dev/null +++ b/Documentation/snippets/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.ly @@ -0,0 +1,47 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "rhythms, expressive-marks" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +La sintaxis de LilyPond puede implicar muchas colocaciones poco +comunes para los paréntesis, corchetes, etc, que a veces se tienen +que intercalar. Por ejemplo, al introducir una barra manual, el +corchete izquierdo de apertura se debe escribir después de la nota +inicial y de su duración, no antes. De forma similar, el corchete +derecho de cierre debe seguir inmediatamente a la nota que se +quiere situar al final del barrado, incluso si esta nota resulta +estar dentro de un grupo de valoración especial. Este fragmento de +código muestra cómo combinar el barrado manual, las ligaduras de +expresión y de unión y las ligaduras de fraseo, con secciones de +valoración especial (encerradas entre llaves). + +" + doctitlees = "Añadir barras, ligaduras de expresión y de unión, etc. cuando se usan ritmos con y sin grupos de valoración especial." + + texidoc = " +LilyPond syntax can involve many unusual placements for parentheses, +brackets etc., which might sometimes have to be interleaved. For +example, when entering a manual beam, the left square bracket has to be +placed after the starting note and its duration, not before. Similarly, +the right square bracket should directly follow the note which is to be +at the end of the requested beaming, even if this note happens to be +inside a tuplet section. This snippet demonstrates how to combine +manual beaming, manual slurs, ties and phrasing slurs with tuplet +sections (enclosed within curly braces). + +" + doctitle = "Adding beams, slurs, ties etc. when using tuplet and non-tuplet rhythms" +} % begin verbatim + +{ + r16[ g16 \times 2/3 { r16 e'8] } + g16( a \times 2/3 { b d e') } + g8[( a \times 2/3 { b d') e'] ~ } + \time 2/4 + \times 4/5 { e'32\( a b d' e' } a'4.\) +} + diff --git a/Documentation/snippets/adding-drum-parts.ly b/Documentation/snippets/adding-drum-parts.ly new file mode 100644 index 0000000000..834ea9b81a --- /dev/null +++ b/Documentation/snippets/adding-drum-parts.ly @@ -0,0 +1,76 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "rhythms, percussion" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Mediante la utilización de las potentes herramientas preconfiguradas +como la función @code{\\drummode} y el contexto @code{DrumStaff}, la +introducción de partes para percusión es muy fácil: las percusiones se +sitúan en sus propias posiciones de pentagrama (con una clave +especial) y tienen las cabezas correspondientes al instrumento. Es +posible añadir un símbolo adicional a la percusión o reducir el número +de líneas. + +" + doctitlees = "Escritura de partes de percusión" + +%% Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 + texidocfr = " +Grâce à la puissance des outils préconfigurés tels que la fonction +@code{\\drummode} et le contexte @code{DrumStaff}, la saisie de +parties pour percussions est extrêmement simplifiée : chaque composant +d'une batterie trouve sa place sur une portée dédiée (avec une clef +spécifique) et les têtes de note sont spécifiques à chaque élément. +Il est également possible d'affecter un symbole particulier à chaque +élément, tout comme de restreindre le nombre de lignes de la portée. + +" + + doctitlefr = "Ajout de parties de batterie" + + + texidoc = " +Using the powerful pre-configured tools such as the @code{\\drummode} +function and the @code{DrumStaff} context, inputting drum parts is +quite easy: drums are placed at their own staff positions (with a +special clef symbol) and have note heads according to the drum. +Attaching an extra symbol to the drum or restricting the number of +lines is possible. + +" + doctitle = "Adding drum parts" +} % begin verbatim + +drh = \drummode { cymc4.^"crash" hhc16^"h.h." hh hhc8 hho hhc8 hh16 hh hhc4 r4 r2 } +drl = \drummode { bd4 sn8 bd bd4 << bd ss >> bd8 tommh tommh bd toml toml bd tomfh16 tomfh } +timb = \drummode { timh4 ssh timl8 ssh r timh r4 ssh8 timl r4 cb8 cb } + +\score { + << + \new DrumStaff \with { + drumStyleTable = #timbales-style + \override StaffSymbol #'line-count = #2 + \override BarLine #'bar-size = #2 + } << + \set Staff.instrumentName = #"timbales" + \timb + >> + \new DrumStaff << + \set Staff.instrumentName = #"drums" + \new DrumVoice { \stemUp \drh } + \new DrumVoice { \stemDown \drl } + >> + >> + \layout { } + \midi { + \context { + \Score + tempoWholesPerMinute = #(ly:make-moment 120 4) + } + } +} + diff --git a/Documentation/snippets/adding-fingerings-to-a-score.ly b/Documentation/snippets/adding-fingerings-to-a-score.ly new file mode 100644 index 0000000000..8eb17ffca7 --- /dev/null +++ b/Documentation/snippets/adding-fingerings-to-a-score.ly @@ -0,0 +1,18 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "editorial-annotations, fretted-strings" + + texidoc = " +Fingering instructions can be entered using a simple syntax. + +" + doctitle = "Adding fingerings to a score" +} % begin verbatim + +\relative c'' { + c4-1 d-2 f-4 e-3 +} + diff --git a/Documentation/snippets/adding-fingerings-to-tablatures.ly b/Documentation/snippets/adding-fingerings-to-tablatures.ly new file mode 100644 index 0000000000..fd5de41166 --- /dev/null +++ b/Documentation/snippets/adding-fingerings-to-tablatures.ly @@ -0,0 +1,48 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "fretted-strings" + +%% Translation of GIT committish: c8446d6eb2fadbf8931a867741572582759935ad + texidocfr = "Ajout de doigtés à des tablatures" + + doctitlefr = " +L'ajout de doigtés à des tablatures s'obtient en conjuguant des +@code{\\markup} et des @code{\\finger}. +" + + texidoc = " +To add fingerings to tablatures, use a combination of @code{\\markup} +and @code{\\finger}. + +" + doctitle = "Adding fingerings to tablatures" +} % begin verbatim + +one = \markup { \finger 1 } +two = \markup { \finger 2 } +threeTwo = \markup { + \override #'(baseline-skip . 2) + \column { + \finger 3 + \finger 2 + } +} +threeFour = \markup { + \override #'(baseline-skip . 2) + \column { + \finger 3 + \finger 4 + } +} + +\score { + \new TabStaff { + \stemUp + e8\4^\one b\2 ^>[ b\2 e\4] + ^>^\threeTwo[ b\2 e\4] + } +} + diff --git a/Documentation/snippets/adding-parentheses-around-an-expressive-mark-or-chordal-note.ly b/Documentation/snippets/adding-parentheses-around-an-expressive-mark-or-chordal-note.ly new file mode 100644 index 0000000000..a8cb375918 --- /dev/null +++ b/Documentation/snippets/adding-parentheses-around-an-expressive-mark-or-chordal-note.ly @@ -0,0 +1,33 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "expressive-marks" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +La función @code{\\parenthesize} es un truco especial que encierra +objetos entre paréntesis. El grob asociado es +@code{Score.ParenthesesItem}. + +" + doctitlees = "Encerrar entre paréntesis una marca expresiva o una nota de un acorde" + + texidoc = " +The @code{\\parenthesize} function is a special tweak that encloses +objects in parentheses. The associated grob is +@code{Score.ParenthesesItem}. + +" + doctitle = "Adding parentheses around an expressive mark or chordal note" +} % begin verbatim + +\relative c' { + c2-\parenthesize -> + \override ParenthesesItem #'padding = #0.1 + \override ParenthesesItem #'font-size = #-4 + 2 +} + + diff --git a/Documentation/snippets/adding-the-current-date-to-a-score.ly b/Documentation/snippets/adding-the-current-date-to-a-score.ly new file mode 100644 index 0000000000..f16500dae8 --- /dev/null +++ b/Documentation/snippets/adding-the-current-date-to-a-score.ly @@ -0,0 +1,49 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "text, titles" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Con algo de código de Scheme, se puede añadir fácilmente la fecha +actual a una partitura. +" + doctitlees = "Añadir la fecha actual a una partitura" + +%% Translation of GIT committish: 7eb450e8e6c935410b8f3212cb53e5a731f4f33f + texidocfr = " +Avec un peu de code Scheme, voici comment ajouter facilement +la date du jour à votre partition. +" + + doctitlefr = "Ajout de la date du jour à une partition" + + texidoc = " +With a little Scheme code, the current date can easily be added to a +score. + +" + doctitle = "Adding the current date to a score" +} % begin verbatim + +% first, define a variable to hold the formatted date: +date = #(strftime "%d-%m-%Y" (localtime (current-time))) + +% use it in the title block: +\header { + title = "Including the date!" + subtitle = \date +} + +\score { + \relative c'' { + c4 c c c + } +} +% and use it in a \markup block: +\markup { + \date +} + diff --git a/Documentation/snippets/adding-volta-brackets-to-additional-staves.ly b/Documentation/snippets/adding-volta-brackets-to-additional-staves.ly new file mode 100644 index 0000000000..329b4f7204 --- /dev/null +++ b/Documentation/snippets/adding-volta-brackets-to-additional-staves.ly @@ -0,0 +1,48 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "repeats" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +El grabador @code{Volta_engraver} reside de forma predeterminada +dentro del contexto de @code{Score}, y los corchetes de la repetición +se imprimen así normalmente sólo encima del pentagrama superior. Esto +se puede ajustar añadiendo el grabador @code{Volta_engraver} al +contexto de @code{Staff} en que deban aparecer los corchetes; véase +también el fragmento de código \"Volta multi staff\". + +" + doctitlees = "Añadir corchetes de primera y segunda vez a más pentagramas" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Der @code{Volta_engraver} befindet sich im @code{Score}-Kontext und Klammern +werden deshalb nur auf dem obersten System dargestellt. Das kann umgangen +werden, indem man den @code{Volta_engraver} zu dem @code{Staff}-Kontext +hinzufügt, in dem die Klammern zusätzlichen vorkommen sollen. Siehe auch +das \"Volta multi staff\"-Schnipsel. + +" + doctitlede = "Volta-Klammern zu zusätzlichen Systemen hinzufügen" + + texidoc = " +The @code{Volta_engraver} by default resides in the @code{Score} +context, and brackets for the repeat are thus normally only printed +over the topmost staff. This can be adjusted by adding the +@code{Volta_engraver} to the @code{Staff} context where the brackets +should appear; see also the \"Volta multi staff\" snippet. + +" + doctitle = "Adding volta brackets to additional staves" +} % begin verbatim + +<< + \new Staff { \repeat volta 2 { c'1 } \alternative { c' } } + \new Staff { \repeat volta 2 { c'1 } \alternative { c' } } + \new Staff \with { \consists "Volta_engraver" } { c'2 g' e' a' } + \new Staff { \repeat volta 2 { c'1 } \alternative { c' } } +>> + diff --git a/Documentation/snippets/additional-voices-to-avoid-collisions.ly b/Documentation/snippets/additional-voices-to-avoid-collisions.ly new file mode 100644 index 0000000000..757e1f6f82 --- /dev/null +++ b/Documentation/snippets/additional-voices-to-avoid-collisions.ly @@ -0,0 +1,65 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "simultaneous-notes" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + doctitlees = "Voces adicionales para evitar colisiones" + texidoces = " +En ciertos casos de polifonía compleja, se necesitan voces adicionales +para evitar colisiones entre las notas. Si se necesitan más de cuatro +voces paralelas, las voces adicionales se añaden definiendo una +variable que utiliza la función de Scheme @code{context-spec-music}. + +" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Ein einigen Fällen von sehr komplexer polyphoner Musik sind zusätzliche +Stimmen notwendig, um Zusammestöße zwischen den Noten zu vermeiden. +Wenn mehr als vier parallele Stimmen benötigt werden, können zusätzliche +Stimmen definiert werden, indem eine Variable mit der Funktion +@code{context-spec-music} definiert wird. + +" + doctitlede = "Zusätzliche Stimmen, um Zusammenstöße zu vermeiden" + + texidoc = " +In some instances of complex polyphonic music, additional voices are +necessary to prevent collisions between notes. If more than four +parallel voices are needed, additional voices can be added by defining +a variable using the Scheme function @code{context-spec-music}. + +" + doctitle = "Additional voices to avoid collisions" +} % begin verbatim + +voiceFive = #(context-spec-music (make-voice-props-set 4) 'Voice) +\relative c'' { + \time 3/4 \key d \minor \partial 2 + << + { \voiceOne + a4. a8 + e'4 e4. e8 + f4 d4. c8 + } \\ { + \voiceThree + f,2 + bes4 a2 + a4 s2 + } \\ { + \voiceFive + s2 + g4 g2 + f4 f2 + } \\ { + \voiceTwo + d2 + d4 cis2 + d4 bes2 + } + >> +} + diff --git a/Documentation/snippets/adjusting-lyrics-vertical-spacing.ly b/Documentation/snippets/adjusting-lyrics-vertical-spacing.ly new file mode 100644 index 0000000000..5df2de2a65 --- /dev/null +++ b/Documentation/snippets/adjusting-lyrics-vertical-spacing.ly @@ -0,0 +1,55 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "text, vocal-music, spacing" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Este fragmento de código muestra cómo situar la línea de base de la +letra más cerca del pentagrama. + +" + doctitlees = "Ajuste del especiado vertical de la letra" + +%% Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 + texidocfr = " +Cet extrait illustre la manière de rapprocher la ligne de paroles +de la portée. + +" + doctitlefr = "Ajustement de l'espacement vertical des paroles" + + + texidoc = " +This snippet shows how to bring the lyrics line closer to the staff. + +" + doctitle = "Adjusting lyrics vertical spacing" +} % begin verbatim + +% Default layout: +<< + \new Staff \new Voice = melody \relative c' { + c4 d e f + g4 f e d + c1 + } + \new Lyrics \lyricsto melody { aa aa aa aa aa aa aa aa aa } + +% Reducing the minimum space below the staff and above the lyrics: + \new Staff \with { + \override VerticalAxisGroup #'minimum-Y-extent = #'(-1 . 4) + } + \new Voice = melody \relative c' { + c4 d e f + g4 f e d + c1 + } + \new Lyrics \with { + \override VerticalAxisGroup #'minimum-Y-extent = #'(-1.2 . 1) + } + \lyricsto melody { aa aa aa aa aa aa aa aa aa } +>> + diff --git a/Documentation/snippets/adjusting-the-shape-of-falls-and-doits.ly b/Documentation/snippets/adjusting-the-shape-of-falls-and-doits.ly new file mode 100644 index 0000000000..10d36297cc --- /dev/null +++ b/Documentation/snippets/adjusting-the-shape-of-falls-and-doits.ly @@ -0,0 +1,40 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "expressive-marks" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Puede ser necesario trucar la propiedad +@code{shortest-duration-space} para poder ajustar el tamaño de las +caídas y subidas de tono («falls» y «doits»). + +" + doctitlees = "Ajustar la forma de las subidas y caídas de tono" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d +texidocde = " +Die @code{shortest-duration-space}-Eigenschaft kann verändert werden, um +das Aussehen von unbestimmten Glissandi anzupassen. + +" + doctitlede = "Das Aussehen von unbestimmten Glissandi anpassen" + + texidoc = " +The @code{shortest-duration-space} property may have to be tweaked to +adjust the shape of falls and doits. + +" + doctitle = "Adjusting the shape of falls and doits" +} % begin verbatim + +\relative c'' { + \override Score.SpacingSpanner #'shortest-duration-space = #4.0 + c2-\bendAfter #+5 + c2-\bendAfter #-3 + c2-\bendAfter #+8 + c2-\bendAfter #-6 +} + diff --git a/Documentation/snippets/aligning-and-centering-instrument-names.ly b/Documentation/snippets/aligning-and-centering-instrument-names.ly new file mode 100644 index 0000000000..58b6eeae64 --- /dev/null +++ b/Documentation/snippets/aligning-and-centering-instrument-names.ly @@ -0,0 +1,74 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "text, paper-and-layout, titles" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +La alineación horizontal de los nombres de instrumento se puede +trucar modificando la propiedad @code{Staff.InstrumentName +#'self-alignment-X}. Las variables de @code{\\layout} +@code{indent} y @code{short-indent} definen el espacio en que se +alinean los nombres de instrumento antes del primer sistema y de +los siguientes, respectivamente. + +" + doctitlees = "Alinear y centrar los nombres de instrumento" + + texidoc = " +The horizontal alignment of instrument names is tweaked by changing the +@code{Staff.InstrumentName #'self-alignment-X} property. The +@code{\\layout} variables @code{indent} and @code{short-indent} define +the space in which the instrument names are aligned before the first +and the following systems, respectively. + +" + doctitle = "Aligning and centering instrument names" +} % begin verbatim + +\paper { + left-margin = 3\cm +} + +\score { + \new StaffGroup << + \new Staff { + \override Staff.InstrumentName #'self-alignment-X = #LEFT + \set Staff.instrumentName = \markup \left-column { + "Left aligned" + "instrument name" + } + \set Staff.shortInstrumentName = #"Left" + c''1 + \break + c''1 + } + \new Staff { + \override Staff.InstrumentName #'self-alignment-X = #CENTER + \set Staff.instrumentName = \markup \center-column { + Centered + "instrument name" + } + \set Staff.shortInstrumentName = #"Centered" + g'1 + g'1 + } + \new Staff { + \override Staff.InstrumentName #'self-alignment-X = #RIGHT + \set Staff.instrumentName = \markup \right-column { + "Right aligned" + "instrument name" + } + \set Staff.shortInstrumentName = #"Right" + e'1 + e'1 + } + >> + \layout { + ragged-right = ##t + indent = 4\cm + short-indent = 2\cm + } +} diff --git a/Documentation/snippets/aligning-bar-numbers.ly b/Documentation/snippets/aligning-bar-numbers.ly new file mode 100644 index 0000000000..a0fc1982b6 --- /dev/null +++ b/Documentation/snippets/aligning-bar-numbers.ly @@ -0,0 +1,71 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { +%% Translation of GIT committish: 21c8461ea87cd670a35a40b91d3ef20de03a0409 + texidocfr = " +Les numéros de mesure s'alignent en principe sur la droite de l'objet +dont ils dépendent. C'est normalement le coin gauche de la portée ou, +en cours de ligne, à gauche de la barre. Vous pouvez toutefois les +centrer par rapport à la barre ou les afficher à droite de la barre. + +" + doctitlefr = "Alignement des numéros de mesure" + + lsrtags = "rhythms" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " + +Los números de compás se alinean de forma predeterminada por la +derecha con su objeto padre. Éste es por lo general el borde +izquierdo de una línea o, si los números se imprimen dentro de la +línea, el lado izquierdo de una línea divisoria. Los números +también se pueden situar directamente sobre la barra de compás o +alineados por la izquierda con ella. + +" + + doctitlees = "Alineación de los números de compás" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Taktnummern sind standardmäßig links an ihrem Ursprungsobjet +ausgerichtet. Das ist normalerweise die linke Ecke einer Linie oder, +wenn die Nummern innerhalb einer Zeile gesetzt werden, auf der +linken Seite eines Taktstrichs. Die Nummern können auch +direkt über dem Taktstrich positioniert werden oder rechts vom +Taktstrich gesetzt werden. + +" + doctitlede = "Taktnummern ausrichten" + + + + texidoc = " +Bar numbers by default are right-aligned to their parent object. This +is usually the left edge of a line or, if numbers are printed within a +line, the left hand side of a bar line. The numbers may also be +positioned directly over the bar line or left-aligned to the bar line. + +" + doctitle = "Aligning bar numbers" +} % begin verbatim + +\relative c' { + \set Score.currentBarNumber = #111 + \override Score.BarNumber #'break-visibility = #'#(#t #t #t) + % Increase the size of the bar number by 2 + \override Score.BarNumber #'font-size = #2 + % Print a bar number every second measure + \set Score.barNumberVisibility = #(every-nth-bar-number-visible 2) + c1 | c1 + % Center-align bar numbers + \override Score.BarNumber #'self-alignment-X = #CENTER + c1 | c1 + % Left-align bar numbers + \override Score.BarNumber #'self-alignment-X = #LEFT + c1 | c1 +} + diff --git a/Documentation/snippets/aligning-marks-with-various-notation-objects.ly b/Documentation/snippets/aligning-marks-with-various-notation-objects.ly new file mode 100644 index 0000000000..7591ea67fd --- /dev/null +++ b/Documentation/snippets/aligning-marks-with-various-notation-objects.ly @@ -0,0 +1,108 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "text" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Si están especificadas, las marcas de texto se pueden alinear con +objetos de notación distintos a las líneas divisorias. Entre estos +objetos se encuentran @code{ambitus}, @code{breathing-sign}, +@code{clef}, @code{custos}, @code{staff-bar}, @code{left-edge}, +@code{key-cancellation}, @code{key-signature} y @code{time-signature}. + +En estos casos, las marcas de texto se centran horizontalmente sobre +el objeto, aunque esto se puede cambiar, como se muestra en la segunda +línea de este ejemplo (en una partitura con varios pentagramas, se +debe hacer este ajuste para todos los pentagramas). + +" + doctitlees = "Alinear marcas con varios objetos de notación" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Wenn angegeben, können Textzeichen auch an anderen Objekten als Taktstrichen +ausgerichtet werden. Zu diesen Objekten gehören @code{ambitus}, +@code{breathing-sign}, @code{clef}, @code{custos}, @code{staff-bar}, +@code{left-edge}, @code{key-cancellation}, @code{key-signature} und +@code{time-signature}. + +In diesem Fall werden die Zeichen horizontal über dem Objekt zentriert. +Diese Ausrichtung kann auch geändert werden, wie die zweite Zeile +des Beispiels zeigt. In einer Partitur mit vielen Systemen sollte +diese Einstellung für alle Systeme gemacht werden. + +" + + doctitlede = "Zeichen an verschiedenen Notationsobjekten ausrichten" + + texidoc = " +If specified, text marks may be aligned with notation objects other +than bar lines. These objects include @code{ambitus}, +@code{breathing-sign}, @code{clef}, @code{custos}, @code{staff-bar}, +@code{left-edge}, @code{key-cancellation}, @code{key-signature}, and +@code{time-signature}. + + + +In such cases, text marks will be horizontally centered above the +object. However this can be changed, as demonstrated on the second line +of this example (in a score with multiple staves, this setting should +be done for all the staves). + + + +" + doctitle = "Aligning marks with various notation objects" +} % begin verbatim + +\relative c' { + e1 + + % the RehearsalMark will be centered above the Clef + \override Score.RehearsalMark #'break-align-symbols = #'(clef) + \key a \major + \clef treble + \mark "↓" + e1 + + % the RehearsalMark will be centered above the TimeSignature + \override Score.RehearsalMark #'break-align-symbols = #'(time-signature) + \key a \major + \clef treble + \time 3/4 + \mark "↓" + e2. + + % the RehearsalMark will be centered above the KeySignature + \override Score.RehearsalMark #'break-align-symbols = #'(key-signature) + \key a \major + \clef treble + \time 4/4 + \mark "↓" + e1 + + \break + e1 + + % the RehearsalMark will be aligned with the left edge of the KeySignature + \once \override Score.KeySignature #'break-align-anchor-alignment = #LEFT + \mark "↓" + \key a \major + e1 + + % the RehearsalMark will be aligned with the right edge of the KeySignature + \once \override Score.KeySignature #'break-align-anchor-alignment = #RIGHT + \key a \major + \mark "↓" + e1 + + % the RehearsalMark will be aligned with the left edge of the KeySignature + % and then shifted right by one unit. + \once \override Score.KeySignature #'break-align-anchor = #1 + \key a \major + \mark "↓" + e1 +} diff --git a/Documentation/snippets/aligning-objects-created-with-the--mark-command.ly b/Documentation/snippets/aligning-objects-created-with-the--mark-command.ly new file mode 100644 index 0000000000..dd9b34c616 --- /dev/null +++ b/Documentation/snippets/aligning-objects-created-with-the--mark-command.ly @@ -0,0 +1,28 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "text" + + texidoc = " +By default the @code{\\mark} command centers objects over a bar line. +This behavior can be modified to align at right or left. + +" + doctitle = "Aligning objects created with the \\mark command" +} % begin verbatim + +\relative c' { + c1 \mark "(Center)" + c1 + \once \override Score.RehearsalMark #'self-alignment-X = #LEFT + \mark "(Left)" + c4 c c c + c4 c c c + \once \override Score.RehearsalMark #'self-alignment-X = #RIGHT + \mark "(Right)" + c1 +} + + diff --git a/Documentation/snippets/allowing-fingerings-to-be-printed-inside-the-staff.ly b/Documentation/snippets/allowing-fingerings-to-be-printed-inside-the-staff.ly new file mode 100644 index 0000000000..4137524994 --- /dev/null +++ b/Documentation/snippets/allowing-fingerings-to-be-printed-inside-the-staff.ly @@ -0,0 +1,45 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "editorial-annotations, fretted-strings, spacing" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Las cifras de digitación orientadas verticalmente se colocan de +forma predeterminada fuera del pentagrama. Sin embargo, este +comportamiento se puede cancelar. + +" + doctitlees = "Permitir que las digitaciones se impriman dentro del pentagrama" + +%% Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 + texidocfr = " +L'empilement des indications de doigté se fait par défaut à l'extérieur de la portée. Néanmoins, il est possible d'annuler ce comportement. + +" + doctitlefr = "Impression des doigtés à l'intérieur de la portée" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Normalerweise werden vertikal orientierte Fingersatzzahlen außerhalb des Systems +gesetzt. Das kann aber verändert werden. + +" + doctitlede = "Fingersatz auch innerhalb des Systems setzen" + + texidoc = " +By default, vertically oriented fingerings are positioned outside the +staff. However, this behavior can be canceled. + +" + doctitle = "Allowing fingerings to be printed inside the staff" +} % begin verbatim + +\relative c' { + 2 + \once \override Fingering #'staff-padding = #'() + 2 +} + diff --git a/Documentation/snippets/ambitus-with-multiple-voices.ly b/Documentation/snippets/ambitus-with-multiple-voices.ly new file mode 100644 index 0000000000..bff1c48277 --- /dev/null +++ b/Documentation/snippets/ambitus-with-multiple-voices.ly @@ -0,0 +1,50 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "pitches, vocal-music" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + doctitlees = "Ámbitos con varias voces" + texidoces = " +La adición del grabador @code{Ambitus_engraver} al contexto de +@code{Staff} crea un solo ámbito por pentagrama, incluso en el caso de +pentagramas con varias voces. + +" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Indem man den @code{Ambitus_engraver} im @code{Staff}-Kontext +hinzufügt, erhält man einen einzigen Ambitus pro System, auch in dem +Fall, dass mehrere Stimmen sich im gleichen System befinden. +" + doctitlede = "Ambitus mit vielen Stimmen" + + texidoc = " +Adding the @code{Ambitus_engraver} to the @code{Staff} context creates +a single ambitus per staff, even in the case of staves with multiple +voices. + +" + doctitle = "Ambitus with multiple voices" +} % begin verbatim + +\new Staff \with { + \consists "Ambitus_engraver" + } +<< + \new Voice \relative c'' { + \voiceOne + c4 a d e + f1 + } + \new Voice \relative c' { + \voiceTwo + es4 f g as + b1 + } +>> + + diff --git a/Documentation/snippets/ambitus.ly b/Documentation/snippets/ambitus.ly new file mode 100644 index 0000000000..5ab08a5a72 --- /dev/null +++ b/Documentation/snippets/ambitus.ly @@ -0,0 +1,41 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "pitches, vocal-music" + + texidoc = " +Ambitus indicate pitch ranges for voices. + + +Accidentals only show up if they are not part of the key signature. +@code{AmbitusNoteHead} grobs also have ledger lines. + +" + doctitle = "Ambitus" +} % begin verbatim + +\layout { + \context { + \Voice + \consists "Ambitus_engraver" + } +} + +<< + \new Staff { + \relative c' { + \time 2/4 + c4 f' + } + } + \new Staff { + \relative c' { + \time 2/4 + \key d \major + cis4 as' + } + } +>> + diff --git a/Documentation/snippets/analysis-brackets-above-the-staff.ly b/Documentation/snippets/analysis-brackets-above-the-staff.ly new file mode 100644 index 0000000000..9cb1b75412 --- /dev/null +++ b/Documentation/snippets/analysis-brackets-above-the-staff.ly @@ -0,0 +1,37 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "editorial-annotations, tweaks-and-overrides" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +De forma predeterminada se añaden corchetes de análisis sencillos +debajo del pentagrama. El ejemplo siguiente muestra una manera de +colocarlos por encima. + +" + doctitlees = "Corchetes de análisis encima del pentagrama" + + texidoc = " +Simple horizontal analysis brackets are added below the staff by +default. The following example shows a way to place them above the +staff instead. + +" + doctitle = "Analysis brackets above the staff" +} % begin verbatim + +\layout { + \context { + \Voice + \consists "Horizontal_bracket_engraver" + } +} +\relative c'' { + \once \override HorizontalBracket #'direction = #UP + c2\startGroup + d2\stopGroup +} + diff --git a/Documentation/snippets/ancient-fonts.ly b/Documentation/snippets/ancient-fonts.ly new file mode 100644 index 0000000000..6032b66fd5 --- /dev/null +++ b/Documentation/snippets/ancient-fonts.ly @@ -0,0 +1,246 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "ancient-notation" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Aquí se muestran muchos de (¿o quizá todos?) los símbolos que +están contemplados por la capacidad de LilyPond para la música +antigua. +" + + doctitlees = "Tipografía de música antigua" + +%% Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 + texidocfr =" +Voici comment graver la plupart, sinon tous les symboles que +LilyPond prend en charge en matière de musique ancienne. + +" + doctitlefr = "Gravure de musique ancienne" + + texidoc = " +Shown here are many (all?) of the symbols that are included in +LilyPond's support for ancient notation. + + + +" + doctitle = "Ancient fonts" +} % begin verbatim + +upperStaff = \new VaticanaStaff = "upperStaff" << + \context VaticanaVoice << + \transpose c c { + + \override NoteHead #'style = #'vaticana.punctum + \key es \major + \clef "vaticana-fa2" + c1 des e f ges + + \override NoteHead #'style = #'vaticana.inclinatum + a! b ces' + \bar "|" + % \break % 1 (8*1) + + \override NoteHead #'style = #'vaticana.quilisma + b! des'! ges! fes! + \breathe + \clef "vaticana-fa1" + \override NoteHead #'style = #'vaticana.plica + es d + \override NoteHead #'style = #'vaticana.reverse.plica + c d + \bar "|" + % \break %2 (8*1) + + \override NoteHead #'style = #'vaticana.punctum.cavum + es f + \override NoteHead #'style = #'vaticana.lpes + g as + \override NoteHead #'style = #'vaticana.upes + bes as + \override NoteHead #'style = #'vaticana.vupes + g f + \override NoteHead #'style = #'vaticana.linea.punctum + \once \override Staff.BarLine #'bar-size = #2.0 \bar "|" + % \break % 3 (8*1) + + es d + \override NoteHead #'style = #'vaticana.epiphonus + c d + \override NoteHead #'style = #'vaticana.cephalicus + es f + + \override Staff.KeySignature #'glyph-name-alist = #alteration-medicaea-glyph-name-alist + \override Staff.Accidental #'glyph-name-alist = #alteration-medicaea-glyph-name-alist + \override Staff.Custos #'style = #'medicaea + \override NoteHead #'style = #'medicaea.punctum + \clef "medicaea-fa2" + ces des + \bar "|" + % \break % 4 (8*1) + + e! f! ges + \clef "medicaea-do2" + \override NoteHead #'style = #'medicaea.inclinatum + a! b! ces' + \override NoteHead #'style = #'medicaea.virga + b! a! + \bar "|" + % \break % 5 (8*1) + + ges fes + \clef "medicaea-fa1" + \override NoteHead #'style = #'medicaea.rvirga + e des ces + + \override Staff.KeySignature #'glyph-name-alist = #alteration-hufnagel-glyph-name-alist + \override Staff.Accidental #'glyph-name-alist = #alteration-hufnagel-glyph-name-alist + \override Staff.Custos #'style = #'hufnagel + \override NoteHead #'style = #'hufnagel.punctum + \clef "hufnagel-fa2" + ces des es + \bar "|" + % \break % 6 (8*1) + + fes ges + \clef "hufnagel-do2" + \override NoteHead #'style = #'hufnagel.lpes + as! bes! ces' + \override NoteHead #'style = #'hufnagel.virga + bes! as! + \bar "|" + % \break % 7 (8*1) + + ges! fes! + \clef "hufnagel-do-fa" + \override NoteHead #'style = #'hufnagel.punctum + es! des ces des! es! fes! + \bar "||" + % \break % 8 (8*1) + + s32*1 + % \break % 12 (32*1) + } + >> +>> + +lowerStaff = \new MensuralStaff = "lowerStaff" << + \context MensuralVoice << + \transpose c c { + + \key a \major + cis'1 d'\breve gis'\breve e'\breve \[ e'\longa fis'\longa \] + \set Staff.forceClef = ##t + \clef "neomensural-c2" + cis1 + \bar "|" + % \break % 2 (16*1) + + \[ g\breve dis''\longa \] + b\breve \[ a\longa d\longa \] + \clef "petrucci-c2" + % \break % 4 (16*1) + + fis1 ces1 + \clef "petrucci-c2" + r\longa + \set Staff.forceClef = ##t + \clef "mensural-c2" + r\breve + \bar "|" + % \break % 5 (8*1) + + r2 + \clef "mensural-g" + r4 r8 r16 r16 + \override NoteHead #'style = #'mensural + \override Rest #'style = #'mensural + \clef "petrucci-f" + c8 b, c16 b, c32 b, c64 b, c64 b, + d8 e d16 e d32 e d64 e d64 e + r\longa + \set Staff.forceClef = ##t + \clef "petrucci-f" + r\breve + \bar "|" + % \break % 6 (8*1) + + r\breve + \clef "mensural-f" + r2 r4 r8 r16 r16 + + \set Staff.forceClef = ##t + \clef "mensural-f" + e\breve f g a1 + \clef "mensural-g" + % \break % 7 (8*1) + + \[ bes'!\longa a'!\longa c''!\longa \] + e'1 d' c' d' \bar "|" + \bar "|" + % \break % 9 (16*1) + + bes'!\longa fis'!1 as'!1 ges'!\longa % lig + \set Staff.forceClef = ##t + \clef "mensural-g" + e'2 d' c' \bar "|" + % \break % 11 (16*1) + + \set Staff.forceClef = ##t + \clef "petrucci-g" + c'2 d' e' f' + \clef "petrucci-g" + g' as'! bes'! cis''! + bes'! as'! gis'! fis'! + \set Staff.forceClef = ##t + \clef "mensural-g" + es'! des'! cis'!1 \bar "||" + % \break % 12 (8*1) + } + >> +>> + +\paper { + line-thickness = #(/ staff-space 5.0) +} + +\score { + << + \upperStaff + \lowerStaff + >> + \layout { + indent = 0.0 + line-width = 17.25\cm + \context { + \Score + timing = ##f + } + \context { + \MensuralVoice + \override NoteHead #'style = #'neomensural + \override Rest #'style = #'neomensural + \override Stem #'flag-style = #'mensural + \override Stem #'thickness = #1.0 + } + \context { + \MensuralStaff + \revert BarLine #'transparent + \override KeySignature #'glyph-name-alist = #alteration-mensural-glyph-name-alist + clefGlyph = #"clefs.petrucci.c2" + } + \context { + \VaticanaStaff + \revert BarLine #'transparent + \override StaffSymbol #'thickness = #2.0 + \override KeySignature #'glyph-name-alist = #alteration-vaticana-glyph-name-alist + \override Custos #'neutral-position = #4 + } + } +} + diff --git a/Documentation/snippets/ancient-notation-intro.itely b/Documentation/snippets/ancient-notation-intro.itely new file mode 100644 index 0000000000..a6de3f24c6 --- /dev/null +++ b/Documentation/snippets/ancient-notation-intro.itely @@ -0,0 +1,7 @@ +@node Ancient notation +@unnumbered Ancient notation + +@ruser{Ancient notation} + +@lysnippets + diff --git a/Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly b/Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly new file mode 100644 index 0000000000..ee6edb8d69 --- /dev/null +++ b/Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly @@ -0,0 +1,84 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { +%% Translation of GIT committish: 892286cbfdbe89420b8181975032ea975e79d2f5 + texidocfr = " +Voici comment vous pourriez transcrire du grégorien. Pour mémoire, il +n'y a en grégorien ni de découpage en mesure, ni de hampe ; seules +sont utilisées des têtes de note blanches ou noires, ainsi que des +signes spécifiques permettant d'indiquer des silences de différentes durées. + +" + doctitlefr = "Exemples de notation ancienne -- transcription moderne de musique grégorienne" + + lsrtags = "ancient-notation, template" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Este ejemplo muestra cómo hacer una transcripción moderna de canto +gregoriano. El canto gregoriano no tiene compás ni plicas; utiliza +solamente cabezas de nota de blanca y de negra, y unas marcas +especiales que indican silencios de distintas longitudes. + +" + + doctitlees = "Plantilla para notación de música antigua (transcripción moderna de canto gregoriano)" +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + + texidocde = " +Dieses Beispiel zeigt eine moderne Transkription des Gregorianischen +Chorals. Hier gibt es keine Takte, keine Notenhälse und es werden nur +halbe und Viertelnoten verwendet. Zusätzliche Zeichen zeigen die +Länge von Pausen an. +" + + doctitlede = "Vorlage für Alte Notation -- moderne Transkription des gregorianischen Chorals" + + texidoc = " +This example demonstrates how to do modern transcription of Gregorian +music. Gregorian music has no measure, no stems; it uses only half and +quarter note heads, and special marks, indicating rests of different +length. + +" + doctitle = "Ancient notation template -- modern transcription of gregorian music" +} % begin verbatim + +\include "gregorian.ly" + +chant = \relative c' { + \set Score.timing = ##f + f4 a2 \divisioMinima + g4 b a2 f2 \divisioMaior + g4( f) f( g) a2 \finalis +} + +verba = \lyricmode { + Lo -- rem ip -- sum do -- lor sit a -- met +} + +\score { + \new Staff << + \new Voice = "melody" \chant + \new Lyrics = "one" \lyricsto melody \verba + >> + \layout { + \context { + \Staff + \remove "Time_signature_engraver" + \remove "Bar_engraver" + \override Stem #'transparent = ##t + } + \context { + \Voice + \override Stem #'length = #0 + } + \context { + \Score + barAlways = ##t + } + } +} + diff --git a/Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly b/Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly new file mode 100644 index 0000000000..50a8964d7e --- /dev/null +++ b/Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly @@ -0,0 +1,295 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "ancient-notation, template" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Al transcribir música mensural, es útil un «incipit» al compienzo +de la pieza para indicar la tonalidad y el tempo +originales. Aunque los músicos actuales están acostumbrados a las +barras de compás para reconocer con más facilidad los patrones +rítmicos, durante el período de la música mensural aún no se +habíen inventado las líneas divisorias; de hecho, la medida solía +cambiar a cada pocas notas. Como compromiso, a menudo las líneas +divisorias se imprimen entre los pentagramas en vez de hacerlo +encima de ellos. + +" + doctitlees = "Plantilla de notación de música antigua (transcripción moderna de música mensural)" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Bei der Transkription von Mensuralmusik ist es oft erwünscht, ein +Incipit an den Anfang des Stückes zu stellen, damit klar ist, wie +Tempo und Schlüssel in der Originalnotation gesetzt waren. Während +heutzutage Musiker an Taktlinien gewöhnt sind, um Rhythmen schneller +zu erkennen, wurden diese in der Mensuralmusik nicht verwendet. +Tatsächlich ändern sich die Rhythmen auch oft alle paar Noten. Als +ein Kompromiss werden die Notenlinien nicht auf dem System, sondern +zwischen den Systemen geschrieben. +" + +doctitlede = "Vorlage für Alte Notation -- moderne Transkription von Mensuralmusik" + +%% Translation of GIT committish: 892286cbfdbe89420b8181975032ea975e79d2f5 + texidocfr = " +Lorsque l'on transcrit de la musique mensurale, un @emph{incipit} permet +d'indiquer la tonalité et le tempo d'origine. Si les musiciens sont de +nos jours habitués aux barres de mesures qui présentent la structure +rythmique d'une œuvre, elles n'étaient pas en vigueur à l'époque où ces +pièces ont été composées, d'autant plus que la @qq{métrique} pouvait +changer au fil des notes. Un compromis consiste à imprimer des barres +entre les portées plutôt que sur chacune d'elles. + +" + doctitlefr = "Exemples de notation ancienne -- transcription moderne de musique mensurale" + + doctitle = "Exemples de notation ancienne -- transcription moderne de musique mensurale" + + texidoc = " +When transcribing mensural music, an incipit at the beginning of the +piece is useful to indicate the original key and tempo. While today +musicians are used to bar lines in order to faster recognize rhythmic +patterns, bar lines were not yet invented during the period of mensural +music; in fact, the meter often changed after every few notes. As a +compromise, bar lines are often printed between the staves rather than +on the staves. + +" + doctitle = "Ancient notation template -- modern transcription of mensural music" +} % begin verbatim + +global = { + \set Score.skipBars = ##t + + % incipit + \once \override Score.SystemStartBracket #'transparent = ##t + \override Score.SpacingSpanner #'spacing-increment = #1.0 % tight spacing + \key f \major + \time 2/2 + \once \override Staff.TimeSignature #'style = #'neomensural + \override Voice.NoteHead #'style = #'neomensural + \override Voice.Rest #'style = #'neomensural + \set Staff.printKeyCancellation = ##f + \cadenzaOn % turn off bar lines + \skip 1*10 + \once \override Staff.BarLine #'transparent = ##f + \bar "||" + \skip 1*1 % need this extra \skip such that clef change comes + % after bar line + \bar "" + + % main + \revert Score.SpacingSpanner #'spacing-increment % CHECK: no effect? + \cadenzaOff % turn bar lines on again + \once \override Staff.Clef #'full-size-change = ##t + \set Staff.forceClef = ##t + \key g \major + \time 4/4 + \override Voice.NoteHead #'style = #'default + \override Voice.Rest #'style = #'default + + % FIXME: setting printKeyCancellation back to #t must not + % occur in the first bar after the incipit. Dto. for forceClef. + % Therefore, we need an extra \skip. + \skip 1*1 + \set Staff.printKeyCancellation = ##t + \set Staff.forceClef = ##f + + \skip 1*7 % the actual music + + % let finis bar go through all staves + \override Staff.BarLine #'transparent = ##f + + % finis bar + \bar "|." +} + +discantusNotes = { + \transpose c' c'' { + \set Staff.instrumentName = #"Discantus " + + % incipit + \clef "neomensural-c1" + c'1. s2 % two bars + \skip 1*8 % eight bars + \skip 1*1 % one bar + + % main + \clef "treble" + d'2. d'4 | + b e' d'2 | + c'4 e'4.( d'8 c' b | + a4) b a2 | + b4.( c'8 d'4) c'4 | + \once \override NoteHead #'transparent = ##t c'1 | + b\breve | + } +} + +discantusLyrics = \lyricmode { + % incipit + IV- + + % main + Ju -- bi -- | + la -- te De -- | + o, om -- + nis ter -- | + ra, __ om- | + "..." | + -us. | +} + +altusNotes = { + \transpose c' c'' { + \set Staff.instrumentName = #"Altus " + + % incipit + \clef "neomensural-c3" + r1 % one bar + f1. s2 % two bars + \skip 1*7 % seven bars + \skip 1*1 % one bar + + % main + \clef "treble" + r2 g2. e4 fis g | % two bars + a2 g4 e | + fis g4.( fis16 e fis4) | + g1 | + \once \override NoteHead #'transparent = ##t g1 | + g\breve | + } +} + +altusLyrics = \lyricmode { + % incipit + IV- + + % main + Ju -- bi -- la -- te | % two bars + De -- o, om -- | + nis ter -- ra, | + "..." | + -us. | +} + +tenorNotes = { + \transpose c' c' { + \set Staff.instrumentName = #"Tenor " + + % incipit + \clef "neomensural-c4" + r\longa % four bars + r\breve % two bars + r1 % one bar + c'1. s2 % two bars + \skip 1*1 % one bar + \skip 1*1 % one bar + + % main + \clef "treble_8" + R1 | + R1 | + R1 | + r2 d'2. d'4 b e' | % two bars + \once \override NoteHead #'transparent = ##t e'1 | + d'\breve | + } +} + +tenorLyrics = \lyricmode { + % incipit + IV- + + % main + Ju -- bi -- la -- te | % two bars + "..." | + -us. | +} + +bassusNotes = { + \transpose c' c' { + \set Staff.instrumentName = #"Bassus " + + % incipit + \clef "bass" + r\maxima % eight bars + f1. s2 % two bars + \skip 1*1 % one bar + + % main + \clef "bass" + R1 | + R1 | + R1 | + R1 | + g2. e4 | + \once \override NoteHead #'transparent = ##t e1 | + g\breve | + } +} + +bassusLyrics = \lyricmode { + % incipit + IV- + + % main + Ju -- bi- | + "..." | + -us. | +} + +\score { + \new StaffGroup = choirStaff << + \new Voice = + "discantusNotes" << \global \discantusNotes >> + \new Lyrics = + "discantusLyrics" \lyricsto discantusNotes { \discantusLyrics } + \new Voice = + "altusNotes" << \global \altusNotes >> + \new Lyrics = + "altusLyrics" \lyricsto altusNotes { \altusLyrics } + \new Voice = + "tenorNotes" << \global \tenorNotes >> + \new Lyrics = + "tenorLyrics" \lyricsto tenorNotes { \tenorLyrics } + \new Voice = + "bassusNotes" << \global \bassusNotes >> + \new Lyrics = + "bassusLyrics" \lyricsto bassusNotes { \bassusLyrics } + >> + \layout { + \context { + \Score + + % no bars in staves + \override BarLine #'transparent = ##t + + % incipit should not start with a start delimiter + \remove "System_start_delimiter_engraver" + } + \context { + \Voice + + % no slurs + \override Slur #'transparent = ##t + + % Comment in the below "\remove" command to allow line + % breaking also at those barlines where a note overlaps + % into the next bar. The command is commented out in this + % short example score, but especially for large scores, you + % will typically yield better line breaking and thus improve + % overall spacing if you comment in the following command. + %\remove "Forbid_line_break_engraver" + } + } +} + + + + diff --git a/Documentation/snippets/ancient-notation.snippet-list b/Documentation/snippets/ancient-notation.snippet-list new file mode 100644 index 0000000000..8dabc7f59b --- /dev/null +++ b/Documentation/snippets/ancient-notation.snippet-list @@ -0,0 +1,11 @@ +adding-a-figured-bass-above-or-below-the-notes.ly +ancient-fonts.ly +ancient-notation-template----modern-transcription-of-gregorian-music.ly +ancient-notation-template----modern-transcription-of-mensural-music.ly +ancient-time-signatures.ly +chant-or-psalms-notation.ly +custodes.ly +incipit.ly +mensurstriche-layout-bar-lines-between-the-staves.ly +rest-styles.ly +transcription-of-ancient-music-with-incipit.ly diff --git a/Documentation/snippets/ancient-time-signatures.ly b/Documentation/snippets/ancient-time-signatures.ly new file mode 100644 index 0000000000..82d6ffc43d --- /dev/null +++ b/Documentation/snippets/ancient-time-signatures.ly @@ -0,0 +1,28 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "ancient-notation" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Las indicaciones de compás también se pueden grabar en estilo antiguo. + +" + doctitlees = "Indicaciones de compás antiguas" + + texidoc = " +Time signatures may also be engraved in an old style. + + + +" + doctitle = "Ancient time signatures" +} % begin verbatim + +{ + \override Staff.TimeSignature #'style = #'neomensural + s1 +} + diff --git a/Documentation/snippets/applying-note-head-styles-depending-on-the-step-of-the-scale.ly b/Documentation/snippets/applying-note-head-styles-depending-on-the-step-of-the-scale.ly new file mode 100644 index 0000000000..3a60cec50e --- /dev/null +++ b/Documentation/snippets/applying-note-head-styles-depending-on-the-step-of-the-scale.ly @@ -0,0 +1,102 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "pitches, editorial-annotations" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + doctitlees = "Aplicar estilos de cabeza según la nota de la escala" + texidoces = " +La propiedad @code{shapeNoteStyles} se puede usar para definir varios +estilos de cabezas de nota para cada grado de la escala (según esté +establecido por la armadura o por la propiedad \"tonic\"). Esta +propiedad requiere un conjunto de símbolos, que pueden ser puramente +arbitrarios (se permiten expresiones geométricas como @code{triangle}, +triángulo, @code{cross}, aspas, y @code{xcircle}, círculo con aspas) o +basados en una antigua tradición americana de grabado (ciertos nombres +de nota latinos trambién se permiten). + +Dicho esto, para imitar antiguos cancioneros americanos, existen varios +estilos predefinidos de cabezas de nota disponibles a través de +instrucciones de abreviatura como @code{\\aikenHeads} o +@code{\\sacredHarpHeads}. + +Este ejemplo muestra distintas formas de obtener cabezas de notas con forma, +y muestra la capacidad de transportar una melodía sin perder la +correspondencia entre las funciones armónicas y los estilos de cabezas de +nota. + +" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + doctitlede = "Notenkopfstile basierend auf der Tonleiterstufe erstellen" + texidocde = " +Die @code{shapeNoteStyles}-(NotenFormenStile)-Eigenschaft kann benutzt +werden, um verschiedene Notenstile für jeden Schritt der Tonleiter +zu definieren (vorgegeben von der Tonart oder der @qq{tonic} +(Tonika)-Eigneschaft. Diese Eigenschaft braucht eine Anzahl von Symbolen, +welche beliebig sein können (geometrische Ausdrücke wie @code{triangle} +(Dreieck), @code{cross} (Kreuz) und @code{xcircle} (X-Kreis) sind erlaubt) +oder basierend auf einer alten amerikanischen Notensatztradition (einige +lateinische Notenbezeichnungen sind auch erlaubt). + +Um alte amerikanische Liederbücher zu imitieren, gibt es einige +vordefinierte Notenstile wie etwa @code{\\aikenHeads} (im Stil von Aiken) +oder @code{\\sacredHarpHeads} (im Stil der Sacred Harp-Tradition). + +Dieses Beispiel zeigt, wie man unterschiedlich geformte Noten erhält und +eine Melodie transponieren kann, ohne dass das Verhältnis zwischen den +harmonischen Funktionen und dem Notenstil verloren geht. + +" + + texidoc = " +The @code{shapeNoteStyles} property can be used to define various note +head styles for each step of the scale (as set by the key signature or +the \"tonic\" property). This property requires a set of symbols, which +can be purely arbitrary (geometrical expressions such as +@code{triangle}, @code{cross}, and @code{xcircle} are allowed) or based +on old American engraving tradition (some latin note names are also +allowed). + +That said, to imitate old American song books, there are several +predefined note head styles available through shortcut commands such as +@code{\\aikenHeads} or @code{\\sacredHarpHeads}. + +This example shows different ways to obtain shape note heads, and +demonstrates the ability to transpose a melody without losing the +correspondence between harmonic functions and note head styles. + +" + doctitle = "Applying note head styles depending on the step of the scale" +} % begin verbatim + +fragment = { + \key c \major + c2 d + e2 f + g2 a + b2 c +} + +\score { + \new Staff { + \transpose c d + \relative c' { + \set shapeNoteStyles = #'#(do re mi fa + #f la ti) + \fragment + } + + \break + + \relative c' { + \set shapeNoteStyles = #'#(cross triangle fa #f + mensural xcircle diamond) + \fragment + } + } + \layout { ragged-right = ##t } +} + diff --git a/Documentation/snippets/arabic-improvisation.ly b/Documentation/snippets/arabic-improvisation.ly new file mode 100644 index 0000000000..567655d883 --- /dev/null +++ b/Documentation/snippets/arabic-improvisation.ly @@ -0,0 +1,51 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "world-music" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Para las improvisaciones o @emph{taqasim} que son libres durante unos +momentos, se puede omitir la indicación de compás y se puede usar +@code{\cadenzaOn}. Podría ser necesario ajustar el estilo de +alteraciones accidentales, porque la ausencia de líneas divisorias +hará que la alteración aparezca una sola vez. He aquí un ejemplo de +cómo podría ser el comienzo de una improvisación @emph{hijaz}: + +" +doctitlees = "Improvisación de música árabe" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Bei Improvisation oder @emph{taqasim}, die zeitlich frei gespielt +werden, kann die Taktart ausgelassen werden und @code{\cadenzaOn} +kann eingesetzt werden. Es kann nötig sein, den Versetzungszeichenstil +anzupassen, weil sonst die Versetzungszeichen nur einmal ausgegeben +werden, da keine Taktlinien gesetzt sind. Hier ein Beispiel, wie +der Begin einer @emph{hijaz}-Improvisation aussehen könnte: + +" + + doctitlede = "Arabische Improvisation" + + texidoc = " +For improvisations or taqasim which are temporarily free, the time +signature can be omitted and @code{\\cadenzaOn} can be used. Adjusting +the accidental style might be required, since the absence of bar lines +will cause the accidental to be marked only once. Here is an example +of what could be the start of a hijaz improvisation: + +" + doctitle = "Arabic improvisation" +} % begin verbatim + +\include "arabic.ly" + +\relative sol' { + \key re \kurd + #(set-accidental-style 'forget) + \cadenzaOn + sol4 sol sol sol fad mib sol1 fad8 mib re4. r8 mib1 fad sol +} diff --git a/Documentation/snippets/automatic-beam-subdivisions.ly b/Documentation/snippets/automatic-beam-subdivisions.ly new file mode 100644 index 0000000000..b045bf3221 --- /dev/null +++ b/Documentation/snippets/automatic-beam-subdivisions.ly @@ -0,0 +1,48 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "rhythms" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Se pueden subdividir las barras automáticamente. Estableciendo la +propiedad @code{subdivideBeams}, las barras se subdividen en +posiciones de pulso (tal y como se especifica en @code{beatLength}). + +" + doctitlees = "Subdivisiones de barra automáticas" + + texidoc = " +Beams can be subdivided automatically. By setting the property +@code{subdivideBeams}, beams are subdivided at beat positions (as +specified in @code{beatLength}). + +" + doctitle = "Automatic beam subdivisions" +} % begin verbatim + +\new Staff { + \relative c'' { + << + { + \voiceOne + \set subdivideBeams = ##t + b32[ a g f c' b a g + b32^"subdivide beams" a g f c' b a g] + } + \new Voice { + \voiceTwo + b32_"default"[ a g f c' b a g + b32 a g f c' b a g] + } + >> + \oneVoice + \set beatLength = #(ly:make-moment 1 8) + b32^"beatLength 1 8"[ a g f c' b a g] + \set beatLength = #(ly:make-moment 1 16) + b32^"beatLength 1 16"[ a g f c' b a g] + } +} + diff --git a/Documentation/snippets/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly b/Documentation/snippets/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly new file mode 100644 index 0000000000..4db531ae02 --- /dev/null +++ b/Documentation/snippets/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly @@ -0,0 +1,107 @@ +%% Do not edit this file; it is auto-generated from input/new +%% This file is in the public domain. +%% Note: this file works from version 2.13.4 +\version "2.13.4" + +\header { +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +En un compás sencillo como 2/2 ó 4/4, las corcheas se barran de forma +predeterminada como dos grupos de cuatro. + +Utilizando un macro que seobreescribe el comportamiento automático del +barrado, este fragmento de código cambia el barrado a pulsos de negra. + +" + doctitlees = "Barras automáticas de dos en dos en los compases de 4/4 o de 2/2" + +%% Translation of GIT committish: 1154b407d42f303a024598296ad36ab6c93e2b5a + texidocfr = " +Dans une métrique simple comme 4/4 ou 2/2, les croches sont ligaturées +par défaut en deux groupes de quatre. + +En utilisant une macro qui modifie le comportement des ligatures +automatiques, voici comment obtenir des ligatures basées sur la valeur +d'une noire. + +" + doctitlefr = "Ligature automatique deux par deux, aussi bien en 4/4 qu'en 2/2" + + lsrtags = "rhythms" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +En un compás sencillo como 2/2 ó 4/4, las corcheas se barran de forma +predeterminada como dos grupos de cuatro. + +Utilizando un macro que seobreescribe el comportamiento automático del +barrado, este fragmento de código cambia el barrado a pulsos de negra. + +" + doctitlees = "Barras automáticas de dos en dos en los compases de 4/4 o de 2/2" + +%% Translation of GIT committish: 1154b407d42f303a024598296ad36ab6c93e2b5a + texidocfr = " +Dans une métrique simple comme 4/4 ou 2/2, les croches sont ligaturées +par défaut en deux groupes de quatre. + +En utilisant une macro qui modifie le comportement des ligatures +automatiques, voici comment obtenir des ligatures basées sur la valeur +d'une noire. + +" + doctitlefr = "Ligature automatique deux par deux, aussi bien en 4/4 qu'en 2/2" + + texidoc = " +In a simple time signature of 2/2 or 4/4, 8th notes are beamed by +default as two sets of four. + +Using a macro which overrides the autobeaming behavior, this snippet +changes the beaming to quarter note beats. + +" + doctitle = "Automatic beams two per two in 4/4 or 2/2 time signature" +} % begin verbatim + +% Automatic beams two per two in 4/4 or 2/2 time signature +% _____ +% Default | | | | +% _ _ +% Required | | | | + +% macro for beamed two per two in 2/2 and 4/4 time signature +qBeam = { + \overrideBeamSettings #'Staff #'(4 . 4) #'end #'((* . (1 1 1 1))) + \overrideBeamSettings #'Staff #'(2 . 2) #'end + #'((* . (1 1)) + ((1 . 8) . (2 2 2 2))) +} % begin verbatim + + +\score { + << + \new Staff { + \relative c'' { + \time 4/4 + g8-"without the macro" g g g g g g g + g8 g g g4 g8 g g + } + } + %Use the macro + \new Staff { + \relative c'' { + \time 4/4 + \qBeam + g8-"with the macro" g g g g g g g + g8 g g g4 g8 g g + } + } + >> + \layout { + \context { + \Staff + \override TimeSignature #'style = #'() + } + } +} + diff --git a/Documentation/snippets/avoiding-collisions-with-chord-fingerings.ly b/Documentation/snippets/avoiding-collisions-with-chord-fingerings.ly new file mode 100644 index 0000000000..fb1bbda9b8 --- /dev/null +++ b/Documentation/snippets/avoiding-collisions-with-chord-fingerings.ly @@ -0,0 +1,39 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "rhythms, editorial-annotations, chords, tweaks-and-overrides" + + texidoc = " +Fingerings and string numbers applied to individual notes will +automatically avoid beams and stems, but this is not true by default +for fingerings and string numbers applied to the individual notes of +chords. The following example shows how this default behavior can be +overridden. + +" + doctitle = "Avoiding collisions with chord fingerings" +} % begin verbatim + +\relative c' { + \set fingeringOrientations = #'(up) + \set stringNumberOrientations = #'(up) + \set strokeFingerOrientations = #'(up) + + % Default behavior + r8 + 8 + 8 + 8 + + % Corrected to avoid collisions + r8 + \override Fingering #'add-stem-support = ##t + 8 + \override StringNumber #'add-stem-support = ##t + 8 + \override StrokeFinger #'add-stem-support = ##t + 8 +} + diff --git a/Documentation/snippets/beam-endings-in-score-context.ly b/Documentation/snippets/beam-endings-in-score-context.ly new file mode 100644 index 0000000000..23593b8402 --- /dev/null +++ b/Documentation/snippets/beam-endings-in-score-context.ly @@ -0,0 +1,84 @@ +%% Do not edit this file; it is auto-generated from input/new +%% This file is in the public domain. +%% Note: this file works from version 2.13.4 +\version "2.13.4" + +\header { +%% Translation of GIT committish: 21c8461ea87cd670a35a40b91d3ef20de03a0409 + texidocfr = " +Les règles de ligatures définies au niveau du contexte @code{Score} +s'appliqueront à toutes les portées. Il est toutefois possible de +moduler au niveau @code{Staff} ou @code{Voice} : + +" + doctitlefr = "Définition de règles de ligature pour la partition" + + lsrtags = "rhythms" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Las reglas de final de barra especificadas en el contexto +@code{Score} se aplican a todos los pentagramas, pero se pueden +modificar tanto en los niveles de @code{Staff} como de +@code{Voice}: + +" + doctitlees = "Finales de barra en el contexto Score" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Balkenenderegeln, die im @code{Score}-Kontext definiert werden, wirken +sich auf alle Systeme aus, können aber auf @code{Staff}- und +@code{Voice}-Ebene neu verändert werden: + +" + doctitlede = "Balkenenden auf Score-Ebene" + + + + texidoc = " +Beam-ending rules specified in the @code{Score} context apply to all +staves, but can be modified at both @code{Staff} and @code{Voice} +levels: + +" + doctitle = "Beam endings in Score context" +} % begin verbatim + + +\relative c'' { + \time 5/4 + % Set default beaming for all staves + \overrideBeamSettings #'Score #'(5 . 4) #'end + #'(((1 . 8) . (3 4 3)) + ((1 . 16) . (6 8 6)) + ((1 . 32) . (12 16 12))) + << + \new Staff { + c8 c c c c c c c c c + } + \new Staff { + % Modify beaming for just this staff + \overrideBeamSettings #'Staff #'(5 . 4) #'end + #'((* . (3 2))) + c8 c c c c c c c c c + } + \new Staff { + % Inherit beaming from Score context + << + { + \voiceOne + c8 c c c c c c c c c + } + % Modify beaming for this voice only + \new Voice { + \voiceTwo + \overrideBeamSettings #'Voice #'(5 . 4) #'end + #'((* . (3 2))) + a8 a a a a a a a a a + } + >> + } + >> +} + diff --git a/Documentation/snippets/beam-grouping-in-7-8-time.ly b/Documentation/snippets/beam-grouping-in-7-8-time.ly new file mode 100644 index 0000000000..c9c17ad7f9 --- /dev/null +++ b/Documentation/snippets/beam-grouping-in-7-8-time.ly @@ -0,0 +1,60 @@ +%% Do not edit this file; it is auto-generated from input/new +%% This file is in the public domain. +%% Note: this file works from version 2.13.4 +\version "2.13.4" + +\header { +%% Translation of GIT committish: bee31293920d834cd3698f00ddcc2402c3164619 +texidocfr = " +Aucune règle de ligature automatique n'est disponible pour une mesure à +7/8. Il faudra donc, en pareil cas, définir vous-même les règles de +regroupement. Pour, par exemple, ligaturer sur la base de 2/8-3/8-2/8, +il faudra donc définir les terminaisons de 2/8 et 5/8 : + +" + doctitlefr = "Règle de ligature dans une mesure à 7/8" + + lsrtags = "rhythms" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +No está especificada ninguna agrupación predeterminada automática +de las barras para el compás de 7/8, de forma que si se requieren +barras automáticas se debe especificar la forma de agrupamiento. +Por ejemplo, para agrupar todas las barras en la forma 2-3-2 en el +compás de 7/8, especificamos los finales de barra en 2/8 y 5/8: + +" + doctitlees = "Agrupamiento de las barras en el compás de 7/8" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d +texidocde = " +Es gibt keine automatischen Balkengruppen für 7/8-Takte. Wenn diese +Taktart benötigt wird, müssen die Gruppierungen definiert werden. Um +beispielsweise alle Noten in 2/8-3/8-2/8 aufzuteilen, müssen Balkenenden +für 2/8 und 5/8 definiert werden: + +" + doctitlede = "Balkengruppen für 7/8-Takte" + + + texidoc = " +There are no default automatic beam groupings specified for 7/8 time, +so if automatic beams are required the grouping must be specified. For +example, to group all beams 2-3-2 in 7/8 time, specify beam endings at +2/8 and 5/8: + +" + doctitle = "Beam grouping in 7/8 time" +} % begin verbatim + + +\relative c'' { + \time 7/8 + % rhythm 2-3-2 + a8 a a a a a a + \overrideBeamSettings #'Score #'(7 . 8) #'end + #'((* . (2 3 2))) + a8 a a a a a a +} + diff --git a/Documentation/snippets/beams-across-line-breaks.ly b/Documentation/snippets/beams-across-line-breaks.ly new file mode 100644 index 0000000000..038d5fcfa1 --- /dev/null +++ b/Documentation/snippets/beams-across-line-breaks.ly @@ -0,0 +1,50 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "rhythms" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Normalmente están prohibidos los saltos de línea si las barras +atraviesan las líneas divisorias. Se puede cambiar este +comportamiento como se muestra aquí: + +" + doctitlees = "Barras que atraviesan saltos de línea" + + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d +texidocde = " +Zeilenumbrüche sind normalerweise während Balken verboten. Das kann geändert +werden. + +" + doctitlede = "Balken über Zeilenumbrüche" + + +%% Translation of GIT committish: b3196fadd8f42d05ba35e8ac42f7da3caf8a3079 + + texidocfr = " +Il est normalement impensable qu'un saut de ligne tombe au milieu d'une +ligature. LilyPond permet néanmoins de l'obtenir. + +" + doctitlefr = "Ligature au moment d'un saut de ligne" + + texidoc = " +Line breaks are normally forbidden when beams cross bar lines. This +behavior can be changed as shown: + +" + doctitle = "Beams across line breaks" +} % begin verbatim + +\relative c'' { + \override Beam #'breakable = ##t + c8 c[ c] c[ c] c[ c] c[ \break + c8] c[ c] c[ c] c[ c] c +} + + diff --git a/Documentation/snippets/blanking-staff-lines-using-the--whiteout-command.ly b/Documentation/snippets/blanking-staff-lines-using-the--whiteout-command.ly new file mode 100644 index 0000000000..2ee1d47beb --- /dev/null +++ b/Documentation/snippets/blanking-staff-lines-using-the--whiteout-command.ly @@ -0,0 +1,33 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "editorial-annotations, text" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +La instrucción @code{\\whiteout} intercala un rectángulo blanco +debajo de un elemento de marcado. Este rectángulo blanco no tapa +a ningún otro objeto gráfico, puesto que las líneas del pentagrama +están en una capa inferior a la de la mayor parte de los otros +objetos. + +" + doctitlees = "Poner en blanco las líneas del pentagrama utilizando la instrucción \\whiteout" + + texidoc = " +The @code{\\whiteout} command underlays a markup with a white box. +Since staff lines are in a lower layer than most other grobs, this +white box will not overlap any other grob. + +" + doctitle = "Blanking staff lines using the \\whiteout command" +} % begin verbatim + +\layout { ragged-right = ##f } +\relative c' { + \override TextScript #'extra-offset = #'(2 . 4) + c2-\markup { \whiteout \pad-markup #0.5 "middle C" } c +} + diff --git a/Documentation/snippets/book-parts.ly b/Documentation/snippets/book-parts.ly new file mode 100644 index 0000000000..b1aecf6b45 --- /dev/null +++ b/Documentation/snippets/book-parts.ly @@ -0,0 +1,68 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "paper-and-layout" + + texidoc = " +@code{\\bookpart} can be used to split a book into several parts. Each +part last page can be affected by @code{ragged-last-bottom}. Header and +footer markups can detect a part last page, and make the difference +with the book last page. + +" + doctitle = "Book parts" +} % begin verbatim + +#(set-default-paper-size "a6") + +\book { + + %% book paper, which is inherited by all children bookparts + \paper { + ragged-last-bottom = ##t + %% Page footer: add a different part-tagline at part last page + oddFooterMarkup = \markup { + \column { + \fill-line { + %% Copyright header field only on book first page. + \on-the-fly #first-page \fromproperty #'header:copyright + } + \fill-line { + %% Part tagline header field only on each part last page. + \on-the-fly #part-last-page \fromproperty #'header:parttagline + } + \fill-line { + %% Tagline header field only on book last page. + \on-the-fly #last-page \fromproperty #'header:tagline + } + } + } + } + + %% book header, which is inherited by the first bookpart + \header { + title = "Book title" + copyright = "Copyright line on book first page" + parttagline = "Part tagline" + tagline = "Book tagline" + } + + \bookpart { + %% a different page breaking function may be used on each part + \paper { page-breaking = #ly:minimal-breaking } + \header { subtitle = "First part" } + \markup { The first book part } + \markup { a page break } + \pageBreak + \markup { first part last page } + \markup \wordwrap { with ragged-last-bottom (see the space below this text) } + } + + \bookpart { + \header { subtitle = "Second part" } + { c' } + } + +} diff --git a/Documentation/snippets/breaks.snippet-list b/Documentation/snippets/breaks.snippet-list new file mode 100644 index 0000000000..0dd9ee20d6 --- /dev/null +++ b/Documentation/snippets/breaks.snippet-list @@ -0,0 +1,3 @@ +adding-an-extra-staff-at-a-line-break.ly +positioning-segno-and-coda-with-line-break.ly +removing-the-first-empty-line.ly diff --git a/Documentation/snippets/breathing-signs.ly b/Documentation/snippets/breathing-signs.ly new file mode 100644 index 0000000000..b9bad0cfc1 --- /dev/null +++ b/Documentation/snippets/breathing-signs.ly @@ -0,0 +1,40 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "expressive-marks" + + texidoc = " +Breathing signs are available in different tastes: commas (default), +ticks, vees and \"railroad tracks\" (caesura). + +" + doctitle = "Breathing signs" +} % begin verbatim + +\new Staff \relative c'' { + \key es \major + \time 3/4 + % this bar contains no \breathe + << { g4 as g } \\ { es4 bes es } >> | + % Modern notation: + % by default, \breathe uses the rcomma, just as if saying: + % \override BreathingSign #'text = #(make-musicglyph-markup "scripts.rcomma") + << { g4 as g } \\ { es4 \breathe bes es } >> | + + % rvarcomma and lvarcomma are variations of the default rcomma and lcomma + % N.B.: must use Staff context here, since we start a Voice below + \override Staff.BreathingSign #'text = \markup { \musicglyph #"scripts.rvarcomma" } + << { g4 as g } \\ { es4 \breathe bes es } >> | + + % vee + \override BreathingSign #'text = \markup { \musicglyph #"scripts.upbow" } + es8[ d es f g] \breathe f | + + % caesura + \override BreathingSign #'text = \markup { \musicglyph #"scripts.caesura.curved" } + es8[ d] \breathe es[ f g f] | + es2 r4 \bar "||" +} + diff --git a/Documentation/snippets/broken-crescendo-hairpin.ly b/Documentation/snippets/broken-crescendo-hairpin.ly new file mode 100644 index 0000000000..d5c5be9151 --- /dev/null +++ b/Documentation/snippets/broken-crescendo-hairpin.ly @@ -0,0 +1,77 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "expressive-marks" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Para hacer invisibles partes de un regulador de crescendo, se usa +el método de dibujar un rectángulo blanco encima de la parte +respectiva del regulador, tapándola. El rectángulo se define como +código PostScript dentro de un elemento de marcado de texto. + +Para realizar un ajuste fino de la posición y el tamaño del +elemento de marcado, se puede establecer el número que precede a +@code{setgray} en la definición de PostScript a un valor menor que +la unidad, haciendo que sea de color gris. Los dos números que +están antes de @code{scale} en el código PostScript son los +responsables del ancho y la altura del rectángulo, y los dos +números que están antes de @code{translate} cambian las +coordenadas X e Y de origen del rectángulo. + +Asegúrse de poner el regulador en una capa más baja que el +elemento de marcado de texto para trazar el rectángulo encima del +regulador. + +" + doctitlees = "Regulador interrumpido" + + texidoc = " +In order to make parts of a crescendo hairpin invisible, the following +method is used: A white rectangle is drawn on top of the respective +part of the crescendo hairpin, making it invisible. The rectangle is +defined as postscript code within a text markup. + +To fine-tune the position and size of the markup, the number preceding +@code{setgray} in the postscript definition can be set to a value less +than one, making it grey. The two numbers before @code{scale} in the +postscript code are responsible for the width and height of the +rectangle, the two numbers before @code{translate} change the x- and +y-origin of the rectangle. + + +Make sure to put the hairpin in a lower layer than the text markup to +draw the rectangle over the hairpin. + +" + doctitle = "Broken Crescendo Hairpin" +} % begin verbatim + +\relative c' { + << { + \dynamicUp + \override DynamicLineSpanner #'staff-padding = #4 + r2 r16 c'8.\pp r4 + } + \\ + { + \override DynamicLineSpanner #'layer = #0 + des,2\mf\< ~ + \override TextScript #'layer = #2 + des16_\markup { + \postscript #" + 1.9 -8 translate + 5 4 scale + 1 setgray + 0 0 moveto + 0 1 lineto + 1 1 lineto + 1 0 lineto + 0 0 lineto + fill" + } + r8. des4 ~ des16->\sff + } >> +} diff --git a/Documentation/snippets/caesura-railtracks-with-fermata.ly b/Documentation/snippets/caesura-railtracks-with-fermata.ly new file mode 100644 index 0000000000..a14baff00b --- /dev/null +++ b/Documentation/snippets/caesura-railtracks-with-fermata.ly @@ -0,0 +1,44 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "expressive-marks, tweaks-and-overrides" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +A veces se denota una «cesura» mediante una doble marca de respiración +parecida a las vías del tren, con un calderón encima. Este fragmento +de código presenta una combinación de estas dos marcas, visualmente +satisfactoria. + +" + doctitlees = "Cesura tipo \"vías del tren\" con calderón" + + texidoc = " +A caesura is sometimes denoted by a double \"railtracks\" breath mark +with a fermata sign positioned above. This snippet should present an +optically pleasing combination of railtracks and fermata. + +" + doctitle = "Caesura (\"railtracks\") with fermata" +} % begin verbatim + + +\relative c'' { + c2. + % construct the symbol + \override BreathingSign #'text = \markup { + \line { + \musicglyph #"scripts.caesura.curved" + \translate #'(-1.75 . 1.6) + \musicglyph #"scripts.ufermata" + } + } + \breathe c4 + % set the breathe mark back to normal + \revert BreathingSign #'text + c2. \breathe c4 + \bar "|." +} + diff --git a/Documentation/snippets/center-text-below-hairpin-dynamics.ly b/Documentation/snippets/center-text-below-hairpin-dynamics.ly new file mode 100644 index 0000000000..dfa101c364 --- /dev/null +++ b/Documentation/snippets/center-text-below-hairpin-dynamics.ly @@ -0,0 +1,50 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "expressive-marks, text" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Este ejemplo proporciona una función para tipografiar un regulador +con texto por debajo, como \"molto\" o \"poco\". El ejemplo +ilustra también cómo modificar la manera en que se imprime +normalmente un objeto, utilizando código de Scheme. + +" + doctitlees = "Centrar texto debajo de un regulador" + + texidoc = " +This example provides a function to typeset a hairpin (de)crescendo +with some additional text below it, such as \"molto\" or \"poco\". The +example also illustrates how to modify the way an object is normally +printed, using some Scheme code. + +" + doctitle = "Center text below hairpin dynamics" +} % begin verbatim + +hairpinWithCenteredText = +#(define-music-function (parser location text) (markup?) +#{ + \override Voice.Hairpin #'stencil = #(lambda (grob) + (ly:stencil-aligned-to + (ly:stencil-combine-at-edge + (ly:stencil-aligned-to (ly:hairpin::print grob) X CENTER) + Y DOWN + (ly:stencil-aligned-to (grob-interpret-markup grob $text) X CENTER)) + X LEFT)) +#}) + +hairpinMolto = \hairpinWithCenteredText \markup { \italic molto } +hairpinMore = \hairpinWithCenteredText \markup { \larger moltissimo } + +\layout { ragged-right = ##f } + +\relative c' { + \hairpinMolto + c2\< c\f + \hairpinMore + c2\< c\f +} diff --git a/Documentation/snippets/changing--flageolet-mark-size.ly b/Documentation/snippets/changing--flageolet-mark-size.ly new file mode 100644 index 0000000000..4050ce5253 --- /dev/null +++ b/Documentation/snippets/changing--flageolet-mark-size.ly @@ -0,0 +1,55 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "expressive-marks, unfretted-strings" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Para hacer más pequeño el círculo de @code{\\flageolet} (armónico) +utilice la siguiente función de Scheme. + +" + doctitlees = "Cambiar el tamaño de la marca de \\flageolet" + +%% Translation of GIT committish: 0099693675b95c7ec6664d7277f22411a14e9c1b + + texidocfr = " +Il est possible de rapetisser le cercle d'un @code{\\flageolet} grâce +à une fonction Scheme. + +" + doctitlefr = "Modifier la taille d'un \\flageolet" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Um den @code{\\flageolet}-Kreis kleiner zu machen, kann diese +Scheme-Funktion eingesetzt werden. + +" + doctitlede = "\\flageolet-Zeichen verkleinern" + + texidoc = " +To make the @code{\\flageolet} circle smaller use the following Scheme +function. + +" + doctitle = "Changing \\flageolet mark size" +} % begin verbatim + +smallFlageolet = +#(let ((m (make-music 'ArticulationEvent + 'articulation-type "flageolet"))) + (ly:music-set-property! m 'tweaks + (acons 'font-size -3 + (ly:music-property m 'tweaks))) + m) + +\layout { ragged-right = ##f } + +\relative c'' { + d4^\flageolet_\markup { default size } d_\flageolet + c4^\smallFlageolet_\markup { smaller } c_\smallFlageolet +} + diff --git a/Documentation/snippets/changing-a-single-notes-size-in-a-chord.ly b/Documentation/snippets/changing-a-single-notes-size-in-a-chord.ly new file mode 100644 index 0000000000..86420e4207 --- /dev/null +++ b/Documentation/snippets/changing-a-single-notes-size-in-a-chord.ly @@ -0,0 +1,43 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "simultaneous-notes, editorial-annotations, tweaks-and-overrides" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Se pueden modificar notas individuales de un acorde con la +instrucción @code{\\tweak}, alterando la propiedad +@code{font-size}. + +Dentro de un acorde (entre ángulos simples @code{< >}), antes de +la nota que queremos alterar, situamos la instrucción +@code{\\tweak} seguida por @code{#'font-size} y definimos el +tamaño adecuado como @code{#-2} (una cabeza pequeña). + +" + doctitlees = "Modificar el tamaño de una nota suelta de un acorde" + + texidoc = " +Individual note heads in a chord can be modified with the +@code{\\tweak} command inside a chord, by altering the @code{font-size} +property. + + +Inside the chord (within the brackets @code{< >}), before the note to +be altered, place the @code{\\tweak} command, followed by +@code{#'font-size} and define the proper size like @code{#-2} (a tiny +notehead). + + + +" + doctitle = "Changing a single note's size in a chord" +} % begin verbatim + +\layout { ragged-right = ##t } +\relative { + <\tweak #'font-size #+2 c e g c \tweak #'font-size #-2 e>1^\markup { A tiny e }_\markup { A big c } +} + diff --git a/Documentation/snippets/changing-beam-knee-gap.ly b/Documentation/snippets/changing-beam-knee-gap.ly new file mode 100644 index 0000000000..2e23fdebb3 --- /dev/null +++ b/Documentation/snippets/changing-beam-knee-gap.ly @@ -0,0 +1,66 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "rhythms" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Se insertan automáticamente barras en ángulo cuando se detecta un +intervalo muy grande entre las notas. Se puede hacer un ajuste +fino de este comportamiento a través de la propiedad +@code{auto-knee-gap}. Se traza una barra doblada si el salto es +mayor que el valor de @code{auto-knee-gap} más el ancho del objeto +barra (que depende de la duración de las notas y de la inclinación +de la barra). De forma predeterminada @code{auto-knee-gap} está +establecido a 5.5 espacios de pentagrama. + +" + doctitlees = "Cambiar el salto de las barras en ángulo" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d +texidocde = " +Balken mit Hälsen in unterschiedliche Richtungen werden automatisch +erstellt, wenn ein großer Sprung zwischen Tonhöhen gefunden wird. Dieses +Verhalten kann durch die @code{auto-knee-gap}-Eigenschaft beeinflusst +werden. Ein derartiger Knie-Balken wird erstellt, wenn der Abstand größer +ist als der Wert von @code{auto-knee-gap} plus der Dicke des Balkens +(was von der Notendauer und der Neigung des Balkens abhängt). Der +Standardwert von @code{auto-knee-gap} ist 5.5 Notensystemabstände. + +" + doctitlede = "Balken für weit auseinander liegende Noten ändern" + + +%% Translation of GIT committish: b3196fadd8f42d05ba35e8ac42f7da3caf8a3079 + texidocfr = " +LilyPond insère automatiquement des ligatures coudées --- certaines +hampes vers le haut, d'autres vers le bas --- lorsqu'il détecte un +intervalle important entre des têtes de notes. Ce comportement peut être +changé par l'intermédiaire de l'objet @code{auto-knee-gap} --- défini +par défaut à @samp{5,5} espace, plus la largeur et la pente de la +ligature en question. + +" + doctitlefr = "Ligature et directions de hampe inversées" + + texidoc = " +Kneed beams are inserted automatically when a large gap is detected +between the note heads. This behavior can be tuned through the +@code{auto-knee-gap} property. A kneed beam is drawn if the gap is +larger than the value of @code{auto-knee-gap} plus the width of the +beam object (which depends on the duration of the notes and the slope +of the beam). By default @code{auto-knee-gap} is set to 5.5 staff +spaces. + +" + doctitle = "Changing beam knee gap" +} % begin verbatim + +{ + f8 f''8 f8 f''8 + \override Beam #'auto-knee-gap = #6 + f8 f''8 f8 f''8 +} + diff --git a/Documentation/snippets/changing-chord-separator.ly b/Documentation/snippets/changing-chord-separator.ly new file mode 100644 index 0000000000..a48651cb89 --- /dev/null +++ b/Documentation/snippets/changing-chord-separator.ly @@ -0,0 +1,38 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "chords" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Se puede establecer el separador entre las distintas partes del +nombre de un acorde para que sea cualquier elemento de marcado. + +" + doctitlees = "Modificación del separador de acordes" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Der Trenner zwischen unterschiedlichen Teilen eines Akkordsymbols kann +beliebeiger Text sein. + +" + doctitlede = "Akkordsymboltrenner verändern" + + texidoc = " +The separator between different parts of a chord name can be set to any +markup. + +" + doctitle = "Changing chord separator" +} % begin verbatim + +\chords { + c:7sus4 + \set chordNameSeparator + = \markup { \typewriter | } + c:7sus4 +} + diff --git a/Documentation/snippets/changing-form-of-multi-measure-rests.ly b/Documentation/snippets/changing-form-of-multi-measure-rests.ly new file mode 100644 index 0000000000..4192541002 --- /dev/null +++ b/Documentation/snippets/changing-form-of-multi-measure-rests.ly @@ -0,0 +1,56 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "rhythms, tweaks-and-overrides" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + doctitlees = "Cambiar la forma de los silencios multicompás" + texidoces = " +Si hay diez compases de silencio o menos, se imprime en el pentagrama +una serie de silencios de breve y longa (conocidos en alemán como +\"Kirchenpausen\", «silencios eclesiásticos»); en caso contrario se +muestra una barra normal. Este número predeterminado de diez se +puede cambiar sobreescribiendo la propiedad @code{expand-limit}: + +" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Wenn zehn oder weniger Pausentakte vorkommen, wird eine Reihe von Longa- +und Brevispausen (auch Kirchenpausen genannt) gesetzt, bei mehr Takten +wird eine Line mit der Taktanzahl ausgegeben. Der vorgegebene Wert von +zehn kann geändert werden, indem man die @code{expand-limit}-Eigenschaft +setzt: +" + doctitlede = "Die Erscheinung von Pausentakten ändern" + + +%% Translation of GIT committish: e71f19ad847d3e94ac89750f34de8b6bb28611df +texidocfr = " +Dans le cas où ce silence dure moins de dix mesures, LilyPond imprime sur +la portée des @qq{ silences d'église } -- @emph{Kirchenpause} en +allemand -- et qui sont une simple suite de rectangles. La propriété +@code{expand-limit} permet d'obtenir un silence unique : + +" + doctitlefr = "Modifier l'apparence d'un silence multi-mesures" + + texidoc = " +If there are ten or fewer measures of rests, a series of longa and +breve rests (called in German \"Kirchenpausen\" - church rests) is +printed within the staff; otherwise a simple line is shown. This +default number of ten may be changed by overriding the +@code{expand-limit} property. + +" + doctitle = "Changing form of multi-measure rests" +} % begin verbatim + +\relative c'' { + \compressFullBarRests + R1*2 | R1*5 | R1*9 + \override MultiMeasureRest #'expand-limit = #3 + R1*2 | R1*5 | R1*9 +} diff --git a/Documentation/snippets/changing-midi-output-to-one-channel-per-voice.ly b/Documentation/snippets/changing-midi-output-to-one-channel-per-voice.ly new file mode 100644 index 0000000000..fe187f48c6 --- /dev/null +++ b/Documentation/snippets/changing-midi-output-to-one-channel-per-voice.ly @@ -0,0 +1,79 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "contexts-and-engravers, midi" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Al producir una salida MIDI, el comportamiento predeterminado es +que cada pentagrama representa un canal MIDI, con todas las voces +de dicho pentagrama mezcladas. Esto reduce al mínimo el riesgo de +que se agote el número de canales MIDI disponibles, pues existe un +máximo de 16 canales por pista. + +Sin embargo, cuando se traslada el interpretador +@code{Staff_performer} al contexto @code{Voice}, cada voz de un +pentagrama puede tener su propio canal MIDI, como se muestra en el +siguiente ejemplo: a pesar de estar sobre el mismo pentagrama, se +crean dos canales MIDI, cada uno con un @code{midiInstrument} +distinto. + +" + doctitlees = "Modificar la salida MIDI para que tenga un canal por cada voz" + + texidoc = " +When outputting MIDI, the default behavior is for each staff to +represent one MIDI channel, with all the voices on a staff amalgamated. +This minimizes the risk of running out of MIDI channels, since there +are only 16 available per track. + +However, by moving the @code{Staff_performer} to the @code{Voice} +context, each voice on a staff can have its own MIDI channel, as is +demonstrated by the following example: despite being on the same staff, +two MIDI channels are created, each with a different +@code{midiInstrument}. + +" + doctitle = "Changing MIDI output to one channel per voice" +} % begin verbatim + +\score { + \new Staff << + \new Voice \relative c''' { + \set midiInstrument = #"flute" + \voiceOne + \key g \major + \time 2/2 + r2 g-"Flute" ~ + g fis ~ + fis4 g8 fis e2 ~ + e4 d8 cis d2 + } + \new Voice \relative c'' { + \set midiInstrument = #"clarinet" + \voiceTwo + b1-"Clarinet" + a2. b8 a + g2. fis8 e + fis2 r + } + >> + \layout { } + \midi { + \context { + \Staff + \remove "Staff_performer" + } + \context { + \Voice + \consists "Staff_performer" + } + \context { + \Score + tempoWholesPerMinute = #(ly:make-moment 72 2) + } + } +} + diff --git a/Documentation/snippets/changing-partcombine-texts.ly b/Documentation/snippets/changing-partcombine-texts.ly new file mode 100644 index 0000000000..a3dac3022b --- /dev/null +++ b/Documentation/snippets/changing-partcombine-texts.ly @@ -0,0 +1,47 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "simultaneous-notes" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Al utilizar la posibilidad de combinación automática de partes, se +puede modificar el texto que se imprime para las secciones de solo +y de unísono: + +" + doctitlees = "Cambiar los textos de partcombine" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Wenn Stimmen automatisch kombiniert werden, kann der Text, der für +Solo- und Unisono-Stellen ausgegeben wird, geändert werden: + +" + doctitlede = "Partcombine-Text ändern" + + texidoc = " +When using the automatic part combining feature, the printed text for +the solo and unison sections may be changed: + +" + doctitle = "Changing partcombine texts" +} % begin verbatim + +\new Staff << + \set Staff.soloText = #"girl" + \set Staff.soloIIText = #"boy" + \set Staff.aDueText = #"together" + \partcombine + \relative c'' { + g4 g r r + a2 g + } + \relative c'' { + r4 r a( b) + a2 g + } +>> + diff --git a/Documentation/snippets/changing-properties-for-individual-grobs.ly b/Documentation/snippets/changing-properties-for-individual-grobs.ly new file mode 100644 index 0000000000..10e57b8d1a --- /dev/null +++ b/Documentation/snippets/changing-properties-for-individual-grobs.ly @@ -0,0 +1,34 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "tweaks-and-overrides" + + texidoc = " +The @code{\\applyOutput} command allows the tuning of any layout +object, in any context. It requires a Scheme function with three +arguments. + +" + doctitle = "Changing properties for individual grobs" +} % begin verbatim + +#(define (mc-squared grob grob-origin context) + (let ((sp (ly:grob-property grob 'staff-position))) + (if (grob::has-interface grob 'note-head-interface) + (begin + (ly:grob-set-property! grob 'stencil + (grob-interpret-markup grob + (make-lower-markup 0.5 + (case sp + ((-5) "m") + ((-3) "c ") + ((-2) (make-smaller-markup (make-bold-markup "2"))) + (else "bla"))))))))) + +\relative c' { + 2 + \applyOutput #'Voice #mc-squared + 2 +} diff --git a/Documentation/snippets/changing-stanza-fonts.ly b/Documentation/snippets/changing-stanza-fonts.ly new file mode 100644 index 0000000000..3a9e035035 --- /dev/null +++ b/Documentation/snippets/changing-stanza-fonts.ly @@ -0,0 +1,32 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "vocal-music" + + texidoc = " +Fonts can be changed independently for each stanza, including the font +used for printing the stanza number. + +" + doctitle = "Changing stanza fonts" +} % begin verbatim + +\new Voice { + \time 3/4 + g2 e4 + a2 f4 + g2. +} +\addlyrics { + \set stanza = #"1. " + Hi, my name is Bert. +} +\addlyrics { + \override StanzaNumber #'font-name = #"DejaVu" + \set stanza = #"2. " + \override LyricText #'font-family = #'typewriter + Oh, ché -- ri, je t'aime +} + diff --git a/Documentation/snippets/changing-text-and-spanner-styles-for-text-dynamics.ly b/Documentation/snippets/changing-text-and-spanner-styles-for-text-dynamics.ly new file mode 100644 index 0000000000..e474e615c3 --- /dev/null +++ b/Documentation/snippets/changing-text-and-spanner-styles-for-text-dynamics.ly @@ -0,0 +1,55 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "expressive-marks" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Se puede modificar el texto empleado para los crescendos y +decrescendos modificando las propiedades de contexto +@code{crescendoText} y @code{decrescendoText}. El estilo de la +línea de extensión se puede cambiar modificando la propiedad +@code{'style} de @code{DynamicTextSpanner}. El valor +predeterminado es @code{'hairpin} (regulador), y entre otros +valores posibles se encuentran @code{'line} (línea), +@code{'dashed-line} (línea discontinua) y @code{'dotted-line} +(línea de puntos): + +" + doctitlees = "Cambiar el texto y los estilos de objeto de extensión para las indicaciones dinámicas textuales" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d +texidocde = " +Der Text, der für Crescendo und Decrescendo gestzt wird, kann geändert +werden, indem man die Eigenschaften @code{crescendoText} und +@code{decrescendoText} verändert. Der Stil des Streckers kann auch +geändert werden, indem die @code{'style}-Eigenschaft des +@code{DynamicTextSpanner} beeinflusst wird. Der Standardwert ist +@code{'hairpin}, ander Möglichkeiten sind @code{'line}, @code{'dashed-line} +und @code{'dotted-line}. +" + doctitlede = "Text und Strecker-Stile für Dynamik-Texte ändern" + + texidoc = " +The text used for crescendos and decrescendos can be changed by +modifying the context properties @code{crescendoText} and +@code{decrescendoText}. The style of the spanner line can be changed by +modifying the @code{'style} property of @code{DynamicTextSpanner}. The +default value is @code{'hairpin}, and other possible values include +@code{'line}, @code{'dashed-line} and @code{'dotted-line}. + +" + doctitle = "Changing text and spanner styles for text dynamics" +} % begin verbatim + +\relative c'' { + \set crescendoText = \markup { \italic { cresc. poco } } + \set crescendoSpanner = #'text + \override DynamicTextSpanner #'style = #'dotted-line + a2\< a + a2 a + a2 a + a2 a\mf +} diff --git a/Documentation/snippets/changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.ly b/Documentation/snippets/changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.ly new file mode 100644 index 0000000000..916f3e90fb --- /dev/null +++ b/Documentation/snippets/changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.ly @@ -0,0 +1,35 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "expressive-marks, editorial-annotations" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Se puede cambiar el aspecto de las ligaduras de expresión de +continuas a punteadas o intermitentes. + +" + doctitlees = "Modificar el aspecto continuo de una ligadura de expresión a punteado o intermitente" + + texidoc = " +The appearance of slurs may be changed from solid to dotted or dashed. + +" + doctitle = "Changing the appearance of a slur from solid to dotted or dashed" +} % begin verbatim + +\relative c' { + c4( d e c) + \slurDotted + c4( d e c) + \slurSolid + c4( d e c) + \slurDashed + c4( d e c) + \slurSolid + c4( d e c) +} + + diff --git a/Documentation/snippets/changing-the-breath-mark-symbol.ly b/Documentation/snippets/changing-the-breath-mark-symbol.ly new file mode 100644 index 0000000000..271a6e4502 --- /dev/null +++ b/Documentation/snippets/changing-the-breath-mark-symbol.ly @@ -0,0 +1,40 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "expressive-marks" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +El glifo de la marca de respiración se puede ajustar +sobreescribiendo la propiedad de texto del objeto de presentación +@code{BreathingSign}, con cualquier otro texto de marcado. + +" + doctitlees = "Cambiar el símbolo de la marca de respiración" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Das Schriftzeichen für das Atemzeichen kann verändert werden, indem +die Text-Eigenschaft des @code{BreathingSign}-Layoutobjekts mit einer +beliebigen Textbeschriftung definiert wird. + +" + doctitlede = "Das Atemzeichen-Symbol verändern" + + texidoc = " +The glyph of the breath mark can be tuned by overriding the text +property of the @code{BreathingSign} layout object with any markup +text. + +" + doctitle = "Changing the breath mark symbol" +} % begin verbatim + +\relative c'' { + c2 + \override BreathingSign #'text = \markup { \musicglyph #"scripts.rvarcomma" } + \breathe + d2 +} diff --git a/Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly b/Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly new file mode 100644 index 0000000000..bf0930396a --- /dev/null +++ b/Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly @@ -0,0 +1,56 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "chords" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +La nomenclatura inglesa (predeterminada) para los acordes del +cifrado americano se puede cambiar por la alemana +(@code{\\germanChords} sustituye B y Bes por H y B) o por la semi-alemana +(@code{\\semiGermanChords} sustituye B y Bes por H y Bb). + +" + doctitlees = "Cambiar la nomenclatura de los acordes del cifrado americano por la notación alemana o semi-alemana" + + texidoc = " +The english naming of chords (default) can be changed to german +(@code{\\germanChords} replaces B and Bes to H and B) or semi-german +(@code{\\semiGermanChords} replaces B and Bes to H and Bb). + + + + +" + doctitle = "Changing the chord names to German or semi-German notation" +} % begin verbatim + +music = \chordmode { + c1/c cis/cis + b/b bis/bis bes/bes +} + +%% The following is only here to print the names of the +%% chords styles; it can be removed if you do not need to +%% print them. + +\layout { + \context {\ChordNames \consists Instrument_name_engraver } +} + +<< + \new ChordNames { + \set ChordNames.instrumentName = #"default" + \music + } + \new ChordNames { + \set ChordNames.instrumentName = #"german" + \germanChords \music } + \new ChordNames { + \set ChordNames.instrumentName = #"semi-german" + \semiGermanChords \music } + \context Voice { \music } +>> + diff --git a/Documentation/snippets/changing-the-default-text-font-family.ly b/Documentation/snippets/changing-the-default-text-font-family.ly new file mode 100644 index 0000000000..70f473881e --- /dev/null +++ b/Documentation/snippets/changing-the-default-text-font-family.ly @@ -0,0 +1,52 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "text, tweaks-and-overrides" + + texidoc = " +The default font families for text can be overridden with +@code{make-pango-font-tree}. + +" + doctitle = "Changing the default text font family" +} % begin verbatim + +\paper { + % change for other default global staff size. + myStaffSize = #20 + %{ + run + lilypond -dshow-available-fonts blabla + to show all fonts available in the process log. + %} + + #(define fonts + (make-pango-font-tree "Times New Roman" + "Nimbus Sans" + "Luxi Mono" +;; "Helvetica" +;; "Courier" + (/ myStaffSize 20))) +} + +\relative c'' { + c4^\markup { + roman: foo \bold bla \italic bar \italic \bold baz + } + c'4_\markup { + \override #'(font-family . sans) + { + sans: foo \bold bla \italic bar \italic \bold baz + } + } + c'2^\markup { + \override #'(font-family . typewriter) + { + mono: foo \bold bla \italic bar \italic \bold baz + } + } +} + + diff --git a/Documentation/snippets/changing-the-number-of-lines-in-a-staff.ly b/Documentation/snippets/changing-the-number-of-lines-in-a-staff.ly new file mode 100644 index 0000000000..7d60f76df1 --- /dev/null +++ b/Documentation/snippets/changing-the-number-of-lines-in-a-staff.ly @@ -0,0 +1,39 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "staff-notation" + + texidoc = " +The number of lines in a staff may changed by overriding the +@code{StaffSymbol} property @code{line-count}. + + + + +" + doctitle = "Changing the number of lines in a staff" +} % begin verbatim + +upper = \relative c'' { + c4 d e f +} + +lower = \relative c { + \clef bass + c4 b a g +} + +\score { + \context PianoStaff << + \new Staff { + \upper + } + \new Staff { + \override Staff.StaffSymbol #'line-count = #4 + \lower + } + >> +} + diff --git a/Documentation/snippets/changing-the-positions-of-figured-bass-alterations.ly b/Documentation/snippets/changing-the-positions-of-figured-bass-alterations.ly new file mode 100644 index 0000000000..8f42b3b1bb --- /dev/null +++ b/Documentation/snippets/changing-the-positions-of-figured-bass-alterations.ly @@ -0,0 +1,45 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "chords" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Las alteraciones y los signos «más» pueden aparecer antes o +después de los números, según el valor de las propiedades +@code{figuredBassAlterationDirection} y +@code{figuredBassPlusDirection}. + +" + doctitlees = "Cambiar las posiciones de las alteraciones del bajo cifrado" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Versetzungszeichen und Pluszeichen können vor oder nach den Ziffern erscheinen, +je nach den Einstellungen der @code{figuredBassAlterationDirection} und +@code{figuredBassPlusDirection}-Eigenschaften. + +" + doctitlede = "Positionen von Generalbass-Alterationszeichen verändern" + + texidoc = " +Accidentals and plus signs can appear before or after the numbers, +depending on the @code{figuredBassAlterationDirection} and +@code{figuredBassPlusDirection} properties. + +" + doctitle = "Changing the positions of figured bass alterations" +} % begin verbatim + +\figures { + <6\+> <5+> <6 4-> r + \set figuredBassAlterationDirection = #RIGHT + <6\+> <5+> <6 4-> r + \set figuredBassPlusDirection = #RIGHT + <6\+> <5+> <6 4-> r + \set figuredBassAlterationDirection = #LEFT + <6\+> <5+> <6 4-> r +} + diff --git a/Documentation/snippets/changing-the-staff-size.ly b/Documentation/snippets/changing-the-staff-size.ly new file mode 100644 index 0000000000..e43db87e16 --- /dev/null +++ b/Documentation/snippets/changing-the-staff-size.ly @@ -0,0 +1,33 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "staff-notation, tweaks-and-overrides, paper-and-layout" + + texidoc = " +Though the simplest way to resize staves is to use +@code{#(set-global-staff-size xx)}, an individual staff's size can be +changed by scaling the properties @code{'staff-space} and +@code{fontSize}. + +" + doctitle = "Changing the staff size" +} % begin verbatim + +<< + \new Staff { + \relative c'' { + \dynamicDown + c8\ff c c c c c c c + } + } + \new Staff \with { + fontSize = #-3 + \override StaffSymbol #'staff-space = #(magstep -3) + } { + \clef bass + c8 c c c c\f c c c + } +>> + diff --git a/Documentation/snippets/changing-the-tempo-without-a-metronome-mark.ly b/Documentation/snippets/changing-the-tempo-without-a-metronome-mark.ly new file mode 100644 index 0000000000..0c27004d56 --- /dev/null +++ b/Documentation/snippets/changing-the-tempo-without-a-metronome-mark.ly @@ -0,0 +1,46 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "staff-notation, midi" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Para cambiar el tempo en la salida MIDI sin +imprimir nada, hacemos invisible la indicación metronómica: + +" + + doctitlees = "Cambiar el tempo sin indicación metronómica" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Um das Tempo für die MIDI-Ausgabe zu ändern, ohne eine Tempoangabe in den +Noten auszugeben, kann die Metronombezeichnung unsichtbar gemacht werden: + +" + + doctitlede = "Das Tempo ohne Metronom-Angabe verändern" + + texidoc = " +To change the tempo in MIDI output without printing anything, make the +metronome mark invisible. + +" + doctitle = "Changing the tempo without a metronome mark" +} % begin verbatim + +\score { + \new Staff \relative c' { + \tempo 4 = 160 + c4 e g b + c4 b d c + \set Score.tempoHideNote = ##t + \tempo 4 = 96 + d,4 fis a cis + d4 cis e d + } + \layout { } + \midi { } +} diff --git a/Documentation/snippets/changing-the-time-signature-without-affecting-the-beaming.ly b/Documentation/snippets/changing-the-time-signature-without-affecting-the-beaming.ly new file mode 100644 index 0000000000..820d827881 --- /dev/null +++ b/Documentation/snippets/changing-the-time-signature-without-affecting-the-beaming.ly @@ -0,0 +1,72 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "rhythms" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +La instrucción @code{\time} establece las propiedades +@code{timeSignatureFraction}, @code{beatLength}, @code{beatGrouping} y +@code{measureLength} en el contexto @code{Timing}, que normalmente +tiene el alias @code{Score}. La modificación del valor de +@code{timeSignatureFraction} hace que se imprima la nueva indicación +de compás sin que cambie ninguna de las demás propiedades: + +" + doctitlees = "Cambio de compás sin afectar al barrado" + + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Der @code{\\time}-Befehl verändert die Eigenschaften +@code{timeSignatureFraction}, @code{beatLength}, @code{beatGrouping} +und @code{measureLength} im @code{Timing}-Kontext, welcher normalerweise +gleichbedeutend mit @code{Score} ist. Wenn der Wert von +@code{timeSignatureFraction} verändert wird, wird die neue +Taktart ausgegeben, ohne die anderen Eigenschaften zu beeinflussen: + +" + doctitlede = "Die Taktart verändern ohne die Bebalkung zu beeinflussen" + + +%% Translation of GIT committish: e71f19ad847d3e94ac89750f34de8b6bb28611df + texidocfr = " +La commande @code{\\time} gère les propriétés +@code{timeSignatureFraction}, @code{beatLength}, @code{beatGrouping} +et @code{measureLength} dans le contexte @code{Timing}, normallement +rattaché à @code{Score}. Le fait de modifier la valeur de +@code{timeSignatureFraction} aura pour effet de changer l'apparence du +symbole affiché sans pour autant affecter les autres propriétés de la +métrique : + +" + doctitlefr = "Changement de métrique sans affecter les règles de ligature" + + texidoc = " +The @code{\\time} command sets the properties +@code{timeSignatureFraction}, @code{beatLength}, @code{beatGrouping} +and @code{measureLength} in the @code{Timing} context, which is +normally aliased to @code{Score}. Changing the value of +@code{timeSignatureFraction} causes the new time signature symbol to be +printed without changing any of the other properties: + +" + doctitle = "Changing the time signature without affecting the beaming" +} % begin verbatim + +\relative c'' { + \time 3/4 + a16 a a a a a a a a a a a + + % Change time signature symbol but keep 3/4 beaming + % due to unchanged underlying time signature + \set Score.timeSignatureFraction = #'(12 . 16) + a16 a a a a a a a a a a a + + \time 12/16 + % Lose 3/4 beaming now \time has been changed + a16 a a a a a a a a a a a +} + diff --git a/Documentation/snippets/changing-the-tuplet-number.ly b/Documentation/snippets/changing-the-tuplet-number.ly new file mode 100644 index 0000000000..15e54eb79d --- /dev/null +++ b/Documentation/snippets/changing-the-tuplet-number.ly @@ -0,0 +1,60 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "rhythms" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + doctitlees = "Cambiar el número del grupo especial" + texidoces = " + +De forma predeterminada sólo se imprime el numerador del grupo +especial sobre el corchete de grupo, es decir, el denominador del +argumento de la instrucción @code{\\times}. De forma alternativa, se +puede imprimr un quebrado en la forma numerador:denominador del número +del grupo, o eliminar el número. + +" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d +texidocde = " +Standardmäßig wird nur der Zähler des N-tolen-Bruchs über der Klammer +dargestellt, wie er dem @code{\\times}-Befehl übergeben wird. +Man kann aber auch Zähler/Nenner ausgeben lassen, oder die Zahl +vollständig unterdrücken. + +" + doctitlede = "Die Zahl der N-tole verändern" + + +%% Translation of GIT committish: e71f19ad847d3e94ac89750f34de8b6bb28611df + texidocfr = " +L'apparence du chiffre est déterminée par la propriété @code{text} dans +@code{TupletNumber}. La valeur par défaut imprime seulement le +dénominateur, mais si elle est définie par la fonction +@code{tuplet-number::calc-fraction-text}, la fraction entière +@var{num}:@var{den} sera imprimée à la place. + +" + doctitlefr = "Modifier l'apparence du chiffre de nolet" + + texidoc = " +By default, only the numerator of the tuplet number is printed over the +tuplet bracket, i.e., the denominator of the argument to the +@code{\\times} command. Alternatively, num:den of the tuplet number may +be printed, or the tuplet number may be suppressed altogether. + +" + doctitle = "Changing the tuplet number" +} % begin verbatim + +\relative c'' { + \times 2/3 { c8 c c } + \times 2/3 { c8 c c } + \override TupletNumber #'text = #tuplet-number::calc-fraction-text + \times 2/3 { c8 c c } + \override TupletNumber #'stencil = ##f + \times 2/3 { c8 c c } +} + diff --git a/Documentation/snippets/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly b/Documentation/snippets/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly new file mode 100644 index 0000000000..a5f5af1514 --- /dev/null +++ b/Documentation/snippets/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly @@ -0,0 +1,65 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "rhythms, contexts-and-engravers" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +La propiedad @code{measureLength}, junto con +@code{measurePosition}, determina cuándo es necesario dibujar una +línea divisoria. Sin embargo, al utilizar +@code{\\scaleDurations}, el escalado proporcional de las +duraciones hace difícil introducir cambios de compás. En este +caso se debe establecer manualmente el valor de +@code{measureLength} utilizando la función @code{ly:make-moment}. +El segundo argumento debe ser el mismo que el segundo argumento de +@code{\\scaleDurations}. + +" + doctitlees = "Modificar el compás dentro de una sección polimétrica utilizando @code{\\scaleDurations}" + + texidoc = " +The @code{measureLength} property, together with +@code{measurePosition}, determines when a bar line is needed. However, +when using @code{\\scaleDurations}, the scaling of durations makes it +difficult to change time signatures. In this case, +@code{measureLength} should be set manually, using the +@code{ly:make-moment} callback. The second argument must be the same +as the second argument of @code{\\scaleDurations}. + +" + doctitle = "Changing time signatures inside a polymetric section using \\scaleDurations" +} % begin verbatim + +\layout { + \context { + \Score + \remove "Timing_translator" + \remove "Default_bar_line_engraver" + } + \context { + \Staff + \consists "Timing_translator" + \consists "Default_bar_line_engraver" + } +} + +<< + \new Staff { + \scaleDurations #'(8 . 5) { + \time 6/8 + \set Timing.measureLength = #(ly:make-moment 6 5) + b8 b b b b b + \time 2/4 + \set Timing.measureLength = #(ly:make-moment 4 5) + b4 b + } + } + \new Staff { + \clef bass + \time 2/4 + c2 d e f + } +>> diff --git a/Documentation/snippets/chant-or-psalms-notation.ly b/Documentation/snippets/chant-or-psalms-notation.ly new file mode 100644 index 0000000000..bd422c91a4 --- /dev/null +++ b/Documentation/snippets/chant-or-psalms-notation.ly @@ -0,0 +1,40 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "rhythms, vocal-music, ancient-notation, contexts-and-engravers" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Este tipo de notación se utiliza para el canto de los Salmos, en +que las estrofas no siempre tienen la misma longitud. + +" + doctitlees = "Notación de responsos o salmos" + + texidoc = " +This form of notation is used for the chant of the Psalms, where verses +aren't always the same length. + +" + doctitle = "Chant or psalms notation" +} % begin verbatim + +stemOn = { \revert Staff.Stem #'transparent } +stemOff = { \override Staff.Stem #'transparent = ##t } + +\score { + \new Staff \with { \remove "Time_signature_engraver" } + { + \key g \minor + \cadenzaOn + \stemOff a'\breve bes'4 g'4 + \stemOn a'2 \bar "||" + \stemOff a'\breve g'4 a'4 + \stemOn f'2 \bar "||" + \stemOff a'\breve^\markup { \italic flexe } + \stemOn g'2 \bar "||" + } +} + diff --git a/Documentation/snippets/chord-name-exceptions.ly b/Documentation/snippets/chord-name-exceptions.ly new file mode 100644 index 0000000000..658086c4f9 --- /dev/null +++ b/Documentation/snippets/chord-name-exceptions.ly @@ -0,0 +1,58 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "chords" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Se puede usar la propiedad @code{chordNameExceptions} para +almacenar una lista de notaciones espaciales para acordes +específicos. + +" + doctitlees = "Excepciones para los nombres de acorde" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Die Eigenschaft @code{chordNameExceptions} kann benutzt werden, um eine +Liste an besonderen Notationen für bestimmte Akkorde zu speichern. + +" + doctitlede = "Akkordsymbolausnahmen" + + texidoc = " +The property @code{chordNameExceptions} can be used to store a list of +special notations for specific chords. + +" + doctitle = "Chord name exceptions" +} % begin verbatim + +% modify maj9 and 6(add9) +% Exception music is chords with markups +chExceptionMusic = { + 1-\markup { \super "maj9" } + 1-\markup { \super "6(add9)" } +} + +% Convert music to list and prepend to existing exceptions. +chExceptions = #( append + ( sequential-music-to-chord-exceptions chExceptionMusic #t) + ignatzekExceptions) + +theMusic = \chordmode { + g1:maj9 g1:6.9 + \set chordNameExceptions = #chExceptions + g1:maj9 g1:6.9 +} + +\layout { + ragged-right = ##t +} + +<< \context ChordNames \theMusic + \context Voice \theMusic +>> + diff --git a/Documentation/snippets/chord-name-major7.ly b/Documentation/snippets/chord-name-major7.ly new file mode 100644 index 0000000000..8c42ee42a0 --- /dev/null +++ b/Documentation/snippets/chord-name-major7.ly @@ -0,0 +1,38 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "chords" + +%% Translation of GIT committish: d4f58bb3ad4e7fe1967a6b48f25e3addffc8aa14 + texidocde = " +Das Aussehen des großen Septakkords kann mit @code{majorSevenSymbol} verändert werden. + +" + + doctitlede = "Akkordbezeichnung maj7" + + +%% Translation of GIT committish: da7ce7d651c3a0d1bfed695f6e952975937a1c79 + texidoces = " +La presentación del acorde de séptima mayor se +puede ajustar mediante majorSevenSymbol. + +" + doctitlees = "Nombre de acorde maj7" + + + texidoc = " +The layout of the major 7 can be tuned with @code{majorSevenSymbol}. + +" + doctitle = "chord name major7" +} % begin verbatim + +\chords { + c:7+ + \set majorSevenSymbol = \markup { j7 } + c:7+ +} + diff --git a/Documentation/snippets/chordchanges-for-fretboards.ly b/Documentation/snippets/chordchanges-for-fretboards.ly new file mode 100644 index 0000000000..5f01babdbb --- /dev/null +++ b/Documentation/snippets/chordchanges-for-fretboards.ly @@ -0,0 +1,47 @@ +% Do not edit this file; it is automatically +% generated from Documentation/snippets/new +% This file is in the public domain. +%% Note: this file works from version 2.13.0 +\version "2.13.1" + +\header { +%% Translation of GIT committish: da7ce7d651c3a0d1bfed695f6e952975937a1c79 + texidoces = " +Se puede hacer que los diagramas de posiciones se muestren sólo +cuando el acorde cambia o al comienzo de una nueva línea. + +" + + doctitlees = "Cambios de acorde de posiciones de trastes" + + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d +texidocde = " +Bunddiagramme können definiert werden, sodass sie nur angezeigt werden, +wenn der Akkord sich ändert oder eine neue Zeile anfängt. + +" + + doctitlede = "Akkordänderungen für Bunddiagramme" + + lsrtags = "fretted-strings" + texidoc = "FretBoards can be set to display only when the chord changes +or at the beginning of a new line." + doctitle = "chordChanges for FretBoards" +} % begin verbatim + + +\include "predefined-guitar-fretboards.ly" + +myChords = \chordmode { + c1 c1 \break + \set chordChanges = ##t + c1 c1 \break + c1 c1 \break +} + +<< + \new ChordNames { \myChords } + \new FretBoards { \myChords } + \new Staff { \myChords } +>> diff --git a/Documentation/snippets/chords-intro.itely b/Documentation/snippets/chords-intro.itely new file mode 100644 index 0000000000..83aeaaaf25 --- /dev/null +++ b/Documentation/snippets/chords-intro.itely @@ -0,0 +1,7 @@ +@node Chords +@unnumbered Chords + +@ruser{Chord notation} + +@lysnippets + diff --git a/Documentation/snippets/chords.snippet-list b/Documentation/snippets/chords.snippet-list new file mode 100644 index 0000000000..5e3faa9387 --- /dev/null +++ b/Documentation/snippets/chords.snippet-list @@ -0,0 +1,18 @@ +adding-a-figured-bass-above-or-below-the-notes.ly +adding-bar-lines-to-chordnames-context.ly +avoiding-collisions-with-chord-fingerings.ly +changing-chord-separator.ly +changing-the-chord-names-to-german-or-semi-german-notation.ly +changing-the-positions-of-figured-bass-alterations.ly +chord-name-exceptions.ly +chord-name-major7.ly +clusters.ly +controlling-the-placement-of-chord-fingerings.ly +displaying-complex-chords.ly +manually-break-figured-bass-extenders-for-only-some-numbers.ly +showing-chords-at-changes.ly +simple-lead-sheet.ly +single-staff-template-with-notes,-lyrics,-and-chords.ly +single-staff-template-with-notes,-lyrics,-chords-and-frets.ly +single-staff-template-with-notes-and-chords.ly +volta-below-chords.ly diff --git a/Documentation/snippets/clip-systems.ly b/Documentation/snippets/clip-systems.ly new file mode 100644 index 0000000000..db83db418d --- /dev/null +++ b/Documentation/snippets/clip-systems.ly @@ -0,0 +1,91 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "paper-and-layout" + + texidoc = " +This code shows how to clip (extract) snippets from a full score. + +This file needs to be run separately with @code{-dclip-systems}; the +snippets page may not adequately show the results. + +The result will be files named +@samp{base-from-start-to-end[-count].eps}. + + +If system starts and ends are included, they include extents of the +System grob, e.g., instrument names. + + +Grace notes at the end point of the region are not included. + + +Regions can span multiple systems. In this case, multiple EPS files +are generated. + +" + doctitle = "Clip systems" +} % begin verbatim + +#(ly:set-option 'clip-systems) +#(set! output-count 1) + +origScore = \score { + \relative c' { + \set Staff.instrumentName = #"bla" + c1 + d1 + \grace c16 e1 + \key d \major + f1 \break + \clef bass + g,1 + fis1 + } +} + +\book { + \score { + \origScore + \layout { + % Each clip-region is a (START . END) pair + % where both are rhythmic-locations. + + % (make-rhythmic-locations BAR-NUMBER NUM DEN) + % means NUM/DEN whole-notes into bar numbered BAR-NUMBER + + clip-regions = #(list + (cons + (make-rhythmic-location 2 0 1) + (make-rhythmic-location 4 0 1)) + + (cons + (make-rhythmic-location 0 0 1) + (make-rhythmic-location 4 0 1)) + + (cons + (make-rhythmic-location 0 0 1) + (make-rhythmic-location 6 0 1)) + ) + } + } +} + +#(set! output-count 0) +#(ly:set-option 'clip-systems #f) + +\book { + \score { \origScore } + \markup { \bold \fontsize #6 clips } + \score { + \lyrics { + \markup { from-2.0.1-to-4.0.1-clip.eps } + \markup { + \epsfile #X #30.0 #(format #f "~a-1-from-2.0.1-to-4.0.1-clip.eps" + (ly:parser-output-name parser)) } + } + } +} + diff --git a/Documentation/snippets/clusters.ly b/Documentation/snippets/clusters.ly new file mode 100644 index 0000000000..df9bf73d79 --- /dev/null +++ b/Documentation/snippets/clusters.ly @@ -0,0 +1,38 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "simultaneous-notes, chords, keyboards" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Los «clusters» o racimos son un mecanismo para indicar la +interpretación de un ámbito de notas al mismo tiempo. + +" + doctitlees = "Clusters («racimos»)" + + texidoc = " +Clusters are a device to denote that a complete range of notes is to be +played. + +" + doctitle = "Clusters" +} % begin verbatim + +\layout { + ragged-right = ##t +} + +fragment = \relative c' { + c4 f 4 + 8 a4 c2 4 + e2 c +} + +<< + \new Staff \fragment + \new Staff \makeClusters \fragment +>> + diff --git a/Documentation/snippets/coloring-notes-depending-on-their-pitch.ly b/Documentation/snippets/coloring-notes-depending-on-their-pitch.ly new file mode 100644 index 0000000000..cab9e24489 --- /dev/null +++ b/Documentation/snippets/coloring-notes-depending-on-their-pitch.ly @@ -0,0 +1,57 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "pitches, editorial-annotations" + + texidoc = " +It is possible to color note heads depending on their pitch and/or +their names: the function used in this example even makes it possible +to distinguish enharmonics. + +" + doctitle = "Coloring notes depending on their pitch" +} % begin verbatim + +%Association list of pitches to colors. +#(define color-mapping + (list + (cons (ly:make-pitch 0 0 0) (x11-color 'red)) + (cons (ly:make-pitch 0 0 1/2) (x11-color 'green)) + (cons (ly:make-pitch 0 1 -1/2) (x11-color 'green)) + (cons (ly:make-pitch 0 2 0) (x11-color 'red)) + (cons (ly:make-pitch 0 2 1/2) (x11-color 'green)) + (cons (ly:make-pitch 0 3 -1/2) (x11-color 'red)) + (cons (ly:make-pitch 0 3 0) (x11-color 'green)) + (cons (ly:make-pitch 0 4 1/2) (x11-color 'red)) + (cons (ly:make-pitch 0 5 0) (x11-color 'green)) + (cons (ly:make-pitch 0 5 -1/2) (x11-color 'red)) + (cons (ly:make-pitch 0 6 1/2) (x11-color 'red)) + (cons (ly:make-pitch 0 1 0) (x11-color 'blue)) + (cons (ly:make-pitch 0 3 1/2) (x11-color 'blue)) + (cons (ly:make-pitch 0 4 -1/2) (x11-color 'blue)) + (cons (ly:make-pitch 0 5 1/2) (x11-color 'blue)) + (cons (ly:make-pitch 0 6 -1/2) (x11-color 'blue)))) + +%Compare pitch and alteration (not octave). +#(define (pitch-equals? p1 p2) + (and + (= (ly:pitch-alteration p1) (ly:pitch-alteration p2)) + (= (ly:pitch-notename p1) (ly:pitch-notename p2)))) + +#(define (pitch-to-color pitch) + (let ((color (assoc pitch color-mapping pitch-equals?))) + (if color + (cdr color)))) + +#(define (color-notehead grob) + (pitch-to-color + (ly:event-property (event-cause grob) 'pitch))) + +\score { + \new Staff \relative c' { + \override NoteHead #'color = #color-notehead + c8 b d dis ees f g aes + } +} diff --git a/Documentation/snippets/combining-dynamics-with-markup-texts.ly b/Documentation/snippets/combining-dynamics-with-markup-texts.ly new file mode 100644 index 0000000000..3ba60398c5 --- /dev/null +++ b/Documentation/snippets/combining-dynamics-with-markup-texts.ly @@ -0,0 +1,31 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "expressive-marks, text" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Ciertas indicaciones dinámicas pueden llevar textos (como \"più +forte\" o \"piano subito\"). Se pueden producir usando un +bloque @code{\\markup}. + +" + doctitlees = "Combinar indicaciones dinámicas con marcados textuales" + + texidoc = " +Some dynamics may involve text indications (such as \"più forte\" or +\"piano subito\"). They can be produced using a @code{\\markup} block. + +" + doctitle = "Combining dynamics with markup texts" +} % begin verbatim + +piuF = \markup { \italic più \dynamic f } +\layout { ragged-right = ##f } +\relative c'' { + c2\f c-\piuF +} + + diff --git a/Documentation/snippets/combining-two-parts-on-the-same-staff.ly b/Documentation/snippets/combining-two-parts-on-the-same-staff.ly new file mode 100644 index 0000000000..dfc29f9c60 --- /dev/null +++ b/Documentation/snippets/combining-two-parts-on-the-same-staff.ly @@ -0,0 +1,110 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "simultaneous-notes, text" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +La herramienta de combinación de partes ( instrucción +@code{\\partcombine}) permite la combinación de varias partes +diferentes sobre el mismo pentagrama. Las indicaciones textuales +tales como \"solo\" o \"a2\" se añaden de forma predeterminada; +para quitarlas, sencillamente establezca la propiedad +@code{printPartCombineTexts} al valor \"falso\". Para partituras +vocales (como himnos), no hay necesidad de añadir los textos +\"solo\" o \"a2\", por lo que se deben desactivar. Sin embargo, +podría ser mejor no usarlo si hay solos, porque éstos no se +indicarán. En tales casos podría ser preferible la notación +polifónica estándar. + +Este fragmento de código presenta las tres formas en que se pueden +imprimir dos partes sobre un solo pentagrama: polifonía estándar, +@code{\\partcombine} sin textos, y @code{\\partcombine} con +textos. + +" + doctitlees = "Combinar dos partes sobre el mismo pentagrama" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Die Funktion, die Stimmen kombiniert (also der @code{\\partcombine}-Befehl) +ermöglicht die Kombination unterschiedlicher Stimmen auf einem +System. Textanweisungen wie \"solo\" or \"a2\" werden automatisch +hinzugefügt. Wenn man sie entfernen will, muss man die Eigenschaft +@code{printPartCombineTexts} auf flasch setzen. Für Klavierauszüge +muss natürlich kein \"solo\"/\"a2\" usw. hinzugefügt werdne, man +sollte sie also ausschalten. Wenn aber Solo-Stellen in einem +Klavierauszug oder einer Chorpartitur angezeigt werden, ist es besser, +normale Polyphonie zu verwenden, weil so die Solostellen angezeigt +werden, auch wenn der Text des Stimmenkombinierers ausgeschaltet ist. + +Der Schnipsel zeigt drei Möglichkeiten, Stimmen auf einem System zu +kombinieren: Standardpolyphonie, @code{\\partcombine} ohne Text und +@code{\\partcombine} mit Text. + +" + doctitlede = "Zwei Stimmen auf einem System kombinieren" + + texidoc = " +The part combiner tool ( @code{\\partcombine} command ) allows the +combination of several different parts on the same staff. Text +directions such as \"solo\" or \"a2\" are added by default; to remove +them, simply set the property @code{printPartCombineTexts} to +\"false\". For vocal scores (hymns), there is no need to add +\"solo\"/\"a2\" texts, so they should be switched off. However, it +might be better not to use it if there are any solos, as they won't be +indicated. In such cases, standard polyphonic notation may be +preferable. + +This snippet presents the three ways two parts can be printed on a same +staff: standard polyphony, @code{\\partcombine} without texts, and +@code{\\partcombine} with texts. + + + + +" + doctitle = "Combining two parts on the same staff" +} % begin verbatim + +musicUp = \relative c'' { + \time 4/4 + a4 c4.( g8) a4 | + g4 e' g,( a8 b) | + c b a2. +} + +musicDown = \relative c'' { + g4 e4.( d8) c4 | + r2 g'4( f8 e) | + d2 \stemDown a +} + +\score { + << + << + \new Staff { + \set Staff.instrumentName = "Standard polyphony " + << \musicUp \\ \musicDown >> + } + \new Staff \with { printPartCombineTexts = ##f } { + \set Staff.instrumentName = "PartCombine without texts " + \partcombine \musicUp \musicDown + } + \new Staff { + \set Staff.instrumentName = "PartCombine with texts " + \partcombine \musicUp \musicDown + } + >> + >> + \layout { + indent = 6.0\cm + \context { + \Score + \override SystemStartBar #'collapse-height = #30 + } + } +} + diff --git a/Documentation/snippets/compound-time-signatures.ly b/Documentation/snippets/compound-time-signatures.ly new file mode 100644 index 0000000000..55025e2b19 --- /dev/null +++ b/Documentation/snippets/compound-time-signatures.ly @@ -0,0 +1,76 @@ +%% Do not edit this file; it is auto-generated from input/new +%% This file is in the public domain. +%% Note: this file works from version 2.13.4 +\version "2.13.4" + +\header { +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + doctitlees = "Indicaciones de compases compuestos" + texidoces = " +Las indicaciones de compás poco frecuentes como \"5/8\" se pueden +ejecutar como compases compuestos (p.ej. \"3/8 + 2/8\"), que combinan +dos o más metros diferentes. LilyPond puede hacer la música de este +tipo fácil de leer e interpretar, imprimiendo explícitamente las +indicaciones de compás compuesto y adaptando el comportamiento +automático de las barras (también se pueden añadir indicaciones +gráficas de la agrupación de compases; véase el fragmento de código +apropiado en la base de datos). + +" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d +texidocde = " +Ungerade Taktarten werden (wie etwa \"5/8\") werden oft als zusammengesetzte +Taktarten interpretiert (bspw. \"3/8 + 2/8\"), in welchen zwei oder mehr +Teiltakte unterschieden werden. LilyPond kann derartige Noten produzieren, +indem entsprechende Taktarten gesetzt werden und die automatische +Bebalkung angepasst wird. + +" + doctitlede = "Zusammengesetzte Taktarten" + + +%% Translation of GIT committish: e71f19ad847d3e94ac89750f34de8b6bb28611df + texidocfr = " +Des métriques telles que @qq{5/8} peuvent s'interpréter sous une forme +décomposée --- @qq{3/8 + 2/8} par exemple --- qui combine plusieurs +métriques. LilyPond est capable de rendre ce type de notation, plus + facile à lire et à interpréter, en imprimant cette métrique composite + et en adaptant les règles de ligature automatique en conséquence. + +" + doctitlefr = "Métrique décomposée" + + lsrtags = "rhythms" + + texidoc = " +Odd 20th century time signatures (such as \"5/8\") can often be played +as compound time signatures (e.g. \"3/8 + 2/8\"), which combine two or +more inequal metrics. LilyPond can make such music quite easy to read +and play, by explicitly printing the compound time signatures and +adapting the automatic beaming behavior. (Graphic measure grouping +indications can also be added; see the appropriate snippet in this +database.) + +" + doctitle = "Compound time signatures" +} % begin verbatim + + +#(define ((compound-time one two num) grob) + (grob-interpret-markup grob + (markup #:override '(baseline-skip . 0) #:number + (#:line ( + (#:column (one num)) + #:vcenter "+" + (#:column (two num))))))) + +\relative c' { + \override Staff.TimeSignature #'stencil = #(compound-time "2" "3" "8") + \time 5/8 + \overrideBeamSettings #'Staff #'(5 . 8) #'end + #'((* . (2 3))) + c8 d e fis gis + c8 fis, gis e d + c8 d e4 gis8 +} diff --git a/Documentation/snippets/conducting-signs,-measure-grouping-signs.ly b/Documentation/snippets/conducting-signs,-measure-grouping-signs.ly new file mode 100644 index 0000000000..938a7b5909 --- /dev/null +++ b/Documentation/snippets/conducting-signs,-measure-grouping-signs.ly @@ -0,0 +1,97 @@ +%% Do not edit this file; it is auto-generated from input/new +%% This file is in the public domain. +%% Note: this file works from version 2.13.4 +\version "2.13.4" + +\header { +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Las opciones para agrupar los pulsos de un compás están a nuestra +disposición a través de la función de Scheme +@code{set-time-signature}, que acepta tres argumentos: el número +de pulsos, la longitud del pulso, y la agrupación interna de los +pulsos dentro del compás. Si se incluye el grabador +@code{Measure_grouping_engraver}, la función crea también símbolos +de agrupación @code{MeasureGrouping}. Dichos símbolos facilitan +la lectura de la música moderna de cierta complejidad rítmica. En +el ejemplo, el compás de 9/8 se subdivide en 2, 2, 2 y 3. Esto se +pasa a la función @code{set-time-signature} como tercer argumento: +@code{'(2 2 2 3)}: + +" +doctitlees = "Símbolos de dirección, símbolos de agrupación de compás" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Optionen, mit denen die Balken in einem Takt gruppiert werden, sind +durch die Scheme-Funktion @code{set-time-signature} erhältlich, die +drei Argumente braucht: Die Zahl der Taktschläge, die Länge des +Schlages und die interne gruppieren von Balken in dem Takt. Wenn der +@code{Measure_grouping_engraver} hinzugefügt worden ist, erstellt +diese Funktion auch @code{MeasureGrouping}-(Taktgruppen)-Zeichen. Derartige +Zeichen erleichtern das Lesen von rhythmisch komplexer Musik. In dem +Beispiel ist der 9/8-Takt in 2, 2, 2 und 3 aufgeteilt. Das wird +der @code{set-time-signature}-Funktion als das dritte Argument mitgegeben: +@code{'(2 2 2 3)}: + +" + doctitlede = "Dirigirzeichen, Taktgruppenzeichen" + + +%% Translation of GIT committish: b3196fadd8f42d05ba35e8ac42f7da3caf8a3079 + texidocfr = " +Il existe des options qui permettent de grouper les ligatures au sein +d'une mesure, grâce à la fonction Scheme @code{set-time-signature}. +Celle-ci prend trois arguments : le nombre de pulsations, la durée de la +pulsation et le regroupement des pulsations dans la mesure. Si l'on +fait appel au @code{Measure_grouping_engraver}, la fonction +@code{set-time-signature} créera aussi des symboles +@code{MeasureGrouping}. Ces symboles aident à la lecture des œuvres +modernes à la rythmique complexe. Dans l'exemple qui suit, la mesure à +9/8 est divisée en 2, 2, 2 et 3. Ceci est fourni en tant que troisième +argument à @code{set-time-signature} : @code{'(2 2 2 3)}. + +" + doctitlefr = "Signes de direction, signes de sous-groupe" + + lsrtags = "rhythms" + + texidoc = " +Beat grouping within a bar is controlled by the default grouping +established in @code{beamSettings}. This grouping can be established +by the use of @code{\\overrideBeamSettings}. Alternatively, the +Scheme function @code{set-time-signature} can be used to both +set the time signature and establish the default grouping rule. +@code{set-time-signature}, takes three arguments: the +number of beats, the beat length, and the internal grouping of beats in +the measure. If the @code{Measure_grouping_engraver} is included +in one of the display contexts, measure grouping signs will be +created. Such signs ease reading rhythmically complex modern music. +In the example, the 9/8 measure is grouped in two different +patterns using the two different methods, while the 5/8 measure +is grouped according to the default setting in +@file{scm/beam-settings.scm}: + +" + doctitle = "Conducting signs, measure grouping signs" +} % begin verbatim + + +\score { + \relative c'' { + \time 9/8 + \overrideBeamSettings #'Score #'(9 . 8) #'end #'((* . (2 2 2 3))) + g8 g d d g g a( bes g) | + #(set-time-signature 9 8 '(4 5)) + g8 g d d g g a( bes g) | + \time 5/8 + a4. g4 | + } + \layout { + \context { + \Staff + \consists "Measure_grouping_engraver" + } + } +} + diff --git a/Documentation/snippets/contemporary-glissando.ly b/Documentation/snippets/contemporary-glissando.ly new file mode 100644 index 0000000000..2bec6e3d19 --- /dev/null +++ b/Documentation/snippets/contemporary-glissando.ly @@ -0,0 +1,44 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "expressive-marks" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Se puede tipografiar un gissando contemporáneo sin nota final +utilizando una nota oculta y temporalización de cadenza. + +" + doctitlees = "Glissando contemporáneo" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d +texidocde = " +Ein modernes Glissando ohne eine Endnote kann gesetzt werden, indem +eine Kadenz eingesetzt wird und die Endnote unsichtbar gemacht wird. + +" + doctitlede = "Moderne Glissandi" + + texidoc = " +A contemporary glissando without a final note can be typeset using a +hidden note and cadenza timing. + +" + doctitle = "Contemporary glissando" +} % begin verbatim + +\relative c'' { + \time 3/4 + \override Glissando #'style = #'zigzag + c4 c + \cadenzaOn + c4\glissando + \hideNotes + c,,4 + \unHideNotes + \cadenzaOff + \bar "|" +} + diff --git a/Documentation/snippets/contexts-and-engravers-intro.itely b/Documentation/snippets/contexts-and-engravers-intro.itely new file mode 100644 index 0000000000..ef796b0592 --- /dev/null +++ b/Documentation/snippets/contexts-and-engravers-intro.itely @@ -0,0 +1,11 @@ +@node Contexts and engravers +@unnumbered Contexts and engravers + +@c FIXME make xref more precise when the chapter has been +@c revised in GDP +@ruser{Changing defaults} + +@rlearning{Contexts and engravers} + +@lysnippets + diff --git a/Documentation/snippets/contexts-and-engravers.snippet-list b/Documentation/snippets/contexts-and-engravers.snippet-list new file mode 100644 index 0000000000..73055ed527 --- /dev/null +++ b/Documentation/snippets/contexts-and-engravers.snippet-list @@ -0,0 +1,13 @@ +adding-a-figured-bass-above-or-below-the-notes.ly +adding-an-extra-staff-at-a-line-break.ly +adding-an-extra-staff.ly +changing-midi-output-to-one-channel-per-voice.ly +changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly +chant-or-psalms-notation.ly +creating-blank-staves.ly +engravers-one-by-one.ly +mensurstriche-layout-bar-lines-between-the-staves.ly +nesting-staves.ly +removing-bar-numbers-from-a-score.ly +use-square-bracket-at-the-start-of-a-staff-group.ly +vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly diff --git a/Documentation/snippets/controlling-the-placement-of-chord-fingerings.ly b/Documentation/snippets/controlling-the-placement-of-chord-fingerings.ly new file mode 100644 index 0000000000..c6a776b7a3 --- /dev/null +++ b/Documentation/snippets/controlling-the-placement-of-chord-fingerings.ly @@ -0,0 +1,53 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "editorial-annotations, chords, keyboards, fretted-strings" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Se puede controlar con precisión la colocación de los números de digitación. + +" + doctitlees = "Controlar la colocación de las digitaciones de acordes" + + +%% Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 + + texidocfr = " +Le positionnement des doigtés peut être contrôlé de manière très précise. + +" + doctitlefr = "Conrôle du positionnement des doigtés" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Die Position von Fingersatzzahlen kann exakt kontrolliert werden. + +" + doctitlede = "Position von Fingersatz in Akkorden kontrollieren" + + texidoc = " +The placement of fingering numbers can be controlled precisely. + +" + doctitle = "Controlling the placement of chord fingerings" +} % begin verbatim + +\relative c' { + \set fingeringOrientations = #'(left) + 4 + \set fingeringOrientations = #'(down) + 4 + \set fingeringOrientations = #'(down right up) + 4 + \set fingeringOrientations = #'(up) + 4 + \set fingeringOrientations = #'(left) + 2 + \set fingeringOrientations = #'(down) + 2 +} + + diff --git a/Documentation/snippets/controlling-the-vertical-ordering-of-scripts.ly b/Documentation/snippets/controlling-the-vertical-ordering-of-scripts.ly new file mode 100644 index 0000000000..62e2c2299b --- /dev/null +++ b/Documentation/snippets/controlling-the-vertical-ordering-of-scripts.ly @@ -0,0 +1,60 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "expressive-marks, tweaks-and-overrides" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +El orden vertical que ocupan las inscripciones gráficas está +controlado con la propiedad @code{'script-priority}. Cuanto más +bajo es este número, más cerca de la nota se colocará. En este +ejemplo, el @code{TextScript} (el sostenido) tiene primero la +prioridad más baja, por lo que se sitúa en la posición más baja en +el primer ejemplo. En el segundo, el semitrino (el @code{Script}) +es el que la tiene más baja, por lo que se sitúa en la parte +interior. Cuando dos objetos tienen la misma prioridad, el orden +en que se introducen determina cuál será el que aparece en primer +lugar. + +" + doctitlees = "Controlar la ordenación vertical de las inscripciones" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d +texidocde = " +Die vertikale Anordnung von Beschriftungen wird mit der +@code{'script-priority}-Eigenschaft kontrolliert. Um so kleiner die +Zahl, umso näher wird die Beschriftung in Bezug auf die Note gesetzt. In +diesem Beispiel hat das @code{TextScript}-Objekt (das Kreuz) zuerst +die niedrigste Priorität, wird also auch am niedrigsten in dem ersten +Beispiel gesetzt. Im zweiten Fall hat der Praller (das @code{Script}) +die niedrigste Priorität, darum wird er am nächsten zum System gesetzt. +Wenn zwei Objekte die gleiche Priorität haben, wird ihre Reihenfolge +anhand ihres Auftretens in der Quelldatei entschieden. + +" + doctitlede = "Die vertikale Anordnung von Beschriftungen kontrollieren" + + texidoc = " +The vertical ordering of scripts is controlled with the +@code{'script-priority} property. The lower this number, the closer it +will be put to the note. In this example, the @code{TextScript} (the +sharp symbol) first has the lowest priority, so it is put lowest in the +first example. In the second, the prall trill (the @code{Script}) has +the lowest, so it is on the inside. When two objects have the same +priority, the order in which they are entered determines which one +comes first. + +" + doctitle = "Controlling the vertical ordering of scripts" +} % begin verbatim + +\relative c''' { + \once \override TextScript #'script-priority = #-100 + a2^\prall^\markup { \sharp } + + \once \override Script #'script-priority = #-100 + a2^\prall^\markup { \sharp } +} + diff --git a/Documentation/snippets/controlling-tuplet-bracket-visibility.ly b/Documentation/snippets/controlling-tuplet-bracket-visibility.ly new file mode 100644 index 0000000000..de374e55ec --- /dev/null +++ b/Documentation/snippets/controlling-tuplet-bracket-visibility.ly @@ -0,0 +1,38 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "rhythms, tweaks-and-overrides" + + texidoc = " +The default behavior of tuplet-bracket visibility is to print a bracket +unless there is a beam of the same length as the tuplet. To control the +visibility of tuplet brackets, set the property +@code{'bracket-visibility} to either @code{#t} (always print a +bracket), @code{#f} (never print a bracket) or @code{#'if-no-beam} +(only print a bracket if there is no beam). + +" + doctitle = "Controlling tuplet bracket visibility" +} % begin verbatim + +music = \relative c'' { + \times 2/3 { c16[ d e } f8] + \times 2/3 { c8 d e } + \times 2/3 { c4 d e } +} + +\new Voice { + \relative c' { + << \music s4^"default" >> + \override TupletBracket #'bracket-visibility = #'if-no-beam + << \music s4^"'if-no-beam" >> + \override TupletBracket #'bracket-visibility = ##t + << \music s4^"#t" >> + \override TupletBracket #'bracket-visibility = ##f + << \music s4^"#f" >> + } +} + + diff --git a/Documentation/snippets/creating-a-delayed-turn.ly b/Documentation/snippets/creating-a-delayed-turn.ly new file mode 100644 index 0000000000..8eb4e7f8fb --- /dev/null +++ b/Documentation/snippets/creating-a-delayed-turn.ly @@ -0,0 +1,58 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "expressive-marks, editorial-annotations, tweaks-and-overrides" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca +texidoces = " +La creación de un grupeto circular de anticipación entre dos notas, +donde la nota inferior del grupeto utiliza una alteración, requiere +varias sobreescriturasw de propiedades. La propiedad +@code{outside-staff-priority} se debe establecer al valor @code{#f}, pues en +caso contrario tendría prioridad sobre la propiedad @code{avoid-slur +property}. El valor de @code{halign} se utiliza para colocar el +grupeto horizontalmente. + +" + +doctitlees = "Crear un grupeto de anticipación" + + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Einen Doppelschlag mit Vorhalt zu erstellen, wobei die untere Note das +Vorzeichen benutzt, erfordert einige Einstellungsänderungen. Die +@code{outside-staff-priority}-Eigenschaft muss auf falsch (@code{#f}) +gesetzt werden, weil sie sonst über die Eigenschaft +@code{avoid-slur property} dominieren würde. Der Wert von @code{halign} +wird benutzt, um den Doppelschlag horizontal zu positionieren. +" + + doctitlede = "Einen Doppelschlag mit Vorhalt erstellen" + + texidoc = " +Creating a delayed turn, where the lower note of the turn uses the +accidental, requires several overrides. The +@code{outside-staff-priority} property must be set to @code{#f}, as +otherwise this would take precedence over the @code{avoid-slur +property}. The value of @code{halign} is used to position the turn +horizontally. + +" + doctitle = "Creating a delayed turn" +} % begin verbatim + +\relative c'' { + \once \override TextScript #'avoid-slur = #'inside + \once \override TextScript #'outside-staff-priority = ##f + c2(^\markup \tiny \override #'(baseline-skip . 1) { + \halign #-4 + \center-column { + \sharp + \musicglyph #"scripts.turn" + } + } + d4.) c8 +} diff --git a/Documentation/snippets/creating-a-sequence-of-notes-on-various-pitches.ly b/Documentation/snippets/creating-a-sequence-of-notes-on-various-pitches.ly new file mode 100644 index 0000000000..26cea9dbbb --- /dev/null +++ b/Documentation/snippets/creating-a-sequence-of-notes-on-various-pitches.ly @@ -0,0 +1,77 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "pitches" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +En una música que tenga muchas apariciones de la +misma secuencia de notas a distintas alturas, podría ser de +utilidad la siguiente función musical. Admite una nota, de la que +sólo se utiliza su altura. Las funciones de apoyo en Scheme se +han tomado prestadas del documento de \"Consejos y trucos\" de la +versión 2.10 del manual. Este ejemplo crea las duraciones +rítmicas que se usan a todo lo largo de «Marte», de «Los Planetas» +de Gustav Holst. + +" + doctitlees = "Crear una secuencia de notas a distintas alturas" + + texidoc = " +In music that contains many occurrences of the same sequence of notes +at different pitches, the following music function may prove useful. +It takes a note, of which only the pitch is used. The supporting +Scheme functions were borrowed from the \"Tips and tricks\" document in +the manual for version 2.10. This example creates the rhythm used +throughout Mars, from Gustav Holst's The Planets. + +" + doctitle = "Creating a sequence of notes on various pitches" +} % begin verbatim + +#(define (make-note-req p d) + (make-music 'NoteEvent + 'duration d + 'pitch p)) + +#(define (make-note p d) + (make-music 'EventChord + 'elements (list (make-note-req p d)))) + +#(define (seq-music-list elts) + (make-music 'SequentialMusic + 'elements elts)) + +#(define (make-triplet elt) + (make-music 'TimeScaledMusic + 'denominator 3 + 'numerator 2 + 'element elt)) + +rhythm = +#(define-music-function (parser location note) (ly:music?) + "Make the rhythm in Mars (the Planets) at the given note's pitch" + (let ((p (ly:music-property + (car (ly:music-property note 'elements)) + 'pitch))) + (seq-music-list + (list + (make-triplet (seq-music-list + (list + (make-note p (ly:make-duration 3 0 2 3)) + (make-note p (ly:make-duration 3 0 2 3)) + (make-note p (ly:make-duration 3 0 2 3))))) + (make-note p (ly:make-duration 2 0)) + (make-note p (ly:make-duration 2 0)) + (make-note p (ly:make-duration 3 0)) + (make-note p (ly:make-duration 3 0)) + (make-note p (ly:make-duration 2 0)))))) + +\new Staff { + \time 5/4 + \rhythm c' + \rhythm c'' + \rhythm g +} diff --git a/Documentation/snippets/creating-arpeggios-across-notes-in-different-voices.ly b/Documentation/snippets/creating-arpeggios-across-notes-in-different-voices.ly new file mode 100644 index 0000000000..cb2c622579 --- /dev/null +++ b/Documentation/snippets/creating-arpeggios-across-notes-in-different-voices.ly @@ -0,0 +1,46 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "expressive-marks" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Se puede trazar un símbolo de arpegio entre notas de distintas +voces que están sobre el mismo pentagrama si el grabador +@code{Span_arpeggio_engraver} se traslada al contexto de +@code{Staff} context: + +" + doctitlees = "Crear arpegios entre notas de voces distintas" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d +texidocde = " +Ein Arpeggio kann zwischen Noten aus unterschidlichen Stimmen auf demselben +System gezogen werden, wenn der @code{Span_arpeggio_engraver} in den +@code{Staff}-Kontext verschoben wird: + +" + doctitlede = "Arpeggios zwischen unterschiedlichen Stimmen erzeugen" + + texidoc = " +An arpeggio can be drawn across notes in different voices on the same +staff if the @code{Span_arpeggio_engraver} is moved to the @code{Staff} +context: + +" + doctitle = "Creating arpeggios across notes in different voices" +} % begin verbatim + +\new Staff \with { + \consists "Span_arpeggio_engraver" +} +\relative c' { + \set Staff.connectArpeggios = ##t + << + { 4\arpeggio 2 } \\ + { 2\arpeggio 2 } + >> +} + diff --git a/Documentation/snippets/creating-blank-staves.ly b/Documentation/snippets/creating-blank-staves.ly new file mode 100644 index 0000000000..a162e1fa6a --- /dev/null +++ b/Documentation/snippets/creating-blank-staves.ly @@ -0,0 +1,59 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "staff-notation, editorial-annotations, contexts-and-engravers, paper-and-layout" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Para crear pentagramas en blanco, genere compases vacíos y después +elimine el grabador de números de compás +@code{Bar_number_engraver} del contexto @code{Score}, y los +grabadores de la indicación de compás +@code{Time_signature_engraver}, de la clave @code{Clef_engraver} y +de los compases @code{Bar_engraver} del contexto de @code{Staff}. + +" + doctitlees = "Crear pentagramas en blanco" + + texidoc = " +To create blank staves, generate empty measures then remove the +@code{Bar_number_engraver} from the @code{Score} context, and the +@code{Time_signature_engraver}, @code{Clef_engraver} and +@code{Bar_engraver} from the @code{Staff} context. + +" + doctitle = "Creating blank staves" +} % begin verbatim + +#(set-global-staff-size 20) + +\score { + { + \repeat unfold 12 { s1 \break } + } + \layout { + indent = 0\in + \context { + \Staff + \remove "Time_signature_engraver" + \remove "Clef_engraver" + \remove "Bar_engraver" + } + \context { + \Score + \remove "Bar_number_engraver" + } + } +} + +\paper { + #(set-paper-size "letter") + ragged-last-bottom = ##f + line-width = 7.5\in + left-margin = 0.5\in + bottom-margin = 0.25\in + top-margin = 0.25\in +} + diff --git a/Documentation/snippets/creating-cross-staff-arpeggios-in-a-piano-staff.ly b/Documentation/snippets/creating-cross-staff-arpeggios-in-a-piano-staff.ly new file mode 100644 index 0000000000..1c8d5080ac --- /dev/null +++ b/Documentation/snippets/creating-cross-staff-arpeggios-in-a-piano-staff.ly @@ -0,0 +1,50 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "expressive-marks" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Dentro de un @code{PianoStaff}, es posible hacer que un arpegio +cruce entre los pentagramas ajustando la propiedad +@code{PianoStaff.connectArpeggios}. + +" + doctitlees = "Crear arpegios que se cruzan entre pentagramas dentro de un sistema de piano" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d +texidocde = " +Arpeggio über mehrere Systeme können in anderen Kontexten als dem +@code{PianoStaff} erstellt werden, wenn der @code{Span_arpeggio_engraver} +in den @code{Score}-Kontext eingefügt wird. + +" + doctitlede = "Arpeggio über mehrere Systeme in anderen Kontexten" + + texidoc = " +In a @code{PianoStaff}, it is possible to let an arpeggio cross between +the staves by setting the property @code{PianoStaff.connectArpeggios}. + + +" + doctitle = "Creating cross-staff arpeggios in a piano staff" +} % begin verbatim + +\new PianoStaff \relative c'' << + \set PianoStaff.connectArpeggios = ##t + \new Staff { + 4\arpeggio + 4\arpeggio + 4\arpeggio + 4\arpeggio + } + \new Staff { + \clef bass + \repeat unfold 4 { + 4\arpeggio + } + } +>> + diff --git a/Documentation/snippets/creating-cross-staff-arpeggios-in-other-contexts.ly b/Documentation/snippets/creating-cross-staff-arpeggios-in-other-contexts.ly new file mode 100644 index 0000000000..796923bd81 --- /dev/null +++ b/Documentation/snippets/creating-cross-staff-arpeggios-in-other-contexts.ly @@ -0,0 +1,60 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "expressive-marks" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Se pueden crear arpegios que se cruzan entre pentagramas dentro de +contextos distintos a @code{PianoStaff} si se incluye el grabador +@code{Span_arpeggio_engraver} en el contexto de @code{Score}. + +" + doctitlees = "Creación de arpegios que se cruzan entre pentagramas dentro de otros contextos" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +In einem Klaviersystem (@code{PianoStaff}) ist es möglich, ein Arpeggio +zwischen beiden Systemen zu verbinden, indem die +@code{PianoStaff.connectArpeggios}-Eigenschaft gesetzt wird. + + +" + doctitlede = "Arpeggio zwischen Systemen in einem Klaviersystem erstellen" + + texidoc = " +Cross-staff arpeggios can be created in contexts other than +@code{PianoStaff} if the @code{Span_arpeggio_engraver} is included in +the @code{Score} context. + +" + doctitle = "Creating cross-staff arpeggios in other contexts" +} % begin verbatim + +\score { + \new StaffGroup { + \set Score.connectArpeggios = ##t + << + \new Voice \relative c' { + 2\arpeggio + 2\arpeggio + 1\arpeggio + } + \new Voice \relative c { + \clef bass + 2\arpeggio + 2\arpeggio + 1\arpeggio + } + >> + } + \layout { + \context { + \Score + \consists "Span_arpeggio_engraver" + } + } +} + diff --git a/Documentation/snippets/creating-metronome-marks-in-markup-mode.ly b/Documentation/snippets/creating-metronome-marks-in-markup-mode.ly new file mode 100644 index 0000000000..435260ed81 --- /dev/null +++ b/Documentation/snippets/creating-metronome-marks-in-markup-mode.ly @@ -0,0 +1,45 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "staff-notation" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Se pueden crear indicaciones metronómicas nuevas en modo de +marcado, pero no cambian el tempo en la salida MIDI. + +" + doctitlees = "Crear indicaciones metronómicas en modo de marcado" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Neue Metronombezeichnungen können als Textbeschriftung erstellt werden, +aber sie ändern nicht das Tempo für die MIDI-Ausgabe. + +" + + doctitlede = "Eine Metronombezeichnung als Textbeschriftung erstellen" + + texidoc = " +New metronome marks can be created in markup mode, but they will not +change the tempo in MIDI output. + +" + doctitle = "Creating metronome marks in markup mode" +} % begin verbatim + +\relative c' { + \tempo \markup { + \concat { + ( + \smaller \general-align #Y #DOWN \note #"16." #1 + " = " + \smaller \general-align #Y #DOWN \note #"8" #1 + ) + } + } + c1 + c4 c' c,2 +} diff --git a/Documentation/snippets/creating-real-parenthesized-dynamics.ly b/Documentation/snippets/creating-real-parenthesized-dynamics.ly new file mode 100644 index 0000000000..6095e1cec3 --- /dev/null +++ b/Documentation/snippets/creating-real-parenthesized-dynamics.ly @@ -0,0 +1,53 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "expressive-marks, text" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Aunque la manera más fácil de añadir paréntesis a una indicación +de dinámica es utilizar un bloque @code{\\markup}, este método +tiene un inconveniente: los objetos que se crean se comportarán +como elementos de marcado de texto y no como indicaciones +dinámicas. + +Sin embargo, es posible crear un objeto similar utilizando el +código de Scheme equivalente (como se explica en \"Interfaz del +programador de elementos de marcado\"), en combinación con la +función @code{make-dynamic-script}. De esta forma, el elemento de +marcado se tratará como una indicación dinámica, y por tanto +seguirá siendo compatible con instrucciones como +@code{\\dynamicUp} o @code{\\dynamicDown}. + +" + doctitlees = "Crear indicaciones dinámicas \"verdaderas\" entre paréntesis" + + texidoc = " +Although the easiest way to add parentheses to a dynamic mark is to use +a @code{\\markup} block, this method has a downside: the created +objects will behave like text markups, and not like dynamics. + +However, it is possible to create a similar object using the equivalent +Scheme code (as described in \"Markup programmer interface\"), combined +with the @code{make-dynamic-script} function. This way, the markup will +be regarded as a dynamic, and therefore will remain compatible with +commands such as @code{\\dynamicUp} or @code{\\dynamicDown}. + + + +" + doctitle = "Creating \"real\" parenthesized dynamics" +} % begin verbatim + +\paper { ragged-right = ##t } + +parenF = #(make-dynamic-script (markup #:line (#:normal-text #:italic + #:fontsize 2 "(" #:hspace -0.8 #:dynamic "f" #:normal-text + #:italic #:fontsize 2 ")" + ))) +\relative c'' { + c4\parenF c c \dynamicUp c\parenF +} + diff --git a/Documentation/snippets/creating-simultaneous-rehearsal-marks.ly b/Documentation/snippets/creating-simultaneous-rehearsal-marks.ly new file mode 100644 index 0000000000..92c84d51cf --- /dev/null +++ b/Documentation/snippets/creating-simultaneous-rehearsal-marks.ly @@ -0,0 +1,54 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "expressive-marks, text, tweaks-and-overrides" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +A diferencia de las inscripciones de texto, las lestras de ensayo +no se pueden apilar en un punto concreto de la partitura: sólo se +crea un objeto @code{RehearsalMark}. Utilizando un compás y línea +divisoria invisibles se puede crear una nueva marca de ensayo, +dando la apariencia de dos marcas en la misma columna. + +Este método también puede resultar útil para colocar marcas de +ensayo tanto al final de un sistema como al comienzo del sistema +siguiente. + +" + doctitlees = "Creación de marcas de ensayo simultáneas" + + texidoc = " +Unlike text scripts, rehearsal marks cannot be stacked at a particular +point in a score: only one @code{RehearsalMark} object is created. +Using an invisible measure and bar line, an extra rehearsal mark can be +added, giving the appearance of two marks in the same column. This +method may also prove useful for placing rehearsal marks at both the +end of one system and the start of the following system. + +" + doctitle = "Creating simultaneous rehearsal marks" +} % begin verbatim + +{ + \key a \major + \set Score.markFormatter = #format-mark-box-letters + \once \override Score.RehearsalMark #'outside-staff-priority = #5000 + \once \override Score.RehearsalMark #'self-alignment-X = #LEFT + \once \override Score.RehearsalMark #'break-align-symbols = #'(key-signature) + \mark \markup { \bold { Senza denti } } + + % the hidden measure and bar line + \once \override Score.TimeSignature #'stencil = ##f + \time 1/16 + s16 \bar "" + + \time 4/4 + \once \override Score.RehearsalMark #'self-alignment-X = #LEFT + \mark \markup { \box \bold Intro } + d'1 + \mark \default + d'1 +} diff --git a/Documentation/snippets/creating-slurs-across-voices.ly b/Documentation/snippets/creating-slurs-across-voices.ly new file mode 100644 index 0000000000..b934b365d2 --- /dev/null +++ b/Documentation/snippets/creating-slurs-across-voices.ly @@ -0,0 +1,57 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "expressive-marks, keyboards, unfretted-strings" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +En determinadas situaciones es necesario crear ligaduras de +expresión entre notas que están en voces distintas. + +La solución es añadir notas invisibles a una de las voces +utilizando @code{\\hideNotes}. + +Este ejemplo es el compás 235 de la Chacona de la segunda Partita +para violín solo, BWV 1004, de Bach. + +" + doctitlees = "Hacer ligaduras entre voces distintas" + + texidoc = " +In some situations, it may be necessary to create slurs between notes +from different voices. + +The solution is to add invisible notes to one of the voices, using +@code{\\hideNotes}. + +This example is measure 235 of the Ciaconna from Bach's 2nd Partita for +solo violin, BWV 1004. + +" + doctitle = "Creating slurs across voices" +} % begin verbatim + +\relative c' { + << + { + d16( a') s a s a[ s a] s a[ s a] + } + \\ + { + \slurUp + bes,16[ s e]( + \hideNotes a) + \unHideNotes f[( + \hideNotes a) + \unHideNotes fis]( + \hideNotes a) + \unHideNotes g[( + \hideNotes a) + \unHideNotes gis]( + \hideNotes a) + } + >> +} + diff --git a/Documentation/snippets/creating-text-spanners.ly b/Documentation/snippets/creating-text-spanners.ly new file mode 100644 index 0000000000..2c1fbb0a42 --- /dev/null +++ b/Documentation/snippets/creating-text-spanners.ly @@ -0,0 +1,63 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "expressive-marks, text, tweaks-and-overrides" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Las instrucciones @code{\\startTextSpan} y @code{\\stopTextSpan} +permiten la creación de elementos de extensión textuales tan +fácilmente como indicaciones de pedal u +octavaciones. Sobreescribimos ciertas propiedades del objeto +@code{TextSpanner} para modificar su salida. + +" + doctitlees = "Crear elementos de extensión textuales" + + texidoc = " +The @code{\\startTextSpan} and @code{\\stopTextSpan} commands allow the +creation of text spanners as easily as pedal indications or +octavations. Override some properties of the @code{TextSpanner} object +to modify its output. + +" + doctitle = "Creating text spanners" +} % begin verbatim + +\paper { ragged-right = ##f } + +\relative c'' { + \override TextSpanner #'(bound-details left text) = #"bla" + \override TextSpanner #'(bound-details right text) = #"blu" + a4 \startTextSpan + b4 c + a4 \stopTextSpan + + \override TextSpanner #'style = #'line + \once \override TextSpanner + #'(bound-details left stencil-align-dir-y) = #CENTER + a4 \startTextSpan + b4 c + a4 \stopTextSpan + + \override TextSpanner #'style = #'dashed-line + \override TextSpanner #'(bound-details left text) = + \markup { \draw-line #'(0 . 1) } + \override TextSpanner #'(bound-details right text) = + \markup { \draw-line #'(0 . -2) } + \once \override TextSpanner #'(bound-details right padding) = #-2 + + a4 \startTextSpan + b4 c + a4 \stopTextSpan + + \set Staff.middleCPosition = #-13 + \override TextSpanner #'dash-period = #10 + \override TextSpanner #'dash-fraction = #0.5 + \override TextSpanner #'thickness = #10 + a4 \startTextSpan + b4 c + a4 \stopTextSpan +} diff --git a/Documentation/snippets/custodes.ly b/Documentation/snippets/custodes.ly new file mode 100644 index 0000000000..9d651136d9 --- /dev/null +++ b/Documentation/snippets/custodes.ly @@ -0,0 +1,43 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "ancient-notation, tweaks-and-overrides" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Se pueden tipografiar «custos» en diferentes estilos. + +" + doctitlees = "Custos" + + texidoc = " +Custodes may be engraved in various styles. + +" + doctitle = "Custodes" +} % begin verbatim + +\layout { ragged-right = ##t } + +\new Staff \with { \consists "Custos_engraver" } \relative c' { + \override Staff.Custos #'neutral-position = #4 + + \override Staff.Custos #'style = #'hufnagel + c1^"hufnagel" \break + 1 + + \override Staff.Custos #'style = #'medicaea + c1^"medicaea" \break + 1 + + \override Staff.Custos #'style = #'vaticana + c1^"vaticana" \break + 1 + + \override Staff.Custos #'style = #'mensural + c1^"mensural" \break + 1 +} + diff --git a/Documentation/snippets/customizing-fretboard-fret-diagrams.ly b/Documentation/snippets/customizing-fretboard-fret-diagrams.ly new file mode 100644 index 0000000000..65e66e020e --- /dev/null +++ b/Documentation/snippets/customizing-fretboard-fret-diagrams.ly @@ -0,0 +1,96 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "fretted-strings, tweaks-and-overrides" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Se pueden establecer las propiedades de los diagramas de +posiciones de acordes por medio de @code{'fret-diagram-details}. +Para los diagramas de posiciones de FretBoard, se aplican los +overrides (sobreescrituras) al objeto @code{FretBoards.FretBoard}. +Como @code{Voice}, @code{FretBoards} es un contexto del nivel +inferior, y por tanto se puede omitir su nombre en la +sobreescritura de propiedades. + +" + doctitlees = "Personalizar los diagramas de posiciones" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Eigenschaften von Bunddiagrammen können in +@code{'fret-diagram-details} verändert werden. Einstellungen mit +dem @code{\override}-Befehl werden dem @code{FretBoards.FretBoard}-Objekt +zugewiesen. Genauso wie @code{Voice} ist auch @code{FretBoards} ein +Kontext der niedrigsten Ebene, weshalb der Kontext auch in dem Befehl +weggelassen werden kann. + +" + doctitlede = "Bunddiagramme anpassen" + + texidoc = " +Fret diagram properties can be set through +@code{'fret-diagram-details}. For FretBoard fret diagrams, overrides +are applied to the @code{FretBoards.FretBoard} object. Like +@code{Voice}, @code{FretBoards} is a bottom level context, therefore +can be omitted in property overrides. + +" + doctitle = "Customizing fretboard fret diagrams" +} % begin verbatim + +\include "predefined-guitar-fretboards.ly" +\storePredefinedDiagram \chordmode { c' } + #guitar-tuning + #"x;1-1-(;3-2;3-3;3-4;1-1-);" +<< + \new ChordNames { + \chordmode { c1 | c | c | d } + } + \new FretBoards { + % Set global properties of fret diagram + \override FretBoards.FretBoard #'size = #'1.2 + \override FretBoard + #'(fret-diagram-details finger-code) = #'in-dot + \override FretBoard + #'(fret-diagram-details dot-color) = #'white + \chordmode { + c + \once \override FretBoard #'size = #'1.0 + \once \override FretBoard + #'(fret-diagram-details barre-type) = #'straight + \once \override FretBoard + #'(fret-diagram-details dot-color) = #'black + \once \override FretBoard + #'(fret-diagram-details finger-code) = #'below-string + c' + \once \override FretBoard + #'(fret-diagram-details barre-type) = #'none + \once \override FretBoard + #'(fret-diagram-details number-type) = #'arabic + \once \override FretBoard + #'(fret-diagram-details orientation) = #'landscape + \once \override FretBoard + #'(fret-diagram-details mute-string) = #"M" + \once \override FretBoard + #'(fret-diagram-details label-dir) = #LEFT + \once \override FretBoard + #'(fret-diagram-details dot-color) = #'black + c' + \once \override FretBoard + #'(fret-diagram-details finger-code) = #'below-string + \once \override FretBoard + #'(fret-diagram-details dot-radius) = #0.35 + \once \override FretBoard + #'(fret-diagram-details dot-position) = #0.5 + \once \override FretBoard + #'(fret-diagram-details fret-count) = #3 + d + } + } + \new Voice { + c'1 | c' | c' | d' + } +>> diff --git a/Documentation/snippets/customizing-markup-fret-diagrams.ly b/Documentation/snippets/customizing-markup-fret-diagrams.ly new file mode 100644 index 0000000000..45c99478b1 --- /dev/null +++ b/Documentation/snippets/customizing-markup-fret-diagrams.ly @@ -0,0 +1,126 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "fretted-strings, tweaks-and-overrides" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Se pueden establecer las propiedades de los diagramas de +posiciones a través de @code{'fret-diagram-details}. Para los +diagramas de posiciones de marcado, se pueden aplicar overrides +(sobreescrituras) al objeto @code{Voice.TextScript} o directamente al elemento de marcado. + +" + doctitlees = "Personalizar diagramas de posiciones de marcado" + +%% Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 + + texidocfr = " +Les propriétés d'un diagramme de fret sont modifiables grâce au +@code{'fret-diagram-details}. Lorsqu'ils sont générés sous forme +de @code{\markup}, rien n'empêche de les modifier en jouant sur les +réglages de l'objet @code{Voice.TextScript} ou bien directement sur +le @qq{markup}. + +" + doctitlefr = "Personnalisation des diagrammes de fret" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Bunddiagramme können mit der Eigenschaft @code{'fret-diagram-details} +angepasst werden. Bunddiagramme, die als Textbeschriftung eingefügt werden, +können Veränderungen im @code{Voice.TextScript}-Objekt oder direkt in der +Beschriftung vorgenommen werden. + +" + doctitlede = "Anpassung von Beschriftungs-Bunddiagrammen" + + texidoc = " +Fret diagram properties can be set through +@code{'fret-diagram-details}. For markup fret diagrams, overrides can +be applied to the @code{Voice.TextScript} object or directly to the +markup. + +" + doctitle = "Customizing markup fret diagrams" +} % begin verbatim + +<< + \chords { c1 | c | c | d } + + \new Voice = "mel" { + \textLengthOn + % Set global properties of fret diagram + \override TextScript #'size = #'1.2 + \override TextScript + #'(fret-diagram-details finger-code) = #'in-dot + \override TextScript + #'(fret-diagram-details dot-color) = #'white + + %% C major for guitar, no barre, using defaults + % terse style + c'1^\markup { \fret-diagram-terse #"x;3-3;2-2;o;1-1;o;" } + + %% C major for guitar, barred on third fret + % verbose style + % size 1.0 + % roman fret label, finger labels below string, straight barre + c'1^\markup { + % standard size + \override #'(size . 1.0) { + \override #'(fret-diagram-details . ( + (number-type . roman-lower) + (finger-code . in-dot) + (barre-type . straight))) { + \fret-diagram-verbose #'((mute 6) + (place-fret 5 3 1) + (place-fret 4 5 2) + (place-fret 3 5 3) + (place-fret 2 5 4) + (place-fret 1 3 1) + (barre 5 1 3)) + } + } + } + + %% C major for guitar, barred on third fret + % verbose style + % landscape orientation, arabic numbers, M for mute string + % no barre, fret label down or left, small mute label font + c'1^\markup { + \override #'(fret-diagram-details . ( + (finger-code . below-string) + (number-type . arabic) + (label-dir . -1) + (mute-string . "M") + (orientation . landscape) + (barre-type . none) + (xo-font-magnification . 0.4) + (xo-padding . 0.3))) { + \fret-diagram-verbose #'((mute 6) + (place-fret 5 3 1) + (place-fret 4 5 2) + (place-fret 3 5 3) + (place-fret 2 5 4) + (place-fret 1 3 1) + (barre 5 1 3)) + } + } + + %% simple D chord + % terse style + % larger dots, centered dots, fewer frets + % label below string + d'1^\markup { + \override #'(fret-diagram-details . ( + (finger-code . below-string) + (dot-radius . 0.35) + (dot-position . 0.5) + (fret-count . 3))) { + \fret-diagram-terse #"x;x;o;2-1;3-2;2-3;" + } + } + } +>> diff --git a/Documentation/snippets/default-direction-of-stems-on-the-center-line-of-the-staff.ly b/Documentation/snippets/default-direction-of-stems-on-the-center-line-of-the-staff.ly new file mode 100644 index 0000000000..b938a92328 --- /dev/null +++ b/Documentation/snippets/default-direction-of-stems-on-the-center-line-of-the-staff.ly @@ -0,0 +1,40 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "editorial-annotations" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +La dirección predeterminada de las plicas sobre la tercera línea +del pentagrama está determinada por la propiedad +@code{neutral-direction} del objeto @code{Stem}. + +" + doctitlees = "Dirección predeterminada de las plicas sobre la tercera línea del pentagrama" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Die Richtung von Hälsen auf der mittleren Linie kann mit der @code{Stem}-Eigenschaft +@code{neutral-direction} gesetzt werden. + +" + doctitlede = "Standardrichtung für Hälse auf der Mittellinie" + + texidoc = " +The default direction of stems on the center line of the staff is set +by the @code{Stem} property @code{neutral-direction}. + +" + doctitle = "Default direction of stems on the center line of the staff" +} % begin verbatim + +\relative c'' { + a4 b c b + \override Stem #'neutral-direction = #up + a4 b c b + \override Stem #'neutral-direction = #down + a4 b c b +} + diff --git a/Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly b/Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly new file mode 100644 index 0000000000..c9295f6d88 --- /dev/null +++ b/Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly @@ -0,0 +1,164 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "fretted-strings" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " + +Se pueden añadir diagramas de posiciones predefinidas para +instrumentos nuevos además de los estándar que se usan para la +guitarra. Este archivo muestra cómo se hace, definiendo una afinación +nueva y unas cuantas posiciones para el cuatro venezolano. + +Este archivo también muestra cómo se pueden incluir las digitaciones +en los acordes que se usan como puntos de referencia para la búsqueda +de acordes en la tabla, y mostrarse en el diagrama de posiciones y la +tablatura @code{TabStaff}, pero no en la música. + +Estas posiciones no se pueden transportar porque contienen información +de las cuerdas. Hay planes para corregir esto en un futuro. + +" + doctitlees = "Definición de posiciones predefinidas para otros instrumentos" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + + texidocfr = " +La liste des diagrammes standards prédéfinis pour la guitare peut être + augmentée d'autres définitions spécifiques à d'autres instruments. +Voici comment définir un nouvel accordage ainsi que quelques diagrammes +prédéfinis pour le @qq{cuatro vénézuélien}. + +Cet exemple illustre aussi la manière d'ajouter des doigtés aux +accords ; ils serviront de référence pour la boucle d'accord et seront +indiqués dans les diagrammes et le @code{TabStaff}, mais pas dans la musique. + +Ces diagrammes ne peuvent pas être transposés, dans la mesure où ils +contiennent des informations sur les cordes. Ceci est amené à évoluer. + +" + doctitlefr = "Création de diagrammes de fret prédéfinis pour d'autres instruments" + +%% Translation of GIT committish: 33f623301a41fcc53efadf96bca1c72834763415 + texidocde = " +Vordefinierte Bunddiagramme können für neue Instrumente hinzugefügt werden +neben denen, die schon für die Gitarre definiert sind. Dieses Schnipsel +zeigt, wie man eine neue Saitenstimmung definiert und dann eigene vordefinierte +Bunddiagramme bestimmt. Das Beispiel ist für das venezualische Cuatro. + +Dieses Schnipsel zeigt auch, wie Fingersatz in die Akkorde eingebunden +werden kann, um als Referenzpunkt für die Akkordauswahl benutzt werden +kann. Dieser Fingersatz wird im Bunddiagramm und in der Tabulatur, +aber nicht in den Noten angezeigt. + +Diese Bunddiagramme sind nicht transponierbar, weil sie Saiteninformationen +enthalten. Das soll in der Zukunft verbessert werden. + +" + doctitlede = "Eigene vordefinierte Bunddiagramme für andere Instrumente erstellen" + + texidoc = " +Predefined fret diagrams can be added for new instruments in addition +to the standards used for guitar. This file shows how this is done by +defining a new string-tuning and a few predefined fretboards for the +Venezuelan cuatro. + +This file also shows how fingerings can be included in the chords used +as reference points for the chord lookup, and displayed in the fret +diagram and the @code{TabStaff}, but not the music. + + +These fretboards are not transposable because they contain string +information. This is planned to be corrected in the future. + +" + doctitle = "Defining predefined fretboards for other instruments" +} % begin verbatim + +% add FretBoards for the Cuatro +% Note: This section could be put into a separate file +% predefined-cuatro-fretboards.ly +% and \included into each of your compositions + +cuatroTuning = #'(11 18 14 9) + +dSix = { } +dMajor = { } +aMajSeven = { } +dMajSeven = { } +gMajor = { } + +\storePredefinedDiagram \dSix + #cuatroTuning + #"o;o;o;o;" +\storePredefinedDiagram \dMajor + #cuatroTuning + #"o;o;o;3-3;" +\storePredefinedDiagram \aMajSeven + #cuatroTuning + #"o;2-2;1-1;2-3;" +\storePredefinedDiagram \dMajSeven + #cuatroTuning + #"o;o;o;1-1;" +\storePredefinedDiagram \gMajor + #cuatroTuning + #"2-2;o;1-1;o;" + +% end of potential include file /predefined-cuatro-fretboards.ly + + +#(set-global-staff-size 16) + +primerosNames = \chordmode { + d:6 d a:maj7 d:maj7 + g +} +primeros = { + \dSix \dMajor \aMajSeven \dMajSeven + \gMajor +} + +\score { + << + \new ChordNames { + \set chordChanges = ##t + \primerosNames + } + + \new Staff { + \new Voice \with { + \remove "New_fingering_engraver" + } + \relative c'' { + \primeros + } + } + + \new FretBoards { + \set stringTunings = #cuatroTuning + \override FretBoard + #'(fret-diagram-details string-count) = #'4 + \override FretBoard + #'(fret-diagram-details finger-code) = #'in-dot + \primeros + } + + \new TabStaff \relative c'' { + \set TabStaff.stringTunings = #cuatroTuning + \primeros + } + + >> + + \layout { + \context { + \Score + \override SpacingSpanner + #'base-shortest-duration = #(ly:make-moment 1 16) + } + } + \midi { } +} diff --git a/Documentation/snippets/demo-midiinstruments.ly b/Documentation/snippets/demo-midiinstruments.ly new file mode 100644 index 0000000000..c27263b427 --- /dev/null +++ b/Documentation/snippets/demo-midiinstruments.ly @@ -0,0 +1,175 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "midi" + + texidoc = " +Problem: How to know which @code{midiInstrument} would be best for your +composition? Solution: A LilyPond demo file. + + + +" + doctitle = "Demo MidiInstruments" +} % begin verbatim + +\header { + title = "Demo of all midi sounds" + arranger = "Myself " +} + +baseMelody = \relative c' { + c4.\mf g c16 b' c d + e16 d e f g4 g'4 r + R1 +} +melody = { + \tempo 4 = 150 + \baseMelody +} + +\score { + \new Staff << + \new Voice \melody + >> + \layout { } +} + +\score { + \new Staff << + \new Voice { + r\mf + \set Staff.midiInstrument = #"acoustic grand" \melody + \set Staff.midiInstrument = #"bright acoustic" \melody + \set Staff.midiInstrument = #"electric grand" \melody + \set Staff.midiInstrument = #"honky-tonk" \melody + \set Staff.midiInstrument = #"electric piano 1" \melody + \set Staff.midiInstrument = #"electric piano 2" \melody + \set Staff.midiInstrument = #"harpsichord" \melody + \set Staff.midiInstrument = #"clav" \melody + \set Staff.midiInstrument = #"celesta" \melody + \set Staff.midiInstrument = #"glockenspiel" \melody + \set Staff.midiInstrument = #"music box" \melody + \set Staff.midiInstrument = #"vibraphone" \melody + \set Staff.midiInstrument = #"marimba" \melody + \set Staff.midiInstrument = #"xylophone" \melody + \set Staff.midiInstrument = #"tubular bells" \melody + \set Staff.midiInstrument = #"dulcimer" \melody + \set Staff.midiInstrument = #"drawbar organ" \melody + \set Staff.midiInstrument = #"percussive organ" \melody + \set Staff.midiInstrument = #"rock organ" \melody + \set Staff.midiInstrument = #"church organ" \melody + \set Staff.midiInstrument = #"reed organ" \melody + \set Staff.midiInstrument = #"accordion" \melody + \set Staff.midiInstrument = #"harmonica" \melody + \set Staff.midiInstrument = #"concertina" \melody + \set Staff.midiInstrument = #"acoustic guitar (nylon)" \melody + \set Staff.midiInstrument = #"acoustic guitar (steel)" \melody + \set Staff.midiInstrument = #"electric guitar (jazz)" \melody + \set Staff.midiInstrument = #"electric guitar (clean)" \melody + \set Staff.midiInstrument = #"electric guitar (muted)" \melody + \set Staff.midiInstrument = #"overdriven guitar" \melody + \set Staff.midiInstrument = #"distorted guitar" \melody + \set Staff.midiInstrument = #"acoustic bass" \melody + \set Staff.midiInstrument = #"electric bass (finger)" \melody + \set Staff.midiInstrument = #"electric bass (pick)" \melody + \set Staff.midiInstrument = #"fretless bass" \melody + \set Staff.midiInstrument = #"slap bass 1" \melody + \set Staff.midiInstrument = #"slap bass 2" \melody + \set Staff.midiInstrument = #"synth bass 1" \melody + \set Staff.midiInstrument = #"synth bass 2" \melody + \set Staff.midiInstrument = #"violin" \melody + \set Staff.midiInstrument = #"viola" \melody + \set Staff.midiInstrument = #"cello" \melody + \set Staff.midiInstrument = #"contrabass" \melody + \set Staff.midiInstrument = #"tremolo strings" \melody + \set Staff.midiInstrument = #"pizzicato strings" \melody + \set Staff.midiInstrument = #"orchestral harp" \melody + \set Staff.midiInstrument = #"timpani" \melody + \set Staff.midiInstrument = #"string ensemble 1" \melody + \set Staff.midiInstrument = #"string ensemble 2" \melody + \set Staff.midiInstrument = #"synthstrings 1" \melody + \set Staff.midiInstrument = #"synthstrings 2" \melody + \set Staff.midiInstrument = #"choir aahs" \melody + \set Staff.midiInstrument = #"voice oohs" \melody + \set Staff.midiInstrument = #"synth voice" \melody + \set Staff.midiInstrument = #"orchestra hit" \melody + \set Staff.midiInstrument = #"trumpet" \melody + \set Staff.midiInstrument = #"trombone" \melody + \set Staff.midiInstrument = #"tuba" \melody + \set Staff.midiInstrument = #"muted trumpet" \melody + \set Staff.midiInstrument = #"french horn" \melody + \set Staff.midiInstrument = #"brass section" \melody + \set Staff.midiInstrument = #"synthbrass 1" \melody + \set Staff.midiInstrument = #"synthbrass 2" \melody + \set Staff.midiInstrument = #"soprano sax" \melody + \set Staff.midiInstrument = #"alto sax" \melody + \set Staff.midiInstrument = #"tenor sax" \melody + \set Staff.midiInstrument = #"baritone sax" \melody + \set Staff.midiInstrument = #"oboe" \melody + \set Staff.midiInstrument = #"english horn" \melody + \set Staff.midiInstrument = #"bassoon" \melody + \set Staff.midiInstrument = #"clarinet" \melody + \set Staff.midiInstrument = #"piccolo" \melody + \set Staff.midiInstrument = #"flute" \melody + \set Staff.midiInstrument = #"recorder" \melody + \set Staff.midiInstrument = #"pan flute" \melody + \set Staff.midiInstrument = #"blown bottle" \melody + \set Staff.midiInstrument = #"shakuhachi" \melody + \set Staff.midiInstrument = #"whistle" \melody + \set Staff.midiInstrument = #"ocarina" \melody + \set Staff.midiInstrument = #"lead 1 (square)" \melody + \set Staff.midiInstrument = #"lead 2 (sawtooth)" \melody + \set Staff.midiInstrument = #"lead 3 (calliope)" \melody + \set Staff.midiInstrument = #"lead 4 (chiff)" \melody + \set Staff.midiInstrument = #"lead 5 (charang)" \melody + \set Staff.midiInstrument = #"lead 6 (voice)" \melody + \set Staff.midiInstrument = #"lead 7 (fifths)" \melody + \set Staff.midiInstrument = #"lead 8 (bass+lead)" \melody + \set Staff.midiInstrument = #"pad 1 (new age)" \melody + \set Staff.midiInstrument = #"pad 2 (warm)" \melody + \set Staff.midiInstrument = #"pad 3 (polysynth)" \melody + \set Staff.midiInstrument = #"pad 4 (choir)" \melody + \set Staff.midiInstrument = #"pad 5 (bowed)" \melody + \set Staff.midiInstrument = #"pad 6 (metallic)" \melody + \set Staff.midiInstrument = #"pad 7 (halo)" \melody + \set Staff.midiInstrument = #"pad 8 (sweep)" \melody + \set Staff.midiInstrument = #"fx 1 (rain)" \melody + \set Staff.midiInstrument = #"fx 2 (soundtrack)" \melody + \set Staff.midiInstrument = #"fx 3 (crystal)" \melody + \set Staff.midiInstrument = #"fx 4 (atmosphere)" \melody + \set Staff.midiInstrument = #"fx 5 (brightness)" \melody + \set Staff.midiInstrument = #"fx 6 (goblins)" \melody + \set Staff.midiInstrument = #"fx 7 (echoes)" \melody + \set Staff.midiInstrument = #"fx 8 (sci-fi)" \melody + \set Staff.midiInstrument = #"sitar" \melody + \set Staff.midiInstrument = #"banjo" \melody + \set Staff.midiInstrument = #"shamisen" \melody + \set Staff.midiInstrument = #"koto" \melody + \set Staff.midiInstrument = #"kalimba" \melody + \set Staff.midiInstrument = #"bagpipe" \melody + \set Staff.midiInstrument = #"fiddle" \melody + \set Staff.midiInstrument = #"shanai" \melody + \set Staff.midiInstrument = #"tinkle bell" \melody + \set Staff.midiInstrument = #"agogo" \melody + \set Staff.midiInstrument = #"steel drums" \melody + \set Staff.midiInstrument = #"woodblock" \melody + \set Staff.midiInstrument = #"taiko drum" \melody + \set Staff.midiInstrument = #"melodic tom" \melody + \set Staff.midiInstrument = #"synth drum" \melody + \set Staff.midiInstrument = #"reverse cymbal" \melody + \set Staff.midiInstrument = #"guitar fret noise" \melody + \set Staff.midiInstrument = #"breath noise" \melody + \set Staff.midiInstrument = #"seashore" \melody + \set Staff.midiInstrument = #"bird tweet" \melody + \set Staff.midiInstrument = #"telephone ring" \melody + \set Staff.midiInstrument = #"helicopter" \melody + \set Staff.midiInstrument = #"applause" \melody + \set Staff.midiInstrument = #"gunshot" \melody + } + >> + \midi { } +} + diff --git a/Documentation/snippets/demonstrating-all-headers.ly b/Documentation/snippets/demonstrating-all-headers.ly new file mode 100644 index 0000000000..880f108655 --- /dev/null +++ b/Documentation/snippets/demonstrating-all-headers.ly @@ -0,0 +1,55 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "text, paper-and-layout, titles" + + texidoc = " +A demonstration of all headers. + +" + doctitle = "Demonstrating all headers" +} % begin verbatim + +\header { + copyright = "copyright" + title = "title" + subtitle = "subtitle" + composer = "composer" + arranger = "arranger" + instrument = "instrument" + metre = "metre" + opus = "opus" + piece = "piece" + poet = "poet" + texidoc = "All header fields with special meanings." + copyright = "public domain" + enteredby = "jcn" + source = "urtext" +} + +\layout { + ragged-right = ##f +} + +\score { + \relative c'' { c1 | c | c | c } +} + +\score { + \relative c'' { c1 | c | c | c } + \header { + title = "localtitle" + subtitle = "localsubtitle" + composer = "localcomposer" + arranger = "localarranger" + instrument = "localinstrument" + metre = "localmetre" + opus = "localopus" + piece = "localpiece" + poet = "localpoet" + copyright = "localcopyright" + } +} + diff --git a/Documentation/snippets/display-bracket-with-only-one-staff-in-a-system.ly b/Documentation/snippets/display-bracket-with-only-one-staff-in-a-system.ly new file mode 100644 index 0000000000..3ab43bfa3c --- /dev/null +++ b/Documentation/snippets/display-bracket-with-only-one-staff-in-a-system.ly @@ -0,0 +1,75 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "staff-notation, tweaks-and-overrides" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Si hay un solo pentagrama en un de los tipos de sistema +@code{ChoirStaff} o @code{StaffGroup}, el comportamiento +predeterminado es que no se imprima el corchete en la barra inicial. +Esto se puede cambiar sobreescribiendo las propiedades adecuadas. + +Observe que en contextos como @code{PianoStaff} y +@code{GrandStaff} en que los sistemas empiezan con una llave en +lugar de un corchete, se debe establecer el valor de una propiedad +distinta, como se ve en el segundo sistema del ejemplo. + +" + doctitlees = "Mostrar corchete o llave en grupos de un solo pentagrama" + + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Wenn nur ein System einer Systemgruppe vom Typ @code{ChoirStaff} oder +@code{StaffGroup} angezeigt wird, wird die Klammer zu Beginn normalerweise +nicht gesetzt. Das kann verändert werden, indem man die ensprechende +Eigenschaft veränder. + +Bei Systemen wie @code{PianoStaff} und @code{GrandStaff}, die mit einer +geschweiften Klammer beginne, muss eine andere Eigenschaft verändt werden, +wie das zweite Beispiel zeigt. + +" + doctitlede = "Klammer anzeigen, wenn nur ein System gesetzt wird" + + texidoc = " +If there is only one staff in one of the staff types @code{ChoirStaff} +or @code{StaffGroup}, the bracket and the starting bar line will not be +displayed as standard behavior. This can be changed by overriding the +relevant properties. + +Note that in contexts such as @code{PianoStaff} and @code{GrandStaff} +where the systems begin with a brace instead of a bracket, another +property has to be set, as shown on the second system in the example. + +" + doctitle = "Display bracket with only one staff in a system" +} % begin verbatim + +\markup \left-column { + \score { + \new StaffGroup << + % Must be lower than the actual number of staff lines + \override StaffGroup.SystemStartBracket #'collapse-height = #1 + \override Score.SystemStartBar #'collapse-height = #1 + \new Staff { + c'1 + } + >> + \layout { } + } + \null + \score { + \new PianoStaff << + \override PianoStaff.SystemStartBrace #'collapse-height = #1 + \override Score.SystemStartBar #'collapse-height = #1 + \new Staff { + c'1 + } + >> + \layout { } + } +} diff --git a/Documentation/snippets/displaying-complex-chords.ly b/Documentation/snippets/displaying-complex-chords.ly new file mode 100644 index 0000000000..5701c57c2a --- /dev/null +++ b/Documentation/snippets/displaying-complex-chords.ly @@ -0,0 +1,31 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "simultaneous-notes, chords" + + texidoc = " +Here is a way to display a chord where the same note is played twice +with different accidentals. + +" + doctitle = "Displaying complex chords" +} % begin verbatim + +fixA = { + \once \override Stem #'length = #9 + \once \override Accidental #'extra-offset = #'(0.3 . 0) +} +fixB = { + \once \override NoteHead #'extra-offset = #'(1.7 . 0) + \once \override Stem #'rotation = #'(45 0 0) + \once \override Stem #'extra-offset = #'(-0.2 . -0.2) + \once \override Stem #'flag-style = #'no-flag + \once \override Accidental #'extra-offset = #'(3.1 . 0) +} + +\relative c' { + << { \fixA 8 } \\ { \voiceThree \fixB dis } >> s +} + diff --git a/Documentation/snippets/dodecaphonic-style-accidentals-for-each-note-including-naturals.ly b/Documentation/snippets/dodecaphonic-style-accidentals-for-each-note-including-naturals.ly new file mode 100644 index 0000000000..6eabf37891 --- /dev/null +++ b/Documentation/snippets/dodecaphonic-style-accidentals-for-each-note-including-naturals.ly @@ -0,0 +1,64 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "pitches" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + doctitlees = "Alteraciones de estilo dodecafónico para todas las notas, incluidas las naturales" + texidoces = " +En las obras de principios del s.XX, empezando por Schoenberg, Berg y +Webern (la \"Segunda\" escuela de Viena), cada nota de la escala de +doce tonos se debe tratar con igualdad, sin ninguna jerarquía como los +grados clásicos tonales. Por tanto, estos compositores imprimen una +alteración accidental para cada nota, incluso en las notas naturales, +para enfatizar su nuevo enfoque de la teoría y el lenguaje musicales. + +Este fragmento de código muestra cómo conseguir dichas reglas de +notación. + +" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " + In Werken des fürhen 20. Jahrhundert, angefangen mit Schönberg, Berg + und Webern (die zweite Wiener Schule), wird jeder Ton der + Zwölftonleiter als gleichwertig erachtet, ohne hierarchische + Ordnung. Deshalb wird in dieser Musik für jede Note ein Versetzungszeichen + ausgegeben, auch für unalterierte Tonhöhen, um das neue Verständnis + der Musiktheorie und Musiksprache zu verdeutlichen. + + Dieser Schnipsel zeigt, wie derartige Notationsregeln zu erstellen sind. + " + doctitlede = "Versetzungszeichen für jede Note im Stil der Zwölftonmusik" + + texidoc = " +In early 20th century works, starting with Schoenberg, Berg and Webern +(the \"Second\" Viennese school), every pitch in the twelve-tone scale +has to be regarded as equal, without any hierarchy such as the +classical (tonal) degrees. Therefore, these composers print one +accidental for each note, even at natural pitches, to emphasize their +new approach to music theory and language. + +This snippet shows how to achieve such notation rules. + +" + doctitle = "Dodecaphonic-style accidentals for each note including naturals" +} % begin verbatim + +\score { + \new Staff { + #(set-accidental-style 'dodecaphonic) + c'4 dis' cis' cis' + c'4 dis' cis' cis' + c'4 c' dis' des' + } + \layout { + \context { + \Staff + \remove "Key_engraver" + } + } +} + diff --git a/Documentation/snippets/dotted-harmonics.ly b/Documentation/snippets/dotted-harmonics.ly new file mode 100644 index 0000000000..e445756688 --- /dev/null +++ b/Documentation/snippets/dotted-harmonics.ly @@ -0,0 +1,24 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "unfretted-strings, tweaks-and-overrides" + + texidoc = " +Artificial harmonics using @code{\\harmonic} do not show dots. To +override this behavior, set the context property @code{harmonicDots}. + +" + doctitle = "Dotted harmonics" +} % begin verbatim + +\relative c''' { + \time 3/4 + \key f \major + \set harmonicDots = ##t + 2. ~ + 4. 8( ) + 2. + 2. +} diff --git a/Documentation/snippets/double-glissando.ly b/Documentation/snippets/double-glissando.ly new file mode 100644 index 0000000000..77afb3cb34 --- /dev/null +++ b/Documentation/snippets/double-glissando.ly @@ -0,0 +1,33 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "expressive-marks, simultaneous-notes" + + texidoc = " +To connect chords with glissando lines, attach a second glissando to a +hidden voice. + +" + doctitle = "Double glissando" +} % begin verbatim + +\relative c { + \clef bass + << + { + % new voice ( = \voiceOne), hidden + \hideNotes + % attach glissando to note heads + e2\glissando g + } + \\ + { + % original voice with chords rearranged so that + % glissando is attached to a & c + 2\glissando + } + >> +} + diff --git a/Documentation/snippets/drawing-boxes-around-grobs.ly b/Documentation/snippets/drawing-boxes-around-grobs.ly new file mode 100644 index 0000000000..d8389c7a42 --- /dev/null +++ b/Documentation/snippets/drawing-boxes-around-grobs.ly @@ -0,0 +1,34 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "editorial-annotations, tweaks-and-overrides" + + texidoc = " +The @code{print-function} can be overridden to draw a box around an +arbitrary grob. + +" + doctitle = "Drawing boxes around grobs" +} % begin verbatim + +\relative c'' { + \override TextScript #'stencil = + #(make-stencil-boxer 0.1 0.3 ly:text-interface::print) + c'4^"foo" + + \override Stem #'stencil = + #(make-stencil-boxer 0.05 0.25 ly:stem::print) + \override Score.RehearsalMark #'stencil = + #(make-stencil-boxer 0.15 0.3 ly:text-interface::print) + b8 + + \revert Stem #'stencil + c4. c4 + \mark "F" + c1 +} + + + diff --git a/Documentation/snippets/drawing-circles-around-various-objects.ly b/Documentation/snippets/drawing-circles-around-various-objects.ly new file mode 100644 index 0000000000..24b477a90b --- /dev/null +++ b/Documentation/snippets/drawing-circles-around-various-objects.ly @@ -0,0 +1,32 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "editorial-annotations, tweaks-and-overrides" + + texidoc = " +The @code{\\circle} markup command draws circles around various +objects, for example fingering indications. For other objects, +specific tweaks may be required: this example demonstrates two +strategies for rehearsal marks and measure numbers. + +" + doctitle = "Drawing circles around various objects" +} % begin verbatim + +\relative c' { + c1 + \set Score.markFormatter = + #(lambda (mark context) + (make-circle-markup (format-mark-numbers mark context))) + \mark \default + c2 d^\markup { + \override #'(thickness . 3) { + \circle \finger 2 + } + } + \override Score.BarNumber #'break-visibility = #all-visible + \override Score.BarNumber #'stencil = + #(make-stencil-circler 0.1 0.25 ly:text-interface::print) +} diff --git a/Documentation/snippets/editorial-annotations-intro.itely b/Documentation/snippets/editorial-annotations-intro.itely new file mode 100644 index 0000000000..0dd710632a --- /dev/null +++ b/Documentation/snippets/editorial-annotations-intro.itely @@ -0,0 +1,7 @@ +@node Editorial annotations +@unnumbered Editorial annotations + +@ruser{Editorial annotations} + +@lysnippets + diff --git a/Documentation/snippets/editorial-annotations.snippet-list b/Documentation/snippets/editorial-annotations.snippet-list new file mode 100644 index 0000000000..f665b3bf67 --- /dev/null +++ b/Documentation/snippets/editorial-annotations.snippet-list @@ -0,0 +1,25 @@ +adding-fingerings-to-a-score.ly +allowing-fingerings-to-be-printed-inside-the-staff.ly +analysis-brackets-above-the-staff.ly +applying-note-head-styles-depending-on-the-step-of-the-scale.ly +avoiding-collisions-with-chord-fingerings.ly +blanking-staff-lines-using-the--whiteout-command.ly +changing-a-single-notes-size-in-a-chord.ly +changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.ly +coloring-notes-depending-on-their-pitch.ly +controlling-the-placement-of-chord-fingerings.ly +creating-a-delayed-turn.ly +creating-blank-staves.ly +default-direction-of-stems-on-the-center-line-of-the-staff.ly +drawing-boxes-around-grobs.ly +drawing-circles-around-various-objects.ly +embedding-native-postscript-in-a--markup-block.ly +grid-lines--changing-their-appearance.ly +grid-lines--emphasizing-rhythms-and-notes-synchronization.ly +making-some-staff-lines-thicker-than-the-others.ly +marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly +measure-counter.ly +positioning-fingering-indications-precisely.ly +positioning-text-markups-inside-slurs.ly +printing-text-from-right-to-left.ly +using-postscript-to-generate-special-note-head-shapes.ly diff --git a/Documentation/snippets/embedding-native-postscript-in-a--markup-block.ly b/Documentation/snippets/embedding-native-postscript-in-a--markup-block.ly new file mode 100644 index 0000000000..309b6841f8 --- /dev/null +++ b/Documentation/snippets/embedding-native-postscript-in-a--markup-block.ly @@ -0,0 +1,34 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "editorial-annotations, text" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Se puede insertar códico PostScript directamente dentro de un +bloque @code{\\markup}. + +" + doctitlees = "Empotrar PostScript nativo dentro de un bloque \\markup" + + texidoc = " +PostScript code can be directly inserted inside a @code{\\markup} +block. + +" + doctitle = "Embedding native PostScript in a \\markup block" +} % begin verbatim + +% PostScript is a registered trademark of Adobe Systems Inc. + +\relative c'' { + a4-\markup { \postscript #"3 4 moveto 5 3 rlineto stroke" } + -\markup { \postscript #"[ 0 1 ] 0 setdash 3 5 moveto 5 -3 rlineto stroke " } + + b4-\markup { \postscript #"3 4 moveto 0 0 1 2 8 4 20 3.5 rcurveto stroke" } + s2 + a'1 +} + diff --git a/Documentation/snippets/engravers-one-by-one.ly b/Documentation/snippets/engravers-one-by-one.ly new file mode 100644 index 0000000000..5c5dc9e8dc --- /dev/null +++ b/Documentation/snippets/engravers-one-by-one.ly @@ -0,0 +1,318 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "contexts-and-engravers" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Del problema central de la notación, esto es, crear un determinado +símbolo, se encargan los «plugins» o complementos añadidos. Cada +uno de los complementos se conoce como un grabador. En este +ejemplo, los grabadores se van activando uno por uno, en el orden +siguiente: + +- cabeza de las notas, + +- el símbolo del pentagrama, + +- clave, + +- plicas, + +- barras, ligaduras de expresión, acentos, + +- alteraciones, líneas divisorias, indicación del compás, y armadura. + +Los grabadores se encuentran agrupados. Por ejemplo, las cabezas +de nota, ligaduras de expresión, barras de corchea, etc. forman un +contexto de voz. Los grabadores de la armadura, alteraciones, +compás, etc. forman un contexto de pentagrama. + +Sólo podemos ver el primer ejemplo en este documento; para ver los +demás debemos descartar el fragmento de código y procesarlo en +nuestro ordenador. + +" + doctitlees = "Los grabadores, uno por uno" + + texidoc = " +The notation problem, creating a certain symbol, is handled by plugins. +Each plugin is called an Engraver. In this example, engravers are +switched on one by one, in the following order: + +- note heads + + +- staff symbol, + + +- clef, + + +- stem, + + +- beams, slurs, accents, + + +- accidentals, bar lines, time signature, and key signature. + + + +Engravers are grouped. For example, note heads, slurs, beams etc. form +a Voice context. Engravers for key, accidental, bar, etc. form a Staff +context. + + +You may only see the first example in this document; please download +this snippet and run it from your own computer. + +" + doctitle = "Engravers one-by-one" +} % begin verbatim + +%% sample music +topVoice = \relative c' { + \key d\major + es8([ g] a[ fis]) + b4 + b16[-. b-. b-. cis-.] + d4-> +} + +botVoice = \relative c' { + \key d\major + c8[( f] b[ a)] + es4 + es16[-. es-. es-. fis-.] + b4-> +} + +hoom = \relative c { + \key d \major + \clef bass + g8-. r + r4 + fis8-. + r8 + r4 + b'4-> +} + +pah = \relative c' { + r8 b-. + r4 + r8 g8-. + r16 g-. r8 + \clef treble + fis'4-> +} + +% +% setup for Request->Element conversion. Guru-only +% + +MyStaff =\context { + \type "Engraver_group" + \name Staff + + \description "Handles clefs, bar lines, keys, accidentals. It can contain +@code{Voice} contexts." + + + \consists "Output_property_engraver" + + \consists "Font_size_engraver" + + \consists "Volta_engraver" + \consists "Separating_line_group_engraver" + \consists "Dot_column_engraver" + + \consists "Ottava_spanner_engraver" + \consists "Rest_collision_engraver" + \consists "Piano_pedal_engraver" + \consists "Piano_pedal_align_engraver" + \consists "Instrument_name_engraver" + \consists "Grob_pq_engraver" + \consists "Forbid_line_break_engraver" + \consists "Axis_group_engraver" + + \consists "Pitch_squash_engraver" + + \override VerticalAxisGroup #'minimum-Y-extent = #'(-6 . 6) + extraVerticalExtent = ##f + verticalExtent = ##f + localKeySignature = #'() + + % explicitly set instrument, so we don't get + % weird effects when doing instrument names for + % piano staves + + instrumentName = #'() + shortInstrumentName = #'() + + \accepts "Voice" +} + + +MyVoice = \context { + \type "Engraver_group" + \name Voice + + \description " + Corresponds to a voice on a staff. This context handles the + conversion of dynamic signs, stems, beams, super- and subscripts, + slurs, ties, and rests. + + You have to instantiate this explicitly if you want to have + multiple voices on the same staff." + + localKeySignature = #'() + \consists "Font_size_engraver" + + % must come before all + \consists "Output_property_engraver" + \consists "Arpeggio_engraver" + \consists "Multi_measure_rest_engraver" + \consists "Text_spanner_engraver" + \consists "Grob_pq_engraver" + \consists "Note_head_line_engraver" + \consists "Glissando_engraver" + \consists "Ligature_bracket_engraver" + \consists "Breathing_sign_engraver" + % \consists "Rest_engraver" + \consists "Grace_beam_engraver" + \consists "New_fingering_engraver" + \consists "Chord_tremolo_engraver" + \consists "Percent_repeat_engraver" + \consists "Slash_repeat_engraver" + +%{ + Must come before text_engraver, but after note_column engraver. + +%} + \consists "Text_engraver" + \consists "Dynamic_engraver" + \consists "Fingering_engraver" + + \consists "Script_column_engraver" + \consists "Rhythmic_column_engraver" + \consists "Cluster_spanner_engraver" + \consists "Tie_engraver" + \consists "Tie_engraver" + \consists "Tuplet_engraver" + \consists "Note_heads_engraver" + \consists "Rest_engraver" + + \consists "Skip_event_swallow_translator" +} + + +\score { + \topVoice + \layout { + \context { \MyStaff } + \context { \MyVoice } + } +} + + +MyStaff = \context { + \MyStaff + \consists "Staff_symbol_engraver" +} + +\score { + \topVoice + \layout { + \context { \MyStaff } + \context { \MyVoice } + } +} + +MyStaff = \context { + \MyStaff + \consists "Clef_engraver" + \remove "Pitch_squash_engraver" +} + +\score { + \topVoice + \layout { + \context { \MyStaff } + \context { \MyVoice } + } +} + +MyVoice = \context { + \MyVoice + \consists "Stem_engraver" +} + +\score { + \topVoice + \layout { + \context { \MyStaff } + \context { \MyVoice } + } +} + +MyVoice = \context { + \MyVoice + \consists "Beam_engraver" +} + +\score { + \topVoice + \layout { + \context { \MyStaff } + \context { \MyVoice } + } +} + +MyVoice= \context { + \MyVoice + \consists "Phrasing_slur_engraver" + \consists "Slur_engraver" + \consists "Script_engraver" +} + + +\score { + \topVoice + \layout { + \context { \MyStaff } + \context { \MyVoice } + } +} + +MyStaff = \context { + \MyStaff + \consists "Bar_engraver" + \consists "Time_signature_engraver" +} + +\score { + \topVoice + \layout { + \context { \MyStaff } + \context { \MyVoice } + } +} + +MyStaff = \context { + \MyStaff + \consists "Accidental_engraver" + \consists "Key_engraver" +} +\score { + \topVoice + \layout { + \context { \MyStaff } + \context { \MyVoice } + } +} + + diff --git a/Documentation/snippets/engraving-ties-manually.ly b/Documentation/snippets/engraving-ties-manually.ly new file mode 100644 index 0000000000..5e1fbb2751 --- /dev/null +++ b/Documentation/snippets/engraving-ties-manually.ly @@ -0,0 +1,57 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "rhythms" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + doctitlees = "Grabado manual de las ligaduras" + texidoces = " +Se pueden grabar a mano las ligaduras modificando la propiedad +@code{tie-configuration} del objeto @code{TieColumn}. El primer número +indica la distancia a partir de la tercera línea del pentagrama en +espacios de pentagrama, y el segundo número indica la dirección (1 = +hacia arriba, -1 = hacia abajo). + +" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d +texidocde = " +Überbindungen können manuell gesetzt werden, indem man die +@code{tie-configuration}-Eigenschaft des @code{TieColumn}-Objekts +beeinflusst. Die erste Zahl zeigt den Abstand von der Mitte in +Notensystemabständen an, die zweite Zahl zeigt die Richtung an (1 = nach oben, +-1 = nach unten). + +" + doctitlede = "Bindebögen manuell setzen" + + +%% Translation of GIT committish: e71f19ad847d3e94ac89750f34de8b6bb28611df + texidocfr = " +Il est possible de graver manuellement les liaisons de tenue, en +modifiant la propriété @code{tie-configuration}. Pour chaque paire, le +premier nombre indique la distance à la portée, en espaces de portée, et +le second la direction (1 pour haut, @minus{}1 pour bas). + +" + doctitlefr = "Dessin à main levée de liaisons de tenue" + + texidoc = " +Ties may be engraved manually by changing the @code{tie-configuration} +property of the @code{TieColumn} object. The first number indicates the +distance from the center of the staff in staff-spaces, and the second +number indicates the direction (1 = up, -1 = down). + +" + doctitle = "Engraving ties manually" +} % begin verbatim + +\relative c' { + 2 ~ + \override TieColumn #'tie-configuration = + #'((0.0 . 1) (-2.0 . 1) (-4.0 . 1)) + ~ +} + diff --git a/Documentation/snippets/engraving-tremolos-with-floating-beams.ly b/Documentation/snippets/engraving-tremolos-with-floating-beams.ly new file mode 100644 index 0000000000..f001a70aff --- /dev/null +++ b/Documentation/snippets/engraving-tremolos-with-floating-beams.ly @@ -0,0 +1,46 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "rhythms, repeats" + + texidoc = " +If a tremolo's total duration is less than a quarter-note, or exactly a +half-note, or between a half-note and a whole-note, it is normally +typeset with all beams touching the stems. Certain engraving styles +typeset some of these beams as centered floating beams that do not +touch the stems. The number of floating beams in this type of tremolo +is controlled with the @code{'gap-count } property of the @code{Beam} +object, and the size of the gaps between beams and stems is set with +the @code{'gap} property. + + + +" + doctitle = "Engraving tremolos with floating beams" +} % begin verbatim + +\relative c'' { + \repeat tremolo 8 { a32 f } + \override Beam #'gap-count = #1 + \repeat tremolo 8 { a32 f } + \override Beam #'gap-count = #2 + \repeat tremolo 8 { a32 f } + \override Beam #'gap-count = #3 + \repeat tremolo 8 { a32 f } + + \override Beam #'gap-count = #3 + \override Beam #'gap = #1.33 + \repeat tremolo 8 { a32 f } + \override Beam #'gap = #1 + \repeat tremolo 8 { a32 f } + \override Beam #'gap = #0.67 + \repeat tremolo 8 { a32 f } + \override Beam #'gap = #0.33 + \repeat tremolo 8 { a32 f } +} + + + + diff --git a/Documentation/snippets/entering-several-tuplets-using-only-one--times-command.ly b/Documentation/snippets/entering-several-tuplets-using-only-one--times-command.ly new file mode 100644 index 0000000000..69dd3e501f --- /dev/null +++ b/Documentation/snippets/entering-several-tuplets-using-only-one--times-command.ly @@ -0,0 +1,78 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "rhythms" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + doctitlees = "Escribir varios grupos especiales usando una sola instrucción \\times" + texidoces = " +La propiedad @code{tupletSpannerDuration} establece cuánto debe durar +cada grupo de valoración especial contenido dentro del corchete que +aparece después de @code{\\times}. Así, se pueden escribir muchos +tresillos seguidos dentro de una sola expresión @code{\\times}, +ahorrando trabajo de teclado. + +En el ejemplo se muestran dos tresillos, aunque se ha escrito +@code{\\times} una sola vez. + + +Para ver más inforamción sobre @code{make-moment}, véase +\"Administración del tiempo\". + +" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Die Eigenschaft @code{tupletSpannerDuration} bestimmt, wie lange jede +der N-tolen innerhalb der Klammern nach dem @code{\\times}-Befehl +dauert. Auf diese Art können etwa viele Triolen nacheinander mit nur +einem @code{\\times}-Befehl geschrieben werden. + +Im Beispiel sind zwei Triolen zu sehen, obwohl @code{\\times} nur +einmal geschrieben wurde. + +Mehr Information über @code{make-moment} gibt es in \"Verwaltung der Zeiteinheiten\". + +" + doctitlede = "Mehrere Triolen notieren, aber nur einmal \\times benutzen" + + +%% Translation of GIT committish: e71f19ad847d3e94ac89750f34de8b6bb28611df + texidocfr = " +La propriété @code{tupletSpannerDuration} spécifie la longueur voulue de +chaque crochet. Avec elle, vous pouvez faire plusieurs nolets en ne +tapant @code{\\times} qu'une fois, ce qui évite une longue saisie. + +Dans l'exemple suivant, deux triolets sont imprimés avec une seule fonction +@code{\\times}. + +Pour plus d'information sur @code{make-moment}, voir @ref{Time administration}. + +" + doctitlefr = "Plusieurs triolets avec une seule commande \\times" + + texidoc = " +The property @code{tupletSpannerDuration} sets how long each of the +tuplets contained within the brackets after @code{\\times} should last. +Many consecutive tuplets can then be placed within a single +@code{\\times} expression, thus saving typing. + +In the example, two triplets are shown, while @code{\\times} was +entered only once. + + +For more information about @code{make-moment}, see \"Time +administration\". + +" + doctitle = "Entering several tuplets using only one \\times command" +} % begin verbatim + +\relative c' { + \time 2/4 + \set tupletSpannerDuration = #(ly:make-moment 1 4) + \times 2/3 { c8 c c c c c } +} + diff --git a/Documentation/snippets/expressive-marks-intro.itely b/Documentation/snippets/expressive-marks-intro.itely new file mode 100644 index 0000000000..c869a5347c --- /dev/null +++ b/Documentation/snippets/expressive-marks-intro.itely @@ -0,0 +1,7 @@ +@node Expressive marks +@unnumbered Expressive marks + +@ruser{Expressive marks} + +@lysnippets + diff --git a/Documentation/snippets/expressive-marks.snippet-list b/Documentation/snippets/expressive-marks.snippet-list new file mode 100644 index 0000000000..f9b622b34d --- /dev/null +++ b/Documentation/snippets/expressive-marks.snippet-list @@ -0,0 +1,39 @@ +adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.ly +adding-parentheses-around-an-expressive-mark-or-chordal-note.ly +adjusting-the-shape-of-falls-and-doits.ly +breathing-signs.ly +broken-crescendo-hairpin.ly +caesura-railtracks-with-fermata.ly +center-text-below-hairpin-dynamics.ly +changing--flageolet-mark-size.ly +changing-text-and-spanner-styles-for-text-dynamics.ly +changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.ly +changing-the-breath-mark-symbol.ly +combining-dynamics-with-markup-texts.ly +contemporary-glissando.ly +controlling-the-vertical-ordering-of-scripts.ly +creating-a-delayed-turn.ly +creating-arpeggios-across-notes-in-different-voices.ly +creating-cross-staff-arpeggios-in-a-piano-staff.ly +creating-cross-staff-arpeggios-in-other-contexts.ly +creating-real-parenthesized-dynamics.ly +creating-simultaneous-rehearsal-marks.ly +creating-slurs-across-voices.ly +creating-text-spanners.ly +double-glissando.ly +hiding-the-extender-line-for-text-dynamics.ly +horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly +inserting-a-caesura.ly +laissez-vibrer-ties.ly +line-arrows.ly +making-slurs-with-complex-dash-structure.ly +modifying-default-values-for-articulation-shorthand-notation.ly +piano-template-with-centered-dynamics.ly +positioning-text-markups-inside-slurs.ly +printing-hairpins-using-al-niente-notation.ly +printing-metronome-and-rehearsal-marks-below-the-staff.ly +setting-hairpin-behavior-at-bar-lines.ly +setting-the-minimum-length-of-hairpins.ly +snap-pizzicato-markup-bartok-pizzicato.ly +using-double-slurs-for-legato-chords.ly +vertically-aligning-dynamics-across-multiple-notes.ly diff --git a/Documentation/snippets/faking-a-hammer-in-tablatures.ly b/Documentation/snippets/faking-a-hammer-in-tablatures.ly new file mode 100644 index 0000000000..887260d5d3 --- /dev/null +++ b/Documentation/snippets/faking-a-hammer-in-tablatures.ly @@ -0,0 +1,24 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "fretted-strings" + + texidoc = " +A hammer in tablature can be faked with slurs. + +" + doctitle = "Faking a hammer in tablatures" +} % begin verbatim + +\score { + \new TabStaff { + \relative c'' { + c4( d) d( d) + d2( c) + } + } +} + + diff --git a/Documentation/snippets/fine-tuning-pedal-brackets.ly b/Documentation/snippets/fine-tuning-pedal-brackets.ly new file mode 100644 index 0000000000..71ee9a7134 --- /dev/null +++ b/Documentation/snippets/fine-tuning-pedal-brackets.ly @@ -0,0 +1,25 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "keyboards, tweaks-and-overrides" + + texidoc = " +The appearance of pedal brackets may be altered in different ways. + +" + doctitle = "Fine-tuning pedal brackets" +} % begin verbatim + +\paper { ragged-right = ##f } +\relative c'' { + c2\sostenutoOn c + c2\sostenutoOff c + \once \override Staff.PianoPedalBracket #'shorten-pair = #'(-7 . -2) + c2\sostenutoOn c + c2\sostenutoOff c + \once \override Staff.PianoPedalBracket #'edge-height = #'(0 . 3) + c2\sostenutoOn c + c2\sostenutoOff c +} diff --git a/Documentation/snippets/fingerings,-string-indications,-and-right-hand-fingerings.ly b/Documentation/snippets/fingerings,-string-indications,-and-right-hand-fingerings.ly new file mode 100644 index 0000000000..d341578702 --- /dev/null +++ b/Documentation/snippets/fingerings,-string-indications,-and-right-hand-fingerings.ly @@ -0,0 +1,51 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "fretted-strings" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +En este ejemplo se combinan las digitaciones de la mano izquierda, +indicaciones del número de cuerda y digitaciones de la mano +derecha. + +" + doctitlees = "Digitaciones, indicación del número de cuerda y digitaciones de mano derecha" + +%% Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 + + texidocfr = " +L'exemple suivant illustre comment combiner des doigtés pour la main +gauche, des indications de corrde et des doigtés pour la main droite. + +" + doctitlefr = "Doigtés, indications de cordeet doigtés main droite" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Dieses Beispiel kombiniert Fingersatz für die linke Hand, Saitennummern +und Fingersatz für die rechte Hand. + +" + doctitlede = "Fingersatz, Saitennummern und Fingersatz für die rechte Hand" + + texidoc = " +This example combines left-hand fingering, string indications, and +right-hand fingering. + +" + doctitle = "Fingerings, string indications, and right-hand fingerings" +} % begin verbatim + +#(define RH rightHandFinger) + +\relative c { + \clef "treble_8" + 4 + 4 + 4 + 4 +} + diff --git a/Documentation/snippets/flamenco-notation.ly b/Documentation/snippets/flamenco-notation.ly new file mode 100644 index 0000000000..258acfd55a --- /dev/null +++ b/Documentation/snippets/flamenco-notation.ly @@ -0,0 +1,249 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "fretted-strings" + + texidoc = " +For flamenco guitar, special notation is used: + + +* a golpe symbol to indicate a slap on the guitar body with the nail of +the ring finger + + +* an arrow to indicate (the direction of) strokes + + +* different letters for fingering (\"p\": thumb, \"i\": index finger, +\"m\": middle finger, \"a\": ring finger and \"x\": little finger) + + +* 3- and 4-finger rasgueados; stroke upwards with all fingers, ending +with an up- and down using the index finger + + +* abanicos: strokes (in tuples) with thumb (down), little and index +finger (both up). There's also an abanico 2 where middle and ring +finger are used instead of the little finger. + + +* alza pua: fast playing with the thumb + + +Most figures use arrows in combination with fingering; with abanicos +and rasgueados, noteheads are printed only for the first chord. + +This snippet contains some header-like code that can be copied as +@samp{flamenco.ly} and included in source files. + +" + doctitle = "Flamenco notation" +} % begin verbatim + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%% Cut here ----- Start 'flamenco.ly' + +% Text indicators +abanico = \markup { \italic Abanico } +rasgueaso = \markup { \italic Ras. } +alzapua = \markup { \italic Alzapua } + +% Finger stroke symbols +strokeUp = \markup { \postscript #" + 0.1 setlinewidth + 0.5 0 moveto + 0.5 2 lineto + 0.2 1.4 lineto + 0.5 2 moveto + 0.8 1.4 lineto + stroke +"} + +strokeDown = \markup { \postscript #" + 0.1 setlinewidth + 0.5 2 moveto + 0.5 0 lineto + 0.2 0.6 lineto + 0.5 0 moveto + 0.8 0.6 lineto + stroke +"} + +% Golpe symbol +golpe = \markup { \postscript #" + 0.2 setlinewidth + 0 0 moveto + 1 0 lineto + 1 1 lineto + stroke + "\postscript #" + 0.1 setlinewidth + -0.6 -0.1 moveto + -0.6 1.0 lineto + 0.5 1.0 lineto + stroke +"} + +strokeUpGolpe = \markup { \column { \golpe \line { \strokeUp }}} +iUpGolpe = \markup { \column { \golpe \line { \small i } \line { \strokeUp }}} + +% Strokes for all fingers +pUp = \markup { \column { \small p \line { \strokeUp }}} +pDown = \markup { \column { \small p \line { \strokeDown }}} +iUp = \markup { \column { \small i \line { \strokeUp }}} +iDown = \markup { \column { \small i \line { \strokeDown }}} +mUp = \markup { \column { \small m \line { \strokeUp }}} +mDown = \markup { \column { \small m \line { \strokeDown }}} +aUp = \markup { \column { \small a \line { \strokeUp }}} +aDown = \markup { \column { \small a \line { \strokeDown }}} +xUp = \markup { \column { \small x \line { \strokeUp }}} +xDown = \markup { \column { \small x \line { \strokeDown }}} + + +% Just handy :) +tupletOff = { + \once \override TupletNumber #'stencil = ##f + \once \override TupletBracket #'stencil = ##f +} + +tupletsOff = { + \override TupletNumber #'stencil = ##f + \override TupletBracket #'bracket-visibility = #'if-no-beam +} + +tupletsOn = { + \override TupletBracket #'bracket-visibility = #'default + \revert TupletNumber #'stencil +} + +headsOff = { + \override TabNoteHead #'transparent = ##t + \override NoteHead #'transparent = ##t + \override NoteHead #'no-ledgers = ##t +} + +headsOn = { + \override TabNoteHead #'transparent = ##f + \override NoteHead #'transparent = ##f + \override NoteHead #'no-ledgers = ##f +} + +%%%%%%% Cut here ----- End 'flamenco.ly' +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +part = \relative c' { + 8^\iUp + 8^\iDown + r4 + r2^\golpe + + 8^\iUp + 8^\iDown + 8^\iUpGolpe + 8^\iDown + r2 + + 16^\aUp + \headsOff + ^\mUp + ^\iUp + ^\iDown~ + \headsOn + 2 + r4 + + \tupletOff + \times 4/5 { + 16^\xUp + \headsOff + ^\aUp + ^\mUp + ^\iUp + ^\iDown~ + \headsOn + } + 2 + r4 + + \tupletsOff + \times 2/3 { + 8^\pDown + \headsOff + ^\xUp + ^\iUp + \headsOn + } + + \times 2/3 { + 8^\pDown + \headsOff + ^\xUp + ^\iUp + \headsOn + } + + \times 2/3 { + 8^\pDown + \headsOff + ^\xUp + ^\iUp + \headsOn + } + \times 2/3 { + 8^\pDown + \headsOff + ^\xUp + ^\iUp + \headsOn + } + + \tupletsOff + \override Beam #'positions = #'(2 . 2) + \times 2/3 { + a8^\markup{ \small p } + ^\strokeUpGolpe + ^\strokeDown + } + \times 2/3 { + a,8^\markup{ \small p } + ^\strokeUpGolpe + ^\strokeDown + } + \times 2/3 { + a,8^\markup{ \small p } + ^\strokeUpGolpe + ^\strokeDown + } + \times 2/3 { + a,8^\markup{ \small p } + ^\strokeUpGolpe + ^\strokeDown + } + \tupletsOn + + \once \override TextScript #'extra-offset = #'(0 . -1) + 1_\golpe^\mUp + \bar "|." +} + +\score { + \new StaffGroup << + \context Staff = "part" << + \clef G + \transpose c c' + { + \part + } + >> + \context TabStaff { + \part + } + >> + \layout { + ragged-right = ##t + } +} + + diff --git a/Documentation/snippets/flat-flags-and-beam-nibs.ly b/Documentation/snippets/flat-flags-and-beam-nibs.ly new file mode 100644 index 0000000000..327e330018 --- /dev/null +++ b/Documentation/snippets/flat-flags-and-beam-nibs.ly @@ -0,0 +1,190 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { +%% Translation of GIT committish: 21c8461ea87cd670a35a40b91d3ef20de03a0409 + texidocfr = " +En combinant @code{stemLeftBeamCount}, @code{stemRightBeamCount} et des +paires de @code{[]}, vous pourrez obtenir des crochets rectilignes et +des ligatures qui débordent à leurs extrémités. + +Pour des crochets rectilignes à droite sur des notes isolées, il suffit +d'ajouter une paire d'indicateurs de ligature @code{[]} et de déterminer +@code{stemLeftBeamCount} à zéro, comme dans l'exemple 1. + +Pour des crochets rectiligne à gauche, c'est @code{stemRightBeamCount} +qu'il faudra déterminer (exemple 2). + +Pour que les barres de ligature débordent sur la droite, +@code{stemRightBeamCount} doit avoir une valeur positive ; pour un +débrodement à gauche, c'est sur @code{stemLeftBeamCount} qu'il faut +jouer. Tout ceci est illustré par l'exemple 3. + +Il est parfois judicieux, lorsqu'une note est encadrée de silences, de +l'affubler de crochets rectilignes de part et d'autre. L'exemple 4 +montre qu'il suffit d'adjoindre à cette note un @code{[]}. + +(Notez bien que @code{\\set stemLeftBeamCount} sera toujours synonyme de +@code{\\once \\set}. Autrement dit, la détermination des ligatures +n'est pas @qq{permanente} ; c'est la raison pour laquelle les crochets +du @code{c'16[]} isolé du dernier exemple n'ont rien à voir avec le +@code{\\set} indiqué deux notes auparavant.) + +" + doctitlefr = "Crochet rectiligne et débordement de ligature" + + lsrtags = "rhythms" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " + Son posibles tanto los corchetes rectos sobre notas sueltas como +extremos de barra sueltos en figuras unidas, con una combinación de +@code{stemLeftBeamCount}, @code{stemRightBeamCount} e indicadores de +barra @code{[ ]} emparejados. + +Para corchetes rectos que apunten a la derecha sobre notas sueltas, +use indicadores de barra emparejados @code{[]} y establezca +@code{stemLeftBeamCount} a cero (véase el ejemplo 1). + +Para corchetes rectos que apunten a la izquierda, establezca en su +lugar @code{stemRightBeamCount} (ejemplo 2). + +Para extremos sueltos que apunten a la derecha al final de un conjunto +de notas unidas, establezca @code{stemRightBeamCount} a un valor +positivo. Y para extremos sueltos que apunten a la izquierda al +principio de un conjunto de notas unidas, establezca +@code{stemLeftBeamCount} en su lugar (ejemplo 3). + +A veces, para una nota suelta rodeada de silencios tiene sentido que +lleve los dos extremos sueltos del corchete plano, apuntando a derecha +e izquierda. Hágalo solamente con indicadores de barra emparejados +@code{[ ]} (ejemplo 4). + +(Observe que @code{\\set stemLeftBeamCount} siempre equivale a +@code{\\once \\set}. En otras palabras, los ajustes de la cantidad de +barras no se recuerdan, y por ello el par de corchetes planos +aplicados a la nota Do semicorchea @code{c'16[]} del último ejemplo +no tiene nada que ver con el @code{\\set} de dos notas por detrás.) + +" + doctitlees = "Corchetes rectos y extremos de barra sueltos" + + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Gerade Fähnchen an einzelnen Noten und überstehende Balkenenden bei +bebalkten Notengruppen sind möglich mit einer Kombination aus +@code{stemLeftBeamCount}, @code{stemRightBeamCount} und Paaren von +@code{[]}-Balkenbegrenzungen. + +Für gerade Fähnchen, die nach rechts zeigen, kann @code{[]} eingesetzt +werden und @code{stemLeftBeamCount} auf Null gesetzt werden (wie +Bsp. 1). + +Für gerade Fähnchen, die nach links zeigen, muss @code{stemRightBeamCount} +eingesetzt werden (Bsp. 2). + +Für überstehende Balkenenden nach rechts muss @code{stemRightBeamCount} +auf einen positiven Wert gesetzt werden, für Balkenenden, die nach links +zeigen benutzt man @code{stemLeftBeamCount} (Bsp. 3). + +Manchmal können einzelne Noten, die von Pausen umgeben sind, auch Balkenenden +in beide Richtungen tragen. Das geschieht mit @code{[]}-Klammern (Bsp. 4). + +(@code{\\set stemLeftBeamCount} entspricht immer dem Befehl +@code{\\once \\set}. Anders gesagt müssen die Einstellungen immer wieder +wiederholt werden und die Fähnchen des letzten Sechszehntels im letzten +Beispiel haben nichts mit dem @code{\\set}-Befehl zwei Noten vorher zu tun.) + +" + doctitlede = "Gerade Fähnchen und überstehende Balkenenden" + + + + texidoc = " + Flat flags on lone notes and beam nibs at the ends of beamed figures +are both possible with a combination of @code{stemLeftBeamCount}, +@code{stemRightBeamCount} and paired @code{[]} beam indicators. + + + + +For right-pointing flat flags on lone notes, use paired @code{[]} beam +indicators and set @code{stemLeftBeamCount} to zero (see Example 1). + + + + +For left-pointing flat flags, set @code{stemRightBeamCount} instead +(Example 2). + + + + +For right-pointing nibs at the end of a run of beamed notes, set +@code{stemRightBeamCount} to a positive value. And for left-pointing +nibs at the start of a run of beamed notes, set +@code{stemLeftBeamCount} instead (Example 3). + + + + +Sometimes it may make sense for a lone note surrounded by rests to +carry both a left- and right-pointing flat flag. Do this with paired +@code{[]} beam indicators alone (Example 4). + + + + +(Note that @code{\\set stemLeftBeamCount} is always equivalent to +@code{\\once \\set}. In other words, the beam count settings are not +\"sticky\", so the pair of flat flags attached to the lone +@code{c'16[]} in the last example have nothing to do with the +@code{\\set} two notes prior.) + + + + +" + doctitle = "Flat flags and beam nibs" +} % begin verbatim + +\score { + << + % Example 1 + \new RhythmicStaff { + \set stemLeftBeamCount = #0 + c16[] + r8. + } + + % Example 2 + \new RhythmicStaff { + r8. + \set stemRightBeamCount = #0 + c16[] + } + + % Example 3 + \new RhythmicStaff { + c16 c + \set stemRightBeamCount = #2 + c16 r r + \set stemLeftBeamCount = #2 + c16 c c + } + + % Example 4 + \new RhythmicStaff { + c16 c + \set stemRightBeamCount = #2 + c16 r + c16[] + r16 + \set stemLeftBeamCount = #2 + c16 c + } + >> +} + diff --git a/Documentation/snippets/flute-slap-notation.ly b/Documentation/snippets/flute-slap-notation.ly new file mode 100644 index 0000000000..3669ca46b4 --- /dev/null +++ b/Documentation/snippets/flute-slap-notation.ly @@ -0,0 +1,32 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "winds" + + texidoc = " +It is possible to indicate special articulation techniques such as a +flute's \"tongue slap\" by replacing the note head with the appropriate +glyph. + +" + doctitle = "Flute slap notation" +} % begin verbatim + +slap = +#(define-music-function (parser location music) (ly:music?) +#{ + \override NoteHead #'stencil = #(lambda (grob) + (grob-interpret-markup grob + (markup #:musicglyph "scripts.sforzato"))) + \override NoteHead #'extra-offset = #'(0.1 . 0.0) + $music + \revert NoteHead #'stencil + \revert NoteHead #'extra-offset +#}) + +\relative c' { + c4 \slap c d r \slap { g a } b r +} + diff --git a/Documentation/snippets/forcing-horizontal-shift-of-notes.ly b/Documentation/snippets/forcing-horizontal-shift-of-notes.ly new file mode 100644 index 0000000000..d3e8707b30 --- /dev/null +++ b/Documentation/snippets/forcing-horizontal-shift-of-notes.ly @@ -0,0 +1,48 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "simultaneous-notes, tweaks-and-overrides" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + + doctitlees = "Forzar el desplazamiento horizontal de las notas" + +texidoces = " + Cuando el motor de tipografiado no es capaz de todo, se puede usar la + sintaxis siguiente para sobreescribir las decisiones de tipografía. + Las unidades de medida que se usan aquí son espacios de pentagrama. + +" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Wenn es zu Zusammenstößen kommt, kann mit folgender Lösung eine andere +Position manuell eingestellt werden. Die Einheiten hier sind +Notenlinienzwischenräume. + +" + doctitlede = "Horizontale Verschiebung von Noten erzwingen" + + texidoc = " +When the typesetting engine cannot cope, the following syntax can be +used to override typesetting decisions. The units of measure used here +are staff spaces. + +" + doctitle = "Forcing horizontal shift of notes" +} % begin verbatim + +\relative c' << + { + 2 + } + \\ + { + 2 + \once \override NoteColumn #'force-hshift = #1.7 + 2 + } +>> + diff --git a/Documentation/snippets/forcing-rehearsal-marks-to-start-from-a-given-letter-or-number.ly b/Documentation/snippets/forcing-rehearsal-marks-to-start-from-a-given-letter-or-number.ly new file mode 100644 index 0000000000..281c0a519a --- /dev/null +++ b/Documentation/snippets/forcing-rehearsal-marks-to-start-from-a-given-letter-or-number.ly @@ -0,0 +1,37 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "rhythms" + + texidoc = " +This snippet demonstrates how to obtain automatic ordered rehearsal +marks, but from the letter or number desired. + +" + doctitle = "Forcing rehearsal marks to start from a given letter or number" +} % begin verbatim + +\relative c''{ + c1 \mark \default + c1 \mark \default + c1 \mark \default + c1 \mark #14 + c1 \mark \default + c1 \mark \default + c1 \mark \default + c1 \mark \default + \break + \set Score.markFormatter = #format-mark-numbers + c1 \mark #1 + c1 \mark \default + c1 \mark \default + c1 \mark \default + c1 \mark #14 + c1 \mark \default + c1 \mark \default + c1 \mark \default + c1 \mark \default +} + diff --git a/Documentation/snippets/formatting-lyrics-syllables.ly b/Documentation/snippets/formatting-lyrics-syllables.ly new file mode 100644 index 0000000000..54c13a8553 --- /dev/null +++ b/Documentation/snippets/formatting-lyrics-syllables.ly @@ -0,0 +1,32 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "text, vocal-music" + + texidoc = " +To format individual syllables in lyrics, use @code{\\markup @{ .... +@}} on these lyrics. + +" + doctitle = "Formatting lyrics syllables" +} % begin verbatim + +% Tip taken from http://lists.gnu.org/archive/html/lilypond-user/2007-12/msg00215.html +\header { + title = "Markup can be used inside lyrics!" +} + +mel = \relative c'' { c4 c c c } +lyr = \lyricmode { + Lyrics \markup { \italic "can" } \markup {\with-color #red "contain" } + \markup {\fontsize #8 \bold "Markup!" } +} + +<< + \context Voice = melody \mel + \context Lyrics \lyricsto melody \lyr +>> + + diff --git a/Documentation/snippets/fret-diagrams-explained-and-developed.ly b/Documentation/snippets/fret-diagrams-explained-and-developed.ly new file mode 100644 index 0000000000..3d8a68e94b --- /dev/null +++ b/Documentation/snippets/fret-diagrams-explained-and-developed.ly @@ -0,0 +1,349 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "fretted-strings, tweaks-and-overrides" + + texidoc = " +This snippet shows many possibilities for obtaining and tweaking fret +diagrams. + +" + doctitle = "Fret diagrams explained and developed" +} % begin verbatim + +<< + \chords { + a2 a + \repeat unfold 3 { + c c c d d + } + } + + \new Voice = "mel" { + \textLengthOn + % Set global properties of fret diagram + \override TextScript #'size = #1.2 + \override TextScript + #'fret-diagram-details #'finger-code = #'below-string + \override TextScript #'fret-diagram-details #'dot-color = #'black + + %% A chord for ukelele + a'2^\markup { + \override #'(fret-diagram-details . ( + (string-count . 4) + (dot-color . white) + (finger-code . in-dot))) { + \fret-diagram #"4-2-2;3-1-1;2-o;1-o;" + } + } + + %% A chord for ukelele, with formatting defined in definition string + % 1.2 * size, 4 strings, 4 frets, fingerings below string + % dot radius .35 of fret spacing, dot position 0.55 of fret spacing + a'2^\markup { + \override #'(fret-diagram-details . ( + (dot-color . white) + (open-string . "o"))) { + \fret-diagram #"s:1.2;w:4;h:3;f:2;d:0.35;p:0.55;4-2-2;3-1-1;2-o;1-o;" + } + } + + %% These chords will be in normal orientation + + %% C major for guitar, barred on third fret + % verbose style + % roman fret label, finger labels below string, straight barre + c'2^\markup { + % 110% of default size + \override #'(size . 1.1) { + \override #'(fret-diagram-details . ( + (number-type . roman-lower) + (finger-code . below-string) + (barre-type . straight))) { + \fret-diagram-verbose #'((mute 6) + (place-fret 5 3 1) + (place-fret 4 5 2) + (place-fret 3 5 3) + (place-fret 2 5 4) + (place-fret 1 3 1) + (barre 5 1 3)) + } + } + } + + %% C major for guitar, barred on third fret + %% Double barre used to test barre function + % verbose style + c'2^\markup { + % 110% of default size + \override #'(size . 1.1) { + \override #'(fret-diagram-details . ( + (number-type . arabic) + (dot-label-font-mag . 0.9) + (finger-code . in-dot) + (fret-label-font-mag . 0.6) + (fret-label-vertical-offset . 0) + (label-dir . -1) + (mute-string . "M") + (xo-font-magnification . 0.4) + (xo-padding . 0.3))) { + \fret-diagram-verbose #'((mute 6) + (place-fret 5 3 1) + (place-fret 4 5 2) + (place-fret 3 5 3) + (place-fret 2 5 4) + (place-fret 1 3 1) + (barre 4 2 5) + (barre 5 1 3)) + } + } + } + + %% C major for guitar, with capo on third fret + % verbose style + c'2^\markup { + % 110% of default size + \override #'(size . 1.1) { + \override #'(fret-diagram-details . ( + (number-type . roman-upper) + (dot-label-font-mag . 0.9) + (finger-code . none) + (fret-label-vertical-offset . 0.5) + (xo-font-magnification . 0.4) + (xo-padding . 0.3))) { + \fret-diagram-verbose #'((mute 6) + (capo 3) + (open 5) + (place-fret 4 5 1) + (place-fret 3 5 2) + (place-fret 2 5 3) + (open 1)) + } + } + } + + %% simple D chord + d'2^\markup { + \override #'(fret-diagram-details . ( + (finger-code . below-string) + (dot-radius . 0.35) + (string-thickness-factor . 0.3) + (dot-position . 0.5) + (fret-count . 3))) { + \fret-diagram-terse #"x;x;o;2-1;3-2;2-3;" + } + } + + %% simple D chord, large top fret thickness + d'2^\markup { + \override #'(fret-diagram-details . ( + (finger-code . below-string) + (dot-radius . 0.35) + (dot-position . 0.5) + (top-fret-thickness . 7) + (fret-count . 3))) { + \fret-diagram-terse #"x;x;o;2-1;3-2;2-3;" + } + } + + % These chords will be in landscape orientation + \override TextScript + #'fret-diagram-details #'orientation = #'landscape + + %% C major for guitar, barred on third fret + % verbose style + % roman fret label, finger labels below string, straight barre + c'2^\markup { + % 110% of default size + \override #'(size . 1.1) { + \override #'(fret-diagram-details . ( + (number-type . roman-lower) + (finger-code . below-string) + (barre-type . straight))) { + \fret-diagram-verbose #'((mute 6) + (place-fret 5 3 1) + (place-fret 4 5 2) + (place-fret 3 5 3) + (place-fret 2 5 4) + (place-fret 1 3 1) + (barre 5 1 3)) + } + } + } + + %% C major for guitar, barred on third fret + %% Double barre used to test barre function + % verbose style + c'2^\markup { + % 110% of default size + \override #'(size . 1.1) { + \override #'(fret-diagram-details . ( + (number-type . arabic) + (dot-label-font-mag . 0.9) + (finger-code . in-dot) + (fret-label-font-mag . 0.6) + (fret-label-vertical-offset . 0) + (label-dir . -1) + (mute-string . "M") + (xo-font-magnification . 0.4) + (xo-padding . 0.3))) { + \fret-diagram-verbose #'((mute 6) + (place-fret 5 3 1) + (place-fret 4 5 2) + (place-fret 3 5 3) + (place-fret 2 5 4) + (place-fret 1 3 1) + (barre 4 2 5) + (barre 5 1 3)) + } + } + } + + %% C major for guitar, with capo on third fret + % verbose style + c'2^\markup { + % 110% of default size + \override #'(size . 1.1) { + \override #'(fret-diagram-details . ( + (number-type . roman-upper) + (dot-label-font-mag . 0.9) + (finger-code . none) + (fret-label-vertical-offset . 0.5) + (xo-font-magnification . 0.4) + (xo-padding . 0.3))) { + \fret-diagram-verbose #'((mute 6) + (capo 3) + (open 5) + (place-fret 4 5 1) + (place-fret 3 5 2) + (place-fret 2 5 3) + (open 1)) + } + } + } + + %% simple D chord + d'2^\markup { + \override #'(fret-diagram-details . ( + (finger-code . below-string) + (dot-radius . 0.35) + (dot-position . 0.5) + (fret-count . 3))) { + \fret-diagram-terse #"x;x;o;2-1;3-2;2-3;" + } + } + + %% simple D chord, large top fret thickness + d'2^\markup { + \override #'(fret-diagram-details . ( + (finger-code . below-string) + (dot-radius . 0.35) + (dot-position . 0.5) + (top-fret-thickness . 7) + (fret-count . 3))) { + \fret-diagram-terse #"x;x;o;2-1;3-2;2-3;" + } + } + + % These chords will be in opposing-landscape orientation + \override TextScript #'fret-diagram-details + #'orientation = #'opposing-landscape + + %% C major for guitar, barred on third fret + % verbose style + % roman fret label, finger labels below string, straight barre + c'2^\markup { + % 110% of default size + \override #'(size . 1.1) { + \override #'(fret-diagram-details . ( + (number-type . roman-lower) + (finger-code . below-string) + (barre-type . straight))) { + \fret-diagram-verbose #'((mute 6) + (place-fret 5 3 1) + (place-fret 4 5 2) + (place-fret 3 5 3) + (place-fret 2 5 4) + (place-fret 1 3 1) + (barre 5 1 3)) + } + } + } + + %% C major for guitar, barred on third fret + %% Double barre used to test barre function + % verbose style + c'2^\markup { + % 110% of default size + \override #'(size . 1.1) { + \override #'(fret-diagram-details . ( + (number-type . arabic) + (dot-label-font-mag . 0.9) + (finger-code . in-dot) + (fret-label-font-mag . 0.6) + (fret-label-vertical-offset . 0) + (label-dir . -1) + (mute-string . "M") + (xo-font-magnification . 0.4) + (xo-padding . 0.3))) { + \fret-diagram-verbose #'((mute 6) + (place-fret 5 3 1) + (place-fret 4 5 2) + (place-fret 3 5 3) + (place-fret 2 5 4) + (place-fret 1 3 1) + (barre 4 2 5) + (barre 5 1 3)) + } + } + } + + %% C major for guitar, with capo on third fret + % verbose style + c'2^\markup { + % 110% of default size + \override #'(size . 1.1) { + \override #'(fret-diagram-details . ( + (number-type . roman-upper) + (dot-label-font-mag . 0.9) + (finger-code . none) + (fret-label-vertical-offset . 0.5) + (xo-font-magnification . 0.4) + (xo-padding . 0.3))) { + \fret-diagram-verbose #'((mute 6) + (capo 3) + (open 5) + (place-fret 4 5 1) + (place-fret 3 5 2) + (place-fret 2 5 3) + (open 1)) + } + } + } + + %% simple D chord + d'2^\markup { + \override #'(fret-diagram-details . ( + (finger-code . below-string) + (dot-radius . 0.35) + (dot-position . 0.5) + (fret-count . 3))) { + \fret-diagram-terse #"x;x;o;2-1;3-2;2-3;" + } + } + + %% simple D chord, large top fret thickness + d'2^\markup { + \override #'(fret-diagram-details . ( + (finger-code . below-string) + (dot-radius . 0.35) + (dot-position . 0.5) + (top-fret-thickness . 7) + (fret-count . 3))) { + \fret-diagram-terse #"x;x;o;2-1;3-2;2-3;" + } + } + } +>> diff --git a/Documentation/snippets/fretted-strings-intro.itely b/Documentation/snippets/fretted-strings-intro.itely new file mode 100644 index 0000000000..48a1fea65c --- /dev/null +++ b/Documentation/snippets/fretted-strings-intro.itely @@ -0,0 +1,7 @@ +@node Fretted strings +@unnumbered Fretted strings + +@ruser{Fretted string instruments} + +@lysnippets + diff --git a/Documentation/snippets/fretted-strings.snippet-list b/Documentation/snippets/fretted-strings.snippet-list new file mode 100644 index 0000000000..d06972bae0 --- /dev/null +++ b/Documentation/snippets/fretted-strings.snippet-list @@ -0,0 +1,21 @@ +adding-fingerings-to-a-score.ly +adding-fingerings-to-tablatures.ly +allowing-fingerings-to-be-printed-inside-the-staff.ly +chordchanges-for-fretboards.ly +controlling-the-placement-of-chord-fingerings.ly +customizing-fretboard-fret-diagrams.ly +customizing-markup-fret-diagrams.ly +defining-predefined-fretboards-for-other-instruments.ly +faking-a-hammer-in-tablatures.ly +fingerings,-string-indications,-and-right-hand-fingerings.ly +flamenco-notation.ly +fret-diagrams-explained-and-developed.ly +guitar-strum-rhythms.ly +how-to-change-fret-diagram-position.ly +jazz-combo-template.ly +laissez-vibrer-ties.ly +letter-tablature-formatting.ly +modern-tab-text-clef.ly +placement-of-right-hand-fingerings.ly +polyphony-in-tablature.ly +stem-and-beam-behavior-in-tablature.ly diff --git a/Documentation/snippets/generating-random-notes.ly b/Documentation/snippets/generating-random-notes.ly new file mode 100644 index 0000000000..24c5de069b --- /dev/null +++ b/Documentation/snippets/generating-random-notes.ly @@ -0,0 +1,47 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "pitches" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Este fragmento de código basado en Scheme genera +24 notas aleatorias (o tantas como se necesiten), basándose en la +hora actual (o en cualquier número pseudo-aleatorio que se +especifique en su lugar, para obtener las mismas notas aleatorias +cada vez): es decir, para obtener distintos patrones de notas, +sólo tiene que modificar este número. + +" + doctitlees = "Generación de notas aleatorias" + + texidoc = " +This Scheme-based snippet generates 24 random notes (or as many as +required), based on the current time (or any randomish number specified +instead, in order to obtain the same random notes each time): i.e., to +get different random note patterns, just change this number. + +" + doctitle = "Generating random notes" +} % begin verbatim + +\score { + { + #(let ((random-state (seed->random-state (current-time)))) + (ly:export + (make-sequential-music + (map (lambda (x) + (let ((idx (random 12 random-state))) + (make-event-chord + (list + (make-music 'NoteEvent + 'duration (ly:make-duration 2 0 1 1) + 'pitch (ly:make-pitch + (quotient idx 7) + (remainder idx 7) + 0)))))) + (make-list 24))))) + } +} diff --git a/Documentation/snippets/grid-lines--changing-their-appearance.ly b/Documentation/snippets/grid-lines--changing-their-appearance.ly new file mode 100644 index 0000000000..65403db7d8 --- /dev/null +++ b/Documentation/snippets/grid-lines--changing-their-appearance.ly @@ -0,0 +1,73 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "editorial-annotations" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Se puede cambiar el aspecto de las líneas de rejilla +sobreescribiendo algunas de sus propiedades. + +" + doctitlees = "Líneas de rejilla: modificar su aspecto" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Die Erscheinung der Gitternetzlinien kann durch einige Eigenschaften +geändert werden. + +" + doctitlede = "Gitternetzlinien: Aussehen verändern" + + texidoc = " +The appearance of grid lines can be changed by overriding some of their +properties. + +" + doctitle = "Grid lines: changing their appearance" +} % begin verbatim + +\score { + \new ChoirStaff << + \new Staff { + \relative c'' { + \stemUp + c'4. d8 e8 f g4 + } + } + \new Staff { + \relative c { + % this moves them up one staff space from the default position + \override Score.GridLine #'extra-offset = #'(0.0 . 1.0) + \stemDown + \clef bass + \once \override Score.GridLine #'thickness = #5.0 + c4 + \once \override Score.GridLine #'thickness = #1.0 + g'4 + \once \override Score.GridLine #'thickness = #3.0 + f4 + \once \override Score.GridLine #'thickness = #5.0 + e4 + } + } + >> + \layout { + \context { + \Staff + % set up grids + \consists "Grid_point_engraver" + % set the grid interval to one quarter note + gridInterval = #(ly:make-moment 1 4) + } + \context { + \Score + \consists "Grid_line_span_engraver" + % this moves them to the right half a staff space + \override NoteColumn #'X-offset = #-0.5 + } + } +} + diff --git a/Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly b/Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly new file mode 100644 index 0000000000..113d893057 --- /dev/null +++ b/Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly @@ -0,0 +1,75 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "editorial-annotations" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Se pueden trazar líneas verticales normales entre pentagramas para +mostrar la relación entre notas; sin embargo, en caso de música +monofónica, podemos hacer invisible el segundo pentagrama, y que +las líneas sean más cortas, como en este fragmento de código. + +" + doctitlees = "Líneas de rejilla: destacar ritmos y la relación temporal entre notas" + + texidoc = " +Regular vertical lines can be drawn between staves to show note +synchronization; however, in case of monophonic music, you may want to +make the second stave invisible, and make the lines shorter like in +this snippet. + +" + doctitle = "Grid lines: emphasizing rhythms and notes synchronization" +} % begin verbatim + +\score { + \new ChoirStaff { + \relative c'' << + \new Staff { + \time 12/8 + \stemUp + c4. d8 e8 f g4 f8 e8. d16 c8 + } + \new Staff { + % hides staff and notes so that only the grid lines are visible + \hideNotes + \override Staff.BarLine #'transparent = ##t + \override Staff.StaffSymbol #'line-count = #0 + \override Staff.TimeSignature #'transparent = ##t + \override Staff.Clef #'transparent = ##t + + % dummy notes to force regular note spacing + \once \override Score.GridLine #'thickness = #4.0 + c8 c c + \once \override Score.GridLine #'thickness = #3.0 + c8 c c + \once \override Score.GridLine #'thickness = #4.0 + c8 c c + \once \override Score.GridLine #'thickness = #3.0 + c8 c c + } + >> + } + \layout { + \context { + \Score + \consists "Grid_line_span_engraver" + % center grid lines horizontally below note heads + \override NoteColumn #'X-offset = #-0.5 + } + \context { + \Staff + \consists "Grid_point_engraver" + gridInterval = #(ly:make-moment 1 8) + % set line length and positioning: + % two staff spaces above center line on hidden staff + % to four spaces below center line on visible staff + \override GridPoint #'Y-extent = #'(2 . -4) + } + ragged-right = ##t + } +} + diff --git a/Documentation/snippets/grouping-beats.ly b/Documentation/snippets/grouping-beats.ly new file mode 100644 index 0000000000..c145be2dc9 --- /dev/null +++ b/Documentation/snippets/grouping-beats.ly @@ -0,0 +1,52 @@ +%% Do not edit this file; it is auto-generated from input/new +%% This file is in the public domain. +%% Note: this file works from version 2.13.4 +\version "2.13.4" + +\header { +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Los patrones de barrado se pueden alterar con la propiedad +@code{beatGrouping}: + +" + doctitlees = "Agrupar los pulsos" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d +texidocde = " +Balkengruppen können mit der @code{beatGrouping}-Eigenschaft geändert +werden: + +" + doctitlede = "Notengruppen" + + +%% Translation of GIT committish: b3196fadd8f42d05ba35e8ac42f7da3caf8a3079 + texidocfr = " +La manière de gérer les ligatures est influencée par la propriété +@code{beatGrouping} : + +" + doctitlefr = "Regroupement selon la pulsation" + + lsrtags = "rhythms" + + texidoc = " +Beaming patterns may be altered with the @code{beatGrouping} property: + +" + doctitle = "Grouping beats" +} % begin verbatim + + +\relative c'' { + \time 5/16 + \overrideBeamSettings #'Score #'(5 . 16) #'end + #'((* . (2 3))) + c8^"(2+3)" c16 c8 + \overrideBeamSettings #'Score #'(5 . 16) #'end + #'((* . (3 2))) + c8^"(3+2)" c16 c8 +} + + diff --git a/Documentation/snippets/guitar-strum-rhythms.ly b/Documentation/snippets/guitar-strum-rhythms.ly new file mode 100644 index 0000000000..9c898a099f --- /dev/null +++ b/Documentation/snippets/guitar-strum-rhythms.ly @@ -0,0 +1,79 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "rhythms, fretted-strings" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Para la música de guitarra, es posible mostrar los ritmos de rasgueo, +además de las notas de la melodía, acordes y diagramas de posiciones. + +" + doctitlees = "Ritmos rasgueados de guitarra" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +In Guitarrennotation kann neben Melodie, Akkordbezeichnungen und +Bunddiagrammen auch der Schlagrhythmus angegeben werden. + +" + doctitlede = "Schlagrhythmus für Guitarren" + + +%% Translation of GIT committish: fa7695ea860d7ab2db86581dd5f8bc4f413f6705 + texidocfr = " +En matière de notation pour guitare, il arrive que soient indiqués les +@qq{coups de gratte} en plus de la mélodie, grilles d'accords et +diagrammes de tablature. + +" + doctitlefr = "Rythmique et guitare" + + texidoc = " +For guitar music, it is possible to show strum rhythms, along with +melody notes, chord names and fret diagrams. + +" + doctitle = "Guitar strum rhythms" +} % begin verbatim + +\include "predefined-guitar-fretboards.ly" +<< + \new ChordNames { + \chordmode { + c1 f g c + } + } + \new FretBoards { + \chordmode { + c1 f g c + } + } + \new Voice \with { + \consists "Pitch_squash_engraver" + } { + \relative c'' { + \improvisationOn + c4 c8 c c4 c8 c + f4 f8 f f4 f8 f + g4 g8 g g4 g8 g + c4 c8 c c4 c8 c + } + } + \new Voice = "melody" { + \relative c'' { + c2 e4 e4 + f2. r4 + g2. a4 + e4 c2. + } + } + \new Lyrics { + \lyricsto "melody" { + This is my song. + I like to sing. + } + } +>> diff --git a/Documentation/snippets/heavily-customized-polymetric-time-signatures.ly b/Documentation/snippets/heavily-customized-polymetric-time-signatures.ly new file mode 100644 index 0000000000..9c6d0ae43f --- /dev/null +++ b/Documentation/snippets/heavily-customized-polymetric-time-signatures.ly @@ -0,0 +1,57 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "rhythms, percussion" + + texidoc = " +Though the polymetric time signature shown was not the most essential +item here, it has been included to show the beat of this piece (which +is the template of a real Balkan song!). + +" + doctitle = "Heavily customized polymetric time signatures" +} % begin verbatim + +#(define plus (markup #:vcenter "+")) +#(define ((custom-time-signature one two three four five six + seven eight nine ten eleven num) grob) + (grob-interpret-markup grob + (markup #:override '(baseline-skip . 0) #:number + (#:line ( + (#:column (one num)) plus + (#:column (two num)) plus + (#:column (three num)) plus + (#:column (four num)) plus + (#:column (five num)) plus + (#:column (six num)) plus + (#:column (seven num)) plus + (#:column (eight num)) plus + (#:column (nine num)) plus + (#:column (ten num)) plus + (#:column (eleven num))))))) + +melody = \relative c'' { + \set Staff.instrumentName = #"Bb Sop." + \key g \major + #(set-time-signature 25 8 '(3 2 2 3 2 2 2 2 3 2 2)) + \override Staff.TimeSignature #'stencil = + #(custom-time-signature "3" "2" "2" "3" "2" "2" + "2" "2" "3" "2" "2" "8") + c8 c c d4 c8 c b c b a4 g fis8 e d c b' c d e4-^ fis8 g \break + c,4. d4 c4 d4. c4 d c2 d4. e4-^ d4 + c4. d4 c4 d4. c4 d c2 d4. e4-^ d4 \break + c4. d4 c4 d4. c4 d c2 d4. e4-^ d4 + c4. d4 c4 d4. c4 d c2 d4. e4-^ d4 \break +} + +drum = \new DrumStaff \drummode { + \bar "|:" bd4.^\markup { "Drums" } sn4 bd \bar ":" sn4. + bd4 sn \bar ":" bd sn bd4. sn4 bd \bar ":|" +} + +{ + \melody + \drum +} diff --git a/Documentation/snippets/hiding-the-extender-line-for-text-dynamics.ly b/Documentation/snippets/hiding-the-extender-line-for-text-dynamics.ly new file mode 100644 index 0000000000..bb9b7c1edc --- /dev/null +++ b/Documentation/snippets/hiding-the-extender-line-for-text-dynamics.ly @@ -0,0 +1,40 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "expressive-marks" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Los cambios de dinámica con estilo de texto (como cresc. y dim.) +se imprimen con una línea intermitente que muestra su alcance. +Esta línea se puede suprimir de la siguiente manera: + +" + doctitlees = "Ocultar la línea de extensión de las expresiones textuales de dinámica" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d +texidocde = " +Dynamik-Texte (wie cresc. und dim.) werden mit einer gestrichelten Linie +gesetzt, die ihre Dauer anzeigt. Diese Linie kann auf foldenge Weise +unterdrückt werden: + +" + doctitlede = "Crescendo-Linien von Dynamik-Texten unterdrücken" + + texidoc = " +Text style dynamic changes (such as cresc. and dim.) are printed with a +dashed line showing their extent. This line can be suppressed in the +following way: + +" + doctitle = "Hiding the extender line for text dynamics" +} % begin verbatim + +\relative c'' { + \override DynamicTextSpanner #'dash-period = #-1.0 + \crescTextCresc + c1\< | d | b | c\! +} + diff --git a/Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly b/Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly new file mode 100644 index 0000000000..0457dcfcb0 --- /dev/null +++ b/Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly @@ -0,0 +1,161 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "expressive-marks, tweaks-and-overrides" + + texidoc = " +Some dynamic expressions involve additional text, like \"sempre pp\". +Since lilypond aligns all dynamics centered on the note, the \\pp would +be displayed way after the note it applies to. + +To correctly align the \"sempre \\pp\" horizontally, so that it is +aligned as if it were only the \\pp, there are several approaches: + +* Simply use @code{\\once\\override DynamicText #'X-offset = #-9.2} +before the note with the dynamics to manually shift it to the correct +position. Drawback: This has to be done manually each time you use that +dynamic markup... * Add some padding (@code{#:hspace 7.1}) into the +definition of your custom dynamic mark, so that after lilypond +center-aligns it, it is already correctly aligned. Drawback: The +padding really takes up that space and does not allow any other markup +or dynamics to be shown in that position. + +* Shift the dynamic script @code{\\once\\override ... #'X-offset = ..}. +Drawback: @code{\\once\\override} is needed for every invocation! + +* Set the dimensions of the additional text to 0 (using +@code{#:with-dimensions '(0 . 0) '(0 . 0)}). Drawback: To lilypond +\"sempre\" has no extent, so it might put other stuff there and create +collisions (which are not detected by the collision dection!). Also, +there seems to be some spacing, so it's not exactly the same alignment +as without the additional text + +* Add an explicit shifting directly inside the scheme function for the +dynamic-script. + +* Set an explicit alignment inside the dynamic-script. By default, this +won't have any effect, only if one sets X-offset! Drawback: One needs +to set @code{DynamicText #'X-offset}, which will apply to all dynamic +texts! Also, it is aligned at the right edge of the additional text, +not at the center of pp. + + + + +" + doctitle = "Horizontally aligning custom dynamics (e.g. \"sempre pp\", \"piu f\", \"subito p\")" +} % begin verbatim + +\header { title = "Horizontally aligning custom dynamics" } + +\paper { ragged-right = ##f } + +% Solution 1: Using a simple markup with a particular halign value +% Drawback: It's a markup, not a dynamic command, so \dynamicDown +% etc. will have no effect +semppMarkup = \markup { \halign #1.4 \italic "sempre" \dynamic "pp" } + +% Solution 2: Using a dynamic script & shifting with +% \once \override ... #'X-offset = .. +% Drawback: \once \override needed for every invocation +semppK = +#(make-dynamic-script + (markup #:line + (#:normal-text + #:italic "sempre" + #:dynamic "pp"))) + +% Solution 3: Padding the dynamic script so the center-alignment +% puts it at the correct position +% Drawback: the padding really reserves the space, nothing else can be there +semppT = +#(make-dynamic-script + (markup #:line + (#:normal-text + #:italic "sempre" + #:dynamic "pp" + #:hspace 7.1))) + +% Solution 4: Dynamic, setting the dimensions of the additional text to 0 +% Drawback: To lilypond "sempre" has no extent, so it might put +% other stuff there => collisions +% Drawback: Also, there seems to be some spacing, so it's not exactly the +% same alignment as without the additional text +semppM = +#(make-dynamic-script + (markup #:line (#:with-dimensions '(0 . 0) '(0 . 0) + #:right-align #:normal-text #:italic "sempre" #:dynamic "pp"))) + +% Solution 5: Dynamic with explicit shifting inside the scheme function +semppG = +#(make-dynamic-script + (markup + #:hspace 0 #:translate '(-18.85 . 0) + #:line( #:normal-text #:italic "sempre" #:dynamic "pp"))) + +% Solution 6: Dynamic with explicit alignment. This has only effect, if one sets X-offset! +% Drawback: One needs to set DynamicText #'X-offset! +% Drawback: Aligned at the right edge of the additional text, not at the center of pp +semppMII = +#(make-dynamic-script (markup #:line(#:right-align + #:normal-text #:italic "sempre" #:dynamic "pp"))) + +\context StaffGroup << + \context Staff = "s" << + \set Staff.instrumentName = "Normal" + \relative c'' { + \key es \major + c4\pp c\p c c | c\ff c c\pp c + } + >> + \context Staff = "sMarkup" << + \set Staff.instrumentName = \markup \column { Normal markup } + \relative c'' { + \key es \major + c4-\semppMarkup c\p c c | c\ff c c-\semppMarkup c + } + >> + \context Staff = "sK" << + \set Staff.instrumentName = \markup \column { Explicit shifting } + \relative c'' { + \key es \major + \once \override DynamicText #'X-offset = #-9.2 + c4\semppK c\p c c + c4\ff c + \once \override DynamicText #'X-offset = #-9.2 + c4\semppK c + } + >> + \context Staff = "sT" << + \set Staff.instrumentName = \markup \column { Right padding } + \relative c'' { + \key es \major + c4\semppT c\p c c | c\ff c c\semppT c + } + >> + \context Staff = "sM" << + \set Staff.instrumentName = \markup \column { Setting dimension "to zero" } + \relative c'' { + \key es \major + c4\semppM c\p c c | c\ff c c\semppM c + } + >> + \context Staff = "sG" << + \set Staff.instrumentName = \markup \column { Shifting inside dynamics } + \relative c'' { + \key es \major + c4\semppG c\p c c | c\ff c c\semppG c + } + >> + \context Staff = "sMII" << + \set Staff.instrumentName = \markup \column { Alignment inside dynamics } + \relative c'' { + \key es \major + % Setting to ##f (false) gives the same result + \override DynamicText #'X-offset = #0 + c4\semppMII c\p c c | c\ff c c\semppMII c + } + >> +>> diff --git a/Documentation/snippets/how-to-change-fret-diagram-position.ly b/Documentation/snippets/how-to-change-fret-diagram-position.ly new file mode 100644 index 0000000000..1e86c71dd0 --- /dev/null +++ b/Documentation/snippets/how-to-change-fret-diagram-position.ly @@ -0,0 +1,58 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "fretted-strings, tweaks-and-overrides" + + texidoc = " +If you want to move the position of a fret diagram, for example, to +avoid collision, or to place it between two notes, you have various +possibilities: + +1) modify #'padding or #'extra-offset values (as shown in the first +snippet) + +2) you can add an invisible voice and attach the fret diagrams to the +invisible notes in that voice (as shown in the second example). + + If you need to move the fret according with a rythmic position inside +the bar (in the example, the third beat of the measure) the second +example is better, because the fret is aligned with the third beat +itself. + +" + doctitle = "How to change fret diagram position" +} % begin verbatim + +harmonies = \chordmode +{ + a8:13 +% THE FOLLOWING IS THE COMMAND TO MOVE THE CHORD NAME + \once \override ChordNames.ChordName #'extra-offset = #'(10 . 0) + b8:13 s2. +% THIS LINE IS THE SECOND METHOD + s4 s4 b4:13 +} + +\score +{ + << + \context ChordNames \harmonies + \context Staff + {a8^\markup { \fret-diagram #"6-x;5-0;4-2;3-0;2-0;1-2;" } +% THE FOLLOWING IS THE COMMAND TO MOVE THE FRET DIAGRAM + \once \override TextScript #'extra-offset = #'(10 . 0) + b4.~^\markup { \fret-diagram #"6-x;5-2;4-4;3-2;2-2;1-4;" } b4. a8\break +% HERE IS THE SECOND METHOD + << + { a8 b4.~ b4. a8} + { s4 s4 s4^\markup { \fret-diagram #"6-x;5-2;4-4;3-2;2-2;1-4;" } + } + >> + } + >> +} + + + diff --git a/Documentation/snippets/how-to-put-ties-between-syllables-in-lyrics.ly b/Documentation/snippets/how-to-put-ties-between-syllables-in-lyrics.ly new file mode 100644 index 0000000000..6601079409 --- /dev/null +++ b/Documentation/snippets/how-to-put-ties-between-syllables-in-lyrics.ly @@ -0,0 +1,18 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "text, vocal-music" + + texidoc = " +This can be achieved by separating those syllables by tildes. + +" + doctitle = "How to put ties between syllables in lyrics" +} % begin verbatim + +\lyrics { + wa~o~a +} + diff --git a/Documentation/snippets/incipit.ly b/Documentation/snippets/incipit.ly new file mode 100644 index 0000000000..c7230ea017 --- /dev/null +++ b/Documentation/snippets/incipit.ly @@ -0,0 +1,282 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "staff-notation, ancient-notation" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Los «incipit» se pueden escribir utilizando el grob del nombre del +instruemento, pero manteniendo independientes las definiciones del +nombre del instrumento y del incipit." + + doctitlees = "Incipit" + + texidoc = " +Incipits can be added using the instrument name grob, but keeping +separate the instrument name definition and the incipit definition. + +" + doctitle = "Incipit" +} % begin verbatim + +incipit = +#(define-music-function (parser location incipit-music) (ly:music?) + #{ + \once \override Staff.InstrumentName #'self-alignment-X = #RIGHT + \once \override Staff.InstrumentName #'self-alignment-Y = #UP + \once \override Staff.InstrumentName #'Y-offset = #4 + \once \override Staff.InstrumentName #'padding = #0.3 + \once \override Staff.InstrumentName #'stencil = + #(lambda (grob) + (let* ((instrument-name (ly:grob-property grob 'long-text)) + (layout (ly:output-def-clone (ly:grob-layout grob))) + (music (make-music 'SequentialMusic + 'elements (list (make-music 'ContextSpeccedMusic + 'context-type 'MensuralStaff + 'element (make-music 'PropertySet + 'symbol 'instrumentName + 'value instrument-name)) + $incipit-music))) + (score (ly:make-score music)) + (mm (ly:output-def-lookup layout 'mm)) + (indent (ly:output-def-lookup layout 'indent)) + (width (ly:output-def-lookup layout 'incipit-width)) + (incipit-width (if (number? width) + (* width mm) + (* indent 0.5)))) + (ly:output-def-set-variable! layout 'indent (- indent incipit-width)) + (ly:output-def-set-variable! layout 'line-width indent) + (ly:output-def-set-variable! layout 'ragged-right #f) + (ly:output-def-set-variable! layout 'ragged-last #f) + (ly:output-def-set-variable! layout 'system-count 1) + (ly:score-add-output-def! score layout) + (ly:grob-set-property! grob 'long-text + (markup #:score score)) + (ly:system-start-text::print grob))) + #}) + +%%%%%%%%%%%%%%%%%%%%%%%%% + +global = { + \set Score.skipBars = ##t + \key g \major + \time 4/4 + + % the actual music + \skip 1*8 + + % let finis bar go through all staves + \override Staff.BarLine #'transparent = ##f + + % finis bar + \bar "|." +} + +discantusIncipit = << + \new MensuralVoice = "discantusIncipit" << + \repeat unfold 9 { s1 \noBreak } + { + \clef "neomensural-c1" + \key f \major + \time 2/2 + c''1. + } + >> + \new Lyrics \lyricsto discantusIncipit { IV- } +>> + +discantusNotes = { + \transpose c' c'' { + \clef "treble" + d'2. d'4 | + b e' d'2 | + c'4 e'4.( d'8 c' b | + a4) b a2 | + b4.( c'8 d'4) c'4 | + \once \override NoteHead #'transparent = ##t + c'1 | + b\breve | + } +} + +discantusLyrics = \lyricmode { + Ju -- bi -- | + la -- te De -- | + o, om -- + nis ter -- | + ra, __ om- | + "..." | + -us. | +} + +altusIncipit = << + \new MensuralVoice = "altusIncipit" << + \repeat unfold 9 { s1 \noBreak } + { + \clef "neomensural-c3" + \key f \major + \time 2/2 + r1 f'1. + } + >> + \new Lyrics \lyricsto altusIncipit { IV- } +>> + +altusNotes = { + \transpose c' c'' { + \clef "treble" + % two measures + r2 g2. e4 fis g | + a2 g4 e | + fis g4.( fis16 e fis4) | + g1 | + \once \override NoteHead #'transparent = ##t + g1 | + g\breve | + } +} + +altusLyrics = \lyricmode { + % two measures + Ju -- bi -- la -- te | + De -- o, om -- | + nis ter -- ra, | + "..." | + -us. | +} + +tenorIncipit = << + \new MensuralVoice = "tenorIncipit" << + \repeat unfold 9 { s1 \noBreak } + { + \clef "neomensural-c4" + \key f \major + \time 2/2 + r\longa + r\breve + r1 c'1. + } + >> + \new Lyrics \lyricsto tenorIncipit { IV- } +>> + +tenorNotes = { + \transpose c' c' { + \once \override Staff.VerticalAxisGroup #'minimum-Y-extent = #'(-6 . 3) + \clef "treble_8" + R1 | + R1 | + R1 | + % two measures + r2 d'2. d'4 b e' | + \once \override NoteHead #'transparent = ##t + e'1 | + d'\breve | + } +} + +tenorLyrics = \lyricmode { + % two measures + Ju -- bi -- la -- te | + "..." | + -us. +} + +bassusIncipit = << + \new MensuralVoice = "bassusIncipit" << + \repeat unfold 9 { s1 \noBreak } + { + \clef "bass" + \key f \major + \time 2/2 + %% incipit + r\maxima + f1. + } + >> + \new Lyrics \lyricsto bassusIncipit { IV- } +>> + +bassusNotes = { + \transpose c' c' { + \clef "bass" + R1 | + R1 | + R1 | + R1 | + g2. e4 | + \once \override NoteHead #'transparent = ##t + e1 | + g\breve | + } +} + +bassusLyrics = \lyricmode { + Ju -- bi- | + "..." | + -us. +} + +\score { + << + \new StaffGroup = choirStaff << + \new Voice = "discantusNotes" << + \global + \set Staff.instrumentName = #"Discantus" + \incipit \discantusIncipit + \discantusNotes + >> + \new Lyrics = "discantusLyrics" \lyricsto discantusNotes { \discantusLyrics } + \new Voice = "altusNotes" << + \global + \set Staff.instrumentName = #"Altus" + \incipit \altusIncipit + \altusNotes + >> + \new Lyrics = "altusLyrics" \lyricsto altusNotes { \altusLyrics } + \new Voice = "tenorNotes" << + \global + \set Staff.instrumentName = #"Tenor" + \incipit \tenorIncipit + \tenorNotes + >> + \new Lyrics = "tenorLyrics" \lyricsto tenorNotes { \tenorLyrics } + \new Voice = "bassusNotes" << + \global + \set Staff.instrumentName = #"Bassus" + \incipit \bassusIncipit + \bassusNotes + >> + \new Lyrics = "bassusLyrics" \lyricsto bassusNotes { \bassusLyrics } + >> + >> + \layout { + \context { + \Score + %% no bar lines in staves or lyrics + \override BarLine #'transparent = ##t + } + %% the next two instructions keep the lyrics between the bar lines + \context { + \Lyrics + \consists "Bar_engraver" + \consists "Separating_line_group_engraver" + } + \context { + \Voice + %% no slurs + \override Slur #'transparent = ##t + %% Comment in the below "\remove" command to allow line + %% breaking also at those bar lines where a note overlaps + %% into the next measure. The command is commented out in this + %% short example score, but especially for large scores, you + %% will typically yield better line breaking and thus improve + %% overall spacing if you comment in the following command. + %%\remove "Forbid_line_break_engraver" + } + indent = 6\cm + incipit-width = 4\cm + } +} diff --git a/Documentation/snippets/indicating-cross-staff-chords-with-arpeggio-bracket.ly b/Documentation/snippets/indicating-cross-staff-chords-with-arpeggio-bracket.ly new file mode 100644 index 0000000000..b35b199b36 --- /dev/null +++ b/Documentation/snippets/indicating-cross-staff-chords-with-arpeggio-bracket.ly @@ -0,0 +1,77 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "keyboards" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Un corchete de arpegio puede indicar que se tienen que tocadr con la +misma mano notas que están en dos pentagramas distintos. Para hacerlo, +el @code{PianoStaff} se debe configurar para que acepte símbolos de +arpegio de pentagrama cruzado y los símbolos de arpegio se deben +configurar a la forma de corchete en el contexto de @code{PianoStaff}. + +(Debussy, Les collines d’Anacapri, m. 65) + +" + doctitlees = "Indicar acordes de pentagrama cruzado con corchetes de arpegio" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Eine Arpeggioklammer kann anzeigen, dass Noten auf zwei unterschiedlichen +Systemen mit der selben Hand gespielt werden sollen. Damit das notiert +werden kann, muss der @code{PianoStaff}-Kontext so eingestellt werden, +dass er Arpeggios über Systeme hinweg akzeptiert und die Form der Arpeggios +muss auf eine Klammer eingestellt werden. + +(Debussy, Les collines d’Anacapri, T. 65) + +" + doctitlede = "Akkorde auf zwei Systemen mit Arpeggioklammern anzeigen" + + texidoc = " +An arpeggio bracket can indicate that notes on two different staves are +to be played with the same hand. In order to do this, the +@code{PianoStaff} must be set to accept cross-staff arpeggios and the +arpeggios must be set to the bracket shape in the @code{PianoStaff} +context. + + +(Debussy, Les collines d’Anacapri, m. 65) + +" + doctitle = "Indicating cross-staff chords with arpeggio bracket" +} % begin verbatim + +\paper { ragged-right = ##t } + +\new PianoStaff << + \set PianoStaff.connectArpeggios = ##t + \override PianoStaff.Arpeggio #'stencil = #ly:arpeggio::brew-chord-bracket + \new Staff { + \relative c' { + \key b \major + \time 6/8 + b8-.(\arpeggio fis'-.\> cis-. e-. gis-. b-.)\!\fermata^\laissezVibrer + \bar "||" + } + } + \new Staff { + \relative c' { + \clef bass + \key b \major + << + { + 2.\arpeggio + } + \\ + { + 2. + } + >> + } + } +>> + diff --git a/Documentation/snippets/inserting-a-caesura.ly b/Documentation/snippets/inserting-a-caesura.ly new file mode 100644 index 0000000000..f0c65749dd --- /dev/null +++ b/Documentation/snippets/inserting-a-caesura.ly @@ -0,0 +1,44 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "expressive-marks, tweaks-and-overrides" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Las marcas de cesura se pueden crear sobreescribiendo la propiedad +@code{'text} del objeto @code{BreathingSign}. También está disponible +una marca de cesura curva. + +" + doctitlees = "Insertar una cesura" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Zäsurzeichen können erstellt werden, indem die @code{'text}-Eigenschaft +des @code{BreathingSign}-Objektes verändert wird. Ein gekrümmtes +Zäsurzeichen ist auch möglich. +" + doctitlede = "Eine Zäsur einfügen" + + texidoc = " +Caesura marks can be created by overriding the @code{'text} property of +the @code{BreathingSign} object. A curved caesura mark is also +available. + +" + doctitle = "Inserting a caesura" +} % begin verbatim + +\relative c'' { + \override BreathingSign #'text = \markup { + \musicglyph #"scripts.caesura.straight" + } + c8 e4. \breathe g8. e16 c4 + + \override BreathingSign #'text = \markup { + \musicglyph #"scripts.caesura.curved" + } + g8 e'4. \breathe g8. e16 c4 +} diff --git a/Documentation/snippets/inserting-score-fragments-above-a-staff,-as-markups.ly b/Documentation/snippets/inserting-score-fragments-above-a-staff,-as-markups.ly new file mode 100644 index 0000000000..66f1a63781 --- /dev/null +++ b/Documentation/snippets/inserting-score-fragments-above-a-staff,-as-markups.ly @@ -0,0 +1,41 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "staff-notation" + + texidoc = " +The @code{\\markup} command is quite versatile. In this snippet, it +contains a @code{\\score} block instead of texts or marks. + +" + doctitle = "Inserting score fragments above a staff, as markups" +} % begin verbatim + +tuning = \markup { + \score { + \new Staff \with { \remove "Time_signature_engraver" } + { + \clef bass 1 + } + \layout { ragged-right = ##t } + } +} + +\header { + title = "Solo Cello Suites" + subtitle = "Suite IV" + subsubtitle = \markup { Originalstimmung: \general-align #Y #CENTER \tuning } +} + +\layout { ragged-right = ##f } + +\relative c'' { + \time 4/8 + \times 2/3 { c8 d e } \times 2/3 { c d e } + \times 2/3 { c8 d e } \times 2/3 { c d e } + g8 a g a + g8 a g a +} + diff --git a/Documentation/snippets/isolated-percent-repeats.ly b/Documentation/snippets/isolated-percent-repeats.ly new file mode 100644 index 0000000000..244bac81ef --- /dev/null +++ b/Documentation/snippets/isolated-percent-repeats.ly @@ -0,0 +1,40 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "repeats" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +También se pueden imprimir símbolos de porcentaje sueltos. Esto se +hace introduciendo un silencio multicompás con una función de +impresión distinta: + +" + doctitlees = "Símbolos de porcentaje sueltos" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Isolierte Prozentwiederholungen können auch ausgegeben werden. Das wird +erreicht, indem man eine Ganztaktpause notiert und ihre Ausgabeform +ändert: + +" + doctitlede = "Isolierte Prozentwiederholungen" + + texidoc = " +Isolated percents can also be printed. This is done by entering a +multi-measure rest with a different print function: + +" + doctitle = "Isolated percent repeats" +} % begin verbatim + +\relative c'' { + \override MultiMeasureRest #'stencil + = #ly:multi-measure-rest::percent + \override MultiMeasureRest #'thickness = #0.48 + R1 +} + diff --git a/Documentation/snippets/jazz-combo-template.ly b/Documentation/snippets/jazz-combo-template.ly new file mode 100644 index 0000000000..77e463bdbb --- /dev/null +++ b/Documentation/snippets/jazz-combo-template.ly @@ -0,0 +1,309 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { +%% Translation of GIT committish: 892286cbfdbe89420b8181975032ea975e79d2f5 + texidocfr = " +Bien que compliqué de prime abord, voici un canevas tout à fait indiqué +pour les ensembles de jazz. Vous noterez que tous les instruments sont +notés en ut (@code{\key c \major}), la tonalité de concert. Les notes +seront automatiquement transposée dès lors qu'elles seront inscrites +dans une section @code{\\transpose}. + +" + doctitle = "Symboles de jazz" + + lsrtags = "keyboards, percussion, fretted-strings, template" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Ésta es una plantilla bastante avanzada, para un conjunto de +jazz. Observe que la notación de todos los instrumentos está en +@code{\\key c \\major} (Do mayor). Esto se refiere al tono de +concierto; la armadura se transporta automáticamente si la música está +dentro de una sección @code{\\transpose}. + +" + doctitlees = "Plantilla para combo de jazz" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Hier ist ein ziemlich kompliziertes Beispiel für ein Jazz-Ensemble. Achtung: +Alle Instrumente sind in @code{\key c \major} (C-Dur) notiert. Das bezieht sich +auf die klingende Musik: LilyPond transponiert die Tonart automatisch, wenn +sich die Noten innerhalb eines @code{\transpose}-Abschnitts befinden. + +" + + doctitlede = "Vorlage für Jazz-Combo" + + texidoc = " +This is quite an advanced template, for a jazz ensemble. Note that all +instruments are notated in @code{\\key c \\major}. This refers to the +key in concert pitch; the key will be automatically transposed if the +music is within a @code{\\transpose} section. + +" + doctitle = "Jazz combo template" +} % begin verbatim + +\header { + title = "Song" + subtitle = "(tune)" + composer = "Me" + meter = "moderato" + piece = "Swing" + tagline = \markup { + \column { + "LilyPond example file by Amelie Zapf," + "Berlin 07/07/2003" + } + } +} + +%#(set-global-staff-size 16) +\include "english.ly" + +%%%%%%%%%%%% Some macros %%%%%%%%%%%%%%%%%%% + +sl = { + \override NoteHead #'style = #'slash + \override Stem #'transparent = ##t +} +nsl = { + \revert NoteHead #'style + \revert Stem #'transparent +} +crOn = \override NoteHead #'style = #'cross +crOff = \revert NoteHead #'style + +%% insert chord name style stuff here. + +jazzChords = { } + +%%%%%%%%%%%% Keys'n'thangs %%%%%%%%%%%%%%%%% + +global = { \time 4/4 } + +Key = { \key c \major } + +% ############ Horns ############ + +% ------ Trumpet ------ +trpt = \transpose c d \relative c'' { + \Key + c1 | c | c | +} +trpHarmony = \transpose c' d { + \jazzChords +} +trumpet = { + \global + \set Staff.instrumentName = #"Trumpet" + \clef treble + << + \trpt + >> +} + +% ------ Alto Saxophone ------ +alto = \transpose c a \relative c' { + \Key + c1 | c | c | +} +altoHarmony = \transpose c' a { + \jazzChords +} +altoSax = { + \global + \set Staff.instrumentName = #"Alto Sax" + \clef treble + << + \alto + >> +} + +% ------ Baritone Saxophone ------ +bari = \transpose c a' \relative c { + \Key + c1 + c1 + \sl + d4^"Solo" d d d + \nsl +} +bariHarmony = \transpose c' a \chordmode { + \jazzChords s1 s d2:maj e:m7 +} +bariSax = { + \global + \set Staff.instrumentName = #"Bari Sax" + \clef treble + << + \bari + >> +} + +% ------ Trombone ------ +tbone = \relative c { + \Key + c1 | c | c +} +tboneHarmony = \chordmode { + \jazzChords +} +trombone = { + \global + \set Staff.instrumentName = #"Trombone" + \clef bass + << + \tbone + >> +} + +% ############ Rhythm Section ############# + +% ------ Guitar ------ +gtr = \relative c'' { + \Key + c1 + \sl + b4 b b b + \nsl + c1 +} +gtrHarmony = \chordmode { + \jazzChords + s1 c2:min7+ d2:maj9 +} +guitar = { + \global + \set Staff.instrumentName = #"Guitar" + \clef treble + << + \gtr + >> +} + +%% ------ Piano ------ +rhUpper = \relative c'' { + \voiceOne + \Key + c1 | c | c +} +rhLower = \relative c' { + \voiceTwo + \Key + e1 | e | e +} + +lhUpper = \relative c' { + \voiceOne + \Key + g1 | g | g +} +lhLower = \relative c { + \voiceTwo + \Key + c1 | c | c +} + +PianoRH = { + \clef treble + \global + \set Staff.midiInstrument = #"acoustic grand" + << + \new Voice = "one" \rhUpper + \new Voice = "two" \rhLower + >> +} +PianoLH = { + \clef bass + \global + \set Staff.midiInstrument = "acoustic grand" + << + \new Voice = "one" \lhUpper + \new Voice = "two" \lhLower + >> +} + +piano = { + << + \set PianoStaff.instrumentName = #"Piano" + \new Staff = "upper" \PianoRH + \new Staff = "lower" \PianoLH + >> +} + +% ------ Bass Guitar ------ +Bass = \relative c { + \Key + c1 | c | c +} +bass = { + \global + \set Staff.instrumentName = #"Bass" + \clef bass + << + \Bass + >> +} + +% ------ Drums ------ +up = \drummode { + \voiceOne + hh4 hh + hh4 hh + hh4 hh +} +down = \drummode { + \voiceTwo + bd4 s bd s + bd4 s bd s + bd4 s bd s +} + +drumContents = { + \global + << + \set DrumStaff.instrumentName = #"Drums" + \new DrumVoice \up + \new DrumVoice \down + >> +} + +%%%%%%%%% It All Goes Together Here %%%%%%%%%%%%%%%%%%%%%% + +\score { + << + \new StaffGroup = "horns" << + \new Staff = "trumpet" \trumpet + \new Staff = "altosax" \altoSax + \new ChordNames = "barichords" \bariHarmony + \new Staff = "barisax" \bariSax + \new Staff = "trombone" \trombone + >> + + \new StaffGroup = "rhythm" << + \new ChordNames = "chords" \gtrHarmony + \new Staff = "guitar" \guitar + \new PianoStaff = "piano" \piano + \new Staff = "bass" \bass + \new DrumStaff \drumContents + >> + >> + + \layout { + \context { \RemoveEmptyStaffContext } + \context { + \Score + \override BarNumber #'padding = #3 + \override RehearsalMark #'padding = #2 + skipBars = ##t + } + } + + \midi { } +} + diff --git a/Documentation/snippets/keyboards-intro.itely b/Documentation/snippets/keyboards-intro.itely new file mode 100644 index 0000000000..3fd9b07b27 --- /dev/null +++ b/Documentation/snippets/keyboards-intro.itely @@ -0,0 +1,7 @@ +@node Keyboards +@unnumbered Keyboards + +@ruser{Keyboard and other multi-staff instruments} + +@lysnippets + diff --git a/Documentation/snippets/keyboards.snippet-list b/Documentation/snippets/keyboards.snippet-list new file mode 100644 index 0000000000..d4f7e28184 --- /dev/null +++ b/Documentation/snippets/keyboards.snippet-list @@ -0,0 +1,13 @@ +accordion-discant-symbols.ly +clusters.ly +controlling-the-placement-of-chord-fingerings.ly +creating-slurs-across-voices.ly +fine-tuning-pedal-brackets.ly +indicating-cross-staff-chords-with-arpeggio-bracket.ly +jazz-combo-template.ly +laissez-vibrer-ties.ly +piano-template-simple.ly +piano-template-with-centered-dynamics.ly +piano-template-with-centered-lyrics.ly +piano-template-with-melody-and-lyrics.ly +vocal-ensemble-template-with-automatic-piano-reduction.ly diff --git a/Documentation/snippets/laissez-vibrer-ties.ly b/Documentation/snippets/laissez-vibrer-ties.ly new file mode 100644 index 0000000000..d2e6aa2d09 --- /dev/null +++ b/Documentation/snippets/laissez-vibrer-ties.ly @@ -0,0 +1,28 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "expressive-marks, keyboards, fretted-strings" + + texidoc = " +Laissez vibrer ties have a fixed size. Their formatting can be tuned +using @code{'tie-configuration}. + +" + doctitle = "Laissez vibrer ties" +} % begin verbatim + +\relative c' { + 4\laissezVibrer r \laissezVibrer r + 4\laissezVibrer r 4.\laissezVibrer r8 + + 4\laissezVibrer r + \override LaissezVibrerTieColumn #'tie-configuration + = #`((-7 . ,DOWN) + (-5 . ,DOWN) + (-3 . ,UP) + (-1 . ,UP)) + 4\laissezVibrer r +} + diff --git a/Documentation/snippets/letter-tablature-formatting.ly b/Documentation/snippets/letter-tablature-formatting.ly new file mode 100644 index 0000000000..baf88fa35e --- /dev/null +++ b/Documentation/snippets/letter-tablature-formatting.ly @@ -0,0 +1,42 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "staff-notation, fretted-strings" + + texidoc = " +Tablature can be formatted using letters instead of numbers. + +" + doctitle = "Letter tablature formatting" +} % begin verbatim + +#(define (letter-tablature-format str context event) + (let ((tuning (ly:context-property context 'stringTunings)) + (pitch (ly:event-property event 'pitch))) + (make-whiteout-markup + (make-vcenter-markup + (string (integer->char + (+ (char->integer #\a) + (- (ly:pitch-semitones pitch) + (list-ref tuning (- str 1)))))))))) + +music = \relative c { + c4 d e f + g4 a b c + d4 e f g +} + +<< + \new Staff { + \clef "G_8" + \music + } + \new TabStaff \with { + tablatureFormat = #letter-tablature-format + } + { + \music + } +>> diff --git a/Documentation/snippets/line-arrows.ly b/Documentation/snippets/line-arrows.ly new file mode 100644 index 0000000000..8e1f026de5 --- /dev/null +++ b/Documentation/snippets/line-arrows.ly @@ -0,0 +1,41 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "expressive-marks, tweaks-and-overrides" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Se pueden aplicar puntas de flecha a los elementos de extensión de +texto y de línea (como el Glissando). + +" + doctitlees = "Puntas de flecha para las líneas" + + texidoc = " +Arrows can be applied to text-spanners and line-spanners (such as the +Glissando). + +" + doctitle = "Line arrows" +} % begin verbatim + +\relative c'' { + \override TextSpanner #'bound-padding = #1.0 + \override TextSpanner #'style = #'line + \override TextSpanner #'(bound-details right arrow) = ##t + \override TextSpanner #'(bound-details left text) = #"fof" + \override TextSpanner #'(bound-details right text) = #"gag" + \override TextSpanner #'(bound-details right padding) = #0.6 + + \override TextSpanner #'(bound-details right stencil-align-dir-y) = #CENTER + \override TextSpanner #'(bound-details left stencil-align-dir-y) = #CENTER + + \override Glissando #'(bound-details right arrow) = ##t + \override Glissando #'arrow-length = #0.5 + \override Glissando #'arrow-width = #0.25 + + a8\startTextSpan gis a4 b\glissando b, + g'4 c\stopTextSpan c2 +} diff --git a/Documentation/snippets/lyrics-alignment.ly b/Documentation/snippets/lyrics-alignment.ly new file mode 100644 index 0000000000..0857493c2c --- /dev/null +++ b/Documentation/snippets/lyrics-alignment.ly @@ -0,0 +1,44 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "text, vocal-music" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +La alineación horizontal de la letra se puede ajustar sobreescribiendo +la propiedad @code{self-alignment-X} del objeto @code{LyricText}. +@code{#-1} es izquierda, @code{#0} es centrado y @code{#1} es derecha; +sin embargo, puede usar también @code{#LEFT}, @code{#CENTER} y +@code{#RIGHT}. + +" + doctitlees = "Alineación de la letra" + + texidoc = " +Horizontal alignment for lyrics cam be set by overriding the +@code{self-alignment-X} property of the @code{LyricText} object. +@code{#-1} is left, @code{#0} is center and @code{#1} is right; +however, you can use @code{#LEFT}, @code{#CENTER} and @code{#RIGHT} as +well. + +" + doctitle = "Lyrics alignment" +} % begin verbatim + +\layout { ragged-right = ##f } +\relative c'' { + c1 + c1 + c1 +} +\addlyrics { + \once \override LyricText #'self-alignment-X = #LEFT + "This is left-aligned" + \once \override LyricText #'self-alignment-X = #CENTER + "This is centered" + \once \override LyricText #'self-alignment-X = #1 + "This is right-aligned" +} + diff --git a/Documentation/snippets/makam-example.ly b/Documentation/snippets/makam-example.ly new file mode 100644 index 0000000000..669b5571cf --- /dev/null +++ b/Documentation/snippets/makam-example.ly @@ -0,0 +1,49 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "pitches, world-music" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +El «Makam» es un tipo de melodía de Turquía que +utiliza alteraciones microtonales de 1/9 de tono. Consulte el +archivo de inicio @code{makam.ly} (véase el 'Manual de +aprendizaje @version{}, 4.6.3 Otras fuentes de información' para +averiguar la situación de este archivo) para ver detalles de los +nombres de las notas y las alteraciones. + +" + doctitlees = "Ejemplo de «Makam»" + + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Makam ist eine türkische Melodie, in der 1/9-Tonabstände +eingesetzt werden. Sehen Sie sich die Initialisierungsdatei +@code{makam.ly} für weiter Information zu Tonhöhenbezeichnungen +und Alterationen an (siehe +Handbuch zum Lernen @version{}, 4.6.3 Weitere Information zu +Hinweisen, wo diese Datei gespeichert ist)." + + doctitlede = "Makam-Beispiel" + + texidoc = " +Makam is a type of melody from Turkey using 1/9th-tone microtonal +alterations. Consult the initialization file @samp{ly/makam.ly} for +details of pitch names and alterations. + +" + doctitle = "Makam example" +} % begin verbatim + +% Initialize makam settings +\include "makam.ly" + +\relative c' { + \set Staff.keySignature = #`((6 . ,(- KOMA)) (3 . ,BAKIYE)) + c4 cc db fk + gbm4 gfc gfb efk + fk4 db cc c +} diff --git a/Documentation/snippets/making-an-object-invisible-with-the-transparent-property.ly b/Documentation/snippets/making-an-object-invisible-with-the-transparent-property.ly new file mode 100644 index 0000000000..32af8183d2 --- /dev/null +++ b/Documentation/snippets/making-an-object-invisible-with-the-transparent-property.ly @@ -0,0 +1,40 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "rhythms, simultaneous-notes, tweaks-and-overrides" + + texidoc = " +Setting the @code{transparent} property will cause an object to be +printed in \"invisible ink\": the object is not printed, but all its +other behavior is retained. The object still takes up space, it takes +part in collisions, and slurs, ties and beams can be attached to it. + + +This snippet demonstrates how to connect different voices using ties. +Normally, ties only connect two notes in the same voice. By +introducing a tie in a different voice, and blanking the first up-stem +in that voice, the tie appears to cross voices. + +" + doctitle = "Making an object invisible with the 'transparent property" +} % begin verbatim + +\relative c'' { + \time 2/4 + << + { + \once \override Stem #'transparent = ##t + \once \override Stem #'length = #8 + b8 ~ b\noBeam + \once \override Stem #'transparent = ##t + \once \override Stem #'length = #8 + g8 ~ g\noBeam + } + \\ + { + b8 g g e + } + >> +} diff --git a/Documentation/snippets/making-slurs-with-complex-dash-structure.ly b/Documentation/snippets/making-slurs-with-complex-dash-structure.ly new file mode 100644 index 0000000000..1e23f6583c --- /dev/null +++ b/Documentation/snippets/making-slurs-with-complex-dash-structure.ly @@ -0,0 +1,90 @@ +% Do not edit this file; it is automatically +% generated from Documentation/snippets/new +% This file is in the public domain. +%% Note: this file works from version 2.13.1 +\version "2.13.1" + +\header { +%% Translation of GIT committish: da7ce7d651c3a0d1bfed695f6e952975937a1c79 + texidoces = " + +Las ligaduras de expresión se pueden construir con patrones de +discontinuidad complejos mediante la definición de la propiedad +@code{dash-definition}. @code{dash-definition} es una lista de +@code{elementos de discontinuidad}. Un @code{elemento de +discontinuidad} es una lista de parámetros que definen el +comportamiento de discontinuidad de un segmento de la ligadura de +expresión. + +La ligadura se define en términos del parámetro de bezier t cuyo +rango va de 0 a la izquierda de la ligadura hasta 1 en el extremo +derecho de la ligadura. Cada @code{elemento de discontinuidad} es +una lista @code{(t-inicio t-final fracción-discontinuidad +período-discontinuidad)}. La región de la ligadura desde +@code{t-inicio} hasta @code{t-final} tendrá una fracción +@code{fracción-discontinuidad} de cada +@code{período-discontinuidad} de color negro. +@code{período-discontinuidad} se define en términos de espacios de +pentagrama. @code{fracción-discontinuidad} se establece al valor +de 1 para una ligadura continua. + +" + + doctitlees = "Hacer ligaduras de expresión con estructura compleja de discontinuidad" + + + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Legatobögen können mit einem komplizierten Strichelmuster +gesetzt werden, indem die @code{dash-definition}-Eigenschaft +definiert wird. @code{dash-definition} ist eine Liste bestehend +aus @code{dash-elements}-Elementen. Ein @code{dash-element} ist +eine Liste an Parametern, die das Strichverhalten für einen +Abschnitt des Legatobogens definieren. + +Der Bogen wird nach dem Bezierparameter t definiert, welcher +von 0 am linken Ende des Bogens zu 1 am rechten Ende des Bogens +reicht. @code{dash-element} ist eine Liste @code{(start-t stop-t dash-Unterbrechung dash-Abschnitt)}. Die Region des Bogens von @code{start-t} +bis @code{stop-t} hat eine Unterbrechung von @code{dash-Unterbrechung} +von jedem @code{dash-Abschnitt}-Schwarzabschnitt. @code{dash-Abschnitt} ist in Notenlinienzwischenräumen definiert. +@code{dash-Abschnitt} ist auf 1 für einen durchgehenden Bogen +gesetzt. +" + doctitlede = "Legatobögen mit kompliziertem Strichelmuster + definieren" + + lsrtags = "rhythms, expressive-marks" + texidoc = " +Slurs can be made with complex dash patterns by defining +the @code{dash-definition} property. @code{dash-definition} +is a list of @code{dash-elements}. A @code{dash-element} is a +list of parameters defining the dash behavior for a segment of +the slur. + +The slur is defined in terms of the bezier parameter t +which ranges from 0 +at the left end of the slur to 1 at the right end of the slur. +@code{dash-element} is a list @code{(start-t stop-t dash-fraction +dash-period)}. The region of the slur from @code{start-t} to +@code{stop-t} will have a fraction @code{dash-fraction} +of each @code{dash-period} black. @code{dash-period} is +defined in terms of staff spaces. @code{dash-fraction} is +set to 1 for a solid slur. +" + doctitle = "Making slurs with complex dash structure" +} % begin verbatim + + +\relative c' { + \once \override + Slur #'dash-definition = #'((0 0.3 0.1 0.75) + (0.3 0.6 1 1) + (0.65 1.0 0.4 0.75)) + c( d e f) + \once \override + Slur #'dash-definition = #'((0 0.25 1 1) + (0.3 0.7 0.4 0.75) + (0.75 1.0 1 1)) + c( d e f) +} diff --git a/Documentation/snippets/making-some-staff-lines-thicker-than-the-others.ly b/Documentation/snippets/making-some-staff-lines-thicker-than-the-others.ly new file mode 100644 index 0000000000..c4da2322c6 --- /dev/null +++ b/Documentation/snippets/making-some-staff-lines-thicker-than-the-others.ly @@ -0,0 +1,45 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "staff-notation, editorial-annotations" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Se puede engrosar una línea del pentagrama con fines pedagógicos +(p.ej. la tercera línea o la de la clave de Sol). Esto se puede +conseguir añadiendo más líneas muy cerca de la línea que se quiere +destacar, utilizando la propiedad @code{line-positions} del objeto +@code{StaffSymbol}. + +" + doctitlees = "Hacer unas líneas del pentagrama más gruesas que las otras" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Für den pädagogischen Einsatz kann eine Linie des Notensystems dicker +gezeichnet werden (z. B. die Mittellinie, oder um den Schlüssel hervorzuheben). +Das ist möglich, indem man zusätzliche Linien sehr nahe an der Linie, die +dicker erscheinen soll, einfügt. Dazu wird die @code{line-positions}-Eigenschaft +herangezogen. + +" + doctitlede = "Eine Linie des Notensystems dicker als die anderen machen" + + texidoc = " +For pedagogical purposes, a staff line can be thickened (e.g., the +middle line, or to emphasize the line of the G clef). This can be +achieved by adding extra lines very close to the line that should be +emphasized, using the @code{line-positions} property of the +@code{StaffSymbol} object. + +" + doctitle = "Making some staff lines thicker than the others" +} % begin verbatim + +{ + \override Staff.StaffSymbol #'line-positions = #'(-4 -2 -0.2 0 0.2 2 4) + d'4 e' f' g' +} + diff --git a/Documentation/snippets/manually-break-figured-bass-extenders-for-only-some-numbers.ly b/Documentation/snippets/manually-break-figured-bass-extenders-for-only-some-numbers.ly new file mode 100644 index 0000000000..1644820a31 --- /dev/null +++ b/Documentation/snippets/manually-break-figured-bass-extenders-for-only-some-numbers.ly @@ -0,0 +1,30 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "chords" + + texidoc = " +Figured bass often uses extenders to indicate continuation of the +corresponding step. However, in this case lilypond is in greedy-mode +and uses extenders whenever possible. To break individual extenders, +one can simply use a modifier \\! to a number, which breaks any +extender attributed to that number right before the number. + +" + doctitle = "Manually break figured bass extenders for only some numbers" +} % begin verbatim + +bassfigures = \figuremode { + \set useBassFigureExtenders = ##t + <6 4>4 <6 4\!> <6 4\!> <6 4\!> | <6\! 4\!> <6 4> <6 4\!> <6 4> +} + +<< + \new Staff \relative c'' { c1 c1 } + \new FiguredBass \bassfigures +>> + + + diff --git a/Documentation/snippets/manually-controlling-beam-positions.ly b/Documentation/snippets/manually-controlling-beam-positions.ly new file mode 100644 index 0000000000..969c534f7d --- /dev/null +++ b/Documentation/snippets/manually-controlling-beam-positions.ly @@ -0,0 +1,29 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "rhythms, tweaks-and-overrides" + + texidoc = " +Beam positions may be controlled manually, by overriding the +@code{positions} setting of the @code{Beam} grob. + + + + +" + doctitle = "Manually controlling beam positions" +} % begin verbatim + +\relative c' { + \time 2/4 + % from upper staff-line (position 2) to center (position 0) + \override Beam #'positions = #'(2 . 0) + c8 c + % from center to one above center (position 1) + \override Beam #'positions = #'(0 . 1) + c8 c +} + + diff --git a/Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly b/Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly new file mode 100644 index 0000000000..4aa2af7618 --- /dev/null +++ b/Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly @@ -0,0 +1,49 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "editorial-annotations, vocal-music" + + texidoc = " +This example shows how to put crosses on stems. Mark the beginning of +a spoken section with the @code{\\speakOn} keyword, and end it with the +@code{\\speakOff} keyword. + +" + doctitle = "Marking notes of spoken parts with a cross on the stem" +} % begin verbatim + +speakOn = { + \override Stem #'stencil = #(lambda (grob) + (let* ((x-parent (ly:grob-parent grob X)) + (is-rest? (ly:grob? (ly:grob-object x-parent 'rest)))) + (if is-rest? + empty-stencil + (ly:stencil-combine-at-edge + (ly:stem::print grob) + Y + (- (ly:grob-property grob 'direction)) + (grob-interpret-markup grob + (markup #:hspace -1.025 #:fontsize -4 + #:musicglyph "noteheads.s2cross")) + -2.3 0)))) +} + +speakOff = { + \revert Stem #'stencil +} + +\score { + \new Staff { + \relative c'' { + a4 b a c + \speakOn + g4 f r g + b4 r d e + \speakOff + c4 a g f + } + } +} + diff --git a/Documentation/snippets/markup-lines.ly b/Documentation/snippets/markup-lines.ly new file mode 100644 index 0000000000..0edf778b6d --- /dev/null +++ b/Documentation/snippets/markup-lines.ly @@ -0,0 +1,48 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "text" + + texidoc = " +Text that can spread over pages is entered with the +@code{\\markuplines} command. + +" + doctitle = "Markup lines" +} % begin verbatim + +#(set-default-paper-size "a6") + +#(define-markup-list-command (paragraph layout props args) (markup-list?) + (interpret-markup-list layout props + (make-justified-lines-markup-list (cons (make-hspace-markup 2) args)))) + +% Candide, Voltaire +\markuplines { + \override-lines #'(baseline-skip . 2.5) { + \paragraph { + Il y avait en Westphalie, dans le château de M. le baron de + Thunder-ten-tronckh, un jeune garçon à qui la nature avait donné + les mœurs les plus douces. Sa physionomie annonçait son âme. + Il avait le jugement assez droit, avec l'esprit le plus simple ; + c'est, je crois, pour cette raison qu'on le nommait Candide. Les + anciens domestiques de la maison soupçonnaient qu'il était fils + de la sœur de monsieur le baron et d'un bon et honnête + gentilhomme du voisinage, que cette demoiselle ne voulut jamais + épouser parce qu'il n'avait pu prouver que soixante et onze + quartiers, et que le reste de son arbre généalogique avait été + perdu par l'injure du temps. + } + \paragraph { + Monsieur le baron était un des plus puissants seigneurs de la + Westphalie, car son château avait une porte et des fenêtres. Sa + grande salle même était ornée d'une tapisserie. Tous les chiens + de ses basses-cours composaient une meute dans le besoin ; ses + palefreniers étaient ses piqueurs; le vicaire du village était + son grand-aumônier. Ils l'appelaient tous monseigneur, et ils + riaient quand il faisait des contes. + } + } +} diff --git a/Documentation/snippets/measure-counter.ly b/Documentation/snippets/measure-counter.ly new file mode 100644 index 0000000000..b3e3478a68 --- /dev/null +++ b/Documentation/snippets/measure-counter.ly @@ -0,0 +1,40 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "repeats, staff-notation, editorial-annotations" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Este fragmento de código proporciona una solución alternativa a la +producción de contadores de compás utilizando repeticiones +transparentes de tipo porcentaje. + +" + doctitlees = "Contador de compases" + + texidoc = " +This snippet provides a workaround for emitting measure counters using +transparent percent repeats. + +" + doctitle = "Measure counter" +} % begin verbatim + +<< + \context Voice = "foo" { + \clef bass + c4 r g r + c4 r g r + c4 r g r + c4 r g r + } + \context Voice = "foo" { + \set countPercentRepeats = ##t + \override PercentRepeat #'transparent = ##t + \override PercentRepeatCounter #'staff-padding = #1 + \repeat percent 4 { s1 } + } +>> + diff --git a/Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly b/Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly new file mode 100644 index 0000000000..5e199dfc6e --- /dev/null +++ b/Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly @@ -0,0 +1,53 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "staff-notation, ancient-notation, contexts-and-engravers, tweaks-and-overrides" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +La disposición «mensurstriche» en que las líneas divisorias no +están dibujadas sobre los pentagramas, sino entre ellos, se puede +conseguir con un @code{StaffGroup} en vez de un @code{ChoirStaff}. +La línea divisoria sobre los pentagramas se borra estableciendo la +propiedad @code{transparent}. + +" + + doctitlees = "Disposición Mensurstriche (líneas divisorias entre pentagramas)" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Das Mensurstiche-Layout, in welchem die Taktlinien nicht auf den Systemen, +sondern zwischen den Systemen gesetzt werden, kann mit einer @code{StaffGroup} +anstelle von @code{ChoirStaff} erreicht werden. Die Taktlinien auf den +Systemen werden mit der the @code{transparent}-Eigenschaft ausgelöscht. + +" + doctitlede = "Mensurstriche-Layout (Taktstriche zwischen den Systemen" + + texidoc = " +The mensurstriche-layout where the bar lines do not show on the staves +but between staves can be achieved with a @code{StaffGroup} instead of +a @code{ChoirStaff}. The bar line on staves is blanked out by setting +the @code{transparent} property. + +" + doctitle = "Mensurstriche layout (bar lines between the staves)" +} % begin verbatim + +global = { + \override Staff.BarLine #'transparent = ##t + s1 s + % the final bar line is not interrupted + \revert Staff.BarLine #'transparent + \bar "|." +} +\new StaffGroup \relative c'' { + << + \new Staff { << \global { c1 c } >> } + \new Staff { << \global { c c } >> } + >> +} + diff --git a/Documentation/snippets/merging-multi-measure-rests-in-a-polyphonic-part.ly b/Documentation/snippets/merging-multi-measure-rests-in-a-polyphonic-part.ly new file mode 100644 index 0000000000..018700c00c --- /dev/null +++ b/Documentation/snippets/merging-multi-measure-rests-in-a-polyphonic-part.ly @@ -0,0 +1,38 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "rhythms" + + texidoc = " +When using multi-measure rests in a polyphonic staff, the rests will be +placed differently depending on the voice they belong to. However they +can be printed on the same staff line, using the following setting. + +" + doctitle = "Merging multi-measure rests in a polyphonic part" +} % begin verbatim + +normalPos = \revert MultiMeasureRest #'staff-position + +{ + << + { + c''1 + R1 + c''1 + \normalPos + R1 + } + \\ + { + c'1 + R1 + c'1 + \normalPos + R1 + } + >> +} + diff --git a/Documentation/snippets/midi-intro.itely b/Documentation/snippets/midi-intro.itely new file mode 100644 index 0000000000..cfa76077b8 --- /dev/null +++ b/Documentation/snippets/midi-intro.itely @@ -0,0 +1,7 @@ +@node MIDI +@unnumbered MIDI + +@ruser{MIDI output} + +@lysnippets + diff --git a/Documentation/snippets/midi.snippet-list b/Documentation/snippets/midi.snippet-list new file mode 100644 index 0000000000..4c94738982 --- /dev/null +++ b/Documentation/snippets/midi.snippet-list @@ -0,0 +1,3 @@ +changing-midi-output-to-one-channel-per-voice.ly +changing-the-tempo-without-a-metronome-mark.ly +demo-midiinstruments.ly diff --git a/Documentation/snippets/modern-tab-text-clef.ly b/Documentation/snippets/modern-tab-text-clef.ly new file mode 100644 index 0000000000..18c2210125 --- /dev/null +++ b/Documentation/snippets/modern-tab-text-clef.ly @@ -0,0 +1,33 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "staff-notation, fretted-strings" + + texidoc = " +Use a markup text to replace the (TAB) clef glyph with a modern font. + +" + doctitle = "Modern TAB text clef" +} % begin verbatim + +TAB = \markup { + \raise #1.5 + \sans + \bold + \huge + \override #'(baseline-skip . 2.5) + \left-align + \center-column { + T + A + B + } +} + +\new TabStaff { + \override Staff.Clef #'stencil = #(lambda (grob) + (grob-interpret-markup grob TAB)) + a +} diff --git a/Documentation/snippets/modifying-default-values-for-articulation-shorthand-notation.ly b/Documentation/snippets/modifying-default-values-for-articulation-shorthand-notation.ly new file mode 100644 index 0000000000..ff31705d94 --- /dev/null +++ b/Documentation/snippets/modifying-default-values-for-articulation-shorthand-notation.ly @@ -0,0 +1,54 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "expressive-marks" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Las abreviaturas se encuentran definidas dentro del archivo +@code{ly/script-init.ly}, donde las variables @code{dashHat}, +@code{dashPlus}, @code{dashDash}, @code{dashBar}, +@code{dashLarger}, @code{dashDot} y @code{dashUnderscore} reciben +valores predeterminados. Se pueden modificar estos valores +predeterminados para las abreviaturas. Por ejemplo, para asociar +la abreviatura @code{-+} (@code{dashPlus}) con el símbolo del +semitrino en lugar del símbolo predeterminado +, asigne el valor +@code{trill} a la variable @code{dashPlus}: + +" + doctitlees = "Modificar los valores predeterminados para la notación abreviada de las articulaciones" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Die Abkürzungen sind in der Datei @samp{ly/script-init.ly} definiert, wo +den Variablen @code{dashHat}, @code{dashPlus}, @code{dashDash}, +@code{dashBar}, @code{dashLarger}, @code{dashDot} und +@code{dashUnderscore} Standardwerte zugewiesen werden. Diese Standardwerte +können verändert werden. Um zum Beispiel die Abkürzung +@code{-+} (@code{dashPlus}) mit dem Triller anstatt mit dem +-Symbol zu +assoziieren, muss der Wert @code{trill} der Variable +@code{dashPlus} zugewiesen werden: + +" + doctitlede = "Die Standardwerte der Abkürzungen von Artikulationen verändern" + + texidoc = " +The shorthands are defined in @samp{ly/script-init.ly}, where the +variables @code{dashHat}, @code{dashPlus}, @code{dashDash}, +@code{dashBar}, @code{dashLarger}, @code{dashDot}, and +@code{dashUnderscore} are assigned default values. The default values +for the shorthands can be modified. For example, to associate the +@code{-+} (@code{dashPlus}) shorthand with the trill symbol instead of +the default + symbol, assign the value @code{trill} to the variable +@code{dashPlus}: + +" + doctitle = "Modifying default values for articulation shorthand notation" +} % begin verbatim + +\relative c'' { c1-+ } +dashPlus = "trill" +\relative c'' { c1-+ } + diff --git a/Documentation/snippets/modifying-tuplet-bracket-length.ly b/Documentation/snippets/modifying-tuplet-bracket-length.ly new file mode 100644 index 0000000000..3a7f1d4294 --- /dev/null +++ b/Documentation/snippets/modifying-tuplet-bracket-length.ly @@ -0,0 +1,36 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "rhythms" + + texidoc = " +Tuplet brackets can be made to run to prefatory matter or the next +note. Default tuplet brackets end at the right edge of the final note +of the tuplet; full-length tuplet brackets extend farther to the right, +either to cover all the non-rhythmic notation up to the following note, +or to cover only the whitespace before the next item of notation, be +that a clef, time signature, key signature, or another note. The +example shows how to switch tuplets to full length mode and how to +modify what material they cover. + +" + doctitle = "Modifying tuplet bracket length" +} % begin verbatim + +\new RhythmicStaff { + % Set tuplets to be extendable... + \set tupletFullLength = ##t + % ...to cover all items up to the next note + \set tupletFullLengthNote = ##t + \time 2/4 + \times 2/3 { c4 c c } + % ...or to cover just whitespace + \set tupletFullLengthNote = ##f + \time 4/4 + \times 4/5 { c4 c1 } + \time 3/4 + c2. +} + diff --git a/Documentation/snippets/multi-measure-rest-markup.ly b/Documentation/snippets/multi-measure-rest-markup.ly new file mode 100644 index 0000000000..ca9441a57c --- /dev/null +++ b/Documentation/snippets/multi-measure-rest-markup.ly @@ -0,0 +1,87 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "rhythms, text" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca +texidoces = " +Los elementos de marcado aplicados a un silencio multicompás se +centran encima o debajo de éste. Los elementos de marcado extensos +que se adjuntan a silencios multicompás no producen la expansión del +compás. Para expandir un silencio multicompás de forma que quepa todo +el marcado, utilice un silencio de separación con un marcado aplicado +antes del silencio multicompás. + +Observe que el silencio separador produce la inserción de un compás. +El texto aplicado a un siencio sparador de esta forma se alinea por la +izquierda a la posición en que la nota estaría situada dentro del +compás, pero si la longitud del compás está determinada por la +longitud del texto, éste aparecerá centrado. + +" + +doctitlees = "Marcado de silencios multicompás" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = "Textbeschriftungen, die an Mehrtaktpausen gehängt wird, +wird über oder unter der Pause zentriert. Lange Beschriftungen +lassen den Takt nicht breiter werden. Um eine Mehrtaktpause einer +Beschriftung anzupassen, muss eine unsichtbare Pause mit der +Beschriftung direkt vor der Mehrtkatpause eingesetzt werden. + +Man sollte beachten, dass unsichtbare Pausen automatische Taktstriche +nach sich ziehen. Text, der an eine unsichtbare Pause gehänt wird, +ist links ausgerichtet an der Position, wo die Pause erscheinen +würde. Wenn aber die Länge des Taktes durch die Länge des Textes +bestimmt wird, sieht es so aus, als ob der Text zentriert gesetzt +ist." + + doctitlede = "Textbeschriftung und Mehrtaktpausen" + + +%% Translation of GIT committish: e71f19ad847d3e94ac89750f34de8b6bb28611df + texidocfr = " +Lorsque du texte est attaché à un silence multi-mesures, il sera centré +dans la mesure, au-dessus ou en dessous de la portée. Afin d'étirer la +mesure dans le cas ou ce texte est relativement long, il suffit +d'insérer un silence invisible auquel on attache le texte en question, +avant le silence multi-mesures. + +Rappelez-vous qu'un silence invisible génère une barre de mesure. Le +texte attaché à ce silence invisible sera alors aligné sur la gauche de +là où serait positionnée la note. Cependant, si la taille de la mesure +est déterminée par la longueur du texte, il apparaîtra comme centré. + +" + doctitlefr = "Ajout de texte à un silence multi-mesures" + + texidoc = " +Markups attached to a multi-measure rest will be centered above or +below it. Long markups attached to multi-measure rests do not cause +the measure to expand. To expand a multi-measure rest to fit the +markup, use a spacer rest with an attached markup before the +multi-measure rest. + +

    Note that the spacer rest causes a bar line to be inserted. Text +attached to a spacer rest in this way is left-aligned to the position +where the note would be placed in the measure, but if the measure +length is determined by the length of the text, the text will appear to +be centered. + +" + doctitle = "Multi-measure rest markup" +} % begin verbatim + +\relative c' { + \compressFullBarRests + \textLengthOn + s1*0^\markup { [MAJOR GENERAL] } + R1*19 + s1*0_\markup { \italic { Cue: ... it is yours } } + s1*0^\markup { A } + R1*30^\markup { [MABEL] } + \textLengthOff + c4^\markup { CHORUS } d f c +} diff --git a/Documentation/snippets/nesting-staves.ly b/Documentation/snippets/nesting-staves.ly new file mode 100644 index 0000000000..e40e90d917 --- /dev/null +++ b/Documentation/snippets/nesting-staves.ly @@ -0,0 +1,69 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "staff-notation, contexts-and-engravers, tweaks-and-overrides" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Se puede utilizar la propiedad +@code{systemStartDelimiterHierarchy} para crear grupos de +pentagramas anidados de forma más compleja. La instrucción +@code{\\set StaffGroup.systemStartDelimiterHierarchy} toma una +lista alfabética del número de pentagramas producidos. Se puede +proporcionar antes de cada pentagrama un delimitador de comienzo +de sistema. Se debe encerrar entre corchetes y admite tantos +pentagramas como encierren las llaves. Se pueden omitir los +elementos de la lista, pero el primer corchete siempre abarca +todos los pentagramas. Las posibilidades son +@code{SystemStartBar}, @code{SystemStartBracket}, +@code{SystemStartBrace} y @code{SystemStartSquare}. + +" + doctitlees = "Anidado de grupos de pentagramas" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Die Eigenschaft @code{systemStartDelimiterHierarchy} kann eingesetzt +werden, um komplizierte geschachtelte Systemklammern zu erstellen. Der +Befehl @code{\\set StaffGroup.systemStartDelimiterHierarchy} nimmt eine +Liste mit der Anzahl der Systeme, die ausgegeben werden, auf. Vor jedem +System kann eine Systemanfangsklammer angegeben werden. Sie muss in Klammern eingefügt +werden und umfasst so viele Systeme, wie die Klammer einschließt. Elemente +in der Liste können ausgelassen werden, aber die erste Klammer umfasst immer +die gesamte Gruppe. Die Möglichkeiten der Anfangsklammer sind: @code{SystemStartBar}, +@code{SystemStartBracket}, @code{SystemStartBrace} und +@code{SystemStartSquare}. + +" + doctitlede = "Systeme schachteln" + + texidoc = " +The property @code{systemStartDelimiterHierarchy} can be used to make +more complex nested staff groups. The command @code{\\set +StaffGroup.systemStartDelimiterHierarchy} takes an alphabetical list of +the number of staves produced. Before each staff a system start +delimiter can be given. It has to be enclosed in brackets and takes as +much staves as the brackets enclose. Elements in the list can be +omitted, but the first bracket takes always the complete number of +staves. The possibilities are @code{SystemStartBar}, +@code{SystemStartBracket}, @code{SystemStartBrace}, and +@code{SystemStartSquare}. + +" + doctitle = "Nesting staves" +} % begin verbatim + +\new StaffGroup +\relative c'' << + \set StaffGroup.systemStartDelimiterHierarchy + = #'(SystemStartSquare (SystemStartBrace (SystemStartBracket a + (SystemStartSquare b) ) c ) d) + \new Staff { c1 } + \new Staff { c1 } + \new Staff { c1 } + \new Staff { c1 } + \new Staff { c1 } +>> + diff --git a/Documentation/snippets/new/GNUmakefile b/Documentation/snippets/new/GNUmakefile new file mode 100644 index 0000000000..155e3f120f --- /dev/null +++ b/Documentation/snippets/new/GNUmakefile @@ -0,0 +1,6 @@ +depth = ../../.. + +EXTRA_DIST_FILES = README +EXTRA_DIST_FILES += $(call src-wildcard,*.ly) + +include $(depth)/make/stepmake.make diff --git a/Documentation/snippets/new/README b/Documentation/snippets/new/README new file mode 100644 index 0000000000..1b226cf95e --- /dev/null +++ b/Documentation/snippets/new/README @@ -0,0 +1,6 @@ +This directory is for examples of new features in the current +unstable development series. These snippets will be added to LSR +when it supports a version of LilyPond that includes these features. + +See additional instructions in the Contributors' Guide, section +Adding and editing snippets. diff --git a/Documentation/snippets/new/chordchanges-for-fretboards.ly b/Documentation/snippets/new/chordchanges-for-fretboards.ly new file mode 100644 index 0000000000..062f76cae8 --- /dev/null +++ b/Documentation/snippets/new/chordchanges-for-fretboards.ly @@ -0,0 +1,23 @@ +\version "2.13.0" + +\header { + lsrtags = "fretted-strings" + texidoc = "FretBoards can be set to display only when the chord changes +or at the beginning of a new line." + doctitle = "chordChanges for FretBoards" +} + +\include "predefined-guitar-fretboards.ly" + +myChords = \chordmode { + c1 c1 \break + \set chordChanges = ##t + c1 c1 \break + c1 c1 \break +} + +<< + \new ChordNames { \myChords } + \new FretBoards { \myChords } + \new Staff { \myChords } +>> diff --git a/Documentation/snippets/new/making-slurs-with-complex-dash-structure.ly b/Documentation/snippets/new/making-slurs-with-complex-dash-structure.ly new file mode 100644 index 0000000000..e2d1b8cff7 --- /dev/null +++ b/Documentation/snippets/new/making-slurs-with-complex-dash-structure.ly @@ -0,0 +1,36 @@ +\version "2.13.1" + +\header { + lsrtags = "rhythms, expressive-marks" + texidoc = " +Slurs can be made with complex dash patterns by defining +the @code{dash-definition} property. @code{dash-definition} +is a list of @code{dash-elements}. A @code{dash-element} is a +list of parameters defining the dash behavior for a segment of +the slur. + +The slur is defined in terms of the bezier parameter t +which ranges from 0 +at the left end of the slur to 1 at the right end of the slur. +@code{dash-element} is a list @code{(start-t stop-t dash-fraction +dash-period)}. The region of the slur from @code{start-t} to +@code{stop-t} will have a fraction @code{dash-fraction} +of each @code{dash-period} black. @code{dash-period} is +defined in terms of staff spaces. @code{dash-fraction} is +set to 1 for a solid slur. +" + doctitle = "Making slurs with complex dash structure" +} + +\relative c' { + \once \override + Slur #'dash-definition = #'((0 0.3 0.1 0.75) + (0.3 0.6 1 1) + (0.65 1.0 0.4 0.75)) + c( d e f) + \once \override + Slur #'dash-definition = #'((0 0.25 1 1) + (0.3 0.7 0.4 0.75) + (0.75 1.0 1 1)) + c( d e f) +} diff --git a/Documentation/snippets/new/non-default-tuplet-numbers.ly b/Documentation/snippets/new/non-default-tuplet-numbers.ly new file mode 100644 index 0000000000..c72ee01b72 --- /dev/null +++ b/Documentation/snippets/new/non-default-tuplet-numbers.ly @@ -0,0 +1,41 @@ +\version "2.13.1" + +\header { + lsrtags = "rhythms" + + texidoc = " +LilyPond also provides formatting functions to print tuplet numbers different +than the actual fraction, as well as to append a note value to the tuplet +number or tuplet fraction. +" + doctitle = "Non-default tuplet numbers" +} + +\relative c'' { + \once \override TupletNumber #'text = + #(tuplet-number::non-default-tuplet-denominator-text 7) + \times 2/3 { c4. c4. c4. c4. } + \once \override TupletNumber #'text = + #(tuplet-number::non-default-tuplet-fraction-text 12 7) + \times 2/3 { c4. c4. c4. c4. } + \once \override TupletNumber #'text = + #(tuplet-number::append-note-wrapper + (tuplet-number::non-default-tuplet-fraction-text 12 7) "8") + \times 2/3 { c4. c4. c4. c4. } + + \once \override TupletNumber #'text = + #(tuplet-number::append-note-wrapper + tuplet-number::calc-denominator-text "4") + \times 2/3 { c8 c8 c8 c8 c8 c8 } + \once \override TupletNumber #'text = + #(tuplet-number::append-note-wrapper + tuplet-number::calc-fraction-text "4") + \times 2/3 { c8 c8 c8 c8 c8 c8 } + + \once \override TupletNumber #'text = + #(tuplet-number::fraction-with-notes "4." "8") + \times 2/3 { c4. c4. c4. c4. } + \once \override TupletNumber #'text = + #(tuplet-number::non-default-fraction-with-notes 12 "8" 4 "4") + \times 2/3 { c4. c4. c4. c4. } +} diff --git a/Documentation/snippets/new/non-traditional-key-signatures.ly b/Documentation/snippets/new/non-traditional-key-signatures.ly new file mode 100644 index 0000000000..b0f2a629b3 --- /dev/null +++ b/Documentation/snippets/new/non-traditional-key-signatures.ly @@ -0,0 +1,36 @@ +\version "2.13.0" + +\header { + lsrtags = "pitches, staff-notation" + texidoc = " +The commonly used @code{\\key} command sets the @code{keySignature} +property, in the @code{Staff} context. + +To create non-standard key signatures, set this property directly. The +format of this command is a list: + +@code{\\set Staff.keySignature = #`(((octave . step) . alter) ((octave +. step) . alter) ...)} where, for each element in the list, +@code{octave} specifies the octave (0@tie{}being the octave from +middle@tie{}C to the B above), @code{step} specifies the note within the +octave (0@tie{}means@tie{}C and 6@tie{}means@tie{}B), and @code{alter} is +@code{,SHARP ,FLAT ,DOUBLE-SHARP} etc. (Note the leading comma.) + +Alternatively, for each item in the list, using the more concise format +@code{(step . alter)} specifies that the same alteration should hold in all +octaves. + +Here is an example of a possible key signature for generating a whole-tone +scale: +" + doctitle = "Non-traditional key signatures" +} + +\relative c' { + \set Staff.keySignature = #`(((0 . 6) . ,FLAT) + ((0 . 5) . ,FLAT) + ((0 . 3) . ,SHARP)) + c4 d e fis + aes4 bes c2 +} + diff --git a/Documentation/snippets/non-default-tuplet-numbers.ly b/Documentation/snippets/non-default-tuplet-numbers.ly new file mode 100644 index 0000000000..46509bf4c9 --- /dev/null +++ b/Documentation/snippets/non-default-tuplet-numbers.ly @@ -0,0 +1,77 @@ +% Do not edit this file; it is automatically +% generated from Documentation/snippets/new +% This file is in the public domain. +%% Note: this file works from version 2.13.1 +\version "2.13.1" + +\header { +%% Translation of GIT committish: da7ce7d651c3a0d1bfed695f6e952975937a1c79 + texidoces = " +LilyPond también proporciona funciones de formato para imprimir +números de grupo especial diferentes a la propia fracción, así +como para añadir una figura al número o a la fracción de la +agrupación. + +" + + doctitlees = "Números de agrupación especial distintos a los predeterminados" + + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d +texidocde = " +LilyPond stellt auch Formatierungsfunktionen zur Verfügung, mit denen +N-tolennummern gesetzt werden können, die sich von dem eigentlichen Bruch +unterscheiden. Auch ein Notenwert kann zu Nenner oder Zähler des Bruchs +hinzugefügt werden. +" + doctitlede = "Nicht-standard-N-tolennummern" + + +%% Translation of GIT committish: fa7695ea860d7ab2db86581dd5f8bc4f413f6705 + texidocfr = " +LilyPond sait aussi gérer des nolets dont le chiffrage imprimé ne +correspond pas exactement à la fraction de mesure à laquelle ils se +réfèrent, tout comme ceux auxquels une valeur de note vient en complément +au chiffre. +" + doctitlefr = "Nolets au chiffrage inhabituel" + + lsrtags = "rhythms" + + texidoc = " +LilyPond also provides formatting functions to print tuplet numbers different +than the actual fraction, as well as to append a note value to the tuplet +number or tuplet fraction. +" + doctitle = "Non-default tuplet numbers" +} % begin verbatim + + +\relative c'' { + \once \override TupletNumber #'text = + #(tuplet-number::non-default-tuplet-denominator-text 7) + \times 2/3 { c4. c4. c4. c4. } + \once \override TupletNumber #'text = + #(tuplet-number::non-default-tuplet-fraction-text 12 7) + \times 2/3 { c4. c4. c4. c4. } + \once \override TupletNumber #'text = + #(tuplet-number::append-note-wrapper + (tuplet-number::non-default-tuplet-fraction-text 12 7) "8") + \times 2/3 { c4. c4. c4. c4. } + + \once \override TupletNumber #'text = + #(tuplet-number::append-note-wrapper + tuplet-number::calc-denominator-text "4") + \times 2/3 { c8 c8 c8 c8 c8 c8 } + \once \override TupletNumber #'text = + #(tuplet-number::append-note-wrapper + tuplet-number::calc-fraction-text "4") + \times 2/3 { c8 c8 c8 c8 c8 c8 } + + \once \override TupletNumber #'text = + #(tuplet-number::fraction-with-notes "4." "8") + \times 2/3 { c4. c4. c4. c4. } + \once \override TupletNumber #'text = + #(tuplet-number::non-default-fraction-with-notes 12 "8" 4 "4") + \times 2/3 { c4. c4. c4. c4. } +} diff --git a/Documentation/snippets/non-traditional-key-signatures.ly b/Documentation/snippets/non-traditional-key-signatures.ly new file mode 100644 index 0000000000..d32dedd922 --- /dev/null +++ b/Documentation/snippets/non-traditional-key-signatures.ly @@ -0,0 +1,93 @@ +% Do not edit this file; it is automatically +% generated from Documentation/snippets/new +% This file is in the public domain. +%% Note: this file works from version 2.13.0 +\version "2.13.1" + +\header { +%% Translation of GIT committish: da7ce7d651c3a0d1bfed695f6e952975937a1c79 + doctitlees = "Armaduras de tonalidad no tradicionales" + texidoces = " + +La muy utilizada instrucción @code{\\key} establece la propiedad +@code{keySignature} property, dentro del contexto @code{Staff}. + +Para crear armaduras de tonalidad no estándar, ajuste esta +propiedad directamente. El formato de esta instrucción es una +lista: + +@code{\\set Staff.keySignature = #`(((octava . paso) . alteración) +((octava . paso) . alteración) ...)} donde, para cada elemento +dentro de la lista, @code{octava} especifica la octava +(siendo@tie{}cero la octava desde el Do@tie{}central hasta el Si +por encima), @code{paso} especifica la nota dentro de la octava +(cero@tie{}significa@tie{}Do y 6@tie{}significa@tie{}Si), y +@code{alteración} es @code{,SHARP ,FLAT ,DOUBLE-SHARP} +etc. (observe la coma precedente.) + +De forma alternativa, para cada elemento de la lista el uso del +formato más conciso @code{(paso . alteración)} especifica que la +misma alteración debe estar en todas las octavas. + +He aquí un ejemplo de una posible armadura para generar una escala +exátona: +" + + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + doctitlede = "Untypische Tonarten" + texidocde = " +Der üblicherweise benutzte @code{\\key}-Befehl setzt die +@code{keySignature}-Eigenschaft im @code{Staff}-Kontext. + +Um untypische Tonartenvorzeichen zu erstellen, muss man diese Eigenschaft +direkt setzen. Das Format für den Befehl ist eine Liste: @code{ \\set +Staff.keySignature = #`(((Oktave . Schritt) . Alteration) ((Oktave +. Schritt) . Alteration) ...)} wobei für jedes Element in der Liste +@code{Oktave} die Oktave angibt (0@tie{}ist die Oktave vom +eingestrichenen@tie{}C bis zum eingestrichenen@tie{}H), @code{Schritt} gibt +die Note innerhalb der Oktave an (0@tie{}heißt@tie{}C und +6@tie{}heißt@tie{}H), und @code{Alteration} ist @code{,SHARP ,FLAT +,DOUBLE-SHARP} usw. (Beachte das beginnende Komma.) + +Alternativ kann auch jedes Element der Liste mit dem allgemeineren Format +@code{(Schritt . Alteration)} gesetzt werden, wobei dann die Einstellungen +für alle Oktaven gelten. + +Hier ein Beispiel einer möglichen Tonart für eine Ganztonleiter: +" + + lsrtags = "pitches, staff-notation" + texidoc = " +The commonly used @code{\\key} command sets the @code{keySignature} +property, in the @code{Staff} context. + +To create non-standard key signatures, set this property directly. The +format of this command is a list: + +@code{\\set Staff.keySignature = #`(((octave . step) . alter) ((octave +. step) . alter) ...)} where, for each element in the list, +@code{octave} specifies the octave (0@tie{}being the octave from +middle@tie{}C to the B above), @code{step} specifies the note within the +octave (0@tie{}means@tie{}C and 6@tie{}means@tie{}B), and @code{alter} is +@code{,SHARP ,FLAT ,DOUBLE-SHARP} etc. (Note the leading comma.) + +Alternatively, for each item in the list, using the more concise format +@code{(step . alter)} specifies that the same alteration should hold in all +octaves. + +Here is an example of a possible key signature for generating a whole-tone +scale: +" + doctitle = "Non-traditional key signatures" +} % begin verbatim + + +\relative c' { + \set Staff.keySignature = #`(((0 . 6) . ,FLAT) + ((0 . 5) . ,FLAT) + ((0 . 3) . ,SHARP)) + c4 d e fis + aes4 bes c2 +} + diff --git a/Documentation/snippets/orchestra,-choir-and-piano-template.ly b/Documentation/snippets/orchestra,-choir-and-piano-template.ly new file mode 100644 index 0000000000..1aa12b0a19 --- /dev/null +++ b/Documentation/snippets/orchestra,-choir-and-piano-template.ly @@ -0,0 +1,190 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { +%% Translation of GIT committish: 892286cbfdbe89420b8181975032ea975e79d2f5 + texidocfr = " +Ce canevas illustre l'utilisation de contextes @code{StaffGroup} pour +regrouper les instruments selon leur famille, imbriqués dans un +@code{GrandStaff}, ainsi que le recours à la fonction @code{\\transpose} +pour les instruments transpositeurs. Dans tous les identificateurs, la +musique est stockée en ut. Les notes peuvent tout aussi bien être +saisies en ut ou dans la tonalité particulière de l'instrument avant +d'être transposées puis affectées à une variable. + +" + doctitlefr = "Orchestre, chœur et piano" + + lsrtags = "template" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " + +Esta plantilla muestra el uso de contextos @code{StaffGroup} y +@code{GrandStaff} anidados para sub-agrupar instrumentos del mismo +tipo, y el uso de @code{\\transpose} para los instrumentos +transpositores. Toda la música que está dentro de variables se +almacena en Do. La música se puede introducir en Do, o (de forma +alternativa) escribirse en el tono del instrumento y transportada +a Do antes de ser asignada a una variable. + +" + doctitlees = "Plantilla de orquesta, coro y piano" + + texidoc = " +This template demonstrates the use of nested @code{StaffGroup} and +@code{GrandStaff} contexts to sub-group instruments of the same type +together, and the use of @code{\\transpose} for transposing +instruments. All music in variables is stored in C. Music may be +entered in C or, alternatively, entered in the instrument key and +transposed to C before being assigned to a variable. + +" + doctitle = "Orchestra, choir and piano template" +} % begin verbatim + +#(set-global-staff-size 17) + +\paper { + indent = 3.0\cm + short-indent = 1.5\cm +} + +fluteMusic = \relative c { \key c \major c'1 d } +oboeMusic = \relative c { \key c \major c'1 d } +clarinetMusic = \relative c { \key c \major c'1 d } +bassoonMusic = \relative c { \clef bass \key c \major c1 d } +trumpetMusic = \relative c { \key c \major c''1 d } +tromboneMusic = \relative c { \key c \major c1 d } +hornIMusic = \relative c { c'1 d } +hornIIMusic = \relative c { c1 d } +percussionMusic = \relative c { \key c \major c1 d } +sopranoMusic = \relative c'' { \key c \major c1 d } +sopranoLyrics = \lyricmode { Sop -- ra } +altoIMusic = \relative c' { \key c \major c1 d } +altoILyrics = \lyricmode { A -- one } +altoIIMusic = \relative c' { \key c \major c1 d } +altoIILyrics = \lyricmode { A -- two } +tenorMusic = \relative c' { \key c \major c1 d } +tenorLyrics = \lyricmode { Ten -- or } +pianoRHMusic = \relative c { \key c \major c'1 d } +pianoLHMusic = \relative c { \key c \major c1 d } +violinIMusic = \relative c { \key c \major c'1 d } +violinIIMusic = \relative c { \key c \major c'1 d } +violaMusic = \relative c { \clef alto \key c \major c'1 d } +celloMusic = \relative c { \clef bass \key c \major c1 d } +bassMusic = \relative c { \clef "bass_8" \key c \major c,1 d } + +\score { + \new GrandStaff = "GrandStaff_score" << + \new StaffGroup = "StaffGroup_woodwinds" << + \new Staff = "Staff_flute" { + \set Staff.instrumentName = #"Flute" + \fluteMusic + } + \new Staff = "Staff_oboe" { + \set Staff.instrumentName = #"Oboe" + \oboeMusic + } + \new Staff = "Staff_clarinet" { + \set Staff.instrumentName = \markup \concat { "Clarinet in B" \flat } + \transposition bes + \transpose bes c' \clarinetMusic + } + \new Staff = "Staff_bassoon" { + \set Staff.instrumentName = #"Bassoon" + \bassoonMusic + } + >> + \new StaffGroup = "StaffGroup_brass" << + \new GrandStaff << + \new Staff = "Staff_hornI" { + \set Staff.instrumentName = #"Horn I" + \transposition f + \transpose f c' \hornIMusic + } + \new Staff = "Staff_hornII" { + \set Staff.instrumentName = #"Horn II" + \clef bass + \transposition f' + \transpose f c \hornIIMusic + } + >> + \new Staff = "Staff_trumpet" { + \set Staff.instrumentName = #"Trumpet in C" + \trumpetMusic + } + \new Staff = "Staff_trombone" { + \set Staff.instrumentName = #"Trombone" + \clef bass + \tromboneMusic + } + >> + \new RhythmicStaff = "RhythmicStaff_percussion" << + \set RhythmicStaff.instrumentName = #"Percussion" + \percussionMusic + >> + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano" + \new Staff { \pianoRHMusic } + \new Staff { + \clef bass + \pianoLHMusic + } + >> + \new ChoirStaff = "ChoirStaff_choir" << + \new Staff = "Staff_soprano" { + \set Staff.instrumentName = #"Soprano" + \new Voice = "soprano" + \sopranoMusic + } + \new Lyrics \lyricsto "soprano" { \sopranoLyrics } + \new GrandStaff = "GrandStaff_altos" \with { \accepts Lyrics } << + \new Staff = "Staff_altoI" { + \set Staff.instrumentName = #"Alto I" + \new Voice = "altoI" + \altoIMusic + } + \new Lyrics \lyricsto "altoI" { \altoILyrics } + \new Staff = "Staff_altoII" { + \set Staff.instrumentName = #"Alto II" + \new Voice = "altoII" + \altoIIMusic + } + \new Lyrics \lyricsto "altoII" { \altoIILyrics } + >> + \new Staff = "Staff_tenor" { + \set Staff.instrumentName = #"Tenor" + \clef "treble_8" + \new Voice = "tenor" + \tenorMusic + } + \new Lyrics \lyricsto "tenor" { \tenorLyrics } + >> + \new StaffGroup = "StaffGroup_strings" << + \new GrandStaff = "GrandStaff_violins" << + \new Staff = "Staff_violinI" { + \set Staff.instrumentName = #"Violin I" + \violinIMusic + } + \new Staff = "Staff_violinII" { + \set Staff.instrumentName = #"Violin II" + \violinIIMusic + } + >> + \new Staff = "Staff_viola" { + \set Staff.instrumentName = #"Viola" + \violaMusic + } + \new Staff = "Staff_cello" { + \set Staff.instrumentName = #"Cello" + \celloMusic + } + \new Staff = "Staff_bass" { + \set Staff.instrumentName = #"Double Bass" + \bassMusic + } + >> + >> +} diff --git a/Documentation/snippets/ottava-text.ly b/Documentation/snippets/ottava-text.ly new file mode 100644 index 0000000000..e99fa3ae36 --- /dev/null +++ b/Documentation/snippets/ottava-text.ly @@ -0,0 +1,52 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "pitches, text" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Internamente, @code{\\ottava} establece las propiedades +@code{ottavation} (por ejemplo, a @code{\"8va\"} o a +@code{\"8vb\"}) y @code{middleCPosition}. Para sobreescribir el +texto del corchete, ajuste @code{ottavation} después de invocar la +instrucción @code{\\ottava}. + +" + + doctitlees = "Texto de octava alta y baja" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d +texidocde = " +Intern setzt die @code{set-octavation}-Funktion die Eigenschaften +@code{ottavation} (etwa auf den Wert @code{\"8va\"} oder @code{\"8vb\"}) +und @code{middleCPosition}. Um den Text der Oktavierungsklammer zu +ändern, kann @code{ottavation} manuell gesetzt werden, nachdem +@code{set-octavation} benützt wurde. + +" + +doctitlede = "Ottava-Text" + + texidoc = " +Internally, @code{\\ottava} sets the properties @code{ottavation} (for +example, to @code{\"8va\"} or @code{\"8vb\"}) and +@code{middleCPosition}. To override the text of the bracket, set +@code{ottavation} after invoking @code{\\ottava}. + +" + doctitle = "Ottava text" +} % begin verbatim + +{ + \ottava #1 + \set Staff.ottavation = #"8" + c''1 + \ottava #0 + c'1 + \ottava #1 + \set Staff.ottavation = #"Text" + c''1 +} + diff --git a/Documentation/snippets/outputting-the-version-number.ly b/Documentation/snippets/outputting-the-version-number.ly new file mode 100644 index 0000000000..bade2a58ee --- /dev/null +++ b/Documentation/snippets/outputting-the-version-number.ly @@ -0,0 +1,28 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "text, titles" + + texidoc = " +By putting the output of + @code{lilypond-version} into a lyric, it is possible to print the + version number of LilyPond in a score, or in a document generated + with @code{lilypond-book}. Another possibility is to append the + version number to the doc-string, in this manner: + +" + doctitle = "Outputting the version number" +} % begin verbatim + +\score { + \new Lyrics { + \override Score.RehearsalMark #'self-alignment-X = #LEFT + \mark #(string-append "Processed with LilyPond version " (lilypond-version)) + s2 + } +} + + + diff --git a/Documentation/snippets/page-label.ly b/Documentation/snippets/page-label.ly new file mode 100644 index 0000000000..f55e121821 --- /dev/null +++ b/Documentation/snippets/page-label.ly @@ -0,0 +1,59 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "spacing" + + texidoc = " +Page labels may be placed inside music or at top-level, and referred to +in markups. + +" + doctitle = "Page label" +} % begin verbatim + +#(set-default-paper-size "a6") + +#(define-markup-command (toc-line layout props label text) + (symbol? markup?) + (interpret-markup layout props + (markup #:fill-line (text #:page-ref label "8" "?")))) + +\book { + \markup \huge \fill-line { \null Title Page \null } + + \pageBreak + + \label #'toc + \markup \column { + \large \fill-line { \null Table of contents \null } + \toc-line #'toc "Table of contents" + \toc-line #'firstScore "First Score" + \toc-line #'markA "Mark A" + \toc-line #'markB "Mark B" + \toc-line #'markC "Mark C" + \toc-line #'unknown "Unknown label" + } + + \pageBreak + + \label #'firstScore + \score { + \new Staff \relative c' { + c2 c + \mark \markup { + A (page \concat { \page-ref #'markA "0" "?" ) } + } \label #'markA + c2 c + \pageBreak + \mark "B" \label #'markB + d2 d + d2 d + \once \override Score.RehearsalMark #'break-visibility = + #begin-of-line-invisible + \mark "C" \label #'markC + } + \header { piece = "First score" } + } +} diff --git a/Documentation/snippets/paper-and-layout-intro.itely b/Documentation/snippets/paper-and-layout-intro.itely new file mode 100644 index 0000000000..5b654b797f --- /dev/null +++ b/Documentation/snippets/paper-and-layout-intro.itely @@ -0,0 +1,8 @@ +@node Paper and layout +@unnumbered Paper and layout + +@c FIXME not precise enough reference? +@ruser{Spacing issues} + +@lysnippets + diff --git a/Documentation/snippets/paper-and-layout.snippet-list b/Documentation/snippets/paper-and-layout.snippet-list new file mode 100644 index 0000000000..81975b1181 --- /dev/null +++ b/Documentation/snippets/paper-and-layout.snippet-list @@ -0,0 +1,7 @@ +aligning-and-centering-instrument-names.ly +book-parts.ly +changing-the-staff-size.ly +clip-systems.ly +creating-blank-staves.ly +demonstrating-all-headers.ly +table-of-contents.ly diff --git a/Documentation/snippets/percent-repeat-count-visibility.ly b/Documentation/snippets/percent-repeat-count-visibility.ly new file mode 100644 index 0000000000..0d9c36417e --- /dev/null +++ b/Documentation/snippets/percent-repeat-count-visibility.ly @@ -0,0 +1,38 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "repeats, tweaks-and-overrides" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Se pueden mostrar los contadores de las repeticiones del tipo +porcentaje a intervalos regulares mediante el establecimiento de +la propiedad de contexto @code{repeatCountVisibility}. + +" + doctitlees = "Visibilidad del contador de repeticiones de tipo porcentaje" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Prozentwiederholungszähler können in regelmäßigen Intervallen angezeigt +werden, indem man die Eigenschaft @code{repeatCountVisibility} beeinflusst. +" + doctitlede = "Sichtbarkeit von Prozent-Wiederholungen" + + texidoc = " +Percent repeat counters can be shown at regular intervals by setting +the context property @code{repeatCountVisibility}. + +" + doctitle = "Percent repeat count visibility" +} % begin verbatim + +\relative c'' { + \set countPercentRepeats = ##t + \set repeatCountVisibility = #(every-nth-repeat-count-visible 5) + \repeat percent 10 { c1 } \break + \set repeatCountVisibility = #(every-nth-repeat-count-visible 2) + \repeat percent 6 { c1 d1 } +} diff --git a/Documentation/snippets/percent-repeat-counter.ly b/Documentation/snippets/percent-repeat-counter.ly new file mode 100644 index 0000000000..ecdac591f3 --- /dev/null +++ b/Documentation/snippets/percent-repeat-counter.ly @@ -0,0 +1,37 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "repeats" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Las repeticiones de compases completos mayores de dos repeticiones +pueden llevar un contador si se activa la propiedad adecuada, como se +ve en este ejemplo: + +" + doctitlees = "Percent repeat counter" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Ganztaktwiederholungen mit mehr als zwei Wiederholungen erhalten einen +Zähler, wenn man die entsprechende Eigenschaft einsetzt: + +" + doctitlede = "Prozent-Wiederholungen zählen" + + texidoc = " +Measure repeats of more than two repeats can get a counter when the +convenient property is switched, as shown in this example: + +" + doctitle = "Percent repeat counter" +} % begin verbatim + +\relative c'' { + \set countPercentRepeats = ##t + \repeat percent 4 { c1 } +} + diff --git a/Documentation/snippets/percussion-beaters.ly b/Documentation/snippets/percussion-beaters.ly new file mode 100644 index 0000000000..b891c760e7 --- /dev/null +++ b/Documentation/snippets/percussion-beaters.ly @@ -0,0 +1,158 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "percussion" + + texidoc = " +Graphic symbols for percussion instruments are not natively supported; +however it is possible to include such symbols, either as an external +EPS file or as embedded PostScript code inside a markup, as +demonstrated in this example. + +" + doctitle = "Percussion beaters" +} % begin verbatim + +stick = \markup { + \with-dimensions #'(0 . 5) #'(0 . 5) + \postscript #" + 0 6 translate + 0.8 -0.8 scale + 0 0 0 setrgbcolor + [] 0 setdash + 1 setlinewidth + 0 setlinejoin + 0 setlinecap + gsave [1 0 0 1 0 0] concat + gsave [1 0 0 1 -3.5406095 -199.29342] concat + gsave + 0 0 0 setrgbcolor + newpath + 7.1434065 200.94354 moveto + 7.2109628 200.90454 7.2785188 200.86554 7.3460747 200.82654 curveto + 8.2056347 202.31535 9.0651946 203.80414 9.9247546 205.29295 curveto + 9.8571989 205.33195 9.7896429 205.37095 9.7220864 205.40996 curveto + 8.8625264 203.92115 8.0029664 202.43233 7.1434065 200.94354 curveto + closepath + eofill + grestore + gsave + 0 0 0 setrgbcolor + newpath + 4.9646672 203.10444 moveto + 5.0036707 203.03688 5.0426744 202.96933 5.0816777 202.90176 curveto + 6.5704792 203.76133 8.0592809 204.6209 9.5480824 205.48045 curveto + 9.5090791 205.54801 9.4700754 205.61556 9.4310717 205.68311 curveto + 7.94227 204.82356 6.4534687 203.96399 4.9646672 203.10444 curveto + closepath + eofill + grestore + gsave + << + /ShadingType 3 + /ColorSpace /DeviceRGB + /Coords [113.13708 207.87465 0 113.13708 207.87465 16.162441] + /Extend [true true] + /Domain [0 1] + /Function << + /FunctionType 3 + /Functions + [ + << + /FunctionType 2 + /Domain [0 1] + /C0 [1 1 1] + /C1 [0.72941178 0.72941178 0.72941178] + /N 1 + >> + ] + /Domain [0 1] + /Bounds [ ] + /Encode [ 0 1 ] + >> + >> + newpath + 7.6422017 200.76488 moveto + 7.6505696 201.02554 7.3905363 201.24867 7.1341335 201.20075 curveto + 6.8759501 201.16916 6.6949602 200.87978 6.7801462 200.63381 curveto + 6.8480773 200.39155 7.1438307 200.25377 7.3728389 200.35861 curveto + 7.5332399 200.42458 7.6444521 200.59122 7.6422017 200.76488 curveto + closepath + clip + gsave [0.052859054 0.063089841 -0.020912282 0.017521108 5.7334261 189.76443] concat + shfill + grestore + grestore + 0 0 0 setrgbcolor + [] 0 setdash + 0.027282091 setlinewidth + 0 setlinejoin + 0 setlinecap + newpath + 7.6422017 200.76488 moveto + 7.6505696 201.02554 7.3905363 201.24867 7.1341335 201.20075 curveto + 6.8759501 201.16916 6.6949602 200.87978 6.7801462 200.63381 curveto + 6.8480773 200.39155 7.1438307 200.25377 7.3728389 200.35861 curveto + 7.5332399 200.42458 7.6444521 200.59122 7.6422017 200.76488 curveto + closepath + stroke + gsave + << + /ShadingType 3 + /ColorSpace /DeviceRGB + /Coords [113.13708 207.87465 0 113.13708 207.87465 16.162441] + /Extend [true true] + /Domain [0 1] + /Function << + /FunctionType 3 + /Functions + [ + << + /FunctionType 2 + /Domain [0 1] + /C0 [1 1 1] + /C1 [0.72941178 0.72941178 0.72941178] + /N 1 + >> + ] + /Domain [0 1] + /Bounds [ ] + /Encode [ 0 1 ] + >> + >> + newpath + 5.2721217 202.83181 moveto + 5.2804896 203.09247 5.0204563 203.3156 4.7640539 203.26768 curveto + 4.5058701 203.23609 4.3248803 202.94671 4.4100662 202.70074 curveto + 4.4779975 202.45848 4.7737511 202.3207 5.0027593 202.42554 curveto + 5.1631598 202.49149 5.2743721 202.65813 5.2721217 202.83181 curveto + closepath + clip + gsave [0.052859054 0.063089841 -0.020912282 0.017521108 3.363346 191.83136] concat + shfill + grestore + grestore + 0 0 0 setrgbcolor + [] 0 setdash + 0.027282091 setlinewidth + 0 setlinejoin + 0 setlinecap + newpath + 5.2721217 202.83181 moveto + 5.2804896 203.09247 5.0204563 203.3156 4.7640539 203.26768 curveto + 4.5058701 203.23609 4.3248803 202.94671 4.4100662 202.70074 curveto + 4.4779975 202.45848 4.7737511 202.3207 5.0027593 202.42554 curveto + 5.1631598 202.49149 5.2743721 202.65813 5.2721217 202.83181 curveto + closepath + stroke + grestore + grestore + " +} + +\score { + b1^\stick +} + diff --git a/Documentation/snippets/percussion-intro.itely b/Documentation/snippets/percussion-intro.itely new file mode 100644 index 0000000000..68369ab077 --- /dev/null +++ b/Documentation/snippets/percussion-intro.itely @@ -0,0 +1,7 @@ +@node Percussion +@unnumbered Percussion + +@ruser{Percussion} + +@lysnippets + diff --git a/Documentation/snippets/percussion.snippet-list b/Documentation/snippets/percussion.snippet-list new file mode 100644 index 0000000000..5a29fb2c15 --- /dev/null +++ b/Documentation/snippets/percussion.snippet-list @@ -0,0 +1,5 @@ +adding-drum-parts.ly +heavily-customized-polymetric-time-signatures.ly +jazz-combo-template.ly +percussion-beaters.ly +printing-music-with-different-time-signatures.ly diff --git a/Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly b/Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly new file mode 100644 index 0000000000..71f291bb12 --- /dev/null +++ b/Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly @@ -0,0 +1,64 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "rhythms" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + doctitlees = "Permitir saltos de línea dentro de grupos especiales con barra" + texidoces = " +Este ejemplo artificial muestra cómo se pueden permitir tanto los +saltos de línea manuales como los automáticos dentro de un grupo de +valoración especial unido por una barra. Observe que estos grupos +sincopados se deben barrar manualmente. + +" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Dieses künstliche Beispiel zeigt, wie sowohl automatische als auch +manuelle Zeilenumbrüche innerhalb einer N-tole mit Balken erlaubt +werden können. Diese unregelmäßige Bebalkung muss allerdings manuell +gesetzt werden. + +" + doctitlede = "Zeilenumbrüche bei N-tolen mit Balken erlauben" + + +%% Translation of GIT committish: e71f19ad847d3e94ac89750f34de8b6bb28611df + texidocfr = " +Cet exemple peu académique démontre comment il est possible d'insérer un saut +de ligne dans un nolet portant une ligature. Ces ligatures doivent toutefois +être explicites. + +" + doctitlefr = "Saut de ligne au milieu d'un nolet avec ligature" + + texidoc = " +This artificial example shows how both manual and automatic line breaks +may be permitted to within a beamed tuplet. Note that such off-beat +tuplets have to be beamed manually. + +" + doctitle = "Permitting line breaks within beamed tuplets" +} % begin verbatim + +\layout { + \context { + \Voice + % Permit line breaks within tuplets + \remove "Forbid_line_break_engraver" + % Allow beams to be broken at line breaks + \override Beam #'breakable = ##t + } +} +\relative c'' { + a8 + \repeat unfold 5 { \times 2/3 { c[ b a] } } + % Insert a manual line break within a tuplet + \times 2/3 { c[ b \bar "" \break a] } + \repeat unfold 5 { \times 2/3 { c[ b a] } } + c8 +} + diff --git a/Documentation/snippets/piano-template-simple.ly b/Documentation/snippets/piano-template-simple.ly new file mode 100644 index 0000000000..8b6d9023df --- /dev/null +++ b/Documentation/snippets/piano-template-simple.ly @@ -0,0 +1,62 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { +%% Translation of GIT committish: 9ba35398048fdf1ca8c83679c7c144b1fd48e75b + texidocfr = " +Voici une simple partition pour piano avec quelques notes. + +" + doctitlefr = "Piano -- cannevas simple" + + lsrtags = "keyboards, template" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Presentamos a continuación una plantilla de piano sencilla con algunas +notas. + +" + doctitlees = "Plantilla de piano (sencilla)" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Hier ein einfaches Klaviersystem. + +" + doctitlede = "Vorlage für einfache Klaviernotation" + + texidoc = " +Here is a simple piano staff with some notes. + +" + doctitle = "Piano template (simple)" +} % begin verbatim + +upper = \relative c'' { + \clef treble + \key c \major + \time 4/4 + + a4 b c d +} + +lower = \relative c { + \clef bass + \key c \major + \time 4/4 + + a2 c +} + +\score { + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano " + \new Staff = "upper" \upper + \new Staff = "lower" \lower + >> + \layout { } + \midi { } +} + diff --git a/Documentation/snippets/piano-template-with-centered-dynamics.ly b/Documentation/snippets/piano-template-with-centered-dynamics.ly new file mode 100644 index 0000000000..4140af1b87 --- /dev/null +++ b/Documentation/snippets/piano-template-with-centered-dynamics.ly @@ -0,0 +1,118 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { +%% Translation of GIT committish: 9ba35398048fdf1ca8c83679c7c144b1fd48e75b + texidocfr = " +Nombre d'ouvrages pour piano font apparaître les nuances entre les deux +portées. Bien que cela nécessite quelques subtilités, voici de quoi +obtenir un tel résultat. + +" + doctitlefr = "Piano et nuances entre les portées" + + lsrtags = "expressive-marks, keyboards, template" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Muchas partituras de piano tienen las indicaciones dinámicas +centradas entre los dos pentagramas. Esto requiere un poco de +trucaje, pero puesto que la plantilla está aquí mismo, no tenemos +que hacer este trucaje por nuestra cuenta. + +" + doctitlees = "Plantilla de piano con matices centrados" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +In der meisten Klaviernotation werden die Dynamikzeichen zwischen +den beiden Systemen zentriert. Für LilyPond muss man die Einstellungen +etwas anpassen, aber Sie können ja das angepasste Beispiel von hier +kopieren. +" + +%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae + texidocja = " +多くのピアノ譜は、強弱記号を 2 つの譜の間に置きます。これを実現するにはちょっ@c +とした調整が必要ですが、そのテンプレートがここにあるので、あなた自身が調整を行@c +う必要はありません。 +" + + texidoc = " +Many piano scores have the dynamics centered between the two staves. +This requires a bit of tweaking to implement, but since the template is +right here, you don't have to do the tweaking yourself. + +" + doctitle = "Piano template with centered dynamics" +} % begin verbatim + +global = { + \key c \major + \time 4/4 +} + +upper = \relative c'' { + \clef treble + a4 b c d +} + +lower = \relative c { + \clef bass + a2 c +} + +dynamics = { + s2\fff\> s4 s\!\pp +} + +pedal = { + s2\sustainOn s\sustainOff +} + +\score { + \new PianoStaff = "PianoStaff_pf" << + \new Staff = "Staff_pfUpper" << \global \upper >> + \new Dynamics = "Dynamics_pf" \dynamics + \new Staff = "Staff_pfLower" << \global \lower >> + \new Dynamics = "pedal" \pedal + >> + + \layout { + % define Dynamics context + \context { + \type "Engraver_group" + \name Dynamics + \alias Voice + \consists "Output_property_engraver" + \consists "Piano_pedal_engraver" + \consists "Script_engraver" + \consists "New_dynamic_engraver" + \consists "Dynamic_align_engraver" + \consists "Text_engraver" + \consists "Skip_event_swallow_translator" + \consists "Axis_group_engraver" + + pedalSustainStrings = #'("Ped." "*Ped." "*") + pedalUnaCordaStrings = #'("una corda" "" "tre corde") + \override DynamicLineSpanner #'Y-offset = #0 + \override TextScript #'font-size = #2 + \override TextScript #'font-shape = #'italic + \override VerticalAxisGroup #'minimum-Y-extent = #'(-1 . 1) + } + % modify PianoStaff context to accept Dynamics context + \context { + \PianoStaff + \accepts Dynamics + } + } +} + +\score { + \new PianoStaff = "PianoStaff_pf" << + \new Staff = "Staff_pfUpper" << \global \upper \dynamics \pedal >> + \new Staff = "Staff_pfLower" << \global \lower \dynamics \pedal >> + >> + \midi { } +} diff --git a/Documentation/snippets/piano-template-with-centered-lyrics.ly b/Documentation/snippets/piano-template-with-centered-lyrics.ly new file mode 100644 index 0000000000..0bcaf92a0f --- /dev/null +++ b/Documentation/snippets/piano-template-with-centered-lyrics.ly @@ -0,0 +1,83 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { +%% Translation of GIT committish: 892286cbfdbe89420b8181975032ea975e79d2f5 + texidocfr = " +Lorsque la mélodie est doublée au piano, cela ne nécessite pas forcément +une portée spécifique. Les paroles peuvent s'insérer entre les deux +portées de la partition pour piano. + +" + doctitlefr = "Piano et paroles entre les portées" + + lsrtags = "text, keyboards, template" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +En lugar de tener un pentagrama dedicado a la melodía y la letra, ésta +se puede centrar entre los pentagramas de un sistema de piano. + +" + doctitlees = "Plantilla de piano con letra centrada" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Anstatt ein eigenes System für Melodie und Text zu schreiben, können +Sie den Text auch zwischen die beiden Klaviersysteme schreiben +(und damit das zusätzliche System für die Gesangstimme auslassen). +" + +%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae + texidocja = " +旋律と歌詞のための譜表を持つ代わりに、歌詞をピアノ譜の 2 つの譜の間に置くことができます。 +" + + texidoc = " +Instead of having a full staff for the melody and lyrics, lyrics can be +centered between the staves of a piano staff. + +" + doctitle = "Piano template with centered lyrics" +} % begin verbatim + +upper = \relative c'' { + \clef treble + \key c \major + \time 4/4 + + a4 b c d +} + +lower = \relative c { + \clef bass + \key c \major + \time 4/4 + + a2 c +} + +text = \lyricmode { + Aaa Bee Cee Dee +} + +\score { + \new GrandStaff << + \new Staff = upper { \new Voice = "singer" \upper } + \new Lyrics \lyricsto "singer" \text + \new Staff = lower { \lower } + >> + \layout { + \context { + \GrandStaff + \accepts "Lyrics" + } + \context { + \Lyrics + \consists "Bar_engraver" + } + } + \midi { } +} + diff --git a/Documentation/snippets/piano-template-with-melody-and-lyrics.ly b/Documentation/snippets/piano-template-with-melody-and-lyrics.ly new file mode 100644 index 0000000000..81df0e6984 --- /dev/null +++ b/Documentation/snippets/piano-template-with-melody-and-lyrics.ly @@ -0,0 +1,87 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { +%% Translation of GIT committish: 9ba35398048fdf1ca8c83679c7c144b1fd48e75b + texidocfr = " +Il s'agit du format classique pour le chant : une portée pour la mélodie +et les paroles au-dessus de l'accompagnement au piano. + +" + doctitlefr = "Piano, mélodie et paroles" + + lsrtags = "vocal-music, keyboards, template" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +He aquí el típico formato dde una canción: un pentagrama con la +melodía y la letra, y el acompañamiento de piano por debajo. + +" + doctitlees = "Plantilla de piano con melodía y letra" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Das nächste Beispiel ist typisch für ein Lied: Im oberen System die +Melodie mit Text, darunter Klavierbegleitung. +" + + doctitlede = "Vorlage für Klavier und Gesangsstimme" + +%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae + texidocja = " +これは一般的な歌曲のフォーマットです: 旋律と歌詞を持つ譜表と、その下にピアノ伴奏譜があります。 +" + + texidoc = " +Here is a typical song format: one staff with the melody and lyrics, +with piano accompaniment underneath. + +" + doctitle = "Piano template with melody and lyrics" +} % begin verbatim + +melody = \relative c'' { + \clef treble + \key c \major + \time 4/4 + + a b c d +} + +text = \lyricmode { + Aaa Bee Cee Dee +} + +upper = \relative c'' { + \clef treble + \key c \major + \time 4/4 + + a4 b c d +} + +lower = \relative c { + \clef bass + \key c \major + \time 4/4 + + a2 c +} + +\score { + << + \new Voice = "mel" { \autoBeamOff \melody } + \new Lyrics \lyricsto mel \text + \new PianoStaff << + \new Staff = "upper" \upper + \new Staff = "lower" \lower + >> + >> + \layout { + \context { \RemoveEmptyStaffContext } + } + \midi { } +} + diff --git a/Documentation/snippets/pitches-intro.itely b/Documentation/snippets/pitches-intro.itely new file mode 100644 index 0000000000..7ca94ff7a2 --- /dev/null +++ b/Documentation/snippets/pitches-intro.itely @@ -0,0 +1,7 @@ +@node Pitches +@unnumbered Pitches + +@ruser{Pitches} + +@lysnippets + diff --git a/Documentation/snippets/pitches.snippet-list b/Documentation/snippets/pitches.snippet-list new file mode 100644 index 0000000000..d6f0217428 --- /dev/null +++ b/Documentation/snippets/pitches.snippet-list @@ -0,0 +1,17 @@ +adding-ambitus-per-voice.ly +ambitus-with-multiple-voices.ly +ambitus.ly +applying-note-head-styles-depending-on-the-step-of-the-scale.ly +coloring-notes-depending-on-their-pitch.ly +creating-a-sequence-of-notes-on-various-pitches.ly +dodecaphonic-style-accidentals-for-each-note-including-naturals.ly +generating-random-notes.ly +makam-example.ly +non-traditional-key-signatures.ly +ottava-text.ly +preventing-extra-naturals-from-being-automatically-added.ly +preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly +quoting-another-voice-with-transposition.ly +separating-key-cancellations-from-key-signature-changes.ly +transposing-pitches-with-minimum-accidentals-smart-transpose.ly +tweaking-clef-properties.ly diff --git a/Documentation/snippets/placement-of-right-hand-fingerings.ly b/Documentation/snippets/placement-of-right-hand-fingerings.ly new file mode 100644 index 0000000000..caed7dd2a0 --- /dev/null +++ b/Documentation/snippets/placement-of-right-hand-fingerings.ly @@ -0,0 +1,59 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "fretted-strings" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Es posible ejercer un mayor control sobre la colocación de las +digitaciones de la mano derecha estableciendo el valor de una +propiedad específica, como se muestra en el ejemplo siguiente. + +" + doctitlees = "Posicionamiento de digitaciones de mano derecha" + +%% Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 + + texidocfr = " +Vous disposez d'une propriété spécifique qui permet de contrôler plus +finement le positionnement des doigtés main droite, comme l'indique +l'exemple suivant. + +" + doctitlefr = "Positionnement des doigtés main droite" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Man kann die Positionierung von Fingersatz der rechten Hand besser +kontrollieren, wenn eine bestimmte Eigenschaft gesetzt wird, wie +das folgende Beispiel zeigt: + +" + doctitlede = "Positionierung von Fingersatz der rechten Hand" + + texidoc = " +It is possible to exercise greater control over the placement of +right-hand fingerings by setting a specific property, as demonstrated +in the following example. + +" + doctitle = "Placement of right-hand fingerings" +} % begin verbatim + +#(define RH rightHandFinger) + +\relative c { + \clef "treble_8" + + \set strokeFingerOrientations = #'(up down) + 4 + + \set strokeFingerOrientations = #'(up right down) + 4 + + \set strokeFingerOrientations = #'(left) + 2 +} + diff --git a/Documentation/snippets/polyphony-in-tablature.ly b/Documentation/snippets/polyphony-in-tablature.ly new file mode 100644 index 0000000000..83fbd3ddca --- /dev/null +++ b/Documentation/snippets/polyphony-in-tablature.ly @@ -0,0 +1,69 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "fretted-strings" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +La polifonía se crea de la misma forma en un @code{TabStaff} que +en una pauta normal. + +" + doctitlees = "Polifonía en tablaturas" + +%% Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 + + texidocfr = " +Une section polyphonique s'obtient dans un @code{TabStaff} de la +même manière que dans une portée normale. + +" + doctitlefr = "Polyphonie en mode tablature" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Polyphonie kann in einer Tabulatur (@code{TabStaff}) genauso wie in einem +normalen Notensystem erstellt werden. + +" + doctitlede = "Polyphonie in einer Tabulatur" + + texidoc = " +Polyphony is created the same way in a @code{TabStaff} as in a regular +staff. + +" + doctitle = "Polyphony in tablature" +} % begin verbatim + +upper = \relative c' { + \time 12/8 + \key e \minor + \voiceOne + r4. r8 e, fis g16 b g e e' b c b a g fis e +} + +lower = \relative c { + \key e \minor + \voiceTwo + r16 e d c b a g4 fis8 e fis g a b c +} + +\score { + << + \new StaffGroup = "tab with traditional" << + \new Staff = "guitar traditional" << + \clef "treble_8" + \context Voice = "upper" \upper + \context Voice = "lower" \lower + >> + \new TabStaff = "guitar tab" << + \context TabVoice = "upper" \upper + \context TabVoice = "lower" \lower + >> + >> + >> +} + diff --git a/Documentation/snippets/positioning-fingering-indications-precisely.ly b/Documentation/snippets/positioning-fingering-indications-precisely.ly new file mode 100644 index 0000000000..b9d2d9d329 --- /dev/null +++ b/Documentation/snippets/positioning-fingering-indications-precisely.ly @@ -0,0 +1,34 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "editorial-annotations" + + texidoc = " +Generally the options available for positioning the fingering of chords +work well by default, but if one of the indications needs to positioned +more precisely the following tweak may be used. This is particularly +useful for correcting the positioning when intervals of a second are +involved. + +" + doctitle = "Positioning fingering indications precisely" +} % begin verbatim + +\relative c' { + \set fingeringOrientations = #'(left) + 4 + 4 + \set fingeringOrientations = #'(down) + 4 + 4 + \set fingeringOrientations = #'(down right up) + 4 + 4 + \set fingeringOrientations = #'(up) + 4 + 4 +} + + diff --git a/Documentation/snippets/positioning-grace-notes-with-floating-space.ly b/Documentation/snippets/positioning-grace-notes-with-floating-space.ly new file mode 100644 index 0000000000..524481944f --- /dev/null +++ b/Documentation/snippets/positioning-grace-notes-with-floating-space.ly @@ -0,0 +1,70 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { +%% Translation of GIT committish: 21c8461ea87cd670a35a40b91d3ef20de03a0409 + texidocfr = " +Lorsque vous activez la propriété @code{'strict-grace-spacing}, +l'espacement des notes d'ornement se fera de manière @qq{élastique}. +Autrement dit, elles seront décollées de leur note de rattachement : +LilyPond commence par espacer les notes normales, puis les ornements +sont placés à la gauche de leur note de rattachement. + +" + doctitlefr = "Positionnement des notes d'ornement avec espace flottant" + + lsrtags = "rhythms" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " + +Al establecer la propiedad @code{'strict-grace-spacing} hacemos +que las columnas musicales para las notas de adorno sean +'flotantes', es decir, desacopladas de las notas que no son de +adorno: primero se aplica el espaciado de las notas normales, y +luego se ponen las columnas musicales de las notas de adorno a la +izquierda de las columnas musicales de las notas principales. + +" + + doctitlees = "Posicionamiento de las notas de adorno con espacio flotante" + + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Wenn man die Eigenschaft @code{'strict-grace-spacing} aktiviert, +werden die Verzierungsnoten \"fließend\" gemacht, d.h. sie sind +von den normalen Noten los gekoppelt: Zuerst werden die normalen +Noten platziert, dann erst die Verzierungen links von der +Hauptnote gesetzt. + +" + doctitlede = "Positionierung von Verzierungen mit verschiebbarem Platz" + + + + texidoc = " +Setting the property @code{'strict-grace-spacing} makes the musical +columns for grace notes 'floating', i.e., decoupled from the non-grace +notes: first the normal notes are spaced, then the (musical columns of +the) graces are put left of the musical columns for the main notes. + +" + doctitle = "Positioning grace notes with floating space" +} % begin verbatim + +\relative c'' { + << + \override Score.SpacingSpanner #'strict-grace-spacing = ##t + \new Staff \new Voice { + \afterGrace c4 { c16[ c8 c16] } + c8[ \grace { b16[ d] } c8] + c4 r + } + \new Staff { + c16 c c c c c c c c4 r + } + >> +} + diff --git a/Documentation/snippets/positioning-multi-measure-rests.ly b/Documentation/snippets/positioning-multi-measure-rests.ly new file mode 100644 index 0000000000..d544a4c208 --- /dev/null +++ b/Documentation/snippets/positioning-multi-measure-rests.ly @@ -0,0 +1,81 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "rhythms, tweaks-and-overrides" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + doctitlees = "Posicionar los silencios multicompás" + texidoces = " +A diferencia de los silencios normales, no existe una instrucción +predefinida para modificar la posición predeterminada de un +símbolo de silencio multicompás sobre el pentagrama, adjuntándolo +a una nota, independientemente de cuál sea su forma. Sin embargo, +en la música polifónica los silencios multicompás de las voces de +numeración par e impar están separados verticalmente. La +colocación de los silencios multicompás se puede controlar como se +ve a continuación: + +" +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d +texidocde = " +Anders als bei normalen Pausen gibt es keinen direkten Befehl, um die +vertikale Position von Ganztaktpausen zu beeinflussen, indem man sie an +eine Tonhöhe anhängt. In polyphoner Notation wird aber dennoch die +Position der Pausen von geraden und ungeraden Stimmen voneinander +unterschieden. Die Position von Ganztaktpausen kann wie folgt verändert +werden: + " + doctitlede = "Positionierung von Ganztaktpausen" + + +%% Translation of GIT committish: e71f19ad847d3e94ac89750f34de8b6bb28611df + texidocfr = " +Si l'on peut positionner verticalement un silence simple en le +rattachant à une note, il n'en va pas de même pour un silence +multi-mesures. Néanmoins, et uniquement dans le cadre de musique +polyphonique, les silences multi-mesures sont positionnés différemment +selon qu'ils appartiennent à une voix au numéro pair ou impair. Le +positionnement des silences multi-mesures peut se contrôler ainsi : +" + doctitlefr = "Positionnement des silences multi-mesures" + + texidoc = " +Unlike ordinary rests, there is no predefined command to change the +staff position of a multi-measure rest symbol of either form by +attaching it to a note. However, in polyphonic music multi-measure +rests in odd-numbered and even-numbered voices are vertically +separated. The positioning of multi-measure rests can be controlled as +follows: + +" + doctitle = "Positioning multi-measure rests" +} % begin verbatim + +\relative c'' { + % Multi-measure rests by default are set under the second line + R1 + % They can be moved with an override + \override MultiMeasureRest #'staff-position = #-2 + R1 + % A value of 0 is the default position; + % the following trick moves the rest to the center line + \override MultiMeasureRest #'staff-position = #-0.01 + R1 + % Multi-measure rests in odd-numbered voices are under the top line + << { R1 } \\ { a1 } >> + % Multi-measure rests in even-numbered voices are under the bottom line + << { c1 } \\ { R1 } >> + % They remain separated even in empty measures + << { R1 } \\ { R1 } >> + % This brings them together even though there are two voices + \compressFullBarRests + << + \revert MultiMeasureRest #'staff-position + { R1*3 } + \\ + \revert MultiMeasureRest #'staff-position + { R1*3 } + >> +} diff --git a/Documentation/snippets/positioning-segno-and-coda-with-line-break.ly b/Documentation/snippets/positioning-segno-and-coda-with-line-break.ly new file mode 100644 index 0000000000..93f81eaf40 --- /dev/null +++ b/Documentation/snippets/positioning-segno-and-coda-with-line-break.ly @@ -0,0 +1,119 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "repeats, breaks" + + texidoc = " +If you want to place an exiting segno sign and add text like \"D.S. al +Coda\" next to it where usually the staff lines are you can use this +snippet. The coda will resume in a new line. There is a variation +documented in this snippet, where the coda will remain on the same +line. + +" + doctitle = "Positioning segno and coda (with line break)" +} % begin verbatim + +{ + \clef treble + \key g \major + \time 4/4 + \relative c'' { + \repeat unfold 2 { + | c4 c c c + } + + % Set segno sign as rehearsal mark and adjust size if needed + % \once \override Score.RehearsalMark #'font-size = #3 + \mark \markup { \musicglyph #"scripts.segno" } + \repeat unfold 2 { + | c4 c c c + } + + % Set coda sign as rehearsal mark and adjust size if needed + \once \override Score.RehearsalMark #'font-size = #4 + \mark \markup { \musicglyph #"scripts.coda" } + \repeat unfold 2 { + | c4 c c c + } + + % Should Coda be on anew line? + % Coda NOT on new line: use \nobreak + % Coda on new line: DON'T use \nobreak + % \noBreak + + \bar "||" + + % Set segno sign as rehearsal mark and adjust size if needed + \once \override Score.RehearsalMark #'break-visibility = #begin-of-line-invisible + % \once \override Score.RehearsalMark #'font-size = #3 + \mark \markup { \musicglyph #"scripts.segno" } + + % Here begins the trickery! + % \cadenzaOn will suppress the bar count and \stopStaff removes the staff lines. + \cadenzaOn + \stopStaff + % Some examples of possible text-displays + + % text line-aligned + % ================== + % Move text to the desired position + % \once \override TextScript #'extra-offset = #'( 2 . -3.5 ) + % | s1*0^\markup { D.S. al Coda } } + + % text center-aligned + % ==================== + % Move text to the desired position + % \once \override TextScript #'extra-offset = #'( 6 . -5.0 ) + % | s1*0^\markup { \center-column { D.S. "al Coda" } } + + % text and symbols center-aligned + % =============================== + % Move text to the desired position and tweak spacing for optimum text alignment + %\once \override TextScript #'extra-offset = #'( 8 . -5.5 ) + \once \override TextScript #'word-space = #1.5 + \once \override TextScript #'X-offset = #8 + \once \override TextScript #'Y-offset = #1.5 + | s1*0^\markup { \center-column { "D.S. al Coda" \line { \musicglyph #"scripts.coda" \musicglyph #"scripts.tenuto" \musicglyph #"scripts.coda"} } } + + % Increasing the unfold counter will expand the staff-free space + \repeat unfold 4 { + s4 s4 s4 s4 + \bar "" + } + % Resume bar count and show staff lines again + \startStaff + \cadenzaOff + + % Should Coda be on new line? + % Coda NOT on new line: DON'T use \break + % Coda on new line: use \break + \break + + % Show up, you clef and key! + \once \override Staff.KeySignature #'break-visibility = #end-of-line-invisible + \once \override Staff.Clef #'break-visibility = #end-of-line-invisible + + % Set coda sign as rehearsal mark and adjust size and position + + % Put the coda sign ontop of the (treble-)clef dependend on coda's line-position + + % Coda NOT on new line, use this: + % \once \override Score.RehearsalMark #'extra-offset = #'( -2 . 1.75 ) + + % Coda on new line, use this: + \once \override Score.RehearsalMark #'extra-offset = #'( -8.42 . 1.75 ) + + \once \override Score.RehearsalMark #'font-size = #5 + \mark \markup { \musicglyph #"scripts.coda" } + + % The coda + \repeat unfold 5 { + | c4 c c c + } + \bar"|." + } +} + diff --git a/Documentation/snippets/positioning-text-markups-inside-slurs.ly b/Documentation/snippets/positioning-text-markups-inside-slurs.ly new file mode 100644 index 0000000000..011a2f5e2a --- /dev/null +++ b/Documentation/snippets/positioning-text-markups-inside-slurs.ly @@ -0,0 +1,40 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "expressive-marks, editorial-annotations, tweaks-and-overrides" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " + +Los elementos de marcado de texto deben tener la propiedad +@code{outside-staff-priority} establecida al valor falso para que se +impriman por dentro de las ligaduras de expresión. + +" + doctitlees = "Situar los elementos de marcado de texto por dentro de las ligaduras" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Textbeschriftung kann innerhalb von Bögen gesetzt werden, wenn die +@code{outside-staff-priority}-Eigenschaft auf falsch gesetzt wird. + +" + doctitlede = "Textbeschriftung innerhalb von Bögen positionieren" + + texidoc = " +Text markups need to have the @code{outside-staff-priority} property +set to false in order to be printed inside slurs. + +" + doctitle = "Positioning text markups inside slurs" +} % begin verbatim + +\relative c'' { + \override TextScript #'avoid-slur = #'inside + \override TextScript #'outside-staff-priority = ##f + c2(^\markup { \halign #-10 \natural } d4.) c8 +} + + diff --git a/Documentation/snippets/preventing-extra-naturals-from-being-automatically-added.ly b/Documentation/snippets/preventing-extra-naturals-from-being-automatically-added.ly new file mode 100644 index 0000000000..381cd39d8f --- /dev/null +++ b/Documentation/snippets/preventing-extra-naturals-from-being-automatically-added.ly @@ -0,0 +1,57 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "pitches" + +%% Translation of GIT committish: 203ab4a7388f36b9c89c66671498dbaefccbf86e + texidocfr = " +En accord avec les règles standards de l'écriture musicale, on grave +un bécarre avant un dièse ou un bémol si on a besoin d'annuler une +altération précédente. Pour modifier ce comportement, assignez la propriété +@code{extraNatural} du contexte @code{Staff} à la valeur @code{##f} (faux). +" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca +doctitlees = "Evitar que se añadan becuadros adicionales automáticamente" + +texidoces = " +Según las reglas estándar de composición +tipográfica, se imprime un becuadro antes de un sostenido o un +bemol cuando se tiene que cancelar una alteración anterior en la +misma nota. Para modificar este comportamiento, establezca el +valor de la propiedad @code{extraNatural} a @code{##f} (falso) +dentro del contexto de @code{Staff}. + +" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + doctitlede = "Verhindern, dass zusätzliche Auflösungszeichen automatisch +hinzugefügt werden" + +texidocde = "Den tranditionellen Notensatzregeln zufolge wird ein +Auflösungszeichen immer dann vor einem Kreuz oder B gesetzt, wenn +ein vorheriges Versetzungszeichen der gleichen Note aufgehoben werden +soll. Um dieses Verhalten zu ändern, muss die Eigenschaft +@code{extraNatural} im @code{Staff}-Kontext auf \"false\" gesetzt werden. +" + + texidoc = " +In accordance with standard typesetting rules, a natural sign is +printed before a sharp or flat if a previous accidental on the same +note needs to be canceled. To change this behavior, set the +@code{extraNatural} property to \"false\" in the @code{Staff} context. + + + +" + doctitle = "Preventing extra naturals from being automatically added" +} % begin verbatim + +\relative c'' { + aeses4 aes ais a + \set Staff.extraNatural = ##f + aeses4 aes ais a +} + diff --git a/Documentation/snippets/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly b/Documentation/snippets/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly new file mode 100644 index 0000000000..44371da23b --- /dev/null +++ b/Documentation/snippets/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly @@ -0,0 +1,49 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "pitches" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca +doctitlees = "Evitar que se impriman becuadros cuando cambia la armadura" +texidoces = " +Cuando cambia la armadura de la tonalidad, se imprimen becuadros +automáticamente para cancelar las alteraciones de las armaduras +anteriores. Esto se puede evitar estableciendo al valor \"falso\" la +propiedad @code{printKeyCancellation} del contexto @code{Staff}. + +" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d +doctitlede = "Auflösungzeichen nicht setzen, wenn die Tonart wechselt" + +texidocde = " +Wenn die Tonart wechselt, werden automatisch Auflösungszeichen ausgegeben, +um Versetzungszeichen der vorherigen Tonart aufzulösen. Das kann +verhindert werden, indem die @code{printKeyCancellation}-Eigenschaft +im @code{Staff}-Kontext auf \"false\" gesetzt wird. +" + + texidoc = " +When the key signature changes, natural signs are automatically printed +to cancel any accidentals from previous key signatures. This may be +prevented by setting to \"false\" the @code{printKeyCancellation} +property in the @code{Staff} context. + +" + doctitle = "Preventing natural signs from being printed when the key signature changes" +} % begin verbatim + +\relative c' { + \key d \major + a4 b cis d + \key g \minor + a4 bes c d + \set Staff.printKeyCancellation = ##f + \key d \major + a4 b cis d + \key g \minor + a4 bes c d +} + diff --git a/Documentation/snippets/printing-a-repeat-sign-at-the-beginning-of-a-piece.ly b/Documentation/snippets/printing-a-repeat-sign-at-the-beginning-of-a-piece.ly new file mode 100644 index 0000000000..6f502e8d28 --- /dev/null +++ b/Documentation/snippets/printing-a-repeat-sign-at-the-beginning-of-a-piece.ly @@ -0,0 +1,50 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "repeats, tweaks-and-overrides" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Se puede imprimir una línea divisoria de la forma @code{|:} al +principio de la pieza, sobreescribiendo la propiedad correspondiente: + +" + doctitlees = "Imprimir puntos de repetición al prinicpio de la pieza" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Ein @code{|:}-Taktstrich kann auch zu Beginn eines Stückes ausgegeben werden, indem +man die entsprechende Eigenschaft verändert: + +" + doctitlede = "Ein Wiederholungszeichen zu Beginn eines Stückes ausgeben" + + texidoc = " +A @code{|:} bar line can be printed at the beginning of a piece, by +overriding the relevant property: + +" + doctitle = "Printing a repeat sign at the beginning of a piece" +} % begin verbatim + +\relative c'' { + \once \override Score.BreakAlignment #'break-align-orders = + #(make-vector 3 '(instrument-name + left-edge + ambitus + span-bar + breathing-sign + clef + key-signature + time-signature + staff-bar + custos + span-bar)) + \bar "|:" + c1 + d1 + d4 e f g +} + diff --git a/Documentation/snippets/printing-bar-numbers-at-regular-intervals.ly b/Documentation/snippets/printing-bar-numbers-at-regular-intervals.ly new file mode 100644 index 0000000000..d601ea0fb6 --- /dev/null +++ b/Documentation/snippets/printing-bar-numbers-at-regular-intervals.ly @@ -0,0 +1,63 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { +%% Translation of GIT committish: 21c8461ea87cd670a35a40b91d3ef20de03a0409 + texidocfr = " +Vous pouvez imprimer un numéro de mesure à intervalle régulier plutôt +qu'en tête de chaque ligne seulement, en recourrant à la propriété +@code{barNumberVisibility}. Voici comment afficher le numéro toutes les +deux mesures sauf en fin de ligne. + +" + doctitlefr = "Imprimer les numéros de mesure à intervalle régulier" + + lsrtags = "rhythms" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " + +Se pueden imprimir los números de compás a intervalos regulares +mediante el establecimiento de la propiedad +@code{barNumberVisibility}. Aquí los números de compás se +imprimen a cada dos compases excepto al final de la línea. + +" + + doctitlees = "Imprimir números de compás a intervalos regulares" + + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Taktnummern können in regelmäßigen Intervallen gesetzt werden, indem +man die Eigenschaft @code{barNumberVisibility} definiert. In diesem +Beispiel werden die Taktnummern jeden zweiten Takt gesetzt, außer +am Ende einer Zeile. + +" + doctitlede = "Setzen der Taktnummern in regelmäßigen Intevallen" + + + + texidoc = " +Bar numbers can be printed at regular intervals by setting the property +@code{barNumberVisibility}. Here the bar numbers are printed every two +measures except at the end of the line. + +" + doctitle = "Printing bar numbers at regular intervals" +} % begin verbatim + +\relative c' { + \override Score.BarNumber #'break-visibility = #'#(#f #t #t) + \set Score.currentBarNumber = #11 + % Permit first bar number to be printed + \bar "" + % Print a bar number every second measure + \set Score.barNumberVisibility = #(every-nth-bar-number-visible 2) + c1 | c | c | c | c + \break + c1 | c | c | c | c +} + diff --git a/Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly b/Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly new file mode 100644 index 0000000000..2604266ddd --- /dev/null +++ b/Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly @@ -0,0 +1,58 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { +%% Translation of GIT committish: 21c8461ea87cd670a35a40b91d3ef20de03a0409 + texidocfr = " +Les numéros de mesures peuvent être encadrés ou entourés d'un cercle. + +" + doctitlefr = "Inscrire le numéro de mesure dans un cadre ou un cercle" + + lsrtags = "rhythms, tweaks-and-overrides" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " + +Los números de compás también se pueden imprimir dentro de rectángulos o de circunferencias. + +" + doctitlees = "Imprimir números de compás dentro de rectángulos o circunferencias" + + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Taktnummern können auch in Boxen oder Kreisen gesetzt werden. + +" + doctitlede = "Setzen von Taktnummern in Kästen oder Kreisen" + + + + texidoc = " +Bar numbers can also be printed inside boxes or circles. + +" + doctitle = "Printing bar numbers inside boxes or circles" +} % begin verbatim + +\relative c' { + % Prevent bar numbers at the end of a line and permit them elsewhere + \override Score.BarNumber #'break-visibility = #end-of-line-invisible + \set Score.barNumberVisibility = #(every-nth-bar-number-visible 4) + + % Increase the size of the bar number by 2 + \override Score.BarNumber #'font-size = #2 + + % Draw a box round the following bar number(s) + \override Score.BarNumber #'stencil + = #(make-stencil-boxer 0.1 0.25 ly:text-interface::print) + \repeat unfold 5 { c1 } + + % Draw a circle round the following bar number(s) + \override Score.BarNumber #'stencil + = #(make-stencil-circler 0.1 0.25 ly:text-interface::print) + \repeat unfold 4 { c1 } \bar "|." +} + diff --git a/Documentation/snippets/printing-hairpins-using-al-niente-notation.ly b/Documentation/snippets/printing-hairpins-using-al-niente-notation.ly new file mode 100644 index 0000000000..3762596868 --- /dev/null +++ b/Documentation/snippets/printing-hairpins-using-al-niente-notation.ly @@ -0,0 +1,41 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "expressive-marks" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Se pueden imprimir reguladores con un círculo en la punta +(notación «al niente») estableciendo la propiedad +@code{circled-tip} del objeto @code{Hairpin} al valor @code{#t}. + +" + doctitlees = "Impresión de reguladores utilizando la notación «al niente»" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " + Crescendo-Klammern können mit einem kleinen Kreis vor der Spitze + notiert werden (al niente = bis zum Nichts), indem die +@code{circled-tip}-Eigenschaft des @code{Hairpin}-Objekts auf +@code{#t} gesetzt wird. + +" + doctitlede = "Crescendo Klammern al niente schreiben" + + texidoc = " +Hairpins may be printed with a circled tip (al niente notation) by +setting the @code{circled-tip} property of the @code{Hairpin} object to +@code{#t}. + +" + doctitle = "Printing hairpins using al niente notation" +} % begin verbatim + +\relative c'' { + \override Hairpin #'circled-tip = ##t + c2\< c\! + c4\> c\< c2\! +} + diff --git a/Documentation/snippets/printing-marks-at-the-end-of-a-line-or-a-score.ly b/Documentation/snippets/printing-marks-at-the-end-of-a-line-or-a-score.ly new file mode 100644 index 0000000000..917265f582 --- /dev/null +++ b/Documentation/snippets/printing-marks-at-the-end-of-a-line-or-a-score.ly @@ -0,0 +1,59 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "text" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Las marcas se pueden imprimir al final de la línea actual, en vez de +al comienzo de la línea siguiente. Esto es útil principalmente cuando +se tiene que añadir una marca al final de la partitura (donde no hay +línea siguiente). + +En tales casos, el extremo derecho de la marca se tiene que alinear +con la última línea divisoria, como muestra la segunda línea de este +ejemplo. + +" + doctitlees = "Imprimir marcas al final de la línea o de la partitura" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Zeichen können auch am Ende der aktuellen Zeile ausgegeben werden, anstatt +dass sie auf die folgende Zeile verschoben werden. Das ist nüztlich, +wenn ein Zeichen am Ende einer Partitur eingefügt werden soll, wo +gar keine nächste Zeile vorhanden ist. + +In derartigen Fällen muss die rechte Ecke des Zeichens an dem letzten +Taktstrich ausgerichtet werden, wie die zweite Zeile des Beispiels zeigt. + +" + doctitlede = "Zeichen am Ende einer Zeile oder Partitur setzen" + + texidoc = " +Marks can be printed at the end of the current line, instead of the +beginning of the following line. This is particularly useful when a +mark has to be added at the end of a score -- when there is no next +line. + +In such cases, the right end of the mark has to be aligned with the +final bar line, as demonstrated on the second line of this example. + +" + doctitle = "Printing marks at the end of a line or a score" +} % begin verbatim + +\relative c'' { + \override Score.RehearsalMark #'break-visibility = #begin-of-line-invisible + g2 c + d,2 a' + \mark \default + \break + g2 b, + c1 \bar "||" + \override Score.RehearsalMark #'self-alignment-X = #RIGHT + \mark "D.C. al Fine" +} + diff --git a/Documentation/snippets/printing-marks-on-every-staff.ly b/Documentation/snippets/printing-marks-on-every-staff.ly new file mode 100644 index 0000000000..f1234e87c0 --- /dev/null +++ b/Documentation/snippets/printing-marks-on-every-staff.ly @@ -0,0 +1,51 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "text" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Aunque normalmente las marcas de texto sólo se imprimen sobre el +pentagrama superior, también se pueden imprimir en otro pentagrama +cualquiera. + +" + doctitlees = "Imprimir marcas en cualquier pentagrama" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Normalerweise werden Textzeichen nur über dem obersten Notensystem gesetzt. Sie +können aber auch über jedem System ausgegeben werden. + +" + doctitlede = "Zeichen über jedem System ausgeben" + + texidoc = " +Although text marks are normally only printed above the topmost staff, +they may also be printed on every staff. + +" + doctitle = "Printing marks on every staff" +} % begin verbatim + +\score { + << + \new Staff { c''1 \mark "molto" c'' } + \new Staff { c'1 \mark "molto" c' } + >> + \layout { + \context { + \Score + \remove "Mark_engraver" + \remove "Staff_collecting_engraver" + } + \context { + \Staff + \consists "Mark_engraver" + \consists "Staff_collecting_engraver" + } + } +} + diff --git a/Documentation/snippets/printing-metronome-and-rehearsal-marks-below-the-staff.ly b/Documentation/snippets/printing-metronome-and-rehearsal-marks-below-the-staff.ly new file mode 100644 index 0000000000..c8b9ca2dcb --- /dev/null +++ b/Documentation/snippets/printing-metronome-and-rehearsal-marks-below-the-staff.ly @@ -0,0 +1,52 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "rhythms, expressive-marks, staff-notation, tweaks-and-overrides" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +De forma predeterminada, las indicaciones metronómicas y las +letras de ensayo se imprimen encima del pentagrama. Para +colocarlas debajo del pentagrama, simplemente ajustamos +adecuadamente la propiedad @code{direction} de +@code{MetronomeMark} o de @code{RehearsalMark}. + +" + + doctitlees = "Impresión de indicaciones metronómicas y letras de ensayo debajo del pentagrama" + + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Normalerweise werden Metronom- und Übungszeichen über dem Notensystem ausgegeben. +Um sie unter das System zu setzen, muss die @code{direction}-Eigenschaft +von @code{MetronomeMark} oder @code{RehearsalMark} entsprechend verändert werden. + +" + doctitlede = "Metronom- und Übungszeichen unter das System setzen" + + texidoc = " +By default, metronome and rehearsal marks are printed above the staff. +To place them below the staff simply set the @code{direction} property +of @code{MetronomeMark} or @code{RehearsalMark} appropriately. + +" + doctitle = "Printing metronome and rehearsal marks below the staff" +} % begin verbatim + +\layout { ragged-right = ##f } + +{ + % Metronome marks below the staff + \override Score.MetronomeMark #'direction = #DOWN + \tempo 8. = 120 + c''1 + + % Rehearsal marks below the staff + \override Score.RehearsalMark #'direction = #DOWN + \mark \default + c''1 +} + diff --git a/Documentation/snippets/printing-music-with-different-time-signatures.ly b/Documentation/snippets/printing-music-with-different-time-signatures.ly new file mode 100644 index 0000000000..b0a4455d91 --- /dev/null +++ b/Documentation/snippets/printing-music-with-different-time-signatures.ly @@ -0,0 +1,145 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "rhythms, percussion" + + texidoc = " +In the following snippet, two parts have a completely different time +signature, yet remain synchronized. The bar lines can no longer be +printed at the @code{Score} level; to allow independent bar lines in +each part, the @code{Default_barline_engraver} and +@code{Timing_translator} are moved from the @code{Score} context to the +@code{Staff} context. + +" + doctitle = "Printing music with different time signatures" +} % begin verbatim + +\paper { + indent = #0 + ragged-right = ##t +} + +global = { \time 3/4 { s2.*3 } \bar "" \break { s2.*3 } } + +\layout { + \context { + \Score + \remove "Timing_translator" + \remove "Time_signature_engraver" + \remove "Default_bar_line_engraver" + \override SpacingSpanner #'uniform-stretching = ##t + \override SpacingSpanner #'strict-note-spacing = ##t + proportionalNotationDuration = #(ly:make-moment 1 64) + } + \context { + \Staff + \consists "Timing_translator" + \consists "Default_bar_line_engraver" + \consists "Time_signature_engraver" + } + \context { + \Voice + \remove "Forbid_line_break_engraver" + tupletFullLength = ##t + } +} + +Bassklarinette = \new Staff << + \global { + \bar "|" + \clef treble + \time 3/8 + d''4. + + \bar "|" + \time 3/4 + r8 des''2( c''8) + + \bar "|" + \time 7/8 + r4. ees''2 ~ + + \bar "|" + \time 2/4 + \tupletUp + \times 2/3 { ees''4 r4 d''4 ~ } + + \bar "|" + \time 3/8 + \tupletUp + \times 3/4 { d''4 r4 } + + \bar "|" + \time 2/4 + e''2 + + \bar "|" + \time 3/8 + es''4. + + \bar "|" + \time 3/4 + r8 d''2 r8 + \bar "|" + } +>> + +Perkussion = \new StaffGroup << + \new Staff << + \global { + \bar "|" + \clef percussion + \time 3/4 + r4 c'2 ~ + + \bar "|" + c'2. + + \bar "|" + R2. + + \bar "|" + r2 g'4 ~ + + \bar "|" + g'2. ~ + + \bar "|" + g'2. + } + >> + \new Staff << + \global { + \bar "|" + \clef percussion + \time 3/4 + R2. + + \bar "|" + g'2. ~ + + \bar "|" + g'2. + + \bar "|" + r4 g'2 ~ + + \bar "|" + g'2 r4 + + \bar "|" + g'2. + } + >> +>> + +\score { + << + \Bassklarinette + \Perkussion + >> +} + diff --git a/Documentation/snippets/printing-text-from-right-to-left.ly b/Documentation/snippets/printing-text-from-right-to-left.ly new file mode 100644 index 0000000000..29fe10d10b --- /dev/null +++ b/Documentation/snippets/printing-text-from-right-to-left.ly @@ -0,0 +1,25 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "editorial-annotations, text, world-music" + + texidoc = " +It is possible to print text from right to left in a markup object, as +demonstrated here. + +" + doctitle = "Printing text from right to left" +} % begin verbatim + +{ + b1^\markup { + \line { i n g i r u m i m u s n o c t e } + } + f'_\markup { + \override #'(text-direction . -1) + \line { i n g i r u m i m u s n o c t e } + } +} + diff --git a/Documentation/snippets/printing-the-bar-number-for-the-first-measure.ly b/Documentation/snippets/printing-the-bar-number-for-the-first-measure.ly new file mode 100644 index 0000000000..81619a8d2b --- /dev/null +++ b/Documentation/snippets/printing-the-bar-number-for-the-first-measure.ly @@ -0,0 +1,66 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { +%% Translation of GIT committish: 21c8461ea87cd670a35a40b91d3ef20de03a0409 + texidocfr = " +Par défaut, LilyPond n'affiche pas le premier numéro de mesure s'il est +inférieur à 2. Le fait de définir @code{barNumberVisibility} à +@code{all-bar-numbers-visible} vous permettra d'imprimer n'importe quel +numéro pour la première mesure. À noter que l'impression d'un numéro +de mesure ne peut intervenir que s'il y a une barre. Aussi, pour +pouvoir le faire au début d'un morceau, devrez-vous ajouter une barre +vide avant la première note. + +" + doctitlefr = "Afficher le numéro de la première mesure" + + lsrtags = "rhythms" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " + +De forma predeterminada se suprime el número del primer compás de +una partitura si es menor o igual a `1'. Al establecer el valor +de @code{barNumberVisibility} a @code{all-bar-numbers-visible}, se +puede imprimir cualquier número de compás para el primer compás y +todos los siguientes. Observe que, para que esto funcione, se +debe insertar una líinea divisoria vacía antes de la primera nota. + +" + + doctitlees = "Imprimir el número de compás en el primer compás" + + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Standardmäßig wird die erste Taktzahl einer Paritur nicht gesetzt, +wenn sie weniger oder gleich '1' ist. Indem man @code{barNumberVisibility} +auf @code{all-bar-numbers-visible} setzt, kann eine beliebige +Taktzahl für den ersten und die folgenden Takte gesetzt werden. +Eine leere Taktlinie muss jedoch vor der ersten Note eingefügt +werden, damit das funktioniert. + +" + doctitlede = "Setzen der Taktnummer für den ersten Takt" + + + + texidoc = " +By default, the first bar number in a score is suppressed if it is less +than or equal to `1'. By setting @code{barNumberVisibility} to +@code{all-bar-numbers-visible}, any bar number can be printed for the +first measure and all subsequent measures. Note that an empty bar line +must be inserted before the first note for this to work. + +" + doctitle = "Printing the bar number for the first measure" +} % begin verbatim + +\relative c' { + \set Score.barNumberVisibility = #all-bar-numbers-visible + \bar "" + c1 d e f \break + g1 e d c +} diff --git a/Documentation/snippets/proportional-strict-notespacing.ly b/Documentation/snippets/proportional-strict-notespacing.ly new file mode 100644 index 0000000000..16de3f17f3 --- /dev/null +++ b/Documentation/snippets/proportional-strict-notespacing.ly @@ -0,0 +1,33 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "tweaks-and-overrides, spacing" + + texidoc = " +If @code{strict-note-spacing} is set spacing of notes is not influenced +by bars or clefs within a system. Rather, they are placed just before +the note that occurs at the same time. This may cause collisions. + +" + doctitle = "Proportional strict notespacing" +} % begin verbatim + +\paper { + ragged-right = ##t +} + +\relative c'' << + \override Score.SpacingSpanner #'strict-note-spacing = ##t + \set Score.proportionalNotationDuration = #(ly:make-moment 1 16) + \new Staff { + c8[ c \clef alto c c \grace { d16 } c8 c] c4 + c2 \grace { c16[ c16] } c2 + } + \new Staff { + c2 \times 2/3 { c8 \clef bass cis,, c } c4 + c1 + } +>> + diff --git a/Documentation/snippets/quoting-another-voice-with-transposition.ly b/Documentation/snippets/quoting-another-voice-with-transposition.ly new file mode 100644 index 0000000000..053ffbb427 --- /dev/null +++ b/Documentation/snippets/quoting-another-voice-with-transposition.ly @@ -0,0 +1,69 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "pitches, staff-notation" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Los pasajes citados tienen en cuenta la transposición de la fuente +tanto como la del destino. En este ejemplo, todos los +instrumentos interpreta una nota con el sonido del Do central; el +destino de un instrumento transpositor en Fa. La parte de destino +se puede transponer utilizando @code{\\transpose}. En este caso +se transportan todas las notas (incluidas las citadas). + +" + +doctitlees = "Citar otra voz con transposición" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Zitate berücksichtigen sowohl die Transposition der Quelle als auch +des Zielinstruments. In diesem Beispiel spielen alle Instrumente +klingendes C, das Zielinstrument ist in F. Die Noten für das +Zielinstrument können mit @code{\\transpose} transponiert werden, +in diesem Fall werden alle Noten (auch die zitierten) transponiert. + +" + doctitlede = "Eine Stimme mit Transposition zitieren" + + texidoc = " +Quotations take into account the transposition of both source and +target. In this example, all instruments play sounding middle C; the +target is an instrument in F. The target part may be transposed using +@code{\\transpose}. In this case, all the pitches (including the +quoted ones) are transposed. + +" + doctitle = "Quoting another voice with transposition" +} % begin verbatim + +\addQuote clarinet { + \transposition bes + \repeat unfold 8 { d'16 d' d'8 } +} + +\addQuote sax { + \transposition es' + \repeat unfold 16 { a8 } +} + +quoteTest = { + % french horn + \transposition f + g'4 + << \quoteDuring #"clarinet" { \skip 4 } s4^"clar." >> + << \quoteDuring #"sax" { \skip 4 } s4^"sax." >> + g'4 +} + +{ + \set Staff.instrumentName = + \markup { + \center-column { Horn \line { in F } } + } + \quoteTest + \transpose c' d' << \quoteTest s4_"up a tone" >> +} diff --git a/Documentation/snippets/quoting-another-voice.ly b/Documentation/snippets/quoting-another-voice.ly new file mode 100644 index 0000000000..3d4decc1aa --- /dev/null +++ b/Documentation/snippets/quoting-another-voice.ly @@ -0,0 +1,79 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "staff-notation" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +La propiedad @code{quotedEventTypes} determina los tipos de +eventos musicales que resultan citados. El valor predeterminado +es @code{(note-event rest-event)}, que significa que sólo aparecen +en la expresión @code{\\quoteDuring} las notas y los silencios. +En el ejemplo siguiente, el silencio de semicorchea no aparece en +el fragmento citado porque @code{rest-event} no está dentro de los +@code{quotedEventTypes}. + +" + doctitlees = "Citar otra voz" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Die @code{quotedEventTypes}-Eigenschaft bestimmt die +Typen an Musikereignissen, die zitiert werden. Die +Standardeinstellung ist @code{(note-event rest-event)}, womit +nur Noten und Pausen der zitierten Stimme für den +@code{\\quoteDuring}-Ausdruck übernommen werden. Im +Beispiel hier wird die 16-Pause nicht übernommen, weil +sich @code{rest-event} nicht in @code{quotedEventTypes} befindet. + +" + + doctitlede = "Eine andere Stimme zitieren" + + texidoc = " +The @code{quotedEventTypes} property determines the music event types +that are quoted. The default value is @code{(note-event rest-event)}, +which means that only notes and rests of the quoted voice appear in the +@code{\\quoteDuring} expression. In the following example, a 16th rest +is not quoted since @code{rest-event} is not in +@code{quotedEventTypes}. + +" + doctitle = "Quoting another voice" +} % begin verbatim + +quoteMe = \relative c' { + fis4 r16 a8.-> b4\ff c +} +\addQuote quoteMe \quoteMe + +original = \relative c'' { + c8 d s2 + \once \override NoteColumn #'ignore-collision = ##t + es8 gis8 +} + +<< + \new Staff { + \set Staff.instrumentName = #"quoteMe" + \quoteMe + } + \new Staff { + \set Staff.instrumentName = #"orig" + \original + } + \new Staff \relative c'' << + \set Staff.instrumentName = #"orig+quote" + \set Staff.quotedEventTypes = + #'(note-event articulation-event) + \original + \new Voice { + s4 + \set fontSize = #-4 + \override Stem #'length-fraction = #(magstep -4) + \quoteDuring #"quoteMe" { \skip 2. } + } + >> +>> diff --git a/Documentation/snippets/redefining-grace-note-global-defaults.ly b/Documentation/snippets/redefining-grace-note-global-defaults.ly new file mode 100644 index 0000000000..2d6bb4a909 --- /dev/null +++ b/Documentation/snippets/redefining-grace-note-global-defaults.ly @@ -0,0 +1,77 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { +%% Translation of GIT committish: 21c8461ea87cd670a35a40b91d3ef20de03a0409 + texidocfr = " +Vous pouvez modifier les valeurs des variables @code{startGraceMusic}, +@code{stopGraceMusic}, @code{startAcciaccaturaMusic}, +@code{stopAcciaccaturaMusic}, @code{startAppoggiaturaMusic}, et +@code{stopAppoggiaturaMusic} afin d'en personnaliser les effets. Pour +plus de détails, voir le fichier @code{ly/grace-init.ly}. + +" + doctitlefr = "Redéfinition des réglages de mise en forme par défaut des notes d'ornement" + + lsrtags = "rhythms" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " + +Los valores predeterminados para las notas de adorno están +almacenados en los identificadores @code{startGraceMusic}, +@code{stopGraceMusic}, @code{startAcciaccaturaMusic}, +@code{stopAcciaccaturaMusic}, @code{startAppoggiaturaMusic} y +@code{stopAppoggiaturaMusic}, que están definidos en el archivo +@code{ly/grace-init.ly}. Redefiniéndolos se pueden obtener otros +efectos. + +" + + doctitlees = "Redefinición de los valores globales predeterminados para notas de adorno" + + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Die globalen Standardeinstellungen für Verzierungsnoten werden in +den Variablen@code{startGraceMusic}, @code{stopGraceMusic}, +@code{startAcciaccaturaMusic}, @code{stopAcciaccaturaMusic}, +@code{startAppoggiaturaMusic} und @code{stopAppoggiaturaMusic} +gespeichert, die in der Datei @code{ly/grace-init.ly} definiert +sind. Wenn man sie umdefiniert, können andere Effekte erreicht +werden. + +" + doctitlede = "Globale Umdefinition von Verzierungsnoten" + + + + texidoc = " +The global defaults for grace notes are stored in the identifiers +@code{startGraceMusic}, @code{stopGraceMusic}, +@code{startAcciaccaturaMusic}, @code{stopAcciaccaturaMusic}, +@code{startAppoggiaturaMusic} and @code{stopAppoggiaturaMusic}, which +are defined in the file @code{ly/grace-init.ly}. By redefining them +other effects may be obtained. + +" + doctitle = "Redefining grace note global defaults" +} % begin verbatim + +startAcciaccaturaMusic = { + s1*0( + \override Stem #'stroke-style = #"grace" + \slurDashed +} + +stopAcciaccaturaMusic = { + \revert Stem #'stroke-style + \slurSolid + s1*0) +} + +\relative c'' { + \acciaccatura d8 c1 +} + diff --git a/Documentation/snippets/removing-bar-numbers-from-a-score.ly b/Documentation/snippets/removing-bar-numbers-from-a-score.ly new file mode 100644 index 0000000000..13015fad05 --- /dev/null +++ b/Documentation/snippets/removing-bar-numbers-from-a-score.ly @@ -0,0 +1,59 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { +%% Translation of GIT committish: 21c8461ea87cd670a35a40b91d3ef20de03a0409 + texidocfr = " +Désactiver le graveur concerné --- @code{Bar_number_engraver} --- +donnera une partition --- contexte @code{Score} --- sans numéros de +mesure. + +" + doctitlefr = "Supprimer les numéros de mesure d'une partition" + + + lsrtags = "rhythms, contexts-and-engravers" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " + +Se pueden eliminar completamente los números de compás quitando el +grabador @code{Bar_number_engraver} del contexto de @code{Score}. + +" + + doctitlees = "Suprimir los números de compás de toda la partitura" + + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Taktnummern können vollkommen aus den Noten entfernt werden, indem +man den @code{Bar_number_engraver} aus dem @code{Score}-Kontext +entfernt. + +" + doctitlede = "Entfernung von Taktnummern in einer Partitur" + + + + texidoc = " +Bar numbers can be removed entirely by removing the +@code{Bar_number_engraver} from the @code{Score} context. + +" + doctitle = "Removing bar numbers from a score" +} % begin verbatim + +\layout { + \context { + \Score + \remove "Bar_number_engraver" + } +} + +\relative c'' { + c4 c c c \break + c4 c c c +} + diff --git a/Documentation/snippets/removing-the-first-empty-line.ly b/Documentation/snippets/removing-the-first-empty-line.ly new file mode 100644 index 0000000000..70d4fb4f32 --- /dev/null +++ b/Documentation/snippets/removing-the-first-empty-line.ly @@ -0,0 +1,87 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "staff-notation, tweaks-and-overrides, breaks" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +El primer pentagrama vacío también se puede suprimir de la +partitura estableciendo la propiedad @code{remove-first} de +@code{VerticalAxisGroup}. Esto se puede hacer globalmente dentro +del bloque @code{\\layout}, o localmente dentro del pentagrama +concreto que se quiere suprimir. En este último caso, tenemos que +especificar el contexto (@code{Staff} se aplica sólo al pentagrama +actual) delante de la propiedad. + +El pentagrama inferior del segundo grupo no se elimina, porque el +ajuste sólo se aplica al pentagrama concreto dentro del que se +escribe. + +" + doctitlees = "Quitar la primera línea vacía" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Ein leeres Notensystem kann auch aus der ersten Zeile einer Partitur +entfernt werden, indem die Eigenschaft @code{remove-first} der +@code{VerticalAxisGroup}-Eigenschaft eingesetzt wird. Das kann +man global in einer @code{\\layout}-Umgebung oder lokal in dem +bestimmten Notensystem machen, das entfernt werden soll. In letzterem +Fall muss man den Kontext angeben. + +Das untere Notensystem der zweiten Systemgruppe wird nicht entfernt, +weil in die Einstellungen in dem Schnipsel nur für das eine Notensystem +gültig sind. + +" + doctitlede = "Die erste leere Notenzeile auch entfernen" + + texidoc = " +The first empty staff can also be removed from the score by setting the +@code{VerticalAxisGroup} property @code{remove-first}. This can be done +globally inside the @code{\\layout} block, or locally inside the +specific staff that should be removed. In the latter case, you have to +specify the context (@code{Staff} applies only to the current staff) in +front of the property. + +The lower staff of the second staff group is not removed, because the +setting applies only to the specific staff inside of which it is +written. + +" + doctitle = "Removing the first empty line" +} % begin verbatim + +\layout { + \context { + \RemoveEmptyStaffContext + % To use the setting globally, uncomment the following line: + % \override VerticalAxisGroup #'remove-first = ##t + } +} +\new StaffGroup << + \new Staff \relative c' { + e4 f g a \break + c1 + } + \new Staff { + % To use the setting globally, comment this line, + % uncomment the line in the \layout block above + \override Staff.VerticalAxisGroup #'remove-first = ##t + R1 \break + R + } +>> +\new StaffGroup << + \new Staff \relative c' { + e4 f g a \break + c1 + } + \new Staff { + R1 \break + R + } +>> + diff --git a/Documentation/snippets/repeats-intro.itely b/Documentation/snippets/repeats-intro.itely new file mode 100644 index 0000000000..896f8f8e4e --- /dev/null +++ b/Documentation/snippets/repeats-intro.itely @@ -0,0 +1,7 @@ +@node Repeats +@unnumbered Repeats + +@ruser{Repeats} + +@lysnippets + diff --git a/Documentation/snippets/repeats.snippet-list b/Documentation/snippets/repeats.snippet-list new file mode 100644 index 0000000000..288f87d567 --- /dev/null +++ b/Documentation/snippets/repeats.snippet-list @@ -0,0 +1,12 @@ +adding-volta-brackets-to-additional-staves.ly +engraving-tremolos-with-floating-beams.ly +isolated-percent-repeats.ly +measure-counter.ly +percent-repeat-count-visibility.ly +percent-repeat-counter.ly +positioning-segno-and-coda-with-line-break.ly +printing-a-repeat-sign-at-the-beginning-of-a-piece.ly +shortening-volta-brackets.ly +volta-below-chords.ly +volta-multi-staff.ly +volta-text-markup-using-repeatcommands.ly diff --git a/Documentation/snippets/rest-styles.ly b/Documentation/snippets/rest-styles.ly new file mode 100644 index 0000000000..75412fb152 --- /dev/null +++ b/Documentation/snippets/rest-styles.ly @@ -0,0 +1,67 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "rhythms, ancient-notation, tweaks-and-overrides" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + doctitlees = "Estilos de silencios" + texidoces = " +Los silencios se pueden imprimir en distintos estilos. +" +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + + doctitlede = "Pausenstile" + texidocde = " +Pausen können in verschiedenen Stilen dargestellt werden. +" + + +%% Translation of GIT committish: e71f19ad847d3e94ac89750f34de8b6bb28611df + texidocfr = " +Les silences peuvent être gravés selon différents styles. + +" + doctitlefr = "Styles de silences" + + texidoc = " +Rests may be used in various styles. + + + + +" + doctitle = "Rest styles" +} % begin verbatim + +\layout { + indent = 0.0 + \context { + \Staff + \remove "Time_signature_engraver" + } +} + +\new Staff \relative c { + \cadenzaOn + \override Staff.Rest #'style = #'mensural + r\maxima^\markup \typewriter { mensural } + r\longa r\breve r1 r2 r4 r8 r16 s32 s64 s128 s128 + \bar "" + + \override Staff.Rest #'style = #'neomensural + r\maxima^\markup \typewriter { neomensural } + r\longa r\breve r1 r2 r4 r8 r16 s32 s64 s128 s128 + \bar "" + + \override Staff.Rest #'style = #'classical + r\maxima^\markup \typewriter { classical } + r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 s128 + \bar "" + + \override Staff.Rest #'style = #'default + r\maxima^\markup \typewriter { default } + r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 s128 +} + diff --git a/Documentation/snippets/reverting-default-beam-endings.ly b/Documentation/snippets/reverting-default-beam-endings.ly new file mode 100644 index 0000000000..4469b64ba5 --- /dev/null +++ b/Documentation/snippets/reverting-default-beam-endings.ly @@ -0,0 +1,61 @@ +%% Do not edit this file; it is auto-generated from input/new +%% This file is in the public domain. +%% Note: this file works from version 2.13.4 +\version "2.13.4" + +\header { +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Para tipografiar las barras agrupadas en la forma @code{3-4-3-2} +en 12/8, en primer lugar tenemos que sobreescribir los finales de +barra predeterminados en 12/8, y después preparar los finales de +barra nuevos: + +" + doctitlees = "Alteración de los finales de barra predeterminados" + + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Um Balken im 12/8-Takt als @code{3-4-3-2} zu gruppieren, muss man zuerst die +Standardwerte für die Balken im 12/8-Takt rückgängig machen und dann die neuen +Werte setzen: + +" + doctitlede = "Standard-Balkenwerte rückgängig machen" + + +%% Translation of GIT committish: bee31293920d834cd3698f00ddcc2402c3164619 + texidocfr = " +Pour obtenir des ligatures en groupes de @code{3-4-3-2} croches, dans +une mesure à 12/8, il faudra préalablement annuler les réglages par +défaut relatifs à 12/8, puis ajouter nos propres règles : + +" + doctitlefr = "Annulation des règles de ligature par défaut" + + lsrtags = "rhythms" + texidoc = " +To typeset beams grouped @code{3-4-3-2} in 12/8 it is no longer +necessary first +to override the default beam endings in 12/8, and then to set up the +new beaming endings: + +" + doctitle = "Reverting default beam endings" +} % begin verbatim + + +\relative c'' { + \time 12/8 + + % Default beaming + a8 a a a a a a a a a a a + + % Set new values for beam endings + \overrideBeamSettings #'Score #'(12 . 8) #'end + #'((* . (3 4 3 2))) + a8 a a a a a a a a a a a + +} + diff --git a/Documentation/snippets/rhythmic-slashes.ly b/Documentation/snippets/rhythmic-slashes.ly new file mode 100644 index 0000000000..554be0e035 --- /dev/null +++ b/Documentation/snippets/rhythmic-slashes.ly @@ -0,0 +1,51 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "rhythms, tweaks-and-overrides" + + texidoc = " +In \"simple\" lead-sheets, sometimes no actual notes are written, +instead only \"rhythmic patterns\" and chords above the measures are +notated giving the structure of a song. Such a feature is for example +useful while creating/transcribing the structure of a song and also +when sharing lead sheets with guitarists or jazz musicians. The +standard support for this using @code{\\repeat percent} is unsuitable +here since the first beat has to be an ordinary note or rest. This +example shows two solutions to this problem, by redefining ordinary +rests to be printed as slashes. (If the duration of each beat is not a +quarter note, replace the @code{r4} in the definitions with a rest of +the appropriate duration). + +" + doctitle = "Rhythmic slashes" +} % begin verbatim + +% Macro to print single slash +rs = { + \once \override Rest #'stencil = #ly:percent-repeat-item-interface::beat-slash + \once \override Rest #'thickness = #0.48 + \once \override Rest #'slope = #1.7 + r4 +} + +% Function to print a specified number of slashes +comp = #(define-music-function (parser location count) ( integer?) + #{ + \override Rest #'stencil = #ly:percent-repeat-item-interface::beat-slash + \override Rest #'thickness = #0.48 + \override Rest #'slope = #1.7 + \repeat unfold $count { r4 } + \revert Rest #'stencil + #} +) + +\score { + \relative c' { + c4 d e f | + \rs \rs \rs \rs | + \comp #4 | + } +} + diff --git a/Documentation/snippets/rhythms-intro.itely b/Documentation/snippets/rhythms-intro.itely new file mode 100644 index 0000000000..dede3bf13e --- /dev/null +++ b/Documentation/snippets/rhythms-intro.itely @@ -0,0 +1,7 @@ +@node Rhythms +@unnumbered Rhythms + +@ruser{Rhythms} + +@lysnippets + diff --git a/Documentation/snippets/rhythms.snippet-list b/Documentation/snippets/rhythms.snippet-list new file mode 100644 index 0000000000..ac87f9c016 --- /dev/null +++ b/Documentation/snippets/rhythms.snippet-list @@ -0,0 +1,56 @@ +adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.ly +adding-drum-parts.ly +aligning-bar-numbers.ly +automatic-beam-subdivisions.ly +automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly +avoiding-collisions-with-chord-fingerings.ly +beam-endings-in-score-context.ly +beam-grouping-in-7-8-time.ly +beams-across-line-breaks.ly +changing-beam-knee-gap.ly +changing-form-of-multi-measure-rests.ly +changing-the-time-signature-without-affecting-the-beaming.ly +changing-the-tuplet-number.ly +changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly +chant-or-psalms-notation.ly +compound-time-signatures.ly +conducting-signs,-measure-grouping-signs.ly +controlling-tuplet-bracket-visibility.ly +engraving-ties-manually.ly +engraving-tremolos-with-floating-beams.ly +entering-several-tuplets-using-only-one--times-command.ly +flat-flags-and-beam-nibs.ly +forcing-rehearsal-marks-to-start-from-a-given-letter-or-number.ly +grouping-beats.ly +guitar-strum-rhythms.ly +heavily-customized-polymetric-time-signatures.ly +making-an-object-invisible-with-the-transparent-property.ly +making-slurs-with-complex-dash-structure.ly +manually-controlling-beam-positions.ly +merging-multi-measure-rests-in-a-polyphonic-part.ly +modifying-tuplet-bracket-length.ly +multi-measure-rest-markup.ly +non-default-tuplet-numbers.ly +permitting-line-breaks-within-beamed-tuplets.ly +positioning-grace-notes-with-floating-space.ly +positioning-multi-measure-rests.ly +printing-bar-numbers-at-regular-intervals.ly +printing-bar-numbers-inside-boxes-or-circles.ly +printing-metronome-and-rehearsal-marks-below-the-staff.ly +printing-music-with-different-time-signatures.ly +printing-the-bar-number-for-the-first-measure.ly +redefining-grace-note-global-defaults.ly +removing-bar-numbers-from-a-score.ly +rest-styles.ly +reverting-default-beam-endings.ly +rhythmic-slashes.ly +skips-in-lyric-mode-2.ly +skips-in-lyric-mode.ly +specifying-context-with-beatgrouping.ly +stemlets.ly +sub-dividing-beams.ly +three-sided-box.ly +tweaking-grace-layout-within-music.ly +using-beatlength-and-beatgrouping.ly +using-grace-note-slashes-with-normal-heads.ly +using-ties-with-arpeggios.ly diff --git a/Documentation/snippets/score-for-diatonic-accordion.ly b/Documentation/snippets/score-for-diatonic-accordion.ly new file mode 100644 index 0000000000..c995e2167b --- /dev/null +++ b/Documentation/snippets/score-for-diatonic-accordion.ly @@ -0,0 +1,234 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "template" + + texidoc = " +A template to write a score for a diatonic accordion. + +- There is a horizontal staff indicating if the accordion must be +pushed (thick line) or pulled (thin line) + +- There is a small rhythmic staff with lyrics that describes the bass +buttons to press. The bar lines are made from gridlines + +- The tabulator staff for diatonic accordions shows the geographic +position of the buttons and not (as for every other instrument) the +pitch of the notes; the keys on the melody-side of the accordion are +placed in three columns and about 12 rows + + +In the tabulator staff notation the outermost column is described with +notes between lines, the innermost column is described with notes +between lines and a cross as accidental, and the middle column is +described with notes on a line, whereby the row in the middle is +represented on the middle line in the staff. + + +Some words to transpose piano notes to the diatonic accordion: + + +1. Every diatonic accordion is built for some keys only (for example, +for the keys of C major and F major), so it is important to transpose a +piano melody to match one of these keys. Transpose the source code, not +only the output because this code is required later on to translate it +once more to the tabulator staff. This can be done with the command +@code{displayLilyMusic}. + + +2. You have to alternate the push- and pull-direction of the accordion +regularly. If the player has a too long part to pull the accordion gets +broken. On the other hand, some harmonies are only available in one +direction. Considering this, decide which parts of the melody are the +push-parts and which the pull-parts. + + +3. For each pull- or push-part translate the piano notes to the +according tabulature representation. + + +This snippet comes with a useful optional macro for the jEdit text +editor. + +" + doctitle = "Score for diatonic accordion" +} % begin verbatim + +verse = \lyricmode { Wie gross bist du! Wie gross bist du! } + +harmonies = \new ChordNames \chordmode { + \germanChords + \set chordChanges = ##t + bes8 bes8 bes8 + es2 f + bes1 +} + +NoStem = \override Stem #'transparent = ##t +NoNoteHead = \override NoteHead #'transparent = ##t +ZeroBeam = \override Beam #'positions = #'(0 . 0) + +staffTabLine = \new Staff \with { + \remove "Time_signature_engraver" + \remove "Clef_engraver" +} { + \override Staff.StaffSymbol #'line-positions = #'(0) +% Shows one horizontal line. The vertical line (simulating a bar-line) is simulated with a gridline + \set Staff.midiInstrument = #"choir aahs" + \key c \major + \relative c'' + { + % disable the following line to see the the noteheads while writing the song + \NoNoteHead + \override NoteHead #'no-ledgers = ##t + + % The beam between 8th-notes is used to draw the push-line + %How to fast write the push-lines: + % 1. write repeatedly 'c c c c c c c c |' for the whole length of the song + % 2. uncomment the line \NoNoteHead + % 3. compile + % 4. Mark the positions on which push/pull changes. + % In the score-picture click on the position the push- or pull-part starts + % (on the noteHead, the cursor will change to a hand-icon). + % The cursor in the source code will jump just at this position. + % a) If a push-part starts there, replace the 'c' by an 'e[' + % b) If a pull-part starts there, replace the 'c' by an 's' + % 5. Switch into 'overwrite-mode' by pressing the 'ins' key. + % 6. For the pull-parts overwrite the 'c' with 's' + % 7. For every push-part replace the last 'c' with 'e]' + % 8. Switch into 'insert-mode' again + % 9. At last it should look lik e.g. (s s e[ c | c c c c c c c c | c c c c c c e] s s) + % 10. re-enable the line \NoNoteHead + \autoBeamOff + \ZeroBeam + s8 s s e[ c c c c c c e] | s s s s s + } +} + +%{ +%} + +% Accordion melody in tabulator score +% 1. Place a copy of the piano melody below +% 2. Separate piano melody into pull- and push-parts according to the staffTabLine you've already made +% 3. For each line: Double the line. Remark the 1st one (Keeps unchanged as reference) and then change the second line using the transformation paper +% or the macros 'conv2diaton push.bsh' and 'conv2diaton pull.bsh' +% Tips: +% - In jEdit Search & Replace mark the Option 'Keep Dialog' + +AccordionTabTwoCBesDur = { + % pull 1 + %8 8 8 | +8 8 8 | + % push 2 + %4 | +4 | + % pull 3 +% 2 r8 } + 2 r8 } + + AccordionTab= { \dynamicUp +% 1. Place a copy of the piano melody above +% 2. Separate piano melody into pull- and push-parts according to the staffTabLine you've already made +% 3. For each line: Double the line. Remark the 1st one (Keeps unchanged as reference) and then +% change the second line using the transformation paper +% Tips: +% - In jEdit Search & Replace mark the Option 'Keep Dialog' +% - +\AccordionTabTwoCBesDur + } + + + + \layout { + \context { + \Staff + \consists "Grid_point_engraver" + + gridInterval = #(ly:make-moment 4 4) % 4/4 - tact. How many beats per bar + + % The following line has to be adjusted O-F-T-E-N. + \override GridPoint #'Y-extent = #'(-2 . -21) + } + \context { + \ChoirStaff + \remove "System_start_delimiter_engraver" + } +} + +staffVoice = \new Staff=astaffvoice { + \time 4/4 + \set Staff.instrumentName="Voice" + \set Staff.midiInstrument="voice oohs" + \key bes \major + \partial 8*3 + \clef treble + { + \context Voice = "melodyVoi" + { 8 8 8 | 4 | 2 r8 } + \bar "|." + } +} + +staffAccordionMel = \new Staff \with { \remove "Clef_engraver" } { + #(set-accidental-style 'forget) %Set the accidentals (Vorzeichen) for each note, + %do not remember them for the rest of the measure. + \time 4/4 + \set Staff.instrumentName="Accordion" + \set Staff.midiInstrument="voice oohs" + \key c \major + \clef treble + { \AccordionTab \bar "|." } +} + + AltOn = #(define-music-function (parser location mag) (number?) + #{ \override Stem #'length = #$(* 7.0 mag) + \override NoteHead #'font-size = + #$(inexact->exact (* (/ 6.0 (log 2.0)) (log mag))) #}) + + AltOff = { + \revert Stem #'length + \revert NoteHead #'font-size + } + +BassRhytm = {s4 s8 | c2 c2 | c2 s8 } +LyricBassRhythmI= \lyricmode { c b | c } + +staffBassRhytm = \new Staff=staffbass \with { \remove "Clef_engraver" } { + % This is not a RhythmicStaff because it must be possible to append lyrics. + + \override Score.GridLine #'extra-offset = #'( 13.0 . 0.0 ) % x.y + \override Staff.StaffSymbol #'line-positions = #'( 0 ) + % Shows one horizontal line. The vertical line (simulating a bar-line) is simulated by a grid + % Search for 'grid' in this page to find all related functions + \time 4/4 + { + \context Voice = "VoiceBassRhytm" + \stemDown \AltOn #0.6 + \relative c'' + { + \BassRhytm + } + \AltOff + \bar "|." + } +} + +\new Score +\with { + \consists "Grid_line_span_engraver" %The vertical line (simulating a bar-line) in the staffBassRhytm is a gridline +} +\new ChoirStaff + << + \harmonies + \staffVoice + \context Lyrics = "lmelodyVoi" \with {alignBelowContext=astaffvoice} { \lyricsto "melodyVoi" \verse } + \staffAccordionMel + \staffTabLine + \staffBassRhytm + \context Lyrics = "lBassRhytmAboveI" \with {alignAboveContext=staffbass} \lyricsto VoiceBassRhytm \LyricBassRhythmI + >> +%} + diff --git a/Documentation/snippets/separating-key-cancellations-from-key-signature-changes.ly b/Documentation/snippets/separating-key-cancellations-from-key-signature-changes.ly new file mode 100644 index 0000000000..396d00bb8f --- /dev/null +++ b/Documentation/snippets/separating-key-cancellations-from-key-signature-changes.ly @@ -0,0 +1,42 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "pitches, tweaks-and-overrides" + + texidoc = " +By default, the accidentals used for key cancellations are placed +adjacent to those for key signature changes. This behavior can be +changed by overriding the @code{'break-align-orders} property of the +@code{BreakAlignment} grob. + + +The value of @code{'break-align-orders} is a vector of length 3, with +quoted lists of breakable items as elements. This example only +modifies the second list, moving @code{key-cancellation} before +@code{staff-bar}; by modifying the second list, break alignment +behavior only changes in the middle of a system, not at the beginning +or the end. + +" + doctitle = "Separating key cancellations from key signature changes" +} % begin verbatim + +\new Staff { + \override Score.BreakAlignment #'break-align-orders = + #'#((left-edge ambitus breathing-sign clef staff-bar + key-cancellation key-signature time-signature custos) + + (left-edge ambitus breathing-sign clef key-cancellation + staff-bar key-signature time-signature custos) + + (left-edge ambitus breathing-sign clef key-cancellation + key-signature staff-bar time-signature custos)) + + \key des \major + c'1 + \bar "||" + \key bes \major + c'1 +} diff --git a/Documentation/snippets/setting-hairpin-behavior-at-bar-lines.ly b/Documentation/snippets/setting-hairpin-behavior-at-bar-lines.ly new file mode 100644 index 0000000000..102c7201a5 --- /dev/null +++ b/Documentation/snippets/setting-hairpin-behavior-at-bar-lines.ly @@ -0,0 +1,42 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "expressive-marks, tweaks-and-overrides" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Si la nota que da fin a un regulador cae sobre la primera parte de +un compás, el regulador se detiene en la línea divisoria +inmediatamente precedente. Se puede controlar este comportamiento +sobreescribiendo la propiedad @code{'to-barline}. + +" + doctitlees = "Establecer el comportamiento de los reguladores en las barras de compás" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d +texidocde = " +Wenn die Note, an welcher eine Crescendo-Klammer endet, die erste Note +eines Taktes ist, wird die Klammer an der vorhergehenden Tatklinie +beendet. Dieses Verhalten kann auch mit der Eigenschaft +@code{'to-barline} geändert werden: +" + doctitlede = "Das Verhalten von Crescendo-Klammern an Taktlinien beeinflussen" + + texidoc = " +If the note which ends a hairpin falls on a downbeat, the hairpin stops +at the bar line immediately preceding. This behavior can be controlled +by overriding the @code{'to-barline} property. + +" + doctitle = "Setting hairpin behavior at bar lines" +} % begin verbatim + +\relative c'' { + e4\< e2. + e1\! + \override Hairpin #'to-barline = ##f + e4\< e2. + e1\! +} diff --git a/Documentation/snippets/setting-the-minimum-length-of-hairpins.ly b/Documentation/snippets/setting-the-minimum-length-of-hairpins.ly new file mode 100644 index 0000000000..ee4721f5bf --- /dev/null +++ b/Documentation/snippets/setting-the-minimum-length-of-hairpins.ly @@ -0,0 +1,39 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "expressive-marks" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Si los reguladores son demasiado cortos, se pueden alargar +modificando la propiedad @code{minimum-length} del objeto +@code{Hairpin}. + +" + doctitlees = "Ajustar la longitud mínima de los reguladores" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d +texidocde = " +Wenn Crescendo-Klammern zu kurz sind, können sie verlängert werden, indem +die @code{minimum-length}-Eigenschaft des @code{Hairpin}-Objektes +verändert wird. + +" + doctitlede = "Die Mindestlänge von Crescendo-Klammern bestimmen" + + texidoc = " +If hairpins are too short, they can be lengthened by modifying the +@code{minimum-length} property of the @code{Hairpin} object. + +" + doctitle = "Setting the minimum length of hairpins" +} % begin verbatim + +\relative c'' { + c4\< c\! d\> e\! + \override Hairpin #'minimum-length = #5 + << f1 { s4 s\< s\> s\! } >> +} + diff --git a/Documentation/snippets/shortening-volta-brackets.ly b/Documentation/snippets/shortening-volta-brackets.ly new file mode 100644 index 0000000000..691fbb7297 --- /dev/null +++ b/Documentation/snippets/shortening-volta-brackets.ly @@ -0,0 +1,52 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "repeats" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +De forma predeterminada, los corchetes de primera y segunda vez se +trazan encima de los finales alternativos completos, pero es posible +acortartlos estableciendo un valor cierto para +@code{voltaSpannerDuration}. En el ejemplo siguiente, el corchete +sólo dura un compás, que corresponde a una duración de 3/4. + +" + doctitlees = "Shortening volta brackets" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Volta-Klammern werden normalerweise über alle Noten der Klammer gezogen, aber +es ist möglich sie zu verkürzen. Hierzu muss +@code{voltaSpannerDuration} definiert werden, in dem Beispiel etwa als +3/4, sodass die Klammer nur einen Takt dauert. + +" + doctitlede = "Volta-Klammern verkürzen" + + texidoc = " +By default, the volta brackets will be drawn over all of the +alternative music, but it is possible to shorten them by setting +@code{voltaSpannerDuration}. In the next example, the bracket only +lasts one measure, which is a duration of 3/4. + +" + doctitle = "Shortening volta brackets" +} % begin verbatim + +\relative c'' { + \time 3/4 + c4 c c + \set Score.voltaSpannerDuration = #(ly:make-moment 3 4) + \repeat volta 5 { d4 d d } + \alternative { + { + e4 e e + f4 f f + } + { g4 g g } + } +} + diff --git a/Documentation/snippets/showing-chords-at-changes.ly b/Documentation/snippets/showing-chords-at-changes.ly new file mode 100644 index 0000000000..1d970e7d60 --- /dev/null +++ b/Documentation/snippets/showing-chords-at-changes.ly @@ -0,0 +1,44 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "chords" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Se pueden imprimir los acordes exclusivamente al comienzo de las +líneas y cuando cambia el acorde. + +" + doctitlees = "Imprimir los acordes cuando se produce un cambio" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Akkordsymbole können so eingestellt werden, dass sie nur zu Beginn der Zeile +und bei Akkordwechseln angezeigt werden. + +" + doctitlede = "Akkordsymbole bei Wechsel anzeigen" + + texidoc = " +Chord names can be displayed only at the start of lines and when the +chord changes. + +" + doctitle = "Showing chords at changes" +} % begin verbatim + +harmonies = \chordmode { + c1:m c:m \break c:m c:m d +} +<< + \new ChordNames { + \set chordChanges = ##t + \harmonies + } + \new Staff { + \relative c' { \harmonies } + } +>> + diff --git a/Documentation/snippets/simple-lead-sheet.ly b/Documentation/snippets/simple-lead-sheet.ly new file mode 100644 index 0000000000..711f254d3f --- /dev/null +++ b/Documentation/snippets/simple-lead-sheet.ly @@ -0,0 +1,38 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "chords" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Al juntar nombres de acorde en cifrado americano, melodía y letra, +obtenemos una hoja guía de acordes o «lead sheet»: + +" + doctitlees = "Hoja guía de acordes o «lead sheet» sencilla" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Ein Liedblatt besteht aus Akkordbezeichnungen, einer Melodie und dem Liedtext: + +" + doctitlede = "Ein einfaches Liedblatt" + + texidoc = " +When put together, chord names, a melody, and lyrics form a lead sheet: + +" + doctitle = "Simple lead sheet" +} % begin verbatim + +<< + \chords { c2 g:sus4 f e } + \relative c'' { + a4 e c8 e r4 + b2 c4( d) + } + \addlyrics { One day this shall be free __ } +>> + diff --git a/Documentation/snippets/simultaneous-notes-intro.itely b/Documentation/snippets/simultaneous-notes-intro.itely new file mode 100644 index 0000000000..9a4612c2ea --- /dev/null +++ b/Documentation/snippets/simultaneous-notes-intro.itely @@ -0,0 +1,7 @@ +@node Simultaneous notes +@unnumbered Simultaneous notes + +@ruser{Simultaneous notes} + +@lysnippets + diff --git a/Documentation/snippets/simultaneous-notes.snippet-list b/Documentation/snippets/simultaneous-notes.snippet-list new file mode 100644 index 0000000000..ace5627929 --- /dev/null +++ b/Documentation/snippets/simultaneous-notes.snippet-list @@ -0,0 +1,10 @@ +additional-voices-to-avoid-collisions.ly +changing-a-single-notes-size-in-a-chord.ly +changing-partcombine-texts.ly +clusters.ly +combining-two-parts-on-the-same-staff.ly +displaying-complex-chords.ly +double-glissando.ly +forcing-horizontal-shift-of-notes.ly +making-an-object-invisible-with-the-transparent-property.ly +suppressing-warnings-for-clashing-note-columns.ly diff --git a/Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly b/Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly new file mode 100644 index 0000000000..a334614052 --- /dev/null +++ b/Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly @@ -0,0 +1,73 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { +%% Translation of GIT committish: 9ba35398048fdf1ca8c83679c7c144b1fd48e75b + texidocfr = " +Ce cannevas comporte tous les éléments d'une chanson : la mélodie, +les paroles, les accords. + +" + doctitlefr = "Paroles, musique et accords" + + lsrtags = "vocal-music, chords, template" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Esta plantilla facilita la preparación de una canción con melodía, +letra y acordes. + +" + doctitlees = "Plantilla de pentagrama único con música, letra y acordes" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Mit diesem Beispiel können Sie einen Song mit Melodie, +Text und Akkorden schreiben. +" + + doctitlede = "Vorlage für eine Notenzeile mit Noten, Text und Akkorden" + +%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae + texidocja = " +これは旋律、単語、コードを持つ歌曲の楽譜のためのテンプレートです。 +" + + texidoc = " +This template allows the preparation of a song with melody, words, and +chords. + +" + doctitle = "Single staff template with notes, lyrics, and chords" +} % begin verbatim + +melody = \relative c' { + \clef treble + \key c \major + \time 4/4 + + a4 b c d +} + +text = \lyricmode { + Aaa Bee Cee Dee +} + +harmonies = \chordmode { + a2 c +} + +\score { + << + \new ChordNames { + \set chordChanges = ##t + \harmonies + } + \new Voice = "one" { \autoBeamOff \melody } + \new Lyrics \lyricsto "one" \text + >> + \layout { } + \midi { } +} + diff --git a/Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly b/Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly new file mode 100644 index 0000000000..497bc414f0 --- /dev/null +++ b/Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly @@ -0,0 +1,77 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "vocal-music, chords, template" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Presentamos a continuación un ejemplo de plantilla para una hoja +guía de acordes con melodía, letra, acordes y diagramas de +trastes. +" + + doctitlees = "Plantilla para un pentagrama único con música, letra, acordes y trastes" + + texidoc = " +Here is a simple lead sheet template with melody, lyrics, chords and +fret diagrams. + +" + doctitle = "Single staff template with notes, lyrics, chords and frets" +} % begin verbatim + +% Define the fret diagrams to be used +cFretDiagram = \markup { + \fret-diagram #"6-x;5-3-3;4-2-2;3-o;2-1-1;1-o;" +} + +gFretDiagram = \markup { + \fret-diagram #"6-3-2;5-2-1;4-o;3-o;2-o;1-3-3;" +} + +verseI = \lyricmode { + \set stanza = #"1." + This is the first verse +} + +verseII = \lyricmode { + \set stanza = #"2." + This is the second verse. +} + +theChords = \new ChordNames { + \chordmode { + % insert the chords for chordnames here + c2 g4 c + } +} + +staffMelody = \new Staff { + \context Voice = "voiceMelody" { + \key c \major + \clef treble + \relative c' { + % Type notes and fret diagram markups here + c4^\cFretDiagram d8 e f4^\gFretDiagram g^\cFretDiagram + \bar "|." + } + } +} + +\score { + << + \theChords + \staffMelody + \new Lyrics = "lyricsI" \lyricmode { + \lyricsto "voiceMelody" \verseI + } + \new Lyrics = "lyricsII" \lyricmode { + \lyricsto "voiceMelody" \verseII + } + >> + \layout { } + \midi { } +} + diff --git a/Documentation/snippets/single-staff-template-with-notes-and-chords.ly b/Documentation/snippets/single-staff-template-with-notes-and-chords.ly new file mode 100644 index 0000000000..3c2b6d618e --- /dev/null +++ b/Documentation/snippets/single-staff-template-with-notes-and-chords.ly @@ -0,0 +1,72 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { +%% Translation of GIT committish: 9ba35398048fdf1ca8c83679c7c144b1fd48e75b + texidocfr = " +Vous avez besoin de la partition d'une mélodie avec les accords ? +N'allez pas plus loin ! + +" + +doctitlefr = "Mélodie simple et accords" + + lsrtags = "chords, template" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +¿Quiere preparar una hoja guía de acordes (o «lead sheet») con +melodía y acordes? ¡No busque más! + +" + +doctitlees = "Plantilla de pentagrama único con música y acordes" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Wollen Sie ein Liedblatt mit Melodie und Akkorden schreiben? Hier ist +das richtige Beispiel für Sie! +" + + doctitlede = "Vorlage für eine Notenzeile mit Akkorden" + +%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae + texidocja = " +旋律とコードを持つリード譜を欲しくはありませんか?他を見る必要はありません! +" + + texidoc = " +Want to prepare a lead sheet with a melody and chords? Look no further! + + +" + doctitle = "Single staff template with notes and chords" +} % begin verbatim + +melody = \relative c' { + \clef treble + \key c \major + \time 4/4 + + f4 e8[ c] d4 g + a2 ~ a +} + +harmonies = \chordmode { + c4:m f:min7 g:maj c:aug + d2:dim b:sus +} + +\score { + << + \new ChordNames { + \set chordChanges = ##t + \harmonies + } + \new Staff \melody + >> + \layout{ } + \midi { } +} + diff --git a/Documentation/snippets/single-staff-template-with-notes-and-lyrics.ly b/Documentation/snippets/single-staff-template-with-notes-and-lyrics.ly new file mode 100644 index 0000000000..28f3a4c1c3 --- /dev/null +++ b/Documentation/snippets/single-staff-template-with-notes-and-lyrics.ly @@ -0,0 +1,88 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { +%% Translation of GIT committish: 892286cbfdbe89420b8181975032ea975e79d2f5 + + texidocfr = " +Ce canevas comporte une simple ligne mélodique agrémentée de paroles. +Recopiez-le, ajoutez-y d'autres notes et paroles. Les ligatures +automatiques sont ici désactivées, comme il est d'usage en matière de +musique vocale. Pour activer la fonction de ligature automatique, +modifiez ou commentez la ligne en question. + +" + doctitle = "Portée unique et paroles" + + doctitle = "Portée unique et paroles" + + lsrtags = "vocal-music, template" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Esta pequeña plantilla muestra una melodía sencilla con letra. Córtela +y péguela, escriba las notas y luego la letra. Este ejemplo desactiva +el barrado automático, que es lo más frecuente en las partes vocales +antiguas. Para usar el barrado automático modifique o marque como un +comentario la línea correspondiente. + +" + doctitlees = "Plantilla de pentagrama único don notas y letra" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Das nächste Beispiel zeigt eine einfache Melodie mit Text. Kopieren +Sie es in Ihre Datei, fügen Sie Noten und Text hinzu und übersetzen +Sie es mit LilyPond. In dem Beispiel wird die automatische +Balkenverbindung ausgeschaltet (mit dem Befehl @code{\autoBeamOff}), +wie es für Vokalmusik üblich ist. +Wenn Sie die Balken wieder einschalten wollen, müssen Sie die +entsprechende Zeile entweder ändern oder auskommentieren. +" + + doctitlede = "Vorlage für ein Notensystem mit Noten und Gesangstext" + +%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae + texidocja = " +この小さなテンプレートは歌詞を持つ簡単な旋律を表しています。カット&ペーストして、音符@c +を付け加えて、それから歌詞の単語を付け加えてください。この例は自動ビームを off にして@c +います。これはボーカル パートでは一般的なことです。自動ビームを使用するには、対応する@c +行を変更するか、コメント アウトしてください。 +" + + + texidoc = " +This small template demonstrates a simple melody with lyrics. Cut and +paste, add notes, then words for the lyrics. This example turns off +automatic beaming, which is common for vocal parts. To use automatic +beaming, change or comment out the relevant line. + +" + doctitle = "Single staff template with notes and lyrics" +} % begin verbatim + +melody = \relative c' { + \clef treble + \key c \major + \time 4/4 + + a4 b c d +} + +text = \lyricmode { + Aaa Bee Cee Dee +} + +\score{ + << + \new Voice = "one" { + \autoBeamOff + \melody + } + \new Lyrics \lyricsto "one" \text + >> + \layout { } + \midi { } +} + diff --git a/Documentation/snippets/single-staff-template-with-only-notes.ly b/Documentation/snippets/single-staff-template-with-only-notes.ly new file mode 100644 index 0000000000..1ada322f78 --- /dev/null +++ b/Documentation/snippets/single-staff-template-with-only-notes.ly @@ -0,0 +1,66 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { +%% Translation of GIT committish: 892286cbfdbe89420b8181975032ea975e79d2f5 + texidocfr = " +Cet exemple simpliste se compose d'une portée agrémentée de quelques +notes. Il convient tout à fait pour un instrument seul ou un +fragment mélodique. Recopiez-le dans un nouveau fichier, ajoutez-y +d'autres notes et c'est pret ! + +" + doctitlefr = "Portée unique avec quelques notes" + + lsrtags = "template" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Esta plantilla simple prepara un pentagrama con notas, adecuado para +un instrumento solista o un fragmento melódico. Córtelo y péguelo en +un archivo, escriba las notas y ¡ya está! + +" + doctitlees = "Plantilla de un solo pentagrama, con notas únicamente" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Das erste Beispiel zeigt ein Notensystem mit Noten, passend für ein +Soloinstrument oder ein Melodiefragment. Kopieren Sie es und fügen +Sie es in Ihre Datei ein, schreiben Sie die Noten hinzu, und Sie haben +eine vollständige Notationsdatei. +" + + doctitlede = "Vorlage für ein Notensystem" + +%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae + texidocja = " +これは音符を持つ譜表を提供するとても簡単なテンプレートであり、ソロの楽器や旋律に適しています。@c +これをファイルにカット&ペーストして、音符を付け加えれば完了です! +" + + + texidoc = " +This very simple template gives you a staff with notes, suitable for a +solo instrument or a melodic fragment. Cut and paste this into a file, +add notes, and you're finished! + +" + doctitle = "Single staff template with only notes" +} % begin verbatim + +melody = \relative c' { + \clef treble + \key c \major + \time 4/4 + + a4 b c d +} + +\score { + \new Staff \melody + \layout { } + \midi { } +} + diff --git a/Documentation/snippets/skips-in-lyric-mode-2.ly b/Documentation/snippets/skips-in-lyric-mode-2.ly new file mode 100644 index 0000000000..80ec4fbbde --- /dev/null +++ b/Documentation/snippets/skips-in-lyric-mode-2.ly @@ -0,0 +1,21 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "rhythms, vocal-music" + + texidoc = " +Although @code{s} skips cannot be used in @code{\\lyricmode} (it is +taken to be a literal \"s\", not a space), double quotes (@code{\"\"}) +or underscores (@code{_}) are available.So for example: + +" + doctitle = "Skips in lyric mode (2)" +} % begin verbatim + +<< + \relative c'' { a4 b c d } + \new Lyrics \lyricmode { a4 "" _ gap } +>> + diff --git a/Documentation/snippets/skips-in-lyric-mode.ly b/Documentation/snippets/skips-in-lyric-mode.ly new file mode 100644 index 0000000000..0335261931 --- /dev/null +++ b/Documentation/snippets/skips-in-lyric-mode.ly @@ -0,0 +1,21 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "rhythms, vocal-music" + + texidoc = " +The @code{s} syntax for skips is only available in note mode and chord +mode. In other situations, for example, when entering lyrics, using the +@code{\\skip} command is recommended. + +" + doctitle = "Skips in lyric mode" +} % begin verbatim + +<< + \relative { a'1 a } + \new Lyrics \lyricmode { \skip 1 bla1 } +>> + diff --git a/Documentation/snippets/snap-pizzicato-markup-bartok-pizzicato.ly b/Documentation/snippets/snap-pizzicato-markup-bartok-pizzicato.ly new file mode 100644 index 0000000000..26374977d1 --- /dev/null +++ b/Documentation/snippets/snap-pizzicato-markup-bartok-pizzicato.ly @@ -0,0 +1,68 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "expressive-marks, unfretted-strings" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + doctitlees = "Marca de pizzicato de chasquido (@q{pizzicato de Bartók})" + texidoces = " +El pizzicato de chasquido (también llamado @q{Pizzicato de Bartók}) es un +@q{pizzicato fuerte en que la cuerda se pulsa verticalmente produciendo un +chasquido y rebotando en el diapasón del instrumento} (Wikipedia). Se +denota mediante una circunferencia con una línea vertical corta que parte +del centro de aquélla hacia fuera. Aunque LilyPond no tiene ninguna +instrucción predefinida para crear esta marca, es fácil hacer la definición +y colocarla directamente en el archivo de lilypond. +" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + doctitlede = "Bartók-Pizzicato" + texidocde = " +Das Bartók-Pizzicato @q{ist eine besondere Form des Pizzicato, bei dem der +Spieler die Saite auf das Griffbrett aufschlagen lässt, sodass zusätzlich +zum angeschlagenen Ton ein scharfes, knallendes Geräusch ertönt} +(Wikipedia). Es wird dargestellt als kleiner Kreis mit einer vertikalen +Linie, die vom Kreiszentrum aus nach oben weist und ein Stück außerhalb des +Kreises endet. Lilypond hat keinen eigenen Glyphen für dieses Symbol; es +ist aber einfach, direkt eine Definition in die Eingabedatei einzufügen. +" + + texidoc = " +A snap-pizzicato (also known as \"Bartok pizzicato\") is a \"strong +pizzicato where the string is plucked vertically by snapping and +rebounds off the fingerboard of the instrument\" (Wikipedia). It is +denoted by a cicle with a vertical line going from the center upwards +outside the circle. While Lilypond does not have a pre-defined command +to created this markup, it is easy to create a definition and place it +directly into the lilypond file. + +" + doctitle = "Snap-pizzicato markup (\"Bartok pizzicato\")" +} % begin verbatim + +#(define-markup-command (snappizz layout props) () + (interpret-markup layout props + (markup #:stencil + (ly:stencil-translate-axis + (ly:stencil-add + (make-circle-stencil 0.7 0.1 #f) + (ly:make-stencil + (list 'draw-line 0.1 0 0.1 0 1) + '(-0.1 . 0.1) '(0.1 . 1))) + 0.7 X)))) + +snapPizzicato = \markup \snappizz + +% now it can be used as \snappizzicato after the note/chord +% Note that a direction (-, ^ or _) is required. +\relative c' { + c4^\snapPizzicato + % This does NOT work: + %\snapPizzicato + -\snapPizzicato + ^\snapPizzicato + _\snapPizzicato +} + diff --git a/Documentation/snippets/spacing-intro.itely b/Documentation/snippets/spacing-intro.itely new file mode 100644 index 0000000000..c19a14091c --- /dev/null +++ b/Documentation/snippets/spacing-intro.itely @@ -0,0 +1,7 @@ +@node Spacing +@unnumbered Spacing + +@ruser{Spacing issues} + +@lysnippets + diff --git a/Documentation/snippets/spacing.snippet-list b/Documentation/snippets/spacing.snippet-list new file mode 100644 index 0000000000..81a465a289 --- /dev/null +++ b/Documentation/snippets/spacing.snippet-list @@ -0,0 +1,6 @@ +adjusting-lyrics-vertical-spacing.ly +allowing-fingerings-to-be-printed-inside-the-staff.ly +page-label.ly +proportional-strict-notespacing.ly +vertically-aligned-dynamics-and-textscripts.ly +vertically-aligning-ossias-and-lyrics.ly diff --git a/Documentation/snippets/specifying-context-with-beatgrouping.ly b/Documentation/snippets/specifying-context-with-beatgrouping.ly new file mode 100644 index 0000000000..df8c065e8f --- /dev/null +++ b/Documentation/snippets/specifying-context-with-beatgrouping.ly @@ -0,0 +1,88 @@ +%% Do not edit this file; it is auto-generated from input/new +%% This file is in the public domain. +%% Note: this file works from version 2.13.1 +\version "2.13.4" + +\header { +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Mediante la especificación del contexto, el efecto de +@code{beatGrouping} puede limitarse al contexto especificado, y +sobreescribirse los valores establecidos en contextos de niveles +más altos. Las instruccionees @code{\\set} se deben situar +@emph{después} de todas las instrucciones @code{\\time}: + + +" + doctitlees = "Especificar el contexto con beatGrouping" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Wenn der Kontext angegeben wird, kann die Auswirkung von @code{beatGrouping} +auf den angegebenen Kontext beschränkt werden und die Werte, die in Kontexten +auf höhrer Ebene angegeben wurden, können verändert werden. Der +@code{\\set}-Befehl muss @emph{nach} den @code{\\time}-Befehl geschrieben +werden: +" + doctitlede = "Den Kontext für beatGrouping angeben" + + +%% Translation of GIT committish: b3196fadd8f42d05ba35e8ac42f7da3caf8a3079 + texidocfr = " +Le fait de spécifier un contexte à @code{beatGrouping} permet d'en +limiter les effets. Par voie de conséquence, il sera possible +d'outrepasser les règles définies à un niveau supérieur. La commande +@code{\\set} destinée à en modifier les valeurs doit se placer après la +commande @code{\\time} : + +" + doctitlefr = "Spécification du contexte auquel s'appliquera beatGrouping" + + lsrtags = "rhythms, tweaks-and-overrides" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Mediante la especificación del contexto, el efecto de +@code{beatGrouping} puede limitarse al contexto especificado, y +sobreescribirse los valores establecidos en contextos de niveles +más altos. Las instruccionees @code{\\set} se deben situar +@emph{después} de todas las instrucciones @code{\\time}: + + +" + doctitlees = "Especificar el contexto con beatGrouping" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Wenn der Kontext angegeben wird, kann die Auswirkung von @code{beatGrouping} +auf den angegebenen Kontext beschränkt werden und die Werte, die in Kontexten +auf höhrer Ebene angegeben wurden, können verändert werden. Der +@code{\\set}-Befehl muss @emph{nach} den @code{\\time}-Befehl geschrieben +werden: +" + doctitlede = "Den Kontext für beatGrouping angeben" + + +%% Translation of GIT committish: b3196fadd8f42d05ba35e8ac42f7da3caf8a3079 + texidocfr = " +Le fait de spécifier un contexte à @code{beatGrouping} permet d'en +limiter les effets. Par voie de conséquence, il sera possible +d'outrepasser les règles définies à un niveau supérieur. La commande +@code{\\set} destinée à en modifier les valeurs doit se placer après la +commande @code{\\time} : + +" + doctitlefr = "Spécification du contexte auquel s'appliquera beatGrouping" + + texidoc = " +By specifying the context, the effect of @code{beatGrouping} can be +limited to the context specified, and the values which may have been +set in higher-level contexts can be overridden. The @code{\\set} +commands must be placed after all @code{\\time} commands: + +" + doctitle = "Specifying context with beatGrouping" +} % begin verbatim + + +\markup{This snippet has been deprecated and will be removed in 2.14} diff --git a/Documentation/snippets/staff-notation-intro.itely b/Documentation/snippets/staff-notation-intro.itely new file mode 100644 index 0000000000..b78176376a --- /dev/null +++ b/Documentation/snippets/staff-notation-intro.itely @@ -0,0 +1,7 @@ +@node Staff notation +@unnumbered Staff notation + +@ruser{Staff notation} + +@lysnippets + diff --git a/Documentation/snippets/staff-notation.snippet-list b/Documentation/snippets/staff-notation.snippet-list new file mode 100644 index 0000000000..5c9b6db9b4 --- /dev/null +++ b/Documentation/snippets/staff-notation.snippet-list @@ -0,0 +1,28 @@ +adding-ambitus-per-voice.ly +adding-an-extra-staff-at-a-line-break.ly +adding-an-extra-staff.ly +changing-the-number-of-lines-in-a-staff.ly +changing-the-staff-size.ly +changing-the-tempo-without-a-metronome-mark.ly +creating-blank-staves.ly +creating-metronome-marks-in-markup-mode.ly +display-bracket-with-only-one-staff-in-a-system.ly +incipit.ly +inserting-score-fragments-above-a-staff,-as-markups.ly +letter-tablature-formatting.ly +making-some-staff-lines-thicker-than-the-others.ly +measure-counter.ly +mensurstriche-layout-bar-lines-between-the-staves.ly +modern-tab-text-clef.ly +nesting-staves.ly +non-traditional-key-signatures.ly +printing-metronome-and-rehearsal-marks-below-the-staff.ly +quoting-another-voice-with-transposition.ly +quoting-another-voice.ly +removing-the-first-empty-line.ly +tick-bar-lines.ly +time-signature-in-parentheses.ly +tweaking-clef-properties.ly +use-square-bracket-at-the-start-of-a-staff-group.ly +volta-below-chords.ly +volta-multi-staff.ly diff --git a/Documentation/snippets/stand-alone-two-column-markup.ly b/Documentation/snippets/stand-alone-two-column-markup.ly new file mode 100644 index 0000000000..c50056b9c6 --- /dev/null +++ b/Documentation/snippets/stand-alone-two-column-markup.ly @@ -0,0 +1,54 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "text" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Los textos independientes se pueden disponer en varias columnas +utilizando instrucciones @code{\\markup}: + +" + doctitlees = "Elemento de marcado de texto independiente en dos columnas" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Isolierter Text kann in mehreren Spalten mit @code{\\markup}-Befehlen +angeordnet werden: + +" + doctitlede = "Isolierter Text in zwei Spalten" + + texidoc = " +Stand-alone text may be arranged in several columns using +@code{\\markup} commands: + +" + doctitle = "Stand-alone two-column markup" +} % begin verbatim + +\markup { + \fill-line { + \hspace #1 + \column { + \line { O sacrum convivium } + \line { in quo Christus sumitur, } + \line { recolitur memoria passionis ejus, } + \line { mens impletur gratia, } + \line { futurae gloriae nobis pignus datur. } + \line { Amen. } + } + \hspace #2 + \column { + \line { \italic { O sacred feast } } + \line { \italic { in which Christ is received, } } + \line { \italic { the memory of His Passion is renewed, } } + \line { \italic { the mind is filled with grace, } } + \line { \italic { and a pledge of future glory is given to us. } } + \line { \italic { Amen. } } + } + \hspace #1 + } +} diff --git a/Documentation/snippets/stem-and-beam-behavior-in-tablature.ly b/Documentation/snippets/stem-and-beam-behavior-in-tablature.ly new file mode 100644 index 0000000000..f97360076a --- /dev/null +++ b/Documentation/snippets/stem-and-beam-behavior-in-tablature.ly @@ -0,0 +1,53 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "fretted-strings" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +La dirección de las plicas se contola de la misma forma en la +tablatura que en la notación tradicional. Las barras se pueden +poner horizontales, como se muestra en este ejemplo. + +" + doctitlees = "Comportamiento de las plicas y las barras de corchea en tablaturas" + +%% Translation of GIT committish: cd4950757ab1ab6c89805b0b7c978bfca034f940 + + texidocfr = " +La direction des hampes se gère dans les tablatures tout comme en +notation traditionnelle. Les ligatures peuvent être mises à l'horizontale +comme le montre cet exemple. + +" + doctitlefr = "Hampes et ligatures en mode tablature" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Die Richtung von Hälsen wird in Tabulaturen genauso wie in normaler Notation +eingestellt. Balken können horizontal eingestellt werden, wie das Beispiel +zeigt. + +" + doctitlede = "Hals- und Balkenverhalten in einer Tabulatur" + + texidoc = " +The direction of stems is controlled the same way in tablature as in +traditional notation. Beams can be made horizontal, as shown in this +example. + +" + doctitle = "Stem and beam behavior in tablature" +} % begin verbatim + +\new TabStaff { + \relative c { + g16 b d g b d g b + \stemDown + \override Beam #'damping = #+inf.0 + g,,16 b d g b d g b + } +} + diff --git a/Documentation/snippets/stemlets.ly b/Documentation/snippets/stemlets.ly new file mode 100644 index 0000000000..23b822cef1 --- /dev/null +++ b/Documentation/snippets/stemlets.ly @@ -0,0 +1,42 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "rhythms" + + texidoc = " +In some notational conventions beams are allowed to extend over rests. +Depending on preference, these beams may drop 'stemlets' to help the +eye appreciate the rhythm better, and in some modern music the rest +itself is omitted and only the stemlet remains. + + +This snippet shows a progression from traditional notation, to beams +over the rest, to stemlets over the rest, to stemlets alone. Stemlets +are generated by overriding the @code{'stemlet-length} property of +@code{Stem}, while rests are hidden by setting @code{'transparent = +##t}. + + +Some @code{\\markup} elements are included in the source to highlight +the different notations. + +" + doctitle = "Stemlets" +} % begin verbatim + +\paper { ragged-right = ##f } + +{ + c'16^\markup { traditional } d' r f' + g'16[^\markup { beams over rests } f' r d'] + + % N.B. use Score.Stem to set for the whole score. + \override Staff.Stem #'stemlet-length = #0.75 + + c'16[^\markup { stemlets over rests } d' r f'] + g'16[^\markup { stemlets and no rests } f' \once \override Rest #'transparent = ##t r d'] +} + + diff --git a/Documentation/snippets/string-quartet-template-simple.ly b/Documentation/snippets/string-quartet-template-simple.ly new file mode 100644 index 0000000000..2885ba0275 --- /dev/null +++ b/Documentation/snippets/string-quartet-template-simple.ly @@ -0,0 +1,100 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { +%% Translation of GIT committish: 892286cbfdbe89420b8181975032ea975e79d2f5 + texidocfr = " +Voici un canevas pour quatuor à cordes. Notez l'utilisation de la +variable @code{\\global} pour traiter la métrique et la tonalité. + +" + doctitlefr = "Quatuor à cordes (conducteur)" + + lsrtags = "unfretted-strings, template" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Esta plantilla muestra un cuarteto de cuerda normal. También utiliza +una sección @code{\\global} para el compás y la armadura + +" + doctitlees = "Plantilla de cuarteto de cuerda (sencilla)" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Dieses Beispiel demonstriert die Partitur für ein Streichquartett. Hier +wird auch eine @qq{@code{\global}}-Variable für Taktart und +Vorzeichen benutzt. +" + + doctitlede = "Vorlage für Streichquartett (einfach)" + +%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae + texidocja = " +これは簡単な弦楽四重奏のためのテンプレートです。これは拍子記号と調号のために +@code{@bs{}global} セクションを使っています。 +" + + texidoc = " +This template demonstrates a simple string quartet. It also uses a +@code{\\global} section for time and key signatures + +" + doctitle = "String quartet template (simple)" +} % begin verbatim + +global= { + \time 4/4 + \key c \major +} + +violinOne = \new Voice \relative c'' { + \set Staff.instrumentName = #"Violin 1 " + + c2 d + e1 + + \bar "|." +} + +violinTwo = \new Voice \relative c'' { + \set Staff.instrumentName = #"Violin 2 " + + g2 f + e1 + + \bar "|." +} + +viola = \new Voice \relative c' { + \set Staff.instrumentName = #"Viola " + \clef alto + + e2 d + c1 + + \bar "|." +} + +cello = \new Voice \relative c' { + \set Staff.instrumentName = #"Cello " + \clef bass + + c2 b + a1 + + \bar "|." +} + +\score { + \new StaffGroup << + \new Staff << \global \violinOne >> + \new Staff << \global \violinTwo >> + \new Staff << \global \viola >> + \new Staff << \global \cello >> + >> + \layout { } + \midi { } +} + diff --git a/Documentation/snippets/string-quartet-template-with-separate-parts.ly b/Documentation/snippets/string-quartet-template-with-separate-parts.ly new file mode 100644 index 0000000000..81a943d85b --- /dev/null +++ b/Documentation/snippets/string-quartet-template-with-separate-parts.ly @@ -0,0 +1,204 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { +%% Translation of GIT committish: 892286cbfdbe89420b8181975032ea975e79d2f5 + texidocfr = " +Grâce à ce canevas, vous pouvez obtenir une partition d'excellente +facture pour quatuor à cordes mais aussi, si le besoin s'en faisait +sentir, une partie séparée par instrument. Par ailleurs, cet exemple +illustre l'utilisation de la fonction @code{\\tag} dans le but +d'extraire des parties séparées. + +Il vous faudra découper ce canevas en plusieurs fichiers séparés ; leur +nom respectif est indiqué en commentaire : @code{piece.ly} comporte tout +ce qui a trait à la musique, les autres fichiers -- @code{score.ly}, +@code{vn1.ly}, @code{vn2.ly}, @code{vla.ly}, et @code{vlc.ly} -- vous +permettront d'obtenir les parties selon le pupitre. + + +N'oubliez pas de supprimer les commentaires superflus des fichiers +individualisés ! + +" + doctitlefr = "Quatuor à cordes, avec parties séparées" + + lsrtags = "unfretted-strings, template" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +El fragmento de código \"Plantilla de cuarteto de cuerda\" produce un +resultado satisfactorio para el cuarteto, pero ¿y si tenemos que +imprimir las particellas? Esta nueva plantilla muestra cómo usar la +funcionalidad @code{\\tag} (etiqueta) para dividir fácilmente una +pieza en particellas indicviduales. + +Tenemos que dividir esta plantilla en archivos independientes; los +nombres de archivo están dentro de los comentarios al principio de +cada archivo. @code{piece.ly} contiene todas las definiciones de +música. Los otros archivos (@code{score.ly}, @code{vn1.ly}, +@code{vn2.ly}, @code{vla.ly} y @code{vlc.ly}) producen la particella +correspondiente. + +¡No olvide quitar los comentarios que hemos especificado cuando use +los archivos independientes! + +" + doctitlees = "Plantilla de cuarteto de cuerda con particellas independientes" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Mit diesem Beispiel können Sie ein schönes Streichquartett notieren, +aber wie gehen Sie vor, wenn Sie Stimmen brauchen? Das Beispiel +oben hat gezeigt, wie Sie mit Variablen einzelne Abschnitte getrennt +voneinander notieren können. Im nächsten Beispiel wird nun +gezeigt, wie Sie mit diesen Variablen einzelne Stimmen erstellen. + +Sie müssen das Beispiel in einzelne Dateien aufteilen; die Dateinamen +sind in den Kommentaren am Anfang jeder Datei enthalten. @code{piece.ly} +enthält die Noten. Die anderen Dateien -- @code{score.ly}, +@code{vn1.ly}, @code{vn2.ly}, @code{vla.ly} und +@code{vlc.ly} -- erstellen daraus die entsprechenden Stimmen bzw. die +Partitur (@code{score.ly}). Mit @code{\tag} wird den Stimmen ein Name +zugewiesen, auf den zurückgegriffen werden kann. +" + + doctitlede = "Vorlage für Streichquartett mit einzelnen Stimmen" + +%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae + texidocja = " +\"弦楽四重奏テンプレート\" は適切な弦楽四重奏の楽譜を作り出しますが、個々の@c +パート譜を譜刻する必要がある場合はどうでしょうか?今度の新しいテンプレートは +@code{@bs{}tag} 機能を用いて容易に楽曲を個々のパートに分ける方法を示しています。 + +このテンプレートは別々のファイルに分ける必要があります。ファイル名は各ファイル@c +の開始部分のコメントの中に記述されています。@code{piece.ly} はすべての音楽定義@c +を保持しています。他のファイル - @code{score.ly}, @code{vn1.ly}, @code{vn2.ly}, +@code{vla.ly} それに @code{vlc.ly} - は対応するパートを作り出します。 + + +別々のファイルに分ける場合は、指定されたコメントを外すことを忘れないでください! +" + + texidoc = " +The \"String quartet template\" snippet produces a nice string quartet, +but what if you needed to print parts? This new template demonstrates +how to use the @code{\\tag} feature to easily split a piece into +individual parts. + +You need to split this template into separate files; the filenames are +contained in comments at the beginning of each file. @code{piece.ly} +contains all the music definitions. The other files – @code{score.ly}, +@code{vn1.ly}, @code{vn2.ly}, @code{vla.ly}, and @code{vlc.ly} – +produce the appropriate part. + + +Do not forget to remove specified comments when using separate files! + +" + doctitle = "String quartet template with separate parts" +} % begin verbatim + +%%%%% piece.ly +%%%%% (This is the global definitions file) + +global= { + \time 4/4 + \key c \major +} + +Violinone = \new Voice { \relative c''{ + \set Staff.instrumentName = #"Violin 1 " + + c2 d e1 + +\bar "|." }} %********************************* +Violintwo = \new Voice { \relative c''{ + \set Staff.instrumentName = #"Violin 2 " + + g2 f e1 + +\bar "|." }} %********************************* +Viola = \new Voice { \relative c' { + \set Staff.instrumentName = #"Viola " + \clef alto + + e2 d c1 + +\bar "|." }} %********************************* +Cello = \new Voice { \relative c' { + \set Staff.instrumentName = #"Cello " + \clef bass + + c2 b a1 + +\bar "|."}} %********************************** + +music = { + << + \tag #'score \tag #'vn1 \new Staff { << \global \Violinone >> } + \tag #'score \tag #'vn2 \new Staff { << \global \Violintwo>> } + \tag #'score \tag #'vla \new Staff { << \global \Viola>> } + \tag #'score \tag #'vlc \new Staff { << \global \Cello>> } + >> +} + +%%% These are the other files you need to save on your computer + +%%%%% score.ly +%%%%% (This is the main file) + + +%\include "piece.ly" %%% uncomment this line when using a separate file +#(set-global-staff-size 14) +\score { + \new StaffGroup \keepWithTag #'score \music + \layout { } + \midi { } +} + + +%{ Uncomment this block when using separate files + +%%%%% vn1.ly +%%%%% (This is the Violin 1 part file) + +\include "piece.ly" +\score { + \keepWithTag #'vn1 \music + \layout { } +} + + +%%%%% vn2.ly +%%%%% (This is the Violin 2 part file) + +\include "piece.ly" +\score { + \keepWithTag #'vn2 \music + \layout { } +} + + +%%%%% vla.ly +%%%%% (This is the Viola part file) + +\include "piece.ly" +\score { + \keepWithTag #'vla \music + \layout { } +} + + +%%%%% vlc.ly +%%%%% (This is the Cello part file) + +\include "piece.ly" +\score { + \keepWithTag #'vlc \music + \layout { } +} + +%} + diff --git a/Documentation/snippets/sub-dividing-beams.ly b/Documentation/snippets/sub-dividing-beams.ly new file mode 100644 index 0000000000..ab742798b2 --- /dev/null +++ b/Documentation/snippets/sub-dividing-beams.ly @@ -0,0 +1,91 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "rhythms" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Las barras de semicorcheas (o notas más breves) seguidas no se +subdividen de forma predeterminada. Esto es: las tres (o más) +barras se prolongan, sin dividirse, sobre grupos completos de +notas. Este comportamiento se puede modificar para que las barras +se subdividan en subgrupos mediante el establecimiento de la +propiedad @code{subdivideBeams}. Cuando está establecida, las +diversas barras se subdividen a intervalos definidos por el valor +actual de la longitud del pulso @code{beatLength} reduciendo las +barras múltiples a una sola entre los subgrupos. Observe que el +valor predeterminado de @code{beatLength} es de una unidad sobre +el denominador del compás en curso, si no está establecido +explícitamente. Se debe establecer al valor de una fracción que +da la duración el subgrupo de barras utilizando la función +@code{make-moment}, como se muestra aquí: + +" + doctitlees = "Subdivisión de las barras de semicorchea" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Die Balken von aufeinanderfolgenden Sechszehnteln (oder kürzeren Notenwerten) +werden standardmäßig nicht unterteilt. Dieses Verhalten kann verändert +werden, sodass die Balken in Untergruppen aufgeteilt werden, indem man +die Eigenschaft @code{subdivideBeams} verändert. Man muss die Unterteilungsintervalle +als Notenbruch mit der @code{make-moment}-Funktion für @code{beatLength} angeben, +damit die Balken unterbrochen wird und nur ein Balken durchgezogen bleibt. Der +Standardwert für @code{beatLength} ist 1 / Zähler des aktuellen Taktes. + +" + doctitlede = "Balken in Untergruppen teilen" + + +%% Translation of GIT committish: b3196fadd8f42d05ba35e8ac42f7da3caf8a3079 + texidocfr = " +Les ligatures d'une succession de notes de durée inférieure à la croche +ne sont pas subdivisées par défaut. Autrement dit, tous les traits de +ligature seront continus. Ce comportement peut être modifié afin de +diviser la ligature en sous-groupes grâce à la propriété +@code{subdivideBeams}. Lorsqu'elle est activée, les ligatures seront +subdivisées selon un intervalle défini par @code{beatLength} ; il n'y +aura alors plus qu'un seul trait de ligature entre chaque sous-groupe. +Par défaut, @code{beatLength} fixe la valeur de référence à une noire. +Il faudra donc lui fournir, à l'aide de la fonction @code{make-moment}, +une fraction correspondant au sous-groupe désiré, comme dans l'exemple +suivant. + +" + doctitlefr = "Subdivision des ligatures" + + texidoc = " +The beams of consecutive 16th (or shorter) notes are, by default, not +sub-divided. That is, the three (or more) beams stretch unbroken over +entire groups of notes. This behavior can be modified to sub-divide +the beams into sub-groups by setting the property +@code{subdivideBeams}. When set, multiple beams will be sub-divided at +intervals defined by the current value of @code{beatLength} by reducing +the multiple beams to just one beam between the sub-groups. Note that +@code{beatLength} defaults to one over the denominator of the current +time signature if not set explicitly. It must be set to a fraction +giving the duration of the beam sub-group using the @code{make-moment} +function, as shown here: + + + +" + doctitle = "Sub-dividing beams" +} % begin verbatim + +\relative c'' { + c32[ c c c c c c c] + \set subdivideBeams = ##t + c32[ c c c c c c c] + + % Set beam sub-group length to an eighth note + \set beatLength = #(ly:make-moment 1 8) + c32[ c c c c c c c] + + % Set beam sub-group length to a sixteenth note + \set beatLength = #(ly:make-moment 1 16) + c32[ c c c c c c c] +} + diff --git a/Documentation/snippets/suppressing-warnings-for-clashing-note-columns.ly b/Documentation/snippets/suppressing-warnings-for-clashing-note-columns.ly new file mode 100644 index 0000000000..3d114acd62 --- /dev/null +++ b/Documentation/snippets/suppressing-warnings-for-clashing-note-columns.ly @@ -0,0 +1,29 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "simultaneous-notes, tweaks-and-overrides" + + texidoc = " +If notes from two voices with stems in the same direction are placed at +the same position, and both voices have no shift or the same shift +specified, the error message \"warning: ignoring too many clashing note +columns\" will appear when compiling the LilyPond file. This message +can be suppressed by setting the @code{'ignore-collision} property of +the @code{NoteColumn} object to @code{#t}. + +" + doctitle = "Suppressing warnings for clashing note columns" +} % begin verbatim + +ignore = \override NoteColumn #'ignore-collision = ##t + +\relative c' { + << + \ignore + { \stemDown f2 g } + \\ + { c2 c, } + >> +} diff --git a/Documentation/snippets/table-of-contents.ly b/Documentation/snippets/table-of-contents.ly new file mode 100644 index 0000000000..e7f4b60303 --- /dev/null +++ b/Documentation/snippets/table-of-contents.ly @@ -0,0 +1,36 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "paper-and-layout" + + texidoc = " +A table of contents is included using @code{\\markuplines +\\table-of-contents}. The TOC items are added with the +@code{\\tocItem} command. + +" + doctitle = "Table of contents" +} % begin verbatim + +#(set-default-paper-size "a6") + +\book { + \markuplines \table-of-contents + \pageBreak + \tocItem \markup { The first score } + \score { + { + c'1 \pageBreak + \mark "A" \tocItem \markup { Mark A } + d'1 + } + } + \pageBreak + \tocItem \markup { The second score } + \score { + { e'1 } + \header { piece = "Second score" } + } +} diff --git a/Documentation/snippets/template-intro.itely b/Documentation/snippets/template-intro.itely new file mode 100644 index 0000000000..22c9952e84 --- /dev/null +++ b/Documentation/snippets/template-intro.itely @@ -0,0 +1,5 @@ +@node Templates +@unnumbered Templates + +@lysnippets + diff --git a/Documentation/snippets/template.snippet-list b/Documentation/snippets/template.snippet-list new file mode 100644 index 0000000000..7c846c5347 --- /dev/null +++ b/Documentation/snippets/template.snippet-list @@ -0,0 +1,19 @@ +ancient-notation-template----modern-transcription-of-gregorian-music.ly +ancient-notation-template----modern-transcription-of-mensural-music.ly +jazz-combo-template.ly +orchestra,-choir-and-piano-template.ly +piano-template-simple.ly +piano-template-with-centered-dynamics.ly +piano-template-with-centered-lyrics.ly +piano-template-with-melody-and-lyrics.ly +score-for-diatonic-accordion.ly +single-staff-template-with-notes,-lyrics,-and-chords.ly +single-staff-template-with-notes,-lyrics,-chords-and-frets.ly +single-staff-template-with-notes-and-chords.ly +single-staff-template-with-notes-and-lyrics.ly +single-staff-template-with-only-notes.ly +string-quartet-template-simple.ly +string-quartet-template-with-separate-parts.ly +vocal-ensemble-template-with-automatic-piano-reduction.ly +vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly +vocal-ensemble-template.ly diff --git a/Documentation/snippets/text-intro.itely b/Documentation/snippets/text-intro.itely new file mode 100644 index 0000000000..eb71a4598e --- /dev/null +++ b/Documentation/snippets/text-intro.itely @@ -0,0 +1,7 @@ +@node Text +@unnumbered Text + +@ruser{Text} + +@lysnippets + diff --git a/Documentation/snippets/text.snippet-list b/Documentation/snippets/text.snippet-list new file mode 100644 index 0000000000..649e13cf62 --- /dev/null +++ b/Documentation/snippets/text.snippet-list @@ -0,0 +1,31 @@ +adding-the-current-date-to-a-score.ly +adjusting-lyrics-vertical-spacing.ly +aligning-and-centering-instrument-names.ly +aligning-marks-with-various-notation-objects.ly +aligning-objects-created-with-the--mark-command.ly +blanking-staff-lines-using-the--whiteout-command.ly +center-text-below-hairpin-dynamics.ly +changing-the-default-text-font-family.ly +combining-dynamics-with-markup-texts.ly +combining-two-parts-on-the-same-staff.ly +creating-real-parenthesized-dynamics.ly +creating-simultaneous-rehearsal-marks.ly +creating-text-spanners.ly +demonstrating-all-headers.ly +embedding-native-postscript-in-a--markup-block.ly +formatting-lyrics-syllables.ly +how-to-put-ties-between-syllables-in-lyrics.ly +lyrics-alignment.ly +markup-lines.ly +multi-measure-rest-markup.ly +ottava-text.ly +outputting-the-version-number.ly +piano-template-with-centered-lyrics.ly +printing-marks-at-the-end-of-a-line-or-a-score.ly +printing-marks-on-every-staff.ly +printing-text-from-right-to-left.ly +stand-alone-two-column-markup.ly +three-sided-box.ly +utf-8.ly +vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly +volta-text-markup-using-repeatcommands.ly diff --git a/Documentation/snippets/three-sided-box.ly b/Documentation/snippets/three-sided-box.ly new file mode 100644 index 0000000000..eaa321a8b1 --- /dev/null +++ b/Documentation/snippets/three-sided-box.ly @@ -0,0 +1,52 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "rhythms, text" + + texidoc = " +This example shows how to add a markup command to get a three sided box +around some text (or other markup). + +" + doctitle = "Three-sided box" +} % begin verbatim + +% New command to add a three sided box, with sides north, west and south +% Based on the box-stencil command defined in scm/stencil.scm +% Note that ";" is used to comment a line in Scheme +#(define-public (NWS-box-stencil stencil thickness padding) + "Add a box around STENCIL, producing a new stencil." + (let* ((x-ext (interval-widen (ly:stencil-extent stencil 0) padding)) + (y-ext (interval-widen (ly:stencil-extent stencil 1) padding)) + (y-rule (make-filled-box-stencil (cons 0 thickness) y-ext)) + (x-rule (make-filled-box-stencil + (interval-widen x-ext thickness) (cons 0 thickness)))) +; (set! stencil (ly:stencil-combine-at-edge stencil X 1 y-rule padding)) + (set! stencil (ly:stencil-combine-at-edge stencil X -1 y-rule padding)) + (set! stencil (ly:stencil-combine-at-edge stencil Y 1 x-rule 0.0)) + (set! stencil (ly:stencil-combine-at-edge stencil Y -1 x-rule 0.0)) + stencil)) + +% The corresponding markup command, based on the \box command defined +% in scm/define-markup-commands.scm +#(define-markup-command (NWS-box layout props arg) (markup?) + "Draw a box round @var{arg}. Looks at @code{thickness}, +@code{box-padding} and @code{font-size} properties to determine line +thickness and padding around the markup." + (let* ((th (chain-assoc-get 'thickness props 0.1)) + (size (chain-assoc-get 'font-size props 0)) + (pad (* (magstep size) + (chain-assoc-get 'box-padding props 0.2))) + (m (interpret-markup layout props arg))) + (NWS-box-stencil m th pad))) + +% Test it: + +\layout { ragged-right = ##f } +\relative c' { + c2^\markup { \NWS-box ABCD } + c2^\markup { \NWS-box \note #"4" #1.0 } +} + diff --git a/Documentation/snippets/tick-bar-lines.ly b/Documentation/snippets/tick-bar-lines.ly new file mode 100644 index 0000000000..470e41a5f6 --- /dev/null +++ b/Documentation/snippets/tick-bar-lines.ly @@ -0,0 +1,23 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "staff-notation" + + texidoc = " +'Tick' bar lines are often used in music where the bar line is used +only for coordination and is not meant to imply any rhythmic stress. + +" + doctitle = "Tick bar lines" +} % begin verbatim + +\relative c' { + \set Score.defaultBarType = #"'" + c4 d e f + g4 f e d + c4 d e f + g4 f e d + \bar "|." +} diff --git a/Documentation/snippets/time-signature-in-parentheses.ly b/Documentation/snippets/time-signature-in-parentheses.ly new file mode 100644 index 0000000000..a7423fdb0c --- /dev/null +++ b/Documentation/snippets/time-signature-in-parentheses.ly @@ -0,0 +1,21 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "staff-notation, tweaks-and-overrides" + + texidoc = " +The time signature can be enclosed within parentheses. + +" + doctitle = "Time signature in parentheses" +} % begin verbatim + +\relative c'' { + \override Staff.TimeSignature #'stencil = #(lambda (grob) + (bracketify-stencil (ly:time-signature::print grob) Y 0.1 0.2 0.1)) + \time 2/4 + a4 b8 c +} + diff --git a/Documentation/snippets/titles-intro.itely b/Documentation/snippets/titles-intro.itely new file mode 100644 index 0000000000..1d4c288f93 --- /dev/null +++ b/Documentation/snippets/titles-intro.itely @@ -0,0 +1,7 @@ +@node Titles +@unnumbered Titles + +@ruser{Titles and headers} + +@lysnippets + diff --git a/Documentation/snippets/titles.snippet-list b/Documentation/snippets/titles.snippet-list new file mode 100644 index 0000000000..0b2c5c162f --- /dev/null +++ b/Documentation/snippets/titles.snippet-list @@ -0,0 +1,4 @@ +adding-the-current-date-to-a-score.ly +aligning-and-centering-instrument-names.ly +demonstrating-all-headers.ly +outputting-the-version-number.ly diff --git a/Documentation/snippets/transcription-of-ancient-music-with-incipit.ly b/Documentation/snippets/transcription-of-ancient-music-with-incipit.ly new file mode 100644 index 0000000000..244de898c6 --- /dev/null +++ b/Documentation/snippets/transcription-of-ancient-music-with-incipit.ly @@ -0,0 +1,292 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "ancient-notation, tweaks-and-overrides" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +A modo de alternativa para obtener auténticos «incipit» +independientes de la partitura principal, se incluyen como +elemento de marcado en el campo que se usa normalmente para el +nombre del instrumento. Por el momento, la letra sólo se puede +añadir como marcado directo. Por desgracia, su espaciado no es +análogo al de la letra principal. + +" + doctitlees = "Transcripción de música antigua con incipit" + + texidoc = " +As a workaround to get real incipits which are independent from the +main score these are included as a markup into the field normally used +for the instrument name. As for now lyrics can only be added as a +direct markup. It doesn't unfortunately conform with the spacing of the +main lyrics. + +" + doctitle = "Transcription of Ancient music with incipit" +} % begin verbatim + +global = { + \set Score.skipBars = ##t + \key g \major + \time 4/4 + + %make the staff lines invisible on staves + \override Staff.BarLine #'transparent = ##t + \skip 1*8 % the actual music + + % let finis bar go through all staves + \override Staff.BarLine #'transparent = ##f + + % finis bar + \bar "|." +} + + +discantusNotes = { + \transpose c' c'' { + \clef "treble" + d'2. d'4 | + b e' d'2 | + c'4 e'4.( d'8 c' b | + a4) b a2 | + b4.( c'8 d'4) c'4 | + \once \override NoteHead #'transparent = ##t c'1 | + b\breve | + } +} + +discantusLyrics = \lyricmode { + Ju -- bi -- | + la -- te De -- | + o, om -- + nis ter -- | + ra, __ om- | + "..." | + -us. | +} + +altusNotes = { + \transpose c' c'' { + \clef "treble" + r2 g2. e4 fis g | % two bars + a2 g4 e | + fis g4.( fis16 e fis4) | + g1 | + \once \override NoteHead #'transparent = ##t g1 | + g\breve | + } +} + +altusLyrics = \lyricmode { + Ju -- bi -- la -- te | % two bars + De -- o, om -- | + nis ter -- ra, | + "..." | + -us. | +} + +tenorNotes = { + \transpose c' c' { + \clef "treble_8" + R1 | + R1 | + R1 | + r2 d'2. d'4 b e' | % two bars + \once \override NoteHead #'transparent = ##t e'1 | + d'\breve | + } +} + +tenorLyrics = \lyricmode { + Ju -- bi -- la -- te | % two bars + "..." | + -us. +} + +bassusNotes = { + \transpose c' c' { + \clef "bass" + R1 | + R1 | + R1 | + R1 | + g2. e4 | + \once \override NoteHead #'transparent = ##t e1 | + g\breve | + } +} + +bassusLyrics = \lyricmode { + Ju -- bi- | + "..." | + -us. +} + +incipitDiscantus = \markup{ + \score{ + { + \set Staff.instrumentName="Discantus " + \override NoteHead #'style = #'neomensural + \override Rest #'style = #'neomensural + \override Staff.TimeSignature #'style = #'neomensural + \cadenzaOn + \clef "neomensural-c1" + \key f \major + \time 2/2 + c''1._"IV-" s2 %two bars + \skip 1*8 % eight bars + } + \layout { + \context {\Voice + \remove Ligature_bracket_engraver + \consists Mensural_ligature_engraver + } + line-width=4.5\cm + } + } +} + +incipitAltus = \markup{ + \score{ + { + \set Staff.instrumentName="Altus " + \override NoteHead #'style = #'neomensural + \override Rest #'style = #'neomensural + \override Staff.TimeSignature #'style = #'neomensural + \cadenzaOn + \clef "neomensural-c3" + \key f \major + \time 2/2 + r1 % one bar + f'1._"IV-" s2 % two bars + \skip 1*7 % seven bars + } + \layout { + \context {\Voice + \remove Ligature_bracket_engraver + \consists Mensural_ligature_engraver + } + line-width=4.5\cm + } + } +} + +incipitTenor = \markup{ + \score{ { + \set Staff.instrumentName = "Tenor " + \override NoteHead #'style = #'neomensural + \override Rest #'style = #'neomensural + \override Staff.TimeSignature #'style = #'neomensural + \cadenzaOn + \clef "neomensural-c4" + \key f \major + \time 2/2 + r\longa % four bars + r\breve % two bars + r1 % one bar + c'1._"IV-" s2 % two bars + \skip 1 % one bar + } + \layout { + \context {\Voice + \remove Ligature_bracket_engraver + \consists Mensural_ligature_engraver + } + line-width=4.5\cm +} +} +} + +incipitBassus = \markup{ + \score{ { + \set Staff.instrumentName = "Bassus " + \override NoteHead #'style = #'neomensural + \override Rest #'style = #'neomensural + \override Staff.TimeSignature #'style = #'neomensural + \cadenzaOn + \clef "bass" + \key f \major + \time 2/2 + % incipit + r\maxima % eight bars + f1._"IV-" s2 % two bars + } + \layout { + \context {\Voice + \remove Ligature_bracket_engraver + \consists Mensural_ligature_engraver + } + line-width=4.5\cm + } + } +} + +%StaffGroup is used instead of ChoirStaff to get bar lines between systems +\score { + << + \new StaffGroup = choirStaff << + \new Voice = + "discantusNotes" << \global + \set Staff.instrumentName=\incipitDiscantus + \discantusNotes >> + \new Lyrics = + "discantusLyrics" \lyricsto discantusNotes { \discantusLyrics } + + \new Voice = + "altusNotes" << \global + \set Staff.instrumentName=\incipitAltus + \altusNotes >> + \new Lyrics = + "altusLyrics" \lyricsto altusNotes { \altusLyrics } + + \new Voice = + "tenorNotes" << \global + \set Staff.instrumentName=\incipitTenor + \tenorNotes >> + \new Lyrics = + "tenorLyrics" \lyricsto tenorNotes { \tenorLyrics } + + \new Voice = + "bassusNotes" << \global + \set Staff.instrumentName=\incipitBassus + \bassusNotes >> + >> + \new Lyrics = + "bassusLyrics" \lyricsto bassusNotes { \bassusLyrics } + %Keep the bass lyrics outside of the staff group to avoid bar lines + %between the lyrics. + >> + + \layout { + \context { + \Score + + % no bars in staves + \override BarLine #'transparent = ##t + } + % the next three instructions keep the lyrics between the barlines + \context { \Lyrics + \consists "Bar_engraver" + \override BarLine #'transparent = ##t } + \context { \StaffGroup \consists "Separating_line_group_engraver" } + \context { + \Voice + + % no slurs + \override Slur #'transparent = ##t + + % Comment in the below "\remove" command to allow line + % breaking also at those barlines where a note overlaps + % into the next bar. The command is commented out in this + % short example score, but especially for large scores, you + % will typically yield better line breaking and thus improve + % overall spacing if you comment in the following command. + %\remove "Forbid_line_break_engraver" + } + indent=5\cm + } +} + diff --git a/Documentation/snippets/transposing-pitches-with-minimum-accidentals-smart-transpose.ly b/Documentation/snippets/transposing-pitches-with-minimum-accidentals-smart-transpose.ly new file mode 100644 index 0000000000..7e9acaf994 --- /dev/null +++ b/Documentation/snippets/transposing-pitches-with-minimum-accidentals-smart-transpose.ly @@ -0,0 +1,148 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "pitches" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca +doctitlees = "Transportar música con el menor número de alteraciones" +texidoces = " +Este ejemplo utiliza código de Scheme para forzar las +modificaciones enarmónicas de las notas, y así tener el menor +número de alteraciones accidentales. En este caso se aplican las +siguientes reglas: + +@itemize +@item +Se quitan las dobles alteraciones + +@item +Si sostenido -> Do + +@item +Mi sistenido -> Fa + +@item +Do bemol -> Si + +@item +Fa bemol -> Mi + +@end itemize + +De esta forma se selecciona el mayor número de notas enarmónicas +naturales. + +" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + doctitlede = "Noten mit minimaler Anzahl an Versetzungszeichen transponieren." + texidocde = "Dieses Beispiel benutzt Scheme-Code, um enharmonische +Verwechslungen für Noten zu erzwingen, damit nur eine minimale Anzahl +an Versetzungszeichen ausgegeben wird. In diesem Fall gelten die +folgenden Regeln: + +@itemize +@item +Doppelte Versetzungszeichen sollen entfernt werden + +@item +His -> C + +@item +Eis -> F + +@item +Ces -> B + +@item +Fes -> E + +@end itemize + +Auf diese Art werden am meisten natürliche Tonhöhen als enharmonische +Variante gewählt. +" + + + texidoc = " +This example uses some Scheme code to enforce enharmonic modifications +for notes in order to have the minimum number of accidentals. In this +case, the following rules apply: + +Double accidentals should be removed + + +B sharp -> C + + +E sharp -> F + + +C flat -> B + + +F flat -> E + + +In this manner, the most natural enharmonic notes are chosen. + +" + doctitle = "Transposing pitches with minimum accidentals (\"Smart\" transpose)" +} % begin verbatim + +#(define (naturalize-pitch p) + (let ((o (ly:pitch-octave p)) + (a (* 4 (ly:pitch-alteration p))) + ;; alteration, a, in quarter tone steps, + ;; for historical reasons + (n (ly:pitch-notename p))) + (cond + ((and (> a 1) (or (eq? n 6) (eq? n 2))) + (set! a (- a 2)) + (set! n (+ n 1))) + ((and (< a -1) (or (eq? n 0) (eq? n 3))) + (set! a (+ a 2)) + (set! n (- n 1)))) + (cond + ((> a 2) (set! a (- a 4)) (set! n (+ n 1))) + ((< a -2) (set! a (+ a 4)) (set! n (- n 1)))) + (if (< n 0) (begin (set! o (- o 1)) (set! n (+ n 7)))) + (if (> n 6) (begin (set! o (+ o 1)) (set! n (- n 7)))) + (ly:make-pitch o n (/ a 4)))) + +#(define (naturalize music) + (let ((es (ly:music-property music 'elements)) + (e (ly:music-property music 'element)) + (p (ly:music-property music 'pitch))) + (if (pair? es) + (ly:music-set-property! + music 'elements + (map (lambda (x) (naturalize x)) es))) + (if (ly:music? e) + (ly:music-set-property! + music 'element + (naturalize e))) + (if (ly:pitch? p) + (begin + (set! p (naturalize-pitch p)) + (ly:music-set-property! music 'pitch p))) + music)) + +naturalizeMusic = +#(define-music-function (parser location m) + (ly:music?) + (naturalize m)) + +music = \relative c' { c4 d e g } + +\score { + \new Staff { + \transpose c ais { \music } + \naturalizeMusic \transpose c ais { \music } + \transpose c deses { \music } + \naturalizeMusic \transpose c deses { \music } + } + \layout { } +} diff --git a/Documentation/snippets/tweaking-clef-properties.ly b/Documentation/snippets/tweaking-clef-properties.ly new file mode 100644 index 0000000000..24ebee018e --- /dev/null +++ b/Documentation/snippets/tweaking-clef-properties.ly @@ -0,0 +1,158 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "pitches, staff-notation, tweaks-and-overrides" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + doctitlees = "Trucaje de las propiedades de clave" + texidoces = " +La instrucción @code{\\clef \"treble_8\"} equivale a un ajuste de +@code{clefGlyph}, @code{clefPosition} (que controla la posición +vertical de la clave), @code{middleCPosition} y +@code{clefOctavation}. Se imprime una clave cada vez que se +modifica cualquiera de las propiedades excepto +@code{middleCPosition}. + +Observe que la modificación del glifo, la posición de la clave o +su octavación, no cambian 'per se' la posición de las siguientes +notas del pentagrama: para hacer esto también se debe especificar +la posición del Do central. Los parámetros posicionales están en +relación con la tercera línea del pentagrama, los números +positivos desplazan hacia arriba, contando una unidad por cada +línea y espacio. El valor de @code{clefOctavation} se +establecería normalmente a 7, -7, 15 or -15, pero son válidos +otros valores. + +Cuando se produce un cambio de clave en el salto de línea se +imprime la clave nueva tanto al final de la línea anterior como al +principio de la nueva, de forma predeterminada. Si no se necesita +la clave de advertencia al final de la línea anterior, se puede +quitar estableciendo el valor de la propiedad +@code{explicitClefVisibility} de @code{Staff}, a +@code{end-of-line-invisible}. El comportamiento predeterminado se +puede recuperar con @code{\\unset Staff.explicitClefVisibility}. + +Los siguientes ejemplos muestran las posibilidades cuando se +ajustan estas propiedades manualmente. En la primera línea, los +cambios manuales preservan el posicionamiento relativo estándar de +las claves y las notas, pero no lo hacen en la segunda línea. +" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + doctitlede = "Eigenschaften des Schlüssels optimieren" + texidocde = " +Der Befehl @code{\\clef \"treble_8\"} ist gleichbedeutend mit einem +expliziten Setzen der Eigenschaften von @code{clefGlyph}, +@code{clefPosition} (welche die vertikale Position des Schlüssels bestimmt), +@code{middleCPosition} und @code{clefOctavation}. Ein Schlüssel wird +ausgegeben, wenn eine der Eigenschaften außer @code{middleCPosition} sich +ändert. + +Eine Änderung des Schriftzeichens (Glyph), der Schlüsselposition oder der +Oktavierung selber ändert noch nicht die Position der darauf folgenden Noten +auf dem System: das geschieht nur, wenn auch die Position des +eingestrichenen@tie{}C (middleCPosition) angegeben wird. Die +Positionsparameter sind relativ zur Mittellinie des Systems, dabei versetzen +positive Zahlen die Position nach oben, jeweils eine Zahl für jede Linie +plus Zwischenraum. Der @code{clefOctavation}-Wert ist normalerweise auf 7, +-7, 15 oder -15 gesetzt, aber auch andere Werte sind gültig. + +Wenn ein Schlüsselwechsel an einem Zeilenwechsel geschieht, wird das neue +Symbol sowohl am Ende der alten Zeilen als auch am Anfang der neuen Zeile +ausgegeben. Wenn der Warnungs-Schlüssel am Ende der alten Zeile nicht +erforderlich ist, kann er unterdrückt werden, indem die +@code{explicitClefVisibility}-Eigenschaft des @code{Staff}-Kontextes auf den +Wert @code{end-of-line-invisible} gesetzt wird. Das Standardverhalten kann +mit @code{\\unset Staff.explicitClefVisibility} wieder hergestellt werden. + +Die folgenden Beispiele zeigen die Möglichkeiten, wenn man diese +Eigenschaften manuell setzt. Auf der ersten Zeile erhalten die manuellen +Änderungen die ursprüngliche relative Positionierung von Schlüssel und +Noten, auf der zweiten Zeile nicht. +" + + texidoc = " +The command @code{\\clef \"treble_8\"} is equivalent to setting +@code{clefGlyph}, @code{clefPosition} (which controls the vertical +position of the clef), @code{middleCPosition} and +@code{clefOctavation}. A clef is printed when any of the properties +except @code{middleCPosition} are changed. + + +Note that changing the glyph, the position of the clef, or the +octavation does not in itself change the position of subsequent notes +on the staff: the position of middle C must also be specified to do +this. The positional parameters are relative to the staff center line, +positive numbers displacing upwards, counting one for each line and +space. The @code{clefOctavation} value would normally be set to 7, -7, +15 or -15, but other values are valid. + + +When a clef change takes place at a line break the new clef symbol is +printed at both the end of the previous line and the beginning of the +new line by default. If the warning clef at the end of the previous +line is not required it can be suppressed by setting the @code{Staff} +property @code{explicitClefVisibility} to the value +@code{end-of-line-invisible}. The default behavior can be recovered +with @code{\\unset Staff.explicitClefVisibility}. + +The following examples show the possibilities when setting these +properties manually. On the first line, the manual changes preserve the +standard relative positioning of clefs and notes, whereas on the second +line, they do not. + +" + doctitle = "Tweaking clef properties" +} % begin verbatim + +\layout { ragged-right = ##t } + +{ + % The default treble clef + c'1 + % The standard bass clef + \set Staff.clefGlyph = #"clefs.F" + \set Staff.clefPosition = #2 + \set Staff.middleCPosition = #6 + c'1 + % The baritone clef + \set Staff.clefGlyph = #"clefs.C" + \set Staff.clefPosition = #4 + \set Staff.middleCPosition = #4 + c'1 + % The standard choral tenor clef + \set Staff.clefGlyph = #"clefs.G" + \set Staff.clefPosition = #-2 + \set Staff.clefOctavation = #-7 + \set Staff.middleCPosition = #1 + c'1 + % A non-standard clef + \set Staff.clefPosition = #0 + \set Staff.clefOctavation = #0 + \set Staff.middleCPosition = #-4 + c'1 \break + + % The following clef changes do not preserve + % the normal relationship between notes and clefs: + + \set Staff.clefGlyph = #"clefs.F" + \set Staff.clefPosition = #2 + c'1 + \set Staff.clefGlyph = #"clefs.G" + c'1 + \set Staff.clefGlyph = #"clefs.C" + c'1 + \set Staff.clefOctavation = #7 + c'1 + \set Staff.clefOctavation = #0 + \set Staff.clefPosition = #0 + c'1 + + % Return to the normal clef: + + \set Staff.middleCPosition = #0 + c'1 +} + diff --git a/Documentation/snippets/tweaking-grace-layout-within-music.ly b/Documentation/snippets/tweaking-grace-layout-within-music.ly new file mode 100644 index 0000000000..04a977037e --- /dev/null +++ b/Documentation/snippets/tweaking-grace-layout-within-music.ly @@ -0,0 +1,70 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { +%% Translation of GIT committish: 21c8461ea87cd670a35a40b91d3ef20de03a0409 + texidocfr = " +Il est possible de changer globalement la mise en forme des petites +notes dans un morceau, au moyen de la fonction +@code{add-grace-property}. Ici, par exemple, on ôte la définition de +l'orientation des objets @code{Stem} pour toutes les petites notes, +afin que les hampes ne soient pas toujours orientées vers le haut, et on +leur préfère des têtes en forme de croix. + +" + doctitlefr = "Mise en forme des notes d'ornement" + + lsrtags = "rhythms, tweaks-and-overrides" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " + +La disposición de las expresiones de adorno se puede cambiar a lo +largo de toda la música usando las funciones +@code{add-grace-property} y @code{remove-grace-property}. El +ejemplo siguiente borra la definición de la dirección de la plica +para esta nota de adorno, de manera que las plicas no siemmpre +apuntan hacia arriba, y cambia la forma predeterminada de las +cabezas a aspas. + +" + + doctitlees = "Trucar la disposición de las notas de adorno dentro de la música" + + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Das Layout von Verzierungsausdrücken kann in der Musik verändert +werden mit den Funktionen @code{add-grace-property} und +@code{remove-grace-property}. Das folgende Beispiel definiert +die Richtung von Hälsen (Stem) für diese Verzierung, sodass die +Hälse nicht immer nach unten zeigen, und ändert den Standardnotenkopf +in ein Kreuz. +" + doctitlede = "Veränderung des Layouts von Verzierungen innerhalb der Noten" + + + + texidoc = " +The layout of grace expressions can be changed throughout the music +using the functions @code{add-grace-property} and +@code{remove-grace-property}. The following example undefines the +@code{Stem} direction for this grace, so that stems do not always point +up, and changes the default note heads to crosses. + +" + doctitle = "Tweaking grace layout within music" +} % begin verbatim + +\relative c'' { + \new Staff { + #(remove-grace-property 'Voice 'Stem 'direction) + #(add-grace-property 'Voice 'NoteHead 'style 'cross) + \new Voice { + \acciaccatura { f16 } g4 + \grace { d16[ e] } f4 + \appoggiatura { f,32[ g a] } e2 + } + } +} diff --git a/Documentation/snippets/tweaks-and-overrides-intro.itely b/Documentation/snippets/tweaks-and-overrides-intro.itely new file mode 100644 index 0000000000..d5308b5bf8 --- /dev/null +++ b/Documentation/snippets/tweaks-and-overrides-intro.itely @@ -0,0 +1,11 @@ +@node Tweaks and overrides +@unnumbered Tweaks and overrides + +@c FIXME make xref more precise when the chapter has been +@c revised in GDP +@ruser{Changing defaults} + +@rlearning{Tweaking output} + +@lysnippets + diff --git a/Documentation/snippets/tweaks-and-overrides.snippet-list b/Documentation/snippets/tweaks-and-overrides.snippet-list new file mode 100644 index 0000000000..968e8ba340 --- /dev/null +++ b/Documentation/snippets/tweaks-and-overrides.snippet-list @@ -0,0 +1,54 @@ +analysis-brackets-above-the-staff.ly +avoiding-collisions-with-chord-fingerings.ly +caesura-railtracks-with-fermata.ly +changing-a-single-notes-size-in-a-chord.ly +changing-form-of-multi-measure-rests.ly +changing-properties-for-individual-grobs.ly +changing-the-default-text-font-family.ly +changing-the-staff-size.ly +controlling-the-vertical-ordering-of-scripts.ly +controlling-tuplet-bracket-visibility.ly +creating-a-delayed-turn.ly +creating-simultaneous-rehearsal-marks.ly +creating-text-spanners.ly +custodes.ly +customizing-fretboard-fret-diagrams.ly +customizing-markup-fret-diagrams.ly +display-bracket-with-only-one-staff-in-a-system.ly +dotted-harmonics.ly +drawing-boxes-around-grobs.ly +drawing-circles-around-various-objects.ly +fine-tuning-pedal-brackets.ly +forcing-horizontal-shift-of-notes.ly +fret-diagrams-explained-and-developed.ly +horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly +how-to-change-fret-diagram-position.ly +inserting-a-caesura.ly +line-arrows.ly +making-an-object-invisible-with-the-transparent-property.ly +manually-controlling-beam-positions.ly +mensurstriche-layout-bar-lines-between-the-staves.ly +nesting-staves.ly +percent-repeat-count-visibility.ly +positioning-multi-measure-rests.ly +positioning-text-markups-inside-slurs.ly +printing-a-repeat-sign-at-the-beginning-of-a-piece.ly +printing-bar-numbers-inside-boxes-or-circles.ly +printing-metronome-and-rehearsal-marks-below-the-staff.ly +proportional-strict-notespacing.ly +removing-the-first-empty-line.ly +rest-styles.ly +rhythmic-slashes.ly +separating-key-cancellations-from-key-signature-changes.ly +setting-hairpin-behavior-at-bar-lines.ly +specifying-context-with-beatgrouping.ly +suppressing-warnings-for-clashing-note-columns.ly +time-signature-in-parentheses.ly +transcription-of-ancient-music-with-incipit.ly +tweaking-clef-properties.ly +tweaking-grace-layout-within-music.ly +using-beatlength-and-beatgrouping.ly +using-postscript-to-generate-special-note-head-shapes.ly +using-the--tweak-command-to-tweak-individual-grobs.ly +vertically-aligned-dynamics-and-textscripts.ly +vertically-aligning-ossias-and-lyrics.ly diff --git a/Documentation/snippets/unfretted-strings-intro.itely b/Documentation/snippets/unfretted-strings-intro.itely new file mode 100644 index 0000000000..4770fa7bec --- /dev/null +++ b/Documentation/snippets/unfretted-strings-intro.itely @@ -0,0 +1,7 @@ +@node Unfretted strings +@unnumbered Unfretted strings + +@ruser{Unfretted string instruments} + +@lysnippets + diff --git a/Documentation/snippets/unfretted-strings.snippet-list b/Documentation/snippets/unfretted-strings.snippet-list new file mode 100644 index 0000000000..3b2b16d62e --- /dev/null +++ b/Documentation/snippets/unfretted-strings.snippet-list @@ -0,0 +1,6 @@ +changing--flageolet-mark-size.ly +creating-slurs-across-voices.ly +dotted-harmonics.ly +snap-pizzicato-markup-bartok-pizzicato.ly +string-quartet-template-simple.ly +string-quartet-template-with-separate-parts.ly diff --git a/Documentation/snippets/use-square-bracket-at-the-start-of-a-staff-group.ly b/Documentation/snippets/use-square-bracket-at-the-start-of-a-staff-group.ly new file mode 100644 index 0000000000..6523693f70 --- /dev/null +++ b/Documentation/snippets/use-square-bracket-at-the-start-of-a-staff-group.ly @@ -0,0 +1,42 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "staff-notation, contexts-and-engravers" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Se puede usar el delimitador de comienzo de un sistema +@code{SystemStartSquare} estableciéndolo explícitamente dentro de +un contexto @code{StaffGroup} o @code{ChoirStaffGroup}. + +" + doctitlees = "Uso del corchete recto al comienzo de un grupo de pentagramas" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Die Klammer zu Beginn von Systemgruppen kann auch in eine eckige Klammer +(@code{SystemStartSquare}) umgewandelt werden, wenn man sie explizit +im @code{StaffGroup}- oder @code{ChoirStaffGroup}-Kontext setzt. + +" + doctitlede = "Eine eckige Klammer zu Beginn von Systemgruppen benutzen" + + texidoc = " +The system start delimiter @code{SystemStartSquare} can be used by +setting it explicitly in a @code{StaffGroup} or @code{ChoirStaffGroup} +context. + +" + doctitle = "Use square bracket at the start of a staff group" +} % begin verbatim + +\score { + \new StaffGroup { << + \set StaffGroup.systemStartDelimiter = #'SystemStartSquare + \new Staff { c'4 d' e' f' } + \new Staff { c'4 d' e' f' } + >> } +} + diff --git a/Documentation/snippets/using-beatlength-and-beatgrouping.ly b/Documentation/snippets/using-beatlength-and-beatgrouping.ly new file mode 100644 index 0000000000..d225b8a25f --- /dev/null +++ b/Documentation/snippets/using-beatlength-and-beatgrouping.ly @@ -0,0 +1,95 @@ +%% Do not edit this file; it is auto-generated from input/new +%% This file is in the public domain. +%% Note: this file works from version 2.13.4 +\version "2.13.4" + +\header { +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +La propiedad @code{measureLength} determina dónde se deben insertar +líneas divisorias y, con @code{beatLength} y @code{beatGrouping}, cómo +se deben generar las barras autoomáticas para las duraciones de barra +y compases para los que no hay ninguna regla definida para los finales +de barra. Este ejemplo muestra distintas dormas de controlar el +barrado mediante el establecimiento de estas propiedades. Las +explicaciones están en forma de comentarios dentro del código. + +" + doctitlees = "Utilización de beatLength y beatGrouping" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Die Eigenschaft @code{measureLength} bestimmt, wo Taktstriche eingefügt +werden sollen und, zusammen mit @code{beatLength} und +@code{beatGrouping}, wie automtische Balken für Notenlängen und +Taktarten, für die keine definierten Regeln gefunden werden, gesetzt +werden sollen. Dieses Beispiel zeigt verschiedene Möglichkeiten, +die Balken zu kontrollieren, indem man diese Eigenschaften +beeinflusst. Die Erklärungen werden als Kommentare im Quellcode +gegeben. +" + doctitlede = "beatLength und beatGrouping benutzen" + +%% Translation of GIT committish: b3196fadd8f42d05ba35e8ac42f7da3caf8a3079 + texidocfr = " +La propriété @code{measureLength} détermine la pulsation et, combinée à +@code{beatLength} et @code{beatGrouping}, comment générer les ligatures +automatiques selon les durées et la métrique lorsqu'aucune règle n'a été +définie. L'exemple commenté qui suit indique différentes façons de +contrôler les ligatures à l'aide de ces propriétés. + +" + doctitlefr = "Utilisation conjointe de beatLength et beatGrouping" + + lsrtags = "rhythms, tweaks-and-overrides" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +La propiedad @code{measureLength} determina dónde se deben insertar +líneas divisorias y, con @code{beatLength} y @code{beatGrouping}, cómo +se deben generar las barras autoomáticas para las duraciones de barra +y compases para los que no hay ninguna regla definida para los finales +de barra. Este ejemplo muestra distintas dormas de controlar el +barrado mediante el establecimiento de estas propiedades. Las +explicaciones están en forma de comentarios dentro del código. + +" + doctitlees = "Utilización de beatLength y beatGrouping" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Die Eigenschaft @code{measureLength} bestimmt, wo Taktstriche eingefügt +werden sollen und, zusammen mit @code{beatLength} und +@code{beatGrouping}, wie automtische Balken für Notenlängen und +Taktarten, für die keine definierten Regeln gefunden werden, gesetzt +werden sollen. Dieses Beispiel zeigt verschiedene Möglichkeiten, +die Balken zu kontrollieren, indem man diese Eigenschaften +beeinflusst. Die Erklärungen werden als Kommentare im Quellcode +gegeben. +" + doctitlede = "beatLength und beatGrouping benutzen" + +%% Translation of GIT committish: b3196fadd8f42d05ba35e8ac42f7da3caf8a3079 + texidocfr = " +La propriété @code{measureLength} détermine la pulsation et, combinée à +@code{beatLength} et @code{beatGrouping}, comment générer les ligatures +automatiques selon les durées et la métrique lorsqu'aucune règle n'a été +définie. L'exemple commenté qui suit indique différentes façons de +contrôler les ligatures à l'aide de ces propriétés. + +" + doctitlefr = "Utilisation conjointe de beatLength et beatGrouping" + + texidoc = " +The property @code{measureLength} determines where bar lines should be +inserted and, with @code{beatLength} and @code{beatGrouping}, how +automatic beams should be generated for beam durations and time +signatures for which no beam-ending rules are defined. This example +shows several ways of controlling beaming by setting these properties. +The explanations are shown as comments in the code. + +" + doctitle = "Using beatLength and beatGrouping" +} % begin verbatim + +\markup{This snippet has been deprecated and will be removed in 2.14} diff --git a/Documentation/snippets/using-double-slurs-for-legato-chords.ly b/Documentation/snippets/using-double-slurs-for-legato-chords.ly new file mode 100644 index 0000000000..1f39b86296 --- /dev/null +++ b/Documentation/snippets/using-double-slurs-for-legato-chords.ly @@ -0,0 +1,36 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "expressive-marks" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Algunos compositores escriben dos ligaduras cuando quieren acordes +legato. Esto se puede conseguir estableciendo @code{doubleSlurs}. + +" + doctitlees = "Utilizar ligaduras dobles para acordes legato" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d +texidocde = " +Einige Komponisten schreiben doppelte Bögen, wenn Legato-Akkorde notiert +werden. Das kann mit der Eigenschaft @code{doubleSlurs} erreicht werden. + +" + doctitlede = "Doppelte Bögen für Legato-Akkorde benutzen" + + texidoc = " +Some composers write two slurs when they want legato chords. This can +be achieved by setting @code{doubleSlurs}. + +" + doctitle = "Using double slurs for legato chords" +} % begin verbatim + +\relative c' { + \set doubleSlurs = ##t + 4( ) +} + diff --git a/Documentation/snippets/using-grace-note-slashes-with-normal-heads.ly b/Documentation/snippets/using-grace-note-slashes-with-normal-heads.ly new file mode 100644 index 0000000000..2fdc39481e --- /dev/null +++ b/Documentation/snippets/using-grace-note-slashes-with-normal-heads.ly @@ -0,0 +1,41 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { +%% Translation of GIT committish: 21c8461ea87cd670a35a40b91d3ef20de03a0409 + texidocfr = " +Le trait que l'on trouve sur les hampes des acciaccatures peut +être appliqué dans d'autres situations. + +" + + doctitlefr = "Utilisation de hampe barrée pour une note normale" + + lsrtags = "rhythms" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " + +Es posible aplicar la barrita que cruza la barra de las +acciaccaturas, en otras situaciones. + +" + + doctitlees = "Utilizar la barra que tacha las notas de adorno con notas normales" + + + + texidoc = " +The slash through the stem found in acciaccaturas can be applied in +other situations. + +" + doctitle = "Using grace note slashes with normal heads" +} % begin verbatim + +\relative c'' { + \override Stem #'stroke-style = #"grace" + c8( d2) e8( f4) +} + diff --git a/Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly b/Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly new file mode 100644 index 0000000000..68fd252ce1 --- /dev/null +++ b/Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly @@ -0,0 +1,52 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "editorial-annotations, tweaks-and-overrides" + +%% Translation of GIT committish: 522d964c61521ed64f352c4774c4f2860f7ae5ec + texidocfr = " +Lorsqu'il est impossible d'obtenir facilement une allure particulière +pour les têtes de note en recourant à la technique du @code{\\markup}, un +code Postscript peut vous tirer d'embarras. Voici comment générer des +têtes ressemblant à des parallélogrammes. + +" + doctitlefr = "Utilisation de Postscript pour générer des têtes de note à l'allure particulière" + + texidoc = " +When a note head with a special shape cannot easily be generated with +graphic markup, PostScript code can be used to generate the shape. +This example shows how a parallelogram-shaped note head is generated. + +" + doctitle = "Using PostScript to generate special note head shapes" +} % begin verbatim + +parallelogram = + #(ly:make-stencil (list 'embedded-ps + "gsave + currentpoint translate + newpath + 0 0.25 moveto + 1.3125 0.75 lineto + 1.3125 -0.25 lineto + 0 -0.75 lineto + closepath + fill + grestore" ) + (cons 0 1.3125) + (cons 0 0)) + +myNoteHeads = \override NoteHead #'stencil = \parallelogram +normalNoteHeads = \revert NoteHead #'stencil + +\relative c'' { + \myNoteHeads + g4 d' + \normalNoteHeads + 4 d +} + + diff --git a/Documentation/snippets/using-the--tweak-command-to-tweak-individual-grobs.ly b/Documentation/snippets/using-the--tweak-command-to-tweak-individual-grobs.ly new file mode 100644 index 0000000000..9a218f1501 --- /dev/null +++ b/Documentation/snippets/using-the--tweak-command-to-tweak-individual-grobs.ly @@ -0,0 +1,26 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "tweaks-and-overrides" + + texidoc = " +With the @code{\\tweak} command, every grob can be tuned directly. +Here are some examples of available tweaks. + +" + doctitle = "Using the \\tweak command to tweak individual grobs" +} % begin verbatim + +\relative c' { + \time 2/4 + \set fingeringOrientations = #'(right) + < + \tweak #'font-size #3 c + \tweak #'color #red d-\tweak #'font-size #8 -4 + \tweak #'style #'cross g + \tweak #'duration-log #2 a + >2 +} + diff --git a/Documentation/snippets/using-ties-with-arpeggios.ly b/Documentation/snippets/using-ties-with-arpeggios.ly new file mode 100644 index 0000000000..88f3da1593 --- /dev/null +++ b/Documentation/snippets/using-ties-with-arpeggios.ly @@ -0,0 +1,64 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "rhythms" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + doctitlees = "Uso de ligaduras en los arpegios" + texidoces = " +En ocasiones se usan ligaduras de unión para escribir los arpegios. +En este caso, las dos notas ligadas no tienen que ser consecutivas. +Esto se puede conseguir estableciendo la propiedad +@code{tieWaitForNote} al valor @code{#t}. La misma funcionalidad +es de utilidad, por ejemplo, para ligar un trémolo a un acorde, pero +en principio también se puede usar para notas normales consecutivas. + +" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " + Überbindungen werden teilweise benutzt, um Arpeggios zu notieren. In + diesem Fall stehen die übergebundenen Noten nicht unbedingt hintereinander. +Das Verhalten kann erreicht werden, indem die @code{tieWaitForNote}-Eigenschaft +auf @code{#t} gesetzt wird. Diese Funktion ist auch sinnvoll, um etwa +ein Tremolo mit einem Akkord zu überbinden, kann aber prinzipiell auch +für normale Überbindungen eingesetzt werden +" + doctitlede = "Überbingungen für Arpeggio genutzen" + + +%% Translation of GIT committish: e71f19ad847d3e94ac89750f34de8b6bb28611df + texidocfr = " +Les liaisons de tenue servent parfois à rendre un accord arpégé. Dans +ce cas, les notes liées ne sont pas toutes consécutives. Il faut alors +assigner à la propriété @code{tieWaitForNote} la valeur @code{#t} +(@emph{true} pour @qq{vrai}). Cette même méthode peut servir, par +exemple, à lier un trémolo à un accord. +" + doctitlefr = "Liaison de tenue et arpège" + + texidoc = " +Ties are sometimes used to write out arpeggios. In this case, two tied +notes need not be consecutive. This can be achieved by setting the +@code{tieWaitForNote} property to @code{#t}. The same feature is also +useful, for example, to tie a tremolo to a chord, but in principle, it +can also be used for ordinary consecutive notes. + +" + doctitle = "Using ties with arpeggios" +} % begin verbatim + +\relative c' { + \set tieWaitForNote = ##t + \grace { c16[ ~ e ~ g] ~ } 2 + \repeat tremolo 8 { c32 ~ c' ~ } 1 + e8 ~ c ~ a ~ f ~ 2 + \tieUp + c8 ~ a + \tieDown + \tieDotted + g8 ~ c g2 +} + diff --git a/Documentation/snippets/utf-8.ly b/Documentation/snippets/utf-8.ly new file mode 100644 index 0000000000..618719061d --- /dev/null +++ b/Documentation/snippets/utf-8.ly @@ -0,0 +1,69 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "text" + + texidoc = " +Various scripts may be used for texts (like titles and lyrics) by +entering them in UTF-8 encoding, and using a Pango based backend. +Depending on the fonts installed, this fragment will render Bulgarian +(Cyrillic), Hebrew, Japanese and Portuguese. + +" + doctitle = "UTF-8" +} % begin verbatim + +% end verbatim - this comment is a hack to prevent texinfo.tex +% from choking on non-European UTF-8 subsets + +%% Edit this file using a Unicode aware editor, such as GVIM, GEDIT, Emacs + +%{ + +You may have to install additional fonts. + +Red Hat Fedora + + taipeifonts fonts-xorg-truetype ttfonts-ja fonts-arabic \ + ttfonts-zh_CN fonts-ja fonts-hebrew + +Debian GNU/Linux + + apt-get install emacs-intl-fonts xfonts-intl-.* \ + ttf-kochi-gothic ttf-kochi-mincho \ + xfonts-bolkhov-75dpi xfonts-cronyx-100dpi xfonts-cronyx-75dpi +%} + +% Cyrillic font +bulgarian = \lyricmode { + Жълтата дюля беше щастлива, че пухът, който цъфна, замръзна като гьон. +} + +hebrew = \lyricmode { + זה כיף סתם לשמוע איך תנצח קרפד עץ טוב בגן. +} + +japanese = \lyricmode { + いろはにほへど ちりぬるを + わがよたれぞ つねならむ + うゐのおくや まけふこえて + あさきゆめみじ ゑひもせず +} + +% "a legal song to you" +portuguese = \lyricmode { + à vo -- cê uma can -- ção legal +} + +\relative c' { + c2 d + e2 f + g2 f + e1 +} +\addlyrics { \bulgarian } +\addlyrics { \hebrew } +\addlyrics { \japanese } +\addlyrics { \portuguese } diff --git a/Documentation/snippets/vertically-aligned-dynamics-and-textscripts.ly b/Documentation/snippets/vertically-aligned-dynamics-and-textscripts.ly new file mode 100644 index 0000000000..2644622158 --- /dev/null +++ b/Documentation/snippets/vertically-aligned-dynamics-and-textscripts.ly @@ -0,0 +1,63 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "tweaks-and-overrides, spacing" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Mediante el establecimiento de la propiedad @code{'Y-extent} a un valor +adecuado, todos los objetos @code{DynamicLineSpanner} (reguladores e +indicaciones dinámicas textuales) se pueden alinear con un punto de +referencia común, independientemente de sus dimensiones. De esta +manera, todos los elementos estarán alineados verticalmente, +produciendo así un resultado más satisfactorio. + +Se usa una idea similar para alinear las inscripciones de texto a lo +largo de su línea de base. + +" + doctitlees = "Indicaciones dinámicas y textuales alineadas verticalmente" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d +texidocde = " +Indem man die @code{'Y-extent}-Eigenschaft auf einen passenden Wert setzt, +können alle @code{DynamicLineSpanner}-Objekte (Crescendo-Klammern und +Dynamik-Texte) (hairpins and dynamic texts) unabhängig von ihrer +wirklichen Ausdehnung an einem gemeinsamen Referenzpunkt ausgerichtet werden. +Auf diese Weise ist jedes Element vertikal ausgerichtet und der Notensatz +sieht ansprechender aus. + +Die gleiche Idee wird benutzt, um Textbeschriftungen an ihrer +Grundlinie auszurichten. + +" + doctitlede = "Vertikale Ausrichtung von Dynamik und Textbeschriftung beeinflussen" + + texidoc = " +By setting the @code{'Y-extent} property to a suitable value, all +@code{DynamicLineSpanner} objects (hairpins and dynamic texts) can be +aligned to a common reference point, regardless of their actual extent. +This way, every element will be vertically aligned, thus producing a +more pleasing output. + +The same idea is used to align the text scripts along their baseline. + +" + doctitle = "Vertically aligned dynamics and textscripts" +} % begin verbatim + +music = \relative c'' { + c2\p^\markup { gorgeous } c\f^\markup { fantastic } + c4\p c\f\> c c\!\p +} + +{ + \music \break + \override DynamicLineSpanner #'staff-padding = #2.0 + \override DynamicLineSpanner #'Y-extent = #'(-1.5 . 1.5) + \override TextScript #'Y-extent = #'(-1.5 . 1.5) + \music +} + diff --git a/Documentation/snippets/vertically-aligning-dynamics-across-multiple-notes.ly b/Documentation/snippets/vertically-aligning-dynamics-across-multiple-notes.ly new file mode 100644 index 0000000000..3cae77a6e5 --- /dev/null +++ b/Documentation/snippets/vertically-aligning-dynamics-across-multiple-notes.ly @@ -0,0 +1,34 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "expressive-marks" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Las expresiones dinámicas que se comienzan, terminan o se producen +en la misma nota se alinean verticalmente. Para asegurar que las +expresiones dinámicas se alinean cuando no se producen sobre la +misma nota, incremente la propiedad @code{staff-padding} del +objeto @code{DynamicLineSpanner}. + +" + doctitlees = "Alinear verticalmente expresiones dinámicas que abarcan varias notas" + + texidoc = " +Dynamics that occur at, begin on, or end on the same note will be +vertically aligned. To ensure that dynamics are aligned when they do +not occur on the same note, increase the @code{staff-padding} property +of the @code{DynamicLineSpanner} object. + +" + doctitle = "Vertically aligning dynamics across multiple notes" +} % begin verbatim + +\relative c' { + \override DynamicLineSpanner #'staff-padding = #4 + c2\p f\mf + g2\< b4\> c\! +} + diff --git a/Documentation/snippets/vertically-aligning-ossias-and-lyrics.ly b/Documentation/snippets/vertically-aligning-ossias-and-lyrics.ly new file mode 100644 index 0000000000..8f605d0812 --- /dev/null +++ b/Documentation/snippets/vertically-aligning-ossias-and-lyrics.ly @@ -0,0 +1,63 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "vocal-music, tweaks-and-overrides, spacing" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Este fragmento de código muestra el uso de las propiedades de +contexto @code{alignBelowContext} y @code{alignAboveContext} para +controlar la posición de la letra y los compases de ossia. + +" + doctitlees = "Alineación vertical de la letra y los compases de ossia" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Dieser Schnipsel zeigt, wie man die Kontexteigenschaften +@code{alignBelowContext} und @code{alignAboveContext} benutzen kann, um +die Positionierung von Gesangstext und Ossia-Abschnitten zu kontrollieren. + +" + doctitlede = "Gesangstext und Ossia vertikal ausrichten" + + texidoc = " +This snippet demonstrates the use of the context properties +@code{alignBelowContext} and @code{alignAboveContext} to control the +positioning of lyrics and ossias. + +" + doctitle = "Vertically aligning ossias and lyrics" +} % begin verbatim + +\paper { + ragged-right = ##t +} + +\relative c' << + \new Staff = "1" { c4 c s2 } + \new Staff = "2" { c4 c s2 } + \new Staff = "3" { c4 c s2 } + { \skip 2 + << + \lyrics { + \set alignBelowContext = #"1" + lyrics4 below + } + \new Staff \with { + alignAboveContext = #"3" + fontSize = #-2 + \override StaffSymbol #'staff-space = #(magstep -2) + \remove "Time_signature_engraver" + } { + \times 4/6 { + \override TextScript #'padding = #3 + c8[^"ossia above" d e d e f] + } + } + >> + } +>> + diff --git a/Documentation/snippets/vertically-centered-common-lyrics.ly b/Documentation/snippets/vertically-centered-common-lyrics.ly new file mode 100644 index 0000000000..b191d44c05 --- /dev/null +++ b/Documentation/snippets/vertically-centered-common-lyrics.ly @@ -0,0 +1,56 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "vocal-music" + + texidoc = " +In a vocal piece where there are several (two,four or more) lines of +lyrics, and common lyrics for all voices at some point, these common +lyrics may be vertically centered regardingly, as shown in the +following example: + +" + doctitle = "Vertically centered common lyrics" +} % begin verbatim + +\include "english.ly" +leftbrace = \markup { \override #'(font-encoding . fetaBraces) \lookup #"brace240" } +rightbrace = \markup { \rotate #180 \leftbrace } + +dropLyrics = +{ + \override LyricText #'extra-offset = #'(0 . -5) + \override LyricHyphen #'extra-offset = #'(0 . -5) + \override LyricExtender #'extra-offset = #'(0 . -5) +} + +raiseLyrics = +{ + \revert LyricText #'extra-offset + \revert LyricHyphen #'extra-offset + \revert LyricExtender #'extra-offset +} + +skipFour = \repeat unfold 4 { \skip 8 } + +lyricsA = \lyricmode { The first verse has \dropLyrics the com -- mon +__ words \raiseLyrics used in all four. } +lyricsB = \lyricmode { In stan -- za two, \skipFour al -- so ap -- pear. } +lyricsC = \lyricmode { By the third verse, \skipFour are get -- ting dull. } +lyricsD = \lyricmode { Last stan -- za, and \skipFour get used once more. } + +melody = \relative c' { c4 d e f g f e8( e f) d4 c e d c } + +\score +{ + << + \new Voice = m \melody + \new Lyrics \lyricsto m \lyricsA + \new Lyrics \lyricsto m \lyricsB + \new Lyrics \lyricsto m \lyricsC + \new Lyrics \lyricsto m \lyricsD + >> +} + diff --git a/Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly b/Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly new file mode 100644 index 0000000000..50528cffaa --- /dev/null +++ b/Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly @@ -0,0 +1,139 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { +%% Translation of GIT committish: 892286cbfdbe89420b8181975032ea975e79d2f5 + texidocfr = " +Ce canevas ajoute une réduction pour piano à une partition standard pour +chœur à quatre voix mixtes. Ceci illustre l'un des avantages de +LilyPond : une expression musicale peut être réutilisée sans effort. +Toute modification apportée à l'une des voix, mettons @code{tenorMusique}, +sera automatiquement reportée dans la réduction pour piano. + +" + doctitlefr = "Ensemble vocal avec réduction pour piano" + + lsrtags = "vocal-music, keyboards, template" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Esta plantilla añade una reducción de piano automática a la partitura +vocal SATB estándar que se mostró en la \"Plantilla de conjunto +vocal\". Esto presenta uno de los puntos fuertes de LilyPond: podemos +usar una definición de música más de una vez. Si se hace cualquier +cambio en las notas de la parte vocal (digamos @code{tenorMusic}), +entonces los cambios se aplicarán también a la reducción de piano. + +" + doctitlees = "Plantilla de conjunto vocal con reducción de piano automática" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +In diesem Beispiel wird ein automatischer Klavierauszug zu der +Chorpartitur hinzugefügt. Das zeigt eine der Stärken von LilyPond +-- man kann eine Variable mehr als einmal benutzen. Wenn Sie +irgendeine Änderung an einer Chorstimme vornehmen, (etwa +tenorMusic), verändert sich auch der Klavierauszug entsprechend. +" + +%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae + texidocja = " +このテンプレートは、\"合唱テンプレート\"で示された標準の SATB ボーカル譜に自動@c +ピアノ譜を付け加えています。これは LilyPond の強みの 1 つを示しています - 音楽@c +定義を何回も使用することができます。ボーカルの音符 (例えば、@code{tenorMusic} +の音符) に変更が加えられた場合、その変更はピアノ譜にも適用されます。 +" + + texidoc = " +This template adds an automatic piano reduction to the standard SATB +vocal score demonstrated in \"Vocal ensemble template\". This +demonstrates one of the strengths of LilyPond – you can use a music +definition more than once. If any changes are made to the vocal notes +(say, @code{tenorMusic}), then the changes will also apply to the piano +reduction. + +" + doctitle = "Vocal ensemble template with automatic piano reduction" +} % begin verbatim + +global = { + \key c \major + \time 4/4 +} + +sopMusic = \relative c'' { + c4 c c8[( b)] c4 +} +sopWords = \lyricmode { + hi hi hi hi +} + +altoMusic = \relative c' { + e4 f d e +} +altoWords =\lyricmode { + ha ha ha ha +} + +tenorMusic = \relative c' { + g4 a f g +} +tenorWords = \lyricmode { + hu hu hu hu +} + +bassMusic = \relative c { + c4 c g c +} +bassWords = \lyricmode { + ho ho ho ho +} + +\score { + << + \new ChoirStaff << + \new Lyrics = sopranos { s1 } + \new Staff = women << + \new Voice = sopranos { \voiceOne << \global \sopMusic >> } + \new Voice = altos { \voiceTwo << \global \altoMusic >> } + >> + \new Lyrics = altos { s1 } + \new Lyrics = tenors { s1 } + \new Staff = men << + \clef bass + \new Voice = tenors { \voiceOne <<\global \tenorMusic >> } + \new Voice = basses { \voiceTwo <<\global \bassMusic >> } + >> + \new Lyrics = basses { s1 } + \context Lyrics = sopranos \lyricsto sopranos \sopWords + \context Lyrics = altos \lyricsto altos \altoWords + \context Lyrics = tenors \lyricsto tenors \tenorWords + \context Lyrics = basses \lyricsto basses \bassWords + >> + \new PianoStaff << + \new Staff << + \set Staff.printPartCombineTexts = ##f + \partcombine + << \global \sopMusic >> + << \global \altoMusic >> + >> + \new Staff << + \clef bass + \set Staff.printPartCombineTexts = ##f + \partcombine + << \global \tenorMusic >> + << \global \bassMusic >> + >> + >> + >> + \layout { + \context { + % a little smaller so lyrics + % can be closer to the staff + \Staff + \override VerticalAxisGroup #'minimum-Y-extent = #'(-3 . 3) + } + } +} + diff --git a/Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly b/Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly new file mode 100644 index 0000000000..b44c084ea2 --- /dev/null +++ b/Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly @@ -0,0 +1,115 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { +%% Translation of GIT committish: 892286cbfdbe89420b8181975032ea975e79d2f5 + texidocfr = " +Ce canevas ressemble beaucoup à celui pour chœur à quatre voix mixtes. +La différence réside dans le fait que les paroles sont positionnées en +ayant recours à @code{alignAboveContext} et @code{alignBelowContext}. + +" + doctitlefr = "Ensemble vocal avec alignement des paroles selon le contexte" + + lsrtags = "text, vocal-music, contexts-and-engravers, template" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Esta plantilla es, básicamente, la misma que la sencilla plantilla +\"Conjunto vocal\", excepto que aquí todas las líneas de letra se +colocan utilizando @code{alignAboveContext} y +@code{alignBelowContext}. + +" + doctitlees = "Plantilla para conjunto vocal con letras alineadas encima y debajo de los pentagramas" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +In diesem Beispiel werden die Texte mit den Befehlen +@code{alignAboveContext} und @code{alignBelowContext} +über und unter dem System angeordnet. +" + + doctitlede = "Vorlage für Vokalensemble mit dem Gesangstext über und unter dem System" + +%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae + texidocja = " +このテンプレートは基本的に単純な \"合唱\" テンプレートと同じですが、歌詞が +@code{alignAboveContext} と @code{alignBelowContext} を用いて配置されています。 +" + + texidoc = " +This template is basically the same as the simple \"Vocal ensemble\" +template, with the exception that here all the lyrics lines are placed +using @code{alignAboveContext} and @code{alignBelowContext}. + +" + doctitle = "Vocal ensemble template with lyrics aligned below and above the staves" +} % begin verbatim + +global = { + \key c \major + \time 4/4 +} + +sopMusic = \relative c'' { + c4 c c8[( b)] c4 +} +sopWords = \lyricmode { + hi hi hi hi +} + +altoMusic = \relative c' { + e4 f d e +} +altoWords = \lyricmode { + ha ha ha ha +} + +tenorMusic = \relative c' { + g4 a f g +} +tenorWords = \lyricmode { + hu hu hu hu +} + +bassMusic = \relative c { + c4 c g c +} +bassWords = \lyricmode { + ho ho ho ho +} + +\score { + \new ChoirStaff << + \new Staff = women << + \new Voice = "sopranos" { \voiceOne << \global \sopMusic >> } + \new Voice = "altos" { \voiceTwo << \global \altoMusic >> } + >> + \new Lyrics \with { alignAboveContext = women } \lyricsto sopranos \sopWords + \new Lyrics \with { alignBelowContext = women } \lyricsto altos \altoWords + % we could remove the line about this with the line below, since we want + % the alto lyrics to be below the alto Voice anyway. + % \new Lyrics \lyricsto altos \altoWords + + \new Staff = men << + \clef bass + \new Voice = "tenors" { \voiceOne << \global \tenorMusic >> } + \new Voice = "basses" { \voiceTwo << \global \bassMusic >> } + >> + \new Lyrics \with { alignAboveContext = men } \lyricsto tenors \tenorWords + \new Lyrics \with { alignBelowContext = men } \lyricsto basses \bassWords + % again, we could replace the line above this with the line below. + % \new Lyrics \lyricsto basses \bassWords + >> + \layout { + \context { + % a little smaller so lyrics + % can be closer to the staff + \Staff + \override VerticalAxisGroup #'minimum-Y-extent = #'(-3 . 3) + } + } +} + diff --git a/Documentation/snippets/vocal-ensemble-template.ly b/Documentation/snippets/vocal-ensemble-template.ly new file mode 100644 index 0000000000..d3eafb09dd --- /dev/null +++ b/Documentation/snippets/vocal-ensemble-template.ly @@ -0,0 +1,133 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { +%% Translation of GIT committish: 892286cbfdbe89420b8181975032ea975e79d2f5 + texidocfr = " +Ce fichier constitue un canevas standard de partition pour chœur à +quatre voix mixtes. Lorsque les ensembles s'étoffent, il est judicieux +de recourrir à une section spécifique incluse dans chacune des parties, +tout particulièrement pour gérer la métrique et la tonalité qui, +la plupart du temps, sont communes à tous les pupitres. Comme il est +d'usage pour les hymnes, les quatre voix sont réparties sur deux +portées. + +" + doctitlefr = "Ensemble vocal (simple)" + + lsrtags = "vocal-music, template" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +He aquí una partitura vocal estándar para cuatro voces SATB. Con +grupos mayores, suele ser útil incluir una sección que aparezca en +todas las partes. Por ejemplo, el compás y la armadura casi siempre +son los mismos para todas. Como en la plantilla \"Himno\", las cuatro +voces se reagrupan en sólo dos pentagramas. + +" + doctitlees = "Plantilla de conjunto vocal" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Dieses Beispiel ist für vierstimmigen Gesang (SATB). Bei größeren +Stücken ist es oft sinnvoll, eine allgemeine Variable zu bestimmen, +die in allen Stimmen eingefügt wird. Taktart und Vorzeichen etwa +sind fast immer gleich in allen Stimmen. +" + + doctitlede = "Vorlage für Vokalensemble" + +%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae + texidocja = " +これは標準の 4 パート SATB (ソプラノ、アルト、テナー、バス) ボーカル譜です。@c +もっと大きな合唱では、すべてのパートで使用されるセクションをインクルードすると@c +便利です。例えば、拍子記号と調号はほとんど常にすべてのパートで同じです。\"賛美@c +歌\" テンプレートのように、4 つのボイスは 2 つの譜にグループ分けされています。" + + texidoc = " +Here is a standard four-part SATB vocal score. With larger ensembles, +it is often useful to include a section which is included in all parts. +For example, the time signature and key signature are almost always the +same for all parts. Like in the \"Hymn\" template, the four voices are +regrouped on only two staves. + +" + doctitle = "Vocal ensemble template" +} % begin verbatim + +global = { + \key c \major + \time 4/4 +} + +sopMusic = \relative c'' { + c4 c c8[( b)] c4 +} +sopWords = \lyricmode { + hi hi hi hi +} + +altoMusic = \relative c' { + e4 f d e +} +altoWords = \lyricmode { + ha ha ha ha +} + +tenorMusic = \relative c' { + g4 a f g +} +tenorWords = \lyricmode { + hu hu hu hu +} + +bassMusic = \relative c { + c4 c g c +} +bassWords = \lyricmode { + ho ho ho ho +} + +\score { + \new ChoirStaff << + \new Lyrics = sopranos { s1 } + \new Staff = women << + \new Voice = "sopranos" { + \voiceOne + << \global \sopMusic >> + } + \new Voice = "altos" { + \voiceTwo + << \global \altoMusic >> + } + >> + \new Lyrics = "altos" { s1 } + \new Lyrics = "tenors" { s1 } + \new Staff = men << + \clef bass + \new Voice = "tenors" { + \voiceOne + << \global \tenorMusic >> + } + \new Voice = "basses" { + \voiceTwo << \global \bassMusic >> + } + >> + \new Lyrics = basses { s1 } + \context Lyrics = sopranos \lyricsto sopranos \sopWords + \context Lyrics = altos \lyricsto altos \altoWords + \context Lyrics = tenors \lyricsto tenors \tenorWords + \context Lyrics = basses \lyricsto basses \bassWords + >> + \layout { + \context { + % a little smaller so lyrics + % can be closer to the staff + \Staff + \override VerticalAxisGroup #'minimum-Y-extent = #'(-3 . 3) + } + } +} + diff --git a/Documentation/snippets/vocal-music-intro.itely b/Documentation/snippets/vocal-music-intro.itely new file mode 100644 index 0000000000..fd192ae925 --- /dev/null +++ b/Documentation/snippets/vocal-music-intro.itely @@ -0,0 +1,7 @@ +@node Vocal music +@unnumbered Vocal music + +@ruser{Vocal music} + +@lysnippets + diff --git a/Documentation/snippets/vocal-music.snippet-list b/Documentation/snippets/vocal-music.snippet-list new file mode 100644 index 0000000000..1a8ef8ebb1 --- /dev/null +++ b/Documentation/snippets/vocal-music.snippet-list @@ -0,0 +1,21 @@ +adding-ambitus-per-voice.ly +adjusting-lyrics-vertical-spacing.ly +ambitus-with-multiple-voices.ly +ambitus.ly +changing-stanza-fonts.ly +chant-or-psalms-notation.ly +formatting-lyrics-syllables.ly +how-to-put-ties-between-syllables-in-lyrics.ly +lyrics-alignment.ly +marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly +piano-template-with-melody-and-lyrics.ly +single-staff-template-with-notes,-lyrics,-and-chords.ly +single-staff-template-with-notes,-lyrics,-chords-and-frets.ly +single-staff-template-with-notes-and-lyrics.ly +skips-in-lyric-mode-2.ly +skips-in-lyric-mode.ly +vertically-aligning-ossias-and-lyrics.ly +vertically-centered-common-lyrics.ly +vocal-ensemble-template-with-automatic-piano-reduction.ly +vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly +vocal-ensemble-template.ly diff --git a/Documentation/snippets/volta-below-chords.ly b/Documentation/snippets/volta-below-chords.ly new file mode 100644 index 0000000000..e08bda48be --- /dev/null +++ b/Documentation/snippets/volta-below-chords.ly @@ -0,0 +1,55 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "repeats, staff-notation, chords" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +Mediante la adición del grabador @code{Volta_engraver} al +pentagrama pertinente, se pueden poner los corchetes de primera y +segunda vez debajo de los acordes. + +" + doctitlees = "Corchetes de primera y segunda vez debajo de los acordes" + + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Indem man den @code{Volta_engraver} zu dem entsprechenden Notensystem +hinzufügt, können Wiederholungsklammern unterhalb der Akkorde gesetzt +werden. + +" + doctitlede = "Wiederholungs-(Volta-)Klammern unterhalb der Akkordsymbole" + + texidoc = " +By adding the @code{Volta_engraver} to the relevant staff, volte can be +put under chords. + +" + doctitle = "Volta below chords" +} % begin verbatim + +\score { + << + \chords { + c1 + c1 + } + \new Staff \with { + \consists "Volta_engraver" + } + { + \repeat volta 2 { c'1 } + \alternative { c' } + } + >> + \layout { + \context { + \Score + \remove "Volta_engraver" + } + } +} diff --git a/Documentation/snippets/volta-multi-staff.ly b/Documentation/snippets/volta-multi-staff.ly new file mode 100644 index 0000000000..c0d7e752b6 --- /dev/null +++ b/Documentation/snippets/volta-multi-staff.ly @@ -0,0 +1,36 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "repeats, staff-notation" + + texidoc = " +By adding the @code{Volta_engraver} to the relevant staff, volte can be +put over staves other than the topmost one in a score. + +" + doctitle = "Volta multi staff" +} % begin verbatim + +voltaMusic = \relative c'' { + \repeat volta 2 { + c1 + } + \alternative { + d1 + e + } +} + +<< + \new StaffGroup << + \new Staff \voltaMusic + \new Staff \voltaMusic + >> + \new StaffGroup << + \new Staff \with { \consists "Volta_engraver" } + \voltaMusic + \new Staff \voltaMusic + >> +>> diff --git a/Documentation/snippets/volta-text-markup-using-repeatcommands.ly b/Documentation/snippets/volta-text-markup-using-repeatcommands.ly new file mode 100644 index 0000000000..5f725fed88 --- /dev/null +++ b/Documentation/snippets/volta-text-markup-using-repeatcommands.ly @@ -0,0 +1,32 @@ +%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% This file is in the public domain. +\version "2.13.1" + +\header { + lsrtags = "repeats, text" + + texidoc = " +Though volte are best specified using @code{\\repeat volta}, the +context property @code{repeatCommands} must be used in cases where the +volta text needs more advanced formatting with @code{\\markup}. + +Since @code{repeatCommands} takes a list, the simplest method of +including markup is to use an identifier for the text and embed it in +the command list using the Scheme syntax @code{#(list (list 'volta +textIdentifier))}. Start- and end-repeat commands can be added as +separate list elements: + +" + doctitle = "Volta text markup using repeatCommands" +} % begin verbatim + +voltaAdLib = \markup { 1. 2. 3... \text \italic { ad lib. } } + +\relative c'' { + c1 + \set Score.repeatCommands = #(list (list 'volta voltaAdLib) 'start-repeat) + c4 b d e + \set Score.repeatCommands = #'((volta #f) (volta "4.") end-repeat) + f1 + \set Score.repeatCommands = #'((volta #f)) +} diff --git a/Documentation/snippets/winds-intro.itely b/Documentation/snippets/winds-intro.itely new file mode 100644 index 0000000000..01c5671f6f --- /dev/null +++ b/Documentation/snippets/winds-intro.itely @@ -0,0 +1,7 @@ +@node Winds +@unnumbered Winds + +@ruser{Wind instruments} + +@lysnippets + diff --git a/Documentation/snippets/winds.snippet-list b/Documentation/snippets/winds.snippet-list new file mode 100644 index 0000000000..d707cf7af7 --- /dev/null +++ b/Documentation/snippets/winds.snippet-list @@ -0,0 +1 @@ +flute-slap-notation.ly diff --git a/Documentation/snippets/world-music-intro.itely b/Documentation/snippets/world-music-intro.itely new file mode 100644 index 0000000000..7dc01da4d3 --- /dev/null +++ b/Documentation/snippets/world-music-intro.itely @@ -0,0 +1,7 @@ +@node World music +@unnumbered World music + +@ruser{World music} + +@lysnippets + diff --git a/Documentation/snippets/world-music.snippet-list b/Documentation/snippets/world-music.snippet-list new file mode 100644 index 0000000000..ff88b90b47 --- /dev/null +++ b/Documentation/snippets/world-music.snippet-list @@ -0,0 +1,3 @@ +arabic-improvisation.ly +makam-example.ly +printing-text-from-right-to-left.ly diff --git a/Documentation/texinfo.css b/Documentation/texinfo.css deleted file mode 100644 index af84899fc6..0000000000 --- a/Documentation/texinfo.css +++ /dev/null @@ -1,106 +0,0 @@ - hr { border:0; height:1; color: #000000; background-color: #000000; } -/* hr { - border: none; - height: 1px; - color: #666666; - background-color: #666666; -} -body { - border-left: 1px solid #666666; - border-right: 1px solid #666666; - color: #332d28; - margin-right: auto; - margin-left: auto; - width: 60em; - list-style-type: square; - font-family: Arial,Helvetica,sans-serif; - padding-right: 1em; - padding-left: 1em; -} -a { - border-bottom: 1px dashed #344242; - text-decoration: none; - color: #344242; -} -a:link { - text-decoration: none; -} -a:visited { - border-bottom: 1px dashed #666666; - color: #666666; -} -a:active { - border-bottom: 1px solid #00cccc; - color: #00cccc; -} -a:hover { - border-bottom: 1px solid #1d7b85; - color: #1d7b85; -} -blockquote { - border: 1px solid #cccccc; - padding: 3px; - width: 40em; -} -.node { - border-left: 1px solid #666666; - margin: -0.5em 0px 1em; - padding: 2px 1px 0px; - font-style: italic; -} -.node a { - border: none; - text-decoration: underline; - font-style: normal; - font-weight: bold; -} -.verbatim { - font-family: "Courier New",Courier,monospace; -} -.unnumberedsubsubsec { - font-size: large; - color: #1d7b85; -} -.subsubheading { - font-size: large; - color: #3b220d; -} -.contents { - border: 1px dashed #339999; - margin: 3px 2em; - list-style-type: square; - padding-right: 1em; - width: 40em; - background-color: #fcfff9; -} -.contents a { - border-bottom: 1px dashed #423d34; - text-decoration: none; - color: #423d34; -} -.contents a:visited { - border-bottom: 1px dashed #666666; - color: #666666; -} -.contents a:active { - border-bottom: 1px solid #f0d86d; - color: #f0d86d; -} -.contents a:hover { - border-bottom: 1px solid #3b220d; - color: #3b220d; -} -.menu { - border-left: 1px dashed #339999; - margin: 3px 2em 1em; - list-style-type: square; - padding-left: 1.4em; - width: 40em; -} -.unnumbered { -} -h2 { - font-size: x-large; - color: #1d7b85; -} -*/ diff --git a/Documentation/topdocs/GNUmakefile b/Documentation/topdocs/GNUmakefile index 231598d8f4..037cc39f1a 100644 --- a/Documentation/topdocs/GNUmakefile +++ b/Documentation/topdocs/GNUmakefile @@ -1,16 +1,18 @@ depth = ../.. - STEPMAKE_TEMPLATES=documentation tex texinfo topdocs LOCALSTEPMAKE_TEMPLATES=lilypond ly OUT_TEXI_FILES = $(TELY_FILES:%.tely=$(outdir)/%.texi) HTML_FILES=$(TEXI_FILES:%.texi=$(outdir)/%.html) $(TELY_FILES:%.tely=$(outdir)/%.html) -PDF_FILES=$(outdir)/NEWS.pdf README_TOP_FILES=NEWS AUTHORS INSTALL README OUTTXT_FILES= $(outdir)/NEWS.txt include $(depth)/make/stepmake.make +# FIXME ad-hoc file copy? +$(outdir)/NEWS.tely: $(top-src-dir)/Documentation/changes.tely + cp -f $< $@ + ifeq ($(out),www) local-WWW-1: $(OUT_TEXI_FILES) endif diff --git a/Documentation/topdocs/INSTALL.texi b/Documentation/topdocs/INSTALL.texi index de50b2f66e..79a9b4e97f 100644 --- a/Documentation/topdocs/INSTALL.texi +++ b/Documentation/topdocs/INSTALL.texi @@ -13,7 +13,7 @@ @contents @include macros.itexi -@include install.itely +@include contributor/basic-compile.itexi @bye diff --git a/Documentation/topdocs/NEWS.tely b/Documentation/topdocs/NEWS.tely deleted file mode 100644 index 0b4bbd4846..0000000000 --- a/Documentation/topdocs/NEWS.tely +++ /dev/null @@ -1,140 +0,0 @@ -\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- -@setfilename NEWS.info -@settitle NEWS - -@ifhtml -@macro inputfileref{DIR,NAME} -@uref{../../\DIR\/collated-files.html#\NAME\,@file{\DIR\/\NAME\}}@c -@end macro -@macro usermanref{NAME} -@inforef{\NAME\,,../user/lilypond/lilypond}@c -@end macro -@end ifhtml - -@ifnothtml -@macro inputfileref{DIR,NAME} -@file{\DIR\/\NAME\}@c -@end macro -@macro usermanref{NAME} -See user manual, \NAME\ -@end macro -@end ifnothtml - -@macro textanchor{NAME} -@html - -@end html -@end macro - - -@documentencoding utf-8 -@documentlanguage en - -@finalout - -@node Top -@top New features in 2.13 since 2.12 - -@ifhtml -This document is also available in @uref{NEWS.pdf,PDF}. It is part of -the @uref{../,LilyPond Documentation}. -@end ifhtml - - - - -@itemize @bullet - -@ignore - -HINTS - -* only show verbatim input for syntax/input changes - -* try to be as brief possible in those cases - -* don't try to provide real-world examples, they often get too big, -which scares away people. - -* Write complete sentences. - -* only show user-visible changes. - -@end ignore - -@item Dashed and dotted slurs, phrasing slurs, and ties -have been made variable thickness, and -partially dashed slurs are now available: -@lilypond[quote] -\relative c'' { - \slurDashed - c4( d e f) | - \slurDotted - g4( f e d) | - \slurHalfDashed - c4( d e f) -} -@end lilypond - - -@item An eyeglasses markup was added, incidating strongly to look at the -conductor for instructions: -@lilypond[quote] -\relative c'' { - \mark \markup {\eyeglasses} - c4_\markup{\eyeglasses} -} -@end lilypond - -@item -A snap-pizzicato (also known as Bartok-pizzicato) articulation was added: -@lilypond[quote] -\relative c'' { - c\snappizzicato -} -@end lilypond - -@item -Tuplet number formatting functions are now available to print other fractions and to add notes to the number or fraction: -@lilypond[quote] -\relative c'' { - \once \override TupletNumber #'text = #(tuplet-number::non-default-tuplet-denominator-text 7) - \times 2/3 { c4. c4. c4. c4. } % begin verbatim - - \once \override TupletNumber #'text = #(tuplet-number::non-default-tuplet-fraction-text 12 7) - \times 2/3 { c4. c4. c4. c4. } - \once \override TupletNumber #'text = #(tuplet-number::append-note-wrapper (tuplet-number::non-default-tuplet-fraction-text 12 7) "8") - \times 2/3 { c4. c4. c4. c4. } - - \once \override TupletNumber #'text = #(tuplet-number::append-note-wrapper tuplet-number::calc-denominator-text "4") - \times 2/3 { c8 c8 c8 c8 c8 c8 } - \once \override TupletNumber #'text = #(tuplet-number::append-note-wrapper tuplet-number::calc-fraction-text "4") - \times 2/3 { c8 c8 c8 c8 c8 c8 } - - \once \override TupletNumber #'text = #(tuplet-number::fraction-with-notes "4." "8") - \times 2/3 { c4. c4. c4. c4. } - \once \override TupletNumber #'text = #(tuplet-number::non-default-fraction-with-notes 12 "8" 4 "4") - \times 2/3 { c4. c4. c4. c4. } -} -@end lilypond - -@item -FretBoards now have a chordChanges property to keep repeated FretBoard objects -from being typeset. - - - -@end itemize - - - -@ifhtml -For older news, go to -@uref{http://lilypond.org/doc/v2.12/Documentation/topdocs/NEWS.html}, -@uref{http://lilypond.org/doc/v2.10/Documentation/topdocs/NEWS.html}, -or @uref{../,go back} to the Documentation index. - - -@end ifhtml - -@bye diff --git a/Documentation/translations.html.in b/Documentation/translations.html.in index d857cf03ad..de295a2a2e 100644 --- a/Documentation/translations.html.in +++ b/Documentation/translations.html.in @@ -38,14 +38,14 @@ translations.template.html.in; DO NOT EDIT !--> is finished.

    -

    Last updated Thu Jun 18 16:38:03 UTC 2009 +

    Last updated Fri Jul 17 16:08:17 UTC 2009

    - + - + - + - + - + - + - + @@ -328,17 +328,17 @@ translations.template.html.in; DO NOT EDIT !--> - + - + - + - + - + - + - + - + - + - - +
    New features in 2.13 since 2.12 es
    Section titles
    (180)
    Section titles
    (212)
    Francisco Vila
    translated
    up to date
    @@ -103,24 +103,24 @@ translations.template.html.in; DO NOT EDIT !-->
    1 Introduction
    (3855)
    1 Introduction
    (3866)
    Ludovic Sardain
    John Mandereau
    Jean-Charles Malahieude
    Jean-Yves Baudais
    Damien Heurtebise

    translated
    - up to date
    + partially up to date
    Till Rettig
    Reinhold Kainhofer
    Hajo Bäß
    translated
    - up to date
    + partially up to date
    Yoshiki Sawada
    translated
    - up to date
    + partially up to date
    Francisco Vila
    translated
    @@ -128,7 +128,7 @@ translations.template.html.in; DO NOT EDIT !-->
    2 Tutorial
    (6343)
    2 Tutorial
    (6368)
    Nicolas Grandclaude
    Ludovic Sardain
    Gauvain Pocentek
    @@ -144,7 +144,7 @@ translations.template.html.in; DO NOT EDIT !-->
    Yoshiki Sawada
    translated
    - partially up to date
    + partially up to date
    Francisco Vila
    translated
    @@ -152,7 +152,7 @@ translations.template.html.in; DO NOT EDIT !-->
    3 Fundamental concepts
    (10318)
    3 Fundamental concepts
    (10323)
    Valentin Villenave
    Jean-Charles Malahieude
    John Mandereau
    @@ -174,7 +174,7 @@ translations.template.html.in; DO NOT EDIT !-->
    4 Tweaking output
    (14816)
    4 Tweaking output
    (14834)
    Valentin Villenave
    Nicolas Klutchnikoff
    Damien Heurtebise
    @@ -197,22 +197,22 @@ translations.template.html.in; DO NOT EDIT !-->
    5 Working on LilyPond projects
    (4550)
    5 Working on LilyPond projects
    (5033)
    Ludovic Sardain
    Jean-Yves Baudais
    Valentin Villenave
    John Mandereau
    Jean-Charles Malahieude

    - partially translated (68 %)
    - partially up to date
    + partially translated (53 %)
    + partially up to date
    Till Rettig
    - partially translated (68 %)
    - partially up to date
    + partially translated (54 %)
    + partially up to date
    Yoshiki Sawada
    - partially translated (68 %)
    - partially up to date
    + partially translated (53 %)
    + partially up to date
    Francisco Vila
    translated
    @@ -237,12 +237,12 @@ translations.template.html.in; DO NOT EDIT !-->
    B Scheme tutorial
    (960)
    B Scheme tutorial
    (1222)
    not translated
    Till Rettig
    translated
    - up to date
    + partially up to date
    not translated
    3 Running LilyPond
    (2827)
    3 Running LilyPond
    (3023)
    not translated
    Reinhold Kainhofer
    Till Rettig
    - translated
    - up to date
    + partially translated (97 %)
    + partially up to date
    Yoshiki Sawada
    - translated
    - up to date
    + partially translated (97 %)
    + partially up to date
    Francisco Vila
    translated
    @@ -425,7 +425,7 @@ translations.template.html.in; DO NOT EDIT !-->
    1.1 Pitches
    (3145)
    1.1 Pitches
    (3155)
    Frédéric Chiasson
    Valentin Villenave
    Jean-Charles Malahieude

    @@ -442,13 +442,14 @@ translations.template.html.in; DO NOT EDIT !-->
    1.2 Rhythms
    (4772)
    1.2 Rhythms
    (4757)
    Frédéric Chiasson
    Jean-Charles Malahieude
    Valentin Villenave
    - Jean-Charles Malahieude

    + Jean-Charles Malahieude
    +
    translated
    - partially up to date
    + up to date
    Till Rettig
    translated
    @@ -460,7 +461,7 @@ translations.template.html.in; DO NOT EDIT !-->
    1.3 Expressive marks
    (1393)
    1.3 Expressive marks
    (1392)
    Valentin Villenave
    Jean-Charles Malahieude
    John Mandereau

    @@ -469,7 +470,7 @@ translations.template.html.in; DO NOT EDIT !-->
    Till Rettig
    translated
    - up to date
    + partially up to date
    Francisco Vila
    translated
    @@ -512,7 +513,7 @@ translations.template.html.in; DO NOT EDIT !-->
    1.6 Staff notation
    (1708)
    1.6 Staff notation
    (1689)
    Valentin Villenave
    Jean-Charles Malahieude
    John Mandereau
    @@ -529,7 +530,7 @@ translations.template.html.in; DO NOT EDIT !-->
    1.7 Editorial annotations
    (905)
    1.7 Editorial annotations
    (919)
    Jean-Charles Malahieude
    translated
    partially up to date
    @@ -544,7 +545,7 @@ translations.template.html.in; DO NOT EDIT !-->
    1.8 Text
    (2376)
    1.8 Text
    (2412)
    Jean-Charles Malahieude
    Valentin Villenave
    John Mandereau

    @@ -599,7 +600,7 @@ translations.template.html.in; DO NOT EDIT !--> Jean-Charles Malahieude
    John Mandereau

    translated
    - up to date
    + partially up to date
    Till Rettig
    translated
    @@ -725,7 +726,7 @@ translations.template.html.in; DO NOT EDIT !-->
    3 General input and output
    (6024)
    3 General input and output
    (6170)
    Jean-Charles Malahieude
    Valentin Villenave
    partially translated (5 %)
    @@ -757,7 +758,7 @@ translations.template.html.in; DO NOT EDIT !-->
    5 Changing defaults
    (11747)
    5 Changing defaults
    (11800)
    Valentin Villenave
    Gilles Thibault
    partially translated (45 %)
    @@ -779,7 +780,9 @@ translations.template.html.in; DO NOT EDIT !--> partially translated (9 %)
    partially up to date
    not translated
    +
    Till Rettig
    + translated
    + up to date
    Francisco Vila
    translated
    @@ -800,15 +803,15 @@ translations.template.html.in; DO NOT EDIT !-->
    B Notation manual tables
    (1182)
    B Notation manual tables
    (611)
    Frédéric Chiasson
    Jean-Charles Malahieude
    - partially translated (6 %)
    - up to date
    + partially translated (12 %)
    + partially up to date
    Till Rettig
    - translated
    - up to date
    + partially translated (69 %)
    + partially up to date
    Francisco Vila
    translated
    @@ -823,7 +826,7 @@ translations.template.html.in; DO NOT EDIT !-->
    Till Rettig
    translated
    - partially up to date
    + up to date
    Francisco Vila
    translated
    diff --git a/Documentation/user/GNUmakefile b/Documentation/user/GNUmakefile deleted file mode 100644 index d928f28375..0000000000 --- a/Documentation/user/GNUmakefile +++ /dev/null @@ -1,155 +0,0 @@ -depth=../.. - -LATEX_FILES =$(call src-wildcard,*.latex) - - -EXTRA_DIST_FILES = $(LATEX_FILES) $(IMAGES) $(EPS_ILLUSTRATIONS) -EXTRA_DIST_FILES += README.txt - -IMAGES=$(call src-wildcard,*.png) -EPS_ILLUSTRATIONS=context-example.eps -PDF_ILLUSTRATIONS=context-example.pdf - -OUT_PDF_IMAGES=$(IMAGES:%.png=$(outdir)/%.pdf) $(addprefix $(outdir)/,$(PDF_ILLUSTRATIONS)) - -OUT_PNG_IMAGES=$(OUT_PDF_IMAGES:%.pdf=%.png) - -OUT_MASTER_TEXI_FILES = $(outdir)/lilypond-internals.texi -OUT_TEXI_FILES=$(ITEXI_FILES:%.itexi=$(outdir)/%.texi)\ - $(ITELY_FILES:%.itely=$(outdir)/%.texi) - -HTML_FILES = $(TELY_FILES:%.tely=$(outdir)/%-big-page.html)\ - $(outdir)/lilypond-internals-big-page.html - -# todo: add latex. -PDF_FILES = $(TELY_FILES:%.tely=$(outdir)/%.pdf)\ - $(outdir)/lilypond-internals.pdf - -MAIN_INFO_DOC = lilypond -INFO_DOCS = lilypond lilypond-internals music-glossary lilypond-program lilypond-learning -INFO_FILES = $(INFO_DOCS:%=$(outdir)/%.info) - -TEXI2PDF_FLAGS = \ - -I $(outdir) \ - -I $(top-src-dir)/Documentation/user \ - -I $(top-build-dir)/Documentation/user/$(outconfbase) - -ifeq ($(out),www) -INFO_IMAGES_DIR = lilypond -DEST_INFO_IMAGES_SUBDIR = Documentation/user -endif - -STEPMAKE_TEMPLATES=texinfo omf documentation -OMF_FILES += $(outdir)/lilypond-internals.html.omf - -LOCALSTEPMAKE_TEMPLATES=lilypond ly - -include $(depth)/make/stepmake.make - -default: - -info: $(INFO_FILES) - @echo export LILYPOND_DATADIR=$(LILYPOND_DATADIR) - @echo export PYTHONPATH=$(PYTHONPATH) - -xml: $(outdir)/lilypond/lilypond.xml $(outdir)/lilypond-internals/lilypond-internals.xml - - -local-clean: - rm -f $(INFO_IMAGES_DIR) - -local-help: extra-local-help - -extra-local-help: - @echo -e "\ - info update info pages\n\ - xml update Docbook xml documentation\n\ -" - -# -# Split manuals in HTML -# -$(outdir)/lilypond/index.html: $(OUT_PNG_IMAGES) $(OUT_EPS_IMAGES) -$(outdir)/lilypond-learning/index.html: $(OUT_PNG_IMAGES) $(OUT_EPS_IMAGES) - - -# -# Manuals in one big HTML page -# -$(outdir)/lilypond-big-page.html: $(OUT_PNG_IMAGES) -$(outdir)/lilypond-learning-big-page.html: $(OUT_PNG_IMAGES) - -$(outdir)/lilypond.xml: $(outdir)/lilypond.texi - mkdir -p $(dir $@) - $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ --docbook $< - -$(outdir)/lilypond-internals/lilypond-internals.xml: $(outdir)/lilypond-internals.texi - mkdir -p $(dir $@) - $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(outdir)/lilypond-internals --docbook $< - -$(outdir)/lilypond.pdf $(outdir)/lilypond-learning.pdf: $(OUT_PDF_IMAGES) - -$(outdir)/%.png: %.png - convert -depth 8 -geometry 50x50% $< $@ - -$(outdir)/%.png: %.eps - gs -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -q -sOutputFile=$@ -sDEVICE=png16m -dEPSCrop -dNOPAUSE -f $< -c quit - -$(outdir)/%.pdf: %.png - convert -depth 8 $< $@ - -$(outdir)/%.pdf: %.eps - gs -dAutoRotatePages=/None -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -sOutputFile=$@ -dEPSCrop -c .setpdfwrite -f $< - - -DEEP_HTML_FILES =\ - $(outdir)/lilypond/index.html\ - $(outdir)/lilypond-internals/index.html\ - $(outdir)/music-glossary/index.html\ - $(outdir)/lilypond-program/index.html\ - $(outdir)/lilypond-learning/index.html - -# Symlinks to refer to external source documents from split and non-split HTML -source-links = $(outdir)/source $(outdir)/lilypond/source $(outdir)/music-glossary/source \ - $(outdir)/lilypond-program/source $(outdir)/lilypond-learning/source $(outdir)/lilypond-internals/source - -$(outdir)/source: - @rm -f $(@) - ln -sf $(depth) $(@) - -$(outdir)/%/source: - @rm -f $(@) - mkdir -p $(dir $@) - ln -sf $(depth)/.. $(@) - -ifeq ($(out),www) -local-WWW-1: $(MASTER_TEXI_FILES) $(PDF_FILES) info - -local-WWW-2: $(HTML_FILES) $(DEEP_HTML_FILES) $(source-links) -endif - -$(outdir)/%.bib: %.bib - ln -f $< $@ - -# lilypond.texi deps -$(top-build-dir)/mf/$(outconfbase)/feta16list.ly: - $(MAKE) -C $(top-src-dir)/mf - -$(outdir)/lilypond.texi $(outdir)/lilypond-program.texi $(outdir)/lilypond-learning.texi $(outdir)/music-glossary.texi: $(ITELY_FILES) $(ITEXI_FILES) - -$(outdir)/lilypond.texi: $(outdir)/ly-grammar.txt - -# Rules for the automatically generated documentation - -$(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy - cd $(outdir) && $(BISON) -v $< - $(auxscript-dir)/yyout2grammar.py $(outdir)/parser.output $@ - -# There used to be a dependency on a dummy target, to force a rebuild -# of lilypond-internals every time. however, this triggers -# compilation during install, which is a bad thing (tm). - -$(outdir)/lilypond-internals.texi: $(LILYPOND_BINARY) - cd $(outdir) && $(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation - -.SECONDARY: diff --git a/Documentation/user/README.txt b/Documentation/user/README.txt deleted file mode 100644 index 45058ea3ac..0000000000 --- a/Documentation/user/README.txt +++ /dev/null @@ -1,5 +0,0 @@ -Info for Documentation ----------------------- - -See CG 3. Documentation work - diff --git a/Documentation/user/ancient.itely b/Documentation/user/ancient.itely deleted file mode 100644 index c6ae58e19b..0000000000 --- a/Documentation/user/ancient.itely +++ /dev/null @@ -1,2562 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c vim: foldmethod=marker -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Ancient notation -@section Ancient notation - -@lilypondfile[quote]{ancient-headword.ly} - -@cindex Vaticana, Editio -@cindex Medicaea, Editio -@cindex hufnagel -@cindex Petrucci -@cindex mensural - - -@menu -* Overview of the supported styles:: -* Ancient notation---common features:: -* Typesetting mensural music:: -* Typesetting Gregorian chant:: -* Working with ancient music---scenarios and solutions:: -@end menu - - -Support for ancient notation includes features for mensural -notation and Gregorian chant notation. These features can be -accessed either by modifying style properties of graphical objects -such as note heads and rests, or by using one of the pre-defined -contexts for mensural or Gregorian notation. - -Many graphical objects, such as note heads and flags, accidentals, -time signatures, and rests, provide a @code{style} property, which -can be changed to emulate several different styles of ancient -notation. See - -@itemize -@item @ref{Mensural note heads}, -@item @ref{Mensural accidentals and key signatures}, -@item @ref{Mensural rests}, -@item @ref{Mensural clefs}, -@item @ref{Gregorian clefs}, -@item @ref{Mensural flags}, -@item @ref{Mensural time signatures}. -@end itemize - -Some notational concepts are introduced specifically for ancient -notation, - -@itemize -@item @ref{Custodes}, -@item @ref{Divisiones}, -@item @ref{Ligatures}. -@end itemize - -@c {{{1 Overview of the supported styles -@node Overview of the supported styles -@subsection Overview of the supported styles - - -Three styles are available for typesetting Gregorian chant: - -@itemize -@item @emph{Editio Vaticana} is a complete style for -Gregorian chant, following the appearance of the Solesmes -editions, the official chant books of the Vatican since 1904. -LilyPond has support for all the notational signs used in this -style, including ligatures, @emph{custodes}, and special signs -such as the quilisma and the oriscus. - -@cindex Solesmes -@cindex Vaticana, Editio - -@item The @emph{Editio Medicaea} style offers certain features -used in the Medicaea (or Ratisbona) editions which were used prior -to the Solesmes editions. The most significant differences from -the @emph{Vaticana} style are the clefs, which have -downward-slanted strokes, and the noteheads, which are square and -regular. - -@cindex Ratisbona, Editio -@cindex Medicaea, Editio - -@item The @emph{Hufnagel} (@qq{horseshoe nail}) or @emph{Gothic} -style mimics the writing style in chant manuscripts from Germany -and Central Europe during the middle ages. It is named after the -basic note shape (the @emph{virga}), which looks like a small -nail. -@cindex hufnagel -@end itemize - -Three styles emulate the appearance of late-medieval and -renaissance manuscripts and prints of mensural music: - -@itemize -@item The @emph{Mensural} style most closely resembles the -writing style used in late-medieval and early renaissance -manuscripts, with its small and narrow, diamond-shaped noteheads -and its rests which approach a hand-drawn style. - -@cindex mensural - -@item The @emph{Neomensural} style is a modernized and -stylized version of the former: the noteheads are broader and the -rests are made up of straight lines. This style is particularly -suited, e.g., for incipits of transcribed pieces of mensural -music. - -@cindex neomensural - -@item The @emph{Petrucci} style is named after Ottaviano Petrucci -(1466-1539), the first printer to use movable type for music (in -his @emph{Harmonice musices odhecaton}, 1501). The style uses -larger note heads than the other mensural styles. - -@cindex Petrucci - -@end itemize - -@emph{Baroque} and @emph{Classical} are not complete styles -but differ from the default style only in some details: certain -noteheads (Baroque) and the quarter rest (Classical). - -Only the mensural style has alternatives for all aspects of the -notation. Thus, there are no rests or flags in the Gregorian -styles, since these signs are not used in plainchant notation, and -the Petrucci style has no flags or accidentals of its own. - -Each element of the notation can be changed independently of the -others, so that one can use mensural flags, petrucci noteheads, -classical rests and vaticana clefs in the same piece, if one -wishes. - -@c {{{1 Ancient notation, general -@node Ancient notation---common features -@subsection Ancient notation---common features - -@menu -* Pre-defined contexts:: -* Ligatures:: -* Custodes:: -* Figured bass support:: -@end menu - -@c {{{2 Pre-defined contexts -@node Pre-defined contexts -@unnumberedsubsubsec Pre-defined contexts - -For Gregorian chant and mensural notation, there are pre-defined -voice and staff contexts available, which set all the various -notation signs to values suitable for these styles. If one is -satisfied with these defaults, one can proceed directly with note -entry without worrying about the details on how to customize a -context. See one of the pre-defined contexts -@code{VaticanaVoice}, @code{VaticanaStaff}, @code{MensuralVoice}, -and @code{MensuralStaff}. See further - -@itemize -@item @ref{Gregorian chant contexts}, -@item @ref{Mensural contexts}. -@end itemize - - -@c {{{2 Ligatures -@node Ligatures -@unnumberedsubsubsec Ligatures - -@cindex Ligatures - -@c TODO: Should double check if I recalled things correctly when I wrote -@c down the following paragraph by heart. - -A ligature is a graphical symbol that represents at least two -distinct notes. Ligatures originally appeared in the manuscripts -of Gregorian chant notation to denote ascending or descending -sequences of notes on the same syllable. They are also used in -mensural notation. - -Ligatures are entered by @emph{enclosing} them in @code{\[} and -@code{\]}. Some ligature styles may need additional input syntax -specific for this particular type of ligature. By default, the -@rinternals{LigatureBracket} engraver just puts a square bracket -above the ligature. - -@lilypond[quote,ragged-right,verbatim] -\transpose c c' { - \[ g c a f d' \] - a g f - \[ e f a g \] -} -@end lilypond - -Two other ligature styles are available: the Vaticana for -Gregorian chant, and the Mensural for mensural music (only white -mensural ligatures are supported for mensural music, and with -certain limitations). To use any of these styles, the default -@code{Ligature_bracket_engraver} has to be replaced with one of the -specialized ligature engravers in the @rinternals{Voice} context, -as explained in @ref{White mensural ligatures} and @ref{Gregorian -square neume ligatures}. - - -@seealso -@c TODO: nothing here yet ... - - -@knownissues - -Ligatures need special spacing that has not yet been implemented. As -a result, there is too much space between ligatures most of the time, -and line breaking often is unsatisfactory. Also, lyrics do not -correctly align with ligatures. - -Accidentals must not be printed within a ligature, but instead need to -be collected and printed in front of it. - -The syntax still uses the deprecated infix style @code{\[ music expr -\]}. For consistency reasons, it will eventually be changed to -postfix style @code{note\[ ... note\]}. - -@c Alternatively, the file -@c @file{gregorian@/-init@/.ly} can be included; it provides a scheme -@c function -@c @example -@c \ligature @var{music expr} -@c @end example -@c with the same effect and is believed to be stable. - -@c TODO: this does not seem to work at the moment. -@c -- eo - - - -@c {{{2 Custodes -@node Custodes -@unnumberedsubsubsec Custodes - -@cindex custos -@cindex custodes - -A @emph{custos} (plural: @emph{custodes}; Latin word for @qq{guard}) is a -symbol that appears at the end of a staff. It anticipates the pitch -of the first note of the following line, thus helping the performer -to manage line breaks during performance. - -Custodes were frequently used in music notation until the -seventeenth century. Nowadays, they have survived only in a few -particular forms of musical notation such as contemporary editions -of Gregorian chant like the @emph{Editio Vaticana}. There are -different custos glyphs used in different flavors of notational -style. - -For typesetting custodes, just put a @rinternals{Custos_engraver} into the -@rinternals{Staff} context when declaring the @code{\layout} block, -and change the style of the custos with an @code{\override} if -desired, as shown in the following example: - -@lilypond[quote,ragged-right] -\score { - \relative c'' { - a1 - \break - g - } - \layout { - \context { - \Staff - \consists Custos_engraver - \override Custos #'style = #'mensural - } - } -} -@end lilypond - -The custos glyph is selected by the @code{style} property. The styles -supported are @code{vaticana}, @code{medicaea}, @code{hufnagel}, and -@code{mensural}. They are demonstrated in the following fragment - -@lilypond[quote,ragged-right,fragment] -\new Lyrics \lyricmode { - \markup { \column { - \typewriter "vaticana" - \line { " " \musicglyph #"custodes.vaticana.u0" } - } } - \markup { \column { - \typewriter "medicaea" - \line { " " \musicglyph #"custodes.medicaea.u0" } - }} - \markup { \column { - \typewriter "hufnagel" - \line { " " \musicglyph #"custodes.hufnagel.u0" } - }} - \markup { \column { - \typewriter "mensural" - \line { " " \musicglyph #"custodes.mensural.u0" } - }} -} -@end lilypond - - -@seealso -Internals Reference: @rinternals{Custos}. - -Examples: -@rlsr{Ancient notation}. - - -@c {{{2 Figured bass support -@node Figured bass support -@unnumberedsubsubsec Figured bass support - -There is limited support for figured bass notation from the -Baroque period; see @ref{Figured bass}. - - -@c {{{1 Typesetting mensural music -@node Typesetting mensural music -@subsection Typesetting mensural music - -@menu -* Mensural contexts:: -* Mensural clefs:: -* Mensural time signatures:: -* Mensural note heads:: -* Mensural flags:: -* Mensural rests:: -* Mensural accidentals and key signatures:: -* Annotational accidentals (musica ficta):: -* White mensural ligatures:: -@end menu - - - -@c {{{2Mensural contexts -@node Mensural contexts -@unnumberedsubsubsec Mensural contexts - -@cindex MensuralVoiceContext -@cindex MensuralStaffContext - -The predefined @code{MensuralVoice} and @code{MensuralStaff} -contexts can be used to engrave a piece in mensural style. These -contexts initialize all relevant context properties and grob -properties to proper values, so you can immediately go ahead -entering the chant, as the following excerpt demonstrates: - -@lilypond[quote,ragged-right,verbatim] -\score { - << - \new MensuralVoice = "discantus" \transpose c c' { - \override Score.BarNumber #'transparent = ##t { - c'1\melisma bes a g\melismaEnd - f\breve - \[ f1\melisma a c'\breve d'\melismaEnd \] - c'\longa - c'\breve\melisma a1 g1\melismaEnd - fis\longa^\signumcongruentiae - } - } - \new Lyrics \lyricsto "discantus" { - San -- ctus, San -- ctus, San -- ctus - } - >> -} -@end lilypond - - -@seealso -TODO: nothing here yet ... - - -@c {{{2 Mensural clefs -@node Mensural clefs -@unnumberedsubsubsec Mensural clefs - -@cindex clefs - -The following table shows all mensural clefs that are supported via -the @code{\clef} command. Some of the clefs use the same glyph, -but differ only with respect to the line they are printed on. In -such cases, a trailing number in the name is used to enumerate -these clefs, numbered from the lowest to the highest line. Still, -you can manually force a clef glyph to be typeset on an arbitrary -line, as described in @ref{Clef}. The note printed to the right -side of each clef in the example column denotes the @code{c'} with -respect to that clef. - -Petrucci used C clefs with differently balanced left-side vertical -beams, depending on which staff line it is printed. - -@multitable @columnfractions .4 .4 .2 -@item -@b{Description} -@tab -@b{Supported Clefs} -@tab -@b{Example} - -@item -mensural C clef -@tab -@code{mensural-c1}, @code{mensural-c2},@* -@code{mensural-c3}, @code{mensural-c4} -@tab -@lilypond[fragment,relative=1,notime] - \clef "mensural-c2" - \override NoteHead #'style = #'mensural - c -@end lilypond - -@item -mensural F clef -@tab -@code{mensural-f} -@tab -@lilypond[fragment,relative=1,notime] - \clef "mensural-f" - \override NoteHead #'style = #'mensural - c -@end lilypond - -@item -mensural G clef -@tab -@code{mensural-g} -@tab -@lilypond[fragment,relative=1,notime] - \clef "mensural-g" - \override NoteHead #'style = #'mensural - c -@end lilypond - -@item -neomensural C clef -@tab -@code{neomensural-c1}, @code{neomensural-c2},@* -@code{neomensural-c3}, @code{neomensural-c4} -@tab -@lilypond[fragment,relative=1,notime] - \clef "neomensural-c2" c -@end lilypond - -@item -petrucci style C clefs, for use on different staff lines -(the example shows the 2nd staff line C clef) -@tab -@code{petrucci-c1}, @code{petrucci-c2},@* -@code{petrucci-c3}, @code{petrucci-c4},@* -@code{petrucci-c5} -@tab -@lilypond[fragment,relative=1,notime] - \clef "petrucci-c2" - \override NoteHead #'style = #'mensural - c -@end lilypond - -@item -petrucci style F clef -@tab -@code{petrucci-f} -@tab -@lilypond[fragment,relative=1,notime] - \clef "petrucci-f" - \override NoteHead #'style = #'mensural - c -@end lilypond - -@item -petrucci style G clef -@tab -@code{petrucci-g} -@tab -@lilypond[fragment,relative=1,notime] - \clef "petrucci-g" - \override NoteHead #'style = #'mensural - c -@end lilypond -@end multitable - - -@seealso -Notation Reference: see @ref{Clef}. - - -@knownissues - -The mensural g clef is mapped to the Petrucci g clef. - - -@c {{{2Mensural time signatures -@node Mensural time signatures -@unnumberedsubsubsec Mensural time signatures - -@cindex mensuration sign -@cindex time signatures - -There is limited support for mensuration signs (which are similar to, but -not exactly the same as time signatures). The glyphs are hard-wired to -particular time fractions. In other words, to get a particular mensuration -sign with the @code{\time n/m} command, @code{n} and @code{m} have to be -chosen according to the following table - -@lilypond[quote,ragged-right] -\layout { - indent = 0.0 - \context { - \Staff - \remove Staff_symbol_engraver - \remove Clef_engraver - \remove Time_signature_engraver - } -} -{ - \set Score.timing = ##f - \set Score.barAlways = ##t - s_\markup { "\\time 4/4" }^\markup { " " \musicglyph -#"timesig.neomensural44" } - s - s_\markup { "\\time 2/2" }^\markup { " " \musicglyph -#"timesig.neomensural22" } - s - s_\markup { "\\time 6/4" }^\markup { " " \musicglyph -#"timesig.neomensural64" } - s - s_\markup { "\\time 6/8" }^\markup { " " \musicglyph -#"timesig.neomensural68" } - \break - s_\markup { "\\time 3/2" }^\markup { " " \musicglyph -#"timesig.neomensural32" } - s - s_\markup { "\\time 3/4" }^\markup { " " \musicglyph -#"timesig.neomensural34" } - s - s_\markup { "\\time 9/4" }^\markup { " " \musicglyph -#"timesig.neomensural94" } - s - s_\markup { "\\time 9/8" }^\markup { " " \musicglyph -#"timesig.neomensural98" } - \break - s_\markup { "\\time 4/8" }^\markup { " " \musicglyph -#"timesig.neomensural48" } - s - s_\markup { "\\time 2/4" }^\markup { " " \musicglyph -#"timesig.neomensural24" } -} -@end lilypond - -Use the @code{style} property of grob @rinternals{TimeSignature} -to select ancient time signatures. Supported styles are -@code{neomensural} and @code{mensural}. The above table uses the -@code{neomensural} style. The following examples show the -differences in style: - -@lilypond[ragged-right,fragment,relative=1,quote] -{ - \textLengthOn - - \time 2/2 - c1^\markup { \hspace #-2.0 \typewriter default } - - \override Staff.TimeSignature #'style = #'numbered - \time 2/2 - c1^\markup { \hspace #-2.0 \typewriter numbered } - - \override Staff.TimeSignature #'style = #'mensural - \time 2/2 - c1^\markup { \hspace #-2.0 \typewriter mensural } - - \override Staff.TimeSignature #'style = #'neomensural - \time 2/2 - c1^\markup { \hspace #-2.0 \typewriter neomensural } - \override Staff.TimeSignature #'style = #'single-digit - \time 2/2 - c1^\markup { \hspace #-2.0 \typewriter single-digit } -} -@end lilypond - - -@seealso -Notation Reference: @ref{Time signature}, gives a general introduction to -the use of time signatures. - - -@knownissues - -Ratios of note durations do not change with the time signature. For -example, the ratio of 1 breve = 3 semibreves (@emph{tempus perfectum}) must -be made by hand, by setting - -@example -breveTP = #(ly:make-duration -1 0 3 2) -@dots{} -@{ c\breveTP f1 @} -@end example - -@noindent -This sets @code{breveTP} to 3/2 times 2 = 3 times a whole note. - -The @code{mensural68alt} and @code{neomensural68alt} symbols -(alternate symbols for 6/8) are not addressable with @code{\time}. -Use @code{\markup @{\musicglyph #"timesig.mensural68alt" @}} instead. - - -@c {{{2Mensural note heads -@node Mensural note heads -@unnumberedsubsubsec Mensural note heads - -@cindex note heads, ancient - -For ancient notation, a note head style other than the @code{default} style -may be chosen. This is accomplished by setting the @code{style} property of -the @rinternals{NoteHead} object to @code{baroque}, @code{neomensural}, -@code{mensural} or @code{petrucci}. - -The @code{baroque} style differs from the @code{default} style by: - -@itemize -@item Providing a @code{maxima} notehead, and -@item Using a square shape for @code{\breve} note heads. -@end itemize - -The @code{neomensural}, @code{mensural}, and @code{petrucci} styles differ from -the @code{baroque} style by: - -@itemize -@item Using rhomboidal heads for semibreves and all smaller durations, and -@item Centering the stems on the note heads. -@end itemize - - -The following example demonstrates the @code{petrucci} style: - -@c Renaissance music doesn't use bar lines ... but they do help to -@c separate the notes for easier identification. - -@lilypond[quote,fragment,ragged-right,verbatim] -\set Score.skipBars = ##t -\autoBeamOff -\override NoteHead #'style = #'petrucci -a'\maxima a'\longa a'\breve a'1 a'2 a'4 a'8 a'16 a' - -@end lilypond - - -@seealso -@ref{Note head styles} gives an overview of all available note head styles. - - -@c {{{2Mensural flags -@node Mensural flags -@unnumberedsubsubsec Mensural flags - -@cindex flags - -Use the @code{flag-style} property of grob @rinternals{Stem} to -select ancient flags. Besides the @code{default} flag style, -only the @code{mensural} style is supported. - -@lilypond[quote,fragment,ragged-right,verbatim] -\override Stem #'flag-style = #'mensural -\override Stem #'thickness = #1.0 -\override NoteHead #'style = #'mensural -\autoBeamOff -c'8 d'8 e'8 f'8 c'16 d'16 e'16 f'16 c'32 d'32 e'32 f'32 s8 -c''8 d''8 e''8 f''8 c''16 d''16 e''16 f''16 c''32 d''32 e''32 f''32 -@end lilypond - -Note that the innermost flare of each mensural flag always is -vertically aligned with a staff line. - -There is no particular flag style for neo-mensural or Petrucci notation. -@c Hence, -@c when typesetting the incipit of a transcribed piece of mensural -@c music, the default flag style should be used. -There are no flags in Gregorian chant notation. - - -@seealso -TODO: nothing here yet ... - - -@knownissues - -The attachment of ancient flags to stems is slightly off. -@c due to a change in early 2.3.x. - -Vertically aligning each flag with a staff line assumes that stems -always end either exactly on or exactly in the middle between two -staff lines. This may not always be true when using advanced layout -features of classical notation (which however are typically out of -scope for mensural notation). - -@c {{{2Mensural rests -@node Mensural rests -@unnumberedsubsubsec Mensural rests - -@cindex rests, ancient - -Use the @code{style} property of grob @rinternals{Rest} to select -ancient rests. Supported styles are @code{classical}, -@code{neomensural}, and @code{mensural}. @code{classical} differs -from the @code{default} style only in that the quarter rest looks -like a horizontally mirrored 8th rest. The @code{mensural} and -the @code{neomensural} styles mimic the appearance of rests in -manuscripts and prints up to the 16th century. - -The following example demonstrates the @code{mensural} and -@code{neomensural} styles: - -@lilypond[quote,fragment,ragged-right,verbatim] -\set Score.skipBars = ##t -\override Rest #'style = #'classical -r\longa^"classical" r\breve r1 r2 r4 r8 r16 s \break -\override Rest #'style = #'mensural -r\longa^"mensural" r\breve r1 r2 r4 r8 r16 s \break -\override Rest #'style = #'neomensural -r\longa^"neomensural" r\breve r1 r2 r4 r8 r16 -@end lilypond - -There are no 32th and 64th rests specifically for the mensural or -neo-mensural style. Instead, the rests from the default style will be -taken. - -See @rlsr{Ancient notation} for a chart of all rests. - -@seealso -Notation Reference: @ref{Rests}, gives a general introduction into the use of -rests. - - -@c {{{2Mensural accidentals and key signatures -@node Mensural accidentals and key signatures -@unnumberedsubsubsec Mensural accidentals and key signatures - -@cindex accidentals -@cindex key signature - -The @code{mensural} style provides a sharp and a flat sign -different from the default style. If called for, the natural sign -will be taken from the @code{vaticana} style. - -@lilypond[quote,ragged-right,staffsize=26] -\score { -{ - \textLengthOn - s^\markup { - \column { - "mensural" - \line { " " \musicglyph #"accidentals.mensural-1" - " " \musicglyph #"accidentals.mensural1" } - } - } -} -\layout { - interscoreline = 1 - \context { \Score \remove "Bar_number_engraver" } - \context { \Staff - \remove "Clef_engraver" - \remove "Key_engraver" - \remove "Time_signature_engraver" - \remove "Staff_symbol_engraver" - \override VerticalAxisGroup #'minimum-Y-extent = ##f - } - } -} -@end lilypond - -The style for accidentals and key signatures is controlled by the -@code{glyph-name-alist} property of the grobs @rinternals{Accidental} and -@rinternals{KeySignature}, respectively; e.g.: - -@code{\override Staff.Accidental #'glyph-name-alist = -#alteration-mensural-glyph-name-alist} - - -@seealso -Notation Reference: @ref{Pitches}, @ref{Accidentals}, and -@ref{Automatic accidentals} give a general introduction of the use of -accidentals. @ref{Key signature} gives a general introduction of -the use of key signatures. - -Internals Reference: @rinternals{KeySignature}. - - -@c {{{2 Annotational accidentals (musica ficta) -@node Annotational accidentals (musica ficta) -@unnumberedsubsubsec Annotational accidentals (@emph{musica ficta}) - -In European music from before about 1600, singers were expected to -chromatically alter notes at their own initiative according to -certain rules. This is called @notation{musica ficta}. In modern -transcriptions, these accidentals are usually printed over the -note. - -@cindex Accidental, musica ficta -@cindex Musica ficta - -Support for such suggested accidentals is included, and can be -switched on by setting @code{suggestAccidentals} to true. - -@funindex suggestAccidentals - -@lilypond[verbatim,fragment,relative=1] -fis gis -\set suggestAccidentals = ##t -ais bis -@end lilypond - -This will treat @emph{every} subsequent accidental as @emph{musica -ficta} until it is unset with @code{\set suggestAccidentals = -##f}. A more practical way is to use @code{\once \set -suggestAccidentals = ##t}, which can even be defined as a -convenient shorthand: - -@lilypond[quote,verbatim] -ficta = { \once \set suggestAccidentals = ##t } -\score { \relative c'' - \new MensuralVoice { - \once \set suggestAccidentals = ##t - bes4 a2 g2 \ficta fis8 \ficta e! fis2 g1 - } -} -@end lilypond - - -@seealso -Internals Reference: @rinternals{Accidental_engraver} engraver and -the @rinternals{AccidentalSuggestion} object. - - -@c {{{2White mensural ligatures -@node White mensural ligatures -@unnumberedsubsubsec White mensural ligatures - -@cindex Mensural ligatures -@cindex White mensural ligatures - -There is limited support for white mensural ligatures. - -To engrave white mensural ligatures, in the layout block, replace -the @rinternals{Ligature_bracket_engraver} with the -@rinternals{Mensural_ligature_engraver} in the @rinternals{Voice} -context: - -@example -\layout @{ - \context @{ - \Voice - \remove Ligature_bracket_engraver - \consists Mensural_ligature_engraver - @} -@} -@end example - -There is no additional input language to describe the shape of a -white mensural ligature. The shape is rather determined solely from -the pitch and duration of the enclosed notes. While this approach may -take a new user a while to get accustomed to, it has the great advantage -that the full musical information of the ligature is known internally. -This is not only required for correct MIDI output, but also allows for -automatic transcription of the ligatures. - -For example, - -@c @example -@c \set Score.timing = ##f -@c \set Score.defaultBarType = "empty" -@c \override NoteHead #'style = #'neomensural -@c \override Staff.TimeSignature #'style = #'neomensural -@c \clef "petrucci-g" -@c \[ c'\maxima g \] -@c \[ d\longa c\breve f e d \] -@c \[ c'\maxima d'\longa \] -@c \[ e'1 a g\breve \] -@c @end example -@lilypond[quote,ragged-right,verbatim] -\score { - \transpose c c' { - \set Score.timing = ##f - \set Score.defaultBarType = "empty" - \override NoteHead #'style = #'neomensural - \override Staff.TimeSignature #'style = #'neomensural - \clef "petrucci-g" - \[ c'\maxima g \] - \[ d\longa c\breve f e d \] - \[ c'\maxima d'\longa \] - \[ e'1 a g\breve \] - } - \layout { - \context { - \Voice - \remove Ligature_bracket_engraver - \consists Mensural_ligature_engraver - } - } -} -@end lilypond - -Without replacing @rinternals{Ligature_bracket_engraver} with -@rinternals{Mensural_ligature_engraver}, the same music transcribes -to the following - -@lilypond[quote,ragged-right] -\transpose c c' { - \set Score.timing = ##f - \set Score.defaultBarType = "empty" - \override NoteHead #'style = #'neomensural - \override Staff.TimeSignature #'style = #'neomensural - \clef "petrucci-g" - \[ c'\maxima g \] - \[ d\longa c\breve f e d \] - \[ c'\maxima d'\longa \] - \[ e'1 a g\breve \] -} -@end lilypond - - -@seealso -TODO: nothing here yet ... - - -@knownissues - -Horizontal spacing of ligatures is poor. - - -@c {{{1 Typesetting Gregorian chant -@node Typesetting Gregorian chant -@subsection Typesetting Gregorian chant - -@menu -* Gregorian chant contexts:: -* Gregorian clefs:: -* Gregorian accidentals and key signatures:: -* Divisiones:: -* Gregorian articulation signs:: -* Augmentum dots (@emph{morae}):: -* Gregorian square neume ligatures:: -@end menu - -When typesetting a piece in Gregorian chant notation, the -@rinternals{Vaticana_ligature_engraver} automatically selects the -proper note heads, so there is no need to explicitly set the note -head style. Still, the note head style can be set, e.g., to -@code{vaticana_punctum} to produce punctum neumes. Similarly, the -@rinternals{Mensural_ligature_engraver} automatically assembles -mensural ligatures. See @ref{Ligatures}, for how ligature -engravers work. - - -@c {{{2Gregorian chant contexts -@node Gregorian chant contexts -@unnumberedsubsubsec Gregorian chant contexts - -@cindex VaticanaVoiceContext -@cindex VaticanaStaffContext - -The predefined @code{VaticanaVoiceContext} and -@code{VaticanaStaffContext} can be used to engrave a piece of -Gregorian chant in the style of the Editio Vaticana. These contexts -initialize all relevant context properties and grob properties to -proper values, so you can immediately go ahead entering the chant, as -the following excerpt demonstrates: - -@lilypond[quote,ragged-right,verbatim] -\include "gregorian.ly" -\score { - << - \new VaticanaVoice = "cantus" { - \[ c'\melisma c' \flexa a \] - \[ a \flexa \deminutum g\melismaEnd \] - f \divisioMinima - \[ f\melisma \pes a c' c' \pes d'\melismaEnd \] - c' \divisioMinima \break - \[ c'\melisma c' \flexa a \] - \[ a \flexa \deminutum g\melismaEnd \] f \divisioMinima - } - \new Lyrics \lyricsto "cantus" { - San- ctus, San- ctus, San- ctus - } - >> -} -@end lilypond - - -@seealso -TODO: nothing here yet ... - - -@c {{{2 Gregorian clefs -@node Gregorian clefs -@unnumberedsubsubsec Gregorian clefs - -@cindex clefs - -The following table shows all Gregorian clefs that are supported via -the @code{\clef} command. Some of the clefs use the same glyph, -but differ only with respect to the line they are printed on. In -such cases, a trailing number in the name is used to enumerate -these clefs, numbered from the lowest to the highest line. Still, -you can manually force a clef glyph to be typeset on an arbitrary -line, as described in @ref{Clef}. The note printed to the right -side of each clef in the example column denotes the @code{c'} with -respect to that clef. - -@multitable @columnfractions .4 .4 .2 -@item -@b{Description} -@tab -@b{Supported Clefs} -@tab -@b{Example} - -@item -Editio Vaticana style do clef -@tab -@code{vaticana-do1}, @code{vaticana-do2},@* -@code{vaticana-do3} -@tab -@lilypond[fragment,relative=1,notime] - \override Staff.StaffSymbol #'line-count = #4 - \override Staff.StaffSymbol #'color = #red - \override Staff.LedgerLineSpanner #'color = #red - \override Voice.Stem #'transparent = ##t - \override NoteHead #'style = #'vaticana.punctum - \clef "vaticana-do2" - c -@end lilypond - -@item -Editio Vaticana style fa clef -@tab -@code{vaticana-fa1}, @code{vaticana-fa2} -@tab -@lilypond[fragment,relative=1,notime] - \override Staff.StaffSymbol #'line-count = #4 - \override Staff.StaffSymbol #'color = #red - \override Staff.LedgerLineSpanner #'color = #red - \override Voice.Stem #'transparent = ##t - \override NoteHead #'style = #'vaticana.punctum - \clef "vaticana-fa2" - c -@end lilypond - -@item -Editio Medicaea style do clef -@tab -@code{medicaea-do1}, @code{medicaea-do2},@* -@code{medicaea-do3} -@tab -@lilypond[fragment,relative=1,notime] - \override Staff.StaffSymbol #'line-count = #4 - \override Staff.StaffSymbol #'color = #red - \override Staff.LedgerLineSpanner #'color = #red - \override Voice.Stem #'transparent = ##t - \override NoteHead #'style = #'medicaea.punctum - \clef "medicaea-do2" - c -@end lilypond - -@item -Editio Medicaea style fa clef -@tab -@code{medicaea-fa1}, @code{medicaea-fa2} -@tab -@lilypond[fragment,relative=1,notime] - \override Staff.StaffSymbol #'line-count = #4 - \override Staff.StaffSymbol #'color = #red - \override Staff.LedgerLineSpanner #'color = #red - \override Voice.Stem #'transparent = ##t - \override NoteHead #'style = #'medicaea.punctum - \clef "medicaea-fa2" - c -@end lilypond - -@item -hufnagel style do clef -@tab -@code{hufnagel-do1}, @code{hufnagel-do2},@* -@code{hufnagel-do3} -@tab -@lilypond[fragment,relative=1,notime] - \override Staff.StaffSymbol #'line-count = #4 - \override Staff.StaffSymbol #'color = #red - \override Staff.LedgerLineSpanner #'color = #red - \override Voice.Stem #'transparent = ##t - \override NoteHead #'style = #'hufnagel.punctum - \clef "hufnagel-do2" - c -@end lilypond - -@item -hufnagel style fa clef -@tab -@code{hufnagel-fa1}, @code{hufnagel-fa2} -@tab -@lilypond[fragment,relative=1,notime] - \override Staff.StaffSymbol #'line-count = #4 - \override Staff.StaffSymbol #'color = #red - \override Staff.LedgerLineSpanner #'color = #red - \override Voice.Stem #'transparent = ##t - \override NoteHead #'style = #'hufnagel.punctum - \clef "hufnagel-fa2" - c -@end lilypond - -@item -hufnagel style combined do/fa clef -@tab -@code{hufnagel-do-fa} -@tab -@lilypond[fragment,relative=1,notime] - \override Staff.StaffSymbol #'color = #red - \override Staff.LedgerLineSpanner #'color = #red - \override Voice.Stem #'transparent = ##t - \override NoteHead #'style = #'hufnagel.punctum - \clef "hufnagel-do-fa" - c -@end lilypond -@end multitable - - -@seealso -Notation Reference: see @ref{Clef}. - - -@c {{{2 Gregorian accidentals and key signatures -@node Gregorian accidentals and key signatures -@unnumberedsubsubsec Gregorian accidentals and key signatures - -@cindex accidentals -@cindex key signature - -Accidentals for the three different Gregorian styles are available: - -@lilypond[quote,ragged-right,staffsize=26] -\score { -{ - \textLengthOn - s^\markup { - \column { - "vaticana" - \line { " " \musicglyph #"accidentals.vaticana-1" - " " \musicglyph #"accidentals.vaticana0" } - } - \column { - "medicaea" - \line { " " \musicglyph #"accidentals.medicaea-1" } - } - \column { - "hufnagel" - \line { " " \musicglyph #"accidentals.hufnagel-1" } - } - } -} -\layout { - interscoreline = 1 - \context { \Score \remove "Bar_number_engraver" } - \context { \Staff - \remove "Clef_engraver" - \remove "Key_engraver" - \remove "Time_signature_engraver" - \remove "Staff_symbol_engraver" - \override VerticalAxisGroup #'minimum-Y-extent = ##f - } - } -} -@end lilypond - -As shown, not all accidentals are supported by each style. When -trying to access an unsupported accidental, LilyPond will switch to a -different style. - -@c @lilypondfile[verbatim,lilyquote,texidoc,doctitle] -@c {ancient-accidentals.ly} - -The style for accidentals and key signatures is controlled by the -@code{glyph-name-alist} property of the grobs @rinternals{Accidental} and -@rinternals{KeySignature}, respectively; e.g.: - -@code{\override Staff.Accidental #'glyph-name-alist = -#alteration-mensural-glyph-name-alist} - - -@seealso -Notation Reference: @ref{Pitches}, @ref{Accidentals}, and -@ref{Automatic accidentals} give a general introduction of the use of -accidentals. @ref{Key signature} gives a general introduction of -the use of key signatures. - -Internals Reference: @rinternals{KeySignature}. - - -@c {{{2Divisiones -@node Divisiones -@unnumberedsubsubsec Divisiones - -@cindex divisio -@cindex divisiones -@cindex finalis - -There are no rests in Gregorian chant notation; instead, it uses -@ref{Divisiones}. - -A @emph{divisio} (plural: @emph{divisiones}; Latin word for -@q{division}) is a staff context symbol that is used to indicate -the phrase and section structure of Gregorian music. The musical meaning of -@emph{divisio minima}, @emph{divisio maior}, and @emph{divisio maxima} -can be characterized as short, medium, and long pause, somewhat like -the breathmarks from @ref{Breath marks}. The @emph{finalis} sign not -only marks the end of a chant, but is also frequently used within a -single antiphonal/responsorial chant to mark the end of each section. - -To use divisiones, include the file @file{gregorian@/.ly}. It -contains definitions that you can apply by just inserting -@code{\divisioMinima}, @code{\divisioMaior}, @code{\divisioMaxima}, -and @code{\finalis} at proper places in the input. Some editions use -@emph{virgula} or @emph{caesura} instead of divisio minima. -Therefore, @file{gregorian@/.ly} also defines @code{\virgula} and -@code{\caesura} - -@lilypondfile[quote,ragged-right]{divisiones.ly} - - -@predefined -@funindex \virgula -@code{\virgula}, -@funindex \caesura -@code{\caesura}, -@funindex \divisioMinima -@code{\divisioMinima}, -@funindex \divisioMaior -@code{\divisioMaior}, -@funindex \divisioMaxima -@code{\divisioMaxima}, -@funindex \finalis -@code{\finalis}. -@endpredefined - - -@c {{{2Gregorian articulations -@node Gregorian articulation signs -@unnumberedsubsubsec Gregorian articulation signs - -@cindex articulations - -In addition to the standard articulation signs described in -section @ref{Articulations and ornamentations}, articulation signs -specifically designed for use with notation in @emph{Editio -Vaticana} style are provided. - -@lilypond[quote,ragged-right,verbatim] -\include "gregorian.ly" -\score { - \new VaticanaVoice { - \override TextScript #'font-family = #'typewriter - \override TextScript #'font-shape = #'upright - \override Script #'padding = #-0.1 - a\ictus_"ictus " \break - a\circulus_"circulus " \break - a\semicirculus_"semicirculus " \break - a\accentus_"accentus " \break - \[ a_"episema" \episemInitium \pes b \flexa a b \episemFinis \flexa a \] - } -} -@end lilypond - - -@seealso -TODO: nothing here yet ... - - -@knownissues - -Some articulations are vertically placed too closely to the -corresponding note heads. - -The episema line is not displayed in many cases. If it is displayed, -the right end of the episema line is often too far to the right. - - -@c {{{2Augmentum dots (@emph{morae}) -@node Augmentum dots (@emph{morae}) -@unnumberedsubsubsec Augmentum dots (@emph{morae}) - -Augmentum dots, also called @emph{morae}, are added with the music -function @code{\augmentum}. Note that @code{\augmentum} is -implemented as a unary music function rather than as head prefix. It -applies to the immediately following music expression only. That is, -@code{\augmentum \virga c} will have no visible effect. Instead, say -@code{\virga \augmentum c} or @code{\augmentum @{\virga c@}}. Also -note that you can say @code{\augmentum @{a g@}} as a shortcut for -@code{\augmentum a \augmentum g}. - -@lilypond[quote,ragged-right,verbatim] -\include "gregorian.ly" -\score { - \new VaticanaVoice { - \[ \augmentum a \flexa \augmentum g \] - \augmentum g - } -} -@end lilypond - - -@seealso -Notation Reference: @ref{Breath marks}. - -Internals Reference: @rinternals{BreathingSign}. - -Examples: @rlsr{Ancient notation}. - - -@c {{{2Gregorian square neumes ligatures -@node Gregorian square neume ligatures -@unnumberedsubsubsec Gregorian square neume ligatures - -@cindex Square neumes ligatures -@cindex Gregorian square neumes ligatures - -There is limited support for Gregorian square neumes notation -(following the style of the Editio Vaticana). Core ligatures can -already be typeset, but essential issues for serious typesetting are -still lacking, such as (among others) horizontal alignment of multiple -ligatures, lyrics alignment, and proper handling of accidentals. - -The support for Gregorian neumes is enabled by @code{\include}ing -"gregorian.ly" at the beginning of the file. This makes available -a number of extra commands to produce the neume symbols used in -plainchant notation. - - - -Note heads can be @emph{modified} and/or @emph{joined}. - -@itemize -@item The shape of -the note head can be modified by @emph{prefixing} the note name -with any of the following commands: -@funindex \virga -@code{\virga}, -@funindex \stropha -@code{\stropha}, -@funindex \inclinatum -@code{\inclinatum}, -@funindex \auctum -@code{\auctum}, -@funindex \descendens -@code{\descendens}, -@funindex \ascendens -@code{\ascendens}, -@funindex \oriscus -@code{\oriscus}, -@funindex \quilisma -@code{\quilisma}, -@funindex \deminutum -@code{\deminutum}, -@funindex \cavum -@code{\cavum}, -@funindex \linea -@code{\linea}. - -@item Ligatures, properly speaking (i.e. notes joined together), are -produced by placing one of the joining commands @code{\pes} or -@code{\flexa}, for upwards and downwards movement, respectively, -@emph{between} the notes to be joined. -@end itemize - -A note name without any qualifiers will produce a @emph{punctum}. -All other neumes, including the single-note neumes with a -different shape such as the @emph{virga}, are in principle -considered as ligatures and should therefore be placed -between @code{\[...\]}. -@c Regarding the @emph{punctum}, @code{b} and @code{\[ b \]} are -@c equivalent. - -@noindent -Single-note neumes: - -@itemize -@item The @emph{punctum} is the basic note shape (in the -@emph{Vaticana} style: a square with some curvation for -typographical finesse). In addition to the regular -@emph{punctum}, there is also the oblique @emph{punctum -inclinatum}, produced with the prefix @code{\inclinatum}. The -regular @emph{punctum} can be modified with @code{\cavum}, which -produces a hollow note, and @code{\linea}, which draws vertical -lines on either side of the note. - -@item The @emph{virga} has a descending stem on the right side. It is -produced by the modifier @code{\virga}. -@end itemize - -@noindent -Ligatures - -Unlike most other neumes notation systems, the typographical -appearance of ligatures is not directly dictated by the input -commands, but follows certain conventions dependent on musical -meaning. For example, a three-note ligature with the musical shape -low-high-low, such as @code{\[ a \pes b \flexa g \]}, produces a -Torculus consisting of three Punctum heads, while the shape -high-low-high, such as @code{\[ a \flexa g \pes b \]}, produces a -Porrectus with a curved flexa shape and only a single Punctum -head. There is no command to explicitly typeset the curved flexa -shape; the decision of when to typeset a curved flexa shape is -based on the musical input. The idea of this approach is to -separate the musical aspects of the input from the notation style -of the output. This way, the same input can be reused to typeset -the same music in a different style of Gregorian chant notation. - -@noindent -Liquescent neumes - -Another main category of notes in Gregorian chant is the so-called -liquescent neumes. They are used under certain circumstances at -the end of a syllable which ends in a @q{liquescent} letter, i.e. -the sounding consonants that can hold a tone (the nasals, l, r, v, -j, and their diphtong equivalents). Thus, the liquescent neumes -are never used alone (although some of them can be produced), and -they always fall at the end of a ligature. - -Liquescent neumes are represented graphically in two different, -more or less interchangeable ways: with a smaller note or by -@q{twisting} the main note upwards or downwards. The first is -produced by making a regular @code{pes} or @code{flexa} and -modifying the shape of the second note: @code{\[ a \pes \deminutum -b \] }, the second by modifying the shape of a single-note neume -with @code{\auctum} and one of the direction markers -@code{\descendens} or @code{\ascendens}, e.g. @code{ \[ \auctum -\descendens a \] }. - -@noindent -Special signs - -A third category of signs is made up of a small number of signs -with a special meaning (which, incidentally, in most cases is only -vaguely known): the @emph{quilisma}, the @emph{oriscus}, and the -@emph{strophicus}. These are all produced by prefixing a note name -with the corresponding modifier, @code{\quilisma}, -@code{\oriscus}, or @code{\stropha}. - -Virtually, within the ligature delimiters @code{\[} and @code{\]}, -any number of heads may be accumulated to form a single ligature, -and head prefixes like @code{\pes}, @code{\flexa}, @code{\virga}, -@code{\inclinatum}, etc. may be mixed in as desired. The use of -the set of rules that underlies the construction of the ligatures -in the above table is accordingly extrapolated. This way, -infinitely many different ligatures can be created. - -Note that the use of these signs in the music itself follows -certain rules, which are not checked by LilyPond. E.g., the -@emph{quilisma} is always the middle note of an ascending -ligature, and usually falls on a half-tone step, but it is -perfectly possible, although incorrect, to make a single-note -quilisma. - -In addition to the note signs, gregorian.ly also defines the -commands @code{\versus}, @code{\responsum}, @code{\ij}, -@code{\iij}, @code{\IJ}, and @code{\IIJ}, that will produce the -corresponding characters, e.g. for use in lyrics, as section -markers, etc. These commands use special unicode characters and -will only work if a font is used which supports them. - - -@c neume table - -The following table shows a limited, but still representative pool -of Gregorian ligatures, together with the code fragments that -produce the ligatures. The table is based on the extended neumes -table of the 2nd volume of the Antiphonale Romanum (@emph{Liber -Hymnarius}), published 1983 by the monks of Solesmes. The first -column gives the name of the ligature, with the main form in -boldface and the liquescent forms in italics. The third column -shows the code fragment that produces this ligature, using -@code{g}, @code{a}, and @code{b} as example pitches. - - -@b{Single-note neums} - -@multitable @columnfractions .4 .2 .4 - -@item -@b{Basic} and @emph{Liquescent} forms -@tab -@b{Output} -@tab -@b{LilyPond@* -code} - -@c TODO: \layout block is identical in all of the below examples. -@c Therefore, it should somehow be included rather than duplicated all -@c the time. --jr - -@c why not make variables in ly/engraver-init.ly? --hwn - -@c Because it's just used to typeset plain notes without -@c a staff for demonstration purposes rather than something -@c special of Gregorian chant notation. --jr - - -@item -@b{Punctum} -@tab -@lilypond[staffsize=26,line-width=1.5\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Punctum - \[ b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ b \]} - -@item -@tab -@lilypond[staffsize=26,line-width=1.5\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Punctum - \[ \cavum b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \cavum b \]} - -@item -@tab -@lilypond[staffsize=26,line-width=1.5\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Punctum - \[ \linea b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \linea b \]} - -@item -@emph{Punctum Auctum Ascendens} -@tab -@lilypond[staffsize=26,line-width=2.5\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Punctum Auctum Ascendens - \[ \auctum \ascendens b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \auctum \ascendens b \]} - -@item -@emph{Punctum Auctum Descendens} -@tab -@lilypond[staffsize=26,line-width=2.5\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Punctum Auctum Descendens - \[ \auctum \descendens b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \auctum \descendens b \]} - -@item -@b{Punctum inclinatum} -@tab -@lilypond[staffsize=26,line-width=1.5\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Punctum Inclinatum - \[ \inclinatum b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \inclinatum b \]} - -@item -@emph{Punctum Inclinatum Auctum} -@tab -@lilypond[staffsize=26,line-width=2.5\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Punctum Inclinatum Auctum - \[ \inclinatum \auctum b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \inclinatum \auctum b \]} - -@item -@emph{Punctum Inclinatum Parvum} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Punctum Inclinatum Parvum - \[ \inclinatum \deminutum b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \inclinatum \deminutum b \]} - -@item -@b{Virga} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Virga - \[ \virga b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab - -@end multitable - -@noindent -@b{Two-note ligatures} - -@multitable @columnfractions .4 .2 .4 - -@item -@b{Clivis vel Flexa} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Clivis vel Flexa - \[ b \flexa g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ b \flexa g \]} - - -@item -@emph{Clivis Aucta Descendens} -@tab -@lilypond[staffsize=26,line-width=2.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Clivis Aucta Descendens - \[ b \flexa \auctum \descendens g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ b \flexa \auctum \descendens g \]} - -@item -@emph{Clivis Aucta Ascendens} -@tab -@lilypond[staffsize=26,line-width=2.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Clivis Aucta Ascendens - \[ b \flexa \auctum \ascendens g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ b \flexa \auctum \ascendens g \]} - -@item -@emph{Cephalicus} -@tab -@lilypond[staffsize=26,line-width=2.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Cephalicus - \[ b \flexa \deminutum g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ b \flexa \deminutum g \]} - -@item -@b{Podatus/Pes} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Podatus vel Pes - \[ g \pes b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ g \pes b \]} - -@item -@emph{Pes Auctus Descendens} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Pes Auctus Descendens - \[ g \pes \auctum \descendens b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ g \pes \auctum \descendens b \]} - -@item -@emph{Pes Auctus Ascendens} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Pes Auctus Ascendens - \[ g \pes \auctum \ascendens b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ g \pes \auctum \ascendens b \]} - -@item -@emph{Epiphonus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Epiphonus - \[ g \pes \deminutum b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ g \pes \deminutum b \]} - -@item -@emph{Pes Initio Debilis} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Pes Initio Debilis - \[ \deminutum g \pes b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \deminutum g \pes b \]} - -@item -@emph{Pes Auctus Descendens Initio Debilis} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Pes Auctus Descendens Initio Debilis - \[ \deminutum g \pes \auctum \descendens b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \deminutum g \pes \auctum \descendens b \]} - -@end multitable - -@noindent -@b{Multi-note ligatures} - -@multitable @columnfractions .4 .2 .4 - -@item -@b{Torculus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Torculus - \[ a \pes b \flexa g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ a \pes b \flexa g \]} - -@item -@emph{Torculus Auctus Descendens} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Torculus Auctus Descendens - \[ a \pes b \flexa \auctum \descendens g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ a \pes b \flexa \auctum \descendens g \]} - -@item -@emph{Torculus Deminutus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Torculus Deminutus - \[ a \pes b \flexa \deminutum g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ a \pes b \flexa \deminutum g \]} - -@item -@emph{Torculus Initio Debilis} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Torculus Initio Debilis - \[ \deminutum a \pes b \flexa g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \deminutum a \pes b \flexa g \]} - -@item -@emph{Torculus Auctus Descendens Initio Debilis} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Torculus Auctus Descendens Initio Debilis - \[ \deminutum a \pes b \flexa \auctum \descendens g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \deminutum a \pes b \flexa \auctum \descendens g \]} - -@item -@emph{Torculus Deminutus Initio Debilis} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Torculus Deminutus Initio Debilis - \[ \deminutum a \pes b \flexa \deminutum g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \deminutum a \pes b \flexa \deminutum g \]} - -@item -@b{Porrectus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Porrectus - \[ a \flexa g \pes b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ a \flexa g \pes b \]} - -@item -@emph{Porrectus Auctus Descendens} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Porrectus Auctus Descendens - \[ a \flexa g \pes \auctum \descendens b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ a \flexa g \pes \auctum \descendens b \]} - -@item -@emph{Porrectus Deminutus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Porrectus Deminutus - \[ a \flexa g \pes \deminutum b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ a \flexa g \pes \deminutum b \]} - -@item -@b{Climacus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Climacus - \[ \virga b \inclinatum a \inclinatum g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \virga b \inclinatum a \inclinatum g \]} - -@item -@emph{Climacus Auctus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Climacus Auctus - \[ \virga b \inclinatum a \inclinatum \auctum g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \virga b \inclinatum a \inclinatum \auctum g \]} - -@item -@emph{Climacus Deminutus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Climacus Deminutus - \[ \virga b \inclinatum a \inclinatum \deminutum g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \virga b \inclinatum a \inclinatum \deminutum g \]} - -@item -@b{Scandicus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Scandicus - \[ g \pes a \virga b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ g \pes a \virga b \]} - -@item -@emph{Scandicus Auctus Descendens} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Scandicus Auctus Descendens - \[ g \pes a \pes \auctum \descendens b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ g \pes a \pes \auctum \descendens b \]} - -@item -@emph{Scandicus Deminutus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Scandicus Deminutus - \[ g \pes a \pes \deminutum b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ g \pes a \pes \deminutum b \]} - -@end multitable - -@noindent -@b{Special Signs} - -@multitable @columnfractions .4 .2 .4 - -@item -@b{Quilisma} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Quilisma - \[ g \pes \quilisma a \pes b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ g \pes \quilisma a \pes b \]} - -@item -@emph{Quilisma Pes Auctus Descendens} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Quilisma Pes Auctus Descendens - \[ g \quilisma a \pes \auctum \descendens b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \quilisma g \pes \auctum \descendens b \]} - -@item -@b{Oriscus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Oriscus - \[ \oriscus b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \oriscus b \]} - -@item -@emph{Pes Quassus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Pes Quassus - \[ \oriscus g \pes \virga b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \oriscus g \pes \virga b \]} - -@item -@emph{Pes Quassus Auctus Descendens} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Pes Quassus Auctus Descendens - \[ \oriscus g \pes \auctum \descendens b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \oriscus g \pes \auctum \descendens b \]} - -@item -@b{Salicus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Salicus - \[ g \oriscus a \pes \virga b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ g \oriscus a \pes \virga b \]} - -@item -@emph{Salicus Auctus Descendens} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Salicus Auctus Descendens - \[ g \oriscus a \pes \auctum \descendens b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ g \oriscus a \pes \auctum \descendens b \]} - -@item -@b{(Apo)stropha} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Stropha - \[ \stropha b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \stropha b \]} - -@item -@emph{Stropha Aucta} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Stropha Aucta - \[ \stropha \auctum b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \stropha \auctum b \]} - -@item -@b{Bistropha} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Bistropha - \[ \stropha b \stropha b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \stropha b \stropha b \]} - -@item -@b{Tristropha} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Tristropha - \[ \stropha b \stropha b \stropha b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \stropha b \stropha b \stropha b \]} - -@item -@emph{Trigonus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Trigonus - \[ \stropha b \stropha b \stropha a \] - } - \layout { \neumeDemoLayout } -} -@end lilypond -@tab -@code{\[ \stropha b \stropha b \stropha a \]} - -@end multitable - - -@predefined -The following head prefixes are supported: -@funindex \virga -@code{\virga}, -@funindex \stropha -@code{\stropha}, -@funindex \inclinatum -@code{\inclinatum}, -@funindex \auctum -@code{\auctum}, -@funindex \descendens -@code{\descendens}, -@funindex \ascendens -@code{\ascendens}, -@funindex \oriscus -@code{\oriscus}, -@funindex \quilisma -@code{\quilisma}, -@funindex \deminutum -@code{\deminutum}, -@funindex \cavum -@code{\cavum}, -@funindex \linea -@code{\linea}. -@endpredefined - -Head prefixes can be accumulated, though restrictions apply. For -example, either @code{\descendens} or @code{\ascendens} can be applied -to a head, but not both to the same head. - -@funindex \pes -@funindex \flexa -Two adjacent heads can be tied together with the @code{\pes} and -@code{\flexa} infix commands for a rising and falling line of melody, -respectively. - -@funindex \augmentum -Use the unary music function @code{\augmentum} to add augmentum dots. - - -@seealso -TODO: nothing here yet ... - - -@knownissues - -When an @code{\augmentum} dot appears at the end of the last staff -within a ligature, it is sometimes vertically placed wrong. As a -workaround, add an additional skip note (e.g. @code{s8}) as last note -of the staff. - -@code{\augmentum} should be implemented as a head prefix rather than a -unary music function, such that @code{\augmentum} can be intermixed -with head prefixes in arbitrary order. - - - -@c Working with ancient music: scenarios and solutions:: {{{1 -@node Working with ancient music---scenarios and solutions -@subsection Working with ancient music---scenarios and solutions - -@menu -* Incipits:: -* Mensurstriche layout:: -* Transcribing Gregorian chant:: -* Ancient and modern from one source:: -* Editorial markings:: -@end menu - -Working with ancient music frequently involves particular tasks -which differ considerably from the modern notation for which -LilyPond is designed. In the rest of this section, a number of -typical scenarios are outlined, with suggestions of solutions. -These involve: - -@itemize -@item how to make incipits (i.e. prefatory material to indicate -what the original has looked like) to modern transcriptions of -mensural music; -@item how to achieve the @emph{Mensurstriche} layout frequently -used for modern transcriptions of polyphonic music; -@item how to transcribe Gregorian chant in modern notation; -@item how to generate both ancient and modern notation from the -same source. -@end itemize - -@c {{{2Incipits -@node Incipits -@unnumberedsubsubsec Incipits - -@c TODO Add text -@c clefs, mensuration signs etc from lsr and -user -@c use snippet Transcription-of-ancient-music-with-incipit -TBC - - -@seealso -@c ... and reference to other sections ... - - -@c {{{2Mensurstriche layout -@node Mensurstriche layout -@unnumberedsubsubsec Mensurstriche layout - -@emph{Mensurstriche} (@q{mensuration lines}) is the accepted term -for bar lines that are drawn between the staves of a system but -not through the staves themselves. It is a common way to preserve -the rhythmic appearance of the original, i.e. not having to break -syncopated notes at bar lines, while still providing the -orientation aids that bar lines give. - - -@lilypondfile[verbatim,lilyquote,texidoc] -{mensurstriche-layout-bar-lines-between-the-staves.ly} - -@c This simple setup will take care of the -@c TODO Add text about lyrics to the lowest line, to be placed -@c outside the StaffGroup. -@c from lsr and -user -@c TBC - - -@seealso -@c ... and reference to other sections ... - - -@c {{{2Transcribing Gregorian chant -@node Transcribing Gregorian chant -@unnumberedsubsubsec Transcribing Gregorian chant - -Gregorian chant can be transcribed into modern notation with a -number of simple tweaks. - -@b{Stems}. Stems can be left out altogether by @code{\remove}-ing -the @code{Stem_engraver} from the Voice context: - -@example -\layout @{ - ... - \context @{ - \Voice - \remove "Stem_engraver" - @} -@} -@end example - -However, in some transcription styles, stems are used -occasionally, for example to indicate the transition from a -single-tone recitative to a fixed melodic gesture. In these cases, -one can use either @code{\override Stem #'transparent = ##t} or -@code{\override Stem #'length = #0} instead, and restore the stem -when needed with the corresponding @code{\once \override Stem -#'transparent = ##f} (see example below). - -@b{Timing.} For unmetered chant, there are several alternatives. - -The Time_signature_engraver can be removed from the Staff context -without any negative side effects. The alternative, to make it -transparent, will leave an empty space in the score, since the -invisible signature will still take up space. - -In many cases, @code{\set Score.timing = ##f} will give good -results. Another alternative is to use \@code{\CadenzaOn} and -@code{\CadenzaOff}. - -To remove the barlines, the radical approach is to @code{\remove} -the Bar_engraver from the Staff context. Again, one may want to -use @code{\override BarLine #'transparent = ##t} instead, if an -occasional barline is wanted. - -A common type of transcription is recitativic chant where the -repeated notes are indicated with a single breve. The text to -the recitation tone can be dealt with in two different ways: -either set as a single, left-aligned syllable: - -@lilypond[verbatim,ragged-right] -\include "gregorian.ly" -chant = \relative c' { - \clef "G_8" - c\breve c4 b4 a c2 c4 \divisioMaior - c\breve c4 c f, f \finalis -} - -verba = \lyricmode { - \once \override LyricText #'self-alignment-X = #-1 - "Noctem quietam et" fi -- nem per -- fec -- tum - \once \override LyricText #'self-alignment-X = #-1 - "concedat nobis Dominus" om -- ni -- po -- tens. -} -\score { - \new Staff << - \new Voice = "melody" \chant - \new Lyrics = "one" \lyricsto melody \verba - >> - \layout { - \context { - \Staff - \remove "Time_signature_engraver" - \remove "Bar_engraver" - \override Stem #'transparent = ##t - } - } -} -@end lilypond - -This works fine, as long as the text doesn't span a line break. If -that is the case, an alternative is to add hidden notes to the -score, here in combination with changing stem visibility: - - -@lilypond[verbatim,ragged-right] -\include "gregorian.ly" -chant = \relative c' { - \clef "G_8" - \set Score.timing = ##f - c\breve \override NoteHead #'transparent = ##t c c c c c - \revert NoteHead #'transparent - \override Stem #'transparent = ##f \stemUp c4 b4 a - \override Stem #'transparent = ##t c2 c4 \divisioMaior - c\breve \override NoteHead #'transparent = ##t c c c c c c c - \revert NoteHead #'transparent c4 c f, f \finalis -} - -verba = \lyricmode { - No -- ctem qui -- e -- tam et fi -- nem per -- fec -- tum - con -- ce -- dat no -- bis Do -- mi -- nus om -- ni -- po -- tens. -} - -\score { - \new Staff << - \new Voice = "melody" \chant - \new Lyrics \lyricsto "melody" \verba - >> - \layout { - \context { - \Staff - \remove "Time_signature_engraver" - \override BarLine #'transparent = ##t - \override Stem #'transparent = ##t - } - } -} -@end lilypond - -Another common situation is transcription of neumatic or -melismatic chants, i.e. chants with a varying number of notes -to each syllable. In this case, one would want to set the -syllable groups clearly apart, usually also the subdivisions of a -longer melisma. One way to achieve this is to use a fixed -@code{\time}, e.g. 1/4, and let each syllable or note group fill -one of these measures, with the help of tuplets or shorter -durations. If the barlines and all other rhythmical indications -are made transparent, and the space around the barlines is -increased, this will give a fairly good representation in modern -notation of the original. - -To avoid that syllables of different width (such as @qq{-ri} and -@qq{-rum}) spread the syllable note groups unevenly apart, the -@code{#'X-extent} property of the @code{LyricText} object may be -set to a fixed value. Another, more cumbersome way would be to -add the syllables as @code{\markup} elements. If further -adjustments are necessary, this can be easily done with -@code{s} @q{notes}. - -@lilypond[verbatim,quote] -spiritus = \relative c' { - \time 1/4 - \override Lyrics.LyricText #'X-extent = #'(0 . 3) - d4 \times 2/3 { f8 a g } g a a4 g f8 e - d4 f8 g g8 d f g a g f4 g8 a a4 s - \times 2/3 { g8 f d } e f g a g4 -} - -spirLyr = \lyricmode { - Spi -- ri -- _ _ tus _ Do -- mi -- ni _ re -- ple -- _ vit _ - or -- _ bem _ ter -- ra -- _ rum, al -- _ _ le -- _ lu - -- _ ia. -} -\score { - \new Staff << - \new Voice = "chant" \spiritus - \new Lyrics = "one" \lyricsto "chant" \spirLyr - >> - \layout { - \context { - \Staff - \remove "Time_signature_engraver" - \override BarLine #'X-extent = #'(-1 . 1) - \override Stem #'transparent = ##t - \override Beam #'transparent = ##t - \override BarLine #'transparent = ##t - \override TupletNumber #'transparent = ##t - } - } -} -@end lilypond - -@c extract from 1.6.1.1 - -@seealso -@c ... and reference to other sections ... - -@c {{{2Ancient and modern from one source -@node Ancient and modern from one source -@unnumberedsubsubsec Ancient and modern from one source - -@c TODO Add text -@c Here among others the snippets about reducing note length -TBC - -@seealso -@c ... and reference to other sections ... - -@c {{{2Editorial markings -@node Editorial markings -@unnumberedsubsubsec Editorial markings - -@c {{{2Baroque rhythmic notation -@c @node Baroque rhythmic notation -@c @unnumberedsubsubsec Baroque rhythmic notation - -@c TODO Add text -@c try Till Rettig -@c Add example of white noteheads: -@c In the french baroque some composers used white noteheads in slow pieces, -@c mainly in 3/2-time. A quarter looks there like a eighth with a white -@c notehead. (Franz-Rudolf Kuhnen) - -@c TODO Add example of this: -@c I was referring to e.g. notated a8. a16, which should, if I -@c remember correctly, be interpreted more like a8.. a32 (in the french -@c style). The editor might want to show that rythmic figure above the -@c staff as an hint to performers. (Karl Hammer) - - -TBC - - -@seealso -@c ... and reference to other sections ... - diff --git a/Documentation/user/baer-flat-bw.png b/Documentation/user/baer-flat-bw.png deleted file mode 100644 index bb25bd1903..0000000000 Binary files a/Documentation/user/baer-flat-bw.png and /dev/null differ diff --git a/Documentation/user/baer-flat-gray.png b/Documentation/user/baer-flat-gray.png deleted file mode 100644 index 08cd338380..0000000000 Binary files a/Documentation/user/baer-flat-gray.png and /dev/null differ diff --git a/Documentation/user/changing-defaults.itely b/Documentation/user/changing-defaults.itely deleted file mode 100644 index 708930637a..0000000000 --- a/Documentation/user/changing-defaults.itely +++ /dev/null @@ -1,3333 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Changing defaults -@chapter Changing defaults - -The purpose of LilyPond's design is to provide the finest quality -output by default. Nevertheless, it may happen that you need to -change this default layout. The layout is controlled through a large -number of @q{knobs and switches} collectively called @q{properties}. -A tutorial introduction to accessing and modifying these properties -can be found in the Learning Manual, see @rlearning{Tweaking output}. -This should be read first. This chapter covers similar ground, but -in a style more appropriate to a reference manual. - -@cindex Internals Reference - -The definitive description of the controls available for tuning can -be found in a separate document: @rinternalsnamed{Top,the Internals -Reference}. That manual lists all the variables, functions and -options available in LilyPond. It is written as a HTML document, -which is available -@c leave the @uref as one long line. -@uref{http://@/lilypond@/.org/@/doc/@/stable/@/Documentation/@/user/@/lilypond@/-internals/,on@/-line}, -and is also included with the LilyPond documentation package. - -Internally, LilyPond uses Scheme (a LISP dialect) to provide -infrastructure. Overriding layout decisions in effect accesses the -program internals, which requires Scheme input. Scheme elements are -introduced in a @code{.ly} file with the hash mark -@code{#}.@footnote{@rlearning{Scheme tutorial}, contains a short tutorial -on entering numbers, lists, strings, and symbols in Scheme.} - - -@menu -* Interpretation contexts:: -* Explaining the Internals Reference:: -* Modifying properties:: -* Useful concepts and properties:: -* Advanced tweaks:: -@end menu - - -@node Interpretation contexts -@section Interpretation contexts - -This section describes what contexts are, and how to modify them. - -@menu -* Contexts explained:: -* Creating contexts:: -* Keeping contexts alive:: -* Modifying context plug-ins:: -* Changing context default settings:: -* Defining new contexts:: -* Aligning contexts:: -@end menu - - -@seealso -Learning Manual: -@rlearning{Contexts and engravers}. - -Installed files: -@file{ly/@/engraver@/-init@/.ly}, -@file{ly/@/performer@/-init@/.ly}. - -Snippets: -@rlsr{Contexts and engravers}. - -Internals Reference: -@rinternals{Contexts}, -@rinternals{Engravers and Performers}. - - -@node Contexts explained -@subsection Contexts explained - -@ignore -@c TODO Rethink and rewrite - ->> > > - list of contexts: my *danger unmaintainable* ->> > > alarm just went off. I'm - -I knew it would... And leaving out some of them is perfectly fine -with me. -I do think that a list like this, with the main contexts and a -brief -description of what they do (perhaps also with a note about what -default -behavior is associated with each of them, but this may be -unmanageable), -should be there, and then we could simply list the remaining ones -without -further explanation and with links to the IR. -@end ignore - -@c TODO Improve layout, order and consistency of wording -td - -@c TODO Add introduction which explains contexts in generality -td - -@c TODO Describe propagation of property values -td - -Contexts are arranged hierarchically: - -@menu -* Score - the master of all contexts:: -* Top-level contexts - staff containers:: -* Intermediate-level contexts - staves:: -* Bottom-level contexts - voices:: -@end menu - -@node Score - the master of all contexts -@unnumberedsubsubsec Score - the master of all contexts - -This is the top level notation context. No other context can -contain a Score context. By default the Score context handles -the administration of time signatures and makes sure that items -such as clefs, time signatures, and key-signatures are aligned -across staves. - -A Score context is instantiated implicitly when a -@code{\score @{@dots{}@}} or @code{\layout @{@dots{}@}} block is -processed, or explicitly when a @code{\new Score} command is -executed. - -@node Top-level contexts - staff containers -@unnumberedsubsubsec Top-level contexts - staff containers - -@strong{@emph{StaffGroup}} - -Groups staves while adding a bracket on the left side, grouping -the staves together. The bar lines of the contained staves are -connected vertically. @code{StaffGroup} only consists of a collection -of staves, with a bracket in front and spanning bar lines. - -@strong{@emph{ChoirStaff}} - -Identical to @code{StaffGroup} except that the bar lines of the -contained staves are not connected vertically. - -@strong{@emph{GrandStaff}} - -A group of staves, with a brace on the left side, grouping the -staves together. The bar lines of the contained staves are -connected vertically. - -@strong{@emph{PianoStaff}} - -Just like @code{GrandStaff}, but with support for instrument names -to the left of each system. - -@node Intermediate-level contexts - staves -@unnumberedsubsubsec Intermediate-level contexts - staves - -@strong{@emph{Staff}} - -Handles clefs, bar lines, keys, accidentals. It can contain -@code{Voice} contexts. - -@strong{@emph{RhythmicStaff}} - -Like @code{Staff} but for printing rhythms. Pitches are ignored; -the notes are printed on one line. - -@strong{@emph{TabStaff}} - -Context for generating tablature. By default lays the music -expression out as a guitar tablature, printed on six lines. - -@strong{@emph{DrumStaff}} - -Handles typesetting for percussion. Can contain @code{DrumVoice} - -@strong{@emph{VaticanaStaff}} - -Same as @code{Staff}, except that it is designed for typesetting -a piece in gregorian style. - -@strong{@emph{MensuralStaff}} - -Same as @code{Staff}, except that it is designed for typesetting -a piece in mensural style. - -@node Bottom-level contexts - voices -@unnumberedsubsubsec Bottom-level contexts - voices - -Voice-level contexts initialise certain properties and start -appropriate engravers. Being bottom-level contexts, they cannot -contain other contexts. - -@strong{@emph{Voice}} - -Corresponds to a voice on a staff. This context handles the -conversion of dynamic signs, stems, beams, super- and sub-scripts, -slurs, ties, and rests. You have to instantiate this explicitly -if you require multiple voices on the same staff. - -@strong{@emph{VaticanaVoice}} - -Same as @code{Voice}, except that it is designed for typesetting -a piece in gregorian style. - -@strong{@emph{MensuralVoice}} - -Same as @code{Voice}, with modifications for typesetting a piece in -mensural style. - -@strong{@emph{Lyrics}} - -Corresponds to a voice with lyrics. Handles the printing of a -single line of lyrics. - -@strong{@emph{DrumVoice}} - -The voice context used in a percussion staff. - -@strong{@emph{FiguredBass}} - -The context in which @code{BassFigure} objects are created from -input entered in @code{\figuremode} mode. - -@strong{@emph{TabVoice}} - -The voice context used within a @code{TabStaff} context. Usually -left to be created implicitly. - -@strong{@emph{ChordNames}} - -Typesets chord names. - -@ignore -TODO - -Then the following, which I don't know what to do with: - - * GregorianTranscriptionVoice - * GregorianTranscriptionStaff - - * FretBoards - Engraves fretboards from chords. Not easy... Not -documented. - There is now some documentation on FretBoards in the NR, under - instrument-specific notation -- cds. - - * NoteNames - - * CueVoice Not documented - * Global - Hard coded entry point for LilyPond. Cannot be tuned. - * Devnull - Silently discards all musical information given to this -context. - -@end ignore - -@node Creating contexts -@subsection Creating contexts - -@c TODO \new Score and \score -@c TODO more complete descriptions rather than learning style - -For scores with only one voice and one staff, contexts are -created automatically. For more complex scores, it is necessary to -create them by hand. There are three commands that do this. - -@itemize - -@item -The easiest command is @code{\new}, and it also the quickest to type. -It is prepended to a music expression, for example - -@funindex \new -@cindex new contexts -@cindex Context, creating - -@example -\new @var{type} @var{music expression} -@end example - -@noindent -where @var{type} is a context name (like @code{Staff} or -@code{Voice}). This command creates a new context, and starts -interpreting the @var{music expression} with that. - -A practical application of @code{\new} is a score with many -staves. Each part that should be on its own staff, is preceded with -@code{\new Staff}. - -@lilypond[quote,verbatim,relative=2,ragged-right,fragment] -<< - \new Staff { c4 c } - \new Staff { d4 d } ->> -@end lilypond - -The @code{\new} command may also give a name to the context, - -@example -\new @var{type} = @var{id} @var{music} -@end example -However, this user specified name is only used if there is no other -context already earlier with the same name. - - -@funindex \context - -@item -Like @code{\new}, the @code{\context} command also directs a music -expression to a context object, but gives the context an explicit name. The -syntax is - -@example -\context @var{type} = @var{id} @var{music} -@end example - -This form will search for an existing context of type @var{type} -called @var{id}. If that context does not exist yet, a new -context with the specified name is created. This is useful if -the context is referred to later on. For example, when -setting lyrics the melody is in a named context - -@example -\context Voice = "@b{tenor}" @var{music} -@end example - -@noindent -so the texts can be properly aligned to its notes, - -@example -\new Lyrics \lyricsto "@b{tenor}" @var{lyrics} -@end example - -@noindent - -Another possible use of named contexts is funneling two different -music expressions into one context. In the following example, -articulations and notes are entered separately, - -@example -music = @{ c4 c4 @} -arts = @{ s4-. s4-> @} -@end example - -They are combined by sending both to the same @code{Voice} context, - -@example -<< - \new Staff \context Voice = "A" \music - \context Voice = "A" \arts ->> -@end example -@lilypond[quote,ragged-right] -music = { c4 c4 } -arts = { s4-. s4-> } -\relative c'' << - \new Staff \context Voice = "A" \music - \context Voice = "A" \arts ->> -@end lilypond - -With this mechanism, it is possible to define an Urtext (original -edition), with the option to put several distinct articulations on the -same notes. - -@cindex creating contexts - -@item -The third command for creating contexts is -@example -\context @var{type} @var{music} -@end example - - -@noindent -This is similar to @code{\context} with @code{= @var{id}}, but matches -any context of type @var{type}, regardless of its given name. - -This variant is used with music expressions that can be interpreted at -several levels. For example, the @code{\applyOutput} command (see -@ref{Running a function on all layout objects}). Without an explicit -@code{\context}, it is usually applied to @code{Voice} - -@example -\applyOutput #'@var{context} #@var{function} % apply to Voice -@end example - -To have it interpreted at the @code{Score} or @code{Staff} level use -these forms - -@example -\applyOutput #'Score #@var{function} -\applyOutput #'Staff #@var{function} -@end example - -@end itemize - -@node Keeping contexts alive -@subsection Keeping contexts alive - -@cindex contexts, keeping alive -@cindex contexts, lifetime - -Contexts are usually terminated at the first musical moment in -which they have nothing to do. So @code{Voice} contexts die as -soon as they contain no events; @code{Staff} contexts die as soon -as all the @code{Voice} contexts within them contain no events; etc. -This can cause difficulties if earlier contexts which have died -have to be referenced, for example, when changing staves with -@code{\change} commands, associating lyrics with a voice with -@code{\lyricsto} commands, or when adding further musical events to -an earlier context. - -There is an exception to this general rule: just one of the -@code{Voice} contexts in a @code{Staff} context or in a -@code{<<...>>} construct will always persist to the end of the -enclosing @code{Staff} context or @code{<<...>>} construct, even -though there may be periods when it has nothing to do. The context -to persist in this way will be the first one encountered in the -first enclosed @code{@{...@}} construct, ignoring any in enclosed -@code{<<...>>} constructs. - -Any context can be kept alive by ensuring it has something to do at -every musical moment. @code{Staff} contexts are kept alive by -ensuring one of their voices is kept alive. One way of doing this -is to add spacer rests to a voice in parallel with the real music. -These need to be added to every @code{Voice} context which needs to -be kept alive. If several voices are to be used sporadically it is -safest to keep them all alive rather than attempting to rely on the -exceptions mentioned above. - -In the following example, both voice A and voice B are kept alive -in this way for the duration of the piece: - -@lilypond[quote,verbatim] -musicA = \relative c'' { d4 d d d } -musicB = \relative c'' { g4 g g g } -keepVoicesAlive = { - << - \new Voice = "A" { s1*5 } % Keep Voice "A" alive for 5 bars - \new Voice = "B" { s1*5 } % Keep Voice "B" alive for 5 bars - >> -} - -music = { - \context Voice = "A" { - \voiceOneStyle - \musicA - } - \context Voice = "B" { - \voiceTwoStyle - \musicB - } - \context Voice = "A" { \musicA } - \context Voice = "B" { \musicB } - \context Voice = "A" { \musicA } -} - -\score { - \new Staff << - \keepVoicesAlive - \music - >> -} -@end lilypond - -@cindex lyrics, aligning with sporadic melody - -The following example shows how a sporadic melody line with lyrics -might be written using this approach. In a real situation the -melody and accompaniment would consist of several different -sections, of course. - -@lilypond[quote,verbatim] -melody = \relative c'' { a4 a a a } -accompaniment = \relative c' { d4 d d d } -words = \lyricmode { These words fol -- low the mel -- o -- dy } -\score { - << - \new Staff = "music" { - << - \new Voice = "melody" { - \voiceOne - s1*4 % Keep Voice "melody" alive for 4 bars - } - { - \new Voice = "accompaniment" { - \voiceTwo - \accompaniment - } - << - \context Voice = "melody" { \melody } - \context Voice = "accompaniment" { \accompaniment } - >> - \context Voice = "accompaniment" { \accompaniment } - << - \context Voice = "melody" { \melody } - \context Voice = "accompaniment" { \accompaniment } - >> - } - >> - } - \new Lyrics \with { alignAboveContext = #"music" } - \lyricsto "melody" { \words } - >> -} -@end lilypond - -An alternative way, which may be better in many circumstances, is -to keep the melody line alive by simply including spacer notes to -line it up correctly with the accompaniment: - -@lilypond[quote,verbatim] -melody = \relative c'' { - s1 % skip a bar - a4 a a a - s1 % skip a bar - a4 a a a -} -accompaniment = \relative c' { - d4 d d d - d4 d d d - d4 d d d - d4 d d d -} -words = \lyricmode { These words fol -- low the mel -- o -- dy } - -\score { - << - \new Staff = "music" { - << - \new Voice = "melody" { - \voiceOne - \melody - } - \new Voice = "accompaniment" { - \voiceTwo - \accompaniment - } - >> - } - \new Lyrics \with { alignAboveContext = #"music" } - \lyricsto "melody" { \words } - >> -} -@end lilypond - - -@node Modifying context plug-ins -@subsection Modifying context plug-ins - -@c TODO Should this be Modifying engravers or Modifying contexts? - -Notation contexts (like @code{Score} and @code{Staff}) not only -store properties, -they also contain plug-ins called @q{engravers} that create notation -elements. For example, the @code{Voice} context contains a -@code{Note_head_engraver} and the @code{Staff} context contains a -@code{Key_signature_engraver}. - -For a full a description of each plug-in, see -@ifhtml -@rinternals{Engravers and Performers}. -@end ifhtml -@ifnothtml -Internals Reference @expansion{} Translation @expansion{} Engravers. -@end ifnothtml -Every context described in -@ifhtml -@rinternals{Contexts} -@end ifhtml -@ifnothtml -Internals Reference @expansion{} Translation @expansion{} Context. -@end ifnothtml -lists the engravers used for that context. - - -It can be useful to shuffle around these plug-ins. This is done by -starting a new context with @code{\new} or @code{\context}, and -modifying it, - -@funindex \with - -@example -\new @var{context} \with @{ - \consists @dots{} - \consists @dots{} - \remove @dots{} - \remove @dots{} - @emph{etc.} -@} -@{ - @emph{..music..} -@} -@end example - -@noindent -where the @dots{} should be the name of an engraver. Here is a simple -example which removes @code{Time_signature_engraver} and -@code{Clef_engraver} from a @code{Staff} context, - -@lilypond[quote,relative=1,verbatim,fragment] -<< - \new Staff { - f2 g - } - \new Staff \with { - \remove "Time_signature_engraver" - \remove "Clef_engraver" - } { - f2 g2 - } ->> -@end lilypond - -In the second staff there are no time signature or clef symbols. This -is a rather crude method of making objects disappear since it will affect -the entire staff. This method also influences the spacing, which may or -may not be desirable. More sophisticated methods of blanking objects -are shown in @rlearning{Visibility and color of objects}. - -The next example shows a practical application. Bar lines and time -signatures are normally synchronized across the score. This is done -by the @code{Timing_translator} and @code{Default_bar_line_engraver}. -This plug-in keeps an administration of time signature, location -within the measure, etc. By moving these engraver from @code{Score} to -@code{Staff} context, we can have a score where each staff has its own -time signature. - -@cindex polymetric scores -@cindex Time signatures, multiple - -@lilypond[quote,relative=1,ragged-right,verbatim,fragment] -\new Score \with { - \remove "Timing_translator" - \remove "Default_bar_line_engraver" -} << - \new Staff \with { - \consists "Timing_translator" - \consists "Default_bar_line_engraver" - } { - \time 3/4 - c4 c c c c c - } - \new Staff \with { - \consists "Timing_translator" - \consists "Default_bar_line_engraver" - } { - \time 2/4 - c4 c c c c c - } ->> -@end lilypond - -@knownissues - -Usually the order in which the engravers are specified -does not matter, but in a few special cases the order -is important, for example where one engraver writes -a property and another reads it, or where one engraver -creates a grob and another must process it. The order in -which the engravers are specified is the order in which -they are called to carry out their processing. - -The following orderings are important: the -@code{Bar_engraver} must normally be first, and -the @code{New_fingering_engraver} must come before -the @code{Script_column_engraver}. There may be others -with ordering dependencies. - -@node Changing context default settings -@subsection Changing context default settings - -The context settings which are to be used by default in -@code{Score}, @code{Staff} and @code{Voice} contexts may be specified -in a @code{\layout} block, as illustrated in the following example. -The @code{\layout} block should be placed within the @code{\score} -block to which it is to apply, but outside any music. - -Note that the @code{\set} command itself and the context must be -omitted when the context default values are specified in this way: - -@lilypond[quote,verbatim] -\score { - \relative c'' { - a4^"Really small, thicker stems, no time signature" a a a - a a a a - } - \layout { - \context { - \Staff - fontSize = #-4 - \override Stem #'thickness = #4.0 - \remove "Time_signature_engraver" - } - } -} -@end lilypond - -In this example, the @code{\Staff} command specifies that the -subsequent specifications are to be applied to all staves within -this score block. - -Modifications can be made to the @code{Score} context or all -@code{Voice} contexts in a similar way. - -@knownissues - -It is not possible to collect context changes in a variable and apply -them to a @code{\context} definition by referring to that variable. - -The @code{\RemoveEmptyStaffContext} will overwrite your current -@code{\Staff} settings. If you wish to change the defaults for a -staff which uses @code{\RemoveEmptyStaffContext}, you must do so -after calling @code{\RemoveEmptyStaffContext}, ie - -@example -\layout @{ - \context @{ - \RemoveEmptyStaffContext - - \override Stem #'thickness = #4.0 - @} -@} -@end example - -@c TODO: add \with in here. - - - -@node Defining new contexts -@subsection Defining new contexts - -Specific contexts, like @code{Staff} and @code{Voice}, are made of -simple building blocks. It is possible to create new types of -contexts with different combinations of engraver plug-ins. - -The next example shows how to build a different type of -@code{Voice} context from scratch. It will be similar to -@code{Voice}, but only prints centered slash note heads. It can be used -to indicate improvisation in jazz pieces, - -@lilypond[quote,ragged-right] -\layout { \context { - \name ImproVoice - \type "Engraver_group" - \consists "Note_heads_engraver" - \consists "Rhythmic_column_engraver" - \consists "Text_engraver" - \consists Pitch_squash_engraver - squashedPosition = #0 - \override NoteHead #'style = #'slash - \override Stem #'transparent = ##t - \alias Voice -} -\context { \Staff - \accepts "ImproVoice" -}} - -\relative c'' { - a4 d8 bes8 \new ImproVoice { c4^"ad lib" c - c4 c^"undress" c_"while playing :)" c } - a1 -} -@end lilypond - - -These settings are defined within a @code{\context} block inside a -@code{\layout} block, - -@example -\layout @{ - \context @{ - @dots{} - @} -@} -@end example - -In the following discussion, the example input shown should go in place -of the @dots{} in the previous fragment. - -First it is necessary to define a name for the new context: - -@example -\name ImproVoice -@end example - -Since it is similar to the @code{Voice}, we want commands that work -on (existing) @code{Voice}s to remain working. This is achieved by -giving the new context an alias @code{Voice}, - -@example -\alias Voice -@end example - -The context will print notes and instructive texts, so we need to add -the engravers which provide this functionality, - -@example -\consists Note_heads_engraver -\consists Text_engraver -@end example - -but we only need this on the center line, - -@example -\consists Pitch_squash_engraver -squashedPosition = #0 -@end example - -The @rinternals{Pitch_squash_engraver} modifies note heads (created -by @rinternals{Note_heads_engraver}) and sets their vertical -position to the value of @code{squashedPosition}, in this case@tie{}@code{0}, -the center line. - -The notes look like a slash, and have no stem, - -@example -\override NoteHead #'style = #'slash -\override Stem #'transparent = ##t -@end example - -All these plug-ins have to cooperate, and this is achieved with a -special plug-in, which must be marked with the keyword @code{\type}. -This should always be @code{Engraver_group}. - -@example -\type "Engraver_group" -@end example - -Put together, we get - -@example -\context @{ - \name ImproVoice - \type "Engraver_group" - \consists "Note_heads_engraver" - \consists "Text_engraver" - \consists Pitch_squash_engraver - squashedPosition = #0 - \override NoteHead #'style = #'slash - \override Stem #'transparent = ##t - \alias Voice -@} -@end example - -@funindex \accepts -Contexts form hierarchies. We want to hang the @code{ImproVoice} -under @code{Staff}, just like normal @code{Voice}s. Therefore, we -modify the @code{Staff} definition with the @code{\accepts} -command, - -@example -\context @{ - \Staff - \accepts ImproVoice -@} -@end example - -@funindex \denies -The opposite of @code{\accepts} is @code{\denies}, -which is sometimes needed when reusing existing context definitions. - -Putting both into a @code{\layout} block, like - -@example -\layout @{ - \context @{ - \name ImproVoice - @dots{} - @} - \context @{ - \Staff - \accepts "ImproVoice" - @} -@} -@end example - -Then the output at the start of this subsection can be entered as - -@example -\relative c'' @{ - a4 d8 bes8 - \new ImproVoice @{ - c4^"ad lib" c - c4 c^"undress" - c c_"while playing :)" - @} - a1 -@} -@end example - - -@node Aligning contexts -@subsection Aligning contexts - -New contexts may be aligned above or below existing contexts. This -could be useful in setting up a vocal staff (@rlearning{Vocal ensembles}) and -in ossia, - -@c TODO Better example needed. Ref LM, and expand on it. - -@cindex ossia -@funindex alignAboveContext -@funindex alignBelowContext - -@lilypond[quote,ragged-right] -ossia = { f4 f f f } -\score{ - \relative c' \new Staff = "main" { - c4 c c c - << - \new Staff \with { alignAboveContext = #"main" } \ossia - { d8 f d f d f d f } - >> - } -} -@end lilypond - -@cindex nested contexts -@cindex contexts, nested - -@funindex \accepts -@funindex \denies - -Contexts like @code{PianoStaff} can contain other contexts -nested within them. Contexts which are acceptable for nesting -are defined by the @qq{accepts} list of a context. Contexts -which are not in this list are placed below the outer context -in the printed score. -For example, the @code{PianoStaff} context is defined by default -to accept @code{Staff} and @code{FiguredBass} contexts within -it, but not (for example) a @code{Lyrics} context. So in the -following structure the lyrics are placed below the piano staff -rather than between the two staves: - -@lilypond[verbatim,quote,relative=1] -\new PianoStaff -<< - \new Staff { e4 d c2 } - \addlyrics { Three blind mice } - \new Staff { - \clef "bass" - { c,1 } - } ->> -@end lilypond - -The @qq{accepts} list of a context can be modified to include -additional nested contexts, so if we wanted the lyrics to appear -between the two staves we could use: - -@lilypond[verbatim,quote,relative=1] -\new PianoStaff \with { \accepts Lyrics } -<< - \new Staff { e4 d c2 } - \addlyrics { Three blind mice } - \new Staff { - \clef "bass" - { c,1 } - } ->> -@end lilypond - -The opposite of @code{\accepts} is @code{\denies}; this removes a -context from the @qq{accepts} list. - -@node Explaining the Internals Reference -@section Explaining the Internals Reference - - -@menu -* Navigating the program reference:: -* Layout interfaces:: -* Determining the grob property:: -* Naming conventions:: -@end menu - -@node Navigating the program reference -@subsection Navigating the program reference - -@c TODO remove this (it's in the LM) -@c Replace with more factual directions - -Suppose we want to move the fingering indication in the fragment -below: - -@lilypond[quote,fragment,relative=2,verbatim] -c-2 -\stemUp -f -@end lilypond - -If you visit the documentation on fingering instructions (in -@ref{Fingering instructions}), you will notice: - -@quotation -@strong{See also} - -Internals Reference: @rinternals{Fingering}. - -@end quotation - - -@c outdated info; probably will delete. -@ignore -This fragment points to two parts of the program reference: a page -on @code{FingeringEvent} and one on @code{Fingering}. - -The page on @code{FingeringEvent} describes the properties of the music -expression for the input @code{-2}. The page contains many links -forward. For example, it says - -@quotation -Accepted by: @rinternals{Fingering_engraver}, -@end quotation - -@noindent -That link brings us to the documentation for the Engraver, the -plug-in, which says - -@quotation -This engraver creates the following layout objects: @rinternals{Fingering}. -@end quotation - -In other words, once the @code{FingeringEvent}s are interpreted, the -@code{Fingering_engraver} plug-in will process them. -@end ignore - -@ignore -@c I can't figure out what this is supposed to mean. -gp - -The @code{Fingering_engraver} is also listed to create -@rinternals{Fingering} objects, - -@c old info? it doesn't make any sense to me with our current docs. -This is also the -second bit of information listed under @b{See also} in the Notation -manual. -@end ignore - -@ifnothtml -The programmer's reference is available as an HTML document. It is -highly recommended that you read it in HTML form, either online or -by downloading the HTML documentation. This section will be much more -difficult to understand if you are using the -PDF manual. -@end ifnothtml - -Follow the link to @rinternals{Fingering}. At the top of the -page, you will see - -@quotation -Fingering objects are created by: @rinternals{Fingering_engraver} and -@rinternals{New_fingering_engraver}. -@end quotation - -By following related links inside the program reference, we can follow the -flow of information within the program: - -@itemize - -@item @rinternals{Fingering}: -@rinternals{Fingering} objects are created by: -@rinternals{Fingering_engraver} - -@item @rinternals{Fingering_engraver}: -Music types accepted: @rinternals{fingering-event} - -@item @rinternals{fingering-event}: -Music event type @code{fingering-event} is in Music expressions named -@rinternals{FingeringEvent} -@end itemize - -This path goes against the flow of information in the program: it -starts from the output, and ends at the input event. You could -also start at an input event, and read with the flow of -information, eventually ending up at the output object(s). - -The program reference can also be browsed like a normal document. It -contains chapters on -@ifhtml -@rinternals{Music definitions}, -@end ifhtml -@ifnothtml -@code{Music definitions} -@end ifnothtml -on @rinternals{Translation}, and the @rinternals{Backend}. Every -chapter lists all the definitions used and all properties that may be -tuned. - - -@node Layout interfaces -@subsection Layout interfaces - -@cindex interface, layout -@cindex layout interface -@cindex grob - -The HTML page that we found in the previous section describes the -layout object called @rinternals{Fingering}. Such an object is a -symbol within the score. It has properties that store numbers (like -thicknesses and directions), but also pointers to related objects. A -layout object is also called a @emph{Grob}, which is short for Graphical -Object. For more details about Grobs, see @rinternals{grob-interface}. - -The page for @code{Fingering} lists the definitions for the -@code{Fingering} object. For example, the page says - -@quotation -@code{padding} (dimension, in staff space): - -@code{0.5} -@end quotation - -@noindent -which means that the number will be kept at a distance of at least 0.5 -of the note head. - - -Each layout object may have several functions as a notational or -typographical element. For example, the Fingering object -has the following aspects - -@itemize -@item -Its size is independent of the horizontal spacing, unlike slurs or beams. - -@item -It is a piece of text. Granted, it is usually a very short text. - -@item -That piece of text is typeset with a font, unlike slurs or beams. - -@item -Horizontally, the center of the symbol should be aligned to the -center of the note head. - -@item -Vertically, the symbol is placed next to the note and the staff. - -@item -The vertical position is also coordinated with other superscript -and subscript symbols. -@end itemize - -Each of these aspects is captured in so-called @emph{interface}s, -which are listed on the @rinternals{Fingering} page at the bottom - -@quotation -This object supports the following interfaces: -@rinternals{item-interface}, -@rinternals{self-alignment-interface}, -@rinternals{side-position-interface}, @rinternals{text-interface}, -@rinternals{text-script-interface}, @rinternals{font-interface}, -@rinternals{finger-interface}, and @rinternals{grob-interface}. -@end quotation - -Clicking any of the links will take you to the page of the respective -object interface. Each interface has a number of properties. Some of -them are not user-serviceable (@q{Internal properties}), but others -can be modified. - -We have been talking of @emph{the} @code{Fingering} object, but actually it -does not amount to much. The initialization file (see -@rlearning{Other sources of information}) -@file{scm/@/define@/-grobs@/.scm} shows the soul of the @q{object}, - -@example -(Fingering - . ((padding . 0.5) - (avoid-slur . around) - (slur-padding . 0.2) - (staff-padding . 0.5) - (self-alignment-X . 0) - (self-alignment-Y . 0) - (script-priority . 100) - (stencil . ,ly:text-interface::print) - (direction . ,ly:script-interface::calc-direction) - (font-encoding . fetaNumber) - (font-size . -5) ; don't overlap when next to heads. - (meta . ((class . Item) - (interfaces . (finger-interface - font-interface - text-script-interface - text-interface - side-position-interface - self-alignment-interface - item-interface)))))) -@end example - -@noindent -As you can see, the @code{Fingering} object is nothing more than a -bunch of variable settings, and the webpage in the Internals Reference -is directly generated from this definition. - - -@node Determining the grob property -@subsection Determining the grob property - -@c TODO remove this (it's in the LM) -@c Replace with more factual directions - -Recall that we wanted to change the position of the @b{2} in - -@lilypond[quote,fragment,relative=2,verbatim] -c-2 -\stemUp -f -@end lilypond - -Since the @b{2} is vertically positioned next to its note, we have to -meddle with the interface associated with this positioning. This is -done using @code{side-position-interface}. The page for this interface -says - -@quotation -@code{side-position-interface} - -Position a victim object (this one) next to other objects (the -support). The property @code{direction} signifies where to put the -victim object relative to the support (left or right, up or down?) -@end quotation - -@cindex padding -@noindent -Below this description, the variable @code{padding} is described as - -@quotation -@table @code -@item padding -(dimension, in staff space) - -Add this much extra space between objects that are next to each other. -@end table -@end quotation - -By increasing the value of @code{padding}, we can move the -fingering away from the note head. The following command inserts -3 staff spaces of white -between the note and the fingering: -@example -\once \override Voice.Fingering #'padding = #3 -@end example - -Inserting this command before the Fingering object is created, -i.e., before @code{c2}, yields the following result: - -@lilypond[quote,relative=2,fragment,verbatim] -\once \override Voice.Fingering #'padding = #3 -c-2 -\stemUp -f -@end lilypond - - -In this case, the context for this tweak is @code{Voice}. This -fact can also be deduced from the program reference, for the page for -the @rinternals{Fingering_engraver} plug-in says - -@quotation -Fingering_engraver is part of contexts: @dots{} @rinternals{Voice} -@end quotation - - -@node Naming conventions -@subsection Naming conventions - -Another thing that is needed, is an overview of the various naming -conventions: - - scheme functions: lowercase-with-hyphens (incl. one-word -names) - scheme functions: ly:plus-scheme-style - music events, music classes and music properties: -as-scheme-functions - Grob interfaces: scheme-style - backend properties: scheme-style (but X and Y!) - contexts (and MusicExpressions and grobs): Capitalized or -CamelCase - context properties: lowercaseFollowedByCamelCase - engravers: -Capitalized_followed_by_lowercase_and_with_underscores - -Which of these are conventions and which are rules? -Which are rules of the underlying language, and which are -LP-specific? - - -@node Modifying properties -@section Modifying properties - -@c TODO change the menu and subsection node names to use -@c backslash once the new macro to handle the refs -@c is available. Need to find and change all refs at -@c the same time. -td - -@menu -* Overview of modifying properties:: -* The set command:: -* The override command:: -* The tweak command:: -* set versus override:: -@end menu - - -@node Overview of modifying properties -@subsection Overview of modifying properties - -Each context is responsible for creating certain types of graphical -objects. The settings used for printing these objects are also stored by -context. By changing these settings, the appearance of objects can be -altered. - -The syntax for this is - -@example -\override @var{context}.@var{name} #'@var{property} = #@var{value} -@end example - -Here @var{name} is the name of a graphical object, like -@code{Stem} or @code{NoteHead}, and @var{property} is an internal -variable of the formatting system (@q{grob property} or @q{layout -property}). The latter is a symbol, so it must be quoted. The -subsection @ref{Modifying properties}, explains what to fill in -for @var{name}, @var{property}, and @var{value}. Here we only -discuss the functionality of this command. - -The command - -@verbatim -\override Staff.Stem #'thickness = #4.0 -@end verbatim - -@noindent -makes stems thicker (the default is 1.3, with staff line thickness as a -unit). Since the command specifies @code{Staff} as context, it only -applies to the current staff. Other staves will keep their normal -appearance. Here we see the command in action: - -@lilypond[quote,verbatim,relative=2,fragment] -c4 -\override Staff.Stem #'thickness = #4.0 -c4 -c4 -c4 -@end lilypond - -The @code{\override} command changes the definition of the @code{Stem} -within the current @code{Staff}. After the command is interpreted -all stems are thickened. - -Analogous to @code{\set}, the @var{context} argument may be left out, -causing the default context @code{Voice} to be used. Adding -@code{\once} applies the change during one timestep only. - -@lilypond[quote,fragment,verbatim,relative=2] -c4 -\once \override Stem #'thickness = #4.0 -c4 -c4 -@end lilypond - -The @code{\override} must be done before the object is -started. Therefore, when altering @emph{Spanner} objects such as slurs -or beams, the @code{\override} command must be executed at the moment -when the object is created. In this example, - -@lilypond[quote,fragment,verbatim,relative=2] -\override Slur #'thickness = #3.0 -c8[( c -\override Beam #'thickness = #0.6 -c8 c]) -@end lilypond - -@noindent -the slur is fatter but the beam is not. This is because the command for -@code{Beam} comes after the Beam is started, so it has no effect. - -Analogous to @code{\unset}, the @code{\revert} command for a context -undoes an @code{\override} command; like with @code{\unset}, it only -affects settings that were made in the same context. In other words, the -@code{\revert} in the next example does not do anything. - -@example -\override Voice.Stem #'thickness = #4.0 -\revert Staff.Stem #'thickness -@end example - -Some tweakable options are called @q{subproperties} and reside inside -properties. To tweak those, use commands of the form - -@c leave this as a long long -@example -\override @var{context}.@var{name} #'@var{property} #'@var{subproperty} = #@var{value} -@end example - -@noindent -such as - -@example -\override Stem #'(details beamed-lengths) = #'(4 4 3) -@end example - - -@seealso -Internals: @rinternals{OverrideProperty}, @rinternals{RevertProperty}, -@rinternals{PropertySet}, @rinternals{Backend}, and -@rinternals{All layout objects}. - - -@knownissues - -The back-end is not very strict in type-checking object properties. -Cyclic references in Scheme values for properties can cause hangs -or crashes, or both. - - - -@node The set command -@subsection The @code{\set} command - -@cindex properties -@funindex \set -@cindex changing properties - -Each context can have different @emph{properties}, variables contained -in that context. They can be changed during the interpretation step. -This is achieved by inserting the @code{\set} command in the music, - -@example -\set @var{context}.@var{prop} = #@var{value} -@end example - -For example, -@lilypond[quote,verbatim,relative=2,fragment] -R1*2 -\set Score.skipBars = ##t -R1*2 -@end lilypond - -This command skips measures that have no notes. The result is that -multi-rests are condensed. The value assigned is a Scheme object. In -this case, it is @code{#t}, the boolean True value. - -If the @var{context} argument is left out, then the current bottom-most -context (typically @code{ChordNames}, @code{Voice}, or -@code{Lyrics}) is used. In this example, - -@lilypond[quote,verbatim,relative=2,fragment] -c8 c c c -\set autoBeaming = ##f -c8 c c c -@end lilypond - -@noindent -the @var{context} argument to @code{\set} is left out, so automatic -beaming is switched off in the current @rinternals{Voice}. Note that -the bottom-most context does not always contain the property that you -wish to change -- for example, attempting to set the @code{skipBars} -property (of the bottom-most context, in this case @code{Voice}) will -have no effect. - -@lilypond[quote,verbatim,relative=2,fragment] -R1*2 -\set skipBars = ##t -R1*2 -@end lilypond - -Contexts are hierarchical, so if a bigger context was specified, for -example @code{Staff}, then the change would also apply to all -@code{Voice}s in the current stave. The change is applied -@q{on-the-fly}, during the music, so that the setting only affects the -second group of eighth notes. - -@funindex \unset - -There is also an @code{\unset} command, -@example -\unset @var{context}.@var{prop} -@end example - -@noindent -which removes the definition of @var{prop}. This command removes -the definition only if it is set in @var{context}, so - -@example -\set Staff.autoBeaming = ##f -@end example - -@noindent -introduces a property setting at @code{Staff} level. The setting also -applies to the current @code{Voice}. However, - -@example -\unset Voice.autoBeaming -@end example - -@noindent -does not have any effect. To cancel this setting, the @code{\unset} -must be specified on the same level as the original @code{\set}. In -other words, undoing the effect of @code{Staff.autoBeaming = ##f} -requires -@example -\unset Staff.autoBeaming -@end example - -Like @code{\set}, the @var{context} argument does not have to be -specified for a bottom context, so the two statements - -@example -\set Voice.autoBeaming = ##t -\set autoBeaming = ##t -@end example - -@noindent -are equivalent. - - -@cindex \once -Settings that should only apply to a single time-step can be entered -with @code{\once}, for example in - -@lilypond[quote,verbatim,relative=2,fragment] -c4 -\once \set fontSize = #4.7 -c4 -c4 -@end lilypond - -the property @code{fontSize} is unset automatically after the second -note. - -A full description of all available context properties is in the -program reference, see -@ifhtml -@rinternals{Tunable context properties}. -@end ifhtml -@ifnothtml -Translation @expansion{} Tunable context properties. -@end ifnothtml - - - -@node The override command -@subsection The @code{\override} command - -Commands which change output generally look like - -@example -\override Voice.Stem #'thickness = #3.0 -@end example - -@noindent -To construct this tweak we must determine these bits of information: - -@itemize -@item the context: here @code{Voice}. -@item the layout object: here @code{Stem}. -@item the layout property: here @code{thickness}. -@item a sensible value: here @code{3.0}. -@end itemize - -Some tweakable options are called @q{subproperties} and reside inside -properties. To tweak those, use commands in the form - -@example -\override Stem #'(details beamed-lengths) = #'(4 4 3) -@end example - -@cindex internal documentation -@cindex finding graphical objects -@cindex graphical object descriptions -@cindex tweaking -@funindex \override -@cindex internal documentation - -For many properties, regardless of the data type of the property, setting the -property to false ( @code{##f} ) will result in turning it off, causing -LilyPond to ignore that property entirely. This is particularly useful for -turning off grob properties which may otherwise be causing problems. - -We demonstrate how to glean this information from the notation manual -and the program reference. - - -@node The tweak command -@subsection The @code{\tweak} command - -@funindex \tweak -@cindex tweaking - -In some cases, it is possible to take a short-cut for tuning -graphical objects. For objects that are created directly from -an item in the input file, you can use the @code{\tweak} command. -For example: - -@lilypond[relative=2,verbatim] -< c - \tweak #'color #red - d - g - \tweak #'duration-log #1 - a -> 4 --\tweak #'padding #8 --^ -@end lilypond - -@cindex chord, modifying one note in - -But the main use of the @code{\tweak} command is to modify just -one of a number of notation elements which start at the same musical -moment, like the notes of a chord, or tuplet brackets which start -at the same time. - -For an introduction to the syntax and uses of the tweak command -see @rlearning{Tweaking methods}. - -The @code{\tweak} command sets a property in the following object -directly, without requiring the grob name or context to be -specified. For this to work, it is necessary for the @code{\tweak} -command to remain immediately adjacent to the object to which it is -to apply after the input file has been converted to a music stream. -This is often not the case, as many additional elements are inserted -into the music stream implicitly. For example, when a note which is -not part of a chord is processed, LilyPond implicitly inserts a -@code{ChordEvent} event before the note, so separating the tweak -from the note. However, if chord symbols are placed round the -tweak and the note, the @code{\tweak} command comes after the -@code{ChordEvent} in the music stream, so remaining adjacent to the -note, and able to modify it. - -So, this works: - -@lilypond[relative=2,verbatim,quote] -<\tweak #'color #red c>4 -@end lilypond - -@noindent -but this does not: - -@lilypond[relative=2,verbatim,quote] -\tweak #'color #red c4 -@end lilypond - -When several similar items are placed at the same musical moment, -the @code{\override} command cannot be used to modify just one of -them -- this is where the @code{\tweak} command must be used. -Items which may appear more than once at the same musical moment -include the following: - -@c TODO expand to include any further uses of \tweak -@itemize -@item note heads of notes inside a chord -@item articulation signs on a single note -@item ties between notes in a chord -@item tuplet brackets starting at the same time -@end itemize - -@c TODO add examples of these - -@noindent -and @code{\tweak} may be used to modify any single occurrence of -these items. - -Notably the @code{\tweak} command cannot be used to modify stems, -beams or accidentals, since these are generated later by note heads, -rather than by music elements in the input stream. Nor can a -@code{\tweak} command be used to modify clefs or time signatures, -since these become separated from any preceding @code{\tweak} -command in the input stream by the automatic insertion of extra -elements required to specify the context. - -But the @code{\tweak} command can be used as an alternative to -the @code{\override} command to modify those notational elements -that do not cause any additional implicit elements to be added -before them in the music stream. For example, slurs may be -modified in this way: - -@lilypond[verbatim,quote,relative=1] -c-\tweak #'thickness #5 ( d e f) -@end lilypond - -Also several @code{\tweak} commands may be placed before a -notational element -- all affect it: - -@lilypond[verbatim,quote,relative=1] -c --\tweak #'style #'dashed-line --\tweak #'dash-fraction #0.2 --\tweak #'thickness #3 --\tweak #'color #red - \glissando -f' -@end lilypond - -The music stream which is generated from a section of an input file, -including any automatically inserted elements, may be examined, -see @ref{Displaying music expressions}. This may be helpful in -determining what may be modified by a @code{\tweak} command. - - -@seealso -Learning Manual: -@rlearning{Tweaking methods}. - -Notation Reference: -@ref{Displaying music expressions}. - - -@knownissues - -@cindex tweaks in a variable -The @code{\tweak} command cannot be used inside a variable. - -@cindex tweaks in lyrics -The @code{\tweak} commands cannot be used in @code{\lyricmode}. - -@cindex tweaking control points -@cindex control points, tweaking - -The @code{\tweak} command cannot be used to modify the control -points of just one of several ties in a chord, other than the first -one encountered in the input file. - -@node set versus override -@subsection @code{\set} vs. @code{\override} - -We have seen two methods of changing properties: @code{\set} and -@code{\override}. There are actually two different kinds of -properties. - -Contexts can have properties, which are usually named in -@code{studlyCaps}. They mostly control the translation from -music to notation, eg. @code{localKeySignature} (for determining -whether to print accidentals), @code{measurePosition} (for -determining when to print a bar line). Context properties can -change value over time while interpreting a piece of music; -@code{measurePosition} is an obvious example of -this. Context properties are modified with @code{\set}. - -There is a special type of context property: the element -description. These properties are named in @code{StudlyCaps} -(starting with capital letters). They contain the -@q{default settings} for said graphical object as an -association list. See @file{scm/@/define@/-grobs@/.scm} -to see what kind of settings there are. Element descriptions -may be modified with @code{\override}. - -@code{\override} is actually a shorthand; - -@example -\override @var{context}.@var{name} #'@var{property} = #@var{value} -@end example - -@noindent -is more or less equivalent to - -@c leave this long line -gp -@example -\set @var{context}.@var{name} #'@var{property} = #(cons (cons '@var{property} @var{value}) }, @code{--} -@end itemize - -@strong{The direction property} - -The position or direction of many layout objects is controlled -by the @code{direction} property. - -The value of the @code{direction} property may be -set to @code{1}, meaning @qq{up} or @qq{above}, or to @code{-1}, -meaning @qq{down} or @qq{below}. The symbols @code{UP} and -@code{DOWN} may be used instead of @code{1} and @code{-1} -respectively. The default direction may be specified by setting -@code{direction} to @code{0} or @code{CENTER}. Alternatively, -in many cases predefined commands -exist to specify the direction. These are all of the form - -@noindent -@code{\xxxUp}, @code{xxxDown}, @code{xxxNeutral} - -@noindent -where @code{xxxNeutral} means @qq{use the default direction}. -See @rlearning{Within-staff objects}. - -In a few cases, arpeggio being the only common example, the value -of the @code{direction} property specifies whether the object -is to be placed to the right or left of the parent object. In -this case @code{-1} or @code{LEFT} means @qq{to the left} and -@code{1} or @code{RIGHT} means @qq{to the right}. @code{0} -or @code{CENTER} means @qq{use the default} direction, as before. - -@ignore -These all have side-axis set to #X -AmbitusAccidental - direction has no effect -Arpeggio - works -StanzaNumber - not tried -TrillPitchAccidental - not tried -TrillPitchGroup - not tried -@end ignore - - - -@node Distances and measurements -@subsection Distances and measurements - -@cindex distances, absolute -@cindex distances, scaled - -@funindex \mm -@funindex \cm -@funindex \in -@funindex \pt - -Distances in LilyPond are of two types: absolute and scaled. - -Absolute distances are used for specifying margins, indents, and -other page layout details, and are by default specified in -millimeters. Distances may be specified in other units by -following the quantity by @code{\mm}, @code{\cm}, -@code{\in}@tie{}(inches), or @code{\pt}@tie{}(points, 1/72.27 -of an inch). Page layout distances can also be specified in -scalable units (see the following paragraph) by appending -@code{\staff-space} to the quantity. -Page layout is described in detail in @ref{Page formatting}. - -Scaled distances are always specified in units of the staff-space -or, rarely, the half staff-space. The staff-space is the distance -between two adjacent staff lines. The default value can be changed -globally by setting the global staff size, or it can be overridden -locally by changing the @code{staff-space} property of -@code{StaffSymbol}. Scaled distances automatically scale with any -change to the either the global staff size or the -@code{staff-space} property of @code{StaffSymbol}, but fonts scale -automatically only with changes to the global staff size. -The global staff size thus enables the overall size of a rendered -score to be easily varied. For the methods of setting the global -staff size see @ref{Setting the staff size}. - -@funindex magstep - -If just a section of a score needs to be rendered to a different -scale, for example an ossia section or a footnote, the global staff -size cannot simply be changed as this would affect the entire score. -In such cases the change in size is made by overriding both the -@code{staff-space} property of @code{StaffSymbol} and the size of -the fonts. A Scheme function, @code{magstep}, is available to -convert from a font size change to the equivalent change in -@code{staff-space}. For an explanation and an example of its use, -see @rlearning{Length and thickness of objects}. - - -@seealso -Learning Manual: -@rlearning{Length and thickness of objects}. - -Notation Reference: -@ref{Page formatting}, -@ref{Setting the staff size}. - - -@node Staff symbol properties -@subsection Staff symbol properties - -@cindex adjusting staff symbol -@cindex drawing staff symbol -@cindex staff symbol, setting of - -@c TODO Extend or remove this section. See also NR 1.6.2 Staff symbol -@c Need to think of uses for these properties. Eg 'line-positions -@c is used in a snippet to thicken centre line. -@c If retained, add @ref to here in 1.6.2 -td - -The vertical position of staff lines and the number of staff lines -can be defined at the same time. As the following example shows, -note positions are not influenced by the staff line positions. - -@warning{The @code{'line-positions} property overrides the -@code{'line-count} property. The number of staff lines is -implicitly defined by the number of elements in the list of values -for @code{'line-positions}.} - -@lilypond[verbatim,quote,relative=1] -\new Staff \with { - \override StaffSymbol #'line-positions = #'(7 3 0 -4 -6 -7) -} -{ a4 e' f b | d1 } -@end lilypond - -The width of a staff can be modified. The units are staff -spaces. The spacing of objects inside the staff is not affected by -this setting. - -@lilypond[verbatim,quote,relative=1] -\new Staff \with { - \override StaffSymbol #'width = #23 -} -{ a4 e' f b | d1 } -@end lilypond - - -@node Spanners -@subsection Spanners - -Many objects of musical notation extend over several notes or even -several bars. Examples are slurs, beams, tuplet brackets, volta -repeat brackets, crescendi, trills, and glissandi. Such objects -are collectively called @qq{spanners}, and have special properties to control -their appearance and behaviour. Some of these properties are common -to all spanners; others are restricted to a sub-set of the spanners. - -All spanners support the @code{spanner-interface}. A few, esentially -those that draw a straight line between the two objects, support in -addition the @code{line-spanner-interface}. - -@unnumberedsubsubsec Using the @code{spanner-interface} - -This interface provides two properties that apply to several spanners. - -@strong{@i{The @code{minimum-length} property}} - -The minimum length of the spanner is specified by the -@code{minimum-length} property. Increasing this usually has the -necessary effect of increasing the spacing of the notes between the -two end points. However, this override has no effect on -many spanners, as their length is determined by other considerations. -A few examples where it is effective are shown below. - -@ignore -Works for: - Tie - MultiMeasureRest - Hairpin - Slur - PhrasingSlur - -Works as long as callback is made: - Glissando - Beam - -Works not at all for: - LyricSpace - LyricHyphen - LyricExtender - TextSpanner - System - -@end ignore - -@lilypond[verbatim,quote,relative=2] -a~a -a -% increase the length of the tie --\tweak #'minimum-length #5 -~a -@end lilypond - -@lilypond[verbatim,quote,relative=2] -a1 -\compressFullBarRests -R1*23 -% increase the length of the rest bar -\once \override MultiMeasureRest #'minimum-length = #20 -R1*23 -a1 -@end lilypond - -@lilypond[verbatim,quote,relative=2] -a \< a a a \! -% increase the length of the hairpin -\override Hairpin #'minimum-length = #20 -a \< a a a \! -@end lilypond - -This override can also be used to increase the length of slurs and -phrasing slurs: - -@lilypond[verbatim,quote,relative=2] -a( a) -a --\tweak #'minimum-length #5 -( a) - -a\( a\) -a --\tweak #'minimum-length #5 -\( a\) -@end lilypond - -For some layout objects, the @code{minimum-length} property becomes -effective only if the @code{set-spacing-rods} procedure is called -explicitly. To do this, the @code{springs-and-rods} property should -be set to @code{ly:spanner::set-spacing-rods}. For example, -the minimum length of a glissando has no effect unless the -@code{springs-and-rods} property is set: - -@lilypond[verbatim,quote,relative=1] -% default -e \glissando c' - -% not effective alone -\once \override Glissando #'minimum-length = #20 -e, \glissando c' - -% effective only when both overrides are present -\once \override Glissando #'minimum-length = #20 -\once \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods -e, \glissando c' -@end lilypond - -The same is true of the @code{Beam} object: - -@lilypond[verbatim,quote,relative=1] -% not effective alone -\once \override Beam #'minimum-length = #20 -e8 e e e - -% effective only when both overrides are present -\once \override Beam #'minimum-length = #20 -\once \override Beam #'springs-and-rods = #ly:spanner::set-spacing-rods -e8 e e e -@end lilypond - -@strong{@i{The @code{to-barline} property}} - -The second useful property of the @code{spanner-interface} is -@code{to-barline}. By default this is true, causing hairpins and -other spanners which are terminated on the first note of a measure to -end instead on the immediately preceding bar line. If set to false, -the spanner will extend beyond the bar line and end on the note -itself: - -@lilypond[verbatim,quote,relative=2] -a \< a a a a \! a a a \break -\override Hairpin #'to-barline = ##f -a \< a a a a \! a a a -@end lilypond - -This property is not effective for all spanners. For example, -seting it to @code{#t} has no effect on slurs or phrasing slurs -or on other spanners for which terminating on the bar line would -not be meaningful. - -@unnumberedsubsubsec Using the @code{line-spanner-interface} - -Objects which support the @code{line-spanner-interface} include - -@itemize -@item @code{DynamicTextSpanner} -@item @code{Glissando} -@item @code{TextSpanner} -@item @code{TrillSpanner} -@item @code{VoiceFollower} -@end itemize - -The routine responsible for drawing the stencils for these spanners is -@code{ly:line-interface::print}. This routine determines the -exact location of the two end points and draws a line -between them, in the style requested. The locations of the two -end points of the spanner are computed on-the-fly, but it is -possible to override their Y-coordinates. The -properties which need to be specified are nested -two levels down within the property hierarchy, but the syntax of -the @code{\override} command is quite simple: - -@lilypond[relative=2,quote,verbatim] -e2 \glissando b -\once \override Glissando #'(bound-details left Y) = #3 -\once \override Glissando #'(bound-details right Y) = #-2 -e2 \glissando b -@end lilypond - -The units for the @code{Y} property are @code{staff-space}s, -with the center line of the staff being the zero point. -For the glissando, this is the value for @code{Y} at the -X-coordinate corresponding to the center point of each note head, -if the line is imagined to be extended to there. - -If @code{Y} is not set, the value is computed from the vertical -position of the corresponding attachment point of the spanner. - -In case of a line break, the values for the end points are -specified by the @code{left-broken} and @code{right-broken} -sub-lists of @code{bound-details}. For example: - -@lilypond[relative=2,ragged-right,verbatim,fragment] -\override Glissando #'breakable = ##t -\override Glissando #'(bound-details right-broken Y) = #-3 -c1 \glissando \break -f1 -@end lilypond - - -A number of further properties of the @code{left} and -@code{right} sub-lists of the @code{bound-details} property -may be modified in the same way as @code{Y}: - -@table @code -@item Y -This sets the Y-coordinate of the end point, in @code{staff-space}s -offset from the staff center line. By default, it is the center of -the bound object, so a glissando points to the vertical center of -the note head. - -For horizontal spanners, such as text spanners and trill spanners, -it is hardcoded to 0. - -@item attach-dir -This determines where the line starts and ends in the X-direction, -relative to the bound object. So, a value of @code{-1} (or -@code{LEFT}) makes the line start/end at the left side of the note -head it is attached to. - -@item X -This is the absolute X-coordinate of the end point. It is usually -computed on the fly, and overriding it has little useful effect. - -@item stencil -Line spanners may have symbols at the beginning or end, which is -contained in this sub-property. This is for internal use; it is -recommended that @code{text} be used instead. - -@item text -This is a markup that is evaluated to yield the stencil. It is used -to put @i{cresc.}, @i{tr} and other text on horizontal spanners. - -@lilypond[quote,ragged-right,fragment,relative=2,verbatim] -\override TextSpanner #'(bound-details left text) - = \markup { \small \bold Slower } -c2\startTextSpan b c a\stopTextSpan -@end lilypond - -@item stencil-align-dir-y -@item stencil-offset -Without setting one of these, the stencil is simply put at the -end-point, centered on the line, as defined by the @code{X} and -@code{Y} sub-properties. Setting either @code{stencil-align-dir-y} -or @code{stencil-offset} will move the symbol at the edge vertically -relative to the end point of the line: - -@lilypond[relative=1,fragment,verbatim] -\override TextSpanner - #'(bound-details left stencil-align-dir-y) = #-2 -\override TextSpanner - #'(bound-details right stencil-align-dir-y) = #UP - -\override TextSpanner - #'(bound-details left text) = #"ggg" -\override TextSpanner - #'(bound-details right text) = #"hhh" -c4^\startTextSpan c c c \stopTextSpan -@end lilypond - -Note that negative values move the text @emph{up}, contrary to the -effect that might be expected, as a value of @code{-1} or -@code{DOWN} means align the @emph{bottom} edge of the text with -the spanner line. A value of @code{1} or @code{UP} aligns -the top edge of the text with the spanner line. - -@item arrow -Setting this sub-property to @code{#t} produces an arrowhead at the -end of the line. - -@item padding -This sub-property controls the space between the specified -end point of the line and the actual end. Without padding, a -glissando would start and end in the center of each note head. - -@end table - -The music function @code{\endSpanners} terminates the spanner -which starts on the immediately following note prematurely. It -is terminated after exactly one note, or at the following bar line -if @code{to-barline} is true and a bar line occurs before the next -note. - -@lilypond[verbatim,quote,ragged-right,relative=2,fragment] -\endSpanners -c2 \startTextSpan c2 c2 -\endSpanners -c2 \< c2 c2 -@end lilypond - -When using @code{\endSpanners} it is not necessary to close -\startTextSpan with \stopTextSpan, nor is it necessary to close -hairpins with @code{\!}. - - -@seealso -Internals Reference: @rinternals{TextSpanner}, -@rinternals{Glissando}, @rinternals{VoiceFollower}, -@rinternals{TrillSpanner}, -@rinternals{line-spanner-interface}. - - -@node Visibility of objects -@subsection Visibility of objects - -@cindex objects, visibility of -@cindex grobs, visibility of -@cindex visibility of objects - -There are four main ways in which the visibility of layout objects -can be controlled: their stencil can be removed, they can be made -transparent, they can be colored white, or their -@code{break-visibility} property can be overridden. The first -three apply to all layout objects; the last to just a few -- the -@emph{breakable} objects. The Learning Manual introduces these -four techniques, see @rlearning{Visibility and color of objects}. - -There are also a few other techniques which are specific to -certain layout objects. These are covered under Special -considerations. - -@menu -* Removing the stencil:: -* Making objects transparent:: -* Painting objects white:: -* Using break-visibility:: -* Special considerations:: -@end menu - - -@node Removing the stencil -@unnumberedsubsubsec Removing the stencil - -@cindex stencil, removing - -Every layout object has a stencil property. By default this is set -to the specific function which draws that object. If this property -is overridden to @code{#f} no function will be called and the object -will not be drawn. The default action can be recovered with -@code{\revert}. - -@lilypond[quote,verbatim,relative=1] -a1 a -\override Score.BarLine #'stencil = ##f -a a -\revert Score.BarLine #'stencil -a a a -@end lilypond - -@node Making objects transparent -@unnumberedsubsubsec Making objects transparent - -@cindex transparent, making objects - -Every layout object has a transparent property which by default is -set to @code{#f}. If set to @code{#t} the object still occupies -space but is made invisible. - -@lilypond[quote,verbatim,relative=2] -a4 a -\once \override NoteHead #'transparent = ##t -a a -@end lilypond - -@node Painting objects white -@unnumberedsubsubsec Painting objects white - -@cindex objects, coloring -@cindex coloring objects -@cindex layers -@cindex printing order -@cindex overwriting objects -@cindex objects, overwriting -@cindex grobs, overwriting - -Every layout object has a color property which by default is set -to @code{black}. If this is overridden to @code{white} the object -will be indistinguishable from the white background. However, -if the object crosses other objects the color of the crossing -points will be determined by the order in which they are drawn, -and this may leave a ghostly image of the white object, as shown -here: - -@lilypond[quote,verbatim,relative=2] -\override Staff.Clef #'color = #white -a1 -@end lilypond - -This may be avoided by changing the order of printing the objects. -All layout objects have a @code{layer} property which should be set -to an integer. Objects with the lowest value of @code{layer} are -drawn first, then objects with progressively higher values are drawn, -so objects with higher values overwrite objects with lower values. -By default most objects are assigned a @code{layer} value of -@code{1}, although a few objects, including @code{StaffSymbol} and -@code{BarLine}, are assigned a value of @code{0}. The order of -printing objects with the same value of @code{layer} is indeterminate. - -In the example above the white clef, with a default @code{layer} -value of @code{1}, is drawn after the staff lines (default -@code{layer} value @code{0}), so overwriting them. To change this, -the @code{Clef} object must be given in a lower value of -@code{layer}, say @code{-1}, so that it is drawn earlier: - -@lilypond[quote,verbatim,relative=2] -\override Staff.Clef #'color = #white -\override Staff.Clef #'layer = #-1 -a1 -@end lilypond - -@node Using break-visibility -@unnumberedsubsubsec Using break-visibility - -@c TODO Add making other objects breakable - -@cindex break-visibility - -Most layout objects are printed only once, but some like -bar lines, clefs, time signatures and key signatures, may need -to be printed twice when a line break occurs -- once at the end -of the line and again at the start of the next line. Such -objects are called @emph{breakable}, and have a property, the -@code{break-visibility} property to control their visibility -at the three positions in which they may appear -- at the -start of a line, within a line if they are changed, and at the -end of a line if a change takes place there. - -For example, the time signature -by default will be printed at the start of the first line, but -nowhere else unless it changes, when it will be printed at the -point at which the change occurs. If this change occurs at the -end of a line the new time signature will be printed at the start -of the next line and a cautionary time signature will be printed -at the end of the previous line as well. - -This behaviour is controlled by the @code{break-visibility} -property, which is explained in -@c Leave this ref on a newline - formats incorrectly otherwise -td -@rlearning{Visibility and color of objects}. This property takes -a vector of three booleans which, in order, determine whether the -object is printed at the end of, within the body of, or at the -beginning of a line. Or to be more precise, before a line break, -where there is no line break, or after a line break. - -Alternatively, these eight combinations may be specified -by pre-defined functions, defined in @file{scm/output-lib.scm}, -where the last three columns indicate whether the layout objects -will be visible in the positions shown at the head of the columns: - -@multitable {@code{begin-of-line-invisible}} {@code{'#(#t #t #t)}} {yes} {yes} {yes} -@headitem Function @tab Vector @tab Before @tab At no @tab After -@headitem form @tab form @tab break @tab break @tab break - -@item @code{all-visible} @tab @code{'#(#t #t #t)} @tab yes @tab yes @tab yes -@item @code{begin-of-line-visible} @tab @code{'#(#f #f #t)} @tab no @tab no @tab yes -@item @code{center-visible} @tab @code{'#(#f #t #f)} @tab no @tab yes @tab no -@item @code{end-of-line-visible} @tab @code{'#(#t #f #f)} @tab yes @tab no @tab no -@item @code{begin-of-line-invisible} @tab @code{'#(#t #t #f)} @tab yes @tab yes @tab no -@item @code{center-invisible} @tab @code{'#(#t #f #t)} @tab yes @tab no @tab yes -@item @code{end-of-line-invisible} @tab @code{'#(#f #t #t)} @tab no @tab yes @tab yes -@item @code{all-invisible} @tab @code{'#(#f #f #f)} @tab no @tab no @tab no -@end multitable - -The default settings of @code{break-visibility} depend on the -layout object. The following table shows all the layout objects -of interest which are affected by @code{break-visibility} and the -default setting of this property: - -@multitable @columnfractions .3 .3 .4 - -@headitem Layout object @tab Usual context @tab Default setting - -@c omit Ambitus as it appears not to be affected by break-visibility -td -@c @item @code{Ambitus} @tab as specified @tab @code{begin-of-line-visible} -@item @code{BarLine} @tab @code{Score} @tab calculated -@item @code{BarNumber} @tab @code{Score} @tab @code{begin-of-line-visible} -@c omit the following item until it can be explained -td -@c @item @code{BreakAlignGroup} @tab @code{Score} @tab calculated -@item @code{BreathingSign} @tab @code{Voice} @tab @code{begin-of-line-invisible} -@item @code{Clef} @tab @code{Staff} @tab @code{begin-of-line-visible} -@item @code{Custos} @tab @code{Staff} @tab @code{end-of-line-visible} -@item @code{DoublePercentRepeat} @tab @code{Voice} @tab @code{begin-of-line-invisible} -@c omit KeyCancellation until it can be explained -td -@c @item @code{KeyCancellation} @tab ?? @tab @code{begin-of-line-invisible} -@item @code{KeySignature} @tab @code{Staff} @tab @code{begin-of-line-visible} -@c omit LeftEdge until it can be explained -td -@c @item @code{LeftEdge} @tab @code{Score} @tab @code{center-invisible} -@item @code{OctavateEight} @tab @code{Staff} @tab @code{begin-of-line-visible} -@item @code{RehearsalMark} @tab @code{Score} @tab @code{end-of-line-invisible} -@item @code{TimeSignature} @tab @code{Staff} @tab @code{all-visible} - -@end multitable - -The example below shows the use of the vector form to control the -visibility of barlines: - -@lilypond[quote,verbatim,relative=1,ragged-right] -f4 g a b -f4 g a b -% Remove bar line at the end of the current line -\once \override Score.BarLine #'break-visibility = #'#(#f #t #t) -\break -f4 g a b -f4 g a b -@end lilypond - -Although all three components of the vector used to override -@code{break-visibility} must be present, not all of them are -effective with every layout object, and some combinations may -even give errors. The following limitations apply: - -@itemize @bullet -@item Bar lines cannot be printed at start of line. -@item A bar number cannot be printed at the start of the first -line unless it is set to be different from 1. -@item Clef -- see below -@item Double percent repeats are either all printed or all -suppressed. Use begin-of line-invisible to print and -all-invisible to suppress. -@item Key signature -- see below -@item OctavateEight -- see below -@end itemize - -@node Special considerations -@unnumberedsubsubsec Special considerations - -@strong{@emph{Visibility following explicit changes}} - -@cindex key signature, visibility following explicit change -@cindex explicitKeySignatureVisibility -@cindex clef, visibility following explicit change -@cindex explicitClefVisibility - -The @code{break-visibility} property controls the visibility of -key signatures and changes of clef only at the start of lines, -i.e. after a break. It has no effect on the visibility of the -key signature or clef following an explicit key change or an -explicit clef change within or at the end of a line. In the -following example the key signature following the explicit change -to B-flat major is still visible, even though @code{all-invisible} -is set. - -@lilypond[quote,verbatim,relative=1,ragged-right] -\key g \major -f4 g a b -% Try to remove all key signatures -\override Staff.KeySignature #'break-visibility = #all-invisible -\key bes \major -f4 g a b -\break -f4 g a b -f4 g a b -@end lilypond - -The visibility of such explicit key signature and clef changes is -controlled by the @code{explicitKeySignatureVisibility} and -@code{explicitClefVisibility} properties. These are the equivalent -of the @code{break-visibility} property and both take a vector of -three booleans or the predefined functions listed above, exactly like -@code{break-visibility}. Both are properties of the Staff context, -not the layout objects themselves, and so they are set using the -@code{\set} command. Both are set by default to @code{all-visible}. -These properties control only the visibility of key signatures and -clefs resulting from explicit changes and do not affect key -signatures and clefs at the beginning of lines; -@code{break-visibility} must still be overridden in the appropriate -object to remove these. - -@lilypond[quote,verbatim,relative=1,ragged-right] -\key g \major -f4 g a b -\set Staff.explicitKeySignatureVisibility = #all-invisible -\override Staff.KeySignature #'break-visibility = #all-invisible -\key bes \major -f4 g a b \break -f4 g a b -f4 g a b -@end lilypond - -@strong{@emph{Visibility of cautionary accidentals}} - -To remove the cautionary accidentals printed at an explicit key -change, set the Staff context property @code{printKeyCancellation} -to @code{#f}: - -@lilypond[quote,verbatim,relative=1,ragged-right] -\key g \major -f4 g a b -\set Staff.explicitKeySignatureVisibility = #all-invisible -\set Staff.printKeyCancellation = ##f -\override Staff.KeySignature #'break-visibility = #all-invisible -\key bes \major -f4 g a b \break -f4 g a b -f4 g a b -@end lilypond - -With these overrides only the accidentals before the notes remain -to indicate the change of key. - -@c TODO Add visibility of cautionary accidentals before notes - -@strong{@emph{Automatic bars}} - -@cindex automaticBars -@cindex bar lines, suppressing - -As a special case, the printing of bar lines can also be turned off -by setting the @code{automaticBars} property in the Score context. -If set to @code{#f}, bar lines will not be printed automatically; -they must be explicitly created with a @code{\bar} command. Unlike -the @code{\cadenzaOn} predefined command, measures are still counted. -Bar generation will resume according to that count if this property -is later set to @code{#t}. When set to @code{#f}, line breaks can -occur only at explicit @code{\bar} commands. - -@c TODO Add example - -@strong{@emph{Octavated clefs}} - -@cindex octavated clefs, visibility of -@cindex visibility of octavated clefs -@cindex clefs, visibility of octavation - -The small octavation symbol on octavated clefs is produced by the -@code{OctavateEight} layout object. Its visibility is controlled -independently from that of the @code{Clef} object, so it is -necessary to apply any required @code{break-visibility} overrides -to both the @code{Clef} and the @code{OctavateEight} layout objects -to fully suppress such clef symbols at the start of each line. - -For explicit clef changes, the @code{explicitClefVisibility} -property controls both the clef symbol and any octavation symbol -associated with it. - - -@seealso -Learning Manual: -@rlearning{Visibility and color of objects} - - -@node Line styles -@subsection Line styles - -Some performance indications, e.g., @i{rallentando} and -@i{accelerando} and @i{trills} are written as text and are -extended over many measures with lines, sometimes dotted or wavy. - -These all use the same routines as the glissando for drawing the -texts and the lines, and tuning their behavior is therefore also -done in the same way. It is done with a spanner, and the routine -responsible for drawing the spanners is -@code{ly:line-interface::print}. This routine determines the -exact location of the two @i{span points} and draws a line -between them, in the style requested. - -Here is an example showing the different line styles available, -and how to tune them. - -@lilypond[relative=2,ragged-right,verbatim,fragment] -d2 \glissando d'2 -\once \override Glissando #'style = #'dashed-line -d,2 \glissando d'2 -\override Glissando #'style = #'dotted-line -d,2 \glissando d'2 -\override Glissando #'style = #'zigzag -d,2 \glissando d'2 -\override Glissando #'style = #'trill -d,2 \glissando d'2 -@end lilypond - -The locations of the end-points of the spanner are computed -on-the-fly for every graphic object, but it is possible to -override these: - -@c FIXME Complete -@lilypond[relative=2,ragged-right,verbatim,fragment] -e2 \glissando f -\once \override Glissando #'(bound-details right Y) = #-2 -e2 \glissando f -@end lilypond - -The value for @code{Y} is set to @code{-2} for the right end -point. The left side may be similarly adjusted by specifying -@code{left} instead of @code{right}. - -If @code{Y} is not set, the value is computed from the vertical -position of the left and right attachment points of the spanner. - -Other adjustments of spanners are possible, for details, see -@ref{Spanners}. - -@node Rotating objects -@subsection Rotating objects - -Both layout objects and elements of markup text can be rotated by -any angle about any point, but the method of doing so differs. - -@menu -* Rotating layout objects:: -* Rotating markup:: -@end menu - -@node Rotating layout objects -@unnumberedsubsubsec Rotating layout objects - -@cindex rotating objects -@cindex objects, rotating - -All layout objects which support the @code{grob-interface} can be -rotated by setting their @code{rotation} property. This takes a -list of three items: the angle of rotation counter-clockwise, -and the x and y coordinates of the point relative to the object's -reference point about which the rotation is to be performed. The -angle of rotation is specified in degrees and the coordinates in -staff-spaces. - -The angle of rotation and the coordinates of the rotation point must -be determined by trial and error. - -@cindex hairpins, angled -@cindex angled hairpins - -There are only a few situations where the rotation of layout -objects is useful; the following example shows one situation where -they may be: - -@lilypond[quote,verbatim,relative=1] -g4\< e' d' f\! -\override Hairpin #'rotation = #'(20 -1 0) -g,,4\< e' d' f\! -@end lilypond - -@node Rotating markup -@unnumberedsubsubsec Rotating markup - -All markup text can be rotated to lie at any angle by prefixing it -with the @code{\rotate} command. The command takes two arguments: -the angle of rotation in degrees counter-clockwise and the text to -be rotated. The extents of the text are not rotated: they take -their values from the extremes of the x and y coordinates of the -rotated text. In the following example the -@code{outside-staff-priority} property for text is set to @code{#f} -to disable the automatic collision avoidance, which would push some -of the text too high. - -@lilypond[quote,verbatim,relative=1] -\override TextScript #'outside-staff-priority = ##f -g4^\markup { \rotate #30 "a G" } -b^\markup { \rotate #30 "a B" } -des^\markup { \rotate #30 "a D-Flat" } -fis^\markup { \rotate #30 "an F-Sharp" } -@end lilypond - -@node Advanced tweaks -@section Advanced tweaks - -This section discusses various approaches to fine tuning the -appearance of the printed score. - -@menu -* Aligning objects:: -* Vertical grouping of grobs:: -* Modifying stencils:: -* Modifying shapes:: -@end menu - - -@seealso -Learning Manual: -@rlearning{Tweaking output}, -@rlearning{Other sources of information}. - -Notation Reference: -@ref{Explaining the Internals Reference}, -@ref{Modifying properties}, -@ref{Interfaces for programmers}. - -Installed Files: -@file{scm/@/define@/-grobs@/.scm}. - -Snippets: -@rlsr{Tweaks and overrides}. - -Internals Reference: -@rinternals{All layout objects}. - - -@node Aligning objects -@subsection Aligning objects - -Graphical objects which support the @code{self-alignment-interface} and/or -the @code{side-position-interface} can be -aligned to a previously placed object in a variety of ways. For a list of these objects, see -@rinternals{self-alignment-interface} and @rinternals{side-position-interface}. - -All graphical objects have a reference point, a horizontal extent and a -vertical extent. The horizontal extent is a pair of numbers -giving the displacements from the reference point of the left and -right edges, displacements to the left being negative. The -vertical extent is a pair of numbers giving the displacement from -the reference point to the bottom and top edges, displacements down -being negative. - -An object's position on a staff is given by the values of the -@code{X-offset} and @code{Y-offset} properties. The value of -@code{X-offset} gives the displacement from the x coordinate of -the reference point of the parent object, and the value of -@code{Y-offset} gives the displacement from the center line of the -staff. The values of @code{X-offset} and -@code{Y-offset} may be set directly or may be set to be calculated -by procedures in order to achieve alignment with the parent object -in several ways. - -@warning{Many objects have special positioning considerations which -cause any setting of @code{X-offset} or @code{Y-offset} to be -ignored or modified, even though the object supports the -@code{self-alignment-interface}.} - -For example, an accidental can be repositioned -vertically by setting @code{Y-offset} but any changes to -@code{X-offset} have no effect. - -Rehearsal marks may be aligned with -breakable objects such as bar lines, clef symbols, time signature -symbols and key signatures. There are special properties to be -found in the @code{break-aligned-interface} for positioning rehearsal -marks on such objects. - -@menu -* Setting @code{X-offset} and @code{Y-offset} directly:: -* Using the @code{side-position-interface}:: -* Using the @code{self-alignment-interface}:: -* Using the @code{break-alignable-interface}:: -@end menu - -@node Setting @code{X-offset} and @code{Y-offset} directly -@unnumberedsubsubsec Setting @code{X-offset} and @code{Y-offset} directly - -Numerical values may be given to the @code{X-offset} and @code{Y-offset} -properties of many objects. The following example shows three -notes with the default fingering position and the positions with @code{X-offset} -and @code{Y-offset} modified. - -@lilypond[verbatim,quote,relative=2] -a-3 -a --\tweak #'X-offset #0 --\tweak #'Y-offset #0 --3 -a --\tweak #'X-offset #-1 --\tweak #'Y-offset #1 --3 -@end lilypond - -@c TODO write more - -@node Using the @code{side-position-interface} -@unnumberedsubsubsec Using the @code{side-position-interface} - -An object which supports the @code{side-position-interface} can be -placed next to its parent object so that -the specified edges of the two objects touch. The object may be -placed above, below, to the right or to the left of the parent. -The parent cannot be specified; it is determined by the order of -elements in the input stream. Most objects have the associated -note head as their parent. - -The values of the @code{side-axis} and @code{direction} properties -determine where the object is to be placed, as follows: - -@c TODO add an example of each to the table - -@multitable @columnfractions .3 .3 .3 -@headitem @code{side-axis} @tab @code{direction} @tab -@headitem property @tab property @tab Placement - -@item @code{0} @tab @code{-1} @tab left -@item @code{0} @tab @code{1} @tab right -@item @code{1} @tab @code{-1} @tab below -@item @code{1} @tab @code{1} @tab above - -@end multitable - -When @code{side-axis} is @code{0}, @code{X-offset} should be set to -the procedure @code{ly:side-position-interface::x-aligned-side}. -This procedure will return the correct value of @code{X-offset} to -place the object to the left or right side of the parent according -to value of @code{direction}. - -When @code{side-axis} is @code{1}, @code{Y-offset} should be set to -the procedure @code{ly:side-position-interface::y-aligned-side}. -This procedure will return the correct value of @code{Y-offset} to -place the object to the top or bottom of the parent according -to value of @code{direction}. - -@c TODO Add examples - -@node Using the @code{self-alignment-interface} -@unnumberedsubsubsec Using the @code{self-alignment-interface} - -@emph{Self-aligning objects horizontally} - -The horizontal alignment of an object which supports the -@code{self-alignment-interface} is controlled by the value of -the @code{self-alignment-X} property, provided the object's -@code{X-offset} property is set to -@code{ly:self-alignment-interface::x-aligned-on-self}. -@code{self-alignment-X} may be given any -real value, in units of half the total X extent of the -object. Negative values move the object to the right, positive -to the left. A value of @code{0} centers the object on the -reference point of its parent, a value of @code{-1} aligns the -left edge of the object on the reference point of its parent, -and a value of @code{1} aligns the right edge of the object on the -reference point of its parent. The symbols @code{LEFT}, -@code{CENTER} and @code{RIGHT} may be used instead of the values -@code{-1, 0, 1} respectively. - -Normally the @code{\override} command would be used to modify the -value of @code{self-alignment-X}, but the @code{\tweak} command -can be used to separately align several annotations on a single -note: - -@lilypond[quote,verbatim,relative=1] -a' --\tweak #'self-alignment-X #-1 -^"left-aligned" --\tweak #'self-alignment-X #0 -^"center-aligned" --\tweak #'self-alignment-X #RIGHT -^"right-aligned" --\tweak #'self-alignment-X #-2.5 -^"aligned further to the right" -@end lilypond - -@emph{Self-aligning objects vertically} - -Objects may be aligned vertically in an analogous way to aligning -them horizontally if the @code{Y-offset} property is set to -@code{ly:self-alignment-interface::y-aligned-on-self}. However, -other mechanisms are often involved in vertical alignment: the -value of @code{Y-offset} is just one variable taken into account. -This may make adjusting the value of some objects tricky. -The units are just half the vertical extent of the object, which -is usually quite small, so quite large numbers may be required. -A value of @code{-1} aligns the lower edge of the object with -the reference point of the parent object, a value of @code{0} -aligns the center of the object with the reference point of the -parent, and a value of @code{1} aligns the top edge of the object -with the reference point of the parent. The symbols @code{DOWN}, -@code{CENTER}, @code{UP} may be substituted for @code{-1, 0, 1} -respectively. - -@emph{Self-aligning objects in both directions} - -By setting both @code{X-offset} and @code{Y-offset}, an object may -be aligned in both directions simultaneously. - -The following example shows how to adjust a fingering mark so -that it nestles close to the note head. - -@lilypond[quote,verbatim,relative=2] -a --\tweak #'self-alignment-X #0.5 % move horizontally left --\tweak #'Y-offset #ly:self-alignment-interface::y-aligned-on-self --\tweak #'self-alignment-Y #-1 % move vertically up --3 % third finger -@end lilypond - -@ignore -@unnumberedsubsubsec Using the @code{aligned-on-parent} procedures - -@c Cannot document as they do not seem to operate consistently on all objects -td -@c TODO investigate further - -The @code{aligned-on-parent} procedures are used in the same way -as the @code{aligned-on-self} procedures, they difference being -that they permit an object to be aligned with the @emph{edges} of -the parent rather than the parent's reference point. The following -example shows the difference: - -@c TODO Add example - -@lilypond[verbatim,quote] -@end lilypond - -@end ignore - -@ignore -@unnumberedsubsubsec Using the @code{centered-on-parent} procedures - -@c Cannot document as they do not seem to operate consistently on all objects -td -@c TODO investigate further - -@end ignore - -@c TODO The align-interface, BassFigureAlignment and VerticalAlignment - -@node Using the @code{break-alignable-interface} -@unnumberedsubsubsec Using the @code{break-alignable-interface} - -@cindex align to objects -@cindex break-align-symbols - -Rehearsal marks and bar numbers may be aligned with notation -objects other than bar lines. These objects include @code{ambitus}, -@code{breathing-sign}, @code{clef}, @code{custos}, @code{staff-bar}, -@code{left-edge}, @code{key-cancellation}, @code{key-signature}, and -@code{time-signature}. - -By default, rehearsal marks and bar numbers will be horizontally -centered above the object: - -@lilypond[verbatim,quote,relative=1] -e1 -% the RehearsalMark will be centered above the Clef -\override Score.RehearsalMark #'break-align-symbols = #'(clef) -\key a \major -\clef treble -\mark "↓" -e -% the RehearsalMark will be centered above the TimeSignature -\override Score.RehearsalMark #'break-align-symbols = #'(time-signature) -\key a \major -\clef treble -\time 3/4 -\mark "↓" -e2. -@end lilypond - -A list of possible target alignment objects may be specified. If -some of the objects are invisible at that point due to the setting -of @code{break-visibility} or the explicit visibility settings for -keys and clefs, the rehearsal mark or bar number is aligned to the -first object in the list which is visible. If no objects in the -list are visible the object is aligned to the bar line. If the bar -line is invisible the object is aligned to the place where the bar -line would be. - -@lilypond[verbatim,quote,relative=1] -e1 -% the RehearsalMark will be centered above the Key Signature -\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef) -\key a \major -\clef treble -\mark "↓" -e -% the RehearsalMark will be centered above the Clef -\set Staff.explicitKeySignatureVisibility = #all-invisible -\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef) -\key a \minor -\clef bass -\mark "↓" -e, -@end lilypond - -The alignment of the rehearsal mark relative to the notation object -can be changed, as shown in the following example. In a score with -multiple staves, this setting should be done for all the staves. - -@lilypond[verbatim,quote,relative=1] -% The RehearsalMark will be centered above the KeySignature -\override Score.RehearsalMark #'break-align-symbols = #'(key-signature) -\key a \major -\clef treble -\time 4/4 -\mark "↓" -e1 -% The RehearsalMark will be aligned with the left edge of the KeySignature -\once \override Score.KeySignature #'break-align-anchor-alignment = #LEFT -\mark "↓" -\key a \major -e -% The RehearsalMark will be aligned with the right edge of the KeySignature -\once \override Score.KeySignature #'break-align-anchor-alignment = #RIGHT -\key a \major -\mark "↓" -e -@end lilypond - -The rehearsal mark can also be offset to the right or left of the left edge -by an arbitrary amount. The units are staff-spaces: - -@lilypond[verbatim,quote,relative=1] -% The RehearsalMark will be aligned with the left edge of the KeySignature -% and then shifted right by 3.5 staff-spaces -\override Score.RehearsalMark #'break-align-symbols = #'(key-signature) -\once \override Score.KeySignature #'break-align-anchor = #3.5 -\key a \major -\mark "↓" -e -% The RehearsalMark will be aligned with the left edge of the KeySignature -% and then shifted left by 2 staff-spaces -\once \override Score.KeySignature #'break-align-anchor = #-2 -\key a \major -\mark "↓" -e -@end lilypond - - -@node Vertical grouping of grobs -@subsection Vertical grouping of grobs - -@c FIXME Expand this section - -The VerticalAlignment and VerticalAxisGroup grobs work together. -VerticalAxisGroup groups together different grobs like Staff, Lyrics, -etc. VerticalAlignment then vertically aligns the different grobs -grouped together by VerticalAxisGroup. There is usually only one -VerticalAlignment per score but every Staff, Lyrics, etc. has its own -VerticalAxisGroup. - - -@node Modifying stencils -@subsection Modifying stencils - -All layout objects have a @code{stencil} property which is part of -the @code{grob-interface}. By default, this property is usually -set to a function specific to the object that is tailor-made to -render the symbol which represents it in the output. For example, -the standard setting for the @code{stencil} property of the -@code{MultiMeasureRest} object is @code{ly:multi-measure-rest::print}. - -The standard symbol for any object can be replaced by modifying the -@code{stencil} property to reference a different, specially-written, -procedure. This requires a high level of knowledge of the internal -workings of LilyPond, but there is an easier way which can often -produce adequate results. - -This is to set the @code{stencil} property to the procedure which -prints text -- @code{ly:text-interface::print} -- and to add a -@code{text} property to the object which is set to contain the -markup text which produces the required symbol. Due to the -flexibility of markup, much can be achieved -- see in particular -@ref{Graphic notation inside markup}. - -The following example demonstrates this by changing the note head -symbol to a cross within a circle. - -@lilypond[verbatim,quote] -XinO = { - \once \override NoteHead #'stencil = #ly:text-interface::print - \once \override NoteHead #'text = \markup { - \combine - \halign #-0.7 \draw-circle #0.85 #0.2 ##f - \musicglyph #"noteheads.s2cross" - } -} -\relative c'' { - a a \XinO a a -} -@end lilypond - -Any of the glyphs in the feta Font can be supplied to the -@code{\musicglyph} markup command -- see @ref{The Feta font}. - -@c TODO Add inserting eps files or ref to later - -@c TODO Add inserting Postscript or ref to later - - -@seealso -Notation Reference: -@ref{Graphic notation inside markup}, -@ref{Formatting text}, -@ref{Text markup commands}, -@ref{The Feta font}. - - -@node Modifying shapes -@subsection Modifying shapes - -@menu -* Modifying ties and slurs:: -@end menu - -@node Modifying ties and slurs -@unnumberedsubsubsec Modifying ties and slurs - -Ties, slurs and phrasing slurs are drawn as third-order Bézier -curves. If the shape of the tie or slur which is calculated -automatically is not optimum, the shape may be modified manually by -explicitly specifying the four control points required to define -a third-order Bézier curve. - -Third-order or cubic Bézier curves are defined by four control -points. The first and fourth control points are precisely the -starting and ending points of the curve. The intermediate two -control points define the shape. Animations showing how the curve -is drawn can be found on the web, but the following description -may be helpful. The curve starts from the first control point -heading directly towards the second, gradually bending over to -head towards the third and continuing to bend over to head towards -the fourth, arriving there travelling directly from the third -control point. The curve is entirely contained in the -quadrilateral defined by the four control points. - -Here is an example of a case where the tie is not optimum, and -where @code{\tieDown} would not help. - -@lilypond[verbatim,quote,relative=1] -<< - { e1 ~ e } -\\ - { r4 } ->> -@end lilypond - -One way of improving this tie is to manually modify its control -points, as follows. - -The coordinates of the Bézier control points are specified in units -of staff-spaces. The X@tie{}coordinate is relative to the reference -point of the note to which the tie or slur is attached, and the -Y@tie{}coordinate is relative to the staff center line. The -coordinates are entered as a list of four pairs of decimal numbers -(reals). One approach is to estimate the coordinates of the two -end points, and then guess the two intermediate points. The optimum -values are then found by trial and error. - -It is useful to remember that a symmetric curve requires symmetric -control points, and that Bézier curves have the useful property that -transformations of the curve such as translation, rotation and -scaling can be achieved by applying the same transformation to the -curve's control points. - -For the example above the following override gives a satisfactory -tie: - -@lilypond[verbatim,quote,relative=1] -<< - \once \override Tie - #'control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1)) - { e1 ~ e1 } -\\ - { r4 4 } ->> -@end lilypond - -@knownissues - -It is not possible to modify shapes of ties or slurs by changing -the @code{control-points} property if there are more than one at -the same musical moment, not even by using the @code{\tweak} -command. - - - - diff --git a/Documentation/user/cheatsheet.itely b/Documentation/user/cheatsheet.itely deleted file mode 100644 index d6c8393345..0000000000 --- a/Documentation/user/cheatsheet.itely +++ /dev/null @@ -1,299 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - - -@c TODO: add tablature. - -@node Cheat sheet -@appendix Cheat sheet - - -@multitable @columnfractions .35 .3 .35 - -@item @b{Syntax} -@tab @b{Description} -@tab @b{Example} - -@item @code{1 2 8 16} -@tab durations -@tab -@lilypond[fragment,relative=2,notime] -\set Staff.autoBeaming = ##f -\override Staff.Clef #'break-visibility = #all-invisible -c1 c2 c8 c16 -@end lilypond - -@item @code{c4. c4..} -@tab augmentation dots -@tab -@lilypond[fragment,relative=2,notime] -\override Staff.Clef #'break-visibility = #all-invisible -c4. c4.. -@end lilypond - -@item @code{c d e f g a b } -@tab scale -@tab -@lilypond[fragment,relative=1,notime] -c d e f g a b -@end lilypond - -@item @code{fis bes} -@tab alteration -@tab -@lilypond[fragment,relative=1,notime] -fis bes -@end lilypond - -@item @code{\clef treble \clef bass } -@tab clefs -@tab -@lilypond[fragment,notime] -\clef treble -s4_" " -\clef bass -s4_" " -@end lilypond - -@item @code{\time 3/4 \time 4/4 } -@tab time signature -@tab -@lilypond[fragment] -\override Staff.Clef #'stencil = #empty-stencil -\time 3/4 -s4_" " -\time 4/4 -s16_" " -@end lilypond - - -@item @code{r4 r8} -@tab rest -@tab -@lilypond[relative=2,notime,fragment] -\override Staff.Clef #'break-visibility = #all-invisible -r4 r8 -@end lilypond - -@item @code{d ~ d} -@tab tie -@tab -@lilypond[relative=2,notime,fragment] -\set Score.timing = ##f -\set Staff.autoBeaming = ##f -d ~ d -@end lilypond - -@item @code{\key es \major } -@tab key signature -@tab -@lilypond[notime,fragment] -\clef treble -\key es \major -\hideNotes -c128 -@end lilypond - -@item @var{note}@code{'} -@tab raise octave -@tab -@lilypond[relative=2,notime,fragment] -\set Score.timing = ##f -\set Staff.autoBeaming = ##f -a a' -@end lilypond - -@item @var{note}@code{,} -@tab lower octave -@tab -@lilypond[relative=2,notime,fragment] -\set Score.timing = ##f -\set Staff.autoBeaming = ##f -c c, -@end lilypond - - -@item @code{c( d e)} -@tab slur -@tab -@lilypond[fragment,relative=2] -\set Score.timing = ##f -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\set Staff.autoBeaming = ##f -c( d e) -@end lilypond - - -@item @code{c\( c( d) e\)} -@tab phrasing slur -@tab -@lilypond[fragment,relative=2] -\set Score.timing = ##f -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\set Staff.autoBeaming = ##f -c\( c( d) e\) -@end lilypond - - -@item @code{a8[ b]} -@tab beam -@tab -@lilypond[fragment,relative=2] -\set Score.timing = ##f -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\set Staff.autoBeaming = ##f -a8-[ b-] -@end lilypond - - -@item @code{<< \new Staff ... >>} -@tab more staves -@tab -@lilypond[fragment] -<< \new Staff { - \set Staff.implicitTimeSignatureVisibility = #all-invisible - c'1 - } - \new Staff { - \set Staff.implicitTimeSignatureVisibility = #all-invisible - c'1 - } >> -@end lilypond - - -@item @code{c-> c-.} -@tab articulations -@tab -@lilypond[fragment,relative=2] -\set Staff.implicitTimeSignatureVisibility = #all-invisible -c-> c-. -@end lilypond - - -@item @code{c2\mf c\sfz} -@tab dynamics -@tab -@lilypond[fragment,relative=2] -\set Staff.implicitTimeSignatureVisibility = #all-invisible -c2\mf c\sfz -@end lilypond - - -@item @code{a\< a a\!} -@tab crescendo -@tab -@lilypond[fragment,relative=2] -\set Score.timing = ##f -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\set Staff.autoBeaming = ##f -a\< a a\! -@end lilypond - -@item @code{a\> a a\!} -@tab decrescendo -@tab -@lilypond[fragment,relative=2] -\set Score.timing = ##f -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\set Staff.autoBeaming = ##f -a\> a a\! -@end lilypond - - -@item @code{< >} -@tab chord -@tab -@lilypond[fragment,relative=2] -\set Staff.implicitTimeSignatureVisibility = #all-invisible - -@end lilypond - - -@item @code{\partial 8} -@tab pickup / upbeat -@tab -@lilypond[fragment,relative=2] -\partial 8 -f8 c2 d e -@end lilypond - - -@item @code{\times 2/3 @{f g a@}} -@tab triplets -@tab -@lilypond[relative=1,fragment] -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\times 2/3 { f8 g a } -@end lilypond - - -@item @code{\grace} -@tab grace notes -@tab -@lilypond[relative=2,fragment] -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\context Voice { \grace b16 c4 } -@end lilypond - -@item @code{\lyricmode @{ twinkle @}} -@tab entering lyrics -@tab -twinkle - - -@item @code{\new Lyrics} -@tab printing lyrics -@tab -@lilypond[fragment] -\new Lyrics \lyricmode { twinkle } -@end lilypond - -@item @code{twin -- kle} -@tab lyric hyphen -@tab -@lilypond[fragment,relative=2] -\set Staff.implicitTimeSignatureVisibility = #all-invisible -<< - { g'1 g } - \new Lyrics \lyricsto "" { twin -- kle } ->> -@end lilypond - -@item @code{\chordmode @{ c:dim f:maj7 @}} -@tab chords -@tab -@lilypond[fragment,relative=2] -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\chordmode { c:dim f:maj7 } -@end lilypond - -@item @code{\context ChordNames} -@tab printing chord names -@tab -@lilypond[fragment,relative=2] -\chords { c:dim f:maj7 } -@end lilypond - -@item @code{<<@{e f@} \\ @{c d@}>>} -@tab polyphony -@tab -@lilypond[fragment,relative=2] -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\context Staff <<{e f} \\ {c d}>> -@end lilypond - - -@item @code{s4 s8 s16} -@tab spacer rests -@tab - -@end multitable - diff --git a/Documentation/user/chords.itely b/Documentation/user/chords.itely deleted file mode 100644 index c1b6c03d75..0000000000 --- a/Documentation/user/chords.itely +++ /dev/null @@ -1,1156 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - - -@node Chord notation -@section Chord notation - -@lilypondfile[quote]{chords-headword.ly} - -Chords can be entered either as normal notes or in chord mode and displayed -using a variety of traditional European chord naming conventions. Chord -names and figured bass notation can also be displayed. - -@menu -* Chord mode:: -* Displaying chords:: -* Figured bass:: -@end menu - - -@node Chord mode -@subsection Chord mode - -@cindex chord chords - -Chord mode is used to enter chords using an indicator of the chord -structure, rather than the chord pitches. - -@menu -* Chord mode overview:: -* Common chords:: -* Extended and altered chords:: -@end menu - -@node Chord mode overview -@unnumberedsubsubsec Chord mode overview - -@cindex chord names -@cindex chord mode - -Chords can be entered as simultaneous music, as discussed in -@ref{Chorded notes}. - -Chords can also be entered in @qq{chord mode}, which is an input -mode that focuses on the structures of chords in traditional -European music, rather than on specific pitches. This is -convenient for those who are familiar with using chord names to -describe chords. More information on different input modes can be -found at @ref{Input modes}. - -@lilypond[verbatim,quote,ragged-right,relative=1] -\chordmode { c1 g a g c } -@end lilypond - -Chords entered using chord mode are music elements, and can be -transposed just like chords entered using simultaneous music. -@code{\chordmode} is absolute, as @code{\relative} has no effect -on @code{chordmode} blocks. However, in @code{\chordmode} the -absolute pitches are one octave higher than in note mode. - -Chord mode and note mode can be mixed in sequential music: - -@lilypond[verbatim,quote,ragged-right,relative=1] -2 -\chordmode { c2 f } -2 -\chordmode { f2 g } -@end lilypond - - -@seealso -Music Glossary: -@rglos{chord}. - -Notation Reference: -@ref{Chorded notes}, -@ref{Input modes}. - -Snippets: -@rlsr{Chords} - - -@knownissues - -When chord mode and note mode are mixed in sequential music, and -chord mode comes first, the note mode will create a new @code{Staff} -context. - -@lilypond[verbatim,quote,ragged-right,relative=1] -\chordmode { c2 f } -2 -@end lilypond - -To avoid this behavior, explicitly create the @code{Staff} context: - -@lilypond[verbatim,quote,ragged-right,relative=1] -\new Staff { - \chordmode { c2 f } - 2 -} -@end lilypond - -@node Common chords -@unnumberedsubsubsec Common chords - -@cindex triads -@cindex seventh chords -@cindex root of chord -@cindex modifiers, in chords. -@cindex chord quality - -Major triads are entered by including the root and an -optional duration: - -@lilypond[verbatim,quote,relative=1,ragged-right] -\chordmode { c2 f4 g } -@end lilypond - -Minor, augmented, and diminished triads are entered by placing -@code{:} and a quality modifier string after the duration: - -@lilypond[verbatim,quote,ragged-right,relative=1] -\chordmode { c2:m f4:aug g:dim } -@end lilypond - -Seventh chords can be created: - -@lilypond[quote,ragged-right,fragment,verbatim,relative=1] -\chordmode { c1:7 c:m7 c:maj7 c:dim7 c:aug7 } -@end lilypond - -@funindex aug -@funindex dim -@funindex maj -@funindex m - -The table belows shows the actions of the quality modifiers on -triads and seventh chords. The default seventh step added to -chords is a minor or flatted seventh, which makes the dominant -seventh the basic seventh chord. All alterations are relative to -the dominant seventh. A more complete table of modifier usage -is found at @ref{Common chord modifiers}. - -@c @table @code -@multitable @columnfractions .2 .4 .3 - -@item -@b{Modifier} -@tab -@b{Action} -@tab -@b{Example} - -@item -None -@tab -The default action; produces a major triad. -@tab -@lilypond[line-width=4\cm, noragged-right] -\chordmode { - \override Staff.TimeSignature #'stencil = ##f - c1 -} -@end lilypond - -@item -m, m7 -@tab -The minor chord. This modifier lowers the 3rd. -@tab -@lilypond[line-width=4\cm, noragged-right] -\chordmode { - \override Staff.TimeSignature #'stencil = ##f - c1:m c:m7 -} -@end lilypond - - -@item -dim, dim7 -@tab -The diminished chord. This modifier lowers the 3rd, 5th and (if -present) the 7th step. -@tab -@lilypond[line-width=4\cm, noragged-right] -\chordmode { - \override Staff.TimeSignature #'stencil = ##f - c1:dim c:dim7 -} -@end lilypond - -@item -aug -@tab -The augmented chord. This modifier raises the 5th step. -@tab -@lilypond[line-width=4\cm, noragged-right] -\chordmode { - \override Staff.TimeSignature #'stencil = ##f - c1:aug -} -@end lilypond - -@item -maj, maj7 -@tab -The major 7th chord. This modifier adds a raised 7th step. The -@code{7} following @code{maj} is optional. Do NOT use this modifier -to create a major triad. -@tab -@lilypond[line-width=4\cm, noragged-right] -\chordmode { - \override Staff.TimeSignature #'stencil = ##f - c1:maj c:maj7 -} -@end lilypond - -@end multitable - - -@seealso -Notation Reference: -@ref{Common chord modifiers}, -@ref{Extended and altered chords}. - -Snippets: -@rlsr{Chords}. - -@knownissues -Only one quality modifier should be used per chord, typically on the -highest step present in the chord. Chords with more than quality -modifier will be parsed without an error or warning, but the results -are unpredictable. Chords that cannot be achieved with a single -quality modifier should be altered by individual pitches, as described -in @ref{Extended and altered chords}. - - -@node Extended and altered chords -@unnumberedsubsubsec Extended and altered chords - -@cindex extended chords -@cindex altered chords - -Chord structures of arbitrary complexity can be created in chord -mode. The modifier string can be used to extend a chord, add or -remove chord steps, raise or lower chord steps, and add a bass note -or create an inversion. - -The first number following the @code{:} is taken to be the extent -of the chord. The chord is constructed by sequentially adding -thirds to the root until the specified number has been reached. -Note that the seventh step added as part of an extended chord will be the -minor or flatted seventh, not the major seventh. -If the extent is not a third (e.g., 6), thirds are added up to the -highest third below the extent, and then the step of the extent is -added. The largest possible value for the extent is 13. Any -larger value is interpreted as 13. - -@lilypond[quote,ragged-right,fragment,verbatim,relative=1] -\chordmode { - c1:2 c:3 c:4 c:5 - c1:6 c:7 c:8 c:9 - c1:10 c:11 c:12 c:13 - c1:14 -} -@end lilypond - -@noindent -Note that both @code{c:5} and @code{c} produce a C major triad. - -Since an unaltered 11 does not sound good when combined with an -unaltered 13, the 11 is removed from a @code{:13} chord (unless it -is added explicitly). - -@lilypond[quote,ragged-right,fragment,verbatim,relative=1] -\chordmode { - c1:13 c:13.11 c:m13 -} -@end lilypond - -@cindex additions, in chords - -Individual steps can be added to a chord. Additions follow the -extent and are prefixed by a dot (@code{.}). The basic seventh -step added to a chord is the minor or flatted seventh, rather than -the major seventh. - -@lilypond[quote,verbatim,fragment,relative=1] -\chordmode { - c1:5.6 c:3.7.8 c:3.6.13 -} -@end lilypond - -Added steps can be as high as desired. - -@lilypond[quote,verbatim,fragment,relative=1] -\chordmode { - c4:5.15 c:5.20 c:5.25 c:5.30 -} -@end lilypond - -@cindex chord steps, altering - -Added chord steps can be altered by suffixing a @code{-} or @code{+} -sign to the number. To alter a step that is automatically included -as part of the basic chord structure, add it as an altered step. - -@lilypond[quote,verbatim,fragment,relative=1] -\chordmode { - c1:7+ c:5+.3- c:3-.5-.7- -} -@end lilypond - -@cindex removals, in chords - -@funindex ^ - -Following any steps to be added, a series of steps to be removed -is introduced in a modifier string with a prefix of @code{^}. -If more than one step is to be removed, the steps to be -removed are separated by @code{.} following the -initial @code{^}. - -@lilypond[quote,verbatim,fragment,relative=1] -\chordmode { - c1^3 c:7^5 c:9^3 c:9^3.5 c:13.11^3.7 -} -@end lilypond - -@funindex sus - -The modifier @code{sus} can be added to the modifier string to -create suspended chords. This removes the 3rd step from the chord. -Append either @code{2} or @code{4} to add the 2nd or 4th step to the -chord. @code{sus} is equivalent to @code{^3}; @code{sus4} is -equivalent to @code{.4^3}. - -@lilypond[quote,ragged-right,fragment,verbatim] -\chordmode { - c1:sus c:sus2 c:sus4 c:5.4^3 -} -@end lilypond - -@funindex / -@cindex chord inversions -@cindex bass note, for chords - -Inversions (putting a pitch other than the root on the bottom of the -chord) and added bass notes can be specified by appending -@code{/}@var{pitch} to the chord. - -@lilypond[quote,ragged-right,fragment,verbatim, relative=2] -\chordmode { - c1 c/g c/f -} -@end lilypond - -@funindex /+ - -A bass note that is part of the chord can be added, instead of -moved as part of an inversion, by using @code{/+}@var{pitch}. - -@lilypond[quote,ragged-right,fragment,verbatim] -\chordmode { - c1 c/g c/+g -} -@end lilypond - -Chord modifiers that can be used to produce a variety of -standard chords are shown in -@ref{Common chord modifiers}. - - -@seealso -Notation Reference: -@ref{Common chord modifiers}. - -Snippets: -@rlsr{Chords} - - -@knownissues - -Each step can only be present in a chord once. The following -simply produces the augmented chord, since @code{5+} is -interpreted last. - -@lilypond[quote,ragged-right,verbatim,fragment] -\chordmode { c1:5.5-.5+ } -@end lilypond - -Only the second inversion can be created by adding a bass -note. The first inversion requires changing the root of -the chord. - -@lilypond[quote,ragged-right,verbatim,fragment] -\chordmode { - c'1: c':/g e:6-3-^5 e:m6-^5 -} -@end lilypond - -@node Displaying chords -@subsection Displaying chords - -Chords can be displayed by name, in addition to the standard display -as notes on a staff. - -@menu -* Printing chord names:: -* Customizing chord names:: -@end menu - -@node Printing chord names -@unnumberedsubsubsec Printing chord names - -@cindex printing chord names -@cindex chord names -@cindex chords - -Chord names are printed in the @code{ChordNames} context: - -@lilypond[verbatim,quote,relative=1,ragged-right] -\new ChordNames { - \chordmode { - c2 f4. g8 - } -} -@end lilypond - -Chords can be entered as simultaneous notes or through the use of -chord mode. The displayed chord name will be the same, regardless -of the mode of entry, unless there are inversions or added bass notes: - -@lilypond[verbatim,quote,relative=1] -<< - \new ChordNames { - 2 - 1 - \chordmode { - c2 f:sus4 c1:/f - } - } - { - 2 - 1 - \chordmode { - c2 f:sus4 c1:/f - } - } ->> -@end lilypond - -@cindex no chord symbol -@cindex N.C. symbol -@cindex indicating No Chord in ChordNames - -Rests passed to a @code{ChordNames} context will cause the -@code{noChordSymbol} markup to be displayed. - -@lilypond[verbatim, quote, relative=1] -<< - \new ChordNames \chordmode { - c1 - r1 - g1 - c1 - } - \new Score \chordmode { - c1 - r1 - g1 - c1 - } ->> -@end lilypond - -@funindex{\chords} - -@code{\chords @{ ... @}} is a shortcut notation for -@code{\new ChordNames @{ \chordmode @{ ... @} @}}. - -@lilypond[verbatim,quote,ragged-right, relative=1] -\chords { - c2 f4.:m g8:maj7 -} -@end lilypond - -@lilypond[verbatim,quote,ragged-right, relative=1] -\new ChordNames { - \chordmode { - c2 f4.:m g8:maj7 - } -} -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{showing-chords-at-changes.ly} - -@c @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -@c {adding-bar-lines-to-chordnames-context.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{simple-lead-sheet.ly} - - -@seealso -Music Glossary: -@rglos{chord}. - -Notation Reference: -@ref{Writing music in parallel}. - -Snippets: -@rlsr{Chords}. - -Internals Reference: -@rinternals{ChordNames}, -@rinternals{ChordName}, -@rinternals{Chord_name_engraver}, -@rinternals{Volta_engraver}, -@rinternals{Bar_engraver}. - - -@knownissues - -Chords containing inversions or altered bass notes are not named -properly if entered using simultaneous music. - - -@node Customizing chord names -@unnumberedsubsubsec Customizing chord names - -@cindex customizing chord names - -There is no unique system for naming chords. Different musical -traditions use different names for the same set of chords. There -are also different symbols displayed for a given chord name. The -names and symbols displayed for chord names are customizable. - -@cindex jazz chords -@cindex chords, jazz - -The basic chord name layout is a system for Jazz music, proposed -by Klaus Ignatzek (see @ref{Literature list}). The chord naming -system can be modified as described below. An alternate jazz -chord system has been developed using these modifications. -The Ignatzek and alternate -Jazz notation are shown on the chart in @ref{Chord -name chart}. - -@c TODO -- Change this so we don't have a non-verbatim example. -@c Make short example in docs, then move longer example to -@c appendix, where the length of the snippet won't matter. - -In addition to the different naming systems, different note names -are used for the root in different languages. The predefined -variables @code{\germanChords}, @code{\semiGermanChords}, -@code{\italianChords} and @code{\frenchChords} set these variables. -The effect is demonstrated here: - -@lilypondfile[ragged-right]{chord-names-languages.ly} - -If none of the existing settings give the desired output, the chord -name display can be tuned through the following properties. - -@table @code - -@funindex chordRootNamer - -@item chordRootNamer - -The chord name is usually printed as a letter for the root with an -optional alteration. The transformation from pitch to letter is -done by this function. Special note names (for example, the German -@q{H} for a B-chord) can be produced by storing a new function in -this property. - -@funindex majorSevenSymbol - -@item majorSevenSymbol - -This property contains the markup object used to follow the output -of @code{chordRootNamer} to identify a major 7 chord. Predefined -options are @code{whiteTriangleMarkup} and -@code{blackTriangleMarkup}. - -@funindex chordNoteNamer - -@item chordNoteNamer - -When the chord name contains additional pitches other than the root -(e.g., an added bass note), this function is used to print the -additional pitch. By default the pitch is printed using -@code{chordRootNamer}. The @code{chordNoteNamer} property can be set -to a specialized function to change this behavior. For example, the -bass note can be printed in lower case. - -@funindex chordNameSeparator - -@item chordNameSeparator - -Different parts of a chord name are normally separated by a slash. -By setting @code{chordNameSeparator}, you can use any desired markup -for a separator. - -@funindex chordNameExceptions - -@item chordNameExceptions - -This property is a list of pairs. The first item in each pair -is a set of pitches used to identify the steps present in the chord. -The second item is a markup that will follow the @code{chordRootNamer} -output to create the chord name. - -@funindex chordPrefixSpacer -@item chordPrefixSpacer - -The @q{m} for minor chords is usually printed immediately to the -right of the root of the chord. A spacer can be placed between -the root and @q{m} by setting @code{chordPrefixSpacer}. -The spacer is not used when the root is altered. - -@end table - - -@predefined -@funindex major seven symbols -@code{\whiteTriangleMarkup}, -@code{\blackTriangleMarkup}, -@funindex \germanChords -@code{\germanChords}, -@funindex \semiGermanChords -@code{\semiGermanChords}, -@funindex \italianChords -@code{\italianChords}, -@funindex \frenchChords -@code{\frenchChords}. -@endpredefined - - -@snippets - -@cindex exceptions, chord names. -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{chord-name-exceptions.ly} - -@c TODO - tweak snippet to use \blackTriangleMarkup as well -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{chord-name-major7.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{adding-bar-lines-to-chordnames-context.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{volta-below-chords.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{changing-chord-separator.ly} - - -@seealso -Notation Reference: -@ref{Chord name chart}, -@ref{Common chord modifiers}. - -Installed Files: -@file{scm/@/chords@/-ignatzek@/.scm}, -@file{scm/@/chord@/-entry@/.scm}, -@file{ly/@/chord@/-modifier@/-init@/.ly}. - -Snippets: -@rlsr{Chords}. - -@c Internals Reference: -@c @r internals{}. - - -@knownissues - -Chord names are determined from both the pitches that are present -in the chord and the information on the chord structure that may -have been entered in @code{\chordmode}. If the simultaneous pitches -method of entering chords is used, undesired names result from -inversions or bass notes. - -@lilypond[quote,ragged-right,verbatim] -myChords = \relative c' { - \chordmode { c1 c/g c/f } - 1 -} -<< - \new ChordNames { \myChords } - \new Staff { \myChords } ->> -@end lilypond - - -@node Figured bass -@subsection Figured bass - -@lilypondfile[quote]{figured-bass-headword.ly} - -Figured bass notation can be displayed. - -@menu -* Introduction to figured bass:: -* Entering figured bass:: -* Displaying figured bass:: -@end menu - -@node Introduction to figured bass -@unnumberedsubsubsec Introduction to figured bass - -@cindex Basso continuo -@cindex Thorough bass -@cindex Figured bass -@cindex Bass, thorough -@cindex Bass, figured - -@c TODO: musicological blurb about FB - - -LilyPond has support for figured bass, also called thorough bass -or basso continuo: - -@lilypond[quote,ragged-right,verbatim,fragment] -<< - \new Voice { \clef bass dis4 c d ais g fis} - \new FiguredBass { - \figuremode { - < 6 >4 < 7\+ >8 < 6+ [_!] > - < 6 >4 <6 5 [3+] > - < _ >4 < 6 5/>4 - } - } ->> -@end lilypond - -The support for figured bass consists of two parts: there is an -input mode, introduced by @code{\figuremode}, that accepts -entry of bass figures, and there is a context named -@code{FiguredBass} that takes care of displaying -@code{BassFigure} objects. Figured bass can also be displayed -in @code{Staff} contexts. - -@code{\figures@{ ... @}} is a shortcut notation for -@code{\new FiguredBass @{ \figuremode @{ ... @} @}}. - - -Although the support for figured bass may superficially resemble chord -support, it is much simpler. @code{\figuremode} mode simply -stores the figures and the @code{FiguredBass} context prints them -as entered. There is no conversion to pitches. - -@ignore -Figures are created as markup texts. Any of the standard markup -properties can be used to modify the display of figures. For -example, the vertical spacing of the figures may be set with -@code{baseline-skip}. -@end ignore - - -@seealso -Music Glossary: -@rglos{figured bass}. - -Snippets: -@rlsr{Chords} - - -@node Entering figured bass -@unnumberedsubsubsec Entering figured bass - -@code{\figuremode} is used to switch the input mode to figure mode. -More information on different input modes can be -found at @ref{Input modes}. - -In figure mode, a group of bass figures is delimited by -@code{<} and @code{>}. The duration is entered after the @code{>}. - -@lilypond[verbatim,quote,ragged-right,fragment] -\new FiguredBass { - \figuremode { - <6 4>2 - } -} -@end lilypond - - -Accidentals (including naturals) can be added to figures: - -@lilypond[verbatim,quote,ragged-right,fragment] -\figures { - <7! 6+ 4-> <5++> <3--> -} -@end lilypond - -Augmented and diminished steps can be indicated: - -@lilypond[verbatim,quote,ragged-right,fragment] -\figures { - <6\+ 5/> <7/> -} -@end lilypond - -A backward slash through a figure (typically used for raised -sixth steps) can be created: - -@lilypond[verbatim,quote,ragged-right,fragment] -\figures { - <6> <6\\> -} -@end lilypond - -Vertical spaces and brackets can be be included in figures: - -@lilypond[verbatim,quote,ragged-right,fragment] -\figures { - <[12 _!] 8 [6 4]> -} -@end lilypond - -Any text markup can be inserted as a figure: - -@lilypond[verbatim,quote,ragged-right,fragment] -\figures { - <\markup { \tiny \number 6 \super (1) } 5> -} -@end lilypond - -@c NOTE: We need to include notes any time we use extenders to -@c avoid extraneous staff creation due to Staff.use... in -@c \bassFigureExtendersOn - -Continuation lines can be used to indicate repeated figures: - -@lilypond[verbatim,quote,ragged-right,fragment] -<< - { - \clef bass - e4 d c b, - e4 d c b, - } - \figures { - \bassFigureExtendersOn - <6 4>4 <6 3> <7 3> <7 3> - \bassFigureExtendersOff - <6 4>4 <6 3> <7 3> <7 3> - } ->> -@end lilypond - -@noindent -In this case, the extender lines replace existing figures, -unless the continuation lines have been explicitly terminated. - -@lilypond[verbatim,quote,ragged-right,fragment] -<< - \figures { - \bassFigureExtendersOn - <6 4>4 <6 4> <6\! 4\!> <6 4> - } - { - \clef bass - d4 d c c - } ->> -@end lilypond - -The table below summarizes the figure modifiers available. - -@multitable @columnfractions .1 .5 .4 - -@item -@b{Modifier} -@tab -@b{Purpose} -@tab -@b{Example} - -@item -+, -, ! -@tab -Accidentals -@tab -@lilypond[line-width=4\cm] -\figures { - <7! 6+ 4-> <5++> <3--> -} -@end lilypond - -@item -\+, / -@tab -Augmented and diminished steps -@tab -@lilypond[line-width=4\cm] -\figures { - <6\+ 5/> <7/> -} -@end lilypond - -@item -\\ -@tab -Raised sixth step -@tab -@lilypond[line-width=4\cm] -\figures { - <6\\> -} -@end lilypond - -@item -\! -@tab -End of continuation line -@tab -@lilypond[line-width=4\cm] -<< - \figures { - \bassFigureExtendersOn - <6 4> <6 4> <6\! 4\!> <6 4> - } - { - \clef bass - d d c c - } ->> -@end lilypond - -@end multitable - - -@predefined -@cindex figured bass extender lines -@code{\bassFigureExtendersOn}, -@code{\bassFigureExtendersOff}. -@endpredefined - - -@snippets -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{changing-the-positions-of-figured-bass-alterations.ly} - - -@seealso -@c Music Glossary: -@c @rglos{}. -@c -@c Learning Manual: -@c @rlearning{}. -@c -@c Notation Reference: -@c @ref{}. -@c -@c Application Usage: -@c @rprogram{}. -@c -@c Installed Files: -@c @file{}. -@c -Snippets: -@rlsr{Chords}. - -Internals Reference: -@rinternals{BassFigure}, -@rinternals{BassFigureAlignment}, -@rinternals{BassFigureLine}, -@rinternals{BassFigureBracket}, -@rinternals{BassFigureContinuation}, -@rinternals{FiguredBass}. - - -@c @knownissues - - -@node Displaying figured bass -@unnumberedsubsubsec Displaying figured bass - -Figured bass can be displayed using the @code{FiguredBass} context, -or in most staff contexts. - -When displayed in a @code{FiguredBass} context, the vertical location -of the figures is independent of the notes on the staff. - -@lilypond[verbatim,ragged-right,fragment,quote] -<< - \relative c'' { - c4 c'8 r8 c,4 c' - } - \new FiguredBass { - \figuremode { - <4>4 <10 6>8 s8 - <6 4>4 <6 4> - } - } ->> -@end lilypond - -@noindent -In the example above, the @code{FiguredBass} context must be -explicitly instantiated to avoid creating a second (empty) staff. - - -Figured bass can also be added to @code{Staff} contexts -directly. In this case, the vertical position of the -figures is adjusted automatically. - -@lilypond[verbatim,ragged-right,fragment,quote] -<< - \new Staff = myStaff - \figuremode { - <4>4 <10 6>8 s8 - <6 4>4 <6 4> - } - %% Put notes on same Staff as figures - \context Staff = myStaff - { - \clef bass - c4 c'8 r8 c4 c' - } ->> -@end lilypond - - -When added in a @code{Staff} context, figured bass can be displayed above -or below the staff. - -@lilypond[verbatim,ragged-right,fragment,quote] -<< - \new Staff = myStaff - \figuremode { - <4>4 <10 6>8 s8 - \bassFigureStaffAlignmentDown - <6 4>4 <6 4> - } - %% Put notes on same Staff as figures - \context Staff = myStaff - { - \clef bass - c4 c'8 r8 c4 c' - } ->> -@end lilypond - - -@predefined -@cindex figured bass alignment -@code{\bassFigureStaffAlignmentDown}, -@code{\bassFigureStaffAlignmentUp}, -@code{\bassFigureStaffAlignmentNeutral}. -@endpredefined - - -@c @snippets - - -@seealso -@c Music Glossary: -@c @rglos{}. -@c -@c Learning Manual: -@c @rlearning{}. -@c -@c Notation Reference: -@c @ref{}. -@c -@c Application Usage: -@c @rprogram{}. -@c -@c Installed Files: -@c @file{}. -@c -Snippets: -@rlsr{Chords}. - -Internals Reference: -@rinternals{BassFigure}, -@rinternals{BassFigureAlignment}, -@rinternals{BassFigureLine}, -@rinternals{BassFigureBracket}, -@rinternals{BassFigureContinuation}, -@rinternals{FiguredBass}. - - -@knownissues - -To ensure that continuation lines work properly, it is -safest to use the same rhythm in the figure line as in -the bass line. - -@lilypond[verbatim,ragged-right,fragment,quote] -<< - { - \clef bass - \repeat unfold 4 { f16. g32 } f8. es16 d8 es - } - \figures { - \bassFigureExtendersOn - % The extenders are correct here, with the same rhythm as the bass - \repeat unfold 4 { <6 4->16. <6 4->32 } - <5>8. r16 <6>8 <6\! 5-> - } ->> -<< - { - \clef bass - \repeat unfold 4 { f16. g32 } f8. es16 d8 es - } - \figures { - \bassFigureExtendersOn - % The extenders are incorrect here, even though the timing is the same - <6 4->4 <6 4->4 - <5>8. r16 <6>8 <6\! 5-> - } ->> -@end lilypond - -When using extender lines, adjacent figures with the same number in -a different figure location can cause the figure positions to invert. - -@lilypond[verbatim,ragged-right,fragment,quote,relative=1] -<< - { fis4 g g, e' } - \figures { - \bassFigureExtendersOn - <6 5>4 <5\! 4> < 5 _!> <6> - } ->> -@end lilypond - -To avoid this problem, simply turn on extenders after the figure that -begins the extender line and turn them off at the end of the extender line. - -@lilypond[verbatim,ragged-right,fragment,quote,relative=1] -<< - { fis4 g g, e' } - \figures { - <6 5>4 <5 4> - \bassFigureExtendersOn - < 5 _!>4 <6> - \bassFigureExtendersOff - } ->> -@end lilypond - diff --git a/Documentation/user/compile.itely b/Documentation/user/compile.itely deleted file mode 100644 index f597490323..0000000000 --- a/Documentation/user/compile.itely +++ /dev/null @@ -1,532 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of install.itely and ../devel/compiling.itexi - -@c DO NOT TRANSLATE THIS FILE - -@node Compiling from source -@section Compiling from source - -@menu -* Downloading source code:: -* Requirements:: -* Building LilyPond:: -* Building documentation:: -* Testing LilyPond:: -* Problems:: -@end menu - -@node Downloading source code -@subsection Downloading source code - -Download source - -@itemize -@item tarballs from -@uref{http://lilypond.org/download/} by HTTP. -@item tarballs from -@uref{http://download.linuxaudio.org/lilypond/} by HTTP. -@item -GIT from @uref{http://git.sv.gnu.org/gitweb/?p=lilypond.git;a=summary,git.sv.gnu.org} - -@example -git clone git://git.sv.gnu.org/lilypond.git -@end example - -The repository does not contain generated files. To create -@file{configure}, run -@example -./autogen.sh -@end example -@end itemize - -For information on packaging, see @uref{http://lilypond.org/devel}. - - -@node Requirements -@subsection Requirements - -@unnumberedsubsubsec Compilation - -In addition to the packages needed for running LilyPond (see below), you -need the following extra packages for building. - -Below is a full list of packages needed to build LilyPond. However, for -most common distributions there is an easy way of installing most all -build dependencies in one go - -@multitable @columnfractions .5 .5 -@headitem Distribution -@tab Command - -@item Debian, Ubuntu -@tab @code{sudo apt-get build-dep lilypond} - -@item Fedora, RHEL -@tab @code{sudo yum-builddep lilypond} - -@item openSUSE, SLED -@c sorry for the idiosyncratic command, I really asked and argued -@c for "zypper build-dep" :-( -@tab @code{sudo zypper --build-deps-only source-install lilypond} - -@end multitable - -When installing a binary package FOO, you may need to install the -FOO-devel, libFOO-dev or FOO-dev package too. - -@itemize - -@item @uref{http://fontforge.sf.net/,FontForge} 20060125 or newer. - -@item @uref{http://metafont.tutorial.free.fr/,MetaFont} (mf-nowin, mf, mfw or -mfont binaries) and @uref{http://cm.bell-labs.com/who/hobby/MetaPost.html,MetaPost} -(mpost binary), usually packaged with a @LaTeX{} distribution like -tetex or texlive. - -@item @uref{http://www.lcdf.org/~eddietwo/type/#t1utils,t1utils} -(version 1.33 or newer recommended). - -@item New Century Schoolbook fonts, as PFB files. These are shipped with -X11 and Ghostscript, and are named @file{c059033l.pfb} -@file{c059036l.pfb}, @file{c059013l.pfb} and @file{c059016l.pfb}. - -@item @uref{http://www.gnu.org/software/guile/guile.html,GUILE} (version -1.8.2 or newer). If you are installing binary packages, you may need to -install guile-devel or guile-dev or libguile-dev too. - -@item @uref{ftp://ftp.gnu.org/gnu/texinfo/,Texinfo} (version 4.11 or newer). - -@item @uref{http://gcc.gnu.org/, The GNU c++ compiler} (version 3.4 or -newer. 4.x is strongly recommended). - -@item @uref{http://www.python.org,Python} (version 2.4 or newer) - -@item @uref{ftp://ftp.gnu.org/gnu/make/,GNU Make} (version 3.78 or newer). - -@item @uref{http://www.gnu.org/software/gettext/gettext.html,gettext} -(version 0.17 or newer). - -@item @uref{http://www.gnu.org/software/flex/,Flex}. - -@item @uref{http://www.perl.org/,Perl}. - -@item @uref{http://www.gnu.org/software/bison/,GNU Bison}. - -@item All packages required for running, including development packages with -header files and libraries. - -@end itemize - - -@unnumberedsubsubsec Running requirements - -Running LilyPond requires proper installation of the following software - -@itemize - -@item @uref{http://www.freetype.org/,Freetype} (version 2.1.10 or newer). -@item @uref{http://fontconfig.org/,FontConfig} (version 2.2 or newer). -@item @uref{http://www.pango.org/,Pango} (version 1.12 or newer). -@item @uref{http://www.gnu.org/software/guile/guile.html,GUILE} -(version 1.8.2 or newer), or patch 1.8.1 with -@uref{http://lilypond.org/vc/gub.darcs/patches/guile-1.8-rational.patch}. -@item @uref{http://www.python.org,Python} (version 2.4 or newer). -@item @uref{http://www.ghostscript.com,Ghostscript} (version 8.15 or -newer. 8.60 recommended) -@item Dejaview. (This is normally installed by default) -@end itemize - -International fonts are required to create music with international text -or lyrics. - - -@unnumberedsubsubsec Requirements for building documentation - -You can view the documentation online at -@uref{http://lilypond.org/doc/}, but you can also build it locally. -This process requires a successful compile of LilyPond, and some -additional tools and packages: - -@itemize -@item The @uref{http://netpbm.sourceforge.net/,netpbm utilities} -@item ImageMagick -@item International fonts (see input/regression/utf-8.ly for hints -about which font packages are necessary for your platform) -@item Ghostscript 8.60 or newer, or 8.50 with the patch from -@uref{http://bugs.ghostscript.com/show_bug.cgi?id=688154} -and the patch from -@uref{http://bugs.ghostscript.com/show_bug.cgi?id=688017}. -@item @uref{http://www.nongnu.org/texi2html/,Texi2HTML} 1.80 or newer -@item rsync -@end itemize - - -@node Building LilyPond -@subsection Building LilyPond - -@unnumberedsubsubsec Compiling - -To install GNU LilyPond, type - -@example -gunzip -c lilypond-x.y.z | tar xf - -cd lilypond-x.y.z -./configure # run with --help for applicable options -make -su -c 'make install' -@end example - -@noindent -If you are not root, you should choose a @code{--prefix} argument that -points into your home directory, e.g. - -@example -./configure --prefix=$HOME/usr -@end example - - -@unnumberedsubsubsec Compiling for multiple platforms - -If you want to build multiple versions of LilyPond with different -configuration settings, you can use the @code{--enable-config=CONF} -option of @command{configure}. You should use @code{make conf=CONF} -to generate the output in @file{out-CONF}. For example, suppose you -want to build with and without profiling, then use the following for -the normal build - -@example -./configure --prefix=$HOME/usr/ --enable-checking -make -make install -@end example - -and for the profiling version, specify a different configuration - -@example -./configure --prefix=$HOME/usr/ --enable-profiling --enable-config=prof --disable-checking -make conf=prof -make conf=prof install -@end example - - -@unnumberedsubsubsec Compiling outside the source tree - -It is possible to compile LilyPond in a build tree different from the -source tree, with @code{--srcdir} option of @command{configure}: - -@example -mkdir lily-build && cd lily-build -@var{sourcedir}/configure --srcdir=@var{sourcedir} - -@end example - - -@unnumberedsubsubsec Useful @command{make} variables - -If a less verbose build output if desired, the variable -@code{QUIET_BUILD} may be set to @code{1} on @command{make} command -line, or in @file{local.make} at top of the build tree. - - -@node Building documentation -@subsection Building documentation - -This requires a successful compile of LilyPond, or using an external -LilyPond binary. - -@menu -* Commands for building documentation:: Compiling and installing the documentation. -* Building documentation without compiling LilyPond:: Using a LilyPond binary already installed. -@end menu - -@node Commands for building documentation -@unnumberedsubsubsec Commands for building documentation - -The documentation is built by issuing - -@example -make doc -@end example - -After compilation, the HTML documentation tree is available in -@file{out-www/offline-root/}, and can be browsed locally. - -The HTML, PDF and if available Info files can be installed into the -standard documentation path by issuing - -@example -make install-doc -@end example - -@noindent -This also installs Info documentation with images if the installation -prefix is properly set; otherwise, instructions to complete proper -installation of Info documentation are printed on standard output. - -Compilation of documentation in Info format with images can be done -separately by issuing - -@example -make info -@end example - -@noindent -Separate installation of this documentation is done by issuing - -@example -make install-info -@end example - -@noindent -Note that to get the images in Info documentation, @code{install-doc} -target creates symbolic links to HTML and PDF installed documentation -tree in @file{@var{prefix}/share/info}, in order to save disk space, -whereas @code{install-info} copies images in -@file{@var{prefix}/share/info} subdirectories. - -It is possible to build a documentation tree in -@file{out-www/online-root/}, with special processing, so it can be -used on a website with content negotiation for automatic language -selection; this can be achieved by issuing - -@example -make WEB_TARGETS=online doc -@end example - -@noindent -and both @q{offline} and @q{online} targets can be generated by issuing - -@example -make WEB_TARGETS="offline online" doc -@end example - -Several targets are available to clean the documentation build and -help with maintaining documentation; an overview of these targets is -available with - -@example -make help -@end example - -@noindent -from every directory in the build tree. Most targets for -documentation maintenance are available from @file{Documentation/}; -@c FIXME: xref to CG -for more information, see the Contributors' Guide, section -@emph{Documentation work}. - -The makefile variable @code{QUIET_BUILD} may be set to @code{1} for a -less verbose build output, just like for building the programs. - - -@knownissues - -The most time consuming task for building the documentation is running -LilyPond to build images of music, and there cannot be several -simultaneously running @command{lilypond-book} instances, so @code{-j} -@command{make} option does not significantly speed up the build process. -To help speed it up, the makefile variable @var{CPU_COUNT} may be set -in @file{local.make} or on the command line to the number of -@code{.ly} files that LilyPond should process simultaneously, e.g. on -a bi-processor or dual core machine - -@example -make -j3 CPU_COUNT=3 doc -@end example - -@noindent -The recommended value of @var{CPU_COUNT} is one plus the number of -cores or processors, but it is advisable to set it to a smaller value -if your system has not enough RAM to run that many simultaneous -LilyPond instances. - -If source files have changed since last documentation build, output -files that need to be rebuilt are normally rebuilt, even if you do not -run @code{make doc-clean} first. However, building dependencies in the -documentation are so complex that rebuilding of some targets may not -be triggered as they should be; a workaround is to force rebuilding -by touching appropriate files, e.g. - -@example -touch Documentation/user/*.itely -touch input/lsr/*.ly -@end example - - -@node Building documentation without compiling LilyPond -@unnumberedsubsubsec Building documentation without compiling LilyPond - -The documentation can be built locally without compiling LilyPond -binary, if LilyPond is already installed on your system. - -From a fresh Git checkout, do - -@example -./autogen.sh # ignore any warning messages -cp GNUmakefile.in GNUmakefile -make -C python -nice make LILYPOND_EXTERNAL_BINARY=/path/to/bin/lilypond doc -@end example - -Please note that this may break sometimes -- for example, if a new -feature is added with a test file in input/regression, even the latest -development release of LilyPond will fail to build the docs. - -You may build the manual without building all the @file{input/*} -stuff: change directory, for example to @file{Documentation/user}, -issue @code{make doc}, which will build documentation in a -subdirectory @file{out-www} from the source files in current -directory. In this case, if you also want to browse the documentation -in its post-processed form, change back to top directory and issue - -@example -make out=www WWW-post -@end example - -@knownissues - -You may also need to create a script for @command{pngtopnm} and -@code{pnmtopng}. On GNU/Linux, I use this: - -@verbatim -export LD_LIBRARY_PATH=/usr/lib -exec /usr/bin/pngtopnm "$@" -@end verbatim - -On MacOS@tie{}X, I use this: - -@verbatim -export DYLD_LIBRARY_PATH=/sw/lib -exec /sw/bin/pngtopnm "$@" -@end verbatim - - - -@node Testing LilyPond -@subsection Testing LilyPond - -@html - -@end html - -LilyPond comes with an extensive suite that exercises the entire -program. This suite can be used to automatically check the impact of a -change. This is done as follows - -@example -make test-baseline -@emph{## apply your changes, compile} -make check -@end example - -This will leave an HTML page @file{out/test-results/index.html}. This -page shows all the important differences that your change introduced, -whether in the layout, MIDI, performance or error reporting. - -To rerun tests, use - -@example -make test-redo @emph{## redo files differing from baseline} -make test-clean @emph{## remove all test results} -@end example - -@noindent -and then run @code{make check} again. - -For tracking memory usage as part of this test, you will need GUILE -CVS; especially the following patch: -@uref{http://lilypond.org/vc/gub.darcs/patches/guile-1.9-gcstats.patch}. - -For checking the coverage of the test suite, do the following - -@example -./scripts/auxiliar/build-coverage.sh -@emph{# uncovered files, least covered first} -./scripts/auxiliar/coverage.py --summary out-cov/*.cc -@emph{# consecutive uncovered lines, longest first} -./scripts/auxiliar/coverage.py --uncovered out-cov/*.cc -@end example - - -@node Problems -@subsection Problems - -For help and questions use @email{lilypond-user@@gnu.org}. Send bug -reports to @email{bug-lilypond@@gnu.org}. - -Bugs that are not fault of LilyPond are documented here. - -@unnumberedsubsubsec Bison 1.875 - -There is a bug in bison-1.875: compilation fails with "parse error -before `goto'" in line 4922 due to a bug in bison. To fix, please -recompile bison 1.875 with the following fix - -@example -$ cd lily; make out/parser.cc -$ vi +4919 out/parser.cc -# append a semicolon to the line containing "__attribute__ ((__unused__)) -# save -$ make -@end example - - -@unnumberedsubsubsec Solaris - -Solaris7, ./configure - -@file{./configure} needs a POSIX compliant shell. On Solaris7, -@file{/bin/sh} is not yet POSIX compliant, but @file{/bin/ksh} or bash -is. Run configure like - -@example -CONFIG_SHELL=/bin/ksh ksh -c ./configure -@end example - -@noindent -or - -@example -CONFIG_SHELL=/bin/bash bash -c ./configure -@end example - -@unnumberedsubsubsec FreeBSD - -To use system fonts, dejaview must be installed. With the default -port, the fonts are installed in @file{usr/X11R6/lib/X11/fonts/dejavu}. - -Open the file @file{$LILYPONDBASE/usr/etc/fonts/local.conf} and add the -following line just after the @code{} line. (Adjust as necessary -for your hierarchy.) - -@example -/usr/X11R6/lib/X11/fonts -@end example - - -@unnumberedsubsubsec International fonts - -On MacOS@tie{}X, all fonts are installed by default. However, finding all -system fonts requires a bit of configuration; see -@uref{http://lists.gnu.org/archive/html/lilypond-user/2007-03/msg00472.html, -this post} on the @code{lilypond-user} mailing list. - -On Linux, international fonts are installed by different means on -every distribution. We cannot list the exact commands or packages -that are necessary, as each distribution is different, and the exact -package names within each distribution changes. Here are some -hints, though: - -@verbatim -Red Hat Fedora - - taipeifonts fonts-xorg-truetype ttfonts-ja fonts-arabic \ - ttfonts-zh_CN fonts-ja fonts-hebrew - -Debian GNU/Linux - - apt-get install emacs-intl-fonts xfonts-intl-.* \ - ttf-kochi-gothic ttf-kochi-mincho \ - xfonts-bolkhov-75dpi xfonts-cronyx-100dpi xfonts-cronyx-75dpi -@end verbatim - diff --git a/Documentation/user/context-example.eps b/Documentation/user/context-example.eps deleted file mode 100644 index 869417a8aa..0000000000 --- a/Documentation/user/context-example.eps +++ /dev/null @@ -1,3065 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: inkscape 0.42 -%%Pages: 1 -%%Orientation: Portrait -%%BoundingBox: -54 67 257 247 -%%HiResBoundingBox: -54.384930 67.324076 256.78175 246.86789 -%%EndComments -%%Page: 1 1 -0 239 translate -0.80000000 -0.80000000 scale -gsave [1.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000] concat -gsave -0.68627453 0.68627453 0.68627453 setrgbcolor -newpath -20.007931 -1.7765938 moveto -205.39661 -1.7765938 lineto -207.64909 -1.7765938 209.46245 0.036769669 209.46245 2.2892436 curveto -209.46245 131.07783 lineto -209.46245 133.33030 207.64909 135.14366 205.39661 135.14366 curveto -20.007931 135.14366 lineto -17.755457 135.14366 15.942094 133.33030 15.942094 131.07783 curveto -15.942094 2.2892436 lineto -15.942094 0.036769669 17.755457 -1.7765938 20.007931 -1.7765938 curveto -closepath -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.88499999 setlinewidth -1 setlinejoin -0 setlinecap -newpath -20.007931 -1.7765938 moveto -205.39661 -1.7765938 lineto -207.64909 -1.7765938 209.46245 0.036769669 209.46245 2.2892436 curveto -209.46245 131.07783 lineto -209.46245 133.33030 207.64909 135.14366 205.39661 135.14366 curveto -20.007931 135.14366 lineto -17.755457 135.14366 15.942094 133.33030 15.942094 131.07783 curveto -15.942094 2.2892436 lineto -15.942094 0.036769669 17.755457 -1.7765938 20.007931 -1.7765938 curveto -closepath -stroke -gsave -0.84313726 0.84313726 0.84313726 setrgbcolor -newpath -30.771785 79.594475 moveto -195.00948 79.594475 lineto -197.26195 79.594475 199.07532 81.407838 199.07532 83.660312 curveto -199.07532 115.56691 lineto -199.07532 117.81938 197.26195 119.63275 195.00948 119.63275 curveto -30.771785 119.63275 lineto -28.519311 119.63275 26.705948 117.81938 26.705948 115.56691 curveto -26.705948 83.660312 lineto -26.705948 81.407838 28.519311 79.594475 30.771785 79.594475 curveto -closepath -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.88509721 setlinewidth -1 setlinejoin -0 setlinecap -newpath -30.771785 79.594475 moveto -195.00948 79.594475 lineto -197.26195 79.594475 199.07532 81.407838 199.07532 83.660312 curveto -199.07532 115.56691 lineto -199.07532 117.81938 197.26195 119.63275 195.00948 119.63275 curveto -30.771785 119.63275 lineto -28.519311 119.63275 26.705948 117.81938 26.705948 115.56691 curveto -26.705948 83.660312 lineto -26.705948 81.407838 28.519311 79.594475 30.771785 79.594475 curveto -closepath -stroke -gsave -0.84313726 0.84313726 0.84313726 setrgbcolor -newpath -29.540218 15.862391 moveto -195.60888 15.862391 lineto -197.86135 15.862391 199.67471 17.675755 199.67471 19.928229 curveto -199.67471 63.595695 lineto -199.67471 65.848169 197.86135 67.661532 195.60888 67.661532 curveto -29.540218 67.661532 lineto -27.287744 67.661532 25.474380 65.848169 25.474380 63.595695 curveto -25.474380 19.928229 lineto -25.474380 17.675755 27.287744 15.862391 29.540218 15.862391 curveto -closepath -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.88509721 setlinewidth -1 setlinejoin -0 setlinecap -newpath -29.540218 15.862391 moveto -195.60888 15.862391 lineto -197.86135 15.862391 199.67471 17.675755 199.67471 19.928229 curveto -199.67471 63.595695 lineto -199.67471 65.848169 197.86135 67.661532 195.60888 67.661532 curveto -29.540218 67.661532 lineto -27.287744 67.661532 25.474380 65.848169 25.474380 63.595695 curveto -25.474380 19.928229 lineto -25.474380 17.675755 27.287744 15.862391 29.540218 15.862391 curveto -closepath -stroke -gsave -1.0000000 1.0000000 1.0000000 setrgbcolor -newpath -117.71875 42.500000 moveto -113.83588 42.578103 110.65477 45.607155 110.38673 49.481551 curveto -110.11869 53.355946 112.85238 56.794197 116.68750 57.406250 curveto -133.40625 60.281250 lineto -149.31250 63.593750 lineto -149.54010 63.635589 149.76951 63.666872 150.00000 63.687500 curveto -174.11316 67.227299 lineto -176.80789 67.585949 179.48575 66.458490 181.11244 64.280398 curveto -182.73912 62.102307 183.05998 59.214546 181.95109 56.732501 curveto -180.84220 54.250456 178.47714 52.562672 175.76941 52.321049 curveto -151.90625 48.812500 lineto -136.21875 45.531250 lineto -136.12520 45.519066 136.03144 45.508647 135.93750 45.500000 curveto -119.21875 42.625000 lineto -118.72421 42.533144 118.22168 42.491266 117.71875 42.500000 curveto -closepath -eofill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.88499999 setlinewidth -1 setlinejoin -1 setlinecap -newpath -117.71875 42.500000 moveto -113.83588 42.578103 110.65477 45.607155 110.38673 49.481551 curveto -110.11869 53.355946 112.85238 56.794197 116.68750 57.406250 curveto -133.40625 60.281250 lineto -149.31250 63.593750 lineto -149.54010 63.635589 149.76951 63.666872 150.00000 63.687500 curveto -174.11316 67.227299 lineto -176.80789 67.585949 179.48575 66.458490 181.11244 64.280398 curveto -182.73912 62.102307 183.05998 59.214546 181.95109 56.732501 curveto -180.84220 54.250456 178.47714 52.562672 175.76941 52.321049 curveto -151.90625 48.812500 lineto -136.21875 45.531250 lineto -136.12520 45.519066 136.03144 45.508647 135.93750 45.500000 curveto -119.21875 42.625000 lineto -118.72421 42.533144 118.22168 42.491266 117.71875 42.500000 curveto -closepath -stroke -gsave -1.0000000 1.0000000 1.0000000 setrgbcolor -newpath -94.581216 24.203616 moveto -90.530643 24.092562 87.124140 27.218649 86.887678 31.263838 curveto -86.651216 35.309028 89.670291 38.810723 93.706216 39.172366 curveto -118.37500 42.156250 lineto -118.91507 42.215098 119.45993 42.215098 120.00000 42.156250 curveto -150.31250 38.937500 lineto -174.15625 44.937500 lineto -176.80294 45.740486 179.67677 45.021793 181.63391 43.067469 curveto -183.59105 41.113145 184.31388 38.240355 183.51471 35.592507 curveto -182.71553 32.944659 180.52405 30.951468 177.81250 30.406250 curveto -152.68750 24.062500 lineto -151.83039 23.845789 150.94171 23.782312 150.06250 23.875000 curveto -119.21875 27.156250 lineto -95.331216 24.266116 lineto -95.082419 24.232746 94.832104 24.211886 94.581216 24.203616 curveto -94.581216 24.203616 lineto -closepath -eofill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.88499999 setlinewidth -1 setlinejoin -1 setlinecap -newpath -94.581216 24.203616 moveto -90.530643 24.092562 87.124140 27.218649 86.887678 31.263838 curveto -86.651216 35.309028 89.670291 38.810723 93.706216 39.172366 curveto -118.37500 42.156250 lineto -118.91507 42.215098 119.45993 42.215098 120.00000 42.156250 curveto -150.31250 38.937500 lineto -174.15625 44.937500 lineto -176.80294 45.740486 179.67677 45.021793 181.63391 43.067469 curveto -183.59105 41.113145 184.31388 38.240355 183.51471 35.592507 curveto -182.71553 32.944659 180.52405 30.951468 177.81250 30.406250 curveto -152.68750 24.062500 lineto -151.83039 23.845789 150.94171 23.782312 150.06250 23.875000 curveto -119.21875 27.156250 lineto -95.331216 24.266116 lineto -95.082419 24.232746 94.832104 24.211886 94.581216 24.203616 curveto -94.581216 24.203616 lineto -closepath -stroke -gsave -1.0000000 1.0000000 1.0000000 setrgbcolor -newpath -152.56250 87.812500 moveto -152.36383 87.825445 152.16576 87.846295 151.96875 87.875000 curveto -118.31250 91.906250 lineto -94.289106 96.223025 lineto -90.172859 96.714904 87.234727 100.45052 87.726606 104.56677 curveto -88.218485 108.68302 91.954109 111.62115 96.070356 111.12927 curveto -120.09375 106.78125 lineto -151.12500 103.06250 lineto -170.53125 115.28125 lineto -172.79883 116.76854 175.69263 116.91604 178.09969 115.66704 curveto -180.50675 114.41804 182.05221 111.96704 182.14168 109.25670 curveto -182.23115 106.54636 180.85070 103.99878 178.53125 102.59375 curveto -156.84375 88.968750 lineto -155.56582 88.160636 154.07350 87.757600 152.56250 87.812500 curveto -closepath -eofill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.88499999 setlinewidth -1 setlinejoin -1 setlinecap -newpath -152.56250 87.812500 moveto -152.36383 87.825445 152.16576 87.846295 151.96875 87.875000 curveto -118.31250 91.906250 lineto -94.289106 96.223025 lineto -90.172859 96.714904 87.234727 100.45052 87.726606 104.56677 curveto -88.218485 108.68302 91.954109 111.62115 96.070356 111.12927 curveto -120.09375 106.78125 lineto -151.12500 103.06250 lineto -170.53125 115.28125 lineto -172.79883 116.76854 175.69263 116.91604 178.09969 115.66704 curveto -180.50675 114.41804 182.05221 111.96704 182.14168 109.25670 curveto -182.23115 106.54636 180.85070 103.99878 178.53125 102.59375 curveto -156.84375 88.968750 lineto -155.56582 88.160636 154.07350 87.757600 152.56250 87.812500 curveto -closepath -stroke -gsave [3.5370080 0.0000000 0.0000000 3.5370080 -49.697970 -57.425720] concat -gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 31.330290] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.10000000 setlinewidth -1 setlinejoin -1 setlinecap -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -stroke -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 29.572990] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.10000000 setlinewidth -1 setlinejoin -1 setlinecap -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -stroke -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 27.815690] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.10000000 setlinewidth -1 setlinejoin -1 setlinecap -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -stroke -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 26.058390] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.10000000 setlinewidth -1 setlinejoin -1 setlinecap -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -stroke -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 24.301090] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.10000000 setlinewidth -1 setlinejoin -1 setlinecap -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -stroke -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 48.024630] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.10000000 setlinewidth -1 setlinejoin -1 setlinecap -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -stroke -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 46.267330] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.10000000 setlinewidth -1 setlinejoin -1 setlinecap -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -stroke -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 44.510030] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.10000000 setlinewidth -1 setlinejoin -1 setlinecap -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -stroke -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 42.752730] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.10000000 setlinewidth -1 setlinejoin -1 setlinecap -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -stroke -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 40.995430] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.10000000 setlinewidth -1 setlinejoin -1 setlinecap -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -stroke -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 10.000000 33.087590] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -29.256904 -0.10000000 moveto -31.174626 -0.10000000 lineto -31.190289 -0.10000000 31.202899 -0.087390472 31.202899 -0.071727514 curveto -31.202899 0.071727514 lineto -31.202899 0.087390472 31.190289 0.10000000 31.174626 0.10000000 curveto -29.256904 0.10000000 lineto -29.241242 0.10000000 29.228632 0.087390472 29.228632 0.071727514 curveto -29.228632 -0.071727514 lineto -29.228632 -0.087390472 29.241242 -0.10000000 29.256904 -0.10000000 curveto -closepath -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 68.305160 44.510030] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.0000000 -2.0500000 moveto -0.19000000 -2.0500000 lineto -0.19000000 2.0500000 lineto -0.0000000 2.0500000 lineto -0.0000000 -2.0500000 lineto -closepath -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 68.305160 27.815690] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.0000000 -2.0500000 moveto -0.19000000 -2.0500000 lineto -0.19000000 2.0500000 lineto -0.0000000 2.0500000 lineto -0.0000000 -2.0500000 lineto -closepath -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 68.305160 44.510030] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.0000000 -2.0500000 moveto -0.19000000 -2.0500000 lineto -0.19000000 2.0500000 lineto -0.0000000 2.0500000 lineto -0.0000000 -2.0500000 lineto -closepath -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 68.305160 27.815690] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.0000000 -2.0500000 moveto -0.19000000 -2.0500000 lineto -0.19000000 2.0500000 lineto -0.0000000 2.0500000 lineto -0.0000000 -2.0500000 lineto -closepath -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 10.000000 33.087590] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -29.256904 -0.10000000 moveto -31.174626 -0.10000000 lineto -31.190289 -0.10000000 31.202899 -0.087390472 31.202899 -0.071727514 curveto -31.202899 0.071727514 lineto -31.202899 0.087390472 31.190289 0.10000000 31.174626 0.10000000 curveto -29.256904 0.10000000 lineto -29.241242 0.10000000 29.228632 0.087390472 29.228632 0.071727514 curveto -29.228632 -0.071727514 lineto -29.228632 -0.087390472 29.241242 -0.10000000 29.256904 -0.10000000 curveto -closepath -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 48.024630] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.10000000 setlinewidth -1 setlinejoin -1 setlinecap -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -stroke -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 46.267330] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.10000000 setlinewidth -1 setlinejoin -1 setlinecap -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -stroke -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 44.510030] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.10000000 setlinewidth -1 setlinejoin -1 setlinecap -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -stroke -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 42.752730] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.10000000 setlinewidth -1 setlinejoin -1 setlinecap -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -stroke -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 40.995430] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.10000000 setlinewidth -1 setlinejoin -1 setlinecap -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -stroke -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 31.330290] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.10000000 setlinewidth -1 setlinejoin -1 setlinecap -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -stroke -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 29.572990] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.10000000 setlinewidth -1 setlinejoin -1 setlinecap -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -stroke -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 27.815690] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.10000000 setlinewidth -1 setlinejoin -1 setlinecap -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -stroke -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 26.058390] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.10000000 setlinewidth -1 setlinejoin -1 setlinecap -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -stroke -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 25.000000 24.301090] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.10000000 setlinewidth -1 setlinejoin -1 setlinecap -newpath -0.050000001 0.0000000 moveto -24.783028 0.0000000 lineto -stroke -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 24.718840 36.162860] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.014136244 -6.8000002 moveto -0.14586375 -6.8000002 lineto -0.15369523 -6.8000002 0.16000000 -6.7936954 0.16000000 -6.7858639 curveto -0.16000000 6.7858639 lineto -0.16000000 6.7936954 0.15369523 6.8000002 0.14586375 6.8000002 curveto -0.014136244 6.8000002 lineto -0.0063047647 6.8000002 0.0000000 6.7936954 0.0000000 6.7858639 curveto -0.0000000 -6.7858639 lineto -0.0000000 -6.7936954 0.0063047647 -6.8000002 0.014136244 -6.8000002 curveto -closepath -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 46.881680 35.178770] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -2.6061780 0.12601635 moveto -2.6061780 0.52601635 lineto -0.040000000 0.20000000 lineto -0.040000000 -0.20000000 lineto -2.6061780 0.12601635 lineto -closepath -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.079999998 setlinewidth -1 setlinejoin -1 setlinecap -newpath -2.6061780 0.12601635 moveto -2.6061780 0.52601635 lineto -0.040000000 0.20000000 lineto -0.040000000 -0.20000000 lineto -2.6061780 0.12601635 lineto -closepath -stroke -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 33.786500 44.510030] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.91200000 -1.0760000 moveto -0.64800026 -1.0560000 0.43599985 -0.96799985 0.28400000 -0.81600000 curveto -0.21200007 -0.74400007 0.16399996 -0.67199990 0.12000000 -0.57600000 curveto -0.060000060 -0.46000012 0.027999980 -0.33599985 0.0080000000 -0.18400000 curveto -8.0000000e-09 -0.10400008 8.0000000e-09 0.10000008 0.0080000000 0.18000000 curveto -0.027999980 0.33199985 0.060000060 0.45600012 0.12000000 0.57200000 curveto -0.16399996 0.66799990 0.21200007 0.74000007 0.28400000 0.81200000 curveto -0.42399986 0.95199986 0.60800024 1.0360000 0.84400000 1.0680000 curveto -0.91599993 1.0760000 1.0560000 1.0760000 1.1040000 1.0680000 curveto -1.2799998 1.0280000 1.4240001 0.92399982 1.5360000 0.74800000 curveto -1.5879999 0.66800008 1.6440000 0.54399990 1.6720000 0.44400000 curveto -1.7000000 0.35600009 1.7000000 0.33599997 1.6840000 0.30800000 curveto -1.6480000 0.25600005 1.5640000 0.27200006 1.5480000 0.32800000 curveto -1.5120000 0.45599987 1.5000000 0.49600008 1.4600000 0.57600000 curveto -1.3560001 0.79999978 1.1919998 0.92000000 0.99600000 0.92000000 curveto -0.91600008 0.92000000 0.83199994 0.90399997 0.77600000 0.87600000 curveto -0.63600014 0.81200006 0.57599998 0.68399972 0.55600000 0.40400000 curveto -0.54800001 0.31200009 0.54800001 -0.31600010 0.55600000 -0.41200000 curveto -0.56799999 -0.57599984 0.59200004 -0.68000008 0.63600000 -0.75600000 curveto -0.69199994 -0.85199990 0.78800013 -0.90400002 0.92000000 -0.92000000 curveto -1.0519999 -0.93599998 1.1600001 -0.90799993 1.2560000 -0.84000000 curveto -1.2880000 -0.81600002 1.3440000 -0.76399996 1.3720000 -0.72400000 curveto -1.3720000 -0.72400000 1.3960000 -0.69600000 1.3960000 -0.69600000 curveto -1.3960000 -0.69600000 1.3720000 -0.69200000 1.3720000 -0.69200000 curveto -1.2640001 -0.67600002 1.1840000 -0.60399989 1.1480000 -0.49200000 curveto -1.1400000 -0.46800002 1.1400000 -0.45199996 1.1400000 -0.41200000 curveto -1.1400000 -0.36400005 1.1400000 -0.35199997 1.1480000 -0.32400000 curveto -1.1760000 -0.24400008 1.2320001 -0.18799997 1.3200000 -0.15600000 curveto -1.4079999 -0.12400003 1.4960001 -0.14000006 1.5640000 -0.20400000 curveto -1.6359999 -0.26799994 1.6640000 -0.36400010 1.6440000 -0.46800000 curveto -1.5840001 -0.77599969 1.3799997 -1.0120001 1.1160000 -1.0680000 curveto -1.0800000 -1.0760000 0.95999995 -1.0800000 0.91200000 -1.0760000 curveto -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 26.405840 42.752730] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.84400000 -1.0720000 moveto -0.71600013 -1.0600000 0.63999990 -1.0360000 0.54000000 -0.98800000 curveto -0.30400024 -0.87600011 0.11999992 -0.64799974 0.044000000 -0.38400000 curveto -0.0080000360 -0.26400012 -0.0079999880 -0.10799992 0.0040000000 -0.024000000 curveto -0.035999968 0.19599978 0.24400023 0.35999999 0.47200000 0.34800000 curveto -0.66399981 0.33600001 0.81600003 0.17999980 0.84400000 -0.024000000 curveto -0.87599997 -0.25199977 0.70399977 -0.46000002 0.47200000 -0.47600000 curveto -0.45200002 -0.47600000 0.43200000 -0.47600000 0.43200000 -0.48000000 curveto -0.43200000 -0.48000000 0.44000001 -0.50000003 0.44800000 -0.52800000 curveto -0.53599991 -0.77599975 0.68800020 -0.91200001 0.88800000 -0.92400000 curveto -1.2239997 -0.93999998 1.4760001 -0.64799952 1.5360000 -0.17200000 curveto -1.5440000 -0.10000007 1.5440000 0.084000064 1.5360000 0.14800000 curveto -1.4960000 0.47599967 1.3639997 0.76000029 1.1120000 1.0520000 curveto -1.0560001 1.1159999 0.91999992 1.2520001 0.84400000 1.3160000 curveto -0.63200021 1.5039998 0.38399966 1.6800002 0.040000000 1.8920000 curveto --0.051999908 1.9439999 -0.060000008 1.9520000 -0.068000000 1.9680000 curveto --0.087999980 2.0080000 -0.071999956 2.0480000 -0.028000000 2.0680000 curveto --0.0080000200 2.0800000 0.012000020 2.0760000 0.032000000 2.0680000 curveto -0.063999968 2.0480000 0.10400008 2.0320000 0.18800000 1.9920000 curveto -0.77199942 1.7280003 1.2040003 1.4639997 1.5120000 1.1760000 curveto -1.8399997 0.86800031 2.0360000 0.52399963 2.0840000 0.15600000 curveto -2.1479999 -0.31599953 1.9999997 -0.68000021 1.6560000 -0.89200000 curveto -1.4880002 -0.99199990 1.2799998 -1.0560000 1.0360000 -1.0720000 curveto -0.98000006 -1.0760000 0.86799998 -1.0760000 0.84400000 -1.0720000 curveto -2.3920000 -0.69200000 moveto -2.3440000 -0.68400001 2.2880000 -0.63999995 2.2640000 -0.59200000 curveto -2.2320000 -0.53600006 2.2320000 -0.46799994 2.2640000 -0.41200000 curveto -2.2760000 -0.38400003 2.3160000 -0.34399999 2.3440000 -0.33200000 curveto -2.3999999 -0.30000003 2.4680001 -0.30000003 2.5240000 -0.33200000 curveto -2.5520000 -0.34399999 2.5920000 -0.38400003 2.6040000 -0.41200000 curveto -2.6639999 -0.51999989 2.6039999 -0.66000003 2.4800000 -0.68800000 curveto -2.4560000 -0.69599999 2.4200000 -0.69600000 2.3920000 -0.69200000 curveto -2.3920000 0.30800000 moveto -2.3440000 0.31599999 2.2880000 0.36000005 2.2640000 0.40800000 curveto -2.2320000 0.46399994 2.2320000 0.53200006 2.2640000 0.58800000 curveto -2.2760000 0.61599997 2.3160000 0.65600001 2.3440000 0.66800000 curveto -2.3999999 0.69999997 2.4680001 0.69999997 2.5240000 0.66800000 curveto -2.5520000 0.65600001 2.5920000 0.61599997 2.6040000 0.58800000 curveto -2.6639999 0.48000011 2.6039999 0.33999997 2.4800000 0.31200000 curveto -2.4560000 0.30400001 2.4200000 0.30400000 2.3920000 0.30800000 curveto -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 33.786500 27.815690] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.91200000 -1.0760000 moveto -0.64800026 -1.0560000 0.43599985 -0.96799985 0.28400000 -0.81600000 curveto -0.21200007 -0.74400007 0.16399996 -0.67199990 0.12000000 -0.57600000 curveto -0.060000060 -0.46000012 0.027999980 -0.33599985 0.0080000000 -0.18400000 curveto -8.0000000e-09 -0.10400008 8.0000000e-09 0.10000008 0.0080000000 0.18000000 curveto -0.027999980 0.33199985 0.060000060 0.45600012 0.12000000 0.57200000 curveto -0.16399996 0.66799990 0.21200007 0.74000007 0.28400000 0.81200000 curveto -0.42399986 0.95199986 0.60800024 1.0360000 0.84400000 1.0680000 curveto -0.91599993 1.0760000 1.0560000 1.0760000 1.1040000 1.0680000 curveto -1.2799998 1.0280000 1.4240001 0.92399982 1.5360000 0.74800000 curveto -1.5879999 0.66800008 1.6440000 0.54399990 1.6720000 0.44400000 curveto -1.7000000 0.35600009 1.7000000 0.33599997 1.6840000 0.30800000 curveto -1.6480000 0.25600005 1.5640000 0.27200006 1.5480000 0.32800000 curveto -1.5120000 0.45599987 1.5000000 0.49600008 1.4600000 0.57600000 curveto -1.3560001 0.79999978 1.1919998 0.92000000 0.99600000 0.92000000 curveto -0.91600008 0.92000000 0.83199994 0.90399997 0.77600000 0.87600000 curveto -0.63600014 0.81200006 0.57599998 0.68399972 0.55600000 0.40400000 curveto -0.54800001 0.31200009 0.54800001 -0.31600010 0.55600000 -0.41200000 curveto -0.56799999 -0.57599984 0.59200004 -0.68000008 0.63600000 -0.75600000 curveto -0.69199994 -0.85199990 0.78800013 -0.90400002 0.92000000 -0.92000000 curveto -1.0519999 -0.93599998 1.1600001 -0.90799993 1.2560000 -0.84000000 curveto -1.2880000 -0.81600002 1.3440000 -0.76399996 1.3720000 -0.72400000 curveto -1.3720000 -0.72400000 1.3960000 -0.69600000 1.3960000 -0.69600000 curveto -1.3960000 -0.69600000 1.3720000 -0.69200000 1.3720000 -0.69200000 curveto -1.2640001 -0.67600002 1.1840000 -0.60399989 1.1480000 -0.49200000 curveto -1.1400000 -0.46800002 1.1400000 -0.45199996 1.1400000 -0.41200000 curveto -1.1400000 -0.36400005 1.1400000 -0.35199997 1.1480000 -0.32400000 curveto -1.1760000 -0.24400008 1.2320001 -0.18799997 1.3200000 -0.15600000 curveto -1.4079999 -0.12400003 1.4960001 -0.14000006 1.5640000 -0.20400000 curveto -1.6359999 -0.26799994 1.6640000 -0.36400010 1.6440000 -0.46800000 curveto -1.5840001 -0.77599969 1.3799997 -1.0120001 1.1160000 -1.0680000 curveto -1.0800000 -1.0760000 0.95999995 -1.0800000 0.91200000 -1.0760000 curveto -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 26.405840 29.572990] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -1.1800000 -4.9880000 moveto -1.1560000 -4.9760000 1.1359999 -4.9640000 1.0840000 -4.9160000 curveto -0.95600013 -4.7920001 0.83999992 -4.6359998 0.76000000 -4.4720000 curveto -0.68800007 -4.3320001 0.63599998 -4.1599998 0.61200000 -4.0080000 curveto -0.59200002 -3.8920001 0.58800000 -3.8639998 0.59200000 -3.7040000 curveto -0.59200000 -3.2240005 0.65600021 -2.9119995 0.86800000 -2.3640000 curveto -0.89199998 -2.3080001 0.90800000 -2.2600000 0.90400000 -2.2600000 curveto -0.90400000 -2.2560000 0.87199996 -2.2119999 0.83200000 -2.1600000 curveto -0.46000000 -1.6440000 lineto -0.18400028 -1.2320004 0.051999956 -0.90399964 0.0080000000 -0.54800000 curveto -8.0000000e-09 -0.46400008 8.0000000e-09 -0.27999992 0.0080000000 -0.20000000 curveto -0.023999984 -0.084000116 0.056000040 0.044000108 0.096000000 0.15200000 curveto -0.11999998 0.21999993 0.18400004 0.35200006 0.22400000 0.41200000 curveto -0.48399974 0.82799958 0.92000048 1.0720000 1.4040000 1.0720000 curveto -1.4759999 1.0720000 1.5680001 1.0640000 1.6320000 1.0560000 curveto -1.6800000 1.0480000 lineto -1.6800000 1.1600000 lineto -1.6800000 1.3319998 1.6680000 1.5760001 1.6560000 1.6920000 curveto -1.6240000 1.9719997 1.4999998 2.2120001 1.3200000 2.3360000 curveto -1.1760001 2.4359999 0.99599982 2.4599999 0.81600000 2.3960000 curveto -0.72400009 2.3640000 0.61999994 2.2959999 0.56400000 2.2280000 curveto -0.54800000 2.2080000 lineto -0.58800000 2.2120000 lineto -0.81599977 2.2240000 0.99999999 2.0399998 0.98800000 1.8120000 curveto -0.97600001 1.5960002 0.82399980 1.4320000 0.62400000 1.4200000 curveto -0.46800016 1.4160000 0.30799992 1.4920001 0.22400000 1.6240000 curveto -0.16000006 1.7239999 0.14400004 1.8440002 0.18000000 2.0000000 curveto -0.25599992 2.3439997 0.55600038 2.6000000 0.93600000 2.6360000 curveto -1.2519997 2.6680000 1.5320002 2.5119997 1.7080000 2.2000000 curveto -1.7759999 2.0840001 1.8280000 1.9359999 1.8520000 1.7920000 curveto -1.8720000 1.6680001 1.8880000 1.3959997 1.8880000 1.1360000 curveto -1.8880000 0.99600000 lineto -1.9080000 0.98800000 lineto -2.1039998 0.91600007 2.2720001 0.77999981 2.4000000 0.59200000 curveto -2.5879998 0.31200028 2.6279999 -0.044000328 2.5080000 -0.37200000 curveto -2.4840000 -0.43599994 2.4360000 -0.53600006 2.3960000 -0.59600000 curveto -2.3480000 -0.66799993 2.3119999 -0.71200006 2.2520000 -0.77600000 curveto -2.1680001 -0.85599992 2.0839999 -0.91600005 1.9800000 -0.96800000 curveto -1.8520001 -1.0279999 1.7559998 -1.0560000 1.5720000 -1.0760000 curveto -1.5440000 -1.0800000 lineto -1.5240000 -1.1400000 lineto -1.4680001 -1.3239998 1.3679999 -1.6320002 1.2960000 -1.8360000 curveto -1.2600000 -1.9360000 lineto -1.2680000 -1.9480000 lineto -1.3999999 -2.1239998 1.5320001 -2.3240002 1.6200000 -2.4800000 curveto -1.8199998 -2.8319996 1.9240000 -3.1720003 1.9240000 -3.4960000 curveto -1.9240000 -3.9039996 1.6959997 -4.4840004 1.4000000 -4.8440000 curveto -1.3480001 -4.9039999 1.2880000 -4.9640000 1.2640000 -4.9760000 curveto -1.2400000 -4.9920000 1.2000000 -4.9960000 1.1800000 -4.9880000 curveto -1.4800000 -4.2960000 moveto -1.5319999 -4.2160001 1.5720000 -4.1279999 1.5840000 -4.0560000 curveto -1.6080000 -3.9400001 1.6040000 -3.7359998 1.5720000 -3.5680000 curveto -1.5160001 -3.2440003 1.3639997 -2.9079996 1.0840000 -2.5080000 curveto -1.0600000 -2.4720000 lineto -1.0520000 -2.4840000 lineto -1.0400000 -2.5160000 0.95599997 -2.7560001 0.92400000 -2.8480000 curveto -0.83600009 -3.1119997 0.82000001 -3.2000001 0.83200000 -3.3480000 curveto -0.85999997 -3.7159996 1.0400003 -4.0400002 1.3280000 -4.2560000 curveto -1.3640000 -4.2840000 1.4480000 -4.3360000 1.4520000 -4.3360000 curveto -1.4560000 -4.3360000 1.4680000 -4.3200000 1.4800000 -4.2960000 curveto -1.1440000 -1.6520000 moveto -1.2319999 -1.4040002 1.3360000 -1.0720000 1.3280000 -1.0640000 curveto -1.3280000 -1.0640000 1.3080000 -1.0560000 1.2840000 -1.0520000 curveto -1.1960001 -1.0360000 1.0919999 -0.99199996 1.0200000 -0.94800000 curveto -0.81200021 -0.82000013 0.67999996 -0.61999976 0.63600000 -0.37600000 curveto -0.62800001 -0.31200006 0.62800001 -0.17599994 0.64000000 -0.11200000 curveto -0.68799995 0.15999973 0.85200026 0.37200013 1.1120000 0.50400000 curveto -1.1799999 0.53599997 1.2040000 0.53999999 1.2360000 0.53200000 curveto -1.2999999 0.51600002 1.3320000 0.43199994 1.2960000 0.37200000 curveto -1.2840000 0.35600002 1.2760000 0.35199998 1.2440000 0.33600000 curveto -1.1000001 0.25600008 0.99199996 0.13199986 0.95600000 -0.0040000000 curveto -0.92000004 -0.13599987 0.94800008 -0.27600011 1.0280000 -0.38400000 curveto -1.1119999 -0.49599989 1.2520002 -0.56800002 1.4200000 -0.58400000 curveto -1.4400000 -0.58400000 1.4600000 -0.58800000 1.4600000 -0.58400000 curveto -1.4640000 -0.58400000 1.5000000 -0.40399988 1.5240000 -0.28800000 curveto -1.5879999 0.019999692 1.6320000 0.32800028 1.6560000 0.60800000 curveto -1.6680000 0.73599987 1.6720000 0.84000000 1.6720000 0.84400000 curveto -1.6640000 0.84800000 1.5959999 0.85600000 1.5240000 0.86000000 curveto -1.2720003 0.87599998 1.0639998 0.83599989 0.85200000 0.72800000 curveto -0.74000011 0.67200006 0.64799992 0.60799991 0.56400000 0.52000000 curveto -0.44000012 0.39600012 0.36399997 0.26399985 0.33600000 0.11200000 curveto -0.31600002 0.0080001040 0.32400003 -0.17600017 0.35600000 -0.34400000 curveto -0.41999994 -0.64399970 0.55200024 -0.93600036 0.79600000 -1.3000000 curveto -0.89599990 -1.4479999 1.1080000 -1.7360000 1.1120000 -1.7320000 curveto -1.1160000 -1.7320000 1.1280000 -1.6960000 1.1440000 -1.6520000 curveto -1.7520000 -0.54800000 moveto -1.9199998 -0.49200006 2.0520001 -0.38799985 2.1480000 -0.24000000 curveto -2.2719999 -0.056000184 2.3039999 0.17200020 2.2400000 0.37600000 curveto -2.1880001 0.53999984 2.0639999 0.68800008 1.9200000 0.76400000 curveto -1.8800000 0.78400000 lineto -1.8760000 0.78400000 1.8760000 0.73599994 1.8720000 0.68000000 curveto -1.8440000 0.31200037 1.7839999 -0.088000412 1.6920000 -0.50000000 curveto -1.6920000 -0.50000000 1.6760000 -0.56800000 1.6760000 -0.56800000 curveto -1.6760000 -0.56800000 1.6920000 -0.56800000 1.6920000 -0.56800000 curveto -1.7000000 -0.56400000 1.7280000 -0.55599999 1.7520000 -0.54800000 curveto -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 64.140360 44.510030] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath --0.053691003 -2.0000000 moveto -0.053691003 -2.0000000 lineto -0.059956186 -2.0000000 0.064999998 -1.9949562 0.064999998 -1.9886910 curveto -0.064999998 1.3008770 lineto -0.064999998 1.3071422 0.059956186 1.3121860 0.053691003 1.3121860 curveto --0.053691003 1.3121860 lineto --0.059956186 1.3121860 -0.064999998 1.3071422 -0.064999998 1.3008770 curveto --0.064999998 -1.9886910 lineto --0.064999998 -1.9949562 -0.059956186 -2.0000000 -0.053691003 -2.0000000 curveto -closepath -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 62.055900 27.815690] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath --0.053691003 3.1878140 moveto -0.053691003 3.1878140 lineto -0.059956186 3.1878140 0.064999998 3.1928578 0.064999998 3.1991230 curveto -0.064999998 5.4886910 lineto -0.064999998 5.4949562 0.059956186 5.5000000 0.053691003 5.5000000 curveto --0.053691003 5.5000000 lineto --0.059956186 5.5000000 -0.064999998 5.4949562 -0.064999998 5.4886910 curveto --0.064999998 3.1991230 lineto --0.064999998 3.1928578 -0.059956186 3.1878140 -0.053691003 3.1878140 curveto -closepath -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 64.140360 27.815690] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath --0.053691003 -3.5000000 moveto -0.053691003 -3.5000000 lineto -0.059956186 -3.5000000 0.064999998 -3.4949562 0.064999998 -3.4886910 curveto -0.064999998 -0.69912299 lineto -0.064999998 -0.69285781 0.059956186 -0.68781400 0.053691003 -0.68781400 curveto --0.053691003 -0.68781400 lineto --0.059956186 -0.68781400 -0.064999998 -0.69285781 -0.064999998 -0.69912299 curveto --0.064999998 -3.4886910 lineto --0.064999998 -3.4949562 -0.059956186 -3.5000000 -0.053691003 -3.5000000 curveto -closepath -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 61.941680 47.145980] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.71600000 -0.57200000 moveto -0.43200028 -0.53200004 0.17199989 -0.34799976 0.060000000 -0.11200000 curveto -0.016000044 -0.020000092 4.0000000e-09 0.044000096 0.0040000000 0.14000000 curveto -0.0040000000 0.19599994 0.0040000080 0.21200003 0.012000000 0.24400000 curveto -0.063999948 0.43999980 0.23600024 0.56000001 0.47600000 0.57200000 curveto -0.81599966 0.58399999 1.1800001 0.33999969 1.2800000 0.028000000 curveto -1.3000000 -0.035999936 1.3040000 -0.072000072 1.3040000 -0.14400000 curveto -1.3040000 -0.19999994 1.3040000 -0.21600004 1.2960000 -0.25200000 curveto -1.2760000 -0.32399993 1.2319999 -0.40000005 1.1800000 -0.44800000 curveto -1.1160001 -0.50399994 1.0319999 -0.54400002 0.93200000 -0.56400000 curveto -0.88000005 -0.57599999 0.76799995 -0.57600000 0.71600000 -0.57200000 curveto -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 61.941680 33.087590] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.71600000 -0.57200000 moveto -0.43200028 -0.53200004 0.17199989 -0.34799976 0.060000000 -0.11200000 curveto -0.016000044 -0.020000092 4.0000000e-09 0.044000096 0.0040000000 0.14000000 curveto -0.0040000000 0.19599994 0.0040000080 0.21200003 0.012000000 0.24400000 curveto -0.063999948 0.43999980 0.23600024 0.56000001 0.47600000 0.57200000 curveto -0.81599966 0.58399999 1.1800001 0.33999969 1.2800000 0.028000000 curveto -1.3000000 -0.035999936 1.3040000 -0.072000072 1.3040000 -0.14400000 curveto -1.3040000 -0.19999994 1.3040000 -0.21600004 1.2960000 -0.25200000 curveto -1.2760000 -0.32399993 1.2319999 -0.40000005 1.1800000 -0.44800000 curveto -1.1160001 -0.50399994 1.0319999 -0.54400002 0.93200000 -0.56400000 curveto -0.88000005 -0.57599999 0.76799995 -0.57600000 0.71600000 -0.57200000 curveto -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 61.941680 26.937040] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.71600000 -0.57200000 moveto -0.43200028 -0.53200004 0.17199989 -0.34799976 0.060000000 -0.11200000 curveto -0.016000044 -0.020000092 4.0000000e-09 0.044000096 0.0040000000 0.14000000 curveto -0.0040000000 0.19599994 0.0040000080 0.21200003 0.012000000 0.24400000 curveto -0.063999948 0.43999980 0.23600024 0.56000001 0.47600000 0.57200000 curveto -0.81599966 0.58399999 1.1800001 0.33999969 1.2800000 0.028000000 curveto -1.3000000 -0.035999936 1.3040000 -0.072000072 1.3040000 -0.14400000 curveto -1.3040000 -0.19999994 1.3040000 -0.21600004 1.2960000 -0.25200000 curveto -1.2760000 -0.32399993 1.2319999 -0.40000005 1.1800000 -0.44800000 curveto -1.1160001 -0.50399994 1.0319999 -0.54400002 0.93200000 -0.56400000 curveto -0.88000005 -0.57599999 0.76799995 -0.57600000 0.71600000 -0.57200000 curveto -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 55.839270 44.510030] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath --0.053691003 -0.31218600 moveto -0.053691003 -0.31218600 lineto -0.059956186 -0.31218600 0.064999998 -0.30714219 0.064999998 -0.30087701 curveto -0.064999998 2.9886910 lineto -0.064999998 2.9949562 0.059956186 3.0000000 0.053691003 3.0000000 curveto --0.053691003 3.0000000 lineto --0.059956186 3.0000000 -0.064999998 2.9949562 -0.064999998 2.9886910 curveto --0.064999998 -0.30087701 lineto --0.064999998 -0.30714219 -0.059956186 -0.31218600 -0.053691003 -0.31218600 curveto -closepath -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 55.839270 27.815690] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath --0.053691003 2.6878140 moveto -0.053691003 2.6878140 lineto -0.059956186 2.6878140 0.064999998 2.6928578 0.064999998 2.6991230 curveto -0.064999998 4.9886910 lineto -0.064999998 4.9949562 0.059956186 5.0000000 0.053691003 5.0000000 curveto --0.053691003 5.0000000 lineto --0.059956186 5.0000000 -0.064999998 4.9949562 -0.064999998 4.9886910 curveto --0.064999998 2.6991230 lineto --0.064999998 2.6928578 -0.059956186 2.6878140 -0.053691003 2.6878140 curveto -closepath -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 57.923740 27.815690] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath --0.053691003 -4.0000000 moveto -0.053691003 -4.0000000 lineto -0.059956186 -4.0000000 0.064999998 -3.9949562 0.064999998 -3.9886910 curveto -0.064999998 -1.6991230 lineto -0.064999998 -1.6928578 0.059956186 -1.6878140 0.053691003 -1.6878140 curveto --0.053691003 -1.6878140 lineto --0.059956186 -1.6878140 -0.064999998 -1.6928578 -0.064999998 -1.6991230 curveto --0.064999998 -3.9886910 lineto --0.064999998 -3.9949562 -0.059956186 -4.0000000 -0.053691003 -4.0000000 curveto -closepath -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 55.725040 43.631380] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.71600000 -0.57200000 moveto -0.43200028 -0.53200004 0.17199989 -0.34799976 0.060000000 -0.11200000 curveto -0.016000044 -0.020000092 4.0000000e-09 0.044000096 0.0040000000 0.14000000 curveto -0.0040000000 0.19599994 0.0040000080 0.21200003 0.012000000 0.24400000 curveto -0.063999948 0.43999980 0.23600024 0.56000001 0.47600000 0.57200000 curveto -0.81599966 0.58399999 1.1800001 0.33999969 1.2800000 0.028000000 curveto -1.3000000 -0.035999936 1.3040000 -0.072000072 1.3040000 -0.14400000 curveto -1.3040000 -0.19999994 1.3040000 -0.21600004 1.2960000 -0.25200000 curveto -1.2760000 -0.32399993 1.2319999 -0.40000005 1.1800000 -0.44800000 curveto -1.1160001 -0.50399994 1.0319999 -0.54400002 0.93200000 -0.56400000 curveto -0.88000005 -0.57599999 0.76799995 -0.57600000 0.71600000 -0.57200000 curveto -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 55.725040 32.208940] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.71600000 -0.57200000 moveto -0.43200028 -0.53200004 0.17199989 -0.34799976 0.060000000 -0.11200000 curveto -0.016000044 -0.020000092 4.0000000e-09 0.044000096 0.0040000000 0.14000000 curveto -0.0040000000 0.19599994 0.0040000080 0.21200003 0.012000000 0.24400000 curveto -0.063999948 0.43999980 0.23600024 0.56000001 0.47600000 0.57200000 curveto -0.81599966 0.58399999 1.1800001 0.33999969 1.2800000 0.028000000 curveto -1.3000000 -0.035999936 1.3040000 -0.072000072 1.3040000 -0.14400000 curveto -1.3040000 -0.19999994 1.3040000 -0.21600004 1.2960000 -0.25200000 curveto -1.2760000 -0.32399993 1.2319999 -0.40000005 1.1800000 -0.44800000 curveto -1.1160001 -0.50399994 1.0319999 -0.54400002 0.93200000 -0.56400000 curveto -0.88000005 -0.57599999 0.76799995 -0.57600000 0.71600000 -0.57200000 curveto -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 55.725040 25.179740] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.71600000 -0.57200000 moveto -0.43200028 -0.53200004 0.17199989 -0.34799976 0.060000000 -0.11200000 curveto -0.016000044 -0.020000092 4.0000000e-09 0.044000096 0.0040000000 0.14000000 curveto -0.0040000000 0.19599994 0.0040000080 0.21200003 0.012000000 0.24400000 curveto -0.063999948 0.43999980 0.23600024 0.56000001 0.47600000 0.57200000 curveto -0.81599966 0.58399999 1.1800001 0.33999969 1.2800000 0.028000000 curveto -1.3000000 -0.035999936 1.3040000 -0.072000072 1.3040000 -0.14400000 curveto -1.3040000 -0.19999994 1.3040000 -0.21600004 1.2960000 -0.25200000 curveto -1.2760000 -0.32399993 1.2319999 -0.40000005 1.1800000 -0.44800000 curveto -1.1160001 -0.50399994 1.0319999 -0.54400002 0.93200000 -0.56400000 curveto -0.88000005 -0.57599999 0.76799995 -0.57600000 0.71600000 -0.57200000 curveto -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 51.417580 27.815690] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath --0.053691003 2.1878140 moveto -0.053691003 2.1878140 lineto -0.059956186 2.1878140 0.064999998 2.1928578 0.064999998 2.1991230 curveto -0.064999998 4.4886910 lineto -0.064999998 4.4949562 0.059956186 4.5000000 0.053691003 4.5000000 curveto --0.053691003 4.5000000 lineto --0.059956186 4.5000000 -0.064999998 4.4949562 -0.064999998 4.4886910 curveto --0.064999998 2.1991230 lineto --0.064999998 2.1928578 -0.059956186 2.1878140 -0.053691003 2.1878140 curveto -closepath -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 51.303360 31.330290] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.71600000 -0.57200000 moveto -0.43200028 -0.53200004 0.17199989 -0.34799976 0.060000000 -0.11200000 curveto -0.016000044 -0.020000092 4.0000000e-09 0.044000096 0.0040000000 0.14000000 curveto -0.0040000000 0.19599994 0.0040000080 0.21200003 0.012000000 0.24400000 curveto -0.063999948 0.43999980 0.23600024 0.56000001 0.47600000 0.57200000 curveto -0.81599966 0.58399999 1.1800001 0.33999969 1.2800000 0.028000000 curveto -1.3000000 -0.035999936 1.3040000 -0.072000072 1.3040000 -0.14400000 curveto -1.3040000 -0.19999994 1.3040000 -0.21600004 1.2960000 -0.25200000 curveto -1.2760000 -0.32399993 1.2319999 -0.40000005 1.1800000 -0.44800000 curveto -1.1160001 -0.50399994 1.0319999 -0.54400002 0.93200000 -0.56400000 curveto -0.88000005 -0.57599999 0.76799995 -0.57600000 0.71600000 -0.57200000 curveto -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 46.995900 44.510030] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath --0.053691003 0.18781400 moveto -0.053691003 0.18781400 lineto -0.059956186 0.18781400 0.064999998 0.19285781 0.064999998 0.19912299 curveto -0.064999998 2.9886910 lineto -0.064999998 2.9949562 0.059956186 3.0000000 0.053691003 3.0000000 curveto --0.053691003 3.0000000 lineto --0.059956186 3.0000000 -0.064999998 2.9949562 -0.064999998 2.9886910 curveto --0.064999998 0.19912299 lineto --0.064999998 0.19285781 -0.059956186 0.18781400 -0.053691003 0.18781400 curveto -closepath -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 46.995900 27.815690] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath --0.053691003 1.6878140 moveto -0.053691003 1.6878140 lineto -0.059956186 1.6878140 0.064999998 1.6928578 0.064999998 1.6991230 curveto -0.064999998 4.1786911 lineto -0.064999998 4.1849562 0.059956186 4.1900001 0.053691003 4.1900001 curveto --0.053691003 4.1900001 lineto --0.059956186 4.1900001 -0.064999998 4.1849562 -0.064999998 4.1786911 curveto --0.064999998 1.6991230 lineto --0.064999998 1.6928578 -0.059956186 1.6878140 -0.053691003 1.6878140 curveto -closepath -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 49.080380 27.815690] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath --0.053691003 -3.5000000 moveto -0.053691003 -3.5000000 lineto -0.059956186 -3.5000000 0.064999998 -3.4949562 0.064999998 -3.4886910 curveto -0.064999998 -1.1991230 lineto -0.064999998 -1.1928578 0.059956186 -1.1878140 0.053691003 -1.1878140 curveto --0.053691003 -1.1878140 lineto --0.059956186 -1.1878140 -0.064999998 -1.1928578 -0.064999998 -1.1991230 curveto --0.064999998 -3.4886910 lineto --0.064999998 -3.4949562 -0.059956186 -3.5000000 -0.053691003 -3.5000000 curveto -closepath -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 46.881680 44.510030] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.71600000 -0.57200000 moveto -0.43200028 -0.53200004 0.17199989 -0.34799976 0.060000000 -0.11200000 curveto -0.016000044 -0.020000092 4.0000000e-09 0.044000096 0.0040000000 0.14000000 curveto -0.0040000000 0.19599994 0.0040000080 0.21200003 0.012000000 0.24400000 curveto -0.063999948 0.43999980 0.23600024 0.56000001 0.47600000 0.57200000 curveto -0.81599966 0.58399999 1.1800001 0.33999969 1.2800000 0.028000000 curveto -1.3000000 -0.035999936 1.3040000 -0.072000072 1.3040000 -0.14400000 curveto -1.3040000 -0.19999994 1.3040000 -0.21600004 1.2960000 -0.25200000 curveto -1.2760000 -0.32399993 1.2319999 -0.40000005 1.1800000 -0.44800000 curveto -1.1160001 -0.50399994 1.0319999 -0.54400002 0.93200000 -0.56400000 curveto -0.88000005 -0.57599999 0.76799995 -0.57600000 0.71600000 -0.57200000 curveto -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 46.881680 30.451640] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.71600000 -0.57200000 moveto -0.43200028 -0.53200004 0.17199989 -0.34799976 0.060000000 -0.11200000 curveto -0.016000044 -0.020000092 4.0000000e-09 0.044000096 0.0040000000 0.14000000 curveto -0.0040000000 0.19599994 0.0040000080 0.21200003 0.012000000 0.24400000 curveto -0.063999948 0.43999980 0.23600024 0.56000001 0.47600000 0.57200000 curveto -0.81599966 0.58399999 1.1800001 0.33999969 1.2800000 0.028000000 curveto -1.3000000 -0.035999936 1.3040000 -0.072000072 1.3040000 -0.14400000 curveto -1.3040000 -0.19999994 1.3040000 -0.21600004 1.2960000 -0.25200000 curveto -1.2760000 -0.32399993 1.2319999 -0.40000005 1.1800000 -0.44800000 curveto -1.1160001 -0.50399994 1.0319999 -0.54400002 0.93200000 -0.56400000 curveto -0.88000005 -0.57599999 0.76799995 -0.57600000 0.71600000 -0.57200000 curveto -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 46.881680 26.058390] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.71600000 -0.57200000 moveto -0.43200028 -0.53200004 0.17199989 -0.34799976 0.060000000 -0.11200000 curveto -0.016000044 -0.020000092 4.0000000e-09 0.044000096 0.0040000000 0.14000000 curveto -0.0040000000 0.19599994 0.0040000080 0.21200003 0.012000000 0.24400000 curveto -0.063999948 0.43999980 0.23600024 0.56000001 0.47600000 0.57200000 curveto -0.81599966 0.58399999 1.1800001 0.33999969 1.2800000 0.028000000 curveto -1.3000000 -0.035999936 1.3040000 -0.072000072 1.3040000 -0.14400000 curveto -1.3040000 -0.19999994 1.3040000 -0.21600004 1.2960000 -0.25200000 curveto -1.2760000 -0.32399993 1.2319999 -0.40000005 1.1800000 -0.44800000 curveto -1.1160001 -0.50399994 1.0319999 -0.54400002 0.93200000 -0.56400000 curveto -0.88000005 -0.57599999 0.76799995 -0.57600000 0.71600000 -0.57200000 curveto -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 42.487180 44.510030] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath --0.053691003 -3.0000000 moveto -0.053691003 -3.0000000 lineto -0.059956186 -3.0000000 0.064999998 -2.9949562 0.064999998 -2.9886910 curveto -0.064999998 0.30087701 lineto -0.064999998 0.30714219 0.059956186 0.31218600 0.053691003 0.31218600 curveto --0.053691003 0.31218600 lineto --0.059956186 0.31218600 -0.064999998 0.30714219 -0.064999998 0.30087701 curveto --0.064999998 -2.9886910 lineto --0.064999998 -2.9949562 -0.059956186 -3.0000000 -0.053691003 -3.0000000 curveto -closepath -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 42.487180 27.815690] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath --0.053691003 -4.0000000 moveto -0.053691003 -4.0000000 lineto -0.059956186 -4.0000000 0.064999998 -3.9949562 0.064999998 -3.9886910 curveto -0.064999998 -1.6991230 lineto -0.064999998 -1.6928578 0.059956186 -1.6878140 0.053691003 -1.6878140 curveto --0.053691003 -1.6878140 lineto --0.059956186 -1.6878140 -0.064999998 -1.6928578 -0.064999998 -1.6991230 curveto --0.064999998 -3.9886910 lineto --0.064999998 -3.9949562 -0.059956186 -4.0000000 -0.053691003 -4.0000000 curveto -closepath -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 33.786500 44.510030] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.91200000 -1.0760000 moveto -0.64800026 -1.0560000 0.43599985 -0.96799985 0.28400000 -0.81600000 curveto -0.21200007 -0.74400007 0.16399996 -0.67199990 0.12000000 -0.57600000 curveto -0.060000060 -0.46000012 0.027999980 -0.33599985 0.0080000000 -0.18400000 curveto -8.0000000e-09 -0.10400008 8.0000000e-09 0.10000008 0.0080000000 0.18000000 curveto -0.027999980 0.33199985 0.060000060 0.45600012 0.12000000 0.57200000 curveto -0.16399996 0.66799990 0.21200007 0.74000007 0.28400000 0.81200000 curveto -0.42399986 0.95199986 0.60800024 1.0360000 0.84400000 1.0680000 curveto -0.91599993 1.0760000 1.0560000 1.0760000 1.1040000 1.0680000 curveto -1.2799998 1.0280000 1.4240001 0.92399982 1.5360000 0.74800000 curveto -1.5879999 0.66800008 1.6440000 0.54399990 1.6720000 0.44400000 curveto -1.7000000 0.35600009 1.7000000 0.33599997 1.6840000 0.30800000 curveto -1.6480000 0.25600005 1.5640000 0.27200006 1.5480000 0.32800000 curveto -1.5120000 0.45599987 1.5000000 0.49600008 1.4600000 0.57600000 curveto -1.3560001 0.79999978 1.1919998 0.92000000 0.99600000 0.92000000 curveto -0.91600008 0.92000000 0.83199994 0.90399997 0.77600000 0.87600000 curveto -0.63600014 0.81200006 0.57599998 0.68399972 0.55600000 0.40400000 curveto -0.54800001 0.31200009 0.54800001 -0.31600010 0.55600000 -0.41200000 curveto -0.56799999 -0.57599984 0.59200004 -0.68000008 0.63600000 -0.75600000 curveto -0.69199994 -0.85199990 0.78800013 -0.90400002 0.92000000 -0.92000000 curveto -1.0519999 -0.93599998 1.1600001 -0.90799993 1.2560000 -0.84000000 curveto -1.2880000 -0.81600002 1.3440000 -0.76399996 1.3720000 -0.72400000 curveto -1.3720000 -0.72400000 1.3960000 -0.69600000 1.3960000 -0.69600000 curveto -1.3960000 -0.69600000 1.3720000 -0.69200000 1.3720000 -0.69200000 curveto -1.2640001 -0.67600002 1.1840000 -0.60399989 1.1480000 -0.49200000 curveto -1.1400000 -0.46800002 1.1400000 -0.45199996 1.1400000 -0.41200000 curveto -1.1400000 -0.36400005 1.1400000 -0.35199997 1.1480000 -0.32400000 curveto -1.1760000 -0.24400008 1.2320001 -0.18799997 1.3200000 -0.15600000 curveto -1.4079999 -0.12400003 1.4960001 -0.14000006 1.5640000 -0.20400000 curveto -1.6359999 -0.26799994 1.6640000 -0.36400010 1.6440000 -0.46800000 curveto -1.5840001 -0.77599969 1.3799997 -1.0120001 1.1160000 -1.0680000 curveto -1.0800000 -1.0760000 0.95999995 -1.0800000 0.91200000 -1.0760000 curveto -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 26.405840 42.752730] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.84400000 -1.0720000 moveto -0.71600013 -1.0600000 0.63999990 -1.0360000 0.54000000 -0.98800000 curveto -0.30400024 -0.87600011 0.11999992 -0.64799974 0.044000000 -0.38400000 curveto -0.0080000360 -0.26400012 -0.0079999880 -0.10799992 0.0040000000 -0.024000000 curveto -0.035999968 0.19599978 0.24400023 0.35999999 0.47200000 0.34800000 curveto -0.66399981 0.33600001 0.81600003 0.17999980 0.84400000 -0.024000000 curveto -0.87599997 -0.25199977 0.70399977 -0.46000002 0.47200000 -0.47600000 curveto -0.45200002 -0.47600000 0.43200000 -0.47600000 0.43200000 -0.48000000 curveto -0.43200000 -0.48000000 0.44000001 -0.50000003 0.44800000 -0.52800000 curveto -0.53599991 -0.77599975 0.68800020 -0.91200001 0.88800000 -0.92400000 curveto -1.2239997 -0.93999998 1.4760001 -0.64799952 1.5360000 -0.17200000 curveto -1.5440000 -0.10000007 1.5440000 0.084000064 1.5360000 0.14800000 curveto -1.4960000 0.47599967 1.3639997 0.76000029 1.1120000 1.0520000 curveto -1.0560001 1.1159999 0.91999992 1.2520001 0.84400000 1.3160000 curveto -0.63200021 1.5039998 0.38399966 1.6800002 0.040000000 1.8920000 curveto --0.051999908 1.9439999 -0.060000008 1.9520000 -0.068000000 1.9680000 curveto --0.087999980 2.0080000 -0.071999956 2.0480000 -0.028000000 2.0680000 curveto --0.0080000200 2.0800000 0.012000020 2.0760000 0.032000000 2.0680000 curveto -0.063999968 2.0480000 0.10400008 2.0320000 0.18800000 1.9920000 curveto -0.77199942 1.7280003 1.2040003 1.4639997 1.5120000 1.1760000 curveto -1.8399997 0.86800031 2.0360000 0.52399963 2.0840000 0.15600000 curveto -2.1479999 -0.31599953 1.9999997 -0.68000021 1.6560000 -0.89200000 curveto -1.4880002 -0.99199990 1.2799998 -1.0560000 1.0360000 -1.0720000 curveto -0.98000006 -1.0760000 0.86799998 -1.0760000 0.84400000 -1.0720000 curveto -2.3920000 -0.69200000 moveto -2.3440000 -0.68400001 2.2880000 -0.63999995 2.2640000 -0.59200000 curveto -2.2320000 -0.53600006 2.2320000 -0.46799994 2.2640000 -0.41200000 curveto -2.2760000 -0.38400003 2.3160000 -0.34399999 2.3440000 -0.33200000 curveto -2.3999999 -0.30000003 2.4680001 -0.30000003 2.5240000 -0.33200000 curveto -2.5520000 -0.34399999 2.5920000 -0.38400003 2.6040000 -0.41200000 curveto -2.6639999 -0.51999989 2.6039999 -0.66000003 2.4800000 -0.68800000 curveto -2.4560000 -0.69599999 2.4200000 -0.69600000 2.3920000 -0.69200000 curveto -2.3920000 0.30800000 moveto -2.3440000 0.31599999 2.2880000 0.36000005 2.2640000 0.40800000 curveto -2.2320000 0.46399994 2.2320000 0.53200006 2.2640000 0.58800000 curveto -2.2760000 0.61599997 2.3160000 0.65600001 2.3440000 0.66800000 curveto -2.3999999 0.69999997 2.4680001 0.69999997 2.5240000 0.66800000 curveto -2.5520000 0.65600001 2.5920000 0.61599997 2.6040000 0.58800000 curveto -2.6639999 0.48000011 2.6039999 0.33999997 2.4800000 0.31200000 curveto -2.4560000 0.30400001 2.4200000 0.30400000 2.3920000 0.30800000 curveto -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 40.288490 45.388680] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.71600000 -0.57200000 moveto -0.43200028 -0.53200004 0.17199989 -0.34799976 0.060000000 -0.11200000 curveto -0.016000044 -0.020000092 4.0000000e-09 0.044000096 0.0040000000 0.14000000 curveto -0.0040000000 0.19599994 0.0040000080 0.21200003 0.012000000 0.24400000 curveto -0.063999948 0.43999980 0.23600024 0.56000001 0.47600000 0.57200000 curveto -0.81599966 0.58399999 1.1800001 0.33999969 1.2800000 0.028000000 curveto -1.3000000 -0.035999936 1.3040000 -0.072000072 1.3040000 -0.14400000 curveto -1.3040000 -0.19999994 1.3040000 -0.21600004 1.2960000 -0.25200000 curveto -1.2760000 -0.32399993 1.2319999 -0.40000005 1.1800000 -0.44800000 curveto -1.1160001 -0.50399994 1.0319999 -0.54400002 0.93200000 -0.56400000 curveto -0.88000005 -0.57599999 0.76799995 -0.57600000 0.71600000 -0.57200000 curveto -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 33.786500 27.815690] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.91200000 -1.0760000 moveto -0.64800026 -1.0560000 0.43599985 -0.96799985 0.28400000 -0.81600000 curveto -0.21200007 -0.74400007 0.16399996 -0.67199990 0.12000000 -0.57600000 curveto -0.060000060 -0.46000012 0.027999980 -0.33599985 0.0080000000 -0.18400000 curveto -8.0000000e-09 -0.10400008 8.0000000e-09 0.10000008 0.0080000000 0.18000000 curveto -0.027999980 0.33199985 0.060000060 0.45600012 0.12000000 0.57200000 curveto -0.16399996 0.66799990 0.21200007 0.74000007 0.28400000 0.81200000 curveto -0.42399986 0.95199986 0.60800024 1.0360000 0.84400000 1.0680000 curveto -0.91599993 1.0760000 1.0560000 1.0760000 1.1040000 1.0680000 curveto -1.2799998 1.0280000 1.4240001 0.92399982 1.5360000 0.74800000 curveto -1.5879999 0.66800008 1.6440000 0.54399990 1.6720000 0.44400000 curveto -1.7000000 0.35600009 1.7000000 0.33599997 1.6840000 0.30800000 curveto -1.6480000 0.25600005 1.5640000 0.27200006 1.5480000 0.32800000 curveto -1.5120000 0.45599987 1.5000000 0.49600008 1.4600000 0.57600000 curveto -1.3560001 0.79999978 1.1919998 0.92000000 0.99600000 0.92000000 curveto -0.91600008 0.92000000 0.83199994 0.90399997 0.77600000 0.87600000 curveto -0.63600014 0.81200006 0.57599998 0.68399972 0.55600000 0.40400000 curveto -0.54800001 0.31200009 0.54800001 -0.31600010 0.55600000 -0.41200000 curveto -0.56799999 -0.57599984 0.59200004 -0.68000008 0.63600000 -0.75600000 curveto -0.69199994 -0.85199990 0.78800013 -0.90400002 0.92000000 -0.92000000 curveto -1.0519999 -0.93599998 1.1600001 -0.90799993 1.2560000 -0.84000000 curveto -1.2880000 -0.81600002 1.3440000 -0.76399996 1.3720000 -0.72400000 curveto -1.3720000 -0.72400000 1.3960000 -0.69600000 1.3960000 -0.69600000 curveto -1.3960000 -0.69600000 1.3720000 -0.69200000 1.3720000 -0.69200000 curveto -1.2640001 -0.67600002 1.1840000 -0.60399989 1.1480000 -0.49200000 curveto -1.1400000 -0.46800002 1.1400000 -0.45199996 1.1400000 -0.41200000 curveto -1.1400000 -0.36400005 1.1400000 -0.35199997 1.1480000 -0.32400000 curveto -1.1760000 -0.24400008 1.2320001 -0.18799997 1.3200000 -0.15600000 curveto -1.4079999 -0.12400003 1.4960001 -0.14000006 1.5640000 -0.20400000 curveto -1.6359999 -0.26799994 1.6640000 -0.36400010 1.6440000 -0.46800000 curveto -1.5840001 -0.77599969 1.3799997 -1.0120001 1.1160000 -1.0680000 curveto -1.0800000 -1.0760000 0.95999995 -1.0800000 0.91200000 -1.0760000 curveto -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 26.405840 29.572990] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -1.1800000 -4.9880000 moveto -1.1560000 -4.9760000 1.1359999 -4.9640000 1.0840000 -4.9160000 curveto -0.95600013 -4.7920001 0.83999992 -4.6359998 0.76000000 -4.4720000 curveto -0.68800007 -4.3320001 0.63599998 -4.1599998 0.61200000 -4.0080000 curveto -0.59200002 -3.8920001 0.58800000 -3.8639998 0.59200000 -3.7040000 curveto -0.59200000 -3.2240005 0.65600021 -2.9119995 0.86800000 -2.3640000 curveto -0.89199998 -2.3080001 0.90800000 -2.2600000 0.90400000 -2.2600000 curveto -0.90400000 -2.2560000 0.87199996 -2.2119999 0.83200000 -2.1600000 curveto -0.46000000 -1.6440000 lineto -0.18400028 -1.2320004 0.051999956 -0.90399964 0.0080000000 -0.54800000 curveto -8.0000000e-09 -0.46400008 8.0000000e-09 -0.27999992 0.0080000000 -0.20000000 curveto -0.023999984 -0.084000116 0.056000040 0.044000108 0.096000000 0.15200000 curveto -0.11999998 0.21999993 0.18400004 0.35200006 0.22400000 0.41200000 curveto -0.48399974 0.82799958 0.92000048 1.0720000 1.4040000 1.0720000 curveto -1.4759999 1.0720000 1.5680001 1.0640000 1.6320000 1.0560000 curveto -1.6800000 1.0480000 lineto -1.6800000 1.1600000 lineto -1.6800000 1.3319998 1.6680000 1.5760001 1.6560000 1.6920000 curveto -1.6240000 1.9719997 1.4999998 2.2120001 1.3200000 2.3360000 curveto -1.1760001 2.4359999 0.99599982 2.4599999 0.81600000 2.3960000 curveto -0.72400009 2.3640000 0.61999994 2.2959999 0.56400000 2.2280000 curveto -0.54800000 2.2080000 lineto -0.58800000 2.2120000 lineto -0.81599977 2.2240000 0.99999999 2.0399998 0.98800000 1.8120000 curveto -0.97600001 1.5960002 0.82399980 1.4320000 0.62400000 1.4200000 curveto -0.46800016 1.4160000 0.30799992 1.4920001 0.22400000 1.6240000 curveto -0.16000006 1.7239999 0.14400004 1.8440002 0.18000000 2.0000000 curveto -0.25599992 2.3439997 0.55600038 2.6000000 0.93600000 2.6360000 curveto -1.2519997 2.6680000 1.5320002 2.5119997 1.7080000 2.2000000 curveto -1.7759999 2.0840001 1.8280000 1.9359999 1.8520000 1.7920000 curveto -1.8720000 1.6680001 1.8880000 1.3959997 1.8880000 1.1360000 curveto -1.8880000 0.99600000 lineto -1.9080000 0.98800000 lineto -2.1039998 0.91600007 2.2720001 0.77999981 2.4000000 0.59200000 curveto -2.5879998 0.31200028 2.6279999 -0.044000328 2.5080000 -0.37200000 curveto -2.4840000 -0.43599994 2.4360000 -0.53600006 2.3960000 -0.59600000 curveto -2.3480000 -0.66799993 2.3119999 -0.71200006 2.2520000 -0.77600000 curveto -2.1680001 -0.85599992 2.0839999 -0.91600005 1.9800000 -0.96800000 curveto -1.8520001 -1.0279999 1.7559998 -1.0560000 1.5720000 -1.0760000 curveto -1.5440000 -1.0800000 lineto -1.5240000 -1.1400000 lineto -1.4680001 -1.3239998 1.3679999 -1.6320002 1.2960000 -1.8360000 curveto -1.2600000 -1.9360000 lineto -1.2680000 -1.9480000 lineto -1.3999999 -2.1239998 1.5320001 -2.3240002 1.6200000 -2.4800000 curveto -1.8199998 -2.8319996 1.9240000 -3.1720003 1.9240000 -3.4960000 curveto -1.9240000 -3.9039996 1.6959997 -4.4840004 1.4000000 -4.8440000 curveto -1.3480001 -4.9039999 1.2880000 -4.9640000 1.2640000 -4.9760000 curveto -1.2400000 -4.9920000 1.2000000 -4.9960000 1.1800000 -4.9880000 curveto -1.4800000 -4.2960000 moveto -1.5319999 -4.2160001 1.5720000 -4.1279999 1.5840000 -4.0560000 curveto -1.6080000 -3.9400001 1.6040000 -3.7359998 1.5720000 -3.5680000 curveto -1.5160001 -3.2440003 1.3639997 -2.9079996 1.0840000 -2.5080000 curveto -1.0600000 -2.4720000 lineto -1.0520000 -2.4840000 lineto -1.0400000 -2.5160000 0.95599997 -2.7560001 0.92400000 -2.8480000 curveto -0.83600009 -3.1119997 0.82000001 -3.2000001 0.83200000 -3.3480000 curveto -0.85999997 -3.7159996 1.0400003 -4.0400002 1.3280000 -4.2560000 curveto -1.3640000 -4.2840000 1.4480000 -4.3360000 1.4520000 -4.3360000 curveto -1.4560000 -4.3360000 1.4680000 -4.3200000 1.4800000 -4.2960000 curveto -1.1440000 -1.6520000 moveto -1.2319999 -1.4040002 1.3360000 -1.0720000 1.3280000 -1.0640000 curveto -1.3280000 -1.0640000 1.3080000 -1.0560000 1.2840000 -1.0520000 curveto -1.1960001 -1.0360000 1.0919999 -0.99199996 1.0200000 -0.94800000 curveto -0.81200021 -0.82000013 0.67999996 -0.61999976 0.63600000 -0.37600000 curveto -0.62800001 -0.31200006 0.62800001 -0.17599994 0.64000000 -0.11200000 curveto -0.68799995 0.15999973 0.85200026 0.37200013 1.1120000 0.50400000 curveto -1.1799999 0.53599997 1.2040000 0.53999999 1.2360000 0.53200000 curveto -1.2999999 0.51600002 1.3320000 0.43199994 1.2960000 0.37200000 curveto -1.2840000 0.35600002 1.2760000 0.35199998 1.2440000 0.33600000 curveto -1.1000001 0.25600008 0.99199996 0.13199986 0.95600000 -0.0040000000 curveto -0.92000004 -0.13599987 0.94800008 -0.27600011 1.0280000 -0.38400000 curveto -1.1119999 -0.49599989 1.2520002 -0.56800002 1.4200000 -0.58400000 curveto -1.4400000 -0.58400000 1.4600000 -0.58800000 1.4600000 -0.58400000 curveto -1.4640000 -0.58400000 1.5000000 -0.40399988 1.5240000 -0.28800000 curveto -1.5879999 0.019999692 1.6320000 0.32800028 1.6560000 0.60800000 curveto -1.6680000 0.73599987 1.6720000 0.84000000 1.6720000 0.84400000 curveto -1.6640000 0.84800000 1.5959999 0.85600000 1.5240000 0.86000000 curveto -1.2720003 0.87599998 1.0639998 0.83599989 0.85200000 0.72800000 curveto -0.74000011 0.67200006 0.64799992 0.60799991 0.56400000 0.52000000 curveto -0.44000012 0.39600012 0.36399997 0.26399985 0.33600000 0.11200000 curveto -0.31600002 0.0080001040 0.32400003 -0.17600017 0.35600000 -0.34400000 curveto -0.41999994 -0.64399970 0.55200024 -0.93600036 0.79600000 -1.3000000 curveto -0.89599990 -1.4479999 1.1080000 -1.7360000 1.1120000 -1.7320000 curveto -1.1160000 -1.7320000 1.1280000 -1.6960000 1.1440000 -1.6520000 curveto -1.7520000 -0.54800000 moveto -1.9199998 -0.49200006 2.0520001 -0.38799985 2.1480000 -0.24000000 curveto -2.2719999 -0.056000184 2.3039999 0.17200020 2.2400000 0.37600000 curveto -2.1880001 0.53999984 2.0639999 0.68800008 1.9200000 0.76400000 curveto -1.8800000 0.78400000 lineto -1.8760000 0.78400000 1.8760000 0.73599994 1.8720000 0.68000000 curveto -1.8440000 0.31200037 1.7839999 -0.088000412 1.6920000 -0.50000000 curveto -1.6920000 -0.50000000 1.6760000 -0.56800000 1.6760000 -0.56800000 curveto -1.6760000 -0.56800000 1.6920000 -0.56800000 1.6920000 -0.56800000 curveto -1.7000000 -0.56400000 1.7280000 -0.55599999 1.7520000 -0.54800000 curveto -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 40.288490 25.179740] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.71600000 -0.57200000 moveto -0.43200028 -0.53200004 0.17199989 -0.34799976 0.060000000 -0.11200000 curveto -0.016000044 -0.020000092 4.0000000e-09 0.044000096 0.0040000000 0.14000000 curveto -0.0040000000 0.19599994 0.0040000080 0.21200003 0.012000000 0.24400000 curveto -0.063999948 0.43999980 0.23600024 0.56000001 0.47600000 0.57200000 curveto -0.81599966 0.58399999 1.1800001 0.33999969 1.2800000 0.028000000 curveto -1.3000000 -0.035999936 1.3040000 -0.072000072 1.3040000 -0.14400000 curveto -1.3040000 -0.19999994 1.3040000 -0.21600004 1.2960000 -0.25200000 curveto -1.2760000 -0.32399993 1.2319999 -0.40000005 1.1800000 -0.44800000 curveto -1.1160001 -0.50399994 1.0319999 -0.54400002 0.93200000 -0.56400000 curveto -0.88000005 -0.57599999 0.76799995 -0.57600000 0.71600000 -0.57200000 curveto -fill -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 24.718840 36.162860] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -0.014136244 -6.8000002 moveto -0.14586375 -6.8000002 lineto -0.15369523 -6.8000002 0.16000000 -6.7936954 0.16000000 -6.7858639 curveto -0.16000000 6.7858639 lineto -0.16000000 6.7936954 0.15369523 6.8000002 0.14586375 6.8000002 curveto -0.014136244 6.8000002 lineto -0.0063047647 6.8000002 0.0000000 6.7936954 0.0000000 6.7858639 curveto -0.0000000 -6.7858639 lineto -0.0000000 -6.7936954 0.0063047647 -6.8000002 0.014136244 -6.8000002 curveto -closepath -fill -grestore -grestore -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 578.75540 111.50110] concat -grestore -gsave [1.7572990 0.0000000 0.0000000 1.7572990 675.79100 389.23080] concat -grestore -gsave [0.96912200 0.0000000 0.0000000 1.0318620 0.0000000 0.0000000] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -268.55099 81.355152 moveto -262.06179 98.465678 lineto -261.94538 98.776073 261.80959 98.950670 261.65440 98.989470 curveto -261.65440 98.989470 lineto -261.57679 99.008869 261.47979 99.018569 261.36340 99.018570 curveto -261.07240 99.018569 260.85900 98.882771 260.72322 98.611176 curveto -260.70381 98.552977 260.67471 98.475378 260.63592 98.378380 curveto -253.88482 80.511265 lineto -253.67142 79.948693 253.32223 79.609199 252.83724 79.492782 curveto -252.56564 79.434601 251.96425 79.405502 251.03307 79.405483 curveto -251.03307 78.503397 lineto -253.12823 78.561616 254.36011 78.590716 254.72871 78.590696 curveto -256.80447 78.590716 258.19155 78.561616 258.88994 78.503397 curveto -258.88994 79.405483 lineto -257.29916 79.405502 256.50378 79.686797 256.50378 80.249370 curveto -256.50378 80.326986 256.56198 80.501583 256.67838 80.773161 curveto -262.23639 95.468426 lineto -267.56161 81.442450 lineto -267.65859 81.151472 267.70709 80.957476 267.70710 80.860460 curveto -267.70709 80.239688 267.32879 79.803195 266.57222 79.550981 curveto -266.54312 79.550981 lineto -266.27151 79.454001 265.95142 79.405502 265.58284 79.405483 curveto -265.58284 78.503397 lineto -267.09600 78.561616 268.20178 78.590716 268.90018 78.590696 curveto -269.88955 78.590716 270.83043 78.561616 271.72284 78.503397 curveto -271.72284 79.405483 lineto -270.09325 79.424902 269.03596 80.074791 268.55099 81.355152 curveto -fill -grestore -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -286.01071 92.151079 moveto -286.01071 92.151079 lineto -286.01070 94.149252 285.27351 95.798224 283.79915 97.098000 curveto -282.57696 98.164983 281.16078 98.698474 279.55061 98.698475 curveto -277.68824 98.698474 276.11687 98.000086 274.83649 96.603308 curveto -273.69191 95.342331 273.11962 93.858257 273.11962 92.151079 curveto -273.11962 90.172319 273.82770 88.503947 275.24388 87.145959 curveto -276.46606 85.943191 277.91134 85.341801 279.57971 85.341788 curveto -281.46148 85.341801 283.04255 86.088689 284.32294 87.582452 curveto -285.44811 88.882241 286.01070 90.405115 286.01071 92.151079 curveto -279.57971 97.970986 moveto -279.57971 97.970986 lineto -280.87948 97.970987 281.90767 97.427796 282.66427 96.341412 curveto -282.95526 95.817621 lineto -283.38204 94.964038 283.59544 93.664260 283.59545 91.918283 curveto -283.59544 90.055921 283.34324 88.707644 282.83886 87.873448 curveto -282.00467 86.670679 280.90858 86.040189 279.55061 85.981978 curveto -278.34783 85.981990 277.35844 86.466982 276.58246 87.436955 curveto -276.44666 87.592163 276.33026 87.757060 276.23327 87.931647 curveto -275.76767 88.785243 275.53488 90.114120 275.53488 91.918283 curveto -275.53488 93.800058 275.77737 95.167734 276.26237 96.021317 curveto -277.07715 97.282298 278.18293 97.932187 279.57971 97.970986 curveto -fill -grestore -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -292.00522 85.516385 moveto -292.00522 85.516385 lineto -292.00522 96.195915 lineto -292.00521 96.797307 292.12161 97.165900 292.35441 97.301697 curveto -292.35441 97.301697 lineto -292.58720 97.418096 293.14979 97.476295 294.04218 97.476294 curveto -294.04218 98.378380 lineto -292.06341 98.320181 291.05463 98.291081 291.01583 98.291081 curveto -290.74423 98.291081 289.67725 98.320181 287.81488 98.378380 curveto -287.81488 97.476294 lineto -288.95946 97.476295 289.62875 97.388997 289.82275 97.214398 curveto -289.88095 97.156199 lineto -290.01675 97.001003 290.08464 96.671209 290.08465 96.166815 curveto -290.08465 88.339040 lineto -290.08464 87.563063 289.92945 87.097471 289.61905 86.942263 curveto -289.58996 86.942263 lineto -289.58996 86.942263 lineto -289.56086 86.913163 lineto -289.56086 86.913163 lineto -289.30866 86.796776 288.76547 86.738577 287.93128 86.738566 curveto -287.93128 85.836480 lineto -292.00522 85.516385 lineto -292.12161 80.453066 moveto -292.12161 81.170872 291.80152 81.646164 291.16133 81.878943 curveto -290.96733 81.956559 290.77333 81.995358 290.57934 81.995342 curveto -289.90035 81.995358 289.42506 81.684963 289.15346 81.064157 curveto -289.15346 81.035057 lineto -289.07586 80.841078 289.03706 80.647081 289.03706 80.453066 curveto -289.03706 79.851694 289.30866 79.405502 289.85185 79.114488 curveto -290.06524 78.978709 290.30774 78.910810 290.57934 78.910791 curveto -291.23892 78.910810 291.70452 79.201805 291.97612 79.783777 curveto -292.07311 79.997192 292.12161 80.220288 292.12161 80.453066 curveto -fill -grestore -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -305.37190 87.145959 moveto -304.67351 86.428183 303.63562 86.069289 302.25825 86.069277 curveto -301.03607 86.069289 300.05638 86.651279 299.31920 87.815249 curveto -298.65961 88.862841 298.32981 90.269318 298.32982 92.034681 curveto -298.32981 94.828240 299.16400 96.661509 300.83238 97.534493 curveto -301.35616 97.825489 301.88965 97.970987 302.43285 97.970986 curveto -304.33401 97.970987 305.60469 96.952504 306.24489 94.915535 curveto -306.30308 94.721542 306.42918 94.624544 306.62318 94.624540 curveto -306.87537 94.624544 307.00147 94.721542 307.00148 94.915535 curveto -307.00147 95.284132 306.78807 95.807923 306.36129 96.486910 curveto -305.41069 97.961287 304.01392 98.698474 302.17096 98.698475 curveto -300.34738 98.698474 298.80511 97.980687 297.54413 96.545109 curveto -296.45774 95.284132 295.91455 93.800058 295.91456 92.092880 curveto -295.91455 90.094720 296.60324 88.426349 297.98062 87.087760 curveto -299.16400 85.923791 300.58017 85.341801 302.22915 85.341788 curveto -303.83932 85.341801 305.07120 85.778294 305.92480 86.651267 curveto -306.42918 87.175070 306.68137 87.776460 306.68138 88.455438 curveto -306.68137 89.192636 306.36128 89.638828 305.72110 89.794017 curveto -305.60469 89.813425 305.47859 89.823125 305.34280 89.823117 curveto -304.66381 89.823125 304.23701 89.512730 304.06242 88.891931 curveto -304.02362 88.775543 304.00422 88.639745 304.00423 88.484538 curveto -304.00422 87.786160 304.34371 87.359367 305.02271 87.204158 curveto -305.13910 87.165370 305.25550 87.145971 305.37190 87.145959 curveto -fill -grestore -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -319.17554 91.656387 moveto -319.17554 91.656387 lineto -311.05677 91.656387 lineto -311.05677 93.635160 311.34776 95.090136 311.92976 96.021317 curveto -312.86094 97.224099 313.95702 97.873988 315.21800 97.970986 curveto -316.55657 97.970987 317.63325 97.427796 318.44805 96.341412 curveto -318.73904 95.953421 318.97183 95.497529 319.14644 94.973734 curveto -319.20463 94.702142 319.33073 94.566345 319.52473 94.566341 curveto -319.77692 94.566345 319.90302 94.682743 319.90303 94.915535 curveto -319.90302 95.342331 319.63142 95.924321 319.08824 96.661507 curveto -318.29284 97.747891 317.24526 98.397779 315.94549 98.611176 curveto -315.65449 98.669375 315.35379 98.698474 315.04341 98.698475 curveto -313.21983 98.698474 311.66786 98.000086 310.38748 96.603308 curveto -309.22350 95.322932 308.64151 93.780658 308.64151 91.976482 curveto -308.64151 89.958923 309.33990 88.290551 310.73667 86.971362 curveto -311.86185 85.884992 313.18103 85.341801 314.69421 85.341788 curveto -316.88637 85.341801 318.41894 86.272985 319.29194 88.135344 curveto -319.69932 89.008339 319.90302 89.978322 319.90303 91.045297 curveto -319.90302 91.375099 319.83512 91.569095 319.69933 91.627288 curveto -319.64112 91.646694 319.46652 91.656394 319.17554 91.656387 curveto -311.08587 91.045297 moveto -311.08587 91.045297 lineto -317.98246 91.045297 lineto -317.98245 89.202336 317.57506 87.815259 316.76028 86.884064 curveto -316.21708 86.282685 315.52839 85.981990 314.69421 85.981978 curveto -313.70482 85.981990 312.87064 86.437883 312.19165 87.349656 curveto -311.51266 88.222652 311.14406 89.454531 311.08587 91.045297 curveto -fill -grestore -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -326.78097 92.733070 moveto -326.78097 92.733070 lineto -325.11260 92.403281 324.01652 92.083187 323.49273 91.772785 curveto -323.29873 91.675794 323.11443 91.549696 322.93984 91.394491 curveto -322.10565 90.715510 321.68856 89.891024 321.68856 88.921031 curveto -321.68856 87.563063 322.28994 86.573680 323.49273 85.952878 curveto -324.24931 85.545498 325.19990 85.341801 326.34448 85.341788 curveto -327.43086 85.341801 328.34264 85.613397 329.07984 86.156575 curveto -329.29323 85.981990 329.45812 85.826793 329.57453 85.690983 curveto -329.82672 85.458199 330.02071 85.341801 330.15652 85.341788 curveto -330.35051 85.516398 330.45721 85.749194 330.47662 86.040177 curveto -330.47662 88.979230 lineto -330.47661 89.386633 330.41841 89.609729 330.30202 89.648519 curveto -330.27292 89.648519 lineto -330.24382 89.677619 lineto -330.09832 89.677619 lineto -329.88492 89.677628 329.76852 89.590329 329.74913 89.415723 curveto -329.61332 87.456365 328.80823 86.311785 327.33387 85.981978 curveto -327.02346 85.923791 326.69367 85.894692 326.34448 85.894679 curveto -324.52091 85.894692 323.45393 86.457282 323.14353 87.582452 curveto -323.10473 87.757060 323.08533 87.931657 323.08533 88.106244 curveto -323.08533 89.095637 323.83222 89.794026 325.32600 90.201410 curveto -325.61699 90.279017 326.06318 90.376016 326.66458 90.492406 curveto -328.06135 90.764009 329.06043 91.142303 329.66183 91.627288 curveto -329.77822 91.704893 329.88492 91.792192 329.98192 91.889184 curveto -330.79670 92.703976 331.20409 93.625461 331.20410 94.653639 curveto -331.20409 96.302615 330.52511 97.466595 329.16714 98.145584 curveto -328.42994 98.514178 327.54726 98.698474 326.51908 98.698475 curveto -325.25809 98.698474 324.19111 98.281381 323.31813 97.447195 curveto -322.73614 98.116484 lineto -322.34814 98.504478 322.10565 98.698474 322.00865 98.698475 curveto -321.81465 98.523877 321.70795 98.291081 321.68856 98.000086 curveto -321.68856 94.158947 lineto -321.68856 93.732159 321.75645 93.499363 321.89225 93.460558 curveto -321.89225 93.460558 lineto -321.92135 93.431459 lineto -322.06685 93.431459 lineto -322.26085 93.431464 322.38694 93.538162 322.44514 93.751554 curveto -322.44514 93.790358 322.45484 93.848557 322.47424 93.926151 curveto -322.97863 96.176517 323.93892 97.505395 325.35510 97.912787 curveto -325.70429 98.009786 326.09228 98.058285 326.51908 98.058285 curveto -328.26504 98.058285 329.32233 97.447196 329.69093 96.225014 curveto -329.76852 95.972821 329.80732 95.701225 329.80733 95.410227 curveto -329.80732 93.994054 328.79853 93.101669 326.78097 92.733070 curveto -fill -grestore -grestore -gsave [0.96912200 0.0000000 0.0000000 1.0318620 0.0000000 0.0000000] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -262.24407 16.217230 moveto -262.24407 16.217230 lineto -263.77664 16.585835 264.96002 17.497620 265.79422 18.952587 curveto -266.33739 19.922579 266.60899 20.970162 266.60900 22.095338 curveto -266.60899 23.938312 265.96880 25.461187 264.68844 26.663966 curveto -263.62144 27.653350 262.35076 28.148042 260.87640 28.148042 curveto -258.78122 28.148042 257.09345 27.566052 255.81307 26.402070 curveto -255.81307 26.402070 lineto -255.52208 26.111075 lineto -254.82369 27.236257 254.47449 27.789148 254.47450 27.769748 curveto -254.31930 28.021944 254.17380 28.148042 254.03800 28.148042 curveto -253.84400 27.973445 253.73731 27.740649 253.71791 27.449653 curveto -253.71791 21.629745 lineto -253.71791 21.202958 253.78580 20.970162 253.92160 20.931356 curveto -253.92160 20.931356 lineto -253.95070 20.902256 lineto -254.09620 20.902256 lineto -254.30960 20.902263 254.42599 20.999261 254.44540 21.193252 curveto -254.50359 23.055627 255.06618 24.510603 256.13317 25.558183 curveto -256.24957 25.674581 lineto -257.37474 26.722166 258.90732 27.245957 260.84730 27.245957 curveto -262.30226 27.245957 263.39834 26.605768 264.13554 25.325387 curveto -264.54292 24.627001 264.74662 23.880113 264.74663 23.084722 curveto -264.74662 22.037144 264.44593 21.144759 263.84455 20.407564 curveto -263.32075 19.709183 262.56416 19.233891 261.57478 18.981687 curveto -261.54568 18.952587 lineto -261.54568 18.971995 261.48748 18.962295 261.37109 18.923487 curveto -258.96552 18.341506 257.68514 18.021411 257.52995 17.963203 curveto -255.99737 17.439421 254.89159 16.440338 254.21260 14.965950 curveto -253.88280 14.228775 253.71791 13.452788 253.71791 12.637986 curveto -253.71791 10.872631 254.38719 9.4273548 255.72578 8.3021544 curveto -256.77335 7.4291882 257.99553 6.9926955 259.39232 6.9926750 curveto -261.04128 6.9926955 262.46716 7.5455863 263.66995 8.6513489 curveto -264.04825 9.0296430 lineto -265.06673 7.3709691 lineto -265.20251 7.1187934 265.34801 6.9926955 265.50322 6.9926750 curveto -265.69721 7.1672926 265.80390 7.4000887 265.82332 7.6910640 curveto -265.82332 13.540072 lineto -265.82330 13.947479 265.76510 14.170576 265.64872 14.209362 curveto -265.61962 14.209362 lineto -265.59052 14.238461 lineto -265.44502 14.238461 lineto -265.25101 14.238474 265.13462 14.122076 265.09583 13.889267 curveto -264.55262 9.8735474 262.66116 7.8462813 259.42142 7.8074622 curveto -258.02463 7.8074819 256.95765 8.3700725 256.22047 9.4952357 curveto -256.19137 9.5243352 lineto -255.78397 10.164542 255.58027 10.862931 255.58028 11.619502 curveto -255.58027 12.899897 256.09437 13.918380 257.12255 14.674954 curveto -257.52994 14.985362 257.99553 15.198758 258.51933 15.315144 curveto -262.24407 16.217230 lineto -fill -grestore -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -278.67622 16.275429 moveto -277.97782 15.557652 276.93994 15.198758 275.56257 15.198746 curveto -274.34038 15.198758 273.36070 15.780749 272.62352 16.944719 curveto -271.96392 17.992312 271.63413 19.398788 271.63413 21.164152 curveto -271.63413 23.957712 272.46832 25.790981 274.13669 26.663966 curveto -274.66048 26.954962 275.19397 27.100459 275.73717 27.100459 curveto -277.63833 27.100459 278.90901 26.081976 279.54921 24.045007 curveto -279.60740 23.851014 279.73349 23.754015 279.92750 23.754012 curveto -280.17969 23.754015 280.30578 23.851014 280.30580 24.045007 curveto -280.30578 24.413604 280.09239 24.937396 279.66561 25.616382 curveto -278.71501 27.090760 277.31823 27.827947 275.47527 27.827948 curveto -273.65170 27.827947 272.10942 27.110159 270.84845 25.674581 curveto -269.76206 24.413604 269.21887 22.929529 269.21887 21.222351 curveto -269.21887 19.224191 269.90756 17.555819 271.28494 16.217230 curveto -272.46832 15.053261 273.88449 14.471270 275.53347 14.471257 curveto -277.14364 14.471270 278.37552 14.907763 279.22911 15.780737 curveto -279.73349 16.304540 279.98569 16.905930 279.98570 17.584909 curveto -279.98569 18.322106 279.66560 18.768299 279.02542 18.923487 curveto -278.90901 18.942896 278.78291 18.952596 278.64712 18.952587 curveto -277.96812 18.952596 277.54133 18.642201 277.36674 18.021402 curveto -277.32793 17.905013 277.30853 17.769215 277.30854 17.614008 curveto -277.30853 16.915630 277.64803 16.488837 278.32703 16.333628 curveto -278.44342 16.294840 278.55981 16.275440 278.67622 16.275429 curveto -fill -grestore -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -294.83693 21.280550 moveto -294.83693 21.280550 lineto -294.83691 23.278723 294.09973 24.927696 292.62536 26.227473 curveto -291.40317 27.294456 289.98699 27.827947 288.37683 27.827948 curveto -286.51445 27.827947 284.94308 27.129559 283.66270 25.732780 curveto -282.51812 24.471803 281.94583 22.987728 281.94583 21.280550 curveto -281.94583 19.301790 282.65392 17.633418 284.07010 16.275429 curveto -285.29227 15.072660 286.73755 14.471270 288.40593 14.471257 curveto -290.28769 14.471270 291.86876 15.218158 293.14915 16.711922 curveto -294.27432 18.011711 294.83691 19.534586 294.83693 21.280550 curveto -288.40593 27.100459 moveto -288.40593 27.100459 lineto -289.70570 27.100459 290.73388 26.557268 291.49048 25.470885 curveto -291.78148 24.947093 lineto -292.20826 24.093510 292.42165 22.793731 292.42167 21.047754 curveto -292.42165 19.185392 292.16946 17.837114 291.66508 17.002918 curveto -290.83088 15.800148 289.73480 15.169659 288.37683 15.111447 curveto -287.17404 15.111460 286.18466 15.596452 285.40868 16.566425 curveto -285.27287 16.721633 285.15648 16.886530 285.05948 17.061117 curveto -284.59388 17.914713 284.36109 19.243591 284.36109 21.047754 curveto -284.36109 22.929529 284.60358 24.297206 285.08858 25.150790 curveto -285.90336 26.411771 287.00914 27.061660 288.40593 27.100459 curveto -fill -grestore -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -300.68593 25.238088 moveto -300.68593 25.839480 300.80233 26.208074 301.03513 26.343871 curveto -301.03513 26.343871 lineto -301.06423 26.372970 lineto -301.33582 26.528169 301.94691 26.605768 302.89750 26.605767 curveto -303.50859 26.605767 lineto -303.50859 27.507853 lineto -302.73259 27.449654 301.50072 27.420554 299.81295 27.420554 curveto -299.87114 27.420554 298.76536 27.449654 296.49560 27.507853 curveto -296.49560 26.605767 lineto -297.64018 26.605768 298.30947 26.518469 298.50347 26.343871 curveto -298.56167 26.285672 lineto -298.69746 26.130476 298.76536 25.800681 298.76536 25.296287 curveto -298.76536 17.497610 lineto -298.76536 16.741033 298.61986 16.275440 298.32887 16.100832 curveto -298.09607 15.965046 297.67898 15.887447 297.07759 15.868036 curveto -296.49560 15.868036 lineto -296.49560 14.965950 lineto -300.54044 14.645855 lineto -300.54044 17.846804 lineto -301.06422 16.217241 301.92751 15.198758 303.13030 14.791352 curveto -303.44068 14.694367 303.77048 14.645868 304.11968 14.645855 curveto -305.03146 14.645868 305.68135 14.985362 306.06935 15.664339 curveto -306.20514 15.897147 306.27304 16.149342 306.27305 16.420927 curveto -306.27304 17.099927 305.95294 17.517020 305.31276 17.672207 curveto -305.21575 17.691617 305.11876 17.701316 305.02177 17.701307 curveto -304.42037 17.701316 304.03237 17.439421 303.85778 16.915619 curveto -303.79958 16.779832 303.77048 16.624634 303.77049 16.450026 curveto -303.77048 15.926246 303.99357 15.547952 304.43978 15.315144 curveto -304.40097 15.295757 304.29427 15.286057 304.11968 15.286045 curveto -302.81989 15.286057 301.85961 16.081444 301.23883 17.672207 curveto -300.87023 18.584002 300.68593 19.612185 300.68593 20.756759 curveto -300.68593 25.238088 lineto -fill -grestore -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -318.39664 20.785858 moveto -318.39664 20.785858 lineto -310.27787 20.785858 lineto -310.27787 22.764632 310.56886 24.219608 311.15086 25.150790 curveto -312.08204 26.353572 313.17812 27.003461 314.43910 27.100459 curveto -315.77768 27.100459 316.85436 26.557268 317.66915 25.470885 curveto -317.96014 25.082893 318.19293 24.627001 318.36754 24.103206 curveto -318.42573 23.831614 318.55183 23.695816 318.74584 23.695812 curveto -318.99802 23.695816 319.12412 23.812214 319.12413 24.045007 curveto -319.12412 24.471803 318.85252 25.053794 318.30934 25.790980 curveto -317.51395 26.877363 316.46636 27.527252 315.16659 27.740649 curveto -314.87559 27.798848 314.57490 27.827947 314.26451 27.827948 curveto -312.44093 27.827947 310.88896 27.129559 309.60858 25.732780 curveto -308.44460 24.452404 307.86261 22.910129 307.86261 21.105953 curveto -307.86261 19.088393 308.56100 17.420021 309.95778 16.100832 curveto -311.08295 15.014461 312.40213 14.471270 313.91531 14.471257 curveto -316.10747 14.471270 317.64004 15.402455 318.51304 17.264814 curveto -318.92042 18.137809 319.12412 19.107793 319.12413 20.174768 curveto -319.12412 20.504570 319.05622 20.698566 318.92043 20.756759 curveto -318.86222 20.776165 318.68763 20.785865 318.39664 20.785858 curveto -310.30697 20.174768 moveto -310.30697 20.174768 lineto -317.20356 20.174768 lineto -317.20355 18.331806 316.79616 16.944729 315.98138 16.013533 curveto -315.43818 15.412155 314.74949 15.111460 313.91531 15.111447 curveto -312.92592 15.111460 312.09174 15.567352 311.41275 16.479126 curveto -310.73376 17.352122 310.36517 18.584002 310.30697 20.174768 curveto -fill -grestore -grestore -gsave [0.96912200 0.0000000 0.0000000 1.0318620 0.0000000 0.0000000] concat -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath --61.621001 60.450596 moveto --61.621001 60.450596 lineto --60.088436 60.819201 -58.905056 61.730986 -58.070856 63.185953 curveto --57.527679 64.155945 -57.256084 65.203528 -57.256069 66.328704 curveto --57.256084 68.171678 -57.896273 69.694553 -59.176639 70.897332 curveto --60.243634 71.886716 -61.514313 72.381408 -62.988679 72.381409 curveto --65.083853 72.381408 -66.771625 71.799418 -68.052000 70.635436 curveto --68.052000 70.635436 lineto --68.342995 70.344441 lineto --69.041387 71.469623 -69.390581 72.022514 -69.390579 72.003114 curveto --69.545778 72.255310 -69.691276 72.381408 -69.827072 72.381409 curveto --70.021070 72.206811 -70.127769 71.974015 -70.147167 71.683019 curveto --70.147167 65.863111 lineto --70.147168 65.436324 -70.079269 65.203528 -69.943470 65.164722 curveto --69.943470 65.164722 lineto --69.914370 65.135622 lineto --69.768873 65.135622 lineto --69.555478 65.135629 -69.439080 65.232627 -69.419678 65.426618 curveto --69.361481 67.288993 -68.798891 68.743969 -67.731905 69.791549 curveto --67.615506 69.907947 lineto --66.490329 70.955532 -64.957755 71.479323 -63.017779 71.479323 curveto --61.562812 71.479323 -60.466730 70.839134 -59.729530 69.558753 curveto --59.322149 68.860367 -59.118453 68.113479 -59.118440 67.318088 curveto --59.118453 66.270510 -59.419148 65.378125 -60.020526 64.640930 curveto --60.544329 63.942549 -61.300916 63.467257 -62.290290 63.215053 curveto --62.319390 63.185953 lineto --62.319399 63.205361 -62.377598 63.195661 -62.493987 63.156853 curveto --64.899556 62.574872 -66.179935 62.254777 -66.335127 62.196569 curveto --67.867706 61.672787 -68.973488 60.673704 -69.652474 59.199316 curveto --69.982271 58.462141 -70.147168 57.686154 -70.147167 56.871352 curveto --70.147168 55.105997 -69.477879 53.660721 -68.139298 52.535520 curveto --67.091719 51.662554 -65.869540 51.226062 -64.472756 51.226041 curveto --62.823791 51.226062 -61.397915 51.778952 -60.195123 52.884715 curveto --59.816829 53.263009 lineto --58.798345 51.604335 lineto --58.662560 51.352159 -58.517063 51.226062 -58.361852 51.226041 curveto --58.167869 51.400659 -58.061170 51.633455 -58.041757 51.924430 curveto --58.041757 57.773438 lineto --58.041771 58.180845 -58.099970 58.403942 -58.216354 58.442728 curveto --58.245454 58.442728 lineto --58.274553 58.471827 lineto --58.420051 58.471827 lineto --58.614061 58.471840 -58.730459 58.355442 -58.769245 58.122633 curveto --59.312449 54.106913 -61.203918 52.079647 -64.443656 52.040828 curveto --65.840440 52.040848 -66.907422 52.603439 -67.644606 53.728602 curveto --67.673706 53.757701 lineto --68.081103 54.397909 -68.284799 55.096297 -68.284796 55.852868 curveto --68.284799 57.133263 -67.770708 58.151746 -66.742520 58.908320 curveto --66.335132 59.218728 -65.869540 59.432124 -65.345742 59.548510 curveto --61.621001 60.450596 lineto -fill -grestore -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath --50.601367 60.101402 moveto --50.601367 60.101402 lineto --50.601367 68.191074 lineto --50.601372 70.131045 -50.038781 71.168928 -48.913593 71.304725 curveto --48.836001 71.324126 -48.748703 71.333825 -48.651697 71.333825 curveto --47.817518 71.333825 -47.235528 70.790634 -46.905725 69.704251 curveto --46.769936 69.238660 -46.702037 68.695469 -46.702028 68.074676 curveto --46.702028 66.474201 lineto --45.974540 66.474201 lineto --45.974540 68.132875 lineto --45.974549 69.723652 -46.420742 70.868233 -47.313119 71.566621 curveto --47.739920 71.896416 -48.254011 72.061313 -48.855394 72.061314 curveto --50.484974 72.061313 -51.600455 71.450223 -52.201842 70.228042 curveto --52.473441 69.646054 -52.609238 68.947665 -52.609235 68.132875 curveto --52.609235 60.101402 lineto --55.082696 60.101402 lineto --55.082696 59.461212 lineto --53.356126 59.383625 -52.211545 58.297243 -51.648950 56.202063 curveto --51.454958 55.464891 -51.348259 54.679204 -51.328855 53.845000 curveto --50.601367 53.845000 lineto --50.601367 59.199316 lineto --46.440132 59.199316 lineto --46.440132 60.101402 lineto --50.601367 60.101402 lineto -fill -grestore -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath --34.635265 69.529653 moveto --35.120267 70.732435 -35.973852 71.518122 -37.196025 71.886716 curveto --37.584025 72.003114 -38.001118 72.061313 -38.447305 72.061314 curveto --40.096283 72.061313 -41.366962 71.663620 -42.259345 70.868232 curveto --42.821938 70.363842 -43.103233 69.733352 -43.103232 68.976762 curveto --43.103233 67.482990 -42.278747 66.289910 -40.629771 65.397518 curveto --40.493977 65.319926 -40.348479 65.252027 -40.193278 65.193821 curveto --39.009902 64.631237 -37.273631 64.282043 -34.984460 64.146238 curveto --34.838962 64.146238 lineto --34.838962 63.069555 lineto --34.838971 61.420591 -35.430661 60.285710 -36.614034 59.664908 curveto --37.021435 59.451524 -37.457928 59.344826 -37.923513 59.344813 curveto --39.203898 59.344826 -40.193282 59.723119 -40.891667 60.479696 curveto --40.949869 60.557306 -41.008068 60.625204 -41.066264 60.683392 curveto --40.154482 60.799801 -39.659791 61.245994 -39.582187 62.021971 curveto --39.582192 62.681570 -39.882887 63.108363 -40.484273 63.302351 curveto --40.620075 63.341159 -40.765572 63.360559 -40.920766 63.360550 curveto --41.619158 63.360559 -42.045951 63.040464 -42.201146 62.400265 curveto --42.239948 62.303276 -42.259347 62.167479 -42.259345 61.992872 curveto --42.259347 60.828901 -41.648258 59.936516 -40.426074 59.315714 curveto --39.669491 58.908333 -38.815905 58.704637 -37.865314 58.704623 curveto --36.274547 58.704637 -34.945670 59.238128 -33.878677 60.305098 curveto --33.199699 61.003498 -32.850505 61.973482 -32.831093 63.215053 curveto --32.831093 63.244152 lineto --32.831093 63.738844 lineto --32.831093 69.558753 lineto --32.831105 70.121346 -32.656508 70.538439 -32.307302 70.810033 curveto --32.152116 70.945832 -31.967819 71.013731 -31.754410 71.013730 curveto --31.075434 71.013731 -30.726240 70.392941 -30.706827 69.151359 curveto --30.706827 67.521785 lineto --29.979338 67.521785 lineto --29.979338 69.151359 lineto --29.979353 70.567538 -30.561343 71.450223 -31.725311 71.799418 curveto --31.958120 71.877016 -32.171516 71.915816 -32.365501 71.915816 curveto --33.316097 71.915816 -33.995085 71.411424 -34.402469 70.402640 curveto --34.518877 70.131045 -34.596475 69.840050 -34.635265 69.529653 curveto --34.838962 64.757328 moveto --37.826521 64.873733 -39.727690 65.785518 -40.542472 67.492685 curveto --40.755872 67.958282 -40.862571 68.443274 -40.862567 68.947662 curveto --40.862571 69.937049 -40.416378 70.664537 -39.523988 71.130128 curveto --39.136000 71.324126 -38.709207 71.421124 -38.243608 71.421124 curveto --37.234831 71.421124 -36.390945 71.023431 -35.711948 70.228042 curveto --35.129966 69.568455 -34.838971 68.714869 -34.838962 67.667283 curveto --34.838962 64.757328 lineto -fill -grestore -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath --17.670233 62.051071 moveto --21.482273 71.508422 lineto --21.637478 71.877016 -21.841175 72.061313 -22.093363 72.061314 curveto --22.326167 72.061313 -22.500764 71.944915 -22.617155 71.712119 curveto --22.636562 71.673320 -22.665661 71.605421 -22.704454 71.508422 curveto --26.894788 61.178085 lineto --27.108187 60.673704 -27.340983 60.373009 -27.593177 60.275999 curveto --27.593177 60.246899 lineto --27.864774 60.149912 -28.407965 60.101413 -29.222751 60.101402 curveto --29.222751 59.199316 lineto --28.349766 59.257527 -27.408882 59.286627 -26.400095 59.286614 curveto --26.031505 59.286627 -24.974223 59.257527 -23.228245 59.199316 curveto --23.228245 60.101402 lineto --24.334033 60.101413 -24.886924 60.353609 -24.886919 60.857990 curveto --24.886924 60.935599 -24.828725 61.100496 -24.712322 61.352682 curveto --21.453173 69.471454 lineto --18.485020 62.051071 lineto --18.368633 61.721286 -18.310434 61.488490 -18.310423 61.352682 curveto --18.310434 60.673704 -18.649928 60.266310 -19.328907 60.130501 curveto --19.445315 60.111113 -19.571413 60.101413 -19.707201 60.101402 curveto --19.707201 59.199316 lineto --18.717827 59.257527 -17.873941 59.286627 -17.175540 59.286614 curveto --16.380166 59.286627 -15.652679 59.257527 -14.993075 59.199316 curveto --14.993075 60.101402 lineto --16.254068 60.120813 -17.127054 60.712503 -17.612034 61.876474 curveto --17.612034 61.905573 lineto --17.631445 61.944382 -17.650845 61.992882 -17.670233 62.051071 curveto -fill -grestore -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath --3.0813580 65.019224 moveto --3.0813580 65.019224 lineto --11.200130 65.019224 lineto --11.200134 66.997998 -10.909138 68.452974 -10.327144 69.384156 curveto --9.3959638 70.586938 -8.2998821 71.236827 -7.0388958 71.333825 curveto --5.7003255 71.333825 -4.6236435 70.790634 -3.8088465 69.704251 curveto --3.5178620 69.316259 -3.2850659 68.860367 -3.1104575 68.336572 curveto --3.0522698 68.064980 -2.9261719 67.929182 -2.7321635 67.929178 curveto --2.4799794 67.929182 -2.3538815 68.045580 -2.3538694 68.278373 curveto --2.3538815 68.705169 -2.6254769 69.287160 -3.1686566 70.024346 curveto --3.9640546 71.110729 -5.0116371 71.760618 -6.3114072 71.974015 curveto --6.6024105 72.032214 -6.9031054 72.061313 -7.2134930 72.061314 curveto --9.0370698 72.061313 -10.589044 71.362925 -11.869420 69.966146 curveto --13.033403 68.685770 -13.615393 67.143495 -13.615392 65.339319 curveto --13.615393 63.321759 -12.917005 61.653387 -11.520225 60.334198 curveto --10.395047 59.247827 -9.0758691 58.704637 -7.5626875 58.704623 curveto --5.3705311 58.704637 -3.8379567 59.635821 -2.9649598 61.498180 curveto --2.5575781 62.371175 -2.3538815 63.341159 -2.3538694 64.408134 curveto --2.3538815 64.737936 -2.4217804 64.931932 -2.5575662 64.990125 curveto --2.6157771 65.009531 -2.7903742 65.019231 -3.0813580 65.019224 curveto --11.171031 64.408134 moveto --11.171031 64.408134 lineto --4.2744392 64.408134 lineto --4.2744494 62.565172 -4.6818426 61.178095 -5.4966200 60.246899 curveto --6.0398199 59.645521 -6.7285084 59.344826 -7.5626875 59.344813 curveto --8.5520779 59.344826 -9.3862639 59.800718 -10.065248 60.712492 curveto --10.744241 61.585488 -11.112835 62.817368 -11.171031 64.408134 curveto -fill -grestore -gsave -0.0000000 0.0000000 0.0000000 setrgbcolor -newpath -4.5240794 66.095907 moveto -4.5240794 66.095907 lineto -2.8557012 65.766118 1.7596195 65.446024 1.2358311 65.135622 curveto -1.0418315 65.038631 0.85753462 64.912533 0.68293975 64.757328 curveto --0.15124852 64.078347 -0.56834154 63.253860 -0.56834058 62.283867 curveto --0.56834154 60.925899 0.033048404 59.936516 1.2358311 59.315714 curveto -1.9924156 58.908333 2.9429998 58.704637 4.0875862 58.704623 curveto -5.1739625 58.704637 6.0857472 58.976232 6.8229432 59.519411 curveto -7.0363313 59.344826 7.2012286 59.189628 7.3176355 59.053818 curveto -7.5698224 58.821035 7.7638192 58.704637 7.8996263 58.704623 curveto -8.0936136 58.879234 8.2003119 59.112030 8.2197213 59.403012 curveto -8.2197213 62.342066 lineto -8.2197115 62.749469 8.1615125 62.972565 8.0451240 63.011356 curveto -8.0160245 63.011356 lineto -7.9869249 63.040455 lineto -7.8414272 63.040455 lineto -7.6280214 63.040464 7.5116234 62.953165 7.4922327 62.778559 curveto -7.3564260 60.819201 6.5513394 59.674620 5.0769707 59.344813 curveto -4.7665693 59.286627 4.4367748 59.257527 4.0875862 59.257515 curveto -2.2640111 59.257527 1.1970289 59.820118 0.88663655 60.945288 curveto -0.84783478 61.119896 0.82843511 61.294493 0.82843746 61.469080 curveto -0.82843511 62.458474 1.5753226 63.156862 3.0691022 63.564247 curveto -3.3600928 63.641854 3.8062853 63.738852 4.4076812 63.855243 curveto -5.8044519 64.126846 6.8035352 64.505140 7.4049341 64.990125 curveto -7.5213232 65.067730 7.6280214 65.155029 7.7250291 65.252021 curveto -8.5398062 66.066813 8.9471994 66.988298 8.9472099 68.016477 curveto -8.9471994 69.665453 8.2682107 70.829434 6.9102419 71.508422 curveto -6.1730458 71.877016 5.2903605 72.061313 4.2621835 72.061314 curveto -3.0011988 72.061313 1.9342166 71.644220 1.0612338 70.810033 curveto -0.47924295 71.479323 lineto -0.091247431 71.867316 -0.15124852 72.061313 -0.24824561 72.061314 curveto --0.44224365 71.886716 -0.54894187 71.653920 -0.56834058 71.362925 curveto --0.56834058 67.521785 lineto --0.56834154 67.094996 -0.50044268 66.862200 -0.36464378 66.823396 curveto --0.36464378 66.823396 lineto --0.33554424 66.794296 lineto --0.19004653 66.794296 lineto -0.0039488903 66.794301 0.13004678 66.900999 0.18824753 67.114391 curveto -0.18824581 67.153195 0.19794565 67.211394 0.21734707 67.288989 curveto -0.72173689 69.539355 1.6820208 70.868233 3.0982018 71.275626 curveto -3.4473913 71.372625 3.8353848 71.421124 4.2621835 71.421124 curveto -6.0081485 71.421124 7.0654308 70.810034 7.4340336 69.587852 curveto -7.5116234 69.335659 7.5504227 69.064063 7.5504318 68.773065 curveto -7.5504227 67.356892 6.5416396 66.464507 4.5240794 66.095907 curveto -fill -grestore -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -1.1063715 setlinewidth -0 setlinejoin -1 setlinecap -newpath -182.68874 61.446269 moveto -239.20838 80.359267 lineto -stroke -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -1.1210915 setlinewidth -0 setlinejoin -1 setlinecap -newpath -183.89135 40.065168 moveto -244.83751 74.101277 lineto -stroke -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -1.1424956 setlinewidth -0 setlinejoin -1 setlinecap -newpath -25.379291 39.857977 moveto -4.3453306 54.751570 lineto -stroke -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -1.1676413 setlinewidth -0 setlinejoin -1 setlinecap -newpath -26.401801 100.36701 moveto -0.58382064 77.858297 lineto -stroke -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -1.1063715 setlinewidth -0 setlinejoin -1 setlinecap -newpath -209.76401 30.965176 moveto -240.46132 21.586553 lineto -stroke -0.0000000 0.0000000 0.0000000 setrgbcolor -[1.2744309 3.8232932] 0.0000000 setdash -1.2744310 setlinewidth -0 setlinejoin -0 setlinecap -newpath -151.69419 -9.7574803 moveto -151.29749 197.75887 lineto -stroke -gsave -0.68627453 0.68627453 0.68627453 setrgbcolor -newpath -146.02685 142.84831 moveto -156.68525 142.84831 lineto -160.98282 142.84831 164.44260 146.30809 164.44260 150.60566 curveto -164.44260 205.64506 lineto -164.44260 209.94263 160.98282 213.40240 156.68525 213.40240 curveto -146.02685 213.40240 lineto -141.72928 213.40240 138.26950 209.94263 138.26950 205.64506 curveto -138.26950 150.60566 lineto -138.26950 146.30809 141.72928 142.84831 146.02685 142.84831 curveto -closepath -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.88499999 setlinewidth -1 setlinejoin -0 setlinecap -newpath -146.02685 142.84831 moveto -156.68525 142.84831 lineto -160.98282 142.84831 164.44260 146.30809 164.44260 150.60566 curveto -164.44260 205.64506 lineto -164.44260 209.94263 160.98282 213.40240 156.68525 213.40240 curveto -146.02685 213.40240 lineto -141.72928 213.40240 138.26950 209.94263 138.26950 205.64506 curveto -138.26950 150.60566 lineto -138.26950 146.30809 141.72928 142.84831 146.02685 142.84831 curveto -closepath -stroke -gsave -0.84313726 0.84313726 0.84313726 setrgbcolor -newpath -149.01595 148.13576 moveto -153.82477 148.13576 lineto -157.62352 148.13576 160.68172 151.19396 160.68172 154.99271 curveto -160.68172 176.06715 lineto -160.68172 179.86591 157.62352 182.92411 153.82477 182.92411 curveto -149.01595 182.92411 lineto -145.21720 182.92411 142.15900 179.86591 142.15900 176.06715 curveto -142.15900 154.99271 lineto -142.15900 151.19396 145.21720 148.13576 149.01595 148.13576 curveto -closepath -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.88499999 setlinewidth -1 setlinejoin -0 setlinecap -newpath -149.01595 148.13576 moveto -153.82477 148.13576 lineto -157.62352 148.13576 160.68172 151.19396 160.68172 154.99271 curveto -160.68172 176.06715 lineto -160.68172 179.86591 157.62352 182.92411 153.82477 182.92411 curveto -149.01595 182.92411 lineto -145.21720 182.92411 142.15900 179.86591 142.15900 176.06715 curveto -142.15900 154.99271 lineto -142.15900 151.19396 145.21720 148.13576 149.01595 148.13576 curveto -closepath -stroke -gsave -0.84313726 0.84313726 0.84313726 setrgbcolor -newpath -148.76260 185.27272 moveto -153.91584 185.27272 lineto -157.71459 185.27272 160.77279 188.33092 160.77279 192.12968 curveto -160.77279 202.34002 lineto -160.77279 206.13878 157.71459 209.19698 153.91584 209.19698 curveto -148.76260 209.19698 lineto -144.96384 209.19698 141.90564 206.13878 141.90564 202.34002 curveto -141.90564 192.12968 lineto -141.90564 188.33092 144.96384 185.27272 148.76260 185.27272 curveto -closepath -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.88499999 setlinewidth -1 setlinejoin -0 setlinecap -newpath -148.76260 185.27272 moveto -153.91584 185.27272 lineto -157.71459 185.27272 160.77279 188.33092 160.77279 192.12968 curveto -160.77279 202.34002 lineto -160.77279 206.13878 157.71459 209.19698 153.91584 209.19698 curveto -148.76260 209.19698 lineto -144.96384 209.19698 141.90564 206.13878 141.90564 202.34002 curveto -141.90564 192.12968 lineto -141.90564 188.33092 144.96384 185.27272 148.76260 185.27272 curveto -closepath -stroke -gsave [1.4162090 0.0000000 0.0000000 1.4162090 -20.215340 -79.974730] concat -gsave -1.0000000 1.0000000 1.0000000 setrgbcolor -newpath -126.07693 167.57559 moveto -126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto -118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto -116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto -123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto -closepath -eofill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.44125390 setlinewidth -0 setlinejoin -0 setlinecap -newpath -126.07693 167.57559 moveto -126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto -118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto -116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto -123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto -closepath -stroke -grestore -gsave [1.4162090 0.0000000 0.0000000 1.4162090 -20.479480 -64.209730] concat -gsave -1.0000000 1.0000000 1.0000000 setrgbcolor -newpath -126.07693 167.57559 moveto -126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto -118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto -116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto -123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto -closepath -eofill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.44125390 setlinewidth -0 setlinejoin -0 setlinecap -newpath -126.07693 167.57559 moveto -126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto -118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto -116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto -123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto -closepath -stroke -grestore -gsave [1.4162090 0.0000000 0.0000000 1.4162090 -20.363720 -39.930040] concat -gsave -1.0000000 1.0000000 1.0000000 setrgbcolor -newpath -126.07693 167.57559 moveto -126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto -118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto -116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto -123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto -closepath -eofill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.44125390 setlinewidth -0 setlinejoin -0 setlinecap -newpath -126.07693 167.57559 moveto -126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto -118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto -116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto -123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto -closepath -stroke -grestore -gsave [1.0000000 0.0000000 0.0000000 1.0000000 8.6949600 0.0000000] concat -0.0000000 0.0000000 0.0000000 setrgbcolor -[1.2750270 3.8250812] 0.0000000 setdash -1.2750272 setlinewidth -0 setlinejoin -0 setlinecap -newpath -88.417813 -9.9473490 moveto -88.021113 197.76321 lineto -stroke -gsave -0.68627453 0.68627453 0.68627453 setrgbcolor -newpath -84.307164 147.07874 moveto -91.525266 147.07874 lineto -96.252967 147.07874 100.05902 150.88479 100.05902 155.61249 curveto -100.05902 200.00992 lineto -100.05902 204.73763 96.252967 208.54368 91.525266 208.54368 curveto -84.307164 208.54368 lineto -79.579463 208.54368 75.773407 204.73763 75.773407 200.00992 curveto -75.773407 155.61249 lineto -75.773407 150.88479 79.579463 147.07874 84.307164 147.07874 curveto -closepath -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.88499999 setlinewidth -1 setlinejoin -0 setlinecap -newpath -84.307164 147.07874 moveto -91.525266 147.07874 lineto -96.252967 147.07874 100.05902 150.88479 100.05902 155.61249 curveto -100.05902 200.00992 lineto -100.05902 204.73763 96.252967 208.54368 91.525266 208.54368 curveto -84.307164 208.54368 lineto -79.579463 208.54368 75.773407 204.73763 75.773407 200.00992 curveto -75.773407 155.61249 lineto -75.773407 150.88479 79.579463 147.07874 84.307164 147.07874 curveto -closepath -stroke -gsave -0.84313726 0.84313726 0.84313726 setrgbcolor -newpath -86.170554 180.34737 moveto -90.023439 180.34737 lineto -94.286667 180.34737 97.718796 183.77950 97.718796 188.04272 curveto -97.718796 196.57627 lineto -97.718796 200.83950 94.286667 204.27163 90.023439 204.27163 curveto -86.170554 204.27163 lineto -81.907326 204.27163 78.475197 200.83950 78.475197 196.57627 curveto -78.475197 188.04272 lineto -78.475197 183.77950 81.907326 180.34737 86.170554 180.34737 curveto -closepath -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.88499999 setlinewidth -1 setlinejoin -0 setlinecap -newpath -86.170554 180.34737 moveto -90.023439 180.34737 lineto -94.286667 180.34737 97.718796 183.77950 97.718796 188.04272 curveto -97.718796 196.57627 lineto -97.718796 200.83950 94.286667 204.27163 90.023439 204.27163 curveto -86.170554 204.27163 lineto -81.907326 204.27163 78.475197 200.83950 78.475197 196.57627 curveto -78.475197 188.04272 lineto -78.475197 183.77950 81.907326 180.34737 86.170554 180.34737 curveto -closepath -stroke -gsave [1.4162090 0.0000000 0.0000000 1.4162090 -83.803540 -44.855390] concat -gsave -1.0000000 1.0000000 1.0000000 setrgbcolor -newpath -126.07693 167.57559 moveto -126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto -118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto -116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto -123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto -closepath -eofill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.44125390 setlinewidth -0 setlinejoin -0 setlinecap -newpath -126.07693 167.57559 moveto -126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto -118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto -116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto -123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto -closepath -stroke -grestore -gsave -0.84313726 0.84313726 0.84313726 setrgbcolor -newpath -85.116835 152.57442 moveto -91.062910 152.57442 lineto -94.706839 152.57442 97.640400 155.50798 97.640400 159.15191 curveto -97.640400 169.92119 lineto -97.640400 173.56512 94.706839 176.49868 91.062910 176.49868 curveto -85.116835 176.49868 lineto -81.472905 176.49868 78.539345 173.56512 78.539345 169.92119 curveto -78.539345 159.15191 lineto -78.539345 155.50798 81.472905 152.57442 85.116835 152.57442 curveto -closepath -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.88499999 setlinewidth -1 setlinejoin -0 setlinecap -newpath -85.116835 152.57442 moveto -91.062910 152.57442 lineto -94.706839 152.57442 97.640400 155.50798 97.640400 159.15191 curveto -97.640400 169.92119 lineto -97.640400 173.56512 94.706839 176.49868 91.062910 176.49868 curveto -85.116835 176.49868 lineto -81.472905 176.49868 78.539345 173.56512 78.539345 169.92119 curveto -78.539345 159.15191 lineto -78.539345 155.50798 81.472905 152.57442 85.116835 152.57442 curveto -closepath -stroke -gsave [1.4162090 0.0000000 0.0000000 1.4162090 -83.885510 -72.628350] concat -gsave -1.0000000 1.0000000 1.0000000 setrgbcolor -newpath -126.07693 167.57559 moveto -126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto -118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto -116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto -123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto -closepath -eofill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.44125390 setlinewidth -0 setlinejoin -0 setlinecap -newpath -126.07693 167.57559 moveto -126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto -118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto -116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto -123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto -closepath -stroke -grestore -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -1.1210915 setlinewidth -0 setlinejoin -1 setlinecap -newpath -182.46352 108.96177 moveto -241.48733 90.475112 lineto -stroke -gsave -0.68627453 0.68627453 0.68627453 setrgbcolor -newpath -241.48908 165.42336 moveto -252.14749 165.42336 lineto -256.44506 165.42336 259.90483 168.88313 259.90483 173.18070 curveto -259.90483 184.89355 lineto -259.90483 189.19112 256.44506 192.65090 252.14749 192.65090 curveto -241.48908 192.65090 lineto -237.19151 192.65090 233.73174 189.19112 233.73174 184.89355 curveto -233.73174 173.18070 lineto -233.73174 168.88313 237.19151 165.42336 241.48908 165.42336 curveto -closepath -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.79382217 setlinewidth -1 setlinejoin -0 setlinecap -newpath -241.48908 165.42336 moveto -252.14749 165.42336 lineto -256.44506 165.42336 259.90483 168.88313 259.90483 173.18070 curveto -259.90483 184.89355 lineto -259.90483 189.19112 256.44506 192.65090 252.14749 192.65090 curveto -241.48908 192.65090 lineto -237.19151 192.65090 233.73174 189.19112 233.73174 184.89355 curveto -233.73174 173.18070 lineto -233.73174 168.88313 237.19151 165.42336 241.48908 165.42336 curveto -closepath -stroke -gsave -0.84313726 0.84313726 0.84313726 setrgbcolor -newpath -207.46888 185.39404 moveto -212.62212 185.39404 lineto -216.42087 185.39404 219.47908 188.45225 219.47908 192.25100 curveto -219.47908 202.46135 lineto -219.47908 206.26010 216.42087 209.31830 212.62212 209.31830 curveto -207.46888 209.31830 lineto -203.67013 209.31830 200.61192 206.26010 200.61192 202.46135 curveto -200.61192 192.25100 lineto -200.61192 188.45225 203.67013 185.39404 207.46888 185.39404 curveto -closepath -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.79382217 setlinewidth -1 setlinejoin -0 setlinecap -newpath -207.46888 185.39404 moveto -212.62212 185.39404 lineto -216.42087 185.39404 219.47908 188.45225 219.47908 192.25100 curveto -219.47908 202.46135 lineto -219.47908 206.26010 216.42087 209.31830 212.62212 209.31830 curveto -207.46888 209.31830 lineto -203.67013 209.31830 200.61192 206.26010 200.61192 202.46135 curveto -200.61192 192.25100 lineto -200.61192 188.45225 203.67013 185.39404 207.46888 185.39404 curveto -closepath -stroke -gsave [1.4162090 0.0000000 0.0000000 1.4162090 11.220390 -81.039070] concat -gsave -1.0000000 1.0000000 1.0000000 setrgbcolor -newpath -126.07693 167.57559 moveto -126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto -118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto -116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto -123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto -closepath -eofill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.39575738 setlinewidth -0 setlinejoin -0 setlinecap -newpath -126.07693 167.57559 moveto -126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto -118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto -116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto -123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto -closepath -stroke -grestore -gsave [1.4162090 0.0000000 0.0000000 1.4162090 11.153860 -64.681230] concat -gsave -1.0000000 1.0000000 1.0000000 setrgbcolor -newpath -126.07693 167.57559 moveto -126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto -118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto -116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto -123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto -closepath -eofill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.39575738 setlinewidth -0 setlinejoin -0 setlinecap -newpath -126.07693 167.57559 moveto -126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto -118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto -116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto -123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto -closepath -stroke -grestore -gsave [1.4162090 0.0000000 0.0000000 1.4162090 11.269620 -40.401540] concat -gsave -1.0000000 1.0000000 1.0000000 setrgbcolor -newpath -126.07693 167.57559 moveto -126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto -118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto -116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto -123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto -closepath -eofill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.39575738 setlinewidth -0 setlinejoin -0 setlinecap -newpath -126.07693 167.57559 moveto -126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto -118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto -116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto -123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto -closepath -stroke -grestore -gsave -0.84313726 0.84313726 0.84313726 setrgbcolor -newpath -207.48570 151.66121 moveto -212.63893 151.66121 lineto -216.43769 151.66121 219.49589 154.71941 219.49589 158.51817 curveto -219.49589 168.72851 lineto -219.49589 172.52727 216.43769 175.58547 212.63893 175.58547 curveto -207.48570 175.58547 lineto -203.68694 175.58547 200.62874 172.52727 200.62874 168.72851 curveto -200.62874 158.51817 lineto -200.62874 154.71941 203.68694 151.66121 207.48570 151.66121 curveto -closepath -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.79382217 setlinewidth -1 setlinejoin -0 setlinecap -newpath -207.48570 151.66121 moveto -212.63893 151.66121 lineto -216.43769 151.66121 219.49589 154.71941 219.49589 158.51817 curveto -219.49589 168.72851 lineto -219.49589 172.52727 216.43769 175.58547 212.63893 175.58547 curveto -207.48570 175.58547 lineto -203.68694 175.58547 200.62874 172.52727 200.62874 168.72851 curveto -200.62874 158.51817 lineto -200.62874 154.71941 203.68694 151.66121 207.48570 151.66121 curveto -closepath -stroke -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.79382217 setlinewidth -0 setlinejoin -0 setlinecap -newpath -189.69623 157.84667 moveto -200.46117 161.51947 lineto -stroke -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.79382217 setlinewidth -0 setlinejoin -0 setlinecap -newpath -189.76611 171.64361 moveto -200.37931 166.19231 lineto -stroke -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.79382217 setlinewidth -0 setlinejoin -0 setlinecap -newpath -190.10344 196.62466 moveto -200.39129 196.69454 lineto -stroke -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.79382217 setlinewidth -0 setlinejoin -0 setlinecap -newpath -219.64158 195.42700 moveto -233.59024 183.97744 lineto -stroke -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.79382217 setlinewidth -0 setlinejoin -0 setlinecap -newpath -219.54774 163.42573 moveto -233.57825 176.07294 lineto -stroke -gsave [1.0000000 0.0000000 0.0000000 1.0000000 10.947320 0.0000000] concat -gsave -0.68627453 0.68627453 0.68627453 setrgbcolor -newpath --1.4353113 163.23927 moveto -5.7827902 163.23927 lineto -10.510492 163.23927 14.316547 167.04533 14.316547 171.77303 curveto -14.316547 180.37286 lineto -14.316547 185.10056 10.510492 188.90662 5.7827902 188.90662 curveto --1.4353113 188.90662 lineto --6.1630128 188.90662 -9.9690685 185.10056 -9.9690685 180.37286 curveto --9.9690685 171.77303 lineto --9.9690685 167.04533 -6.1630128 163.23927 -1.4353113 163.23927 curveto -closepath -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.79382217 setlinewidth -1 setlinejoin -0 setlinecap -newpath --1.4353113 163.23927 moveto -5.7827902 163.23927 lineto -10.510492 163.23927 14.316547 167.04533 14.316547 171.77303 curveto -14.316547 180.37286 lineto -14.316547 185.10056 10.510492 188.90662 5.7827902 188.90662 curveto --1.4353113 188.90662 lineto --6.1630128 188.90662 -9.9690685 185.10056 -9.9690685 180.37286 curveto --9.9690685 171.77303 lineto --9.9690685 167.04533 -6.1630128 163.23927 -1.4353113 163.23927 curveto -closepath -stroke -gsave -0.84313726 0.84313726 0.84313726 setrgbcolor -newpath -30.267600 179.29735 moveto -34.120485 179.29735 lineto -38.383713 179.29735 41.815842 182.72948 41.815842 186.99270 curveto -41.815842 189.99991 lineto -41.815842 194.26314 38.383713 197.69527 34.120485 197.69527 curveto -30.267600 197.69527 lineto -26.004372 197.69527 22.572243 194.26314 22.572243 189.99991 curveto -22.572243 186.99270 lineto -22.572243 182.72948 26.004372 179.29735 30.267600 179.29735 curveto -closepath -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.79382217 setlinewidth -1 setlinejoin -0 setlinecap -newpath -30.267600 179.29735 moveto -34.120485 179.29735 lineto -38.383713 179.29735 41.815842 182.72948 41.815842 186.99270 curveto -41.815842 189.99991 lineto -41.815842 194.26314 38.383713 197.69527 34.120485 197.69527 curveto -30.267600 197.69527 lineto -26.004372 197.69527 22.572243 194.26314 22.572243 189.99991 curveto -22.572243 186.99270 lineto -22.572243 182.72948 26.004372 179.29735 30.267600 179.29735 curveto -closepath -stroke -gsave [1.4162090 0.0000000 0.0000000 1.4162090 -117.17870 -47.779320] concat -gsave -1.0000000 1.0000000 1.0000000 setrgbcolor -newpath -126.07693 167.57559 moveto -126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto -118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto -116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto -123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto -closepath -eofill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.39575738 setlinewidth -0 setlinejoin -0 setlinecap -newpath -126.07693 167.57559 moveto -126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto -118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto -116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto -123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto -closepath -stroke -grestore -gsave -0.84313726 0.84313726 0.84313726 setrgbcolor -newpath -29.411494 155.28255 moveto -35.357568 155.28255 lineto -39.001498 155.28255 41.935059 158.21611 41.935059 161.86004 curveto -41.935059 167.29354 lineto -41.935059 170.93747 39.001498 173.87103 35.357568 173.87103 curveto -29.411494 173.87103 lineto -25.767564 173.87103 22.834003 170.93747 22.834003 167.29354 curveto -22.834003 161.86004 lineto -22.834003 158.21611 25.767564 155.28255 29.411494 155.28255 curveto -closepath -fill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.79382217 setlinewidth -1 setlinejoin -0 setlinecap -newpath -29.411494 155.28255 moveto -35.357568 155.28255 lineto -39.001498 155.28255 41.935059 158.21611 41.935059 161.86004 curveto -41.935059 167.29354 lineto -41.935059 170.93747 39.001498 173.87103 35.357568 173.87103 curveto -29.411494 173.87103 lineto -25.767564 173.87103 22.834003 170.93747 22.834003 167.29354 curveto -22.834003 161.86004 lineto -22.834003 158.21611 25.767564 155.28255 29.411494 155.28255 curveto -closepath -stroke -gsave [1.4162090 0.0000000 0.0000000 1.4162090 -117.85340 -72.983320] concat -gsave -1.0000000 1.0000000 1.0000000 setrgbcolor -newpath -126.07693 167.57559 moveto -126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto -118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto -116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto -123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto -closepath -eofill -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.39575738 setlinewidth -0 setlinejoin -0 setlinecap -newpath -126.07693 167.57559 moveto -126.07693 170.19357 123.95219 172.31830 121.33422 172.31830 curveto -118.71625 172.31830 116.59152 170.19357 116.59152 167.57559 curveto -116.59152 164.95762 118.71625 162.83289 121.33422 162.83289 curveto -123.95219 162.83289 126.07693 164.95762 126.07693 167.57559 curveto -closepath -stroke -grestore -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.79382217 setlinewidth -0 setlinejoin -0 setlinecap -newpath -41.896572 189.25354 moveto -47.691864 189.50020 lineto -stroke -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.79382217 setlinewidth -0 setlinejoin -0 setlinecap -newpath -42.289125 164.21618 moveto -47.031830 164.21619 lineto -stroke -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.79382217 setlinewidth -0 setlinejoin -0 setlinecap -newpath -14.366305 180.77152 moveto -22.447541 185.61447 lineto -stroke -0.0000000 0.0000000 0.0000000 setrgbcolor -[] 0 setdash -0.79382217 setlinewidth -0 setlinejoin -0 setlinecap -newpath -14.446518 172.14067 moveto -22.786530 166.35797 lineto -stroke -grestore -grestore -showpage diff --git a/Documentation/user/converters.itely b/Documentation/user/converters.itely deleted file mode 100644 index 5c7a6f6187..0000000000 --- a/Documentation/user/converters.itely +++ /dev/null @@ -1,342 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond-program.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Converting from other formats -@chapter Converting from other formats - -Music can be entered also by importing it from other formats. This -chapter documents the tools included in the distribution to do so. -There are other tools that produce LilyPond input, for example GUI -sequencers and XML converters. Refer to the -@uref{http://@/lilypond@/.org,website} for more details. - -These are separate programs from @command{lilypond} itself, and are -run on the command line; see @ref{Command-line usage} for more -information. If you have MacOS 10.3 or 10.4 and you have trouble -running some of these scripts, e.g. @code{convert-ly}, see @ref{Setup -for MacOS X}. - - -@knownissues -We unfortunately do not have the resources to maintain these -programs; please consider them @qq{as-is}. Patches are appreciated, but -bug reports will almost certainly not be resolved. - -@menu -* Invoking midi2ly:: Importing MIDI. -* Invoking musicxml2ly:: Importing MusicXML. -* Invoking abc2ly:: Importing ABC. -* Invoking etf2ly:: Importing Finale. -* Generating LilyPond files:: GUIs, transcribers, and algorithmic composition programs. -@end menu - - - -@node Invoking midi2ly -@section Invoking @command{midi2ly} - -@cindex MIDI - -@command{midi2ly} translates a Type@tie{}1 MIDI file to a LilyPond source -file. - -MIDI (Music Instrument Digital Interface) is a standard for digital -instruments: it specifies cabling, a serial protocol and a file -format. The MIDI file format is a de facto standard format for -exporting music from other programs, so this capability may come in -useful when importing files from a program that has a converter for a -direct format. - -@command{midi2ly} converts tracks into @rinternals{Staff} and -channels into @rinternals{Voice} contexts. Relative mode is used -for pitches, durations are only written when necessary. - -It is possible to record a MIDI file using a digital keyboard, and -then convert it to @file{.ly}. However, human players are not -rhythmically exact enough to make a MIDI to LY conversion trivial. -When invoked with quantizing (@code{-s} and @code{-d} options) -@command{midi2ly} tries to compensate for these timing errors, but is not -very good at this. It is therefore not recommended to use @command{midi2ly} -for human-generated midi files. - - -It is invoked from the command-line as follows, -@example -midi2ly [@var{option}]@dots{} @var{midi-file} -@end example - -Note that by @q{command-line}, we mean the command line of the -operating system. See @ref{Converting from other formats}, for -more information about this. - -The following options are supported by @command{midi2ly}. - -@table @code -@item -a, --absolute-pitches -Print absolute pitches. - -@item -d, --duration-quant=@var{DUR} -Quantize note durations on @var{DUR}. - -@item -e, --explicit-durations -Print explicit durations. - -@item -h,--help -Show summary of usage. - -@item -k, --key=@var{acc}[:@var{minor}] -Set default key. @math{@var{acc} > 0} sets number of sharps; -@math{@var{acc} < 0} sets number of flats. A minor key is indicated by -@code{:1}. - -@item -o, --output=@var{file} -Write output to @var{file}. - -@item -s, --start-quant=@var{DUR} -Quantize note starts on @var{DUR}. - -@item -t, --allow-tuplet=@var{DUR}*@var{NUM}/@var{DEN} -Allow tuplet durations @var{DUR}*@var{NUM}/@var{DEN}. - -@item -v, --verbose -Be verbose. - -@item -V, --version -Print version number. - -@item -w, --warranty -Show warranty and copyright. - -@item -x, --text-lyrics -Treat every text as a lyric. -@end table - - -@knownissues - -Overlapping notes in an arpeggio will not be correctly rendered. The -first note will be read and the others will be ignored. Set them all -to a single duration and add phrase markings or pedal indicators. - - -@node Invoking musicxml2ly -@section Invoking @code{musicxml2ly} - -@cindex MusicXML - -@uref{http://@/www.@/musicxml@/.org/,MusicXML} is an XML dialect -for representing music notation. - -@command{musicxml2ly} extracts the notes, articulations, score structure, -lyrics, etc. from part-wise MusicXML files, and writes them to a .ly -file. It is invoked from the command-line. - - -It is invoked from the command-line as follows, -@example -musicxml2ly [@var{option}]@dots{} @var{xml-file} -@end example - -Note that by @q{command-line}, we mean the command line of the -operating system. See @ref{Converting from other formats}, for -more information about this. - -If the given filename is @file{-}, @command{musicxml2ly} reads input -from the command line. - -The following options are supported by @command{musicxml2ly}: - -@table @code -@item -a, --absolute -convert pitches in absolute mode. - -@item -h,--help -print usage and option summary. - -@item -l, --language=LANG -use a different language file 'LANG.ly' and corresponding pitch names, -e.g. 'deutsch' for deutsch.ly and German note names. - -@item --lxml -use the lxml.etree Python package for XML-parsing; uses less memory and cpu time. - -@item --nd --no-articulation-directions -do not convert directions (@code{^}, @code{_} or @code{-}) for -articulations, dynamics, etc. - -@item --no-beaming -do not convert beaming information, use LilyPond's automatic -beaming instead. - -@item -o,--output=@var{file} -set output filename to @var{file}. If @var{file} is @file{-}, the output -will be printed on stdout. If not given, @var{xml-file}@file{.ly} will -be used. - -@item -r,--relative -convert pitches in relative mode (default). - -@item -v,--verbose -be verbose. - -@item --version -print version information. - -@item -z,--compressed -input file is a zip-compressed MusicXML file. -@end table - - -@node Invoking abc2ly -@section Invoking @code{abc2ly} - -@cindex ABC - -ABC is a fairly simple ASCII based format. It is described at the ABC site: - -@quotation -@uref{http://@/www@/.walshaw@/.plus@/.com/@/abc/@/learn@/.html}. -@end quotation - -@command{abc2ly} translates from ABC to LilyPond. It is invoked as follows: - -@example -abc2ly [@var{option}]@dots{} @var{abc-file} -@end example - -The following options are supported by @command{abc2ly}: - -@table @code -@item -b,--beams=None -preserve ABC's notion of beams -@item -h,--help -this help -@item -o,--output=@var{file} -set output filename to @var{file}. -@item -s,--strict -be strict about success -@item --version -print version information. -@end table - -There is a rudimentary facility for adding LilyPond code to the ABC -source file. If you say: - -@example -%%LY voices \set autoBeaming = ##f -@end example - -This will cause the text following the keyword @q{voices} to be inserted -into the current voice of the LilyPond output file. - -Similarly, - -@example -%%LY slyrics more words -@end example - -will cause the text following the @q{slyrics} keyword to be inserted -into the current line of lyrics. - - -@knownissues - -The ABC standard is not very @q{standard}. For extended features -(e.g., polyphonic music) different conventions exist. - -Multiple tunes in one file cannot be converted. - -ABC synchronizes words and notes at the beginning of a line; -@command{abc2ly} does not. - -@command{abc2ly} ignores the ABC beaming. - - -@node Invoking etf2ly -@section Invoking @command{etf2ly} - -@cindex ETF -@cindex enigma -@cindex Finale -@cindex Coda Technology - -ETF (Enigma Transport Format) is a format used by Coda Music -Technology's Finale product. @command{etf2ly} will convert part of an ETF -file to a ready-to-use LilyPond file. - -It is invoked from the command-line as follows. - -@example -etf2ly [@var{option}]@dots{} @var{etf-file} -@end example - -Note that by @q{command-line}, we mean the command line of the -operating system. See @ref{Converting from other formats}, for -more information about this. - -The following options are supported by @command{etf2ly}: - -@table @code -@item -h,--help -this help -@item -o,--output=@var{FILE} -set output filename to @var{FILE} -@item --version -version information -@end table - - -@knownissues - -The list of articulation scripts is incomplete. Empty measures -confuse @command{etf2ly}. Sequences of grace notes are ended improperly. - - -@node Generating LilyPond files -@section Generating LilyPond files - -@cindex External programs, generating LilyPond files - -LilyPond itself does not come with support for any other formats, but -there are some external tools that also generate LilyPond files. - -These tools include - -@itemize -@item -@uref{http://@/www@/.denemo@/.org/,Denemo}, a graphical score editor. -@item -@uref{http://www@/.volny@/.cz/smilauer/rumor/rumor@/.html,Rumor}, a realtime -monophonic MIDI to LilyPond converter. -@item -@uref{http://nicolas@/.sceaux@/.free@/.fr/lilypond/lyqi@/.html,lyqi}, an -Emacs major mode. -@item -@uref{http://@/www@/.nongnu@/.org/@/xml2ly/,xml2ly}, which imports -@uref{http://@/www@/.musicxml@/.com/xml@/.html,MusicXML} -@item -@uref{http://@/noteedit@/.berlios@/.de,NoteEdit} -which imports @uref{http://@/www@/.musicxml@/.com/xml@/.html,MusicXML} -@item -@uref{http://@/www@/.rosegardenmusic@/.com,Rosegarden}, -which imports MIDI -@item -@uref{http://@/common-lisp@/.net/project/fomus/,FOMUS}, -a LISP library to generate music notation -@item -@uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml}, -has experimental export for LilyPond. -@item -@uref{http://www.tuxguitar.com.ar/}, can export to LilyPond. -@item -@uref{http://musescore.org} can also export to LilyPond. -@end itemize - diff --git a/Documentation/user/dedication.itely b/Documentation/user/dedication.itely deleted file mode 100644 index cc0b4598e5..0000000000 --- a/Documentation/user/dedication.itely +++ /dev/null @@ -1,17 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@quotation -We want to dedicate this program to all the friends that we -met through music. - -Han-Wen and Jan -@end quotation diff --git a/Documentation/user/editorial.itely b/Documentation/user/editorial.itely deleted file mode 100644 index 556db2dc66..0000000000 --- a/Documentation/user/editorial.itely +++ /dev/null @@ -1,697 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Editorial annotations -@section Editorial annotations - -@lilypondfile[quote]{editorial-headword.ly} - -This section discusses the various ways to change the appearance of -notes and add analysis or educational emphasis. - -@menu -* Inside the staff:: -* Outside the staff:: -@end menu - - -@node Inside the staff -@subsection Inside the staff - -This section discusses how to add emphasis to elements that are -inside the staff. - -@menu -* Selecting notation font size:: -* Fingering instructions:: -* Hidden notes:: -* Coloring objects:: -* Parentheses:: -* Stems:: -@end menu - -@node Selecting notation font size -@unnumberedsubsubsec Selecting notation font size - -@cindex font size (notation) scaling -@cindex font size (notation) -@cindex selecting font size (notation) -@cindex notation font size -@cindex note heads - -@funindex fontSize -@funindex font-size -@funindex magstep -@funindex \huge -@funindex \large -@funindex \normalsize -@funindex \small -@funindex \tiny -@funindex \teeny -@funindex huge -@funindex large -@funindex normalsize -@funindex small -@funindex tiny -@funindex teeny - -The font size of notation elements may be altered. It does not -change the size of variable symbols, such as beams or slurs. - -@warning{For font sizes of text, see -@ref{Selecting font and font size}.} - -@lilypond[verbatim,quote,relative=2] -\huge -c4.-> d8---3 -\large -c4.-> d8---3 -\normalsize -c4.-> d8---3 -\small -c4.-> d8---3 -\tiny -c4.-> d8---3 -\teeny -c4.-> d8---3 -@end lilypond - -Internally, this sets the @code{fontSize} property. This in turn -causes the @code{font-size} property to be set in all layout -objects. The value of @code{font-size} is a number indicating the -size relative to the standard size for the current staff height. -Each step up is an increase of approximately 12% of the font size. -Six steps is exactly a factor of two. The Scheme function -@code{magstep} converts a @code{font-size} number to a scaling -factor. The @code{font-size} property can also be set directly, -so that only certain layout objects are affected. - -@lilypond[verbatim,quote,relative=2] -\set fontSize = #3 -c4.-> d8---3 -\override NoteHead #'font-size = #-4 -c4.-> d8---3 -\override Script #'font-size = #2 -c4.-> d8---3 -\override Stem #'font-size = #-5 -c4.-> d8---3 -@end lilypond - -@cindex standard font size (notation) -@cindex font size (notation), standard - -@funindex font-interface -@funindex font-size - -Font size changes are achieved by scaling the design size that is -closest to the desired size. The standard font size (for -@w{@code{font-size = #0}}) depends on the standard staff height. -For a 20pt staff, a 10pt font is selected. - -The @code{font-size} property can only be set on layout objects -that use fonts. These are the ones supporting the -@code{font-interface} layout interface. - - -@predefined -@code{\teeny}, -@code{\tiny}, -@code{\small}, -@code{\normalsize}, -@code{\large}, -@code{\huge}. -@endpredefined - - -@seealso -Snippets: -@rlsr{Editorial annotations}. - -Internals Reference: -@rinternals{font-interface}. - - -@node Fingering instructions -@unnumberedsubsubsec Fingering instructions - -@cindex fingering -@cindex finger change - -@funindex \finger -@funindex finger - -Fingering instructions can be entered using -@var{note}-@var{digit}: - -@lilypond[verbatim,quote,relative=2] -c4-1 d-2 f-4 e-3 -@end lilypond - -Markup texts may be used for finger changes. - -@lilypond[verbatim,quote,relative=2] -c4-1 d-2 f-4 c^\markup { \finger "2 - 3" } -@end lilypond - -@cindex thumb-script - -@funindex \thumb -@funindex thumb - -A thumb-script can be added (e.g., in cello music) to indicate -that a note should be played with the thumb. - -@lilypond[verbatim,quote,relative=2] -2 -@end lilypond - -@cindex fingering chords -@cindex fingering instructions for chords -@cindex chords, fingering - -Fingerings for chords can also be added to individual notes of the -chord by adding them after the pitches. - -@lilypond[verbatim,quote,relative=2] -2 -@end lilypond - -Fingering instructions may be manually placed above or below the -staff, see @ref{Direction and placement}. - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{controlling-the-placement-of-chord-fingerings.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{allowing-fingerings-to-be-printed-inside-the-staff.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{avoiding-collisions-with-chord-fingerings.ly} - - -@seealso -Notation Reference: -@ref{Direction and placement} - -Snippets: -@rlsr{Editorial annotations}. - -Internals Reference: -@rinternals{FingeringEvent}, -@rinternals{fingering-event}, -@rinternals{Fingering_engraver}, -@rinternals{New_fingering_engraver}, -@rinternals{Fingering}. - - -@node Hidden notes -@unnumberedsubsubsec Hidden notes - -@cindex hidden notes -@cindex invisible notes -@cindex transparent notes -@cindex notes, hidden -@cindex notes, invisible -@cindex notes, transparent - -@funindex \hideNotes -@funindex hideNotes -@funindex \unHideNotes -@funindex unHideNotes - -Hidden (or invisible or transparent) notes can be useful in -preparing theory or composition exercises. - -@lilypond[verbatim,quote,relative=2] -c4 d -\hideNotes -e4 f -\unHideNotes -g a -\hideNotes -b -\unHideNotes -c -@end lilypond - -Notation objects which are attached to invisible notes are still -visible. - -@lilypond[verbatim,quote,relative=2] -c4( d) -\hideNotes -e4(\p f)-- -@end lilypond - - -@predefined -@code{\hideNotes}, -@code{\unHideNotes}. -@endpredefined - - -@seealso -Snippets: -@rlsr{Editorial annotations}. - -Internals Reference: -@rinternals{Note_spacing_engraver}, -@rinternals{NoteSpacing}. - - -@node Coloring objects -@unnumberedsubsubsec Coloring objects - -@cindex colored objects -@cindex objects, colored -@cindex colors -@cindex coloring objects -@cindex colored notes -@cindex coloring notes -@cindex notes, colored -@cindex x11 color -@cindex x11-color -@cindex with-color - -@funindex color -@funindex \with-color -@funindex with-color -@funindex x11-color - -Individual objects may be assigned colors. Valid color names -are listed in the @ref{List of colors}. - -@lilypond[verbatim,quote,relative=2] -\override NoteHead #'color = #red -c4 c -\override NoteHead #'color = #(x11-color 'LimeGreen) -d -\override Stem #'color = #blue -e -@end lilypond - - -The full range of colors defined for X11 can be accessed by using -the Scheme function @code{x11-color}. The function takes one -argument; this can be a symbol in the form @var{'FooBar} or a -string in the form @var{"FooBar"}. The first form is quicker to -write and is more efficient. However, using the second form it is -possible to access X11 colors by the multi-word form of its name. - -If @code{x11-color} cannot make sense of the parameter then the -color returned defaults to black. - -@lilypond[verbatim,quote,relative=2] -\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2) -\set Staff.instrumentName = \markup { - \with-color #(x11-color 'navy) "Clarinet" -} - -gis8 a -\override Beam #'color = #(x11-color "medium turquoise") -gis a -\override Accidental #'color = #(x11-color 'DarkRed) -gis a -\override NoteHead #'color = #(x11-color "LimeGreen") -gis a -% this is deliberate nonsense; note that the stems remain black -\override Stem #'color = #(x11-color 'Boggle) -b2 cis -@end lilypond - -@cindex rgb-color -@cindex color, rgb -@cindex rgb color - -@funindex rgb-color - -Exact RGB colors can be specified using the Scheme function -@code{rgb-color}. - -@lilypond[verbatim,quote,relative=2] -\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2) -\set Staff.instrumentName = \markup { - \with-color #(x11-color 'navy) "Clarinet" -} - -\override Stem #'color = #(rgb-color 0 0 0) -gis8 a -\override Stem #'color = #(rgb-color 1 1 1) -gis8 a -\override Stem #'color = #(rgb-color 0 0 0.5) -gis4 a -@end lilypond - - -@seealso -Notation Reference: -@ref{List of colors}, @ref{The -tweak command}. - -Snippets: -@rlsr{Editorial annotations}. - - -@cindex x11 color -@cindex colored notes in chords -@cindex notes, colored in chords -@cindex color in chords - -@funindex x11-color - -@knownissues -An X11 color is not necessarily exactly the same shade as a -similarly named normal color. - -Not all X11 colors are distinguishable in a web browser, i.e., -a web browser might not display a difference between @code{'LimeGreen} -and @code{'ForestGreen}. For web use normal colors are recommended -(i.e., @code{#blue}, @code{#green}, @code{#red}). - - -Notes in a chord cannot be colored with @code{\override}; use -@code{\tweak} instead, see @ref{The tweak command}. - - -@node Parentheses -@unnumberedsubsubsec Parentheses - -@cindex ghost notes -@cindex notes, ghost -@cindex notes, parenthesized -@cindex parentheses - -@funindex \parenthesize -@funindex parenthesize - -Objects may be parenthesized by prefixing @code{\parenthesize} to -the music event. When prefixed to a chord, it parenthesizes every -note. Individual notes inside a chord may also be parenthesized. - -@lilypond[verbatim,quote,relative=2] -c2 \parenthesize d -c2 \parenthesize -c2 -@end lilypond - -Non-note objects may be parenthesized as well. For articulations, -a hyphen is needed before the @code{\parenthesize} command. - -@lilypond[verbatim,quote,relative=2] -c2-\parenthesize -. d -c2 \parenthesize r -@end lilypond - - -@seealso -Snippets: -@rlsr{Editorial annotations}. - -Internals Reference: -@rinternals{Parenthesis_engraver}, -@rinternals{ParenthesesItem}, -@rinternals{parentheses-interface}. - - -@knownissues - -Parenthesizing a chord prints parentheses around each individual -note, instead of a single large parenthesis around the entire -chord. - - -@node Stems -@unnumberedsubsubsec Stems - -@cindex stem -@cindex stem, invisible -@cindex invisible stem - -@funindex \stemUp -@funindex stemUp -@funindex \stemDown -@funindex stemDown -@funindex \stemNeutral -@funindex stemNeutral -@cindex stem, direction -@cindex stem, up -@cindex stem, down -@cindex stem, neutral - -Whenever a note is found, a @code{Stem} object is created -automatically. For whole notes and rests, they are also created but -made invisible. - - -@predefined -@code{\stemUp}, -@code{\stemDown}, -@code{\stemNeutral}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{default-direction-of-stems-on-the-center-line-of-the-staff.ly} - - -@seealso -Notation Reference: -@ref{Direction and placement}. - -Snippets: -@rlsr{Editorial annotations}. - -Internals Reference: -@rinternals{Stem_engraver}, -@rinternals{Stem}, -@rinternals{stem-interface}. - - -@node Outside the staff -@subsection Outside the staff - -This section discusses how to add emphasis to elements in the staff -from outside of the staff. - -@menu -* Balloon help:: -* Grid lines:: -* Analysis brackets:: -@end menu - -@node Balloon help -@unnumberedsubsubsec Balloon help - -@cindex balloon -@cindex notation, explaining -@cindex balloon help -@cindex help, balloon - -@funindex \balloonGrobText -@funindex \balloonText -@funindex Balloon_engraver -@funindex balloonGrobText -@funindex balloonText -@funindex \balloonLengthOn -@funindex balloonLengthOn -@funindex \balloonLengthOff -@funindex balloonLengthOff - -Elements of notation can be marked and named with the help of a -square balloon. The primary purpose of this feature is to explain -notation. - -@lilypond[verbatim,quote,relative=2] -\new Voice \with { \consists "Balloon_engraver" } -{ - \balloonGrobText #'Stem #'(3 . 4) \markup { "I'm a Stem" } - a8 - \balloonGrobText #'Rest #'(-4 . -4) \markup { "I'm a rest" } - r - 2. -} -@end lilypond - - -There are two music functions, @code{balloonGrobText} and -@code{balloonText}; the former is used like -@w{@code{\once \override}} to attach text to any grob, and the -latter is used like @code{\tweak}, typically within chords, to -attach text to an individual note. - -Balloon text normally influences note spacing, but this can be -altered: - -@lilypond[verbatim,quote,relative=2] -\new Voice \with { \consists "Balloon_engraver" } -{ - \balloonLengthOff - \balloonGrobText #'Stem #'(3 . 4) \markup { "I'm a Stem" } - a8 - \balloonGrobText #'Rest #'(-4 . -4) \markup { "I'm a rest" } - r - \balloonLengthOn - 2. -} -@end lilypond - - -@predefined -@code{\balloonLengthOn}, -@code{\balloonLengthOff}. -@endpredefined - - -@seealso -Snippets: -@rlsr{Editorial annotations}. - -Internals Reference: -@rinternals{Balloon_engraver}, -@rinternals{BalloonTextItem}, -@rinternals{balloon-interface}. - - -@node Grid lines -@unnumberedsubsubsec Grid lines - -@cindex grid lines -@cindex lines, grid -@cindex vertical lines between staves -@cindex lines, vertical between staves - -@funindex Grid_point_engraver -@funindex Grid_line_span_engraver -@funindex gridInterval - -Vertical lines can be drawn between staves synchronized with the -notes. - -The @code{Grid_point_engraver} must be used to create the end -points of the lines, while the @code{Grid_line_span_engraver} must -be used to actually draw the lines. By default this centers grid -lines horizontally below and to the left side of each note head. -Grid lines extend from the middle lines of each staff. The -@code{gridInterval} must specify the duration between the grid -lines. - -@lilypond[verbatim,quote] -\layout { - \context { - \Staff - \consists "Grid_point_engraver" - gridInterval = #(ly:make-moment 1 4) - } - \context { - \Score - \consists "Grid_line_span_engraver" - } -} - -\score { - \new ChoirStaff << - \new Staff \relative c'' { - \stemUp - c4. d8 e8 f g4 - } - \new Staff \relative c { - \clef bass - \stemDown - c4 g' f e - } - >> -} -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{grid-lines--changing-their-appearance.ly} - - -@seealso -Snippets: -@rlsr{Editorial annotations}. - -Internals Reference: -@rinternals{Grid_line_span_engraver}, -@rinternals{Grid_point_engraver}, -@rinternals{GridLine}, -@rinternals{GridPoint}, -@rinternals{grid-line-interface}, -@rinternals{grid-point-interface}. - - -@node Analysis brackets -@unnumberedsubsubsec Analysis brackets - -@cindex brackets -@cindex bracket, phrasing -@cindex phrasing bracket -@cindex musicological analysis -@cindex analysis, musicological -@cindex note grouping bracket -@cindex horizontal bracket -@cindex bracket, horizontal - -@funindex Horizontal_bracket_engraver -@funindex \startGroup -@funindex startGroup -@funindex \stopGroup -@funindex stopGroup - -Brackets are used in musical analysis to indicate structure in musical -pieces. Simple horizontal brackets are supported. - -@lilypond[verbatim,quote] -\layout { - \context { - \Voice - \consists "Horizontal_bracket_engraver" - } -} -\relative c'' { - c2\startGroup - d\stopGroup -} -@end lilypond - -Analysis brackets may be nested. - -@lilypond[verbatim,quote] -\layout { - \context { - \Voice - \consists "Horizontal_bracket_engraver" - } -} -\relative c'' { - c4\startGroup\startGroup - d4\stopGroup - e4\startGroup - d4\stopGroup\stopGroup -} -@end lilypond - - -@seealso -Snippets: -@rlsr{Editorial annotations}. - -Internals Reference: -@rinternals{Horizontal_bracket_engraver}, -@rinternals{HorizontalBracket}, -@rinternals{horizontal-bracket-interface}, -@rinternals{Staff}. - diff --git a/Documentation/user/expressive.itely b/Documentation/user/expressive.itely deleted file mode 100644 index 129edfa528..0000000000 --- a/Documentation/user/expressive.itely +++ /dev/null @@ -1,1153 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Expressive marks -@section Expressive marks - -@lilypondfile[quote]{expressive-headword.ly} - -This section lists various expressive marks that can be -created in a score. - -@menu -* Attached to notes:: -* Curves:: -* Lines:: -@end menu - - -@node Attached to notes -@subsection Attached to notes - -This section explains how to create expressive marks that are -attached to notes: articulations, ornamentations, and dynamics. -Methods to create new dynamic markings are also discussed. - -@menu -* Articulations and ornamentations:: -* Dynamics:: -* New dynamic marks:: -@end menu - -@node Articulations and ornamentations -@unnumberedsubsubsec Articulations and ornamentations - -@cindex articulations -@cindex ornamentation -@cindex scripts -@cindex ornaments -@cindex espressivo -@cindex fermata -@cindex upbow -@cindex downbow -@cindex foot marks -@cindex organ pedal marks -@cindex pedal marks, organ -@cindex turn -@cindex open -@cindex stopped -@cindex flageolet -@cindex reverseturn -@cindex trill -@cindex prall -@cindex mordent -@cindex prallprall -@cindex prallmordent -@cindex prall, up -@cindex prall, down -@cindex thumb marking -@cindex segno -@cindex coda -@cindex varcoda - -@funindex - - -A variety of symbols that denote articulations, ornamentations, -and other performance indications can be attached to a note using -this syntax: - -@example -@var{note}\@var{name} -@end example - -The possible values for @var{name} are listed in @ref{List of -articulations}. For example: - -@lilypond[verbatim,quote,relative=2] -c4\staccato c\mordent b2\turn -c1\fermata -@end lilypond - -@cindex marcato -@cindex tenuto -@cindex staccatissimo -@cindex accent -@cindex staccato -@cindex portato - -Some of these articulations have shorthands for easier entry. -Shorthands are appended to the note name, and their syntax -consists of a dash @code{-} followed by a symbol signifying the -articulation. Predefined shorthands exist for @notation{marcato}, -@notation{stopped}, @notation{tenuto}, @notation{staccatissimo}, -@notation{accent}, @notation{staccato}, and @notation{portato}. -Their corresponding output appears as follows: - -@lilypond[verbatim,quote,relative=2] -c4-^ c-+ c-- c-| -c4-> c-. c2-_ -@end lilypond - -The rules for the default placement of articulations are defined -in @file{scm/@/script@/.scm}. Articulations and ornamentations -may be manually placed above or below the staff, see -@ref{Direction and placement}. - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{modifying-default-values-for-articulation-shorthand-notation.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{controlling-the-vertical-ordering-of-scripts.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{creating-a-delayed-turn.ly} - -@seealso -Music Glossary: -@rglos{tenuto}, -@rglos{accent}, -@rglos{staccato}, -@rglos{portato}. - -Notation Reference: -@ref{Direction and placement}, -@ref{List of articulations}, -@ref{Trills}. - -Installed Files: -@file{scm/@/script@/.scm}. - -Snippets: -@rlsr{Expressive marks}. - -Internals Reference: -@rinternals{Script}, -@rinternals{TextScript}. - - -@node Dynamics -@unnumberedsubsubsec Dynamics - -@cindex absolute dynamics -@cindex dynamics -@cindex dynamics, absolute - -@funindex \ppppp -@funindex ppppp -@funindex \pppp -@funindex pppp -@funindex \ppp -@funindex ppp -@funindex \pp -@funindex pp -@funindex \p -@funindex p -@funindex \mp -@funindex mp -@funindex \mf -@funindex mf -@funindex \f -@funindex f -@funindex \ff -@funindex ff -@funindex \fff -@funindex fff -@funindex \ffff -@funindex ffff -@funindex \fp -@funindex fp -@funindex \sf -@funindex sf -@funindex \sff -@funindex sff -@funindex \sp -@funindex sp -@funindex \spp -@funindex spp -@funindex \sfz -@funindex sfz -@funindex \rfz -@funindex rfz - -Absolute dynamic marks are specified using a command after a note, -such as @code{c4\ff}. The available dynamic marks are -@code{\ppppp}, @code{\pppp}, @code{\ppp}, @code{\pp}, @code{\p}, -@code{\mp}, @code{\mf}, @code{\f}, @code{\ff}, @code{\fff}, -@code{\ffff}, @code{\fp}, @code{\sf}, @code{\sff}, @code{\sp}, -@code{\spp}, @code{\sfz}, and @code{\rfz}. The dynamic marks may -be manually placed above or below the staff, see -@ref{Direction and placement}. - -@lilypond[verbatim,quote,relative=2] -c2\ppp c\mp -c2\rfz c^\mf -c2_\spp c^\ff -@end lilypond - -@cindex hairpin -@cindex crescendo -@cindex decrescendo -@cindex diminuendo - -@funindex \< -@funindex \> -@funindex \! -@funindex \cr -@funindex cr -@funindex \decr -@funindex decr - -A @notation{crescendo} mark is started with @code{\<} and -terminated with @code{\!}, an absolute dynamic, or an additional -crescendo or decrescendo mark. A @notation{decrescendo} mark is -started with @code{\>} and is also terminated with @code{\!}, an -absolute dynamic, or another crescendo or decrescendo mark. -@code{\cr} and @code{\decr} may be used instead of @code{\<} and -@code{\>}. @notation{Hairpins} are engraved by default using this -notation. - -@lilypond[verbatim,quote,relative=2] -c2\< c\! -d2\< d\f -e2\< e\> -f2\> f\! -e2\> e\mp -d2\> d\> -c1\! -@end lilypond - -Spacer rests are needed to engrave multiple marks on one note. - -@cindex multiple dynamic marks on one note -@cindex dynamic marks, multiple on one note - -@lilypond[verbatim,quote,relative=2] -c4\< c\! d\> e\! -<< f1 { s4 s4\< s4\> s4\! } >> -@end lilypond - -@cindex espressivo articulation - -@funindex \espressivo -@funindex espressivo - -In some situations the @code{\espressivo} articulation mark may be -the appropriate choice to indicate a crescendo and decrescendo on -one note: - -@lilypond[verbatim,quote,relative=2] -c2 b4 a -g1\espressivo -@end lilypond - - -@funindex \crescTextCresc -@funindex crescTextCresc -@funindex \dimTextDecresc -@funindex dimTextDecresc -@funindex \dimTextDecr -@funindex dimTextDecr -@funindex \dimTextDim -@funindex dimTextDim -@funindex \crescHairpin -@funindex crescHairpin -@funindex \dimHairpin -@funindex dimHairpin - -Crescendos and decrescendos can be engraved as textual markings -instead of hairpins. Dashed lines are printed to indicate their -extent. The built-in commands that enable these text modes are -@code{\crescTextCresc}, @code{\dimTextDecresc}, -@code{\dimTextDecr}, and @code{\dimTextDim}. The corresponding -@code{\crescHairpin} and @code{\dimHairpin} commands will revert -to hairpins again: - -@lilypond[verbatim,quote,relative=2] -\crescTextCresc -c2\< d | e f\! -\dimTextDecresc -e2\> d | c b\! -\crescHairpin -c2\< d | e f\! -\dimHairpin -e2\> d\! -@end lilypond - - -To create new absolute dynamic marks or text that should be -aligned with dynamics, see @ref{New dynamic marks}. - -@cindex dynamics, vertical positioning -@cindex vertical positioning of dynamics - -@funindex DynamicLineSpanner - - -Vertical positioning of dynamics is handled by -@rinternals{DynamicLineSpanner}. -@funindex \dynamicUp -@funindex dynamicUp -@funindex \dynamicDown -@funindex dynamicDown -@funindex \dynamicNeutral -@funindex dynamicNeutral - - -@predefined -@code{\dynamicUp}, -@code{\dynamicDown}, -@code{\dynamicNeutral}, -@code{\crescTextCresc}, -@code{\dimTextDim}, -@code{\dimTextDecr}, -@code{\dimTextDecresc}, -@code{\crescHairpin}, -@code{\dimHairpin}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{setting-hairpin-behavior-at-bar-lines.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{setting-the-minimum-length-of-hairpins.ly} - -@cindex al niente -@cindex niente, al - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{printing-hairpins-using-al-niente-notation.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{vertically-aligned-dynamics-and-textscripts.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{hiding-the-extender-line-for-text-dynamics.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{changing-text-and-spanner-styles-for-text-dynamics.ly} - - -@seealso -Music Glossary: -@rglos{al niente}, -@rglos{crescendo}, -@rglos{decrescendo}, -@rglos{hairpin}. - -Learning Manual: -@rlearning{Articulation and dynamics}. - -Notation Reference: -@ref{Direction and placement}, -@ref{New dynamic marks}, -@ref{What goes into the MIDI output?}, -@ref{Controlling MIDI dynamics}. - -Snippets: -@rlsr{Expressive marks}. - -Internals Reference: -@rinternals{DynamicText}, -@rinternals{Hairpin}, -@rinternals{DynamicLineSpanner}. - - -@node New dynamic marks -@unnumberedsubsubsec New dynamic marks - -@cindex new dynamic marks -@cindex dynamic marks, new - -The easiest way to create dynamic indications is to use -@code{\markup} objects. - -@lilypond[verbatim,quote] -moltoF = \markup { molto \dynamic f } - -\relative c' { - 16_\moltoF - 2.. -} -@end lilypond - -@cindex dynamics, editorial -@cindex dynamics, parenthesis -@cindex editorial dynamics -@funindex \bracket -@funindex bracket -@funindex \dynamic -@funindex dynamic - -In markup mode, editorial dynamics (within parentheses or square -brackets) can be created. The syntax for markup mode is described -in @ref{Formatting text}. - -@lilypond[verbatim,quote] -roundF = \markup { \center-align \concat { \bold { \italic ( } - \dynamic f \bold { \italic ) } } } -boxF = \markup { \bracket { \dynamic f } } -\relative c' { - c1_\roundF - c1_\boxF -} -@end lilypond - -@cindex make-dynamic-script -@funindex make-dynamic-script - -Simple, centered dynamic marks are easily created with the -@code{make-dynamic-script} function. - -@lilypond[verbatim,quote] -sfzp = #(make-dynamic-script "sfzp") -\relative c' { - c4 c c\sfzp c -} -@end lilypond - -In general, @code{make-dynamic-script} takes any markup object as its -argument. The dynamic font only contains the characters -@code{f,m,p,r,s} and @code{z}, so if a dynamic mark that includes -plain text or punctuation symbols is desired, markup commands that -reverts font family and font encoding to normal text should be used, -for example @code{\normal-text}. The interest of using -@code{make-dynamic-script} instead of an ordinary markup is ensuring -the vertical alignment of markup objects and hairpins that are -attached to the same note head. - -@lilypond[verbatim,quote] -roundF = \markup { \center-align \concat { - \normal-text { \bold { \italic ( } } - \dynamic f - \normal-text { \bold { \italic ) } } } } -boxF = \markup { \bracket { \dynamic f } } -mfEspress = \markup { \center-align \line { - \hspace #3.7 mf \normal-text \italic espress. } } -roundFdynamic = #(make-dynamic-script roundF) -boxFdynamic = #(make-dynamic-script boxF) -mfEspressDynamic = #(make-dynamic-script mfEspress) -\relative c' { - c4_\roundFdynamic\< d e f - g,1~_\boxFdynamic\> - g - g'~\mfEspressDynamic - g -} -@end lilypond - -The Scheme form of markup mode may be used instead. Its syntax is -explained in @ref{Markup construction in Scheme}. - -@lilypond[verbatim,quote] -moltoF = #(make-dynamic-script - (markup #:normal-text "molto" - #:dynamic "f")) -\relative c' { - 16 - 2..\moltoF -} -@end lilypond - -Font settings in markup mode are described in -@ref{Selecting font and font size}. - - -@seealso -Notation Reference: -@ref{Formatting text}, -@ref{Selecting font and font size}, -@ref{Markup construction in Scheme}, -@ref{What goes into the MIDI output?}, -@ref{Controlling MIDI dynamics}. - -Snippets: -@rlsr{Expressive marks}. - - -@node Curves -@subsection Curves - -This section explains how to create various expressive marks that -are curved: normal slurs, phrasing slurs, breath marks, falls, and -doits. - -@menu -* Slurs:: -* Phrasing slurs:: -* Breath marks:: -* Falls and doits:: -@end menu - -@node Slurs -@unnumberedsubsubsec Slurs - -@cindex slurs - -@notation{Slurs} are entered using parentheses: - -@lilypond[verbatim,quote,relative=2] -f4( g a) a8 b( -a4 g2 f4) -2( 2) -@end lilypond - -@cindex slurs, manual placement -@cindex slurs, below notes -@cindex slurs, above notes -@funindex \slurDown -@funindex slurDown -@funindex \slurNeutral -@funindex slurNeutral - -Slurs may be manually placed above or below the notes, see -@ref{Direction and placement}. - -@lilypond[verbatim,quote,relative=2] -c2( d) -\slurDown -c2( d) -\slurNeutral -c2( d) -@end lilypond - -@cindex phrasing slur -@cindex multiple slurs -@cindex simultaneous slurs -@cindex slur, phrasing -@cindex slurs, multiple -@cindex slurs, simultaneous - -Simultaneous or overlapping slurs are not permitted, but a phrasing -slur can overlap a slur. This permits two slurs to be printed at -once. For details, see @ref{Phrasing slurs}. - -@cindex slur style -@cindex slur, solid -@cindex slur, dotted -@cindex slur, dashed -@cindex solid slur -@cindex dotted slur -@cindex dashed slur -@cindex style, slur -@funindex \slurDashed -@funindex slurDashed -@funindex \slurDotted -@funindex slurDotted -@funindex \slurSolid -@funindex slurSolid - -Slurs can be solid, dotted, or dashed. Solid is the default slur -style: - -@lilypond[verbatim,quote,relative=1] -c4( e g2) -\slurDashed -g4( e c2) -\slurDotted -c4( e g2) -\slurSolid -g4( e c2) -@end lilypond - -@funindex \slurHalfDashed -@funindex slurHalfDashed -@funindex \slurHalfSolid -@funindex slurHalfSolid -@cindex slur, half dashed and half solid - -Slurs can also be made half-dashed (the first half dashed, the -second half solid) or half-solid (the first half solid, the second -half dashed): - -@lilypond[verbatim,quote,relative=1] -c4( e g2) -\slurHalfDashed -g4( e c2) -\slurHalfSolid -c4( e g2) -\slurSolid -g4( e c2) -@end lilypond - -@funindex \slurDashPattern -@funindex slurDashPattern -@cindex slur, defining dash patterns - -Custom dash patterns for slurs can be defined: - -@lilypond[verbatim,quote,relative=1] -c4( e g2) -\slurDashPattern #0.7 #0.75 -g4( e c2) -\slurDashPattern #0.5 #2.0 -c4( e g2) -\slurSolid -g4( e c2) -@end lilypond - - - -@funindex \slurUp -@funindex slurUp - - -@predefined -@code{\slurUp}, -@code{\slurDown}, -@code{\slurNeutral}, -@code{\slurDashed}, -@code{\slurDotted}, -@code{\slurHalfDashed}, -@code{\slurHalfSolid}, -@code{\slurDashPattern}, -@code{\slurSolid}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{using-double-slurs-for-legato-chords.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{positioning-text-markups-inside-slurs.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{making-slurs-with-complex-dash-structure.ly} - -@seealso -Music Glossary: -@rglos{slur}. - -Learning Manual: -@rlearning{On the un-nestedness of brackets and ties}. - -Notation Reference: -@ref{Direction and placement}, -@ref{Phrasing slurs}. - -Snippets: -@rlsr{Expressive marks}. - -Internals Reference: -@rinternals{Slur}. - - -@node Phrasing slurs -@unnumberedsubsubsec Phrasing slurs - -@cindex phrasing slurs -@cindex phrasing marks -@cindex slur, phrasing -@cindex mark, phrasing -@funindex \( -@funindex \) - -@notation{Phrasing slurs} (or phrasing marks) that indicate a -musical sentence are written using the commands @code{\(} and -@code{\)} respectively: - -@lilypond[verbatim,quote,relative=2] -c4\( d( e) f( -e2) d\) -@end lilypond - -@funindex \phrasingSlurUp -@funindex phrasingSlurUp -@funindex \phrasingSlurDown -@funindex phrasingSlurDown -@funindex \phrasingSlurNeutral -@funindex phrasingSlurNeutral - -Typographically, a phrasing slur behaves almost exactly like a -normal slur. However, they are treated as different objects; a -@code{\slurUp} will have no effect on a phrasing slur. Phrasing -slurs may be manually placed above or below the notes, see -@ref{Direction and placement}. - -@lilypond[verbatim,quote,relative=1] -c4\( g' c,( b) | c1\) -\phrasingSlurUp -c4\( g' c,( b) | c1\) -@end lilypond - -@cindex simultaneous phrasing slurs -@cindex multiple phrasing slurs -@cindex slur, simultaneous phrasing -@cindex slur, multiple phrasing -@cindex phrasing slur, simultaneous -@cindex phrasing slur, multiple - -Simultaneous or overlapping phrasing slurs are not permitted. - -@funindex phrasingSlurDashed -@funindex \phrasingSlurDashed -@funindex \phrasingSlurDotted -@funindex phrasingSlurDotted -@funindex \phrasingSlurSolid -@funindex phrasingSlurSolid -@cindex phrasing slur, dashed -@cindex dashed phrasing slur -@cindex phrasing slur, dotted -@cindex dotted phrasing slurs -@cindex slur, dashed phrasing -@cindex slur, dotted phrasing - -Phrasing slurs can be solid, dotted, or dashed. Solid is the default -style for phrasing slurs: - -@lilypond[verbatim,quote,relative=1] -c4\( e g2\) -\phrasingSlurDashed -g4\( e c2\) -\phrasingSlurDotted -c4\( e g2\) -\phrasingSlurSolid -g4\( e c2\) -@end lilypond - -@funindex phrasingSlurHalfDashed -@funindex \phrasingSlurHalfDashed -@funindex \phrasingSlurHalfSolid -@funindex phrasingSlurHalfSolid -@cindex phrasing slur, half solid and half dashed -@cindex slur, half solid and half dashed phrasing - -Phrasing slurs can also be made half-dashed (the first half dashed, the -second half solid) or half-solid (the first half solid, the second -half dashed): - -@lilypond[verbatim,quote,relative=1] -c4\( e g2\) -\phrasingSlurHalfDashed -g4\( e c2\) -\phrasingSlurHalfSolid -c4\( e g2\) -\phrasingSlurSolid -g4\( e c2\) -@end lilypond - -@funindex \phrasingSlurDashPattern -@funindex phrasingSlurDashPattern -@cindex phrasing slur, defining dash patterns -@cindex slur, phrasing, defining dash patterns -@cindex slur, definind dash patterns for phrasing - -Custom dash patterns for phrasing slurs can be defined: - -@lilypond[verbatim,quote,relative=1] -c4\( e g2\) -\phrasingSlurDashPattern #0.7 #0.75 -g4\( e c2\) -\phrasingSlurDashPattern #0.5 #2.0 -c4\( e g2\) -\phrasingSlurSolid -g4\( e c2\) -@end lilypond - -Dash pattern definitions for phrasing slurs have the same structure -as dash pattern definitions for slurs. For more information about -complex dash patterns, see the snippets under @ref{Slurs}. - -@predefined -@code{\phrasingSlurUp}, -@code{\phrasingSlurDown}, -@code{\phrasingSlurNeutral}, -@code{\phrasingSlurDashed}, -@code{\phrasingSlurDotted}, -@code{\phrasingSlurHalfDashed}, -@code{\phrasingSlurHalfSolid}, -@code{\phrasingSlurDashPattern}, -@code{\phrasingSlurSolid}. -@endpredefined - - -@seealso -Learning Manual: -@rlearning{On the un-nestedness of brackets and ties}. - -Notation Reference: -@ref{Direction and placement}, -@ref{Slurs}. - -Snippets: -@rlsr{Expressive marks}. - -Internals Reference: -@rinternals{PhrasingSlur}. - - -@node Breath marks -@unnumberedsubsubsec Breath marks - -@cindex breath marks -@cindex pause mark -@funindex \breathe -@funindex breathe - -Breath marks are entered using @code{\breathe}: - -@lilypond[verbatim,quote,relative=2] -c2. \breathe d4 -@end lilypond - -Musical indicators for breath marks in ancient notation, -divisiones, are supported. For details, see @ref{Divisiones}. - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{changing-the-breath-mark-symbol.ly} - -@cindex caesura -@cindex railroad tracks - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{inserting-a-caesura.ly} - - -@seealso -Music Glossary: -@rglos{caesura}. - -Notation Reference: -@ref{Divisiones}. - -Snippets: -@rlsr{Expressive marks}. - -Internals Reference: -@rinternals{BreathingSign}. - - -@node Falls and doits -@unnumberedsubsubsec Falls and doits - -@cindex falls -@cindex doits -@funindex \bendAfter -@funindex bendAfter - -@notation{Falls} and @notation{doits} can be added to notes using -the @code{\bendAfter} command. The direction of the fall or doit -is indicated with a plus or minus (up or down). The number -indicates the pitch interval that the fall or doit will extend -@emph{beyond} the main note. - -@lilypond[verbatim,quote,relative=2] -c2-\bendAfter #+4 -c2-\bendAfter #-4 -c2-\bendAfter #+8 -c2-\bendAfter #-8 -@end lilypond - -The dash @code{-} immediately preceding the @code{\bendAfter} -command is @emph{required} when writing falls and doits. - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{adjusting-the-shape-of-falls-and-doits.ly} - - -@seealso -Music Glossary: -@rglos{fall}, -@rglos{doit}. - -Snippets: -@rlsr{Expressive marks}. - - -@node Lines -@subsection Lines - -This section explains how to create various expressive marks that -follow a linear path: glissandos, arpeggios, and trills. - -@menu -* Glissando:: -* Arpeggio:: -* Trills:: -@end menu - -@node Glissando -@unnumberedsubsubsec Glissando - -@cindex glissando -@funindex \glissando -@funindex glissando - -A @notation{glissando} is created by attaching @code{\glissando} -to a note: - -@lilypond[verbatim,quote,relative=2] -g2\glissando g' -c2\glissando c, -@end lilypond - -Different styles of glissandi can be created. For details, see -@ref{Line styles}. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{contemporary-glissando.ly} - - -@seealso -Music Glossary: -@rglos{glissando}. - -Notation Reference: -@ref{Line styles}. - -Snippets: -@rlsr{Expressive marks}. - -Internals Reference: -@rinternals{Glissando}. - - -@knownissues - -Printing text over the line (such as @notation{gliss.}) is not -supported. - - -@node Arpeggio -@unnumberedsubsubsec Arpeggio - -@cindex arpeggio -@cindex broken chord -@cindex chord, broken - -@funindex \arpeggio -@funindex arpeggio -@funindex \arpeggioArrowUp -@funindex arpeggioArrowUp -@funindex \arpeggioArrowDown -@funindex arpeggioArrowDown -@funindex \arpeggioNormal -@funindex arpeggioNormal - -An @notation{arpeggio} on a chord (also known as a broken chord) -is denoted by appending @code{\arpeggio} to the chord construct: - -@lilypond[verbatim,quote,relative=1] -1\arpeggio -@end lilypond - -Different types of arpeggios may be written. -@code{\arpeggioNormal} reverts to a normal arpeggio: - -@lilypond[verbatim,quote,relative=1] -2\arpeggio -\arpeggioArrowUp -2\arpeggio -\arpeggioArrowDown -2\arpeggio -\arpeggioNormal -2\arpeggio -@end lilypond - -@cindex arpeggio symbols, special -@cindex special arpeggio symbols - -@funindex \arpeggioBracket -@funindex arpeggioBracket -@funindex \arpeggioParenthesis -@funindex arpeggioParenthesis -@funindex \arpeggioParenthesisDashed -@funindex arpeggioParenthesisDashed - -Special @emph{bracketed} arpeggio symbols can be created: - -@lilypond[verbatim,quote,relative=1] -2 -\arpeggioBracket -2\arpeggio -\arpeggioParenthesis -2\arpeggio -\arpeggioParenthesisDashed -2\arpeggio -\arpeggioNormal -2\arpeggio -@end lilypond - -The dash properties of the parenthesis arpeggio are controlled -with the @code{'dash-details} property, which is described at @ref{Slurs}. - -Arpeggios can be explicitly written out with ties. For more -information, see @ref{Ties}. - - -@predefined -@code{\arpeggio}, -@code{\arpeggioArrowUp}, -@code{\arpeggioArrowDown}, -@code{\arpeggioNormal}, -@code{\arpeggioBracket}, -@code{\arpeggioParenthesis} -@code{\arpeggioParenthesisDashed}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{creating-cross-staff-arpeggios-in-a-piano-staff.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{creating-cross-staff-arpeggios-in-other-contexts.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{creating-arpeggios-across-notes-in-different-voices.ly} - - -@seealso -Music Glossary: -@rglos{arpeggio}. - -Notation Reference: -@ref{Slurs}, -@ref{Ties}. - -Snippets: -@rlsr{Expressive marks}. - -Internals Reference: -@rinternals{Arpeggio}, -@rinternals{Slur}, -@rinternals{PianoStaff}. - - -@knownissues - -@cindex cross-staff parenthesis-style arpeggio -@cindex arpeggio, parenthesis-style, cross-staff -@cindex arpeggio, cross-staff parenthesis-style - -It is not possible to mix connected arpeggios and unconnected -arpeggios in one @code{PianoStaff} at the same point in -time. - -The parenthesis-style arpeggio brackets do not work for -cross-staff arpeggios. - - -@node Trills -@unnumberedsubsubsec Trills - -@cindex trills - -@funindex \trill -@funindex trill -@funindex \startTrillSpan -@funindex startTrillSpan -@funindex \stopTrillSpan -@funindex stopTrillSpan - -Short @notation{trills} without an extender line are printed with -@code{\trill}; see @ref{Articulations and ornamentations}. - -Longer trills with an extender line are made with -@code{\startTrillSpan} and @code{\stopTrillSpan}: - -@lilypond[verbatim,quote,relative=2] -d1~\startTrillSpan -d1 -c2\stopTrillSpan r2 -@end lilypond - -In the following example, a trill is combined with grace notes. -The syntax of this construct and the method to precisely position -the grace notes are described in @ref{Grace notes}. - -@lilypond[verbatim,quote,relative=2] -c1 \afterGrace -d1\startTrillSpan { c32[ d]\stopTrillSpan } -e2 r2 -@end lilypond - -@cindex pitched trills -@cindex trills, pitched -@funindex \pitchedTrill -@funindex pitchedTrill - -Trills that require an auxiliary note with an explicit pitch can -be typeset with the @code{\pitchedTrill} command. The first -argument is the main note, and the second is the @emph{trilled} -note, printed as a stemless note head in parentheses. - -@lilypond[verbatim,quote,relative=1] -\pitchedTrill e2\startTrillSpan fis -d\stopTrillSpan -@end lilypond - -@cindex pitched trill with forced accidental -@cindex trill, pitched with forced accidental -@cindex accidental, forced for pitched trill - -In the following example, the second pitched trill is ambiguous; -the accidental of the trilled note is not printed. As a -workaround, the accidentals of the trilled notes can be forced. -The second measure illustrates this method: - -@lilypond[verbatim,quote,relative=2] -\pitchedTrill eis4\startTrillSpan fis -g\stopTrillSpan -\pitchedTrill eis4\startTrillSpan fis -g\stopTrillSpan -\pitchedTrill eis4\startTrillSpan fis -g\stopTrillSpan -\pitchedTrill eis4\startTrillSpan fis! -g\stopTrillSpan -@end lilypond - - -@predefined -@code{\startTrillSpan}, -@code{\stopTrillSpan}. -@endpredefined - - -@seealso -Music Glossary: -@rglos{trill}. - -Notation Reference: -@ref{Articulations and ornamentations}, -@ref{Grace notes}. - -Snippets: -@rlsr{Expressive marks}. - -Internals Reference: -@rinternals{TrillSpanner}. - diff --git a/Documentation/user/fdl.itexi b/Documentation/user/fdl.itexi deleted file mode 100644 index 158e5c6c30..0000000000 --- a/Documentation/user/fdl.itexi +++ /dev/null @@ -1,403 +0,0 @@ - -@node GNU Free Documentation License -@appendix GNU Free Documentation License - -@cindex FDL, GNU Free Documentation License -@center Version 1.1, March 2000 - -@display -Copyright @copyright{} 2000 Free Software Foundation, Inc. -59 Temple Place, Suite 330, Boston, MA 02111-1307, USA - -Everyone is permitted to copy and distribute verbatim copies -of this license document, but changing it is not allowed. -@end display - -@enumerate 0 -@item -PREAMBLE - -The purpose of this License is to make a manual, textbook, or other -written document @dfn{free} in the sense of freedom: to assure everyone -the effective freedom to copy and redistribute it, with or without -modifying it, either commercially or noncommercially. Secondarily, -this License preserves for the author and publisher a way to get -credit for their work, while not being considered responsible for -modifications made by others. - -This License is a kind of @q{copyleft}, which means that derivative -works of the document must themselves be free in the same sense. It -complements the GNU General Public License, which is a copyleft -license designed for free software. - -We have designed this License in order to use it for manuals for free -software, because free software needs free documentation: a free -program should come with manuals providing the same freedoms that the -software does. But this License is not limited to software manuals; -it can be used for any textual work, regardless of subject matter or -whether it is published as a printed book. We recommend this License -principally for works whose purpose is instruction or reference. - -@item -APPLICABILITY AND DEFINITIONS - -This License applies to any manual or other work that contains a -notice placed by the copyright holder saying it can be distributed -under the terms of this License. The @q{Document}, below, refers to any -such manual or work. Any member of the public is a licensee, and is -addressed as @q{you}. - -A @q{Modified Version} of the Document means any work containing the -Document or a portion of it, either copied verbatim, or with -modifications and/or translated into another language. - -A @q{Secondary Section} is a named appendix or a front-matter section of -the Document that deals exclusively with the relationship of the -publishers or authors of the Document to the Document's overall subject -(or to related matters) and contains nothing that could fall directly -within that overall subject. (For example, if the Document is in part a -textbook of mathematics, a Secondary Section may not explain any -mathematics.) The relationship could be a matter of historical -connection with the subject or with related matters, or of legal, -commercial, philosophical, ethical or political position regarding -them. - -The @q{Invariant Sections} are certain Secondary Sections whose titles -are designated, as being those of Invariant Sections, in the notice -that says that the Document is released under this License. - -The @q{Cover Texts} are certain short passages of text that are listed, -as Front-Cover Texts or Back-Cover Texts, in the notice that says that -the Document is released under this License. - -A @q{Transparent} copy of the Document means a machine-readable copy, -represented in a format whose specification is available to the -general public, whose contents can be viewed and edited directly and -straightforwardly with generic text editors or (for images composed of -pixels) generic paint programs or (for drawings) some widely available -drawing editor, and that is suitable for input to text formatters or -for automatic translation to a variety of formats suitable for input -to text formatters. A copy made in an otherwise Transparent file -format whose markup has been designed to thwart or discourage -subsequent modification by readers is not Transparent. A copy that is -not @q{Transparent} is called @q{Opaque}. - -Examples of suitable formats for Transparent copies include plain -@sc{ascii} without markup, Texinfo input format, La@TeX{} input format, -@acronym{SGML} or @acronym{XML} using a publicly available -@acronym{DTD}, and standard-conforming simple @acronym{HTML} designed -for human modification. Opaque formats include PostScript, -@acronym{PDF}, proprietary formats that can be read and edited only by -proprietary word processors, @acronym{SGML} or @acronym{XML} for which -the @acronym{DTD} and/or processing tools are not generally available, -and the machine-generated @acronym{HTML} produced by some word -processors for output purposes only. - -The @q{Title Page} means, for a printed book, the title page itself, -plus such following pages as are needed to hold, legibly, the material -this License requires to appear in the title page. For works in -formats which do not have any title page as such, @q{Title Page} means -the text near the most prominent appearance of the work's title, -preceding the beginning of the body of the text. - -@item -VERBATIM COPYING - -You may copy and distribute the Document in any medium, either -commercially or noncommercially, provided that this License, the -copyright notices, and the license notice saying this License applies -to the Document are reproduced in all copies, and that you add no other -conditions whatsoever to those of this License. You may not use -technical measures to obstruct or control the reading or further -copying of the copies you make or distribute. However, you may accept -compensation in exchange for copies. If you distribute a large enough -number of copies you must also follow the conditions in section 3. - -You may also lend copies, under the same conditions stated above, and -you may publicly display copies. - -@item -COPYING IN QUANTITY - -If you publish printed copies of the Document numbering more than 100, -and the Document's license notice requires Cover Texts, you must enclose -the copies in covers that carry, clearly and legibly, all these Cover -Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on -the back cover. Both covers must also clearly and legibly identify -you as the publisher of these copies. The front cover must present -the full title with all words of the title equally prominent and -visible. You may add other material on the covers in addition. -Copying with changes limited to the covers, as long as they preserve -the title of the Document and satisfy these conditions, can be treated -as verbatim copying in other respects. - -If the required texts for either cover are too voluminous to fit -legibly, you should put the first ones listed (as many as fit -reasonably) on the actual cover, and continue the rest onto adjacent -pages. - -If you publish or distribute Opaque copies of the Document numbering -more than 100, you must either include a machine-readable Transparent -copy along with each Opaque copy, or state in or with each Opaque copy -a publicly-accessible computer-network location containing a complete -Transparent copy of the Document, free of added material, which the -general network-using public has access to download anonymously at no -charge using public-standard network protocols. If you use the latter -option, you must take reasonably prudent steps, when you begin -distribution of Opaque copies in quantity, to ensure that this -Transparent copy will remain thus accessible at the stated location -until at least one year after the last time you distribute an Opaque -copy (directly or through your agents or retailers) of that edition to -the public. - -It is requested, but not required, that you contact the authors of the -Document well before redistributing any large number of copies, to give -them a chance to provide you with an updated version of the Document. - -@item -MODIFICATIONS - -You may copy and distribute a Modified Version of the Document under -the conditions of sections 2 and 3 above, provided that you release -the Modified Version under precisely this License, with the Modified -Version filling the role of the Document, thus licensing distribution -and modification of the Modified Version to whoever possesses a copy -of it. In addition, you must do these things in the Modified Version: - -@enumerate A -@item -Use in the Title Page (and on the covers, if any) a title distinct -from that of the Document, and from those of previous versions -(which should, if there were any, be listed in the History section -of the Document). You may use the same title as a previous version -if the original publisher of that version gives permission. - -@item -List on the Title Page, as authors, one or more persons or entities -responsible for authorship of the modifications in the Modified -Version, together with at least five of the principal authors of the -Document (all of its principal authors, if it has less than five). - -@item -State on the Title page the name of the publisher of the -Modified Version, as the publisher. - -@item -Preserve all the copyright notices of the Document. - -@item -Add an appropriate copyright notice for your modifications -adjacent to the other copyright notices. - -@item -Include, immediately after the copyright notices, a license notice -giving the public permission to use the Modified Version under the -terms of this License, in the form shown in the Addendum below. - -@item -Preserve in that license notice the full lists of Invariant Sections -and required Cover Texts given in the Document's license notice. - -@item -Include an unaltered copy of this License. - -@item -Preserve the section entitled @q{History}, and its title, and add to -it an item stating at least the title, year, new authors, and -publisher of the Modified Version as given on the Title Page. If -there is no section entitled @q{History} in the Document, create one -stating the title, year, authors, and publisher of the Document as -given on its Title Page, then add an item describing the Modified -Version as stated in the previous sentence. - -@item -Preserve the network location, if any, given in the Document for -public access to a Transparent copy of the Document, and likewise -the network locations given in the Document for previous versions -it was based on. These may be placed in the @q{History} section. -You may omit a network location for a work that was published at -least four years before the Document itself, or if the original -publisher of the version it refers to gives permission. - -@item -In any section entitled @q{Acknowledgments} or @q{Dedications}, -preserve the section's title, and preserve in the section all the -substance and tone of each of the contributor acknowledgments -and/or dedications given therein. - -@item -Preserve all the Invariant Sections of the Document, -unaltered in their text and in their titles. Section numbers -or the equivalent are not considered part of the section titles. - -@item -Delete any section entitled @q{Endorsements}. Such a section -may not be included in the Modified Version. - -@item -Do not retitle any existing section as @q{Endorsements} -or to conflict in title with any Invariant Section. -@end enumerate - -If the Modified Version includes new front-matter sections or -appendices that qualify as Secondary Sections and contain no material -copied from the Document, you may at your option designate some or all -of these sections as invariant. To do this, add their titles to the -list of Invariant Sections in the Modified Version's license notice. -These titles must be distinct from any other section titles. - -You may add a section entitled @q{Endorsements}, provided it contains -nothing but endorsements of your Modified Version by various -parties---for example, statements of peer review or that the text has -been approved by an organization as the authoritative definition of a -standard. - -You may add a passage of up to five words as a Front-Cover Text, and a -passage of up to 25 words as a Back-Cover Text, to the end of the list -of Cover Texts in the Modified Version. Only one passage of -Front-Cover Text and one of Back-Cover Text may be added by (or -through arrangements made by) any one entity. If the Document already -includes a cover text for the same cover, previously added by you or -by arrangement made by the same entity you are acting on behalf of, -you may not add another; but you may replace the old one, on explicit -permission from the previous publisher that added the old one. - -The author(s) and publisher(s) of the Document do not by this License -give permission to use their names for publicity for or to assert or -imply endorsement of any Modified Version. - -@item -COMBINING DOCUMENTS - -You may combine the Document with other documents released under this -License, under the terms defined in section 4 above for modified -versions, provided that you include in the combination all of the -Invariant Sections of all of the original documents, unmodified, and -list them all as Invariant Sections of your combined work in its -license notice. - -The combined work need only contain one copy of this License, and -multiple identical Invariant Sections may be replaced with a single -copy. If there are multiple Invariant Sections with the same name but -different contents, make the title of each such section unique by -adding at the end of it, in parentheses, the name of the original -author or publisher of that section if known, or else a unique number. -Make the same adjustment to the section titles in the list of -Invariant Sections in the license notice of the combined work. - -In the combination, you must combine any sections entitled @q{History} -in the various original documents, forming one section entitled -@q{History}; likewise combine any sections entitled @q{Acknowledgments}, -and any sections entitled @q{Dedications}. You must delete all sections -entitled @q{Endorsements.} - -@item -COLLECTIONS OF DOCUMENTS - -You may make a collection consisting of the Document and other documents -released under this License, and replace the individual copies of this -License in the various documents with a single copy that is included in -the collection, provided that you follow the rules of this License for -verbatim copying of each of the documents in all other respects. - -You may extract a single document from such a collection, and distribute -it individually under this License, provided you insert a copy of this -License into the extracted document, and follow this License in all -other respects regarding verbatim copying of that document. - -@item -AGGREGATION WITH INDEPENDENT WORKS - -A compilation of the Document or its derivatives with other separate -and independent documents or works, in or on a volume of a storage or -distribution medium, does not as a whole count as a Modified Version -of the Document, provided no compilation copyright is claimed for the -compilation. Such a compilation is called an @q{aggregate}, and this -License does not apply to the other self-contained works thus compiled -with the Document, on account of their being thus compiled, if they -are not themselves derivative works of the Document. - -If the Cover Text requirement of section 3 is applicable to these -copies of the Document, then if the Document is less than one quarter -of the entire aggregate, the Document's Cover Texts may be placed on -covers that surround only the Document within the aggregate. -Otherwise they must appear on covers around the whole aggregate. - -@item -TRANSLATION - -Translation is considered a kind of modification, so you may -distribute translations of the Document under the terms of section 4. -Replacing Invariant Sections with translations requires special -permission from their copyright holders, but you may include -translations of some or all Invariant Sections in addition to the -original versions of these Invariant Sections. You may include a -translation of this License provided that you also include the -original English version of this License. In case of a disagreement -between the translation and the original English version of this -License, the original English version will prevail. - -@item -TERMINATION - -You may not copy, modify, sublicense, or distribute the Document except -as expressly provided for under this License. Any other attempt to -copy, modify, sublicense or distribute the Document is void, and will -automatically terminate your rights under this License. However, -parties who have received copies, or rights, from you under this -License will not have their licenses terminated so long as such -parties remain in full compliance. - -@item -FUTURE REVISIONS OF THIS LICENSE - -The Free Software Foundation may publish new, revised versions -of the GNU Free Documentation License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. See -@uref{http://www.gnu.org/copyleft/}. - -Each version of the License is given a distinguishing version number. -If the Document specifies that a particular numbered version of this -License @q{or any later version} applies to it, you have the option of -following the terms and conditions either of that specified version or -of any later version that has been published (not as a draft) by the -Free Software Foundation. If the Document does not specify a version -number of this License, you may choose any version ever published (not -as a draft) by the Free Software Foundation. -@end enumerate - -@page -@subheading ADDENDUM: How to use this License for your documents - -To use this License in a document you have written, include a copy of -the License in the document and put the following copyright and -license notices just after the title page: - -@smallexample -@group - Copyright (C) @var{year} @var{your name}. - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.1 - or any later version published by the Free Software Foundation; - with the Invariant Sections being @var{list their titles}, with the - Front-Cover Texts being @var{list}, and with the Back-Cover Texts being @var{list}. - A copy of the license is included in the section entitled @q{GNU - Free Documentation License}. -@end group -@end smallexample - -If you have no Invariant Sections, write @q{with no Invariant Sections} -instead of saying which ones are invariant. If you have no -Front-Cover Texts, write @q{no Front-Cover Texts} instead of -@q{Front-Cover Texts being @var{list}}; likewise for Back-Cover Texts. - -If your document contains nontrivial examples of program code, we -recommend releasing these examples in parallel under your choice of -free software license, such as the GNU General Public License, -to permit their use in free software. - -@c Local Variables: -@c ispell-local-pdict: "ispell-dict" -@c End: - diff --git a/Documentation/user/fretted-strings.itely b/Documentation/user/fretted-strings.itely deleted file mode 100644 index 1f153e3d9b..0000000000 --- a/Documentation/user/fretted-strings.itely +++ /dev/null @@ -1,1334 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Fretted string instruments -@section Fretted string instruments - -@lilypondfile[quote]{fretted-headword.ly} - -This section discusses several aspects of music notation that are unique -to fretted string instruments. - -@cindex tablature -@cindex tablature, guitar -@cindex tablature, banjo -@cindex guitar tablature -@cindex banjo tablature - -@menu -* Common notation for fretted strings:: -* Guitar:: -* Banjo:: -@end menu - -@node Common notation for fretted strings -@subsection Common notation for fretted strings - -This section discusses common notation that is unique -to fretted string instruments. - -@menu -* References for fretted strings:: -* String number indications:: -* Default tablatures:: -* Custom tablatures:: -* Fret diagram markups:: -* Predefined fret diagrams:: -* Automatic fret diagrams:: -* Right-hand fingerings:: -@end menu - -@node References for fretted strings -@unnumberedsubsubsec References for fretted strings - -Music for fretted string instruments is normally notated on -a single staff, either in traditional music notation or in -tablature. Sometimes the two types are combined, and it is -especially common in popular music to use chord diagrams above -a staff of traditional notation. The guitar and the banjo are -transposing instruments, sounding an octave lower than written. -Scores for these instruments should use the @code{"treble_8"} clef. -Some other elements pertinent to fretted string instruments -are covered elsewhere: - -@itemize -@item Fingerings are indicated as shown in @ref{Fingering instructions}. - -@item Instructions for @notation{Laissez vibrer} ties -as well as ties on arpeggios and tremolos can be found in -@ref{Ties}. - -@item Instructions for handling multiple voices can be found -in @ref{Collision resolution}. - -@item Instructions for indicating harmonics can be found in -@ref{Harmonics}. - -@end itemize - - -@seealso -Notation Reference: -@ref{Fingering instructions}, -@ref{Ties}, -@ref{Collision resolution}, -@ref{Instrument names}, -@ref{Writing music in parallel}, -@ref{Arpeggio}, -@ref{List of articulations}, -@ref{Clef}. - - -@node String number indications -@unnumberedsubsubsec String number indications - -@cindex string numbers -@cindex string vs. fingering numbers -@cindex fingering vs. string numbers - -The string on which a note should be played may be indicated by -appending @code{\@var{number}} to a note inside a chord construct -@code{<>}. - -@warning{String numbers @strong{must} be defined inside a chord -construct even if there is only a single note.} - -@lilypond[verbatim,quote,relative=0] -\clef "treble_8" -4 2 -1 -@end lilypond - -When fingerings and string indications are used together, their -placement is controlled by the order in which the two items appear -in the code: - -@lilypond[verbatim,quote,relative=1] -\clef "treble_8" -2 - -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{controlling-the-placement-of-chord-fingerings.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{allowing-fingerings-to-be-printed-inside-the-staff.ly} - - -@seealso -Notation Reference: -@ref{Fingering instructions}. - -Snippets: -@rlsr{Fretted strings}. - -Internals Reference: -@rinternals{StringNumber}, -@rinternals{Fingering}. - - -@node Default tablatures -@unnumberedsubsubsec Default tablatures - -@cindex tablatures, basic -@cindex tablatures, default - -@funindex TabStaff -@funindex TabVoice - -Tablature notation is used for notating music for plucked string -instruments. Pitches are not denoted with note heads, but by -numbers indicating on which string and fret a note must be played. -LilyPond offers limited support for tablature. - -The string number associated with a note is given as a backslash -followed by a number. By default, string 1 is the highest, -and the tuning defaults to the standard guitar tuning (with 6 strings). -The notes are printed as tablature, by using @code{TabStaff} and -@code{TabVoice} contexts - -@lilypond[quote,ragged-right,fragment,verbatim] -\new TabStaff { - a,4\5 c'\2 a\3 e'\1 - e\4 c'\2 a\3 e'\1 -} -@end lilypond - -@funindex minimumFret - -@cindex fret - - -When no string is specified for a note, the note is assigned to -the highest string that can generate the note with a fret number -greater than or equal to the value of @code{minimumFret}. -The default value for @code{minimumFret} is 0. - - -@lilypond[quote,ragged-right,verbatim] -\new StaffGroup << - \new Staff \relative c { - \clef "treble_8" - c16 d e f g4 - c,16 d e f g4 - } - \new TabStaff \relative c { - c16 d e f g4 - \set TabStaff.minimumFret = #5 - c,16 d e f g4 - } ->> -@end lilypond - -@cindex harmonic indications in tablature notation -@cindex tablature and harmonic indications -@cindex slides in tablature notation -@cindex tablature and slides - -Harmonic indications and slides can be added to tablature -notation. - -@lilypond[fragment, verbatim, quote, relative=1] -\new TabStaff { - \new TabVoice { - d\2\glissando e\2 - } -} -@end lilypond - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{stem-and-beam-behavior-in-tablature.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{polyphony-in-tablature.ly} - - -@seealso -Notation Reference: -@ref{Stems}. - -Snippets: -@rlsr{Fretted strings}. - -Internals Reference: -@rinternals{TabNoteHead}, -@rinternals{TabStaff}, -@rinternals{TabVoice}, -@rinternals{Beam}. - - -@knownissues - -Chords are not handled in a special way, and hence the automatic -string selector may easily select the same string for two notes in -a chord. - -In order to handle @code{\partcombine}, a @code{TabStaff} must use -specially-created voices: - -@lilypond[quote,ragged-right,verbatim] -melodia = \partcombine { e4 g g g }{ e4 e e e } -<< - \new TabStaff << - \new TabVoice = "one" s1 - \new TabVoice = "two" s1 - \new TabVoice = "shared" s1 - \new TabVoice = "solo" s1 - { \melodia } - >> ->> -@end lilypond - -Guitar special effects are limited to harmonics and slides. - -@node Custom tablatures -@unnumberedsubsubsec Custom tablatures - -@cindex tablatures, custom -@cindex tablature, banjo -@cindex tablature, mandolin -@cindex tablature, bass guitar -@cindex tablature, predefined string tunings -@cindex fretted instruments, predefined string tunings -@cindex predefined string tunings for fretted instruments - -@funindex StringTunings - -LilyPond tabulature automatically calculates the fret for -a note based on the string to which the note is assigned. -In order to do this, the tuning of the strings must be -specified. The tuning of the strings is given in the -@code{StringTunings} property. - -LilyPond comes with predefined string tunings for banjo, mandolin, -guitar and bass guitar. LilyPond automatically sets the correct -transposition for predefined tunings. The following example is -for bass guitar, which sounds an octave lower than written. - -@lilypond[quote,ragged-right,verbatim] -<< - \new Staff { - \clef "bass_8" - \relative c, { - c4 d e f - } - } - \new TabStaff { - \set TabStaff.stringTunings = #bass-tuning - \relative c, { - c4 d e f - } - } ->> -@end lilypond - -The default string tuning is @code{guitar-tuning}, which -is the standard EADGBE tuning. Some other predefined tunings are -@code{guitar-open-g-tuning}, @code{mandolin-tuning} and -@code{banjo-open-g-tuning}. The predefined string tunings -are found in @code{scm/output-lib.scm}. - -A string tuning is a Scheme list of string pitches, -one for each string, ordered by string number from 1 to N, -where string 1 is at the top of the tablature staff and -string N is at the bottom. This ordinarily results in ordering -from highest pitch to lowest pitch, but some instruments -(e.g. ukulele) do not have strings ordered by pitch. - -A string pitch in a string tuning list is the pitch difference -of the open string from middle C measured in semitones. The -string pitch must be an integer. LilyPond calculates the actual -pitch of the string by adding the string tuning pitch to the -actual pitch for middle C. - -LilyPond automatically calculates the number of strings in the -@code{TabStaff} as the number of elements in @code{stringTunings}. - -Any desired string tuning can be created. For example, we can -define a string tuning for a four-string instrument with pitches -of @code{a''}, @code{d''}, @code{g'}, and @code{c'}: - - -@lilypond[quote,verbatim] -mynotes = { - c'4 e' g' c'' | - e'' g'' b'' c''' -} - -<< - \new Staff { - \clef treble - \mynotes - } - \new TabStaff { - \set TabStaff.stringTunings = #'(21 14 7 0) - \mynotes - } ->> -@end lilypond - - -@seealso -Installed Files: -@file{scm/output-lib.scm}. - -Snippets: -@rlsr{Fretted strings}. - -Internals Reference: -@rinternals{Tab_note_heads_engraver}. - - -@node Fret diagram markups -@unnumberedsubsubsec Fret diagram markups - -@cindex fret diagrams -@cindex chord diagrams -@cindex diagrams, fret -@cindex diagrams, chord for fretted instruments -@cindex fret diagrams, custom -@cindex custom fret diagrams - -Fret diagrams can be added to music as a markup to the desired -note. The markup contains information about the desired fret -diagram. There are three different fret-diagram markup -interfaces: standard, terse, and verbose. The three interfaces -produce equivalent markups, but have varying amounts of -information in the markup string. Details about the markup -interfaces are found at @ref{Text markup commands}. - -The standard fret diagram markup string indicates the string -number and the fret number for each dot to be placed on the string. -In addition, open and unplayed (muted) strings can be indicated. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - c1 d:m - } - } - \context Staff { - \clef "treble_8" - < c e g c' e' > 1 ^\markup - \fret-diagram #"6-x;5-3;4-2;3-o;2-1;1-o;" - < d a d' f'> ^\markup - \fret-diagram #"6-x;5-x;4-o;3-2;2-3;1-1;" - } ->> -@end lilypond - -@cindex barre indications - -Barre indications can be added to the diagram from -the fret-diagram markup string. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - f1 g - } - } - \context Staff { - \clef "treble_8" - < f, c f a c' f'>1 ^\markup - \fret-diagram #"c:6-1-1;6-1;5-3;4-3;3-2;2-1;1-1;" - < g, d g b d' g'> ^\markup - \fret-diagram #"c:6-1-3;6-3;5-5;4-5;3-4;2-3;1-3;" - } ->> -@end lilypond - -@cindex fret-diagram markup - -@funindex fret-diagram -@funindex \fret-diagram - -The size of the fret diagram, and the number of frets in the diagram -can be changed in the fret-diagram markup string. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - f1 g - } - } - \context Staff { - \clef "treble_8" - < f, c f a c' f'>1 ^\markup - \fret-diagram #"s:1.5;c:6-1-1;6-1;5-3;4-3;3-2;2-1;1-1;" - < g, b, d g b g'> ^\markup - \fret-diagram #"h:6;6-3;5-2;4-o;3-o;2-o;1-3;" - } ->> -@end lilypond - -The number of strings in a fret diagram can be changed to accomodate -different instruments such as banjos and ukeleles with the fret-diagram -markup string. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - a1 - } - } - \context Staff { - %% A chord for ukelele - a'1 ^\markup \fret-diagram #"w:4;4-2-2;3-1-1;2-o;1-o;" - } ->> -@end lilypond - -Fingering indications can be added, and the location of fingering labels -can be controlled by the fret-diagram markup string. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - c1 d:m - } - } - \context Staff { - \clef "treble_8" - < c e g c' e' > 1 ^\markup - \fret-diagram #"f:1;6-x;5-3-3;4-2-2;3-o;2-1-1;1-o;" - < d a d' f'> ^\markup - \fret-diagram #"f:2;6-x;5-x;4-o;3-2-2;2-3-3;1-1-1;" - } ->> -@end lilypond - -Dot radius and dot position can be controlled with the fret-diagram -markup string. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - c1 d:m - } - } - \context Staff { - \clef "treble_8" - < c e g c' e' > 1 ^\markup - \fret-diagram #"d:0.35;6-x;5-3;4-2;3-o;2-1;1-o;" - < d a d' f'> ^\markup - \fret-diagram #"p:0.2;6-x;5-x;4-o;3-2;2-3;1-1;" - } ->> -@end lilypond - -@cindex fret-diagram-terse markup - -@funindex fret-diagram-terse -@funindex \fret-diagram-terse - -The fret-diagram-terse markup string omits string numbers; the string -number is implied by the presence of semicolons. There is one semicolon -for each string in the diagram. The first semicolon corresponds to the -highest string number and the last semicolon corresponds to the first string. -Mute strings, open strings, and fret numbers can be indicated. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - c1 d:m - } - } - \context Staff { - \clef "treble_8" - < c e g c' e' > 1 ^\markup - \fret-diagram-terse #"x;3;2;o;1;o;" - < d a d' f'> ^\markup - \fret-diagram-terse #"x;x;o;2;3;1;" - } ->> -@end lilypond - -Barre indicators can be included in the fret-diagram-terse markup string. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - f1 g - } - } - \context Staff { - \clef "treble_8" - < f, c f a c' f'>1 ^\markup - \fret-diagram-terse #"1-(;3;3;2;1;1-);" - < g, d g b d' g'> ^\markup - \fret-diagram-terse #"3-(;5;5;4;3;3-);" - } ->> -@end lilypond - -Fingering indications can be included in the fret-diagram-terse markup string. - -@c Need to use override to enable fingerings to show this -- can we do so? -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - c1 d:m - } - } - \context Staff { - \override Voice.TextScript - #'(fret-diagram-details finger-code) = #'below-string - \clef "treble_8" - < c e g c' e' > 1 ^\markup - \fret-diagram-terse #"x;3-3;2-2;o;1-1;o;" - < d a d' f'> ^\markup - \fret-diagram-terse #"x;x;o;2-2;3-3;1-1;" - } ->> -@end lilypond - -Other fret diagram properties must be adjusted using @code{\override} when using -the fret-diagram-terse markup. - -@cindex fret-diagram-verbose markup - -@funindex fret-diagram-verbose -@funindex \fret-diagram-verbose - -The fret-diagram-verbose markup string is in the format of a Scheme list. Each -element of the list indicates an item to be placed on the fret diagram. - -@lilypond[quote, verbatim] -<< \context ChordNames { - \chordmode { - c1 d:m - } - } - \context Staff { - \clef "treble_8" - < c e g c' e' > 1 ^\markup - \fret-diagram-verbose #'( - (mute 6) - (place-fret 5 3) - (place-fret 4 2) - (open 3) - (place-fret 2 1) - (open 1) - ) - < d a d' f'> ^\markup - \fret-diagram-verbose #'( - (mute 6) - (mute 5) - (open 4) - (place-fret 3 2) - (place-fret 2 3) - (place-fret 1 1) - ) - } ->> -@end lilypond - -Fingering indications and barres can be included in a -fret-diagram-verbose markup string. Unique to the -fret-diagram-verbose interface is a capo indication that -can be placed on the fret diagram. The capo indication is -a thick bar that covers all strings. The fret with the -capo will be the lowest fret in the fret diagram. - -@c \override is necessary to make fingering visible -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - f1 g c - } - } - \context Staff { - \clef "treble_8" - \override Voice.TextScript - #'(fret-diagram-details finger-code) = #'below-string - - < f, c f a c' f'>1 ^\markup - \fret-diagram-verbose #'( - (place-fret 6 1) - (place-fret 5 3) - (place-fret 4 3) - (place-fret 3 2) - (place-fret 2 1) - (place-fret 1 1) - (barre 6 1 1) - ) - < g, b, d g b g'> ^\markup - \fret-diagram-verbose #'( - (place-fret 6 3 2) - (place-fret 5 2 1) - (open 4) - (open 3) - (open 2) - (place-fret 1 3 3) - ) - < c e g c' e'> ^\markup - \fret-diagram-verbose #'( - (capo 3) - (mute 6) - (place-fret 4 5 1) - (place-fret 3 5 2) - (place-fret 2 5 3) - ) - } ->> -@end lilypond - -All other fret diagram properties must be adjusted using @code{\override} -when using the fret-diagram-verbose markup. - -@ignore -The following example shows the three fret-diagram markup -interfaces, along with examples of common tweaks. For example, -the size of the verbose fret diagram is reduced to 0.75, and the -finger indications are specified to appear below the diagram. The -terse diagram includes tweaks to specify placement of finger code -and color of dots. - -@lilypond[verbatim,ragged-right,quote] -\new Voice { - \clef "treble_8" - d^\markup \fret-diagram #"6-x;5-x;4-o;3-2;2-3;1-2;" - d d d - fis^\markup \override #'(size . 0.75) { - \override #'(finger-code . below-string) { - \fret-diagram-verbose #'((place-fret 6 2 1) (barre 6 1 2) - (place-fret 5 4 3) - (place-fret 4 4 4) - (place-fret 3 3 2) - (place-fret 2 2 1) - (place-fret 1 2 1)) - } - } - fis fis fis - c^\markup \override #'(dot-radius . 0.35) { - \override #'(finger-code . in-dot) { - \override #'(dot-color . white) { - \fret-diagram-terse #"x;3-1-(;5-2;5-3;5-4;3-1-);" - } - } - } - c c c -} -@end lilypond -@end ignore - -@cindex customized fret diagram -@cindex fret diagram, customized -@cindex diagram, fret, customized - -@funindex fret-diagram-interface - -The graphical layout of a fret diagram can be customized according to -user preference through the properties of the @code{fret-diagram-interface}. -Details are found at @rinternals{fret-diagram-interface}. For a fret diagram -markup, the interface properties belong to @code{Voice.TextScript}. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{customizing-markup-fret-diagrams.ly} - - -@seealso -Notation Reference: -@ref{Text markup commands}. - -Snippets: -@rlsr{Fretted strings}. - -Internals Reference: -@rinternals{fret-diagram-interface}. - - -@node Predefined fret diagrams -@unnumberedsubsubsec Predefined fret diagrams - - -@cindex fret diagrams -@cindex chord diagrams - -@funindex FretBoards -@funindex stringTunings - -Fret diagrams can be displayed using the @code{FretBoards} context. By -default, the @code{FretBoards} context will display fret diagrams that -are stored in a lookup table: - -@lilypond[verbatim, ragged-right, quote] -\include "predefined-guitar-fretboards.ly" -\context FretBoards { - \chordmode { - c1 d - } -} -@end lilypond - -The default predefined fret diagrams are contained in the file -@code{predefined-guitar-fretboards.ly}. Fret diagrams are -stored based on the pitches of a chord and the value of -@code{stringTunings} that is currently in use. -@code{predefined-guitar-fretboards.ly} contains predefined -fret diagrams only for @code{guitar-tuning}. Predefined fret -diagrams can be added for other instruments or other tunings -by following the examples found in -@code{predefined-guitar-fretboards.ly}. - -Chord pitches can be entered -either as simultaneous music or using chord mode (see -@ref{Chord mode overview}). - -@lilypond[verbatim, ragged-right,quote] -\include "predefined-guitar-fretboards.ly" -\context FretBoards { - \chordmode {c1} - 1 -} -@end lilypond - -@cindex chord names with fret diagrams -@cindex fret diagrams with chord names - -@funindex ChordNames -@funindex chordmode -@funindex \chordmode - -It is common that both chord names and fret diagrams are displayed together. -This is achieved by putting a @code{ChordNames} context in parallel with -a @code{FretBoards} context and giving both contexts the same music. - -@lilypond[verbatim, ragged-right, quote] -\include "predefined-guitar-fretboards.ly" -mychords = \chordmode{ - c1 f g -} - -<< - \context ChordNames { - \mychords - } - \context FretBoards { - \mychords - } ->> -@end lilypond - -@cindex transposing fret diagrams -@cindex fret diagrams, transposing -@cindex diagrams, fret, transposing - -Predefined fret diagrams are transposable, as long as a diagram for the -transposed chord is stored in the fret diagram table. - -@lilypond[verbatim, ragged-right, quote] -\include "predefined-guitar-fretboards.ly" -mychords = \chordmode{ - c1 f g -} - -mychordlist = { - \mychords - \transpose c e { \mychords} -} -<< - \context ChordNames { - \mychordlist - } - \context FretBoards { - \mychordlist - } ->> -@end lilypond - - -The predefined fret diagram table contains seven chords (major, minor, -augmented, diminished, dominant seventh, major seventh, minor seventh) -for each of 17 keys. A complete list of the predefined fret diagrams is -shown in @ref{Predefined fretboard diagrams}. If there is no entry in -the table for a chord, the FretBoards engraver will calculate a -fret-diagram using the automatic fret diagram functionality described in -@ref{Automatic fret diagrams}. - -@lilypond[verbatim, ragged-right, quote] -\include "predefined-guitar-fretboards.ly" -mychords = \chordmode{ - c1 c:9 -} - -<< - \context ChordNames { - \mychords - } - \context FretBoards { - \mychords - } ->> -@end lilypond - -@cindex fret diagrams, adding custom -@cindex custom fret diagrams, adding -@cindex adding custom fret diagrams - -Fret diagrams can be added to the fret diagram table. To add a diagram, -you must specify the chord for the diagram, the tuning to be used, and -a definition for the diagram. The diagram definition can be either a -fret-diagram-terse definition string or a fret-diagram-verbose -marking list. - -@lilypond[verbatim, ragged-right, quote] -\include "predefined-guitar-fretboards.ly" - -\storePredefinedDiagram \chordmode {c:9} - #guitar-tuning - #"x;3-2;2-1;3-3;3-4;x;" - -mychords = \chordmode{ - c1 c:9 -} - -<< - \context ChordNames { - \mychords - } - \context FretBoards { - \mychords - } ->> -@end lilypond - -Different fret diagrams for the same chord name can be stored using different -octaves of pitches. The different octave should be at least two octaves -above or below the default octave, because the octaves above and below the -default octave are used for transposing fretboards. - -@lilypond[verbatim, ragged-right, quote] -\include "predefined-guitar-fretboards.ly" - -\storePredefinedDiagram \chordmode {c''} - #guitar-tuning - #(offset-fret 2 (chord-shape 'bes guitar-tuning)) - -mychords = \chordmode{ - c1 c'' -} - -<< - \context ChordNames { - \mychords - } - \context FretBoards { - \mychords - } ->> -@end lilypond - -@cindex fretted instruments, chord shapes -@cindex chord shapes for fretted instruments - -@funindex \addChordShape -@funindex add ChordShape -@funindex storePredefinedDiagram -@funindex \storePredefinedDiagram - -In addition to fret diagrams, LilyPond stores an internal list of chord -shapes. The chord shapes are fret diagrams that can be shifted along -the neck to different posistions to provide different chords. Chord -shapes can be added to the internal list and then used to define -predefined fret diagrams. Because they can be moved to various -positions on the neck, chord shapes will normally not contain -any open strings. Like fret diagrams, chord shapes can be -entered as either fret-diagram-terse strings or fret-diagram-verbose -marking lists. - -@lilypond[verbatim, ragged-right, quote] -\include "predefined-guitar-fretboards.ly" - -% add a new chord shape - -\addChordShape #'powerf #guitar-tuning #"1-1;3-3;3-4;x;x;x;" - -% add some new chords based on the power chord shape - -\storePredefinedDiagram \chordmode {f''} - #guitar-tuning - #(chord-shape 'powerf guitar-tuning) -\storePredefinedDiagram \chordmode {g''} - #guitar-tuning - #(offset-fret 2 (chord-shape 'powerf guitar-tuning)) - -mychords = \chordmode{ - f1 f'' g g'' -} - -<< - \context ChordNames { - \mychords - } - \context FretBoards { - \mychords - } ->> -@end lilypond - -The graphical layout of a fret diagram can be customized according to -user preference through the properties of the @code{fret-diagram-interface}. -Details are found at @rinternals{fret-diagram-interface}. For a -predefined fret diagram, the interface properties belong to -@code{FretBoards.FretBoard}. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{customizing-fretboard-fret-diagrams.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{defining-predefined-fretboards-for-other-instruments.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{chordchanges-for-fretboards.ly} - -@seealso -Notation Reference: -@ref{Custom tablatures}, -@ref{Automatic fret diagrams}, -@ref{Chord mode overview}, -@ref{Predefined fretboard diagrams}. - -Installed Files: -@file{ly/predefined-guitar-fretboards.ly}, -@file{ly/predefined-guitar-ninth-fretboards.ly}. - -Snippets: -@rlsr{Fretted strings}. - -Internals Reference: -@rinternals {fret-diagram-interface}. - - -@node Automatic fret diagrams -@unnumberedsubsubsec Automatic fret diagrams - -@cindex fret diagrams, automatic -@cindex chord diagrams, automatic -@cindex automatic fret diagrams -@cindex automatic chord diagrams - -Fret diagrams can be automatically created from entered notes using the -@code{FretBoards} context. If no predefined diagram is available for -the entered notes in the active @code{stringTunings}, this context -calculates strings and frets that can be used to play the notes. - -@lilypond[quote,ragged-right,verbatim] -<< - \context ChordNames { - \chordmode { - f1 g - } - } - \context FretBoards { - < f, c f a c' f'>1 - < g,\6 b, d g b g'> - } - \context Staff { - \clef "treble_8" - < f, c f a c' f'>1 - < g, b, d g b' g'> - } ->> -@end lilypond - -@funindex predefinedFretboardsOff -@funindex \predefinedFretboardsOff -@funindex predefinedFretboardsOn -@funindex \predefinedFretboardsOn - -As no predefined diagrams are loaded by default, automatic calculation -of fret diagrams is the default behavior. Once default diagrams are -loaded, automatic calculation can be enabled and disabled with predefined -commands: - -@lilypond[quote,ragged-right,verbatim] - -\storePredefinedDiagram - #guitar-tuning - #"x;3-1-(;5-2;5-3;5-4;3-1-1);" -<< - \context ChordNames { - \chordmode { - c1 c c - } - } - \context FretBoards { - 1 - \predefinedFretboardsOff - - \predefinedFretboardsOn - - } - \context Staff { - \clef "treble_8" - 1 - - - } ->> -@end lilypond - - - -Sometimes the fretboard calculator will be unable to find -an accceptable diagram. This can often be remedied by -manually assigning a note to a string. In many cases, only one -note need be manually placed on a string; the rest of -the notes will then be placed appropriately by the @code{FretBoards} -context. - -@cindex fret diagrams, adding fingerings -@cindex fingerings, adding to fret diagrams - -Fingerings can be added to FretBoard fret diagrams. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - c1 d:m - } - } - \context FretBoards { - < c-3 e-2 g c'-1 e' > 1 - < d a-2 d'-3 f'-1> - } - \context Staff { - \clef "treble_8" - < c e g c' e' > 1 - < d a d' f'> - } ->> -@end lilypond - -The minimum fret to be used in calculating strings and frets for -the FretBoard context can be set with the @code{minimumFret} -property. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - d1:m d:m - } - } - \context FretBoards { - < d a d' f'> - \set FretBoards.minimumFret = #5 - < d a d' f'> - } - \context Staff { - \clef "treble_8" - < d a d' f'> - < d a d' f'> - } ->> -@end lilypond - -The strings and frets for the @code{FretBoards} context depend -on the @code{stringTunings} property, which has the same meaning -as in the TabStaff context. See @ref{Custom tablatures} for -information on the @code{stringTunings} property. - -The graphical layout of a fret diagram can be customized according to -user preference through the properties of the @code{fret-diagram-interface}. -Details are found at @rinternals{fret-diagram-interface}. For a -@code{FretBoards} fret diagram, the interface properties belong to -@code{FretBoards.FretBoard}. - - -@predefined -@code{\predefinedFretboardsOff}, -@code{\predefinedFretboardsOn}. -@endpredefined - - -@seealso -Notation Reference: -@ref{Custom tablatures}. - -Snippets: -@rlsr{Fretted strings}. - -Internals Reference: -@rinternals {fret-diagram-interface}. - - -@node Right-hand fingerings -@unnumberedsubsubsec Right-hand fingerings - -@cindex fretted instruments, right hand fingerings -@cindex fingerings, right hand for fretted instruments -@cindex right hand fingerings for fretted instruments - -@funindex rightHandFinger -@funindex \rightHandFinger - -Right-hand fingerings @var{p-i-m-a} must be entered within a -chord construct @code{<>} for them to be printed in the score, -even when applied to a single note. - -@warning{There @strong{must} be a hyphen after the note and a space -before the closing @code{>}.} - -@lilypond[quote,verbatim,relative=0] -\clef "treble_8" -4 - - - -1 -@end lilypond - -For convenience, you can abbreviate @code{\rightHandFinger} to something -short, for example @code{RH}, - -@example -#(define RH rightHandFinger) -@end example - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{placement-of-right-hand-fingerings.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{fingerings,-string-indications,-and-right-hand-fingerings.ly} - - -@seealso -Snippets: -@rlsr{Fretted strings}. - -Internals Reference: -@rinternals{StrokeFinger}. - - -@node Guitar -@subsection Guitar - -Most of the notational issues associated with guitar music are -covered sufficiently in the general fretted strings section, but there -are a few more worth covering here. Occasionally users want to -create songbook-type documents having only lyrics with chord -indications above them. Since LilyPond is a music typesetter, -it is not recommended for documents that have no music notation -in them. A better alternative is a word processor, text editor, -or, for experienced users, a typesetter like GuitarTeX. - -@menu -* Indicating position and barring:: -* Indicating harmonics and dampened notes:: -@end menu - -@node Indicating position and barring -@unnumberedsubsubsec Indicating position and barring - -@cindex indicating position and barring for fretted instruments -@cindex fretted instruments, indicating position and barring - -This example demonstrates how to include guitar position and -barring indications. - -@lilypond[quote,ragged-right,fragment,verbatim,relative=0] -\clef "treble_8" -b16 d g b e -\textSpannerDown -\override TextSpanner #'(bound-details left text) = #"XII " - g16\startTextSpan - b16 e g e b g\stopTextSpan -e16 b g d -@end lilypond - - -@seealso -Notation Reference: -@ref{Text spanners}. - -Snippets: -@rlsr{Fretted strings}, -@rlsr{Expressive marks}. - - -@node Indicating harmonics and dampened notes -@unnumberedsubsubsec Indicating harmonics and dampened notes - -@cindex fretted instruments, dampened notes -@cindex fretted instruments, harmonics -@cindex dampened notes on fretted instruments -@cindex harmonics on fretted instruments - -Special note heads can be used to indicate dampened notes or -harmonics. Harmonics are normally further explained with a -text markup. - -@lilypond[quote,ragged-right,fragment,verbatim] -\relative c' { - \clef "treble_8" - \override Staff.NoteHead #'style = #'cross - g8 a b c b4 - \override Staff.NoteHead #'style = #'harmonic-mixed - d^\markup { \italic { \fontsize #-2 { "harm. 12" }}} 1 -} -@end lilypond - - -@seealso -Snippets: -@rlsr{Fretted strings}. - -Notation Reference: -@ref{Special note heads}, -@ref{Note head styles}. - - -@node Banjo -@subsection Banjo - -@menu -* Banjo tablatures:: -@end menu - -@node Banjo tablatures -@unnumberedsubsubsec Banjo tablatures - -@cindex banjo tablatures -@cindex tablature, banjo - -LilyPond has basic support for the five-string banjo. When making tablatures -for five-string banjo, use the banjo tablature format function to get -correct fret numbers for the fifth string: - -@c due to crazy intervals of banjo music, absolute pitch is recommended - -@lilypond[quote,ragged-right,fragment,verbatim] -\new TabStaff << - \set TabStaff.tablatureFormat = #fret-number-tablature-format-banjo - \set TabStaff.stringTunings = #banjo-open-g-tuning - { - \stemDown - g8 d' g'\5 a b g e d' | - g4 d''8\5 b' a'\2 g'\5 e'\2 d' | - g4 - } ->> -@end lilypond - -@cindex banjo tunings -@cindex tunings, banjo - -@funindex banjo-c-tuning -@funindex banjo-modal-tuning -@funindex banjo-open-d-tuning -@funindex banjo-open-dm-tuning -@funindex four-string-banjo - -A number of common tunings for banjo are predefined in LilyPond: -@code{banjo-c-tuning} (gCGBD), @code{banjo-modal-tuning} (gDGCD), -@code{banjo-open-d-tuning} (aDF#AD) and @code{banjo-open-dm-tuning} -(aDFAD). - -These tunings may be converted to four-string banjo tunings using the -@code{four-string-banjo} function: - -@example -\set TabStaff.stringTunings = #(four-string-banjo banjo-c-tuning) -@end example - - -@seealso -Snippets: -@rlsr{Fretted strings}. - -The file @file{scm/@/output@/-lib@/.scm} contains predefined banjo tunings. diff --git a/Documentation/user/fundamental.itely b/Documentation/user/fundamental.itely deleted file mode 100644 index 4c58135bae..0000000000 --- a/Documentation/user/fundamental.itely +++ /dev/null @@ -1,2905 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond-learning.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Fundamental concepts -@chapter Fundamental concepts - -You've seen in the Tutorial how to produce beautifully printed -music from a simple text file. This section introduces the -concepts and techniques required to produce equally beautiful -but more complex scores. - -@menu -* How LilyPond input files work:: -* Voices contain music:: -* Contexts and engravers:: -* Extending the templates:: -@end menu - - -@node How LilyPond input files work -@section How LilyPond input files work - -The LilyPond input format is quite free-form, giving experienced -users a lot of flexibility to structure their files however they -wish. But this flexibility can make things confusing for new -users. This section will explain some of this structure, but may -gloss over some details in favor of simplicity. For a complete -description of the input format, see @ruser{File structure}. - -@menu -* Introduction to the LilyPond file structure:: -* Score is a (single) compound musical expression:: -* Nesting music expressions:: -* On the un-nestedness of brackets and ties:: -@end menu - -@node Introduction to the LilyPond file structure -@subsection Introduction to the LilyPond file structure - -@cindex input format -@cindex file structure - -A basic example of a LilyPond input file is - -@example -\version @w{"@version{}"} -\header @{ @} -\score @{ - @var{...compound music expression...} % all the music goes here! - \layout @{ @} - \midi @{ @} -@} -@end example - -@noindent -There are many variations of this basic pattern, but this -example serves as a useful starting place. - -@funindex \book -@funindex book -@funindex \score -@funindex score -@cindex book -@cindex score - -Up to this point none of the examples you have seen has used a -@code{\score@{@}} command. This is because LilyPond automatically -adds the extra commands which are needed when you give it simple -input. LilyPond treats input like this: - -@example -\relative c'' @{ - c4 a d c -@} -@end example - -@noindent -as shorthand for this: - -@example -\book @{ - \score @{ - \new Staff @{ - \new Voice @{ - \relative c'' @{ - c4 a b c - @} - @} - @} - \layout @{ @} - @} -@} -@end example - -In other words, if the input contains a single music expression, -LilyPond will interpret the file as though the music expression -was wrapped up inside the commands shown above. - -@cindex implicit contexts -@cindex contexts, implicit - -@strong{A word of warning!} Many of the examples in the LilyPond -documentation will omit the @code{\new Staff} and @code{\new Voice} -commands, leaving them to be created implicitly. For simple -examples this works well, but for more complex examples, especially -when additional commands are used, the implicit creation of contexts -can give surprising results, maybe creating extra unwanted staves. -The way to create contexts explicitly is explained in -@ref{Contexts and engravers}. - -@warning{When entering more than a few lines of music it is -advisable to always create staves and voices explicitly.} - -For now, though, let us return to the first example and examine the -@code{\score} command, leaving the others to default. - -A @code{\score} block must always contain just one music expression, -and this must appear immediately after the @code{\score} command. -Remember that a music expression could be anything from a single -note to a huge compound expression like - -@example -@{ - \new StaffGroup << - @var{...insert the whole score of a Wagner opera in here...} - >> -@} -@end example - -@noindent -Since everything is inside @code{@{ ... @}}, it counts -as one music expression. - -As we saw previously, the @code{\score} block can contain other -things, such as - -@example -\score @{ - @{ c'4 a b c' @} - \header @{ @} - \layout @{ @} - \midi @{ @} -@} -@end example - -@funindex \header -@funindex header -@funindex \layout -@funindex layout -@funindex \midi -@funindex midi -@cindex header -@cindex layout -@cindex midi - -@noindent -Note that these three commands -- @code{\header}, @code{\layout} and -@code{\midi} -- are special: unlike many other commands which begin -with a backward slash (@code{\}) they are @emph{not} music expressions -and are not part of any music expression. So they may be placed -inside a @code{\score} block or outside it. In fact, these commands -are commonly placed outside the @code{\score} block -- for example, -@code{\header} is often placed above the @code{\score} command, as the -example at the beginning of this section shows. - -Two more commands you have not previously seen are -@code{\layout @{ @}} and @code{\midi @{@}}. If these appear as -shown they will cause LilyPond to produce a printed output and a -MIDI output respectively. They are described fully in the -Notation Reference -- @ruser{Score layout}, and -@ruser{Creating MIDI files}. - -@cindex scores, multiple -@cindex book block, implicit -@cindex implicit book block -@funindex \book -@funindex book - -You may code multiple @code{\score} blocks. Each will be -treated as a separate score, but they will be all combined into -a single output file. A @code{\book} command is not necessary --- one will be implicitly created. However, if you would like -separate output files from one @code{.ly} file then the -@code{\book} command should be used to separate the different -sections: each @code{\book} block will produce a -separate output file. - -In summary: - -Every @code{\book} block creates a separate output file (e.g., a -PDF file). If you haven't explicitly added one, LilyPond wraps -your entire input code in a @code{\book} block implicitly. - -Every @code{\score} block is a separate chunk of music within a -@code{\book} block. - -@cindex layout block, effect of location - -Every @code{\layout} block affects the @code{\score} or -@code{\book} block in which it appears -- i.e., a @code{\layout} -block inside a @code{\score} block affects only that @code{\score} -block, but a @code{\layout} block outside of a @code{\score} block -(and thus in a @code{\book} block, either explicitly or -implicitly) will affect every @code{\score} in that @code{\book}. - -For details see @ruser{Multiple scores in a book}. - -@cindex variables - -Another great shorthand is the ability to define variables. All -the templates use this - -@example -melody = \relative c' @{ - c4 a b c -@} - -\score @{ - \melody -@} -@end example - -When LilyPond looks at this file, it takes the value of -@code{melody} (everything after the equals sign) and inserts it -whenever it sees @code{\melody}. There's nothing special about -the names -- it could be @code{melody}, @code{global}, -@code{TimeKey}, -@code{pianorighthand}, or @code{foofoobarbaz}. For more details, -see @ref{Saving typing with variables and functions}. -Remember that you can use almost any name you like as long -as it contains just alphabetic characters and is distinct from -LilyPond command names. The exact -limitations on variable names are detailed in -@ruser{File structure}. - - -@seealso -For a complete definition of the input format, see -@ruser{File structure}. - - -@node Score is a (single) compound musical expression -@subsection Score is a (single) compound musical expression - -@funindex \score -@funindex score -@cindex score -@cindex contents of a score block -@cindex score block, contents of -@cindex compound music expression -@cindex music expression, compound - -We saw the general organization of LilyPond input files in the -previous section, @ref{Introduction to the LilyPond file structure}. -But we seemed to skip over the most important part: how do we figure -out what to write after @code{\score}? - -We didn't skip over it at all. The big mystery is simply that -there @emph{is} no mystery. This line explains it all: - -@quotation -@emph{A @code{\score} block must begin with a compound music expression.} -@end quotation - -@noindent -To understand what is meant by a music expression and a compound -music expression, you may find it useful to review the tutorial, -@ref{Music expressions explained}. In that section, we saw how to -build big music expressions from small pieces -- we started from -notes, then chords, etc. Now we're going to start from a big -music expression and work our way down. - -@example -\score @{ - @{ % this brace begins the overall compound music expression - \new StaffGroup << - @var{...insert the whole score of a Wagner opera in here...} - >> - @} % this brace ends the overall compound music expression - \layout @{ @} -@} -@end example - -A whole Wagner opera would easily double the length of this -manual, so let's just add a singer and piano. We don't need a -@code{StaffGroup} for this ensemble, which simply groups a number -of staves together with a bracket at the left, so we shall remove -it. We @emph{do} need a singer and a piano, though. - -@example -\score @{ - << - \new Staff = "singer" << - >> - \new PianoStaff = "piano" << - >> - >> - \layout @{ @} -@} -@end example - -Remember that we use @code{<< ... >>} instead of @code{@{ ... @}} to -show simultaneous music. And we definitely want to show the vocal -part and piano part at the same time, not one after the other! Note -that the @code{<< ... >>} construct is not really necessary for the -Singer staff, as it contains only one sequential music expression; -however, using @code{<< ... >>} instead of braces is still necessary -if the music in the Staff is made of two simultaneous expressions, -e.g. two simultaneous Voices, or a Voice with lyrics. We'll add some -real music later; for now let's just put in some dummy notes and -lyrics. - -@lilypond[verbatim,quote,ragged-right] -\score { - << - \new Staff = "singer" << - \new Voice = "vocal" { c'1 } - \addlyrics { And } - >> - \new PianoStaff = "piano" << - \new Staff = "upper" { c'1 } - \new Staff = "lower" { c'1 } - >> - >> - \layout { } -} -@end lilypond - -Now we have a lot more details. We have the singer's staff: it -contains a @code{Voice} (in LilyPond, this term refers to a set of -notes, not necessarily vocal notes -- for example, a violin -generally plays one voice) and some lyrics. We also have a piano -staff: it contains an upper staff (right hand) and a lower staff -(left hand). - -At this stage, we could start filling in notes. Inside the curly -braces next to @code{\new Voice = "vocal"}, we could start writing - -@example -\relative c'' @{ - r4 d8\noBeam g, c4 r -@} -@end example - -But if we did that, the @code{\score} section would get pretty -long, and it would be harder to understand what was happening. So -let's use variables instead. These were introduced at the end -of the previous section, remember? So, adding a few notes, we -now have a piece of real music: - -@lilypond[verbatim,quote,ragged-right] -melody = \relative c'' { r4 d8\noBeam g, c4 r } -text = \lyricmode { And God said, } -upper = \relative c'' { 2~ } -lower = \relative c { b2 e2 } - -\score { - << - \new Staff = "singer" << - \new Voice = "vocal" { \melody } - \addlyrics { \text } - >> - \new PianoStaff = "piano" << - \new Staff = "upper" { \upper } - \new Staff = "lower" { - \clef "bass" - \lower - } - >> - >> - \layout { } -} -@end lilypond - - -Be careful about the difference between notes, which are introduced -with @code{\relative} or which are directly included in a music -expression, and lyrics, which are introduced with -@code{\lyricmode}. These are essential to tell LilyPond -to interpret the following content as music and text -respectively. - -When writing (or reading) a @code{\score} section, just take it -slowly and carefully. Start with the outer level, then work on -each smaller level. It also really helps to be strict with -indentation -- make sure that each item on the same level starts -on the same horizontal position in your text editor. - - -@seealso -Notation Reference: @ruser{Structure of a score}. - - -@node Nesting music expressions -@subsection Nesting music expressions - -@cindex staves, temporary -@cindex temporary staves -@cindex ossias - -It is not essential to declare all staves at the beginning; they may -be introduced temporarily at any point. This is particularly useful -for creating ossia sections -- see @rglos{ossia}. Here is a simple -example showing how to introduce a new staff temporarily for the -duration of three notes: - -@lilypond[verbatim,quote,ragged-right] -\new Staff { - \relative g' { - r4 g8 g c4 c8 d | - e4 r8 - << - { f c c } - \new Staff { - f8 f c - } - >> - r4 | - } -} -@end lilypond - -@noindent -Note that the size of the clef is the same as a clef printed -following a clef change -- slightly smaller than the clef -at the beginning of the line. This is usual for clefs printed -in the middle of a line. - -@cindex staff, positioning - -The ossia section may be placed above the staff -as follows: - -@lilypond[verbatim,quote,ragged-right] -\new Staff = "main" { - \relative g' { - r4 g8 g c4 c8 d | - e4 r8 - << - { f c c } - \new Staff \with { - alignAboveContext = #"main" } - { f8 f c } - >> - r4 | - } -} -@end lilypond - -This example uses @code{\with}, which will be explained more -fully later. It is a means of modifying the default behavior -of a single Staff. Here it says that the new staff should be -placed above the staff called @qq{main} instead of the default -position which is below. - - -@seealso -Ossia are often written without clef and without -time signature and are usually in a smaller font. -These require further commands which -have not yet been introduced. See @ref{Size of objects}, -and @ruser{Ossia staves}. - - -@node On the un-nestedness of brackets and ties -@subsection On the un-nestedness of brackets and ties - -@cindex brackets, nesting -@cindex bracket types -@cindex brackets, enclosing vs. marking - -You have already met a number of different types of bracket in -writing the input file to LilyPond. These obey different rules -which can be confusing at first. Before we explain the rules -let's first review the different types of bracket. - -@c attempt to force this onto a new page -@need 50 -@multitable @columnfractions .3 .7 -@headitem Bracket Type - @tab Function -@item @code{@{ .. @}} - @tab Encloses a sequential segment of music -@item @code{< .. >} - @tab Encloses the notes of a chord -@item @code{<< .. >>} - @tab Encloses simultaneous music expressions -@item @code{( .. )} - @tab Marks the start and end of a slur -@item @code{\( .. \)} - @tab Marks the start and end of a phrasing slur -@item @code{[ .. ]} - @tab Marks the start and end of a manual beam -@end multitable - -To these we should add other constructs which generate lines -between or across notes: ties (marked by a tilde, @code{~}), -tuplets written as @code{\times x/y @{..@}}, and grace notes -written as @code{\grace@{..@}}. - -Outside LilyPond, the conventional use of brackets requires the -different types to be properly nested, like this, @code{<< [ @{ ( .. ) -@} ] >>}, with the closing brackets being encountered in exactly the -opposite order to the opening brackets. This @strong{is} a -requirement for the three types of bracket described by the word -@q{Encloses} in the table above -- they must nest properly. However, -the remaining brackets, described with the word @q{Marks} in the table -above together with ties and tuplets, do @strong{not} have to nest -properly with any of the brackets. In fact, these are not brackets in -the sense that they enclose something -- they are simply markers to -indicate where something starts and ends. - -So, for example, a phrasing slur can start before a manually -inserted beam and end before the end of the beam -- not very -musical, perhaps, but possible: - -@lilypond[quote,verbatim,fragment,ragged-right,relative=2] - { g8\( a b[ c b\) a] } -@end lilypond - -In general, different kinds of brackets, and those implied by -tuplets, ties and grace notes, may be mixed freely. -This example shows a beam extending into a tuplet (line 1), -a slur extending into a tuplet (line 2), -a beam and a slur extending into a tuplet, a tie crossing -two tuplets, and a phrasing slur extending out of a tuplet -(lines 3 and 4). - -@lilypond[quote,verbatim,fragment,ragged-right] -{ - r16[ g16 \times 2/3 {r16 e'8] } - g16( a \times 2/3 {b d) e' } - g8[( a \times 2/3 {b d') e'~]} - \times 4/5 {e'32\( a b d' e'} a'4.\) -} -@end lilypond - - -@node Voices contain music -@section Voices contain music - -Singers need voices to sing, and so does LilyPond. -The actual music for all instruments in a score -is contained in Voices -- the most fundamental -of all LilyPond's concepts. - -@menu -* I'm hearing Voices:: -* Explicitly instantiating voices:: -* Voices and vocals:: -@end menu - -@node I'm hearing Voices -@subsection I'm hearing Voices - -@cindex polyphony -@cindex layers -@cindex multiple voices -@cindex voices, multiple -@cindex Voice context -@cindex context, Voice -@cindex simultaneous music -@cindex music, simultaneous -@cindex concurrent music -@cindex music, concurrent -@cindex voices vs. chords -@cindex chords vs. voices - -The lowest, most fundamental or innermost layers in a LilyPond -score are called @q{Voice contexts} or just @q{Voices} for short. -Voices are sometimes called @q{layers} in other notation -packages. - -In fact, a Voice layer or context is the only one which can contain -music. If a Voice context is not explicitly declared one is created -automatically, as we saw at the beginning of this chapter. Some -instruments such as an Oboe can play only one note at a time. Music -written for such instruments is monophonic and requires just a single -voice. Instruments which can play more than one note at a time like -the piano will often require multiple voices to encode the different -concurrent notes and rhythms they are capable of playing. - -A single voice can contain many notes in a chord, of course, -so when exactly are multiple voices needed? Look first at -this example of four chords: - -@lilypond[quote,verbatim,fragment,ragged-right,relative=1] -\key g \major -4 -@end lilypond - -This can be expressed using just the single angle bracket chord -symbols, @code{< ... >}, and for this just a single voice is -needed. But suppose the F-sharp were actually an eighth-note -followed by an eighth-note G, a passing note on the way to the A? -Now we have two notes which start at the same time but have -different durations: the quarter-note D and the eighth-note -F-sharp. How are these to be coded? They cannot be written as -a chord because all the notes in a chord must have the same -duration. And they cannot be written as two sequential notes -as they need to start at the same time. This is when two -voices are required. - -Let us see how this is done in LilyPond input syntax. - -@funindex << \\ >> -@funindex \\ - -The easiest way to enter fragments with more than one voice on a -staff is to enter each voice as a sequence (with @code{@{...@}}), -and combine them simultaneously with angle brackets, @code{<<...>>}. -The fragments must also be separated with double backward slashes, -@code{\\}, to place them in separate voices. Without these, the -notes would be entered into a single voice, which would usually -cause errors. This technique is particularly suited to pieces of -music which are largely monophonic with occasional short sections -of polyphony. - -Here's how we split the chords above into two voices and add both -the passing note and a slur: - -@lilypond[quote,verbatim,fragment,ragged-right,relative=2] -\key g \major -% Voice "1" Voice "2" -<< { g4 fis8( g) a4 g } \\ { d4 d d d } >> | -@end lilypond - -Notice how the stems of the second voice now point down. - -Here's another simple example: - -@lilypond[quote,verbatim,fragment,ragged-right,relative=2] -\key d \minor -% Voice "1" Voice "2" -<< { r4 g g4. a8 } \\ { d,2 d4 g } >> | -<< { bes4 bes c bes } \\ { g4 g g8( a) g4 } >> | -<< { a2. r4 } \\ { fis2. s4 } >> | -@end lilypond - -It is not necessary to use a separate @code{<< \\ >>} construct -for each bar. For music with few notes in each bar this layout -can help the legibility of the code, but if there are many -notes in each bar it may be better to split out each voice -separately, like this: - -@lilypond[quote,verbatim,fragment,ragged-right,relative=2] -\key d \minor -<< { - % Voice "1" - r4 g g4. a8 | - bes4 bes c bes | - a2. r4 | -} \\ { - % Voice "2" - d,2 d4 g | - g4 g g8( a) g4 | - fis2. s4 | -} >> -@end lilypond - - -@cindex voices, naming -@cindex voices crossing brackets -@cindex slurs crossing brackets -@cindex ties crossing brackest - -This example has just two voices, but the same construct may be -used to encode three or more voices by adding more back-slash -separators. - -The Voice contexts bear the names @code{"1"}, @code{"2"}, etc. -In each of these contexts, the vertical direction of slurs, -stems, ties, dynamics etc., is set appropriately. - -@lilypond[quote,verbatim,fragment] -\new Staff \relative c' { - % Main voice - c16 d e f - % Voice "1" Voice "2" Voice "3" - << { g4 f e } \\ { r8 e4 d c8 ~ } >> | - << { d2 e2 } \\ { c8 b16 a b8 g ~ g2 } \\ { s4 b4 c2 } >> | -} -@end lilypond - -These voices are all separate from the main voice that contains -the notes just outside the @code{<< .. >>} construct. Let's call -this the @emph{simultaneous construct}. Slurs and ties may only -connect notes within the same voice, so slurs and ties cannot go -into or out of a simultaneous construct. Conversely, -parallel voices from separate simultaneous constructs on the same -staff are the same voice. Other voice-related properties also -carry across simultaneous constructs. Here is the same example, -with different colors and note heads for each voice. Note that -changes in one voice do not affect other voices, but they do -persist in the same voice later. Note also that tied notes may be -split across the same voices in two constructs, shown here in the -blue triangle voice. - -@lilypond[quote,verbatim] -\new Staff \relative c' { - % Main voice - c16 d e f - << % Bar 1 - { - \voiceOneStyle - g4 f e - } - \\ - { - \voiceTwoStyle - r8 e4 d c8 ~ - } - >> - << % Bar 2 - % Voice 1 continues - { d2 e2 } - \\ - % Voice 2 continues - { c8 b16 a b8 g ~ g2 } - \\ - { - \voiceThreeStyle - s4 b4 c2 - } - >> -} -@end lilypond - -@funindex \voiceOneStyle -@funindex \voiceTwoStyle -@funindex \voiceThreeStyle -@funindex \voiceFourStyle -@funindex \voiceNeutralStyle - -The commands @code{\voiceXXXStyle} are mainly intended for use in -educational documents such as this one. They modify the color -of the note head, the stem and the beams, and the style of the -note head, so that the voices may be easily distinguished. -Voice one is set to red diamonds, voice two to blue triangles, -voice three to green crossed circles, and voice four (not used -here) to magenta crosses; @code{\voiceNeutralStyle} (also not -used here) reverts the style back to the default. -We shall see later how commands like these may be created by the -user. -See @ref{Visibility and color of objects} and -@ref{Using variables for tweaks}. - -@cindex polyphony and relative note entry -@cindex relative note entry and polyphony - -Polyphony does not change the relationship of notes within a -@code{\relative @{ @}} block. Each note is still calculated -relative to the note immediately preceding it, or to the first -note of the preceding chord. So in - -@example -\relative c' @{ noteA << < noteB noteC > \\ noteD >> noteE @} -@end example - -@noindent -@code{noteB} is relative to @code{noteA} @* -@code{noteC} is relative to @code{noteB}, not @code{noteA}; @* -@code{noteD} is relative to @code{noteB}, not @code{noteA} or -@code{noteC}; @* -@code{noteE} is relative to @code{noteD}, not @code{noteA}. - -An alternative way, which may be clearer if the notes in the -voices are widely separated, is to place a @code{\relative} -command at the start of each voice: - -@example -\relative c' @{ noteA ... @} -<< - \relative c'' @{ < noteB noteC > ... @} -\\ - \relative g' @{ noteD ... @} ->> -\relative c' @{ noteE ... @} -@end example - -Let us finally analyze the voices in a more complex piece of music. -Here are the notes from the first two bars of the second of Chopin's -Deux Nocturnes, Op 32. This example will be used at later stages in -this and the next chapter to illustrate several techniques for -producing notation, so please ignore for now anything in the -underlying code which looks mysterious and concentrate just on the -music and the voices -- the complications will all be explained in -later sections. - -@c The following should appear as music without code -@lilypond[quote,ragged-right] -\new Staff \relative c'' { - \key aes \major - << % Voice one - { c2 aes4. bes8 } - \\ % Voice two - { aes2 f4 fes } - \\ % No voice three - \\ % Voice four - { - % Ignore these for now - they are explained in Ch 4 - \once \override NoteColumn #'force-hshift = #0 - 2 - \once \override NoteColumn #'force-hshift = #0.5 - des2 - } - >> | - 1 | -} -@end lilypond - -The direction of the stems is often used to indicate the continuity of -two simultaneous melodic lines. Here the stems of the highest notes -are all pointing up and the stems of the lower notes are all pointing -down. This is the first indication that more than one voice is -required. - -But the real need for multiple voices arises when notes -which start at the same time have different durations. -Look at the notes which start at beat three in the first -bar. The A-flat is a dotted quarter note, the F is a -quarter note and the D-flat is a half note. These -cannot be written as a chord as all the notes in a chord -must have the same duration. Neither can they be written -as sequential notes, as they must start at the same time. -This section of the bar requires three voices, and the -normal practice would be to write the whole bar as three -voices, as shown below, where we have used different note heads -and colors for the three voices. Again, the code behind this -example will be explained later, so ignore anything you do -not understand. - -@c The following should appear as music without code -@c The three voice styles should be defined in -init -@lilypond[quote,ragged-right] -\new Staff \relative c'' { - \key aes \major - << - { % Voice one - \voiceOneStyle - c2 aes4. bes8 - } - \\ % Voice two - { \voiceTwoStyle - aes2 f4 fes - } - \\ % No Voice three (we want stems down) - \\ % Voice four - { \voiceThreeStyle - % Ignore these for now - they are explained in Ch 4 - \once \override NoteColumn #'force-hshift = #0 - 2 - \once \override NoteColumn #'force-hshift = #0.5 - des2 - } - >> | - 1 | -} -@end lilypond - - -Let us try to encode this music from scratch. As we -shall see, this encounters some difficulties. We begin as -we have learnt, using the @code{<< \\ >>} construct to -enter the music of the first bar in three voices: - -@lilypond[quote,verbatim,fragment,ragged-right] -\new Staff \relative c'' { - \key aes \major - << - { c2 aes4. bes8 } \\ { aes2 f4 fes } \\ { 2 des2 } - >> - 1 -} -@end lilypond - -@cindex stem down -@cindex voices and stem directions -@cindex stem directions and voices -@cindex stem up - -The stem directions are automatically assigned with the -odd-numbered voices taking upward stems and the even-numbered -voices downward ones. The stems for voices 1 and 2 are right, -but the stems in voice 3 should go down in this particular piece -of music. We can correct this simply by missing out voice three -and placing the music in voice four: - -@lilypond[quote,verbatim,fragment,ragged-right] -\new Staff \relative c'' { - \key aes \major - << % Voice one - { c2 aes4. bes8 } - \\ % Voice two - { aes2 f4 fes } - \\ % Omit Voice three - \\ % Voice four - { 2 des2 } - >> | - 1 | -} -@end lilypond - -@noindent -We see that this fixes the stem direction, but exposes a problem -sometimes encountered with multiple voices -- the stems of the notes -in one voice can collide with the note heads in other voices. In -laying out the notes, LilyPond allows the notes or chords from two -voices to occupy the same vertical note column provided the stems are -in opposite directions, but the notes from the third and fourth voices -are displaced, if necessary, to avoid the note heads colliding. This -usually works well, but in this example the notes of the lowest voice -are clearly not well placed by default. LilyPond provides several ways -to adjust the horizontal placing of notes. We are not quite ready yet -to see how to correct this, so we shall leave this problem until a -later section --- see the @code{force-hshift} property in @ref{Fixing -overlapping notation}. - - -@seealso -Notation Reference: @ruser{Multiple voices}. - - -@node Explicitly instantiating voices -@subsection Explicitly instantiating voices - -@funindex \voiceOne -@funindex voiceOne -@funindex \voiceTwo -@funindex voiceTwo -@funindex \voiceThree -@funindex voiceThree -@funindex \voiceFour -@funindex voiceFour -@funindex \oneVoice -@funindex oneVoice -@funindex \new Voice -@cindex voice contexts, creating - -Voice contexts can also be created manually -inside a @code{<< >>} block to create polyphonic music, using -@code{\voiceOne} ... @code{\voiceFour} to indicate the required -directions of stems, slurs, etc. In longer scores this method -is clearer, as it permits the voices to be separated and to be -given more descriptive names. - -Specifically, the construct @code{<< \\ >>} which we used in -the previous section: - -@example -\new Staff @{ - \relative c' @{ - << @{ e4 f g a @} \\ @{ c,4 d e f @} >> - @} -@} -@end example - -@noindent -is equivalent to - -@example -\new Staff << - \new Voice = "1" @{ \voiceOne \relative c' @{ e4 f g a @} @} - \new Voice = "2" @{ \voiceTwo \relative c' @{ c4 d e f @} @} ->> -@end example - -Both of the above would produce - -@c The following example should not display the code -@lilypond[ragged-right,quote] -\new Staff << - \new Voice = "1" { \voiceOne \relative c' { e4 f g a } } - \new Voice = "2" { \voiceTwo \relative c' { c4 d e f } } ->> -@end lilypond - -@cindex voices, reverting to single -@cindex reverting to a single voice - -The @code{\voiceXXX} commands set the direction of stems, slurs, -ties, articulations, text annotations, augmentation dots of dotted -notes, and fingerings. @code{\voiceOne} and @code{\voiceThree} -make these objects point upwards, while @code{\voiceTwo} and -@code{\voiceFour} make them point downwards. These commands also -generate a horizontal shift for each voice when this is required -to avoid clashes of note heads. The command @code{\oneVoice} -reverts the settings back to the normal values for a single voice. - -Let us see in some simple examples exactly what effect -@code{\oneVoice}, @code{\voiceOne} and @code{voiceTwo} have on -markup, ties, slurs, and dynamics: - -@lilypond[quote,ragged-right,verbatim] -\relative c'{ - % Default behavior or behavior after \oneVoice - c d8 ~ d e4 ( f g a ) b-> c -} -@end lilypond - -@lilypond[quote,ragged-right,verbatim] -\relative c'{ - \voiceOne - c d8 ~ d e4 ( f g a ) b-> c - \oneVoice - c, d8 ~ d e4 ( f g a ) b-> c -} -@end lilypond - -@lilypond[quote,ragged-right,verbatim] -\relative c'{ - \voiceTwo - c d8 ~ d e4 ( f g a ) b-> c - \oneVoice - c, d8 ~ d e4 ( f g a ) b-> c -} -@end lilypond - -Now let's look at three different ways to notate the same passage -of polyphonic music, each of which is advantageous in different -circumstances, using the example from the previous section. - -An expression that appears directly inside a @code{<< >>} belongs -to the main voice (but, note, @strong{not} in a @code{<< \\ >>} -construct). This is useful when extra voices appear while the -main voice is playing. Here is a more correct rendition of our -example. The red diamond-shaped notes -demonstrate that the main melody is now in a single voice context, -permitting a phrasing slur to be drawn over them. - -@lilypond[quote,ragged-right,verbatim] -\new Staff \relative c' { - \voiceOneStyle - % The following notes are monophonic - c16^( d e f - % Start simultaneous section of three voices - << - % Continue the main voice in parallel - { g4 f e | d2 e2) } - % Initiate second voice - \new Voice { - % Set stems, etc, down - \voiceTwo - r8 e4 d c8 ~ | c8 b16 a b8 g ~ g2 - } - % Initiate third voice - \new Voice { - % Set stems, etc, up - \voiceThree - s2. | s4 b4 c2 - } - >> -} -@end lilypond - -@cindex nesting music expressions -@cindex nesting simultaneous constructs -@cindex nesting voices -@cindex voices, temporary -@cindex voices, nesting - -More deeply nested polyphony constructs are possible, and if a -voice appears only briefly this might be a more natural way to -typeset the music: - -@lilypond[quote,ragged-right,verbatim] -\new Staff \relative c' { - c16^( d e f - << - { g4 f e | d2 e2) } - \new Voice { - \voiceTwo - r8 e4 d c8 ~ | - << - {c8 b16 a b8 g ~ g2} - \new Voice { - \voiceThree - s4 b4 c2 - } - >> - } - >> -} -@end lilypond - -@cindex spacing notes - -This method of nesting new voices briefly is useful -when only small sections of the music -are polyphonic, but when the whole staff is largely polyphonic -it can be clearer to use multiple voices throughout, using -spacing notes to step over sections where the voice is silent, -as here: - -@lilypond[quote,ragged-right,verbatim] -\new Staff \relative c' << - % Initiate first voice - \new Voice { - \voiceOne - c16^( d e f g4 f e | d2 e2) | - } - % Initiate second voice - \new Voice { - % Set stems, etc, down - \voiceTwo - s4 r8 e4 d c8 ~ | c8 b16 a b8 g ~ g2 | - } - % Initiate third voice - \new Voice { - % Set stems, etc, up - \voiceThree - s1 | s4 b4 c2 | - } ->> -@end lilypond - -@subsubheading Note columns - -@cindex note column -@cindex note collisions -@cindex collisions, notes -@cindex shift commands -@funindex \shiftOff -@funindex shiftOff -@funindex \shiftOn -@funindex shiftOn -@funindex \shiftOnn -@funindex shiftOnn -@funindex \shiftOnnn -@funindex shiftOnnn - -Closely spaced notes in a chord, or notes occurring at the same -time in different voices, are arranged in two, occasionally more, -columns to prevent the note heads overlapping. These are called -note columns. There are separate columns for each voice, and -the currently specified voice-dependent shift is applied to the -note column if there would otherwise be a collision. This can -be seen in the example above. In bar 2 the C in voice two is -shifted to the right relative to the D in voice one, and in the -final chord the C in voice three is also shifted to the right -relative to the other notes. - -The @code{\shiftOn}, @code{\shiftOnn}, @code{\shiftOnnn}, and -@code{\shiftOff} commands specify the degree to which notes and -chords of the voice should be shifted if a collision -would otherwise occur. By default, the outer voices (normally -voices one and two) have @code{\shiftOff} specified, while the -inner voices (three and four) have @code{\shiftOn} specified. -When a shift is applied, voices one and three are shifted to -the right and voices two and four to the left. - -@code{\shiftOnn} and @code{\shiftOnnn} define further shift -levels which may be specified temporarily to resolve collisions -in complex situations -- see @ref{Real music example}. - -A note column can contain just one note (or chord) from a voice -with stems up and one note (or chord) from a voice with stems -down. If notes from two voices which have their stems in the -same direction are placed at the same position and both voices -have no shift or the same shift specified, the error message -@qq{Too many clashing note columns} will be produced. - - -@seealso -Notation Reference: @ruser{Multiple voices}. - - -@node Voices and vocals -@subsection Voices and vocals - -Vocal music presents a special difficulty: we need to combine two -expressions -- notes and lyrics. - -@funindex \new Lyrics -@funindex \lyricsto -@funindex lyricsto -@funindex Lyrics -@cindex Lyrics context, creating -@cindex lyrics, linking to voice - -You have already seen the @code{\addlyrics@{@}} command, which -handles simple scores well. However, this technique is -quite limited. For more complex music, you must introduce the -lyrics in a @code{Lyrics} context using @code{\new Lyrics} and -explicitly link -the lyrics to the notes with @code{\lyricsto@{@}}, using the -name assigned to the Voice. - -@lilypond[quote,verbatim,fragment] -<< - \new Voice = "one" \relative c'' { - \autoBeamOff - \time 2/4 - c4 b8. a16 g4. f8 e4 d c2 - } - \new Lyrics \lyricsto "one" { - No more let sins and sor -- rows grow. - } ->> -@end lilypond - -Note that the lyrics must be linked to a @code{Voice} context, -@emph{not} a @code{Staff} context. This is a case where it is -necessary to create @code{Staff} and @code{Voice} contexts -explicitly. - -@cindex lyrics and beaming -@cindex beaming and lyrics -@funindex \autoBeamOff -@funindex autoBeamOff - -The automatic beaming which LilyPond uses by default works well -for instrumental music, but not so well for music with lyrics, -where beaming is either not required at all or is used to indicate -melismata in the lyrics. In the example above we use the command -@code{\autoBeamOff} to turn off the automatic beaming. - -@funindex \new ChoirStaff -@funindex ChoirStaff -@funindex \lyricmode -@funindex lyricmode -@cindex vocal score structure -@cindex choir staff - -Let us reuse the earlier example from Judas Maccabæus to -illustrate this more flexible technique. We first recast -it to use variables so the music and lyrics can be separated -from the staff structure. We also introduce a ChoirStaff -bracket. The lyrics themselves must be introduced with -@code{\lyricmode} to ensure they are interpreted as lyrics -rather than music. - -@lilypond[quote,verbatim] -global = { \time 6/8 \partial 8 \key f \major} -SopOneMusic = \relative c'' { - c8 | c([ bes)] a a([ g)] f | f'4. b, | c4.~ c4 } -SopTwoMusic = \relative c' { - r8 | r4. r4 c8 | a'([ g)] f f([ e)] d | e([ d)] c bes' } -SopOneLyrics = \lyricmode { - Let | flee -- cy flocks the | hills a -- dorn, __ } -SopTwoLyrics = \lyricmode { - Let | flee -- cy flocks the | hills a -- dorn, } - -\score { - \new ChoirStaff << - \new Staff << - \new Voice = "SopOne" { - \global - \SopOneMusic - } - \new Lyrics \lyricsto "SopOne" { - \SopOneLyrics - } - >> - \new Staff << - \new Voice = "SopTwo" { - \global - \SopTwoMusic - } - \new Lyrics \lyricsto "SopTwo" { - \SopTwoLyrics - } - >> - >> -} -@end lilypond - -This is the basic structure of all vocal scores. More staves may be -added as required, more voices may be added to the staves, more verses -may be added to the lyrics, and the variables containing the music can -easily be placed in separate files should they become too long. - -@cindex hymn structure -@cindex SATB structure -@cindex vocal scores with multiple verses -@cindex multiple vocal verses -@cindex verses, multiple vocal - -Here is an example of the first line of a hymn with four -verses, set for SATB. In this case the words for all four -parts are the same. Note how we use variables to separate the -music notation and words from the staff structure. See too -how a variable, which we have chosen to call @q{TimeKey}, is used -to hold several commands for use within the two staves. In other -examples this is often called @q{global}. - -@lilypond[quote,verbatim] -TimeKey = { \time 4/4 \partial 4 \key c \major} -SopMusic = \relative c' { c4 | e4. e8 g4 g | a a g } -AltoMusic = \relative c' { c4 | c4. c8 e4 e | f f e } -TenorMusic = \relative c { e4 | g4. g8 c4. b8 | a8 b c d e4 } -BassMusic = \relative c { c4 | c4. c8 c4 c | f8 g a b c4 } -VerseOne = \lyricmode { - E -- | ter -- nal fa -- ther, | strong to save, } -VerseTwo = \lyricmode { - O | Christ, whose voice the | wa -- ters heard, } -VerseThree = \lyricmode { - O | Ho -- ly Spi -- rit, | who didst brood } -VerseFour = \lyricmode { - O | Tri -- ni -- ty of | love and pow'r } - -\score { - \new ChoirStaff << - \new Staff << - \clef "treble" - \new Voice = "Sop" { \voiceOne \TimeKey \SopMusic } - \new Voice = "Alto" { \voiceTwo \AltoMusic } - \new Lyrics \lyricsto "Sop" { \VerseOne } - \new Lyrics \lyricsto "Sop" { \VerseTwo } - \new Lyrics \lyricsto "Sop" { \VerseThree } - \new Lyrics \lyricsto "Sop" { \VerseFour } - >> - \new Staff << - \clef "bass" - \new Voice = "Tenor" { \voiceOne \TimeKey \TenorMusic } - \new Voice = "Bass" { \voiceTwo \BassMusic } - >> - >> -} -@end lilypond - -@cindex verse and refrain - -We end with an example to show how we might code a solo verse which -continues into a two-part refrain in two staves. The -positioning of the sequential and simultaneous sections to achieve -this within a single score is quite tricky, so follow the -explanation carefully! - -Let's start with a score block containing a @code{ChoirStaff}, as -we would like the brace to appear at the start of the chorus. -Normally you would need angle brackets after @code{\new ChoirStaff} -to bring in all the staves in parallel, but here we want to -defer the parallelism during the solo so we use braces, although -angle brackets here wouldn't hurt. Inside the @code{ChoirStaff} we -want first the staff which will contain the verse. This must -contain notes and lyrics in parallel, so here we need angle -brackets around the @code{\new Voice} and @code{\new Lyrics} to -start them at the same time: - -@lilypond[quote,verbatim,ragged-right] -versenotes = \relative c'' { - \clef "treble" - \key g \major - \time 3/4 g g g b b b -} -versewords = \lyricmode { - One two three four five six -} -\score { - \new ChoirStaff { - \new Staff << - \new Voice = "verse" { - \versenotes \break - } - \new Lyrics \lyricsto verse { - \versewords - } - >> - } -} -@end lilypond - -That gives the verse line. - -Now we want to continue with refrainA on the same staff while a -second staff is introduced in parallel with it for refrainB, so -this is a parallel section which must be positioned immediately -following the @code{\break} in the verse Voice. Yes, @emph{within} -the verse Voice! Here's that parallel section. More staves -could be introduced here in the same way. - -@example -<< - \refrainnotesA - \new Lyrics \lyricsto verse @{ - \refrainwordsA - @} - \new Staff << - \new Voice = "refrainB" @{ - \refrainnotesB - @} - \new Lyrics \lyricsto "refrainB" @{ - \refrainwordsB - @} - >> ->> -@end example - -Here's the final result with two staves in the chorus showing -how the parallel section is positioned within the verse Voice: - -@lilypond[quote,verbatim, ragged-right] -versenotes = \relative c'' { - \clef "treble" - \key g \major - \time 3/4 g g g b b b -} -refrainnotesA = \relative c'' { - \time 2/4 - c c g g \bar "|." -} -refrainnotesB = \relative c { - \clef "bass" - \key g \major - c e d d -} -versewords = \lyricmode { - One two three four five six -} -refrainwordsA = \lyricmode { - la la la la -} -refrainwordsB = \lyricmode { - dum dum dum dum -} -\score { - \new ChoirStaff { - \new Staff << - \new Voice = "verse" { - \versenotes \break - << - \refrainnotesA - \new Lyrics \lyricsto "verse" { - \refrainwordsA - } - \new Staff << - \new Voice = "refrainB" { - \refrainnotesB - } - \new Lyrics \lyricsto "refrainB" { - \refrainwordsB - } - >> - >> - } - \new Lyrics \lyricsto "verse" { - \versewords - } - >> - } -} -@end lilypond - -@cindex book, example of using -@funindex \book -@funindex book - -However, although this is an interesting and useful exercise to -help you to understand how sequential and simultaneous blocks work, -in practice one would perhaps choose to code this as two -@code{\score} blocks within an implicit @code{\book} block, as -follows: - -@lilypond[quote,verbatim,ragged-right] -versenotes = \relative c'' { - \clef "treble" - \key g \major - \time 3/4 g g g b b b -} -refrainnotesA = \relative c'' { - \time 2/4 - c c g g \bar "|." -} -refrainnotesB = \relative c { - \clef "bass" - \key g \major - c e d d -} -versewords = \lyricmode { - One two three four five six -} -refrainwordsA = \lyricmode { - la la la la -} -refrainwordsB = \lyricmode { - dum dum dum dum -} -\score { - \new Staff << - \new Voice = "verse" { - \versenotes - } - \new Lyrics \lyricsto "verse" { - \versewords - } - >> -} - -\score { - \new ChoirStaff << - \new Staff << - \new Voice = "refrainA" { - \refrainnotesA - } - \new Lyrics \lyricsto "refrainA" { - \refrainwordsA - } - >> - \new Staff << - \new Voice = "refrainB" { - \refrainnotesB - } - \new Lyrics \lyricsto "refrainB" { - \refrainwordsB - } - >> - >> -} -@end lilypond - - -@seealso -Notation Reference: @ruser{Vocal music}. - - -@node Contexts and engravers -@section Contexts and engravers - -Contexts and engravers have been mentioned informally -in earlier sections; we now must look at -these concepts in more detail, as they are important -in the fine-tuning of LilyPond output. - - -@menu -* Contexts explained:: -* Creating contexts:: -* Engravers explained:: -* Modifying context properties:: -* Adding and removing engravers:: -@end menu - -@node Contexts explained -@subsection Contexts explained - -@cindex contexts explained - -When music is printed, many notational elements which do not -appear explicitly in the input file must be added to the -output. For example, compare the input and output of the -following example: - -@lilypond[quote,verbatim,relative=2,fragment] -cis4 cis2. g4 -@end lilypond - -The input is rather sparse, but in the output, bar lines, -accidentals, clef, and time signature have been added. When -LilyPond @emph{interprets} the input the musical information -is inspected in time order, similar to reading a score from left -to right. While reading the input, the program remembers where -measure boundaries are, and which pitches require explicit -accidentals. This information must be held on several levels. -For example, the effect of an accidental is limited -to a single staff, while a bar line must be synchronized across -the entire score. - -Within LilyPond, these rules and bits of information are grouped in -@emph{Contexts}. We have already met the @code{Voice} context. -Others are the @code{Staff} and @code{Score} contexts. Contexts are -hierarchical to reflect the hierarchical nature of a musical score. -For example: a @code{Staff} context can contain many @code{Voice} -contexts, and a @code{Score} context can contain many @code{Staff} -contexts. - -@quotation -@sourceimage{context-example,5cm,,} -@end quotation - -Each context has the responsibility for enforcing some notation rules, -creating some notation objects and maintaining the associated -properties. For example, the @code{Voice} context may introduce an -accidental and then the @code{Staff} context maintains the rule to -show or suppress the accidental for the remainder of the measure. - -As another example, the synchronization of bar lines is, by default, -handled in the @code{Score} context. -However, in some music we may not want the bar lines to be -synchronized -- consider a polymetric score in 4/4 and 3/4 time. -In such cases, we must modify the default settings of the -@code{Score} and @code{Staff} contexts. - -For very simple scores, contexts are created implicitly, and you need -not be aware of them. For larger pieces, such as anything with more -than one staff, they must be -created explicitly to make sure that you get as many staves as you -need, and that they are in the correct order. For typesetting pieces -with specialized notation, it is usual to modify existing, or -even to define totally new, contexts. - -In addition to the @code{Score,} @code{Staff} and -@code{Voice} contexts there are contexts which fit between -the score and staff levels to control staff groups, such as the -@code{PianoStaff} and @code{ChoirStaff} contexts. There -are also alternative staff and voice contexts, and contexts for -lyrics, percussion, fret boards, figured bass, etc. - -The names of all context types are formed from one or more -words, each word being capitalized and joined immediately to the -preceding word with no hyphen or underscore, e.g., -@code{GregorianTranscriptionStaff}. - - -@seealso -Notation Reference: @ruser{Contexts explained}. - - -@node Creating contexts -@subsection Creating contexts - -@funindex \new -@funindex new -@cindex new contexts -@cindex creating contexts -@cindex contexts, creating - -There can be only one top level context: the @code{Score} context. -This is created with the @code{\score} command, or, in simple scores, -it is created automatically. - -For scores with only one voice and one staff, the @code{Voice} and -@code{Staff} contexts may be left to be created automatically, but for -more complex scores it is necessary to create them by hand. The -simplest command that does this is @code{\new}. It is prepended to a -music expression, for example - -@example -\new @var{type} @var{music-expression} -@end example - -@noindent -where @var{type} is a context name (like @code{Staff} or -@code{Voice}). This command creates a new context, and starts -interpreting the @var{music-expression} within that context. - -Note that there is no @code{\new Score} command; -the single top-level @code{Score} context is introduced -with @code{\score}. - -You have seen many practical examples which created new -@code{Staff} and @code{Voice} contexts in earlier sections, but -to remind you how these commands are used in practice, here's an -annotated real-music example: - -@lilypond[quote,verbatim,ragged-right] -\score { % start of single compound music expression - << % start of simultaneous staves section - \time 2/4 - \new Staff { % create RH staff - \key g \minor - \clef "treble" - \new Voice { % create voice for RH notes - \relative c'' { % start of RH notes - d4 ees16 c8. | - d4 ees16 c8. | - } % end of RH notes - } % end of RH voice - } % end of RH staff - \new Staff << % create LH staff; needs two simultaneous voices - \key g \minor - \clef "bass" - \new Voice { % create LH voice one - \voiceOne - \relative g { % start of LH voice one notes - g8 ees, | - g8 ees, | - } % end of LH voice one notes - } % end of LH voice one - \new Voice { % create LH voice two - \voiceTwo - \relative g { % start of LH voice two notes - g4 ees | - g4 ees | - } % end of LH voice two notes - } % end of LH voice two - >> % end of LH staff - >> % end of simultaneous staves section -} % end of single compound music expression -@end lilypond - -(Note how all the statements which open a block with either a -curly bracket, @code{@{}, or double angle brackets, @code{<<}, -are indented by two further spaces, and the corresponding -closing bracket is indented by exactly the same amount. While -this is not required, following this practice will greatly -reduce the number of @q{unmatched bracket} errors, and is -strongly recommended. It enables the structure of the music to -be seen at a glance, and any unmatched brackets will be obvious. -Note too how the LH staff is created using double angle brackets -because it requires two voices for its music, whereas the RH staff -is created with a single music expression surrounded by curly -brackets because it requires only one voice.) - -@cindex contexts, naming -@cindex naming contexts - -The @code{\new} command may also give a identifying name to the -context to distinguish it from other contexts of the same type, - -@example -\new @var{type} = @var{id} @var{music-expression} -@end example - -Note the distinction between the name of the context type, -@code{Staff}, @code{Voice}, etc, and the identifying name of a -particular instance of that type, which can be any sequence of letters -invented by the user. Digits and spaces can also be used in the -identifying name, but then it has to be placed in quotes, -i.e. @code{\new Staff = "MyStaff 1" @var{music-expression}}. -The identifying name is used to -refer back to that particular instance of a context. We saw this in -use in the section on lyrics, see @ref{Voices and vocals}. - - -@seealso -Notation Reference: @ruser{Creating contexts}. - - -@node Engravers explained -@subsection Engravers explained - -@cindex engravers - -Every mark on the printed output of a score produced by LilyPond -is produced by an @code{Engraver}. Thus there is an engraver -to print staves, one to print note heads, one for stems, one for -beams, etc, etc. In total there are over 120 such engravers! -Fortunately, for most scores it is not necessary to know about -more than a few, and for simple scores you do not need to know -about any. - -Engravers live and operate in Contexts. Engravers such as the -@code{Metronome_mark_engraver}, whose action and output apply to the -score as a whole, operate in the highest level context -- the -@code{Score} context. - -The @code{Clef_engraver} and @code{Key_engraver} are to be -found in every @code{Staff} Context, as different staves may require -different clefs and keys. - -The @code{Note_heads_engraver} and @code{Stem_engraver} live -in every @code{Voice} context, the lowest level context of all. - -Each engraver processes the particular objects associated -with its function, and maintains the properties that relate -to that function. These properties, like the properties -associated with contexts, may be modified to change the -operation of the engraver or the appearance of those elements -in the printed score. - -Engravers all have compound names formed from words which -describe their function. Just the first word is capitalized, -and the remainder are joined to it with underscores. Thus -the @code{Staff_symbol_engraver} is responsible for creating the -lines of the staff, the @code{Clef_engraver} determines and sets -the pitch reference point on the staff by drawing a clef symbol. - -Here are some of the most common engravers together with their -function. You will see it is usually easy to guess the function -from the name, or vice versa. - -@multitable @columnfractions .3 .7 -@headitem Engraver - @tab Function -@item Accidental_engraver - @tab Makes accidentals, cautionary and suggested accidentals -@item Beam_engraver - @tab Engraves beams -@item Clef_engraver - @tab Engraves clefs -@item Completion_heads_engraver - @tab Splits notes which cross bar lines -@c The old Dynamic_engraver is deprecated. -jm -@item New_dynamic_engraver - @tab Creates hairpins and dynamic texts -@item Forbid_line_break_engraver - @tab Prevents line breaks if a musical element is still active -@item Key_engraver - @tab Creates the key signature -@item Metronome_mark_engraver - @tab Engraves metronome marking -@item Note_heads_engraver - @tab Engraves note heads -@item Rest_engraver - @tab Engraves rests -@item Staff_symbol_engraver - @tab Engraves the five (by default) lines of the staff -@item Stem_engraver - @tab Creates stems and single-stem tremolos -@item Time_signature_engraver - @tab Creates time signatures -@end multitable - -@smallspace - -We shall see later how the output of LilyPond can be changed -by modifying the action of Engravers. - - -@seealso -Internals reference: @rinternals{Engravers and Performers}. - - -@node Modifying context properties -@subsection Modifying context properties - -@cindex context properties -@cindex context properties, modifying -@cindex modifying context properties -@funindex \set -@funindex set -@funindex \unset -@funindex unset - -Contexts are responsible for holding the values of a number of -context @emph{properties}. Many of them can be changed to -influence the interpretation of the input and so change the -appearance of the output. They are changed by the -@code{\set} command. This takes the form - -@example -\set @emph{ContextName}.@emph{propertyName} = #@emph{value} -@end example - -Where the @emph{ContextName} is usually @code{Score}, -@code{Staff} or @code{Voice}. It may be omitted, -in which case @code{Voice} is assumed. - -The names of context properties consist of words joined -together with no hyphens or underscores, all except the -first having a capital letter. Here are a few examples -of some commonly used ones. There are many more. - -@c attempt to force this onto a new page -@need 50 -@multitable @columnfractions .25 .15 .45 .15 -@headitem propertyName - @tab Type - @tab Function - @tab Example Value -@item extraNatural - @tab Boolean - @tab If true, set extra natural signs before accidentals - @tab @code{#t}, @code{#f} -@item currentBarNumber - @tab Integer - @tab Set the current bar number - @tab @code{50} -@item doubleSlurs - @tab Boolean - @tab If true, print slurs both above and below notes - @tab @code{#t}, @code{#f} -@item instrumentName - @tab Text - @tab Set the name to be placed at the start of the staff - @tab @code{"Cello I"} -@item fontSize - @tab Real - @tab Increase or decrease the font size - @tab @code{2.4} -@item stanza - @tab Text - @tab Set the text to print before the start of a verse - @tab @code{"2"} -@end multitable - -@noindent -where a Boolean is either True (@code{#t}) or False (@code{#f}), -an Integer is a positive whole number, a Real is a positive -or negative decimal number, and text is enclosed in double -apostrophes. Note the occurrence of hash signs, -(@code{#}), in two different places -- as part of the Boolean -value before the @code{t} or @code{f}, and before @emph{value} -in the @code{\set} statement. So when a Boolean is being -entered you need to code two hash signs, e.g., @code{##t}. - -@cindex properties operating in contexts -@cindex setting properties within contexts - -Before we can set any of these properties we need to know -in which context they operate. Sometimes this is obvious, -but occasionally it can be tricky. If the wrong context -is specified, no error message is produced, but the expected -action will not take place. For example, the -@code{instrumentName} clearly lives in the @code{Staff} context, since -it is the staff that is to be named. -In this example the first staff is labelled, but not the second, -because we omitted the context name. - -@lilypond[quote,verbatim,ragged-right] -<< - \new Staff \relative c'' { - \set Staff.instrumentName = #"Soprano" - c4 c - } - \new Staff \relative c' { - \set instrumentName = #"Alto" % Wrong! - d4 d - } ->> -@end lilypond - -Remember the default context name is @code{Voice}, so the second -@code{\set} command set the property @code{instrumentName} in the -@code{Voice} context to @qq{Alto}, but as LilyPond does not look -for any such property in the @code{Voice} context, no -further action took place. This is not an error, and no error -message is logged in the log file. - -Similarly, if the property name is mis-spelt no error message is -produced, and clearly the expected action cannot be performed. In -fact, you can set any (fictitious) @q{property} using any name you -like in any context that exists by using the @code{\set} command. But -if the name is not known to LilyPond it will not cause any action to -be taken. Some text editors with special support for LilyPond input -files document property names with bullets when you hover them with -the mouse, like JEdit with LilyPondTool, or highlight unknown property -names differently, like ConTEXT. If you do not use an editor with -such features, it is recommended to check the property name in the -Internals Reference: see @rinternals{Tunable context properties}, or -@rinternals{Contexts}. - -The @code{instrumentName} property will take effect only -if it is set in the @code{Staff} context, but -some properties can be set in more than one context. -For example, the property @code{extraNatural} is by -default set to ##t (true) for all staves. -If it is set to ##f (false) in one particular @code{Staff} -context it applies just to the accidentals on that staff. -If it is set to false in the @code{Score} context -it applies to all staves. - -So this turns off extra naturals in one staff: - -@lilypond[quote,verbatim,ragged-right] -<< - \new Staff \relative c'' { - ais4 aes - } - \new Staff \relative c'' { - \set Staff.extraNatural = ##f - ais4 aes - } ->> -@end lilypond - -@noindent -and this turns them off in all staves: - -@lilypond[quote,verbatim,ragged-right] -<< - \new Staff \relative c'' { - ais4 aes - } - \new Staff \relative c'' { - \set Score.extraNatural = ##f - ais4 aes - } ->> -@end lilypond - -As another example, if @code{clefOctavation} is set in -the @code{Score} context this immediately changes the value -of the octavation in all current staves and sets a new default -value which will be applied to all staves. - -The opposite command, @code{\unset}, effectively removes the -property from the context, which causes most properties to -revert to their default value. Usually @code{\unset} is not -required as a new @code{\set} command will achieve what is -wanted. - -The @code{\set} and @code{\unset} commands can appear anywhere -in the input file and will take effect from the time they are -encountered until the end of the score or until the property is -@code{\set} or @code{\unset} again. Let's try changing the -font size, which affects the size of the note heads (among -other things) several times. The change is from the default -value, not the most recently set value. - -@lilypond[quote,verbatim,ragged-right,relative=1,fragment] -c4 -% make note heads smaller -\set fontSize = #-4 -d e -% make note heads larger -\set fontSize = #2.5 -f g -% return to default size -\unset fontSize -a b -@end lilypond - -We have now seen how to set the values of several different types of -property. Note that integers and numbers are always preceded by a -hash sign, @code{#}, while a true or false value is specified by -@code{##t} and @code{##f}, with two hash signs. A text property -should be enclosed in double quotation signs, as above, although we -shall see later that text can actually be specified in a much more -general way by using the very powerful @code{markup} command. - -@subsubheading Setting context properties with @code{\with} - -@funindex \with -@funindex with -@cindex context properties, setting with \with - -Context properties may also be set at the time the context is -created. Sometimes this is a clearer way of specifying a -property value if it is to remain fixed for the duration of -the context. When a context is created with a @code{\new} -command it may be followed immediately by a -@code{\with @{ .. @}} block in which the property values are -set. For example, if we wish to suppress the printing of -extra naturals for the duration of a staff we would write: - -@example -\new Staff \with @{ extraNatural = ##f @} -@end example - -@noindent -like this: - -@lilypond[quote,verbatim,ragged-right] -<< - \new Staff - \relative c'' { - gis ges aes ais - } - \new Staff \with { extraNatural = ##f } - \relative c'' { - gis ges aes ais - } ->> -@end lilypond - -Properties set in this way may still be changed dynamically using -@code{\set} and returned to their default value with @code{\unset}. - -@cindex fontSize, default and setting - -The @code{fontSize} property is treated differently. If this is -set in a @code{\with} clause it effectively resets the default -value of the font size. If it is later changed with @code{\set}, -this new default value may be restored with the -@code{\unset fontSize} command. - -@subsubheading Setting context properties with @code{\context} - -@cindex context properties, setting with \context -@funindex \context -@funindex context - -The values of context properties may be set in @emph{all} contexts -of a particular type, such as all @code{Staff} contexts, with a single -command. The context type is identified by using its -type name, like @code{Staff}, prefixed by a back-slash: @code{\Staff}. -The statement which sets the property value is the same as that in a -@code{\with} block, introduced above. It is placed in a -@code{\context} block within a @code{\layout} block. Each -@code{\context} block will affect all contexts of the type specified -throughout the @code{\score} or @code{\book} block in which the -@code{\layout} block appears. Here is a example to show the format: - -@lilypond[verbatim,quote] -\score { - \new Staff { - \relative c'' { - cis4 e d ces - } - } - \layout { - \context { - \Staff - extraNatural = ##t - } - } -} -@end lilypond - -@noindent -Context properties set in this way may be overridden for particular -instances of contexts by statements in a @code{\with} block, and by -@code{\set} commands embedded in music statements. - - -@seealso -Notation Reference: -@ruser{Changing context default settings}. -@c FIXME -@c uncomment when backslash-node-name issue is resolved -pm -@c @ruser{The set command}. - -Internals Reference: -@rinternals{Contexts}, -@rinternals{Tunable context properties}. - - -@node Adding and removing engravers -@subsection Adding and removing engravers - -@cindex engravers, adding -@cindex adding engravers -@cindex engravers, removing -@cindex removing engravers - -@funindex \consists -@funindex consists -@funindex \remove -@funindex remove - -We have seen that contexts each contain several engravers, each -of which is responsible for producing a particular part of the -output, like bar lines, staves, note heads, stems, etc. If an -engraver is removed from a context, it can no longer produce its -output. This is a crude way of modifying the output, but it -can sometimes be useful. - -@subsubheading Changing a single context - -To remove an engraver from a single context we use the -@code{\with} command placed immediately after the context creation -command, as in the previous section. - -As an illustration, let's repeat an example from the previous section -with the staff lines removed. Remember that the staff lines are -produced by the @code{Staff_symbol_engraver}. - -@lilypond[quote,verbatim,ragged-right] -\new Staff \with { - \remove Staff_symbol_engraver -} -\relative c' { - c4 - \set fontSize = #-4 % make note heads smaller - d e - \set fontSize = #2.5 % make note heads larger - f g - \unset fontSize % return to default size - a b -} -@end lilypond - -@cindex ambitus engraver - -Engravers can also be added to individual contexts. -The command to do this is - -@code{\consists @var{Engraver_name}}, - -@noindent -placed inside a @code{\with} block. Some vocal scores have an ambitus -placed at the beginning of a staff to indicate the range of notes in -that staff -- see @rglos{ambitus}. The ambitus is produced by the -@code{Ambitus_engraver}, which is not normally included in any -context. If we add it to the @code{Voice} context, it calculates the -range from that voice only: - -@lilypond[quote,verbatim,ragged-right] -\new Staff << - \new Voice \with { - \consists Ambitus_engraver - } - \relative c'' { - \voiceOne - c a b g - } - \new Voice - \relative c' { - \voiceTwo - c e d f - } ->> -@end lilypond - -@noindent -but if we add the ambitus engraver to the -@code{Staff} context, it calculates the range from all -the notes in all the voices on that staff: - -@lilypond[quote,verbatim,ragged-right] -\new Staff \with { - \consists Ambitus_engraver - } - << - \new Voice - \relative c'' { - \voiceOne - c a b g - } - \new Voice - \relative c' { - \voiceTwo - c e d f - } ->> -@end lilypond - -@subsubheading Changing all contexts of the same type - -@funindex \layout -@funindex layout - -The examples above show how to remove or add engravers to -individual contexts. It is also possible to remove or add -engravers to every context of a specific type by placing the -commands in the appropriate context in a @code{\layout} -block. For example, if we wanted to show an ambitus for every -staff in a four-staff score, we could write - -@lilypond[quote,verbatim,ragged-right] -\score { - << - \new Staff << - \relative c'' { c a b g } - >> - \new Staff << - \relative c' { c a b g } - >> - \new Staff << - \clef "G_8" - \relative c' { c a b g } - >> - \new Staff << - \clef "bass" - \relative c { c a b g } - >> - >> - \layout { - \context { - \Staff - \consists Ambitus_engraver - } - } -} -@end lilypond - -@noindent -The values of context properties may also be set -for all contexts of a particular type by including the -@code{\set} command in a @code{\context} block in the -same way. - - -@seealso -Notation Reference: @ruser{Modifying context plug-ins}, -@ruser{Changing context default settings}. - - -@node Extending the templates -@section Extending the templates - -You've read the tutorial, you know how to write music, you -understand the fundamental concepts. But how can you -get the staves that you want? Well, you can find lots of -templates (see @ref{Templates}) which may give you a start. -But what if you want something that isn't covered there? Read on. - -@menu -* Soprano and cello:: -* Four-part SATB vocal score:: -* Building a score from scratch:: -@end menu - -@node Soprano and cello -@subsection Soprano and cello - -@cindex template, modifying -@cindex modifying templates - -Start off with the template that seems closest to what you want to end -up with. Let's say that you want to write something for soprano and -cello. In this case, we would start with @q{Notes and lyrics} (for the -soprano part). - -@example -\version @w{"@version{}"} -melody = \relative c' @{ - \clef treble - \key c \major - \time 4/4 - a4 b c d -@} - -text = \lyricmode @{ - Aaa Bee Cee Dee -@} - -\score @{ - << - \new Voice = "one" @{ - \autoBeamOff - \melody - @} - \new Lyrics \lyricsto "one" \text - >> - \layout @{ @} - \midi @{ @} -@} -@end example - -Now we want to add a cello part. Let's look at the @q{Notes only} example: - -@example -\version @w{"@version{}"} -melody = \relative c' @{ - \clef treble - \key c \major - \time 4/4 - a4 b c d -@} - -\score @{ - \new Staff \melody - \layout @{ @} - \midi @{ @} -@} -@end example - -We don't need two @code{\version} commands. We'll need the -@code{melody} section. We don't want two @code{\score} sections --- if we had two @code{\score}s, we'd get the two parts separately. -We want them together, as a duet. Within the @code{\score} -section, we don't need two @code{\layout} or @code{\midi}. - -If we simply cut and paste the @code{melody} section, we would -end up with two @code{melody} definitions. This would not generate -an error, but the second one would be used for both melodies. -So let's rename them to make them distinct. We'll call the -section for the soprano @code{sopranoMusic} and the section for -the cello @code{celloMusic}. While we're doing this, let's rename -@code{text} to be @code{sopranoLyrics}. Remember to rename both -instances of all these names -- both the initial definition (the -@code{melody = \relative c' @{ } part) and the name's use (in the -@code{\score} section). - -While we're doing this, let's change the cello part's staff -- -celli normally use bass clef. We'll also give the cello some -different notes. - -@example -\version @w{"@version{}"} -sopranoMusic = \relative c' @{ - \clef treble - \key c \major - \time 4/4 - a4 b c d -@} - -sopranoLyrics = \lyricmode @{ - Aaa Bee Cee Dee -@} - -celloMusic = \relative c @{ - \clef bass - \key c \major - \time 4/4 - d4 g fis8 e d4 -@} - -\score @{ - << - \new Voice = "one" @{ - \autoBeamOff - \sopranoMusic - @} - \new Lyrics \lyricsto "one" \sopranoLyrics - >> - \layout @{ @} - \midi @{ @} -@} -@end example - -This is looking promising, but the cello part won't appear in the -score -- we haven't used it in the @code{\score} section. If we -want the cello part to appear under the soprano part, we need to add - -@example -\new Staff \celloMusic -@end example - -@noindent -underneath the soprano stuff. We also need to add @code{<<} and -@code{>>} around the music -- that tells LilyPond that there's -more than one thing (in this case, two @code{Staves}) happening -at once. The @code{\score} looks like this now: - -@c Indentation in this example is deliberately poor -@example -\score @{ - << - << - \new Voice = "one" @{ - \autoBeamOff - \sopranoMusic - @} - \new Lyrics \lyricsto "one" \sopranoLyrics - >> - \new Staff \celloMusic - >> - \layout @{ @} - \midi @{ @} -@} -@end example - -@noindent -This looks a bit messy; the indentation is messed up now. That is -easily fixed. Here's the complete soprano and cello template. - -@lilypond[quote,verbatim,ragged-right,addversion] -sopranoMusic = \relative c' { - \clef treble - \key c \major - \time 4/4 - a4 b c d -} - -sopranoLyrics = \lyricmode { - Aaa Bee Cee Dee -} - -celloMusic = \relative c { - \clef bass - \key c \major - \time 4/4 - d4 g fis8 e d4 -} - -\score { - << - << - \new Voice = "one" { - \autoBeamOff - \sopranoMusic - } - \new Lyrics \lyricsto "one" \sopranoLyrics - >> - \new Staff \celloMusic - >> - \layout { } - \midi { } -} -@end lilypond - - -@seealso -The starting templates can be found in the @q{Templates} appendix, -see @ref{Single staff}. - - -@node Four-part SATB vocal score -@subsection Four-part SATB vocal score - -@cindex template, SATB -@cindex SATB template - -Most vocal scores of music written for four-part mixed choir -with orchestral accompaniment such as Mendelssohn's Elijah or -Handel's Messiah have the choral music and words on four -staves, one for each of SATB, with a piano reduction of the -orchestral accompaniment underneath. Here's an example -from Handel's Messiah: - -@c The following should appear as music without code -@lilypond[quote,ragged-right] -global = { \key d \major \time 4/4 } -sopranoMusic = \relative c'' { - \clef "treble" - r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | -} -sopranoWords = \lyricmode { - Wor -- thy is the lamb that was slain -} -altoMusic = \relative a' { - \clef "treble" - r4 a2 a4 | fis4. fis8 a2 | g4 fis e2 | -} -altoWords = \sopranoWords -tenorMusic = \relative c' { - \clef "G_8" - r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | -} -tenorWords = \sopranoWords -bassMusic = \relative c' { - \clef "bass" - r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | -} -bassWords = \sopranoWords -upper = \relative a' { - \clef "treble" - \global - r4 2 4 | - 4. 8 2 | - 4 2 | -} -lower = \relative c, { - \clef "bass" - \global - 4 2 4 | - 4. 8 2 | - 4 2 | -} - -\score { - << % combine ChoirStaff and PianoStaff in parallel - \new ChoirStaff << - \new Staff = "sopranos" << - \set Staff.instrumentName = #"Soprano" - \new Voice = "sopranos" { \global \sopranoMusic } - >> - \new Lyrics \lyricsto "sopranos" { \sopranoWords } - \new Staff = "altos" << - \set Staff.instrumentName = #"Alto" - \new Voice = "altos" { \global \altoMusic } - >> - \new Lyrics \lyricsto "altos" { \altoWords } - \new Staff = "tenors" << - \set Staff.instrumentName = #"Tenor" - \new Voice = "tenors" { \global \tenorMusic } - >> - \new Lyrics \lyricsto "tenors" { \tenorWords } - \new Staff = "basses" << - \set Staff.instrumentName = #"Bass" - \new Voice = "basses" { \global \bassMusic } - >> - \new Lyrics \lyricsto "basses" { \bassWords } - >> % end ChoirStaff - - \new PianoStaff << - \set PianoStaff.instrumentName = #"Piano" - \new Staff = "upper" \upper - \new Staff = "lower" \lower - >> - >> -} -@end lilypond - -None of the templates provides this layout exactly. The nearest is -@q{SATB vocal score and automatic piano reduction} -- see @ref{Vocal -ensembles} -- but we need to change the layout and add a piano -accompaniment which is not derived automatically from the vocal parts. -The variables holding the music and words for the vocal parts are -fine, but we shall need to add variables for the piano reduction. - -The order in which the contexts appear in the ChoirStaff of the -template do not correspond with the order in the vocal score shown -above. We need to rearrange them so there are four staves with the -words written directly underneath the notes for each part. All the -voices should be @code{\voiceOne}, which is the default, so the -@code{\voiceXXX} commands should be removed. We also need to specify -the tenor clef for the tenors. The way in which lyrics are specified -in the template has not yet been encountered so we need to use the -method with which we are familiar. We should also add the names of -each staff. - -Doing this gives for our ChoirStaff: - -@example - \new ChoirStaff << - \new Staff = "sopranos" << - \set Staff.instrumentName = #"Soprano" - \new Voice = "sopranos" @{ \global \sopranoMusic @} - >> - \new Lyrics \lyricsto "sopranos" @{ \sopranoWords @} - \new Staff = "altos" << - \set Staff.instrumentName = #"Alto" - \new Voice = "altos" @{ \global \altoMusic @} - >> - \new Lyrics \lyricsto "altos" @{ \altoWords @} - \new Staff = "tenors" << - \set Staff.instrumentName = #"Tenor" - \new Voice = "tenors" @{ \global \tenorMusic @} - >> - \new Lyrics \lyricsto "tenors" @{ \tenorWords @} - \new Staff = "basses" << - \set Staff.instrumentName = #"Bass" - \new Voice = "basses" @{ \global \bassMusic @} - >> - \new Lyrics \lyricsto "basses" @{ \bassWords @} - >> % end ChoirStaff -@end example - -Next we must work out the piano part. This is -easy - we just pull out the piano part from the -@q{Solo piano} template: - -@example -\new PianoStaff << - \set PianoStaff.instrumentName = #"Piano " - \new Staff = "upper" \upper - \new Staff = "lower" \lower ->> -@end example - -and add the variable definitions for @code{upper} -and @code{lower}. - -The ChoirStaff and PianoStaff must be combined -using angle brackets as we want them to be -stacked one above the other: - -@example -<< % combine ChoirStaff and PianoStaff one above the other - \new ChoirStaff << - \new Staff = "sopranos" << - \new Voice = "sopranos" @{ \global \sopranoMusic @} - >> - \new Lyrics \lyricsto "sopranos" @{ \sopranoWords @} - \new Staff = "altos" << - \new Voice = "altos" @{ \global \altoMusic @} - >> - \new Lyrics \lyricsto "altos" @{ \altoWords @} - \new Staff = "tenors" << - \clef "G_8" % tenor clef - \new Voice = "tenors" @{ \global \tenorMusic @} - >> - \new Lyrics \lyricsto "tenors" @{ \tenorWords @} - \new Staff = "basses" << - \clef "bass" - \new Voice = "basses" @{ \global \bassMusic @} - >> - \new Lyrics \lyricsto "basses" @{ \bassWords @} - >> % end ChoirStaff - - \new PianoStaff << - \set PianoStaff.instrumentName = #"Piano" - \new Staff = "upper" \upper - \new Staff = "lower" \lower - >> ->> -@end example - -Combining all these together and adding the music -for the three bars of the example above gives: - -@lilypond[quote,verbatim,ragged-right,addversion] -global = { \key d \major \time 4/4 } -sopranoMusic = \relative c'' { - \clef "treble" - r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | -} -sopranoWords = \lyricmode { - Wor -- thy is the lamb that was slain -} -altoMusic = \relative a' { - \clef "treble" - r4 a2 a4 | fis4. fis8 a2 | g4 fis fis2 | -} -altoWords = \sopranoWords -tenorMusic = \relative c' { - \clef "G_8" - r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | -} -tenorWords = \sopranoWords -bassMusic = \relative c' { - \clef "bass" - r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | -} -bassWords = \sopranoWords -upper = \relative a' { - \clef "treble" - \global - r4 2 4 | - 4. 8 2 | - 4 2 | -} -lower = \relative c, { - \clef "bass" - \global - 4 2 4 | - 4. 8 2 | - 4 2 | -} - -\score { - << % combine ChoirStaff and PianoStaff in parallel - \new ChoirStaff << - \new Staff = "sopranos" << - \set Staff.instrumentName = #"Soprano" - \new Voice = "sopranos" { \global \sopranoMusic } - >> - \new Lyrics \lyricsto "sopranos" { \sopranoWords } - \new Staff = "altos" << - \set Staff.instrumentName = #"Alto" - \new Voice = "altos" { \global \altoMusic } - >> - \new Lyrics \lyricsto "altos" { \altoWords } - \new Staff = "tenors" << - \set Staff.instrumentName = #"Tenor" - \new Voice = "tenors" { \global \tenorMusic } - >> - \new Lyrics \lyricsto "tenors" { \tenorWords } - \new Staff = "basses" << - \set Staff.instrumentName = #"Bass" - \new Voice = "basses" { \global \bassMusic } - >> - \new Lyrics \lyricsto "basses" { \bassWords } - >> % end ChoirStaff - - \new PianoStaff << - \set PianoStaff.instrumentName = #"Piano " - \new Staff = "upper" \upper - \new Staff = "lower" \lower - >> - >> -} -@end lilypond - - -@node Building a score from scratch -@subsection Building a score from scratch - -@cindex template, writing your own -@cindex example of writing a score -@cindex writing a score, example -@cindex score, example of writing - -After gaining some facility with writing LilyPond code, you -may find that it is easier to build a score from scratch -rather than modifying one of the templates. You can also -develop your own style this way to suit the sort of music you -like. Let's see how to put together the score for an organ -prelude as an example. - -We begin with a header section. Here go the title, name -of composer, etc, then come any variable definitions, and -finally the score block. Let's start with these in outline -and fill in the details later. - -We'll use the first two bars of Bach's prelude -based on @emph{Jesu, meine Freude} which is written for two -manuals and pedal organ. You can see these two bars of music -at the bottom of this section. The top manual part has two voices, -the lower and pedal organ one each. So we need four -music definitions and one to define the time signature -and key: - -@example -\version @w{"@version{}"} -\header @{ - title = "Jesu, meine Freude" - composer = "J S Bach" -@} -TimeKey = @{ \time 4/4 \key c \minor @} -ManualOneVoiceOneMusic = @{s1@} -ManualOneVoiceTwoMusic = @{s1@} -ManualTwoMusic = @{s1@} -PedalOrganMusic = @{s1@} - -\score @{ -@} -@end example - -For now we've just used a spacer note, @code{s1}, -instead of the real music. We'll add that later. - -Next let's see what should go in the score block. -We simply mirror the staff structure we want. -Organ music is usually written on three staves, -one for each manual and one for the pedals. The -manual staves should be bracketed together, so we -need to use a PianoStaff for them. The first -manual part needs two voices and the second manual -part just one. - -@example - \new PianoStaff << - \new Staff = "ManualOne" << - \new Voice @{ \ManualOneVoiceOneMusic @} - \new Voice @{ \ManualOneVoiceTwoMusic @} - >> % end ManualOne Staff context - \new Staff = "ManualTwo" << - \new Voice @{ \ManualTwoMusic @} - >> % end ManualTwo Staff context - >> % end PianoStaff context -@end example - -Next we need to add a staff for the pedal organ. -This goes underneath the PianoStaff, but it must -be simultaneous with it, so we need angle brackets -around the two. Missing these out would generate -an error in the log file. It's a common mistake -which you'll make sooner or later! Try copying -the final example at the end of this section, -remove these angle brackets, and compile it to -see what errors it generates. - -@example -<< % PianoStaff and Pedal Staff must be simultaneous - \new PianoStaff << - \new Staff = "ManualOne" << - \new Voice @{ \ManualOneVoiceOneMusic @} - \new Voice @{ \ManualOneVoiceTwoMusic @} - >> % end ManualOne Staff context - \new Staff = "ManualTwo" << - \new Voice @{ \ManualTwoMusic @} - >> % end ManualTwo Staff context - >> % end PianoStaff context - \new Staff = "PedalOrgan" << - \new Voice @{ \PedalOrganMusic @} - >> ->> -@end example - -It is not necessary to use the simultaneous construct -@code{<< .. >>} for the manual two staff and the pedal organ staff, -since they contain only one music expression, but it does no harm, -and always using angle brackets after @code{\new Staff} is a good -habit to cultivate in case there are multiple voices. The opposite -is true for Voices: these should habitually be followed by braces -@code{@{ .. @}} in case your music is coded in several variables -which need to run consecutively. - -Let's add this structure to the score block, and adjust the indenting. -We also add the appropriate clefs, ensure stems, ties and slurs in -each voice on the upper staff point to the right direction with -@code{\voiceOne} and @code{\voiceTwo}, and enter the time signature -and key to each staff using our predefined variable, @code{\TimeKey}. - -@example -\score @{ - << % PianoStaff and Pedal Staff must be simultaneous - \new PianoStaff << - \new Staff = "ManualOne" << - \TimeKey % set time signature and key - \clef "treble" - \new Voice @{ \voiceOne \ManualOneVoiceOneMusic @} - \new Voice @{ \voiceTwo \ManualOneVoiceTwoMusic @} - >> % end ManualOne Staff context - \new Staff = "ManualTwo" << - \TimeKey - \clef "bass" - \new Voice @{ \ManualTwoMusic @} - >> % end ManualTwo Staff context - >> % end PianoStaff context - \new Staff = "PedalOrgan" << - \TimeKey - \clef "bass" - \new Voice @{ \PedalOrganMusic @} - >> % end PedalOrgan Staff - >> -@} % end Score context -@end example - -That completes the structure. Any three-staff organ music -will have a similar structure, although the number of voices -may vary. All that remains now -is to add the music, and combine all the parts together. - -@lilypond[quote,verbatim,ragged-right,addversion] -\header { - title = "Jesu, meine Freude" - composer = "J S Bach" -} -TimeKey = { \time 4/4 \key c \minor } -ManualOneVoiceOneMusic = \relative g' { - g4 g f ees | d2 c2 | -} -ManualOneVoiceTwoMusic = \relative c' { - ees16 d ees8~ ees16 f ees d c8 d~ d c~ | - c c4 b8 c8. g16 c b c d | -} -ManualTwoMusic = \relative c' { - c16 b c8~ c16 b c g a8 g~ g16 g aes ees | - f ees f d g aes g f ees d e8~ ees16 f ees d | -} -PedalOrganMusic = \relative c { - r8 c16 d ees d ees8~ ees16 a, b g c b c8 | - r16 g ees f g f g8 c,2 | - } - -\score { - << % PianoStaff and Pedal Staff must be simultaneous - \new PianoStaff << - \new Staff = "ManualOne" << - \TimeKey % set time signature and key - \clef "treble" - \new Voice { \voiceOne \ManualOneVoiceOneMusic } - \new Voice { \voiceTwo \ManualOneVoiceTwoMusic } - >> % end ManualOne Staff context - \new Staff = "ManualTwo" << - \TimeKey - \clef "bass" - \new Voice { \ManualTwoMusic } - >> % end ManualTwo Staff context - >> % end PianoStaff context - \new Staff = "PedalOrgan" << - \TimeKey - \clef "bass" - \new Voice { \PedalOrganMusic } - >> % end PedalOrgan Staff context - >> -} % end Score context -@end lilypond - - diff --git a/Documentation/user/glossary.html.in b/Documentation/user/glossary.html.in deleted file mode 100644 index 086c9d9f23..0000000000 --- a/Documentation/user/glossary.html.in +++ /dev/null @@ -1,8 +0,0 @@ - - - -

    Music glossary has moved

    - -The new location is:
    music-glossary.html. - -

    Please update your links. Sorry for the inconvenience. diff --git a/Documentation/user/henle-flat-bw.png b/Documentation/user/henle-flat-bw.png deleted file mode 100644 index b47660f376..0000000000 Binary files a/Documentation/user/henle-flat-bw.png and /dev/null differ diff --git a/Documentation/user/henle-flat-gray.png b/Documentation/user/henle-flat-gray.png deleted file mode 100644 index 20326b958a..0000000000 Binary files a/Documentation/user/henle-flat-gray.png and /dev/null differ diff --git a/Documentation/user/input.itely b/Documentation/user/input.itely deleted file mode 100644 index ead89488c4..0000000000 --- a/Documentation/user/input.itely +++ /dev/null @@ -1,2022 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node General input and output -@chapter General input and output - -This section deals with general LilyPond input and output issues, -rather than specific notation. - -@menu -* Input structure:: -* Titles and headers:: -* Working with input files:: -* Controlling output:: -* MIDI output:: -@end menu - - -@node Input structure -@section Input structure - -The main format of input for LilyPond are text files. By convention, -these files end with @code{.ly}. - -@menu -* Structure of a score:: -* Multiple scores in a book:: -* File structure:: -@end menu - - -@node Structure of a score -@subsection Structure of a score - -@funindex \score - -A @code{\score} block must contain a single music expression -delimited by curly brackets: - -@example -\score @{ -... -@} -@end example - -@warning{There must be @strong{only one} outer music expression in -a @code{\score} block, and it @strong{must} be surrounded by -curly brackets.} - -This single music expression may be of any size, and may contain -other music expressions to any complexity. All of these examples -are music expressions: - -@example -@{ c'4 c' c' c' @} -@end example - -@lilypond[verbatim,quote] -{ - { c'4 c' c' c'} - { d'4 d' d' d'} -} -@end lilypond - -@lilypond[verbatim,quote] -<< - \new Staff { c'4 c' c' c' } - \new Staff { d'4 d' d' d' } ->> -@end lilypond - -@example -@{ - \new GrandStaff << - \new StaffGroup << - \new Staff @{ \flute @} - \new Staff @{ \oboe @} - >> - \new StaffGroup << - \new Staff @{ \violinI @} - \new Staff @{ \violinII @} - >> - >> -@} -@end example - -Comments are one exception to this general rule. (For others see -@ref{File structure}.) Both single-line comments and comments -delimited by @code{%@{ .. %@}} may be placed anywhere within an -input file. They may be placed inside or outside a @code{\score} -block, and inside or outside the single music expression within a -@code{\score} block. - - -@seealso -Learning Manual: -@rlearning{Working on input files}, -@rlearning{Music expressions explained}, -@rlearning{Score is a (single) compound musical expression}. - - -@node Multiple scores in a book -@subsection Multiple scores in a book - -@funindex \book -@cindex movements, multiple - -A document may contain multiple pieces of music and text. Examples -of these are an etude book, or an orchestral part with multiple -movements. Each movement is entered with a @code{\score} block, - -@example -\score @{ - @var{..music..} -@} -@end example - -and texts are entered with a @code{\markup} block, - -@example -\markup @{ - @var{..text..} -@} -@end example - -@funindex \book - -All the movements and texts which appear in the same @code{.ly} file -will normally be typeset in the form of a single output file. - -@example -\score @{ - @var{..} -@} -\markup @{ - @var{..} -@} -\score @{ - @var{..} -@} -@end example - -However, if you want multiple output files from the same @code{.ly} -file, then you can add multiple @code{\book} blocks, where each such -@code{\book} block will result in a separate output. If you do not -specify any @code{\book} block in the file, LilyPond will implicitly -treat the full file as a single @code{\book} block, see @ref{File -structure}. One important exception is within lilypond-book documents, -where you explicitly have to add a @code{\book} block, otherwise only -the first @code{\score} or @code{\markup} will appear in the output. - -The header for each piece of music can be put inside the @code{\score} -block. The @code{piece} name from the header will be printed before -each movement. The title for the entire book can be put inside the -@code{\book}, but if it is not present, the @code{\header} which is at -the top of the file is inserted. - -@example -\header @{ - title = "Eight miniatures" - composer = "Igor Stravinsky" -@} -\score @{ - @dots{} - \header @{ piece = "Romanze" @} -@} -\markup @{ - ..text of second verse.. -@} -\markup @{ - ..text of third verse.. -@} -\score @{ - @dots{} - \header @{ piece = "Menuetto" @} -@} -@end example - -@funindex \bookpart - -Pieces of music may be grouped into book parts using @code{\bookpart} -blocks. Book parts are separated by a page break, and can start with a -title, like the book itself, by specifying a @code{\header} block. - -@example -\bookpart @{ - \header @{ - title = "Book title" - subtitle = "First part" - @} - \score @{ @dots{} @} - @dots{} -@} -\bookpart @{ - \header @{ - subtitle = "Second part" - @} - \score @{ @dots{} @} - @dots{} -@} -@end example - -@node File structure -@subsection File structure - -@funindex \paper -@funindex \midi -@funindex \layout -@funindex \header -@funindex \score -@funindex \book -@funindex \bookpart - -A @code{.ly} file may contain any number of toplevel expressions, where a -toplevel expression is one of the following: - -@itemize @bullet -@item -An output definition, such as @code{\paper}, @code{\midi}, and -@code{\layout}. Such a definition at the toplevel changes the default -book-wide settings. If more than one such definition of -the same type is entered at the top level any definitions in the later -expressions have precedence. - -@item -A direct scheme expression, such as -@code{#(set-default-paper-size "a7" 'landscape)} or -@code{#(ly:set-option 'point-and-click #f)}. - -@item -A @code{\header} block. This sets the global header block. This -is the block containing the definitions for book-wide settings, like -composer, title, etc. - -@item -A @code{\score} block. This score will be collected with other -toplevel scores, and combined as a single @code{\book}. -This behavior can be changed by setting the variable -@code{toplevel-score-handler} at toplevel. The default handler is -defined in the init file @file{../scm/@/lily@/.scm}. - -@item -A @code{\book} block logically combines multiple movements -(i.e., multiple @code{\score} blocks) in one document. If there -are a number of @code{\score}s, one output file will be created -for each @code{\book} block, in which all corresponding movements -are concatenated. The only reason to explicitly specify -@code{\book} blocks in a @code{.ly} file is if you wish to create -multiple output files from a single input file. One exception is -within lilypond-book documents, where you explicitly have to add -a @code{\book} block if you want more than a single @code{\score} -or @code{\markup} in the same example. This behavior can be -changed by setting the variable @code{toplevel-book-handler} at -toplevel. The default handler is defined in the init file -@file{../scm/@/lily@/.scm}. - -@item -A @code{\bookpart} block. A book may be divided into several parts, -using @code{\bookpart} blocks, in order to ease the page breaking, -or to use different @code{\paper} settings in different parts. - -@item -A compound music expression, such as -@example -@{ c'4 d' e'2 @} -@end example - -This will add the piece in a @code{\score} and format it in a -single book together with all other toplevel @code{\score}s and music -expressions. In other words, a file containing only the above -music expression will be translated into - -@example -\book @{ - \score @{ - \new Staff @{ - \new Voice @{ - @{ c'4 d' e'2 @} - @} - @} - @} - \layout @{ @} - \header @{ @} -@} -@end example - -This behavior can be changed by setting the variable -@code{toplevel-music-handler} at toplevel. The default handler is -defined in the init file @file{../scm/@/lily@/.scm}. - -@item -A markup text, a verse for example -@example -\markup @{ - 2. The first line verse two. -@} -@end example - -Markup texts are rendered above, between or below the scores or music -expressions, wherever they appear. - -@cindex variables - -@item -A variable, such as -@example -foo = @{ c4 d e d @} -@end example - -This can be used later on in the file by entering @code{\foo}. The -name of a variable should have alphabetic characters only; no -numbers, underscores or dashes. - -@end itemize - -The following example shows three things that may be entered at -toplevel - -@example -\layout @{ - % Don't justify the output - ragged-right = ##t -@} - -\header @{ - title = "Do-re-mi" -@} - -@{ c'4 d' e2 @} -@end example - - -At any point in a file, any of the following lexical instructions can -be entered: - -@itemize -@item @code{\version} -@item @code{\include} -@item @code{\sourcefilename} -@item @code{\sourcefileline} -@item -A single-line comment, introduced by a leading @code{%} sign. - -@item -A multi-line comment delimited by @code{%@{ .. %@}}. - -@end itemize - -@cindex whitespace - -Whitespace between items in the input stream is generally ignored, -and may be freely omitted or extended to enhance readability. -However, whitespace should always be used in the following -circumstances to avoid errors: - -@itemize -@item Around every opening and closing curly bracket. -@item After every command or variable, i.e. every item that -begins with a @code{\} sign. -@item After every item that is to be interpreted as a Scheme -expression, i.e. every item that begins with a @code{#} sign. -@item To separate all elements of a Scheme expression. -@item In @code{lyricmode} to separate all the terms in both -@code{\override} and @code{\set} commands. In particular, spaces -must be used around the dot and the equals sign in commands like -@code{\override Score . LyricText #'font-size = #5} and before and -after the entire command. - -@end itemize - -@seealso -Learning Manual: -@rlearning{How LilyPond input files work}. - - -@node Titles and headers -@section Titles and headers - -Almost all printed music includes a title and the composer's name; -some pieces include a lot more information. - -@menu -* Creating titles:: -* Custom titles:: -* Reference to page numbers:: -* Table of contents:: -@end menu - - -@node Creating titles -@subsection Creating titles - -Titles are created for each @code{\score} block, as well as for the full -input file (or @code{\book} block) and book parts (created by -@code{\bookpart} blocks). - -The contents of the titles are taken from the @code{\header} blocks. -The header block for a book supports the following - - -@table @code -@funindex dedication -@item dedication -The dedicatee of the music, centered at the top of the first page. - -@funindex title -@item title -The title of the music, centered just below the dedication. - -@funindex subtitle -@item subtitle -Subtitle, centered below the title. - -@funindex subsubtitle -@item subsubtitle -Subsubtitle, centered below the subtitle. - -@funindex poet -@item poet -Name of the poet, flush-left below the subsubtitle. - -@funindex instrument -@item instrument -Name of the instrument, centered below the subsubtitle. Also -centered at the top of pages (other than the first page). - -@funindex composer -@item composer -Name of the composer, flush-right below the subsubtitle. - -@funindex meter -@item meter -Meter string, flush-left below the poet. - -@funindex arranger -@item arranger -Name of the arranger, flush-right below the composer. - -@funindex piece -@item piece -Name of the piece, flush-left below the meter. - -@funindex opus -@item opus -Name of the opus, flush-right below the arranger. - -@cindex page breaks, forcing -@funindex breakbefore -@item breakbefore -This forces the title to start on a new page (set to ##t or ##f). - -@funindex copyright -@item copyright -Copyright notice, centered at the bottom of the first page. To -insert the copyright symbol, see @ref{Text encoding}. - -@funindex tagline -@item tagline -Centered at the bottom of the last page. - -@end table - -Here is a demonstration of the fields available. Note that you -may use any @ref{Formatting text}, commands in the header. - -@lilypond[quote,verbatim,line-width=11.0\cm] -\paper { - line-width = 9.0\cm - paper-height = 10.0\cm -} - -\book { - \header { - dedication = "dedicated to me" - title = \markup \center-column { "Title first line" "Title second line, -longer" } - subtitle = "the subtitle," - subsubtitle = #(string-append "subsubtitle LilyPond version " -(lilypond-version)) - poet = "Poet" - composer = \markup \center-column { "composer" \small "(1847-1973)" } - texttranslator = "Text Translator" - meter = \markup { \teeny "m" \tiny "e" \normalsize "t" \large "e" \huge -"r" } - arranger = \markup { \fontsize #8.5 "a" \fontsize #2.5 "r" \fontsize -#-2.5 "r" \fontsize #-5.3 "a" \fontsize #7.5 "nger" } - instrument = \markup \bold \italic "instrument" - piece = "Piece" - } - - \score { - { c'1 } - \header { - piece = "piece1" - opus = "opus1" - } - } - \markup { - and now... - } - \score { - { c'1 } - \header { - piece = "piece2" - opus = "opus2" - } - } -} -@end lilypond - -As demonstrated before, you can use multiple @code{\header} blocks. -When same fields appear in different blocks, the latter is used. -Here is a short example. - -@example -\header @{ - composer = "Composer" -@} -\header @{ - piece = "Piece" -@} -\score @{ - \new Staff @{ c'4 @} - \header @{ - piece = "New piece" % overwrite previous one - @} -@} -@end example - -If you define the @code{\header} inside the @code{\score} block, then -normally only the @code{piece} and @code{opus} headers will be printed. -Note that the music expression must come before the @code{\header}. - -@lilypond[quote,verbatim,line-width=11.0\cm] -\score { - { c'4 } - \header { - title = "title" % not printed - piece = "piece" - opus = "opus" - } -} -@end lilypond - -@funindex print-all-headers -@noindent -You may change this behavior (and print all the headers when defining -@code{\header} inside @code{\score}) by using - -@example -\paper@{ - print-all-headers = ##t -@} -@end example - -@cindex copyright -@cindex tagline - -The default footer is empty, except for the first page, where the -@code{copyright} field from @code{\header} is inserted, and the last -page, where @code{tagline} from @code{\header} is added. The default -tagline is @qq{Music engraving by LilyPond (@var{version})}.@footnote{Nicely -printed parts are good PR for us, so please leave the tagline if you -can.} - -Headers may be completely removed by setting them to false. - -@example -\header @{ - tagline = ##f - composer = ##f -@} -@end example - - -@node Custom titles -@subsection Custom titles - -A more advanced option is to change the definitions of the following -variables in the @code{\paper} block. The init file -@file{../ly/titling-init.ly} lists the default layout. - -@table @code -@funindex bookTitleMarkup -@item bookTitleMarkup - This is the title added at the top of the entire output document. -Typically, it has the composer and the title of the piece - -@funindex scoreTitleMarkup -@item scoreTitleMarkup - This is the title put over a @code{\score} block. Typically, it has -the name of the movement (@code{piece} field). - -@funindex oddHeaderMarkup -@item oddHeaderMarkup - This is the page header for odd-numbered pages. - -@funindex evenHeaderMarkup -@item evenHeaderMarkup - This is the page header for even-numbered pages. If unspecified, - the odd header is used instead. - - By default, headers are defined such that the page number is on the - outside edge, and the instrument is centered. - -@funindex oddFooterMarkup -@item oddFooterMarkup - This is the page footer for odd-numbered pages. - -@funindex evenFooterMarkup -@item evenFooterMarkup - This is the page footer for even-numbered pages. If unspecified, - the odd header is used instead. - - By default, the footer has the copyright notice on the first, and - the tagline on the last page. -@end table - - -@cindex \paper -@cindex header -@cindex footer -@cindex page layout -@cindex titles - -The following definition will put the title flush left, and the -composer flush right on a single line. - -@verbatim -\paper { - bookTitleMarkup = \markup { - \fill-line { - \fromproperty #'header:title - \fromproperty #'header:composer - } - } -} -@end verbatim - -@node Reference to page numbers -@subsection Reference to page numbers - -A particular place of a score can be marked using the @code{\label} -command, either at top-level or inside music. This label can then be -referred to in a markup, to get the number of the page where the marked -point is placed, using the @code{\page-ref} markup command. - -@lilypond[verbatim,line-width=11.0\cm] -\header { tagline = ##f } -\book { - \label #'firstScore - \score { - { - c'1 - \pageBreak \mark A \label #'markA - c' - } - } - - \markup { The first score begins on page \page-ref #'firstScore "0" "?" } - \markup { Mark A is on page \page-ref #'markA "0" "?" } -} -@end lilypond - -The @code{\page-ref} markup command takes three arguments: -@enumerate -@item the label, a scheme symbol, eg. @code{#'firstScore}; -@item a markup that will be used as a gauge to estimate the dimensions -of the markup; -@item a markup that will be used in place of the page number if the label -is not known; -@end enumerate - -The reason why a gauge is needed is that, at the time markups are -interpreted, the page breaking has not yet occurred, so the page numbers -are not yet known. To work around this issue, the actual markup -interpretation is delayed to a later time; however, the dimensions of -the markup have to be known before, so a gauge is used to decide these -dimensions. If the book has between 10 and 99 pages, it may be "00", -ie. a two digit number. - - -@predefined -@funindex \label -@code{\label}, -@funindex \page-ref -@code{\page-ref}. -@endpredefined - - -@node Table of contents -@subsection Table of contents -A table of contents is included using the @code{\markuplines \table-of-contents} -command. The elements which should appear in the table of contents are -entered with the @code{\tocItem} command, which may be used either at -top-level, or inside a music expression. - -@verbatim -\markuplines \table-of-contents -\pageBreak - -\tocItem \markup "First score" -\score { - { - c' % ... - \tocItem \markup "Some particular point in the first score" - d' % ... - } -} - -\tocItem \markup "Second score" -\score { - { - e' % ... - } -} -@end verbatim - -The markups which are used to format the table of contents are defined -in the @code{\paper} block. The default ones are @code{tocTitleMarkup}, -for formatting the title of the table, and @code{tocItemMarkup}, for -formatting the toc elements, composed of the element title and page -number. These variables may be changed by the user: - -@verbatim -\paper { - %% Translate the toc title into French: - tocTitleMarkup = \markup \huge \column { - \fill-line { \null "Table des matières" \null } - \hspace #1 - } - %% use larger font size - tocItemMarkup = \markup \large \fill-line { - \fromproperty #'toc:text \fromproperty #'toc:page - } -} -@end verbatim - -Note how the toc element text and page number are referred to in -the @code{tocItemMarkup} definition. - -New commands and markups may also be defined to build more elaborated -table of contents: -@itemize -@item first, define a new markup variable in the @code{\paper} block -@item then, define a music function which aims at adding a toc element -using this markup paper variable. -@end itemize - -In the following example, a new style is defined for entering act names -in the table of contents of an opera: - -@verbatim -\paper { - tocActMarkup = \markup \large \column { - \hspace #1 - \fill-line { \null \italic \fromproperty #'toc:text \null } - \hspace #1 - } -} - -tocAct = -#(define-music-function (parser location text) (markup?) - (add-toc-item! 'tocActMarkup text)) -@end verbatim - -@lilypond[line-width=11.0\cm] -\header { tagline = ##f } -\paper { - tocActMarkup = \markup \large \column { - \hspace #1 - \fill-line { \null \italic \fromproperty #'toc:text \null } - \hspace #1 - } -} - -tocAct = -#(define-music-function (parser location text) (markup?) - (add-toc-item! 'tocActMarkup text)) - -\book { - \markuplines \table-of-contents - \tocAct \markup { Atto Primo } - \tocItem \markup { Coro. Viva il nostro Alcide } - \tocItem \markup { Cesare. Presti omai l'Egizzia terra } - \tocAct \markup { Atto Secondo } - \tocItem \markup { Sinfonia } - \tocItem \markup { Cleopatra. V'adoro, pupille, saette d'Amore } - \markup \null -} -@end lilypond - - -@seealso -Init files: @file{../ly/@/toc@/-init@/.ly}. - - -@predefined -@funindex \table-of-contents -@code{\table-of-contents}, -@funindex \tocItem -@code{\tocItem}. -@endpredefined - - -@node Working with input files -@section Working with input files - -@menu -* Including LilyPond files:: -* Different editions from one source:: -* Text encoding:: -* Displaying LilyPond notation:: -@end menu - - -@node Including LilyPond files -@subsection Including LilyPond files - -@funindex \include -@cindex including files - -A large project may be split up into separate files. To refer to -another file, use - -@example -\include "otherfile.ly" -@end example - -The line @code{\include "otherfile.ly"} is equivalent to pasting the -contents of @file{otherfile.ly} into the current file at the place -where the @code{\include} appears. For example, in a large -project you might write separate files for each instrument part -and create a @qq{full score} file which brings together the -individual instrument files. Normally the included file will -define a number of variables which then become available -for use in the full score file. Tagged sections can be -marked in included files to assist in making them usable in -different places in a score, see @ref{Different editions from -one source}. - -Files in the current working directory may be referenced by -specifying just the file name after the @code{\include} command. -Files in other locations may be included by giving either a full -path reference or a relative path reference (but use the UNIX -forward slash, /, rather than the DOS/Windows back slash, \, as the -directory separator.) For example, if @file{stuff.ly} is located -one directory higher than the current working directory, use - -@example -\include "../stuff.ly" -@end example - -@noindent -or if the included orchestral parts files are all located in a -subdirectory called @file{parts} within the current directory, use - -@example -\include "parts/VI.ly" -\include "parts/VII.ly" -... etc -@end example - -Files which are to be included can also contain @code{\include} -statements of their own. By default, these second-level -@code{\include} statements are not interpreted until they have -been brought into the main file, so the file names they specify -must all be relative to the directory containing the main file, -not the directory containing the included file. However, -this behavior can be changed by passing the option -@code{-drelative-includes} option at the command line -(or by adding @code{#(ly:set-option 'relative-includes #t)} -at the top of the main input file). With @code{relative-includes} -set, the path for each @code{\include} command will be taken -relative to the file containing that command. This behavior is -recommended and it will become the default behavior in a future -version of lilypond. - -Files can also be included from a directory in a search path -specified as an option when invoking LilyPond from the command -line. The included files are then specified using just their -file name. For example, to compile @file{main.ly} which includes -files located in a subdirectory called @file{parts} by this method, -cd to the directory containing @file{main.ly} and enter - -@example -lilypond --include=parts main.ly -@end example - -and in main.ly write - -@example -\include "VI.ly" -\include "VII.ly" -... etc -@end example - -Files which are to be included in many scores may be placed in -the LilyPond directory @file{../ly}. (The location of this -directory is installation-dependent - see -@rlearning{Other sources of information}). These files can then -be included simply by naming them on an @code{\include} statement. -This is how the language-dependent files like @file{english.ly} are -included. - -LilyPond includes a number of files by default when you start -the program. These includes are not apparent to the user, but the -files may be identified by running @code{lilypond --verbose} from -the command line. This will display a list of paths and files that -LilyPond uses, along with much other information. Alternatively, -the more important of these files are discussed in -@rlearning{Other sources of information}. These files may be -edited, but changes to them will be lost on installing a new -version of LilyPond. - -Some simple examples of using @code{\include} are shown in -@rlearning{Scores and parts}. - - -@seealso -Learning Manual: -@rlearning{Other sources of information}, -@rlearning{Scores and parts}. - - -@knownissues - -If an included file is given a name which is the same as one in -LilyPond's installation files, LilyPond's file from the -installation files takes precedence. - - - -@node Different editions from one source -@subsection Different editions from one source - -Several mechanisms are available to facilitate the generation -of different versions of a score from the same music source. -Variables are perhaps most useful for combining lengthy sections -of music and/or annotation in various ways, while tags are more -useful for selecting one from several alternative shorter sections -of music. Whichever method is used, separating the notation from -the structure of the score will make it easier to change the -structure while leaving the notation untouched. - -@menu -* Using variables:: -* Using tags:: -@end menu - -@node Using variables -@unnumberedsubsubsec Using variables - -@cindex variables, use of - -If sections of the music are defined in variables they can be -reused in different parts of the score, see @rlearning{Organizing -pieces with variables}. For example, an @notation{a cappella} -vocal score frequently includes a piano reduction of the parts -for rehearsal purposes which is identical to the vocal music, so -the music need be entered only once. Music from two variables -may be combined on one staff, see @ref{Automatic part combining}. -Here is an example: - -@lilypond[verbatim,quote] -sopranoMusic = \relative c'' { a4 b c b8( a)} -altoMusic = \relative g' { e4 e e f } -tenorMusic = \relative c' { c4 b e d8( c) } -bassMusic = \relative c' { a4 gis a d, } -allLyrics = \lyricmode {King of glo -- ry } -<< - \new Staff = "Soprano" \sopranoMusic - \new Lyrics \allLyrics - \new Staff = "Alto" \altoMusic - \new Lyrics \allLyrics - \new Staff = "Tenor" { - \clef "treble_8" - \tenorMusic - } - \new Lyrics \allLyrics - \new Staff = "Bass" { - \clef "bass" - \bassMusic - } - \new Lyrics \allLyrics - \new PianoStaff << - \new Staff = "RH" { - \set Staff.printPartCombineTexts = ##f - \partcombine - \sopranoMusic - \altoMusic - } - \new Staff = "LH" { - \set Staff.printPartCombineTexts = ##f - \clef "bass" - \partcombine - \tenorMusic - \bassMusic - } - >> ->> -@end lilypond - -Separate scores showing just the vocal parts or just the piano -part can be produced by changing just the structural statements, -leaving the musical notation unchanged. - -For lengthy scores, the variable definitions may be placed in -separate files which are then included, see @ref{Including -LilyPond files}. - -@node Using tags -@unnumberedsubsubsec Using tags - -@funindex \tag -@funindex \keepWithTag -@funindex \removeWithTag -@cindex tag -@cindex keep tagged music -@cindex remove tagged music - -The @code{\tag #'@var{partA}} command marks a music expression -with the name @var{partA}. -Expressions tagged in this way can be selected or filtered out by -name later, using either @code{\keepWithTag #'@var{name}} or -@code{\removeWithTag #'@var{name}}. The result of applying these filters -to tagged music is as follows: -@multitable @columnfractions .5 .5 -@headitem Filter - @tab Result -@item -Tagged music preceded by @code{\keepWithTag #'@var{name}} - @tab Untagged music and music tagged with @var{name} is included; - music tagged with any other tag name is excluded. -@item -Tagged music preceded by @code{\removeWithTag #'@var{name}} -@tab Untagged music and music tagged with any tag name other than - @var{name} is included; music tagged with @var{name} is - excluded. -@item -Tagged music not preceded by either @code{\keepWithTag} or -@code{\removeWithTag} -@tab All tagged and untagged music is included. -@end multitable - -The arguments of the @code{\tag}, @code{\keepWithTag} and -@code{\removeWithTag} commands should be a symbol -(such as @code{#'score} or @code{#'part}), followed -by a music expression. - -In the following example, we see two versions of a piece of music, -one showing trills with the usual notation, and one with trills -explicitly expanded: - -@lilypond[verbatim,quote] -music = \relative g' { - g8. c32 d - \tag #'trills {d8.\trill } - \tag #'expand {\repeat unfold 3 {e32 d} } - c32 d - } - -\score { - \keepWithTag #'trills \music -} -\score { - \keepWithTag #'expand \music -} -@end lilypond - -@noindent -Alternatively, it is sometimes easier to exclude sections of music: - -@lilypond[verbatim,quote] -music = \relative g' { - g8. c32 d - \tag #'trills {d8.\trill } - \tag #'expand {\repeat unfold 3 {e32 d} } - c32 d - } - -\score { - \removeWithTag #'expand - \music -} -\score { - \removeWithTag #'trills - \music -} -@end lilypond - -Tagged filtering can be applied to articulations, texts, etc. by -prepending - -@example --\tag #'@var{your-tag} -@end example - -to an articulation. For example, this would define a note with a -conditional fingering indication and a note with a conditional -annotation: - -@example -c1-\tag #'finger ^4 -c1-\tag #'warn ^"Watch!" -@end example - -Multiple tags may be placed on expressions with multiple -@code{\tag} entries: - -@lilypond[quote,verbatim] -music = \relative c'' { - \tag #'a \tag #'both { a a a a } - \tag #'b \tag #'both { b b b b } -} -<< -\keepWithTag #'a \music -\keepWithTag #'b \music -\keepWithTag #'both \music ->> -@end lilypond - -Multiple @code{\removeWithTag} filters may be applied to a single -music expression to remove several differently named tagged sections: - -@lilypond[verbatim,quote] -music = \relative c'' { -\tag #'A { a a a a } -\tag #'B { b b b b } -\tag #'C { c c c c } -\tag #'D { d d d d } -} -{ -\removeWithTag #'B -\removeWithTag #'C -\music -} -@end lilypond - -Two or more @code{\keepWithTag} filters applied to a single music -expression will cause @emph{all} tagged sections to be removed, as -the first filter will remove all tagged sections except the one -named, and the second filter will remove even that tagged section. - - -@seealso -Learning Manual: -@rlearning{Organizing pieces with variables}. - -Notation Reference: -@ref{Automatic part combining}, -@ref{Including LilyPond files}. - - -@ignore -@c This warning is more general than this placement implies. -@c Rests are not merged whether or not they come from tagged sections. -@c Should be deleted? -td - -@knownissues - -Multiple rests are not merged if you create a score with more -than one tagged section at the same place. - -@end ignore - -@node Text encoding -@subsection Text encoding - -@cindex Unicode -@cindex UTF-8 -@cindex non-ASCII characters - -LilyPond uses the character repertoire defined by the Unicode -consortium and ISO/IEC 10646. This defines a unique name and -code point for the character sets used in virtually all modern -languages and many others too. Unicode can be implemented using -several different encodings. LilyPond uses the UTF-8 encoding -(UTF stands for Unicode Transformation Format) which represents -all common Latin characters in one byte, and represents other -characters using a variable length format of up to four bytes. - -The actual appearance of the characters is determined by the -glyphs defined in the particular fonts available - a font defines -the mapping of a subset of the Unicode code points to glyphs. -LilyPond uses the Pango library to layout and render multi-lingual -texts. - -LilyPond does not perform any input-encoding conversions. This -means that any text, be it title, lyric text, or musical -instruction containing non-ASCII characters, must be encoded in -UTF-8. The easiest way to enter such text is by using a -Unicode-aware editor and saving the file with UTF-8 encoding. Most -popular modern editors have UTF-8 support, for example, vim, Emacs, -jEdit, and GEdit do. All MS Windows systems later than NT use -Unicode as their native character encoding, so even Notepad can -edit and save a file in UTF-8 format. A more functional -alternative for Windows is BabelPad. - -If a LilyPond input file containing a non-ASCII character is not -saved in UTF-8 format the error message - -@example -FT_Get_Glyph_Name () error: invalid argument -@end example - -will be generated. - -Here is an example showing Cyrillic, Hebrew and Portuguese -text: - -@lilypond[quote] -%c No verbatim here as the code does not display correctly in PDF -% Cyrillic -bulgarian = \lyricmode { - Жълтата дюля беше щастлива, че пухът, който цъфна, замръзна като гьон. -} - -% Hebrew -hebrew = \lyricmode { - זה כיף סתם לשמוע איך תנצח קרפד עץ טוב בגן. -} - -% Portuguese -portuguese = \lyricmode { - à vo -- cê uma can -- ção legal -} - -\relative { - c2 d e f g f e -} -\addlyrics { \bulgarian } -\addlyrics { \hebrew } -\addlyrics { \portuguese } -@end lilypond - -To enter a single character for which the Unicode code point is -known but which is not available in the editor being used, use -either @code{\char ##xhhhh} or @code{\char #dddd} within a -@code{\markup} block, where @code{hhhh} is the hexadecimal code for -the character required and @code{dddd} is the corresponding decimal -value. Leading zeroes may be omitted, but it is usual to specify -all four characters in the hexadecimal representation. (Note that -the UTF-8 encoding of the code point should @emph{not} be used -after @code{\char}, as UTF-8 encodings contain extra bits indicating -the number of octets.) - -For example, @code{\char ##x03BE} and @code{\char #958} would both -enter the Unicode U+03BE character, which has the Unicode name -@qq{Greek Small Letter Xi}. - -Any Unicode code point may be entered in this way and if all special -characters are entered in this format it is not necessary to save -the input file in UTF-8 format. Of course, a font containing all -such encoded characters must be installed and available to LilyPond. - -The following example shows Unicode hexadecimal values being entered -in four places -- in a rehearsal mark, as articulation text, in -lyrics and as stand-alone text below the score: - -@lilypond[quote,verbatim] -\score { - \relative c'' { - c1 \mark \markup { \char ##x03EE } - c1_\markup { \tiny { \char ##x03B1 " to " \char ##x03C9 } } - } - \addlyrics { O \markup { \concat{ Ph \char ##x0153 be! } } } -} -\markup { "Copyright 2008--2009" \char ##x00A9 } -@end lilypond - -@cindex copyright sign - -To enter the copyright sign in the copyright notice use: - -@example -\header @{ - copyright = \markup @{ \char ##x00A9 "2008" @} -@} -@end example - -@node Displaying LilyPond notation -@subsection Displaying LilyPond notation - -@funindex \displayLilyMusic -Displaying a music expression in LilyPond notation can be -done using the music function @code{\displayLilyMusic}. For example, - -@example -@{ - \displayLilyMusic \transpose c a, @{ c e g a bes @} -@} -@end example - -will display - -@example -@{ a, cis e fis g @} -@end example - -By default, LilyPond will print these messages to the console along -with all the other messages. To split up these messages and save -the results of @code{\display@{STUFF@}}, redirect the output to -a file. - -@c TODO What happens under Windows? - -@example -lilypond file.ly >display.txt -@end example - - - -@node Controlling output -@section Controlling output - -@menu -* Extracting fragments of music:: -* Skipping corrected music:: -@end menu - -@node Extracting fragments of music -@subsection Extracting fragments of music - -It is possible to quote small fragments of a large score directly from -the output. This can be compared to clipping a piece of a paper score -with scissors. - -This is done by defining the measures that need to be cut out -separately. For example, including the following definition - - -@verbatim -\layout { - clip-regions - = #(list - (cons - (make-rhythmic-location 5 1 2) - (make-rhythmic-location 7 3 4))) -} -@end verbatim - -@noindent -will extract a fragment starting halfway the fifth measure, ending in -the seventh measure. The meaning of @code{5 1 2} is: after a 1/2 note -in measure 5, and @code{7 3 4} after 3 quarter notes in measure 7. - -More clip regions can be defined by adding more pairs of -rhythmic-locations to the list. - -In order to use this feature, LilyPond must be invoked with -@code{-dclip-systems}. The clips are output as EPS files, and are -converted to PDF and PNG if these formats are switched on as well. - -For more information on output formats, see @rprogram{Invoking lilypond}. - -@node Skipping corrected music -@subsection Skipping corrected music - - -@funindex skipTypesetting -@funindex showFirstLength -@funindex showLastLength - -When entering or copying music, usually only the music near the end (where -you -are adding notes) is interesting to view and correct. To speed up -this correction process, it is possible to skip typesetting of all but -the last few measures. This is achieved by putting - -@verbatim -showLastLength = R1*5 -\score { ... } -@end verbatim - -@noindent -in your source file. This will render only the last 5 measures -(assuming 4/4 time signature) of every @code{\score} in the input -file. For longer pieces, rendering only a small part is often an order -of magnitude quicker than rendering it completely. When working on the -beginning of a score you have already typeset (e.g. to add a new part), -the @code{showFirstLength} property may be useful as well. - -Skipping parts of a score can be controlled in a more fine-grained -fashion with the property @code{Score.skipTypesetting}. When it is -set, no typesetting is performed at all. - -This property is also used to control output to the MIDI file. Note that -it skips all events, including tempo and instrument changes. You have -been warned. - -@lilypond[quote,fragment,ragged-right,verbatim] -\relative c'' { - c8 d - \set Score.skipTypesetting = ##t - e e e e e e e e - \set Score.skipTypesetting = ##f - c d b bes a g c2 } -@end lilypond - -In polyphonic music, @code{Score.skipTypesetting} will affect all -voices and staves, saving even more time. - - - -@node MIDI output -@section MIDI output - -@cindex Sound -@cindex MIDI - -MIDI (Musical Instrument Digital Interface) is a standard for -connecting and controlling digital instruments. A MIDI file is a -series of notes in a number of tracks. It is not an actual -sound file; you need special software to translate between the -series of notes and actual sounds. - -Pieces of music can be converted to MIDI files, so you can listen to -what was entered. This is convenient for checking the music; octaves -that are off or accidentals that were mistyped stand out very much -when listening to the MIDI output. - -@c TODO Check this -The midi output allocates a channel for each staff, and one for global -settings. Therefore the midi file should not have more than 15 staves -(or 14 if you do not use drums). Other staves will remain silent. - -@menu -* Creating MIDI files:: -* MIDI block:: -* What goes into the MIDI output?:: -* Repeats in MIDI:: -* Controlling MIDI dynamics:: -* Percussion in MIDI:: -@end menu - -@node Creating MIDI files -@subsection Creating MIDI files - -To create a MIDI output file from a LilyPond input file, add a -@code{\midi} block to a score, for example, - -@example -\score @{ - @var{...music...} - \midi @{ @} -@} -@end example - -If there is a @code{\midi} block in a @code{\score} with no -@code{\layout} block, only MIDI output will be produced. When -notation is needed too, a @code{\layout} block must be also be -present. - -@example -\score @{ - @var{...music...} - \midi @{ @} - \layout @{ @} -@} -@end example - -Pitches, rhythms, ties, dynamics, and tempo changes are interpreted -and translated correctly to the MIDI output. Dynamic marks, -crescendi and decrescendi translate into MIDI volume levels. -Dynamic marks translate to a fixed fraction of the available MIDI -volume range. Crescendi and decrescendi make the volume vary -linearly between their two extremes. The effect of dynamic markings -on the MIDI output can be removed completely, see @ref{MIDI block}. - -The initial tempo and later tempo changes can be specified -with the @code{\tempo} command within the music notation. These -are reflected in tempo changes in the MIDI output. This command -will normally result in the metronome mark being printed, but this -can be suppressed, see @ref{Metronome marks}. An alternative way -of specifying the inital or overall MIDI tempo is described below, -see @ref{MIDI block}. - -Due to some limitations on Windows, the default extension for -MIDI files on Windows is @code{.mid}. Other operating systems still -use the extension @code{.midi}. If a different extension is preferred, -insert the following line at the top-level of the input file, -before the start of any @code{\book}, @code{\bookpart} or @code{\score} blocks: - -@example -#(ly:set-option 'midi-extension "midi") -@end example - -The line above will set the default extension for MIDI files to -@code{.midi}. - -Alternatively, this option can also be supplied on the command line: - -@example -lilypond … -dmidi-extension=midi lilyFile.ly -@end example - - -@unnumberedsubsubsec Instrument names - -@cindex instrument names -@funindex Staff.midiInstrument - -The MIDI instrument to be used is specified by setting the -@code{Staff.midiInstrument} property to the instrument name. -The name should be chosen from the list in @ref{MIDI instruments}. - -@example -\new Staff @{ - \set Staff.midiInstrument = #"glockenspiel" - @var{...notes...} -@} -@end example - -@example -\new Staff \with @{midiInstrument = #"cello"@} @{ - @var{...notes...} -@} -@end example - -If the selected instrument does not exactly match an instrument from -the list of MIDI instruments, the Grand Piano (@code{"acoustic grand"}) -instrument is used. - - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{changing-midi-output-to-one-channel-per-voice.ly} - -@knownissues - -@c In 2.11 the following no longer seems to be a problem -td -@ignore -Unterminated (de)crescendos will not render properly in the midi file, -resulting in silent passages of music. The workaround is to explicitly -terminate the (de)crescendo. For example, - -@example -@{ a\< b c d\f @} -@end example - -@noindent -will not work properly but - -@example -@{ a\< b c d\!\f @} -@end example - -@noindent -will. -@end ignore - -Changes in the MIDI volume take place only on starting a note, so -crescendi and decrescendi cannot affect the volume of a -single note. - -Not all midi players correctly handle tempo changes in the midi -output. Players that are known to work include MS Windows Media -Player and @uref{http://@/timidity@/.sourceforge@/.net/,timidity}. - -@node MIDI block -@subsection MIDI block -@cindex MIDI block - -A @code{\midi} block must appear within a score block if MIDI output -is required. It is analogous to the layout block, but somewhat -simpler. Often, the @code{\midi} block is left empty, but it -can contain context rearrangements, new context definitions or code -to set the values of properties. For example, the following will -set the initial tempo exported to a MIDI file without causing a tempo -indication to be printed: - -@example -\score @{ - @var{...music...} - \midi @{ - \context @{ - \Score - tempoWholesPerMinute = #(ly:make-moment 72 4) - @} - @} -@} -@end example - -In this example the tempo is set to 72 quarter note -beats per minute. This kind of tempo specification cannot take -a dotted note length as an argument. If one is required, break -the dotted note into smaller units. For example, a tempo of 90 -dotted quarter notes per minute can be specified as 270 eighth -notes per minute: - -@example -tempoWholesPerMinute = #(ly:make-moment 270 8) -@end example - -@cindex MIDI context definitions - -Context definitions follow precisely the same syntax as those -within a @code{\layout} block. Translation modules for sound are -called performers. The contexts for MIDI output are defined in -@file{../ly/@/performer@/-init@/.ly}, -see @rlearning{Other sources of information}. -For example, to remove the effect of dynamics -from the MIDI output, insert the following lines in the -@code{\midi@{ @}} block. - -@example -\midi @{ - ... - \context @{ - \Voice - \remove "Dynamic_performer" - @} -@} -@end example - -MIDI output is created only when a @code{\midi} block is included -within a score block defined with a @code{\score} command. If it -is placed within an explicitly instantiated score context (i.e. -within a @code{\new Score} block) the file will fail. To solve -this, enclose the @code{\new Score} and the @code{\midi} commands -in a @code{\score} block. - -@example -\score @{ - \new Score @{ @dots{}notes@dots{} @} - \midi @{ @} -@} -@end example - -@node What goes into the MIDI output? -@subsection What goes into the MIDI output? - -@c TODO Check grace notes - timing is suspect? - -@unnumberedsubsubsec Supported in MIDI - -@cindex Pitches in MIDI -@cindex MIDI, Pitches -@cindex Quarter tones in MIDI -@cindex MIDI, quarter tones -@cindex Microtones in MIDI -@cindex MIDI, microtones -@cindex Chord names in MIDI -@cindex MIDI, chord names -@cindex Rhythms in MIDI -@cindex MIDI, Rhythms -@c TODO etc - -The following items of notation are reflected in the MIDI output: - -@itemize -@item Pitches -@item Microtones (See @ref{Accidentals}. Rendering needs a -player that supports pitch bend.) -@item Chords entered as chord names -@item Rhythms entered as note durations, including tuplets -@item Tremolos entered without @q{@code{:}[@var{number}]} -@item Ties -@item Dynamic marks -@item Crescendi, decrescendi over multiple notes -@item Tempo changes entered with a tempo marking -@item Lyrics -@end itemize - -@unnumberedsubsubsec Unsupported in MIDI - -@c TODO index as above - -The following items of notation have no effect on the MIDI output: - -@itemize -@item Rhythms entered as annotations, e.g. swing -@item Tempo changes entered as annotations with no tempo marking -@item Staccato and other articulations and ornamentations -@item Slurs and Phrasing slurs -@item Crescendi, decrescendi over a single note -@item Tremolos entered with @q{@code{:}[@var{number}]} -@item Figured bass -@item Microtonal chords -@end itemize - - -@node Repeats in MIDI -@subsection Repeats in MIDI - -@cindex repeats in MIDI -@funindex \unfoldRepeats - -With a few minor additions, all types of repeats can be represented -in the MIDI output. This is achieved by applying the -@code{\unfoldRepeats} music function. This function changes all -repeats to unfold repeats. - -@lilypond[quote,verbatim] -\unfoldRepeats { - \repeat tremolo 8 {c'32 e' } - \repeat percent 2 { c''8 d'' } - \repeat volta 2 {c'4 d' e' f'} - \alternative { - { g' a' a' g' } - {f' e' d' c' } - } -} -\bar "|." -@end lilypond - -When creating a score file using @code{\unfoldRepeats} for MIDI, -it is necessary to make two @code{\score} blocks: one for MIDI -(with unfolded repeats) and one for notation (with volta, tremolo, -and percent repeats). For example, - -@example -\score @{ - @var{..music..} - \layout @{ .. @} -@} -\score @{ - \unfoldRepeats @var{..music..} - \midi @{ .. @} -@} -@end example - -@node Controlling MIDI dynamics -@subsection Controlling MIDI dynamics - -MIDI dynamics are implemented by the Dynamic_performer which lives -by default in the Voice context. It is possible to control the -overall MIDI volume, the relative volume of dynamic markings and -the relative volume of different instruments. - -@unnumberedsubsubsec Dynamic marks - -Dynamic marks are translated to a fixed fraction of the available -MIDI volume range. The default fractions range from 0.25 for -@notation{ppppp} to 0.95 for @notation{fffff}. The set of dynamic -marks and the associated fractions can be seen in -@file{../scm/midi.scm}, see @rlearning{Other sources of information}. -This set of fractions may be changed or extended by providing a -function which takes a dynamic mark as its argument and returns the -required fraction, and setting -@code{Score.dynamicAbsoluteVolumeFunction} to this function. - -For example, if a @notation{rinforzando} dynamic marking, -@code{\rfz}, is required, this will not by default -have any effect on the MIDI volume, as this dynamic marking is not -included in the default set. Similarly, if a new dynamic marking -has been defined with @code{make-dynamic-script} that too will not -be included in the default set. The following example shows how the -MIDI volume for such dynamic markings might be added. The Scheme -function sets the fraction to 0.9 if a dynamic mark of rfz is -found, or calls the default function otherwise. - -@lilypond[verbatim,quote] -#(define (myDynamics dynamic) - (if (equal? dynamic "rfz") - 0.9 - (default-dynamic-absolute-volume dynamic))) - -\score { - \new Staff { - \set Staff.midiInstrument = #"cello" - \set Score.dynamicAbsoluteVolumeFunction = #myDynamics - \new Voice { - \relative c'' { - a\pp b c-\rfz - } - } - } - \layout {} - \midi {} -} -@end lilypond - -Alternatively, if the whole table of fractions needs to be -redefined, it would be better to use the -@notation{default-dynamic-absolute-volume} procedure in -@file{../scm/midi.scm} and the associated table as a model. -The final example in this section shows how this might be done. - -@unnumberedsubsubsec Overall MIDI volume - -The minimum and maximum overall volume of MIDI dynamic markings is -controlled by setting the properties @code{midiMinimumVolume} and -@code{midiMaximumVolume} at the @code{Score} level. These -properties have an effect only on dynamic marks, so if they -are to apply from the start of the score a dynamic mark must be -placed there. The fraction corresponding to each dynamic mark is -modified with this formula - -@example -midiMinimumVolume + (midiMaximumVolume - midiMinimumVolume) * fraction -@end example - -In the following example the dynamic range of the overall MIDI -volume is limited to the range 0.2 - 0.5. - -@lilypond[verbatim,quote] -\score { - << - \new Staff { - \key g \major - \time 2/2 - \set Staff.midiInstrument = #"flute" - \new Voice \relative c''' { - r2 g\mp g fis ~ - fis4 g8 fis e2 ~ - e4 d8 cis d2 - } - } - \new Staff { - \key g \major - \set Staff.midiInstrument = #"clarinet" - \new Voice \relative c'' { - b1\p a2. b8 a - g2. fis8 e - fis2 r - } - } - >> - \layout { } - \midi { - \context { - \Score - tempoWholesPerMinute = #(ly:make-moment 72 2) - midiMinimumVolume = #0.2 - midiMaximumVolume = #0.5 - } - } -} -@end lilypond - -@unnumberedsubsubsec Equalizing different instruments (i) - -If the minimum and maximum MIDI volume properties are set in -the @code{Staff} context the relative volumes of the MIDI -instruments can be controlled. This gives a basic instrument -equalizer, which can enhance the quality of the MIDI output -remarkably. - -In this example the volume of the clarinet is reduced relative -to the volume of the flute. There must be a dynamic -mark on the first note of each instrument for this to work -correctly. - -@lilypond[verbatim,quote] -\score { - << - \new Staff { - \key g \major - \time 2/2 - \set Staff.midiInstrument = #"flute" - \set Staff.midiMinimumVolume = #0.7 - \set Staff.midiMaximumVolume = #0.9 - \new Voice \relative c''' { - r2 g\mp g fis ~ - fis4 g8 fis e2 ~ - e4 d8 cis d2 - } - } - \new Staff { - \key g \major - \set Staff.midiInstrument = #"clarinet" - \set Staff.midiMinimumVolume = #0.3 - \set Staff.midiMaximumVolume = #0.6 - \new Voice \relative c'' { - b1\p a2. b8 a - g2. fis8 e - fis2 r - } - } - >> - \layout { } - \midi { - \context { - \Score - tempoWholesPerMinute = #(ly:make-moment 72 2) - } - } -} -@end lilypond - -@unnumberedsubsubsec Equalizing different instruments (ii) - -If the MIDI minimum and maximum volume properties are not set -LilyPond will, by default, apply a small degree of equalization -to a few instruments. The instruments and the equalization -applied are shown in the table @notation{instrument-equalizer-alist} -in @file{../scm/midi.scm}. - -This basic default equalizer can be replaced by setting -@code{instrumentEqualizer} in the @code{Score} context to a new -Scheme procedure which accepts a MIDI instrument name as its only -argument and returns a pair of fractions giving the minimum and -maximum volumes to be applied to that instrument. This replacement -is done in the same way as shown for resetting the -@code{dynamicAbsoluteVolumeFunction} at the start of this section. -The default equalizer, @notation{default-instrument-equalizer}, in -@file{../scm/midi.scm} shows how such a procedure might be written. - -The following example sets the relative flute and clarinet volumes -to the same values as the previous example. - -@lilypond[verbatim,quote] -#(define my-instrument-equalizer-alist '()) - -#(set! my-instrument-equalizer-alist - (append - '( - ("flute" . (0.7 . 0.9)) - ("clarinet" . (0.3 . 0.6))) - my-instrument-equalizer-alist)) - -#(define (my-instrument-equalizer s) - (let ((entry (assoc s my-instrument-equalizer-alist))) - (if entry - (cdr entry)))) - -\score { - << - \new Staff { - \key g \major - \time 2/2 - \set Score.instrumentEqualizer = #my-instrument-equalizer - \set Staff.midiInstrument = #"flute" - \new Voice \relative c''' { - r2 g\mp g fis ~ - fis4 g8 fis e2 ~ - e4 d8 cis d2 - } - } - \new Staff { - \key g \major - \set Staff.midiInstrument = #"clarinet" - \new Voice \relative c'' { - b1\p a2. b8 a - g2. fis8 e - fis2 r - } - } - >> - \layout { } - \midi { - \context { - \Score - tempoWholesPerMinute = #(ly:make-moment 72 2) - } - } -} -@end lilypond - -@ignore -@c Delete when satisfied this is adequately covered elsewhere -td - -@n ode Microtones in MIDI -@s ubsection Microtones in MIDI - -@cindex microtones in MIDI - -Microtones consisting of half sharps and half flats are exported -to the MIDI file and render correctly in MIDI players which support -pitch bending. See @ref{Note names in other languages}. Here is -an example showing all the half sharps and half flats. It can be -copied out and compiled to test microtones in your MIDI player. - -@lilypond[verbatim,quote] -\score { - \relative c' { - c cih cis cisih - d dih ees eeh - e eih f fih - fis fisih g gih - gis gisih a aih - bes beh b bih - } - \layout {} - \midi {} -} -@end lilypond -@end ignore - - -@node Percussion in MIDI -@subsection Percussion in MIDI - -Percussion instruments are generally notated in a @code{DrumStaff} -context and when notated in this way they are outputted correctly -to MIDI channel@tie{}10, but some pitched percussion instruments, -like the xylophone, marimba, vibraphone, timpani, etc., are -treated like @qq{normal} instruments and music for these instruments -should be entered in a normal @code{Staff} context, not a -@code{DrumStaff} context, to obtain the correct MIDI output. - -Some non-pitched percussion sounds included in the general MIDI -standard, like melodic tom, taiko drum, synth drum, etc., cannot -be reached via MIDI channel@tie{}10, so the notation for such -instruments should also be entered in a normal @code{Staff} -context, using suitable normal pitches. - -Many percussion instruments are not included in the general MIDI -standard, e.g. castanets. The easiest, although unsatisfactory, -method of producing some MIDI output when writing for such -instruments is to substitute the nearest sound from the standard -set. - -@c TODO Expand with examples, and any other issues - -@knownissues - -Because the general MIDI standard does not contain rim shots, the -sidestick is used for this purpose instead. - - diff --git a/Documentation/user/install.itely b/Documentation/user/install.itely deleted file mode 100644 index f5ddb4f05e..0000000000 --- a/Documentation/user/install.itely +++ /dev/null @@ -1,85 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond-program.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@ifclear INSTALL -@node Install -@chapter Install -@end ifclear - -There are two sets of releases for LilyPond: stable releases, and -unstable development releases. Stable versions have an even-numbered -@q{minor} version number (i.e. 2.8, 2.10, 2.12, etc). Development -versions have an odd-numbered @q{minor} version number (i.e. 2.7, 2.9, -2.11, etc). - -Building LilyPond is a very involved process, so we @strong{highly} -recommend using the precompiled binaries. - -@menu -* Precompiled binaries:: -* Compiling from source:: -@end menu - - -@node Precompiled binaries -@section Precompiled binaries - -@unnumberedsubsec Downloading - -Check out @uref{http://lilypond.org/web/install/} for up to date -information on binary packages for your platform. If your operating -system is not covered on that general page, please see the complete list -at @uref{http://download.linuxaudio.org/lilypond/binaries/} - -We currently create binaries for - -@example -darwin-ppc - MacOS X powerpc -darwin-x86 - MacOS X intel -freebsd-64 - FreeBSD 6.x, x86_64 -freebsd-x86 - FreeBSD 4.x, x86 -linux-64 - Any GNU/Linux distribution, x86_64 -linux-ppc - Any GNU/Linux distribution, powerpc -linux-x86 - Any GNU/Linux distribution, x86 -mingw - Windows x86 -@end example - -@knownissues - -If you have MacOS 10.3 or 10.4 and you would like to use Python -scripts such as @command{convert-ly} and @command{lilypond-book}, see -@ref{Setup for MacOS X,,,lilypond-program,Application Usage}. - -@ignore -You can also compile LilyPond directly from the source code. This -requires that you can read English, so this section is not -translated. If you really want to compile LilyPond, see -@iftex -@c DO NOT translate the following line at all. -@ref{Compiling from source,,,lilypond-program,Application Usage}. -@end iftex -@ifhtml -@c Please translate the following line (but not the .html file name) -the @uref{Compiling-from-source.html,documentation in English}. -@end ifhtml -@end ignore - -@c TRANSLATORS: -@c Please **do not** translate the file included below. Users -@c should not be compiling LilyPond themselves; if they really -@c want to do so, they should be able to read the English docs, -@c because they'll probably need to ask questions in English -@c on the -devel list. -gp -@c Instead, please uncomment and translate the paragraph above, -@c and remove all stuff (menu, nodes, contents) below this line. - - -@include compile.itely diff --git a/Documentation/user/introduction.itely b/Documentation/user/introduction.itely deleted file mode 100644 index b031f13ab3..0000000000 --- a/Documentation/user/introduction.itely +++ /dev/null @@ -1,1137 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond-learning.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Introduction -@chapter Introduction - -This chapter introduces readers to LilyPond and the -documentation. - -@menu -* Background:: -* About the documentation:: -@end menu - - -@node Background -@section Background - -This section covers the overall goals and architecture of -LilyPond. - -@menu -* Engraving:: -* Automated engraving:: -* What symbols to engrave?:: -* Music representation:: -* Example applications:: -@end menu - - -@node Engraving -@unnumberedsubsec Engraving - -@cindex engraving -@cindex typography, music -@cindex music typography -@cindex plate engraving -@cindex music engraving - -The art of music typography is called @emph{(plate) engraving}. -The term derives from the traditional process of music printing. -Just a few decades ago, sheet music was made by cutting and -stamping the music into a zinc or pewter plate in mirror image. -The plate would be inked, the depressions caused by the cutting -and stamping would hold ink. An image was formed by pressing -paper to the plate. The stamping and cutting was completely done -by hand. Making a correction was cumbersome, if possible at all, -so the engraving had to be perfect in one go. Engraving was a -highly specialized skill; a craftsman had to complete around five -years of training before earning the title of master engraver, and -another five years of experience were necessary to become truly -skilled. - -Nowadays, all newly printed music is produced with computers. -This has obvious advantages; prints are cheaper to make, and -editorial work can be delivered by email. Unfortunately, the -pervasive use of computers has also decreased the graphical -quality of scores. Computer printouts have a bland, mechanical -look, which makes them unpleasant to play from. - - -@c introduce illustrating aspects of engraving, font... -The images below illustrate the difference between traditional -engraving and typical computer output, and the third picture shows -how LilyPond mimics the traditional look. The left picture shows -a scan of a flat symbol from an edition published in 2000. The -center depicts a symbol from a hand-engraved Bärenreiter edition -of the same music. The left scan illustrates typical flaws of -computer print: the staff lines are thin, the weight of the flat -symbol matches the light lines and it has a straight layout with -sharp corners. By contrast, the Bärenreiter flat has a bold, -almost voluptuous rounded look. Our flat symbol is designed -after, among others, this one. It is rounded, and its weight -harmonizes with the thickness of our staff lines, which are also -much thicker than lines in the computer edition. - -@multitable @columnfractions .125 .25 .25 .25 .125 -@item @tab -@ifnotinfo -@iftex -@image{henle-flat-gray,,4cm} -@end iftex -@ifnottex -@image{henle-flat-gray,,,png} -@end ifnottex - -@tab -@iftex -@image{baer-flat-gray,,4cm} -@end iftex -@ifnottex -@image{baer-flat-gray,,,png} -@end ifnottex - -@tab -@iftex -@image{lily-flat-bw,,4cm} -@end iftex -@ifnottex -@image{lily-flat-bw,,,png} -@end ifnottex -@end ifnotinfo -@ifinfo -@image{lilypond/henle-flat-bw,,,,png} @image{lilypond/baer-flat-bw,,,,png} -@image{lilypond/lily-flat-bw,,,,png} -@end ifinfo - -@item @tab -Henle (2000) -@tab -Bärenreiter (1950) -@tab -LilyPond Feta font (2003) - -@end multitable - - -@cindex musical symbols -@cindex font -@cindex blackness -@cindex balance - -@c introduce illustrating aspects of engraving, spacing... -In spacing, the distribution of space should reflect the durations -between notes. However, many modern scores adhere to the -durations with mathematical precision, which leads to poor -results. In the next example a motive is printed twice: once -using exact mathematical spacing, and once with corrections. Can -you spot which fragment is which? - -@cindex optical spacing -@c file spacing-optical. -@c need to include it here, because we want two images. -@lilypond -\paper { - ragged-right = ##t - indent = #0.0 -} - -music = { - c'4 e''4 e'4 b'4 | - \stemDown - b'8[ e'' a' e''] - \stemNeutral - e'8[ e'8 e'8 e'8] -} - -\score -{ - \music - \layout { - \context { - \Staff - \override NoteSpacing #'stem-spacing-correction = #0.6 - } - } -} -@end lilypond - -@lilypond -\paper { - ragged-right = ##t - indent = #0.0 -} - -music = { - c'4 e''4 e'4 b'4 | - \stemDown - b'8[ e'' a' e''] - \stemNeutral - e'8[ e'8 e'8 e'8] -} -\score -{ - \music - \layout { - \context { - \Staff - \override NoteSpacing #'stem-spacing-correction = #0.0 - \override NoteSpacing #'same-direction-correction = #0.0 - \override StaffSpacing #'stem-spacing-correction = #0.0 - } - } -} -@end lilypond - -@cindex regular rhythms -@cindex regular spacing -@cindex spacing, regular - -Each bar in the fragment only uses notes that are played in a -constant rhythm. The spacing should reflect that. Unfortunately, -the eye deceives us a little; not only does it notice the distance -between note heads, it also takes into account the distance -between consecutive stems. As a result, the notes of an -up-stem/@/down-stem combination should be put farther apart, and -the notes of a down-stem/@/up-stem combination should be put -closer together, all depending on the combined vertical positions -of the notes. The upper two measures are printed with this -correction, the lower two measures without, forming -down-stem/@/up-stem clumps of notes. - - -Musicians are usually more absorbed with performing than with -studying the looks of a piece of music, so nitpicking about -typographical details may seem academical. But it is not. In -larger pieces with monotonous rhythms, spacing corrections lead to -subtle variations in the layout of every line, giving each one a -distinct visual signature. Without this signature all lines would -look the same, and they become like a labyrinth. If a musician -looks away once or has a lapse in concentration, the lines might -lose their place on the page. - -Similarly, the strong visual look of bold symbols on heavy staff -lines stands out better when the music is far away from the -reader, for example, if it is on a music stand. A careful -distribution of white space allows music to be set very tightly -without cluttering symbols together. The result minimizes the -number of page turns, which is a great advantage. - -This is a common characteristic of typography. Layout should be -pretty, not only for its own sake, but especially because it helps -the reader in her task. For performance material like sheet -music, this is of double importance: musicians have a limited -amount of attention. The less attention they need for reading, -the more they can focus on playing the music. In other words, -better typography translates to better performances. - -These examples demonstrate that music typography is an art that is -subtle and complex, and that producing it requires considerable -expertise, which musicians usually do not have. LilyPond is our -effort to bring the graphical excellence of hand-engraved music to -the computer age, and make it available to normal musicians. We -have tuned our algorithms, font-designs, and program settings to -produce prints that match the quality of the old editions we love -to see and love to play from. - - -@node Automated engraving -@unnumberedsubsec Automated engraving - -@cindex engraving, automated -@cindex automated engraving - -How do we go about implementing typography? If craftsmen need -over ten years to become true masters, how could we simple hackers -ever write a program to take over their jobs? - -The answer is: we cannot. Typography relies on human judgment of -appearance, so people cannot be replaced completely. However, -much of the dull work can be automated. If LilyPond solves most -of the common situations correctly, this will be a huge -improvement over existing software. The remaining cases can be -tuned by hand. Over the course of years, the software can be -refined to do more and more things automatically, so manual -overrides are less and less necessary. - -When we started, we wrote the LilyPond program entirely in the C++ -programming language; the program's functionality was set in stone -by the developers. That proved to be unsatisfactory for a number -of reasons: - -@itemize - -@item When LilyPond makes mistakes, users need to override -formatting decisions. Therefore, the user must have access to the -formatting engine. Hence, rules and settings cannot be fixed by -us at compile-time but must be accessible for users at run-time. - -@item Engraving is a matter of visual judgment, and therefore a -matter of taste. As knowledgeable as we are, users can disagree -with our personal decisions. Therefore, the definitions of -typographical style must also be accessible to the user. - -@item Finally, we continually refine the formatting algorithms, so -we need a flexible approach to rules. The C++ language forces a -certain method of grouping rules that do not match well with how -music notation works. - -@end itemize - -@cindex Scheme programming language - -These problems have been addressed by integrating an interpreter -for the Scheme programming language and rewriting parts of -LilyPond in Scheme. The current formatting architecture is built -around the notion of graphical objects, described by Scheme -variables and functions. This architecture encompasses formatting -rules, typographical style and individual formatting decisions. -The user has direct access to most of these controls. - -Scheme variables control layout decisions. For example, many -graphical objects have a direction variable that encodes the -choice between up and down (or left and right). Here you see two -chords, with accents and arpeggios. In the first chord, the -graphical objects have all directions down (or left). The second -chord has all directions up (right). - -@lilypond[quote,ragged-right] -\new Score \with { - \override SpacingSpanner #'spacing-increment = #3 - \override TimeSignature #'transparent = ##t -} \relative c' { - \stemDown 4_>-\arpeggio - \override Arpeggio #'direction = #RIGHT - \stemUp 4^>-\arpeggio -} -@end lilypond - -@cindex score formatting -@cindex formatting a score -@cindex formatting rules - -@noindent -The process of formatting a score consists of reading and writing -the variables of graphical objects. Some variables have a preset -value. For example, the thickness of many lines -- a -characteristic of typographical style -- is a variable with a -preset value. You are free to alter this value, giving your score -a different typographical impression. - -@lilypond[quote,ragged-right] -fragment = { - \clef bass f8 as8 - c'4-~ c'16 as g f e16 g bes c' des'4 -} -<< - \new Staff \fragment - \new Staff \with { - \override Beam #'thickness = #0.3 - \override Stem #'thickness = #0.5 - \override Bar #'thickness = #3.6 - \override Tie #'thickness = #2.2 - \override StaffSymbol #'thickness = #3.0 - \override Tie #'extra-offset = #'(0 . 0.3) - } - \fragment ->> -@end lilypond - -Formatting rules are also preset variables: each object has -variables containing procedures. These procedures perform the -actual formatting, and by substituting different ones, we can -change the appearance of objects. In the following example, the -rule which note head objects are used to produce their symbol is -changed during the music fragment. - -@lilypond[quote,ragged-right] -#(set-global-staff-size 30) - -#(define (mc-squared grob orig current) - (let* ((interfaces (ly:grob-interfaces grob)) - (pos (ly:grob-property grob 'staff-position))) - (if (memq 'note-head-interface interfaces) - (begin - (ly:grob-set-property! grob 'stencil - (grob-interpret-markup grob - (make-lower-markup 0.5 - (case pos - ((-5) "m") - ((-3) "c ") - ((-2) (make-smaller-markup (make-bold-markup "2"))) - (else "bla"))))))))) - -\new Voice \relative c' { - \stemUp - \set autoBeaming = ##f - \time 2/4 - 4 - \once \override NoteHead #'stencil = #ly:note-head::brew-ez-stencil - \once \override NoteHead #'font-size = #-7 - \once \override NoteHead #'font-family = #'sans - \once \override NoteHead #'font-series = #'bold - 4 - \once \override NoteHead #'style = #'cross - 4 - \applyOutput #'Voice #mc-squared - 4 - << - { d8[ es-( fis^^ g] fis2-) } - \repeat unfold 5 { \applyOutput #'Voice #mc-squared s8 } - >> -} -@end lilypond - - -@node What symbols to engrave? -@unnumberedsubsec What symbols to engrave? - -@cindex engraving -@cindex typography -@cindex engraver -@cindex plug-in - -The formatting process decides where to place symbols. However, -this can only be done once it is decided @emph{what} symbols -should be printed, in other words what notation to use. - -Common music notation is a system of recording music that has -evolved over the past 1000 years. The form that is now in common -use dates from the early renaissance. Although the basic form -(i.e., note heads on a 5-line staff) has not changed, the details -still evolve to express the innovations of contemporary notation. -Hence, it encompasses some 500 years of music. Its applications -range from monophonic melodies to monstrous counterpoints for -large orchestras. - -How can we get a grip on such a many-headed beast, and force it -into the confines of a computer program? Our solution is to break -up the problem of notation (as opposed to engraving, i.e., -typography) into digestible and programmable chunks: every type of -symbol is handled by a separate module, a so-called plug-in. Each -plug-in is completely modular and independent, so each can be -developed and improved separately. Such plug-ins are called -@code{engraver}s, by analogy with craftsmen who translate musical -ideas to graphic symbols. - -In the following example, we see how we start out with a plug-in -for note heads, the @code{Note_heads_engraver}. - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" - -\score { - \topVoice - \layout { - \context { - \Voice - \remove "Stem_engraver" - \remove "Phrasing_slur_engraver" - \remove "Slur_engraver" - \remove "Script_engraver" - \remove "Beam_engraver" - \remove "Auto_beam_engraver" - } - \context { - \Staff - \remove "Accidental_engraver" - \remove "Key_engraver" - \remove "Clef_engraver" - \remove "Bar_engraver" - \remove "Time_signature_engraver" - \remove "Staff_symbol_engraver" - \consists "Pitch_squash_engraver" - } - } -} -@end lilypond - -@noindent -Then a @code{Staff_symbol_engraver} adds the staff - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" - -\score { - \topVoice - \layout { - \context { - \Voice - \remove "Stem_engraver" - \remove "Phrasing_slur_engraver" - \remove "Slur_engraver" - \remove "Script_engraver" - \remove "Beam_engraver" - \remove "Auto_beam_engraver" - } - \context { - \Staff - \remove "Accidental_engraver" - \remove "Key_engraver" - \remove "Clef_engraver" - \remove "Bar_engraver" - \consists "Pitch_squash_engraver" - \remove "Time_signature_engraver" - } - } -} -@end lilypond - -@noindent -the @code{Clef_engraver} defines a reference point for the staff - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" - -\score { - \topVoice - \layout { - \context { - \Voice - \remove "Stem_engraver" - \remove "Phrasing_slur_engraver" - \remove "Slur_engraver" - \remove "Script_engraver" - \remove "Beam_engraver" - \remove "Auto_beam_engraver" - } - \context { - \Staff - \remove "Accidental_engraver" - \remove "Key_engraver" - \remove "Bar_engraver" - \remove "Time_signature_engraver" - } - } -} -@end lilypond - -@noindent -and the @code{Stem_engraver} adds stems. - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" - -\score { - \topVoice - \layout { - \context { - \Voice - \remove "Phrasing_slur_engraver" - \remove "Slur_engraver" - \remove "Script_engraver" - \remove "Beam_engraver" - \remove "Auto_beam_engraver" - } - \context { - \Staff - \remove "Accidental_engraver" - \remove "Key_engraver" - \remove "Bar_engraver" - \remove "Time_signature_engraver" - } - } -} -@end lilypond - -@noindent -The @code{Stem_engraver} is notified of any note head coming -along. Every time one (or more, for a chord) note head is seen, a -stem object is created and connected to the note head. By adding -engravers for beams, slurs, accents, accidentals, bar lines, time -signature, and key signature, we get a complete piece of notation. - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" -\score { \topVoice } -@end lilypond - -@cindex polyphony -@cindex engraving multiple voices -@cindex contexts - -This system works well for monophonic music, but what about -polyphony? In polyphonic notation, many voices can share a staff. - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" -\new Staff << \topVoice \\ \botVoice >> -@end lilypond - -In this situation, the accidentals and staff are shared, but the -stems, slurs, beams, etc., are private to each voice. Hence, -engravers should be grouped. The engravers for note heads, stems, -slurs, etc., go into a group called @q{Voice context,} while the -engravers for key, accidental, bar, etc., go into a group called -@q{Staff context.} In the case of polyphony, a single Staff -context contains more than one Voice context. Similarly, multiple -Staff contexts can be put into a single Score context. The Score -context is the top level notation context. - - -@seealso -Internals Reference: @rinternals{Contexts}. - - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" -\score { - << - \new Staff << \topVoice \\ \botVoice >> - \new Staff << \pah \\ \hoom >> - >> -} -@end lilypond - - -@node Music representation -@unnumberedsubsec Music representation - -@cindex syntax -@cindex recursive structures - -Ideally, the input format for any high-level formatting system is -an abstract description of the content. In this case, that would -be the music itself. This poses a formidable problem: how can we -define what music really is? Instead of trying to find an answer, -we have reversed the question. We write a program capable of -producing sheet music, and adjust the format to be as lean as -possible. When the format can no longer be trimmed down, by -definition we are left with content itself. Our program serves as -a formal definition of a music document. - -The syntax is also the user-interface for LilyPond, hence it is -easy to type: - -@example -@{ - c'4 d'8 -@} -@end example - -@noindent -to create a quarter note C1 (middle C) and an eighth note D1 (D -above middle C). - -@lilypond[quote] -{ - c'4 d'8 -} -@end lilypond - -On a microscopic scale, such syntax is easy to use. On a larger -scale, syntax also needs structure. How else can you enter -complex pieces like symphonies and operas? The structure is -formed by the concept of music expressions: by combining small -fragments of music into larger ones, more complex music can be -expressed. For example - -@lilypond[quote,verbatim,fragment,relative=1] -f4 -@end lilypond - -@noindent -Simultaneous notes can be constructed by enclosing them with -@code{<<} and @code{>>}: - -@example -<> -@end example - -@lilypond[quote,fragment,relative=1] -\new Voice { <> } -@end lilypond - -@noindent -This expression is put in sequence by enclosing it in curly braces -@code{@{@tie{}@dots{}@tie{}@}}: - -@example -@{ f4 <> @} -@end example - -@lilypond[quote,relative=1,fragment] -{ f4 <> } -@end lilypond - -@noindent -The above is also an expression, and so it may be combined again -with another simultaneous expression (a half note) using -@code{<<}, @code{\\}, and @code{>>}: - -@example -<< g2 \\ @{ f4 <> @} >> -@end example - -@lilypond[quote,fragment,relative=2] -\new Voice { << g2 \\ { f4 <> } >> } -@end lilypond - -Such recursive structures can be specified neatly and formally in -a context-free grammar. The parsing code is also generated from -this grammar. In other words, the syntax of LilyPond is clearly -and unambiguously defined. - -User-interfaces and syntax are what people see and deal with most. -They are partly a matter of taste, and also subject of much -discussion. Although discussions on taste do have their merit, -they are not very productive. In the larger picture of LilyPond, -the importance of input syntax is small: inventing neat syntax is -easy, while writing decent formatting code is much harder. This -is also illustrated by the line-counts for the respective -components: parsing and representation take up less than 10% of -the source code. - - -@node Example applications -@unnumberedsubsec Example applications - -@cindex simple examples -@cindex examples, simple - -We have written LilyPond as an experiment of how to condense the -art of music engraving into a computer program. Thanks to all -that hard work, the program can now be used to perform useful -tasks. The simplest application is printing notes. - -@lilypond[quote,relative=1] -{ - \time 2/4 - c4 c g'4 g a4 a g2 -} -@end lilypond - -@noindent -By adding chord names and lyrics we obtain a lead sheet. - -@lilypond[quote,ragged-right] -<< - \chords { c2 c f2 c } - \new Staff - \relative c' { - \time 2/4 - c4 c g' g a a g2 - } - \addlyrics { twin -- kle twin -- kle lit -- tle star } ->> -@end lilypond - -Polyphonic notation and piano music can also be printed. The -following example combines some more exotic constructs. - -@lilypond[quote] -\header { - title = "Screech and boink" - subtitle = "Random complex notation" - composer = "Han-Wen Nienhuys" -} - -\score { - \context PianoStaff << - \new Staff = "up" { - \time 4/8 - \key c \minor - << { - \revert Stem #'direction - \change Staff = down - \set subdivideBeams = ##t - g16.[ - \change Staff = up - c'''32 - \change Staff = down - g32 - \change Staff = up - c'''32 - \change Staff = down - g16] - \change Staff = up - \stemUp - \set followVoice = ##t - c'''32([ b''16 a''16 gis''16 g''32)] - } \\ { - s4 \times 2/3 { d'16[ f' g'] } as'32[ b''32 e'' d''] - } \\ { - s4 \autoBeamOff d''8.. f''32 - } \\ { - s4 es''4 - } >> - } - - \new Staff = "down" { - \clef bass - \key c \minor - \set subdivideBeams = ##f - \override Stem #'french-beaming = ##t - \override Beam #'thickness = #0.3 - \override Stem #'thickness = #4.0 - g'16[ b16 fis16 g16] - << \makeClusters { - as16 - - - } \\ { - \override Staff.Arpeggio #'arpeggio-direction =#down - 4\arpeggio - } - >> } - >> - \midi { - \context { - \Score - tempoWholesPerMinute = #(ly:make-moment 60 8) - } - } - \layout { - \context { - \Staff - \consists Horizontal_bracket_engraver - } - } -} -@end lilypond - -The fragments shown above have all been written by hand, but that -is not a requirement. Since the formatting engine is mostly -automatic, it can serve as an output means for other programs that -manipulate music. For example, it can also be used to convert -databases of musical fragments to images for use on websites and -multimedia presentations. - -This manual also shows an application: the input format is text, -and can therefore be easily embedded in other text-based formats -such as @LaTeX{}, HTML, or in the case of this manual, Texinfo. -By means of a special program, the input fragments can be replaced -by music images in the resulting PDF or HTML output files. This -makes it easy to mix music and text in documents. - - -@node About the documentation -@section About the documentation - -This section explains the different portions of the documentation. - -@cindex Learning Manual -@cindex Music Glossary -@cindex Notation Reference -@cindex Application Usage -@cindex Snippet List -@cindex Internals Reference - -@c leave these lines wrapping around. It's some texinfo 4.12 thing. -gp -@c This is actually a limitation of texi2html. -jm -@menu -* About the Learning Manual:: this manual introduces LilyPond, giving in-depth explanations of how to create notation. -* About the Music Glossary:: this manual explains musical terms and gives translations of terms in other languages. -* About the Notation Reference:: this manual is the main portion of the documentation. It provides detailed information about creating notation. This book assumes that the reader knows basic material covered in the Learning Manual and is familiar with the English musical terms presented in the Musical Glossary. -* About the Application Usage:: this discusses the actual programs and operating system-specific issues. -* About the Snippet List:: this is a collection of short LilyPond examples. -* About the Internals Reference:: this document gives reference information about LilyPond's internal structures, which is required for constructing tweaks. -* Other documentation:: there are a few other portions of the documentation, such as News items and the mailist archives. -@end menu - - -@node About the Learning Manual -@unnumberedsubsec About the Learning Manual - -@cindex Learning Manual - -This book explains how to begin learning LilyPond, as well as -explaining some key concepts in easy terms. You should read these -chapters in a linear fashion. - -There is a paragraph @strong{See also} at the end of each section, -which contains cross-references to other sections: you should not -follow these cross-references at first reading; when you have read all -of the Learning Manual, you may want to read some sections again and -follow cross-references for further reading. - -@itemize - -@item -@ref{Introduction}: explains the background and overall goal of -LilyPond. - -@item -@ref{Tutorial}: gives a gentle introduction to typesetting music. -First time users should start here. - -@item -@ref{Fundamental concepts}: explains some general concepts about -the LilyPond file format. If you are not certain where to place a -command, read this chapter! - -@item -@ref{Tweaking output}: shows how to change the default engraving -that LilyPond produces. - -@item -@ref{Working on LilyPond projects}: discusses practical uses of -LilyPond and how to avoid some common problems. Read this before -undertaking large projects! - -@end itemize - -The Learning Manual also contains appendices which are not part of the -recommended linear reading. They may be useful for later -viewing: - -@itemize - -@item -@ref{Templates}: shows ready-made templates of LilyPond pieces. -Just cut and paste a template into a file, add notes, and you're -done! - -@item -@ref{Scheme tutorial}: presents a short introduction to Scheme, -the programming language that music functions use. This is -material for advanced tweaks; many users never touch Scheme at -all. - -@end itemize - - -@node About the Music Glossary -@unnumberedsubsec About the Music Glossary - -@cindex Music Glossary -@cindex idiom -@cindex jargon -@cindex terminology -@cindex foreign languages -@cindex language - -@rglosnamed{Top,Music glossary} -this explains musical terms, and includes translations to various -languages. If you are not familiar with music notation or music -terminology (especially if you are a non-native English speaker), -it is highly advisable to consult the glossary. - - -@node About the Notation Reference -@unnumberedsubsec About the Notation Reference - -@cindex Notation Reference -@cindex appendices -@cindex reference charts -@cindex charts, reference - -This book explains all the LilyPond commands which produce -notation. It assumes that readers are familiar with the concepts -in the Learning Manual. - -@itemize - -@item -@ruser{Musical notation}: -discusses topics grouped by notation construct. This section -gives details about basic notation that will be useful in almost -any notation project. - -@item -@ruser{Specialist notation}: -discusses topics grouped by notation construct. This section -gives details about special notation that will only be useful for -particular instrument (or vocal) groups. - -@item -@ruser{General input and output}: -discusses general information about LilyPond input files and -controlling output. - -@item -@ruser{Spacing issues}: -discusses issues which affect the global output, such as selecting -paper size or specifying page breaks. - -@item -@ruser{Changing defaults}: -explains how to tweak LilyPond to produce exactly the notation you -want. - -@item -@ruser{Interfaces for programmers}: -explains how to create music functions with scheme. - -@end itemize - -The Notation Reference also contains appendices with useful -reference charts. - -@itemize - -@item -@ruser{Literature list}: -contains a set of useful reference books for those who wish to -know more on notation and engraving. - -@item -@ruser{Notation manual tables}: -are a set of tables showing the chord names, MIDI instruments, a -list of color names, and the Feta font. - -@item -@ruser{Cheat sheet}: -is a handy reference of the most common LilyPond commands. - -@item -@ruser{LilyPond command index}: -an index of all LilyPond @code{\commands}. - -@item -@ruser{LilyPond index}: -a complete index. - -@end itemize - - -@node About the Application Usage -@unnumberedsubsec About the Application Usage - -@cindex Application Usage -@cindex integrating LilyPond with other programs - -This book explains how to execute the programs and how to integrate -LilyPond notation with other programs. - -@itemize - -@item -@rprogram{Install}: -explains how to install LilyPond, including compilation if -desired. - -@item -@rprogram{Setup}: -describes how to configure your computer for optimum LilyPond -usage, such as using special environments for certain text -editors. - -@item -@rprogram{Running LilyPond}: -shows how to run LilyPond and its helper programs. In addition, -this section explains how to upgrade input files from previous -versions of LilyPond. - -@item -@rprogram{LilyPond-book}: -explains the details behind creating documents with in-line music -examples, like this manual. - -@item -@rprogram{Converting from other formats}: -explains how to run the conversion programs. These programs are -supplied with the LilyPond package, and convert a variety of music -formats to the @code{.ly} format. - -@end itemize - - -@node About the Snippet List -@unnumberedsubsec About the Snippet List - -@cindex snippets -@cindex LSR -@cindex Snippet List -@cindex LilyPond Snippet Repository - -@rlsrnamed{Top,LilyPond Snippet List}: this shows a -selected set of LilyPond snippets from the -@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository} -(LSR). All the snippets are in the public domain. - -Please note that this document is not an exact subset of LSR. LSR -is running a stable LilyPond version, so any snippet which -demonstrates new features of a development version must be added -separately. These are stored in @file{input/new/} in the LilyPond -source tree. - -The list of snippets for each subsection of the Notation Reference are -also linked from the @strong{See also} portion. - - -@node About the Internals Reference -@unnumberedsubsec About the Internals Reference - -@cindex Internals Reference - -@rinternalsnamed{Top,Internals Reference}: this is a set -of heavily cross linked HTML pages which document the nitty-gritty -details of each and every LilyPond class, object, and function. -It is produced directly from the formatting definitions in the -source code. - -Almost all formatting functionality that is used internally is -available directly to the user. For example, most variables that -control thickness values, distances, etc., can be changed in input -files. There are a huge number of formatting options, and all of -them are described in this document. Each section of the Notation -Reference has a @b{See also} subsection, which refers to the -generated documentation. In the HTML document, these subsections -have clickable links. - - -@node Other documentation -@unnumberedsubsec Other documentation - -There are a number of other sources of information which may be -very valuable. - -@itemize - -@item -@ifhtml -@ifset bigpage -@uref{../topdocs/NEWS.html,News}: -@end ifset -@ifclear bigpage -@uref{../../topdocs/NEWS.html,News}: -@end ifclear -@end ifhtml -@ifnothtml -News: -@end ifnothtml -this is a summary of important changes -and new features in LilyPond since the previous version. - -@item @uref{http://lists.gnu.org/archive/html/lilypond-user/, The -lilypond-user mailist archives}: this is a collection of previous -emails sent to the user list. Many questions have been asked -multiple times; there is a very good chance that if you have a -question, the answer might be found in these archives. - -@item @uref{http://lists.gnu.org/archive/html/lilypond-devel/, The -lilypond-devel mailist archives}: this is a collection of previous -emails sent to the developer's list. The discussion here is more -technical; if you have an advanced question about lilypond -internals, the answer might be in these archives. - -@item Embedded music fragments: in all HTML documents that have -music fragments embedded, the exact LilyPond input that was used -to produce that image can be viewed by clicking the image. - -@item Init files: the location of the documentation files that are -mentioned here can vary from system to system. On occasion, this -manual refers to initialization and example files. Throughout this -manual, we refer to input files relative to the top-directory of the -source archive. For example, @file{input/@/lsr/@/dirname/@/bla@/.ly} -may refer to the file -@file{lilypond@/2.x.y/@/input/@/lsr/@/dirname/@/bla@/.ly}. On binary -packages for the UNIX platform, the documentation and examples can -typically be found somewhere below -@file{/usr/@/share/@/doc/@/lilypond/}. Initialization files, for -example @file{scm/@/lily@/.scm}, or @file{ly/@/engraver@/-init@/.ly}, -are usually found in the directory @file{/usr/@/share/@/lilypond/}. -For more details, see @ref{Other sources of information}. - -@end itemize - diff --git a/Documentation/user/keyboards.itely b/Documentation/user/keyboards.itely deleted file mode 100644 index c0513c61ac..0000000000 --- a/Documentation/user/keyboards.itely +++ /dev/null @@ -1,651 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Keyboard and other multi-staff instruments -@section Keyboard and other multi-staff instruments - -@lilypondfile[quote]{keyboard-headword.ly} - -This section discusses several aspects of music notation that are -unique to keyboard instruments and other instruments notated on -many staves, such as harps and vibraphones. For the purposes of -this section this entire group of multi-staff instruments is called -@qq{keyboards} for short, even though some of them do not have a -keyboard. - -@menu -* Common notation for keyboards:: -* Piano:: -* Accordion:: -* Harp:: -@end menu - -@node Common notation for keyboards -@subsection Common notation for keyboards - -This section discusses notation issues that may arise for most -keyboard instruments. - -@menu -* References for keyboards:: -* Changing staff manually:: -* Changing staff automatically:: -* Staff-change lines:: -* Cross-staff stems:: -@end menu - -@node References for keyboards -@unnumberedsubsubsec References for keyboards - -@cindex piano staves -@cindex staves, piano -@cindex staves, keyboard instruments -@cindex staves, keyed instruments -@cindex keyboard instrument staves -@cindex keyed instrument staves - -@funindex PianoStaff - -Keyboard instruments are usually notated with Piano staves. These -are two or more normal staves coupled with a brace. The same -notation is also used for other keyed instruments. -Organ music is normally written with two staves inside a -@code{PianoStaff} group and third, normal staff for the pedals. - -The staves in keyboard music are largely independent, but -sometimes voices can cross between the two staves. This -section discusses notation techniques particular to keyboard -music. - -Several common issues in keyboard music are covered elsewhere: - -@itemize - -@item Keyboard music usually contains multiple voices and the -number of voices may change regularly; this is described in -@ref{Collision resolution}. - -@item Keyboard music can be written in parallel, as described in -@ref{Writing music in parallel}. - -@item Fingerings are indicated with @ref{Fingering instructions}. - -@item Organ pedal indications are inserted as articulations, see -@ref{List of articulations}. - -@item Vertical grid lines can be shown with @ref{Grid lines}. - -@item Keyboard music often contains @notation{Laissez vibrer} ties -as well as ties on arpeggios and tremolos, described in -@ref{Ties}. - -@item Placing arpeggios across multiple voices and staves is -covered in @ref{Arpeggio}. - -@item Tremolo marks are described in @ref{Tremolo repeats}. - -@item Several of the tweaks that can occur in keyboard music are -demonstrated in @rlearning{Real music example}. - -@item Hidden notes can be used to produce ties that cross voices, -as shown in @rlearning{Other uses for tweaks}. - -@end itemize - -@c @snippets -@c @lilypondfile[verbatim,lilyquote,texidoc,doctitle] -@c {forcing-visibility-of-systems-with-multi-bar-rests-when-using-\RemoveEmptyStaffContext.ly} -@c http://lsr.dsi.unimi.it/LSR/Item?u=1&id=312 - -@seealso -Learning Manual: -@rlearning{Real music example}, -@rlearning{Other uses for tweaks}. - -Notation Reference: -@ref{Grouping staves}, -@ref{Instrument names}, -@ref{Collision resolution}, -@ref{Writing music in parallel}, -@ref{Fingering instructions}, -@ref{List of articulations}, -@ref{Grid lines}, -@ref{Ties}, -@ref{Arpeggio}, -@ref{Tremolo repeats}. - -Internals Reference: -@rinternals{PianoStaff}. - -Snippets: -@rlsr{Keyboards}. - - -@knownissues - -@cindex keyboard music, centering dynamics -@cindex dynamics, centered in keyboard music -@cindex piano music, centering dynamics -@cindex centered dynamics in piano music -@funindex staff-padding - -Dynamics are not automatically centered, but workarounds do exist. One -option is the @q{piano centered dynamics} template under -@rlearning{Piano templates}; another option is to increase the -@code{staff-padding} of dynamics as discussed in @rlearning{Moving -objects}. - -@node Changing staff manually -@unnumberedsubsubsec Changing staff manually - -@cindex changing staff manually -@cindex manual staff changes -@cindex staff changes, manual -@cindex cross-staff notes -@cindex notes, cross-staff -@cindex cross-staff beams -@cindex beams, cross-staff - -@funindex \change -@funindex change - -Voices can be switched between staves manually, using the command - -@example -\change Staff = @var{staffname} -@end example - -@noindent -The string @var{staffname} is the name of the staff. It switches -the current voice from its current staff to the staff called -@var{staffname}. Typical values for @var{staffname} are -@code{"up"} and @code{"down"}, or @code{"RH"} and @code{"LH"}. - -The staff to which the voice is being switched must exist at the -time of the switch. If necessary, staves should be @qq{kept alive}, -see @ref{Keeping contexts alive}. - -Cross-staff notes are beamed automatically: - -@lilypond[verbatim,quote] -\new PianoStaff << - \new Staff = "up" { - 8 - \change Staff = "down" - g8 fis g - \change Staff = "up" - 8 - \change Staff = "down" - e8 dis e - \change Staff = "up" - } - \new Staff = "down" { - \clef bass - % keep staff alive - s1 - } ->> -@end lilypond - -If the beaming needs to be tweaked, make any changes to the stem -directions first. The beam positions are then measured from the -center of the staff that is closest to the beam. For a simple -example of beam tweaking, see @rlearning{Fixing overlapping -notation}. - - -@seealso -Learning Manual: -@rlearning{Fixing overlapping notation}. - -Notation Reference: -@ref{Stems}, -@ref{Automatic beams}, -@ref{Keeping contexts alive}. - -Snippets: -@rlsr{Keyboards}. - -Internals Reference: -@rinternals{Beam}, -@rinternals{ContextChange}. - - -@node Changing staff automatically -@unnumberedsubsubsec Changing staff automatically - -@cindex changing staff automatically -@cindex automatic staff changes -@cindex staff changes, automatic - -@funindex \autochange -@funindex autochange -@funindex PianoStaff - -Voices can be made to switch automatically between the top and the -bottom staff. The syntax for this is - -@example -\autochange @dots{}@var{music}@dots{} -@end example - -@noindent -This will create two staves inside the current staff group -(usually a @code{PianoStaff}), called @code{"up"} and -@code{"down"}. The lower staff will be in the bass clef by default. -The autochanger switches on the basis of the pitch (middle@tie{}C is the -turning point), and it looks ahead skipping over rests to switch -in advance. - -@lilypond[quote,verbatim] -\new PianoStaff { - \autochange { - g4 a b c' - d'4 r a g - } -} -@end lilypond - -@cindex relative music and autochange -@cindex autochange and relative music - -@funindex \relative -@funindex relative - -A @code{\relative} section that is outside of @code{\autochange} -has no effect on the pitches of the music, so if necessary, put -@code{\relative} inside @code{\autochange}. - -If additional control is needed over the individual staves, they -can be created manually with the names @code{"up"} and -@code{"down"}. The @code{\autochange} command will then switch -its voice between the existing staves. - -@warning{If staves are created manually, they @emph{must} be named -@code{"up"} and @code{"down"}.} - -For example, staves must be created manually in order to place a -key signature in the lower staff: - -@lilypond[quote,verbatim] -\new PianoStaff << - \new Staff = "up" { - \new Voice = "melOne" { - \key g \major - \autochange \relative c' { - g8 b a c b d c e - d8 r fis, g a2 - } - } - } - \new Staff = "down" { - \key g \major - \clef bass - } ->> -@end lilypond - - -@seealso -Notation Reference: -@ref{Changing staff manually}. - -Snippets: -@rlsr{Keyboards}. - -Internals Reference: -@rinternals{AutoChangeMusic}. - - -@knownissues - -@cindex chords, splitting across staves with \autochange - -The staff switches may not end up in optimal places. For high -quality output, staff switches should be specified manually. - -Chords will not be split across the staves; they will be assigned to a -staff based on the first note named in the chord construct. - -@node Staff-change lines -@unnumberedsubsubsec Staff-change lines - -@cindex staff-change line -@cindex staff change line -@cindex cross-staff line -@cindex cross staff line -@cindex line, staff-change follower -@cindex line, cross-staff -@cindex line, staff-change -@cindex follow voice -@cindex voice, following -@cindex staff switching -@cindex cross-staff - -@funindex followVoice -@funindex \showStaffSwitch -@funindex showStaffSwitch -@funindex \hideStaffSwitch -@funindex hideStaffSwitch - -Whenever a voice switches to another staff, a line connecting the -notes can be printed automatically: - -@lilypond[quote,verbatim,relative=1] -\new PianoStaff << - \new Staff = "one" { - \showStaffSwitch - c1 - \change Staff = "two" - b2 a - } - \new Staff = "two" { - \clef bass - s1*2 - } ->> -@end lilypond - - -@predefined -@code{\showStaffSwitch}, -@code{\hideStaffSwitch}. -@endpredefined - - -@seealso -Snippets: -@rlsr{Keyboards}. - -Internals Reference: -@rinternals{Note_head_line_engraver}, -@rinternals{VoiceFollower}. - - -@node Cross-staff stems -@unnumberedsubsubsec Cross-staff stems - -@cindex cross-staff notes -@cindex cross staff notes -@cindex notes, cross-staff -@cindex cross-staff stems -@cindex cross staff stems -@cindex stems, cross-staff -@cindex chords, cross-staff -@cindex cross-staff chords -@cindex cross staff chords - -@funindex Stem -@funindex cross-staff -@funindex length -@funindex flag-style - -Chords that cross staves may be produced: - -@lilypond[verbatim,quote] -\new PianoStaff << - \new Staff { - \relative c' { - f8 e4 d8 d f e4 - } - } - \new Staff { - \relative c' { - << { - \clef bass - % stems may overlap the other staff - \override Stem #'cross-staff = ##t - % extend the stems to reach other other staff - \override Stem #'length = #12 - % do not print extra flags - \override Stem #'flag-style = #'no-flag - % prevent beaming as needed - a8 g4 f8 f bes\noBeam g4 - } - \\ - { - f,2 bes4 c - } >> - } - } ->> -@end lilypond - -@snippets -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{indicating-cross-staff-chords-with-arpeggio-bracket.ly} - - -@seealso -Snippets: -@rlsr{Keyboards}. - -Internals Reference: -@rinternals{Stem}. - - -@node Piano -@subsection Piano - -This section discusses notation issues that relate most directly to the -piano. - -@menu -* Piano pedals:: -@end menu - -@node Piano pedals -@unnumberedsubsubsec Piano pedals - -@cindex piano pedals -@cindex pedals, piano -@cindex sustain pedal -@cindex pedal, sustain -@cindex sostenuto pedal -@cindex pedal, sostenuto -@cindex una corda -@cindex tre corde -@cindex sos. -@cindex U.C. - -@funindex \sustainOn -@funindex sustainOn -@funindex \sustainOff -@funindex sustainOff -@funindex \sostenutoOn -@funindex sostenutoOn -@funindex \sostenutoOff -@funindex sostenutoOff -@funindex \unaCorda -@funindex unaCorda -@funindex \treCorde -@funindex treCorde - -Pianos generally have three pedals that alter the way sound is -produced: @notation{sustain}, @notation{sostenuto} -(@notation{sos.}), and @notation{una corda} (@notation{U.C.}). -Sustain pedals are also found on vibraphones and celestas. - -@lilypond[quote,verbatim,relative=2] -c4\sustainOn d e g -1\sustainOff -c4\sostenutoOn e g c, -1\sostenutoOff -c4\unaCorda d e g -1\treCorde -@end lilypond - -@cindex pedal indication styles -@cindex pedal indication, text -@cindex pedal indication, bracket -@cindex pedal indication, mixed -@cindex pedal sustain style -@cindex sustain pedal style - -@funindex pedalSustainStyle -@funindex mixed -@funindex bracket -@funindex text - -There are three styles of pedal indications: text, bracket, and mixed. -The sustain pedal and the una corda pedal use the text style by default -while the sostenuto pedal uses mixed by default. - -@lilypond[quote,verbatim,relative=2] -c4\sustainOn g c2\sustainOff -\set Staff.pedalSustainStyle = #'mixed -c4\sustainOn g c d -d\sustainOff\sustainOn g, c2\sustainOff -\set Staff.pedalSustainStyle = #'bracket -c4\sustainOn g c d -d\sustainOff\sustainOn g, c2 -\bar "|." -@end lilypond - -The placement of the pedal commands matches the physical movement of the -sustain pedal during piano performance. Pedalling to the final bar line -is indicated by omitting the final pedal up command. - - -@seealso -Notation Reference: -@ref{Ties}. - -Snippets: -@rlsr{Keyboards}. - -Internals Reference: -@rinternals{SustainPedal}, -@rinternals{SustainPedalLineSpanner}, -@rinternals{SustainEvent}, -@rinternals{SostenutoPedal}, -@rinternals{SostenutoPedalLineSpanner}, -@rinternals{SostenutoEvent}, -@rinternals{UnaCordaPedal}, -@rinternals{UnaCordaPedalLineSpanner}, -@rinternals{UnaCordaEvent}, -@rinternals{PianoPedalBracket}, -@rinternals{Piano_pedal_engraver}. - - -@node Accordion -@subsection Accordion - -@cindex accordion - -This section discusses notation that is unique to the accordion. - -@menu -* Discant symbols:: -@end menu - -@node Discant symbols -@unnumberedsubsubsec Discant symbols - -@cindex accordion discant symbols -@cindex discant symbols, accordion -@cindex accordion shifts -@cindex accordion shift symbols - -Accordions are often built with more than one set of reeds that may be -in unison with, an octave above, or an octave below the written pitch. -Each accordion maker has different names for the @notation{shifts} that -select the various reed combinations, such as @notation{oboe}, -@notation{musette}, or @notation{bandonium}, so a system of symbols has -come into use to simplify the performance instructions. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{accordion-discant-symbols.ly} - - -@seealso -Snippets: -@rlsr{Keyboards}. - - -@node Harp -@subsection Harp - -This section discusses notation issues that are unique to the harp. - -@menu -* References for harps:: -* Harp pedals:: -@end menu - -@node References for harps -@unnumberedsubsubsec References for harps -@cindex harps -@cindex bisbiglando - -Some common characteristics of harp music are covered elsewhere: - -@itemize - -@item The glissando is the most characterisic harp technique, -@ref{Glissando}. - -@item A @notation{bisbigliando} is written as a tremelo @ref{Tremolo -repeats} - -@item Natural harmonics are covered under @ref{Harmonics}. - -@item For directional arpeggios and non-arpeggios, see @ref{Arpeggio}. - -@end itemize - -@seealso -Notation Reference: -@ref{Tremolo repeats} -@ref{Glissando} -@ref{Arpeggio} -@ref{Harmonics} - -@node Harp pedals -@unnumberedsubsubsec Harp pedals - -@cindex harp pedals -@cindex harp pedal diagrams -@cindex pedals, harp -@cindex pedal diagrams, harp - -Harps have seven strings per octave that may be sounded at the natural, -flattened, or sharpened pitch. In lever harps, each string is adjusted -individually, but in pedal harps every string with the same pitch name -is controlled by a single pedal. From the player's left to right, the -pedals are D, C, and B on the left and E, F, G, and A on the right. -The position of the pedals may be indicated with text marks: - -@lilypond[quote,verbatim,relative=2] -\textLengthOn -cis1_\markup \concat \vcenter { [D \flat C \sharp B|E \sharp F \sharp G A \flat] } -c!1_\markup \concat \vcenter {[ C \natural ]} -@end lilypond - -or pedal diagrams: - -@lilypond[quote,verbatim,relative=2] -\textLengthOn -cis1_\markup { \harp-pedal #"^v-|vv-^" } -c!1_\markup { \harp-pedal #"^o--|vv-^" } -@end lilypond - -The @code{\harp-pedal} command accepts a string of characters, where -@code{^} is the highest pedal position (flattened pitch), @code{-} is -the middle pedal postion (natural pitch), @code{v} is the lowest pedal -position (sharpened pitch), and @code{|} is the divider. A prefixed -@code{o} will circle the following pedal symbol. - -@seealso -Notation Reference: -@ref{Text scripts} -@ref{Instrument Specific Markup} diff --git a/Documentation/user/latex-example.latex b/Documentation/user/latex-example.latex deleted file mode 100644 index da9c12b871..0000000000 --- a/Documentation/user/latex-example.latex +++ /dev/null @@ -1,46 +0,0 @@ -\documentclass[a4paper]{article} - -%\def\preLilyPondExample{}} -%\def\postLilyPondExample{} - - -\begin{document} - -\begin{lilypond} -\relative { c' d e f g a b c } -\end{lilypond} - - -\begin[fragment]{lilypond} -c d e -\end{lilypond} - - -% show interaction of margins lilypond+verses - -% outdated -% generate standard lilypond titles -\input titledefs.tex -\def\preLilyPondExample{\def\mustmakelilypondtitle{}} - -\begin{lilypond} -\header { - title = "Title" - subtitle = "Subtitle" - subsubtitle = "Subsubtitle" - opus = "Opus 1" - piece = "Piece" - composer = "Composer" - enteredby = "JCN" - instrument = "instrument" -} -\layout { linewidth = -1. } -\relative c'' { a b c d } -\end{lilypond} - -\begin{enumerate} -\item Vers one. aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa -\item Vers two. bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb -\end{enumerate} - -\end{document} diff --git a/Documentation/user/latex-lilypond-example.latex b/Documentation/user/latex-lilypond-example.latex deleted file mode 100644 index a8b799badb..0000000000 --- a/Documentation/user/latex-lilypond-example.latex +++ /dev/null @@ -1,183 +0,0 @@ -\documentclass[a4paper, 12pt]{article} -% keep \documentclass on 1st line for lilypond-book auto-detection - -% -% This is way too long and hairy -- -% -% - - - - -%\def\preLilyPondExample{} -%\def\postLilyPondExample{} -%\usepackage{graphics} -%\usepackage{landscape} - -\begin{document} -%uncomment this to try twocolumn mode -%\twocolumn - - -\section{LilyPond-book + LaTeX} - -This is an examplefile for mixing LilyPond and Latex. It is also -used to test lilypond-book. View the source to see how it is done. - -A simple scale: - -\begin{lilypond} -\score{ - \relative c'{c d e f g a b c} -} -\end{lilypond} - -LilyPond-book search for the \verb|\score| command when it decides -if the code is only a fragment. Thus, in the following code, you have -to use \verb|fragment| option, because the comment confuses lilypond-book. - -\begin[fragment]{lilypond} -c d e % \score -\end{lilypond} - -There is also a shorthand version \verb|\lilypond[fragment]{c' e' g'}|: - -\lilypond[fragment]{c' e' g'} - -that is the same as writing -\begin{verbatim} -\begin[fragment]{lilypond} -c' e' g' -\end{lilypond} -\end{verbatim} - -This C major -%%\begin[staffsize=11\pt,fragment]{lilypond} -\begin[11pt,fragment]{lilypond} -\context Voice <> -\end{lilypond} -and C minor -\lilypond[fragment,11pt]{\context Voice <>} chords are floating inside the text. - -\subsection{verb and verbatim} - -As you see, the begin/end verbatim command inside -does not confuse lilypond-book: - -\verb|\begin[fragment]{lilypond}c d e\end{lilypond}| - -Neither does a verbatim inside verb: - -\verb|\begin{verbatim}\begin[fragment]{lilypond}c d e\end{lilypond}\end{verbatim}| - -or verb inside verbatim: - -\begin{verbatim} -\verb|\begin[fragment]{lilypond}c d e\end{lilypond}| -\end{verbatim} - -But this is just to stress \verb|lilypond-book|. What you need is: - -\verb|\lilypond[fragment]{c' d' e'}| - -and - -\begin{verbatim} -\begin{lilypond} -c d e -\end{lilypond} -\end{verbatim} - -\subsection{The 'verbatim' and 'intertext' option} -This shows the verbatim option: -\begin[fragment,verbatim, intertext="gives this music:"]{lilypond} -c' d' e' -\end{lilypond} - -\subsection{LaTeX comments} -This is a line with lilypond code -after the comment char % \lilypond{\context Voice <>} -% \lilypond{\context Voice <>} - -If you do not see any music from the heading 'LaTeX comments' and until -this line, then lilypond-book is handling latex comments pretty well :-) - -\subsection{To float or not to float} -This music -\begin[fragment]{lilypond} -c' e' -\end{lilypond} -should be floating inside the text by using the \verb|eps| options. - -This music - -\begin[fragment]{lilypond} -c' e' -\end{lilypond} - -has also the \verb|eps| options, but is not floating because there -are an emptry line before and after the lilypond block. That is -correct behaviour because it follows La\TeX{} convention that an -empty line signals a new paragraph. The \verb|eps| option -is not necessary when you want the music in a paragraph on its own. - -\subsection{More examples} - -Itemize environment: -\begin{itemize} -\item -\lilypond[11pt,fragment]{ c'} do -\item -\lilypond[11pt,fragment]{d'} re -\item -\lilypond[11pt,fragment]{e'} mi -\item -\lilypond[11pt,fragment]{f'} fa -\item -\lilypond[11pt,fragment]{g'} sol -\end{itemize} - -Tables\footnote{ and footnote: -\lilypond[11pt,fragment]{c' e' g'} }: -\marginpar{ Yes, even as marginpar -\lilypond[11pt,fragment]{c' d' e'} } - -\begin{tabular}{|l|l|r|} -\hline -\em Notes & \em Name \\ -\hline -\lilypond[11pt,fragment,filename="cdur"]{\context Voice <>} & major \\ -\lilypond[11pt,fragment]{\context Voice <>} & minor \\ -\lilypond[11pt,fragment]{\context Voice <>} & diminished \\ -\lilypond[11pt,fragment]{\context Voice <>} & augmented \\ -\hline -\end{tabular} - -\pagebreak - -Testing of spacing. The next music is surrounded by an empty line. -text text text text text text text text text text text text -text text text text text text text text text text text text - -\begin{lilypond} -\score{ \relative c'{ c d e f g a b c} } -\end{lilypond} - -text text text text text text text text text text text text -text text text text text text text text text text text text -text text text text text text text text text text text text - -Next has no empty lines. -text text text text text text text text text text text text -text text text text text text text text text text text text -text text text text text text text text text text text text -\begin{lilypond} -\score{ \relative c'{ c d e f g a b c} } -\end{lilypond} -text text text text text text text text text text text text -text text text text text text text text text text text text - -%% need to use an -I ../../../input/test to find the file -%% \lilypondfile{tie.ly} - -\end{document} diff --git a/Documentation/user/lily-flat-bw.png b/Documentation/user/lily-flat-bw.png deleted file mode 100644 index 09ce34e7c5..0000000000 Binary files a/Documentation/user/lily-flat-bw.png and /dev/null differ diff --git a/Documentation/user/lilypond-book.itely b/Documentation/user/lilypond-book.itely deleted file mode 100644 index 9d166bb43d..0000000000 --- a/Documentation/user/lilypond-book.itely +++ /dev/null @@ -1,1046 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond-program.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Note: keep this node named so that `info lilypond-book' brings you here. -@node LilyPond-book -@chapter @command{lilypond-book}: Integrating text and music - -If you want to add pictures of music to a document, you can simply do it -the way you would do with other types of pictures. The pictures are -created separately, yielding PostScript output or PNG images, and those -are included into a @LaTeX{} or HTML document. - -@command{lilypond-book} provides a way to automate this process: This -program extracts snippets of music from your document, runs -@command{lilypond} on them, and outputs the document with pictures -substituted for the music. The line width and font size definitions for -the music are adjusted to match the layout of your document. - -This is a separate program from @command{lilypond} itself, and is run -on the command line; for more information, see @ref{Command-line -usage}. If you have MacOS 10.3 or 10.4 and you have trouble running -@code{lilypond-book}, see @ref{Setup for MacOS X}. - -This procedure may be applied to @LaTeX{}, HTML, Texinfo or DocBook -documents. - -@cindex texinfo -@cindex latex -@cindex texinfo -@cindex texi -@cindex html -@cindex docbook -@cindex documents, adding music to -@cindex HTML, music in -@cindex Texinfo, music in -@cindex DocBook, music in -@cindex @LaTeX{}, music in - -@menu -* An example of a musicological document:: -* Integrating music and text:: -* Music fragment options:: -* Invoking lilypond-book:: -* Filename extensions:: -* Alternate methods of mixing text and music:: -@end menu - - -@node An example of a musicological document -@section An example of a musicological document - -@cindex musicology -Some texts contain music examples. These texts are musicological -treatises, songbooks, or manuals like this. Such texts can be made by -hand, simply by importing a PostScript figure into the word processor. -However, there is an automated procedure to reduce the amount of work -involved in HTML, @LaTeX{}, Texinfo and DocBook documents. - -A script called @code{lilypond-book} will extract the music fragments, -format them, and put back the resulting notation. Here we show a small -example for use with @LaTeX{}. The example also contains explanatory -text, so we will not comment on it further. - -@subheading Input - -@quotation -@verbatim -\documentclass[a4paper]{article} - -\begin{document} - -Documents for \verb+lilypond-book+ may freely mix music and text. -For example, - -\begin{lilypond} -\relative c' { - c2 g'2 \times 2/3 { f8 e d } c'2 g4 -} -\end{lilypond} - -Options are put in brackets. - -\begin[fragment,quote,staffsize=26,verbatim]{lilypond} - c'4 f16 -\end{lilypond} - -Larger examples can be put into a separate file, and introduced with -\verb+\lilypondfile+. - -\lilypondfile[quote,noindent]{screech-boink.ly} - -(If needed, replace screech-boink.ly by any .ly file you put in the same -directory as this file.) - -\end{document} -@end verbatim -@end quotation - -@subheading Processing - -Save the code above to a file called @file{lilybook.lytex}, then in a -terminal run - -@c keep space after @version{} so TeX doesn't choke -@example -lilypond-book --output=out --pdf lilybook.lytex -@emph{lilypond-book (GNU LilyPond) @version{} } -@emph{Reading lilybook.lytex...} -@emph{..lots of stuff deleted..} -@emph{Compiling lilybook.tex...} -cd out -pdflatex lilybook -@emph{..lots of stuff deleted..} -xpdf lilybook -@emph{(replace @command{xpdf} by your favorite PDF viewer)} -@end example - -Running @command{lilypond-book} and @command{latex} creates a lot of -temporary files, which would clutter up the working directory. To -remedy this, use the @code{--output=@var{dir}} option. It will create -the files in a separate subdirectory @file{dir}. - -Finally the result of the @LaTeX{} example shown above.@footnote{This -tutorial is processed with Texinfo, so the example gives slightly -different results in layout.} This finishes the tutorial section. - -@page - -@subheading Output - -Documents for @command{lilypond-book} may freely mix music and text. -For example, - -@lilypond -\relative c' { - c2 g'2 \times 2/3 { f8 e d } c'2 g4 -} -@end lilypond - -Options are put in brackets. - -@lilypond[fragment,quote,staffsize=26,verbatim] -c'4 f16 -@end lilypond - -Larger examples can be put into a separate file, and introduced with -@code{\lilypondfile}. - -@lilypondfile[quote,noindent]{screech-boink.ly} - - -@page - -@node Integrating music and text -@section Integrating music and text - -Here we explain how to integrate LilyPond with various output formats. - -@menu -* LaTeX:: -* Texinfo:: -* HTML:: -* DocBook:: -@end menu - -@node LaTeX -@subsection @LaTeX{} - -@LaTeX{} is the de-facto standard for publishing layouts in the exact -sciences. It is built on top of the @TeX{} typesetting engine, -providing the best typography available anywhere. - -See -@uref{http://@/www@/.ctan@/.org/@/tex@/-archive/@/info/@/lshort/@/english/, -@emph{The Not So Short Introduction to @LaTeX{}}} for an overview on how -to use @LaTeX{}. - -Music is entered using - -@example -\begin[options,go,here]@{lilypond@} - YOUR LILYPOND CODE -\end@{lilypond@} -@end example - -@noindent -or - -@example -\lilypondfile[options,go,here]@{@var{filename}@} -@end example - -@noindent -or - -@example -\lilypond@{ YOUR LILYPOND CODE @} -@end example - -Additionally, @code{\lilypondversion} displays the current version -of lilypond. -Running @command{lilypond-book} yields a file that can be further -processed with @LaTeX{}. - -We show some examples here. The @code{lilypond} environment - -@example -\begin[quote,fragment,staffsize=26]@{lilypond@} - c' d' e' f' g'2 g'2 -\end@{lilypond@} -@end example - -@noindent -produces - -@lilypond[quote,fragment,staffsize=26] -c' d' e' f' g'2 g'2 -@end lilypond - -The short version - -@example -\lilypond[quote,fragment,staffsize=11]@{@} -@end example - -@noindent -produces - -@lilypond[quote,fragment,staffsize=11]{} - -@noindent -Currently, you cannot include @code{@{} or @code{@}} within -@code{\lilypond@{@}}, so this command is only useful with the -@code{fragment} option. - -The default line width of the music will be adjusted by examining the -commands in the document preamble, the part of the document before -@code{\begin@{document@}}. The @command{lilypond-book} command sends -these to @LaTeX{} to find out how wide the text is. The line width for -the music fragments is then adjusted to the text width. Note that this -heuristic algorithm can fail easily; in such cases it is necessary to -use the @code{line-width} music fragment option. - -@cindex titling and lilypond-book -@cindex \header in @LaTeX{} documents - -Each snippet will call the following macros if they have been defined by -the user: - -@itemize @bullet -@item @code{\preLilyPondExample} called before the music, - -@item @code{\postLilyPondExample} called after the music, - -@item @code{\betweenLilyPondSystem[1]} is called between systems if -@code{lilypond-book} has split the snippet into several PostScript -files. It must be defined as taking one parameter and will be -passed the number of files already included in this snippet. -The default is to simply insert a @code{\linebreak}. -@end itemize - -@ignore -Broken stuff. :( - -@cindex Latex, feta symbols -@cindex fetachar - -To include feta symbols (such as flat, segno, etc) in a LaTeX -document, use @code{\input@{titledefs@}} - -@example -\documentclass[a4paper]@{article@} - -\input@{titledefs@} - -\begin@{document@} - -\fetachar\fetasharp - -\end@{document@} -@end example - -The font symbol names are defined in the file feta20.tex; to find -the location of this file, use the command - -@example -kpsewhich feta20.tex -@end example - -@end ignore - -@snippets - -Sometimes it is useful to display music elements (such as ties and slurs) -as if they continued after the end of the fragment. This can be done by -breaking the staff and suppressing inclusion of the rest of the LilyPond -output. - -In @LaTeX{}, define @code{\betweenLilyPondSystem} in such a way that -inclusion of other systems is terminated once the required number of -systems are included. Since @code{\betweenLilyPondSystem} is first -called @emph{after} the first system, including only the first system -is trivial. - -@example -\def\betweenLilyPondSystem#1@{\endinput@} - -\begin[fragment]@{lilypond@} - c'1\( e'( c'~ \break c' d) e f\) -\end@{lilypond@} -@end example - -If a greater number of systems is requested, a @TeX{} conditional must -be used before the @code{\endinput}. In this example, replace @q{2} by -the number of systems you want in the output, - -@example -\def\betweenLilyPondSystem#1@{ - \ifnum##1<2\else\endinput\fi -@} -@end example - -Remember that the definition of @code{\betweenLilyPondSystem} is -effective until @TeX{} quits the current group (such as the @LaTeX{} -environment) or is overridden by another definition (which is, in -most cases, for the rest of the document). To reset your -definition, write - -@example -\let\betweenLilyPondSystem\undefined -@end example - -@noindent -in your @LaTeX{} source. - -This may be simplified by defining a @TeX{} macro - -@example -\def\onlyFirstNSystems#1@{ - \def\betweenLilyPondSystem##1@{\ifnum##1<#1\else\endinput\fi@} -@} -@end example - -@noindent -and then saying only how many systems you want before each fragment, - -@example -\onlyFirstNSystems@{3@} -\begin@{lilypond@}...\end@{lilypond@} -\onlyFirstNSystems@{1@} -\begin@{lilypond@}...\end@{lilypond@} -@end example - - -@seealso -There are specific @command{lilypond-book} command line options and -other details to know when processing @LaTeX{} documents, see -@ref{Invoking lilypond-book}. - - -@node Texinfo -@subsection Texinfo - -Texinfo is the standard format for documentation of the GNU project. An -example of a Texinfo document is this manual. The HTML, PDF, and Info -versions of the manual are made from the Texinfo document. - -In the input file, music is specified with - -@example -@@lilypond[options,go,here] - YOUR LILYPOND CODE -@@end lilypond -@end example - -@noindent -or - -@example -@@lilypond[options,go,here]@{ YOUR LILYPOND CODE @} -@end example - -@noindent -or - -@example -@@lilypondfile[options,go,here]@{@var{filename}@} -@end example - -Additionally, @code{@@lilypondversion} displays the current version -of lilypond. - -When @command{lilypond-book} is run on it, this results in a Texinfo -file (with extension @file{.texi}) containing @code{@@image} tags for -HTML, Info and printed output. @command{lilypond-book} generates images -of the music in EPS and PDF formats for use in the printed output, and -in PNG format for use in HTML and Info output. - -We show two simple examples here. A @code{lilypond} environment - -@example -@@lilypond[fragment] -c' d' e' f' g'2 g' -@@end lilypond -@end example - -@noindent -produces - -@lilypond[fragment] -c' d' e' f' g'2 g' -@end lilypond - -The short version - -@example -@@lilypond[fragment,staffsize=11]@{@} -@end example - -@noindent -produces - -@lilypond[fragment,staffsize=11]{} - -Contrary to @LaTeX{}, @code{@@lilypond@{...@}} does not generate an -in-line image. It always gets a paragraph of its own. - - -@node HTML -@subsection HTML - -Music is entered using - -@example - -\key c \minor c4 es g2 - -@end example -@noindent -@command{lilypond-book} then produces an HTML file with appropriate image -tags for the music fragments: - -@lilypond[fragment,relative=2] -\key c \minor c4 es g2 -@end lilypond - -For inline pictures, use @code{}, where the options -are separated by a colon from the music, for example - -@example -Some music in a line of text. -@end example - - -To include separate files, say - -@example -@var{filename} -@end example - -Additionally, @code{} displays the current version -of lilypond. - - -@cindex titling in HTML -@cindex preview image -@cindex thumbnail - -@node DocBook -@subsection DocBook - -For inserting LilyPond snippets it is good to keep the conformity of our -DocBook document, thus allowing us to use DocBook editors, validation -etc. So we don't use custom tags, only specify a convention based on the -standard DocBook elements. - -@subheading Common conventions - -For inserting all type of snippets we use the @code{mediaobject} and -@code{inlinemediaobject} element, so our snippets can be formatted -inline or not inline. The snippet formatting options are always -provided in the @code{role} property of the innermost element (see in -next sections). Tags are chosen to allow DocBook editors format the -content gracefully. The DocBook files to be processed with -@command{lilypond-book} should have the extension @file{.lyxml}. - -@subheading Including a LilyPond file - -This is the most simple case. We must use the @file{.ly} extension for -the included file, and insert it as a standard @code{imageobject}, with -the following structure: - -@example - - - - - -@end example - -Note that you can use @code{mediaobject} or @code{inlinemediaobject} -as the outermost element as you wish. - -@subheading Including LilyPond code - -Including LilyPond code is possible by using a @code{programlisting}, -where the language is set to @code{lilypond} with the following -structure: - -@example - - - -\context Staff \with @{ - \remove Time_signature_engraver - \remove Clef_engraver@} - @{ c4( fis) @} - - - -@end example - -As you can see, the outermost element is a @code{mediaobject} or -@code{inlinemediaobject}, and there is a @code{textobject} containing -the @code{programlisting} inside. - -@subheading Processing the DocBook document - -Running @command{lilypond-book} on our @file{.lyxml} file will create a -valid DocBook document to be further processed with @file{.xml} -extension. If you use -@uref{http://@/dblatex@/.sourceforge@/.net@/,dblatex}, it will create a -PDF file from this document automatically. For HTML (HTML Help, -JavaHelp etc.) generation you can use the official DocBook XSL -stylesheets, however, it is possible that you have to make some -customization for it. - - -@node Music fragment options -@section Music fragment options - -In the following, a @q{LilyPond command} refers to any command described -in the previous sections which is handled by @command{lilypond-book} to -produce a music snippet. For simplicity, LilyPond commands are only -shown in @LaTeX{} syntax. - -Note that the option string is parsed from left to right; if an option -occurs multiple times, the last one is taken. - -The following options are available for LilyPond commands: - -@table @code -@item staffsize=@var{ht} -Set staff size to @var{ht}, which is measured in points. - -@item ragged-right -Produce ragged-right lines with natural spacing, i.e., -@code{ragged-right = ##t} is added to the LilyPond snippet. This is the -default for the @code{\lilypond@{@}} command if no @code{line-width} -option is present. It is also the default for the @code{lilypond} -environment if the @code{fragment} option is set, and no line width is -explicitly specified. - -@item noragged-right -For single-line snippets, allow the staff length to be stretched to -equal that of the line width, i.e., @code{ragged-right = ##f} is -added to the LilyPond snippet. - -@item line-width -@itemx line-width=@var{size}\@var{unit} -Set line width to @var{size}, using @var{unit} as units. @var{unit} is -one of the following strings: @code{cm}, @code{mm}, @code{in}, or -@code{pt}. This option affects LilyPond output (this is, the staff -length of the music snippet), not the text layout. - -If used without an argument, set line width to a default value (as -computed with a heuristic algorithm). - -If no @code{line-width} option is given, @command{lilypond-book} tries to -guess a default for @code{lilypond} environments which don't use the -@code{ragged-right} option. - -@item notime -Do not print the time signature, and turns off the timing (time signature, -bar lines) in the score. - -@item fragment -Make @command{lilypond-book} add some boilerplate code so that you can -simply enter, say, - -@example -c'4 -@end example - -@noindent -without @code{\layout}, @code{\score}, etc. - -@item nofragment -Do not add additional code to complete LilyPond code in music snippets. -Since this is the default, @code{nofragment} is redundant normally. - -@item indent=@var{size}\@var{unit} -Set indentation of the first music system to @var{size}, using -@var{unit} as units. @var{unit} is one of the following strings: -@code{cm}, @code{mm}, @code{in}, or @code{pt}. This option affects -LilyPond, not the text layout. - -@item noindent -Set indentation of the first music system to zero. This option affects -LilyPond, not the text layout. Since no indentation is the default, -@code{noindent} is redundant normally. - -@item quote -Reduce line length of a music snippet by @math{2*0.4}@dmn{in} and put -the output into a quotation block. The value @q{0.4@dmn{in}} can be -controlled with the @code{exampleindent} option. - -@item exampleindent -Set the amount by which the @code{quote} option indents a music snippet. - -@item relative -@itemx relative=@var{n} -Use relative octave mode. By default, notes are specified relative to -middle@tie{}C. The optional integer argument specifies the octave of -the starting note, where the default @code{1} is middle C. -@code{relative} option only works when @code{fragment} option is set, -so @code{fragment} is automatically implied by @code{relative}, -regardless of the presence of any @code{(no)fragment} option in the -source. -@end table - -LilyPond also uses @command{lilypond-book} to produce its own -documentation. To do that, some more obscure music fragment options are -available. - -@table @code -@item verbatim -The argument of a LilyPond command is copied to the output file and -enclosed in a verbatim block, followed by any text given with the -@code{intertext} option (not implemented yet); then the actual music is -displayed. This option does not work well with @code{\lilypond@{@}} if -it is part of a paragraph. - -If @code{verbatim} is used in a @code{lilypondfile} command, it is -possible to enclose verbatim only a part of the source file. If the -source file contain a comment containing @samp{begin verbatim} (without -quotes), quoting the source in the verbatim block will start after the -last occurrence of such a comment; similarly, quoting the source verbatim -will stop just before the first occurrence of a comment containing -@samp{end verbatim}, if there is any. In the following source file -example, the music will be interpreted in relative mode, but the -verbatim quote will not show the @code{relative} block, i.e. - -@example -\relative c' @{ % begin verbatim - c4 e2 g4 - f2 e % end verbatim -@} -@end example - -@noindent -will be printed with a verbatim block like - -@example - c4 e2 g4 - f2 e -@end example - -@noindent -If you would like to translate comments and variable names in verbatim -output but not in the sources, you may set the environment variable -@code{LYDOC_LOCALEDIR} to a directory path; the directory should -contain a tree of @file{.mo} message catalogs with @code{lilypond-doc} -as a domain. - -@item addversion -(Only for Texinfo output.) Prepend line @code{\version -@@w@{"@@version@{@}"@}} to @code{verbatim} output. - -@item texidoc -(Only for Texinfo output.) If @command{lilypond} is called with the -@option{--header=@/texidoc} option, and the file to be processed is -called @file{foo@/.ly}, it creates a file @file{foo@/.texidoc} if there -is a @code{texidoc} field in the @code{\header}. The @code{texidoc} -option makes @command{lilypond-book} include such files, adding its -contents as a documentation block right before the music snippet. - -Assuming the file @file{foo@/.ly} contains - -@example -\header @{ - texidoc = "This file demonstrates a single note." -@} -@{ c'4 @} -@end example - -@noindent -and we have this in our Texinfo document @file{test.texinfo} - -@example -@@lilypondfile[texidoc]@{foo.ly@} -@end example - -@noindent -the following command line gives the expected result - -@example -lilypond-book --pdf --process="lilypond \ - -dbackend=eps --header=texidoc" test.texinfo -@end example - -Most LilyPond test documents (in the @file{input} directory of the -distribution) are small @file{.ly} files which look exactly like this. - -For localization purpose, if the Texinfo document contains -@code{@@documentlanguage @var{LANG}} and @file{foo@/.ly} header -contains a @code{texidoc@var{LANG}} field, and if @command{lilypond} -is called with @option{--header=@/texidoc@var{LANG}}, then -@file{foo@/.texidoc@var{LANG}} will be included instead of -@file{foo@/.texidoc}. - -@item lilyquote -(Only for Texinfo output.) This option is similar to quote, but only -the music snippet (and the optional verbatim block implied by -@code{verbatim} option) is put into a quotation block. This option is -useful if you want to @code{quote} the music snippet but not the -@code{texidoc} documentation block. - -@item doctitle -(Only for Texinfo output.) This option works similarly to -@code{texidoc} option: if @command{lilypond} is called with the -@option{--header=@/doctitle} option, and the file to be processed is -called @file{foo@/.ly} and contains a @code{doctitle} field in the -@code{\header}, it creates a file @file{foo@/.doctitle}. When -@code{doctitle} option is used, the contents of @file{foo@/.doctitle}, -which should be a single line of @var{text}, is inserted in the -Texinfo document as @code{@@lydoctitle @var{text}}. -@code{@@lydoctitle} should be a macro defined in the Texinfo document. -The same remark about @code{texidoc} processing with localized -languages also applies to @code{doctitle}. - -@item nogettext -(Only for Texinfo output.) Do not translate comments and variable -names in the snippet quoted verbatim. - -@item printfilename -If a LilyPond input file is included with @code{\lilypondfile}, print -the file name right before the music snippet. For HTML output, this -is a link. Only the base name of the file is printed, i.e. the -directory part of the file path is stripped. - -@item fontload -This option includes fonts in all of the generated EPS-files for this -snippet. This should be used if the snippet uses any font that @LaTeX{} -cannot find on its own. - -@end table - - -@node Invoking lilypond-book -@section Invoking @command{lilypond-book} - -@command{lilypond-book} produces a file with one of the following -extensions: @file{.tex}, @file{.texi}, @file{.html} or @file{.xml}, -depending on the output format. All of @file{.tex}, @file{.texi} and -@file{.xml} files need further processing. - -@subheading Format-specific instructions - -@subsubheading @LaTeX{} - -There are two ways of processing your @LaTeX{} document for printing or -publishing: getting a PDF file directly with PDF@LaTeX{}, or getting a -PostScript file with @LaTeX{} via a DVI to PostScript translator like -@command{dvips}. The first way is simpler and recommended@footnote{Note -that PDF@LaTeX{} and @LaTeX{} may not be both usable to compile any -@LaTeX{} document, that is why we explain the two ways.}, and whichever -way you use, you can easily convert between PostScript and PDF with -tools, like @command{ps2pdf} and @command{pdf2ps} included in -Ghostscript package. - -To produce a PDF file through PDF@LaTeX{}, use - -@example -lilypond-book --pdf yourfile.pdftex -pdflatex yourfile.tex -@end example - -@cindex outline fonts -@cindex type1 fonts -@cindex dvips -@cindex invoking dvips -To produce PDF output via @LaTeX{}/@command{dvips}/@command{ps2pdf}, you -should do - -@example -lilypond-book yourfile.lytex -latex yourfile.tex -dvips -Ppdf yourfile.dvi -ps2pdf yourfile.ps -@end example - -@noindent -The @file{.dvi} file created by this process will not contain - note heads. This is normal; if you follow the instructions, they -will be included in the @file{.ps} and @file{.pdf} files. - -Running @command{dvips} may produce some warnings about fonts; these -are harmless and may be ignored. If you are running @command{latex} in -twocolumn mode, remember to add @code{-t landscape} to the -@command{dvips} options. - -@subsubheading Texinfo - -To produce a Texinfo document (in any output format), follow the normal -procedures for Texinfo; this is, either call @command{texi2pdf} or -@command{texi2dvi} or @command{makeinfo}, depending on the output format -you want to create. -@ifinfo -@xref{Format with texi2dvi, , , texinfo, GNU Texinfo}, and @ref{Creating -an Info File, , , texinfo, GNU Texinfo}. -@end ifinfo -@ifnotinfo -See the documentation of Texinfo for further details. -@end ifnotinfo - - -@subheading Command line options - -@command{lilypond-book} accepts the following command line options: - -@table @code -@item -f @var{format} -@itemx --format=@var{format} -Specify the document type to process: @code{html}, @code{latex}, -@code{texi} (the default) or @code{docbook}. If this option is missing, -@command{lilypond-book} tries to detect the format automatically, see -@ref{Filename extensions}. Currently, @code{texi} is the same as -@code{texi-html}. - -@c This complicated detail is not implemented, comment it out -jm -@ignore -The @code{texi} document type produces a Texinfo file with music -fragments in the printed output only. For getting images in the HTML -version, the format @code{texi-html} must be used instead. -@end ignore - -@item -F @var{filter} -@itemx --filter=@var{filter} -Pipe snippets through @var{filter}. @code{lilypond-book} will -not --filter and --process at the same time. For example, - -@example -lilypond-book --filter='convert-ly --from=2.0.0 -' my-book.tely -@end example - -@item -h -@itemx --help -Print a short help message. - -@item -I @var{dir} -@itemx --include=@var{dir} -Add @var{dir} to the include path. @command{lilypond-book} also looks -for already compiled snippets in the include path, and does not write -them back to the output directory, so in some cases it is necessary to -invoke further processing commands such as @command{makeinfo} or -@command{latex} with the same @code{-I @var{dir}} options. - -@item -o @var{dir} -@itemx --output=@var{dir} -Place generated files in directory @var{dir}. Running -@command{lilypond-book} generates lots of small files that LilyPond will -process. To avoid all that garbage in the source directory, use the -@option{--output} command line option, and change to that directory -before running @command{latex} or @command{makeinfo}. - -@example -lilypond-book --output=out yourfile.lytex -cd out -... -@end example - -@itemx --skip-lily-check -Do not fail if no lilypond output is found. It is used for LilyPond -Info documentation without images. - -@itemx --skip-png-check -Do not fail if no PNG images are found for EPS files. It is used for -LilyPond Info documentation without images. - -@itemx --lily-output-dir=@var{dir} -Write lily-XXX files to directory @var{dir}, link into @code{--output} -directory. Use this option to save building time for documents in -different directories which share a lot of identical snippets. - -@itemx --info-images-dir=@var{dir} -Format Texinfo output so that Info will look for images of music in -@var{dir}. - -@itemx --latex-program=@var{prog} -Run executable @command{prog} instead of @command{latex}. This is -useful if your document is processed with @command{xelatex}, for -example. - -@itemx --left-padding=@var{amount} -Pad EPS boxes by this much. @var{amount} is measured in millimeters, -and is 3.0 by default. This option should be used if the lines of -music stick out of the right margin. - -The width of a tightly clipped system can vary, due to notation -elements that stick into the left margin, such as bar numbers and -instrument names. This option will shorten each line and move each -line to the right by the same amount. - - -@item -P @var{command} -@itemx --process=@var{command} -Process LilyPond snippets using @var{command}. The default command is -@code{lilypond}. @code{lilypond-book} will not @code{--filter} and -@code{--process} at the same time. - -@item --pdf -Create PDF files for use with PDF@LaTeX{}. - -@item -V -@itemx --verbose -Be verbose. - -@item -v -@itemx --version -Print version information. -@end table - -@knownissues - -The Texinfo command @code{@@pagesizes} is not interpreted. Similarly, -@LaTeX{} commands that change margins and line widths after the preamble -are ignored. - -Only the first @code{\score} of a LilyPond block is processed. - - -@node Filename extensions -@section Filename extensions - -You can use any filename extension for the input file, but if you do not -use the recommended extension for a particular format you may need to -manually specify the output format; for details, see @ref{Invoking -lilypond-book}. Otherwise, @command{lilypond-book} automatically -selects the output format based on the input filename's extension. - -@quotation -@multitable @columnfractions .2 .5 -@item @strong{extension} @tab @strong{output format} -@item -@item @file{.html} @tab HTML -@item @file{.itely} @tab Texinfo -@item @file{.latex} @tab @LaTeX{} -@item @file{.lytex} @tab @LaTeX{} -@item @file{.lyxml} @tab DocBook -@item @file{.tely} @tab Texinfo -@item @file{.tex} @tab @LaTeX{} -@item @file{.texi} @tab Texinfo -@item @file{.texinfo} @tab Texinfo -@item @file{.xml} @tab HTML -@end multitable -@end quotation - -If you use the same filename extension for the input file than the -extension @command{lilypond-book} uses for the output file, and if the -input file is in the same directory as @command{lilypond-book} working -directory, you must use @code{--output} option to make -@command{lilypond-book} running, otherwise it will exit with an error -message like @qq{Output would overwrite input file}. - - -@node Alternate methods of mixing text and music -@section Alternative methods of mixing text and music - -This section shows methods to integrate text and music, different than -the automated method with @command{lilypond-book}. - -@menu -* Many quotes from a large score:: -* Inserting LilyPond output into OpenOffice.org:: -* Inserting LilyPond output into other programs:: -@end menu - -@node Many quotes from a large score -@unnumberedsubsec Many quotes from a large score - -If you need to quote many fragments from a large score, you can also use -the clip systems feature, see @ruser{Extracting fragments of music}. - - -@node Inserting LilyPond output into OpenOffice.org -@unnumberedsubsec Inserting LilyPond output into OpenOffice.org - -@cindex OpenOffice.org - -LilyPond notation can be added to OpenOffice.org with -@uref{http://@/ooolilypond@/.sourceforge@/.net@/,OOoLilyPond}. - - -@node Inserting LilyPond output into other programs -@unnumberedsubsec Inserting LilyPond output into other programs - -To insert LilyPond output in other programs, use @code{lilypond} -instead of @code{lilypond-book}. Each example must be created -individually and added to the document; consult the documentation for -that program. Most programs will be able to insert LilyPond output in -@file{PNG}, @file{EPS}, or @file{PDF} formats. - -To reduce the white space around your LilyPond score, use -the following options - -@example -\paper@{ - indent=0\mm - line-width=120\mm - oddFooterMarkup=##f - oddHeaderMarkup=##f - bookTitleMarkup = ##f - scoreTitleMarkup = ##f -@} - -@{ c1 @} -@end example - -To produce a useful @file{EPS} file, use - -@example -lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts myfile.ly - -@file{PNG}: -lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts --png myfile.ly -@end example - diff --git a/Documentation/user/lilypond-learning.tely b/Documentation/user/lilypond-learning.tely deleted file mode 100644 index cb0c89f1fc..0000000000 --- a/Documentation/user/lilypond-learning.tely +++ /dev/null @@ -1,153 +0,0 @@ -\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore -@setfilename lilypond-learning.info -@settitle GNU LilyPond Learning Manual -@documentencoding UTF-8 -@documentlanguage en - -@include macros.itexi - -@afourpaper - - -@c don't remove this comment. -@ignore -@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival -@omfdescription Learning Manual of the LilyPond music engraving system -@omftype program usage -@omfcategory Applications|Publishing -@omflanguage English -@end ignore - -@ifnottex -@node Top -@top GNU LilyPond --- Learning Manual -@end ifnottex - - -@ifhtml -@ifclear bigpage -This document is also available as a -@uref{source/Documentation/user/lilypond-learning.pdf,PDF} and as -@uref{source/Documentation/user/lilypond-learning-big-page.html,one big page}. -@end ifclear -@ifset bigpage -This document is also available as a -@uref{source/Documentation/user/lilypond-learning.pdf,PDF} and as -@uref{source/Documentation/user/lilypond-learning/index.html,HTML indexed multiple pages}. -@end ifset -@end ifhtml - - -@c This produces the unified index -@syncodeindex fn cp -@syncodeindex vr cp - - -@finalout - -@titlepage -@title LilyPond -@subtitle The music typesetter -@titlefont{Learning Manual} -@author The LilyPond development team - - -Copyright @copyright{} 1999--2009 by the authors - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation - -@vskip 20pt - -For LilyPond version @version{} -@end titlepage - -@copying -Copyright @copyright{} 1999--2009 by the authors - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation -@end copying - -@ifnottex -This file documents GNU LilyPond for beginners. - -Copyright 1999--2009 by the authors - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation -@end ifnottex - -@ifnottex -This is the Learning Manual (LM) for GNU LilyPond version @version{}. -For more information about how this fits with the other -documentation, see @ref{About the documentation}. - -@cindex web site -@cindex URL - -More information can be found at -@uref{http://@/www@/.lilypond@/.org/}. The website contains on-line copies -of this and other documentation. - -@menu -* Preface:: Preface. -* Introduction:: What, Why, How. -* Tutorial:: A tutorial introduction. -* Fundamental concepts:: Basic concepts required for reading the rest of this manual. -* Tweaking output:: Introduction to modifying output. -* Working on LilyPond projects:: Discusses real-life usage. - -Appendices - -* Templates:: Ready-made templates. -* Scheme tutorial:: Programming inside LilyPond. -* GNU Free Documentation License:: License of this document. -* LilyPond index:: -@end menu -@end ifnottex - -@contents - - -@include preface.itely -@include introduction.itely -@include tutorial.itely -@include fundamental.itely -@include tweaks.itely -@include working.itely - -@include templates.itely -@include scheme-tutorial.itely -@include fdl.itexi - -@node LilyPond index -@appendix LilyPond index - -@printindex cp - -@bye diff --git a/Documentation/user/lilypond-program.tely b/Documentation/user/lilypond-program.tely deleted file mode 100644 index ba1722c39f..0000000000 --- a/Documentation/user/lilypond-program.tely +++ /dev/null @@ -1,149 +0,0 @@ -\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore -@setfilename lilypond-program.info -@settitle GNU LilyPond program usage -@documentencoding UTF-8 -@documentlanguage en - -@include macros.itexi - -@afourpaper - - -@c don't remove this comment. -@ignore -@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival -@omfdescription Program Usage of the LilyPond music engraving system -@omftype program usage -@omfcategory Applications|Publishing -@omflanguage English -@end ignore - - -@ifnottex -@node Top -@top GNU LilyPond --- Application Usage -@c HJJ: Info needs `@top', which is a synonym for `@unnumbered' in TeX. -@end ifnottex - - -@ifhtml -@ifclear bigpage -This document is also available as a -@uref{source/Documentation/user/lilypond-program.pdf,PDF} and as -@uref{source/Documentation/user/lilypond-program-big-page.html,one big page}. -@end ifclear -@ifset bigpage -This document is also available as a -@uref{source/Documentation/user/lilypond-program.pdf,PDF} and as -@uref{source/Documentation/user/lilypond-program/index.html,HTML indexed multiple pages}. -@end ifset -@end ifhtml - - -@c This produces the unified index -@syncodeindex fn cp -@syncodeindex vr cp - - -@finalout - -@titlepage -@title LilyPond -@subtitle The music typesetter -@titlefont{Program usage} -@author The LilyPond development team - - -Copyright @copyright{} 1999--2009 by the authors - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation - -@vskip 20pt - -For LilyPond version @version{} -@end titlepage - -@copying -Copyright @copyright{} 1999--2009 by the authors - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation -@end copying - -@ifnottex -This file documents GNU LilyPond program usage. - -Copyright 1999--2009 by the authors - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation -@end ifnottex - -@ifnottex -This is the Application Usage (AU) manual for GNU LilyPond version @version{}. -For more information about how this fits with the other -documentation, see @rlearning{About the documentation}. - -@cindex web site -@cindex URL - -More information can be found at -@uref{http://@/www@/.lilypond@/.org/}. The website contains on-line copies -of this and other documentation. - -@menu -* Install:: How to install or compile. -* Setup:: Using LilyPond with other programs. -* Running LilyPond:: Operation. -* LilyPond-book:: Integrating text and music. -* Converting from other formats:: Converting to lilypond source format. - -Appendices - -* GNU Free Documentation License:: License of this document. -* LilyPond index:: -@end menu -@end ifnottex - -@contents - - -@include install.itely -@include setup.itely -@include running.itely -@include lilypond-book.itely -@include converters.itely - -@include fdl.itexi - -@node LilyPond index -@appendix LilyPond index - -@printindex cp - -@bye diff --git a/Documentation/user/lilypond.tely b/Documentation/user/lilypond.tely deleted file mode 100644 index 8d2ca906d8..0000000000 --- a/Documentation/user/lilypond.tely +++ /dev/null @@ -1,229 +0,0 @@ -\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore -@setfilename lilypond.info -@settitle GNU LilyPond Notation Reference -@documentencoding UTF-8 -@documentlanguage en - -@include macros.itexi - -@afourpaper - -@c Keep this here, since it pertains to the direntry below. -@ignore -Distributions will want to install lilypond.info in postinstall, doing: - - install-info --info-dir=/usr/share/info out[-www]/lilypond.info - - * Prepend GNU for dir, must be unique. - - * Do not list the `lilypond' node at toplevel, so that `info lilypond' - goes to Top. - - * List all commands in direntry. - -@c * lilypond: (lilypond/lilypond)Running LilyPond. Invoking the -@c LilyPond program. -@end ignore - - -@c -@c Info files are no longer installed in a subdirectory, images are -@c expected to be found in lilypond/ subdirectory. -@dircategory GNU LilyPond --- the music typesetter -@direntry -* LilyPond Learning Manual: (lilypond-learning). Start here. -* Music Glossary: (music-glossary). For non-English users. -* LilyPond: (lilypond). LilyPond Notation Reference. -* LilyPond Internals Reference: (lilypond-internals). Definitions for tweaking. -* LilyPond Application Usage: (lilypond-program). Installing and running applications. -* abc2ly: (lilypond-program)Invoking abc2ly. Importing ABC. -* convert-ly: (lilypond-program)Updating files with convert-ly. Older LilyPond versions. -* etf2ly: (lilypond-program)Invoking etf2ly. Importing Finale. -* lilypond-book: (lilypond-program)LilyPond-book. Integrating text and music. -* midi2ly: (lilypond-program)Invoking midi2ly. Importing MIDI. -* musicxml2ly: (lilypond-program)Invoking musicxml2ly. Importing MusicXML. -@end direntry - -@c don't remove this comment. -@ignore -@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival -@omfdescription Notation Reference of the LilyPond music engraving system -@omftype user manual -@omfcategory Applications|Publishing -@omflanguage English -@end ignore - -@ifnottex -@node Top -@top GNU LilyPond --- Notation Reference -@chapheading The music typesetter -@c HJJ: Info needs `@top', which is a synonym for `@unnumbered' in TeX. -@end ifnottex - - -@ifhtml -@ifclear bigpage -This document is also available as a -@uref{source/Documentation/user/lilypond.pdf,PDF} and as -@uref{source/Documentation/user/lilypond-big-page.html,one big page}. -@end ifclear -@ifset bigpage -This document is also available as a -@uref{source/Documentation/user/lilypond.pdf,PDF} and as a -@uref{source/Documentation/user/lilypond/index.html,HTML indexed multiple pages}. -@end ifset -@end ifhtml - - -@c This produces the unified index -@syncodeindex fn cp -@syncodeindex vr cp - - -@finalout - -@titlepage -@title LilyPond -@subtitle The music typesetter -@titlefont{Notation Reference} -@author The LilyPond development team - -Copyright @copyright{} 1999--2009 by the authors - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation - -@vskip 20pt - -For LilyPond version @version{} -@end titlepage - -@copying -Copyright @copyright{} 1999--2009 by the authors - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation -@end copying - -@ifnottex -This file documents GNU LilyPond. - -Copyright 1999--2009 by the authors - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation -@end ifnottex - -@ifnottex -This is the Notation Reference (NR) for GNU LilyPond version @version{}. -For more information about how this fits with the other -documentation, see @rlearning{About the documentation}. - -@cindex web site -@cindex URL - -More information can be found at -@uref{http://@/www@/.lilypond@/.org/}. The website contains on-line copies -of this and other documentation. - -@include dedication.itely - -@menu -* Musical notation:: Musical notation. -* Specialist notation:: Notation which is only used for - specific purposes. -* General input and output:: General information about - LilyPond input and output. -* Spacing issues:: Display of output on paper. -* Changing defaults:: Tuning output. -* Interfaces for programmers:: Expert usage. - -Appendices - -* Literature list:: Reference works about music notation. -* Notation manual tables:: Tables and charts. -* Cheat sheet:: Summary of LilyPond syntax. -* LilyPond grammar:: Syntax diagram for LilyPond parser. -* GNU Free Documentation License:: License of this document. -* LilyPond command index:: -* LilyPond index:: -@end menu -@end ifnottex - -@contents - - -@include notation.itely -@include specialist.itely - -@include input.itely -@include spacing.itely - -@include changing-defaults.itely -@include programming-interface.itely - - -@include literature.itely -@include notation-appendices.itely -@include cheatsheet.itely - -@node LilyPond grammar -@appendix LilyPond grammar - -This appendix contains a description of the LilyPond grammar, as -output from the parser. - -@verbatiminclude ly-grammar.txt - -@include fdl.itexi - -@node LilyPond command index -@appendix LilyPond command index - -This index lists all the LilyPond commands and keywords with links -to those sections of the manual which describe or discuss their -use. Each link is in two parts. The first part points to the -exact location in the manual where the command or keyword appears; -the second part points to the start of the section of the manual -in which the command or keyword appears. - -@printindex ky - -@node LilyPond index -@appendix LilyPond index - -In addition to all the LilyPond commands and keywords, this index -lists musical terms and words which relate to each of them, with -links to those sections of the manual which describe or discuss -that topic. Each link is in two parts. The first part points to -the exact location in the manual where the topic appears; the -second part points to the start of the section of the manual where -that topic is discussed. - -@printindex cp - -@bye diff --git a/Documentation/user/literature.itely b/Documentation/user/literature.itely deleted file mode 100644 index cf05679e64..0000000000 --- a/Documentation/user/literature.itely +++ /dev/null @@ -1,84 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Literature list -@appendix Literature list - -If you need to know more about music notation, here are some -interesting titles to read. - - - -@table @cite -@item Ignatzek 1995 -Klaus Ignatzek, Die Jazzmethode für Klavier. Schott's Söhne -1995. Mainz, Germany ISBN 3-7957-5140-3. - -A tutorial introduction to playing Jazz on the piano. One of the first -chapters contains an overview of chords in common use for Jazz music. - -@item Gerou 1996 - -Tom Gerou and Linda Lusk, Essential Dictionary of Music -Notation. Alfred Publishing, Van Nuys CA ISBN 0-88284-768-6. - -A concise, alphabetically ordered list of typesetting and music -(notation) issues, covering most of the normal cases. - -@item Read 1968 -Gardner Read, Music Notation: A Manual of Modern Practice. -Taplinger Publishing, New York (2nd edition). - -A standard work on music notation. - -@item Ross 1987 -Ted Ross, Teach yourself the art of music engraving and processing. -Hansen House, Miami, Florida 1987. - -This book is about music engraving, i.e., professional typesetting. -It contains directions on stamping, use of pens and notational -conventions. The sections on reproduction technicalities and history -are also interesting. - -@item Schirmer 2001 -The G.Schirmer/AMP Manual of Style and Usage. G.Schirmer/AMP, NY, 2001. -(This book can be ordered from the rental department.) - -This manual specifically focuses on preparing print for publication by -Schirmer. It discusses many details that are not in other, normal -notation books. It also gives a good idea of what is necessary to bring -printouts to publication quality. - -@item Stone 1980 - -Kurt Stone, Music Notation in the Twentieth Century. -Norton, New York 1980. - -This book describes music notation for modern serious music, but -starts out with a thorough overview of existing traditional notation -practices. - -@end table - -The source archive includes a more elaborate Bib@TeX{} bibliography of -over 100 entries in -@ifhtml -@ifset bigpage -@uref{../bibliography/index.html, the bibliography}. -@end ifset -@ifclear bigpage -@uref{../../bibliography/index.html, the bibliography}. -@end ifclear -@end ifhtml -@ifnothtml -@file{Documentation/@/bibliography/}. -@end ifnothtml - diff --git a/Documentation/user/macros.itexi b/Documentation/user/macros.itexi deleted file mode 100644 index 9dbf8a8ff3..0000000000 --- a/Documentation/user/macros.itexi +++ /dev/null @@ -1,402 +0,0 @@ -@c -*- coding: us-ascii; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - - -@include version.itexi - - -@c Don't replace quotes with directed quotes. - -@set txicodequoteundirected -@set txicodequotebacktick - - - -@c ***** Displaying text ***** - -@c We need this since @q{\} doesn't work with makeinfo 4.11 -- -@c say @q{@bs{}} instead. - -@macro bs -\\ -@end macro - - -@c To get decent quotes in `foo' and ``foo''. - -@macro q{TEXT} -@quoteleft{}\TEXT\@quoteright{} -@end macro - -@macro qq{TEXT} -@quotedblleft{}\TEXT\@quotedblright{} -@end macro - - -@ifhtml - -@macro warning{TEXT} -@cartouche -@b{Note:} \TEXT\ -@end cartouche -@end macro - -@end ifhtml - -@ifnothtml - -@macro warning{TEXT} -@quotation -@quotation -@cartouche -@b{Note:} \TEXT\ -@end cartouche -@end quotation -@end quotation -@end macro - -@end ifnothtml - - -@ifnotinfo - -@macro notation{TEXT} -@var{\TEXT\} -@end macro - -@end ifnotinfo - -@ifinfo - -@macro notation{TEXT} -\TEXT\ -@end macro - -@end ifinfo - - -@macro smallspace -@sp 1 -@end macro - - - -@c ***** Displaying images not generated by lilypond-book ***** - -@c Current installation setup of Info docs requires that all images are -@c expected to be found in the `lilypond/' subdirectory. `lilypond-book' -@c already generates proper @image commands for images of music; these -@c macro definitions do the same for other images. - -@ifnotinfo - -@macro sourceimage{FILENAME,WIDTH,HEIGHT,ALTTEXT} -@image{\FILENAME\,\WIDTH\,\HEIGHT\,\ALTTEXT\} -@end macro - -@end ifnotinfo - -@ifinfo - -@macro sourceimage{FILENAME,WIDTH,HEIGHT,ALTTEXT} -@image{lilypond/\FILENAME\,\WIDTH\,\HEIGHT\,\ALTTEXT\} -@end macro - -@end ifinfo - - - -@c ***** Headings in a doc subsection ***** - -@c Don't insert an empty line after @predefined! Right now -@c it doesn't matter, but a future implementation will probably -@c add some code which needs this restriction. - -@macro predefined -@noindent -@subsubheading Predefined commands -@end macro - -@c The next macro is a dummy currently since texinfo doesn't -@c provide a real ragged-right environment yet. -@c -@c Due to a bug in texi2html (texi2html.pl CVS versions <= 1.245) -@c the macro must not be empty. - -@macro endpredefined -@c -@end macro - - -@macro snippets -@noindent -@subsubheading Selected Snippets -@end macro - - -@c Don't insert an empty line after @seealso! Otherwise we get -@c unwanted extra vertical space in the PDF output. - -@macro seealso -@noindent -@subsubheading See also -@indent -@end macro - - -@macro knownissues -@noindent -@subsubheading Known issues and warnings -@end macro - - -@macro lydoctitle {TEXT} -@emph{\TEXT\} -@end macro - - -@c Don't remove the `@c' within the macro definition! See section 19.3, -@c `Macro Details and Caveats', in the texinfo info file for explanation. - -@macro funindex {TEXT} -@findex \TEXT\ -@kindex \TEXT\ -@c -@end macro - - - -@c ***** Links and references ***** - -@c Definitions for references: -@c -@c @rglos -@c @rlearning -@c @ruser -@c @rprogram -@c @rlsr -@c @rinternals -@c -@c All these also have a @...named version which allows to specify the -@c displayed text for the reference as second argument. -@c -@c ***** HTML + bigpage is a special case (other manual names); all other -@c formats are treated similarly. - - -@c *** not TeX *** - -@ifnottex - -@c ** bigpage ** - -@ifset bigpage - -@macro rglos{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,music-glossary-big-page,Music Glossary} -@end macro - -@macro rglosnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,music-glossary-big-page,Music Glossary} -@end macro - -@macro rlearning{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-learning-big-page,Learning Manual} -@end macro - -@macro rlearningnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-learning-big-page,Learning Manual} -@end macro - -@macro ruser{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-big-page,Notation Reference} -@end macro - -@macro rusernamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-big-page,Notation Reference} -@end macro - -@macro rprogram{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-program-big-page,Application Usage} -@end macro - -@macro rprogramnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-program-big-page,Application Usage} -@end macro - -@macro rlsr{TEXT} -@ref{\TEXT\,,,lilypond-snippets-big-page,Snippets} -@end macro - -@macro rlsrnamed{TEXT,DISPLAY} -@ref{\TEXT\,,\DISPLAY\,lilypond-snippets-big-page,Snippets} -@end macro - -@macro rinternals{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-internals-big-page,Internals Reference} -@end macro - -@macro rinternalsnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-internals-big-page,Internals Reference} -@end macro - -@end ifset - - -@c ** not bigpage ** - -@ifclear bigpage - -@macro rglos{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,music-glossary,Music Glossary} -@end macro - -@macro rglosnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,music-glossary,Music Glossary} -@end macro - -@macro rlearning{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-learning,Learning Manual} -@end macro - -@macro rlearningnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-learning,Learning Manual} -@end macro - -@macro ruser{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond,Notation Reference} -@end macro - -@macro rusernamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond,Notation Reference} -@end macro - -@macro rprogram{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-program,Application Usage} -@end macro - -@macro rprogramnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-program,Application Usage} -@end macro - -@macro rlsr{TEXT} -@ref{\TEXT\,,,lilypond-snippets,Snippets} -@end macro - -@macro rlsrnamed{TEXT,DISPLAY} -@ref{\TEXT\,,\DISPLAY\,lilypond-snippets,Snippets} -@end macro - -@macro rinternals{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-internals,Internals Reference} -@end macro - -@macro rinternalsnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-internals,Internals Reference} -@end macro - -@end ifclear - -@end ifnottex - - -@c *** TeX *** - -@iftex - -@c All commands below should work in the middle of the line; -@c we thus must not use @vindex directly since it works only if placed -@c on a line of its own. To overcome this problem, we define a -@c replacement macro using the internal definition of @vindex which -@c delimits arguments in the standard way (i.e., with braces). - -@tex -\gdef\lilyvindex#1{\doind{vr}{\code #1}\ignorespaces} -@end tex - -@macro rglos{TEXT} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,,music-glossary,Music Glossary} -@end macro - -@macro rglosnamed{TEXT,DISPLAY} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,\DISPLAY\,music-glossary,Music Glossary} -@end macro - -@macro rlearning{TEXT} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,,lilypond-learning,Learning Manual} -@end macro - -@macro rlearningnamed{TEXT,DISPLAY} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,\DISPLAY\,lilypond-learning,Learning Manual} -@end macro - -@macro ruser{TEXT} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,,lilypond,Notation Reference} -@end macro - -@macro rusernamed{TEXT,DISPLAY} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,\DISPLAY\,lilypond,Notation Reference} -@end macro - -@macro rprogram{TEXT} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,,lilypond-program,Application Usage} -@end macro - -@macro rprogramnamed{TEXT,DISPLAY} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,\DISPLAY\,lilypond-program,Application Usage} -@end macro - -@macro rlsr{TEXT} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,,lilypond-snippets,Snippets} -@end macro - -@macro rlsrnamed{TEXT,DISPLAY} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,\DISPLAY\,lilypond-snippets,Snippets} -@end macro - -@macro rinternals{TEXT} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,,lilypond-internals,Internals Reference} -@end macro - -@macro rinternalsnamed{TEXT,DISPLAY} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,\DISPLAY\,lilypond-internals,Internals Reference} -@end macro - -@end iftex diff --git a/Documentation/user/music-glossary.tely b/Documentation/user/music-glossary.tely deleted file mode 100644 index 0ae60c04ea..0000000000 --- a/Documentation/user/music-glossary.tely +++ /dev/null @@ -1,8864 +0,0 @@ -\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- -@setfilename music-glosssary.info -@settitle Music Glossary -@documentencoding UTF-8 -@documentlanguage en - -@include macros.itexi - -@afourpaper - -@c see lilypond.tely for info installation note -@dircategory LilyPond -@direntry -* Glossary: (lilypond/music-glossary). Glossary of music terms. -@end direntry - -@titlepage -@title Music Glossary -@author Christian Mondrup @c Original author of LilyPond glossary -@c Danish glossary -@author François Pinard @c Original glossary of GNU music project, -@c French glossary -@author Mats Bengtsson @c Swedish glossary -@author David González @c Spanish glossary -@author Bjoern Jacke @c German glossary -@author Neil Jerram @c English glossary translations -@author Heikki Junes @c Finnish glossary -@author Kurtis Kroon @c English glossary maintenance, beg. Oct. 2007 -@author Adrian Mariano @c Italian glossary -@author Han-Wen Nienhuys @c Dutch glossary -@author Jan Nieuwenhuizen @c Dutch glossary - -@c Fixes by Jean-Pierre Coulon and `Dirk', alphabetized by last name, KK, 10/07 -@c Updates to the German translation by Till Rettig, 12/07 - -Copyright @copyright{} 1999--2009 by the authors - - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.1 - or any later version published by the Free Software Foundation, - without Invariant Sections. - -@end titlepage - - -@c TODO: multiple omfcreators? -@ignore -@omfcreator Christian Mondrup, Kurt Kroon -@omfdescription Glossary of musical terms with translations -@omftype glossary -@omfcategory Applications|Publishing -@omflanguage English -@end ignore - -@ifnottex -@node Top -@top Music glossary -@end ifnottex - - -@ifnottex - -@ifhtml -@ifclear bigpage -This document is also available as a -@uref{source/Documentation/user/music-glossary.pdf,PDF} and as -@uref{source/Documentation/user/music-glossary-big-page.html,one big page}. -@end ifclear -@ifset bigpage -This document is also available as a -@uref{source/Documentation/user/music-glossary.pdf,PDF} and as a -@uref{source/Documentation/user/music-glossary/index.html,HTML indexed multiple pages}. -@end ifset -@end ifhtml - -This glossary was brought you by: - -@itemize - -@item @b{Christian Mondrup}: Original author of LilyPond glossary, Danish, -@item @b{François Pinard}: Original glossary of GNU music project, French, - -@item @b{Han-Wen Nienhuys}: Dutch, -@item @b{Jan Nieuwenhuizen}: Dutch, - -@item @b{Neil Jerram}: English, -@item @b{Kurtis Kroon}: English, - -@item @b{Heikki Junes}: Finnish, - -@item @b{Bjoern Jacke}: German, - -@item @b{Adrian Mariano}: Italian, - -@item @b{David González}: Spanish, - -@item @b{Mats Bengtsson}: Swedish, - -@end itemize - -with additional contributions: thanks to all who have contributed. - -@ignore - -The list is rather long ... - -@itemize - -@item Danish: -@itemize -@item Rune Zedeler, @emph{pace} -@item Eyolf Østrem -@end itemize - -@item Dutch: -@itemize -@item Alard de Boer -@end itemize - -@item English: -@itemize -@item Trevor Bača -@item Trevor Daniels -@item Andrew Hawryluk -@item Ian Hulin -@item Kieren MacMillan -@item Patrick McCarty -@item Ralph Palmer -@item Carl D. Sorensen -@item Anh Hai Trinh -@end itemize - -@item Finnish: -@itemize -@item Risto Vääräniemi -@end itemize - -@item German: -@itemize -@item Orm Finnendahl -@item Reinhold Kainhofer -@item Werner Lemberg -@item Till Rettig -@item Thomas Scharkowski -@end itemize - -@item Italian -@itemize -@item Andrea Valle -@end itemize - -@item Spanish -@itemize -@item Francisco Vila -@end itemize - -@item Swedish -@itemize -@item Simon Dahlbacka -@end itemize - -@end itemize -@end ignore - -@* -Copyright 1999--2009 by the authors - - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.1 - or any later version published by the Free Software Foundation, - without Invariant Sections. - -@* -@end ifnottex - -@c @pagesizes 10.3in -@c @everyheading @| @thispage @| -@c @evenheading @thispage @| @| -@c @oddheading @| @| @thispage @| - -This is the Music Glossary (MG) for GNU LilyPond version @version{}. -For more information about how this fits with the other -documentation, see @rlearning{About the documentation}. - - -@c arrowref -@macro aref{word} -@iftex -@w{@expansion{}@strong{\word\}}@c -@end iftex -@ifnottex -@expansion{}@ref{\word\, @strong{\word\}}@c -@end ifnottex -@end macro - -@menu -* Musical terms A-Z:: -* Duration names notes and rests:: -* Pitch names:: -@end menu - - -@node Musical terms A-Z -@chapter Musical terms A-Z - -Languages in this order. -@itemize -@item UK - British English (where it differs from American English) -@item ES - Spanish -@item I - Italian -@item F - French -@item D - German -@item NL - Dutch -@item DK - Danish -@item S - Swedish -@item FI - Finnish -@end itemize - - -@menu -* A:: -* a due:: -* accelerando:: -* accent:: -* accessory:: -* acciaccatura:: -* accidental:: -* adagio:: -* al niente:: -* alla breve:: -* allegro:: -* alteration:: -* alto:: -* alto clef:: -* ambitus:: -* anacrusis:: -* ancient minor scale:: -* andante:: -* appoggiatura:: -* arpeggio:: -* articulation:: -* ascending interval:: -* augmentation:: -* augmented interval:: -* autograph:: -* B:: -* backfall:: -* bar:: -* bar line:: -* baritone:: -* baritone clef:: -* bass:: -* bass clef:: -* beam:: -* beat:: -* beat repeat:: -* bind:: -* brace:: -* bracket:: -* brass:: -* breath mark:: -* breve:: -* C:: -* C clef:: -* cadence:: -* cadenza:: -* caesura:: -* canon:: -* cent:: -* central C:: -* chord:: -* chromatic scale:: -* chromaticism:: -* church mode:: -* clef:: -* cluster:: -* comma:: -* common meter:: -* common time:: -* complement:: -* compound interval:: -* compound meter:: -* compound time:: -* concert pitch:: -* conjunct movement:: -* consonance:: -* contralto:: -* copying music:: -* counterpoint:: -* countertenor:: -* crescendo:: -* cue-notes:: -* custos:: -* cut time:: -* D:: -* da capo:: -* dal niente:: -* dal segno:: -* decrescendo:: -* descending interval:: -* diatonic scale:: -* didymic comma:: -* diminished interval:: -* diminuendo:: -* diminution:: -* direct:: -* disjunct movement:: -* dissonance:: -* dissonant interval:: -* divisio:: -* doit:: -* dominant:: -* dominant ninth chord:: -* dominant seventh chord:: -* dorian mode:: -* dot (augmentation dot):: -* dotted note:: -* double appoggiatura:: -* double bar line:: -* double dotted note:: -* double flat:: -* double sharp:: -* double time signature:: -* double trill:: -* duple meter:: -* duplet:: -* duration:: -* dynamics:: -* E:: -* ecclesiastical mode:: -* eighth note:: -* eighth rest:: -* elision:: -* embellishment:: -* engraving:: -* enharmonic:: -* equal temperament:: -* expression mark:: -* extender line:: -* F:: -* F clef:: -* fall:: -* feathered beam:: -* fermata:: -* fifth:: -* figured bass:: -* fingering:: -* flag:: -* flageolet:: -* flat:: -* forefall:: -* forte:: -* fourth:: -* Frenched score:: -* Frenched staff:: -* Frenched staves:: -* fugue:: -* functional harmony:: -* G:: -* G clef:: -* glissando:: -* grace notes:: -* grand staff:: -* grave:: -* gruppetto:: -* H:: -* hairpin:: -* half note:: -* half rest:: -* harmonic cadence:: -* harmonics:: -* harmony:: -* hemiola:: -* homophony:: -* hymn meter:: -* interval:: -* inversion:: -* inverted interval:: -* just intonation:: -* key:: -* key signature:: -* laissez vibrer:: -* largo:: -* leading note:: -* ledger line:: -* legato:: -* legato curve:: -* leger line:: -* ligature:: -* lilypond:: -* line:: -* loco:: -* long appoggiatura:: -* longa:: -* lyric tie:: -* lyrics:: -* major:: -* major interval:: -* maxima:: -* meantone temperament:: -* measure:: -* measure repeat:: -* mediant:: -* melisma:: -* melisma line:: -* melodic cadence:: -* mensural notation:: -* mensuration sign:: -* meter:: -* metronome:: -* metronome mark:: -* metronomic indication:: -* mezzo:: -* mezzo-soprano:: -* middle C:: -* minor:: -* minor interval:: -* mixolydian mode:: -* mode:: -* modulation:: -* mordent:: -* motif:: -* motive:: -* movement:: -* multi-measure rest:: -* natural:: -* neighbor tones:: -* ninth:: -* non-legato:: -* note:: -* note head:: -* note names:: -* note value:: -* octavation:: -* octave:: -* octave mark:: -* octave marking:: -* octave sign:: -* ornament:: -* ossia:: -* part:: -* pause:: -* pennant:: -* percent repeat:: -* percussion:: -* perfect interval:: -* phrase:: -* phrasing:: -* piano:: -* pickup:: -* pitch:: -* pizzicato:: -* polymeter:: -* polymetric:: -* polymetric time signature:: -* polyphony:: -* portato:: -* presto:: -* proportion:: -* Pythagorean comma:: -* quadruplet:: -* quality:: -* quarter note:: -* quarter rest:: -* quarter tone:: -* quintuplet:: -* rallentando:: -* relative key:: -* repeat:: -* rest:: -* rhythm:: -* ritardando:: -* ritenuto:: -* scale:: -* scale degree:: -* scordatura:: -* score:: -* second:: -* semibreve:: -* semitone:: -* seventh:: -* sextolet:: -* sextuplet:: -* shake:: -* sharp:: -* simile:: -* simple meter:: -* sixteenth note:: -* sixteenth rest:: -* sixth:: -* sixty-fourth note:: -* sixty-fourth rest:: -* slash repeat:: -* slur:: -* solmization:: -* sonata:: -* sonata form:: -* song texts:: -* soprano:: -* staccato:: -* staff:: -* staves:: -* stem:: -* stringendo:: -* strings:: -* strong beat:: -* subdominant:: -* submediant:: -* subtonic:: -* sul G:: -* superdominant:: -* supertonic:: -* symphony:: -* syncopation:: -* syntonic comma:: -* system:: -* temperament:: -* tempo indication:: -* tenor:: -* tenth:: -* tenuto:: -* third:: -* thirty-second note:: -* thirty-second rest:: -* thorough bass:: -* tie:: -* time:: -* time signature:: -* tone:: -* tonic:: -* transposing instrument:: -* transposition:: -* treble clef:: -* tremolo:: -* triad:: -* trill:: -* triple meter:: -* triplet:: -* tritone:: -* tuning fork:: -* tuplet:: -* turn:: -* unison:: -* upbeat:: -* voice:: -* volta:: -* weak beat:: -* whole note:: -* whole rest:: -* whole tone:: -* woodwind:: -@end menu - - -@node A -@section A - -@itemize -@item ES: la -@item I: la -@item F: la -@item D: A, a -@item NL: a -@item DK: a -@item S: a -@item FI: A, a -@end itemize - -@seealso -@ref{Pitch names}. - - -@node a due -@section a due - -ES: a dos, -I: a due, -F: à deux, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: kahdelle. - -Abbreviated @notation{a2} or @notation{a 2}. In orchestral scores, @notation{a -due} indicates that: - -@enumerate - -@item A single part notated on a single staff that normally carries parts for -two players (e.g. first and second oboes) is to be played by both players. - -@item Or conversely, that two pitches or parts notated on a staff that normally -carries a single part (e.g. first violin) are to be played by different players, -or groups of players (@q{desks}). - -@end enumerate - -@seealso -No cross-references. - - -@node accelerando -@section accelerando - -ES: accelerando, -I: accelerando, -F: accelerando, en accélérant, -D: accelerando, schneller werden, -NL: accelerando, -DK: accelerando, -S: accelerando, -FI: accelerando, kiihdyttäen. - -[Italian: @q{speed up, accelerate}] - -Increase tempo - -@seealso -No cross-references. - - -@node accent -@section accent - -ES: acento, -I: accento, -F: accent, -D: Akzent, -NL: accent, -DK: accent, -S: accent, -FI: aksentti, korostus. - -The stress of one tone over others. - -@seealso -No cross-references. - - -@node accessory -@section accessory - -@seealso -@ref{ornament}. - - -@node acciaccatura -@section acciaccatura - -ES: ?, -I: acciaccatura, -F: acciaccatura, appoggiature brève, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: ?. - -A grace note which takes its time from the rest or note preceding the -principal note to which it is attached. The acciaccatura is drawn as a -small eighth note (quaver) with a line drawn through the flag and -stem. - -@seealso -@ref{appoggiatura}, @ref{grace notes}, @ref{ornament}. - - -@node accidental -@section accidental - -ES: alteración accidental, -I: accidento, -F: altération accidentelle, -D: Versetzungszeichen, Akzidenz, -NL: toevallig (verplaatsings)teken, -DK: løst fortegn, -S: tillfälligt förtecken, -FI: tilapäinen etumerkki. - -An accidental alters a note by: - -@itemize - -@item Raising its pitch: -@itemize -@item By two semitones (a whole tone)—@notation{double sharp} -@item By one semitone—@notation{sharp} -@end itemize - -@item Lowering its pitch: -@itemize -@item By one semitone—@notation{flat} -@item By two semitones (a whole tone)—@notation{double flat} -@end itemize - -@item Or canceling the effects of the key signature or previous accidentals. -@end itemize - -@lilypond[quote,notime] -\score { - \new Staff { - \relative c'' { - \set Staff.extraNatural = ##f - gisis1 gis g! ges geses - } - } - \addlyrics { - \markup { - \center-column { double sharp } - } - sharp - natural - flat - \markup { - \center-column { double flat } - } - } - \layout { - \context { - \Score - \override SpacingSpanner - #'base-shortest-duration = #(ly:make-moment 1 32) - } - } -} -@end lilypond - -@seealso -@ref{alteration}, @ref{semitone}, @ref{whole tone}. - - -@node adagio -@section adagio - -ES: adagio, -I: adagio, -F: adagio, lent, -D: Adagio, Langsam, -NL: adagio, -DK: adagio, -S: adagio, -FI: adagio, hitaasti. - -[Italian: @q{comfortable, easy}] - -@itemize - -@item Slow tempo, slower -- especially in even meter -- than @notation{andante} -and faster than @notation{largo}. - -@item A movement in slow tempo, especially the second (slow) movement -of sonatas, symphonies, etc. - -@end itemize - -@seealso -@ref{andante}, @ref{largo}, @ref{sonata}. - - -@node al niente -@section al niente - -ES: ?, -I: al niente, -F: al niente, en mourant, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: häviten olemattomiin. - -[Italian: @q{to nothing}] Used with @notation{decrescendo} to indicate -that the sound should fade away to nothing. - -@notation{Al niente} is indicated by circling the tip of the hairpin: - -@lilypond[quote,relative=2] -\override Hairpin #'circled-tip = ##t -c1\< -c2\> c\< -c1\! -@end lilypond - -or with the actual phrase @notation{al niente}: - -@lilypond[quote,relative=2] -\dimTextDecresc -\override DynamicTextSpanner #'(bound-details right text) = - \markup { \italic { al niente } } -c1\> ~ -c1 ~ -c1\! -@end lilypond - -Since one does not crescendo @emph{to} nothing, it is not correct to use -@notation{al niente} with @notation{crescendo}. Instead, one should use -@emph{dal niente} (@notation{@b{from} nothing}). - -@seealso -@ref{crescendo}, @ref{dal niente}, @ref{decrescendo}, @ref{hairpin}. - - -@node alla breve -@section alla breve - -ES: ?, -I: ?, -F: alla breve,à la brève, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: ?. - -[Italian: @q{on the breve}] Twice as fast as the notation indicates. - -Also called @notation{in cut-time}. The name derives from mensural notation, -where the @notation{tactus} (or beat) is counted on the semibreve (the modern -whole note). Counting @q{on the breve} shifts the tactus to the next longest -note value, which (in modern usage) effectively halves all note values. - -(In mensural notation, breves and semibreves can have a ternary relationship, in -which case @notation{alla breve} means thrice (not twice) as fast. In practice, -this complication may not have mattered, since Gaffurius's system of multiplex -proportions makes it easy to explicitly state which proportion is needed.) - -@seealso -@ref{breve}, @ref{hemiola}, @ref{mensural notation}, @ref{note value}, -@ref{proportion}, @ref{whole note}. - - -@node allegro -@section allegro - -ES: allegro, -I: allegro, -F: allegro, gaiement, -D: Allegro, Schnell, Fröhlich, Lustig, -NL: allegro, -DK: allegro, -S: allegro, -FI: allegro, nopeasti. - -[Italian: @q{cheerful}] Quick tempo. Also used as a title for pieces in a -quick tempo, especially the first and last movements of a sonata. - -@seealso -@ref{sonata}. - - -@node alteration -@section alteration - -ES: alteración, -I: alterazione, -F: altération, -D: Alteration, -NL: verhoging of verlaging, -DK: ?, -S: ?, -FI: muunnettu. - -An alteration is the modification, raising or lowering, of a note's -pitch. It is established by an accidental. - -@c TODO: add second meaning from mensural notation - -@seealso -@ref{accidental}. - - -@node alto -@section alto - -ES: alto, -I: contralto, -F: alto, -D: Alt, -NL: alt, -DK: alt, -S: alt, -FI: altto, matala naisääni. - -A female voice of low range (@emph{contralto}). Originally the alto -was a high male voice (hence the name), which by the use of falsetto -reached the height of the female voice. This type of voice is also -known as countertenor. - -@seealso -@ref{countertenor}. - - -@node alto clef -@section alto clef - -ES: clave de do en tercera, -I: chiave di contralto, -F: clef d'ut troisième ligne, -D: Altschlüssel, Bratschenschlüssel, -NL: alt sleutel, -DK: altnøgle, -S: altklav, -FI: alttoavain. - -C clef setting middle C on the middle line of the staff. - -@seealso -@ref{C clef}. - - -@node ambitus -@section ambitus - -ES: ámbito, -I: ambitus, -F: ambitus, tessiture, -D: Ambitus, -NL: ambitus, -DK: ambitus, -S: ambitus, -FI: ambitus, ääniala, soitinala. - -[Latin: past participle of @emph{ambire}, @q{to go around}; plural: ambitus] -Denotes a range of pitches for a given voice in a part of music. It may -also denote the pitch range that a musical instrument is capable of playing. -Sometimes anglicized to @emph{ambit} (pl. @emph{ambits}). - -@seealso -No cross-references. - - -@node anacrusis -@section anacrusis - -ES: anacrusa, -I: anacrusi, -F: anacrouse, levée, -D: Auftakt, -NL: opmaat, -DK: optakt, -S: upptakt, -FI: kohotahti. - -An anacrusis (also known as pickup or upbeat) is an incomplete measure -of music before a section of music. It also refers to the initial -note(s) of a melody occurring in that incomplete measure. - -@lilypond[quote,relative=1] -\key f \major -\time 4/4 -\partial 4 f4 -bes4. a8 bes4 c -bes4( a) g f -bes4. a8 bes4 c -f,2. \bar "||" -@end lilypond - -@seealso -@ref{measure}, @ref{meter}. - - -@node ancient minor scale -@section ancient minor scale - -ES: escala menor natural, -I: scala minore naturale, -F: forme du mode mineur ancien, troisème mode, mode hellénique, -D: reines Moll, natürliches Moll, -NL: authentieke mineurtoonladder, -DK: ren mol, -S: ren mollskala, -FI: luonnollinen molliasteikko. - -Also called @q{natural minor scale}. - -@lilypond[quote,notime,relative=2] -a1 b c d e f g a -@end lilypond - - -@seealso -@ref{diatonic scale}. - - -@node andante -@section andante - -ES: andante, -I: andante, -F: andante, allant, -D: Andante, Gehend, -NL: andante, -DK: andante, -S: andante, -FI: andante, käyden. - -[Italian: present participle of @emph{andare}, @q{to walk}] - -Walking tempo/character. - -@seealso -No cross-references. - - -@node appoggiatura -@section appoggiatura - -ES: apoyatura, -I: appoggiatura, -F: appoggiature, (port de voix), -D: Vorschlag, Vorhalt -NL: voorslag, -DK: forslag, -S: förslag, -FI: appoggiatura, etuhele. - -Ornamental note, usually a second, that is melodically connected with -the main note following it. In music before the 19th century -appoggiature were usually performed on the beat, after that mostly -before the beat. While the short appoggiatura is performed as a short -note regardless of the duration of the main note the duration of the -long appoggiatura is proportional to that of the main note. - -@lilypond[quote,relative=2] -\key d \major -\time 4/4 -4_"notation" r -\grace g16 -fis8 e16 fis -\grace a16 -g8 fis16 g | -a4 \bar "||" - -\set Score.measurePosition = #ZERO-MOMENT -4_"performance" r -g16( fis) e fis -a16 ( g) fis g | -a4 \bar "||" -@end lilypond - -An appoggiatura may have more notes preceding the main note. - -@lilypond[quote,relative=2] -\key as \major -\time 2/4 -\grace bes16 as8-"notation" as16 bes as8 g | -\grace { as16[( bes] } 4) -\grace { as16[( bes] } 4) \bar "||" - -\grace bes16 as8-"performance" as16 bes as8 g | -<< - { - \voiceOne - as32 bes c8. as32 bes c8. - } - \new Voice { - \voiceTwo - as16 ~ as8. as16 ~ as8. - } ->> -@end lilypond - -@seealso -No cross-references. - - -@node arpeggio -@section arpeggio - -ES: arpegio, -I: arpeggio, -F: arpège, -D: Arpeggio, Akkordbrechungen, gebro@-chener Akkord, -NL: gebroken akoord, -DK: arpeggio, akkordbrydning, -S: arpeggio, -FI: arpeggio, murtosointu. - -[Italian: @q{harp-like, played like a harp}] - -@lilypond[quote,line-width=13\cm] -\new PianoStaff << - \context Staff = "SA" { - \relative c'' { - \clef treble - \time 4/4 - r8 g16 c e g, c e r8 g,16 c e g, c e - r8 a,16 d f a, d f r8 a,16 d f a, d f - \bar "||" - } - } - \context Staff = "SB" { - \relative c' { - \clef bass - << - { - \voiceOne - r16 e8. ( e4) r16 e8. ( e4) - r16 d8. ( d4) r16 d8. ( d4) - } - \new Voice { - \voiceTwo - c2 c - c2 c - } - >> - } - } ->> -@end lilypond - -@seealso -No cross-references. - - -@node articulation -@section articulation - -ES: articulación, -I: articulazione, -F: articulation, -D: Artikulation, -NL: articulatie, -DK: ?, -S: ?, -FI: artikulaatio, ilmaisu. - -Articulation refers to notation which indicates how a note or notes -should be played. Slurs, accents, staccato, and legato are all -examples of articulation. - -@seealso -No cross-references. - - -@node ascending interval -@section ascending interval - -ES: intervalo ascendente, -I: intervallo ascendente, -F: intervalle ascendant, -D: steigendes Intervall, -NL: stijgend interval, -DK: stigende interval, -S: stigande intervall, -FI: nouseva intervalli. - -A distance between a starting lower note and a higher ending note. - -@seealso -No cross-references. - - -@node augmented interval -@section augmented interval - -ES: intervalo aumentado, -I: intervallo aumentato, -F: intervalle augmenté, -D: übermäßiges Intervall, -NL: overmatig interval, -DK: forstørret interval, -S: överstigande intervall, -FI: ylinouseva intervalli. - -@seealso -@ref{interval}. - - -@node augmentation -@section augmentation - -ES: ?, -I: ?, -F: augmentation, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: aika-arvojen pidentäminen. - -@c TODO: add definition. - -This is a placeholder for augmentation (wrt mensural notation). - -@seealso -@ref{diminution}, @ref{mensural notation}. - - -@node autograph -@section autograph - -ES: manuscrito, -I: autografo, -F: manuscrit, autographe -D: Autograph, Handschrift, -NL: manuscript, -DK: håndskrift, autograf, -S: handskrift, -FI: käsinkirjoitettu nuotti. - -@itemize - -@item A manuscript written in the composer's own hand. - -@item Music prepared for photoreproduction by freehand drawing, with -the aid of a straightedge ruler and T-square only, which attempts to -emulate engraving. This required more skill than did engraving. - -@end itemize - -@seealso -No cross-references. - - -@node B -@section B - -@itemize -@item ES: si -@item I: si -@item F: si -@item D: H, h -@item NL: b -@item DK: h -@item S: h -@item FI: H, h -@end itemize - -@seealso -@ref{H}, @ref{Pitch names} - - -@node backfall -@section backfall - -@seealso -@ref{appoggiatura}. - - -@node bar -@section bar - -@seealso -@ref{measure}. - - -@node bar line -@section bar line - -ES: barra, línea divisoria, -I: stanghetta, barra (di divisione), -F: barre (de mesure), -D: Taktstrich, -NL: maatstreep, -DK: taktstreg, -S: taktstreck, -FI: tahtiviiva. - -A vertical line through the staff (or through multiple staves) that -separates measures. Used very infrequently during the Renaissance (mostly -in secular music, or in sacred music to indicate congruences between parts -in otherwise-unmetered music). - -@seealso -@ref{measure}. - - -@node baritone -@section baritone - -ES: barítono, -I: baritono, -F: bariton, -D: Bariton, -NL: bariton, -DK: baryton, -S: baryton, -FI: baritoni, keskikorkuinen miesääni. - -The male voice intermediate in pitch between the bass and the tenor. - -@c F: clef de troisième ligne dropped - -@seealso -@ref{bass}, @ref{tenor}. - - -@node baritone clef -@section baritone clef - -ES: clave de fa en tercera, -I: chiave di baritono, -F: clef d'ut cinquième ligne, clef de fa troisième, -D: Baritonschlüssel, -NL: baritonsleutel, -DK: barytonnøgle, -S: barytonklav, -FI: baritoniavain. - -C or F clef setting middle C on the upper staff line. - -@seealso -@ref{C clef}, @ref{F clef}. - - -@node bass -@section bass - -ES: bajo, -I: basso, -F: basse, -D: Bass, -NL: bas, -DK: bas, -S: bas, -FI: basso, matala miesääni. - -@itemize - -@item The lowest male voice. - -@item Sometimes, especially in jazz music, used as an abbreviation for -double bass. - -@end itemize - -@seealso -@ref{strings}. - - -@node bass clef -@section bass clef - -ES: clave de fa en cuarta, -I: chiave di basso, -F: clef de fa quatrième ligne, -D: Bassschlüssel, -NL: bassleutel, -DK: basnøgle, -S: basklav, -FI: bassoavain. - -A clef setting with middle C on the first top ledger line. - -@seealso -@ref{F clef}. - - -@node beam -@section beam - -ES: barra -I: coda, -F: ligature, barre (de croches), -D: Balken, -NL: waardestreep, -DK: bjælke, -S: balk, -FI: palkki. - -Line connecting a series of notes (shorter than a quarter note). The -number of beams determines the note value of the connected notes. - -@lilypond[quote,notime,relative=2,line-width=13\cm] -g8-"1/8"[ g g g] s16 -g16-"1/16"[ g g g] s -g32-"1/32"[ s g s g s g] s16 -g64-"1/64"[ s32 g64 s32 g64 s32 g64] s32 -@end lilypond - -@seealso -@ref{feathered beam}. - - -@node beat -@section beat - -ES: tiempo, parte (de compás) -I: tempi, -F: temps, -D: Takt, Taktschlag, Zeit (im Takt), -NL: tel, -DK: (takt)slag, -S: taktslag, -FI: aika-arvo. - -Note value used for counting, most often half-, fourth-, and eighth notes. -The base counting value and the number of them in each measure is indicated -at the start of the music by the @notation{time signature}. - -@lilypond[quote,relative=2] -\key g \major -\time 4/4 -g4 c b a | g1 \bar "||" -\time 3/8 -g8 d' c | b c a | g4. \bar "||" -@end lilypond - -@seealso -@ref{time signature}. - - -@node beat repeat -@section beat repeat - -@seealso -@ref{percent repeat}. - - -@node bind -@section bind - -@seealso -@ref{tie}. - - -@node brace -@section brace - -ES: llave, corchete, -I: graffa, -F: accolade, -D: Klammer, Akkolade, -NL: accolade, teksthaak, -DK: klamme, -S: klammer, -FI: yhdistävä sulkumerkki. - -Symbol at the start of a system connecting staves. - -Curly braces are used for connecting piano staves, and sometimes for connecting -the staves of like instruments in an orchestral score when written on different -staves (e.g. first and second flutes): - -@lilypond[quote] -\new GrandStaff << - \context Staff = "SA" { - \relative c'' { - \clef treble - g4 e c2 - } - } - \context Staff = "SB" { - \relative c { - \clef bass - c1 - \bar "|." - } - } ->> -@end lilypond - -Angular brackets for connecting parts in an orchestral or choral score: - -@lilypond[quote] -\new StaffGroup << - \context Staff = "SA" { - \relative c'' { - \clef treble - g4 e c2 - } - } - \context Staff = "SB" { - \relative c { - \clef bass - c1 - \bar "|." - } - } ->> -@end lilypond - -@seealso -No cross-references. - - -@node bracket -@section bracket - -ES: corchete, -I: ?, -F: crochet, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: sulkumerkki. - -@seealso -@ref{brace} - - -@node brass -@section brass - -ES: metales, -I: ottoni, -D: Blechbläser, -NL: koper (blazers), -F: cuivres, -DK: messingblæsere, -S: brassinstrument, mässingsinstrument, -FI: vaskisoitin. - -A family of blown musical instruments made of brass, all using a cup -formed mouth piece. The brass instruments commonly used in a symphony -orchestra are trumpet, trombone, french horn, and tuba. - -@seealso -No cross-references. - - -@node breath mark -@section breath mark - -ES: respiración, -I: respiro, -F: respiration, -D: Atemzeichen, Trennungszeichen, -NL: repercussieteken, -DK: vejrtrækningstegn, -S: andningstecken, -FI: hengitysmerkki. - -Indication of where to breathe in vocal and wind instrument parts. - -@seealso -@ref{caesura}. - - -@node breve -@section breve - -@itemize -@item US: breve, double-whole note -@item ES: cuadrada, breve -@item I: breve -@item F: brève -@item D: Brevis -@item NL: brevis -@item DK: brevis -@item S: brevis -@item FI: brevis, kaksoiskokonuotti -@end itemize - -Note value: twice the length of a @notation{whole note} (@notation{semibreve}). - -Mainly used in music from before 1650. In mensural notation, it was a note -of fairly short duration—hence the name, which is Latin for @q{short} or -@q{of short duration}. - -@lilypond[quote,notime,relative=2] -g\breve -@end lilypond - -@seealso -@ref{mensural notation}, @ref{note value}, @ref{semibreve}. - - -@node C -@section C - -@itemize -@item ES: do -@item I: do -@item F: ut, do -@item D: C, c -@item NL: c -@item DK: c -@item S: c -@item FI: C, c -@end itemize - -@seealso -@ref{Pitch names}. - - -@node C clef -@section C clef - -ES: clave de do, -I: chiave di do, -F: clef d'ut, -D: C-Schlüssel, -NL: C-sleutel, -DK: c-nøgle, -S: c-klav, -FI: C-avain. - -Clef symbol indicating the position of the middle C. Used on all note -lines. - -@lilypond[quote,notime,relative=1,line-width=13.0\cm] -\new Staff { - \override Staff.Clef #'full-size-change = ##t - \clef soprano c1 - \clef mezzosoprano c1 - \clef alto c1 - \clef tenor c1 - \clef baritone c1 -} -\addlyrics { - \override Lyrics . LyricText #'self-alignment-X = #LEFT - "Soprano " "Mezzosoprano " "Alto " "Tenor " Baritone -} -@end lilypond - -@seealso -No cross-references. - - -@node cadence -@section cadence - -ES: cadencia, -I: cadenza, -F: cadence, -D: Kadenz, -NL: cadens, -DK: kadence, -S: kadens, -FI: kadenssi, lopuke. - -@seealso -@ref{harmonic cadence}, @ref{functional harmony}. - - -@node cadenza -@section cadenza - -ES: cadenza, -I: cadenza, -F: cadence, -D: Kadenz, -NL: cadens, -DK: kadence, -S: kadens, -FI: kadenssi, lopuke. - -An extended, improvisatory style section inserted near the end of -movement. The purpose of a cadenza is to give singers or players a -chance to exhibit their technical skill and -- not last -- their -ability to improvise. Since the middle of the 19th century, however, -most cadenzas have been written down by the composer. - -@seealso -No cross-references. - - -@node caesura -@section caesura - -ES: cesura, -I: cesura, -F: césure, -D: Zäsur, -NL: ?, -DK: ?, -S: ?, -FI: välimerkki. - -[Latin: from the supine of @emph{caedere} @q{to cut down}] - -The break between two musical phrases, sometimes (but not always) marked by a -rest or a breath mark. - -@seealso -@ref{breath mark}. - - -@node canon -@section canon - -ES: canon, -I: canone, -F: canon, -D: Kanon, -NL: canon, -DK: kanon, -S: kanon, -FI: kaanon, tarkka jäljittely. - -@seealso -@ref{counterpoint}. - - -@node cent -@section cent - -ES: cent, -I: cent, -F: cent, -D: Cent, -NL: cent, -DK: cent, -S: cent, -FI: sentti, puolisävelaskeleen sadasosa tasavireisessä -viritysjärjestelmässä. - -Logarithmic unit of measurement. 1@tie{}cent is 1/1200 of an octave -(1/100 of an equally tempered semitone). - -@seealso -@ref{equal temperament}, @ref{semitone}. - - -@node central C -@section central C - -@seealso -@ref{middle C}. - - -@node chord -@section chord - -ES: acorde, -I: accordo, -F: accord, -D: Akkord, -NL: akkoord, -DK: akkord, -S: ackord, -FI: sointu. - -Three or more tones sounding simultaneously. In traditional European music -the base chord is a @emph{triad} consisting of two thirds. @emph{Major} -(major + minor third) as well as @emph{minor} (minor + major third) chords -may be extended with more thirds. Four-tone @emph{seventh chords} and -five-tone @emph{ninth} major chords are most often used as dominants -(functional harmony). Chords having no third above the lower notes to -define their mood are a special case called @q{open chords}. The lack of -the middle third means their quality is ambivalent -- neither major nor -minor. - -@lilypond[quote,notime,line-width=13.0\cm] -<< - \new Staff { - \relative c'' { - \set Staff.extraNatural = ##f - 1 - - - - - - } - } - \lyrics { - "major " - "minor " - "diminished " - "augmented " - "seventh-chord " - ninth-chord - } ->> -@end lilypond - -@seealso -@ref{functional harmony}, @ref{interval}, @ref{inversion}, @ref{quality}, -@ref{third}. - - -@node chromatic scale -@section chromatic scale - -ES: escala cromática, -I: scala cromatica, -F: gamme chromatique, -D: chro@-ma@-ti@-sche Tonleiter, -NL: chromatische toonladder, -DK: kromatisk skala, -S: kromatisk skala, -FI: kromaattinen asteikko. - -A scale consisting of all 12 semitones. - -@lilypond[quote,notime,relative=1,line-width=13.0\cm] -c1 cis d dis e f fis g gis a ais b c -@end lilypond - -@seealso -@ref{semitone}. - - -@node chromaticism -@section chromaticism - -ES: cromatismo, -I: cromatismo, -F: chromatisme, -D: Chromatik, -NL: chromatiek, -DK: kromatik, -S: kromatik, -FI: kromatiikka. - -Using tones extraneous to a diatonic scale (minor, major). - -@seealso -@ref{diatonic scale}. - - -@node church mode -@section church mode - -ES: modo eclesiástico, -I: modo ecclesiastico, -F: mode ecclésiastique, mode d'église, -D: Kirchentonart, -NL: kerktoonladder, -DK: kirketoneart, -S: kyrkotonart, -FI: moodi, kirkkosävellaji. - -@seealso -@ref{diatonic scale}. - - -@node clef -@section clef - -ES: clave, -I: chiave, -F: clé, clef, -D: Schlüssel, Notenschlüssel, -NL: sleutel, -DK: nøgle, -S: klav, -FI: avain, nuottiavain. - -The clef indicates which lines of the staff correspond to which -pitches. The three clef symbols in common use are: - -@lilypond[quote] -\markup { - \left-column { - \line { The Treble or G clef: } - \strut - \line { The Bass or F clef: } - \strut - \line { The Alto or C clef: } - } - \hspace #0.5 - \left-column { - \musicglyph #"clefs.G" - \strut - \musicglyph #"clefs.F" - \strut - \musicglyph #"clefs.C" - } -} -@end lilypond - -Imagine a large staff of 11 lines centered on middle C, sometimes -called a @q{grand staff}, with the bottom line representing low G and -the top line high F: - -@lilypond[quote] -\score { - << - %-- Note names above treble staff --% - \new NoteNames { - \set printOctaveNames = ##t - g,1 b, d f a - \once \override NoteName #'color = #red - c'1 - e'1 g' b' d'' f'' - } - %-- Treble Staff --% - \new Staff = "G" { - \override Staff.Clef #'stencil = ##f - \clef "G" - s1 s s s s s - e'1 g' b' d'' f'' - s1 - } - %-- Alto Staff reduced to a single line on middle C --% - \new Staff = "C" { - \override Staff.StaffSymbol #'line-count = #1 - \override Staff.StaffSymbol #'color = #red - \override Staff.Clef #'stencil = ##f - \clef "C" - s1 s s s s - \override NoteHead #'color = #red - c'1 - s1 s s s s s - } - %-- Bass Staff --% - \new Staff = "F" { - \override Staff.Clef #'stencil = ##f - \clef "F" - g,1 b, d f a - s1 s s s s s s - } - >> - \layout { - \context { - \Score - \override SpacingSpanner - #'base-shortest-duration = #(ly:make-moment 1 1) - \override NonMusicalPaperColumn - #'line-break-system-details = #'((alignment-offsets . (3 0 -3 -6))) - \override BarLine #'stencil = ##f - } - \context { - \Staff - \remove "Time_signature_engraver" - } - } -} -@end lilypond - -Staves of five lines are usually used, and the clef superimposed on -them indicates which five lines have been selected from this -@samp{grand staff}. For example, the treble or G clef indicates that -the top five lines have been selected: - -@lilypond[quote] -\score { - << - %-- Note names above treble staff --% - \new NoteNames { - \set printOctaveNames = ##t - g,1 b, d f a - \once \override NoteName #'color = #red - c'1 - s1 - e'1 g' b' d'' f'' - } - %-- Treble Staff --% - \new Staff = "G" { - \once \override Staff.Clef #'stencil = ##f - \clef "G" - s1 s s s s s s - \override Staff.Clef #'full-size-change = ##t - \set Staff.forceClef = ##t - \clef "G" - e'1 g' b' d'' f'' - } - %-- Alto Staff reduced to a single line on middle C --% - \new Staff = "C" { - \override Staff.StaffSymbol #'line-count = #1 - \override Staff.StaffSymbol #'color = #red - \override Staff.Clef #'stencil = ##f - \clef "C" - s1 s s s s - \override NoteHead #'color = #red - c'1 - } - %-- Bass Staff --% - \new Staff = "F" { - \override Staff.Clef #'stencil = ##f - \clef "F" - g,1 b, d f a - } - >> - \layout { - \context { - \Score - \override SpacingSpanner - #'base-shortest-duration = #(ly:make-moment 2 1) - \override NonMusicalPaperColumn - #'line-break-system-details = #'((alignment-offsets . (3 0 -3 -6))) - \override BarLine #'stencil = ##f - } - \context { - \Staff - \remove "Time_signature_engraver" - } - } -} -@end lilypond - -The @q{curl} of the G clef is centered on the line that represents the -pitch G. - -In the same way, the bass or F clef indicates that the bottom five -lines have been selected from the @samp{grand staff}, and the alto or -C clef indicates the middle five lines have been selected. This -relationship is shown below, where the notes show an arpeggio on a C -major chord. - -@lilypond[quote] -\score { - << - %-- Treble Staff --% - \new Staff = "G" { - \clef "G" - s1 s s s - e'1 g' c'' s - } - %-- Alto Staff --% - \new Staff = "C" { - \override Staff.StaffSymbol #'line-count = #1 - \once \override Staff.Clef #'stencil = ##f - \stopStaff - \clef "C" - s1 s s - \startStaff - \revert Staff.StaffSymbol #'stencil - \override Staff.StaffSymbol #'color = #red - c'1 - s1 s s s s - \stopStaff \startStaff - \revert Staff.StaffSymbol #'line-count - \revert Staff.StaffSymbol #'color - \stopStaff \startStaff - \override Staff.Clef #'full-size-change = ##t - \set Staff.forceClef = ##t - \clef "C" - s1 s - c1 e g c' e' g' c'' - } - %-- Bass Staff --% - \new Staff = "F" { - \clef "F" - c1 e g - s1 s s s s - } - >> - \layout { - \context { - \Score - \override SpacingSpanner #'base-shortest-duration = - #(ly:make-moment 2 1) - \override NonMusicalPaperColumn - #'line-break-system-details = #'((alignment-offsets . (0 -3 -6))) - \override BarLine #'stencil = ##f - } - \context { - \Staff - \remove "Time_signature_engraver" - } - } -} -@end lilypond - -@seealso -@ref{C clef}, @ref{F clef}, @ref{G clef}. - - -@node cluster -@section cluster - -ES: racimo, -I: ?, -F: cluster, -D: Cluster, -NL: ?, -DK: ?, -S: ?, -FI: klusteri, cluster. - -A @emph{cluster} is a range of simultaneously sounding pitches that -may change over time. The set of available pitches to apply usually -depends on the acoustic source. Thus, in piano music, a cluster -typically consists of a continuous range of the semitones as provided -by the piano's fixed set of a chromatic scale. In choral music, each -singer of the choir typically may sing an arbitrary pitch within the -cluster's range that is not bound to any diatonic, chromatic or other -scale. In electronic music, a cluster (theoretically) may even cover -a continuous range of pitches, thus resulting in colored noise, such -as pink noise. - -Clusters can be denoted in the context of ordinary staff notation by -engraving simple geometrical shapes that replace ordinary notation of -notes. Ordinary notes as musical events specify starting time and -duration of pitches; however, the duration of a note is expressed by -the shape of the note head rather than by the horizontal graphical -extent of the note symbol. In contrast, the shape of a cluster -geometrically describes the development of a range of pitches -(vertical extent) over time (horizontal extent). Still, the -geometrical shape of a cluster covers the area in which any single -pitch contained in the cluster would be notated as an ordinary note. - -@lilypond[quote,relative=2] -\makeClusters { 4 8 } -@end lilypond - -@seealso -No cross-references. - - -@node comma -@section comma - -ES: coma, comma, -I: comma, -F: comma, -D: Komma, -NL: komma, -DK: komma, -S: komma, -FI: komma, korvinkuultava ero äänenkorkeudessa. - -Difference in pitch between a note derived from pure tuning and the -same note derived from some other tuning method. - -@seealso -@ref{didymic comma}, @ref{Pythagorean comma}, @ref{syntonic comma}, -@ref{temperament}. - - -@node common meter -@section common meter - -Another name for @ref{common time}. - -@seealso -@ref{common time}, @ref{meter}. - - -@node common time -@section common time - -ES: compasillo, -I: ?, -F: mesure à 4/4, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: C-merkintä. - -4/4 time. The symbol, which resembles a capital letter C, comes from -mensural notation. - -@seealso -@ref{mensural notation}, @ref{meter}. - - -@node complement -@section complement - -ES: intervalo invertido, -I: rivolto, -F: intervalle complémentaire, -D: Komplementärintervall, -NL: complementair interval, -DK: komplementærinterval, -S: komplementärintervall (?), -FI: täydentävä intervalli. - -@seealso -@ref{inverted interval}. - - -@node compound interval -@section compound interval - -ES: intervalo compuesto, -I: intervallo composto, -F: intervalle composé, -D: weites Intervall, -NL: samengesteld interval, -DK: sammensat interval, -S: sammansatt intervall, -FI: oktaavia laajempi intervalli. - -Intervals larger than an octave. - -@seealso -@ref{interval}. - - -@node compound meter -@section compound meter - -ES: compás compuesto, compás de subdivisión ternaria, -I: ?, -F: mesure composée, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: kolmijakoinen tahtilaji. - -A meter that includes a triplet subdivision within the beat, such as -6/8, 9/8, 12/8. - -@seealso -@ref{meter}, @ref{simple meter}. - - -@node compound time -@section compound time - -ES: compás compuesto, compás de amalgama (def. 2), -I: ?, -F: temps composé, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: yhdistetty tahtilajiosoitus. - -@enumerate - -@item -A meter that includes a triplet subdivision within the beat: see -@ref{compound meter}. - -@item -A time signature that additively combines two or more unequal meters, e.g., -"3/8 + 2/8" instead of "5/8". Sometimes called additive time signatures. - -@end enumerate - -@lilypond[quote,line-width=13.0\cm] -#(define ((compound-time one two three num) grob) - (grob-interpret-markup grob - (markup - #:override '(baseline-skip . 0) - #:number - #:line ( - #:left-column (one num) - #:vcenter "+" - #:left-column (two num) - #:vcenter "+" - #:left-column (three num))))) - -\relative c' { - \key f \major - #(set-time-signature 8 8 '(3 2 3)) - \override Staff.TimeSignature #'stencil = - #(compound-time "3" "2" "3" "8") - #(override-auto-beam-setting '(end 1 8 8 8) 3 8) - #(override-auto-beam-setting '(end 1 8 8 8) 5 8) - - c8 d e f4 d8 c bes - c4 g'8 e c f4. - \bar "||" -} -@end lilypond - -@seealso -@ref{compound meter}, @ref{meter}, @ref{polymetric time signature}. - - -@node concert pitch -@section concert pitch - -ES: en Do, afinación de concierto, -I: ?, -F: tonalité de concert, en ut, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: konserttikorkeus. - -The pitch at which the piano and other nontransposing instruments play: such -instruments are said to be @q{in C}. The following list includes some (but not -all) instruments that play in concert pitch: - -@c Let's see how easy (or hard) it is to put bulleted lists in tables. - -@multitable {alto trombone} {tenor trombone} {bass trombone} -@headitem Woodwinds @tab Brass @tab Strings - -@item -@itemize -@item flute -@item oboe -@item bassoon -@end itemize - -@tab - -@itemize -@item alto trombone -@item tenor trombone -@item bass trombone -@end itemize - -@tab - -@itemize -@item violin -@item viola -@item violoncello -@end itemize - -@end multitable - -The trombones are a special case: although they are said to be @q{in F} (alto or -bass) or @q{in B-flat} (tenor), this refers to their fundamental note, not to -their parts' transposition. (In fact, the trombones' parts are written at -concert pitch with an appropriate clef -- alto, tenor or bass.) This differs -from other instruments @q{in F}, @q{in B-flat}, and so on, which are transposing -instruments. - -Instruments that play @q{in C} but in a different octave than what is written -are, technically speaking, @emph{transposing instruments}: - -@itemize - -@item piccolo (plays an octave higher) -@item celesta (plays an octave higher) -@item double bass (plays an octave lower) - -@end itemize - -@seealso -@ref{transposing instrument}. - - -@node conjunct movement -@section conjunct movement - -ES: movimiento conjunto, -I: moto congiunto, -F: mouvement conjoint, -D: schritt@-weise, stufenweise Bewegung, -NL: stapsgewijze, trapsgewijze beweging, -DK: trinvis bevægelse, -S: stegvis rörelse, -FI: asteittainen liike. - -Progressing melodically by intervals of a second, as contrasted with -@emph{disjunct movement}. - -@lilypond[quote,relative=2,line-width=13.0\cm] -\key g \major -\time 4/4 -g4 g g a | b2 a | g4 b a a | g1 \bar "||" -@end lilypond - -@seealso -@ref{disjunct movement}. - - -@node consonance -@section consonance - -ES: consonancia, -I: consonanza, -F: consonance, -D: Konsonanz, -NL: consonant, -DK: konsonans, -S: konsonans, -FI: konsonanssi, sopusointi. - -@seealso -@ref{harmony}. - - -@node contralto -@section contralto - -ES: contralto, -I: contralto, -F: contralto, -D: Alt, -NL: contralto, -DK: alt, -S: alt, -FI: kontra-altto. - -@seealso -@ref{alto}. - - -@node copying music -@section copying music - -A music copyist did fast freehand scores and parts on preprinted staff -lines for performance. Some of their conventions (e.g., the placement -of note heads on stems) varied slightly from those of engravers. Some -of their working methods were superior and could well be adopted by -music typesetters. - -@c Copying music required more skill than engraving. Flagged for NPOV - -@seealso -No cross-references. - - -@node counterpoint -@section counterpoint - -ES: contrapunto, -I: contrappunto, -F: contrepoint, -D: Kontrapunkt, -NL: contrapunt, -DK: kontrapunkt, -S: kontrapunkt, -FI: kontrapunkti, ääni ääntä vastaan. - -From Latin @emph{punctus contra punctum}, note against note. The -combination into a single musical fabric of lines or parts which have -distinct melodic significance. A frequently used polyphonic technique -is imitation, in its strictest form found in the canon needing only -one part to be written down while the other parts are performed with a -given displacement. Imitation is also the contrapuntal technique -used in the @emph{fugue} which, since the music of the baroque era, -has been one of the most popular polyphonic composition methods. - -@lilypond[quote,staffsize=12,line-width=13.0\cm] -\new PianoStaff << - \context Staff = SA \relative c' { - \key bes \major - \time 4/4 - \clef treble - << \context Voice = rha { - \stemUp - r1 | r2 r8 g'8 bes d, | - cis4 d r8 e!16 f g8 f16 e | - f8 g16 a bes8 a16 g a8 - } - \context Voice = rhb { - \stemDown - r1 | r | r | r2 s8 - } - >> - } - \context Staff = SB \relative c' { - \clef bass - \key bes \major - << \context Voice = lha { - \stemUp - r8 d es g, fis4 g | r8 a16 bes c8 bes16 a bes4 g | - r8 a16 g f8 g16 a bes8 g e! cis' | - d4. e!8 f - } - \context Voice = lhb { - \stemDown - r1 | r | r | r2 s8 - } >> - } ->> -@end lilypond - -@seealso -No cross-references. - - -@node countertenor -@section countertenor - -ES: contratenor, -I: controtenore, -F: contre-tenor, -D: Countertenor, Kontratenor, -NL: contratenor, -DK: kontratenor, -S: kontratenor, counter tenor, -FI: kontratenori. - -@seealso -@ref{contralto}. - - -@node crescendo -@section crescendo - -ES: crescendo, -I: crescendo, -F: crescendo, -D: Crescendo, lauter werden, -NL: crescendo, -DK: crescendo, -S: crescendo, -FI: cresendo, voimistuen. - -Increasing volume. Indicated by a rightwards opening horizontal wedge -(hairpin) or the abbreviation @notation{cresc.}. - -@lilypond[quote,relative=2] -\key g \major -\time 4/4 -g4\< a b c | d1\! \bar "|." -@end lilypond - -@seealso -@ref{decrescendo}, @ref{hairpin}. - - -@node cue-notes -@section cue-notes - -ES: notas guía, -I: notine, -F: petites notes précédant l'entrée d'un instrument, réplique, "à défaut", -D: Stichnoten, -NL: stichnoten, -DK: stiknoder, -S: inprickningar, -FI: vihjenuotit. - -In a separate part notes belonging to another part with the purpose of -hinting when to start playing. Usually printed in a smaller type. - -@seealso -No cross-references. - - -@node custos -@section custos - -ES: custos, -I: ?, -F: guidon, -D: Notenzeiger, Custos, -NL: ?, -DK: ?, -S: ?, -FI: vihje. - -A custos (plural: custodes) is a staff symbol that appears at the end of a -staff line with monophonic musical contents (i.e., with a single voice). It -anticipates the pitch of the first note of the following line and thus helps -the player or singer to manage line breaks during performance, which -enhances the readability of a score. - -Custodes were frequently used in music notation until the 16th century. -There were different appearences for different notation styles. Nowadays, -they have survived only in special forms of musical notation such as the -@emph{Editio Vaticana}, dating from the beginning of the 20th century - -@lilypond[quote,ragged-right] -\score { - \new Staff { - \override Staff.Custos #'neutral-direction = #DOWN - \override Staff.Custos #'style = #'hufnagel - c'1 \break - 1 - } - \layout { - \context { - \Staff - \consists "Custos_engraver" - } - } -} -@end lilypond - -@seealso -No cross-references. - - -@node cut time -@section cut time - -@seealso -@ref{alla breve}. - - -@node D -@section D - -@itemize -@item ES: re -@item I: re -@item F: ré -@item D: D, d -@item NL: d -@item DK: d -@item S: d -@item FI: D, d -@end itemize - -@seealso -@ref{Pitch names} - - -@node da capo -@section da capo - -ES: da capo, -I: da capo, -F: da capo, depuis le commencement, -D: da capo, von Anfang, -NL: da capo, -DK: da capo, -S: da capo, -FI: da capo, alusta. - -Abbreviated @notation{D.C.}. Indicates that the piece is to be repeated from -the beginning to the end or to a certain place marked @emph{fine}. - -@seealso -No cross-references. - - -@node dal niente -@section dal niente - -ES: ?, -I: dal niente, -F: partant de rien, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: tyhjästä ilmaantuen. - -[Italian: @q{from nothing}] Used with @notation{crescendo} to indicate -that the sound should gradually increase from nothing. - -@seealso -@ref{al niente}. - - -@node dal segno -@section dal segno - -ES: dal segno, -I: dal segno, -F: dal segno, depuis le signe, -D: dal segno, ab dem Zeichen, -NL: dal segno, -DK: dal segno, -S: dal segno, -FI: dal segno, lähtien merkistä. - -Abbreviated @notation{D.S.}. Repetition, not from the beginning, but from -another place frequently near the beginning marked by a sign -(@notation{segno}): - -@lilypond[quote,relative=2] -\key g \major -\time 4/4 -d1 -g,4^\segno a b c -b4 a g2-\markup { - \italic "D.S. " - \tiny \raise #1 - \musicglyph #"scripts.segno" -} -\bar "|." -@end lilypond - -@seealso -No cross-references. - - -@node decrescendo -@section decrescendo - -ES: decrescendo, -I: decrescendo, -D: Decrescendo, leiser werden, -NL: decrescendo, -DK: decrescendo, -S: decrescendo, -FI: decresendo, hiljentyen. - -Decreasing tone volume. Indicated by a leftwards opening horizontal -wedge (hairpin) or the abbreviation @notation{decresc.}. - -@lilypond[quote,relative=2] -\key g \major -\time 4/4 -d4\> c b a | g1 \! \bar "|." -@end lilypond - -@seealso -@ref{crescendo}, @ref{diminuendo}, @ref{hairpin}. - - -@node descending interval -@section descending interval - -ES: intervalo descendente, -I: intervallo discendente, -F: intervalle descendant, -D: fallendes Intervall, absteigendes Intervall, -NL: dalend interval, -DK: faldende interval, -S: fallande intervall, -FI: laskeva intervalli. - -A distance between a starting higher note and a lower ending note. - -@seealso -No cross-references. - - -@node diatonic scale -@section diatonic scale - -ES: escala diatónica, -I: scala diatonica, -F: gamme diatonique, -D: diatonische Tonleiter, -NL: diatonische toonladder, -DK: diatonisk skala, -S: diatonisk skala, -FI: diatoninen asteikko. - -A scale consisting of 5@w{ }whole tones and 2@w{ }semitones (S). Scales -played on the white keys of a piano keybord are diatonic. These scales -are sometimes called, somewhat inaccurately, @q{church modes}). - -These @emph{modes} are used in Gregorian chant and in pre-baroque early music -but also to some extent in newer jazz music. - -@lilypond[quote,notime,relative=1] -<< - { - c1 d - e^"~~ S" f g a b^"~~ S" c - } - \lyrics { - Ionian - } ->> -@end lilypond - -@lilypond[quote,notime,relative=1] -<< - { - d1 - e^"~~ S" f g a b^"~~ S" c d - } - \lyrics { - Dorian - } ->> -@end lilypond - -@lilypond[quote,notime,relative=1] -<< - { - e1^"~~ S" f g a b^"~~ S" c d e - } - \lyrics { - Phrygian - } ->> -@end lilypond - -@lilypond[quote,notime,relative=1] -<< - { - f1 g a - b^"~~ S" c d e^"~~ S" f - } - \lyrics { - Lydian - } ->> -@end lilypond - -@lilypond[quote,notime,relative=2] -<< - { - g1 a - b^"~~ S" c d e^"~~ S" f g - } - \lyrics { - Mixolydian - } ->> -@end lilypond - -@lilypond[quote,notime,relative=2] -<< - { - a1 - b^"~~ S" c d e^"~~ S" f g a - } - \lyrics { - Aeolian - } ->> -@end lilypond - -@lilypond[quote,notime,relative=2] -<< - { - b1^"~~ S" c d e^"~~ S" f g a b - } - \lyrics { - Locrian - } ->> -@end lilypond - -From the beginning of the 17th century the scales used in European -compositional music are primarily the major and the minor scales. In -the harmonic minor scale type an augmented second (A) occurs between -the 6th and 7th tone. - -@lilypond[quote,notime,relative=1] -<< - { - c1 d - e^"~~ S" f g a b^"~~ S" c - } - \lyrics { - Major - } ->> -@end lilypond - -@lilypond[quote,notime,relative=2] -<< - { - a1 - b^"~~ S" c d e^"~~ S" f g a - } - \lyrics { - "Ancient (or Natural) minor" - } ->> -@end lilypond - -@lilypond[quote,notime,relative=2] -<< - { - a1 - b^"~~ S" c d e^"~~ S" f!^"~~ A" gis^"~~ S" a - } - \lyrics { - "Harmonic minor" - } ->> -@end lilypond - -@lilypond[quote,notime,relative=2] -<< - { - a1 - b^"~~ S" c d e fis gis^"~~ S" a - } - \lyrics { - "Melodic minor ascending" - } ->> -@end lilypond - -@lilypond[quote,notime,relative=3] -<< - { - a1 - g! f!^"~~ S" e d c^"~~ S" b a - } - \lyrics { - "Melodic minor descending" - } ->> -@end lilypond - -@seealso -@ref{semitone}, @ref{whole tone}. - - -@node didymic comma -@section didymic comma - -@seealso -@ref{syntonic comma}. - - -@node diminished interval -@section diminished interval - -ES: intervalo disminuido, -I: intervallo diminuito, -F: intervalle diminué, -D: vermindertes Intervall, -NL: verminderd interval, -DK: formindsket interval, -S: förminskat intervall, -FI: vähennetty intervalli. - -@seealso -@ref{interval}. - - -@node diminuendo -@section diminuendo - -ES: diminuendo, -I: diminuendo, -F: diminuendo, en diminuant, -D: diminuendo, -NL: diminuendo, -DK: diminuendo, -S: diminuendo, -FI: diminuendo, hiljentyen. - -@seealso -@ref{decrescendo}. - - -@node diminution -@section diminution - -ES: ?, -I: ?, -F: diminution, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: aika-arvojen tihennys. - -This is a stub for diminution (@emph{wrt} mensural notation). - -@seealso -@ref{augmentation}, @ref{mensural notation}. - - -@node direct -@section direct - -ES: ?, -I: ?, -F: ?, -D: Weiser, Zeiger, -NL: ?, -DK: ?, -S: ?, -FI: suora. - -@seealso -@ref{custos}. - - -@node disjunct movement -@section disjunct movement - -ES: movimiento disjunto, -I: moto disgiunto, -F: mouvement disjoint, -D: sprunghafte Bewegung, -NL: sprongsgewijze beweging, -DK: springende bevægelse, -S: hoppande rörelse, -FI: melodian hyppivä liike. - -Progressing melodically by intervals larger than a major second, as contrasted -with conjunct movement. - -@lilypond[quote,relative=1] -\key a \major -\time 4/4 { - \partial 8 e8 | - a4. gis8 b a e cis | - fis2 d4. - \bar "||" } -@end lilypond - -@seealso -@ref{conjunct movement}. - - -@node dissonance -@section dissonance - -Another name for @ref{dissonant interval}. - -@seealso -@ref{dissonant interval}, @ref{harmony}. - - -@node dissonant interval -@section dissonant interval - -ES: intervalo disonante, disonancia, -I: intervallo dissonante, dissonanza, -F: intervalle dissonant, dissonance, -D: Dissonanz, -NL: dissonant interval, dissonant, -DK: dissonerende interval, dissonans, -S: dissonans, -FI: dissonanssi, dissonoiva intervalli, riitasointi. - -@seealso -@ref{harmony}. - - -@node divisio -@section divisio - -ES: ?, -I: ?, -F: ?, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: jäsennysmerkki. - -[Latin: @q{division}; pl. @emph{divisiones}] In Gregorian chant, a -vertical stroke through part or all of the staff that serves to -structure a chant into phrases and sections. There are four types: - -@itemize - -@item @emph{divisio minima}, a short pause - -@item @emph{divisio maior}, a medium pause - -@item @emph{divisio maxima}, a long pause - -@item @emph{finalis}, to indicate the end of a chant, or the end of a -section in a long antiphonal or responsorial chant. - -@end itemize - -TODO: musical example here? - -@seealso -No cross-references. - - -@node doit -@section doit - -ES: ?, -I: ?, -F: saut, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: nousu. - -Indicator for a indeterminately rising pitch bend. Compare with -@emph{glissando}, which has determinate starting and ending pitches. - -@seealso -@ref{fall}, @ref{glissando}. - - -@node dominant -@section dominant - -ES: dominante, -I: dominante, -F: dominante, -D: Dominante, -NL: dominant, -DK: dominant, -S: dominant, -FI: dominantti, huippusointu. - -The fifth @emph{scale degree} in @emph{functional harmony}. - -@seealso -@ref{functional harmony}, @ref{scale degree}. - - -@node dominant ninth chord -@section dominant ninth chord - -ES: acorde de novena de dominante, -I: accordo di nona di dominante, -F: accord de neuvième de dominante, -D: Domi@-nant@-nonen@-akkord, -NL: dominant noon akkoord, -DK: dominantnoneakkord, -S: dominantnonackord, -FI: dominanttinoonisointu. - -@seealso -@ref{chord}, @ref{functional harmony}. - - -@node dominant seventh chord -@section dominant seventh chord - -ES: acorde de séptima de dominante, -I: accordo di settima di dominante, -F: accord de septième de dominante, -D: Dominantseptakkord, -NL: dominant septiem akkoord, -DK: dominantseptimakkord, -S: dominantseptimackord, -FI: dominanttiseptimisointu. - -@seealso -@ref{chord}, @ref{functional harmony}. - - -@node dorian mode -@section dorian mode - -ES: modo dórico, -I: modo dorico, -F: mode dorien, -D: dorisch, dorischer Kirchenton, -NL: dorische toonladder, -DK: dorisk skala, -S: dorisk tonart, -FI: doorinen moodi. - -@seealso -@ref{diatonic scale}. - - -@node dot (augmentation dot) -@section dot (augmentation dot) - -ES: puntillo, -I: punto (di valore), -F: point, -D: Punkt (Verlängerungspunkt), -NL: punt, -DK: punkt, -S: punkt, -FI: piste. - -@seealso -@ref{dotted note}, @ref{note value}. - - -@node dotted note -@section dotted note - -ES: nota con puntillo, -I: nota puntata, -F: note pointée, -D: punktierte Note, -NL: gepuncteerde noot, -DK: punkteret node, -S: punkterad not, -FI: pisteellinen nuotti. - -@seealso -@ref{note value}. - - -@node double appoggiatura -@section double appoggiatura - -ES: apoyatura doble, -I: appoggiatura doppia, -F: appoggiature double, -D: doppelter Vorschlag, -NL: dubbele voorslag, -DK: dobbelt forslag, -S: dubbelslag, -FI: kaksoisappogiatura, kaksoisetuhele. - -@seealso -@ref{appoggiatura}. - - -@node double bar line -@section double bar line - -ES: doble barra, -I: doppia barra, -F: double barre, -D: Doppelstrich, -NL: dubbele maatstreep, -DK: dobbeltstreg, -S: dubbelstreck, -FI: kaksoistahtiviiva. - -Indicates the end of a section within a movement. - -@seealso -No cross-references. - - -@node double dotted note -@section double dotted note - -ES: nota con doble puntillo, -I: nota doppiamente puntata, -F: note doublement pointée, -D: doppelt punktierte Note, -NL: dubbelgepuncteerde noot, -DK: dob@-belt@-punk@-te@-ret node, -S: dub@-bel@-punk@-te@-rad not, -FI: kaksoispisteellinen nuotti. - -@seealso -@ref{note value}. - - -@node double flat -@section double flat - -ES: doble bemol, -I: doppio bemolle, -F: double bémol, -D: Doppel-B, -NL: dubbelmol, -DK: dob@-belt-b, -S: dubbelbe, -FI: kaksoisalennusmerkki. - -@seealso -@ref{accidental}. - - -@node double sharp -@section double sharp - -ES: doble sostenido, -I: doppio diesis, -F: double dièse, -D: Doppelkreuz, -NL: dubbelkruis, -DK: dob@-belt@-kryds, -S: dubbelkors, -FI: kaksoisylennysmerkki. - -@seealso -@ref{accidental}. - - -@node double time signature -@section double time signature - -ES: ?, -I: ?, -F: ?, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: kaksois-aika-arvomerkintä. - -@seealso -@ref{polymetric time signature}. - - -@node double trill -@section double trill - -ES: trino doble, -I: doppio trillo, -F: trille double, -D: Doppeltriller, -NL: dubbele triller, -DK: dobbelttrille, -S: dubbeldrill, -FI: kaksoistrilli. - -A simultaneous trill on two notes, usually in the distance of a third. - -@seealso -No cross-references. - - -@node duple meter -@section duple meter - -ES: tiempo binario, -I: tempo binario, -F: métrique binaire, -D: in zwei, grader Takt, -NL: tweedelige maatsoort, -DK: todelt takt, -S: tvåtakt, -FI: kaksoistempo. - -@seealso -@ref{meter}. - - -@node duplet -@section duplet - -ES: dosillo, -I: duina, -F: duolet, -D: Duole, -NL: duool, -DK: duol, -S: duol, -FI: duoli. - -@seealso -@ref{note value}. - - -@node duration -@section duration - -ES: duración, -I: durata, -F: durée, -D: Dauer, Länge, -NL: duur, lengte, -DK: varighed, -S: tonlängd, -FI: kesto, aika-arvo. - -@seealso -@ref{note value}. - - -@node dynamics -@section dynamics - -ES: dinámica, matices, -I: ?, -F: nuances, -D: Dynamik, Lautstärke, -NL: ?, -DK: ?, -S: ?, -FI: äänen voimakkuusvaihtelu, dynamiikka. - -The aspect of music relating to degrees of loudness, or changes from -one degree to another. The terms, abbreviations, and symbols used to -indicate this information are called dynamic marks. - -@seealso -@ref{piano}, @ref{forte}, @ref{crescendo}, @ref{decrescendo}, -@ref{diminuendo}. - - -@node E -@section E - -@itemize -@item ES: mi -@item I: mi -@item F: mi -@item D: E, e -@item NL: e -@item DK: e -@item S: e -@item FI: E, e -@end itemize - -@seealso -@ref{Pitch names} - - -@node ecclesiastical mode -@section ecclesiastical mode - -@seealso -@ref{church mode}, @ref{diatonic scale}. - - -@node eighth note -@section eighth note - -@itemize -@item UK: quaver -@item ES: corchea -@item I: croma -@item F: croche -@item D: Achtel, Achtelnote -@item NL: achtste noot -@item DK: ottendedelsnode -@item S: åttondelsnot -@item FI: kahdeksasosanuotti -@end itemize - -@seealso -@ref{note value}. - - -@node eighth rest -@section eighth rest - -@itemize -@item UK: quaver rest -@item ES: silencio de corchea -@item I: pausa di croma -@item F: demi-soupir -@item D: Achtelpause -@item NL: achtste rust -@item DK: ottendedelspause -@item S: åttonddelspaus -@item FI: kahdeksasosatauko -@end itemize - -@seealso -@ref{note value}. - - -@node elision -@section elision - -@c TODO: add languages - -ES: sinalefa, -I: ?, -F: élision, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: tavujen yhdistäminen yhteen ääneen. - -More properly @emph{synalepha} [New Lat. > Gr. @emph{συναλοιφη}, from Greek -@emph{συναλοιφην} @q{to smear together}]. - -The singing of several syllables on a single note. Elision may be indicated -by a lyric tie, which looks like (and serves the same function) as a musical -tie. - -@seealso -@ref{lyric tie}. - - -@node embellishment -@section embellishment - -@seealso -@ref{ornament}. - - -@node engraving -@section engraving - -ES: grabado, -I: incisione, -F: gravure, -D: Notenstich, Notendruck -NL: steken, -DK: nodestik, -S: nottryck, -FI: painatus. - -Engraving means incising or etching a metal plate for printing. -Photoengraving means drawing music with ink in a manner similar to -drafting or engineering drawing, using similar tools. - -The traditional process of music printing is done through cutting in a -plate of metal. Now also the term for the art of music typesetting. - -@seealso -No cross-references. - - -@node enharmonic -@section enharmonic - -ES: enarmónico, -I: enarmonico, -F: enharmonique, -D: enharmonisch, -NL: enharmonisch, -DK: enharmonisk, -S: enharmonisk, -FI: enharmoninen. - -Two notes, intervals, or scales are enharmonic if they have different -names but equal pitch. - -@lilypond[quote,notime,line-width=13.0\cm] -<< - \new Staff { - \relative c'' { - gis1 as - } - } - \lyrics { - "g sharp " "a flat " "dim fifth " "augm fourth" - } ->> -@end lilypond - -@seealso -No cross-references. - - -@node equal temperament -@section equal temperament - -ES: temperamento igual, -I: temperamento equabile, -F: tempérament égal, -D: gleichschwebende Stimmung, -NL: ge@-lijk@-zwe@-ven@-de temperatuur, -DK: ligesvævende temperatur, -S: liksvävande temperatur, -FI: tasavireinen. - -A tuning system that divides the octave into 12 equal semitones (each of -which is precisely equal to 100 cents). - -@seealso -@ref{cent}, @ref{semitone}, @ref{temperament}. - - -@node expression mark -@section expression mark - -ES: expresión, -I: segno d'espressione, -F: signe d'expression, indication de nuance, -D: Vortragszeichen, -NL: voordrachtsteken, -DK: foredragsbetegnelse, -S: föredragsbeteckning, -FI: nyanssiosoitus, esitysmerkki. - -Performance indications concerning: - -@itemize - -@item volume, dynamics (for example, @notation{forte}, -@notation{crescendo}), - -@item tempo (for example, @notation{andante}, @notation{allegro}). - -@end itemize - -@seealso -@ref{allegro}, @ref{andante}, @ref{crescendo}, @ref{forte}. - - -@node extender line -@section extender line - -ES: línea de extensión [de melisma, de bajo cifrado, etc.], -I: ?, -F: ligne d'extension [de mélisme, de basse chiffrée, etc.], -D: Fülllinie, -NL: ?, -DK: ?, -S: ?, -FI: pidennysviiva. - -The generic term (in LilyPond) for a line (or dash) of arbitrary length that -extends text (without indicating the musical @emph{function} of that text). - -Used in many contexts, for example: - -@itemize - -@item In vocal music to indicate the syllable for a melisma. Called -@q{extension} in the -@uref{http://www.dolmetsch.com/defse1.htm,Dolmetsch Online Music -Dictionary}. - -@item -In figured bass to indicate that: - -@itemize - -@item The extended note should be held through a change in harmony, when applied -to one figure --OR-- -@item The chord thus represented should be held above a moving bass line, when -applied to more than one figure. -@item These uses were not completely standardized, and some composers used a -single extender line to indicate the latter case. - -@end itemize - -@item -In string music to indicate that all notes in the passage thus indicated should -be played on the same string. On the violin, for example, a series of notes to -be played on the G string would be indicated @notation{sul G}, another series to be -played on the D string would be indicated @notation{sul D}, and so on. - -@item -With an octave mark to indicate that a passage is to be played higher or lower -by the given number of octaves. - -@end itemize - -@seealso -@ref{melisma}, @ref{sul G}, @ref{thorough bass}, @ref{octave mark}, -@ref{octave marking}. - - -@node F -@section F - -@itemize -@item ES: fa -@item I: fa -@item F: fa -@item D: F, f -@item NL: f -@item DK: f -@item S: f -@item FI: F, f -@end itemize - -@seealso -@ref{Pitch names} - - -@node F clef -@section F clef - -ES: clave de fa, -I: chiave di fa, -F: clef de fa, -D: F-Schlüssel, -NL: F-sleutel, -DK: F-nøgle, -S: f-klav, -FI: F-avain. - -The position between the dots of the key symbol is the line of the F -below central@w{ }C. Used on the third, fourth and fifth note line. -A digit@w{ }8 above the clef symbol indicates that the notes must be -played an octave higher (for example, bass recorder) while 8@w{ }below -the clef symbol indicates playing an octave lower (for example, on the -Double Bass). - -@lilypond[quote,notime,line-width=13.0\cm] -<< - \relative c { - \override Staff.Clef #'full-size-change = ##t - \clef varbaritone - f1 - \clef bass - f1 - \clef subbass - f1 - \clef "F^8" - f1 - \clef "F_8" - f1 - } - \lyrics { - "varbaritone " - "bass " - "sub-bass " - "octave up " - "octave down" - } ->> -@end lilypond - -@seealso -@ref{baritone clef}, @ref{strings}. - - -@node fall -@section fall - -ES: ?, -I: ?, -F: chute, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: lasku. - -Indicator for a indeterminately falling pitch bend. Compare with -@emph{glissando}, which has determinate starting and ending pitches. - -@seealso -@ref{doit}, @ref{glissando}. - - -@node feathered beam -@section feathered beam - -ES: barra punteada, -I: ?, -F: ligature en soufflet, lien de croches en soufflet, -D: gespreizter Balken, -NL: ?, -DK: ?, -S: ?, -FI: kiilapalkki. - -A type of beam used to indicate that a small group of notes should be -played at an increasing or decreasing tempo -- depending on the -direction of @q{feathering} -- but without changing the overall tempo -of the piece. - -@seealso -Internals Reference: @ruser{Manual beams} - - -@node fermata -@section fermata - -@c F: 'point d'orgue' on a note, 'point d'arret' on a rest. - -ES: calderón, -I: corona, -F: point d'orgue, point d'arrêt, -D: Fermate, -NL: fermate, -DK: fermat, -S: fermat, -FI: fermaatti, pidäke. - -Prolonged note or rest of indefinite duration. - -@lilypond[quote,relative=2] -\time 4/4 -a4 b c2^\fermata -\bar "|." -@end lilypond - -@seealso -No cross-references. - - -@node fifth -@section fifth - -ES: quinta, -I: quinta, -F: quinte, -D: Quinte, -NL: kwint, -DK: kvint, -S: kvint, -FI: kvintti. - -@seealso -@ref{interval}. - - -@node figured bass -@section figured bass - -ES: bajo cifrado, -I: basso continuo, basso numerato, -F: basse chiffrée, basse continue, -D: Generalbass, bezifferter Bass, -NL: basso continuo, becijferde bas -DK: generalbas, -S: generalbas, -FI: kenraalibasso, numeroitu basso. - -Also called @q{thorough bass}. - -A method of indicating an accompaniment part by the bass notes only, -together with figures designating the chief intervals and chords to be -played above the bass notes. - -@lilypond[quote,line-width=13.0\cm] -\new GrandStaff << - \new Staff = "rh" \with { - fontSize = #-3 - \override StaffSymbol #'staff-space = #(magstep -3) - } \relative c'' { - \clef treble - \key es \major - \time 4/4 - << - \context Voice = "rha" { - \voiceOne - es4 d c bes - bes4 - } - \context Voice = "rhb" { - \voiceTwo - 8 as g f es - 4 - } - >> - } - \new Staff = "lh" \relative c' { - \clef bass - \key es \major - es8 c d bes c as bes16 as g f - es4 - } - \figures { - s8 <6> s <4 2> s <6> s16 s <6> <4 2> - } ->> -@end lilypond - -@seealso -@ref{chord}, @ref{interval}. - - -@node fingering -@section fingering - -ES: digitación, -I: diteggiatura, -F: doigté, -D: Fingersatz, -NL: vingerzetting, -DK: fingersætning, -S: fingersättning, -FI: sormitus. - -Figures to the side or above the note that methodically indicate which -fingers to use while playing a passage. - -@seealso -No cross-references. - - -@node flag -@section flag - -ES: corchete, -I: coda (uncinata), bandiera, -F: crochet, -D: Fahne, Fähnchen, -NL: vlaggetje, -DK: fane, -S: flagga, -FI: lippu, viiri. - -Ornament at the end of the stem of a note used for notes with values less -than a quarter note. The number of flags determines the note value. - -@lilypond[quote,notime,relative=2] -g8-"8th" s8 -g16-"16th" s8 -g32-"32nd" s8 -g64-"64th" s8 -@end lilypond - -@seealso -@ref{note value}. - - -@node flageolet -@section flageolet - -ES: ?, -I: ?, -F: flageolet, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: flageolet-ääni. - -An articulation for string players that means the note or passage is to -be played in harmonics. - -Also: - -@itemize - -@item A duct flute similar to the recorder. - -@item An organ stop of flute scale at 1' or 2' pitch. - -@end itemize - -@seealso -@ref{articulation}, @ref{harmonics}. - - -@node flat -@section flat - -ES: bemol, -I: bemolle, -F: bémol, -D: B, -NL: mol, -DK: b, -S: beförtecken, -FI: alennusmerkki. - -@seealso -@ref{accidental}. - - -@node forefall -@section forefall - -@seealso -@ref{appoggiatura}. - - -@node forte -@section forte - -ES: forte, -I: forte, -F: forte, -D: forte, laut, -NL: forte, -DK: forte, -S: forte, -FI: forte, voimakkaasti. - -[Italian: @q{loud}] - -Abbreviated @notation{@b{f}}. Variants include: - -@itemize -@item @emph{mezzo forte}, medium loud (notated @notation{@b{mf}}), -@item @emph{fortissimo}, very loud (notated @notation{@b{ff}}). -@end itemize - -@seealso -No cross-references. - - -@node fourth -@section fourth - -ES: cuarta, -I: quarta, -F: quarte, -D: Quarte, -NL: kwart, -DK: kvart, -S: kvart, -FI: kvartti. - -@seealso -@ref{interval}. - - -@node Frenched score -@section Frenched score - -ES: partitura a la francesa, -I: ?, -F: ?, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: partituuri francesan tapaan. - -A @q{condensed} score, produced by omitting staves for instruments that are not -playing at the moment, and by moving up additional systems from following pages -to take up the space thus liberated, which reduces the total number of pages -used to print the work. - -The specific rules for @q{frenching} a score differ from publisher to publisher. -If you are producing scores for eventual publication by a commercial publisher, -you may wish to procure a copy of their style manual. - -@seealso -@ref{Frenched staff}. - - -@node Frenched staff -@section Frenched staff - -ES: pentagrama a la francesa, -I: ?, -F: ?, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: karsittu nuotinnus. - -[Pl. @emph{Frenched staves}] Analogous to Frenched scores (@emph{q.v}), a -Frenched staff has unneeded measures or sections removed. This is useful -for producing, for example, an @emph{ossia} staff. - -@seealso -@ref{ossia}. - - -@node Frenched staves -@section Frenched staves - -Plural of @ref{Frenched staff}. - - -@node fugue -@section fugue - -ES: fuga, -I: fuga, -F: fugue, -D: Fuge, -NL: fuga, -DK: fuga, -S: fuga, -FI: fuuga. - -@seealso -@ref{counterpoint}. - - -@node functional harmony -@section functional harmony - -ES: armonía funcional, -I: armonia funzionale, -F: étude des functions, -D: Funktionslehre, -NL: functionele harmonie, -DK: funktionsanalyse, funktionsharmonik, -S: funktionslära, -FI: harmoniajärjestelmä. - -A system of harmonic analysis. - -It is based on the idea that, in a given key, there are only three -functionally different chords: tonic (T, the chord on the first note of the -scale), subdominant (S, the chord on the fourth note), and dominant (D, the -chord on the fifth note). Others are considered to be variants of the base -chords. - -TODO: what does the @q{p} mean in Sp, Dp, Tp? - -@lilypond[quote,notime,relative=2,line-width=13.0\cm] -<< - { - 1 - - } - \lyrics { - T Sp Dp S D Tp - \markup { D \translate #'(-2 . 0) | } - } ->> -@end lilypond - -@seealso -No cross-references. - - -@node G -@section G - -@itemize -@item ES: sol -@item I: sol -@item F: sol -@item D: G, g -@item NL: g -@item DK: g -@item S: g -@item FI: G, g -@end itemize - -@seealso -@ref{Pitch names} - - -@node G clef -@section G clef - -ES: clave de sol, -I: chiave di sol, -F: clef de sol, -D: G-Schlüssel, Violinschlüssel, -NL: G-sleutel, -DK: g-nøgle, -S: g-klav, -FI: G-avain. - -A clef symbol that indicates G above middle@w{ }C. Used on the first and -second note lines. A digit 8 above the clef symbol indicates that the notes -must be played an octave higher while 8 below the clef symbol indicates -playing or singing an octave lower (used most frequently to notate the tenor -part in modern choral scores). - -@lilypond[quote,notime] -\relative c'' { - \override Staff.Clef #'full-size-change = ##t - \set Score.proportionalNotationDuration = #(ly:make-moment 1 8) - \clef french - g1 - \clef treble - g1 - \clef "G^8" - g1 - \clef "G_8" - g1 -} -\addlyrics { - "french violin clef" - "violin clef" - "octave up" - "octave down" - } -@end lilypond - -@seealso -No cross-references. - - -@node glissando -@section glissando - -ES: glissando, -I: glissando, -F: glissando, -D: Glissando, -NL: glissando, -DK: glissando, -S: glissando, -FI: glissando, liukuen. - -Letting the pitch slide fluently from one note to the other. - -@seealso -No cross-references. - - -@node grace notes -@section grace notes - -ES: notas de adorno, -I: abbellimenti, -F: ornement, fioriture, -D: Verzierungen, Vorschläge, Vor@-schlags@-noten, -NL: versieringen, -DK: forsiringer, -S: ornament, -FI: korunuotit. - -Notes printed in small types to indicate that their time values are not -counted in the rhythm of the bar. - -@seealso -@ref{acciaccatura}, @ref{appoggiatura}, @ref{grace notes}, -@ref{ornament}. - - -@node grand staff -@section grand staff - -ES: sistema de piano, -I: accolatura, -F: système [de portées], accolade, -D: Akkolade, Klaviersystem, -NL: piano systeem, -DK: klaversystem, -S: ackolad, böjd klammer, -FI: kaksoisnuottiviivasto. - -A combination of two staves with a brace. Usually used for piano music. - -@seealso -@ref{brace}. - - -@node grave -@section grave - -ES: grave, -I: grave, -F: grave, lent, -D: Grave, Langsam, -NL: grave, ernstig, -DK: grave, -S: grave, -FI: grave, raskaasti. - -[Italian] Slow, solemn. - -@seealso -No cross-references. - - -@node gruppetto -@section gruppetto - -@seealso -@ref{turn}. - - -@node H -@section H - -@itemize -@item ES: si -@item I: si -@item F: si -@item D: H, h -@item NL: b -@item DK: h -@item S: h -@item FI: H, h -@end itemize - -Letter name used for @notation{B natural} in German and Scandinavian -usage. In the standard usage of these countries, @notation{B} means -@notation{B flat}. - -@seealso -@ref{Pitch names}, @ref{B}. - - -@node hairpin -@section hairpin - -Graphical version of the @notation{crescendo} and @notation{decrescendo} -dynamic marks. - -@lilypond[quote,relative=2] -c1\< -c2\> c\< -c1\! -@end lilypond - -@seealso -@ref{crescendo}, @ref{decrescendo}. - - -@node half note -@section half note - -@itemize -@item UK: minim, -@item ES: blanca, -@item I: minima, -@item F: blanche, -@item D: Halbe, halbe Note, -@item NL: halve noot, -@item DK: halvnode, -@item S: halvnot, -@item FI: puolinuotti. -@end itemize - -@seealso -@ref{note value}. - - -@node half rest -@section half rest - -@itemize -@item UK: minim rest, -@item ES: silencio de blanca, -@item I: pausa di minima, -@item F: demi-pause, -@item D: halbe Pause, -@item NL: halve, rust, -@item DK: halvnodespause, -@item S: halvpaus, -@item FI: puolitauko. -@end itemize - -@seealso -@ref{note value}. - - -@node harmonic cadence -@section harmonic cadence - -ES: cadencia (armónica), -I: cadenza (armonica), -F: cadence harmonique, -D: Schlusskadenz, -NL: harmonische cadens, -DK: harmonisk kadence, -S: (harmonisk) kadens, -FI: harmoninen kadenssi. - -A sequence of chords that terminates a musical phrase or section. - -@lilypond[quote] -\new PianoStaff << - \context Staff = "SA" \relative c'' { - \clef treble - \time 4/4 - \partial 4 4 | - 2 - } - << - \context Staff = "SB" \relative c { - \clef bass - \partial 4 c4 | f, g c2 - \bar "|." - } - \lyrics { - T4 S D T - } - >> ->> -@end lilypond - - -@seealso -@ref{functional harmony}. - - -@node harmonics -@section harmonics - -ES: sonidos del flautín, -I: suoni flautati, -F: flageolet, sons harmoniques, -D: Flageolett-Töne, -NL: ?, -DK: ?, -S: ?, -FI: harmoniset äänet, huiluäänet. - -The general class of pitches produced by sounding the second or higher -harmonic of a tone producer: string, column of air, and so on. - -On stringed instruments, these pitches sound rather flute-like; hence, -their name in languages other than English. They are produced by -lightly touching the string at a node for the desired mode of vibration -while it is being bowed or plucked. - -For instruments of the violin family, there are two types of harmonics: -natural harmonics, which are those played on the open string; and -artificial harmonics, which are produced on stopped strings. - -@seealso -No cross-references. - - -@node harmony -@section harmony - -ES: armonía, -I: armonia, -F: harmonie, -D: Harmonie, Zusammenklang, -NL: harmonie, -DK: samklang, -S: samklang, -FI: harmonia, yhteissointi. - -Tones sounding simultaneously. Two note harmonies fall into the -categories @emph{consonances} and @emph{dissonances}. - -Consonances: - -@lilypond[quote,notime,relative=2,line-width=13.0\cm] - 1_"unison " s - _"third " s - _"fourth " s - _"fifth " s - _"sixth " s - _"octave " s - _"tenth" s s -@end lilypond - -Dissonances: - -@lilypond[quote,notime,relative=2,line-width=13.0\cm] - 1_"second " s s - _"seventh " s s - _"ninth" s s -@end lilypond - -For harmony that uses three or more notes, see @ref{chord}. - -@seealso -@ref{chord}. - - -@node hemiola -@section hemiola - -ES: hemiolia, -I: ?, -F: hémiole, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: 3/2 -suhde. - -[Greek: in Latin, @emph{sesquialtera}] The ratio 3:2. - -Most frequently, a proportion (@emph{q.v.}) of three notes of equal value in the -time normally occupied by two. The resulting rhythm can be expressed in modern -terms as a substitution (for example) of a bar in 3/2 for one of 6/4, or of a -bar in 3/4 for one of 6/8. During the Baroque era, hemiola is most frequently -as a special effect (or @emph{affect}) at cadences. - -For example, this phrase in 6/4 time - -@lilypond[quote,relative=1,line-width=13.0\cm] -\key c \major -\time 6/4 -c2. e | d2 c d | c1. \bar "||" -@end lilypond - -may be thought of having alternating time signatures - -@lilypond[quote,relative=1,line-width=13.0\cm] -\key c \major -\time 6/4 -c2. e -\time 3/2 -d2 c d -\time 6/4 -c1. \bar "||" -@end lilypond - -and is therefore a polymeter (second definition) of considerable antiquity. - -@seealso -@ref{mensural notation}, @ref{meter}, @ref{polymeter}, @ref{proportion}. - - -@node homophony -@section homophony - -ES: homofonía, -I: omofonia, -F: homophonie, -D: Homophonie, -NL: homofonie, -DK: homofoni, -S: homofoni, -FI: homofonia, yksiäänisyys. - -Music in which one voice leads melodically supported by the other voices in -the same rhythm (more or less). In contrast to @emph{polyphony}. - -@seealso -@ref{polyphony}. - - -@node hymn meter -@section hymn meter - -ES: ?, -I: ?, -F: ?, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: säkeiden tavumäärät. - -A group or list of numbers that indicate the number of syllables in a line -of a hymn's verse. Different hymnals have different ways of noting the hymn -meter: for example, consider a hymn that has four lines in two couplets -alternating regularly between eight and seven syllables. The @emph{English -Hymnal} notes this as 87.@w{ }87. Other hymnals may note it as 8787, 87.87, -or 8@w{ }7@w{ }8@w{ }7. - -Some frequently-used hymn meters have traditional names: - -@itemize -@item 66.86 is called Short Meter (abbreviated SM or S.M.) -@item 86.86 is called Common Meter (CM or C.M.) -@item 88.88 is called Long Meter (LM or L.M.) -@end itemize - -Some hymns and their tunes are doubled versions of a simpler meter: for -easier reading, a hymn with a meter of 87.87.87.87 is usually written -87.87D. The traditional names above also have doubled versions: - -@itemize -@item 66.86.66.86 is Double Short Meter (DSM or D.S.M.) -@item 86.86.86.86 is Double Common Meter (DCM or D.C.M.) -@item 88.88.88.88 is Double Long Meter (DLM or D.L.M.) -@end itemize - -@seealso -No cross-references. - - -@node interval -@section interval - -ES: intervalo, -I: intervallo, -F: intervalle, -D: Intervall, -NL: interval, -DK: interval, -S: intervall, -FI: intervalli, kahden sävelen korkeusero. - -Difference in pitch between two notes. Intervals may be diminished, minor, -perfect, major, or augmented. The augmented fourth and the diminished fifth are -identical (or @emph{enharmonic}) and are called @emph{tritonus} because they -consist of three whole tones. The addition of such two intervals forms an -octave. - -@lilypond[quote,notime,line-width=13.0\cm] -<< -\context Voice \relative c'' { -% Prime or unison - < g g >1 - < g gis >^"aug" -% Second - < gis as >^"dim" - < g! as >^"min" - < g a! >^"maj" - < g ais >^"aug" -% Third - < gis bes >^"dim" - < g! bes >^"min" - < g b! >^"maj" - < g bis >^"aug" -% Fourth - < g ces >^"dim" - < g c! >^"per" - < g cis >^"aug" -% Fifth - < g des' >^"dim" - < g d' >^"per" - < g dis >^"aug" -% Sixth - < gis es' >^"dim" - < g! es' >^"min" - < g e'! >^"maj" - < g eis' >^"aug" -% Seventh - < gis f'! >^"dim" - < g! f'! >^"min" - < g fis' >^"maj" - < g fisis' >^"aug" -% Octave - < g ges' >^"dim" - < g g' >^"per" - < g gis' >^"aug" -} -\context Lyrics \lyrics { - "unison " "unison " - "second " "second " "second " "second " - "third " "third " "third " "third " - "fourth " "fourth " "fourth " - "fifth " "fifth " "fifth " - "sixth " "sixth " "sixth " "sixth " - "seventh" "seventh" "seventh" "seventh" - "octave " "octave " "octave " -} ->> -@end lilypond - -@seealso -@ref{enharmonic}, @ref{whole tone}. - - -@node inversion -@section inversion - -ES: ?, -I: ?, -F: renversement, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: käännös. - -When a chord sounds with a bass note that differs from the root of the -chord, it is said to be @emph{inverted}. The number of inversions that a -chord can have is one fewer than the number of constituent notes. For -example, triads (which have three constituent notes) can have three -positions, two of which are inversions: - -@table @dfn -@item Root position -The root note is in the bass, and above that are the third and the fifth. A -triad built on the first scale degree, for example, is marked @notation{I}. - -@item First inversion -The third is in the bass, and above it are the fifth and the root. This -creates an interval of a sixth and a third above the bass note, and so is -marked in figured Roman notation as @notation{6/3}. This is commonly -abbreviated to @notation{I6} (or @notation{Ib}) since the sixth is the -characteristic interval of the inversion, and so always implies -@notation{6/3}. - -@item Second inversion -The fifth is in the bass, and above it are the root and the third. This -creates an interval of a sixth and a fourth above the bass note, and so is -marked as @notation{I6/4} or @notation{Ic}. Second inversion is the most -unstable chord position. -@end table - -@seealso -No cross-references. - - -@node inverted interval -@section inverted interval - -ES: intervalo invertido, -I: intervallo rivolto, -F: intervalle renversé, -D: umgekehrtes Intervall, -NL: interval inversie, -DK: omvendingsinterval, -S: intervallets omvändning, -FI: käänteisintervalli. - -The difference between an interval and an octave. - -@lilypond[quote,notime,relative=2,line-width=13.0\cm] -1_"second " s s _"seventh " s s \bar "||" -_"third " s s _"sixth " s s \bar "||" -_"fourth " s s _"fifth " s s \bar "||" -@end lilypond - -@seealso -No cross-references. - - -@node just intonation -@section just intonation - -ES: entonación justa, -I: intonazione giusta, -F: intonation juste, -D: reine Stimmung, -NL: reine stemming, -DK: ren stemning, -S: ren stämning, -FI: puhdas viritys. - -Tuning system in which the notes are obtained by adding and subtracting -natural fifths and thirds. - -@seealso -@ref{temperament}. - - -@node key -@section key - -ES: tonalidad, -I: tonalità, -F: tonalité, -D: Tonart, -NL: toonsoort, -DK: toneart, -S: tonart, -FI: tonaliteetti. - -According to the 12@w{ }tones of the @emph{chromatic scale} there are -12@w{ }keys, one on@w{ }c, one on c-sharp, etc. - -@seealso -@ref{chromatic scale}, @ref{key signature}. - - -@node key signature -@section key signature - -ES: armadura (de la clave), -I: armatura di chiave, -F: armure, armature [de la clé], -D: Vorzeichen, Tonart, -NL: toon@-soort (voortekens), -DK: faste fortegn, -S: tonartssignatur, -FI: sävellajiosoitus. - -The sharps or flats appearing at the beginning of each staff indicating the -key of the music. - -@seealso -@ref{accidental}. - - -@node laissez vibrer -@section laissez vibrer - -ES: dejar vibrar, -I: ?, -F: laissez vibrer, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: antaa väristä. - -[French: @q{Let vibrate}] Most frequently associated with harp -parts. Marked @notation{l.v.} in the score. - -@seealso -No cross-references. - - -@node largo -@section largo - -ES: largo, -I: largo, -F: largo, large, ample, -D: Largo, Langsam, Breit, -NL: largo, -DK: largo, -S: largo, -FI: largo, hitaasti, leveästi. - -[Italian: @q{wide}.] Very slow in tempo, usually combined with great -expressiveness. @emph{Larghetto} is less slow than largo. - - -@node leading note -@section leading note - -ES: sensible, -I: sensibile, -F: (note) sensible, -D: Leitton, -NL: leidtoon, -DK: ledetone, -S: ledton, -FI: johtosävel. - -The seventh @emph{scale degree}, a @emph{semitone} below the tonic; so -called because of its strong tendency to @q{lead up} (resolve upwards) -to the tonic scale degree. - -@seealso -@ref{scale degree}, @ref{semitone}. - - -@node ledger line -@section ledger line - -ES: línea adicional, -I: tagli addizionali, -F: ligne supplémentaire, -D: Hilfslinie, -NL: hulplijntje, -DK: hjælpelinie, -S: hjälplinje, -FI: apuviiva. - -A ledger line is an extension of the staff. - -@lilypond[quote,notime,relative=2] -a,1 -s1 -c''1 -@end lilypond - -@seealso -No cross-references. - - -@node legato -@section legato - -ES: legato, -I: legato, -F: legato, lié, -D: legato, gebunden, -NL: legato, -DK: legato, -S: legato, -FI: legato, sitoen. - -To be performed (a) without any perceptible interruption between the -notes, unlike (b) @notation{leggiero} or @notation{non-legato}, (c) -@notation{portato}, or (d) @notation{staccato}. - -@lilypond[quote,notime,line-width=13.0\cm] -<< - \context Staff \relative c'' { - c4-( d e-) \bar "||" - c4-- d-- e-- \bar "||" - c4-.-( d-. e-.-) \bar "||" - c4-. d-. e-. \bar "||" - } - \lyrics { - a2. - b - c - d - } ->> -@end lilypond - -@seealso -@ref{staccato}. - - -@node legato curve -@section legato curve - -@seealso -@ref{slur}, @ref{legato}. - - -@node leger line -@section leger line - -@seealso -@ref{ledger line}. - - -@node ligature -@section ligature - -ES: ligadura, -I: ?, -F: ligature, -DE: Ligatur, -NL: ?, -DK: ?, -S: ?, -FI: ligatuura. - -A ligature is a coherent graphical symbol that represents at least two -distinct notes. Ligatures originally appeared in the manuscripts of -Gregorian chant notation around the 9th century to denote ascending or -descending sequences of notes. In early notation, ligatures were used for -monophonic tunes (Gregorian chant) and very soon denoted also the way of -performance in the sense of articulation. With the invention of the metric -system of the white mensural notation, the need for ligatures to denote such -patterns disappeared. - -@seealso -@ref{mensural notation}. - - -@node lilypond -@section lilypond - -UK: lily pond, -ES: estanque de nenúfares, -I: stagno del giglio, -F: étang de nénuphars, étang de nymphéas, -D: Seerosenteich, -NL: le@-lie@-vij@-ver, -DK: liliedam, -S: liljedamm, -FI: liljalampi. - -A pond with lilies floating in it. - -Also, the name of a music typesetting program. - -@seealso -No cross-references. - - -@node line -@section line - -ES: línea, -I: linea, -F: ligne, -D: Linie, Notenlinie, -NL: lijn, -DK: nodelinie, -S: notlinje, -FI: viiva, nuottiviiva. - -@seealso -@ref{staff}. - - -@node loco -@section loco - -ES: en su lugar, -I: loco, -F: ?, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: kirjoitetussa äänenkorkeudessa. - -[Italian: @q{place}] Instruction to play the following passage at the -written pitch. Cancels octave mark (q.v.). - -@seealso -@ref{octave mark}, @ref{octave marking}. - - -@node long appoggiatura -@section long appoggiatura - -ES: apoyatura larga, -I: appoggiatura lunga, -F: appoggiature longue, -D: Vorhalt, -NL: Lange voorslag, -DK: langt forslag, -S: långt förslag, -FI: pitkä appoggiatura, pitkä etuhele. - -@seealso -@ref{appoggiatura}. - - -@node longa -@section longa - -@itemize -@item US: long, longa, -@item ES: longa, -@item I: longa, -@item F: longa, longue, -@item D: Longa, -@item NL: longa, -@item DK: longa, -@item S: longa, -@item FI: longa. -@end itemize - -Note value: twice the length of a @notation{breve}. - -@lilypond[quote,notime,relative=2] -\override NoteHead #'style = #'mensural -g\longa g\breve -@end lilypond - -@seealso -@ref{breve}, @ref{note value}. - - -@node lyric tie -@section lyric tie - -ES: ligadura de letra, -I: ?, -F: ligature de mots, -D: Textbindung, -NL: ?, -DK: ?, -S: ?, -FI: sidonta sanoituksessa. - -@c TODO: add languages - -@seealso -@ref{elision}. - - -@node lyrics -@section lyrics - -ES: letra (de la canción), -I: ?, -F: paroles, -D: Liedtext, Gesangtext, -NL: liedtekst, -DK: ?, -S: ?, -FI: sanoitus. - -@c Definition? - -@seealso -No cross-references. - - -@node major -@section major - -ES: mayor, -I: maggiore, -F: [mode] majeur, -D: Dur, -NL: majeur, -DK: dur, -S: dur, -FI: duuri. - -@seealso -@ref{diatonic scale}. - - -@node major interval -@section major interval - -ES: intervalo mayor, -I: intervallo maggiore, -F: intervalle majeur, -D: großes Intervall, -NL: groot interval, -DK: stort interval, -S: stort intervall, -FI: suuri intervalli. - -@seealso -@ref{interval}. - - -@node maxima -@section maxima - -ES: ?, -I: ?, -F: maxima, maxime, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: ?. - -Note value: twice the length of a @notation{longa}. - -The maxima is the largest duration in use during the 15th and 16th centuries. -Like the longa, the maxima can be either two or three times as long as the -@notation{longa} (called @notation{binary} and @notation{ternary}, -respectively). By the late 15th century, most composers used the smaller -proportion by default. - -@seealso -@ref{Duration names notes and rests}, @ref{longa}, @ref{note value}. - - -@node meantone temperament -@section meantone temperament - -ES: afinación mesotónica, -I: accordatura mesotonica, -F: tempérament mésotonique, -D: mitteltönige Stimmung, -NL: middenstemming, middentoonstemming, -DK: middeltonetemperatur, -S: medeltonstemperatur, -FI: keskisävelviritys. - -Temperament yielding acoustically pure thirds by decreasing the natural -fifth by 16@w{ }cents. Due to the non-circular character of this -temperament only a limited set of keys are playable. Used for tuning -keyboard instruments for performance of pre-1650 music. - -@seealso -@ref{cent}, @ref{temperament}. - - -@node measure -@section measure - -ES: compás, -I: misura, battuta, -F: mesure, -D: Takt, -NL: maat, -DK: takt, -S: takt, -FI: tahti. - -A group of beats (units of musical time) the first of which bears an accent. -Such groups in numbers of two or more recur consistently throughout the -composition and are separated from each other by bar lines. - -@seealso -@ref{bar line}, @ref{beat}, @ref{meter}. - - -@node measure repeat -@section measure repeat - -@seealso -@ref{percent repeat}. - - -@node mediant -@section mediant - -ES: mediante, -I: mediante, modale, -F: médiante, -NL: mediant, -D: Mediante, -DK: mediant, -S: mediant, -FI: keskisävel. - -@itemize - -@item The third @b{scale degree}. - -@item A @emph{chord} having its base tone a third from that of another -chord. For example, the tonic chord may be replaced by its lower -mediant (variant tonic). - -@end itemize - -@seealso -@ref{chord}, @ref{functional harmony}, @ref{relative key}. - - -@node melisma -@section melisma - -ES: melisma, -I: ?, -F: mélisme, tenue, -D: Melisma, -NL: melisma, -DK: ?, -S: ?, -FI: melisma, laulettavan tavun sävelkuvio. - -A melisma (Greek: plural @emph{melismata}) is a group of notes or tones sung -on one syllable, especially as applied to liturgical chant. - -@seealso -No cross-references. - - -@node melisma line -@section melisma line - -@c TODO: add languages - -ES: línea de melisma, -I: ?, -F: trait de mélisme, trait de tenue, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: melismaviiva. - -@seealso -@ref{extender line}. - - -@node melodic cadence -@section melodic cadence - -@seealso -@ref{cadenza}. - - -@node mensural notation -@section mensural notation - -@c TODO: add languages - -ES: notación mensural, -I: ?, -F: notation mensurale, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: mensuraalinuotinnus. - -A system of duration notation whose principles were first established in the -mid-13th century, and that (with various changes) remained in use until about -1600. As such, it is the basis for the notation of rhythms in Western musical -notation. - -Franco of Cologne (ca. 1250) is credited with the first systematic explanation -of the notation's principles, so the notation of this earliest period is called -@q{Franconian}. Franco's system made use of three note values -- long, breve, -and semibreve -- each of which was normally equivalent to three of the next -lower note value. - -Then, in the first half of the 14th century, Philippe de Vitry and Jehan de Murs -added several note values (the minim, semiminim and fusa) and extended Franco's -principles to govern the relationship between these values. They also put the -duple division of note values on an equal footing with the earlier (preferred) -triple division. - -TODO: continue description of French and Italian black notation, and the -relationship betwixt them. - -@b{White or void mensural notation} - -In the 15th century, hollow (or void) notes began to substitute for the earlier -solid black ones, which were then free to assume the function of red (or -colored) notes in the earlier notation. ... - -TODO: add to definition (including summary info on proportional notation) - -@seealso -@ref{augmentation}, @ref{diminution}, @ref{ligature}, @ref{proportion}. -@c TODO: more cross-references? - - -@node mensuration sign -@section mensuration sign - -@c TODO: add languages - -ES: ?, -I: ?, -F: signe de mensuration, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: ?. - -The ancestor of the time signature, mensuration signs were used to indicate the -relationship between two sets of note durations—specifically, the ratio of -breves to semibreves (called @notation{tempus}), and of semibreves to minims -(called @notation{prolatio}). - -Each ratio was represented with a single single sign, and was either -three-to-one (ternary) or two-to-one (binary), as in modern music notation. -Unlike modern music notation, the @emph{ternary} ratio was the preferred -one—applied to the @emph{tempus}, it was called @emph{perfect}, and was -represented by a complete circle; applied to the @emph{prolatio}, it was called -@emph{major} and was represented by a dot in the middle of the sign. The binary -ratio applied to the @emph{tempus} was called @emph{imperfect}, and was -represented by an incomplete circle; applied to @emph{prolatio}, it was called -@emph{minor} and was represented by the lack of an internal dot. There are four -possible combinations, which can be represented in modern time signatures with -and without reduction of note values. (These signs are hard-coded in LilyPond -with reduction.) - -@table @dfn -@item perfect @emph{tempus} with major @emph{prolatio} -Indicated by a complete circle with an internal dot. In modern time signatures, -this equals: -@itemize -@item 9/4, with reduction or -@item 9/2, without reduction -@end itemize - -@item perfect @emph{tempus} and minor @emph{prolatio} -Indicated by a complete circle without an internal dot. In modern time -signatures, this equals: -@itemize -@item 3/2, with reduction or -@item 3/1, without reduction -@end itemize - -@item imperfect @emph{tempus} and major @emph{prolatio} -Indicated by an incomplete circle with an internal dot. In modern time -signatures, this equals: -@itemize -@item 6/4, with reduction or -@item 6/2, without reduction -@end itemize - -@item imperfect @emph{tempus} and minor @emph{prolatio} -Indicated by an incomplete circle without an internal dot. In modern time -signatures, this equals: -@itemize -@item 4/4, with reduction or -@item 2/1, without reduction -@end itemize -@end table - -The last mensuration sign @emph{looks} like common-time because it @emph{is}, -with note values reduced from the original semibreve to a modern quarter note. -Being doubly imperfect, this sign represented the (theoretically) -least-preferred mensuration, but it was actually used fairly often. - -This system extended to the ratio of longer note values to each other: - -@itemize - - @item maxima to longa, called: - - @itemize - - @item @notation{modus maximorum}, - @item @notation{modus major}, or - @item @notation{maximodus}) - - @end itemize - - @item longa to breve, called: - - @itemize - - @item @notation{modus longarum}, - @item @notation{modus minor}, or - @item @notation{modus} - - @end itemize - -@end itemize - -In the absence of any other indication, these modes were assumed to be -binary. The mensuration signs only indicated tempus and prolatio, so -composers needed another way to indicate these longer ratios (called modes. -Around the middle of the 15th century started to use groups of rests at the -beginning of the staff, preceding the mensuration sign. - - -Two mensuration signs have survived to the present day: the C-shaped sign, -which originally designated @notation{tempus imperfectum} and -@notation{prolatio minor} now stands for @notation{common time}; and the -slashed C, which designated the same with @notation{diminution} now stands -for @notation{cut-time} (essentially, it has not lost its original meaning). - -@seealso -@ref{diminution}, @ref{proportion}, @ref{time signature}. -@c TODO: more cross-references? - - -@node meter -@section meter - -ES: tiempo, compás, -I: tempo, misura, -F: indication de mesure, mesure, -D: Taktart, Metrum, -NL: maatsoort, -DK: taktart, -S: taktart, -FI: aika-arvo. - -The pattern of note values and accents in a composition or a section thereof. -There are a couple ways to classify @q{traditional} meter (i.e. not polymeter): -by grouping beats and by subdividing the primary beat. - -@b{By grouping beats}: - -@itemize - - @item @b{duple}: groups of two. - @item @b{triple}: groups of three. - @item @b{quadruple}: groups of four. A special case of duple meter. - @item @b{quintuple}: groups of five beats. - @item @b{sextuple} meter: groups of six. A special case of: - - @itemize - - @item duple meter, subdivided in three; or - @item triple meter, subdivided in two. - - @end itemize - - @item @b{septuple} meter: groups of seven. - @item and so on. - -@end itemize - -Other than triple meter and its subdivided variants (see below), meters that -feature odd groupings of beats (e.g. quintuple or septuple meter) are not -frequently used prior to the 20th Century. - -@b{By subdividing the primary beat}: - -@itemize - - @item simple: subdivided in groups of two. - - @itemize - - @item duple: 2/2, 2/4, 2/8 - @item triple: 3/2, 3/4, 3/8 - @item quadruple: 4/2, 4/4 (also called common time), 4/8 - - @end itemize - - @item compound: subdivided in groups of three. - - @itemize - - @item duple: 6/8 - @item triple: 9/8 - @item quadruple: 12/8 - - @end itemize - -@end itemize - -Time signatures are placed at the beginning of a composition (or section) to -indicate the meter. For instance, a piece written in simple triple meter with a -beat on each quarter note is conventionally written with a time signature of -3/4. Here are some combinations of the two classifications above: - -Simple duple meter (F.J. Haydn, 1732-1809; or a Croatian folk tune): - -@lilypond[quote,line-width=13.0\cm] -\relative c'' { - \time 2/4 - \key g \major - g8. a16 b8 a | c b a16( fis) g8 | e' d c b | a2 \bar "||"} -@end lilypond - -Simple triple meter: - -@lilypond[quote,line-width=13.0\cm] -\relative c'' { - \time 3/4 - \key c \minor - c es d8 c | d4 b g | d' f es8 d | es d c2 \bar "||"} -@end lilypond - -Simple quadruple meter (French folk tune, @emph{Au clair de la lune}): - -@lilypond[quote,line-width=13.0\cm] -\relative c'' { - \time 4/4 - \key g \major - g4 g g a | b2 a | g4 b a a | g1 \bar "||"} -@end lilypond - -Simple quintuple meter (B. Marcello, 1686-1739): - -@lilypond[quote,line-width=13.0\cm] -\relative c'' { - \time 5/4 - \key c \major - r4 cis8 bis ais4 dis c8 ais | - aes4 bes8 aes ges4 aes f8 es \bar "||"} -@end lilypond - -(Aside: this is an example of @emph{Augenmusik}: the accidentals are thus in -the source, with sharps in the accompaniment where the voice has flats and -@emph{vice versa}.) - -Compound duple meter (unknown): - -@lilypond[quote,line-width=13.0\cm] -\relative c' { - \time 6/8 - \key f \major - f8 f g a bes16 a g f | - g8 g bes a c16 a bes g - \bar "||"} -@end lilypond - -Compound triple meter (J.S. Bach, 1685-1750): - -@lilypond[quote,line-width=13.0\cm] -\relative c' { - \time 9/8 - \key g \major - r8 g'( a) b( d c) c( e d) | - d( g fis) g( d b) g( a b) - \bar "||"} -@end lilypond - -Compound quadruple meter (P. Yon, 1886-1943): - -@lilypond[quote,line-width=13.0\cm] -\relative c' { - \time 12/8 - \key e \major - b'8.( a16) gis8 a8.( gis16) fis8 gis8.( fis16) e8 fis4 b,8 | - e4 e8 fis( gis) a b4.~ b4 b8 - \bar "||"} -@end lilypond - -@b{@q{Monometer} vs Polymeter} - -TODO: add information from discussion on lilypond-user related to polymeter. - -@seealso -@ref{accent}, @ref{hemiola}, @ref{note value}, @ref{time signature} - - -@node metronome -@section metronome - -ES: metrónomo, -I: metronomo, -F: métronome, -D: Metronom, -NL: metronoom, -DK: me@-tro@-nom, -S: me@-tro@-nom, -FI: metronomi. - -Device used to indicate the exact tempo of a piece. - -Invented ca. 1812 by Dietrich Nikolaus Winkler of Amsterdam, but takes its name -from Johann Nepomuk Mälzel, who copied the device, added a scale of tempo -divisions, and patented it as a @q{metronome}. The inevitable lawsuit that -followed acknowledged Winkler as the creator, but by then Mälzel had already -sold many of them, and people had taken to calling it a Mälzel Metronome. - -@seealso -@ref{metronome mark}. - - -@node metronome mark -@section metronome mark - -ES: indicación metronómica, -I: indicazione metronomica, -F: indication métronomique, -D: Metronomangabe, -NL: metronoom aanduiding, -DK: metronomtal, -S: metronomangivelse, -FI: metronomiosoitus. - -Exact tempo indication (in beats per minute). Abbreviated @notation{M.M.} or -@notation{MM}, which is short for Mälzels Metronom (or Mälzel's Mark, -@emph{anglice}). - -@seealso -@ref{metronome} - - -@node metronomic indication -@section metronomic indication - -@seealso -@ref{metronome mark} - - -@node mezzo -@section mezzo - -ES: ?, -I: mezzo, -F: mezzo, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: kohtalaisen, melko. - -[Italian: @q{medium}] - -Used to qualify other indications, such as: - -@itemize - -@item Dynamics - @itemize - @item @notation{mezzo piano} is @q{medium quiet} (that is, not as quiet as - @notation{piano}) - @item @notation{mezzo forte} is @q{medium loud} (that is, not as loud as - @notation{forte}) - @end itemize - -@item Voice - @itemize - @item Pitchwise, a mezzo-soprano's voice lies between that of contraltos and - sopranos - @end itemize - -@end itemize - -@seealso -No cross-references. - - -@node mezzo-soprano -@section mezzo-soprano - -ES: mezzosoprano, -I: mezzo-soprano, -F: mezzo-soprano, -D: Mezzosopran, -NL: mezzosopraan, -DK: mezzosopran, -S: mezzosopran, -FI: mezzosopraano. - -The female voice between soprano and contralto. - -@seealso -@ref{soprano}, @ref{contralto}. - - -@node middle C -@section middle C - -ES: do central, -I: do centrale, -F: do central, do 3 -D: eingestrichenes@w{ }c, -NL: centrale@w{ }c, -DK: enstreget@w{ }c, -S: ettstruket@w{ }c, -FI: keski-C. - -First C below the 440 Hz A. - -@lilypond[quote,notime,relative=1] -\override Staff.Clef #'full-size-change = ##t - \clef bass c1 s - \clef alto c s - \clef treble c s -@end lilypond - -@seealso -No cross-references. - - -@node minor -@section minor - -ES: menor, -I: minore, -F: (mode) mineur, -D: Moll, -NL: mineur, -DK: mol, -S: moll, -FI: molli. - -@seealso -@ref{diatonic scale}. - - -@node minor interval -@section minor interval - -ES: intervalo menor, -I: intervallo minore, -F: intervalle mineur, -D: kleines Intervall, -NL: klein interval, -DK: lille interval, -S: litet intervall, -FI: pieni intervalli. - -@seealso -@ref{interval}. - - -@node mixolydian mode -@section mixolydian mode - -@seealso -@ref{diatonic scale}. - - -@node mode -@section mode - -ES: modo, -I: modo, -F: mode, -D: Kirchentonart, Modus, -NL: modus, -DK: skala, -S: modus, skala, -FI: moodi, kirkkosävelasteikko. - -@seealso -@ref{church mode}, @ref{diatonic scale}. - - -@node modulation -@section modulation - -ES: modulación, -I: modulazione, -F: modulation, -D: Modulation, -NL: modulatie, -DK: modulation, -S: modulering, -FI: modulaatio, sävellajin vaihdos. - -Moving from one @ref{key} to another. For example, the second subject -of a @ref{sonata form} movement modulates to the dominant key if the -key is major and to the @ref{relative key} if the key is minor. - -@seealso -No cross-references. - - -@node mordent -@section mordent - -I: mordente, -F: mordant, -D: Mordent, -NL: mordent, -DK: mordent, -S: mordent, -FI: mordent, korukuvio. - -@seealso -@ref{ornament}. - - -@node motif -@section motif - -@seealso -@ref{motive}. - - -@node motive -@section motive - -ES: motivo, -I: inciso, -F: motif, incise, -D: Motiv, -NL: motief, -DK: motiv, -S: motiv, -FI: teema, sävelaihe. - -The briefest intelligible and self-contained fragment of a musical -theme or subject. - -@lilypond[quote,line-width=13.0\cm] -\score{ -\relative c'' { - \set Score.implicitTimeSignatureVisibility = #all-invisible - \override Score.TimeSignature #'break-visibility = #all-invisible - \time 4/4 - \key g \major - \partial 8 g16\startGroup fis | - g8\stopGroup d16\startGroup c d8\stopGroup g16 fis g8 b,16 a b8 g'16 fis | - g8 g,16 a b8 cis d16 s -} -\layout { - \context { - \Staff \consists "Horizontal_bracket_engraver" -}} -} -@end lilypond - -@seealso -No cross-references. - - -@node movement -@section movement - -ES: movimiento, -I: movimento, -F: mouvement, -D: Satz, -NL: deel, -DK: sats, -S: sats, -FI: osa. - -Greater musical works like @ref{symphony} and @ref{sonata} most often consist of -several -- more or less -- independent pieces called movements. - -@seealso -No cross-references. - - -@node multi-measure rest -@section multi-measure rest - -ES: compases de espera, -I: pausa multipla, -F: pause multiple, mesure à compter, -NL: meermaats rust, -D: mehrtaktige Pause, Kirchenpause, -DK: flertaktspause, -S: flertaktspaus, -FI: usean tahdin mittainen tauko. - -Multi-measure rests are conventionally typeset with a combination of -longa, breve and whole rests for shorter and a long horizontal bar for -longer spans of rest, with a number above to indicate the duration (in -measures) of the rest. The former style is called @q{Kirchenpausen} in -German, as a reminiscence of its use in Renaissance vocal polyphony. - -@lilypond[quote,relative=2] -a1 -\set Score.skipBars = ##t -R1*3 -a1 -\set Score.skipBars = ##t -R1*122 -a1 -@end lilypond - -@seealso -@ref{longa}, @ref{breve}. - - -@node natural -@section natural - -ES: becuadro, -I: bequadro, -F: bécarre, -D: Auflösungszeichen, -NL: herstellingsteken, -DK: op@-løsningstegn, -S: återställningstecken, -FI: palautusmerkki. - -@seealso -@ref{accidental}. - - -@node neighbor tones -@section neighbor tones - -@c TODO: add definition. - -ES: ?, -I: ?, -F: tons voisins, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: ?. - -@seealso -@ref{acciaccatura}, @ref{appoggiatura}, @ref{grace notes}, -@ref{ornament}. - - -@node ninth -@section ninth - -ES: novena, -I: nona, -F: neuvième, -D: None, -NL: noon, -DK: none, -S: nona, -FI: nooni. - -@seealso -@ref{interval}. - - -@node non-legato -@section non-legato - -@seealso -@ref{legato}. - - -@node note -@section note - -ES: nota, -I: nota, -F: note, -D: Note, -NL: noot, -DK: node, -S: not, -FI: nuotti. - -Notes are signs by means of which music is fixed in writing. The term is also -used for the sound indicated by a note, and even for the key of the piano -which produces the sound. However, a clear distinction between the terms tone -and @ref{note} is strongly recommended. Briefly, one sees a note, -and hears a tone. - -@seealso -No cross-references. - - -@node note head -@section note head - -ES: cabeza, -I: testa, testina, capocchia, -F: tête de note, -D: Notenkopf, -NL: nootballetje, -DK: nodehovede, -S: nothuvud, -FI: nuotin pää. - -A head-like sign which indicates pitch by its position on a @notation{staff} -provided with a @notation{clef}, and duration by a variety of shapes such as -hollow or black heads with or without @notation{stems}, @notation{flags}, etc. -For percussion instruments (often having no defined pitch) the note head may -indicate the instrument. - -@seealso -@ref{clef}, @ref{flag}, @ref{staff}, @ref{stem}. - - -@node note names -@section note names - -@seealso -@ref{Pitch names} - - -@node note value -@section note value - -ES: valor (duración), -I: valore, durata, -F: durée, valeur (d'une note), -D: Notenwert, -NL: nootwaarde, -DK nodeværdi, -S: notvärde, -FI: nuotin aika-arvo. - -Note values (durations) are measured as fractions—in modern usage, one-half—of -the next higher note value. The longest duration in current use is the -@notation{breve} (equal to two whole notes), but sometimes (especially in music -dating from the Baroque era or earlier) the @notation{longa} (four whole notes) -or @notation{maxima} (eight whole notes) may be found. - -As used in mensural notation, this fraction was more flexible: it could also -be one-third the higher note value. Composers indicated which proportions -to use with various signs—two of which survive to the present day: the -C-shaped sign for @notation{common time}, and the slashed C for -@notation{alla breve} or @notation{cut-time}. - -@c TODO -- add maxima to this example, in a way that doesn't break it. - -@lilypond[quote,notime,line-width=13.0\cm] -\relative c'' { - \override NoteHead #'style = #'mensural - a\longa_"longa" a\breve_"breve" - \revert NoteHead #'style - a1_"1/1" a2_"1/2" a4_"1/4" s16 a8_"1/8" s16 - a16_"1/16" s16 a32_"1/32" s16 a64_"1/64" s32 } -@end lilypond - -@c TODO -- add maxima rest to this example - -@lilypond[quote,notime,line-width=13.0\cm] -\relative c'' { - r\longa_"longa" r\breve_"breve" - r1_"1/1" r2_"1/2" r4_"1/4" s16 r8_"1/8" s16 - r16_"1/16" s16 r32_"1/32" s16 r64_"1/64" s32 } -@end lilypond - -An augmentation dot after a note increases its duration by half; a second dot -increases it by half of the first addition (that is, by a fourth of the original -duration). More dots can be used to add further halved fractions of the -original note value (1/8, 1/16, etc.), but they are not frequently encountered. - -@lilypond[quote,line-width=13.0\cm] -\relative c'' { - \time 4/4 - g4._"pointed" g8 g2 | g4 ~ g8 g g2 \bar "||" - g4.._"double pointed" g16 g2 | g4 ~ g8 ~ g16 g g2 \bar "||" } -@end lilypond - -Alternatively note values may be subdivided by other ratios. Most common is -subdivision by@w{ }3 (@emph{triplets}) and@w{ }5 (@emph{quintuplets}). -Subdivisions by@w{ }2 (@emph{duplets}) or@w{ }4 (@emph{quadruplets}) of -dotted notes are also frequently used. - -@lilypond[quote,line-width=13.0\cm] -\relative c'' { - \time 4/4 - \times 2/3 {g8_"triplets" g g} g4 g8 g g4 \bar "||" - \times 2/5 {g8_"quintuplets" g g g g} g4 g8 g g4 \bar "||" -} -@end lilypond - -@lilypond[quote,line-width=13.0\cm] -\relative c'' { - \time 3/4 - \times 3/2 {g4_"duplets" g} | - g4 g g \bar "||" - \times 6/4 {g8_"quadruplets" g g g} | - g8 g g g g4 \bar "||" -} -@end lilypond - -@seealso -@ref{common time}. - - -@node octavation -@section octavation - -@seealso -@ref{octave marking}. - - -@node octave -@section octave - -ES: octava, -I: ottava, -F: octave, -D: Oktave, -NL: octaaf, -DK: oktav, -S: oktav, -FI: oktaavi. - -The interval of an octave, sometimes abbreviated @notation{8ve}. - -For uses like @notation{all'ottava} or @notation{8va} with an extender line or -bracket, or @notation{loco} see octave marking. - -@seealso -@ref{interval}, @ref{octave marking}. - - -@node octave mark -@section octave mark - -ES: indicación de octava, -I: ?, -F: indication d'octave, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: oktaavamerkki. - -The phrase, abbreviation, or other mark used (with or without an extender line -or bracket) to indicate that the music is to be played in a different octave: - -@itemize - -@item @notation{15ma}: play two octaves higher -@item @notation{8va}: play one octave higher -@item @notation{8vb}: play one octave lower -@item @notation{8va} (written below the passage): unusual, same as -@notation{8vb} -@item @notation{15vb}: play two octaves lower -@item @notation{15va} (written below the passage): unusual, same as -@notation{15vb} - -@end itemize - -For longer passages, it may be more practical to mark the octave change at the -beginning with a phrase (see the list below for examples), but without a bracket -or extender line. Then, when the music returns to the written pitch, the octave -change is cancelled with the word @notation{loco} (q.v.). - -To parallel the list above: - -@itemize - -@item @notation{15ma}: @notation{alla quindicesima (alta)} -@item @notation{8va}: @notation{all'ottava} or @notation{ottava sopra} -@item @notation{8vb}: @notation{all'ottava bassa}, @notation{ottava sotto} -@item @notation{15vb}: @notation{alla quindicesima (bassa)} - -@end itemize - -In the phrases above, @notation{quindicesima} is sometimes replaced with -@notation{quindecima}, which is Latin. - -The music on an entire staff can be marked to be played in a different octave by -putting a small 8 or 15 above or below the clef at the beginning. This octave -mark can be applied to any clef, but it is most frequently used with the G and F -clefs. - -@seealso -@ref{F clef}, @ref{G clef}, @ref{loco}, @ref{octave marking}. - - -@node octave marking -@section octave marking - -ES: a la octava, -I: all'ottava, -F: octaviation, -D: Oktavierung, -NL: octaveren, -DK: oktavering, -S: oktavering, -FI: oktaavamerkintä. - -The practice of marking music -- an entire staff, a passage, etc. -- to indicate -that it is to be played in a different octave. If applied to the clef at the -beginning of the staff, all music on that staff is to played at the indicated -octave. - -For a list of the specific marks used, see @ref{octave mark}. - -@seealso -@ref{interval}, @ref{loco}, @ref{octave}, @ref{octave mark}. - - -@node octave sign -@section octave sign - -@seealso -@ref{octave mark}. - - -@node ornament -@section ornament - -ES: adorno, -I: abbellimento, fioriture, -F: agrément, ornement, -D: Verzierung, Ornament, -NL: versiering, -DK: forsiring, -S: ornament, -FI: koru, hele. - -Most commonly used is the @emph{trill}, the rapid alternation of a given note -with the diatonic @ref{second} above it. In the music from the -middle of the 19th century and onwards the trill is performed with the main -note first while in the music from the preceding baroque and classic periods -the upper note is played first. - -@lilypond[quote,line-width=13.0\cm] -<< - \context Staff = sa { - \relative c'' { - c2._"pre-1850" b4\trill | c1 \bar "||" - c2._"post-1850" b4\trill | c1 \bar "||" - } - } - \relative c'' { - c2. c32 b c b c b c b | c1 - c2. b32 c b c \times 4/5 { b c b c b } | c1 - } ->> -@end lilypond - -Other frequently used ornaments are the @emph{turn}, the @emph{mordent}, and -the -@emph{prall} (inverted mordent). - -@lilypond[quote,line-width=13.0\cm] -<< - \context Staff = sa { - \relative c'' { - a4_"turn" b\turn c2 \bar "||" - g4_"mordent" a b\mordent a \bar "||" - e'4_"prall" d\prall c2 \bar "||" - } - } - \relative c'' { - a4 c16[ b a b] c2 - g4 a b16-[ a b8] a4 - e'4 e32[ d e d ~ d8] c2 - } ->> -@end lilypond - -@seealso -@ref{acciaccatura}, @ref{appoggiatura}, @ref{grace notes}. - - -@node ossia -@section ossia - -ES: ossia, -I: ossia, -F: ossia, alternative, -D: Ossia, -NL: alternatief, -DK: ossia, -S: ossia, -FI: ossia, vaihtoehtoinen esitystapa. - -Ossia (otherwise) marks an alternative. It is an added staff or piano -score, usually only a few measures long, which presents another version -of the music, for example for small hands. - -@seealso -No cross-references. - - -@node part -@section part - -ES: parte, -I: voce, parte, -F: partie, -D: Stimme, -NL: partij, -DK: stemme, -S: stämma, -FI: stemma, instrumenttiosuus. - -@itemize - -@item In instrumental or choral music, the music for a single -instrument or voice. - -@item in contrapuntal music, a single melodic line in the contrapuntal -web. - -@end itemize - -@seealso -@ref{counterpoint} - - -@node pause -@section pause - -@seealso -@ref{fermata}. - - -@node pennant -@section pennant - -@seealso -@ref{flag}. - - -@node percent repeat -@section percent repeat - -LilyPond-specific term to indicate the repetition of a musical expression on a -single staff, as opposed to the more usual definition of repeat, which affects -all parts. The musical expression can be anything from a single note or note -pattern to one or more measures. There are other names for this symbol: - -@itemize - -@item simile mark -@item slash mark, or slash repeat -@item beat repeat -@item measure (or multi-measure) repeat - -@end itemize - -@lilypond[quote,relative=2,line-width=13.0\cm] -\time 4/4 - \repeat percent 4 { c4_"Beat (or slash) repeat" } - \repeat percent 2 { c4 e g b_"Measure repeat" } - \repeat percent 2 { c,2 es | f4 fis g c_"Multi-measure repeat" | } -@end lilypond - -@seealso -@ref{repeat}, -@uref{http://www.music.vt.edu/musicdictionary/textr/Repeat.html,University of -Vermont Music Dictionary}. - - -@node percussion -@section percussion - -ES: percusión, -I: percussioni, -F: percussion, -D: Schlagzeug, Schlagwerk, -NL: slagwerk, -DK: slagtøj, -S: slagverk, -FI: lyömäsoittimet. - -A family of musical instruments which are played on by striking or -shaking. Percussion instruments commonly used in a symphony orchestra are -kettledrums (I: @emph{timpani}, D: @emph{Pauken}), snare drum, bass drum, -tambourine, cymbals, chinese gong (tam-tam), triangle, celesta, glockenspiel, -and xylophone. - -@seealso -No cross-references. - - -@node perfect interval -@section perfect interval - -ES: intervalo justo, -I: intervallo giusto, -F: intervalle juste, -D: reines Intervall, -NL: rein interval, -DK: rent interval, -S: rent intervall, -FI: puhdas intervalli. - -@seealso -@ref{interval}. - - -@node phrase -@section phrase - -ES: frase, -I: frase, -F: phrase, -D: Phrase, -NL: frase, zin, -DK: frase, -S: fras, -FI: fraasi, lause. - -A natural division of the melodic line, comparable to a sentence of speech. - -@seealso -@ref{caesura}. - - -@node phrasing -@section phrasing - -ES: fraseo, -I: fraseggio, -F: phrasé, -D: Phrasierung, -NL: frasering, -DK: frasering, -S: fra@-se@-ring, -FI: fraseeraus, jäsentäminen. - -The clear rendering in musical performance of the @notation{phrases} of the -melody. Phrasing may be indicated by a @notation{slur}. - -@seealso -@ref{phrase}, @ref{slur}. - - -@node piano -@section piano - -ES: piano, -I: piano, -F: piano, -D: piano, leise, -NL: piano, -DK: piano, -S: piano, -FI, piano, hiljaa. - -@emph{piano} (@b{p}) soft, @emph{pianissimo} (@b{pp}) very soft, -@emph{mezzo piano} (@b{mp}) medium soft. - -@seealso -No cross-references. - - -@node pickup -@section pickup - -ES: anacrusa, -I: anacrusi, -F: anacrouse, levée, -D: Auftakt, -NL: opmaat, -DK: optakt, -S: upptakt, -FI: kohotahti. - -@seealso -@ref{anacrusis}. - - -@node pitch -@section pitch - -ES: altura, -I: altezza, -F: hauteur, -D: Tonhöhe, -NL: toonhoogte, -DK: tonehøjde, -S: tonhöjd, -FI: sävelkorkeus. - -@enumerate - -@item The perceived quality of a sound that is primarily a function of its -fundamental frequency. - -@item [FR. ton; DE. Ton; ES. tono] Any point on the continuum of musical pitch. - -@item [FR. diapason; DE. Kammerton, Stimmung; ES. diapasón] The standardized -association of a particular frequency with a particular pitch name, e.g., c' = -256 Hz. - -@end enumerate - -@seealso -@ref{Pitch names}. - - -@node pizzicato -@section pizzicato - -ES: pizzicato, -I: pizzicato, -F: pizzicato, -D: pizzicato, -NL: pizzicato, getokkeld, -DK: pizzicato, -S: pizzicato, -FI: pizzicato, näppäillen. - -A technique for stringed instruments, abbr. @emph{pizz}. To play by plucking -the strings. - -@seealso -No cross-references. - - -@node polymeter -@section polymeter - -ES: compás polimétrico, -I: ?, -F: polymétrie, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: monia tahtiosoituksia sisältävä. - -@itemize - -@item The @emph{simultaneous} use of two or more meters, in two or more -parts. - -@item The @emph{successive} use of different meters in one or more parts. - -@end itemize - -@seealso -@ref{polymetric} (adj.) - - -@node polymetric -@section polymetric - -ES: polimétrico, -I: ?, -F: polymétrique, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: monia tahtiosoituksia yhtäaikaa tai peräkkäin sisältävä. - -Characterized by @emph{polymeter}: using two or more metric frameworks -simultaneously or in alternation. - -@seealso -@ref{polymeter} (noun) - - -@node polymetric time signature -@section polymetric time signature - -ES: compás polimétrico, -I: ?, -F: ?, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: vaihtelevan tahtiosoitusmerkintä. - -A time signature that indicates regularly alternating polymetric time. - -@seealso -@ref{polymetric}. - - -@node polyphony -@section polyphony - -ES: polifonía, -I: polifonia, -F: polyphonie, -D: Polyphonie, Mehrstimmigkeit, -NL: polyfonie, -DK: polyfoni, -S: polyfoni, -FI: polyfonia, moniäänisyys. - -Music written in a combination of several simultaneous voices (parts) -of a more or less pronounced individuality. - -@seealso -@ref{counterpoint}. - - -@node portato -@section portato - -[Italian: past participle of @emph{portare}, @q{to carry}] - -A stroke in which each of several notes is separated slightly within a slur, -without changing the bow's direction. It is used for passages of a -@notation{cantabile} character. - -@seealso -@ref{legato}. - - -@node presto -@section presto - -ES: presto, -I: presto, -F: presto, très rapide, enlevé, -D: Presto, Sehr schnell, -NL: presto, Sehr schnell, -DK: presto, -S: presto, -FI: presto, hyvin nopeasti. - -[Italian] - -Very quick, i.e., quicker than @ref{allegro}; @emph{prestissimo} -denotes the highest possible degree of speed. - -@seealso -No cross-references. - - -@node proportion -@section proportion - -ES: proporción, -I: proprozione (?), -F: proportion, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: suhde. - -[Latin: @emph{proportio}] Described in great detail by Gaffurius, in -@emph{Practica musicae} (published in Milan in 1496). In mensural notation, -proportion is: - -@enumerate - -@item A ratio that expresses the relationship between the note values that -follow with those that precede; - -@item A ratio between the note values of a passage and the @q{normal} -relationship of note values to the metrical pulse. (A special case of the -first definition.) - -@end enumerate - -The most common proportions are: - -@itemize -@item 2:1 (or simply 2), expressed by a vertical line through the -mensuration sign (the origin of the @notation{alla breve} time signature), -or by turning the sign backwards -@item 3:1 (or simply 3) -@item 3:2 (@emph{sesquialtera}) -@end itemize - -To @q{cancel} any of these, the inverse proportion is applied. Thus: - -@itemize -@item 1:2 cancels 2:1 -@item 1:3 cancels 3:1 -@item 2:3 cancels 3:2 -@item and so on. -@end itemize - -Gaffurius enumerates five basic types of major:minor proportions and their -inverses: - -@enumerate -@item Multiplex, if the major number is an exact multiple of the minor (2:1, -3:1, 4:2, 6:3); and its inverse, Submultiplex (1:2, 1:3, 2:4, 3:6) - -@item Epimoria or Superparticular [orig. @emph{Epimoria seu Superparticularis}], -if the major number is one more than the minor (3:2, 4:3, 5:4); and its -inverse, Subsuperparticular (2:3, 3:4, 4:5) - -@item Superpartiens, if the major number is one less than twice the minor -(5:3, 7:4, 9:5, 11:6); and its inverse, subsuperpartiens (3:5, 4:7, 5:9, 6:11) - -@item Multiplexsuperparticular, if the major number is one more than twice the -minor (5:2, 7:3, 9:4); and its inverse, Submultiplexsuperparticular (2:5, 3:7, -4:9) - -@item Multiplexsuperpartiens, if the major number is one less than some other -multiple (usually three or four) of the minor (8:3, 11:4, 14:5, 11:3); and its -inverse, Submultiplexsuperpartiens (3:8, 4:11, 5:14, 3:11) - -@end enumerate - -He then continues to subdivide each type in various ways. For the multiplex -proportions, for example, he indicates how many times greater the major number -is than the minor: - -@itemize - -@item If two times greater, the proportion is @emph{dupla}. If inverted, it's -called @emph{subdupla}. Examples: 2:1, 4:2, and 6:3. - -@item If three, @emph{tripla}; and its inversion, @emph{subtripla}. Example: -3:1, 6:2, and 9:3. - -@item If four, @emph{quadrupla}; and its inversion, @emph{subquadrupla}. -Example: 4:1, 8:2, and 12:3 - -@end itemize - -Other proportions were possible, but whether they were frequently used is -another question: - -@itemize - -@item 33:9, @emph{triplasuperbipartientetertias} -@item 51:15, @emph{triplasuperbipartientequintas} - -@end itemize - -@c TODO: add an example or two. O => 4/3, and its modern equivalent - -@seealso -@ref{mensural notation}. - - -@node Pythagorean comma -@section Pythagorean comma - -ES: coma pitagórica, -I: comma pitagorico, -F: comma pythagoricien, -D: Pythagoräisches Komma, -NL: komma van Pythagoras, -DK: pythagoræisk komma, -S: pytagoreiskt komma, -FI: pytagorinen komma. - -Originally, the interval by which the sum of six whole tones exceeds the octave --- (9:8)^6 - 2:1 = 531441:524288, or 23.5 cents. - -Modern acoustical theory defines it as the interval by which twelve fifths -exceed seven octaves. To put it another way: A sequence of fifths that starts -on C eventually circles back to C. However, this C is 23.5 @ref{cent}s higher -than the C obtained by adding 7 octaves. The difference between those two -pitches is the Pythagorean comma. - -@seealso -@ref{cent}, @ref{temperament}. - - -@node quadruplet -@section quadruplet - -ES: cuatrillo, -I: quartina, -F: quartolet, -D: Quartole, -NL: kwartool, -DK: kvartol, -S: kvartol, -FI: kvartoli. - -@seealso -@ref{note value}. - - -@node quality -@section quality - -ES: ?, -I: qualità (?), -F: qualité (?), -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: laatu. - -The quality of a triad is determined by the precise arrangement of its -intervals. Tertian triads can be described as a series of three notes. The -first element is the root note (or simply @q{root}) of the chord, the second -note is the @q{third} of the chord, and the last note is the @q{fifth} of -the chord. These are described below: - -@multitable {Chord name} {Component intervals} {Example} {C, CM, Cma, Cmaj, CΔ} -@headitem Chord name - @tab Component intervals - @tab Example - @tab Symbol -@item major triad @tab major third/perfect fifth - @tab C-E-G - @tab C, CM, Cma, Cmaj, CΔ -@item minor triad @tab minor third/perfect fifth - @tab C-E♭-G - @tab Cm, Cmi, Cmin, C- -@item augmented triad @tab major third/augmented fifth - @tab C-E-G♯ - @tab C+, C^+, Caug -@item diminished triad @tab minor third/diminished fifth - @tab C-E♭-G♭ - @tab Cm(♭5), Cº, Cdim -@end multitable - -There are various types of seventh chords depending on the quality of the -original chord and the quality of the seventh added. - -Five common types of seventh chords have standard symbols. The chord quality -indications are sometimes superscripted and sometimes not (e.g. Dm7, Dm^7, -and D^m7 are all identical). The last three chords are not commonly used -except in jazz. - -@seealso -@ref{chord}. - - -@node quarter note -@section quarter note - -@itemize -@item UK: crotchet -@item ES: negra -@item I: semiminima, nera -@item F: noire -@item D: Viertel, Viertelnote -@item NL: kwartnoot -@item DK: fjerdedelsnode -@item S: fjärdedelsnot -@item FI: neljäsosanuotti -@end itemize - -@seealso -@ref{note value}. - - -@node quarter rest -@section quarter rest - -@itemize -@item UK: crotchet rest -@item ES: silencio de negra -@item I: pausa di semiminima -@item F: soupir -@item D: Viertelpause -@item NL: kwartrust -@item DK: fjerdedelspause -@item S: fjärdedelspaus -@item FI: neljäsosatauko -@end itemize - -@seealso -@ref{note value}. - - -@node quarter tone -@section quarter tone - -ES: cuarto de tonno, -I: ?, -F: quart de ton, -D: Viertelton, -NL: kwart toon, -DK: ?, -S: kvartston, -FI: neljännessävelaskel. - -An interval equal to half a semitone. - -@seealso -@ref{interval} - - -@node quintuplet -@section quintuplet - -ES: cinquillo, quintillo. -I: quintina, -F: quintolet, -D: Quintole, -NL: kwintool, -DK: kvintol, -S: kvintol, -FI: kvintoli. - -@seealso -@ref{note value}. - - -@node rallentando -@section rallentando - -ES: rallentando, -I: rallentando, -F: rallentando, en ralentissant, -D: rallentando, langsamer werden, -NL: rallentando, -DK: rallentando, -S: rallentando, -FI: rallerdando, hidastuen. - -[Italian] A performance indication, abbreviated "rall.". - -@seealso -@ref{ritardando}. - - -@node relative key -@section relative key - -ES: tono relativo, -I: tonalità relativa, -F: tonalité relative, -D: Paralleltonart, -NL: paralleltoonsoort, -DK: paralleltoneart, -S: parallelltonart, -FI: rinnakkaissävellaji. - -Major and minor keys that have the same key signature. - -@lilypond[quote,notime,relative=1,line-width=13.0\cm] -\key es \major -es1_"e flat major" f g as bes c d es -\bar "||" -@end lilypond - -@lilypond[quote,notime,relative=1,line-width=13.0\cm] -\key c \minor -c1_"c minor" d es f g a! b! c -\bar "||" -@end lilypond - -@seealso -@ref{key}, @ref{key signature}, @ref{major}, @ref{minor}. - - -@node repeat -@section repeat - -ES: repetición, -I: ritornello, -F: barre de reprise, -D: Wiederholung, -NL: herhaling, -DK: gen@-ta@-gel@-se, -S: repris, -FI: toisto. - -@lilypond[quote,relative=2,line-width=13.0\cm] -\key g \major -\time 4/4 -\repeat volta 2 { - g4 g d' d - e4 e d2 - c4 c b b - a a g2 -} -@end lilypond - -@seealso -No cross-references. - - -@node rest -@section rest - -ES: silencio, -I: pausa, -F: silence, -D: Pause, -NL: rust, -DK: pause, -S: paus, -FI: tauko. - -@c F: 'pause' if you mean a whole rest, 'silence' if you do not want to -@c specify the rest's value. - -@seealso -@ref{note value}. - - -@node rhythm -@section rhythm - -ES: ritmo, -I: ritmo, -F: rythme, -D: Rhythmus, -NL: ritme, -DK: rytme, -S: rytm, -FI: rytmi. - -@itemize - -@item Metrical rhythm in which every time value is a multiple or -fraction of a fixed unit of time, called @ref{beat}, and in which the -normal @ref{accent} recurs in regular intervals, called @ref{measure}. -The basic scheme of time values is called @ref{meter}. - -@item Measured rhythm which lacks regularly recurrent accent. In -modern notation such music appears as a free alternation of different -measures. - -@item Free rhythm, i.e., the use of temporal values having no common -metrical unit (beat). - -@end itemize - -@seealso -No cross-references. - - -@node ritardando -@section ritardando - -ES: ritardando, -I: ritardando, -F: ritardando, en ralentissant, -D: ritardando, langsamer werden, -NL: ritardando, -DK: ritardando, -S: ritardando, -FI: ritardando, hidastuen, - -Gradually slackening in speed. Mostly abbreviated to rit.@: or ritard. - -@seealso -No cross-references. - - -@node ritenuto -@section ritenuto - -ES: ritenuto, -I: ritenuto, -F: ritenuto, en retenant, -D: ritenuto, -NL: ritenuto, -DK: ritenuto, -S: ritenuto, -FI: ritenuto, hidastaen. - -Immediate reduction of speed. - -@seealso -No cross-references. - - -@node scale -@section scale - -ES: escala, -I: scala, -F: gamme, -D: Tonleiter, -NL: toonladder, -DK: Skala, -S: skala, -FI: asteikko, sävelasteikko. - -@seealso -@ref{diatonic scale}. - - -@node scale degree -@section scale degree - -ES: grado (de la escala), -I: grado della scala, -F: degré [de la gamme], -D: Tonleiterstufe, -NL: trap [van de toonladder], -DK: skalatrin, -S: skalsteg (?), -FI: sävelaste, asteikon sävel. - -Names and symbols used in harmonic analysis to denote tones of the -scale as roots of chords. The most important are degrees I = tonic -(T), IV = sub@-do@-mi@-nant (S) and V = dominant (D). - -@lilypond[quote,notime,line-width=13.0\cm] -<< -\new Staff \relative c' { - c1 d e f g a b c -} - \lyrics { - << { I II III IV V VI VII I } - { T "" "" S D } >> -} ->> -@end lilypond - -@seealso -@ref{functional harmony}. - - -@node scordatura -@section scordatura - -ES: encordado, -I: scordatura, -F: à cordes ravallées, -D: Skordatur, -NL: ?, -DK: ?, -S: ?, -FI: epätavallinen viritys. - -[Italian: @emph{scordare}, @q{to mistune}] Unconventional -tuning of stringed instruments, particularly lutes or violins. Used -to: - -@itemize - -@item facilitate pitch combinations that would otherwise be difficult -or impossible - -@item alter the characteristic timbre of the instrument, for example, -to increase brilliance - -@item reinforce certain sonorities or tonalities by making them -available on open strings - -@item imitate other instruments - -@item etc. - -@end itemize - -Tunings that could be called @var{scordatura} first appeared early in -the 16th Century and became commonplace in the 17th. - -@seealso -No cross-references. - - -@node score -@section score - -ES: partitura, -I: partitura, -F: partition, conducteur (full score), -D: Partitur (full score), Klavierauszug (vocal score), -NL: partituur, -DK: partitur, -S: partitur, -FI: partituuri. - -A copy of orchestral, choral, or chamber music showing what each -instrument is to play, each voice to sing, having each part arranged -one underneath the other on different staves @ref{staff}. - -@seealso -No cross-references. - - -@node second -@section second - -ES: segunda, -I: secunda, -F: seconde, -D: Sekunde, -NL: secunde, -DK: sekund, -S: sekund, -FI: sekunti. - -The interval between two neighboring tones of a scale. A diatonic scale -consists of alternating semitones and whole tones, hence the size of a -second depends on the scale degrees in question. - -@seealso -@ref{diatonic scale}, @ref{interval}, @ref{semitone}, @ref{whole tone}. - - -@node semibreve -@section semibreve - -@itemize -@item US: whole note, -@item ES: redonda, -@item I: semibreve, -@item F: ronde, -@item D: Ganze, ganze Note, -@item NL: hele noot, -@item DK: helnode, -@item S: helnot, -@item FI: kokonuotti. -@end itemize - -Note value: called @notation{whole note} in the US. - -The semibreve is the basis for the @notation{tactus} in mensural notation -(i.e. music written before ca. 1600). - -@seealso -@ref{mensural notation}, @ref{note value}. - - -@node semitone -@section semitone - -ES: semitono, -I: semitono, -F: demi-ton, -D: Halbton, -NL: halve toon, -DK: halvtone, -S: halvton, -FI: puolisävel. - -The interval of a minor second. The (usually) smallest interval in European -composed music. The interval between two neighboring tones on the piano -keyboard -- including black and white keys -- is a semitone. An octave may -be divided into 12@w{ }semitones. - -@lilypond[quote,notime,relative=2,line-width=13.0\cm] -g1 gis s a bes s b! c -@end lilypond - -@seealso -@ref{interval}, @ref{chromatic scale}. - - -@node seventh -@section seventh - -ES: séptima, -I: settima, -F: septième, -D: Septime, -NL: septiem, -DK: septim, -S: septim, -FI: septimi. - -@seealso -@ref{interval}. - - -@node sextolet -@section sextolet - -@seealso -@ref{sextuplet}, @ref{note value}. - - -@node sextuplet -@section sextuplet - -ES: seisillo, -I: sestina, -F: sextolet, -D: Sextole, -NL: sextool, -DK: sekstol, -S: sextol, -FI: sekstoli. - -@seealso -@ref{note value}. - - -@node shake -@section shake - -@seealso -@ref{trill}. - - -@node sharp -@section sharp - -ES: sostenido, -I: diesis, -F: dièse, -D: Kreuz, -NL: kruis, -DK: kryds, -S: kors@-förtecken, -FI: korotusmerkki. - -@seealso -@ref{accidental}. - - -@node simile -@section simile - -ES: simile, -I: simile, -F: simile, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: samoin. - -[Italian: @q{in the same manner}] Performance direction: the music thus marked -is to be played in the same manner (i.e. with the same articulations, dynamics, -etc.) as the music that precedes it. - -@seealso -TODO: Where else could I refer the reader? - - -@node simple meter -@section simple meter - -ES: compás simple, compás de subdivisión binaria, -I: ?, -F: mesure binaire, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: kaksijakoinen tahtiosoitus. - -A meter in which the basic beat is subdivided in two: that is, a meter -that does not include triplet subdivision of the beat. - -@seealso -@ref{compound meter}, @ref{meter}. - - -@node sixteenth note -@section sixteenth note - -@itemize -@item UK: semiquaver -@item ES: semicorchea -@item I: semicroma -@item F: double croche -@item D: Sechzehntel, Sechzehntelnote -@item NL: zestiende noot -@item DK: sekstendedelsnode -@item S: sextondelsnot -@item FI: kuudestoistaosanuotti -@end itemize - -@seealso -@ref{note value}. - - -@node sixteenth rest -@section sixteenth rest - -@itemize -@item UK: semiquaver rest -@item ES: silencio de semicorchea -@item I: pausa di semicroma -@item F: quart de soupir -@item D: Sechzehntelpause -@item NL: zestiende rust -@item DK: sekstendedelspause -@item S: sextondelspaus -@item FI: kuudestoistaosatauko -@end itemize - -@seealso -@ref{note value}. - - -@node sixth -@section sixth - -ES: sexta, -I: sesta, -F: sixte, -D: Sexte, -NL: sext, -DK: sekst, -S: sext, -FI: seksti. - -@seealso -@ref{interval}. - - -@node sixty-fourth note -@section sixty-fourth note - -@itemize -@item UK: hemidemisemiquaver -@item ES: semifusa -@item I: semibiscroma -@item F: quadruple croche -@item D: Vierundsechzigstel, Vierundsechzigstelnote -@item NL: vierenzestigste noot -@item DK: fi@-re@-og@-tred@-sinds@-ty@-ven@-de@-dels@-no@-de -@item S: sextiofjärdedelsnot -@item FI: kuudeskymmenesneljäsosanuotti -@end itemize - -@seealso -@ref{note value}. - - -@node sixty-fourth rest -@section sixty-fourth rest - -@itemize -@item UK: hemidemisemiquaver rest -@item ES: silencio de semifusa -@item I: pausa di semibiscroma -@item F: seizième de soupir -@item D: Vierundsechzigstelpause -@item NL: vierenzestigste rust -@item DK: fi@-re@-og@-tred@-sinds@-ty@-ven@-de@-dels@-pau@-se -@item S: sextiofjärdedelspaus -@item FI: kuudeskymmenesneljäsosatauko -@end itemize - -@seealso -@ref{note value}. - - -@node slash repeat -@section slash repeat - -@seealso -@ref{percent repeat}. - - -@node slur -@section slur - -ES: ligadura (de expresión), -I: legatura (di portamento or espressiva), -F: liaison, coulé, -D: Bogen (Legatobogen, Phrasierungsbogen), -NL: fraseringsboog, legatoboog, streekboog, -DK: legatobue, fraseringsbue, -S: båge, -FI: kaari. - -A slur above or below a group of notes indicates that they are to be -played @ref{legato}, e.g., with one stroke of the violin bow or with -one breath in singing. - -@seealso -No cross-references. - - -@node solmization -@section solmization - -ES: solmisación, -I: solmisazione, -F: solmisation, -D: Solmisation, -NL: solmizatie, -DK: solmisation, -S: solmisation, -FI: suhteelliset laulunimet. - -General term for systems of designating the degrees of the -@notation{scale}, not by letters, but by syllables (@emph{do} (@emph{ut}), -@emph{re}, @emph{mi}, @emph{fa}, @emph{sol}, @emph{la}, @emph{si} -(@emph{ti})). - -@seealso -@ref{scale}, @ref{scale degree}. - - -@node sonata -@section sonata - -ES: sonata, -I: sonata, -F: sonate, -D: Sonate, -NL: sonate, -DK: sonate, -S: sonat, -FI: sonaatti. - -In its present-day meaning a sonata denotes an instrumental -composition for piano or for some other instrument with piano -accompaniment, which consists of three or four independant pieces, -called movements. - -@seealso -No cross-references. - - -@node sonata form -@section sonata form - -ES: forma sonata, -I: forma sonata, -F: [en] forme de sonate, -D: Sonatenform, -NL: hoofdvorm, sonatevorm, -DK: sonateform, -S: sonatform, -FI: sonaattimuoto. - -A form used frequently for single movements of the @emph{sonata}, -@emph{symphony}, quartet, etc. A movement written in sonata form falls into -three sections called @notation{exposition}, @notation{development} and -@notation{recapitulation}. In the exposition the composer introduces some -musical ideas, consisting of a number of themes; in the development section the -composer @emph{develops} this material, and in the recapitulation the composer -repeats the exposition, with certain modifications. The exposition contains a -number of themes that fall into two groups, often called first and second -subject. Other melodies occurring in each group are considered as continuations -of these two. The second theme is in another key, normally in the key of the -@notation{dominant} if the @notation{tonic} is @notation{major}, and in the -@notation{relative key} if the tonic is @notation{minor}. - -@seealso -@ref{dominant}, @ref{major}, @ref{minor}, @ref{relative key}, @ref{sonata}, -@ref{symphony}, @ref{tonic}. - - -@node song texts -@section song texts - -@seealso -@ref{lyrics}. - - -@node soprano -@section soprano - -ES: soprano, -I: soprano, -F: soprano, -D: Sopran, -NL: sopraan, -DK: sopran, -S: sopran, -FI: sopraano, korkea naisääni. - -The highest female voice. - -@seealso -No cross-references. - - -@node staccato -@section staccato - -ES: picado, -I: staccato, -F: staccato, piqué, détaché, -D: staccato, -NL: staccato, -DK: staccato, -S: staccato, -FI: staccato, lyhyesti, terävästi. - -Playing the note(s) short. Staccato is indicated by a dot above or -below the note head. - -@lilypond[quote,relative=2] -\key d \major -\time 4/4 - \partial 8 a8 | - d4-\staccato cis-\staccato b-\staccato cis-\staccato | - d2. - \bar "||" -@end lilypond - -@seealso -No cross-references. - - -@node staff -@section staff - -UK: stave, -ES: pentagrama, -I: pentagramma, rigo (musicale), -F: portée, -D: Notensystem, Notenzeile, -NL: (noten)balk, partij, -DK: nodesystem, -S: notsystem, -FI: nuottiviivasto. - -A staff (plural: staves) is a series of (normally five) horizontal -lines upon and between which the musical notes are written, thus -indicating (in connection with a @ref{clef}) their pitch. Staves for -@ref{percussion} instruments may have fewer lines. - -@seealso -No cross-references. - - -@node staves -@section staves - -@seealso -@ref{staff}. - - -@node stem -@section stem - -ES: plica, -I: gamba, -F: hampe, -D: Hals, Notenhals, Stiel, -NL: stok, -DK: hals, -S: skaft, -FI: nuottipalkki. - -Vertical line above or below a @ref{note head} shorter than a -whole note. - -@lilypond[quote,notime,relative=2] -\set Score.autoBeaming = ##f - g2_"1/2" g' s16 - g,4_"1/4" g' s16 - g,8_"1/8" g' s16 - g,16_"1/16" g' s16 -@end lilypond - -@seealso -@ref{beam}. - - -@node stringendo -@section stringendo - -ES: ?, -I: stringendo, -F: stringendo, en accélérant, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: kiihdyttäen, nopeuttaen. - -[Italian: @q{pressing}] Pressing, urging, or hastening the time, as to a -climax. - -@seealso -@ref{accelerando}. - - -@node strings -@section strings - -ES: arcos, cuerdas, -I: archi, -F: cordes, -D: Streicher, -NL: strijkers, -DK: strygere, -S: stråkar, -FI: jouset. - -A family of stringed musical instruments played with a bow. Strings -commonly used in a symphony orchestra are violin, viola, violoncello, -and double bass. - -@seealso -No cross-references. - - -@node strong beat -@section strong beat - -ES: tiempo fuerte, -I: tempo forte, -F: temps fort, -D: betonter Taktteil oder Taktschlag, -NL: thesis, -D: betonet taktslag, -S: betonat taktslag, -FI: tahdin vahva isku. - -@seealso -@ref{beat}, @ref{accent}, @ref{measure}, @ref{rhythm}. - - -@node subdominant -@section subdominant - -ES: subdominante, -I: sottodominante, -F: sous-dominante, -D: Subdominante, -NL: subdominant, -DK: subdominant, -S: subdominant, -FI: subdominantti, alidominantti. - -The fourth @notation{scale degree}. - -@seealso -@ref{functional harmony}, @ref{scale degree}. - - -@node submediant -@section submediant - -ES: submediante, -I: sopratonica, -F: sous-médiante, -D: Submediante, -NL: submediant, -DK: Submediant, -S: submediant, -FI: alikeskisävel. - -The sixth @notation{scale degree}. - -@seealso -@ref{functional harmony}, @ref{scale degree}, @ref{superdominant}. - - -@node subtonic -@section subtonic - -ES: subtónica, -I: sottotonica, -F: sous-tonique, -D: Subtonika, -NL: subtonica, -DK: Subtonika, -S: subtonika, -FI: subtoonika, alitoonika. - -The seventh @ref{scale degree}. - -@seealso -@ref{functional harmony}, @ref{scale degree}. - - -@node sul G -@section sul G - -ES: sobre la cuerda de Sol, -I: sul g, -F: sur la G, -D: auf G, auf der G-Saite, -NL: ?, -DK: ?, -S: ?, -FI: G-kielellä. - -Indicates that the indicated passage (or note) should be played on the -G string. - -@seealso -No cross-references. - - -@node superdominant -@section superdominant - -ES: superdominante, -I: sopradominante, -F: sus-dominante, -D: Superdominante, -NL: superdominant, -DK: superdominant, -S: superdominant, -FI: ylidominantti. - -The sixth @ref{scale degree}. - -@seealso -@ref{functional harmony}, @ref{scale degree}, @ref{submediant}. - - -@node supertonic -@section supertonic - -ES: supertónica, -I: sopratonica, -F: sus-tonique, -D: Supertonika, -NL: supertonica, -DK: supertonika, -S: supertonika, -FI: ylitoonika. - -The second @ref{scale degree}. - -@seealso -@ref{functional harmony}, @ref{scale degree}. - - -@node symphony -@section symphony - -ES: sinfonía, -I: sinfonia, -F: symphonie, -D: Sinfonie, Symphonie, -NL: symfonie, -DK: symfoni, -S: symfoni, -FI: sinfonia. - -A symphony may be defined as a @emph{sonata} for orchestra. - -@seealso -@ref{sonata}. - - - -@node syncopation -@section syncopation - -ES: síncopa, -I: sincope, -F: syncope, -D: Synkope, -NL: syncope, -DK: synkope, -S: synkop, -FI: synkooppi. - -Any deliberate upsetting of the normal pulse of @ref{meter}, -@ref{accent}, and @ref{rhythm}. The occidental system of musical -rhythm rests upon the grouping of equal beats into groups of two or -three, with a regularly recurrent accent on the first beat of each -group. Any deviation from this scheme is felt as a disturbance or -contradiction between the underlaying (normal) pulse and the actual -(abnormal) rhythm. - -@lilypond[quote,relative=1] -\time 2/4 -\partial 8 d16 dis -e16 c'8 e,16 c'8 e,16 c' ~ -c4 -@end lilypond - -@seealso -No cross-references. - - -@node syntonic comma -@section syntonic comma - -ES: coma sintónica, coma de Dídimo, -I: comma sintonico (o didimico), -F: comma syntonique, -D: syntonisches Komma, -NL: syntonische komma, -DK: syntonisk komma, -S: syntoniskt komma, -FI: syntoninen komma, terssien taajuusero luonnollisessa ja -Pytagorisessa viritysjärjestelmässä. - -Named after Ptolemy's syntonic diatonic genus. Originally, the difference -by which the ditone exceeds the pure major third obtained by Pythagorean -tuning -- (9:8)^2 - 5:4 = 81:80, or 21.5@w{ }cents. - -Modern acoustical theory defines it as the interval by which four fifths exceed -the sum of two octaves plus a major third. (3:2)^4 - (2:1)^2 + (5:4) - -This comma is also known as the comma of Didymus, or didymic comma. - -@seealso -@ref{Pythagorean comma} - - -@node system -@section system - -ES: sistema, -I: accollatura, -F: système, -D: Notensystem, Partitur, -NL: systeem, -DK: system, -S: system, -FI: nuottijärjestelmä. - -The collection of staves (@notation{staff}), two or more, as used for writing -down of keyboard, chamber, choral, or orchestral music. - -@seealso -@ref{staff}. - - -@node temperament -@section temperament - -ES: temperamento, -I: temperamento, -F: tempérament, -D: Stimmung, Tem@-pe@-ra@-tur, -NL: stemming, temperatuur, -DK: temperatur, -S: temperatur, -FI: viritysjärjestelmä. - -Systems of tuning in which the intervals deviate from the acoustically -pure intervals. - -@seealso -@ref{meantone temperament}, @ref{equal temperament}. - - -@node tempo indication -@section tempo indication - -ES: indicación de tempo, -I: indicazione di tempo, -F: indication de tempo, -D: Zeitmaß, Tempobezeichnung, -NL: tempo aanduiding, -DK: tempobetegelse, -S: tempobeteckning, -FI: tempomerkintä. - -The rate of speed of a composition or a section thereof, ranging from the -slowest to the quickest, as is indicated by tempo marks as @notation{largo}, -@notation{adagio}, @notation{andante}, @notation{allegro}, and -@notation{presto}. - -@seealso -@ref{adagio}, @ref{allegro}, @ref{andante}, @ref{largo}, @ref{presto}. - - - -@node tenor -@section tenor - -ES: tenor, -I: tenore, -F: ténor, -D: Tenor, -NL: tenor, -DK: tenor, -S: tenor, -FI: tenori, korkea miesääni. - -The highest @q{natural} male voice (apart from @notation{countertenor}). - -@seealso -@ref{countertenor}. - - -@node tenth -@section tenth - -ES: décima, -I: decima, -F: dixième, -D: Dezime, -NL: deciem, -DK: decim, -S: decima, -FI: desimi. - -@seealso -@ref{note value}. - - -@node tenuto -@section tenuto - -ES: subrayado (tenuto), -I: tenuto, -F: tenue, tenuto, -D: gehalten, tenuo, -NL: tenuto, -DK: tenuto, -S: tenuto, -FI: viiva, tenuto. - -An indication that a particular note should be held for the whole -length, although this can vary depending on the composer and era. - -@seealso -No cross-references. - - -@node third -@section third - -ES: tercera, -I: terza, -F: tierce, -D: Terz, -NL: terts, -DK: terts, -S: ters, -FI: terssi. - -@seealso -@ref{interval}. - - -@node thirty-second note -@section thirty-second note - -@itemize -@item UK: demisemiquaver -@item ES: fusa -@item I: biscroma -@item F: triple croche -@item D: Zweiunddreissigstel, Zweiunddreissigstelnote -@item NL: twee@-endertig@-ste (32e) noot -@item DK: toogtredivtedelsnode -@item S: trettiotvåondelsnot -@item FI: kolmaskymmeneskahdesosanuotti -@end itemize - -@seealso -@ref{note value}. - - -@node thirty-second rest -@section thirty-second rest - -@itemize -@item UK: demisemiquaver rest -@item ES: silencio de fusa -@item I: pausa di biscroma -@item F: huitième de soupir -@item D: Zweiunddreissigstel@-pause -@item NL: twee@-endertig@-ste (32e) rust -@item DK: toogtredivtedelspause -@item S: trettiotvåondelspaus -@item FI: kolmaskymmeneskahdesosatauko -@end itemize - -@seealso -@ref{note value}. - - -@node thorough bass -@section thorough bass - -@seealso -@ref{figured bass}. - - -@node tie -@section tie - -ES: ligadura de prolongación, ligadura de unión, -I: legatura (di valore), -F: liaison (de tenue), -D: Haltebogen, Bindebogen, -NL: overbinding, bindingsboog, -DK: bindebue, -S: bindebåge, överbindning, -FI: sitominen. - -A curved line, identical in appearance with the @ref{slur}, which -connects two succesive notes of the same pitch, and which has the -function of uniting them into a single sound (tone) equal to the -combined durations. - -@lilypond[quote,notime,relative=2] -g2 ~ g4. r8 -@end lilypond - - -@node time -@section time - -@seealso -@ref{meter}. - - -@node time signature -@section time signature - -ES: indicación de compás, -I: segni di tempo, -F: métrique, chiffrage (chiffres indicateurs), indication de mesure, -D: Taktangabe, Angabe der Taktart, -NL: maatsoort, -DK: taktangivelse, -S: taktartssignatur, -FI: tahtiosoitus. - -The sign placed at the beginning of a composition to indicate its -meter. It most often takes the form of a fraction, but a few signs -derived from mensural notation and proportions are also employed. - -@seealso -@ref{mensural notation}, @ref{mensuration sign}, @ref{meter}. - - -@node tone -@section tone - -ES: tono, -I: suono, -F: ton, son, -D: Ton, -NL: toon, -DK: tone, -S: ton, -FI: ääni. - -A sound of definite pitch and duration, as distinct from @emph{noise}. -Tone is a primary building material of music. - -@c Music from the 20th century may be based on atonal sounds. Meh, not so much - -@seealso -No cross-references. - - -@node tonic -@section tonic - -ES: tónica, -I: tonica, -F: tonique, -D: Tonika, -NL: tonica, -DK: tonika, -S: tonika, -FI: toonika. - -The first @notation{scale degree}. - -@seealso -@ref{functional harmony}, @ref{scale degree}. - - -@node transposing instrument -@section transposing instrument - -ES: instrumento transpositor, -I: ?, -F: instrument transpositeur, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: transponoitava soitin. - -Instruments whose notated pitch is different from their sounded pitch. Except -for those whose notated and sounding pitches differ by one or more octaves (to -reduce the number of ledger lines needed), most such instruments are identified -by the letter name of the pitch class of their fundamental. The pitch class is -the note that @emph{sounds} (disregarding the octave in which it sounds) when -the instrument plays a notated C. - -For example: when played on the B-flat clarinet, the note middle C @emph{sounds} -the B-flat one tone lower. If played on the A clarinet, the same written -note sounds the A (one and half tones -- a minor third -- lower). - -Not all transposing instruments include the pitch class in their name: - -@itemize - -@item English horn (in F) - -@item Alto flute (in G) - -@end itemize - -@seealso -@ref{concert pitch}. - - -@node transposition -@section transposition - -ES: transporte, -I: trasposizione, -F: transposition, -D: Transposition, -NL: transpositie, -DK: transposition, -S: transponering, -FI: transponointi. - -Shifting a melody up or down in pitch, while keeping the same -relative pitches. - -@lilypond[quote,line-width=13.0\cm] -\context Staff { - \time 3/4 - \relative c'' { - \key g \major - d4 g,8 a b c | d4 g, g | e' c8 d e fis | g4 g, g \bar "|." - } -} -@end lilypond - -@lilypond[quote,line-width=13.0\cm] -\context Staff { - \time 3/4 - \transpose c bes \relative c'' { - \key g \major - d4 g,8 a b c | d4 g, g | e' c8 d e fis | g4 g, g \bar "|." - } -} -@end lilypond - -@seealso -No cross-references. - - -@node treble clef -@section treble clef - -ES: clave de sol, -I: chiave di violino, -F: clef de sol, -D: Violinschlüssel, Sopranschlüssel, -NL: viool sleutel, -DK: diskantnøgle, -S: diskantklav, -FI: diskanttiavain. - -@seealso -@ref{G clef}. - - -@node tremolo -@section tremolo - -ES: trémolo, -I: tremolo, -F: trémolo, -D: Tremolo, -NL: tremolo, -DK: tremolo, -S: tremolo, -FI: tremolo. - -On stringed instruments: - -@enumerate - -@item The quick reiteration of the same tone, produced by a rapid -up-and-down movement of the bow. - -@item Or, the rapid alternation between two notes of a @ref{chord}, usually -in the distance of a third (@ref{interval}). - -@end enumerate - -@lilypond[quote,notime,relative=1] - e2:32_"a" - f:32 [ e8:16 f:16 g:16 a:16 ] s4 - \repeat tremolo 8 { e32_"b" g } -@end lilypond - -@seealso -@ref{strings} - - -@node triad -@section triad - -ES: tríada, -I: triade, -F: triade, accord parfait, accord de trois sons, -D: Drei@-klang, -NL: drieklank, -DK: treklang, -S: treklang, -FI: kolmisointu. - -@seealso -@ref{chord}. - - -@node trill -@section trill - -ES: trino, -I: trillo, -F: trille, tremblement, battement (cadence), -D: Triller, -NL: triller, -DK: trille, -S: drill, -FI: trilli. - -@seealso -@ref{ornament}. - - -@node triple meter -@section triple meter - -ES: compás ternario, -I: tempo ternario, -F: mesure ternaire, -D: in drei, ungerader Takt, -NL: driedelige maatsoort, -DK: tredelt takt, -S: tretakt, -FI: kolmijakoinen. - -@seealso -@ref{meter}. - - -@node triplet -@section triplet - -ES: tresillo, -I: terzina, -F: triolet, -D: Triole, -NL: triool, -DK: triol, -S: triol, -FI: trioli. - -@seealso -@ref{note value}. - - -@node tritone -@section tritone - -ES: tritono, -I: tritono, -F: triton, -D: Tritonus, -NL: tritoon, -DK: tritonus, -S: tritonus, -FI: tritonus. - -@seealso -@ref{interval}. - - -@node tuning fork -@section tuning fork - -ES: diapasón, horquilla de afinación, -I: diapason, corista, -F: diapason, -D: Stimmgabel, -NL: stemvork, -DK: stemmegaffel, -S: stämgaffel, -FI: viritysavain. - -A two-pronged piece of steel used to indicate an absolute pitch, usually for -@emph{A} above middle C (440 cps/Hz), which is the international tuning -standard. Tuning forks for other pitches are available. - -@seealso -@ref{middle C}. - - -@node tuplet -@section tuplet - -A non-standard subdivision of a beat or part of a beat, usually -indicated with a bracket and a number indicating the number of -subdivisions. - -@seealso -@ref{triplet}, @ref{note value}. - - -@node turn -@section turn - -ES: grupeto (circular), -I: gruppetto, -F: grupetto, -D: Doppelschlag, -NL: dubbelslag, -DK: dobbeltslag, -S: dubbelslag, -FI: korukuvio. - -@seealso -@ref{ornament}. - - -@node unison -@section unison - -ES: unísono, -I: unisono, -F: unisson, -D: unisono, -NL: unisono, -DK: unison, -S: unison, -FI: unisono, yksiäänisesti. - -Playing of the same notes or the same melody by various instruments -(voices) or by the whole orchestra (choir), either at exactly the same -pitch or in a different octave. - -@seealso -No cross-references. - - -@node upbeat -@section upbeat - -ES: anacrusa, -I: anacrusi, -F: anacrouse, levée, -D: Auftakt, -NL: opmaat, -DK: optakt, -S: upptakt, -FI: kohotahti. - -@seealso -@ref{anacrusis} - - -@node voice -@section voice - -ES: voz, -I: voce, -F: voix, -D: Stimme, -NL: stem, -DK: stemme, -S: stämma, -FI: ääni, lauluääni. - -@itemize - - @item Human voices: - - @itemize - @item @ref{soprano} - @item @ref{mezzo-soprano} - @item @ref{contralto} - @item @ref{tenor} - @item @ref{baritone} - @item @ref{bass} - @end itemize - - @item A melodic layer or part of a polyphonic composition. - -@end itemize - -@seealso -No cross-references. - - -@node volta -@section volta - -ES: vez, primera y segunda vez, -I: volta, -F: volta, fois, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: yksi kertauksen maaleista. - -[Italian: @q{time} (instance, not duration)] An ending, such as a first -or second ending. LilyPond extends this idea to any number, and allows any text -(not just a number) -- to serve as the @notation{volta} text. - -@seealso -No cross-references. - - -@node weak beat -@section weak beat - -ES: tiempo débil, -I: tempo debole, arsi, -F: temps faible, -D: unbetonter Taktteil oder Taktschlag, -NL: arsis, -DK: ubetonet taktslag, -S: obetonat taktslag, -FI: tahdin heikko isku. - -@seealso -@ref{beat}, @ref{measure}, @ref{rhythm}. - - -@node whole note -@section whole note - -@itemize -@item UK: semibreve -@item ES: redonda -@item I: semibreve -@item F: ronde -@item D: Ganze, ganze Note -@item NL: hele noot -@item DK: helnode -@item S: helnot -@item FI: kokonuotti -@end itemize - -@seealso -@ref{note value}. - - -@node whole rest -@section whole rest - -@itemize -@item UK: semibreve rest -@item ES: silencio de redonda -@item I: pausa di semibreve -@item F: pause -@item D: ganze Pause, ganztaktige Pause -@item NL: hele rust -@item DK: helnodespause -@item S: helpaus -@item FI: kokotauko -@end itemize - -@seealso -@ref{note value}. - - -@node whole tone -@section whole tone - -ES: tono (entero), -I: tono intero, -F: ton entier, -D: Ganzton, -NL: hele toon, -DK: heltone, -S: helton, -FI: kokoaskel. - -The interval of a major second. The interval between two tones -on the piano keyboard with exactly one key between them -- including -black and white keys -- is a whole tone. - -@seealso -@ref{interval}. - - -@node woodwind -@section woodwind - -ES: maderas, -I: legni, -F: les bois, -D: Holzbläser, -NL: houtblazers, -DK træblæsere, -S: träblåsare, -FI: puupuhaltimet. - -A family of blown wooden musical instruments. Today some of these -instruments are actually made from metal. The woodwind instruments -commonly used in a symphony orchestra are flute, oboe, clarinet, -saxophone, and bassoon. - -@seealso -No cross-references. - - -@node Duration names notes and rests -@chapter Duration names notes and rests - -@multitable @columnfractions .12 .22 .22 .22 .22 - -@headitem Lang. @tab note name - @tab rest name - @tab note name - @tab rest name -@item @strong{US} @tab long - @tab long rest - @tab breve - @tab breve rest -@item @strong{UK} @tab longa - @tab longa rest - @tab breve - @tab breve rest -@item @strong{ES} @tab longa - @tab silencio de longa - @tab cuadrada - @tab silencio de cuadrada -@item @strong{IT} @tab longa - @tab pausa di longa - @tab breve - @tab pausa di breve -@item @strong{FR} @tab longa - @tab quadruple-pause - @tab brève - @tab double-pause -@item @strong{DE} @tab Longa - @tab longa Pause - @tab Brevis - @tab brevis Pause -@item @strong{NL} @tab longa - @tab longa rust - @tab brevis - @tab brevis rust -@item @strong{DK} @tab longa - @tab longanodespause - @tab brevis - @tab brevis(nodes)pause -@item @strong{SE} @tab longa - @tab longapaus - @tab brevis - @tab brevispaus -@item @strong{FI} @tab longa-nuotti - @tab longa-tauko - @tab brevis-nuotti, kaksoiskoko@-nuotti - @tab brevis-tauko, kaksoiskoko@-tauko - -@end multitable - -@multitable @columnfractions .12 .22 .22 .22 .22 - -@headitem Lang. @tab note name - @tab rest name - @tab note name - @tab rest name -@item @strong{US} @tab whole note - @tab whole rest - @tab half note - @tab half rest -@item @strong{UK} @tab semibreve - @tab semibreve rest - @tab minim - @tab minim rest -@item @strong{ES} @tab redonda - @tab silencio de redonda - @tab blanca - @tab silencio de blanca -@item @strong{IT} @tab semibreve - @tab pause di semibreve - @tab minima - @tab pausa di minima -@item @strong{FR} @tab ronde - @tab pause - @tab blanche - @tab demi-pause -@item @strong{DE} @tab ganze Note - @tab ganze Pause - @tab halbe Note - @tab halbe Pause -@item @strong{NL} @tab hele noot - @tab hele rust - @tab halve noot - @tab halve rust -@item @strong{DK} @tab helnode - @tab helnodespause - @tab halvnode - @tab halvnodespause -@item @strong{SE} @tab helnot - @tab helpaus - @tab halvnot - @tab halvpaus -@item @strong{FI} @tab kokonuotti - @tab kokotauko - @tab puolinuotti - @tab puolitauko - -@end multitable - -@multitable @columnfractions .12 .22 .22 .22 .22 - -@headitem Lang. @tab note name - @tab rest name - @tab note name - @tab rest name -@item @strong{US} @tab quarter note - @tab quarter rest - @tab eighth note - @tab eighth rest -@item @strong{UK} @tab crotchet - @tab crotchet rest - @tab quaver - @tab quaver rest -@item @strong{ES} @tab negra - @tab silencio de negra - @tab corchea - @tab silencio de corchea -@item @strong{IT} @tab semiminima, nera - @tab pausa di semiminima, pausa di nera - @tab croma - @tab pausa di croma -@item @strong{FR} @tab noire - @tab soupir* - @tab croche* - @tab demi-soupir -@item @strong{DE} @tab Viertelnote - @tab Viertelpause - @tab Achtelnote - @tab Achtelpause -@item @strong{NL} @tab kwartnoot - @tab kwartrust - @tab achtste noot - @tab achtste rust -@item @strong{DK} @tab fjerdedelsnode - @tab fjerdedelspause - @tab ottendedelsnode - @tab ottendedelspause -@item @strong{SE} @tab fjärdedelsnot - @tab fjärdedelspaus - @tab åttondelsnot - @tab åttondelspaus -@item @strong{FI} @tab neljäsosa@-nuotti - @tab neljäsosa@-tauko - @tab kahdeksasosa@-nuotti - @tab kahdeksasosa@-tauko - -@end multitable - -* About the French naming system: @emph{croche} refers to the note's "hook". -Therefore, from the eighth note on, the note names mean @q{hook}, @q{doubled -hook}, @q{trebled hook}, and so on. - -The rest names are based on the @emph{soupir}, or quarter rest. Subsequent -rests are expressed as fractions thereof: half a @emph{soupir}, a quarter of -a @emph{soupir}, and so on. - -Each of the following tables contains one type of note and its matching rest, -with abbreviations that apply to both notes and rests. Just switch the part -that means @q{note} with the part that means @q{rest}, for example: - -@itemize - -@item English: 16th @strong{note}, 16th @strong{rest} -@item German: 32tel-@strong{Note}, 32tel-@strong{Pause} -@item Finnish: 64-osa@strong{nuotti}, 64-osa@strong{tauko} - -@end itemize - -I put a dash @q{-} when I could not find a language-specific abbreviation for a -duration name. If you know of one that I missed, please send it to me, care of -the lilypond-user discussion list. - -@multitable @columnfractions .10 .35 .35 .20 - -@headitem Lang. @tab Note name - @tab Rest name - @tab Abbr. -@item @strong{US} @tab sixteenth note - @tab sixteenth rest - @tab 16th note -@item @strong{UK} @tab semiquaver - @tab semiquaver rest - @tab - -@item @strong{ES} @tab semicorchea - @tab silencio de semicorchea - @tab - -@item @strong{IT} @tab semicroma - @tab pausa di semicroma - @tab - -@item @strong{FR} @tab double croche - @tab quart de soupir - @tab - -@item @strong{DE} @tab Sechzehntelnote - @tab Sechzehntelpause - @tab 16tel-Note -@item @strong{NL} @tab zes@-ti@-ende noot - @tab zes@-ti@-ende rust - @tab 16e noot -@item @strong{DK} @tab sekstendedelsnode - @tab sekstendedelspause - @tab - -@item @strong{SE} @tab sextondelsnot - @tab sextondelspaus - @tab - -@item @strong{FI} @tab kuudes@-toistaosa@-nuotti - @tab kuudes@-toistaosa@-tauko - @tab 16-osanuotti - -@end multitable - -@multitable @columnfractions .10 .35 .35 .20 - -@headitem Lang. @tab Note name - @tab Rest name - @tab Abbr. -@item @strong{US} @tab thirty-second note - @tab thirty-second rest - @tab 32nd note -@item @strong{UK} @tab demisemiquaver - @tab demisemiquaver rest - @tab - -@item @strong{ES} @tab fusa - @tab silencio de fusa - @tab - -@item @strong{IT} @tab biscroma - @tab pausa di biscroma - @tab - -@item @strong{FR} @tab triple croche - @tab huitième de soupir - @tab - -@item @strong{DE} @tab Zweiunddreißig@-stelnote - @tab Zweiunddreißig@-stelpause - @tab 32tel-Note -@item @strong{NL} @tab twee@-endertigste noot - @tab twee@-endertigste rust - @tab 32e noot -@item @strong{DK} @tab toogtredivtedelsnode - @tab toogtredivtedelspause - @tab - -@item @strong{SE} @tab trettio@-tvåondelsnot - @tab trettio@-tvåondelspaus - @tab - -@item @strong{FI} @tab kolmas@-kymmenes@-kahdesosa@-nuotti - @tab kolmas@-kymmenes@-kahdesosa@-tauko - @tab 32-osanuotti - -@end multitable - -@multitable @columnfractions .10 .35 .35 .20 - -@headitem Lang. @tab Note name - @tab Rest name - @tab Abbr. -@item @strong{US} @tab sixty-fourth note - @tab sixty-fourth rest - @tab 64th note -@item @strong{UK} @tab hemidemisemiquaver - @tab hemidemisemiquaver rest - @tab - -@item @strong{ES} @tab semifusa - @tab silencio de semifusa - @tab - -@item @strong{IT} @tab semibiscroma - @tab pausa di semibiscroma - @tab - -@item @strong{FR} @tab quadruple croche - @tab seizième de soupir - @tab - -@item @strong{DE} @tab Vierundsechzigstelnote - @tab Vierundsechzigstelpause - @tab 64tel-Note -@item @strong{NL} @tab vierenzestigste noot - @tab vierenzestigste rust - @tab 64e noot -@item @strong{DK} @tab fireog@-tredsindstyven@-dedelsnode - @tab fireog@-tredsindstyven@-dedelspause - @tab - -@item @strong{SE} @tab sextiofjärdedelsnot - @tab sextiofjärdedelspaus - @tab - -@item @strong{FI} @tab kuudes@-kymmenes@-neljäsosa@-nuotti - @tab kuudes@-kymmenes@-neljäsosa@-tauko - @tab 64-osanuotti - -@end multitable - -@multitable @columnfractions .10 .35 .35 .20 - -@headitem Lang. @tab Note name - @tab Rest name - @tab Abbr. -@item @strong{US} @tab one-hundred-twenty-eighth note - @tab one-hundred-twenty-eighth rest - @tab 128th note -@item @strong{UK} @tab semihemidemisemiquaver - @tab semihemidemisemiquaver rest - @tab - -@item @strong{ES} @tab garrapatea - @tab silencio de garrapatea - @tab - -@item @strong{IT} @tab fusa - @tab pausa di fusa - @tab - -@item @strong{FR} @tab quintuple croche - @tab trente-deuxième de soupir @tab - -@item @strong{DE} @tab Hundert@-achtundzwanzigstel@-note - @tab Hundert@-achtundzwanzigstel@-pause @tab 128tel-Note -@item @strong{NL} @tab honderd@-acht@-en@-twintigste noot - @tab honderd@-acht@-en@-twintigste rust - @tab 128e noot -@item @strong{DK} @tab hundrede@-otte@-og@-tyvendedels@-node - @tab hundrede@-otte@-og@-tyvendedels@-pause - @tab - -@item @strong{SE} @tab hundratjugoåttondelsnot - @tab hundratjugoåttondelspaus - @tab - -@item @strong{FI} @tab sadas@-kahdes@-kymmenes@-kahdeksasosa@-nuotti - @tab sadas@-kahdes@-kymmenes@-kahdeksasosa@-tauko - @tab 128-osanuotti - -@end multitable - -@multitable @columnfractions .10 .35 .35 .20 - -@headitem Lang. @tab Note name - @tab Rest name - @tab Abbr. -@item @strong{US} @tab two-hundred-fifty-sixth note - @tab two-hundred-fifty-sixth rest - @tab 256th note -@item @strong{UK} @tab demisemihemidemisemiquaver - @tab demisemihemidemisemiquaver rest - @tab - -@item @strong{ES} @tab semigarrapatea - @tab silencio de semigarrapatea @tab - -@item @strong{IT} @tab semifusa - @tab pausa di semifusa - @tab - -@item @strong{FR} @tab sextuple croche - @tab soixante-quatrième de soupir @tab - -@item @strong{DE} @tab Zweihundert@-sechsundfünfzigstel@-note - @tab Zweihundert@-sechsundfünfzigstelpause @tab 256tel-Note -@item @strong{NL} @tab tweehonderd@-zesenvijftigste noot - @tab tweehonderd@-zesenvijftigste rust - @tab 256e noot -@item @strong{DK} @tab tohundrede@-seks@-og@-halvtredsendedels@-node - @tab tohundrede@-seks@-og@-halvtredsendedels@-pause - @tab - -@item @strong{SE} @tab tvåhundra@-femtiosjättedelsnot - @tab tvåhundra@-femtiosjättedelspaus - @tab - -@item @strong{FI} @tab kahdes@-sadas@-viides@-kymmenes@-kuudesosa@-nuotti - @tab kahdes@-sadas@-viides@-kymmenes@-kuudesosa@-tauko - @tab 256-osanuotti - -@end multitable - -@seealso -@ref{mensural notation} - - -@node Pitch names -@chapter Pitch names - -@c -is/-es endings for Danish per Rune Zedeler, pace -@c and for Finnish per Risto Vääräniemi -@c -iss/-ess endings for Swedish per Mats Bengtsson -@c @columnfractions .105 .145 .125 .125 .125 .125 .125 .125 --> - -@multitable {g-sharp} {sol sostenido} {sol diesis} {sol dièse} {Gis} {gis} {gis} {giss} {gis} -@headitem EN - @tab ES @tab I @tab F @tab D - @tab NL @tab DK @tab S @tab FI -@item @strong{c} @tab do @tab do @tab ut @tab C - @tab c @tab c @tab c @tab c -@item @strong{c-sharp} @tab do sostenido @tab do diesis @tab ut dièse @tab Cis - @tab cis @tab cis @tab ciss @tab cis -@item @strong{d-flat} @tab re bemol @tab re bemolle @tab ré bémol @tab Des - @tab des @tab des @tab dess @tab des -@item @strong{d} @tab re @tab re @tab ré @tab D - @tab d @tab d @tab d @tab d -@item @strong{d-sharp} @tab re sostenido @tab re diesis @tab re dièse @tab Dis - @tab dis @tab dis @tab diss @tab dis -@item @strong{e-flat} @tab mi bemol @tab mi bemolle @tab mi bémol @tab Es - @tab es @tab es @tab ess @tab es -@item @strong{e} @tab mi @tab mi @tab mi @tab E - @tab e @tab e @tab e @tab e -@item @strong{f-flat} = e - @tab fa bemol @tab fa bemolle @tab fa bémol @tab Fes - @tab fes @tab fes @tab fess @tab fes -@item @strong{f} @tab fa @tab fa @tab fa @tab F - @tab f @tab f @tab f @tab f -@item @strong{e-sharp} = f - @tab mi sostenido @tab mi diesis @tab mi dièse @tab Eis - @tab eis @tab eis @tab eiss @tab eis -@item @strong{f-sharp} @tab fa sostenido @tab fa diesis @tab fa dièse @tab Fis - @tab fis @tab fis @tab fiss @tab fis -@item @strong{g-flat} @tab sol bemol @tab sol bemolle @tab sol bémol @tab Ges - @tab ges @tab ges @tab gess @tab ges -@item @strong{g} @tab sol @tab sol @tab sol @tab G - @tab g @tab g @tab g @tab g -@item @strong{g-sharp} @tab sol sostenido @tab sol diesis @tab sol dièse @tab Gis - @tab gis @tab gis @tab giss @tab gis -@item @strong{a-flat} @tab la bemol @tab la bemolle @tab la bémol @tab As - @tab as @tab as @tab ass @tab as -@item @strong{a} @tab la @tab la @tab la @tab A - @tab a @tab a @tab a @tab a -@item @strong{a-sharp} @tab la sostenido @tab la diesis @tab la dièse @tab Ais - @tab ais @tab ais @tab aiss @tab ais -@item @strong{b-flat} @tab si bemol @tab si bemolle @tab si bémol @tab B - @tab bes @tab b @tab b @tab b -@item @strong{b} @tab si @tab si @tab si @tab H - @tab b @tab h @tab h @tab h -@end multitable - - -@menu -* Literature used:: -@end menu - -@node Literature used -@unnumberedsec Literature used - -@itemize -@item Apel, Willi, ed. @cite{The Harvard Dictionary of Music}. -Cambridge: Belknap Press (Harvard University Press), 1944. - -@item Krohn, Felix. @cite{Lyhyt musiikkioppi}. Porvoo, Helsinki, Finland: -WSOY, 1976. - -@item Leuchtmann, Horst, ed. @cite{Polyglottes Wörterbuch der musikalischen -Terminologie}. Kassel, 1980. - -@item Hornby, Albert Sydney. @cite{Oxford Advanced Learner's Dictionary of -Current English}, 3rd ed. London: Oxford University Press, 1974. - -@item Porter, Noah. @cite{Webster's Revised Unabridged Dictionary}. -Springfield, Massachusetts: G. & C. Merriam Company, 1913. - -@item Randall, Don, ed. @cite{The New Harvard Dictionary of Music}. -Cambridge: Belknap Press (Harvard University Press), 1986. - -@item Riemann, Hugo. @cite{Musik-lexicon}. Berlin, 1929. - -@end itemize - -@bye diff --git a/Documentation/user/notation-appendices.itely b/Documentation/user/notation-appendices.itely deleted file mode 100644 index fe10fc4ac8..0000000000 --- a/Documentation/user/notation-appendices.itely +++ /dev/null @@ -1,658 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Notation manual tables -@appendix Notation manual tables - -@c Please do not delete the following @ignore block. -@ignore -Note for editors and translators: In the following menu, two entries -are needed to link to a pair of automatically generated sections. -Please keep them and, if using emacs, do not run -texinfo-all-menus-update without manually restoring them back. These -menu entries are: - -* Text markup commands:: -* Text markup list commands:: - -and they should go just after -* Note head styles:: - -and just before -* List of articulations:: -@end ignore - -@menu -* Chord name chart:: -* Common chord modifiers:: -* Predefined fretboard diagrams:: -* MIDI instruments:: -* List of colors:: -* The Feta font:: -* Note head styles:: -* Text markup commands:: -* Text markup list commands:: -* List of articulations:: -* Percussion notes:: -* All context properties:: -* Layout properties:: -* Identifiers:: -* Scheme functions:: -@end menu - - - -@node Chord name chart -@appendixsec Chord name chart - -The following charts shows two standard systems for printing chord -names, along with the pitches they represent. - -@lilypondfile{chord-names-jazz.ly} - -@node Common chord modifiers -@appendixsec Common chord modifiers - -The following table shows chord modifiers that can be used in -@code{\chordmode} to generate standard chord structures. - -@multitable @columnfractions .2 .3 .2 .2 - -@item -@b{Chord type} -@tab -@b{Intervals} -@tab -@b{Modifier(s)} -@tab -@b{Example} - - -@item -Major -@tab -Major third, perfect fifth -@tab -@code{5} or nothing -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:5 -} -@end lilypond - -@item -Minor -@tab -Minor third, perfect fifth -@tab -@code{m} or @code{m5} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:m -} -@end lilypond - -@item -Augmented -@tab -Major third, augmented fifth -@tab -@code{aug} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:aug -} -@end lilypond - -@item -Diminished -@tab -Minor third, diminished fifth -@tab -@code{dim} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:dim -} -@end lilypond - -@item -Dominant seventh -@tab -Major triad, minor seventh -@tab -@code{7} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:7 -} -@end lilypond - -@item -Major seventh -@tab -Major triad, major seventh -@tab -@code{maj7} or @code{maj} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:maj7 -} -@end lilypond - -@item -Minor seventh -@tab -Minor triad, minor seventh -@tab -@code{m7} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:m7 -} -@end lilypond - -@item -Diminished seventh -@tab -Diminished triad, diminished seventh -@tab -@code{dim7} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:dim7 -} -@end lilypond - -@item -Augmented seventh -@tab -Augmented triad, minor seventh -@tab -@code{aug7} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:aug7 -} -@end lilypond - -@item -Half-diminished seventh -@tab -Diminished triad, minor seventh -@tab -@code{m7.5-} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:m7.5- -} -@end lilypond - -@item -Minor-major seventh -@tab -Minor triad, major seventh -@tab -@code{maj7.5-} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:maj7.5- -} -@end lilypond - -@item -Major sixth -@tab -Major triad, sixth -@tab -@code{6} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:6 -} -@end lilypond - -@item -Minor sixth -@tab -Minor triad, sixth -@tab -@code{m6} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:m6 -} -@end lilypond - -@item -Dominant ninth -@tab -Dominant seventh, major ninth -@tab -@code{9} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:9 -} -@end lilypond - -@item -Major ninth -@tab -Major seventh, major ninth -@tab -@code{maj9} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:maj9 -} -@end lilypond - -@item -Minor ninth -@tab -Minor seventh, major ninth -@tab -@code{m9} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:m9 -} -@end lilypond - -@item -Dominant eleventh -@tab -Dominant ninth, perfect eleventh -@tab -@code{11} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:11 -} -@end lilypond - -@item -Major eleventh -@tab -Major ninth, perfect eleventh -@tab -@code{maj11} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:maj11 -} -@end lilypond - -@item -Minor eleventh -@tab -Minor ninth, perfect eleventh -@tab -@code{m11} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:m11 -} -@end lilypond - -@item -Dominant thirteenth -@tab -Dominant ninth, major thirteenth -@tab -@code{13} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:13 -} -@end lilypond - -@item -Dominant thirteenth -@tab -Dominant eleventh, major thirteenth -@tab -@code{13.11} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:13.11 -} -@end lilypond - -@item -Major thirteenth -@tab -Major eleventh, major thirteenth -@tab -@code{maj13.11} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:maj13.11 -} -@end lilypond - -@item -Minor thirteenth -@tab -Minor eleventh, major thirteenth -@tab -@code{m13.11} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:m13.11 -} -@end lilypond - -@item -Suspended second -@tab -Major second, perfect fifth -@tab -@code{sus2} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:sus2 -} -@end lilypond - -@item -Suspended fourth -@tab -Perfect fourth, perfect fifth -@tab -@code{sus4} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:sus4 -} -@end lilypond - - -@end multitable - -@node Predefined fretboard diagrams -@appendixsec Predefined fretboard diagrams - -The chart below shows the predefined fretboard diagrams. - -@lilypondfile{display-predefined-fretboards.ly} - -@node MIDI instruments -@appendixsec MIDI instruments - -The following is a list of names that can be used for the -@code{midiInstrument} property. - -@example -acoustic grand contrabass lead 7 (fifths) -bright acoustic tremolo strings lead 8 (bass+lead) -electric grand pizzicato strings pad 1 (new age) -honky-tonk orchestral harp pad 2 (warm) -electric piano 1 timpani pad 3 (polysynth) -electric piano 2 string ensemble 1 pad 4 (choir) -harpsichord string ensemble 2 pad 5 (bowed) -clav synthstrings 1 pad 6 (metallic) -celesta synthstrings 2 pad 7 (halo) -glockenspiel choir aahs pad 8 (sweep) -music box voice oohs fx 1 (rain) -vibraphone synth voice fx 2 (soundtrack) -marimba orchestra hit fx 3 (crystal) -xylophone trumpet fx 4 (atmosphere) -tubular bells trombone fx 5 (brightness) -dulcimer tuba fx 6 (goblins) -drawbar organ muted trumpet fx 7 (echoes) -percussive organ french horn fx 8 (sci-fi) -rock organ brass section sitar -church organ synthbrass 1 banjo -reed organ synthbrass 2 shamisen -accordion soprano sax koto -harmonica alto sax kalimba -concertina tenor sax bagpipe -acoustic guitar (nylon) baritone sax fiddle -acoustic guitar (steel) oboe shanai -electric guitar (jazz) english horn tinkle bell -electric guitar (clean) bassoon agogo -electric guitar (muted) clarinet steel drums -overdriven guitar piccolo woodblock -distorted guitar flute taiko drum -guitar harmonics recorder melodic tom -acoustic bass pan flute synth drum -electric bass (finger) blown bottle reverse cymbal -electric bass (pick) shakuhachi guitar fret noise -fretless bass whistle breath noise -slap bass 1 ocarina seashore -slap bass 2 lead 1 (square) bird tweet -synth bass 1 lead 2 (sawtooth) telephone ring -synth bass 2 lead 3 (calliope) helicopter -violin lead 4 (chiff) applause -viola lead 5 (charang) gunshot -cello lead 6 (voice) -@end example - - -@node List of colors -@appendixsec List of colors - -@subsubheading Normal colors - -Usage syntax is detailed in @ref{Coloring objects}. - -@cindex List of colors -@cindex Colors, list of - -@verbatim -black white red green -blue cyan magenta yellow -grey darkred darkgreen darkblue -darkcyan darkmagenta darkyellow -@end verbatim - - -@subsubheading X color names - -X color names come several variants: - -Any name that is spelled as a single word with capitalization -(e.g. @q{LightSlateBlue}) can also be spelled as space separated -words without capitalization (e.g. @q{light slate blue}). - -The word @q{grey} can always be spelled @q{gray} (e.g. @q{DarkSlateGray}). - -Some names can take a numerical suffix (e.g. @q{LightSalmon4}). - - -@subsubheading Color Names without a numerical suffix: - -@verbatim -snow GhostWhite WhiteSmoke gainsboro FloralWhite -OldLace linen AntiqueWhite PapayaWhip BlanchedAlmond -bisque PeachPuff NavajoWhite moccasin cornsilk -ivory LemonChiffon seashell honeydew MintCream -azure AliceBlue lavender LavenderBlush MistyRose -white black DarkSlateGrey DimGrey SlateGrey -LightSlateGrey grey LightGrey MidnightBlue navy -NavyBlue CornflowerBlue DarkSlateBlue SlateBlue MediumSlateBlue -LightSlateBlue MediumBlue RoyalBlue blue DodgerBlue -DeepSkyBlue SkyBlue LightSkyBlue SteelBlue LightSteelBlue -LightBlue PowderBlue PaleTurquoise DarkTurquoise MediumTurquoise -turquoise cyan LightCyan CadetBlue MediumAquamarine -aquamarine DarkGreen DarkOliveGreen DarkSeaGreen SeaGreen -MediumSeaGreen LightSeaGreen PaleGreen SpringGreen LawnGreen -green chartreuse MediumSpringGreen GreenYellow LimeGreen -YellowGreen ForestGreen OliveDrab DarkKhaki khaki -PaleGoldenrod LightGoldenrodYellow LightYellow yellow gold -LightGoldenrod goldenrod DarkGoldenrod RosyBrown IndianRed -SaddleBrown sienna peru burlywood beige -wheat SandyBrown tan chocolate firebrick -brown DarkSalmon salmon LightSalmon orange -DarkOrange coral LightCoral tomato OrangeRed -red HotPink DeepPink pink LightPink -PaleVioletRed maroon MediumVioletRed VioletRed magenta -violet plum orchid MediumOrchid DarkOrchid -DarkViolet BlueViolet purple MediumPurple thistle -DarkGrey DarkBlue DarkCyan DarkMagenta DarkRed -LightGreen -@end verbatim - - -@subsubheading Color names with a numerical suffix - -In the following names the suffix N can be a number in the range 1-4: - -@verbatim -snowN seashellN AntiqueWhiteN bisqueN PeachPuffN -NavajoWhiteN LemonChiffonN cornsilkN ivoryN honeydewN -LavenderBlushN MistyRoseN azureN SlateBlueN RoyalBlueN -blueN DodgerBlueN SteelBlueN DeepSkyBlueN SkyBlueN -LightSkyBlueN LightSteelBlueN LightBlueN LightCyanN PaleTurquoiseN -CadetBlueN turquoiseN cyanN aquamarineN DarkSeaGreenN -SeaGreenN PaleGreenN SpringGreenN greenN chartreuseN -OliveDrabN DarkOliveGreenN khakiN LightGoldenrodN LightYellowN -yellowN goldN goldenrodN DarkGoldenrodN RosyBrownN -IndianRedN siennaN burlywoodN wheatN tanN -chocolateN firebrickN brownN salmonN LightSalmonN -orangeN DarkOrangeN coralN tomatoN OrangeRedN -redN DeepPinkN HotPinkN pinkN LightPinkN -PaleVioletRedN maroonN VioletRedN magentaN orchidN -plumN MediumOrchidN DarkOrchidN purpleN MediumPurpleN -thistleN -@end verbatim - - -@subsubheading Grey Scale - -A grey scale can be obtained using: - -@example -greyN -@end example - -@noindent -Where N is in the range 0-100. - - -@node The Feta font -@appendixsec The Feta font - -@cindex Feta font -@cindex Font, Feta - -The following symbols are available in the Emmentaler font and may be -accessed directly using text markup such as @code{g^\markup @{ -\musicglyph #"scripts.segno" @}}, see @ref{Formatting text}. - -@lilypondfile[noindent]{font-table.ly} - - -@node Note head styles -@appendixsec Note head styles - -@cindex note head styles -The following styles may be used for note heads. - -@lilypondfile[noindent]{note-head-style.ly} - -@include markup-commands.tely - -@include markup-list-commands.tely - -@node List of articulations -@appendixsec List of articulations - -@cindex accent -@cindex marcato -@cindex staccatissimo -@cindex espressivo -@cindex fermata -@cindex stopped -@cindex staccato -@cindex portato -@cindex tenuto -@cindex upbow -@cindex downbow -@cindex foot marks -@cindex organ pedal marks -@cindex turn -@cindex open -@cindex stopped -@cindex flageolet -@cindex reverseturn -@cindex trill -@cindex prall -@cindex mordent -@cindex prallprall -@cindex prallmordent -@cindex prall, up -@cindex prall, down -@cindex thumb marking -@cindex segno -@cindex coda -@cindex varcoda - - -@lilypondfile[quote,texidoc]{script-chart.ly} - - -@node Percussion notes -@appendixsec Percussion notes - -@lilypondfile[quote]{percussion-chart.ly} - - -@node All context properties -@appendixsec All context properties - -@include context-properties.tely - - -@node Layout properties -@appendixsec Layout properties - -@include layout-properties.tely - - -@node Identifiers -@appendixsec Identifiers - -@include identifiers.tely - - -@node Scheme functions -@appendixsec Scheme functions - -@include scheme-functions.tely - diff --git a/Documentation/user/notation.itely b/Documentation/user/notation.itely deleted file mode 100644 index 57afdc00fd..0000000000 --- a/Documentation/user/notation.itely +++ /dev/null @@ -1,35 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Musical notation -@chapter Musical notation - -This chapter explains how to create musical notation. - -@menu -* Pitches:: Writing and display the pitches of notes. -* Rhythms:: Writing and displaying the durations of notes. -* Expressive marks:: Adding expression to notes. -* Repeats:: Repeat music. -* Simultaneous notes:: More than one note at once. -* Staff notation:: Displaying staves. -* Editorial annotations:: Special notation to increase legibility. -* Text:: Adding text to scores. -@end menu - -@include pitches.itely -@include rhythms.itely -@include expressive.itely -@include repeats.itely -@include simultaneous.itely -@include staff.itely -@include editorial.itely -@include text.itely - diff --git a/Documentation/user/percussion.itely b/Documentation/user/percussion.itely deleted file mode 100644 index f182b78a9a..0000000000 --- a/Documentation/user/percussion.itely +++ /dev/null @@ -1,595 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Percussion -@section Percussion - -@menu -* Common notation for percussion:: -@end menu - -@node Common notation for percussion -@subsection Common notation for percussion - -Rhythmic music is primarily used for percussion and drum notation, but it can -also be used to show the rhythms of melodies. - -@menu -* References for percussion:: -* Basic percussion notation:: -* Drum rolls:: -* Pitched percussion:: -* Percussion staves:: -* Custom percussion staves:: -* Ghost notes:: -@end menu - -@node References for percussion -@unnumberedsubsubsec References for percussion - -TODO add more. - -@itemize - -@item Some percussion may be notated on a rhythmic staff; this is -discussed in @ref{Showing melody rhythms}, and -@ref{Instantiating new staves}. - -@item MIDI output is discussed in a separate section; please see -@ref{Percussion in MIDI}. - -@end itemize - - -@seealso -Notation Reference: -@ref{Showing melody rhythms}, -@ref{Instantiating new staves}. -@ref{Percussion in MIDI}. - -Snippets: @rlsr{Percussion}. - - -@node Basic percussion notation -@unnumberedsubsubsec Basic percussion notation - -@cindex percussion -@cindex drums - -Percussion notes may be entered in @code{\drummode} mode, which is -similar to the standard mode for entering notes. The simplest way -to enter percussion notes is to use the @code{\drums} command, -which creates the correct context and entry mode for percussion: - -@lilypond[quote,verbatim] -\drums { - hihat4 hh bassdrum bd -} -@end lilypond - -This is shorthand for: - -@lilypond[quote,verbatim] -\new DrumStaff { - \drummode { - hihat4 hh bassdrum bd - } -} -@end lilypond - -Each piece of percussion has a full name and an abbreviated name, -and both can be used in input files. The full list of percussion -note names may be found in @ref{Percussion notes}. - -Note that the normal notation of pitches (such as @code{cis4}) in -a @code{DrumStaff} context will cause an error message. -Percussion clefs are added automatically to a @code{DrumStaff} -contex, but other clefs may also be used. - -There are a few issues concerning MIDI support for percussion -instruments; for details please see @ref{Percussion in MIDI}. - - -@seealso -Notation Reference: @ref{Percussion in MIDI}, @ref{Percussion notes}. - -File: @file{ly/@/drumpitch@/-init@/.ly} - -Snippets: @rlsr{Percussion}. - - -@node Drum rolls -@unnumberedsubsubsec Drum rolls - -Drum rolls are indicated with three slashes across the stem. For -quarter notes or longer the three slashes are shown explicitly, -eighth notes are shown with two slashes (the beam being the -third), and drum rolls shorter than eighths have one stem slash to -supplement the beams. This is achieved with the tremolo notation, -@code{:32}, as described in @ref{Tremolo repeats}. Here is an -example of some snare rolls: - -@lilypond[quote,verbatim] -\drums { - \time 2/4 - sn16 sn8 sn16 sn8 sn8:32 ~ - sn8 sn8 sn4:32 ~ - sn4 sn8 sn16 sn16 - sn4 r4 -} -@end lilypond - -Sticking can be indicated by placing @code{^"R"} or @code{^"L"} -after the note. The @code{staff-padding} property may be -overridden to achieve a pleasing baseline. - -@lilypond[quote,verbatim] -\drums { - \repeat unfold 2 { - sn16 ^"L" sn^"R" sn^"L" sn^"L" sn^"R" sn^"L" sn^"R" sn^"R" - } -} -@end lilypond - - -@seealso -Snippets: @rlsr{Percussion}. - - -@node Pitched percussion -@unnumberedsubsubsec Pitched percussion - -Certain pitched percussion instruments (e.g. xylophone, -vibraphone, and timpani) are written using normal staves. -This is covered in other sections of the manual. - - -@seealso -@c TODO: possibly link to an alternate section of NR 3.5, if -@c "percussion in MIDI" gets a separate subsubsection for -@c pitched percussion sounds. -gp -Notation Reference: @ref{Percussion in MIDI}. - -Snippets: @rlsr{Percussion}. - - -@node Percussion staves -@unnumberedsubsubsec Percussion staves - -@cindex percussion -@cindex drums - -A percussion part for more than one instrument typically uses a -multiline staff where each position in the staff refers to one -piece of percussion. To typeset the music, the notes must be -interpreted in @code{DrumStaff} and @code{DrumVoice} context. - -@lilypond[quote,verbatim] -up = \drummode { - crashcymbal4 hihat8 halfopenhihat hh hh hh openhihat -} -down = \drummode { - bassdrum4 snare8 bd r bd sn4 -} -\new DrumStaff << - \new DrumVoice { \voiceOne \up } - \new DrumVoice { \voiceTwo \down } ->> -@end lilypond - -The above example shows verbose polyphonic notation. The short -polyphonic notation, described in @rlearning{I'm hearing Voices}, -can also be used if the voices are instantiated by hand first. -For example, - -@lilypond[quote,verbatim] -\new DrumStaff << - \new DrumVoice = "1" { s1*2 } - \new DrumVoice = "2" { s1*2 } - \drummode { - bd4 sn4 bd4 sn4 - << { - \repeat unfold 16 hh16 - } \\ { - bd4 sn4 bd4 sn4 - } >> - } ->> -@end lilypond - -There are also other layout possibilities. To use these, set the -property @code{drumStyleTable} in context @code{DrumVoice}. The -following variables have been predefined: - -@c FIXME: decide what to do about this table. (ie verbatim or not) -@table @code - -@item drums-style -This is the default. It typesets a typical drum kit on a -five-line staff: - -@lilypond[quote,line-width=10.0\cm] -nam = \lyricmode { - cymc cyms cymr hh hhc hho hhho hhp - cb hc bd sn ss tomh tommh tomml toml tomfh tomfl } -mus = \drummode { - cymc cyms cymr hh hhc hho hhho hhp \break - cb hc bd sn ss tomh tommh tomml toml tomfh tomfl s16 } -\score { - << \new DrumStaff \with { - \remove Bar_engraver - \remove Time_signature_engraver - \override Stem #'transparent = ##t - \override Stem #'Y-extent = ##f - \override VerticalAxisGroup #'minimum-Y-extent = #'(-4.0 . 5.0) - } \mus - \new Lyrics \nam - >> - \layout { - \context { - \Score - \override LyricText #'font-family = #'typewriter - \override BarNumber #'transparent =##T - } - } -} -@end lilypond - -The drum scheme supports six different toms. When there are fewer -toms, simply select the toms that produce the desired result. For -example, to get toms on the three middle lines you use -@code{tommh}, @code{tomml}, and @code{tomfh}. - -@item timbales-style -This typesets timbales on a two line staff: - -@lilypond[quote,ragged-right] -nam = \lyricmode { timh ssh timl ssl cb } -mus = \drummode { timh ssh timl ssl cb s16 } - -<< - \new DrumStaff \with { - \remove Bar_engraver - \remove Time_signature_engraver - \override Stem #'transparent = ##t - \override Stem #'Y-extent = ##f - \override StaffSymbol #'line-count = #2 - \override StaffSymbol #'staff-space = #2 - \override VerticalAxisGroup #'minimum-Y-extent = #'(-3.0 . 4.0) - drumStyleTable = #timbales-style - } \mus - \new Lyrics { - \override LyricText #'font-family = #'typewriter - \nam - } ->> -@end lilypond - -@item congas-style -This typesets congas on a two line staff: - -@lilypond[quote,ragged-right] -nam = \lyricmode { cgh cgho cghm ssh cgl cglo cglm ssl } -mus = \drummode { cgh cgho cghm ssh cgl cglo cglm ssl s16 } - -<< - \new DrumStaff \with { - \remove Bar_engraver - \remove Time_signature_engraver - drumStyleTable = #congas-style - \override StaffSymbol #'line-count = #2 - - %% this sucks; it will lengthen stems. - \override StaffSymbol #'staff-space = #2 - \override Stem #'transparent = ##t - \override Stem #'Y-extent = ##f - } \mus - \new Lyrics { - \override LyricText #'font-family = #'typewriter - \nam - } ->> -@end lilypond - -@item bongos-style -This typesets bongos on a two line staff: - -@lilypond[quote,ragged-right] -nam = \lyricmode { boh boho bohm ssh bol bolo bolm ssl } -mus = \drummode { boh boho bohm ssh bol bolo bolm ssl s16 } - -<< - \new DrumStaff \with { - \remove Bar_engraver - \remove Time_signature_engraver - \override StaffSymbol #'line-count = #2 - drumStyleTable = #bongos-style - - %% this sucks; it will lengthen stems. - \override StaffSymbol #'staff-space = #2 - \override Stem #'transparent = ##t - \override Stem #'Y-extent = ##f - } \mus - \new Lyrics { - \override LyricText #'font-family = #'typewriter - \nam - } ->> -@end lilypond - -@item percussion-style -To typeset all kinds of simple percussion on one line staves: - -@lilypond[quote,ragged-right] -nam = \lyricmode { tri trio trim gui guis guil cb cl tamb cab mar hc } -mus = \drummode { tri trio trim gui guis guil cb cl tamb cab mar hc s16 } - -<< - \new DrumStaff \with{ - \remove Bar_engraver - drumStyleTable = #percussion-style - \override StaffSymbol #'line-count = #1 - \remove Time_signature_engraver - \override Stem #'transparent = ##t - \override Stem #'Y-extent = ##f - } \mus - \new Lyrics { - \override LyricText #'font-family = #'typewriter - \nam - } ->> -@end lilypond -@end table - - -@node Custom percussion staves -@unnumberedsubsubsec Custom percussion staves - -If you do not like any of the predefined lists you can define your -own list at the top of your file. - -@lilypond[quote,verbatim] -#(define mydrums '( - (bassdrum default #f -1) - (snare default #f 0) - (hihat cross #f 1) - (pedalhihat xcircle "stopped" 2) - (lowtom diamond #f 3))) -up = \drummode { hh8 hh hh hh hhp4 hhp } -down = \drummode { bd4 sn bd toml8 toml } - -\new DrumStaff << - \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) - \new DrumVoice { \voiceOne \up } - \new DrumVoice { \voiceTwo \down } ->> -@end lilypond - - -@snippets - -FIXME: MOVE ALL THESE TO LSR! -gp - -Here are some examples: - -Two Woodblocks, entered with wbh (high woodblock) and wbl (low woodblock) - -@lilypond[quote,verbatim] -% These lines define the position of the woodblocks in the stave; -% if you like, you can change it or you can use special note heads -% for the woodblocks. -#(define mydrums '((hiwoodblock default #t 3) - (lowoodblock default #t -2))) - -woodstaff = { - % This defines a staff with only two lines. - % It also defines the positions of the two lines. - \override Staff.StaffSymbol #'line-positions = #'(-2 3) - - % This is neccessary; if not entered, the barline would be too short! - \override Staff.BarLine #'bar-size = #3 -} - -\new DrumStaff { - \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) - - % with this you load your new drum style table - \woodstaff - - \drummode { - \time 2/4 - wbl8 wbl16 wbl wbh8-> wbl | - wbl8 wbl16 wbh-> ~ wbh wbl16 r8 | - } -} -@end lilypond - -Note that in this special case the length of the barline must -altered with @code{\override Staff.BarLine #'bar-size #number}. -Otherwise it would be too short. And you have also to define the -positions of the two stafflines. For more information about these -delicate things have a look at @ref{Staff symbol}. - -A tambourine, entered with @q{tamb}: - -@lilypond[quote,verbatim] -#(define mydrums '((tambourine default #t 0))) - -tambustaff = { - \override Staff.StaffSymbol #'line-positions = #'( 0 ) - \override Staff.BarLine #'bar-size = #3 - \set DrumStaff.instrumentName = #"Tambourine" -} - -\new DrumStaff { - \tambustaff - \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) - - \drummode { - \time 6/8 - tamb8. tamb16 tamb8 tamb tamb tamb | - tamb4. tamb8 tamb tamb | - % the trick with the scaled duration and the shorter rest - % is neccessary for the correct ending of the trill-span! - tamb2.*5/6 \startTrillSpan s8 \stopTrillSpan | - } -} -@end lilypond - -Music for Tam-Tam (entered with @q{tt}): - -@lilypond[quote,verbatim] -#(define mydrums '((tamtam default #t 0))) - -tamtamstaff = { - \override Staff.StaffSymbol #'line-positions = #'( 0 ) - \override Staff.BarLine #'bar-size = #3 - \set DrumStaff.instrumentName = #"Tamtam" -} - -\new DrumStaff { - \tamtamstaff - \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) - - \drummode { - tt 1 \pp \laissezVibrer - } -} -@end lilypond - -Two different bells, entered with @q{cb} (cowbell) and @q{rb} (ridebell) - -@lilypond[quote,verbatim] -#(define mydrums '((ridebell default #t 3) - (cowbell default #t -2))) - -bellstaff = { - \override DrumStaff.StaffSymbol #'line-positions = #'(-2 3) - \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) - \override Staff.BarLine #'bar-size = #3 - \set DrumStaff.instrumentName = #"Different Bells" -} - -\new DrumStaff { - \bellstaff - \drummode { - \time 2/4 - rb8 rb cb cb16 rb-> ~ | - rb16 rb8 rb16 cb8 cb | - } -} -@end lilypond - -Here an short example by maestro Stravinsky (from @q{L'histoire du Soldat}) - -@lilypond[quote,verbatim] -#(define mydrums '((bassdrum default #t 4) - (snare default #t -4) - (tambourine default #t 0))) - -global = { - \time 3/8 s4. - \time 2/4 s2*2 - \time 3/8 s4. - \time 2/4 s2 -} - -drumsA = { - \context DrumVoice << - { \global } - { \drummode { - \autoBeamOff - \stemDown sn8 \stemUp tamb s8 | - sn4 \stemDown sn4 | - \stemUp tamb8 \stemDown sn8 \stemUp sn16 \stemDown sn \stemUp sn8 | - \stemDown sn8 \stemUp tamb s8 | - \stemUp sn4 s8 \stemUp tamb - } - } - >> -} - -drumsB = { - \drummode { - s4 bd8 s2*2 s4 bd8 s4 bd8 s8 - } -} - -\layout { - indent = #40 -} - -\score { - \new StaffGroup << - \new DrumStaff { - \set DrumStaff.instrumentName = \markup { - \column { - "Tambourine" - "et" - "caisse claire s. timbre" - } - } - \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) - \drumsA - } - - \new DrumStaff { - \set DrumStaff.instrumentName = #"Grosse Caisse" - \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) - \drumsB } - >> -} -@end lilypond - - -@seealso -Snippets: @rlsr{Percussion}. - -Internals Reference: @rinternals{DrumStaff}, @rinternals{DrumVoice}. - - -@c TODO: check name -gp -@node Ghost notes -@unnumberedsubsubsec Ghost notes - -Ghost notes for drums and percussion may be created using the -@code{\parenthesize} command detailed in @ref{Parentheses}. -However, the default @code{\drummode} does not include the -@code{Parenthesis_engraver} plugin which allows this. - -@lilypond[quote,ragged-right,verbatim,fragment] -\new DrumStaff \with { - \consists "Parenthesis_engraver" -} -<< - \context DrumVoice = "1" { s1 } - \context DrumVoice = "2" { s1 } - \drummode { - << - { - hh8[ hh] hh16 - < \parenthesize sn > hh - < \parenthesize sn > hh8 hh - } \\ - { - bd4 r4 bd8 bd r8 bd - } - >> - } ->> -@end lilypond - -@noindent -Also note that you must add chords (@code{< >} brackets) -around each @code{\parenthesize} statement. - - -@seealso -Snippets: @rlsr{Percussion}. diff --git a/Documentation/user/pitches.itely b/Documentation/user/pitches.itely deleted file mode 100644 index d2c982939b..0000000000 --- a/Documentation/user/pitches.itely +++ /dev/null @@ -1,2482 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - - -@node Pitches -@section Pitches - -@lilypondfile[quote]{pitches-headword.ly} - -This section discusses how to specify the pitch of notes. There -are three steps to this process: input, modification, and output. - -@menu -* Writing pitches:: -* Changing multiple pitches:: -* Displaying pitches:: -* Note heads:: -@end menu - - -@node Writing pitches -@subsection Writing pitches - -This section discusses how to input pitches. There are two -different ways to place notes in octaves: absolute and relative -mode. In most cases, relative mode will be more convenient. - -@menu -* Absolute octave entry:: -* Relative octave entry:: -* Accidentals:: -* Note names in other languages:: -@end menu - - -@node Absolute octave entry -@unnumberedsubsubsec Absolute octave entry - -@cindex pitch names -@cindex pitches -@cindex absolute -@cindex absolute octave specification -@cindex octave specification, absolute -@cindex absolute octave entry -@cindex octave entry, absolute - -A pitch name is specified using lowercase letters@tie{}@code{a} -through@tie{}@code{g}. The note names @code{c} to @code{b} are -engraved in the octave below middle C. - -@c don't use c' here. -@lilypond[verbatim,quote,fragment] -\clef bass -c d e f -g a b c -d e f g -@end lilypond - -@cindex octave changing mark - -@funindex ' -@funindex , - -Other octaves may be specified with a single quote@tie{}(@code{'}) -or comma@tie{}(@code{,}) character. Each@tie{}@code{'} raises the -pitch by one octave; each@tie{}@code{,} lowers the pitch by an -octave. - -@lilypond[verbatim,quote,fragment] -\clef treble -c' c'' e' g -d'' d' d c -\clef bass -c, c,, e, g -d,, d, d c -@end lilypond - - -@seealso -Music Glossary: -@rglos{Pitch names}. - -Snippets: -@rlsr{Pitches}. - - -@node Relative octave entry -@unnumberedsubsubsec Relative octave entry - -@cindex relative -@cindex relative octave entry -@cindex octave entry, relative -@cindex relative octave specification -@cindex ocatve specification, relative - -@funindex relative -@funindex \relative - -When octaves are specified in absolute mode it is easy to -accidentally put a pitch in the wrong octave. Relative octave -mode reduces these errors since most of the time it is not -necessary to indicate any octaves at all. Furthermore, in -absolute mode a single mistake may be difficult to spot, while in -relative mode a single error puts the rest of the piece off by one -octave. - -@example -\relative @var{startpitch} @var{musicexpr} -@end example - -In relative mode, each note is assumed to be as close to the -previous note as possible. This means that the octave of each -pitch inside @var{musicexpr} is calculated as follows: - -@itemize -@item -If no octave changing mark is used on a pitch, its octave is -calculated so that the interval with the previous note is less -than a fifth. This interval is determined without considering -accidentals. - -@item -An octave changing mark@tie{}@code{'} or@tie{}@code{,} can be -added to respectively raise or lower a pitch by an extra octave, -relative to the pitch calculated without an octave mark. - -@item -Multiple octave changing marks can be used. For example, -@code{''}@tie{}and@tie{}@code{,,} will alter the pitch by two -octaves. - -@item -The pitch of the first note is relative to -@code{@var{startpitch}}. @var{startpitch} is specified in -absolute octave mode, and it is recommended that it be a octave of -@code{c}. - -@end itemize - -Here is the relative mode shown in action: - -@lilypond[verbatim,quote] -\relative c { - \clef bass - c d e f - g a b c - d e f g -} -@end lilypond - -Octave changing marks are used for intervals greater than a -fourth: - -@lilypond[verbatim,quote] -\relative c'' { - c g c f, - c' a, e'' c -} -@end lilypond - -A note sequence without a single octave mark can nevertheless span -large intervals: - -@lilypond[verbatim,quote] -\relative c { - c f b e - a d g c -} -@end lilypond - -When @code{\relative} blocks are nested, the innermost -@code{\relative} block applies. - -@lilypond[verbatim,quote] -\relative c' { - c d e f - \relative c'' { - c d e f - } -} -@end lilypond - -@code{\relative} has no effect on @code{\chordmode} blocks. - -@lilypond[verbatim,quote] -\new Staff { - \relative c''' { - \chordmode { c1 } - } - \chordmode { c1 } -} -@end lilypond - -@code{\relative} is not allowed inside of @code{\chordmode} blocks. - -Music inside a @code{\transpose} block is absolute unless a -@code{\relative} is included. - -@lilypond[verbatim,quote] -\relative c' { - d e - \transpose f g { - d e - \relative c' { - d e - } - } -} -@end lilypond - - -@cindex chords and relative octave entry -@cindex relative octave entry and chords - -If the preceding item is a chord, the first note of the chord is -used as the reference point for the octave placement of a -following note or chord. Inside chords, the next note is always -relative to the preceding one. Examine the next example -carefully, paying attention to the @code{c} notes. - -@lilypond[verbatim,quote] -\relative c' { - c - - - -} -@end lilypond - -As explained above, the octave of pitches is calculated only with -the note names, regardless of any alterations. Therefore, an -E-double-sharp following a B will be placed higher, while an -F-double-flat will be placed lower. In other words, a -double-augmented fourth is considered a smaller interval than a -double-diminished fifth, regardless of the number of semitones -that each interval contains. - -@lilypond[verbatim,quote] -\relative c'' { - c2 fis - c2 ges - b2 eisis - b2 feses -} -@end lilypond - - -@seealso -Music Glossary: -@rglos{fifth}, -@rglos{interval}, -@rglos{Pitch names}. - -Notation Reference: -@ref{Octave checks}. - -Snippets: -@rlsr{Pitches}. - -Internals Reference: -@rinternals{RelativeOctaveMusic}. - - -@cindex relative octave entry and transposition -@cindex transposition and relative octave entry - -@funindex \transpose -@funindex transpose -@funindex \chordmode -@funindex chordmode -@funindex \relative -@funindex relative - - -@c DEPRECATED -If no @var{startpitch} is specified for @code{\relative}, -then@tie{}@code{c'} is assumed. However, this is a deprecated -option and may disappear in future versions, so its use is -discouraged. - - - -@node Accidentals -@unnumberedsubsubsec Accidentals - -@cindex accidental -@cindex key signature -@cindex clef - -@c duplicated in Key signature and Accidentals -@warning{New users are sometimes confused about accidentals and -key signatures. In LilyPond, note names are the raw input; key -signatures and clefs determine how this raw input is displayed. -An unaltered note like@tie{}@code{c} means @q{C natural}, -regardless of the key signature or clef. For more information, -see @rlearning{Accidentals and key signatures}.} - -@cindex note names, Dutch -@cindex note names, default -@cindex default note names -@cindex sharp -@cindex flat -@cindex double sharp -@cindex sharp, double -@cindex double flat -@cindex flat, double -@cindex natural sign -@cindex natural pitch - -A @notation{sharp} pitch is made by adding @code{is} to the note -name, and a @notation{flat} pitch by adding @code{es}. As you -might expect, a @notation{double sharp} or @notation{double flat} -is made by adding @code{isis} or @code{eses}. This syntax is -derived from Dutch note naming conventions. To use other names -for accidentals, see @ref{Note names in other languages}. - -@lilypond[verbatim,quote,relative=2] -ais1 aes aisis aeses -@end lilypond - -A natural will cancel the effect of an accidental or key -signature. However, naturals are not encoded into the note name -syntax with a suffix; a natural pitch is shown as a simple note -name: - -@lilypond[verbatim,quote,relative=2] -a4 aes a2 -@end lilypond - -@cindex quarter tones -@cindex semi-flats -@cindex semi-sharps - -Quarter tones may be added; the following is a series of Cs with -increasing pitches: - -@lilypond[verbatim,quote,relative=2] -ceseh1 ces ceh c cih cis cisih -@end lilypond - - - -@cindex accidental, reminder -@cindex accidental, cautionary -@cindex accidental, parenthesized -@cindex reminder accidental -@cindex cautionary accidental -@cindex parenthesized accidental - -@funindex ? -@funindex ! - - -Normally accidentals are printed automatically, but you may also -print them manually. A reminder accidental can be forced by -adding an exclamation mark@tie{}@code{!} after the pitch. A -cautionary accidental (i.e., an accidental within parentheses) can -be obtained by adding the question mark@tie{}@code{?} after the -pitch. These extra accidentals can also be used to produce -natural signs. - -@lilypond[verbatim,quote,relative=2] -cis cis cis! cis? c c c! c? -@end lilypond - -@cindex accidental on tied note -@cindex tied note, accidental - -Accidentals on tied notes are only printed at the beginning of a -new system: - -@lilypond[verbatim,quote,relative=2] -cis1 ~ cis ~ -\break -cis -@end lilypond - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{preventing-extra-naturals-from-being-automatically-added.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{makam-example.ly} - - -@seealso -Music Glossary: -@rglos{sharp}, -@rglos{flat}, -@rglos{double sharp}, -@rglos{double flat}, -@rglos{Pitch names}, -@rglos{quarter tone}. - -Learning Manual: -@rlearning{Accidentals and key signatures}. - -Notation Reference: -@ref{Automatic accidentals}, -@ref{Annotational accidentals (musica ficta)}, -@ref{Note names in other languages}. - -Snippets: -@rlsr{Pitches}. - -Internals Reference: -@rinternals{Accidental_engraver}, -@rinternals{Accidental}, -@rinternals{AccidentalCautionary}, -@rinternals{accidental-interface}. - - -@cindex accidental, quarter-tone -@cindex quarter-tone accidental - -@knownissues - -There are no generally accepted standards for denoting -quarter-tone accidentals, so LilyPond's symbol does not conform to -any standard. - - - -@node Note names in other languages -@unnumberedsubsubsec Note names in other languages - -@cindex note names, other languages -@cindex pitch names, other languages -@cindex language, note names in other -@cindex language, pitch names in other - -There are predefined sets of note and accidental names for various -other languages. To use them, include the language-specific init -file listed below. For example, to use English note names, add -@code{@w{\include "english.ly"}} to the input file. - -@warning{Because some other include files (such as @code{@w{predefined-fretboards.ly}}) -use default (Nederlands) note names, the @code{@bs{}include} -command for the language file should be placed after all other -LilyPond distribution files.} - -The available language files and the note names they define are: - -@quotation -@multitable {@file{nederlands.ly}} {do re mi fa sol la sib si} -@headitem Language File - @tab Note Names -@item @file{nederlands.ly} - @tab c d e f g a bes b -@item @file{arabic.ly} - @tab do re mi fa sol la sib si -@item @file{catalan.ly} - @tab do re mi fa sol la sib si -@item @file{deutsch.ly} - @tab c d e f g a b h -@item @file{english.ly} - @tab c d e f g a bf b -@item @file{espanol.ly} - @tab do re mi fa sol la sib si -@item @file{italiano.ly} - @tab do re mi fa sol la sib si -@item @file{norsk.ly} - @tab c d e f g a b h -@item @file{portugues.ly} - @tab do re mi fa sol la sib si -@item @file{suomi.ly} - @tab c d e f g a b h -@item @file{svenska.ly} - @tab c d e f g a b h -@item @file{vlaams.ly} - @tab do re mi fa sol la sib si -@end multitable -@end quotation - -@noindent -and the accidental suffixes they define are: - -@quotation -@multitable {@file{nederlands.ly}} {-s/-sharp} {-ess/-es} {-ss/-x/-sharpsharp} {-essess/-eses} -@headitem Language File - @tab sharp @tab flat @tab double sharp @tab double flat -@item @file{nederlands.ly} - @tab -is @tab -es @tab -isis @tab -eses -@item @file{arabic.ly} - @tab -d @tab -b @tab -dd @tab -bb -@item @file{catalan.ly} - @tab -d/-s @tab -b @tab -dd/-ss @tab -bb -@item @file{deutsch.ly} - @tab -is @tab -es @tab -isis @tab -eses -@item @file{english.ly} - @tab -s/-sharp @tab -f/-flat @tab -ss/-x/-sharpsharp - @tab -ff/-flatflat -@item @file{espanol.ly} - @tab -s @tab -b @tab -ss @tab -bb -@item @file{italiano.ly} - @tab -d @tab -b @tab -dd @tab -bb -@item @file{norsk.ly} - @tab -iss/-is @tab -ess/-es @tab -ississ/-isis - @tab -essess/-eses -@item @file{portugues.ly} - @tab -s @tab -b @tab -ss @tab -bb -@item @file{suomi.ly} - @tab -is @tab -es @tab -isis @tab -eses -@item @file{svenska.ly} - @tab -iss @tab -ess @tab -ississ @tab -essess -@item @file{vlaams.ly} - @tab -k @tab -b @tab -kk @tab -bb -@end multitable -@end quotation - -In Dutch, @code{aes} is contracted to @code{as}, but both forms -are accepted in LilyPond. Similarly, both @code{es} and -@code{ees} are accepted. This also applies to -@code{aeses}@tie{}/@tie{}@code{ases} and -@code{eeses}@tie{}/@tie{}@code{eses}. Sometimes only these -contracted names are defined in the corresponding language files. - -@lilypond[verbatim,quote,relative=2] -a2 as e es a ases e eses -@end lilypond - - -@cindex microtones -@cindex semi-sharp -@cindex semi-flat -@cindex sesqui-sharp -@cindex sesqui-flat - -Some music uses microtones whose alterations are fractions of a -@q{normal} sharp or flat. The note names for quarter-tones -defined in the various language files are listed in the following -table. Here the prefixes @notation{semi-} and @notation{sesqui-} -mean @q{half} and @q{one and a half}, respectively. For the other -languages, no special names have been defined yet. - -@quotation -@multitable {@file{nederlands.ly}} {@b{semi-sharp}} {@b{semi-flat}} {@b{sesqui-sharp}} {@b{sesqui-flat}} -@headitem Language File - @tab semi-sharp @tab semi-flat @tab sesqui-sharp @tab sesqui-flat - -@item @file{nederlands.ly} - @tab -ih @tab -eh @tab -isih @tab -eseh -@item @file{arabic.ly} - @tab -sd @tab -sb @tab -dsd @tab -bsb -@item @file{deutsch.ly} - @tab -ih @tab -eh @tab -isih @tab -eseh -@item @file{english.ly} - @tab -qs @tab -qf @tab -tqs @tab -tqf -@item @file{italiano.ly} - @tab -sd @tab -sb @tab -dsd @tab -bsb -@item @file{portugues.ly} - @tab -sqt @tab -bqt @tab -stqt @tab -btqt -@end multitable -@end quotation - - -@seealso -Music Glossary: -@rglos{Pitch names}. - -Snippets: -@rlsr{Pitches}. - - -@node Changing multiple pitches -@subsection Changing multiple pitches - -This section discusses how to modify pitches. - -@menu -* Octave checks:: -* Transpose:: -@end menu - -@node Octave checks -@unnumberedsubsubsec Octave checks - -@cindex octave correction -@cindex octave check -@cindex control pitch - -@funindex = -@funindex \octaveCheck -@funindex octaveCheck -@funindex controlpitch - -In relative mode, it is easy to forget an octave changing mark. -Octave checks make such errors easier to find by displaying a -warning and correcting the octave if a note is found in an -unexpected octave. - -To check the octave of a note, specify the absolute octave after -the @code{=}@tie{}symbol. This example will generate a warning -(and change the pitch) because the second note is the absolute -octave @code{d''} instead of @code{d'} as indicated by the octave -correction. - -@lilypond[verbatim,quote] -\relative c'' { - c2 d='4 d - e2 f -} -@end lilypond - -The octave of notes may also be checked with the -@code{\octaveCheck}@tie{}@var{controlpitch} command. -@var{controlpitch} is specified in absolute mode. This checks -that the interval between the previous note and the -@var{controlpitch} is within a fourth (i.e., the normal -calculation of relative mode). If this check fails, a warning is -printed, but the previous note is not changed. Future notes are -relative to the @var{controlpitch}. - -@lilypond[verbatim,quote] -\relative c'' { - c2 d - \octaveCheck c' - e2 f -} -@end lilypond - -Compare the two bars below. The first and third @code{\octaveCheck} -checks fail, but the second one does not fail. - -@lilypond[verbatim,quote] -\relative c'' { - c4 f g f - - c4 - \octaveCheck c' - f - \octaveCheck c' - g - \octaveCheck c' - f -} -@end lilypond - - -@seealso -Snippets: -@rlsr{Pitches}. - -Internals Reference: -@rinternals{RelativeOctaveCheck}. - - -@node Transpose -@unnumberedsubsubsec Transpose - -@cindex transpose -@cindex transposing -@cindex transposition -@cindex transposition of pitches -@cindex transposition of notes -@cindex pitches, transposition of -@cindex notes, transposition of - -@funindex \transpose -@funindex transpose - -A music expression can be transposed with @code{\transpose}. The -syntax is - -@example -\transpose @var{frompitch} @var{topitch} @var{musicexpr} -@end example - -@noindent -This means that @var{musicexpr} is transposed by the interval -between the pitches @var{frompitch} and @var{topitch}: any note -with pitch @var{frompitch} is changed to @var{topitch} and any -other note is transposed by the same interval. Both pitches are -entered in absolute mode. - -@warning{Music inside a @code{@bs{}transpose} block is absolute -unless a @code{@bs{}relative} is included in the block.} - -Consider a piece written in the key of D-major. It can be -transposed up to E-major; note that the key signature is -automatically transposed as well. - -@lilypond[verbatim,quote] -\transpose d e { - \relative c' { - \key d \major - d4 fis a d - } -} -@end lilypond - -@cindex transposing instruments -@cindex instruments, transposing - -If a part written in C (normal @notation{concert pitch}) is to be -played on the A clarinet (for which an A is notated as a C and -thus sounds a minor third lower than notated), the appropriate -part will be produced with: - -@lilypond[verbatim,quote] -\transpose a c' { - \relative c' { - \key c \major - c4 d e g - } -} -@end lilypond - -@noindent -Note that we specify @w{@code{\key c \major}} explicitly. If we -do not specify a key signature, the notes will be transposed but -no key signature will be printed. - -@code{\transpose} distinguishes between enharmonic pitches: both -@w{@code{\transpose c cis}} or @w{@code{\transpose c des}} will -transpose up a semitone. The first version will print sharps and -the notes will remain on the same scale step, the second version -will print flats on the scale step above. - -@lilypond[verbatim,quote] -music = \relative c' { c d e f } -\new Staff { - \transpose c cis { \music } - \transpose c des { \music } -} -@end lilypond - - -@code{\transpose} may also be used in a different way, to input -written notes for a transposing instrument. The previous examples -show how to enter pitches in C (or @notation{concert pitch}) and -typeset them for a transposing instrument, but the opposite is -also possible if you for example have a set of instrumental parts -and want to print a conductor's score. For example, when entering -music for a B-flat trumpet that begins on a notated E (concert D), -one would write: - -@example -musicInBflat = @{ e4 @dots{} @} -\transpose c bes, \musicInBflat -@end example - -@noindent -To print this music in F (e.g., rearranging to a French horn) you -could wrap the existing music with another @code{\transpose}: - -@example -musicInBflat = @{ e4 @dots{} @} -\transpose f c' @{ \transpose c bes, \musicInBflat @} -@end example - -@noindent -For more information about transposing instruments, -see @ref{Instrument transpositions}. - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{transposing-pitches-with-minimum-accidentals-smart-transpose.ly} - - -@seealso -Notation Reference: -@ref{Relative octave entry}, -@ref{Instrument transpositions}. - -Snippets: -@rlsr{Pitches}. - -Internals Reference: -@rinternals{TransposedMusic}. - - -@funindex \transpose -@funindex transpose -@funindex \chordmode -@funindex chordmode -@funindex \relative -@funindex relative - -@knownissues - -The relative conversion will not affect @code{\transpose}, -@code{\chordmode} or @code{\relative} sections in its argument. -To use relative mode within transposed music, an additional -@code{\relative} must be placed inside @code{\transpose}. - -@node Displaying pitches -@subsection Displaying pitches - -This section discusses how to alter the output of pitches. - -@menu -* Clef:: -* Key signature:: -* Ottava brackets:: -* Instrument transpositions:: -* Automatic accidentals:: -* Ambitus:: -@end menu - - -@node Clef -@unnumberedsubsubsec Clef - -@cindex G clef -@cindex C clef -@cindex F clef -@cindex treble clef -@cindex violin clef -@cindex alto clef -@cindex tenor clef -@cindex bass clef -@cindex french clef -@cindex soprano clef -@cindex mezzosoprano clef -@cindex baritone clef -@cindex varbaritone clef -@cindex subbass clef -@cindex clef -@cindex ancient clef -@cindex clef, ancient -@cindex clef, G -@cindex clef, C -@cindex clef, F -@cindex clef, treble -@cindex clef, violin -@cindex clef, alto -@cindex clef, tenor -@cindex clef, bass -@cindex clef, french -@cindex clef, soprano -@cindex clef, mezzosoprano -@cindex clef, baritone -@cindex clef, varbaritone -@cindex subbass clef, subbass - -@funindex \clef -@funindex clef - -The clef may be altered. Middle C is shown in every example. - -@lilypond[verbatim,quote,relative=1] -\clef treble -c2 c -\clef alto -c2 c -\clef tenor -c2 c -\clef bass -c2 c -@end lilypond - -Other clefs include: - -@lilypond[verbatim,quote,relative=1] -\clef french -c2 c -\clef soprano -c2 c -\clef mezzosoprano -c2 c -\clef baritone -c2 c - -\break - -\clef varbaritone -c2 c -\clef subbass -c2 c -\clef percussion -c2 c -\clef tab -c2 c -@end lilypond - -Further supported clefs are described under @ref{Mensural clefs} -and @ref{Gregorian clefs}. - -@cindex transposing clefs -@cindex clef, transposing -@cindex octave transposition -@cindex choral tenor clef -@cindex tenor clef, choral - -By adding@tie{}@code{_8} or@tie{}@code{^8} to the clef name, the -clef is transposed one octave down or up, respectively, -and@tie{}@code{_15} and@tie{}@code{^15} transpose by two octaves. -The clef name must be enclosed in quotes when it contains -underscores or digits. - -@lilypond[verbatim,quote,relative=2] -\clef treble -c2 c -\clef "treble_8" -c2 c -\clef "bass^15" -c2 c -@end lilypond - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{tweaking-clef-properties.ly} - - -@seealso -Notation Reference: -@ref{Mensural clefs}, @ref{Gregorian clefs}. - -Snippets: -@rlsr{Pitches}. - -Internals Reference: -@rinternals{Clef_engraver}, -@rinternals{Clef}, -@rinternals{OctavateEight}, -@rinternals{clef-interface}. - - -@node Key signature -@unnumberedsubsubsec Key signature - -@cindex key signature - -@funindex \key -@funindex key - -@c duplicated in Key signature and Accidentals -@warning{New users are sometimes confused about accidentals and -key signatures. In LilyPond, note names are the raw input; key -signatures and clefs determine how this raw input is displayed. -An unaltered note like@tie{}@code{c} means @q{C natural}, -regardless of the key signature or clef. For more information, -see @rlearning{Accidentals and key signatures}.} - -The key signature indicates the tonality in which a piece is -played. It is denoted by a set of alterations (flats or sharps) -at the start of the staff. The key signature may be altered: - -@example -\key @var{pitch} @var{mode} -@end example - -@funindex \major -@funindex major -@funindex \minor -@funindex minor -@funindex \ionian -@funindex ionian -@funindex \locrian -@funindex locrian -@funindex \aeolian -@funindex aeolian -@funindex \mixolydian -@funindex mixolydian -@funindex \lydian -@funindex lydian -@funindex \phrygian -@funindex phrygian -@funindex \dorian -@funindex dorian - -@cindex church modes -@cindex modes -@cindex major -@cindex minor -@cindex ionian -@cindex locrian -@cindex aeolian -@cindex mixolydian -@cindex lydian -@cindex phrygian -@cindex dorian - -Here, @var{mode} should be @code{\major} or @code{\minor} to get a -key signature of @var{pitch}-major or @var{pitch}-minor, -respectively. You may also use the standard mode names, also -called @notation{church modes}: @code{\ionian}, @code{\dorian}, -@code{\phrygian}, @code{\lydian}, @code{\mixolydian}, -@code{\aeolian}, and @code{\locrian}. - -@lilypond[verbatim,quote,relative=2] -\key g \major -fis1 -f -fis -@end lilypond - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{non-traditional-key-signatures.ly} - - -@seealso -Music Glossary: -@rglos{church mode}, -@rglos{scordatura}. - -Learning Manual: -@rlearning{Accidentals and key signatures}. - -Snippets: -@rlsr{Pitches}. - -Internals Reference: -@rinternals{KeyChangeEvent}, -@rinternals{Key_engraver}, -@rinternals{Key_performer}, -@rinternals{KeyCancellation}, -@rinternals{KeySignature}, -@rinternals{key-cancellation-interface}, -@rinternals{key-signature-interface}. - - -@node Ottava brackets -@unnumberedsubsubsec Ottava brackets - -@cindex ottava -@cindex 15ma -@cindex 8va -@cindex 8ve -@cindex octavation - -@funindex set-octavation -@funindex \ottava -@funindex ottava - -@notation{Ottava brackets} introduce an extra transposition of an -octave for the staff: - -@lilypond[verbatim,quote,relative=2] -a'2 b -\ottava #1 -a b -\ottava #0 -a b -@end lilypond - -The @code{ottava} function also takes -1 (for 8va bassa), -2@tie{}(for 15ma), and -2 (for 15ma bassa) as arguments. - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{ottava-text.ly} - - -@seealso -Music Glossary: -@rglos{octavation}. - -Snippets: -@rlsr{Pitches}. - -Internals Reference: -@rinternals{Ottava_spanner_engraver}, -@rinternals{OttavaBracket}, -@rinternals{ottava-bracket-interface}. - - -@node Instrument transpositions -@unnumberedsubsubsec Instrument transpositions - -@cindex transposition, MIDI -@cindex transposition, instrument -@cindex transposing instrument -@cindex MIDI -@cindex MIDI transposition - -@funindex \transposition -@funindex transposition - -When typesetting scores that involve transposing instruments, some -parts can be typeset in a different pitch than the -@notation{concert pitch}. In these cases, the key of the -@notation{transposing instrument} should be specified; otherwise -the MIDI output and cues in other parts will produce incorrect -pitches. For more information about quotations, see -@ref{Quoting other voices}. - -@example -\transposition @var{pitch} -@end example - -The pitch to use for @code{\transposition} should correspond to -the real sound heard when a@tie{}@code{c'} written on the staff is -played by the transposing instrument. This pitch is entered in -absolute mode, so an instrument that produces a real sound which -is one tone higher than the printed music should use -@w{@code{\transposition d'}}. @code{\transposition} should -@emph{only} be used if the pitches are @emph{not} being entered in -concert pitch. - -Here are a few notes for violin and B-flat clarinet where the -parts have been entered using the notes and key as they appear in -each part of the conductor's score. The two instruments are -playing in unison. - -@lilypond[verbatim,quote] -\new GrandStaff << - \new Staff = "violin" { - \relative c'' { - \set Staff.instrumentName = #"Vln" - \set Staff.midiInstrument = #"violin" - % not strictly necessary, but a good reminder - \transposition c' - - \key c \major - g4( c8) r c r c4 - } - } - \new Staff = "clarinet" { - \relative c'' { - \set Staff.instrumentName = \markup { Cl (B\flat) } - \set Staff.midiInstrument = #"clarinet" - \transposition bes - - \key d \major - a4( d8) r d r d4 - } - } ->> -@end lilypond - -The @code{\transposition} may be changed during a piece. For -example, a clarinetist may switch from an A clarinet to a B-flat -clarinet. - -@lilypond[verbatim,quote,relative=2] -\set Staff.instrumentName = #"Cl (A)" -\key a \major -\transposition a -c d e f -\textLengthOn -s1*0^\markup { Switch to B\flat clarinet } -R1 - -\key bes \major -\transposition bes -c2 g -@end lilypond - - -@seealso -Music Glossary: -@rglos{concert pitch}, -@rglos{transposing instrument}. - -Notation Reference: -@ref{Quoting other voices}, @ref{Transpose}. - -Snippets: -@rlsr{Pitches}. - - -@node Automatic accidentals -@unnumberedsubsubsec Automatic accidentals - -@cindex accidental style -@cindex accidental style, default -@cindex accidentals -@cindex accidentals, automatic -@cindex automatic accidentals -@cindex default accidental style - -@funindex set-accidental-style -@funindex voice -@funindex default - -There are many different conventions on how to typeset -accidentals. LilyPond provides a function to specify which -accidental style to use. This function is called as follows: - -@example -\new Staff << - #(set-accidental-style 'voice) - @{ @dots{} @} ->> -@end example - -The accidental style applies to the current @code{Staff} by -default (with the exception of the styles @code{piano} and -@code{piano-cautionary}, which are explained below). Optionally, -the function can take a second argument that determines in which -scope the style should be changed. For example, to use the same -style in all staves of the current @code{StaffGroup}, use: - -@example -#(set-accidental-style 'voice 'StaffGroup) -@end example - -The following accidental styles are supported. To demonstrate -each style, we use the following example: - - -@lilypond[verbatim,quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'default) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'default) - \musicB - } - >> -} -@end lilypond - -Note that the last lines of this example can be replaced by the -following, as long as the same accidental style should be used in -both staves. - -@example -\new PianoStaff @{ - << - \context Staff = "up" @{ - %%% change the next line as desired: - #(set-accidental-style 'default 'Score) - \musicA - @} - \context Staff = "down" @{ - \musicB - @} - >> -@} -@end example - - -@c don't use verbatim in this table. -@table @code -@item default - -@cindex default accidental style -@cindex accidental style, default - -@funindex default - -This is the default typesetting behavior. It corresponds to -eighteenth-century common practice: accidentals are remembered to -the end of the measure in which they occur and only in their own -octave. Thus, in the example below, no natural signs are printed -before the@tie{}@code{b} in the second measure or the -last@tie{}@code{c}: - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'default) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'default) - \musicB - } - >> -} -@end lilypond - -@item voice - -@cindex accidental style, voice -@cindex voice accidental style -@cindex accidental style, modern -@cindex modern accidental style -@cindex accidental style, modern-cautionary -@cindex modern-cautionary accidental style - -@funindex voice - -The normal behavior is to remember the accidentals at -@code{Staff}-level. In this style, however, accidentals are -typeset individually for each voice. Apart from that, the rule is -similar to @code{default}. - -As a result, accidentals from one voice do not get canceled in -other voices, which is often an unwanted result: in the following -example, it is hard to determine whether the second@tie{}@code{a} -should be played natural or sharp. The @code{voice} option should -therefore be used only if the voices are to be read solely by -individual musicians. If the staff is to be used by one musician -(e.g., a conductor or in a piano score) then @code{modern} or -@code{modern-cautionary} should be used instead. - - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'voice) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'voice) - \musicB - } - >> -} -@end lilypond - -@item modern - -@cindex accidentals, modern style -@cindex modern style accidentals - -@funindex modern - -This rule corresponds to the common practice in the twentieth -century. It prints the same accidentals as @code{default}, with -two exceptions that serve to avoid ambiguity: after temporary -accidentals, cancellation marks are printed also in the following -measure (for notes in the same octave) and, in the same measure, -for notes in other octaves. Hence the naturals before -the@tie{}@code{b} and the@tie{}@code{c} in the second measure of -the upper staff: - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'modern) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'modern) - \musicB - } - >> -} -@end lilypond - -@item modern-cautionary - -@cindex accidentals, modern cautionary style -@cindex modern accidental style -@cindex modern cautionary accidental style -@cindex modern style accidentals -@cindex modern style cautionary accidentals - -@funindex modern-cautionary - -This rule is similar to @code{modern}, but the @q{extra} -accidentals (the ones not typeset by @code{default}) are typeset -as cautionary accidentals. They are by default printed with -parentheses, but they can also be printed in reduced size by -defining the @code{cautionary-style} property of -@code{AccidentalSuggestion}. - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'modern-cautionary) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'modern-cautionary) - \musicB - } - >> -} -@end lilypond - -@item modern-voice - -@cindex accidental style, modern -@cindex accidentals, modern -@cindex accidentals, multivoice -@cindex modern accidental style -@cindex modern accidentals -@cindex multivoice accidentals - -@funindex modern-voice - -This rule is used for multivoice accidentals to be read both by -musicians playing one voice and musicians playing all voices. -Accidentals are typeset for each voice, but they @emph{are} -canceled across voices in the same @code{Staff}. Hence, -the@tie{}@code{a} in the last measure is canceled because the -previous cancellation was in a different voice, and -the@tie{}@code{d} in the lower staff is canceled because of the -accidental in a different voice in the previous measure: - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'modern-voice) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'modern-voice) - \musicB - } - >> -} -@end lilypond - -@cindex accidental style, cautionary, modern voice -@cindex accidental style, modern voice cautionary -@cindex accidental style, voice, modern cautionary - -@funindex modern-voice-cautionary - -@item modern-voice-cautionary - -This rule is the same as @code{modern-voice}, but with the extra -accidentals (the ones not typeset by @code{voice}) typeset as -cautionaries. Even though all accidentals typeset by -@code{default} @emph{are} typeset with this rule, some of them are -typeset as cautionaries. - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'modern-voice-cautionary) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'modern-voice-cautionary) - \musicB - } - >> -} -@end lilypond - -@item piano - -@cindex accidental style, piano -@cindex accidentals, piano -@cindex piano accidental style -@cindex piano accidentals - -@funindex piano - -This rule reflects twentieth-century practice for piano notation. -Its behavior is very similar to @code{modern} style, but here -accidentals also get canceled across the staves in the same -@code{GrandStaff} or @code{PianoStaff}, hence all the -cancellations of the final notes. - -This accidental style applies to the current @code{GrandStaff} or -@code{PianoStaff} by default. - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'piano) - \musicA - } - \context Staff = "down" { - \musicB - } - >> -} -@end lilypond - -@item piano-cautionary - -@cindex accidentals, piano cautionary -@cindex cautionary accidentals, piano -@cindex piano cautionary accidentals -@cindex accidental style, piano cautionary -@cindex cautionary accidental style, piano -@cindex piano cautionary accidental style - -@funindex piano-cautionary - -This is the same as @code{piano} but with the extra accidentals -typeset as cautionaries. - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'piano-cautionary) - \musicA - } - \context Staff = "down" { - \musicB - } - >> -} -@end lilypond - - -@item neo-modern - -@cindex neo-modern accidental style -@cindex accidental style, neo-modern - -@funindex neo-modern - -This rule reproduces a common practice in contemporary music: -accidentals are printed like with @code{modern}, but they are printed -again if the same note appears later in the same measure -- except -if the note is immediately repeated. - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'neo-modern) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'neo-modern) - \musicB - } - >> -} -@end lilypond - -@item neo-modern-cautionary - -@cindex neo-modern-cautionary accidental style -@cindex accidental style, neo-modern-cautionary - -@funindex neo-modern-cautionary - -This rule is similar to @code{neo-modern}, but the extra -accidentals are printed as cautionary accidentals. - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'neo-modern-cautionary) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'neo-modern-cautionary) - \musicB - } - >> -} -@end lilypond - - -@item dodecaphonic - -@cindex dodecaphonic accidental style -@cindex dodecaphonic style, neo-modern - -@funindex dodecaphonic - -This rule reflects a practice introduced by composers at -the beginning of the 20th century, in an attempt to -abolish the hierarchy between natural and non-natural notes. -With this style, @emph{every} note gets an accidental sign, -including natural signs. - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'dodecaphonic) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'dodecaphonic) - \musicB - } - >> -} -@end lilypond - - -@item teaching - -@cindex teaching accidental style -@cindex accidental style, teaching - -@funindex teaching - -This rule is intended for students, and makes it easy to create -scale sheets with automagically created cautionary accidentals. -Accidentals are printed like with @code{modern}, but cautionary -accidentals are added for all sharp or flat tones specified by the -key signature, except if the note is immediately repeated. - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - \key fis \minor - #(set-accidental-style 'teaching) - \musicA - } - \context Staff = "down" { - \key fis \minor - #(set-accidental-style 'teaching) - \musicB - } - >> -} -@end lilypond - - - -@item no-reset - -@cindex accidental style, no reset -@cindex no reset accidental style - -@funindex no-reset - -This is the same as @code{default} but with accidentals lasting -@q{forever} and not only within the same measure: - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'no-reset) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'no-reset) - \musicB - } - >> -} -@end lilypond - -@item forget - -@cindex forget accidental style -@cindex accidental style, forget - -@funindex forget - -This is the opposite of @code{no-reset}: Accidentals are not -remembered at all -- and hence all accidentals are typeset -relative to the key signature, regardless of what came before in -the music. Unlike @code{dodecaphonic}, this rule never prints -any naturals. - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'forget) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'forget) - \musicB - } - >> -} -@end lilypond -@end table - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{dodecaphonic-style-accidentals-for-each-note-including-naturals.ly} - - -@seealso -Snippets: -@rlsr{Pitches}. - -Internals Reference: -@rinternals{Accidental}, -@rinternals{Accidental_engraver}, -@rinternals{GrandStaff} and -@rinternals{PianoStaff}, -@rinternals{Staff}, -@rinternals{AccidentalSuggestion}, -@rinternals{AccidentalPlacement}, -@rinternals{accidental-suggestion-interface}. - - -@cindex accidentals and simultaneous notes -@cindex simultaneous notes and accidentals -@cindex accidentals in chords -@cindex chords, accidentals in - -@knownissues - -Simultaneous notes are considered to be entered in sequential -mode. This means that in a chord the accidentals are typeset as -if the notes in the chord happen one at a time, in the order in -which they appear in the input file. This is a problem when -accidentals in a chord depend on each other, which does not happen -for the default accidental style. The problem can be solved by -manually inserting@tie{}@code{!} and@tie{}@code{?} for the -problematic notes. - - -@node Ambitus -@unnumberedsubsubsec Ambitus - -@cindex ambitus -@cindex range of pitches -@cindex pitch range - -The term @notation{ambitus} (pl. ambitus) denotes a range of -pitches for a given voice in a part of music. It may also denote -the pitch range that a musical instrument is capable of playing. -Ambitus are printed on vocal parts so that performers can easily -determine if it matches their capabilities. - -Ambitus are denoted at the beginning of a piece near the initial -clef. The range is graphically specified by two note heads that -represent the lowest and highest pitches. Accidentals are only -printed if they are not part of the key signature. - -@lilypond[verbatim,quote] -\layout { - \context { - \Voice - \consists "Ambitus_engraver" - } -} - -\relative c'' { - aes c e2 - cis,1 -} -@end lilypond - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{adding-ambitus-per-voice.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{ambitus-with-multiple-voices.ly} - - -@seealso -Music Glossary: -@rglos{ambitus}. - -Snippets: -@rlsr{Pitches}. - -Internals Reference: -@rinternals{Ambitus_engraver}, -@rinternals{Voice}, -@rinternals{Staff}, -@rinternals{Ambitus}, -@rinternals{AmbitusAccidental}, -@rinternals{AmbitusLine}, -@rinternals{AmbitusNoteHead}, -@rinternals{ambitus-interface}. - - -@knownissues - -There is no collision handling in the case of multiple per-voice -ambitus. - - -@node Note heads -@subsection Note heads - -This section suggests ways of altering note heads. - -@menu -* Special note heads:: -* Easy notation note heads:: -* Shape note heads:: -* Improvisation:: -@end menu - -@node Special note heads -@unnumberedsubsubsec Special note heads - -@cindex note heads, special -@cindex note heads, cross -@cindex note heads, diamond -@cindex note heads, parlato -@cindex note heads, harmonic -@cindex note heads, guitar -@cindex special note heads -@cindex cross note heads -@cindex diamond note heads -@cindex parlato note heads -@cindex harmonic note heads -@cindex guitar note heads -@cindex note head styles -@cindex styles, note heads - -@funindex cross - -Note heads may be altered: - -@lilypond[verbatim,quote,relative=2] -c4 b a b -\override NoteHead #'style = #'cross -c4 b a b -\revert NoteHead #'style -c4 d e f -@end lilypond - -There is a shorthand for diamond shapes which can only be used -inside chords: - -@lilypond[verbatim,quote,relative=2] -2 4 -@end lilypond - -@noindent -To see all note head styles, see @ref{Note head styles}. - - -@seealso -Snippets: -@rlsr{Pitches}. - -Notation Reference: -@ref{Note head styles}, -@ref{Chorded notes}. - -Internals Reference: -@rinternals{note-event}, -@rinternals{Note_heads_engraver}, -@rinternals{Ledger_line_engraver}, -@rinternals{NoteHead}, -@rinternals{LedgerLineSpanner}, -@rinternals{note-head-interface}, -@rinternals{ledger-line-spanner-interface}. - - -@node Easy notation note heads -@unnumberedsubsubsec Easy notation note heads - -@cindex note heads, practice -@cindex practice note heads -@cindex note heads, easy notation -@cindex easy notation -@cindex Hal Leonard -@cindex beginners' music -@cindex music, beginners' -@cindex easy play note heads -@cindex note heads, easy play - -@funindex \easyHeadsOn -@funindex easyHeadsOn -@funindex \easyHeadsOff -@funindex easyHeadsOff - -The @q{easy play} note head includes a note name inside the head. -It is used in music for beginners. To make the letters readable, -it should be printed in a large font size. To print with a larger -font, see @ref{Setting the staff size}. - -@lilypond[verbatim,quote] -#(set-global-staff-size 26) -\relative c' { - \easyHeadsOn - c2 e4 f - g1 - \easyHeadsOff - c,1 -} -@end lilypond - - -@predefined -@code{\easyHeadsOn}, -@code{\easyHeadsOff}. -@endpredefined - - -@seealso -Notation Reference: -@ref{Setting the staff size}. - -Snippets: -@rlsr{Pitches}. - -Internals Reference: -@rinternals{note-event}, -@rinternals{Note_heads_engraver}, -@rinternals{NoteHead}, -@rinternals{note-head-interface}. - - -@node Shape note heads -@unnumberedsubsubsec Shape note heads - -@cindex note heads, shape -@cindex note heads, Aiken -@cindex note heads, sacred harp -@cindex shape notes -@cindex Aiken shape note heads -@cindex sacred harp note heads - -@funindex \key -@funindex key -@funindex \aikenHeads -@funindex aikenHeads -@funindex \sacredHarpHeads -@funindex sacredHarpHeads - -In shape note head notation, the shape of the note head -corresponds to the harmonic function of a note in the scale. This -notation was popular in nineteenth-century American song books. -Shape note heads can be produced: - -@lilypond[verbatim,quote,relative=2] -\aikenHeads -c, d e f g a b c -\sacredHarpHeads -c, d e f g a b c -@end lilypond - -Shapes are typeset according to the step in the scale, where the -base of the scale is determined by the @code{\key} command. - - -@predefined -@code{\aikenHeads}, -@code{\sacredHarpHeads}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{applying-note-head-styles-depending-on-the-step-of-the-scale.ly} - -@noindent -To see all note head styles, see @ref{Note head styles}. - - -@seealso -Snippets: -@rlsr{Pitches}. - -Notation Reference: -@ref{Note head styles}. - -Internals Reference: -@rinternals{note-event}, -@rinternals{Note_heads_engraver}, -@rinternals{NoteHead}, -@rinternals{note-head-interface}. - - -@node Improvisation -@unnumberedsubsubsec Improvisation - -@cindex improvisation -@cindex slashed note heads -@cindex note heads, improvisation -@cindex note heads, slashed - -@funindex \improvisationOn -@funindex improvisationOn -@funindex \improvisationOff -@funindex improvisationOff - -Improvisation is sometimes denoted with slashed note heads, where -the performer may choose any pitch but should play the specified -rhythm. Such note heads can be created: - -@lilypond[verbatim,quote,relative=2] -\new Voice \with { - \consists "Pitch_squash_engraver" -} { - e8 e g a a16( bes) a8 g - \improvisationOn - e8 ~ - e2 ~ e8 f4 f8 ~ - f2 - \improvisationOff - a16( bes) a8 g e -} -@end lilypond - - -@predefined -@code{\improvisationOn}, -@code{\improvisationOff}. -@endpredefined - - -@seealso -Snippets: -@rlsr{Pitches}. - -Internals Reference: -@rinternals{Pitch_squash_engraver}, -@rinternals{Voice}, -@rinternals{RhythmicStaff}. - - diff --git a/Documentation/user/preface.itely b/Documentation/user/preface.itely deleted file mode 100644 index d82632e77f..0000000000 --- a/Documentation/user/preface.itely +++ /dev/null @@ -1,59 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Preface -@unnumbered Preface - - -It must have been during a rehearsal of the EJE (Eindhoven Youth -Orchestra), somewhere in 1995 that Jan, one of the cranked violists, -told Han-Wen, one of the distorted French horn players, about the -grand new project he was working on. It was an automated system for -printing music (to be precise, it was MPP, a preprocessor for -MusiXTeX). As it happened, Han-Wen accidentally wanted to print out -some parts from a score, so he started looking at the software, and he -quickly got hooked. It was decided that MPP was a dead end. After -lots of philosophizing and heated email exchanges, Han-Wen started -LilyPond in 1996. This time, Jan got sucked into Han-Wen's new -project. - -In some ways, developing a computer program is like learning to play -an instrument. In the beginning, discovering how it works is fun, and -the things you cannot do are challenging. After the initial excitement, -you have to practice and practice. Scales and studies can be dull, and -if you are not motivated by others -- teachers, conductors or -audience -- it is very tempting to give up. You continue, and gradually -playing becomes a part of your life. Some days it comes naturally, and -it is wonderful, and on some days it just does not work, but you keep -playing, day after day. - -Like making music, working on LilyPond can be dull work, and on -some days it feels like plodding through a morass of bugs. -Nevertheless, it has become a part of our life, and we keep doing it. -Probably the most important motivation is that our program actually -does something useful for people. When we browse around the net we -find many people who use LilyPond, and produce impressive pieces of -sheet music. Seeing that feels unreal, but in a very pleasant way. - -Our users not only give us good vibes by using our program, many of -them also help us by giving suggestions and sending bug reports, so we -would like to thank all users that sent us bug reports, gave -suggestions or contributed in any other way to LilyPond. - -Playing and printing music is more than a nice analogy. Programming -together is a lot of fun, and helping people is deeply satisfying, but -ultimately, working on LilyPond is a way to express our deep love for -music. May it help you create lots of beautiful music! - -Han-Wen and Jan - -Utrecht/Eindhoven, The Netherlands, July 2002. - diff --git a/Documentation/user/programming-interface.itely b/Documentation/user/programming-interface.itely deleted file mode 100644 index 2d28412eab..0000000000 --- a/Documentation/user/programming-interface.itely +++ /dev/null @@ -1,1516 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Interfaces for programmers -@chapter Interfaces for programmers - -Advanced tweaks may be performed by using Scheme. If you are -not familiar with Scheme, you may wish to read our -@rlearning{Scheme tutorial}. - -@menu -* Music functions:: -* Programmer interfaces:: -* Building complicated functions:: -* Markup programmer interface:: -* Contexts for programmers:: -* Scheme procedures as properties:: -* Using Scheme code instead of \tweak:: -* Difficult tweaks:: -@end menu - - -@node Music functions -@section Music functions - -This section discusses how to create music functions within LilyPond. - -@menu -* Overview of music functions:: -* Simple substitution functions:: -* Paired substitution functions:: -* Mathematics in functions:: -* Void functions:: -* Functions without arguments:: -* Overview of available music functions:: -@end menu - -@node Overview of music functions -@subsection Overview of music functions - -Making a function which substitutes a variable into LilyPond -code is easy. The general form of these functions is - -@example -function = -#(define-music-function (parser location @var{var1} @var{var2}...@var{vari}... ) - (@var{var1-type?} @var{var2-type?}...@var{vari-type?}...) - #@{ - @emph{...music...} - #@}) -@end example - -@noindent -where - -@multitable @columnfractions .33 .66 -@item @var{vari} @tab @var{i}th variable -@item @var{vari-type?} @tab type of @var{i}th variable -@item @var{...music...} @tab normal LilyPond input, using - variables as @code{#$var1}, etc. -@end multitable - -There following input types may be used as variables -in a music function. This list is not exhaustive; see -other documentation specifically about Scheme for more -variable types. - -@multitable @columnfractions .33 .66 -@headitem Input type @tab @var{vari-type?} notation -@item Integer @tab @code{integer?} -@item Float (decimal number) @tab @code{number?} -@item Text string @tab @code{string?} -@item Markup @tab @code{markup?} -@item Music expression @tab @code{ly:music?} -@item A pair of variables @tab @code{pair?} -@end multitable - -The @code{parser} and @code{location} arguments are mandatory, -and are used in some advanced situations. The @code{parser} -argument is used to gain access to the value of another LilyPond -variable. The @code{location} argument -is used to set the @q{origin} of the music expression that is built -by the music function, so that in case of a syntax error LilyPond -can tell the user an appropriate place to look in the input file. - - -@node Simple substitution functions -@subsection Simple substitution functions - -Here is a simple example, - -@lilypond[quote,verbatim,ragged-right] -padText = #(define-music-function (parser location padding) (number?) - #{ - \once \override TextScript #'padding = #$padding - #}) - -\relative c''' { - c4^"piu mosso" b a b - \padText #1.8 - c4^"piu mosso" d e f - \padText #2.6 - c4^"piu mosso" fis a g -} -@end lilypond - -Music expressions may be substituted as well, - -@lilypond[quote,verbatim,ragged-right] -custosNote = #(define-music-function (parser location note) - (ly:music?) - #{ - \once \override Voice.NoteHead #'stencil = - #ly:text-interface::print - \once \override Voice.NoteHead #'text = - \markup \musicglyph #"custodes.mensural.u0" - \once \override Voice.Stem #'stencil = ##f - $note - #}) - -{ c' d' e' f' \custosNote g' } -@end lilypond - -Multiple variables may be used, - -@lilypond[quote,verbatim,ragged-right] -tempoPadded = #(define-music-function (parser location padding tempotext) - (number? string?) -#{ - \once \override Score.MetronomeMark #'padding = $padding - \tempo \markup { \bold $tempotext } -#}) - -\relative c'' { - \tempo \markup { "Low tempo" } - c4 d e f g1 - \tempoPadded #4.0 #"High tempo" - g4 f e d c1 -} -@end lilypond - - -@node Paired substitution functions -@subsection Paired substitution functions - -Some @code{\override} commands require a pair of numbers -(called a @code{cons cell} in Scheme). To pass these numbers -into a function, either use a @code{pair?} variable, or -insert the @code{cons} into the music function. - -@quotation -@example -manualBeam = -#(define-music-function (parser location beg-end) - (pair?) -#@{ - \once \override Beam #'positions = #$beg-end -#@}) - -\relative @{ - \manualBeam #'(3 . 6) c8 d e f -@} -@end example -@end quotation - -@noindent -or - -@lilypond[quote,verbatim,ragged-right] -manualBeam = -#(define-music-function (parser location beg end) - (number? number?) -#{ - \once \override Beam #'positions = #(cons $beg $end) -#}) - -\relative { - \manualBeam #3 #6 c8 d e f -} -@end lilypond - - -@node Mathematics in functions -@subsection Mathematics in functions - -Music functions can involve Scheme programming in -addition to simple substitution, - -@lilypond[quote,verbatim,ragged-right] -AltOn = #(define-music-function (parser location mag) (number?) - #{ \override Stem #'length = #$(* 7.0 mag) - \override NoteHead #'font-size = - #$(inexact->exact (* (/ 6.0 (log 2.0)) (log mag))) #}) - -AltOff = { - \revert Stem #'length - \revert NoteHead #'font-size -} - -{ c'2 \AltOn #0.5 c'4 c' - \AltOn #1.5 c' c' \AltOff c'2 } -@end lilypond - -@noindent -This example may be rewritten to pass in music expressions, - -@lilypond[quote,verbatim,ragged-right] -withAlt = #(define-music-function (parser location mag music) (number? ly:music?) - #{ \override Stem #'length = #$(* 7.0 mag) - \override NoteHead #'font-size = - #$(inexact->exact (* (/ 6.0 (log 2.0)) (log mag))) - $music - \revert Stem #'length - \revert NoteHead #'font-size #}) - -{ c'2 \withAlt #0.5 {c'4 c'} - \withAlt #1.5 {c' c'} c'2 } -@end lilypond - -@node Void functions -@subsection Void functions - -A music function must return a music expression, but sometimes we -may want to have a function which does not involve music (such as -turning off Point and Click). To do this, we return a @code{void} -music expression. - -That is why the form -that is returned is the @code{(make-music ...)}. With the -@code{'void} property set to @code{#t}, the parser is told to -actually disregard this returned music -expression. Thus the important part of the void music function is the -processing done by the function, not the music expression that is -returned. - -@example -noPointAndClick = -#(define-music-function (parser location) () - (ly:set-option 'point-and-click #f) - (make-music 'SequentialMusic 'void #t)) -... -\noPointAndClick % disable point and click -@end example - - -@node Functions without arguments -@subsection Functions without arguments - -In most cases a function without arguments should be written -with an variable, - -@example -dolce = \markup@{ \italic \bold dolce @} -@end example - -However, in rare cases it may be useful to create a music function -without arguments, - -@example -displayBarNum = -#(define-music-function (parser location) () - (if (eq? #t (ly:get-option 'display-bar-numbers)) - #@{ \once \override Score.BarNumber #'break-visibility = ##f #@} - #@{#@})) -@end example - -To actually display bar numbers where this function is called, -invoke @command{lilypond} with - -@example -lilypond -d display-bar-numbers FILENAME.ly -@end example - - -@node Overview of available music functions -@subsection Overview of available music functions - -@c fixme ; this should be move somewhere else? -The following commands are music functions - -@include identifiers.tely - - - -@node Programmer interfaces -@section Programmer interfaces - -This section contains information about mixing LilyPond -and Scheme. - -@menu -* Input variables and Scheme:: -* Internal music representation:: -@end menu - - -@node Input variables and Scheme -@subsection Input variables and Scheme - -The input format supports the notion of variables: in the following -example, a music expression is assigned to a variable with the name -@code{traLaLa}. - -@example -traLaLa = @{ c'4 d'4 @} -@end example - -@noindent - -There is also a form of scoping: in the following example, the -@code{\layout} block also contains a @code{traLaLa} variable, which is -independent of the outer @code{\traLaLa}. -@example -traLaLa = @{ c'4 d'4 @} -\layout @{ traLaLa = 1.0 @} -@end example -@c -In effect, each input file is a scope, and all @code{\header}, -@code{\midi}, and @code{\layout} blocks are scopes nested inside that -toplevel scope. - -Both variables and scoping are implemented in the GUILE module system. -An anonymous Scheme module is attached to each scope. An assignment of -the form -@example -traLaLa = @{ c'4 d'4 @} -@end example - -@noindent -is internally converted to a Scheme definition -@example -(define traLaLa @var{Scheme value of `@code{... }'}) -@end example - -This means that input variables and Scheme variables may be freely -mixed. In the following example, a music fragment is stored in the -variable @code{traLaLa}, and duplicated using Scheme. The result is -imported in a @code{\score} block by means of a second variable -@code{twice}: - -@lilypond[verbatim] -traLaLa = { c'4 d'4 } - -%% dummy action to deal with parser lookahead -#(display "this needs to be here, sorry!") - -#(define newLa (map ly:music-deep-copy - (list traLaLa traLaLa))) -#(define twice - (make-sequential-music newLa)) - -{ \twice } -@end lilypond - -@c Due to parser lookahead - -In this example, the assignment happens after parser has verified that -nothing interesting happens after @code{traLaLa = @{ ... @}}. Without -the dummy statement in the above example, the @code{newLa} definition -is executed before @code{traLaLa} is defined, leading to a syntax -error. - -The above example shows how to @q{export} music expressions from the -input to the Scheme interpreter. The opposite is also possible. By -wrapping a Scheme value in the function @code{ly:export}, a Scheme -value is interpreted as if it were entered in LilyPond syntax. -Instead of defining @code{\twice}, the example above could also have -been written as - -@example -... -@{ #(ly:export (make-sequential-music (list newLa))) @} -@end example - -Scheme code is evaluated as soon as the parser encounters it. To -define some Scheme code in a macro (to be called later), use -@ref{Void functions}, or - -@example -#(define (nopc) - (ly:set-option 'point-and-click #f)) - -... -#(nopc) -@{ c'4 @} -@end example - - -@knownissues - -Mixing Scheme and LilyPond variables is not possible with the -@code{--safe} option. - - -@node Internal music representation -@subsection Internal music representation - -When a music expression is parsed, it is converted into a set of -Scheme music objects. The defining property of a music object is that -it takes up time. Time is a rational number that measures the length -of a piece of music in whole notes. - -A music object has three kinds of types: -@itemize -@item -music name: Each music expression has a name. For example, a note -leads to a @rinternals{NoteEvent}, and @code{\simultaneous} leads to -a @rinternals{SimultaneousMusic}. A list of all expressions -available is in the Internals Reference manual, under -@rinternals{Music expressions}. - -@item -@q{type} or interface: Each music name has several @q{types} or -interfaces, for example, a note is an @code{event}, but it is also a -@code{note-event}, a @code{rhythmic-event}, and a -@code{melodic-event}. All classes of music are listed in the -Internals Reference, under -@rinternals{Music classes}. - -@item -C++ object: Each music object is represented by an object of the C++ -class @code{Music}. -@end itemize - -The actual information of a music expression is stored in properties. -For example, a @rinternals{NoteEvent} has @code{pitch} and -@code{duration} properties that store the pitch and duration of that -note. A list of all properties available is in the internals manual, -under @rinternals{Music properties}. - -A compound music expression is a music object that contains other -music objects in its properties. A list of objects can be stored in -the @code{elements} property of a music object, or a single @q{child} -music object in the @code{element} property. For example, -@rinternals{SequentialMusic} has its children in @code{elements}, -and @rinternals{GraceMusic} has its single argument in -@code{element}. The body of a repeat is stored in the @code{element} -property of @rinternals{RepeatedMusic}, and the alternatives in -@code{elements}. - - - -@node Building complicated functions -@section Building complicated functions - -This section explains how to gather the information necessary -to create complicated music functions. - -@menu -* Displaying music expressions:: -* Music properties:: -* Doubling a note with slurs (example):: -* Adding articulation to notes (example):: -@end menu - - -@node Displaying music expressions -@subsection Displaying music expressions - -@cindex internal storage -@cindex displaying music expressions -@cindex internal representation, displaying -@cindex displayMusic -@funindex \displayMusic - -When writing a music function it is often instructive to inspect how -a music expression is stored internally. This can be done with the -music function @code{\displayMusic} - -@example -@{ - \displayMusic @{ c'4\f @} -@} -@end example - -@noindent -will display - -@example -(make-music - 'SequentialMusic - 'elements - (list (make-music - 'EventChord - 'elements - (list (make-music - 'NoteEvent - 'duration - (ly:make-duration 2 0 1 1) - 'pitch - (ly:make-pitch 0 0 0)) - (make-music - 'AbsoluteDynamicEvent - 'text - "f"))))) -@end example - -By default, LilyPond will print these messages to the console along -with all the other messages. To split up these messages and save -the results of @code{\display@{STUFF@}}, redirect the output to -a file. - -@example -lilypond file.ly >display.txt -@end example - -With a bit of reformatting, the above information is -easier to read, - -@example -(make-music 'SequentialMusic - 'elements (list (make-music 'EventChord - 'elements (list (make-music 'NoteEvent - 'duration (ly:make-duration 2 0 1 1) - 'pitch (ly:make-pitch 0 0 0)) - (make-music 'AbsoluteDynamicEvent - 'text "f"))))) -@end example - -A @code{@{ ... @}} music sequence has the name @code{SequentialMusic}, -and its inner expressions are stored as a list in its @code{'elements} -property. A note is represented as an @code{EventChord} expression, -containing a @code{NoteEvent} object (storing the duration and -pitch properties) and any extra information (in this case, an -@code{AbsoluteDynamicEvent} with a @code{"f"} text property. - - -@node Music properties -@subsection Music properties - -The @code{NoteEvent} object is the first object of the -@code{'elements} property of @code{someNote}. - -@example -someNote = c' -\displayMusic \someNote -===> -(make-music - 'EventChord - 'elements - (list (make-music - 'NoteEvent - 'duration - (ly:make-duration 2 0 1 1) - 'pitch - (ly:make-pitch 0 0 0)))) -@end example - -The @code{display-scheme-music} function is the function used by -@code{\displayMusic} to display the Scheme representation of a music -expression. - -@example -#(display-scheme-music (first (ly:music-property someNote 'elements))) -===> -(make-music - 'NoteEvent - 'duration - (ly:make-duration 2 0 1 1) - 'pitch - (ly:make-pitch 0 0 0)) -@end example - -Then the note pitch is accessed through the @code{'pitch} property -of the @code{NoteEvent} object, - -@example -#(display-scheme-music - (ly:music-property (first (ly:music-property someNote 'elements)) - 'pitch)) -===> -(ly:make-pitch 0 0 0) -@end example - -The note pitch can be changed by setting this 'pitch property, - -@funindex \displayLilyMusic - -@example -#(set! (ly:music-property (first (ly:music-property someNote 'elements)) - 'pitch) - (ly:make-pitch 0 1 0)) ;; set the pitch to d'. -\displayLilyMusic \someNote -===> -d' -@end example - - -@node Doubling a note with slurs (example) -@subsection Doubling a note with slurs (example) - -Suppose we want to create a function which translates -input like @code{a} into @code{a( a)}. We begin -by examining the internal representation of the music -we want to end up with. - -@example -\displayMusic@{ a'( a') @} -===> -(make-music - 'SequentialMusic - 'elements - (list (make-music - 'EventChord - 'elements - (list (make-music - 'NoteEvent - 'duration - (ly:make-duration 2 0 1 1) - 'pitch - (ly:make-pitch 0 5 0)) - (make-music - 'SlurEvent - 'span-direction - -1))) - (make-music - 'EventChord - 'elements - (list (make-music - 'NoteEvent - 'duration - (ly:make-duration 2 0 1 1) - 'pitch - (ly:make-pitch 0 5 0)) - (make-music - 'SlurEvent - 'span-direction - 1))))) -@end example - -The bad news is that the @code{SlurEvent} expressions -must be added @q{inside} the note (or more precisely, -inside the @code{EventChord} expression). - -Now we examine the input, - -@example -(make-music - 'SequentialMusic - 'elements - (list (make-music - 'EventChord - 'elements - (list (make-music - 'NoteEvent - 'duration - (ly:make-duration 2 0 1 1) - 'pitch - (ly:make-pitch 0 5 0)))))) -@end example - -So in our function, we need to clone this expression (so that we -have two notes to build the sequence), add @code{SlurEvents} to the -@code{'elements} property of each one, and finally make a -@code{SequentialMusic} with the two @code{EventChords}. - -@example -doubleSlur = #(define-music-function (parser location note) (ly:music?) - "Return: @{ note ( note ) @}. - `note' is supposed to be an EventChord." - (let ((note2 (ly:music-deep-copy note))) - (set! (ly:music-property note 'elements) - (cons (make-music 'SlurEvent 'span-direction -1) - (ly:music-property note 'elements))) - (set! (ly:music-property note2 'elements) - (cons (make-music 'SlurEvent 'span-direction 1) - (ly:music-property note2 'elements))) - (make-music 'SequentialMusic 'elements (list note note2)))) -@end example - - -@node Adding articulation to notes (example) -@subsection Adding articulation to notes (example) - -The easy way to add articulation to notes is to merge two music -expressions into one context, as explained in -@ref{Creating contexts}. However, suppose that we want to write -a music function which does this. - -A @code{$variable} inside the @code{#@{...#@}} notation is like -using a regular @code{\variable} in classical LilyPond -notation. We know that - -@example -@{ \music -. -> @} -@end example - -@noindent -will not work in LilyPond. We could avoid this problem by attaching -the articulation to a fake note, - -@example -@{ << \music s1*0-.-> @} -@end example - -@noindent -but for the sake of this example, we will learn how to do this in -Scheme. We begin by examining our input and desired output, - -@example -% input -\displayMusic c4 -===> -(make-music - 'EventChord - 'elements - (list (make-music - 'NoteEvent - 'duration - (ly:make-duration 2 0 1 1) - 'pitch - (ly:make-pitch -1 0 0)))) -===== -% desired output -\displayMusic c4-> -===> -(make-music - 'EventChord - 'elements - (list (make-music - 'NoteEvent - 'duration - (ly:make-duration 2 0 1 1) - 'pitch - (ly:make-pitch -1 0 0)) - (make-music - 'ArticulationEvent - 'articulation-type - "marcato"))) -@end example - -We see that a note (@code{c4}) is represented as an @code{EventChord} -expression, with a @code{NoteEvent} expression in its elements list. To -add a marcato articulation, an @code{ArticulationEvent} expression must -be added to the elements property of the @code{EventChord} -expression. - -To build this function, we begin with - -@example -(define (add-marcato event-chord) - "Add a marcato ArticulationEvent to the elements of `event-chord', - which is supposed to be an EventChord expression." - (let ((result-event-chord (ly:music-deep-copy event-chord))) - (set! (ly:music-property result-event-chord 'elements) - (cons (make-music 'ArticulationEvent - 'articulation-type "marcato") - (ly:music-property result-event-chord 'elements))) - result-event-chord)) -@end example - -The first line is the way to define a function in Scheme: the function -name is @code{add-marcato}, and has one variable called -@code{event-chord}. In Scheme, the type of variable is often clear -from its name. (this is good practice in other programming languages, -too!) - -@example -"Add a marcato..." -@end example - -@noindent -is a description of what the function does. This is not strictly -necessary, but just like clear variable names, it is good practice. - -@example -(let ((result-event-chord (ly:music-deep-copy event-chord))) -@end example - -@code{let} is used to declare local variables. Here we use one local -variable, named @code{result-event-chord}, to which we give the value -@code{(ly:music-deep-copy event-chord)}. @code{ly:music-deep-copy} is -a function specific to LilyPond, like all functions prefixed by -@code{ly:}. It is use to make a copy of a music -expression. Here we copy @code{event-chord} (the parameter of the -function). Recall that our purpose is to add a marcato to an -@code{EventChord} expression. It is better to not modify the -@code{EventChord} which was given as an argument, because it may be -used elsewhere. - -Now we have a @code{result-event-chord}, which is a -@code{NoteEventChord} expression and is a copy of @code{event-chord}. We -add the marcato to its elements list property. - -@example -(set! place new-value) -@end example - -Here, what we want to set (the @q{place}) is the @q{elements} property of -@code{result-event-chord} expression. - -@example -(ly:music-property result-event-chord 'elements) -@end example - -@code{ly:music-property} is the function used to access music properties -(the @code{'elements}, @code{'duration}, @code{'pitch}, etc, that we -see in the @code{\displayMusic} output above). The new value is the -former elements property, with an extra item: the -@code{ArticulationEvent} expression, which we copy from the -@code{\displayMusic} output, - -@example -(cons (make-music 'ArticulationEvent - 'articulation-type "marcato") - (ly:music-property result-event-chord 'elements)) -@end example - -@code{cons} is used to add an element to a list without modifying the -original list. This is what we -want: the same list as before, plus the new @code{ArticulationEvent} -expression. The order inside the elements property is not important here. - -Finally, once we have added the marcato articulation to its @code{elements} -property, we can return @code{result-event-chord}, hence the last line of -the function. - -Now we transform the @code{add-marcato} function into a music -function, - -@example -addMarcato = #(define-music-function (parser location event-chord) - (ly:music?) - "Add a marcato ArticulationEvent to the elements of `event-chord', - which is supposed to be an EventChord expression." - (let ((result-event-chord (ly:music-deep-copy event-chord))) - (set! (ly:music-property result-event-chord 'elements) - (cons (make-music 'ArticulationEvent - 'articulation-type "marcato") - (ly:music-property result-event-chord 'elements))) - result-event-chord)) -@end example - -We may verify that this music function works correctly, - -@example -\displayMusic \addMarcato c4 -@end example - - -@node Markup programmer interface -@section Markup programmer interface - -Markups are implemented as special Scheme functions which produce a -Stencil object given a number of arguments. - -@menu -* Markup construction in Scheme:: -* How markups work internally:: -* New markup command definition:: -* New markup list command definition:: -@end menu - - -@node Markup construction in Scheme -@subsection Markup construction in Scheme - -@cindex defining markup commands - -The @code{markup} macro builds markup expressions in Scheme while -providing a LilyPond-like syntax. For example, -@example -(markup #:column (#:line (#:bold #:italic "hello" #:raise 0.4 "world") - #:larger #:line ("foo" "bar" "baz"))) -@end example - -@noindent -is equivalent to: -@example -\markup \column @{ \line @{ \bold \italic "hello" \raise #0.4 "world" @} - \larger \line @{ foo bar baz @} @} -@end example - -@noindent -This example demonstrates the main translation rules between regular -LilyPond markup syntax and Scheme markup syntax. - -@quotation -@multitable @columnfractions .3 .3 -@item @b{LilyPond} @tab @b{Scheme} -@item @code{\markup markup1} @tab @code{(markup markup1)} -@item @code{\markup @{ markup1 markup2 ... @}} @tab - @code{(markup markup1 markup2 ... )} -@item @code{\command} @tab @code{#:command} -@item @code{\variable} @tab @code{variable} -@item @code{\center-column @{ ... @}} @tab @code{#:center-column ( ... )} -@item @code{string} @tab @code{"string"} -@item @code{#scheme-arg} @tab @code{scheme-arg} -@end multitable -@end quotation - -The whole Scheme language is accessible inside the -@code{markup} macro. For example, You may use function calls inside -@code{markup} in order to manipulate character strings. This is -useful when defining new markup commands (see -@ref{New markup command definition}). - - -@knownissues - -The markup-list argument of commands such as @code{#:line}, -@code{#:center}, and @code{#:column} cannot be a variable or -the result of a function call. - -@lisp -(markup #:line (function-that-returns-markups)) -@end lisp - -@noindent -is invalid. One should use the @code{make-line-markup}, -@code{make-center-markup}, or @code{make-column-markup} functions -instead, - -@lisp -(markup (make-line-markup (function-that-returns-markups))) -@end lisp - - -@node How markups work internally -@subsection How markups work internally - -In a markup like - -@example -\raise #0.5 "text example" -@end example - -@noindent -@code{\raise} is actually represented by the @code{raise-markup} -function. The markup expression is stored as - -@example -(list raise-markup 0.5 (list simple-markup "text example")) -@end example - -When the markup is converted to printable objects (Stencils), the -@code{raise-markup} function is called as - -@example -(apply raise-markup - @var{\layout object} - @var{list of property alists} - 0.5 - @var{the "text example" markup}) -@end example - -The @code{raise-markup} function first creates the stencil for the -@code{text example} string, and then it raises that Stencil by 0.5 -staff space. This is a rather simple example; more complex examples -are in the rest -of this section, and in @file{scm/@/define@/-markup@/-commands@/.scm}. - - -@node New markup command definition -@subsection New markup command definition - -New markup commands can be defined -with the @code{define-markup-command} Scheme macro. - -@lisp -(define-markup-command (@var{command-name} @var{layout} @var{props} @var{arg1} @var{arg2} ...) - (@var{arg1-type?} @var{arg2-type?} ...) - ..command body..) -@end lisp - -The arguments are - -@table @var -@item argi -@var{i}th command argument -@item argi-type? -a type predicate for the i@var{th} argument -@item layout -the @q{layout} definition -@item props -a list of alists, containing all active properties. -@end table - -As a simple example, we show how to add a @code{\smallcaps} command, -which selects a small caps font. Normally we could select the -small caps font, - -@example -\markup @{ \override #'(font-shape . caps) Text-in-caps @} -@end example - -@noindent -This selects the caps font by setting the @code{font-shape} property to -@code{#'caps} for interpreting @code{Text-in-caps}. - -To make the above available as @code{\smallcaps} command, we must -define a function using @code{define-markup-command}. The command should -take a single argument of type @code{markup}. Therefore the start of the -definition should read - -@example -(define-markup-command (smallcaps layout props argument) (markup?) -@end example - -@noindent - -What follows is the content of the command: we should interpret -the @code{argument} as a markup, i.e., - -@example -(interpret-markup layout @dots{} argument) -@end example - -@noindent -This interpretation should add @code{'(font-shape . caps)} to the active -properties, so we substitute the following for the @dots{} in the -above example: - -@example -(cons (list '(font-shape . caps) ) props) -@end example - -@noindent -The variable @code{props} is a list of alists, and we prepend to it by -cons'ing a list with the extra setting. - - -Suppose that we are typesetting a recitative in an opera and -we would like to define a command that will show character names in a -custom manner. Names should be printed with small caps and moved a -bit to the left and top. We will define a @code{\character} command -which takes into account the necessary translation and uses the newly -defined @code{\smallcaps} command: - -@example -#(define-markup-command (character layout props name) (string?) - "Print the character name in small caps, translated to the left and - top. Syntax: \\character #\"name\"" - (interpret-markup layout props - (markup #:hspace 0 #:translate (cons -3 1) #:smallcaps name))) -@end example - -There is one complication that needs explanation: texts above and below -the staff are moved vertically to be at a certain distance (the -@code{padding} property) from the staff and the notes. To make sure -that this mechanism does not annihilate the vertical effect of our -@code{#:translate}, we add an empty string (@code{#:hspace 0}) before the -translated text. Now the @code{#:hspace 0} will be put above the notes, -and the -@code{name} is moved in relation to that empty string. The net effect is -that the text is moved to the upper left. - -The final result is as follows: - -@example -@{ - c''^\markup \character #"Cleopatra" - e'^\markup \character #"Giulio Cesare" -@} -@end example - -@lilypond[quote,ragged-right] -#(define-markup-command (smallcaps layout props str) (string?) - "Print the string argument in small caps. Syntax: \\smallcaps #\"string\"" - (interpret-markup layout props - (make-line-markup - (map (lambda (s) - (if (= (string-length s) 0) - s - (markup #:large (string-upcase (substring s 0 1)) - #:translate (cons -0.6 0) - #:tiny (string-upcase (substring s 1))))) - (string-split str #\Space))))) - -#(define-markup-command (character layout props name) (string?) - "Print the character name in small caps, translated to the left and - top. Syntax: \\character #\"name\"" - (interpret-markup layout props - (markup #:hspace 0 #:translate (cons -3 1) #:smallcaps name))) - -{ - c''^\markup \character #"Cleopatra" c'' c'' c'' - e'^\markup \character #"Giulio Cesare" e' e' e' -} -@end lilypond - -We have used the @code{caps} font shape, but suppose that our font -does not have a small-caps variant. In that case we have to fake -the small caps font by setting a string in upcase with the first -letter a little larger: - -@example -#(define-markup-command (smallcaps layout props str) (string?) - "Print the string argument in small caps." - (interpret-markup layout props - (make-line-markup - (map (lambda (s) - (if (= (string-length s) 0) - s - (markup #:large (string-upcase (substring s 0 1)) - #:translate (cons -0.6 0) - #:tiny (string-upcase (substring s 1))))) - (string-split str #\Space))))) -@end example - -The @code{smallcaps} command first splits its string argument into -tokens separated by spaces (@code{(string-split str #\Space)}); for -each token, a markup is built with the first letter made large and -upcased (@code{#:large (string-upcase (substring s 0 1))}), and a -second markup built with the following letters made tiny and upcased -(@code{#:tiny (string-upcase (substring s 1))}). As LilyPond -introduces a space between markups on a line, the second markup is -translated to the left (@code{#:translate (cons -0.6 0) ...}). Then, -the markups built for each token are put in a line by -@code{(make-line-markup ...)}. Finally, the resulting markup is passed -to the @code{interpret-markup} function, with the @code{layout} and -@code{props} arguments. - -Note: there is now an internal command @code{\smallCaps} which can -be used to set text in small caps. See -@ref{Text markup commands}, for details. - -@knownissues - -Currently, the available combinations of arguments (after the standard -@var{layout} and @var{props} arguments) to a markup command defined with -@code{define-markup-command} are limited as follows. - -@table @asis -@item (no argument) -@itemx @var{list} -@itemx @var{markup} -@itemx @var{markup markup} -@itemx @var{scm} -@itemx @var{scm markup} -@itemx @var{scm scm} -@itemx @var{scm scm markup} -@itemx @var{scm scm markup markup} -@itemx @var{scm markup markup} -@itemx @var{scm scm scm} -@end table - -@noindent -In the above table, @var{scm} represents native Scheme data types like -@q{number} or @q{string}. - -As an example, it is not possible to use a markup command @code{foo} with -four arguments defined as - -@example -#(define-markup-command (foo layout props - num1 str1 num2 str2) - (number? string? number? string?) - ...) -@end example - -@noindent -If you apply it as, say, - -@example -\markup \foo #1 #"bar" #2 #"baz" -@end example - -@cindex Scheme signature -@cindex signature, Scheme -@noindent -@command{lilypond} complains that it cannot parse @code{foo} due to its -unknown Scheme signature. - - -@node New markup list command definition -@subsection New markup list command definition -Markup list commands are defined with the -@code{define-markup-list-command} Scheme macro, which is similar to the -@code{define-markup-command} macro described in -@ref{New markup command definition}, except that where the latter returns -a single stencil, the former returns a list stencils. - -In the following example, a @code{\paragraph} markup list command is -defined, which returns a list of justified lines, the first one being -indented. The indent width is taken from the @code{props} argument. -@example -#(define-markup-list-command (paragraph layout props args) (markup-list?) - (let ((indent (chain-assoc-get 'par-indent props 2))) - (interpret-markup-list layout props - (make-justified-lines-markup-list (cons (make-hspace-markup indent) - args))))) -@end example - -Besides the usual @code{layout} and @code{props} arguments, the -@code{paragraph} markup list command takes a markup list argument, named -@code{args}. The predicate for markup lists is @code{markup-list?}. - -First, the function gets the indent width, a property here named -@code{par-indent}, from the property list @code{props} If the property -is not found, the default value is @code{2}. Then, a list of justified -lines is made using the @code{make-justified-lines-markup-list} -function, which is related to the @code{\justified-lines} -built-in markup list command. An horizontal space is added at the -beginning using the @code{make-hspace-markup} function. Finally, the -markup list is interpreted using the @code{interpret-markup-list} -function. - -This new markup list command can be used as follows: -@example -\markuplines @{ - \paragraph @{ - The art of music typography is called \italic @{(plate) engraving.@} - The term derives from the traditional process of music printing. - Just a few decades ago, sheet music was made by cutting and stamping - the music into a zinc or pewter plate in mirror image. - @} - \override-lines #'(par-indent . 4) \paragraph @{ - The plate would be inked, the depressions caused by the cutting - and stamping would hold ink. An image was formed by pressing paper - to the plate. The stamping and cutting was completely done by - hand. - @} -@} -@end example - -@node Contexts for programmers -@section Contexts for programmers - -@menu -* Context evaluation:: -* Running a function on all layout objects:: -@end menu - -@node Context evaluation -@subsection Context evaluation - -@cindex calling code during interpreting -@funindex \applyContext - -Contexts can be modified during interpretation with Scheme code. The -syntax for this is -@example -\applyContext @var{function} -@end example - -@var{function} should be a Scheme function taking a single argument, -being the context to apply it to. The following code will print the -current bar number on the standard output during the compile: - -@example -\applyContext - #(lambda (x) - (format #t "\nWe were called in barnumber ~a.\n" - (ly:context-property x 'currentBarNumber))) -@end example - - - -@node Running a function on all layout objects -@subsection Running a function on all layout objects - - -@cindex calling code on layout objects -@funindex \applyOutput - - -The most versatile way of tuning an object is @code{\applyOutput}. Its -syntax is -@example -\applyOutput @var{context} @var{proc} -@end example - -@noindent -where @var{proc} is a Scheme function, taking three arguments. - -When interpreted, the function @var{proc} is called for every layout -object found in the context @var{context}, with the following -arguments: -@itemize -@item the layout object itself, -@item the context where the layout object was created, and -@item the context where @code{\applyOutput} is processed. -@end itemize - - -In addition, the cause of the layout object, i.e., the music -expression or object that was responsible for creating it, is in the -object property @code{cause}. For example, for a note head, this is a -@rinternals{NoteHead} event, and for a @rinternals{Stem} object, -this is a @rinternals{NoteHead} object. - -Here is a function to use for @code{\applyOutput}; it blanks -note-heads on the center-line: - -@lilypond[quote,verbatim,ragged-right] -#(define (blanker grob grob-origin context) - (if (and (memq 'note-head-interface (ly:grob-interfaces grob)) - (eq? (ly:grob-property grob 'staff-position) 0)) - (set! (ly:grob-property grob 'transparent) #t))) - -\relative { - e4 g8 \applyOutput #'Voice #blanker b d2 -} -@end lilypond - - -@node Scheme procedures as properties -@section Scheme procedures as properties - -Properties (like thickness, direction, etc.) can be set at fixed values -with \override, e.g. - -@example -\override Stem #'thickness = #2.0 -@end example - -Properties can also be set to a Scheme procedure, - -@lilypond[fragment,verbatim,quote,relative=2] -\override Stem #'thickness = #(lambda (grob) - (if (= UP (ly:grob-property grob 'direction)) - 2.0 - 7.0)) -c b a g b a g b -@end lilypond - -@noindent -In this case, the procedure is executed as soon as the value of the -property is requested during the formatting process. - -Most of the typesetting engine is driven by such callbacks. -Properties that typically use callbacks include - -@table @code -@item stencil - The printing routine, that constructs a drawing for the symbol -@item X-offset - The routine that sets the horizontal position -@item X-extent - The routine that computes the width of an object -@end table - -The procedure always takes a single argument, being the grob. - -If routines with multiple arguments must be called, the current grob -can be inserted with a grob closure. Here is a setting from -@code{AccidentalSuggestion}, - -@example -(X-offset . - ,(ly:make-simple-closure - `(,+ - ,(ly:make-simple-closure - (list ly:self-alignment-interface::centered-on-x-parent)) - ,(ly:make-simple-closure - (list ly:self-alignment-interface::x-aligned-on-self))))) -@end example - -@noindent -In this example, both @code{ly:self-alignment-interface::x-aligned-on-self} and -@code{ly:self-alignment-interface::centered-on-x-parent} are called -with the grob as argument. The results are added with the @code{+} -function. To ensure that this addition is properly executed, the whole -thing is enclosed in @code{ly:make-simple-closure}. - -In fact, using a single procedure as property value is equivalent to - -@example -(ly:make-simple-closure (ly:make-simple-closure (list @var{proc}))) -@end example - -@noindent -The inner @code{ly:make-simple-closure} supplies the grob as argument -to @var{proc}, the outer ensures that result of the function is -returned, rather than the @code{simple-closure} object. - - -@node Using Scheme code instead of \tweak -@section Using Scheme code instead of @code{\tweak} - -The main disadvantage of @code{\tweak} is its syntactical -inflexibility. For example, the following produces a syntax error. - -@example -F = \tweak #'font-size #-3 -\flageolet - -\relative c'' @{ - c4^\F c4_\F -@} -@end example - -@noindent -With other words, @code{\tweak} doesn't behave like an articulation -regarding the syntax; in particular, it can't be attached with -@code{^} and @code{_}. - -Using Scheme, this problem can be circumvented. The route to the -result is given in @ref{Adding articulation to notes (example)}, -especially how to use @code{\displayMusic} as a helping guide. - -@example -F = #(let ((m (make-music 'ArticulationEvent - 'articulation-type "flageolet"))) - (set! (ly:music-property m 'tweaks) - (acons 'font-size -3 - (ly:music-property m 'tweaks))) - m) - -\relative c'' @{ - c4^\F c4_\F -@} -@end example - -@noindent -Here, the @code{tweaks} properties of the flageolet object -@code{m} (created with @code{make-music}) are extracted with -@code{ly:music-property}, a new key-value pair to change the -font size is prepended to the property list with the -@code{acons} Scheme function, and the result is finally -written back with @code{set!}. The last element of the -@code{let} block is the return value, @code{m} itself. - - - -@node Difficult tweaks -@section Difficult tweaks - -There are a few classes of difficult adjustments. - -@itemize - - -@item -One type of difficult adjustment is the appearance of spanner objects, -such as slur and tie. Initially, only one of these objects is created, -and they can be adjusted with the normal mechanism. However, in some -cases the spanners cross line breaks. If this happens, these objects -are cloned. A separate object is created for every system that it is -in. These are clones of the original object and inherit all -properties, including @code{\override}s. - - -In other words, an @code{\override} always affects all pieces of a -broken spanner. To change only one part of a spanner at a line break, -it is necessary to hook into the formatting process. The -@code{after-line-breaking} callback contains the Scheme procedure that -is called after the line breaks have been determined, and layout -objects have been split over different systems. - -In the following example, we define a procedure -@code{my-callback}. This procedure - -@itemize -@item -determines if we have been split across line breaks -@item -if yes, retrieves all the split objects -@item -checks if we are the last of the split objects -@item -if yes, it sets @code{extra-offset}. -@end itemize - -This procedure is installed into @rinternals{Tie}, so the last part -of the broken tie is translated up. - -@lilypond[quote,verbatim,ragged-right] -#(define (my-callback grob) - (let* ( - ; have we been split? - (orig (ly:grob-original grob)) - - ; if yes, get the split pieces (our siblings) - (siblings (if (ly:grob? orig) - (ly:spanner-broken-into orig) '() ))) - - (if (and (>= (length siblings) 2) - (eq? (car (last-pair siblings)) grob)) - (ly:grob-set-property! grob 'extra-offset '(-2 . 5))))) - -\relative c'' { - \override Tie #'after-line-breaking = - #my-callback - c1 ~ \break c2 ~ c -} -@end lilypond - -@noindent -When applying this trick, the new @code{after-line-breaking} callback -should also call the old one @code{after-line-breaking}, if there is -one. For example, if using this with @code{Hairpin}, -@code{ly:hairpin::after-line-breaking} should also be called. - - -@item Some objects cannot be changed with @code{\override} for -technical reasons. Examples of those are @code{NonMusicalPaperColumn} -and @code{PaperColumn}. They can be changed with the -@code{\overrideProperty} function, which works similar to @code{\once -\override}, but uses a different syntax. - -@example -\overrideProperty -#"Score.NonMusicalPaperColumn" % Grob name -#'line-break-system-details % Property name -#'((next-padding . 20)) % Value -@end example - -Note, however, that @code{\override}, applied to -@code{NonMusicalPaperColumn} and @code{PaperColumn}, still works as -expected within @code{\context} blocks. - -@end itemize - - - - - diff --git a/Documentation/user/repeats.itely b/Documentation/user/repeats.itely deleted file mode 100644 index 689fd36009..0000000000 --- a/Documentation/user/repeats.itely +++ /dev/null @@ -1,528 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Repeats -@section Repeats - -@lilypondfile[quote]{repeats-headword.ly} - -Repetition is a central concept in music, and multiple notations -exist for repetitions. LilyPond supports the following kinds of -repeats: - - -@table @code -@item volta -The repeated music is not written out but enclosed between repeat bar -lines. If the repeat is at the beginning of a piece, a repeat bar -line is only printed at the end of the repeat. Alternative endings -(volte) are printed left to right with brackets. This is the standard -notation for repeats with alternatives. - -@item unfold -The repeated music is fully written out, as many times as -specified by @var{repeatcount}. This is useful when -entering repetitious music. - -@item percent -These are beat or measure repeats. They look like single slashes or -percent signs. - -@item tremolo -This is used to write tremolo beams. - -@end table - - -@menu -* Long repeats:: -* Short repeats:: -@end menu - -@node Long repeats -@subsection Long repeats - -This section discusses how to input long (usually multi-measure) -repeats. The repeats can take two forms: repeats enclosed between -repeat signs; or written out repeats, used to input repetitious music. -Repeat signs can also be controlled manually. - -@menu -* Normal repeats:: -* Manual repeat marks:: -* Written-out repeats:: -@end menu - -@cindex volta -@cindex prima volta -@cindex seconda volta -@cindex volta, prima -@cindex volta, seconda -@cindex repeat, normal -@cindex normal repeat -@cindex repeat with alternate endings -@cindex alternate endings -@funindex \repeat -@funindex \alternative -@funindex \partial - -@node Normal repeats -@unnumberedsubsubsec Normal repeats - -The syntax for a normal repeat is - -@example -\repeat volta @var{repeatcount} @var{musicexpr} -@end example - -where @var{musicexpr} is a music expression. Alternate endings can be -produced using @code{\alternative}. In order to delimit the alternate -endings, the group of alternatives must be enclosed in a set of -braces. If there are more repeats than there are alternate endings, -the earliest repeats are given the first alternative. - -Normal repeats without alternate endings: - -@lilypond[verbatim,quote,relative=2] -\repeat volta 2 { c4 d e f } -c2 d -\repeat volta 2 { d4 e f g } -@end lilypond - -Normal repeats with alternate endings: - -@lilypond[verbatim,quote,relative=2] -\repeat volta 4 { c4 d e f } -\alternative { - { d2 e } - { f2 g } -} -c1 -@end lilypond - - -@cindex repeat with upbeat -@cindex upbeat in a repeat -@cindex anacrucis in a repeat -@cindex repeat with anacrucis -@cindex repeat with pickup -@cindex pickup in a repeat -@funindex \partial - -Repeats with upbeats can be entered in two ways: - -@lilypond[verbatim,quote,relative=2] -\partial 4 -e | -\repeat volta 4 { c2 d | e2 f | } -\alternative { - { g4 g g e } - { a4 a a a | b2. } -} -@end lilypond - -@noindent -or - -@lilypond[verbatim,quote,relative=2] -\partial 4 -\repeat volta 4 { e4 | c2 d | e2 f | } -\alternative { - { \partial 4*3 g4 g g } - { a4 a a a | b2. } -} -@end lilypond - - -@cindex repeats with ties -@cindex alternative endings with ties -@cindex ties in repeats -@cindex ties in alternative endings -@funindex \repeatTie - -Ties may be added to a second ending: - -@lilypond[verbatim,quote,relative=2] -c1 -\repeat volta 2 { c4 d e f ~ } -\alternative { - { f2 d } - { f2\repeatTie f, } -} -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{shortening-volta-brackets.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{adding-volta-brackets-to-additional-staves.ly} - - -@seealso -Music Glossary: @rglos{repeat}, @rglos{volta}. - -Notation Reference: @ref{Bar lines}, @ref{Modifying context plug-ins}. - -Snippets: @rlsr{Repeats}. - -Internals Reference: @rinternals{VoltaBracket}, -@rinternals{RepeatedMusic}, @rinternals{VoltaRepeatedMusic}, -@rinternals{UnfoldedRepeatedMusic}. - - -@knownissues - -@cindex repeat, ambiguous -@cindex nested repeat -@cindex repeat, nested -@cindex repeat timing information -@cindex repeat and measure number -@cindex timing information and repeats -@cindex measure number and repeats -@cindex repeat and slur -@cindex slur and repeat - -A nested repeat like - -@example -\repeat @dots{} -\repeat @dots{} -\alternative -@end example - -@noindent -is ambiguous, since it is is not clear to which @code{\repeat} the -@code{\alternative} belongs. This ambiguity is resolved by always -having the @code{\alternative} belong to the inner @code{\repeat}. -For clarity, it is advisable to use braces in such situations. - -Timing information is not remembered at the start of an alternative, -so after a repeat timing information must be reset by hand; for -example, by setting @code{Score.measurePosition} or entering -@code{\partial}. Similarly, slurs are also not repeated. - - - -@node Manual repeat marks -@unnumberedsubsubsec Manual repeat marks - -@cindex manual repeat mark -@cindex repeat, manual -@cindex start repeat -@cindex repeat, start -@cindex end repeat -@cindex repeat, end -@cindex repeat number, changing -@cindex repeat volta, changing -@cindex volta bracket -@cindex bracket, volta -@funindex repeatCommands -@funindex start-repeat - -@warning{These methods are only used for displaying unusual repeat -constructs, and may produce unexpected behavior. In most cases, -repeats should be created using the standard @code{\\repeat} command -or by printing the relevant bar lines. For more information, see -@ref{Bar lines}.} - -The property @code{repeatCommands} can be used to control the -layout of repeats. Its value is a Scheme list of repeat commands. - -@table @code -@item start-repeat -Print a @code{|:} bar line. - -@lilypond[verbatim,quote,relative=2] -c1 -\set Score.repeatCommands = #'(start-repeat) -d4 e f g -c1 -@end lilypond - -As per standard engraving practice, repeat signs are not printed -at the beginning of a piece. - -@item end-repeat -Print a @code{:|} bar line: - -@lilypond[verbatim,quote,relative=2] -c1 -d4 e f g -\set Score.repeatCommands = #'(end-repeat) -c1 -@end lilypond - -@item (volta @var{number}) ... (volta #f) -Create a new volta with the specified number. The volta bracket must -be explicitly terminated, or it will not be printed. - -@lilypond[verbatim,quote,relative=2] -f4 g a b -\set Score.repeatCommands = #'((volta "2")) -g4 a g a -\set Score.repeatCommands = #'((volta #f)) -c1 -@end lilypond - -@end table - -Multiple repeat commands may occur at the same point: - -@lilypond[verbatim,quote,relative=2] -f4 g a b -\set Score.repeatCommands = #'((volta "2, 5") end-repeat) -g4 a g a -c1 -\set Score.repeatCommands = #'((volta #f) (volta "95") end-repeat) -b1 -\set Score.repeatCommands = #'((volta #f)) -@end lilypond - -@cindex volta bracket with text -@cindex text in volta bracket - -Text can be included with the volta bracket. The text can be a -number or numbers or markup text, see @ref{Formatting text}. The -simplest way to use markup text is to define the markup first, -then include the markup in a Scheme list. - -@lilypond[verbatim,quote] -voltaAdLib = \markup { 1. 2. 3... \text \italic { ad lib. } } -\relative c'' { - c1 - \set Score.repeatCommands = #(list(list 'volta voltaAdLib) 'start-repeat) - c4 b d e - \set Score.repeatCommands = #'((volta #f) (volta "4.") end-repeat) - f1 - \set Score.repeatCommands = #'((volta #f)) -} -@end lilypond - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{printing-a-repeat-sign-at-the-beginning-of-a-piece.ly} - - -@seealso -Notation Reference: -@ref{Bar lines}, -@ref{Formatting text}. - -Snippets: -@rlsr{Repeats}. - -Internals Reference: -@rinternals{VoltaBracket}, -@rinternals{RepeatedMusic}, -@rinternals{VoltaRepeatedMusic}. - - -@node Written-out repeats -@unnumberedsubsubsec Written-out repeats - -@cindex written-out repeats -@cindex repetitious music -@cindex repeats, written-out -@cindex repeat, unfold -@cindex unfold music -@cindex unfold repeat -@cindex unfold repeat with alternate endings -@cindex unfold music with alternate endings -@cindex alternate ending in written-out repeats -@funindex unfold - -By using the @code{unfold} command, repeats can be used to simplify -the writing out of repetitious music. The syntax is - -@example -\repeat unfold @var{repeatcount} @var{musicexpr} -@end example - -where @var{musicexpr} is a music expression and @var{repeatcount} is -the number of times @var{musicexpr} is repeated. - -@lilypond[verbatim,quote,relative=2] -c1 -\repeat unfold 2 { c4 d e f } -c1 -@end lilypond - -Unfold repeats can be made with alternate endings. If there are -more repeats than there are alternate endings, the first -alternative ending is applied to the earliest endings. - -@lilypond[verbatim,quote,relative=2] -c1 -\repeat unfold 2 { g4 f e d } - \alternative { - { cis2 g' } - { cis,2 b } - } -c1 -@end lilypond - - -@seealso -Snippets: @rlsr{Repeats}. - -Internals Reference: @rinternals{RepeatedMusic}, -@rinternals{UnfoldedRepeatedMusic}. - - -@node Short repeats -@subsection Short repeats - -This section discusses how to input short repeats. Short repeats can -take two basic forms: repeats of a single note to two measures, -represented by slashes or percent signs; and tremolos. - -@menu -* Percent repeats:: -* Tremolo repeats:: -@end menu - -@node Percent repeats -@unnumberedsubsubsec Percent repeats - -@cindex percent repeats -@cindex measure repeats -@cindex repeat, percent -@cindex repeat, measure -@cindex repeat, short -@funindex \repeat percent -@funindex percent - -Repeated short patterns of notes are supported. The music is printed -once, and the pattern is replaced with a special sign. Patterns that -are shorter than one measure are replaced by slashes, and patterns of -one or two measures are replaced by percent-like signs. The syntax is - -@example -@code{\repeat percent @var{number} @var{musicexpr}} -@end example - -where @var{musicexpr} is a music expression. - -@lilypond[verbatim,quote,relative=2] -\repeat percent 4 { c4 } -\repeat percent 2 { b4 a g f } -\repeat percent 2 { c2 es | f4 fis g c | } -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{percent-repeat-counter.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{percent-repeat-count-visibility.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{isolated-percent-repeats.ly} - - -@seealso -Music Glossary: @rglos{percent repeat}, @rglos{simile}. - -Snippets: @rlsr{Repeats}. - -Internals Reference: @rinternals{RepeatSlash}, -@rinternals{PercentRepeat}, @rinternals{DoublePercentRepeat}, -@rinternals{DoublePercentRepeatCounter}, -@rinternals{PercentRepeatCounter}, @rinternals{PercentRepeatedMusic}. - - -@knownissues - -Only three kinds of percent repeats are supported: a single slash -representing a single beat (regardless of the duration of the repeated -notes); a single slash with dots representing one full measure; and -two slashes with dots crossing a bar line representing two full -measures. Neither multiple slashes representing single beat repeats -consisting of sixteenth or shorter notes, nor two slashes with dots -representing single beat repeats consisting of notes of varying -durations, are supported. - - -@node Tremolo repeats -@unnumberedsubsubsec Tremolo repeats - -@cindex tremolo beams -@cindex tremolo -@cindex repeat, tremolo -@funindex \repeat tremolo -@funindex tremolo - -Tremolos can take two forms: alternation between two chords or two -notes, and rapid repetition of a single note or chord. Tremolos -consisting of an alternation are indicated by adding beams between the -notes or chords being alternated, while tremolos consisting of the -rapid repetition of a single note are indicated by adding beams or -slashes to a single note. - -To place tremolo marks between notes, use @code{\repeat} with -tremolo style: - -@lilypond[quote,verbatim,relative=2] -\repeat tremolo 8 { c16 d } -\repeat tremolo 6 { c16 d } -\repeat tremolo 2 { c16 d } -@end lilypond - -The @code{\repeat tremolo} syntax expects exactly two notes within -the braces, and the number of repetitions must correspond to a -note value that can be expressed with plain or dotted notes. Thus, -@code{\repeat tremolo 7} is valid and produces a double dotted -note, but @code{\repeat tremolo 9} is not. - -The duration of the tremolo equals the duration of the -braced expression multiplied by the number of repeats: -@code{\repeat tremolo 8 @{ c16 d16 @}} gives a whole note tremolo, -notated as two whole notes joined by tremolo beams. - -There are two ways to put tremolo marks on a single note. The -@code{\repeat tremolo} syntax is also used here, in which case -the note should not be surrounded by braces: - -@lilypond[quote,verbatim,ragged-right] -\repeat tremolo 4 c'16 -@end lilypond - -@cindex tremolo marks -@funindex tremoloFlags -@funindex : - -The same output can be obtained by adding -@q{@code{:}[@var{number}]} after the note. The number indicates -the duration of the subdivision, and it must be at least 8. A -@var{number} value of 8 gives one line across the note stem. If -the length is omitted, the last value (stored in -@code{tremoloFlags}) is used - -@lilypond[quote,verbatim,relative=2] -c2:8 c:32 -c: c: -@end lilypond - - -@seealso -Snippets: @rlsr{Repeats}. - -@cindex tremolo, cross-staff -@cindex cross-staff tremolo - -@knownissues - -Cross-staff tremolos do not work well. - diff --git a/Documentation/user/rhythms.itely b/Documentation/user/rhythms.itely deleted file mode 100644 index b4a225ee4b..0000000000 --- a/Documentation/user/rhythms.itely +++ /dev/null @@ -1,2854 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Rhythms -@section Rhythms - -@lilypondfile[quote]{rhythms-headword.ly} - -This section discusses rhythms, rests, durations, beaming and bars. - -@menu -* Writing rhythms:: -* Writing rests:: -* Displaying rhythms:: -* Beams:: -* Bars:: -* Special rhythmic concerns:: -@end menu - - -@node Writing rhythms -@subsection Writing rhythms - -@menu -* Durations:: -* Tuplets:: -* Scaling durations:: -* Ties:: -@end menu - -@node Durations -@unnumberedsubsubsec Durations - -@cindex durations, of notes -@cindex note durations -@cindex length of notes -@cindex note lengths - -@funindex \longa -@funindex longa -@funindex \breve -@funindex breve -@funindex \maxima -@funindex maxima - -Durations are designated by numbers and dots. Durations are entered -as their reciprocal values. For example, a quarter note is entered -using a @code{4} (since it is a 1/4 note), and a half note is entered -using a @code{2} (since it is a 1/2 note). For notes longer than a -whole you must use the @code{\longa} (a double breve) and -@code{\breve} commands. Durations as short as 128th notes may be -specified. Shorter values are possible, but only as beamed notes. - -@c Two 64th notes are needed to obtain beams -@lilypond[quote,verbatim,relative=2] -\time 8/1 -c\longa c\breve c1 c2 -c4 c8 c16 c32 c64 c64 -@end lilypond - -@noindent -Here are the same durations with automatic beaming turned off. - -@c not strictly "writing rhythms"; more of a "displaying" thing, -@c but it's ok here. -gp -@lilypond[quote,verbatim,relative=2] -\time 8/1 -\autoBeamOff -c\longa c\breve c1 c2 -c4 c8 c16 c32 c64 c64 -@end lilypond - -A note with the duration of a quadruple breve may be entered with -@code{\maxima}, but this is supported only within ancient music -notation. For details, see @ref{Ancient notation}. - -@cindex duration, default -@cindex default note duration -@cindex note duration, default - -If the duration is omitted, it is set to the previously -entered duration. The default for the first note is a quarter -note. - -@lilypond[quote,verbatim,relative=2] -a a a2 a a4 a a1 a -@end lilypond - -@cindex notes, dotted -@cindex dotted notes -@cindex notes, double-dotted -@cindex double-dotted notes - -@funindex . - -To obtain dotted note lengths, place a dot (@code{.}) after the -duration. Double-dotted notes are specified by appending two -dots, and so on. - -@lilypond[quote,verbatim,relative=2] -a4 b c4. b8 a4. b4.. c8. -@end lilypond - -Some durations cannot be represented with just binary durations -and dots; they can be represented only by tying two or more -notes together. For details, see @ref{Ties}. - -For ways of specifying durations for the syllables of lyrics and -ways of aligning lyrics to notes, see @ref{Vocal music}. - -Optionally, notes can be spaced strictly proportionately to their -duration. For details of this and other settings which control -proportional notation, see @ref{Proportional notation}. - -@funindex \dotsUp -@funindex dotsUp -@funindex \dotsDown -@funindex dotsDown -@funindex \dotsNeutral -@funindex dotsNeutral - -Dots are normally moved up to avoid staff lines, except in -polyphonic situations. Predefined commands are available to -force a particular direction manually, for details -see @ref{Direction and placement}. - - -@predefined -@code{\autoBeamOff}, -@code{\dotsUp}, -@code{\dotsDown}, -@code{\dotsNeutral}. -@endpredefined - - -@seealso -Music Glossary: -@rglos{breve}, -@rglos{longa}, -@rglos{maxima}, -@rglos{note value}, -@rglos{Duration names notes and rests}. - -Notation Reference: -@ref{Automatic beams}, -@ref{Ties}, -@ref{Stems}, -@ref{Writing rhythms}, -@ref{Writing rests}, -@ref{Vocal music}, -@ref{Ancient notation}, -@ref{Proportional notation}. - -Snippets: -@rlsr{Rhythms}. - -Internals Reference: -@rinternals{Dots}, -@rinternals{DotColumn}. - - -@knownissues - -@c Deliberately duplicated in Durations and Rests. -gp -There is no fundamental limit to rest durations (both in terms of -longest and shortest), but the number of glyphs is limited: -rests from 128th to maxima (8 x whole) may be printed. - - -@node Tuplets -@unnumberedsubsubsec Tuplets - -@cindex tuplets -@cindex triplets - -@funindex \times -@funindex times - -Tuplets are made from a music expression by multiplying all the -durations with a fraction: - -@example -\times @var{fraction} @{ @var{music} @} -@end example - -@noindent -The duration of @var{music} will be multiplied by the -fraction. The fraction's denominator will be printed over or -under the notes, optionally with a bracket. The most common -tuplet is the triplet in which 3 notes have the duration of 2, so -the notes are 2/3 of their written length. - -@lilypond[quote,verbatim,relative=2] -a2 \times 2/3 { b4 b b } -c4 c \times 2/3 { b4 a g } -@end lilypond - -@cindex tuplet bracket placement - -@funindex \tupletUp -@funindex tupletUp -@funindex \tupletDown -@funindex tupletDown -@funindex \tupletNeutral -@funindex tupletNeutral - -The automatic placement of the tuplet bracket above or below the -notes may be overridden manually with predefined commands, for -details see @ref{Direction and placement}. - -Tuplets may be nested: - -@lilypond[quote,verbatim,relative=2] -\autoBeamOff -c4 \times 4/5 { f8 e f \times 2/3 { e[ f g] } } f4 | -@end lilypond - -Modifying nested tuplets which begin at the same musical moment -must be done with @code{\tweak}. - -To modify the duration of notes without printing a tuplet bracket, -see @ref{Scaling durations}. - - -@predefined -@code{\tupletUp}, -@code{\tupletDown}, -@code{\tupletNeutral}. -@endpredefined - - -@snippets - -@cindex tuplet formatting -@cindex triplet formatting - -@funindex tupletNumberFormatFunction -@funindex tupletSpannerDuration - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{entering-several-tuplets-using-only-one--times-command.ly} - -@cindex Tuplet number changes - -@funindex TupletNumber - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{changing-the-tuplet-number.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{non-default-tuplet-numbers.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{permitting-line-breaks-within-beamed-tuplets.ly} - - -@seealso -Music Glossary: -@rglos{triplet}, -@rglos{tuplet}, -@rglos{polymetric}. - -Learning Manual: @rlearning{Tweaking methods}. - -Notation Reference: -@ref{Time administration}, -@ref{Scaling durations}, -@ref{The tweak command}, -@ref{Polymetric notation}. - -Snippets: -@rlsr{Rhythms}. - -Internals Reference: -@rinternals{TupletBracket}, -@rinternals{TupletNumber}, -@rinternals{TimeScaledMusic}. - -@cindex grace notes within tuplet brackets - -@knownissues -When the first note on a staff is a grace note followed by a -tuplet the grace note must be placed before the @code{\times} -command to avoid errors. Anywhere else, grace notes may be -placed within tuplet brackets. - - -@node Scaling durations -@unnumberedsubsubsec Scaling durations - -@cindex scaling durations -@cindex durations, scaling - -You can alter the duration of single notes, rests or chords by a -fraction @code{N/M} by appending @code{*N/M} (or @code{*N} if @code{M} -is 1) to the duration. This will not affect the appearance of the -notes or rests produced, but the altered duration will be used in -calculating the position within the measure and setting the duration -in the MIDI output. Multiplying factors may be combined such as -@code{*L*M/N}. - -In the following example, the first three notes take up exactly -two beats, but no triplet bracket is printed. - -@lilypond[quote,relative=2,verbatim] -\time 2/4 -% Alter durations to triplets -a4*2/3 gis4*2/3 a4*2/3 -% Normal durations -a4 a4 -% Double the duration of chord -4*2 -% Duration of quarter, appears like sixteenth -b16*4 c4 -@end lilypond - -The duration of skip or spacing notes may also be modified by -a multiplier. This is useful for skipping many measures, e.g., -@code{s1*23}. - -@cindex compressing music -@cindex expanding music - -@funindex \scaleDurations -@funindex scaleDurations - -Longer stretches of music may be compressed by a fraction in the -same way, as if every note, chord or rest had the fraction as a -multiplier. This leaves the appearance of the music unchanged but -the internal duration of the notes will be multiplied by the -fraction @emph{num}/@emph{den}. The spaces around the dot are -required. Here is an example showing how music can be compressed -and expanded: - -@lilypond[quote,relative=2,verbatim] -\time 2/4 -% Normal durations -4 c8 a -% Scale music by *2/3 -\scaleDurations #'(2 . 3) { - 4. c8 a f -} -% Scale music by *2 -\scaleDurations #'(2 . 1) { - 4 c8 b -} -@end lilypond - -@noindent -One application of this command is in polymetric -notation, see @ref{Polymetric notation}. - - -@seealso -Notation Reference: -@ref{Tuplets}, -@ref{Invisible rests}, -@ref{Polymetric notation}. - -Snippets: -@rlsr{Rhythms}. - - -@node Ties -@unnumberedsubsubsec Ties - -@cindex tie - -@funindex ~ - -A tie connects two adjacent note heads of the same pitch. The tie -in effect extends the duration of a note. - -@warning{Ties should not be confused with @emph{slurs}, which -indicate articulation, or @emph{phrasing slurs}, which indicate -musical phrasing. A tie is just a way of extending a note -duration, similar to the augmentation dot.} - -A tie is entered using the tilde symbol (@code{~}). - -@lilypond[quote,verbatim,relative=2] -a2 ~ a -@end lilypond - - -@noindent -Ties are used either when the note crosses a bar line, or when -dots cannot be used to denote the rhythm. Ties should also be -used when note values cross larger subdivisions of the measure: - -@lilypond[verbatim,quote] -\relative c' { - r8 c8 ~ c2 r4 | - r8^"not" c2 ~ c8 r4 -} -@end lilypond - -If you need to tie many notes across bar lines, it may be -easier to use automatic note splitting, see @ref{Automatic note -splitting}. This mechanism automatically splits long notes, and -ties them across bar lines. - -@cindex ties and chords -@cindex chords and ties - -When a tie is applied to a chord, all note heads whose pitches -match are connected. When no note heads match, no ties will be -created. Chords may be partially tied by placing the tie inside -the chord. - -@lilypond[quote,verbatim,relative=1] - ~ - -@end lilypond - -@cindex repeating ties -@cindex ties, repeating -@cindex volta brackets and ties -@cindex ties and volta brackets - -@funindex \repeatTie -@funindex repeatTie - -When a second alternative of a repeat starts with a tied note, you -have to specify the repeated tie as follows: - -@lilypond[quote,relative=2,verbatim] -\repeat volta 2 { c g 2 ~ } -\alternative { - % First alternative: following note is tied normally - { 2. r4 } - % Second alternative: following note has a repeated tie - { 2\repeatTie d4 c } } -@end lilypond - -@cindex laissez vibrer -@cindex ties, laissez vibrer - -@funindex \laissezVibrer -@funindex laissezVibrer - -@notation{L.v.} ties (@notation{laissez vibrer}) indicate that -notes must not be damped at the end. It is used in notation for -piano, harp and other string and percussion instruments. They can -be entered as follows: - -@lilypond[quote,verbatim,relative=1] -1\laissezVibrer -@end lilypond - -@cindex ties, placement - -@funindex \tieUp -@funindex tieUp -@funindex \tieDown -@funindex tieDown -@funindex \tieNeutral -@funindex tieNeutral - -The vertical placement of ties may be controlled, see -Predefined commands, or for details, see -@ref{Direction and placement}. - -@cindex ties, appearance -@cindex ties, dotted -@cindex ties, dashed -@cindex dashed ties -@cindex dotted ties - -@funindex \tieDotted -@funindex tieDotted -@funindex \tieDashed -@funindex tieDashed -@funindex \tieSolid -@funindex tieSolid - -Ties may be made dashed, dotted, or a combination of solid and -dashed. - -@lilypond[quote, verbatim, relative=1] -\tieDotted -c2 ~ c -\tieDashed -c2 ~ c -\tieHalfDashed -c2 ~ c -\tieHalfSolid -c2 ~ c -\tieSolid -c2 ~ c -@end lilypond - -Custom dash patterns can be specified: - -@lilypond[quote, verbatim, relative=1] -\tieDashPattern #0.3 #0.75 -c2 ~ c -\tieDashPattern #0.7 #1.5 -c2 ~ c -\tieSolid -c2 ~ c -@end lilypond - -Dash pattern definitions for ties have the same structure as -dash pattern definitions for slurs. -For more information about complex dash patterns, -see the snippets under @ref{Slurs}. - -@predefined -@code{\tieUp}, -@code{\tieDown}, -@code{\tieNeutral}, -@code{\tieDotted}, -@code{\tieDashed}, -@code{\tieDashPattern}, -@code{\tieHalfDashed}, -@code{\tieHalfSolid}, -@code{\tieSolid}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{using-ties-with-arpeggios.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{engraving-ties-manually.ly} - - -@seealso -Music Glossary: -@rglos{tie}, -@rglos{laissez vibrer}. - -Notation Reference: -@ref{Slurs}, -@ref{Automatic note splitting}. - -Snippets: -@rlsr{Rhythms}. - -Internals Reference: -@rinternals{LaissezVibrerTie}, -@rinternals{LaissezVibrerTieColumn}, -@rinternals{TieColumn}, -@rinternals{Tie}. - - -@knownissues - -Switching staves when a tie is active will not produce a slanted -tie. - -Changing clefs or octavations during a tie is not really -well-defined. In these cases, a slur may be preferable. - - - -@node Writing rests -@subsection Writing rests - -Rests are entered as part of the music in music expressions. - -@menu -* Rests:: -* Invisible rests:: -* Full measure rests:: -@end menu - -@node Rests -@unnumberedsubsubsec Rests - -@cindex rest -@cindex rest, entering durations -@cindex maxima rest -@cindex longa rest -@cindex breve rest - -@funindex \rest -@funindex rest -@funindex r -@funindex \maxima -@funindex maxima -@funindex \longa -@funindex longa -@funindex \breve -@funindex breve - -Rests are entered like notes with the note name @code{r}. -Durations longer than a whole rest use the predefined -commands shown: - -@c \time 16/1 is used to avoid spurious bar lines -@c and long tracts of empty measures -@lilypond[fragment,quote,verbatim] -\new Staff { - % These two lines are just to prettify this example - \time 16/1 - \override Staff.TimeSignature #'stencil = ##f - % Print a maxima rest, equal to four breves - r\maxima - % Print a longa rest, equal to two breves - r\longa - % Print a breve rest - r\breve - r1 r2 r4 r8 r16 r32 r64 r128 -} -@end lilypond - -@cindex rest, multi-measure -@cindex rest, whole-measure - -Whole measure rests, centered in the middle of the measure, must be -entered as multi-measure rests. They can be used for a single -measure as well as many measures and are discussed in @ref{Full -measure rests}. - -@cindex rest, specifying vertical position - -To explicitly specify a rest's vertical position, write a note -followed by @code{\rest}. A rest of the duration of the note will -be placed at the staff position where the note would appear. This -allows for precise manual formatting of polyphonic music, since the -automatic rest collision formatter will not move these rests. - -@lilypond[quote,verbatim,relative=2] -a4\rest d4\rest -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{rest-styles.ly} - - -@seealso -Music Glossary: -@rglos{breve}, -@rglos{longa}, -@rglos{maxima}. - -Notation Reference: -@ref{Full measure rests}. - -Snippets: -@rlsr{Rhythms}. - -Internals Reference: -@rinternals{Rest}. - - -@knownissues - -@c Deliberately duplicated in Durations and Rests. -gp -There is no fundamental limit to rest durations (both in terms of -longest and shortest), but the number of glyphs is limited: there -are rests from 128th to maxima (8 x whole). - - -@node Invisible rests -@unnumberedsubsubsec Invisible rests - -@cindex skip -@cindex invisible rest -@cindex rest, invisible -@cindex spacer note -@cindex spacer rest - -@funindex s -@funindex \skip -@funindex skip - -An invisible rest (also called a @q{spacer rest}) can be entered -like a note with the note name@tie{}@code{s}: - -@lilypond[verbatim,quote,relative=2] -c4 c s c -s2 c -@end lilypond - -@cindex lyrics, skip - -Spacer rests are available only in note mode and chord mode. In -other situations, for example, when entering lyrics, @code{\skip} -is used to skip a musical moment. @code{\skip} requires an -explicit duration. - -@lilypond[quote,verbatim,relative=2] -<< - { - a2 \skip2 a2 a2 - } - \new Lyrics { - \lyricmode { - foo2 \skip 1 bla2 - } - } ->> -@end lilypond - -A spacer rest implicitly causes @code{Staff} and @code{Voice} -contexts to be created if none exist, just like notes and rests -do: - -@lilypond[quote,verbatim,fragment] -s1 s s -@end lilypond - -@code{\skip} simply skips musical time; it creates no output of -any kind. - -@lilypond[quote,verbatim,fragment] -% This is valid input, but does nothing -\skip 1 \skip1 \skip 1 -@end lilypond - - -@seealso -Snippets: -@rlsr{Rhythms}. - -Internals Reference: @rinternals{SkipMusic} - - -@node Full measure rests -@unnumberedsubsubsec Full measure rests - -@cindex multi-measure rests -@cindex full-measure rests -@cindex rest, multi-measure -@cindex rest, full-measure -@cindex whole rest for a full measure -@cindex rest, whole for a full measure - -@funindex R - -Rests for one or more full measures are entered like notes with -the note name uppercase @code{R}: - -@lilypond[quote,verbatim,relative=2] -% Rest measures contracted to single measure -\compressFullBarRests -R1*4 -R1*24 -R1*4 -b2^"Tutti" b4 a4 -@end lilypond - -The duration of full-measure rests is identical to the duration -notation used for notes. The duration in a multi-measure rest must -always be an integral number of measure-lengths, so augmentation dots -or fractions must often be used: - -@lilypond[quote,fragment,verbatim] -\compressFullBarRests -\time 2/4 -R1 | R2 | -\time 3/4 -R2. | R2.*2 | -\time 13/8 -R1*13/8 | R1*13/8*12 | -\time 10/8 -R4*5*4 | -@end lilypond - -A full-measure rest is printed as either a whole or breve rest, -centered in the measure, depending on the time signature. - -@lilypond[quote,verbatim,fragment] -\time 4/4 -R1 | -\time 6/4 -R1*3/2 | -\time 8/4 -R1*2 | -@end lilypond - -@cindex multi-measure rest, expanding -@cindex multi-measure rest, contracting - -@funindex \expandFullBarRests -@funindex expandFullBarRests -@funindex \compressFullBarRests -@funindex compressFullBarRests - -By default a multi-measure rest is expanded in the printed score to -show all the rest measures explicitly. Alternatively, a multi-measure -rest can be shown as a single measure containing a multi-measure rest -symbol, with the number of measures of rest printed above the measure: - -@lilypond[quote,fragment,verbatim] -% Default behavior -\time 3/4 r2. | R2.*2 | -\time 2/4 R2 | -\time 4/4 -% Rest measures contracted to single measure -\compressFullBarRests -r1 | R1*17 | R1*4 | -% Rest measures expanded -\expandFullBarRests -\time 3/4 -R2.*2 | -@end lilypond - - -@cindex text on multi-measure rest -@cindex multi-measure rest, attaching text -@cindex script on multi-measure rest -@cindex multi-measure rest, script -@cindex fermata on multi-measure rest -@cindex multi-measure rest, attaching fermata -@cindex markup on multi-measure rest -@cindex multi-measure rest with markup - -@funindex \fermataMarkup -@funindex fermataMarkup -@funindex MultiMeasureRestText - -Markups can be added to multi-measure rests. -The predefined command @code{\fermataMarkup} -is provided for adding fermatas. - -@lilypond[quote,verbatim,fragment] -\compressFullBarRests -\time 3/4 -R2.*10^\markup { \italic "ad lib." } -R2.^\fermataMarkup -@end lilypond - -@warning{ -Markups attached to a multi-measure rest are -objects of type @code{MultiMeasureRestText}, not -@code{TextScript}. Overrides must be directed to the correct -object, or they will be ignored. See the following example. -} - -@lilypond[quote,verbatim,fragment] -% This fails, as the wrong object name is specified -\override TextScript #'padding = #5 -R1^"wrong" -% This is correct and works -\override MultiMeasureRestText #'padding = #5 -R1^"right" -@end lilypond - -When a multi-measure rest immediately follows a @code{\partial} -setting, resulting bar-check warnings may not be displayed. - - -@funindex \textLengthOn -@funindex textLengthOn -@funindex \textLengthOff -@funindex textLenthOff -@funindex \fermataMarkup -@funindex fermataMarkup -@funindex \compressFullBarRests -@funindex compressFullBarRests -@funindex \expandFullBarRests -@funindex expandFullBarRests - -@predefined -@code{\textLengthOn}, -@code{\textLengthOff}, -@code{\fermataMarkup}, -@code{\compressFullBarRests}, -@code{\expandFullBarRests}. -@endpredefined - - -@snippets - -@cindex church rest -@cindex rest, church -@cindex kirchenpausen - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{changing-form-of-multi-measure-rests.ly} - -@cindex multi-measure rests, positioning -@cindex positioning multi-measure rests - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{positioning-multi-measure-rests.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{multi-measure-rest-markup.ly} - - -@seealso -Music Glossary: -@rglos{multi-measure rest}. - -Notation Reference: -@ref{Durations}, -@ref{Text}, -@ref{Formatting text}, -@ref{Text scripts}. - -Snippets: -@rlsr{Rhythms}. - -Internals Reference: -@rinternals{MultiMeasureRest}, -@rinternals{MultiMeasureRestNumber}, -@rinternals{MultiMeasureRestText}. - - -@cindex fingerings and multi-measure rests -@cindex multi-measure rests and fingerings - -@knownissues - -If an attempt is made to use fingerings (e.g., -@code{R1*10-4}) to put numbers over multi-measure rests, the -fingering numeral (4) may collide with the bar counter -numeral (10). - -@cindex condensing rests -@cindex rest, condensing ordinary - -There is no way to automatically condense multiple ordinary rests -into a single multi-measure rest. - -@cindex rest, collisions of - -Multi-measure rests do not take part in rest collisions. - -@node Displaying rhythms -@subsection Displaying rhythms - -@menu -* Time signature:: -* Upbeats:: -* Unmetered music:: -* Polymetric notation:: -* Automatic note splitting:: -* Showing melody rhythms:: -@end menu - -@node Time signature -@unnumberedsubsubsec Time signature - -@cindex time signature -@cindex meter - -@funindex \time -@funindex time - -The time signature is set as follows: - -@lilypond[quote,verbatim,relative=2] -\time 2/4 c2 -\time 3/4 c2. -@end lilypond - -@cindex time signature, visibility of - -Time signatures are printed at the beginning of a piece -and whenever the time signature changes. If a change takes place -at the end of a line a warning time signature sign is printed -there. This default behavior may be changed, see -@ref{Visibility of objects}. - -@lilypond[quote,verbatim,relative=2] -\time 2/4 -c2 c -\break -c c -\break -\time 4/4 -c c c c -@end lilypond - -@cindex time signature style -@cindex meter style - -@funindex \numericTimeSignature -@funindex numericTimeSignature -@funindex \defaultTimeSignature -@funindex defaultTimeSignature - -The time signature symbol that is used in 2/2 and 4/4 time can be -changed to a numeric style: - -@lilypond[quote,verbatim,relative=2] -% Default style -\time 4/4 c1 -\time 2/2 c1 -% Change to numeric style -\numericTimeSignature -\time 4/4 c1 -\time 2/2 c1 -% Revert to default style -\defaultTimeSignature -\time 4/4 c1 -\time 2/2 c1 -@end lilypond - - -Mensural time signatures are covered in -@ref{Mensural time signatures}. - - -@predefined -@code{\numericTimeSignature}, -@code{\defaultTimeSignature}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{changing-the-time-signature-without-affecting-the-beaming.ly} - -@cindex compound time signatures -@cindex time signature, compound - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{compound-time-signatures.ly} - - -@seealso -Music Glossary: -@rglos{time signature} - -Notation Reference: -@ref{Mensural time signatures}, -@ref{Time administration}. - -Snippets: -@rlsr{Rhythms}. - -Internals Reference: -@rinternals{TimeSignature}, -@rinternals{Timing_translator}. - - -@node Upbeats -@unnumberedsubsubsec Upbeats - -@cindex anacrusis -@cindex upbeat -@cindex partial measure -@cindex measure, partial -@cindex pickup measure -@cindex measure, change length - -@funindex measurePosition -@funindex \partial -@funindex partial - -Partial or pick-up measures, such as an anacrusis or upbeat, are -entered using the @code{\partial} command, with the syntax - -@example -\partial @var{duration} -@end example - -where @code{duration} is the rhythmic length of the interval -before the start of the first complete measure: - -@lilypond[quote,verbatim,relative=2] -\partial 4 e4 | -a2. c,4 | -@end lilypond - -The partial measure can be any duration less than a full measure: - -@lilypond[quote,verbatim,relative=2] -\partial 8*3 c8 d e | -a2. c,4 | -@end lilypond - -Internally, this is translated into - -@example -\set Timing.measurePosition = -@var{duration} -@end example - -The property @code{measurePosition} contains a rational number -indicating how much of the measure has passed at this point. Note -that this is set to a negative number by the @code{\partial} -command: i.e., @code{\partial 4} is internally translated to -@code{-4}, meaning @qq{there is a quarter note left in the measure.} - - -@seealso -Music Glossary: -@rglos{anacrusis}. - -Notation Reference: -@ref{Grace notes}. - -Snippets: -@rlsr{Rhythms}. - -Internal Reference: -@rinternals{Timing_translator}. - - -@knownissues - -The @code{\partial} command is intended to be used only at the -beginning of a piece. If you use it after the beginning, some -odd warnings may occur. - -@node Unmetered music -@unnumberedsubsubsec Unmetered music - -@cindex bar lines, turning off -@cindex bar numbering, turning off -@cindex cadenza -@cindex unmetered music - -@funindex \cadenzaOn -@funindex cadenzaOn -@funindex \cadenzaOff -@funindex cadenzaOff - -Bar lines and bar numbers are calculated automatically. For -unmetered music (some cadenzas, for example), this is not desirable. -To turn off automatic calculation of bar lines and bar numbers, -use the command @code{\cadenzaOn}, and use @code{\cadenzaOff} -to turn them on again. - -@lilypond[verbatim,relative=2,fragment] -c4 d e d -\cadenzaOn -c4 c d8 d d f4 g4. -\cadenzaOff -\bar "|" -d4 e d c -@end lilypond - -Bar numbering is resumed at the end of the cadenza as if the -cadenza were not there: - -@lilypond[verbatim,relative=2,fragment] -% Show all bar numbers -\override Score.BarNumber #'break-visibility = #all-visible -c4 d e d -\cadenzaOn -c4 c d8 d d f4 g4. -\cadenzaOff -\bar "|" -d4 e d c -@end lilypond - - -@predefined -@code{\cadenzaOn}, -@code{\cadenzaOff}. -@endpredefined - - -@seealso -Music Glossary: -@rglos{cadenza}. - -Notation Reference: -@ref{Visibility of objects}. - -Snippets: -@rlsr{Rhythms}. - - -@cindex cadenza line breaks -@cindex cadenza page breaks -@cindex unmetered music, line breaks -@cindex unmetered music, page breaks -@cindex breaks in unmetered music -@cindex line breaks in cadenzas -@cindex page breaks in cadenzas -@cindex line breaks in unmetered music -@cindex page breaks in unmetered music - -@knownissues - -LilyPond will insert line breaks and page breaks only at a -bar line. Unless the unmetered music ends before the end of the -staff line, you will need to insert invisible bar lines with - -@example -\bar "" -@end example - -@noindent -to indicate where breaks can occur. - - -@node Polymetric notation -@unnumberedsubsubsec Polymetric notation - -@c This section necessarily uses \set -@c This is acceptable -td - -@cindex double time signatures -@cindex signatures, polymetric -@cindex time signatures, polymetric -@cindex time signatures, double -@cindex polymetric signatures -@cindex meter, polymetric - -@funindex timeSignatureFraction -@funindex \scaleDurations -@funindex scaleDurations -@funindex \times -@funindex times - -Polymetric notation is supported, either explicitly or by modifying -the visible time signature symbol and scaling the note durations. - -@strong{@i{Staves with different time signatures, equal measure lengths}} - -This notation can be created by setting a common time signature -for each staff but replacing the symbol manually by setting -@code{timeSignatureFraction} to the desired fraction and scaling -the printed durations in each staff to the common time -signature; see @ref{Time signature}. The scaling is done with -@code{\scaleDurations}, which is used in a similar way to -@code{\times}, but does not create a tuplet bracket; see -@ref{Scaling durations}. - -@cindex beaming in polymetric music -@cindex beaming in polymetric meter - -In this example, music with the time signatures of 3/4, 9/8, and -10/8 are used in parallel. In the second staff, shown durations -are multiplied by 2/3, as 2/3 * 9/8 = 3/4, and in the third -staff, shown durations are multiplied by 3/5, as 3/5 * 10/8 = 3/4. -It will often be necessary to insert beams manually, as the -duration scaling affects the autobeaming rules. - -@lilypond[quote,verbatim,fragment] -\relative c' << - \new Staff { - \time 3/4 - c4 c c | - c c c | - } - \new Staff { - \time 3/4 - \set Staff.timeSignatureFraction = #'(9 . 8) - \scaleDurations #'(2 . 3) - \repeat unfold 6 { c8[ c c] } - } - \new Staff { - \time 3/4 - \set Staff.timeSignatureFraction = #'(10 . 8) - \scaleDurations #'(3 . 5) { - \repeat unfold 2 { c8[ c c] } - \repeat unfold 2 { c8[ c] } | - c4. c4. \times 2/3 { c8[ c c] } c4 - } - } ->> -@end lilypond - -@strong{@i{Staves with different time signatures, unequal bar lengths}} - -Each staff can be given its own independent time signature by -moving the @code{Timing_translator} and the -@code{Default_bar_line_engraver} to the @code{Staff} context. - -@lilypond[quote,verbatim] -\layout { - \context { - \Score - \remove "Timing_translator" - \remove "Default_bar_line_engraver" - } - \context { - \Staff - \consists "Timing_translator" - \consists "Default_bar_line_engraver" - } -} - -% Now each staff has its own time signature. - -\relative c' << - \new Staff { - \time 3/4 - c4 c c | - c c c | - } - \new Staff { - \time 2/4 - c4 c | - c c | - c c | - } - \new Staff { - \time 3/8 - c4. | - c8 c c | - c4. | - c8 c c | - } ->> -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{compound-time-signatures.ly} - - -@seealso -Music Glossary: -@rglos{polymetric}, -@rglos{polymetric time signature}, -@rglos{meter}. - -Notation Reference: -@ref{Time signature}, -@ref{Scaling durations}. - -Snippets: -@rlsr{Rhythms}. - -Internals Reference: -@rinternals{TimeSignature}, -@rinternals{Timing_translator}, -@rinternals{Default_bar_line_engraver}, -@rinternals{Staff}. - - -@knownissues - -When using different time signatures in parallel, notes -at the same moment will be be placed at the same horizontal -location. However, the bar lines in the different staves -will cause the note spacing to be less regular in each of the -individual staves than would be normal without the different -time signatures. - -@node Automatic note splitting -@unnumberedsubsubsec Automatic note splitting - -@cindex notes, splitting -@cindex splitting notes - -@funindex Note_heads_engraver -@funindex Completion_heads_engraver - -Long notes which overrun bar lines can be converted automatically -to tied notes. This is done by replacing the -@code{Note_heads_engraver} with the -@code{Completion_heads_engraver}. In the following -example, notes crossing the bar lines are split and tied. - -@lilypond[quote,verbatim,relative=1] -\new Voice \with { - \remove "Note_heads_engraver" - \consists "Completion_heads_engraver" -} - -{ c2. c8 d4 e f g a b c8 c2 b4 a g16 f4 e d c8. c2 } -@end lilypond - -This engraver splits all running notes at the bar line, and -inserts ties. One of its uses is to debug complex scores: if the -measures are not entirely filled, then the ties show exactly how -much each measure is off. - - -@seealso -Music Glossary: @rglos{tie} - -Learning Manual: -@rlearning{Engravers explained}, -@rlearning{Adding and removing engravers}. - -Snippets: -@rlsr{Rhythms}. - -Internals Reference: -@rinternals{Note_heads_engraver}, -@rinternals{Completion_heads_engraver}, -@rinternals{Forbid_line_break_engraver}. - - -@knownissues - -Not all durations (especially those containing tuplets) can be -represented exactly with normal notes and dots, but the -@code{Completion_heads_engraver} will not insert tuplets. - -The @code{Completion_heads_engraver} only affects notes; it does not -split rests. - - -@node Showing melody rhythms -@unnumberedsubsubsec Showing melody rhythms - -@cindex melody rhythms, showing -@cindex rhythms, showing melody - -Sometimes you might want to show only the rhythm of a melody. This -can be done with the rhythmic staff. All pitches of notes on such a -staff are squashed, and the staff itself has a single line - -@lilypond[quote,relative=1,verbatim] -<< - \new RhythmicStaff { - \new Voice = "myRhythm" { - \time 4/4 - c4 e8 f g2 - r4 g g f - g1 - } - } - \new Lyrics { - \lyricsto "myRhythm" { - This is my song - I like to sing - } - } ->> -@end lilypond - -@cindex guitar chord charts -@cindex strumming rhythms, showing -@cindex guitar strumming rhythms, showing - -@funindex Pitch_squash_engraver -@funindex \improvisationOn -@funindex improvisationOn -@funindex \improvisationOff -@funindex improvisationOff - -Guitar chord charts often show the strumming rhythms. This can -be done with the @code{Pitch_squash_engraver} and -@code{\improvisationOn}. - - -@lilypond[quote,verbatim] -<< - \new ChordNames { - \chordmode { - c1 f g c - } - } - - \new Voice \with { - \consists Pitch_squash_engraver - } \relative c'' { - \improvisationOn - c4 c8 c c4 c8 c - f4 f8 f f4 f8 f - g4 g8 g g4 g8 g - c4 c8 c c4 c8 c - } ->> -@end lilypond - - -@predefined -@code{\improvisationOn}, -@code{\improvisationOff}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{guitar-strum-rhythms.ly} - - -@seealso -Snippets: -@rlsr{Rhythms}. - -Internals Reference: -@rinternals{RhythmicStaff}, -@rinternals{Pitch_squash_engraver}. - - -@node Beams -@subsection Beams - -@menu -* Automatic beams:: -* Setting automatic beam behavior:: -* Manual beams:: -* Feathered beams:: -@end menu - -@node Automatic beams -@unnumberedsubsubsec Automatic beams - -By default, beams are inserted automatically: - -@cindex beams, manual -@cindex manual beams -@cindex beams, setting rules for -@cindex beams, custom rules for - -@funindex \autoBeamOn -@funindex autoBeamOn -@funindex \autoBeamOff -@funindex autoBeamOff - -@lilypond[quote,verbatim,relative=2] -\time 2/4 c8 c c c -\time 6/8 c c c c8. c16 c8 -@end lilypond - -If these automatic decisions are not satisfactory, beaming can be -entered explicitly; see @ref{Manual beams}. Beams @emph{must} be -entered manually if beams are to be extended over rests. - -If automatic beaming is not required, it may be turned off with -@code{\autoBeamOff} and on with @code{\autoBeamOn}: - -@lilypond[quote,relative=1,verbatim] -c4 c8 c8. c16 c8. c16 c8 -\autoBeamOff -c4 c8 c8. c16 c8. -\autoBeamOn -c16 c8 -@end lilypond - -@cindex melismata, beams -@cindex beams and melismata - -@warning{If beams are used to indicate melismata in songs, then -automatic beaming should be switched off with @code{\autoBeamOff} -and the beams indicated manually.} - -Beaming patterns that differ from the automatic defaults may be -created, see @ref{Setting automatic beam behavior}. - - -@predefined -@code{\autoBeamOff}, -@code{\autoBeamOn}. -@endpredefined - - -@snippets - -@cindex line breaks and beams -@cindex beams and line breaks - -@funindex breakable - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{beams-across-line-breaks.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{changing-beam-knee-gap.ly} - - -@seealso -Notation Reference: -@ref{Manual beams}, -@ref{Setting automatic beam behavior}. - -Installed Files: -@file{scm/@/auto@/-beam@/.scm}. - -Snippets: -@rlsr{Rhythms}. - -Internals Reference: @rinternals{Beam}. - - -@knownissues - -Beams can collide with note heads and accidentals in other voices - - -@node Setting automatic beam behavior -@unnumberedsubsubsec Setting automatic beam behavior - - -@cindex automatic beams, tuning -@cindex tuning automatic beaming -@cindex automatic beam generation -@cindex autobeam -@cindex lyrics and beaming - -@funindex autoBeaming -@funindex autoBeamSettings -@funindex (end * * * *) -@funindex (begin * * * *) -@funindex measureLength -@funindex beatLength -@funindex beatGrouping -@funindex \time -@funindex time -@funindex \set -@funindex set - -There are two types of beaming rules: @emph{beam-grouping} -rules and @emph{beam-ending} rules. Beam-grouping rules are the -simplest, but are over-ridden by any beam-ending rules which apply. - -The placement of automatic beams is determined by applying the -following rules in order: - -@itemize - -@item If a manual beam is specified with @code{[..]} set the beam -as specified, otherwise - -@item if @code{\autoBeamOff} is in force do not beam, otherwise - -@item if a beam-ending rule applies use it to determine the valid -places where beams may end, otherwise - -@item if a valid (see below) beat-grouping rule applies use it to -group notes with beams, otherwise - -@item use the value of @code{beatLength} to group notes with beams - -@end itemize - -@i{@strong{Modifying the grouping of beats}} - -If there are no beam-ending rules defined for the beam duration of a -particular beam in the time signature in use, its beaming is -controlled by three context properties: @code{measureLength}, -@code{beatLength} and @code{beatGrouping}. These properties may be -set in the @code{Score}, @code{Staff} or @code{Voice} contexts to -delimit their scope. The default values are set while processing -@code{\time} commands, so any @code{\set} commands to modify their -value must be placed after all @code{\time} commands. - -@warning{These three properties become effective for a particular -beam @strong{only} if there are no beam-ending rules predefined for -that beam's duration in the time signature in use, or if these -beam-ending rules have all been reverted.} - -These determine the beaming as follows: - -Beams may begin anywhere (unless a beam is already active). Beams -end at a time determined by the values of @code{beatGrouping} and -@code{beatLength}, as follows: - -@itemize - -@item If @code{beatGrouping} and @code{beatLength} are consistent -with @code{measureLength}, @code{beatGrouping} is used to determine -the end points of beams. - -@item If @code{beatGrouping} and @code{beatLength} are inconsistent -with @code{measureLength}, @code{beatLength} is used to determine -the end points of beams. - -@end itemize - -By default the @code{measureLength} and @code{beatLength} are -derived from the time signature set by the @code{\time} command. -The @code{measureLength} is set to be exactly the same length as -the measure length given by the time signature, and the -@code{beatLength} is set to be the same as one over the denominator -of the time signature. - -The default value of @code{beatGrouping} is taken from a table in -@file{scm/@/music@/-functions@/.scm}. To find this, see -@rlearning{Other sources of information}. It defines the beat -grouping for 3/8, 4/8, 5/8, 8/8, and all the common compound time -signatures. - -Both @code{measureLength} and @code{beatLength} are @i{moments}, -units of musical duration. A quantity of type @i{moment} is -created by the scheme function @code{ly:make-moment}. For more -information about this function, see @ref{Time administration}. - -@code{beatGrouping} is a list of integers giving the number of -beats in each group. - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{grouping-beats.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{specifying-context-with-beatgrouping.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{using-beatlength-and-beatgrouping.ly} - -@funindex subdivideBeams - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{sub-dividing-beams.ly} - -@cindex measure groupings -@cindex beats, grouping -@cindex grouping beats -@cindex measure sub-grouping - -@funindex autoBeamSettings - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{conducting-signs,-measure-grouping-signs.ly} - - -@strong{@i{Modifying the beam end points}} - -Beam-ending rules are required when beams of different durations are -to end at different points within the measure. For example, it may -be desirable for eighth-note beams in 4/4 time to end only at the -end of the measure or half-way through it, but for sixteenth-note -beams to end at quarter note positions to avoid overly long beamed -runs. The rules work as follows: - -Automatic beams can start on any note but can end at only a few -positions within the measure, namely at positions specified by the -properties in @code{autoBeamSettings}. These properties consist of -a list of rules defining where beams can end. The default -@code{autoBeamSettings} rules are defined in -@file{scm/@/auto@/-beam@/.scm}. To find this file, see -@rlearning{Other sources of information}. - -In order to add a rule to the list, use - -@example -#(override-auto-beam-setting - '(beam-limit - beam-numerator beam-denominator - time-signature-numerator time-signature-denominator) - moment-numerator moment-denominator [context]) -@end example - -@noindent -where - -@itemize - -@item @code{beam-limit} is the type of automatic beam limit -defined. This can be either @code{begin} or @code{end} but -only @code{end} is effective. - -@item @code{beam-numerator/beam-denominator} is the beam duration -to which the rule is to apply. A beam is considered to have the -duration of its shortest note. Set @code{beam-numerator} and -@code{beam-denominator} to @code{'*'} to have this rule apply to beams -of any duration. - -@item @code{time-signature-numerator/time-signature-denominator} -specifies the time signature to which this rule should apply. If -@code{time-signature-numerator} and @code{time-signature-denominator} -are set to @code{'*'} this rule will apply in any time signature. - -@item @code{moment-numerator/moment-denominator} is the position -in the bar at which the beam should end. - -@funindex score-override-auto-beam-setting -@funindex override-auto-beam-setting - -@item @code{context} is optional, and it specifies the context at which -the change should be made. The default is @code{'Voice}. - -@code{#(score-override-auto-beam-setting '(A B C D) E F)} is equivalent to -@code{#(override-auto-beam-setting '(A B C D) E F 'Score)}. - -@end itemize - -For example, if automatic beams should always end on the first quarter -note, whatever the time signature or beam duration, use - -@lilypond[quote,verbatim,relative=2] -a8 a a a a a a a -#(override-auto-beam-setting '(end * * * *) 1 4) -a8 a a a a a a a -@end lilypond - -You can force the beam settings to take effect only on beams whose shortest -note is a certain duration - -@lilypond[quote,verbatim,relative=2] -\time 2/4 -% end 1/16 beams for all time signatures at the 1/16 moment -#(override-auto-beam-setting '(end 1 16 * *) 1 16) -a16 a a a a a a a | -a32 a a a a16 a a a a a | -% end 1/32 beams for all time signatures at the 1/16 moment -#(override-auto-beam-setting '(end 1 32 * *) 1 16) -a32 a a a a16 a a a a a | -@end lilypond - -You can force the beam settings to take effect only in certain time -signatures - -@lilypond[quote,verbatim,relative=2] -\time 5/8 -% end beams of all durations in 5/8 time signature at the 2/8 moment -#(override-auto-beam-setting '(end * * 5 8) 2 8) -c8 c d d d -\time 4/4 -e8 e f f e e d d -\time 5/8 -c8 c d d d -@end lilypond - -When multiple voices are used the @code{Staff} context must be -specified if the beaming is to be applied to all voices in the -staff: - -@lilypond[quote,verbatim,relative=2] -\time 7/8 -% rhythm 3-1-1-2 -% Context not specified - does not work correctly -#(override-auto-beam-setting '(end * * 7 8) 3 8) -#(override-auto-beam-setting '(end * * 7 8) 4 8) -#(override-auto-beam-setting '(end * * 7 8) 5 8) -<< {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >> - -% Works correctly with context specified -#(override-auto-beam-setting '(end * * 7 8) 3 8 'Staff) -#(override-auto-beam-setting '(end * * 7 8) 4 8 'Staff) -#(override-auto-beam-setting '(end * * 7 8) 5 8 'Staff) -<< {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >> -@end lilypond - -@warning{If any unexpected beam behavior occurs, check the default -automatic beam settings in @file{scm/@/auto@/-beam@/.scm} for -possible interference, because the beam endings defined there will -still apply in addition to your own.} - -@funindex revert-auto-beam-setting - -Any unwanted or conflicting default endings must be reverted for -your time signature(s). Existing default or user-defined -beam-ending rules are removed by using - -@example -#(revert-auto-beam-setting - '(beam-limit - beam-numerator beam-denominator - time-signature-numerator time-signature-denominator) - moment-numerator moment-denominator [context]) -@end example - -@noindent -@code{beam-limit}, @code{beam-numerator}, @code{beam-denominator}, -@code{time-signature-numerator}, @code{time-signature-denominator}, -@code{moment-numerator}, @code{moment-denominator} and @code{context} -are the same as above. - -@lilypond[quote,verbatim,relative=2] -\time 4/4 -a16 a a a a a a a a a a a a a a a -% undo a rule ending 1/16 beams in 4/4 time at 1/4 moment -#(revert-auto-beam-setting '(end 1 16 4 4) 1 4) -a16 a a a a a a a a a a a a a a a -@end lilypond - -The rule in a @code{revert-auto-beam-setting} statement must exactly -match the original rule. That is, no wildcard expansion is taken into -account. - -@lilypond[quote,verbatim,relative=2] -\time 1/4 -#(override-auto-beam-setting '(end 1 16 1 4) 1 8) -a16 a a a -#(revert-auto-beam-setting '(end 1 16 * *) 1 8) % this won't revert it! -a a a a -#(revert-auto-beam-setting '(end 1 16 1 4) 1 8) % this will -a a a a -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{beam-grouping-in-7-8-time.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{reverting-default-beam-endings.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{beam-endings-in-score-context.ly} - -@funindex \autoBeamOff -@funindex autoBeamOff -@funindex \autoBeamOn -@funindex autoBeamOn - -@predefined -@code{\autoBeamOff}, -@code{\autoBeamOn}. -@endpredefined - - -@cindex beam, last in score -@cindex beam, last in polyphonic voice - -@knownissues - -If a score ends while an automatic beam has not been ended and is -still accepting notes, this last beam will not be typeset at all. -The same holds for polyphonic voices, entered with @code{<< -@dots{} \\ @dots{} >>}. If a polyphonic voice ends while an -automatic beam is still accepting notes, it is not typeset. - - -@seealso -Snippets: -@rlsr{Rhythms}. - - -@node Manual beams -@unnumberedsubsubsec Manual beams - -@cindex beams, manual -@cindex manual beams - -@funindex ] -@funindex [ - -In some cases it may be necessary to override the automatic -beaming algorithm. For example, the autobeamer will not put beams -over rests or bar lines, and in choral scores the beaming is -often set to follow the meter of the lyrics rather than the -notes. Such beams can be specified manually by -marking the begin and end point with @code{[} and @code{]} - -@lilypond[quote,relative=1,verbatim] -{ - r4 r8[ g' a r8] r8 g[ | a] r8 -} -@end lilypond - - -@funindex \noBeam -@funindex noBeam - -Individual notes may be marked with @code{\noBeam} to prevent them -from being beamed: - -@lilypond[quote,verbatim,relative=2] -\time 2/4 c8 c\noBeam c c -@end lilypond - -@funindex stemLeftBeamCount -@funindex stemRightBeamCount - -Even more strict manual control with the beams can be achieved by -setting the properties @code{stemLeftBeamCount} and -@code{stemRightBeamCount}. They specify the number of beams to -draw on the left and right side, respectively, of the next note. -If either property is set, its value will be used only once, and -then it is erased. In this example, the last @code{f} is printed -with only one beam on the left side, i.e., the eighth-note beam of -the group as a whole. - -@lilypond[quote,relative=2,verbatim] -a8[ r16 f g a] -a8[ r16 -\set stemLeftBeamCount = #2 -\set stemRightBeamCount = #1 -f -\set stemLeftBeamCount = #1 -g a] -@end lilypond - - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{flat-flags-and-beam-nibs.ly} - -@node Feathered beams -@unnumberedsubsubsec Feathered beams - -@cindex beams, feathered -@cindex feathered beams - -@funindex \featherDurations -@funindex featherDurations -@funindex grow-direction - -Feathered beams are used to indicate that a small group of notes -should be played at an increasing (or decreasing) tempo, without -changing the overall tempo of the piece. The extent of the -feathered beam must be indicated manually using @code{[} and -@code{]}, and the beam feathering is turned on by specifying a -direction to the @code{Beam} property @code{grow-direction}. - -If the placement of the notes and the sound in the MIDI output is to -reflect the ritardando or accelerando indicated by the feathered beam -the notes must be grouped as a music expression delimited by braces -and preceded by a @code{featherDurations} command which specifies -the ratio between the durations of the first and last notes in the -group. - -The square brackets show the extent of the beam and the braces show -which notes are to have their durations modified. Normally these -would delimit the same group of notes, but this is not required: the -two commands are independent. - -In the following example the eight 16th notes occupy exactly the -same time as a half note, but the first note is one half as long -as the last one, with the intermediate notes gradually -lengthening. The first four 32nd notes gradually speed up, while -the last four 32nd notes are at a constant tempo. - -@lilypond[relative=1,verbatim,quote] -\override Beam #'grow-direction = #LEFT -\featherDurations #(ly:make-moment 2 1) -{ c16[ c c c c c c c] } -\override Beam #'grow-direction = #RIGHT -\featherDurations #(ly:make-moment 2 3) -{ c32[ d e f] } -% revert to non-feathered beams -\override Beam #'grow-direction = #'() -{ g32[ a b c] } -@end lilypond - -@noindent -The spacing in the printed output represents the -note durations only approximately, but the MIDI output is exact. - -@knownissues - -The @code{\featherDurations} command only works with very short -music snippets, and when numbers in the fraction are small. - - -@seealso -Snippets: -@rlsr{Rhythms}. - - -@node Bars -@subsection Bars - - -@menu -* Bar lines:: -* Bar numbers:: -* Bar and bar number checks:: -* Rehearsal marks:: -@end menu - -@node Bar lines -@unnumberedsubsubsec Bar lines - -@cindex bar lines -@cindex measure lines -@cindex closing bar lines -@cindex bar lines, closing -@cindex double bar lines -@cindex bar lines, double -@cindex repeat bars - -@funindex \bar -@funindex bar - -Bar lines delimit measures, and are also used to indicate -repeats. Normally, simple bar lines are automatically inserted -into the printed output at places based on the current time -signature. - -The simple bar lines inserted automatically can be changed to -other types with the @code{\bar} command. For example, a closing -double bar line is usually placed at the end of a piece: - -@lilypond[quote,relative=1,verbatim] -e4 d c2 \bar "|." -@end lilypond - -It is not invalid if the final note in a measure does not -end on the automatically entered bar line: the note is assumed -to carry over into the next measure. But if a long sequence -of such carry-over measures appears the music can appear compressed -or even flowing off the page. This is because automatic line -breaks happen only at the end of complete measures, i.e., where -all notes end before the end of a measure. - -@warning{An incorrect duration can cause line breaks to be -inhibited, leading to a line of highly compressed music or -music which flows off the page.} - -@cindex line breaks -@cindex bar lines, invisible -@cindex measure lines, invisible - -Line breaks are also permitted at manually inserted bar lines -even within incomplete measures. To allow a line break without -printing a bar line, use - -@example -\bar "" -@end example - -@noindent -This will insert an invisible bar line and allow (but not -force) a line break to occur at this point. The bar number -counter is not increased. To force a line break see -@ref{Line breaking}. - -@cindex manual bar lines -@cindex manual measure lines -@cindex bar lines, manual -@cindex measure lines, manual - -This and other special bar lines may be inserted manually at any -point. When they coincide with the end of a measure they replace the -simple bar line which would have been inserted there automatically. -When they do not coincide with the end of a measure the specified bar -line is inserted at that point in the printed output. Such insertions -do not affect the calculation and placement of subsequent automatic -bar lines. - -Two types of simple bar lines and five types of double bar lines are available -for manual insertion: - -@lilypond[quote,relative=1,verbatim] -f1 \bar "|" f \bar "." g \bar "||" a \bar ".|" b \bar ".|." c \bar "|.|" d \bar "|." e -@end lilypond - -@noindent -together with dotted and dashed bar lines: - -@lilypond[quote,relative=1,verbatim] -f1 \bar ":" g \bar "dashed" a -@end lilypond - -@noindent -and five types of repeat bar line: - -@lilypond[quote,relative=1,verbatim] -f1 \bar "|:" g \bar ":|:" a \bar ":|.|:" b \bar ":|.:" c \bar ":|" d -@end lilypond - -Additionally, a bar line can be printed as a simple tick: -@lilypond[quote,relative=1,verbatim] -f1 \bar "'" -@end lilypond -However, as such ticks are typically used in Gregorian chant, it is preferable -to use @code{\divisioMinima} there instead, described in the section -@ref{Divisiones} in Gregorian chant. - - -@cindex repeats - -Although the bar line types signifying repeats may be inserted -manually they do not in themselves cause LilyPond to recognize -a repeated section. Such repeated sections are better entered -using the various repeat commands (see @ref{Repeats}), which -automatically print the appropriate bar lines. - -In addition, you can specify @code{"||:"}, which is equivalent to -@code{"|:"} except at line breaks, where it gives a double bar -line at the end of the line and a start repeat at the beginning of -the next line. - -@lilypond[quote,relative=2,verbatim] -\override Score.RehearsalMark #'padding = #3 -c c c c -\bar "||:" -c c c c \break -\bar "||:" -c c c c -@end lilypond - -In scores with many staves, a @code{\bar} command in one staff is -automatically applied to all staves. The resulting bar lines are -connected between different staves of a @code{StaffGroup}, -@code{PianoStaff}, or @code{GrandStaff}. - -@lilypond[quote,fragment,verbatim] -<< - \new StaffGroup << - \new Staff { - e'4 d' - \bar "||" - f' e' - } - \new Staff { \clef bass c4 g e g } - >> - \new Staff { \clef bass c2 c2 } ->> -@end lilypond - - -@cindex default bar lines, changing -@cindex bar lines, default, changing - -@snippets - -@funindex whichBar -@funindex defaultBarType -@funindex \bar -@funindex bar -@funindex bartype - -The command @code{\bar }@var{bartype} is a shortcut for -@code{\set Timing.whichBar = }@var{bartype}. A bar line is -created whenever the @code{whichBar} property is -set. - -The default bar type used for automatically inserted bar lines is -@code{"|"}. This may be changed at any time -with @code{\set Timing.defaultBarType = }@var{bartype}. - - -@seealso -Notation Reference: -@ref{Line breaking}, -@ref{Repeats}, -@ref{Grouping staves}. - -Snippets: -@rlsr{Rhythms}. - -Internals Reference: @rinternals{BarLine} (created at -@rinternals{Staff} level), @rinternals{SpanBar} (across -staves), @rinternals{Timing_translator} (for Timing -properties). - - -@node Bar numbers -@unnumberedsubsubsec Bar numbers - -@cindex bar numbers -@cindex measure numbers -@cindex numbers, bar -@cindex numbers, measure - -@funindex currentBarNumber - -Bar numbers are typeset by default at the start of every line except -the first line. The number itself is stored in the -@code{currentBarNumber} property, which is normally updated -automatically for every measure. It may also be set manually: - -@lilypond[verbatim,quote,fragment,relative=1] -c1 c c c -\break -\set Score.currentBarNumber = #50 -c1 c c c -@end lilypond - -@cindex bar numbers, regular spacing - -@funindex barNumberVisibility -@funindex BarNumber - -Bar numbers can be typeset at regular intervals instead of just at -the beginning of every line. To do this the default behavior -must be overridden to permit bar numbers to be printed at places -other than the start of a line. This is controlled by the -@code{break-visibility} property of @code{BarNumber}. This takes -three values which may be set to @code{#t} or @code{#f} to specify -whether the corresponding bar number is visible or not. The order -of the three values is @code{end of line visible}, @code{middle of -line visible}, @code{beginning of line visible}. In the following -example bar numbers are printed at all possible places: - -@lilypond[verbatim,quote,relative=1] -\override Score.BarNumber #'break-visibility = #'#(#t #t #t) -\set Score.currentBarNumber = #11 -% Permit first bar number to be printed -\bar "" -c1 | c | c | c -\break -c1 | c | c | c -@end lilypond - - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{printing-the-bar-number-for-the-first-measure.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{printing-bar-numbers-at-regular-intervals.ly} - -@cindex measure number, format -@cindex bar number, format - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{printing-bar-numbers-inside-boxes-or-circles.ly} - -@cindex bar number alignment - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{aligning-bar-numbers.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{removing-bar-numbers-from-a-score.ly} - - -@seealso -Snippets: -@rlsr{Rhythms}. - -Internals Reference: @rinternals{BarNumber}. - - -@cindex bar number collision -@cindex collision, bar number - -@knownissues - -Bar numbers may collide with the top of the -@rinternals{StaffGroup} bracket, if there is one. To solve -this, the @code{padding} property of @rinternals{BarNumber} can -be used to position the number correctly. - - - -@node Bar and bar number checks -@unnumberedsubsubsec Bar and bar number checks - -@cindex bar check -@cindex bar number check -@cindex measure check -@cindex measure number check - -@funindex barCheckSynchronize -@funindex | - -Bar checks help detect errors in the entered durations. A bar check -may be entered using the bar symbol, @code{|}, at any place where a -bar line is expected to fall. If bar check lines are encountered at -other places, a list of warnings is printed in the log file, showing -the line numbers and lines in which the bar checks failed. In the -next example, the second bar check will signal an error. - -@example -\time 3/4 c2 e4 | g2 | -@end example - -Bar checks can also be used in lyrics, for example - -@example -\lyricmode @{ - \time 2/4 - Twin -- kle | Twin -- kle | -@} -@end example - -An incorrect duration can result in a completely garbled score, -especially if the score is polyphonic, so a good place to start -correcting input is by scanning for failed bar checks and -incorrect durations. - -If successive bar checks are off by the same musical interval, -only the first warning message is displayed. This allows the -warning to focus on the source of the timing error. - - -@funindex | -@funindex pipeSymbol - -It is also possible to redefine the action taken when a bar check -or pipe symbol, @code{|}, is encountered in the input, so that -it does something other than a bar check. This is done by -assigning a music expression to @code{pipeSymbol}. -In the following example @code{|} is set to insert a double bar -line wherever it appears in the input, rather than checking -for end of bar. - -@lilypond[quote,verbatim] -pipeSymbol = \bar "||" -{ - c'2 c'2 | - c'2 c'2 - c'2 | c'2 - c'2 c'2 -} -@end lilypond - -@funindex \barNumberCheck -@funindex barNumberCheck - -When copying large pieces of music, it can be helpful to check that -the LilyPond bar number corresponds to the original that you are -entering from. This can be checked with @code{\barNumberCheck}, for -example, - -@verbatim -\barNumberCheck #123 -@end verbatim - -@noindent -will print a warning if the @code{currentBarNumber} is not 123 -when it is processed. - - -@seealso -Snippets: -@rlsr{Rhythms}. - - -@node Rehearsal marks -@unnumberedsubsubsec Rehearsal marks - -@cindex rehearsal marks -@cindex mark, rehearsal - -@funindex \mark -@funindex mark - -To print a rehearsal mark, use the @code{\mark} command - -@lilypond[quote,verbatim,relative=2] -c1 \mark \default -c1 \mark \default -c1 \mark #8 -c1 \mark \default -c1 \mark \default -@end lilypond - -@noindent -The letter@tie{}@q{I} is skipped in accordance with engraving -traditions. If you wish to include the letter @q{I}, then use - -@example -\set Score.markFormatter = #format-mark-alphabet -@end example - -The mark is incremented automatically if you use @code{\mark -\default}, but you can also use an integer argument to set the -mark manually. The value to use is stored in the property -@code{rehearsalMark}. - -@cindex rehearsal mark format -@cindex rehearsal mark style -@cindex style, rehearsal mark -@cindex format, rehearsal mark -@cindex mark, rehearsal, style -@cindex mark, rehearsal, format -@cindex rehearsal mark, manual -@cindex mark, rehearsal, manual -@cindex custom rehearsal mark -@cindex manual rehearsal mark - -The style is defined by the property @code{markFormatter}. It is -a function taking the current mark (an integer) and the current -context as argument. It should return a markup object. In the -following example, @code{markFormatter} is set to a pre-defined -procedure. After a few measures, it is set to a procedure that -produces a boxed number. - -@lilypond[quote,verbatim,relative=2] -\set Score.markFormatter = #format-mark-numbers -c1 \mark \default -c1 \mark \default -\set Score.markFormatter = #format-mark-box-numbers -c1 \mark \default -\set Score.markFormatter = #format-mark-circle-numbers -c1 \mark \default -\set Score.markFormatter = #format-mark-circle-letters -c1 -@end lilypond - -The file @file{scm/@/translation@/-functions@/.scm} contains the -definitions of @code{format-mark-numbers} (the default format), -@code{format-mark-box-numbers}, @code{format-mark-letters} and -@code{format-mark-box-letters}. These can be used as inspiration -for other formatting functions. - -You may use @code{format-mark-barnumbers}, -@code{format-mark-box-barnumbers}, and -@code{format-mark-circle-barnumbers} to get bar numbers instead of -incremented numbers or letters. - -Other styles of rehearsal mark can be specified manually - -@example -\mark "A1" -@end example - -@noindent -@code{Score.markFormatter} does not affect marks specified in this -manner. However, it is possible to apply a @code{\markup} to the -string. - -@example -\mark \markup@{ \box A1 @} -@end example - -@cindex segno -@cindex coda -@cindex D.S. al Fine -@cindex fermata -@cindex music glyphs -@cindex glyphs, music - -@funindex \musicglyph -@funindex musicglyph - -Music glyphs (such as the segno sign) may be printed inside a -@code{\mark} - -@lilypond[quote,verbatim,relative=1] -c1 \mark \markup { \musicglyph #"scripts.segno" } -c1 \mark \markup { \musicglyph #"scripts.coda" } -c1 \mark \markup { \musicglyph #"scripts.ufermata" } -c1 -@end lilypond - -@noindent -See @ref{The Feta font}, for a list of symbols which may be -printed with @code{\musicglyph}. - -For common tweaks to the positioning of rehearsal marks, see -@ref{Formatting text}. - - -@seealso -Notation Reference: -@ref{The Feta font}, -@ref{Formatting text}. - -Installed Files: -@file{scm/@/translation@/-functions@/.scm} contains -the definition of @code{format-mark-numbers} and -@code{format-mark-letters}. They can be used as inspiration for -other formatting functions. - -Snippets: -@rlsr{Rhythms}. - -Internals Reference: @rinternals{RehearsalMark}. - - -@node Special rhythmic concerns -@subsection Special rhythmic concerns - - -@menu -* Grace notes:: -* Aligning to cadenzas:: -* Time administration:: -@end menu - -@node Grace notes -@unnumberedsubsubsec Grace notes - -@cindex ornaments -@cindex grace notes -@cindex appoggiatura -@cindex acciaccatura - -@funindex \grace -@funindex grace - -Grace notes are ornaments that are written out. Grace notes -are printed in a smaller font and take up no logical time -in a measure. - -@lilypond[quote,relative=2,verbatim] -c4 \grace c16 c4 -\grace { c16[ d16] } c2 -@end lilypond - -LilyPond also supports two special types of grace notes, the -@emph{acciaccatura}--an unmeasured grace note indicated by a slurred -small note with a slashed stem--and the @emph{appoggiatura}, which -takes a fixed fraction of the main note and appears in small print -without a slash. - -@lilypond[quote,relative=2,verbatim] -\grace c8 b4 -\acciaccatura d8 c4 -\appoggiatura e8 d4 -\acciaccatura { g16[ f] } e4 -@end lilypond - -The placement of grace notes is synchronized between different -staves. In the following example, there are two sixteenth grace -notes for every eighth grace note - -@lilypond[quote,relative=2,verbatim] -<< \new Staff { e2 \grace { c16[ d e f] } e2 } - \new Staff { c2 \grace { g8[ b] } c2 } >> -@end lilypond - -@cindex grace notes, following - -@funindex \afterGrace -@funindex afterGrace - -If you want to end a note with a grace, use the @code{\afterGrace} -command. It takes two arguments: the main note, and the grace -notes following the main note. - -@lilypond[quote,verbatim,relative=2] -c1 \afterGrace d1 { c16[ d] } c1 -@end lilypond - -This will put the grace notes after a space lasting 3/4 of the -length of the main note. The default fraction 3/4 can be changed by -setting @code{afterGraceFraction}. The following example shows -the results from setting the space at the default, at 15/16, and -finally at 1/2 of the main note. - -@lilypond[quote,verbatim,relative=2] -<< - \new Staff { - c1 \afterGrace d1 { c16[ d] } c1 - } - \new Staff { - #(define afterGraceFraction (cons 15 16)) - c1 \afterGrace d1 { c16[ d] } c1 - } - \new Staff { - #(define afterGraceFraction (cons 1 2)) - c1 \afterGrace d1 { c16[ d] } c1 - } ->> -@end lilypond - -The space between the main note and the grace note may also be -specified using spacers. The following example places the grace -note after a space lasting 7/8 of the main note. - -@lilypond[quote,verbatim,relative=2] -\new Voice { - << { d1^\trill_( } - { s2 s4. \grace { c16[ d] } } >> - c1) -} -@end lilypond - -@cindex tweaking grace notes -@cindex grace notes, tweaking -@cindex grace notes, changing layout settings - -A @code{\grace} music expression will introduce special -typesetting settings, for example, to produce smaller type, and -set directions. Hence, when introducing layout tweaks to -override the special settings, they should be placed inside -the grace expression. The overrides should also be reverted -inside the grace expression. Here, the grace note's default stem -direction is overridden and then reverted. - -@lilypond[quote,verbatim,relative=2] -\new Voice { - \acciaccatura { - \stemDown - f16-> - \stemNeutral - } - g4 e c2 -} -@end lilypond - - -@cindex stem, with slash - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{using-grace-note-slashes-with-normal-heads.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{tweaking-grace-layout-within-music.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{redefining-grace-note-global-defaults.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{positioning-grace-notes-with-floating-space.ly} - - -@seealso -Music Glossary: -@rglos{grace notes}, -@rglos{acciaccatura}, -@rglos{appoggiatura}. - -Installed Files: @file{ly/@/grace@/-init@/.ly}. - -Snippets: @rlsr{Rhythms}. - -Internals Reference: @rinternals{GraceMusic}. - - -@knownissues - -@cindex acciaccatura, multi-note -@cindex multi-note acciaccatura -@cindex grace-note synchronization - -A multi-note beamed @i{acciaccatura} is printed without a slash, -and looks exactly the same as a multi-note beamed -@i{appoggiatura}. - -@c TODO Add link to LSR snippet to add slash when available - -Grace note synchronization can also lead to surprises. Staff -notation, such as key signatures, bar lines, etc., are also -synchronized. Take care when you mix staves with grace notes and -staves without, for example, - -@lilypond[quote,relative=2,verbatim] -<< - \new Staff { e4 \bar "|:" \grace c16 d2. } - \new Staff { c4 \bar "|:" d2. } ->> -@end lilypond - -@noindent -This can be remedied by inserting grace skips of the corresponding -durations in the other staves. For the above example - -@lilypond[quote,relative=2,verbatim] -<< - \new Staff { e4 \bar "|:" \grace c16 d2. } - \new Staff { c4 \bar "|:" \grace s16 d2. } ->> -@end lilypond - -Grace sections should only be used within sequential music -expressions. Nesting or juxtaposing grace sections is not -supported, and might produce crashes or other errors. - -@node Aligning to cadenzas -@unnumberedsubsubsec Aligning to cadenzas - -@cindex cadenza -@cindex cadenza, aligning to -@cindex aligning to cadenza - -In an orchestral context, cadenzas present a special problem: when -constructing a score that includes a measured cadenza or other solo -passage, all other instruments should skip just as many notes as the -length of the cadenza, otherwise they will start too soon or too late. - -One solution to this problem is to use the functions -@code{mmrest-of-length} and @code{skip-of-length}. These Scheme -functions take a defined piece of music as an argument and generate a -multi-measure rest or @code{\skip} exactly as long as the piece. - -@lilypond[verbatim,quote] -MyCadenza = \relative c' { - c4 d8 e f g g4 - f2 g4 g -} - -\new GrandStaff << - \new Staff { - \MyCadenza c'1 - \MyCadenza c'1 - } - \new Staff { - #(ly:export (mmrest-of-length MyCadenza)) - c'1 - #(ly:export (skip-of-length MyCadenza)) - c'1 - } ->> -@end lilypond - - -@seealso -Music Glossary: -@rglos{cadenza}. - -Snippets: -@rlsr{Rhythms}. - - -@node Time administration -@unnumberedsubsubsec Time administration - -@cindex time administration -@cindex timing (within the score) -@cindex music, unmetered -@cindex unmetered music - -@funindex currentBarNumber -@funindex measurePosition -@funindex measureLength - -Time is administered by the @code{Timing_translator}, which by -default is to be found in the @code{Score} context. An alias, -@code{Timing}, is added to the context in which the -@code{Timing_translator} is placed. - -The following properties of @code{Timing} are used -to keep track of timing within the score. - -@cindex bar number -@cindex measure number - -@table @code -@item currentBarNumber -The current measure number. For an example showing the -use of this property see @ref{Bar numbers}. - -@item measureLength -The length of the measures in the current time signature. For a -4/4 time this is@tie{}1, and for 6/8 it is 3/4. Its value -determines when bar lines are inserted and how automatic beams -should be generated. - -@item measurePosition -The point within the measure where we currently are. This -quantity is reset by subtracting @code{measureLength} whenever -@code{measureLength} is reached or exceeded. When that happens, -@code{currentBarNumber} is incremented. - -@item timing -If set to true, the above variables are updated for every time -step. When set to false, the engraver stays in the current -measure indefinitely. - -@end table - -Timing can be changed by setting any of these variables -explicitly. In the next example, the default 4/4 time -signature is printed, but @code{measureLength} is set to 5/4. -At 4/8 through the third measure, the @code{measurePosition} is -advanced by 1/8 to 5/8, shortening that bar by 1/8. -The next bar line then falls at 9/8 rather than 5/4. - -@lilypond[quote,verbatim,relative=1] -\set Score.measureLength = #(ly:make-moment 5 4) -c1 c4 -c1 c4 -c4 c4 -\set Score.measurePosition = #(ly:make-moment 5 8) -b4 b4 b8 -c4 c1 -@end lilypond - -@noindent -As the example illustrates, @code{ly:make-moment n m} constructs a -duration of n/m of a whole note. For example, -@code{ly:make-moment 1 8} is an eighth note duration and -@code{ly:make-moment 7 16} is the duration of seven sixteenths -notes. - - -@seealso -This manual: @ref{Bar numbers}, @ref{Unmetered music} - -Snippets: -@rlsr{Rhythms}. - -Internals Reference: @rinternals{Timing_translator}, -@rinternals{Score} - diff --git a/Documentation/user/running.itely b/Documentation/user/running.itely deleted file mode 100644 index 264235bd98..0000000000 --- a/Documentation/user/running.itely +++ /dev/null @@ -1,668 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond-program.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - - -@node Running LilyPond -@chapter Running LilyPond - -This chapter details the technicalities of running LilyPond. - -@menu -* Normal usage:: -* Command-line usage:: -* Error messages:: -* Updating files with convert-ly:: -* Reporting bugs:: -@end menu - - -@node Normal usage -@section Normal usage - -Most users run LilyPond through a GUI; see @rlearning{First steps} if -you have not read this already. - - -@node Command-line usage -@section Command-line usage - -This section contains extra information about using LilyPond on the -command-line. This may be desirable to pass extra options to the -program. In addition, there are certain extra @q{helper} programs (such -as @code{midi2ly}) which are only available on the command-line. - -By @q{command-line}, we mean the command line in the operating system. -Windows users might be more familiar with the terms @q{DOS shell} or -@q{command shell}; MacOS@tie{}X users might be more familiar with the terms -@q{terminal} or @q{console}. They should also consult @ref{Setup -for MacOS X}. - -Describing how to use this part of an operating system is outside the -scope of this manual; please consult other documentation on this topic -if you are unfamiliar with the command-line. - -@menu -* Invoking lilypond:: -* Command line options for lilypond:: -* Environment variables:: -@end menu - -@node Invoking lilypond -@subsection Invoking @command{lilypond} - -@cindex Invoking @command{lilypond} -@cindex command line options for @command{lilypond} -@cindex options, command line -@cindex switches - - -The @command{lilypond} executable may be called as follows from the command line. - -@example -lilypond [@var{option}]@dots{} @var{file}@dots{} -@end example - - -When invoked with a filename that has no extension, the @file{.ly} -extension is tried first. To read input from stdin, use a -dash (@code{-}) for @var{file}. - -When @file{filename.ly} is processed it will produce @file{filename.ps} -and @file{filename.pdf} as output. Several files can be specified; -they will each be processed independently. @footnote{The status of -GUILE is not reset after processing a @code{.ly} file, so be careful -not to change any system defaults from within Scheme.} - -If @file{filename.ly} contains more than one @code{\score} -block, then the rest of the scores will be output in numbered files, -starting with @file{filename-1.pdf}. In addition, the value of -@code{output-suffix} will be inserted between the basename and the -number. An input file containing - -@example -#(define output-suffix "violin") -\score @{ @dots{} @} -#(define output-suffix "cello") -\score @{ @dots{} @} -@end example - -@noindent -will output @var{base}@file{-violin.pdf} and -@var{base}@file{-cello-1.pdf}. - - -@node Command line options for lilypond -@subsection Command line options for @command{lilypond} - -The following options are supported: - -@table @code - -@item -e,--evaluate=@var{expr} -Evaluate the Scheme @var{expr} before parsing any @file{.ly} files. -Multiple @code{-e} options may be given, they will be evaluated -sequentially. - -The expression will be evaluated in the @code{guile-user} module, so -if you want to use definitions in @var{expr}, use - -@example -lilypond -e '(define-public a 42)' -@end example - -@noindent -on the command-line, and include - -@example -#(use-modules (guile-user)) -@end example - -@noindent -at the top of the @code{.ly} file. - -@item -f,--format=@var{format} -which formats should be written. Choices for @code{format} are -@code{svg}, @code{ps}, @code{pdf}, and @code{png}. - -Example: @code{lilypond -fpng @var{filename}.ly} - - - -@item -d,--define-default=@var{var}=@var{val} -This sets the internal program option @var{var} to the Scheme value -@var{val}. If @var{val} is not supplied, then @var{#t} is used. To -switch off an option, @code{no-} may be prefixed to @var{var}, e.g. - -@cindex point and click, command line - -@example --dno-point-and-click -@end example - -@noindent -is the same as -@example --dpoint-and-click='#f' -@end example - -Here are a few interesting options. - -@table @samp -@item help -Running @code{lilypond -dhelp} will print all of the @code{-d} options -available. - -@item paper-size -This option sets the default paper-size, -@example --dpaper-size=\"letter\" -@end example - -@noindent -Note that the string must be enclosed in escaped quotes ( @code{\"} ). -@c Match " in previous line to help context-sensitive editors - -@item safe -Do not trust the @code{.ly} input. - -When LilyPond formatting is available through a web server, either the -@code{--safe} or the @code{--jail} option @b{MUST} be passed. The -@code{--safe} option will prevent inline Scheme code from wreaking -havoc, for example - -@quotation -@verbatim -#(system "rm -rf /") -{ - c4^#(ly:export (ly:gulp-file "/etc/passwd")) -} -@end verbatim -@end quotation - -The @code{-dsafe} option works by evaluating in-line Scheme -expressions in a special safe module. This safe module is derived from -GUILE @file{safe-r5rs} module, but adds a number of functions of the -LilyPond API. These functions are listed in @file{scm/@/safe@/-lily@/.scm}. - -In addition, safe mode disallows @code{\include} directives and -disables the use of backslashes in @TeX{} strings. - -In safe mode, it is not possible to import LilyPond variables -into Scheme. - -@code{-dsafe} does @emph{not} detect resource overuse. It is still possible to -make the program hang indefinitely, for example by feeding cyclic data -structures into the backend. Therefore, if using LilyPond on a -publicly accessible webserver, the process should be limited in both -CPU and memory usage. - -The safe mode will prevent many useful LilyPond snippets from being -compiled. The @code{--jail} is a more secure alternative, but -requires more work to set up. - -@cindex output format, setting -@item backend -the output format to use for the back-end. Choices for @code{format} are -@table @code -@item ps -@cindex PostScript output - for PostScript. - - Postscript files include TTF, Type1 and OTF fonts. No subsetting of - these fonts is done. When using oriental character sets, this can - lead to huge files. - -@item eps - for encapsulated PostScript. This dumps every page (system) as a separate -@file{EPS} file, without fonts, and as one collated @file{EPS} file with -all pages (systems) including fonts. - -This mode is used by default by @command{lilypond-book}. - -@item svg -@cindex SVG (Scalable Vector Graphics) - for SVG (Scalable Vector Graphics). This dumps every page as a separate -@file{SVG} file, with embedded fonts. - You need a SVG viewer which supports embedded fonts, or a SVG - viewer which is able to replace the embedded fonts with OTF fonts. - Under UNIX, you may use @uref{http://www.inkscape.org,Inkscape} - (version 0.42 or later), after copying the OTF fonts from the LilyPond directory - (typically @file{/usr/share/lilypond/VERSION/fonts/otf/}) to @file{~/.fonts/}. -@item scm -@cindex Scheme dump - for a dump of the raw, internal Scheme-based drawing commands. - -@item null - do not output a printed score; has the same effect as @code{-dno-print-pages}. -@end table - -Example: @code{lilypond -dbackend=svg @var{filename}.ly} - -@item preview -Generate an output file containing the titles and the first system - -@item print-pages -Generate the full pages, the default. @code{-dno-print-pages} is -useful in combination with @code{-dpreview}. - -@end table - - - -@item -h,--help -Show a summary of usage. - -@item -H,--header=@var{FIELD} -Dump a header field to file @file{BASENAME.@var{FIELD}}. - -@item --include, -I=@var{directory} -Add @var{directory} to the search path for input files. -@cindex file searching -@cindex search path - -@item -i,--init=@var{file} -Set init file to @var{file} (default: @file{init.ly}). - -@item -o,--output=@var{FILE} -Set the default output file to @var{FILE}. The appropriate -suffix will be added (e.g. @code{.pdf} for pdf) - -@item --ps -Generate PostScript. - -@item --png -Generate pictures of each page, in PNG format. This implies -@code{--ps}. The resolution in DPI of the image may be set with -@example --dresolution=110 -@end example - -@item --pdf -Generate PDF. This implies @code{--ps}. - - - -@item -j,--jail=@var{user},@var{group},@var{jail},@var{dir} -Run @command{lilypond} in a chroot jail. - -The @code{--jail} option provides a more flexible alternative to -@code{--safe} when LilyPond formatting is available through a web -server or whenever LilyPond executes externally provided -sources. - -The @code{--jail} option works by changing the root of @command{lilypond} to -@var{jail} just before starting the actual compilation process. The user -and group are then changed to match those provided, and the current -directory is changed to @var{dir}. This setup guarantees that it is not -possible (at least in theory) to escape from the jail. Note that for -@code{--jail} to work @command{lilypond} must be run as root, which is usually -accomplished in a safe way using @command{sudo}. - -Setting up a jail is a slightly delicate matter, as we must be sure that -LilyPond is able to find whatever it needs to compile the source -@emph{inside the jail}. A typical setup comprises the following items: - -@table @asis -@item Setting up a separate filesystem -A separate filesystem should be created for LilyPond, so that it can be -mounted with safe options such as @code{noexec}, @code{nodev}, and -@code{nosuid}. In this way, it is impossible to run executables or to -write directly to a device from LilyPond. If you do not want to create a -separate partition, just create a file of reasonable size and use it to -mount a loop device. A separate filesystem also guarantees that LilyPond -cannot write more space than it is allowed. - -@item Setting up a separate user -A separate user and group (say, @code{lily}/@code{lily}) with low -privileges should be used to run LilyPond inside the jail. There should -be a single directory writable by this user, which should be passed in -@var{dir}. - -@item Preparing the jail -LilyPond needs to read a number of files while running. All these files -are to be copied into the jail, under the same path they appear in the -real root filesystem. The entire content of the LilyPond installation -(e.g., @file{/usr/share/lilypond}) -should be copied. - -If problems arise, the simplest way to trace them down is to run -LilyPond using @command{strace}, which will allow you to determine which -files are missing. - -@item Running LilyPond -In a jail mounted with @code{noexec} it is impossible to execute any external -program. Therefore LilyPond must be run with a backend that does not -require any such program. As we already mentioned, it must be also run -with superuser privileges (which, of course, it will lose immediately), -possibly using @command{sudo}. It is a good idea to limit the number of -seconds of CPU time LilyPond can use (e.g., using @command{ulimit --t}), and, if your operating system supports it, the amount of memory -that can be allocated. -@end table - - -@item -v,--version -Show version information. - -@item -V,--verbose -Be verbose: show full paths of all files read, and give timing -information. - -@item -w,--warranty -Show the warranty with which GNU LilyPond comes. (It comes with -@strong{NO WARRANTY}!) -@end table - -@node Environment variables -@subsection Environment variables - - -@cindex LANG -@cindex LILYPOND_DATADIR - -@command{lilypond} recognizes the following environment variables: -@table @code -@item LILYPOND_DATADIR -This specifies a directory where locale messages and -data files will be looked up by default. The directory should contain -subdirectories called @file{ly/}, @file{ps/}, @file{tex/}, etc. - -@item LANG -This selects the language for the warning messages. - -@item LILYPOND_GC_YIELD -With this variable the memory footprint and performance can be -adjusted. It is a percentage tunes memory management behavior. With -higher values, the program uses more memory, with smaller values, it -uses more CPU time. The default value is @code{70}. - -@end table - - -@node Error messages -@section Error messages - -@cindex error messages -Different error messages can appear while compiling a file: - -@table @emph - -@item Warning -@cindex warning -Something looks suspect. If you are requesting something out of the -ordinary then you will understand the message, and can ignore it. -However, warnings usually indicate that something is wrong with the -input file. - -@item Error -Something is definitely wrong. The current processing step (parsing, -interpreting, or formatting) will be finished, but the next step will -be skipped. - -@item Fatal error -@cindex error -@cindex fatal error -Something is definitely wrong, and LilyPond cannot continue. This -happens rarely. The most usual cause is misinstalled fonts. - -@item Scheme error -@cindex trace, Scheme -@cindex call trace -@cindex Scheme error -Errors that occur while executing Scheme code are caught by the Scheme -interpreter. If running with the verbose option (@code{-V} or -@code{--verbose}) then a call trace of the offending -function call is printed. - -@item Programming error -@cindex Programming error -There was some internal inconsistency. These error messages are -intended to help the programmers and debuggers. Usually, they can be -ignored. Sometimes, they come in such big quantities that they obscure -other output. - -@item Aborted (core dumped) -This signals a serious programming error that caused the program to -crash. Such errors are considered critical. If you stumble on one, -send a bug-report. -@end table - -@cindex errors, message format -If warnings and errors can -be linked to some part of the input file, then error messages have the -following form - -@example -@var{filename}:@var{lineno}:@var{columnno}: @var{message} -@var{offending input line} -@end example - -A line-break is inserted in the offending line to indicate the column -where the error was found. For example, - -@example -test.ly:2:19: error: not a duration: 5 - @{ c'4 e' - 5 g' @} -@end example - -These locations are LilyPond's best guess about where the warning or -error occurred, but (by their very nature) warnings and errors occur -when something unexpected happens. If you can't see an error in the -indicated line of your input file, try checking one or two lines -above the indicated position. - - -@node Updating files with convert-ly -@section Updating files with @command{convert-ly} - -@cindex Updating a LilyPond file -@cindex convert-ly - -The LilyPond input syntax is routinely changed to simplify it or improve -it in different ways. As a side effect of this, the LilyPond interpreter -often is no longer compatible with older input files. To remedy this, -the program @command{convert-ly} can be used to deal with most of the -syntax changes between LilyPond versions. - -It uses @code{\version} statements in the input files to detect the -old version number. In most cases, to upgrade your input file it is -sufficient to run - -@example -convert-ly -e myfile.ly -@end example - -@noindent -This will upgrade @code{myfile.ly} in-place and preserve the -original file in @code{myfile.ly~}. - -Alternatively, if you want to specify a different name for the -upgraded file, preserving the original file and name unchanged, -use - -@example -convert-ly myfile.ly > mynewfile.ly -@end example - -The program will list the version numbers for which conversions -have been made. If no version numbers are listed the file is -already up to date. - -@noindent -MacOS@tie{}X users may execute this command under the menu entry -@code{Compile > Update syntax}. - -Windows users should enter this command in a Command Prompt window, -which is usually found under -@code{Start > Accessories > Command Prompt}. - -@menu -* Command line options for convert-ly:: -* Problems with convert-ly:: -@end menu - -@node Command line options for convert-ly -@subsection Command line options for @command{convert-ly} - -@command{convert-ly} always converts up to the last syntax change -handled by it. This means that the @code{\version} number left in -the file is usually lower than the version of @command{convert-ly} -itself. - -In general, the program is invoked as follows: - -@example -convert-ly [@var{option}]@dots{} @var{filename}@dots{} -@end example - - -The following options can be given: - -@table @code -@item -e,--edit -Apply the conversions direct to the input file, modifying it -in-place. - -@item -f,--from=@var{from-patchlevel} -Set the version to convert from. If this is not set, @command{convert-ly} -will guess this, on the basis of @code{\version} strings in the file. -E.g. @code{--from=2.10.25} - -@item -n,--no-version -Normally, @command{convert-ly} adds a @code{\version} indicator -to the output. Specifying this option suppresses this. - -@item -s, --show-rules -Show all known conversions and exit. - -@item --to=@var{to-patchlevel} -Set the goal version of the conversion. It defaults to the latest -available version. E.g. @code{--to=2.12.2} - -@item -h, --help -Print usage help. -@end table - -To upgrade LilyPond fragments in texinfo files, use - -@example -convert-ly --from=... --to=... --no-version *.itely -@end example - -To see the changes in the LilyPond syntax between two versions, use - -@example -convert-ly --from=... --to=... -s -@end example - -To upgrade many files at once, combine @code{convert-ly} with -standard UNIX commands. This example will upgrade all @code{.ly} -files in the current directory - -@example -for f in *.ly; do convert-ly -e $f; done; -@end example - - -@node Problems with convert-ly -@subsection Problems with @code{convert-ly} - -When running convert-ly in a Command Prompt window under Windows -on a file which has spaces in the filename or in the path to it, -it is necessary to surround the entire file name with three (!) -sets of double quotes: - -@example -convert-ly """D:/My Scores/Ode.ly""" > """D:/My Scores/new Ode.ly""" -@end example - -Not all language changes are handled. Only one output option can be -specified. Automatically updating scheme and LilyPond scheme -interfaces is quite unlikely; be prepared to tweak scheme code -manually. - -@verbatim -There are a few things that the convert-ly cannot handle. Here's a list -of limitations that the community has complained about. - -This bug report structure has been chosen because convert-ly has a -structure that doesn't allow to smoothly implement all needed changes. -Thus this is just a wishlist, placed here for reference. - -1.6->2.0: - Doesn't always convert figured bass correctly, specifically things like {< ->}. Mats' comment on working around this: - To be able to run convert-ly - on it, I first replaced all occurrences of '{<' to some dummy like '{#' - and similarly I replaced '>}' with '&}'. After the conversion, I could - then change back from '{ #' to '{ <' and from '& }' to '> }'. - Doesn't convert all text markup correctly. In the old markup syntax, - it was possible to group a number of markup commands together within -parentheses, e.g. - -#'((bold italic) "string") - This will incorrectly be converted into - -\markup{{\bold italic} "string"} - instead of the correct - -\markup{\bold \italic "string"} -2.0->2.2: - Doesn't handle \partcombine - Doesn't do \addlyrics => \lyricsto, this breaks some scores with multiple -stanzas. -2.0->2.4: - \magnify isn't changed to \fontsize. - - \magnify #m => \fontsize #f, where f = 6ln(m)/ln(2) - remove-tag isn't changed. - - \applyMusic #(remove-tag '. . .) => \keepWithTag #'. . . - first-page-number isn't changed. - - first-page-number no => print-first-page-number = ##f - Line breaks in header strings aren't converted. - - \\\\ as line break in \header strings => \markup \center-align < - "First Line" "Second Line" > - Crescendo and decrescendo terminators aren't converted. - - \rced => \! - - \rc => \! -2.2->2.4: - \turnOff (used in \set Staff.VoltaBracket = \turnOff) is not properly -converted. -2.4.2->2.5.9 - \markup{ \center-align <{ ... }> } should be converted to: - \markup{ \center-align {\line { ... }} } - but now, \line is missing. -2.4->2.6 - Special LaTeX characters such as $~$ in text are not converted to UTF8. -2.8 - \score{} must now begin with a music expression. Anything else - (particularly \header{}) must come after the music. -@end verbatim - - -@node Reporting bugs -@section Reporting bugs - -@cindex bugs -@cindex reporting bugs - -If you have input that results in a crash or an erroneous output, then -that is a bug. There is a list of current bugs on our Google bug tracker, - -@uref{http://code.google.com/p/lilypond/issues/list} - -If you have discovered a bug which is not listed, please report the -bug by following the directions on - -@uref{http://lilypond.org/web/devel/participating/bugs} - -Please construct and submit minimal examples of bugs in reports. We do not -have the resources to investigate reports which are not as small as possible. - - - diff --git a/Documentation/user/scheme-tutorial.itely b/Documentation/user/scheme-tutorial.itely deleted file mode 100644 index e561b11065..0000000000 --- a/Documentation/user/scheme-tutorial.itely +++ /dev/null @@ -1,337 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Scheme tutorial -@appendix Scheme tutorial - -@funindex # -@cindex Scheme -@cindex GUILE -@cindex Scheme, in-line code -@cindex accessing Scheme -@cindex evaluating Scheme -@cindex LISP - -LilyPond uses the Scheme programming language, both as part of the -input syntax, and as internal mechanism to glue modules of the program -together. This section is a very brief overview of entering data in -Scheme. If you want to know more about Scheme, see -@uref{http://@/www@/.schemers@/.org}. - -LilyPond uses the GNU Guile implementation of Scheme, which is -based on the Scheme @qq{R5RS} standard. If you are learning Scheme -to use with LilyPond, working with a different implementation (or -referring to a different standard) is not recommended. Information -on guile can be found at @uref{http://www.gnu.org/software/guile/}. -The @qq{R5RS} Scheme standard is located at -@uref{http://www.schemers.org/Documents/Standards/R5RS/}. - -The LilyPond installation also includes the Guile implementation of -Scheme. On most systems you can experiment in a Scheme sandbox by -opening a terminal window and typing @q{guile}. On some systems, -notably Windows, you may need to set the environment variable -@code{GUILE_LOAD_PATH} to the directory @code{../usr/shr/guile/1.8} -in the LilyPond installation (for the full path to this directory -see @ref{Other sources of information}). Alternatively, Windows -users may simply chose @q{Run} from the Start menu and enter -@q{guile}. - -The most basic concept in a language is data typing: numbers, character -strings, lists, etc. Here is a list of data types that are relevant to -LilyPond input. - -@table @asis -@item Booleans -Boolean values are True or False. The Scheme for True is @code{#t} -and False is @code{#f}. -@funindex ##t -@funindex ##f - -@item Numbers -Numbers are entered in the standard fashion, -@code{1} is the (integer) number one, while @code{-1.5} is a -floating point number (a non-integer number). - -@item Strings -Strings are enclosed in double quotes, - -@example -"this is a string" -@end example - -Strings may span several lines - -@example -"this -is -a string" -@end example - -Quotation marks and newlines can also be added with so-called escape -sequences. The string @code{a said "b"} is entered as - -@example -"a said \"b\"" -@end example - -Newlines and backslashes are escaped with @code{\n} and @code{\\} -respectively. -@end table - - -In a music file, snippets of Scheme code are introduced with the hash -mark @code{#}. So, the previous examples translated to LilyPond are - -@example -##t ##f -#1 #-1.5 -#"this is a string" -#"this -is -a string" -@end example - -Note that LilyPond comments (@code{%} and @code{%@{ %@}}) cannot -be used within Scheme code. Comments in Guile Scheme are entered -as follows: - -@example -; this is a single-line comment - -#! - This a (non-nestable) Guile-style block comment - But these are rarely used by Schemers and never in - LilyPond source code -!# -@end example - -Multiple consecutive scheme expressions in a music file can be -combined using the @code{begin} operator. This permits the number -of hash marks to be reduced to one. - -@example -#(begin - (define foo 0) - (define bar 1)) -@end example - -If @code{#} is followed by an opening bracket, @code{(}, as in -the example above, the parser will remain in Scheme mode until -a matching closing bracket, @code{)}, is found, so further -@code{#} symbols to introduce a Scheme section are not required. - -For the rest of this section, we will assume that the data is entered -in a music file, so we add @code{#}s everywhere. - -Scheme can be used to do calculations. It uses @emph{prefix} -syntax. Adding 1 and@tie{}2 is written as @code{(+ 1 2)} rather than the -traditional @math{1+2}. - -@lisp -#(+ 1 2) - @result{} #3 -@end lisp - -The arrow @result{} shows that the result of evaluating @code{(+ 1 2)} -is@tie{}@code{3}. Calculations may be nested; the result of a function may -be used for another calculation. - -@lisp -#(+ 1 (* 3 4)) - @result{} #(+ 1 12) - @result{} #13 -@end lisp - -These calculations are examples of evaluations; an expression like -@code{(* 3 4)} is replaced by its value @code{12}. A similar thing -happens with variables. After defining a variable - -@example -twelve = #12 -@end example - -@noindent -variables can also be used in expressions, here - -@example -twentyFour = #(* 2 twelve) -@end example - -@noindent -the number 24 is stored in the variable @code{twentyFour}. -The same assignment can be done in completely in Scheme as well, - -@example -#(define twentyFour (* 2 twelve)) -@end example - -The @emph{name} of a variable is also an expression, similar to a -number or a string. It is entered as - -@example -#'twentyFour -@end example - -@funindex #'symbol -@cindex quoting in Scheme - -The quote mark @code{'} prevents the Scheme interpreter from substituting -@code{24} for the @code{twentyFour}. Instead, we get the name -@code{twentyFour}. - -This syntax will be used very frequently, since many of the layout -tweaks involve assigning (Scheme) values to internal variables, for -example - -@example -\override Stem #'thickness = #2.6 -@end example - -This instruction adjusts the appearance of stems. The value @code{2.6} -is put into the @code{thickness} variable of a @code{Stem} -object. @code{thickness} is measured relative to the thickness of -staff lines, so these stem lines will be @code{2.6} times the -width of staff lines. This makes stems almost twice as thick as their -normal size. To distinguish between variables defined in input files (like -@code{twentyFour} in the example above) and variables of internal -objects, we will call the latter @q{properties} and the former -@q{variables.} So, the stem object has a @code{thickness} property, -while @code{twentyFour} is an variable. - -@cindex properties vs. variables -@cindex variables vs. properties - -Two-dimensional offsets (X and Y coordinates) as well as object sizes -(intervals with a left and right point) are entered as @code{pairs}. A -pair@footnote{In Scheme terminology, the pair is called @code{cons}, -and its two elements are called @code{car} and @code{cdr} respectively.} -is entered as @code{(first . second)} and, like symbols, they must be quoted, - -@example -\override TextScript #'extra-offset = #'(1 . 2) -@end example - -This assigns the pair (1, 2) to the @code{extra-offset} property of the -TextScript object. These numbers are measured in staff-spaces, so -this command moves the object 1 staff space to the right, and 2 spaces up. - -The two elements of a pair may be arbitrary values, for example - -@example -#'(1 . 2) -#'(#t . #f) -#'("blah-blah" . 3.14159265) -@end example - -A list is entered by enclosing its elements in parentheses, and adding -a quote. For example, - -@example -#'(1 2 3) -#'(1 2 "string" #f) -@end example - -We have been using lists all along. A calculation, like @code{(+ 1 2)} -is also a list (containing the symbol @code{+} and the numbers 1 -and@tie{}2). Normally lists are interpreted as calculations, and the -Scheme interpreter substitutes the outcome of the calculation. To enter a -list, we stop the evaluation. This is done by quoting the list with a -quote @code{'} symbol. So, for calculations do not use a quote. - -Inside a quoted list or pair, there is no need to quote anymore. The -following is a pair of symbols, a list of symbols and a list of lists -respectively, - -@example -#'(stem . head) -#'(staff clef key-signature) -#'((1) (2)) -@end example - - -@menu -* Tweaking with Scheme:: -@end menu - -@node Tweaking with Scheme -@appendixsec Tweaking with Scheme - -We have seen how LilyPond output can be heavily modified using -commands like -@code{\override TextScript #'extra-offset = ( 1 . -1)}. But -we have even more power if we use Scheme. For a full explanation -of this, see the @ref{Scheme tutorial}, and -@ruser{Interfaces for programmers}. - -We can use Scheme to simply @code{\override} commands, - -TODO Find a simple example -@c This isn't a valid example with skylining -@c It works fine without padText -td - -@ignore -@lilypond[quote,verbatim,ragged-right] -padText = #(define-music-function (parser location padding) (number?) -#{ - \once \override TextScript #'padding = #$padding -#}) - -\relative c''' { - c4^"piu mosso" b a b - \padText #1.8 - c4^"piu mosso" d e f - \padText #2.6 - c4^"piu mosso" fis a g -} -@end lilypond -@end ignore - -We can use it to create new commands: - -@c Check this is a valid example with skylining -@c It is - 'padding still works - - -@lilypond[quote,verbatim,ragged-right] -tempoPadded = #(define-music-function (parser location padding tempotext) - (number? string?) -#{ - \once \override Score.MetronomeMark #'padding = $padding - \tempo \markup { \bold $tempotext } -#}) - -\relative c'' { - \tempo \markup { "Low tempo" } - c4 d e f g1 - \tempoPadded #4.0 #"High tempo" - g4 f e d c1 -} -@end lilypond - - -Even music expressions can be passed in: - -@lilypond[quote,verbatim,ragged-right] -pattern = #(define-music-function (parser location x y) (ly:music? ly:music?) -#{ - $x e8 a b $y b a e -#}) - -\relative c''{ - \pattern c8 c8\f - \pattern {d16 dis} { ais16-> b\p } -} -@end lilypond - - - - - diff --git a/Documentation/user/setup.itely b/Documentation/user/setup.itely deleted file mode 100644 index da5bbe90ae..0000000000 --- a/Documentation/user/setup.itely +++ /dev/null @@ -1,328 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond-program.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Setup -@chapter Setup - -This chapter discusses various post-install configuration options for -LilyPond and various other programs. This chapter may be safely treated -as a reference: only read a section if it applies to you. - -@menu -* Setup for specific Operating Systems:: -* Text editor support:: -* Point and click:: -@end menu - - -@node Setup for specific Operating Systems -@section Setup for specific Operating Systems - -This section explains how to perform additional setup for specific -operating systems. - -@menu -* Setup for MacOS X:: -@end menu - -@node Setup for MacOS X -@subsection Setup for MacOS X - -@subsubheading Using Python scripts on MacOS 10.3 or 10.4 - -LilyPond binaries for MacOS X do not provide Python, but Python 2.4 or -newer is required by @command{convert-ly}. Therefore, if you use MacOS -10.3 or 10.4, you must install a newer Python version from -@uref{http://python.org/download/}, then edit the first line of -@command{convert-ly} and @command{lilypond-book} as follows: if the -Python binary you just installed is in your @var{PATH}, the first line -should be - -@example -#!/usr/bin/env python -@end example - -@noindent -otherwise it should be - -@example -#!@var{/path/to/newly_installed/python} -@end example - - -@subsubheading MacOS X on the command line - -The scripts --- such as @command{lilypond-book}, @command{convert-ly}, -@command{abc2ly}, and even @command{lilypond} itself --- are included -inside the @code{.app} file for MacOS@tie{}X. They can be run from -the command line by invoking them directly, e.g. - -@example -@var{path/to}/LilyPond.app/Contents/Resources/bin/lilypond -@end example - -@noindent -The same is true of the other scripts in that directory, including -@command{lilypond-book}, @command{convert-ly}, @command{abc2ly}, etc. - -Alternatively, you may create scripts which add the path -automatically. Create a directory to store these scripts, - -@example -mkdir -p ~/bin -cd ~/bin -@end example - -Create a file called @code{lilypond} which contains - -@example -exec @var{path/to}/LilyPond.app/Contents/Resources/bin/lilypond "$@@" -@end example - -Create similar files @code{lilypond-book}, @code{convert-ly}, and -any other helper programs you use (@code{abc2ly}, @code{midi2ly}, -etc). Simply replace the @code{bin/lilypond} with -@code{bin/convert-ly} (or other program name) in the above file. - -Make the file executable, - -@example -chmod u+x lilypond -@end example - -Now, add this directory to your path. Modify (or create) -a file called @code{.profile} in your home directory such that it contains - -@example -export PATH=$PATH:~/bin -@end example - -@noindent -This file should end with a blank line. - -Note that @var{path/to} will generally be @code{/Applications/}. - - -@node Text editor support -@section Text editor support - -@cindex editors -@cindex vim -@cindex emacs -@cindex modes, editor -@cindex syntax coloring -@cindex coloring, syntax - -There is support from different text editors for LilyPond. - -@menu -* Emacs mode:: -* Vim mode:: -* jEdit:: -* TexShop:: -* TextMate:: -* LilyKDE:: -@end menu - -@node Emacs mode -@subsection Emacs mode - -Emacs has a @file{lilypond-mode}, which provides keyword -autocompletion, indentation, LilyPond specific parenthesis matching -and syntax coloring, handy compile short-cuts and reading LilyPond -manuals using Info. If @file{lilypond-mode} is not installed on your -platform, see below. - -An Emacs mode for entering music and running LilyPond is contained in -the source archive in the @file{elisp} directory. Do @command{make -install} to install it to @var{elispdir}. The file @file{lilypond-init.el} -should be placed to @var{load-path}@file{/site-start.d/} or appended -to your @file{~/.emacs} or @file{~/.emacs.el}. - -As a user, you may want add your source path (e.g. @file{~/site-lisp/}) to -your @var{load-path} by appending the following line (as modified) to your -@file{~/.emacs} - -@c any reason we do not advise: (push "~/site-lisp" load-path) -@example -(setq load-path (append (list (expand-file-name "~/site-lisp")) load-path)) -@end example - - -@node Vim mode -@subsection Vim mode - -For @uref{http://@/www@/.vim@/.org,VIM}, a @file{vimrc} is supplied, -along with syntax coloring tools. A Vim mode for entering music and -running LilyPond is contained in the source archive in @code{$VIM} -directory. - -The LilyPond file type is detected if the file -@file{~/.vim/filetype.vim} has the following content - -@example -if exists("did_load_filetypes") - finish -endif -augroup filetypedetect - au! BufNewFile,BufRead *.ly,*.ily setf lilypond -augroup END -@end example - -Please include this path by appending the following line to your -@file{~/.vimrc} - -@example -set runtimepath+=/usr/local/share/lilypond/$@{LILYPOND_VERSION@}/vim/ -@end example - -@noindent -where $@{LILYPOND_VERSION@} is your LilyPond version. If LilyPond was not -installed in @file{/usr/local/}, then change this path accordingly. - - -@node jEdit -@subsection jEdit - -Created as a plugin for the @uref{http://@/www@/.jedit@/.org@/,jEdit} -text editor, LilyPondTool is the most feature-rich text-based tool for -editing LilyPond scores. Its features include a Document Wizard with -lyrics support to set up documents easier, and embedded PDF viewer with -advanced point-and-click support. For screenshots, demos and -installation instructions, visit -@uref{http://lilypondtool@/.organum@/.hu} - - -@node TexShop -@subsection TexShop - -The @uref{http://@/www@/.uoregon@/.edu/~koch/texshop/index@/.html,TexShop} -editor for MacOS@tie{}X can be extended to run LilyPond, lilypond-book and -convert-ly from within the editor, using the extensions available at -@uref{http://@/www@/.dimi@/.uniud@/.it/vitacolo/freesoftware@/.html}. - - -@node TextMate -@subsection TextMate - -There is a LilyPond bundle for TextMate. It may be installed by running - -@example -mkdir -p /Library/Application\ Support/TextMate/Bundles -cd /Library/Application\ Support/TextMate/Bundles -svn co http://macromates.com/svn/Bundles/trunk/Bundles/Lilypond.tmbundle/ -@end example - - -@node LilyKDE -@subsection LilyKDE - -@uref{http://lilykde.googlecode.com/,LilyKDE} is a plugin for KDE's -text editor @uref{http://kate-editor.org/,Kate}. It has a powerful Score -Wizard to quickly setup a LilyPond document and an embedded PDF viewer. - -LilyKDE can use @uref{http://www.volny.cz/smilauer/rumor/,Rumor}, -so music can entered by playing on a MIDI keyboard. - -Other features are lyric hyphenation and running LilyPond on multiple files -at once from within the KDE file manager. - - -@node Point and click -@section Point and click -@cindex point and click - - -Point and click lets you find notes in the input by clicking on them -in the PDF viewer. This makes it easier to find input that causes -some error in the sheet music. - -When this functionality is active, LilyPond adds hyperlinks to the PDF -file. These hyperlinks are sent to the web-browser, which opens a -text-editor with the cursor in the right place. - -To make this chain work, you should configure your PDF viewer to -follow hyperlinks using the @file{lilypond-invoke-editor} script -supplied with LilyPond. - -For Xpdf on UNIX, the following should be present in -@file{xpdfrc}@footnote{On UNIX, this file is found either in -@file{/etc/xpdfrc} or as @file{.xpdfrc} in your home directory.} - -@example -urlCommand "lilypond-invoke-editor %s" -@end example - -The program @file{lilypond-invoke-editor} is a small helper -program. It will invoke an editor for the special @code{textedit} -URIs, and run a web browser for others. It tests the environment -variable @code{EDITOR} for the following patterns, - -@table @code -@item emacs - this will invoke -@example -emacsclient --no-wait +@var{line}:@var{column} @var{file} -@end example -@item vim - this will invoke -@example -gvim --remote +:@var{line}:norm@var{char} @var{file} -@end example - -@item nedit -this will invoke -@example - nc -noask +@var{line} @var{file}' -@end example -@end table - -The environment variable @code{LYEDITOR} is used to override this. It -contains the command line to start the editor, where @code{%(file)s}, -@code{%(column)s}, @code{%(line)s} is replaced with the file, column -and line respectively. The setting - -@example -emacsclient --no-wait +%(line)s:%(column)s %(file)s -@end example - -@noindent -for @code{LYEDITOR} is equivalent to the standard emacsclient -invocation. - - -@cindex file size, output - -The point and click links enlarge the output files significantly. For -reducing the size of PDF and PS files, point and click may be switched -off by issuing - -@example -\pointAndClickOff -@end example - -@noindent -in a @file{.ly} file. Point and click may be explicitly enabled with - -@example -\pointAndClickOn -@end example - -Alternately, you may disable point and click with a command-line -option: - -@example -lilypond -dno-point-and-click file.ly -@end example - -@warning{You should always turn off point and click in any LilyPond -files to be distributed to avoid including path information about -your computer in the .pdf file, which can pose a security risk.} diff --git a/Documentation/user/simultaneous.itely b/Documentation/user/simultaneous.itely deleted file mode 100644 index f3d8be5d05..0000000000 --- a/Documentation/user/simultaneous.itely +++ /dev/null @@ -1,833 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - - -@node Simultaneous notes -@section Simultaneous notes - -@lilypondfile[quote]{simultaneous-headword.ly} - -Polyphony in music refers to having more than one voice occurring -in a piece of music. Polyphony in LilyPond refers to having more -than one voice on the same staff. - -@menu -* Single voice:: -* Multiple voices:: -@end menu - - -@node Single voice -@subsection Single voice - -This section discusses simultaneous notes inside the same voice. - -@menu -* Chorded notes:: -* Simultaneous expressions:: -* Clusters:: -@end menu - - -@node Chorded notes -@unnumberedsubsubsec Chorded notes - -@cindex chords -@cindex brackets, angle -@cindex angle brackets -@cindex relative pitch in chords - -@funindex < -@funindex > -@funindex <...> - -A chord is formed by enclosing a set of pitches between @code{<} -and @code{>}. A chord may be followed by a duration and/or a set -of articulations, just like simple notes: - -@lilypond[verbatim,quote,relative=1] -2 4-> -. -@end lilypond - -Relative mode can be used for pitches in chords. The octave of each -pitch is chosen using the preceding pitch as a reference except in -the case of the first pitch in a chord: the reference for the first -pitch is the @emph{first} pitch of the preceding chord. - -For more information about chords, see @ref{Chord notation}. - - -@seealso -Music Glossary: -@rglos{chord}. - -Learning Manual: -@rlearning{Combining notes into chords}. - -Notation Reference: -@ref{Chord notation}. - -Snippets: -@rlsr{Simultaneous notes}. - - -@node Simultaneous expressions -@unnumberedsubsubsec Simultaneous expressions - -One or more music expressions enclosed in double angle brackets are -taken to be simultaneous. If the first expression begins with a -single note or if the whole simultaneous expression appears -explicitly within a single voice, the whole expression is placed on -a single staff; otherwise the elements of the simultaneous -expression are placed on separate staves. - -The following examples show simultaneous expressions on one staff: - -@lilypond[quote,verbatim,relative=2] -\new Voice { % explicit single voice - << { a4 b g2 } { d4 g c,2 } >> -} -@end lilypond - -@lilypond[quote,verbatim,relative=2] -% single first note -a << { a4 b g } { d4 g c, } >> -@end lilypond - -This can be useful if the simultaneous sections have identical -rhythms, but attempts to attach notes with different durations -to the same stem will cause errors. - -The following example shows how simultaneous expressions can -generate multiple staves implicitly: - -@lilypond[quote,verbatim,relative=2] -% no single first note -<< { a4 b g2 } { d4 g2 c,4 } >> -@end lilypond - -Here different rhythms cause no problems. - - -@node Clusters -@unnumberedsubsubsec Clusters - -@cindex cluster -@cindex note cluster - -@funindex \makeClusters -@funindex makeClusters - -A cluster indicates a continuous range of pitches to be played. -They can be denoted as the envelope of a set of notes. They are -entered by applying the function @code{\makeClusters} to a sequence -of chords, e.g., - -@lilypond[quote,relative=2,verbatim] -\makeClusters { 2 } -@end lilypond - -Ordinary notes and clusters can be put together in the same staff, -even simultaneously. In such a case no attempt is made to -automatically avoid collisions between ordinary notes and clusters. - - -@seealso -Music Glossary: -@rglos{cluster}. - -Snippets: -@rlsr{Simultaneous notes}. - -Internals Reference: -@rinternals{ClusterSpanner}, -@rinternals{ClusterSpannerBeacon}, -@rinternals{Cluster_spanner_engraver}. - - -@knownissues - -Clusters look good only if they span at least two chords; otherwise -they appear too narrow. - -Clusters do not have a stem and cannot indicate durations by -themselves, but the length of the printed cluster is determined by -the durations of the defining chords. Separate clusters need a -separating rest between them. - -Clusters do not produce MIDI output. - -@node Multiple voices -@subsection Multiple voices - -This section discusses simultaneous notes in multiple voices or -multiple staves. - -@menu -* Single-staff polyphony:: -* Voice styles:: -* Collision resolution:: -* Automatic part combining:: -* Writing music in parallel:: -@end menu - - -@node Single-staff polyphony -@unnumberedsubsubsec Single-staff polyphony - -@cindex single-staff polyphony -@cindex polyphony, single-staff -@cindex voice -@cindex lyrics assigned to one voice - -@funindex \voiceOne -@funindex voiceOne -@funindex \voiceOne ... \voiceFour -@funindex Voice -@funindex \oneVoice -@funindex oneVoice - -@strong{@i{Explicitly instantiating voices}} - -The basic structure needed to achieve multiple independent -voices in a single staff is illustrated in the following example: - -@lilypond[quote,relative=3,verbatim] -\new Staff << - \new Voice = "first" - { \voiceOne r8 r16 g e8. f16 g8[ c,] f e16 d } - \new Voice= "second" - { \voiceTwo d16 c d8~ d16 b c8~ c16 b c8~ c16 b8. } ->> -@end lilypond - -Here, voices are instantiated explicitly and are given names. The -@code{\voiceOne} ... @code{\voiceFour} commands set up the voices -so that first and third voices get stems up, second and fourth -voices get stems down, third and fourth voice note heads are -horizontally shifted, and rests in the respective voices are -automatically moved to avoid collisions. The @code{\oneVoice} -command returns all the voice settings to the neutral default -directions. - -@strong{@i{Temporary polyphonic passages}} - -A temporary polyphonic passage can be created with the following -construct: - -@example -<< @{ \voiceOne ... @} - \new Voice @{ \voiceTwo ... @} ->> \oneVoice -@end example - -Here, the first expression within a temporary polyphonic passage is -placed into the @code{Voice} context which was in use immediately -before the polyphonic passage, and that same @code{Voice} context -continues after the temporary section. Other expressions within -the angle brackets are assigned to distinct temporary voices. -This allows lyrics to be assigned to one continuing voice before, -during and after a polyphonic section: - -@lilypond[quote, verbatim, relative=2] -<< - \new Voice = "melody" { - a4 - << - { - \voiceOne - g f - } - \new Voice { - \voiceTwo - d2 - } - >> - \oneVoice - e4 - } - \new Lyrics \lyricsto "melody" { - This is my song. - } ->> -@end lilypond - -Here, the @code{\voiceOne} and @code{\voiceTwo} commands are -required to define the settings of each voice. - -@strong{@i{The double backslash construct}} - -The @code{<< @{...@} \\ @{...@} >>} construct, where the two (or -more) expressions are separated by double backslashes, behaves -differently to the similar construct without the double backslashes: -@emph{all} the expressions within this contruct are assigned -to new @code{Voice} contexts. These new @code{Voice} contexts -are created implicitly and are given the fixed names @code{"1"}, -@code{"2"}, etc. - -The first example could be typeset as follows: - -@lilypond[quote,relative=3,verbatim] -<< - { r8 r16 g e8. f16 g8[ c,] f e16 d } - \\ - { d16 c d8~ d16 b c8~ c16 b c8~ c16 b8. } ->> -@end lilypond - -This syntax can be used where it does not matter that temporary -voices are created and then discarded. These implicitly created -voices are given the settings equivalent to the effect of the -@code{\voiceOne} ... @code{\voiceFour} commands, in the order in -which they appear in the code. - -In the following example, the intermediate voice has stems up, -therefore we enter it in the third place, so it becomes voice -three, which has the stems up as desired. Spacer rests are -used to avoid printing doubled rests. - -@lilypond[quote,relative=3,verbatim] -<< - { r8 g g g g f16 ees f8 d } - \\ - { ees,8 r ees r d r d r } - \\ - { d'8 s c s bes s a s } ->> -@end lilypond - -In all but the simplest works it is advisable to create explicit -@code{Voice} contexts as explained in @rlearning{Contexts and engravers} and -@rlearning{Explicitly instantiating voices}. - -@strong{@i{Identical rhythms}} - -In the special case that we want to typeset parallel pieces of music -that have the same rhythm, we can combine them into a single -@code{Voice} context, thus forming chords. To achieve this, enclose -them in a simple simultaneous music construct within an explicit voice: - -@lilypond[quote,relative=2,verbatim] -\new Voice << - { e4 f8 d e16 f g8 d4 } - { c4 d8 b c16 d e8 b4 } ->> -@end lilypond - -This method leads to strange beamings and warnings if the pieces of -music do not have the same rhythm. - - -@predefined -@code{\voiceOne}, -@code{\voiceTwo}, -@code{\voiceThree}, -@code{\voiceFour}, -@code{\oneVoice}. -@endpredefined - - -@seealso -Learning Manual: -@rlearning{Voices contain music}, -@rlearning{Explicitly instantiating voices}. - -Notation Reference: -@ref{Percussion staves}, -@ref{Invisible rests}, -@ref{Stems}. - -Snippets: -@rlsr{Simultaneous notes}. - - -@node Voice styles -@unnumberedsubsubsec Voice styles - -@cindex voice styles -@cindex styles, voice -@cindex coloring voices -@funindex \voiceOneStyle -@funindex \voiceTwoStyle -@funindex \voiceThreeStyle -@funindex \voiceFourStyle -@funindex \voiceNeutralStyle - -Voices may be given distinct colors and shapes, allowing them to be -easily identified: - -@lilypond[quote,relative=2,verbatim] -<< - { \voiceOneStyle d4 c2 b4 } - \\ - { \voiceTwoStyle e,2 e } - \\ - { \voiceThreeStyle b2. c4 } - \\ - { \voiceFourStyle g'2 g } ->> -@end lilypond - -The @code{\voiceNeutralstyle} command is used to revert to the -standard presentation. - - -@predefined -@code{\voiceOneStyle}, -@code{\voiceTwoStyle}, -@code{\voiceThreeStyle}, -@code{\voiceFourStyle}, -@code{\voiceNeutralStyle}. -@endpredefined - - -@seealso -Learning Manual: -@rlearning{I'm hearing Voices}, -@rlearning{Other sources of information}. - -Snippets: -@rlsr{Simultaneous notes}. - - -@node Collision resolution -@unnumberedsubsubsec Collision resolution - -@cindex merging notes -@cindex note collisions -@cindex collisions -@cindex shift note -@cindex multiple voices -@cindex voices, multiple -@cindex polyphonic music -@cindex shifting voices -@cindex voices, multiple -@cindex shift rest, automatic -@funindex \shiftOn -@funindex shiftOn -@funindex \shiftOnn -@funindex shiftOnn -@funindex \shiftOnnn -@funindex shiftOnnn -@funindex \shiftOff -@funindex shiftOff -@funindex \mergeDifferentlyDottedOn -@funindex mergeDifferentlyDottedOn -@funindex \mergeDifferentlyDottedOff -@funindex mergeDifferentlyDottedOff -@funindex \mergeDifferentlyHeadedOn -@funindex mergeDifferentlyHeadedOn -@funindex \mergeDifferentlyHeadedOff -@funindex mergeDifferentlyHeadedOff - -The note heads of notes in different voices with the same pitch, -same note head and opposite stem direction are automatically -merged, but notes with different note heads or the same stem -direction are not. Rests opposite a stem in a different voice -are shifted vertically. - -@lilypond[quote,verbatim,relative=2] -<< - { - c8 d e d c d c4 - g'2 fis - } \\ { - c2 c8. b16 c4 - e,2 r - } \\ { - \oneVoice - s1 - e8 a b c d2 - } ->> -@end lilypond - -Notes with different note heads may be merged, with the -exception of half-note heads and quarter-note heads: - -@lilypond[quote,verbatim,relative=2] -<< - { - \mergeDifferentlyHeadedOn - c8 d e d c d c4 - g'2 fis - } \\ { - c2 c8. b16 c4 - e,2 r - } \\ { - \oneVoice - s1 - e8 a b c d2 - } ->> -@end lilypond - -Note heads with different dots may be merged: - -@lilypond[quote,relative=2,verbatim] -<< - { - \mergeDifferentlyHeadedOn - \mergeDifferentlyDottedOn - c8 d e d c d c4 - g'2 fis - } \\ { - c2 c8. b16 c4 - e,2 r - } \\ { - \oneVoice - s1 - e8 a b c d2 - } ->> -@end lilypond - - -The half note and eighth note at the start of the second measure -are incorrectly merged because @code{\mergeDifferentlyHeadedOn} -cannot successfully complete the merge when three or more notes -line up in the same column, and in this case a warning is given. -To allow the merge to work properly a @code{\shift} must be applied -to the note that should not be merged. Here, @code{\shiftOn} is -applied to move the top @notation{g} out of the column, and -@code{\mergeDifferentlyHeadedOn} then works properly. - -@lilypond[quote,relative=2,verbatim] -<< - { - \mergeDifferentlyHeadedOn - \mergeDifferentlyDottedOn - c8 d e d c d c4 - \shiftOn - g'2 fis - } \\ { - c2 c8. b16 c4 - e,2 r - } \\ { - \oneVoice - s1 - e8 a b c d2 - } - ->> -@end lilypond - -The @code{\shiftOn}, @code{\shiftOnn}, and @code{\shiftOnnn} -commands specify the degree to which chords of the current voice -should be shifted. The outer voices (normally: voices one and -two) have @code{\shiftOff}, while the inner voices (three and -four) have @code{\shiftOn}. @code{\shiftOnn} and -@code{\shiftOnnn} define further shift levels. - -Notes are only merged if they have opposing stem directions (e.g. in -@code{Voice} 1 and 2). - - -@predefined -@code{\mergeDifferentlyDottedOn}, -@code{\mergeDifferentlyDottedOff}, -@code{\mergeDifferentlyHeadedOn}, -@code{\mergeDifferentlyHeadedOff}. - -@code{\shiftOn}, -@code{\shiftOnn}, -@code{\shiftOnnn}, -@code{\shiftOff}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{additional-voices-to-avoid-collisions.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{forcing-horizontal-shift-of-notes.ly} - - -@seealso -Music Glossary: -@rglos{polyphony}. - -Learning Manual: -@rlearning{Multiple notes at once}, -@rlearning{Voices contain music}, -@rlearning{Collisions of objects}. - -Snippets: -@rlsr{Simultaneous notes}. - -Internals Reference: -@rinternals{NoteColumn}, -@rinternals{NoteCollision}, -@rinternals{RestCollision}. - - -@knownissues - -@ignore -@c TODO investigate! Sometimes it works, sometimes not. --FV -The requirements for successfully merging different note heads that -are at the same time differently dotted are not clear. -@end ignore - -There is no support for chords where the same note occurs with -different accidentals in the same chord. In this case, it is -recommended to use enharmonic transcription, or to use special -cluster notation (see @ref{Clusters}). - - -@node Automatic part combining -@unnumberedsubsubsec Automatic part combining - -@cindex automatic part combining -@cindex part combiner -@cindex combining parts -@cindex a due part -@cindex solo part -@funindex \partcombine -@funindex partcombine - -Automatic part combining is used to merge two parts of music onto -a staff. It is aimed at typesetting orchestral scores. When the -two parts are identical for a period of time, only one is shown. -In places where the two parts differ, they are typeset as separate -voices, and stem directions are set automatically. Also, solo and -@notation{a due} parts are identified and marked by default. - -The syntax for part combining is: - -@example -\partcombine @var{musicexpr1} @var{musicexpr2} -@end example - -The following example demonstrates the basic functionality of the -part combiner: putting parts on one staff and setting stem -directions and polyphony. The same variables are used for the -independent parts and the combined staff. - -@lilypond[quote,verbatim] -instrumentOne = \relative c' { - c4 d e f - R1 - d'4 c b a - b4 g2 f4 - e1 -} - -instrumentTwo = \relative g' { - R1 - g4 a b c - d c b a - g f( e) d - e1 -} - -<< - \new Staff \instrumentOne - \new Staff \instrumentTwo - \new Staff \partcombine \instrumentOne \instrumentTwo ->> -@end lilypond - -The notes in the third measure appear only once, although they were -specified in both parts. Stem, slur, and tie directions are set -automatically, depending whether there is a solo or unison. When -needed in polyphony situations, the first part (with context called -@code{one}) always gets up stems, while the second (called @code{two}) -always gets down stems. In solo situations, the first and second -parts get marked with @q{Solo} and @q{Solo II}, respectively. The -unisono (@notation{a due}) parts are marked by default with the text -@qq{a2}. - -Both arguments to @code{\partcombine} will be interpreted as -@code{Voice} contexts. If using relative octaves, -@code{\relative} should be specified for both music expressions, -i.e., - -@example -\partcombine - \relative @dots{} @var{musicexpr1} - \relative @dots{} @var{musicexpr2} -@end example - -@noindent -A @code{\relative} section that is outside of @code{\partcombine} -has no effect on the pitches of @var{musicexpr1} and -@var{musicexpr2}. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{combining-two-parts-on-the-same-staff.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{changing-partcombine-texts.ly} - - -@seealso -Music Glossary: -@rglos{a due}, -@rglos{part}. - -Notation Reference: -@ref{Writing parts}. - -Snippets: -@rlsr{Simultaneous notes}. - -Internals Reference: -@rinternals{PartCombineMusic}, -@rinternals{Voice}. - - -@knownissues - -@code{\partcombine} can only accept two voices. - -When @code{printPartCombineTexts} is set, if the two voices play -the same notes on and off, the part combiner may typeset @code{a2} -more than once in a measure. - -@code{\partcombine} cannot be inside @code{\times}. - -@code{\partcombine} cannot be inside @code{\relative}. - -Internally, the @code{\partcombine} interprets both arguments as -@code{Voice}s and decides when the parts can be combined. When they have -different durations they cannot be combined and are given the names -@code{one} and @code{two}. Consequently, if the arguments switch to -differently named @rinternals{Voice} contexts, the events in those will -be ignored. Likewise, partcombining isn't designed to work with lyrics; -when one of the voices is explicitly named in order to attach lyrics to -it, the partcombining stops working. - -@code{\partcombine} only observes onset times of notes. It cannot -determine whether a previously started note is playing or not, leading -to various problems. - - -@node Writing music in parallel -@unnumberedsubsubsec Writing music in parallel - -@cindex writing music in parallel -@cindex interleaved music -@cindex parallel music -@funindex \parallelMusic -@funindex parallelMusic - -Music for multiple parts can be interleaved in input code. The -function @code{\parallelMusic} accepts a list with the names of a -number of variables to be created, and a musical expression. The -content of alternate measures from the expression become the value -of the respective variables, so you can use them afterwards to -print the music. - -@warning{Bar checks @code{|} must be used, and the measures must -be of the same length.} - -@lilypond[quote,verbatim] -\parallelMusic #'(voiceA voiceB voiceC) { - % Bar 1 - r8 g'16 c'' e'' g' c'' e'' r8 g'16 c'' e'' g' c'' e'' | - r16 e'8.~ e'4 r16 e'8.~ e'4 | - c'2 c'2 | - - % Bar 2 - r8 a'16 d'' f'' a' d'' f'' r8 a'16 d'' f'' a' d'' f'' | - r16 d'8.~ d'4 r16 d'8.~ d'4 | - c'2 c'2 | - -} -\new StaffGroup << - \new Staff << \voiceA \\ \voiceB >> - \new Staff { \clef bass \voiceC } ->> -@end lilypond - -Relative mode may be used. Note that the @code{\relative} command -is not used inside @code{\parallelMusic} itself. The notes are -relative to the preceding note in the voice, not to the previous -note in the input -- in other words, relative notes for -@code{voiceA} ignore the notes in @code{voiceB}. - -@lilypond[quote,verbatim] -\parallelMusic #'(voiceA voiceB voiceC) { - % Bar 1 - r8 g16 c e g, c e r8 g,16 c e g, c e | - r16 e8.~ e4 r16 e8.~ e4 | - c2 c | - - % Bar 2 - r8 a,16 d f a, d f r8 a,16 d f a, d f | - r16 d8.~ d4 r16 d8.~ d4 | - c2 c | - - } -\new StaffGroup << - \new Staff << \relative c'' \voiceA \\ \relative c' \voiceB >> - \new Staff \relative c' { \clef bass \voiceC } ->> -@end lilypond - -This works quite well for piano music. This example maps four -consecutive measures to four variables: - -@lilypond[quote,verbatim] -global = { - \key g \major - \time 2/4 -} - -\parallelMusic #'(voiceA voiceB voiceC voiceD) { - % Bar 1 - a8 b c d | - d4 e | - c16 d e fis d e fis g | - a4 a | - - % Bar 2 - e8 fis g a | - fis4 g | - e16 fis g a fis g a b | - a4 a | - - % Bar 3 ... -} - -\score { - \new PianoStaff << - \new Staff { - \global - << - \relative c'' \voiceA - \\ - \relative c' \voiceB - >> - } - \new Staff { - \global \clef bass - << - \relative c \voiceC - \\ - \relative c \voiceD - >> - } - >> -} -@end lilypond - - -@seealso -Learning Manual: -@rlearning{Organizing pieces with variables}. - -Snippets: -@rlsr{Simultaneous notes}. diff --git a/Documentation/user/spacing.itely b/Documentation/user/spacing.itely deleted file mode 100644 index fd7e52140a..0000000000 --- a/Documentation/user/spacing.itely +++ /dev/null @@ -1,2652 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@ignore -GDP TODO list - -Negative numbers are allowed: -> Are you sure? The following works well -> \paper{ -> first-page-number = -2 -> } -> and prints page number -1 on the second page, for example. - - -In 5.2.1 the @refbugs (line 495 in spacing.itely on master) it -states: - -"@code{layout-set-staff-size} does not change the distance between -the -staff lines." - -Could we add a sentence: -"Use instead the pair fontSize = #@var{N} - \override StaffSymbol #'staff-space = #(magstep -@var{N}) -inside the Staff context to change the size of the font and the -distance between -staff lines accordingly." - -Actually I found, that the @internalsref{StaffSymbol} at line 481 -sends to an uncomplete -documentation. The property staff-space is not explained here. I -thought Y-extent might be of -help, but it is in turn explained by x-space which again is -missing from the list. Who has the -knowledge to fix this? - - -Clarify -http://code.google.com/p/lilypond/issues/detail?id=68 - -@end ignore - - -@node Spacing issues -@chapter Spacing issues - -The global paper layout is determined by three factors: the page layout, the -line breaks, and the spacing. These all influence each other. The -choice of spacing determines how densely each system of music is set. -This influences where line breaks are chosen, and thus ultimately, how -many pages a piece of music takes. - -Globally speaking, this procedure happens in four steps: first, -flexible distances (@q{springs}) are chosen, based on durations. All -possible line breaking combinations are tried, and a @q{badness} score -is calculated for each. Then the height of each possible system is -estimated. Finally, a page breaking and line breaking combination is chosen -so that neither the horizontal nor the vertical spacing is too cramped -or stretched. - -Settings which influence layout may be placed in two blocks. -The @code{\paper @{...@}} block is placed outside any -@code{\score @{...@}} blocks and contains settings that -relate to the entire document. The @code{\layout @{...@}} -block is placed within a @code{\score @{...@}} block and -contains settings for that particular score. If you have -only one @code{\score @{...@}} block the two have the same -effect. In general the commands shown in this chapter can -be placed in either. - -@menu -* Paper and pages:: -* Music layout:: -* Breaks:: -* Vertical spacing:: -* Horizontal spacing:: -* Fitting music onto fewer pages:: -@end menu - - -@node Paper and pages -@section Paper and pages - -This section deals with the boundaries that define the area -within which music can be printed. - -@menu -* Paper size:: -* Page formatting:: -@end menu - - -@node Paper size -@subsection Paper size - -@cindex paper size -@cindex page size - -Two functions are available for changing the paper size: -@code{set-default-paper-size} and @code{set-paper-size}. -@code{set-default-paper-size} must be placed in the toplevel -scope, and @code{set-paper-size} must be placed in a @code{\paper} -block: - -@example -#(set-default-paper-size "a4") -@end example - -@example -\paper @{ - #(set-paper-size "a4") -@} -@end example - -@noindent -@code{set-default-paper-size} sets the size of all pages, whereas -@code{set-paper-size} only sets the size of the pages that the -@code{\paper} block applies to. For example, if the @code{\paper} -block is at the top of the file, then it will apply the paper size -to all pages. If the @code{\paper} block is inside a -@code{\book}, then the paper size will only apply to that book. - -Common paper sizes are available, including @code{a4}, -@code{letter}, @code{legal}, and @code{11x17} (also known as -tabloid). Many more paper sizes are supported by default. For -details, see @file{scm/@/paper@/.scm}, and search for the -definition of @code{paper-alist}. - -@c TODO add a new appendix for paper sizes (auto-generated) -pm - -@warning{The default paper size is @code{a4}.} - -Extra sizes may be added by editing the definition of -@code{paper-alist} in the initialization file -@file{scm/@/paper@/.scm}, however they will be overridden on a -subsequent install. - -@cindex orientation -@cindex landscape - -If the symbol @code{'landscape} is supplied as an argument to -@code{set-default-paper-size}, pages will be rotated by 90 -degrees, and wider line widths will be set accordingly. - -@example -#(set-default-paper-size "a6" 'landscape) -@end example - -Setting the paper size will adjust a number of @code{\paper} -variables, such as margins. To use a particular paper size with -altered @code{\paper} variables, set the paper size before setting -the variables. - - -@seealso -Installed Files: -@file{scm/@/paper@/.scm}. - -Snippets: -@rlsr{Spacing}. - - -@node Page formatting -@subsection Page formatting - -Margins, headers, and footers and other layout variables are -automatically set according to the paper size. - -This section lists and describes a number of paper variables that -may be altered. - -@menu -* Vertical dimensions:: -* Horizontal dimensions:: -* Other layout variables:: -@end menu - - -@node Vertical dimensions -@unnumberedsubsubsec Vertical dimensions - -These variables are used to set different vertical dimensions on a -page: - -@funindex \paper - -@table @code - -@item after-title-space -@funindex after-title-space - -The amount of space between the title and the first system. -Default: @code{5\mm}. - -@item before-title-space -@funindex before-title-space - -Amount of space between the last system of the previous piece and the -title of the next. Default: @code{10\mm}. - -@item between-system-padding -@funindex between-system-padding - -The minimum amount of white space that will always be present -between the bottom-most symbol of one system, and the top-most of -the next system. Default: @code{4\mm}. - -Increasing this will put systems whose bounding boxes almost touch -farther apart. - -@item between-system-space -@funindex between-system-space - -The distance between systems. It is the ideal distance between -the center of the bottom staff of one system and the center of the -top staff of the next system. Default: @code{20\mm}. - -Increasing this value will provide a more even appearance of the -page at the cost of using more vertical space. - -@item between-title-space -@funindex between-title-space - -Amount of space between consecutive titles (e.g., the title of the -book and the title of a piece). Default: @code{2\mm}. - -@item bottom-margin -@funindex bottom-margin - -The margin between footer and bottom of the page. Default: -@code{6\mm}. - -@item foot-separation -@funindex foot-separation - -Distance between the bottom-most music system and the page -footer. Default: @code{4\mm}. - -@item head-separation -@funindex head-separation - -Distance between the top-most music system and the page header. -Default: @code{4\mm}. - -@item page-top-space -@funindex page-top-space - -Distance from the top of the printable area to the center of the -first staff. This only works for staves that are vertically -small. Big staves are set with the top of their bounding box -aligned to the top of the printable area. Default: @code{12\mm}. - -@item paper-height -@funindex paper-height - -The height of the page. Default: the height of the current paper -size. For details, see @ref{Paper size}. - -@item top-margin -@funindex top-margin - -The margin between header and top of the page. Default: -@code{5\mm}. - -@end table - - -@snippets - -The header and footer are created by the functions make-footer and -make-header, defined in \paper. The default implementations are in -ly/paper-defaults.ly and ly/titling-init.ly. - -The page layout itself is done by two functions in the \paper block, -page-music-height and page-make-stencil. The former tells the -line-breaking algorithm how much space can be spent on a page, the -latter creates the actual page given the system to put on it. - -You can define paper block values in Scheme. In that case mm, in, pt, -and cm are variables defined in paper-defaults.ly with values in -millimeters. That is why the value 2 cm must be multiplied in the -example - -@example -\paper @{ - #(define bottom-margin (* 2 cm)) -@} -@end example - - -Example: - -@example -\paper@{ - paper-width = 2\cm - top-margin = 3\cm - bottom-margin = 3\cm - ragged-last-bottom = ##t -@} -@end example - -This second example centers page numbers at the bottom of every page. - -@example -\paper @{ - print-page-number = ##t - print-first-page-number = ##t - oddHeaderMarkup = \markup \fill-line @{ " " @} - evenHeaderMarkup = \markup \fill-line @{ " " @} - oddFooterMarkup = \markup @{ \fill-line @{ - \bold \fontsize #3 \on-the-fly #print-page-number-check-first - \fromproperty #'page:page-number-string @} @} - evenFooterMarkup = \markup @{ \fill-line @{ - \bold \fontsize #3 \on-the-fly #print-page-number-check-first - \fromproperty #'page:page-number-string @} @} -@} -@end example - -You can also define these values in Scheme. In that case @code{mm}, -@code{in}, @code{pt}, and @code{cm} are variables defined in -@file{paper-defaults.ly} with values in millimeters. That is why the -value must be multiplied in the example - -@example -\paper @{ - #(define bottom-margin (* 2 cm)) -@} -@end example - -The header and footer are created by the functions @code{make-footer} -and @code{make-header}, defined in @code{\paper}. The default -implementations are in @file{ly/@/paper@/-defaults@/.ly} and -@file{ly/@/titling@/-init@/.ly}. - -The page layout itself is done by two functions in the -@code{\paper} block, @code{page-music-height} and -@code{page-make-stencil}. The former tells the line-breaking algorithm -how much space can be spent on a page, the latter creates the actual -page given the system to put on it. - - -@seealso -Notation Reference: -@ref{Vertical spacing between systems}. - -Snippets: -@rlsr{Spacing}. - - -@node Horizontal dimensions -@unnumberedsubsubsec Horizontal dimensions - -@warning{If @code{paper-width} is manually set, @code{line-width}, -@code{left-margin}, @code{indent}, and @code{short-indent} may -have to be adjusted as well.} - -There are a few variables that determine the horizontal dimensions -on a page: - -@table @code - -@item horizontal-shift -@funindex horizontal-shift - -The amount that all systems (including titles and system -separators) are shifted to the right. Default: @code{0.0}. - -@item indent -@funindex indent - -The level of indentation for the first system in a score. -Default: @code{paper-width} divided by @code{14}, as determined by -@code{set-default-paper-size} or @code{set-paper-size}. - -@item left-margin -@funindex left-margin - -The margin between the left edge of the page and the beginning of -each system. Default: @code{10\mm}, as determined by -@code{set-default-paper-size} or @code{set-paper-size}. - -@item line-width -@funindex line-width - -The width of music systems. Default: @code{paper-width} minus -@code{20\mm}, as determined by @code{set-default-paper-size} or -@code{set-paper-size}. - -@item paper-width -@funindex paper-width - -The width of the page. Default: the width of the current paper -size. For details, see @ref{Paper size}. - -@item short-indent -@funindex short-indent - -The level of indentation for all systems in a score besides the -first system. Default: @code{0}, as determined by -@code{set-default-paper-size} or @code{set-paper-size}. - -@end table - - -@seealso -Snippets: -@rlsr{Spacing}. - - -@knownissues - -The option @code{right-margin} is defined but doesn't set the -right margin yet. The value for the right margin has to be -defined by adjusting the values of @code{left-margin} and -@code{line-width}. - - -@node Other layout variables -@unnumberedsubsubsec Other layout variables - -These variables can be used to adjust page layout in general. - -@table @code - -@item auto-first-page-number -@funindex auto-first-page-number - -The page breaking algorithm is affected by the first page number -being odd or even. If set to true, the page breaking algorithm -will decide whether to start with an odd or even number. This -will result in the first page number remaining as is or being -increased by one. Default: @code{##f}. - -@ignore - -FIXME: this variable is used, but I don't know what it does. -pm -@item blank-after-score-page-force -@funindex blank-after-score-page-force - -Default: @code{2}. - -@end ignore - -@item blank-last-page-force -@funindex blank-last-page-force - -The penalty for ending the score on an odd-numbered page. -Default: @code{0}. - -@item blank-page-force -@funindex blank-page-force - -The penalty for having a blank page in the middle of a -score. This is not used by @code{ly:optimal-breaking} since it will -never consider blank pages in the middle of a score. Default: -@code{5}. - -@item first-page-number -@funindex first-page-number - -The value of the page number on the first page. Default: -@code{#1}. - -@item max-systems-per-page -The maximum number of systems that will be placed on a page. This -is currently supported only by the @code{ly:optimal-breaking} algorithm. -Default: unset. - -@item min-systems-per-page -The minimum number of systems that will be placed on a page. This -may cause pages to be overfilled if it is made too large. This is -currently supported only by the @code{ly:optimal-breaking} algorithm. -Default: unset. - -@item page-breaking-between-system-padding -@funindex page-breaking-between-system-padding - -Tricks the page breaker into thinking that -@code{between-system-padding} is set to something different than -it really is. For example, if this variable is set to something -substantially larger than @code{between-system-padding}, then the -page-breaker will put fewer systems on each page. Default: unset. - -@item page-count -@funindex page-count - -The number of pages to be used for a score. Default: unset. - -@item page-limit-inter-system-space -@funindex page-limit-inter-system-space - -If set to true, limits space between systems on a page with a lot -of space left. Default: @code{##f}. For details, see -@ref{Vertical spacing between systems}. - -@item page-limit-inter-system-space-factor -@funindex page-limit-inter-system-space-factor - -The factor used by @code{page-limit-inter-system-space}. Default: -@code{1.4}. For details, see -@ref{Vertical spacing between systems}. - -@item page-spacing-weight -@funindex page-spacing-weight - -The relative importance of page (vertical) spacing and line -(horizontal) spacing. High values will make page spacing more -important. Default: @code{#10}. - -@item print-all-headers -@funindex print-all-headers - -If set to true, this will print all headers for each \score in the -output. Normally only the piece and opus header variables are -printed. Default: @code{##f}. - -@item print-first-page-number -@funindex print-first-page-number - -If set to true, a page number is printed on the first page. -Default: @code{##f}. - -@item print-page-number -@funindex print-page-number - -If set to false, page numbers are not printed. Default: -@code{##t}. - -@item ragged-bottom -@funindex ragged-bottom - -If set to true, systems will not spread vertically across the -page. This does not affect the last page. Default: @code{##f}. - -This should be set to true for pieces that have only two or three -systems per page, for example orchestral scores. - -@item ragged-last -@funindex ragged-last - -If set to true, the last system in the score will not fill the -line width. Instead the last system ends at its natural -horizontal length. Default: @code{##f}. - -@item ragged-last-bottom -@funindex ragged-last-bottom - -If set to false, systems will spread vertically across the last -page. Default: @code{##t}. - -Pieces that amply fill two pages or more should have this set to -true. - -It also affects the last page of book parts, ie parts of a book created -with @code{\bookpart} blocks. - -@item ragged-right -@funindex ragged-right - -If set to true, systems will not fill the line width. Instead, -systems end at their natural horizontal length. Default: -@code{##f}. - -If the score has only one system, the default value is @code{##t}. - -@item system-separator-markup -@funindex system-separator-markup - -A markup object that is inserted between systems. This is often -used for orchestral scores. Default: unset. - -The markup command @code{\slashSeparator} is provided as a sensible -default, for example - -@lilypond[quote,ragged-right] -#(set-default-paper-size "a6" 'landscape) -\book { - \score { - \relative { c1 \break c1 } - } - \paper { - system-separator-markup = \slashSeparator - } -} -@end lilypond - -@item system-count -@funindex system-count - -The number of systems to be used for a score. -Default: unset. - -@item systems-per-page -@funindex systems-per-page - -The number of systems that should be placed on each page. -This is currently supported only by the @code{ly:optimal-breaking} algorithm. -Default: unset. - -@end table - - -@seealso -Snippets: -@rlsr{Spacing}. - - -@knownissues - -The default page header puts the page number and the @code{instrument} -field from the @code{\header} block on a line. - -The titles (from the @code{\header@{@}} section) are treated as a -system, so @code{ragged-bottom} and @code{ragged-last-bottom} will -add space between the titles and the first system of the score. - - -@node Music layout -@section Music layout - -@menu -* Setting the staff size:: -* Score layout:: -@end menu - - -@node Setting the staff size -@subsection Setting the staff size - -@cindex font size, setting -@cindex staff size, setting -@funindex layout file - -The default @strong{staff size} is set to 20 points. -This may be changed in two ways: - -To set the staff size globally for all scores in a file (or -in a @code{book} block, to be precise), use @code{set-global-staff-size}. - -@example -#(set-global-staff-size 14) -@end example - -@noindent -This sets the global default size to 14pt staff height and scales all -fonts accordingly. - -To set the staff size individually for each score, use -@example -\score@{ - ... - \layout@{ - #(layout-set-staff-size 15) - @} -@} -@end example - -The Feta font provides musical symbols at eight different -sizes. Each font is tuned for a different staff size: at a smaller size -the font becomes heavier, to match the relatively heavier staff lines. -The recommended font sizes are listed in the following table: - -@quotation -@multitable @columnfractions .15 .2 .22 .2 - -@item @b{font name} -@tab @b{staff height (pt)} -@tab @b{staff height (mm)} -@tab @b{use} - -@item feta11 -@tab 11.22 -@tab 3.9 -@tab pocket scores - -@item feta13 -@tab 12.60 -@tab 4.4 -@tab - -@item feta14 -@tab 14.14 -@tab 5.0 -@tab - -@item feta16 -@tab 15.87 -@tab 5.6 -@tab - -@item feta18 -@tab 17.82 -@tab 6.3 -@tab song books - -@item feta20 -@tab 20 -@tab 7.0 -@tab standard parts - -@item feta23 -@tab 22.45 -@tab 7.9 -@tab - -@item feta26 -@tab 25.2 -@tab 8.9 -@tab -@c modern rental material? - -@end multitable -@end quotation - -These fonts are available in any sizes. The context property -@code{fontSize} and the layout property @code{staff-space} (in -@rinternals{StaffSymbol}) can be used to tune the size for individual -staves. The sizes of individual staves are relative to the global size. - - -@seealso -Notation Reference: -@ref{Selecting notation font size}. - -Snippets: -@rlsr{Spacing}. - - -@knownissues - -@code{layout-set-staff-size} does not change the distance between the -staff lines. - - -@node Score layout -@subsection Score layout - -@funindex \layout - -While @code{\paper} contains settings that relate to the page formatting -of the whole document, @code{\layout} contains settings for score-specific -layout. - -@example -\layout @{ - indent = 2.0\cm - \context @{ \Staff - \override VerticalAxisGroup #'minimum-Y-extent = #'(-6 . 6) - @} - \context @{ \Voice - \override TextScript #'padding = #1.0 - \override Glissando #'thickness = #3 - @} -@} -@end example - - -@seealso -Notation Reference: -@ref{Changing context default settings}. - -Snippets: -@rlsr{Spacing}. - - -@node Breaks -@section Breaks - -@menu -* Line breaking:: -* Page breaking:: -* Optimal page breaking:: -* Optimal page turning:: -* Minimal page breaking:: -* Explicit breaks:: -* Using an extra voice for breaks:: -@end menu - - -@node Line breaking -@subsection Line breaking - -@cindex line breaks -@cindex breaking lines - -Line breaks are normally determined automatically. They are chosen -so that lines look neither cramped nor loose, and consecutive -lines have similar density. Occasionally you might want to -override the automatic breaks; you can do this by specifying -@code{\break}. This will force a line break at this point. However, -line breaks can only occur at the end of @q{complete} bars, i.e., -where there are no notes or tuplets left @q{hanging} over the bar -line. If you want to have a line break where there is no bar line, -you can force an invisible bar line by entering @code{\bar ""}, -although again there must be no notes left hanging over in any of -the staves at this point, or it will be ignored. - -The opposite command, @code{\noBreak}, forbids a line break at the -bar line where it is inserted. - -The most basic settings influencing line spacing are @code{indent} -and @code{line-width}. They are set in the @code{\layout} block. -They control the indentation of the first line of music, and the -lengths of the lines. - -If @code{ragged-right} is set to true in the @code{\layout} block, -then systems end at their natural horizontal length, instead of -being spread horizontally to fill the whole line. This is useful -for short fragments, and for checking how tight the natural -spacing is. - -@c TODO Check and add para on default for ragged-right - -The option @code{ragged-last} is similar to @code{ragged-right}, -but affects only the last line of the piece. - -@example -\layout @{ -indent = #0 -line-width = #150 -ragged-last = ##t -@} -@end example - - - -@cindex regular line breaks -@cindex four bar music. - -For line breaks at regular intervals use @code{\break} separated by -skips and repeated with @code{\repeat}. For example, this would -cause the following 28 measures (assuming 4/4 time) to be broken -every 4 measures, and only there: - -@example -<< \repeat unfold 7 @{ - s1 \noBreak s1 \noBreak - s1 \noBreak s1 \break @} - @emph{the real music} ->> -@end example - -@c TODO Check this -A linebreaking configuration can be saved as a @code{.ly} file -automatically. This allows vertical alignments to be stretched to -fit pages in a second formatting run. This is fairly new and -complicated. More details are available in -@rlsr{Spacing}. - - -@predefined -@funindex \break -@code{\break}, -@funindex \noBreak -@code{\noBreak}. -@endpredefined - - -@seealso -Internals Reference: -@rinternals{LineBreakEvent}. - -Snippets: -@rlsr{Spacing}. - - -@knownissues - -Line breaks can only occur if there is a @q{proper} bar line. A note -which is hanging over a bar line is not proper, such as - -@lilypond[quote,ragged-right,relative=2,fragment,verbatim] -c4 c2 << c2 {s4 \break } >> % this does nothing -c2 c4 | % a break here would work -c4 c2 c4 ~ \break % as does this break -c4 c2 c4 -@end lilypond - -This can be avoided by removing the @code{Forbid_line_break_engraver}. -Note that manually forced line breaks have to be added in parallel -with the music. - -@lilypond[quote,ragged-right,verbatim] -\new Voice \with { - \remove Forbid_line_break_engraver -} { - c4 c2 << c2 {s4 \break } >> % now the break is allowed - c2 c4 -} -@end lilypond - -Similarly, line breaks are normally forbidden when beams cross bar -lines. This behavior can be changed by setting -@code{\override Beam #'breakable = ##t}. - - -@node Page breaking -@subsection Page breaking - -The default page breaking may be overridden by inserting -@code{\pageBreak} or @code{\noPageBreak} commands. These commands are -analogous to @code{\break} and @code{\noBreak}. They should be -inserted at a bar line. These commands force and forbid a page-break -from happening. Of course, the @code{\pageBreak} command also forces -a line break. - -The @code{\pageBreak} and @code{\noPageBreak} commands may also be -inserted at top-level, between scores and top-level markups. - -There are also analogous settings to @code{ragged-right} and -@code{ragged-last} which have the same effect on vertical spacing: -@code{ragged-bottom} and @code{ragged-last-bottom}. If set to -@code{##t} the systems on all pages or just the last page -respectively will not be justified vertically. - -For more details see @ref{Vertical spacing}. - -Page breaks are computed by the @code{page-breaking} function. LilyPond -provides three algorithms for computing page breaks, -@code{ly:optimal-breaking}, @code{ly:page-turn-breaking} and -@code{ly:minimal-breaking}. The default is @code{ly:optimal-breaking}, -but the value can be changed in the @code{\paper} block: - -@example -\paper@{ - #(define page-breaking ly:page-turn-breaking) -@} -@end example - -@c TODO Check this -td -The old page breaking algorithm is called -@code{optimal-page-breaks}. If you are having trouble with the new page -breakers, you can enable the old one as a workaround. - -@funindex \bookpart - -When a book has many scores and pages, the page breaking problem may be -difficult to solve, requiring large processing time and memory. To ease -the page breaking process, @code{\bookpart} blocks are used to divide -the book into several parts: the page breaking occurs separately on each -part. Different page breaking functions may also be used in different -book parts. - -@example -\bookpart @{ - \header @{ - subtitle = "Preface" - @} - \paper @{ - %% In a part consisting mostly of text, - %% ly:minimal-breaking may be prefered - #(define page-breaking ly:minimal-breaking) - @} - \markup @{ @dots{} @} - @dots{} -@} -\bookpart @{ - %% In this part, consisting of music, the default optimal - %% page breaking function is used. - \header @{ - subtitle = "First movement" - @} - \score @{ @dots{} @} - @dots{} -@} -@end example - - -@predefined -@funindex \pageBreak -@code{\pageBreak}, -@funindex \noPageBreak -@code{\noPageBreak}. -@endpredefined - - -@seealso -Snippets: -@rlsr{Spacing}. - - -@node Optimal page breaking -@subsection Optimal page breaking - -@funindex ly:optimal-breaking - -The @code{ly:optimal-breaking} function is LilyPond's default method of -determining page breaks. It attempts to find a page breaking that minimizes -cramping and stretching, both horizontally and vertically. Unlike -@code{ly:page-turn-breaking}, it has no concept of page turns. - - -@seealso -Snippets: -@rlsr{Spacing}. - - -@node Optimal page turning -@subsection Optimal page turning - -@funindex ly:page-turn-breaking - -Often it is necessary to find a page breaking configuration so that there is -a rest at the end of every second page. This way, the musician can turn the -page without having to miss notes. The @code{ly:page-turn-breaking} function -attempts to find a page breaking minimizing cramping and stretching, but with -the additional restriction that it is only allowed to introduce page turns -in specified places. - -There are two steps to using this page breaking function. First, you -must enable it in the @code{\paper} block, as explained in @ref{Page -breaking}. Then you must tell the function where you would like to allow -page breaks. - -There are two ways to achieve the second step. First, you can specify each -potential page turn manually, by inserting @code{\allowPageTurn} into your -input file at the appropriate places. - -If this is too tedious, you can add a @code{Page_turn_engraver} to a Staff or -Voice context. The @code{Page_turn_engraver} will scan the context for -sections without notes (note that it does not scan for rests; it scans for -the absence of notes. This is so that single-staff polyphony with rests in one -of the parts does not throw off the @code{Page_turn_engraver}). When it finds -a sufficiently long section without notes, the @code{Page_turn_engraver} will -insert an @code{\allowPageTurn} at the final bar line in that section, unless -there is a @q{special} bar line (such as a double bar), in which case the -@code{\allowPageTurn} will be inserted at the final @q{special} bar line in -the section. - -@funindex minimumPageTurnLength -The @code{Page_turn_engraver} reads the context property -@code{minimumPageTurnLength} to determine how long a note-free section must -be before a page turn is considered. The default value for -@code{minimumPageTurnLength} is @code{#(ly:make-moment 1 1)}. If you want -to disable page turns, you can set it to something very large. - -@example -\new Staff \with @{ \consists "Page_turn_engraver" @} -@{ - a4 b c d | - R1 | % a page turn will be allowed here - a4 b c d | - \set Staff.minimumPageTurnLength = #(ly:make-moment 5 2) - R1 | % a page turn will not be allowed here - a4 b r2 | - R1*2 | % a page turn will be allowed here - a1 -@} -@end example - -@funindex minimumRepeatLengthForPageTurn -The @code{Page_turn_engraver} detects volta repeats. It will only allow a page -turn during the repeat if there is enough time at the beginning and end of the -repeat to turn the page back. The @code{Page_turn_engraver} can also disable -page turns if the repeat is very short. If you set the context property -@code{minimumRepeatLengthForPageTurn} then the @code{Page_turn_engraver} will -only allow turns in repeats whose duration is longer than this value. - -The page turning commands, @code{\pageTurn}, @code{\noPageTurn} and -@code{\allowPageTurn}, may also be used at top-level, between scores and -top-level markups. - - -@predefined -@funindex \pageTurn -@code{\pageTurn}, -@funindex \noPageTurn -@code{\noPageTurn}, -@funindex \allowPageTurn -@code{\allowPageTurn}. -@endpredefined - - -@seealso -Snippets: -@rlsr{Spacing}. - - -@knownissues - -There should only be one @code{Page_turn_engraver} in a score. If there is more -than one, they will interfere with each other. - - -@node Minimal page breaking -@subsection Minimal page breaking - -@funindex ly:minimal-breaking - -The @code{ly:minimal-breaking} function performs minimal computations to -calculate the page breaking: it fills a page with as many systems as -possible before moving to the next one. Thus, it may be preferred for -scores with many pages, where the other page breaking functions could be -too slow or memory demanding, or a lot of texts. It is enabled using: - -@example -\paper @{ - #(define page-breaking ly:minimal-breaking) -@} -@end example - - -@seealso -Snippets: -@rlsr{Spacing}. - - -@node Explicit breaks -@subsection Explicit breaks - -Lily sometimes rejects explicit @code{\break} and @code{\pageBreak} -commands. There are two commands to override this behavior: - -@example -\override NonMusicalPaperColumn #'line-break-permission = ##f -\override NonMusicalPaperColumn #'page-break-permission = ##f -@end example - -When @code{line-break-permission} is overridden to false, Lily will insert -line breaks at explicit @code{\break} commands and nowhere else. When -@code{page-break-permission} is overridden to false, Lily will insert -page breaks at explicit @code{\pageBreak} commands and nowhere else. - -@lilypond[quote,verbatim] -\paper { - indent = #0 - ragged-right = ##t - ragged-bottom = ##t -} - -\score { - \new Score \with { - \override NonMusicalPaperColumn #'line-break-permission = ##f - \override NonMusicalPaperColumn #'page-break-permission = ##f - } { - \new Staff { - \repeat unfold 2 { c'8 c'8 c'8 c'8 } \break - \repeat unfold 4 { c'8 c'8 c'8 c'8 } \break - \repeat unfold 6 { c'8 c'8 c'8 c'8 } \break - \repeat unfold 8 { c'8 c'8 c'8 c'8 } \pageBreak - \repeat unfold 8 { c'8 c'8 c'8 c'8 } \break - \repeat unfold 6 { c'8 c'8 c'8 c'8 } \break - \repeat unfold 4 { c'8 c'8 c'8 c'8 } \break - \repeat unfold 2 { c'8 c'8 c'8 c'8 } - } - } -} -@end lilypond - - -@seealso -Snippets: -@rlsr{Spacing}. - - -@node Using an extra voice for breaks -@subsection Using an extra voice for breaks - -Line- and page-breaking information usually appears within note entry directly. - -@example -\new Score @{ - \new Staff @{ - \repeat unfold 2 @{ c'4 c'4 c'4 c'4 @} - \break - \repeat unfold 3 @{ c'4 c'4 c'4 c'4 @} - @} -@} -@end example - -This makes @code{\break} and @code{\pageBreak} commands easy to enter but mixes -music entry with information that specifies how music should lay out -on the page. You can keep music entry and line- and page-breaking -information in two separate places by introducing an extra voice to -contain the breaks. This extra voice -contains only skips together with @code{\break}, @code{pageBreak} and other -breaking layout information. - -@lilypond[quote,verbatim] -\new Score { - \new Staff << - \new Voice { - s1 * 2 \break - s1 * 3 \break - s1 * 6 \break - s1 * 5 \break - } - \new Voice { - \repeat unfold 2 { c'4 c'4 c'4 c'4 } - \repeat unfold 3 { c'4 c'4 c'4 c'4 } - \repeat unfold 6 { c'4 c'4 c'4 c'4 } - \repeat unfold 5 { c'4 c'4 c'4 c'4 } - } - >> -} -@end lilypond - -This pattern becomes especially helpful when overriding -@code{line-break-system-details} and the other useful but long properties of -@code{NonMusicalPaperColumnGrob}, as explained in @ref{Vertical spacing}. - -@lilypond[quote,verbatim] -\new Score { - \new Staff << - \new Voice { - - \overrideProperty "Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 0)) - s1 * 2 \break - - \overrideProperty "Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 35)) - s1 * 3 \break - - \overrideProperty "Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 70)) - s1 * 6 \break - - \overrideProperty "Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 105)) - s1 * 5 \break - } - \new Voice { - \repeat unfold 2 { c'4 c'4 c'4 c'4 } - \repeat unfold 3 { c'4 c'4 c'4 c'4 } - \repeat unfold 6 { c'4 c'4 c'4 c'4 } - \repeat unfold 5 { c'4 c'4 c'4 c'4 } - } - >> -} -@end lilypond - - -@seealso -Notation Reference: -@ref{Vertical spacing}. - -Snippets: -@rlsr{Spacing}. - - -@node Vertical spacing -@section Vertical spacing - -@cindex vertical spacing -@cindex spacing, vertical - -Vertical spacing is controlled by three things: the amount of -space available (i.e., paper size and margins), the amount of -space between systems, and the amount of space between -staves inside a system. - -@menu -* Vertical spacing inside a system:: -* Vertical spacing between systems:: -* Explicit staff and system positioning:: -* Two-pass vertical spacing:: -* Vertical collision avoidance:: -@end menu - - -@node Vertical spacing inside a system -@subsection Vertical spacing inside a system - -@cindex distance between staves -@cindex staff distance -@cindex space between staves -@cindex space inside systems - -The height of each system is determined automatically. To prevent -staves from bumping into each other, some minimum distances are set. -By changing these, you can put staves closer together. This -reduces the amount of space each system requires, and may result -in having more systems per page. - -Normally staves are stacked vertically. To make staves maintain a -distance, their vertical size is padded. This is done with the -property @code{minimum-Y-extent}. When applied to a -@rinternals{VerticalAxisGroup}, it controls the size of a horizontal -line, such as a staff or a line of lyrics. @code{minimum-Y-extent} -takes a pair of numbers, so -if you want to make it smaller than its default @code{#'(-4 . 4)} -then you could set - -@example -\override Staff.VerticalAxisGroup #'minimum-Y-extent = #'(-3 . 3) -@end example - -@noindent -This sets the vertical size of the current staff to 3 staff spaces on -either side of the center staff line. The value @code{(-3 . 3)} is -interpreted as an interval, where the center line is the 0, so the -first number is generally negative. The numbers need not match; -for example, the staff can be made larger at the bottom by setting -it to @code{(-6 . 4)}. - -After page breaks are determined, the vertical spacing within each -system is reevaluated in order to fill the page more evenly; if a page -has space left over, systems are stretched in order to fill that space. -The amount of stretching can be configured though the @code{max-stretch} -property of the @rinternals{VerticalAlignment} grob. By default, -@code{max-stretch} is set to zero, disabling stretching. To enable -stretching, a sane value for @code{max-stretch} -is @code{ly:align-interface::calc-max-stretch}. - -In some situations, you may want to stretch most of a system while -leaving some parts fixed. For example, if a piano part occurs in the -middle of an orchestral score, you may want to leave the piano staves -close to each other while stretching the rest of the score. The -@code{keep-fixed-while-stretching} property of -@rinternals{VerticalAxisGroup} can be used to achieve this. When set -to @code{##t}, this property keeps its staff (or line of lyrics) from -moving relative to the one directly above it. In the example above, -you would override @code{keep-fixed-while-stretching} to @code{##t} in -the second piano staff: - -@lilypond[verbatim] -#(set-default-paper-size "a6") -#(set-global-staff-size 14.0) - -\book { -\paper { - ragged-last-bottom = ##f -} - -\new Score \with -{ - \override VerticalAlignment #'max-stretch = #ly:align-interface::calc-max-stretch -} -{ -\new GrandStaff -<< - \new StaffGroup - << - \new Staff {c' d' e' f'} - \new Staff {c' d' e' f'} - \new Staff {c' d' e' f'} - >> - - \new PianoStaff - << - \new Staff {c' d' e' f'} - \new Staff \with { - \override VerticalAxisGroup #'keep-fixed-while-stretching = ##t - } - {c' d' e' f'} - >> - - \new StaffGroup - << - \new Staff {c' d' e' f'} - \new Staff {c' d' e' f'} - >> ->> -} -} -@end lilypond - -Vertical alignment of staves is handled by the -@code{VerticalAlignment} object. The context parameters -specifying the vertical extent are described in connection with -the @code{Axis_group_engraver}. - - -@seealso -Snippets: -@rlsr{Spacing}. - -@c @lsr{spacing,page-spacing.ly}, -@c @lsr{spacing,alignment-vertical-spacing.ly}. - -Internals Reference: -@rinternals{VerticalAlignment}, -@rinternals{Axis_group_engraver}. - - -@node Vertical spacing between systems -@subsection Vertical spacing between systems - -Space between systems are controlled by four @code{\paper} variables, - -@example -\paper @{ - between-system-space = 1.5\cm - between-system-padding = #1 - ragged-bottom=##f - ragged-last-bottom=##f -@} -@end example - -When only a couple of flat systems are placed on a page, the resulting -vertical spacing may be non-elegant: one system at the top of the page, -and the other at the bottom, with a huge gap between them. To avoid this -situation, the space added between the systems can be limited. This -feature is activated by setting to @code{#t} the -@code{page-limit-inter-system-space} variable in the @code{\paper} -block. The paper variable @code{page-limit-inter-system-space-factor} -determines how much the space can be increased: for instance, the value -@code{1.3} means that the space can be 30% larger than what it would be -on a ragged-bottom page. - -In the following example, if the inter system space were not limited, -the second system of page 1 would be placed at the page bottom. By -activating the space limitation, the second system is placed closer to -the first one. By setting @code{page-limit-inter-system-space-factor} to -@code{1}, the spacing would the same as on a ragged-bottom page, like -the last one. - -@lilypond[verbatim] -#(set-default-paper-size "a6") -\book { - \paper { - page-limit-inter-system-space = ##t - page-limit-inter-system-space-factor = 1.3 - - oddFooterMarkup = \markup "page bottom" - evenFooterMarkup = \markup "page bottom" - oddHeaderMarkup = \markup \fill-line { - "page top" \fromproperty #'page:page-number-string } - evenHeaderMarkup = \markup \fill-line { - "page top" \fromproperty #'page:page-number-string } - } - \new Staff << \repeat unfold 4 { g'4 g' g' g' \break } - { s1*2 \pageBreak } >> -} -@end lilypond - - -@seealso -Snippets: -@rlsr{Spacing}. - - -@node Explicit staff and system positioning -@subsection Explicit staff and system positioning - -One way to understand the @code{VerticalAxisGroup} and @code{\paper} -settings explained in the previous two sections is as a collection of -different settings that primarily concern the amount of vertical padding -different staves and systems running down the page. - -It is possible to approach vertical spacing in a different way using -@code{NonMusicalPaperColumn #'line-break-system-details}. Where -@code{VerticalAxisGroup} and @code{\paper} settings specify vertical padding, -@code{NonMusicalPaperColumn #'line-break-system-details} specifies exact -vertical positions on the page. - -@code{NonMusicalPaperColumn #'line-break-system-details} accepts an associative -list of five different settings: - -@itemize -@item @code{X-offset} -@item @code{Y-offset} -@item @code{alignment-offsets} -@item @code{alignment-extra-space} -@item @code{fixed-alignment-extra-space} -@end itemize - -Grob overrides, including the overrides for @code{NonMusicalPaperColumn} -below, can occur in any of three different places in an input file: - -@itemize -@item in the middle of note entry directly -@item in a @code{\context} block -@item in the @code{\with} block -@end itemize - -When we override @code{NonMusicalPaperColumn}, we use the usual -@code{\override} command in @code{\context} blocks and in the -@code{\with} block. On the other hand, when we override -@code{NonMusicalPaperColumn} in the middle of note entry, -use the special @code{\overrideProperty} command. Here are some -example @code{NonMusicalPaperColumn} overrides with the special -@code{\overrideProperty} command: - -@example -\overrideProperty NonMusicalPaperColumn - #'line-break-system-details #'((X-offset . 20)) - -\overrideProperty NonMusicalPaperColumn - #'line-break-system-details #'((Y-offset . 40)) - -\overrideProperty NonMusicalPaperColumn - #'line-break-system-details #'((X-offset . 20) (Y-offset . 40)) - -\overrideProperty NonMusicalPaperColumn - #'line-break-system-details #'((alignment-offsets . (0 -15))) - -\overrideProperty NonMusicalPaperColumn - #'line-break-system-details #'((X-offset . 20) (Y-offset . 40) - (alignment-offsets . (0 -15))) -@end example - -To understand how each of these different settings work, we begin -by looking at an example that includes no overrides at all. - -@c \book { } is required in these examples to ensure the spacing -@c overrides can be seen between systems. -np - -@lilypond[quote] -\header { tagline = ##f } -\paper { left-margin = 0\mm } -\book { - \score { - << - \new Staff << - \new Voice { - s1*5 \break - s1*5 \break - s1*5 \break - } - \new Voice { \repeat unfold 15 { c'4 c' c' c' } } - >> - \new Staff { - \repeat unfold 15 { d'4 d' d' d' } - } - >> - } -} -@end lilypond - -This score isolates line- and page-breaking information in a dedicated -voice. This technique of creating a breaks voice will help keep layout -separate from music entry as our example becomes more complicated. -See @ref{Using an extra voice for breaks}. - -Explicit @code{\breaks} evenly divide the music into six measures per -line. Vertical spacing results from LilyPond's defaults. To set -the vertical startpoint of each system explicitly, we can set -the @code{Y-offset} pair in the @code{line-break-system-details} -attribute of the @code{NonMusicalPaperColumn} grob: - -@lilypond[quote] -\header { tagline = ##f } -\paper { left-margin = 0\mm } -\book { - \score { - << - \new Staff << - \new Voice { - \overrideProperty #"Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 0)) - s1*5 \break - \overrideProperty #"Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 40)) - s1*5 \break - \overrideProperty #"Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 80)) - s1*5 \break - } - \new Voice { \repeat unfold 15 { c'4 c' c' c' } } - >> - \new Staff { - \repeat unfold 15 { d'4 d' d' d' } - } - >> - } -} -@end lilypond - -Note that @code{line-break-system-details} takes an associative list of -potentially many values, but that we set only one value here. Note, -too, that the @code{Y-offset} property here determines the exact vertical -position on the page at which each new system will render. - -Now that we have set the vertical startpoint of each system -explicitly, we can also set the vertical startpoint of each staff -within each system manually. We do this using the @code{alignment-offsets} -subproperty of @code{line-break-system-details}. - -@lilypond[quote] -\header { tagline = ##f } -\paper { left-margin = 0\mm } -\book { - \score { - << - \new Staff << - \new Voice { - \overrideProperty #"Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 20) - (alignment-offsets . (0 -15))) - s1*5 \break - \overrideProperty #"Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 60) - (alignment-offsets . (0 -15))) - s1*5 \break - \overrideProperty #"Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 100) - (alignment-offsets . (0 -15))) - s1*5 \break - } - \new Voice { \repeat unfold 15 { c'4 c' c' c' } } - >> - \new Staff { - \repeat unfold 15 { d'4 d' d' d' } - } - >> - } -} -@end lilypond - -Note that here we assign two different values to the -@code{line-break-system-details} attribute of the -@code{NonMusicalPaperColumn} grob. Though the -@code{line-break-system-details} attribute alist accepts many -additional spacing parameters (including, for example, a corresponding -@code{X-offset} pair), we need only set the @code{Y-offset} and -@code{alignment-offsets} pairs to control the vertical startpoint of -every system and every staff. Finally, note that @code{alignment-offsets} -specifies the vertical positioning of staves but not of staff groups. - -@lilypond[quote] -\header { tagline = ##f } -\paper { left-margin = 0\mm } -\book { - \score { - << - \new Staff << - \new Voice { - \overrideProperty #"Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 0) - (alignment-offsets . (0 -30 -40))) - s1*5 \break - \overrideProperty #"Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 60) - (alignment-offsets . (0 -10 -20))) - s1*5 \break - \overrideProperty #"Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 100) - (alignment-offsets . (0 -10 -40))) - s1*5 \break - } - \new Voice { \repeat unfold 15 { c'4 c' c' c' } } - >> - \new StaffGroup << - \new Staff { \repeat unfold 15 { d'4 d' d' d' } } - \new Staff { \repeat unfold 15 { e'4 e' e' e' } } - >> - >> - } -} -@end lilypond - -Some points to consider: - -@itemize -@item When using @code{alignment-offsets}, lyrics count as a staff. - -@item The units of the numbers passed to @code{X-offset}, -@code{Y-offset} and @code{alignment-offsets} are interpreted as multiples -of the distance between adjacent staff lines. Positive values move staves -and lyrics up, negative values move staves and lyrics down. - -@item Because the @code{NonMusicalPaperColumn #'line-break-system-details} -settings given here allow the positioning of staves and systems anywhere -on the page, it is possible to violate paper or margin boundaries or even -to print staves or systems on top of one another. Reasonable values -passed to these different settings will avoid this. -@end itemize - - -@seealso -Snippets: -@rlsr{Spacing}. - - -@node Two-pass vertical spacing -@subsection Two-pass vertical spacing - -@warning{Two-pass vertical spacing is deprecated and will be removed in -a future version of LilyPond. Systems are now stretched automatically -in a single pass. See @ref{Vertical spacing inside a system}.} - -In order to automatically stretch systems so that they should fill the -space left on a page, a two-pass technique can be used: - -@enumerate -@item In the first pass, the amount of vertical space used to increase -the height of each system is computed and dumped to a file. -@item In the second pass, spacing inside the systems are -stretched according to the data in the page layout file. -@end enumerate - -The @code{ragged-bottom} property adds space between systems, while -the two-pass technique adds space between staves inside a system. - -To allow this behavior, a @code{tweak-key} variable has to be set in -each score @code{\layout} block, and the tweaks included in each score -music, using the @code{\scoreTweak} music function. - -@quotation -@verbatim -%% include the generated page layout file: -\includePageLayoutFile - -\score { - \new StaffGroup << - \new Staff << - %% Include this score tweaks: - \scoreTweak "scoreA" - { \clef french c''1 \break c''1 } - >> - \new Staff { \clef soprano g'1 g'1 } - \new Staff { \clef mezzosoprano e'1 e'1 } - \new Staff { \clef alto g1 g1 } - \new Staff { \clef bass c1 c1 } - >> - \header { - piece = "Score with tweaks" - } - %% Define how to name the tweaks for this score: - \layout { #(define tweak-key "scoreA") } -} -@end verbatim -@end quotation - -For the first pass, the @code{dump-tweaks} option should be set to -generate the page layout file. - -@example -lilypond -dbackend=null -d dump-tweaks .ly -lilypond .ly -@end example - - -@seealso -Snippets: -@rlsr{Spacing}. - - -@node Vertical collision avoidance -@subsection Vertical collision avoidance - -@funindex outside-staff-priority -@funindex outside-staff-padding -@funindex outside-staff-horizontal-padding - -Intuitively, there are some objects in musical notation that belong -to the staff and there are other objects that should be placed outside -the staff. Objects belonging outside the staff include things such as -rehearsal marks, text and dynamic markings (from now on, these will -be called outside-staff objects). LilyPond's rule for the -vertical placement of outside-staff objects is to place them as close -to the staff as possible but not so close that they collide with -another object. - -LilyPond uses the @code{outside-staff-priority} property to determine -whether a grob is an outside-staff object: if @code{outside-staff-priority} -is a number, the grob is an outside-staff object. In addition, -@code{outside-staff-priority} tells LilyPond in which order the objects -should be placed. - -First, LilyPond places all the objects that do not belong outside -the staff. Then it sorts the outside-staff objects according to their -@code{outside-staff-priority} (in increasing order). One by one, LilyPond -takes the outside-staff objects and places them so that they do -not collide with any objects that have already been placed. That -is, if two outside-staff grobs are competing for the same space, the one -with the lower @code{outside-staff-priority} will be placed closer to -the staff. - -@lilypond[quote,ragged-right,relative=2,fragment,verbatim] -c4_"Text"\pp -r2. -\once \override TextScript #'outside-staff-priority = #1 -c4_"Text"\pp % this time the text will be closer to the staff -r2. -% by setting outside-staff-priority to a non-number, -% we disable the automatic collision avoidance -\once \override TextScript #'outside-staff-priority = ##f -\once \override DynamicLineSpanner #'outside-staff-priority = ##f -c4_"Text"\pp % now they will collide -@end lilypond - -The vertical padding between an outside-staff object and the -previously-positioned grobs can be controlled with -@code{outside-staff-padding}. - -@lilypond[quote,ragged-right,relative=2,fragment,verbatim] -\once \override TextScript #'outside-staff-padding = #0 -a'^"This text is placed very close to the note" -\once \override TextScript #'outside-staff-padding = #3 -c^"This text is padded away from the previous text" -c^"This text is placed close to the previous text" -@end lilypond - - -By default, outside-staff objects are placed only to avoid -a horizontal collision with previously-positioned grobs. This -can lead to situations in which objects are placed very close to each -other horizontally. The vertical spacing between staffs can -also be set so that outside staff objects are interleaved. -Setting @code{outside-staff-horizontal-padding} -causes an object to be offset vertically so that such a situation -doesn't occur. - -@lilypond[quote,ragged-right,relative=2,fragment,verbatim] -% the markup is too close to the following note -c4^"Text" -c4 -c''2 -% setting outside-staff-horizontal-padding fixes this -R1 -\once \override TextScript #'outside-staff-horizontal-padding = #1 -c,,4^"Text" -c4 -c''2 -@end lilypond - - -@seealso -Snippets: -@rlsr{Spacing}. - - -@node Horizontal spacing -@section Horizontal spacing - -@cindex horizontal spacing -@cindex spacing, horizontal - -@menu -* Horizontal spacing overview:: -* New spacing area:: -* Changing horizontal spacing:: -* Line length:: -* Proportional notation:: -@end menu - - -@node Horizontal spacing overview -@subsection Horizontal spacing overview - -The spacing engine translates differences in durations into stretchable -distances (@q{springs}) of differing lengths. Longer durations get -more space, shorter durations get less. The shortest durations get a -fixed amount of space (which is controlled by -@code{shortest-duration-space} in the @rinternals{SpacingSpanner} -object). The longer the duration, the more space it gets: doubling a -duration adds a fixed amount (this amount is controlled by -@code{spacing-increment}) of space to the note. - -For example, the following piece contains lots of half, quarter, and -8th notes; the eighth note is followed by 1 note head width (NHW). -The quarter note is followed by 2 NHW, the half by 3 NHW, etc. - -@lilypond[quote,fragment,verbatim,relative=1] -c2 c4. c8 c4. c8 c4. c8 c8 -c8 c4 c4 c4 -@end lilypond - -Normally, @code{spacing-increment} is set to 1.2 staff space, which is -approximately the width of a note head, and -@code{shortest-duration-space} is set to 2.0, meaning that the -shortest note gets 2.4 staff space (2.0 times the -@code{spacing-increment}) of horizontal space. This space is counted -from the left edge of the symbol, so the shortest notes are generally -followed by one NHW of space. - -If one would follow the above procedure exactly, then adding a single -32nd note to a score that uses 8th and 16th notes, would widen up the -entire score a lot. The shortest note is no longer a 16th, but a 32nd, -thus adding 1 NHW to every note. To prevent this, the shortest -duration for spacing is not the shortest note in the score, but rather -the one which occurs most frequently. - - -The most common shortest duration is determined as follows: in every -measure, the shortest duration is determined. The most common shortest -duration is taken as the basis for the spacing, with the stipulation -that this shortest duration should always be equal to or shorter than -an 8th note. The shortest duration is printed when you run -@code{lilypond} with the @code{--verbose} option. - -These durations may also be customized. If you set the -@code{common-shortest-duration} in @rinternals{SpacingSpanner}, then -this sets the base duration for spacing. The maximum duration for this -base (normally an 8th), is set through @code{base-shortest-duration}. - -@funindex common-shortest-duration -@funindex base-shortest-duration -@funindex stem-spacing-correction -@funindex spacing - -Notes that are even shorter than the common shortest note are -followed by a space that is proportional to their duration relative to -the common shortest note. So if we were to add only a few 16th notes -to the example above, they would be followed by half a NHW: - -@lilypond[quote,fragment,verbatim,relative=2] -c2 c4. c8 c4. c16[ c] c4. c8 c8 c8 c4 c4 c4 -@end lilypond - - -In the introduction (see @rlearning{Engraving}), it was explained that stem -directions influence spacing. This is controlled with the -@code{stem-spacing-correction} property in the -@rinternals{NoteSpacing}, object. These are generated for every -@rinternals{Voice} context. The @code{StaffSpacing} object -(generated in @rinternals{Staff} context) contains the same property -for controlling the stem/bar line spacing. The following example shows -these corrections, once with default settings, and once with -exaggerated corrections: - -@lilypond[quote,ragged-right] -{ - c'4 e''4 e'4 b'4 | - b'4 e''4 b'4 e''4| - \override Staff.NoteSpacing #'stem-spacing-correction = #1.5 - \override Staff.StaffSpacing #'stem-spacing-correction = #1.5 - c'4 e''4 e'4 b'4 | - b'4 e''4 b'4 e''4| -} -@end lilypond - -Proportional notation is supported; see @ref{Proportional notation}. - - -@seealso -Snippets: -@rlsr{Spacing}. - -Internals Reference: -@rinternals{SpacingSpanner}, -@rinternals{NoteSpacing}, -@rinternals{StaffSpacing}, -@rinternals{NonMusicalPaperColumn}. - - -@knownissues - -There is no convenient mechanism to manually override spacing. The -following work-around may be used to insert extra space into a score, -adjusting the padding value as necessary. -@example - \override Score.NonMusicalPaperColumn #'padding = #10 -@end example - -No work-around exists for decreasing the amount of space. - - -@node New spacing area -@subsection New spacing area - -New sections with different spacing parameters can be started with -@code{newSpacingSection}. This is useful when there are -sections with a different notions of long and short notes. - -In the following example, the time signature change introduces a new -section, and hence the 16ths notes are spaced wider. - -@lilypond[relative,fragment,verbatim,quote] -\time 2/4 -c4 c8 c -c8 c c4 c16[ c c8] c4 -\newSpacingSection -\time 4/16 -c16[ c c8] -@end lilypond - -The @code{\newSpacingSection} command creates a new -@code{SpacingSpanner} object, and hence new @code{\override}s -may be used in that location. - - -@seealso -Snippets: -@rlsr{Spacing}. - -Internals Reference: -@rinternals{SpacingSpanner}. - - -@node Changing horizontal spacing -@subsection Changing horizontal spacing - -Horizontal spacing may be altered with the -@code{base-shortest-duration} property. Here -we compare the same music; once without altering -the property, and then altered. Larger values -of @code{ly:make-moment} will produce smaller -music. Note that @code{ly:make-moment} constructs -a duration, so @code{1 4} is a longer duration -than @code{1 16}. - -@lilypond[verbatim,line-width=12\cm] -\score { - \relative c'' { - g4 e e2 | f4 d d2 | c4 d e f | g4 g g2 | - g4 e e2 | f4 d d2 | c4 e g g | c,1 | - d4 d d d | d4 e f2 | e4 e e e | e4 f g2 | - g4 e e2 | f4 d d2 | c4 e g g | c,1 | - } -} -@end lilypond - -@lilypond[verbatim,line-width=12\cm] -\score { - \relative c'' { - g4 e e2 | f4 d d2 | c4 d e f | g4 g g2 | - g4 e e2 | f4 d d2 | c4 e g g | c,1 | - d4 d d d | d4 e f2 | e4 e e e | e4 f g2 | - g4 e e2 | f4 d d2 | c4 e g g | c,1 | - } - \layout { - \context { - \Score - \override SpacingSpanner - #'base-shortest-duration = #(ly:make-moment 1 16) - } - } -} -@end lilypond - - -@snippets - -By default, spacing in tuplets depends on various non-duration -factors (such as accidentals, clef changes, etc). To disregard -such symbols and force uniform equal-duration spacing, use -@code{Score.SpacingSpanner #'uniform-stretching}. This -property can only be changed at the beginning of a score, - -@lilypond[quote,ragged-right,relative=2,fragment,verbatim] -\new Score \with { - \override SpacingSpanner #'uniform-stretching = ##t -} << - \new Staff{ - \times 4/5 { - c8 c8 c8 c8 c8 - } - c8 c8 c8 c8 - } - \new Staff{ - c8 c8 c8 c8 - \times 4/5 { - c8 c8 c8 c8 c8 - } - } ->> -@end lilypond - -When @code{strict-note-spacing} is set, notes are spaced without -regard for clefs, bar lines, and grace notes, - -@lilypond[quote,ragged-right,relative=2,fragment,verbatim] -\override Score.SpacingSpanner #'strict-note-spacing = ##t -\new Staff { c8[ c \clef alto c \grace { c16[ c] } c8 c c] c32[ c32] } -@end lilypond - - -@seealso -Snippets: -@rlsr{Spacing}. - - -@node Line length -@subsection Line length - -@cindex page breaks -@cindex breaking pages - -@funindex indent -@funindex line-width -@funindex ragged-right -@funindex ragged-last - -@c Although line-width can be set in \layout, it should be set in paper -@c block, to get page layout right. -@c Setting indent in \paper block makes not much sense, but it works. - -@c Bit verbose and vague, use examples? -The most basic settings influencing the spacing are @code{indent} and -@code{line-width}. They are set in the @code{\layout} block. They -control the indentation of the first line of music, and the lengths of -the lines. - -If @code{ragged-right} is set to true in the @code{\layout} block, then -systems ends at their natural horizontal length, instead of being spread -horizontally to fill the whole line. This is useful for -short fragments, and for checking how tight the natural spacing is. - -@cindex page layout -@cindex vertical spacing - -The option @code{ragged-last} is similar to @code{ragged-right}, but -only affects the last line of the piece. No restrictions are put on -that line. The result is similar to formatting text paragraphs. In a -paragraph, the last line simply takes its natural horizontal length. -@c Note that for text there are several options for the last line. -@c While Knuth TeX uses natural length, lead typesetters use the same -@c stretch as the previous line. eTeX uses \lastlinefit to -@c interpolate between both these solutions. - -@example -\layout @{ - indent = #0 - line-width = #150 - ragged-last = ##t -@} -@end example - - -@seealso -Snippets: -@rlsr{Spacing}. - - -@node Proportional notation -@subsection Proportional notation - -LilyPond supports proportional notation, a type of horizontal spacing -in which each note consumes an amount of horizontal space exactly -equivalent to its rhythmic duration. This type of proportional spacing -is comparable to horizontal spacing on top of graph paper. Some late -20th- and early 21st-century scores use proportional notation to -clarify complex rhythmic relationships or to facilitate the placement -of timelines or other graphics directly in the score. - -LilyPond supports five different settings for proportional notation, -which may be used together or alone: - -@itemize -@item @code{proportionalNotationDuration} -@item @code{uniform-stretching} -@item @code{strict-note-spacing} -@item @code{\remove Separating_line_group_engraver} -@item @code{\override PaperColumn #'used = ##t} -@end itemize - -In the examples that follow, we explore these five different -proportional notation settings and examine how these settings interact. - -We start with the following one-measure example, which uses classical -spacing with ragged-right turned on. - -@lilypond[quote,verbatim,ragged-right] -\new Score << - \new RhythmicStaff { - c'2 - c'16 c'16 c'16 c'16 - \times 4/5 { - c'16 c'16 c'16 c'16 c'16 - } - } ->> -@end lilypond - -Notice that the half note which begins the measure takes up far less -than half of the horizontal space of the measure. Likewise, the -sixteenth notes and sixteenth-note quintuplets (or twentieth notes) -which end the measure together take up far more than half the -horizontal space of the measure. - -In classical engraving, this spacing may be exactly what we want -because we can borrow horizontal space from the half note and conserve -horizontal space across the measure as a whole. - -On the other hand, if we want to insert a measured timeline or other -graphic above or below our score, we need proportional notation. We -turn proportional notation on with the proportionalNotationDuration -setting. - -@lilypond[quote,verbatim,ragged-right] -\new Score \with { - proportionalNotationDuration = #(ly:make-moment 1 20) -} << - \new RhythmicStaff { - c'2 - c'16 c'16 c'16 c'16 - \times 4/5 { - c'16 c'16 c'16 c'16 c'16 - } - } ->> -@end lilypond - -The half note at the beginning of the measure and the faster notes in -the second half of the measure now occupy equal amounts of horizontal -space. We could place a measured timeline or graphic above or below -this example. - -The @code{proportionalNotationDuration} setting is a context setting that -lives in @code{Score}. Recall that context settings appear in one of -three locations in our input file -- in a @code{\with} block, in a -@code{\context} block, or directly in music entry -preceded by the @code{\set} command. As with all -context settings, users can pick which of the three different -locations they would like to set @code{proportionalNotationDuration}. - -The @code{proportionalNotationDuration} setting takes a single argument, -which is the reference duration against which all music will be -spaced. The LilyPond Scheme function make-moment takes two arguments --- a numerator and denominator which together express some fraction of -a whole note. The call @code{#(ly:make-moment 1 20)} therefore produces a -reference duration of a twentieth note. The values -@code{#(ly:make-moment 1 16)}, @code{#(ly:make-moment 1 8)}, and -@code{#(ly:make-moment 3 97)} are all possible as well. - -How do we select the right reference duration to pass to -@code{proportionalNotationDuration}? Usually by a process of trial and error, -beginning with a duration close to the fastest (or smallest) duration -in the piece. Smaller reference durations space music loosely; larger -reference durations space music tightly. - -@lilypond[quote,verbatim,ragged-right] -\new Score \with { - proportionalNotationDuration = #(ly:make-moment 1 8) -} << - \new RhythmicStaff { - c'2 - c'16 c'16 c'16 c'16 - \times 4/5 { - c'16 c'16 c'16 c'16 c'16 - } - } ->> - -\new Score \with { - proportionalNotationDuration = #(ly:make-moment 1 16) -} << - \new RhythmicStaff { - c'2 - c'16 c'16 c'16 c'16 - \times 4/5 { - c'16 c'16 c'16 c'16 c'16 - } - } ->> - -\new Score \with { - proportionalNotationDuration = #(ly:make-moment 1 32) -} << - \new RhythmicStaff { - c'2 - c'16 c'16 c'16 c'16 - \times 4/5 { - c'16 c'16 c'16 c'16 c'16 - } - } ->> -@end lilypond - -Note that too large a reference duration -- such as the eighth note, -above -- spaces music too tightly and can cause note head collisions. -Note also that proportional notation in general takes up more -horizontal space that does classical spacing. Proportional spacing -provides rhythmic clarity at the expense of horizontal space. - -Next we examine how to optimally space overlapping tuplets. - -We start by examining what happens to our original example, with -classical spacing, when we add a second staff with a different type of -tuplet. - -@lilypond[quote,verbatim,ragged-right] -\new Score << - \new RhythmicStaff { - c'2 - c'16 c'16 c'16 c'16 - \times 4/5 { - c'16 c'16 c'16 c'16 c'16 - } - } - \new RhythmicStaff { - \times 8/9 { - c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 - } - } ->> -@end lilypond - -The spacing is bad because the evenly notes of the bottom staff do not -stretch uniformly. Classical engraving includes very few complex -triplets and so classical engraving rules can generate this type of -result. Setting @code{proportionalNotationDuration} remedies this -situation considerably. - -@lilypond[quote,verbatim,ragged-right] -\new Score \with { - proportionalNotationDuration = #(ly:make-moment 1 20) -} << - \new RhythmicStaff { - c'2 - c'16 c'16 c'16 c'16 - \times 4/5 { - c'16 c'16 c'16 c'16 c'16 - } - } - \new RhythmicStaff { - \times 8/9 { - c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 - } - } ->> -@end lilypond - -But if we look very carefully we can see that notes of the second half -of the 9-tuplet space ever so slightly more widely than do the notes -of the first half of the 9-tuplet. To ensure uniform stretching, we -turn on @code{uniform-stretching}, which is a property of -@code{SpacingSpanner}. - -@lilypond[quote,verbatim,ragged-right] -\new Score \with { - proportionalNotationDuration = #(ly:make-moment 1 20) - \override SpacingSpanner #'uniform-stretching = ##t -} << - \new RhythmicStaff { - c'2 - c'16 c'16 c'16 c'16 - \times 4/5 { - c'16 c'16 c'16 c'16 c'16 - } - } - \new RhythmicStaff { - \times 8/9 { - c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 - } - } ->> -@end lilypond - -Our two-staff example now spaces exactly, our rhythmic -relationships are visually clear, and we can include a measured -timeline or graphic if we want. - -Note that the LilyPond's proportional notation package expects -that all proportional scores set the SpacingSpanner's -'uniform-stretching attribute to ##t. Setting -proportionalNotationDuration without also setting the -SpacingSpanner's 'uniform-stretching attribute to ##t will, for -example, cause Skips to consume an incorrect amount of horizontal -space. - -The SpacingSpanner is an abstract grob that lives in the Score -context. As with our settings of proportionalNotationDuration, -overrides to the SpacingSpanner can occur in any of three -different places in our input file – in the Score \with block, in -a Score \context block, or in note entry directly. - -There is by default only one @code{SpacingSpanner} per @code{Score}. This -means that, by default, @code{uniform-stretching} is either turned on for the -entire score or turned off for the entire score. We can, however, -override this behavior and turn on different spacing features at -different places in the score. We do this with the command -@code{\newSpacingSection}. See @ref{New spacing area}, for more info. - -Next we examine the effects of the @code{Separating_line_group_engraver} and -see why proportional scores frequently remove this engraver. The following -example shows that there is a small amount of @qq{preferatory} space -just before the first note in each system. - -@lilypond[quote,verbatim,ragged-right] -\paper { - indent = #0 -} - -\new Staff { - c'1 - \break - c'1 -} -@end lilypond - - -The amount of this preferatory space is the same whether after a time -signature, a key signature or a clef. @code{Separating_line_group_engraver} -is responsible for this space. Removing @code{Separating_line_group_engraver} -reduces this space to zero. - -@lilypond[quote,verbatim,ragged-right] -\paper { - indent = #0 -} - -\new Staff \with { - \remove Separating_line_group_engraver -} { - c'1 - \break - c'1 -} -@end lilypond - -Nonmusical elements like time signatures, key signatures, clefs and -accidentals are problematic in proportional notation. None of these -elements has rhythmic duration. But all of these elements consume -horizontal space. Different proportional scores approach these -problems differently. - -It may be possible to avoid spacing problems with key signatures -simply by not having any. This is a valid option since most -proportional scores are contemporary music. The same may be true -of time signatures, especially for those scores -that include a measured timeline or other graphic. But these scores -are exceptional and most proportional scores include at least some -time signatures. Clefs and accidentals are even more essential. - -So what strategies exist for spacing nonmusical elements in a -proportional context? One good option is the @code{strict-note-spacing} -property of @code{SpacingSpanner}. Compare the two scores below: - -@lilypond[quote,verbatim,ragged-right] -\new Staff { - \set Score.proportionalNotationDuration = #(ly:make-moment 1 16) - c''8 - c''8 - c''8 - \clef alto - d'8 - d'2 -} - -\new Staff { - \set Score.proportionalNotationDuration = #(ly:make-moment 1 16) - \override Score.SpacingSpanner #'strict-note-spacing = ##t - c''8 - c''8 - c''8 - \clef alto - d'8 - d'2 -} -@end lilypond - -Both scores are proportional, but the spacing in the first score -is too loose because of the clef change. The spacing of the second -score remains strict, however, because strict-note-spacing is -turned on. Turning on strict-note-spacing causes the width of -time signatures, key signatures, clefs and accidentals to play no -part in the spacing algorithm. - -In addition to the settings given here, there are other settings -that frequently appear in proportional scores. These include: - -@itemize -@item @code{\override SpacingSpanner #'strict-grace-spacing = ##t} -@item @code{tupletFullLength = ##t} -@item @code{\override Beam #'breakable = ##t} -@item @code{\override Glissando #'breakable = ##t} -@item @code{\override TextSpanner #'breakable = ##t} -@item @code{\remove Forbid_line_break_engraver in the Voice context} -@end itemize - -These settings space grace notes strictly, extend tuplet brackets to -mark both rhythmic start- and stop-points, and allow spanning elements -to break across systems and pages. See the respective parts of the manual -for these related settings. - - -@seealso -Notation Reference: -@ref{New spacing area}. - -Snippets: -@rlsr{Spacing}. - - -@node Fitting music onto fewer pages -@section Fitting music onto fewer pages - -Sometimes you can end up with one or two staves on a second -(or third, or fourth...) page. This is annoying, especially -if you look at previous pages and it looks like there is plenty -of room left on those. - -When investigating layout issues, @code{annotate-spacing} is an -invaluable tool. This command prints the values of various layout -spacing variables; for more details see the following section, -@ref{Displaying spacing}. - -@menu -* Displaying spacing:: -* Changing spacing:: -@end menu - - -@node Displaying spacing -@subsection Displaying spacing - -@funindex annotate-spacing -@cindex spacing, display of layout - -To graphically display the dimensions of vertical layout variables -that may be altered for page formatting, set -@code{annotate-spacing} in the @code{\paper} block: - -@c need to have \book{} otherwise we get the separate systems. -hwn -@lilypond[verbatim,quote] -#(set-default-paper-size "a6" 'landscape) -\book { - \score { { c4 } } - \paper { annotate-spacing = ##t } -} -@end lilypond - - -@noindent -All layout dimensions are displayed in staff-spaces, regardless -of the units specified in the @code{\paper} or @code{\layout} block. -In the above example, @code{paper-height} has a value of 59.75 -@code{staff-spaces}, and the @code{staff-size} is 20 points (the -default value). Note that: - -@multitable {1 staff-space} {staff-size)/4 * (25.4/72.27) mm} - -@item 1 point -@tab = (25.4/72.27) mm - -@item 1 staff-space -@tab = (@code{staff-size})/4 pts -@item -@tab = (@code{staff-size})/4 * (25.4/72.27) mm - -@end multitable - -@noindent -In this case, one @code{staff-space} is approximately equal to -1.757mm. Thus the @code{paper-height} measurement of 59.75 -@code{staff-spaces} is equivalent to 105 millimeters, the height -of @code{a6} paper in landscape orientation. The pairs -(@var{a},@var{b}) are intervals, where @var{a} is the lower -edge and @var{b} the upper edge of the interval. - - -@seealso -@ref{Setting the staff size} -Snippets: -@rlsr{Spacing}. - - -@node Changing spacing -@subsection Changing spacing - -The output of @code{annotate-spacing} reveals vertical dimensions -in great detail. For details about modifying margins and other -layout variables, see @ref{Page formatting}. - -Other than margins, there are a few other options to save space: - -@itemize -@item -Force systems to move as close together as possible (to fit as -many systems as possible onto a page) while being spaced so that -there is no blank space at the bottom of the page. - -@example -\paper @{ - between-system-padding = #0.1 - between-system-space = #0.1 - ragged-last-bottom = ##f - ragged-bottom = ##f -@} -@end example - -@item -Force the number of systems. This can help in two ways. Just -setting a value, even the same value as the number of systems -being typeset by default, will sometimes cause more systems to -be fitted onto each page, as an estimation step is then bypassed, -giving a more accurate fit to each page. Also, forcing an actual -reduction in the number of systems may save a further page. For -example, if the default layout has 11 systems, the following -assignment will force a layout with 10 systems. - -@example -\paper @{ - system-count = #10 -@} -@end example - -@item -Avoid (or reduce) objects that increase the vertical size of a -system. For example, volta repeats (or alternate repeats) require -extra space. If these repeats are spread over two systems, they -will take up more space than one system with the volta repeats and -another system without. For example, dynamics that @q{stick out} of -a system can be moved closer to the staff: - -@lilypond[verbatim,quote,relative=1] -e4 c g\f c -\override DynamicText #'extra-offset = #'( -2.2 . 2.0) -e4 c g\f c -@end lilypond - -@item -Alter the horizontal spacing via @code{SpacingSpanner}. For more -details, see @ref{Changing horizontal spacing}. The following -example illustrates the default spacing: - -@lilypond[verbatim,quote] -\score { - \relative c'' { - g4 e e2 | - f4 d d2 | - c4 d e f | - g4 g g2 | - g4 e e2 | - } -} -@end lilypond - -@noindent -The next example modifies @code{common-shortest-duration} from a -value of @code{1/4} to @code{1/2}. The quarter note is the most -common and shortest duration in this example, so by making this -duration longer, a @q{squeezing} effect occurs: - -@lilypond[verbatim,quote] -\score { - \relative c'' { - g4 e e2 | - f4 d d2 | - c4 d e f | - g4 g g2 | - g4 e e2 | - } - \layout { - \context { - \Score - \override SpacingSpanner - #'common-shortest-duration = #(ly:make-moment 1 2) - } - } -} -@end lilypond - -@noindent -The @code{common-shortest-duration} property cannot be modified -dynamically, so it must always be placed in a @code{\context} -block so that it applies to the whole score. - -@end itemize - - -@seealso -Notation Reference: -@ref{Page formatting}, -@ref{Changing horizontal spacing}. - -Snippets: -@rlsr{Spacing}. diff --git a/Documentation/user/specialist.itely b/Documentation/user/specialist.itely deleted file mode 100644 index 98b7595821..0000000000 --- a/Documentation/user/specialist.itely +++ /dev/null @@ -1,38 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Specialist notation -@chapter Specialist notation - -This chapter explains how to create musical notation for specific -types of instrument or in specific styles. - -@menu -* Vocal music:: -* Keyboard and other multi-staff instruments:: -* Unfretted string instruments:: -* Fretted string instruments:: -* Percussion:: -* Wind instruments:: -* Chord notation:: -* Ancient notation:: -* World music:: -@end menu - -@include vocal.itely -@include keyboards.itely -@include unfretted-strings.itely -@include fretted-strings.itely -@include percussion.itely -@include wind.itely -@include chords.itely -@include ancient.itely -@include world.itely - diff --git a/Documentation/user/staff.itely b/Documentation/user/staff.itely deleted file mode 100644 index 354ce5e898..0000000000 --- a/Documentation/user/staff.itely +++ /dev/null @@ -1,1338 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Staff notation -@section Staff notation - -@lilypondfile[quote]{staff-headword.ly} - -This section explains how to influence the appearance of staves, -how to print scores with more than one staff, and how to add tempo -indications and cue notes to staves. - -@menu -* Displaying staves:: -* Modifying single staves:: -* Writing parts:: -@end menu - - -@node Displaying staves -@subsection Displaying staves - -This section describes the different methods of creating and -grouping staves. - -@menu -* Instantiating new staves:: -* Grouping staves:: -* Nested staff groups:: -@end menu - - -@node Instantiating new staves -@unnumberedsubsubsec Instantiating new staves - -@cindex new staff -@cindex staff initiation -@cindex staff instantiation -@cindex staff, new -@cindex staff, single -@cindex staff, drum -@cindex staff, percussion -@cindex drum staff -@cindex percussion staff -@cindex Gregorian transcription staff -@cindex rhythmic staff -@cindex tabstaff -@cindex tablature - -@funindex \drummode -@funindex drummode -@funindex DrumStaff -@funindex RhythmicStaff -@funindex TabStaff -@funindex MensuralStaff -@funindex VaticanaStaff -@funindex GregorianTranscriptionStaff - -@notation{Staves} (singular: @notation{staff}) are created with -the @code{\new} or @code{\context} commands. For details, see -@ref{Creating contexts}. - -The basic staff context is @code{Staff}: - -@lilypond[verbatim,quote,relative=2] -\new Staff { c4 d e f } -@end lilypond - -The @code{DrumStaff} context creates a five-line staff set up for -a typical drum set. Each instrument is shown with a different -symbol. The instruments are entered in drum mode following a -@code{\drummode} command, with each instrument specified by name. -For details, see @ref{Percussion staves}. - -@lilypond[verbatim,quote] -\new DrumStaff { - \drummode { cymc hh ss tomh } -} -@end lilypond - -@code{RhythmicStaff} creates a single-line staff that only -displays the rhythmic values of the input. Real durations are -preserved. For details, see @ref{Showing melody rhythms}. - -@lilypond[verbatim,quote,relative=2] -\new RhythmicStaff { c4 d e f } -@end lilypond - -@code{TabStaff} creates a tablature with six strings in standard -guitar tuning. For details, see @ref{Default tablatures}. - -@lilypond[verbatim,quote,relative=2] -\new TabStaff { c4 d e f } -@end lilypond - -There are two staff contexts specific for the notation of ancient -music: @code{MensuralStaff} and @code{VaticanaStaff}. They are -described in @ref{Pre-defined contexts}. - -The @code{GregorianTranscriptionStaff} context creates a staff to -notate modern Gregorian chant. It does not show bar lines. - -@lilypond[verbatim,quote,relative=2] -\new GregorianTranscriptionStaff { c4 d e f e d } -@end lilypond - -New single staff contexts may be defined. For details, see -@ref{Defining new contexts}. - - -@seealso -Music Glossary: -@rglos{staff}, -@rglos{staves}. - -Notation Reference: -@ref{Creating contexts}, -@ref{Percussion staves}, -@ref{Showing melody rhythms}, -@ref{Default tablatures}, -@ref{Pre-defined contexts}, -@ref{Staff symbol}, -@ref{Gregorian chant contexts}, -@ref{Mensural contexts}, -@ref{Defining new contexts}. - -Snippets: -@rlsr{Staff notation}. - -Internals Reference: -@rinternals{Staff}, -@rinternals{DrumStaff}, -@rinternals{GregorianTranscriptionStaff}, -@rinternals{RhythmicStaff}, -@rinternals{TabStaff}, -@rinternals{MensuralStaff}, -@rinternals{VaticanaStaff}, -@rinternals{StaffSymbol}. - - -@node Grouping staves -@unnumberedsubsubsec Grouping staves - -@cindex start of system -@cindex staff, multiple -@cindex staves, multiple -@cindex system start delimiters -@cindex bracket, vertical -@cindex brace, vertical -@cindex choir staff -@cindex grand staff -@cindex piano staff -@cindex staff group -@cindex staff, choir -@cindex staff, piano -@cindex staff, grand -@cindex system - -Various contexts exist to group single staves together in order to -form multi-stave systems. Each grouping context sets the style of -the system start delimiter and the behavior of bar lines. - -If no context is specified, the default properties will be used: -the group is started with a vertical line, and the bar lines are -not connected. - -@lilypond[verbatim,quote,relative=2] -<< - \new Staff { c1 c } - \new Staff { c1 c } ->> -@end lilypond - -In the @code{StaffGroup} context, the group is started with a -bracket and bar lines are drawn through all the staves. - -@lilypond[verbatim,quote,relative=2] -\new StaffGroup << - \new Staff { c1 c } - \new Staff { c1 c } ->> -@end lilypond - -In a @code{ChoirStaff}, the group starts with a bracket, but bar -lines are not connected. - -@lilypond[verbatim,quote,relative=2] -\new ChoirStaff << - \new Staff { c1 c } - \new Staff { c1 c } ->> -@end lilypond - -In a @code{GrandStaff}, the group begins with a brace, and bar -lines are connected between the staves. - -@lilypond[verbatim,quote,relative=2] -\new GrandStaff << - \new Staff { c1 c } - \new Staff { c1 c } ->> -@end lilypond - -The @code{PianoStaff} is identical to a @code{GrandStaff}, except -that it supports printing the instrument name directly. For -details, see @ref{Instrument names}. - -@lilypond[verbatim,quote,relative=2] -\new PianoStaff << - \set PianoStaff.instrumentName = #"Piano" - \new Staff { c1 c } - \new Staff { c1 c } ->> -@end lilypond - -Each staff group context sets the property -@code{systemStartDelimiter} to one of the following values: -@code{SystemStartBar}, @code{SystemStartBrace}, or -@code{SystemStartBracket}. A fourth delimiter, -@code{SystemStartSquare}, is also available, but it must be -explicitly specified. - -New staff group contexts may be defined. For details, see -@ref{Defining new contexts}. - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{use-square-bracket-at-the-start-of-a-staff-group.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{display-bracket-with-only-one-staff-in-a-system.ly} - -@cindex mensurstriche layout -@cindex renaissance music -@cindex transcription of mensural music -@cindex mensural music, transcription of - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{mensurstriche-layout-bar-lines-between-the-staves.ly} - - -@seealso -Music Glossary: -@rglos{brace}, -@rglos{bracket}, -@rglos{grand staff}. - -Notation Reference: -@ref{Instrument names}, -@ref{Defining new contexts}. - -Snippets: -@rlsr{Staff notation}. - -Internals Reference: -@rinternals{Staff}, -@rinternals{StaffGroup}, -@rinternals{ChoirStaff}, -@rinternals{GrandStaff}, -@rinternals{PianoStaff}, -@rinternals{SystemStartBar}, -@rinternals{SystemStartBrace}, -@rinternals{SystemStartBracket}, -@rinternals{SystemStartSquare}. - - -@node Nested staff groups -@unnumberedsubsubsec Nested staff groups - -@cindex staff, nested -@cindex staves, nested -@cindex nesting of staves -@cindex system start delimiters, nested -@cindex nested staff brackets -@cindex brackets, nesting of -@cindex braces, nesting of - -Staff-group contexts can be nested to arbitrary depths. In this -case, each child context creates a new bracket adjacent to the -bracket of its parent group. - -@lilypond[verbatim,quote,relative=2] -\new StaffGroup << - \new Staff { c2 c | c2 c } - \new StaffGroup << - \new Staff { g2 g | g2 g } - \new StaffGroup \with { - systemStartDelimiter = #'SystemStartSquare - } - << - \new Staff { e2 e | e2 e } - \new Staff { c2 c | c2 c } - >> - >> ->> -@end lilypond - -New nested staff group contexts can be defined. For details, see -@ref{Defining new contexts}. - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{nesting-staves.ly} - - -@seealso -Notation Reference: -@ref{Grouping staves}, -@ref{Instrument names}, -@ref{Defining new contexts}. - -Snippets: -@rlsr{Staff notation}. - -Internals Reference: -@rinternals{StaffGroup}, -@rinternals{ChoirStaff}, -@rinternals{SystemStartBar}, -@rinternals{SystemStartBrace}, -@rinternals{SystemStartBracket}, -@rinternals{SystemStartSquare}. - - -@node Modifying single staves -@subsection Modifying single staves - -This section explains how to change specific attributes of one -staff: for example, modifying the number of staff lines or the -staff size. Methods to start and stop staves and set ossia -sections are also described. - -@menu -* Staff symbol:: -* Ossia staves:: -* Hiding staves:: -@end menu - - -@node Staff symbol -@unnumberedsubsubsec Staff symbol - -@cindex adjusting staff symbol -@cindex drawing staff symbol -@cindex staff symbol, setting of -@cindex staff symbol, drawing -@cindex stop staff lines -@cindex start staff lines -@cindex staff lines, amount of -@cindex staff lines, number of -@cindex staff line, thickness of -@cindex amount of staff lines -@cindex thickness of staff lines -@cindex ledger lines, setting -@cindex setting of ledger lines -@cindex spacing of ledger lines -@cindex number of staff lines - -The lines of a staff belong to the @code{StaffSymbol} grob. -@code{StaffSymbol} properties can be modified to change the -appearance of a staff, but they must be modified before the staff -is created. - -The number of staff lines may be changed. The clef position and -the position of middle C may need to be modified to fit the new -staff. For an explanation, refer to the snippet section in -@ref{Clef}. - -@lilypond[verbatim,quote,relative=2] -\new Staff \with { - \override StaffSymbol #'line-count = #3 -} -{ d4 d d d } -@end lilypond - -Staff line thickness can be modified. The thickness of ledger -lines and stems are also affected, since they depend on staff line -thickness. - -@lilypond[verbatim,quote,relative=1] -\new Staff \with { - \override StaffSymbol #'thickness = #3 -} -{ e4 d c b } -@end lilypond - -Ledger line thickness can be set independently of staff line -thickness. In the example the two numbers are factors multiplying -the staff line thickness and the staff line spacing. The two -contributions are added to give the ledger line thickness. - -@lilypond[verbatim,quote,relative=1] -\new Staff \with { - \override StaffSymbol #'ledger-line-thickness = #'(1 . 0.2) -} -{ e4 d c b } -@end lilypond - -The distance between staff lines can be changed. This setting -affects the spacing of ledger lines as well. - -@lilypond[verbatim,quote,relative=1] -\new Staff \with { - \override StaffSymbol #'staff-space = #1.5 -} -{ a4 b c d } -@end lilypond - -Further details about the properties of @code{StaffSymbol} can be -found in @rinternals{staff-symbol-interface}. - -@cindex stopping a staff -@cindex starting a staff -@cindex staff, starting -@cindex staff, stopping - -@funindex \startStaff -@funindex startStaff -@funindex \stopStaff -@funindex stopStaff - -Modifications to staff properties in the middle of a score can be -placed between @code{\stopStaff} and @code{\startStaff}: - -@lilypond[verbatim,quote,relative=2] -c2 c -\stopStaff -\override Staff.StaffSymbol #'line-count = #2 -\startStaff -b2 b -\stopStaff -\revert Staff.StaffSymbol #'line-count -\startStaff -a2 a -@end lilypond - -@noindent -In general, @code{\startStaff} and @code{\stopStaff} can be used -to stop or start a staff in the middle of a score. - -@lilypond[verbatim,quote,relative=2] -c4 b a2 -\stopStaff -b4 c d2 -\startStaff -e4 d c2 -@end lilypond - - -@predefined -@code{\startStaff}, -@code{\stopStaff}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{making-some-staff-lines-thicker-than-the-others.ly} - - -@seealso -Music Glossary: -@rglos{line}, -@rglos{ledger line}, -@rglos{staff}. - -Notation Reference: -@ref{Clef}. - -Snippets: -@rlsr{Staff notation}. - -Internals Reference: -@rinternals{StaffSymbol}, -@rinternals{staff-symbol-interface}. - - -@node Ossia staves -@unnumberedsubsubsec Ossia staves - -@cindex staff, Frenched -@cindex ossia -@cindex Frenched staves -@cindex staff, resizing of -@cindex resizing of staves - -@funindex \startStaff -@funindex startStaff -@funindex \stopStaff -@funindex stopStaff - -@notation{Ossia} staves can be set by creating a new simultaneous -staff in the appropriate location: - -@lilypond[verbatim,quote] -\new Staff \relative c'' { - c4 b d c - << - { c4 b d c } - \new Staff { e4 d f e } - >> - c4 b c2 -} -@end lilypond - -@noindent -However, the above example is not what is usually desired. To -create ossia staves that are above the original staff, have no -time signature or clef, and have a smaller font size, tweaks must -be used. The Learning Manual describes a specific technique to -achieve this goal, beginning with -@rlearning{Nesting music expressions}. - -The following example uses the @code{alignAboveContext} property -to align the ossia staff. This method is most appropriate when -only a few ossia staves are needed. - -@lilypond[verbatim,quote] -\new Staff = main \relative c'' { - c4 b d c - << - { c4 b d c } - - \new Staff \with { - \remove "Time_signature_engraver" - alignAboveContext = #"main" - fontSize = #-3 - \override StaffSymbol #'staff-space = #(magstep -3) - \override StaffSymbol #'thickness = #(magstep -3) - firstClef = ##f - } - { e4 d f e } - >> - c4 b c2 -} -@end lilypond - -If many isolated ossia staves are needed, creating an empty -@code{Staff} context with a specific @emph{context id} may be more -appropriate; the ossia staves may then be created by -@emph{calling} this context and using @code{\startStaff} and -@code{\stopStaff} at the desired locations. The benefits of this -method are more apparent if the piece is longer than the following -example. - -@lilypond[verbatim,quote,ragged-right] -<< - \new Staff = ossia \with { - \remove "Time_signature_engraver" - \override Clef #'transparent = ##t - fontSize = #-3 - \override StaffSymbol #'staff-space = #(magstep -3) - \override StaffSymbol #'thickness = #(magstep -3) - } - { \stopStaff s1*6 } - - \new Staff \relative c' { - c4 b c2 - << - { e4 f e2 } - \context Staff = ossia { - \startStaff e4 g8 f e2 \stopStaff - } - >> - g4 a g2 \break - c4 b c2 - << - { g4 a g2 } - \context Staff = ossia { - \startStaff g4 e8 f g2 \stopStaff - } - >> - e4 d c2 - } ->> -@end lilypond - - -Using the @code{\RemoveEmptyStaffContext} command to create ossia -staves may be used as an alternative. This method is most -convenient when ossia staves occur immediately following a line -break. In this case, spacer rests do not need to be used at all; -only @code{\startStaff} and @code{\stopStaff} are necessary. For -more information about @code{\RemoveEmptyStaffContext}, see -@ref{Hiding staves}. - -@lilypond[verbatim,quote,ragged-right] -<< - \new Staff = ossia \with { - \remove "Time_signature_engraver" - \override Clef #'transparent = ##t - fontSize = #-3 - \override StaffSymbol #'staff-space = #(magstep -3) - \override StaffSymbol #'thickness = #(magstep -3) - } - \new Staff \relative c' { - c4 b c2 - e4 f e2 - g4 a g2 \break - << - { c4 b c2 } - \context Staff = ossia { - c4 e8 d c2 \stopStaff - } - >> - g4 a g2 - e4 d c2 - } ->> - -\layout { - \context { - \RemoveEmptyStaffContext - \override VerticalAxisGroup #'remove-first = ##t - } -} -@end lilypond - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{vertically-aligning-ossias-and-lyrics.ly} - - -@seealso -Music Glossary: -@rglos{ossia}, -@rglos{staff}, -@rglos{Frenched staff}. - -Learning Manual: -@rlearning{Nesting music expressions}, -@rlearning{Size of objects}, -@rlearning{Length and thickness of objects}. - -Notation Reference: -@ref{Hiding staves}. - -Snippets: -@rlsr{Staff notation}. - -Internals Reference: -@rinternals{StaffSymbol}. - - -@node Hiding staves -@unnumberedsubsubsec Hiding staves - -@cindex Frenched score -@cindex Frenched staff -@cindex staff, hiding -@cindex staff, empty -@cindex hiding of staves -@cindex empty staves - -@funindex \RemoveEmptyStaffContext -@funindex RemoveEmptyStaffContext -@funindex Staff_symbol_engraver -@funindex \stopStaff -@funindex stopStaff - - -Staff lines can be hidden by removing the -@code{Staff_symbol_engraver} from the @code{Staff} context. As an -alternative, @code{\stopStaff} may be used. - -@lilypond[verbatim,quote] -\new Staff \with { - \remove "Staff_symbol_engraver" -} -\relative c''' { a8 f e16 d c b a2 } -@end lilypond - - -Empty staves can be hidden by setting the -@code{\RemoveEmptyStaffContext} command in the @code{\layout} -block. In orchestral scores, this style is known as @q{Frenched -Score}. By default, this command hides and removes all empty -staves in a score except for those in the first system. - -@warning{A staff is considered empty when it contains only -multi-measure rests, skips, spacer rests, or a combination of these -elements.} - -@lilypond[verbatim,quote,ragged-right] -\layout { - \context { - \RemoveEmptyStaffContext - } -} - -\relative c' << - \new Staff { - e4 f g a \break - b1 \break - a4 b c2 - } - \new Staff { - c,4 d e f \break - R1 \break - f4 g c,2 - } ->> -@end lilypond - -@cindex ossia - -@noindent -@code{\RemoveEmptyStaffContext} can also be used to create ossia -sections for a staff. For details, see @ref{Ossia staves}. - -@cindex hiding ancient staves -@cindex hiding rhythmic staves - -@funindex \RemoveEmptyStaffContext -@funindex RemoveEmptyStaffContext -@funindex \AncientRemoveEmptyStaffContext -@funindex AncientRemoveEmptyStaffContext -@funindex \RemoveEmptyRhythmicStaffContext -@funindex RemoveEmptyRhythmicStaffContext - -The @code{\AncientRemoveEmptyStaffContext} command may be used to -hide empty staves in ancient music contexts. Similarly, -@code{\RemoveEmptyRhythmicStaffContext} may be used to hide empty -@code{RhythmicStaff} contexts. - - -@predefined -@code{\RemoveEmptyStaffContext}, -@code{\AncientRemoveEmptyStaffContext}, -@code{\RemoveEmptyRhythmicStaffContext}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{removing-the-first-empty-line.ly} - - -@seealso -Music Glossary: -@rglos{Frenched staff}. - -Notation Reference: -@ref{Staff symbol}, -@ref{Ossia staves}. - -Snippets: -@rlsr{Staff notation}. - -Internals Reference: -@rinternals{ChordNames}, -@rinternals{FiguredBass}, -@rinternals{Lyrics}, -@rinternals{Staff}, -@rinternals{VerticalAxisGroup}, -@rinternals{Staff_symbol_engraver}. - - -@knownissues - -Removing @code{Staff_symbol_engraver} also hides bar lines. If -bar line visibility is forced, formatting errors may occur. In -this case, use the following overrides instead of removing the -engraver: - -@example -\override StaffSymbol #'stencil = ##f -\override NoteHead #'no-ledgers = ##t -@end example - - -@node Writing parts -@subsection Writing parts - -This section explains how to insert tempo indications and -instrument names into a score. Methods to quote other voices and -format cue notes are also described. - -@menu -* Metronome marks:: -* Instrument names:: -* Quoting other voices:: -* Formatting cue notes:: -@end menu - - -@node Metronome marks -@unnumberedsubsubsec Metronome marks - -@cindex tempo -@cindex beats per minute -@cindex metronome mark -@cindex metronome marking with text - -@funindex \tempo -@funindex tempo - -A basic metronome mark is simple to write: - -@lilypond[verbatim,quote,relative=1] -\tempo 4 = 120 -c2 d -e4. d8 c2 -@end lilypond - -Tempo indications with text can be used instead: - -@lilypond[verbatim,quote,relative=2] -\tempo "Allegretto" -c4 e d c -b4. a16 b c4 r4 -@end lilypond - -Combining a metronome mark and text will automatically place the -metronome mark within parentheses: - -@lilypond[verbatim,quote,relative=2] -\tempo "Allegro" 4 = 160 -g4 c d e -d4 b g2 -@end lilypond - -In general, the text can be any markup object: - -@lilypond[verbatim,quote,relative=2] -\tempo \markup { \italic Faster } 4 = 132 -a8-. r8 b-. r gis-. r a-. r -@end lilypond - -A parenthesized metronome mark with no textual indication may be -written by including an empty string in the input: - -@lilypond[verbatim,quote,relative=2] -\tempo "" 8 = 96 -d4 g e c -@end lilypond - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{printing-metronome-and-rehearsal-marks-below-the-staff.ly} - -@c perhaps also an example of how to move it horizontally? - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{changing-the-tempo-without-a-metronome-mark.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{creating-metronome-marks-in-markup-mode.ly} - -For more details, see @ref{Formatting text}. - - -@seealso -Music Glossary: -@rglos{metronome}, -@rglos{metronomic indication}, -@rglos{tempo indication}, -@rglos{metronome mark}. - -Notation Reference: -@ref{Formatting text}, -@ref{MIDI output}. - -Snippets: -@rlsr{Staff notation}. - -Internals Reference: -@rinternals{MetronomeMark}. - - -@node Instrument names -@unnumberedsubsubsec Instrument names - -@cindex instrument names -@cindex instrument names, short - -Instrument names can be printed on the left side of staves in the -@code{Staff} and @code{PianoStaff} contexts. The value of -@code{instrumentName} is used for the first staff, and the value -of @code{shortInstrumentName} is used for all succeeding staves. - -@lilypond[verbatim,quote,ragged-right,relative=1] -\set Staff.instrumentName = #"Violin " -\set Staff.shortInstrumentName = #"Vln " -c4.. g'16 c4.. g'16 -\break -c1 -@end lilypond - -Markup mode can be used to create more complicated instrument -names: - -@lilypond[verbatim,quote,relative=2] -\set Staff.instrumentName = \markup { - \column { "Clarinetti" - \line { "in B" \smaller \flat } } } -c4 c,16 d e f g2 -@end lilypond - -@cindex instrument names, centering - -When two or more staff contexts are grouped together, the -instrument names and short instrument names are centered by -default. To center multi-line instrument names, -@code{\center-column} must be used: - -@lilypond[verbatim,quote,indent=1.5\cm,relative=2] -<< - \new Staff { - \set Staff.instrumentName = #"Flute" - f2 g4 f - } - \new Staff { - \set Staff.instrumentName = \markup \center-column { - Clarinet - \line { "in B" \smaller \flat } - } - c4 b c2 - } ->> -@end lilypond - -@funindex indent -@funindex short-indent - -However, if the instrument names are longer, the instrument names -in a staff group may not be centered unless the @code{indent} and -@code{short-indent} settings are increased. For details about -these settings, see @ref{Horizontal dimensions}. - -@lilypond[verbatim,quote,ragged-right] -\layout { - indent = 3.0\cm - short-indent = 1.5\cm -} - -\relative c'' << - \new Staff { - \set Staff.instrumentName = #"Alto Flute in G" - \set Staff.shortInstrumentName = #"Fl." - f2 g4 f \break - g4 f g2 - } - \new Staff { - \set Staff.instrumentName = #"Clarinet" - \set Staff.shortInstrumentName = #"Clar." - c,4 b c2 \break - c2 b4 c - } ->> -@end lilypond - -@cindex instrument names, adding to other contexts - -To add instrument names to other contexts (such as -@code{GrandStaff}, @code{ChoirStaff}, or @code{StaffGroup}), -@code{Instrument_name_engraver} must be added to that context. -For details, see @ref{Modifying context plug-ins}. - -@cindex instrument names, changing -@cindex changing instrument names - -Instrument names may be changed in the middle of a piece: - -@lilypond[verbatim,quote,ragged-right,relative=1] -\set Staff.instrumentName = #"First" -\set Staff.shortInstrumentName = #"one" -c1 c c c \break -c1 c c c \break -\set Staff.instrumentName = #"Second" -\set Staff.shortInstrumentName = #"two" -c1 c c c \break -c1 c c c \break -@end lilypond - -@cindex instrument switch -@cindex switching instruments - -@funindex \addInstrumentDefinition -@funindex addInstrumentDefinition -@funindex \instrumentSwitch -@funindex instrumentSwitch - -If an instrument @emph{switch} is needed, -@code{\addInstrumentDefinition} may be used in combination with -@code{\instrumentSwitch} to create a detailed list of the -necessary changes for the switch. The -@code{\addInstrumentDefinition} command has two arguments: an -identifying string, and an association list of context properties -and values to be used for the instrument. It must be placed in -the toplevel scope. @code{\instrumentSwitch} is used in the music -expression to declare the instrument switch: - -@lilypond[verbatim,quote,ragged-right] -\addInstrumentDefinition #"contrabassoon" - #`((instrumentTransposition . ,(ly:make-pitch -1 0 0)) - (shortInstrumentName . "Cbsn.") - (clefGlyph . "clefs.F") - (middleCPosition . 6) - (clefPosition . 2) - (instrumentCueName . ,(make-bold-markup "cbsn.")) - (midiInstrument . "bassoon")) - -\new Staff \with { - instrumentName = #"Bassoon" -} -\relative c' { - \clef tenor - \compressFullBarRests - c2 g' - R1*16 - \instrumentSwitch "contrabassoon" - c,,2 g \break - c,1 ~ | c1 -} -@end lilypond - - -@seealso -Notation Reference: -@ref{Horizontal dimensions}, -@ref{Modifying context plug-ins}. - -Snippets: -@rlsr{Staff notation}. - -Internals Reference: -@rinternals{InstrumentName}, -@rinternals{PianoStaff}, -@rinternals{Staff}. - - -@node Quoting other voices -@unnumberedsubsubsec Quoting other voices - -@cindex cues -@cindex quoting other voices -@cindex fragments -@cindex cue notes - -@funindex \addQuote -@funindex addQuote -@funindex \quoteDuring -@funindex quoteDuring -@funindex \transposition -@funindex transposition - -It is very common for one voice to double some of the music from -another voice. For example, the first and second violins may play the -same notes during a passage of music. In LilyPond this is accomplished -by letting one voice @emph{quote} the other voice without having to -re-enter it. - -Before a part can be quoted, the @code{\addQuote} command must be used -to initialize the quoted fragment. This command must be used in the -toplevel scope. The first argument is an identifying string, and the -second is a music expression: - -@example -flute = \relative c'' @{ - a4 gis g gis -@} -\addQuote "flute" @{ \flute @} -@end example - -The @code{\quoteDuring} command is used to indicate the point where the -quotation begins. It is followed by two arguments: the name of the -quoted voice, as defined with @code{\addQuote}, and a music expression -that indicates the duration of the quote, usually spacer rests or -multi-measure rests. The corresponding music from the quoted voice is -inserted into the music expression: - -@lilypond[verbatim,quote] -flute = \relative c'' { - a4 gis g gis -} -\addQuote "flute" { \flute } - -\relative c' { - c4 cis \quoteDuring #"flute" { s2 } -} -@end lilypond - -If the music expression used for @code{\quoteDuring} contains -anything but a spacer rest or multi-measure rest, a polyphonic -situation is created, which is often not desirable: - -@lilypond[verbatim,quote] -flute = \relative c'' { - a4 gis g gis -} -\addQuote "flute" { \flute } - -\relative c' { - c4 cis \quoteDuring #"flute" { c4 b } -} -@end lilypond - -Quotations recognize instrument transposition settings for both -the source and target instruments if the @code{\transposition} -command is used. For details about @code{\transposition}, see -@ref{Instrument transpositions}. - -@lilypond[verbatim,quote] -clarinet = \relative c'' { - \transposition bes - a4 gis g gis -} -\addQuote "clarinet" { \clarinet } - -\relative c' { - c4 cis \quoteDuring #"clarinet" { s2 } -} -@end lilypond - -It is possible to tag quotations with unique names in order to -process them in different ways. For details about this procedure, -see @ref{Using tags}. - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{quoting-another-voice-with-transposition.ly} - -@cindex note-event -@cindex articulation-event -@cindex dynamic-event -@cindex rest-event - -@funindex quotedEventTypes - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{quoting-another-voice.ly} - - -@seealso -Notation Reference: -@ref{Instrument transpositions}, -@ref{Using tags}. - -Snippets: -@rlsr{Staff notation}. - -Internals Reference: -@rinternals{QuoteMusic}, -@rinternals{Voice}. - - -@knownissues - -Only the contents of the first @code{Voice} occurring in an -@code{\addQuote} command will be considered for quotation, so -@var{music} cannot contain @code{\new} and @code{\context Voice} -statements that would switch to a different Voice. - -Quoting grace notes is broken and can even cause LilyPond to -crash. - -Quoting nested triplets may result in poor notation. - -In earlier versions of LilyPond (pre 2.11), @code{addQuote} was -written entirely in lower-case letters: @code{\addquote}. - - -@node Formatting cue notes -@unnumberedsubsubsec Formatting cue notes - -@cindex cues -@cindex cue notes -@cindex cue notes, formatting -@cindex fragments -@cindex quoting other voices -@cindex cues, formatting - -@funindex \cueDuring -@funindex cueDuring -@funindex \quoteDuring -@funindex quoteDuring - -The previous section explains how to create quotations. The -@code{\cueDuring} command is a more specialized form of -@code{\quoteDuring}, being particularly useful for inserting cue -notes into a part. The syntax is as follows: - -@example -\cueDuring #@var{partname} #@var{voice} @var{music} -@end example - -This command copies the corresponding measures from @var{partname} -into a @code{CueVoice} context. The @code{CueVoice} is created -implicitly, and occurs simultaneously with @var{music}, which -creates a polyphonic situation. The @var{voice} argument -determines whether the cue notes should be notated as a first or -second voice; @code{UP} corresponds to the first voice, and -@code{DOWN} corresponds to the second. - -@lilypond[verbatim,quote] -oboe = \relative c'' { - r2 r8 d16 f e g f a - g8 g16 g g2. -} -\addQuote "oboe" { \oboe } - -\new Voice \relative c'' { - \cueDuring #"oboe" #UP { R1 } - g2 c, -} -@end lilypond - -@noindent -In the above example, the @code{Voice} context had to be -explicitly declared, or else the entire music expression would -belong to the @code{CueVoice} context. - -The name of the cued instrument can be printed by setting the -@code{instrumentCueName} property in the @code{CueVoice} context. - -@lilypond[verbatim,quote] -oboe = \relative c''' { - g4 r8 e16 f e4 d -} -\addQuote "oboe" { \oboe } - -\new Staff \relative c'' << - \new CueVoice \with { - instrumentCueName = "ob." - } - \new Voice { - \cueDuring #"oboe" #UP { R1 } - g4. b8 d2 - } ->> -@end lilypond - -@cindex removing cues -@cindex removing cue notes -@cindex cue notes, removing - -@funindex \killCues -@funindex killCues -@funindex \transposedCueDuring -@funindex transposedCueDuring - -In addition to printing the name of the cued instrument, when cue -notes end, the name of the original instrument should be printed, -and any other changes introduced by the cued part should be -undone. This can be accomplished by using -@code{\addInstrumentDefinition} and @code{\instrumentSwitch}. For -an example and explanation, see @ref{Instrument names}. - -The @code{\killCues} command removes cue notes from a music -expression. This can be useful if cue notes need to be removed -from a part but may be restored at a later time. - -@lilypond[verbatim,quote] -flute = \relative c''' { - r2 cis2 r2 dis2 -} -\addQuote "flute" { \flute } - -\new Voice \relative c'' { - \killCues { - \cueDuring #"flute" #UP { R1 } - g4. b8 d2 - } -} -@end lilypond - -The @code{\transposedCueDuring} command is useful for adding -instrumental cues from a completely different register. The -syntax is similar to @code{\cueDuring}, but it requires one extra -argument to specify the transposition of the cued instrument. For -more information about transposition, see -@ref{Instrument transpositions}. - -@lilypond[verbatim,quote] -piccolo = \relative c''' { - \clef "treble^8" - R1 - c8 c c e g2 - a4 g g2 -} -\addQuote "piccolo" { \piccolo } - -cbassoon = \relative c, { - \clef "bass_8" - c4 r g r - \transposedCueDuring #"piccolo" #UP c,, { R1 } - c4 r g r -} - -<< - \new Staff = "piccolo" \piccolo - \new Staff = "cbassoon" \cbassoon ->> -@end lilypond - -It is possible to tag cued parts with unique names in order to -process them in different ways. For details about this procedure, -see @ref{Using tags}. - - -@seealso -Notation Reference: -@ref{Instrument transpositions}, -@ref{Instrument names}, -@ref{Using tags}. - -Snippets: -@rlsr{Staff notation}. - -Internals Reference: -@rinternals{CueVoice}, -@rinternals{Voice}. - - -@knownissues - -Collisions can occur with rests, when using @code{\cueDuring}, -between @code{Voice} and @code{CueVoice} contexts. - diff --git a/Documentation/user/templates.itely b/Documentation/user/templates.itely deleted file mode 100644 index f2b22f6b2f..0000000000 --- a/Documentation/user/templates.itely +++ /dev/null @@ -1,325 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond-learning.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Templates -@appendix Templates - -This section of the manual contains templates with the LilyPond score -already set up for you. Just add notes, run LilyPond, and enjoy -beautiful printed scores! - -@c bad node name for ancient notation to avoid conflict -@menu -* Single staff:: -* Piano templates:: -* String quartet:: -* Vocal ensembles:: -* Orchestral templates:: -* Ancient notation templates:: -* Jazz combo:: -* lilypond-book templates:: -@end menu - - -@node Single staff -@appendixsec Single staff - -@appendixsubsec Notes only - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,addversion] -{single-staff-template-with-only-notes.ly} - - -@appendixsubsec Notes and lyrics - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,addversion] -{single-staff-template-with-notes-and-lyrics.ly} - -@appendixsubsec Notes and chords - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{single-staff-template-with-notes-and-chords.ly} - -@appendixsubsec Notes, lyrics, and chords. - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{single-staff-template-with-notes,-lyrics,-and-chords.ly} - - -@node Piano templates -@appendixsec Piano templates - -@appendixsubsec Solo piano - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{piano-template-simple.ly} - -@appendixsubsec Piano and melody with lyrics - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{piano-template-with-melody-and-lyrics.ly} - -@appendixsubsec Piano centered lyrics - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{piano-template-with-centered-lyrics.ly} - -@appendixsubsec Piano centered dynamics - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{piano-template-with-centered-dynamics.ly} - - -@node String quartet -@appendixsec String quartet - -@appendixsubsec String quartet - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{string-quartet-template-simple.ly} - -@appendixsubsec String quartet parts - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{string-quartet-template-with-separate-parts.ly} - - -@node Vocal ensembles -@appendixsec Vocal ensembles - -@appendixsubsec SATB vocal score - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{vocal-ensemble-template.ly} - -@appendixsubsec SATB vocal score and automatic piano reduction - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{vocal-ensemble-template-with-automatic-piano-reduction.ly} - -@appendixsubsec SATB with aligned contexts - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly} - - -@node Orchestral templates -@appendixsec Orchestral templates - -@appendixsubsec Orchestra, choir and piano -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{orchestra,-choir-and-piano-template.ly} - - -@c bad node name to avoid node name conflict -@node Ancient notation templates -@appendixsec Ancient notation templates - -@appendixsubsec Transcription of mensural music - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{ancient-notation-template----modern-transcription-of-mensural-music.ly} - -@appendixsubsec Gregorian transcription template - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{ancient-notation-template----modern-transcription-of-gregorian-music.ly} - -@node Jazz combo -@appendixsec Jazz combo - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{jazz-combo-template.ly} - - - - -@ignore -This isn't very useful, and only duplicates material in -"global issues". And if this info changes, this section often -gets forgotten. - -@no de Other templates -@se ction Other templates -@su bsection All headers - -This template displays all available headers. Some of them are only -used in the Mutopia project; they don't affect the printed output at -all. They are used if you want the piece to be listed with different -information in the Mutopia database than you wish to have printed on the -music. For example, Mutopia lists the composer of the famous D major -violin concerto as TchaikovskyPI, whereas perhaps you wish to print -"Petr Tchaikowski" on your music. - -@ The `line-width' is for \header. -@li lypond[quote,verbatim,ragged-right,line-width] -\version "2.12.0" -\header { - dedication = "dedication" - title = "Title" - subtitle = "Subtitle" - subsubtitle = "Subsubtitle" - composer = "Composer (xxxx-yyyy)" - opus = "Opus 0" - piece = "Piece I" - meter = "meter" - instrument = "Instrument" - arranger = "Arranger" - poet = "Poet" - texttranslator = "Translator" - copyright = "public domain" - - % These are headers used by the Mutopia Project - % http://www.mutopiaproject.org/ - mutopiatitle = "" - mutopiacomposer = "" - mutopiapoet = "" - mutopiainstrument = "" - date = "composer's dates" - source = "urtext " - maintainer = "your name here" - maintainerEmail = "your email here" - maintainerWeb = "your home page" - lastupdated = "2004/Aug/26" -} - -\score { - { c'4 } - \header { - piece = "piece1" - opus = "opus1" - } -} - -\score { - { c'4 } - \header { - piece = "piece2" - opus = "opus2" - } -} -@end lilypond -@end ignore - - -@node lilypond-book templates -@appendixsec lilypond-book templates - -These templates are for use with @code{lilypond-book}. If you're not familiar -with this program, please refer to @rprogram{LilyPond-book}. - -@appendixsubsec LaTeX - -You can include LilyPond fragments in a LaTeX document. - -@example -\documentclass[]@{article@} - -\begin@{document@} - -Normal LaTeX text. - -\begin@{lilypond@} -\relative c'' @{ -a4 b c d -@} -\end@{lilypond@} - -More LaTeX text. - -\begin@{lilypond@} -\relative c'' @{ -d4 c b a -@} -\end@{lilypond@} -\end@{document@} -@end example - -@appendixsubsec Texinfo - -You can include LilyPond fragments in Texinfo; in fact, this entire manual -is written in Texinfo. - -@example -\input texinfo -@@node Top - -Texinfo text - -@@lilypond[verbatim,fragment,ragged-right] -a4 b c d -@@end lilypond - -More Texinfo text - -@@lilypond[verbatim,fragment,ragged-right] -d4 c b a -@@end lilypond - -@@bye -@end example - - -@appendixsubsec xelatex - -@verbatim -\documentclass{article} -\usepackage{ifxetex} -\ifxetex -%xetex specific stuff -\usepackage{xunicode,fontspec,xltxtra} -\setmainfont[Numbers=OldStyle]{Times New Roman} -\setsansfont{Arial} -\else -%This can be empty if you are not going to use pdftex -\usepackage[T1]{fontenc} -\usepackage[utf8]{inputenc} -\usepackage{mathptmx}%Times -\usepackage{helvet}%Helvetica -\fi -%Here you can insert all packages that pdftex also understands -\usepackage[ngerman,finnish,english]{babel} -\usepackage{graphicx} - -\begin{document} -\title{A short document with LilyPond and xelatex} -\maketitle - -Normal \textbf{font} commands inside the \emph{text} work, -because they \textsf{are supported by \LaTeX{} and XeteX.} -If you want to use specific commands like \verb+\XeTeX+, you -should include them again in a \verb+\ifxetex+ environment. -You can use this to print the \ifxetex \XeTeX{} command \else -XeTeX command \fi which is not known to normal \LaTeX . - -In normal text you can easily use LilyPond commands, like this: - -\begin{lilypond} -{a2 b c'8 c' c' c'} -\end{lilypond} - -\noindent -and so on. - -The fonts of snippets set with LilyPond will have to be set from -inside -of the snippet. For this you should read the AU on how to use -lilypond-book. - -\selectlanguage{ngerman} -Auch Umlaute funktionieren ohne die \LaTeX -Befehle, wie auch alle -anderen -seltsamen Zeichen: __ ______, wenn sie von der Schriftart -unterst__tzt werden. -\end{document} -@end verbatim - - diff --git a/Documentation/user/text.itely b/Documentation/user/text.itely deleted file mode 100644 index a663831344..0000000000 --- a/Documentation/user/text.itely +++ /dev/null @@ -1,1388 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Text -@section Text - -@lilypondfile[quote]{text-headword.ly} - -This section explains how to include text (with various -formatting) in music scores. - -@noindent -Some text elements that are not dealt with here are discussed in other -specific sections: @ref{Vocal music}, @ref{Titles and headers}. - -@menu -* Writing text:: -* Formatting text:: -* Fonts:: -@end menu - -@node Writing text -@subsection Writing text - -This section introduces different ways of adding text to a score. - -@cindex Text, other languages -@warning{To write accented and special text (such as characters -from other languages), simply insert the characters directly into -the LilyPond file. The file must be saved as UTF-8. For more -information, see @ref{Text encoding}.} - -@menu -* Text scripts:: -* Text spanners:: -* Text marks:: -* Separate text:: -@end menu - - -@node Text scripts -@unnumberedsubsubsec Text scripts - -@cindex Text scripts -@cindex text items, non-empty -@cindex non-empty texts -@cindex quoted text - -Simple @qq{quoted text} indications may be added -to a score, as demonstrated in the following example. -Such indications may be manually placed -above or below the staff, using the -syntax described in @ref{Direction and -placement}. - -@lilypond[quote,verbatim,relative=2] -a8^"pizz." g f e a4-"scherz." f -@end lilypond - -This syntax is actually a shorthand; more complex text -formatting may be added to a note by explicitly using a -@code{\markup} block, as described in @ref{Formatting text}. - -@lilypond[quote,verbatim,relative=2] -a8^\markup { \italic pizz. } g f e -a4_\markup { \tiny scherz. \bold molto } f -@end lilypond - -By default, text indications do not influence the note spacing. -However, their widths can be taken into account: -in the following example, the first text string does not affect -spacing, whereas the second one does. - -@lilypond[quote,verbatim,relative=2] -a8^"pizz." g f e -\textLengthOn -a4_"scherzando" f -@end lilypond - - -@predefined -@funindex \textLengthOn -@code{\textLengthOn}, -@funindex \textLengthOff -@code{\textLengthOff}. -@endpredefined - - -@seealso -Notation Reference: -@ref{Formatting text}, -@ref{Direction and placement}. - -Snippets: -@rlsr{Text}. - -Internals Reference: -@rinternals{TextScript}. - - -@knownissues - -Checking to make sure that text scripts and lyrics are within the -margins is a relatively large computational task. To speed up -processing, LilyPond does not perform such calculations by -default; to enable it, use - -@example -\override Score.PaperColumn #'keep-inside-line = ##t -@end example - - -@node Text spanners -@unnumberedsubsubsec Text spanners - -@cindex Text spanners - -Some performance indications, e.g., @notation{rallentando} or -@notation{accelerando}, are written as text and are extended over -multiple notes with dotted lines. -Such objects, called @qq{spanners}, may be created -from one note to another using the following syntax: - -@lilypond[verbatim,quote,relative=2] -\override TextSpanner #'(bound-details left text) = "rit." -b1\startTextSpan -e,\stopTextSpan -@end lilypond - -@noindent -The string to be printed is set through -object properties. By default it is printed in italic characters, -but different formatting can be obtained using -@code{\markup} blocks, as described in @ref{Formatting text}. - -@lilypond[quote,relative=2,verbatim] -\override TextSpanner #'(bound-details left text) = - \markup { \upright "rit." } -b1\startTextSpan c -e,\stopTextSpan -@end lilypond - -The line style, as well as the text string, can be defined as an -object property. This syntax is described in @ref{Line styles}. - - -@predefined -@funindex textSpannerUp -@code{\textSpannerUp}, -@funindex textSpannerDown -@code{\textSpannerDown}, -@funindex textSpannerNeutral -@code{\textSpannerNeutral}. -@endpredefined - - -@seealso -Notation Reference: -@ref{Line styles}, -@ref{Dynamics}. - -Snippets: -@rlsr{Text}. - -Internals Reference: -@rinternals{TextSpanner}. - - -@node Text marks -@unnumberedsubsubsec Text marks - -@cindex coda on bar line -@cindex segno on bar line -@cindex fermata on bar line -@cindex bar lines, symbols on -@funindex \mark - -Various text elements may be added to a score using -the syntax described in @ref{Rehearsal marks}: - -@c \mark needs to be placed on a separate line (it's not -@c attached to an object like \markup is). -vv - -@lilypond[verbatim,quote,relative=2] -c4 -\mark "Allegro" -c c c -@end lilypond - -This syntax makes it possible to put any text on a bar line; -more complex text formatting may be added using a @code{\markup} -block, as described in @ref{Formatting text}: - -@lilypond[quote,verbatim,relative=1] -1 -\mark \markup { \italic { colla parte } } -2 -1 -@end lilypond - -@noindent -This syntax also allows to print special signs, like coda, segno -or fermata, by specifying the appropriate symbol name as explained in -@ref{Music notation inside markup}: - -@lilypond[quote,verbatim,relative=2] -2 -\mark \markup { \musicglyph #"scripts.ufermata" } -1 -@end lilypond - -@noindent -Such objects are only typeset above the top staff of the score; depending on -whether they are specified at the end or the middle of a bar, they -can be placed above the bar line or between notes. When specified at a -line break, the mark will be printed at the beginning of the next line. - -@lilypond[quote,verbatim,relative=2] -\mark "Allegro" -c1 c -\mark "assai" \break -c c -@end lilypond - - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{printing-marks-at-the-end-of-a-line-or-a-score.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{aligning-marks-with-various-notation-objects.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{printing-marks-on-every-staff.ly} - - -@seealso -Notation Reference: -@ref{Rehearsal marks}, -@ref{Formatting text}, -@ref{Music notation inside markup}, -@ref{The Feta font}. - -Snippets: -@rlsr{Text}. - -Internals Reference: -@rinternals{RehearsalMark}. - - -@knownissues -@c To be removed when Issue 69 in the tracker gets fixed. -vv - -If a mark is entered at the end of the last bar of the score (where -there is no next line), then the mark will not be printed at -all. - -@node Separate text -@unnumberedsubsubsec Separate text - -@cindex separate text -@cindex standalone text -@cindex top-level text -@cindex text, standalone -@funindex \markup - -A @code{\markup} block can exist by itself, outside of any -any @code{\score} block, as a @qq{top-level -expression}. This syntax is described in @ref{File structure}. - -@lilypond[verbatim,quote] -\markup { - Tomorrow, and tomorrow, and tomorrow... -} -@end lilypond - -@noindent -This allows printing text separately -from the music, which is particularly -useful when the input file contains -several music pieces, as described in -@ref{Multiple scores in a book}. - -@lilypond[quote,verbatim] -\score { - c'1 -} -\markup { - Tomorrow, and tomorrow, and tomorrow... -} -\score { - c'1 -} -@end lilypond - -Separate text blocks can be spread over multiple pages, -making it possible to print text documents or books entirely -within LilyPond. This feature, and the specific syntax it -requires, are described in @ref{Multi-page markup}. - - -@predefined -@funindex \markuplines -@code{\markup}, -@code{\markuplines}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{stand-alone-two-column-markup.ly} - -@seealso -Notation Reference: @ref{Formatting text}, -@ref{File structure}, -@ref{Multiple scores in a book}, -@ref{Multi-page markup}. - -Snippets: -@rlsr{Text}. - -Internals Reference: @rinternals{TextScript}. - - -@node Formatting text -@subsection Formatting text - -This section presents basic and advanced text formatting, -using the @code{\markup} mode specific syntax. - -@menu -* Text markup introduction:: -* Selecting font and font size:: -* Text alignment:: -* Graphic notation inside markup:: -* Music notation inside markup:: -* Multi-page markup:: -@end menu - -@node Text markup introduction -@unnumberedsubsubsec Text markup introduction - -@cindex markup -@cindex text markup -@cindex markup text -@cindex typeset text -@funindex \markup - -A @code{\markup} block is used to typeset text with an extensible -syntax called @qq{markup mode}. - -@cindex markup expressions -@cindex markup syntax - -The markup syntax is similar to LilyPond's usual syntax: a -@code{\markup} expression is enclosed in curly braces @code{@{ -@dots{} @}}. A single word is regarded as a minimal expression, -and therefore does not need to be enclosed with braces. - -Unlike simple @qq{quoted text} indications, @code{\markup} blocks -may contain nested expressions or markup commands, -entered using the backslash @code{\} character. -Such commands only affect the first following expression. - -@lilypond[quote,verbatim,relative=2] -a1-\markup intenso -a2^\markup { poco \italic più forte } -c e1 -d2_\markup { \italic "string. assai" } -e -b1^\markup { \bold { molto \italic agitato } } -c -@end lilypond - -@cindex special characters in markup mode -@cindex markup mode, special characters -@cindex reserved characters, printing -@cindex printing special characters -@cindex quoted text in markup mode - -A @code{\markup} block may also contain quoted text strings. -Such strings are treated as minimal text expressions, and -therefore any markup command or special character (such as -@code{\} and @code{#}) will be printed verbatim without affecting -the formatting of the text. Double quotation marks themselves -may be printed by preceding them with backslashes. - -@lilypond[quote,verbatim,relative=2] -a1^"\italic markup..." -a_\markup { \italic "... prints \"italic\" letters!" } -a a -@end lilypond - -To be treated as a distinct expression, a list of words needs -to be enclosed with double quotes or preceded by a command. -The way markup expressions are defined affects how these -expressions will be stacked, centered and aligned; in the -following example, the second @code{\markup} expression is -treated the same as the first one: - -@lilypond[quote,verbatim,relative=2] -c1^\markup { \center-column { a bbb c } } -c1^\markup { \center-column { a { bbb c } } } -c1^\markup { \center-column { a \line { bbb c } } } -c1^\markup { \center-column { a "bbb c" } } -@end lilypond - -Markups can be stored in variables. Such variables may be -directly attached to notes: - -@lilypond[quote,verbatim] -allegro = \markup { \bold \large Allegro } - -{ - d''8.^\allegro - d'16 d'4 r2 -} -@end lilypond - - -@noindent -An exhaustive list of @code{\markup}-specific commands can be found in -@ref{Text markup commands}. - - -@seealso -Notation Reference: -@ref{Text markup commands}. - -Snippets: -@rlsr{Text}. - -Installed files: -@file{scm/@/markup@/.scm}. - - -@knownissues - -Syntax errors for markup mode can be confusing. - - -@node Selecting font and font size -@unnumberedsubsubsec Selecting font and font size - -@cindex font switching -@funindex \italic -@funindex \bold -@funindex \underline - -Basic font switching is supported in markup mode: - -@lilypond[quote,verbatim,relative=2] -d1^\markup { - \bold { Più mosso } - \italic { non troppo \underline Vivo } -} -r2 r4 r8 -d,_\markup { \italic quasi \smallCaps Tromba } -f1 d2 r -@end lilypond - -@cindex font size -@cindex text size -@funindex \fontsize -@funindex \smaller -@funindex \larger -@funindex \magnify - -The size of the characters can also be altered in different ways: -@itemize -@item -the font size can be set to predefined standard sizes, - -@item -the font size can be set to an absolute value, - -@item -the font size can also be changed relatively to its previous value. -@end itemize - -@noindent -The following example demonstrates these three methods: - -@lilypond[quote,verbatim,relative=1] -f1_\markup { - \tiny espressivo - \large e - \normalsize intenso -} -a^\markup { - \fontsize #5 Sinfonia - \fontsize #2 da - \fontsize #3 camera -} -bes^\markup { (con - \larger grande - \smaller emozione - \magnify #0.6 { e sentimento } ) -} -d c2 r8 c bes a g1 -@end lilypond - -@cindex subscript -@cindex superscript -@funindex \super -@funindex \sub - -Text may be printed as subscript or superscript. By default -these are printed in a smaller size, but a normal size can be used as well: - -@lilypond[quote,verbatim] -\markup { - \column { - \line { 1 \super st movement } - \line { 1 \normal-size-super st movement - \sub { (part two) } } - } -} -@end lilypond - -@cindex font families - -The markup mode provides an easy way to select alternate -font families. The default serif font, of roman type, is -automatically selected unless specified otherwise; on the -last line of the following example, there is no difference -between the first and the second word. - -@lilypond[quote,verbatim] -\markup { - \column { - \line { Act \number 1 } - \line { \sans { Scene I. } } - \line { \typewriter { Verona. An open place. } } - \line { Enter \roman Valentine and Proteus. } - } -} -@end lilypond - -@noindent -Some of these font families, used for specific items -such as numbers or dynamics, do not provide all -characters, as mentioned in @ref{New dynamic marks} and -@ref{Manual repeat marks}. - -@c \concat is actually documented in Align (it is not -@c a font-switching command). But we need it here. -vv - -When used inside a word, some font-switching or formatting -commands may produce an unwanted blank space. This can -easily be solved by concatenating the text elements together: - -@lilypond[quote,verbatim] -\markup { - \column { - \line { - \concat { 1 \super st } - movement - } - \line { - \concat { \dynamic p , } - \italic { con dolce espressione } - } - } -} -@end lilypond - -An exhaustive list of font switching, and custom font usage -commands can be found in @ref{Font}. - -Defining custom font sets is also possible, as explained in -@ref{Fonts}. - - -@predefined -@funindex \teeny -@code{\teeny}, -@funindex \tiny -@code{\tiny}, -@funindex \small -@code{\small}, -@funindex \normalsize -@code{\normalsize}, -@funindex \large -@code{\large}, -@funindex \huge -@code{\huge}, -@funindex \smaller -@code{\smaller}, -@funindex \larger -@code{\larger}. -@endpredefined - - -@seealso -Notation Reference: -@ref{Font}, -@ref{New dynamic marks}, -@ref{Manual repeat marks}, -@ref{Fonts}. - -Snippets: -@rlsr{Text}. - -Internals Reference: -@rinternals{TextScript}. - -Installed files: -@file{scm/@/define@/-markup@/-commands@/.scm}. - - -@node Text alignment -@unnumberedsubsubsec Text alignment - -@cindex text, aligning -@cindex aligning text - -This subsection discusses how to place text in markup mode. -Markup objects can also be moved as a whole, using the syntax -described in @rlearning{Moving objects}. - -@c Padding commands should be mentioned on this page, but -@c most of these require \box to be more clearly illustrated. -vv - -@cindex text, horizontal alignment -@cindex horizontal text alignment -@funindex \left-align -@funindex \center-align -@funindex \right-align - -Markup objects may be aligned in different ways. By default, -a text indication is aligned on its left edge: in the following -example, there is no difference -between the first and the second markup. - -@lilypond[quote,verbatim,relative=2] -d1-\markup { poco } -f -d-\markup { \left-align poco } -f -d-\markup { \center-align { poco } } -f -d-\markup { \right-align poco } -@end lilypond - -@funindex \halign - -Horizontal alignment may be fine-tuned -using a numeric value: - -@lilypond[quote,verbatim,relative=2] -a1-\markup { \halign #-1 poco } -e' -a,-\markup { \halign #0 poco } -e' -a,-\markup { \halign #0.5 poco } -e' -a,-\markup { \halign #2 poco } -@end lilypond - -@noindent -Some objects may have alignment procedures of their own, -and therefore are not affected by these commands. It is -possible to move such markup objects as a whole, as shown -for instance in @ref{Text marks}. - -@cindex text, vertical alignment -@cindex vertical text alignment -@funindex \raise -@funindex \lower - -Vertical alignment is a bit more complex. As stated above, -markup objects can be moved as a whole; however, it is also -possible to move specific elements inside a markup block. -In this case, the element to be moved needs to be preceded -with an @emph{anchor point}, that can be another markup element -or an invisible object. The following example demonstrates these -two possibilities; the last markup in this example has no anchor -point, and therefore is not moved. - -@lilypond[quote,verbatim,relative=1] -d2^\markup { - Acte I - \raise #2 { Scène 1 } -} -a' -g_\markup { - \null - \lower #4 \bold { Très modéré } -} -a -d,^\markup { - \raise #4 \italic { Une forêt. } -} -a'4 a g2 a -@end lilypond - -@funindex \general-align -@funindex \translate -@funindex \translate-scaled - -Some commands can affect both the horizontal and vertical -alignment of text objects in markup mode. Any object -affected by these commands must be preceded with an -anchor point: - -@lilypond[quote,verbatim,relative=1] -d2^\markup { - Acte I - \translate #'(-1 . 2) "Scène 1" -} -a' -g_\markup { - \null - \general-align #Y #3.2 \bold "Très modéré" -} -a -d,^\markup { - \null - \translate-scaled #'(-1 . 2) \teeny "Une forêt." -} -a'4 a g2 a -@end lilypond - -@funindex \column -@funindex \center-column - -@cindex multi-line markup -@cindex multi-line text -@cindex columns, text - -A markup object may include several lines of text. -In the following example, each element or expression -is placed on its own line, either left-aligned or centered: - -@lilypond[quote,verbatim] -\markup { - \column { - a - "b c" - \line { d e f } - } - \hspace #10 - \center-column { - a - "b c" - \line { d e f } - } -} -@end lilypond - -@funindex \fill-line - -@cindex centering text on the page - -Similarly, a list of elements or expressions may be -spread to fill the entire horizontal line width (if there -is only one element, it will be centered on the page). -These expressions can, in turn, include multi-line text -or any other markup expression: - -@lilypond[quote,verbatim] -\markup { - \fill-line { - \line { William S. Gilbert } - \center-column { - \huge \smallCaps "The Mikado" - or - \smallCaps "The Town of Titipu" - } - \line { Sir Arthur Sullivan } - } -} -\markup { - \fill-line { 1885 } -} -@end lilypond - -@funindex \wordwrap -@funindex \justify - -@cindex wordwrapped text -@cindex justified text - -Long text indications can also be automatically wrapped -accordingly to the given line width. These will be -either left-aligned or justified, as shown in -the following example. - -@lilypond[quote,verbatim] -\markup { - \column { - \line \smallCaps { La vida breve } - \line \bold { Acto I } - \wordwrap \italic { - (La escena representa el corral de una casa de - gitanos en el Albaicín de Granada. Al fondo una - puerta por la que se ve el negro interior de - una Fragua, iluminado por los rojos resplandores - del fuego.) - } - \hspace #0 - - \line \bold { Acto II } - \override #'(line-width . 50) - \justify \italic { - (Calle de Granada. Fachada de la casa de Carmela - y su hermano Manuel con grandes ventanas abiertas - a través de las que se ve el patio - donde se celebra una alegre fiesta) - } - } -} -@end lilypond - -An exhaustive list of text alignment commands -can be found in @ref{Align}. - - -@seealso -Learning Manual: -@rlearning{Moving objects}. - -Notation Reference: -@ref{Align}, -@ref{Text marks}. - -Snippets: -@rlsr{Text}. - -Internals Reference: @rinternals{TextScript}. - -Installed files: -@file{scm/@/define@/-markup@/-commands@/.scm}. - - -@node Graphic notation inside markup -@unnumberedsubsubsec Graphic notation inside markup - -@cindex graphics, embedding -@cindex drawing graphic objects - -Various graphic objects may be added to a score, -using markup commands. - -@funindex \box -@funindex \circle -@funindex \rounded-box -@funindex \bracket -@funindex \hbracket - -@cindex decorating text -@cindex framing text - -Some markup commands allow decoration of text elements -with graphics, as demonstrated in the following example. - -@lilypond[quote,verbatim] -\markup \fill-line { - \center-column { - \circle Jack - \box "in the box" - \null - \line { - Erik Satie - \hspace #3 - \bracket "1866 - 1925" - } - \null - \rounded-box \bold Prelude - } -} -@end lilypond - -@funindex \pad-markup -@funindex \pad-x -@funindex \pad-to-box -@funindex \pad-around - -@cindex padding around text -@cindex text padding - -Some commands may require an increase in the padding around -the text; this is achieved with some markup commands -exhaustively described in @ref{Align}. - -@lilypond[quote,verbatim] -\markup \fill-line { - \center-column { - \box "Charles Ives (1874 - 1954)" - \null - \box \pad-markup #2 "THE UNANSWERED QUESTION" - \box \pad-x #8 "A Cosmic Landscape" - \null - } -} -\markup \column { - \line { - \hspace #10 - \box \pad-to-box #'(-5 . 20) #'(0 . 5) - \bold "Largo to Presto" - } - \pad-around #3 - "String quartet keeps very even time, -Flute quartet keeps very uneven time." -} -@end lilypond - -@funindex \combine -@funindex \draw-circle -@funindex \filled-box -@funindex \triangle -@funindex \draw-line -@funindex \arrow-head - -@cindex graphic notation -@cindex symbols, non-musical - -Other graphic elements or symbols may be printed -without requiring any text. As with any markup -expression, such objects can be combined. - -@lilypond[quote,verbatim] -\markup { - \combine - \draw-circle #4 #0.4 ##f - \filled-box #'(-4 . 4) #'(-0.5 . 0.5) #1 - \hspace #5 - - \center-column { - \triangle ##t - \combine - \draw-line #'(0 . 4) - \arrow-head #Y #DOWN ##f - } -} -@end lilypond - -@funindex \epsfile -@funindex \postscript - -@cindex embedded graphics -@cindex images, embedding -@cindex graphics, embedding -@cindex postscript - -Advanced graphic features include the ability to -include external image files converted to the -Encapsulated PostScript format (@emph{eps}), or -to directly embed graphics into the input file, -using native PostScript code. In such a case, it -may be useful to explicitly specify the size of the -drawing, as demonstrated below: - -@lilypond[quote,verbatim,relative=1] -c1^\markup { - \combine - \epsfile #X #10 #"./context-example.eps" - \with-dimensions #'(0 . 6) #'(0 . 10) - \postscript #" - -2 3 translate - 2.7 2 scale - newpath - 2 -1 moveto - 4 -2 4 1 1 arct - 4 2 3 3 1 arct - 0 4 0 3 1 arct - 0 0 1 -1 1 arct - closepath - stroke" - } -c -@end lilypond - -An exhaustive list of graphics-specific commands -can be found in @ref{Graphic}. - - -@seealso -Notation Reference: -@ref{Graphic}, -@ref{Editorial annotations}. - -Snippets: -@rlsr{Text}. - -Internals Reference: @rinternals{TextScript}. - -Installed files: -@file{scm/@/define@/-markup@/-commands@/.scm}, -@file{scm/@/stencil@/.scm}. - - -@node Music notation inside markup -@unnumberedsubsubsec Music notation inside markup - -Various musical notation elements may be added -to a score, inside a markup object. - -Notes and accidentals can be entered using markup -commands: - -@lilypond[quote,verbatim,relative=2] -a2 a^\markup { - \note #"4" #1 - = - \note-by-number #1 #1 #1.5 -} -b1_\markup { - \natural \semiflat \flat - \sesquiflat \doubleflat -} -\glissando -a1_\markup { - \natural \semisharp \sharp - \sesquisharp \doublesharp -} -\glissando b -@end lilypond - -Other notation objects may also be printed -in markup mode: - -@lilypond[quote,verbatim,relative=1] -g1 bes -ees-\markup { - \finger 4 - \tied-lyric #"~" - \finger 1 -} -fis_\markup { \dynamic rf } -bes^\markup { - \beam #8 #0.1 #0.5 -} -cis -d-\markup { - \markalphabet #8 - \markletter #8 -} -@end lilypond - -More generally, any available musical symbol may be -included separately in a markup object, as demonstrated -below; an exhaustive list of these symbols and their -names can be found in @ref{The Feta font}. - -@lilypond[quote,verbatim,relative=2] -c2 -c'^\markup { \musicglyph #"eight" } -c,4 -c,8._\markup { \musicglyph #"clefs.G_change" } -c16 -c2^\markup { \musicglyph #"timesig.neomensural94" } -@end lilypond - -@noindent -Another way of printing non-text glyphs is described in -@ref{Fonts explained}. This is useful for printing braces of -various sizes. - -The markup mode also supports diagrams for specific -instruments: - -@lilypond[quote,verbatim,relative=2] -c1^\markup { - \fret-diagram-terse #"x;x;o;2;3;2;" -} -c^\markup { - \harp-pedal #"^-v|--ov^" -} -c -c^\markup { - \combine - \musicglyph #"accordion.accDiscant" - \combine - \raise #0.5 \musicglyph #"accordion.accDot" - \raise #1.5 \musicglyph #"accordion.accDot" -} -@end lilypond - -@c The accordion diagram is actually taken from a snippet. - -@noindent -Such diagrams are documented in @ref{Instrument Specific Markup}. - -A whole score can even be nested inside a markup object. -In such a case, the nested @code{\score} block must -contain a @code{\layout} block, as demonstrated here: - -@lilypond[quote,verbatim,relative=1] -c4 d^\markup { - \score { - \relative c' { c4 d e f } - \layout { } - } -} -e f | -c d e f -@end lilypond - -An exhaustive list of music notation related commands can be -found in @ref{Music}. - - -@seealso -Notation Reference: -@ref{Music}, -@ref{The Feta font}, -@ref{Fonts explained}. - -Snippets: -@rlsr{Text}. - -Internals Reference: @rinternals{TextScript}. - -Installed files: -@file{scm/@/define@/-markup@/-commands@/.scm}, -@file{scm/@/fret@/-diagrams@/.scm}, -@file{scm/@/harp@/-pedals@/.scm}. - - -@node Multi-page markup -@unnumberedsubsubsec Multi-page markup - -Although standard markup objects are not breakable, a -specific syntax makes it possible to enter lines of text that can -spread over multiple pages: - -@lilypond[quote,verbatim] -\markuplines { - \justified-lines { - A very long text of justified lines. - ... - } - \wordwrap-lines { - Another very long paragraph. - ... - } - ... -} -@end lilypond - -This syntax accepts a list of markups, that can be -@itemize -@item -the result of a markup list command, -@item -a list of markups, -@item -a list of markup lists. -@end itemize - -An exhaustive list of markup list commands can be found in -@ref{Text markup list commands}. - - -@seealso -Notation Reference: -@ref{Text markup list commands}, -@ref{New markup list command definition}. - -Snippets: -@rlsr{Text}. - -Internals Reference: @rinternals{TextScript}. - -Installed files: -@file{scm/@/define@/-markup@/-commands@/.scm}. - - -@predefined -@funindex \markuplines -@code{\markuplines}. -@endpredefined - - -@node Fonts -@subsection Fonts - -This section presents the way fonts are handled, -and how they may be changed in scores. - -@menu -* Fonts explained:: -* Single entry fonts:: -* Entire document fonts:: -@end menu - -@node Fonts explained -@unnumberedsubsubsec Fonts explained - -@cindex Pango -@cindex fonts, explained -@cindex braces, various sizes -@funindex font-interface - -Fonts are handled through several libraries. -FontConfig is used to detect available fonts on the system; -the selected fonts are rendered using Pango. - -Music notation fonts can be described as a set of -specific glyphs, ordered in several families. -The following syntax allows various LilyPond @code{feta} non-text -fonts to be used directly in markup mode: - -@lilypond[quote,verbatim,relative=2] -a1^\markup { - \vcenter { - \override #'(font-encoding . fetaBraces) - \lookup #"brace120" - \override #'(font-encoding . fetaNumber) - \column { 1 3 } - \override #'(font-encoding . fetaDynamic) - sf - \override #'(font-encoding . fetaMusic) - \lookup #"noteheads.s0petrucci" - } -} -@end lilypond - -@noindent -However, all these glyphs except the braces of various sizes -contained in @code{fetaBraces} are available using the -simpler syntax described in @ref{Music notation inside markup}. - -When using the glyphs contained in @code{fetaBraces}, the size of -the brace is specified by the numerical part of the glyph name, in -arbitrary units. Any integer from @code{0} to @code{575} inclusive -may be specified, @code{0} giving the smallest brace. The optimum -value must be determined by trial and error. These glyphs are all -left braces; right braces may be obtained by rotation, see -@ref{Rotating objects}. - -Three families of text fonts are made available: the -@emph{roman} (serif) font, that defaults to New Century -Schoolbook, the @emph{sans} font and the monospaced -@emph{typewriter} font -- these last two families are -determined by the Pango installation. - -Each family may include different shapes and series. -The following example demonstrates the ability to select -alternate families, shapes, series and sizes. The value -supplied to @code{font-size} is the required change from the -default size. - -@lilypond[quote,verbatim,relative=2] -\override Score.RehearsalMark #'font-family = #'typewriter -\mark \markup "Ouverture" -\override Voice.TextScript #'font-shape = #'italic -\override Voice.TextScript #'font-series = #'bold -d2.^\markup "Allegro" -\override Voice.TextScript #'font-size = #-3 -c4^smaller -@end lilypond - -@noindent -A similar syntax may be used in markup mode, however in this case -it is preferable to use the simpler syntax explained in -@ref{Selecting font and font size}: - -@lilypond[quote,verbatim] -\markup { - \column { - \line { - \override #'(font-shape . italic) - \override #'(font-size . 4) - Idomeneo, - } - \line { - \override #'(font-family . typewriter) - { - \override #'(font-series . bold) - re - di - } - \override #'(font-family . sans) - Creta - } - } -} -@end lilypond - -Although it is easy to switch between preconfigured fonts, -it is also possible to use other fonts, as explained in the -following sections: @ref{Single entry fonts} and -@ref{Entire document fonts}. - - -@seealso -Notation Reference: -@ref{The Feta font}, -@ref{Music notation inside markup}, -@ref{Selecting font and font size}, -@ref{Font}. - - -@node Single entry fonts -@unnumberedsubsubsec Single entry fonts - -Any font that is installed on the operating system and recognized -by FontConfig may be used in a score, using the following syntax: - -@lilypond[quote,verbatim,relative=2] -\override Staff.TimeSignature #'font-name = #"Charter" -\override Staff.TimeSignature #'font-size = #2 -\time 3/4 - -a1_\markup { - \override #'(font-name . "Vera Bold") - { Vera Bold } -} -@end lilypond - -@funindex show-available-fonts - -The following command displays a list of all available fonts -on the operating system: - -@example -lilypond -dshow-available-fonts x -@end example - -@noindent -The last argument of the command can be anything, but has to be -present. - - -@seealso -Notation Reference: -@ref{Fonts explained}, -@ref{Entire document fonts}. - -Snippets: -@rlsr{Text}. - -Installed files: -@file{lily/@/font@/-config@/-scheme@/.cc}. - - -@node Entire document fonts -@unnumberedsubsubsec Entire document fonts - -It is possible to change the fonts to be used as the default fonts in -the @emph{roman}, @emph{sans} and @emph{typewriter} font families by -specifying them, in that order, as shown in the example below. For an -explanation of fonts, see @ref{Fonts explained}. - -@cindex font families, setting -@funindex make-pango-font-tree - -@lilypond[verbatim,quote] -\paper { - myStaffSize = #20 - #(define fonts - (make-pango-font-tree "Times New Roman" - "Nimbus Sans" - "Luxi Mono" - (/ myStaffSize 20))) -} - -\relative c'{ - c1-\markup { - roman, - \sans sans, - \typewriter typewriter. } -} -@end lilypond - -@c we don't do Helvetica / Courier, since GS incorrectly loads -@c Apple TTF fonts - - -@seealso -Notation Reference: -@ref{Fonts explained}, -@ref{Single entry fonts}, -@ref{Selecting font and font size}, -@ref{Font}. - diff --git a/Documentation/user/tutorial.itely b/Documentation/user/tutorial.itely deleted file mode 100644 index f5c20df995..0000000000 --- a/Documentation/user/tutorial.itely +++ /dev/null @@ -1,1995 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond-learning.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@ignore -Tutorial guidelines: (different from policy.txt!) -- unless you have a really good reason, use either - @lilypond[verbatim,quote] - or - @lilypond[verbatim,quote,relative=2] - - Don't use any other relative=X commands. - -- use "aes" and "ees" instead of "as" and "es". I know it's not - correct Dutch naming, but let's not confuse people with this - until we get to the Basic notation chapter. - -- Add "Music Glossary: @rglos{foo}" to the *top* of the relevant - portions of the tutorial. - -@end ignore - - -@node Tutorial -@chapter Tutorial - -This tutorial starts with an introduction to the LilyPond music -language and explains how to produce printed music. After this first -contact we will explain how to create beautiful printed music -containing common musical notation. - -@menu -* First steps:: -* Single staff notation:: -* Multiple notes at once:: -* Songs:: -* Final touches:: -@end menu - - -@node First steps -@section First steps - -This section gives a basic introduction to working with LilyPond. - -@menu -* Compiling a file:: -* Simple notation:: -* Working on input files:: -* How to read the manual:: -@end menu - - -@node Compiling a file -@subsection Compiling a file - -@cindex compiling -@cindex first example -@cindex example, first -@cindex case sensitive - -@qq{Compiling} is the term used for processing an input file -in LilyPond format to produce a file which can be printed and -(optionally) a MIDI file which can be played. LilyPond input -files are simple text files. The first example -shows what a simple input file looks like. - -To create sheet music, we write an input file that specifies the -notation. For example, if we write: - -@example -@{ - c' e' g' e' -@} -@end example - -@noindent -the result looks like this: - -@c in this case we don't want verbatim -@lilypond[quote] -{ - c' e' g' e' -} -@end lilypond - -@warning{Notes and lyrics in LilyPond input must always be -surrounded by @strong{@{ curly braces @}}. The braces -should also be surrounded by a space unless they are at the -beginning or end of a line to avoid ambiguities. The braces may -be omitted in some examples in this manual, but don't forget them -in your own music! For more information about the display of -examples in the manual, see @ref{How to read the manual}.} - -In addition, LilyPond input is @strong{case sensitive}. -@w{@code{@{ c d e @}}} is valid input; @w{@code{@{ C D E @}}} will -produce an error message. - -@smallspace - -@subheading Entering music and viewing output - -@cindex PDF file -@cindex viewing music -@cindex text editors -@cindex running LilyPond under MacOS X -@cindex MacOS X, running LilyPond -@cindex running LilyPond under Windows -@cindex Windows, running LilyPond -@cindex running LilyPond under Unix -@cindex Unix, running LilyPond - -In this section we will explain what commands to run and how to -view or print the output. - -Note that there are several other text editors available with -better support for LilyPond. For more information, see -@rprogram{Text editor support}. - -@warning{The first time you ever run LilyPond, it may take a -minute or two because all of the system fonts have to be analyzed -first. After this, LilyPond will be much faster!} - -@subsubheading MacOS X - -If you double click @command{LilyPond.app}, it will open with an -example file. Save it, for example, to @file{test.ly} on your -Desktop, and then process it with the menu command -@w{@code{Compile > Typeset File}}. The resulting PDF file will be -displayed on your screen. - -For future use of LilyPond, you should begin by selecting @q{New} -or @q{Open}. You must save your file before typesetting it. If -any errors occur in processing, please see the log window. - - -@subsubheading Windows - -On Windows, if you double-click in the LilyPond icon on the -Desktop, it will open a simple text editor with an example file. -Save it, for example, to @file{test.ly} on your Desktop and then -double-click on the file to process it (the file icon looks like a -note). After some seconds, you will get a file @file{test.pdf} on -your desktop. Double-click on this PDF file to view the typeset -score. An alternative method to process the @file{test.ly} file -is to drag and drop it onto the LilyPond icon using your mouse -pointer. - -To edit an existing @file{.ly} file, right-click on it and -select @qq{Edit source}. To get an empty file to start from, run -the editor as described above and use @qq{New} in -the @qq{File} menu, or right-click on the desktop and select -@qq{New..Text Document}, change its name to a name of your choice -and change the file extension to @code{.ly}. Double-click the -icon to type in your LilyPond source code as before. - -Double-clicking the file does not only result in a PDF file, but -also produces a @file{.log} file that contains some information on -what LilyPond has done to the file. If any errors occur, please -examine this file. - -@subsubheading UNIX - -Create a text file called @file{test.ly} and enter: - -@example -@{ - c' e' g' e' -@} -@end example - -To process @file{test.ly}, proceed as follows: - -@example -lilypond test.ly -@end example - -@noindent -You will see something resembling: - -@example -lilypond test.ly -GNU LilyPond @version{} -Processing `test.ly' -Parsing... -Interpreting music... -Preprocessing graphical objects... -Finding the ideal number of pages... -Fitting music on 1 page... -Drawing systems... -Layout output to `test.ps'... -Converting to `test.pdf'... -@end example - - -@node Simple notation -@subsection Simple notation - -@cindex simple notation -@cindex notation, simple - -LilyPond will add some notation elements automatically. In the -next example, we have only specified four pitches, but LilyPond -has added a clef, time signature, and rhythms. - -@lilypond[verbatim,quote] -{ - c' e' g' e' -} -@end lilypond - -@noindent -This behavior may be altered, but in most cases these automatic -values are useful. - - -@subheading Pitches - -@cindex pitches -@cindex relative mode -@cindex quote, single -@cindex comma -@cindex accidentals and relative mode -@cindex relative mode, and accidentals - -@funindex \relative -@funindex relative -@funindex ' -@funindex , - -Music Glossary: @rglos{pitch}, @rglos{interval}, -@rglos{scale}, @rglos{middle C}, @rglos{octave}, -@rglos{accidental}. - -The easiest way to enter notes is by using @code{\relative} mode. -In this mode, the octave is chosen automatically by assuming the -following note is always to be placed closest to the previous -note, i.e., it is to be placed in the octave which is within three -staff spaces of the previous note. We begin by entering the most -elementary piece of music, a @notation{scale}, in which every note -is within just one staff space of the previous note. - -@lilypond[verbatim,quote] -% set the starting point to middle C -\relative c' { - c d e f - g a b c -} -@end lilypond - -The initial note is @notation{middle C}. Each successive note is -placed closest to the previous note -- in other words, the first -@code{c} is the closest C to middle C. This is followed by the -closest D to the previous note. We can create melodies which have -larger intervals, still using only @code{\relative} mode: - -@lilypond[verbatim,quote] -\relative c' { - d f a g - c b f d -} -@end lilypond - -@noindent -It is not necessary for the first note of the melody to start on -the note which specifies the starting pitch. In the previous -example, the first note -- the @code{d} -- is the closest D to -middle C. - -By adding (or removing) quotes @code{'} or commas @code{,} from -the @code{@w{\relative c' @{}} command, we can change the starting -octave: - -@lilypond[verbatim,quote] -% one octave above middle C -\relative c'' { - e c a c -} -@end lilypond - -Relative mode can be confusing initially, but is the easiest way -to enter most melodies. Let us see how this relative calculation -works in practice. Starting from a B, which is on the middle line -in a treble clef, you can reach a C, D and E within 3 staff spaces -going up, and an A, G and F within 3 staff spaces going down. So -if the note following a B is a C, D or E it will be assumed to be -above the B, and an A, G or F will be assumed to be below. - -@lilypond[verbatim,quote] -\relative c'' { - b c % c is 1 staff space up, so is the c above - b d % d is 2 up or 5 down, so is the d above - b e % e is 3 up or 4 down, so is the e above - b a % a is 6 up or 1 down, so is the a below - b g % g is 5 up or 2 down, so is the g below - b f % f is 4 up or 3 down, so is the f below -} -@end lilypond - -Exactly the same happens even when any of these notes are -sharpened or flattened. @notation{Accidentals} are -@strong{totally ignored} in the calculation of relative position. -Precisely the same staff space counting is done from a note at any -other position on the staff. - -To add intervals that are larger than three staff spaces, we can -raise the @notation{octave} by adding a single quote @code{'} (or -apostrophe) to the note name. We can lower the octave by adding a -comma @code{,} to the note name. - -@lilypond[verbatim,quote] -\relative c'' { - a a, c' f, - g g'' a,, f' -} -@end lilypond - -@noindent -To change a note by two (or more!) octaves, we use multiple -@code{''} or @code{,,} -- but be careful that you use two single -quotes @code{''} and not one double quote @code{"}@tie{}! The -initial value in @code{@w{\relative c'}} may also be modified like -this. -@c " - keeps quotes in order for context-sensitive editor -td - -@subheading Durations (rhythms) - -@cindex note durations -@cindex durations -@cindex rhythms -@cindex whole note -@cindex half note -@cindex quarter note -@cindex dotted note -@cindex notating durations - -Music Glossary: @rglos{beam}, @rglos{duration}, -@rglos{whole note}, @rglos{half note}, @rglos{quarter note}, -@rglos{dotted note}. - -The @notation{duration} of a note is specified by a number after -the note name. @code{1} for a @notation{whole note}, @code{2} for -a @notation{half note}, @code{4} for a @notation{quarter note} and -so on. @notation{Beams} are added automatically. - -If you do not specify a duration, the previous duration is used -for the next note. The duration of the first note defaults to a -quarter. - -@lilypond[verbatim,quote] -\relative c'' { - a1 - a2 a4 a8 a - a16 a a a a32 a a a a64 a a a a a a a a2 -} -@end lilypond - -To create @notation{dotted notes}, add a dot @code{.} to the -duration number. The duration of a dotted note must be stated -explicitly (i.e., with a number). - -@lilypond[verbatim,quote] -\relative c'' { - a a a4. a8 - a8. a16 a a8. a8 a4. -} -@end lilypond - - -@subheading Rests - -@cindex rest -@cindex notating rests - -Music Glossary: @rglos{rest}. - -A @notation{rest} is entered just like a note with the name -@code{r}@tie{}: - -@lilypond[verbatim,quote] -\relative c'' { - a r r2 - r8 a r4 r4. r8 -} -@end lilypond - - -@subheading Time signature - -@cindex time signature - -@funindex \time -@funindex time - -Music Glossary: @rglos{time signature}. - -The @notation{time signature} can be set with the @code{\time} -command: - -@lilypond[verbatim,quote] -\relative c'' { - \time 3/4 - a4 a a - \time 6/8 - a4. a - \time 4/4 - a4 a a a -} -@end lilypond - - -@subheading Clef - -@cindex clef -@cindex treble -@cindex alto -@cindex tenor -@cindex bass - -@funindex \clef -@funindex clef - -Music Glossary: @rglos{clef}. - -The @notation{clef} can be set using the @code{\clef} command: - -@lilypond[verbatim,quote] -\relative c' { - \clef treble - c1 - \clef alto - c1 - \clef tenor - c1 - \clef bass - c1 -} -@end lilypond - - -@subheading All together - -Here is a small example showing all these elements together: - -@lilypond[verbatim,quote] -\relative c, { - \time 3/4 - \clef bass - c2 e8 c' g'2. - f4 e d c4 c, r4 -} -@end lilypond - - -@seealso -Notation Reference: @ruser{Writing pitches}, -@ruser{Writing rhythms}, @ruser{Writing rests}, -@ruser{Time signature}, @ruser{Clef}. - - -@node Working on input files -@subsection Working on input files - -@cindex curly braces -@cindex braces, curly -@cindex comments -@cindex line comment -@cindex comment, line -@cindex block comment -@cindex comment, line -@cindex case sensitive -@cindex whitespace insensitive -@cindex expressions - -@funindex { ... } -@funindex % -@funindex %@{ ... %@} - -LilyPond input files are similar to source files in many common -programming languages. They are case sensitive, and white-space -is generally ignored. Expressions are formed with curly braces -@{ @}, and comments are denoted with @code{%} or -@w{@code{%@{ ... %@}}}. - -If the previous sentences sound like nonsense, don't worry! We'll -explain what all these terms mean: - -@itemize - -@item -@strong{Case sensitive}: -it matters whether you enter a letter in lower case (e.g. -@w{@code{a, b, s, t}}) or upper case (e.g. @w{@code{A, B, S, T}}). -Notes are lower case: @w{@code{@{ c d e @}}} is valid input; -@w{@code{@{ C D E @}}} will produce an error message. - -@item -@strong{Whitespace insensitive}: -it does not matter how many spaces (or tabs or new lines) you add. -@w{@code{@{ c d e @}}} means the same thing as -@w{@code{@{ c @tie{}} @tie{} @tie{} d e @}} and: - -@example -@{ c d - e @} -@end example - -@noindent -Of course, the previous example is hard to read. A good rule of -thumb is to indent code blocks with either a tab or two spaces: - -@example -@{ - c d e -@} -@end example - -However, whitespace @emph{is} required to separate many syntactical -elements from others. In other words, whitespace can always be -@emph{added}, but it cannot be @emph{eliminated}. As missing -whitespace can give rise to strange errors it is advisable to -always insert whitespace before and after every syntactic element, -for example, before and after every curly brace. - -@item -@strong{Expressions}: -every piece of LilyPond input needs to have @strong{@{ curly -braces @}} placed around the input. These braces tell LilyPond -that the input is a single music expression, just like parentheses -@code{()} in mathematics. The braces should be surrounded by a -space unless they are at the beginning or end of a line to avoid -ambiguities. - -A LilyPond command followed by a simple expression in braces (such -as @w{@code{\relative @{ @}}}) also counts as a single music -expression. - -@cindex comments -@cindex line comment -@cindex block comment -@item -@strong{Comments}: -a comment is a remark for the human reader of the music input; it -is ignored while parsing, so it has no effect on the printed -output. There are two types of comments. The percent symbol -@code{%} introduces a line comment; anything after @code{%} on -that line is ignored. By convention, a line comment is placed -@emph{above} the code it refers to. - -@example -a4 a a a -% this comment refers to the Bs -b2 b -@end example - -A block comment marks a whole section of music input as a comment. -Anything that is enclosed in @code{%@{} and @code{%@}} is ignored. -However, block comments do not @q{nest}. This means that you -cannot place a block comment inside another block comment. If you -try, the first @code{%@}} will terminate @emph{both} block -comments. The following fragment shows possible uses for -comments: - -@example -% notes for twinkle twinkle follow - c4 c g' g a a g2 - -%@{ - This line, and the notes below are ignored, - since they are in a block comment. - - f f e e d d c2 -%@} -@end example - -@end itemize - - -@node How to read the manual -@subsection How to read the manual - -@cindex how to read the manual -@cindex manual, reading -@cindex reading the manual -@cindex examples, clickable -@cindex clickable examples -@cindex tips for constructing files -@cindex templates -@cindex constructing files, tips -@cindex files, tips for constructing - -LilyPond input must be surrounded by @{ @} marks or a -@code{@w{\relative c'' @{ ... @}}}, as we saw in @ref{Working on -input files}. For the rest of this manual, most examples will -omit this. To replicate the examples, you may copy and paste the -displayed input, but you @strong{must} add the -@code{@w{\relative c'' @{ @}}} like this: - -@example -\relative c'' @{ - ... example goes here... -@} -@end example - -Why omit the braces? Most examples in this manual can be inserted -into the middle of a longer piece of music. For these examples, -it does not make sense to add @code{@w{\relative c'' @{ @}}} -- -you should not place a @code{\relative} inside another -@code{\relative}! If we included @code{@w{\relative c'' @{ @}}} -around every example, you would not be able to copy a small -documentation example and paste it inside a longer piece of your -own. Most people want to add material to an existing piece, so we -format the manual this way. - - -@subheading Clickable examples - -Many people learn programs by trying and fiddling around with the -program. This is also possible with LilyPond. If you click on a -picture in the HTML version of this manual, you will see the exact -LilyPond input that was used to generate that image. Try it on -this image: - -@c no verbatim here -@lilypond[quote] -\relative c'' { - c-\markup { \bold \huge { Click here. } } -} -@end lilypond - -By cutting and pasting everything in the @qq{ly snippet} section, -you have a starting template for experiments. To see exactly the -same output (line-width and all), copy everything from @qq{Start -cut-&-pastable section} to the bottom of the file. - - -@seealso -There are more tips for constructing input files in -@ref{Suggestions for writing LilyPond input files}. But it might be -best to read through the rest of the tutorial first. - - -@node Single staff notation -@section Single staff notation - -This section introduces common notation that is used for one voice -on one staff. - -@menu -* Accidentals and key signatures:: -* Ties and slurs:: -* Articulation and dynamics:: -* Adding text:: -* Automatic and manual beams:: -* Advanced rhythmic commands:: -@end menu - - -@node Accidentals and key signatures -@subsection Accidentals and key signatures - -@subheading Accidentals - -@cindex accidentals -@cindex accidentals and key signatures -@cindex sharp -@cindex double sharp -@cindex sharp, double -@cindex flat -@cindex double flat -@cindex flat, double - -@funindex es -@funindex is -@funindex eses -@funindex isis - -Music Glossary: @rglos{sharp}, @rglos{flat}, @rglos{double sharp}, -@rglos{double flat}, @rglos{accidental}. - -A @notation{sharp} pitch is made by adding @code{is} to the name, -and a @notation{flat} pitch by adding @code{es}. As you might -expect, a @notation{double sharp} or @notation{double flat} is -made by adding @code{isis} or @code{eses}. This syntax is derived -from note naming conventions in Nordic and Germanic languages, -like German and Dutch. To use other names for -@notation{accidentals}, see @ruser{Note names in other languages}. - -@lilypond[verbatim,quote,relative=2] -cis1 ees fisis, aeses -@end lilypond - -@cindex key signature, setting -@subheading Key signatures - -@cindex key signature -@cindex major -@cindex minor -@cindex accidentals and key signature -@cindex content vs. layout -@cindex layout vs. content - -@funindex \key -@funindex key -@funindex \major -@funindex major -@funindex \minor -@funindex minor - -Music Glossary: @rglos{key signature}, @rglos{major}, -@rglos{minor}. - -The @notation{key signature} is set with the command @code{\key} -followed by a pitch and @code{\major} or @code{\minor}. - -@lilypond[verbatim,quote,relative=2] -\key d \major -a1 -\key c \minor -a -@end lilypond - -@smallspace - -@subheading Warning: key signatures and pitches - -Music Glossary: @rglos{accidental}, @rglos{key signature}, -@rglos{pitch}, @rglos{flat}, @rglos{natural}, @rglos{sharp}, -@rglos{transposition}. - -To determine whether to print an @notation{accidental}, LilyPond -examines the pitches and the @notation{key signature}. The key -signature only affects the @emph{printed} accidentals, not the -note's @notation{pitch}! This is a feature that often causes -confusion to newcomers, so let us explain it in more detail. - -LilyPond makes a sharp distinction between musical content and -layout. The alteration (@notation{flat}, @notation{natural sign} or -@notation{sharp}) of a note is part of the pitch, and is therefore -musical content. Whether an accidental (a @emph{printed} flat, -natural or sharp sign) is printed in front of the corresponding -note is a question of layout. Layout is something that follows -rules, so accidentals are printed automatically according to those -rules. The pitches in your music are works of art, so they will -not be added automatically, and you must enter what you want to -hear. - -In this example: - -@lilypond[verbatim,quote,relative=2] -\key d \major -d cis fis -@end lilypond - -@noindent -No note has a printed accidental, but you must still add -@code{is} and type @code{cis} and @code{fis} in the input file. - -The code @code{b} does not mean @qq{print a black dot just on -the middle line of the staff.} Rather, it means @qq{there is a -note with pitch B-natural.} In the key of A-flat major, it -@emph{does} get an accidental: - -@lilypond[verbatim,quote,relative=2] -\key aes \major -b -@end lilypond - -Adding all alterations explicitly might require a little more -effort when typing, but the advantage is that -@notation{transposing} is easier, and accidentals can be printed -according to different conventions. For some examples how -accidentals can be printed according to different rules, see -@ruser{Automatic accidentals}. - - -@seealso -Notation Reference: @ruser{Note names in other languages}, -@ruser{Accidentals}, @ruser{Automatic accidentals}, -@ruser{Key signature}. - -Music Glossary: @rglos{Pitch names}. - - -@node Ties and slurs -@subsection Ties and slurs - -@cindex tie -@cindex slur -@cindex slur, phrasing -@cindex phrasing slur - -@funindex ~ -@funindex ( ... ) -@funindex \( ... \) - -@subheading Ties - - -Music Glossary: @rglos{tie}. - -A @notation{tie} is created by appending a tilde @code{~} to the -first note being tied. - -@lilypond[verbatim,quote,relative=2] -g4~ g c2~ -c4 ~ c8 a8 ~ a2 -@end lilypond - -@subheading Slurs - - -Music Glossary: @rglos{slur}. - -A @notation{slur} is a curve drawn across many notes. The -starting note and ending note are marked with @code{(} and -@code{)} respectively. - -@lilypond[verbatim,quote,relative=2] -d4( c16) cis( d e c cis d) e( d4) -@end lilypond - -@subheading Phrasing slurs - -Music Glossary: @rglos{slur}, @rglos{phrasing}. - -Slurs to indicate longer @notation{phrasing} can be entered with -@code{\(} and @code{\)}. You can have both @notation{slurs} -and phrasing slurs at the same time, but you cannot have -simultaneous slurs or simultaneous phrasing slurs. - -@lilypond[verbatim,quote,relative=2] -a8(\( ais b c) cis2 b'2 a4 cis,\) -@end lilypond - -@smallspace - -@cindex slurs versus ties -@subheading Warnings: slurs vs. ties - -Music Glossary: @rglos{articulation}, @rglos{slur}, @rglos{tie}. - -A @notation{slur} looks like a @notation{tie}, but it has a -different meaning. A tie simply makes the first note longer, and -can only be used on pairs of notes with the same pitch. Slurs -indicate the @notation{articulation} of notes, and can be used on -larger groups of notes. Slurs and ties can be nested. - -@lilypond[verbatim,quote,relative=2] -c2~( c8 fis fis4 ~ fis2 g2) -@end lilypond - - -@seealso -Notation Reference: @ruser{Ties}, @ruser{Slurs}, -@ruser{Phrasing slurs}. - - -@node Articulation and dynamics -@subsection Articulation and dynamics - - -@subheading Articulations - -@cindex articulation -@cindex accent -@cindex staccato - -Music Glossary: @rglos{articulation}. - -Common @notation{articulations} can be added to a note using a -dash @code{-} and a single character: - -@lilypond[verbatim,quote,relative=2] -c-. c-- c-> c-^ c-+ c-_ -@end lilypond - -@subheading Fingerings - -@cindex fingering - -@funindex ^ -@funindex _ - -Music Glossary: @rglos{fingering}. - -Similarly, @notation{fingering} indications can be added to a note -using a dash (@code{-}) and the digit to be printed: - -@lilypond[verbatim,quote,relative=2] -c-3 e-5 b-2 a-1 -@end lilypond - -Articulations and fingerings are usually placed automatically, but -you can specify a direction by replacing the dash (@code{-}) with -@code{^} (up) or @code{_} (down). You can also use multiple -articulations on the same note. However, in most cases it is best -to let LilyPond determine the articulation directions. - -@lilypond[verbatim,quote,relative=2] -c_-^1 d^. f^4_2-> e^-_+ -@end lilypond - -@subheading Dynamics - -@cindex dynamics -@cindex decrescendo -@cindex crescendo - -@funindex \f -@funindex \ff -@funindex \mp -@funindex \p -@funindex \mf -@funindex \pp -@funindex \< -@funindex < -@funindex \> -@funindex > -@funindex \! -@funindex ! - -Music Glossary: @rglos{dynamics}, @rglos{crescendo}, -@rglos{decrescendo}. - -@notation{Dynamic} signs are made by adding the markings (with a -backslash) to the note: - -@lilypond[verbatim,quote,relative=2] -c\ff c\mf c\p c\pp -@end lilypond - - -@notation{Crescendi} and @notation{decrescendi} are started with -the commands @code{\<} and @code{\>}. The next dynamics sign, for -example @code{\f}, will end the (de)crescendo, or the command -@code{\!} can be used: - -@lilypond[verbatim,quote,relative=2] -c2\< c2\ff\> c2 c2\! -@end lilypond - - -@seealso -Notation Reference: @ruser{Articulations and ornamentations}, -@ruser{Fingering instructions}, @ruser{Dynamics}. - - -@node Adding text -@subsection Adding text - -@cindex text, adding -@cindex adding text -@cindex markup - -@funindex \markup -@funindex markup - -Text may be added to your scores: - -@lilypond[verbatim,quote,relative=2] -c1^"espr" a_"legato" -@end lilypond - -Extra formatting may be added with the @code{\markup} command: - -@lilypond[verbatim,quote,relative=2] -c1^\markup{ \bold espr} -a1_\markup{ - \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p -} -@end lilypond - - -@seealso -Notation Reference: @ruser{Writing text}. - - -@node Automatic and manual beams -@subsection Automatic and manual beams - -@cindex beaming -@cindex automatic beams -@cindex manual beams -@cindex beams, automatic -@cindex beams, manual -@cindex beams, by hand - -@funindex [ ... ] -@funindex [ -@funindex ] -@funindex \autoBeamOff -@funindex autoBeamOff -@funindex \autoBeamOn -@funindex autoBeamOn - -Music Glossary: @rglos{beam}. - -All @notation{beams} are drawn automatically: - -@lilypond[verbatim,quote,relative=2] -a8 ais d ees r d c16 b a8 -@end lilypond - -If you do not like the automatic beams, they may be overridden -manually. To correct just an occasional beam mark the first note -to be beamed with @code{[} and the last one with @code{]}. - -@lilypond[verbatim,quote,relative=2] -a8[ ais] d[ ees r d] a b -@end lilypond - -If you want to turn off automatic beaming entirely or for an -extended section of music, use the command @code{\autoBeamOff} -to turn off automatic beaming and @code{\autoBeamOn} to turn it -on again. - -@lilypond[verbatim,quote,relative=2] -\autoBeamOff -a8 c b4 d8. c16 b4 -\autoBeamOn -a8 c b4 d8. c16 b4 -@end lilypond - - -@seealso -Notation Reference: @ruser{Automatic beams}, @ruser{Manual beams}. - - -@node Advanced rhythmic commands -@subsection Advanced rhythmic commands - -@subheading Partial measure - -@cindex pickup -@cindex anacrusis -@cindex partial measure - -@funindex \partial -@funindex partial - -Music Glossary: @rglos{anacrusis}. - -A pickup (or @notation{anacrusis}) is entered with the keyword -@code{\partial}. It is followed by a duration: @code{\partial 4} -is a quarter note pickup and @code{\partial 8} an eighth note. - -@lilypond[verbatim,quote,relative=2] -\partial 8 -f8 c2 d -@end lilypond - -@subheading Tuplets - -@cindex tuplets -@cindex triplets - -@funindex \times -@funindex times - -Music Glossary: @rglos{note value}, @rglos{triplet}. - -@notation{Tuplets} are made with the @code{\times} keyword. It -takes two arguments: a fraction and a piece of music. The -duration of the piece of music is multiplied by the fraction. -Triplets make notes occupy 2/3 of their notated duration, so a -@notation{triplet} has 2/3 as its fraction - -@lilypond[verbatim,quote,relative=2] -\times 2/3 { f8 g a } -\times 2/3 { c r c } -\times 2/3 { f,8 g16[ a g a] } -\times 2/3 { d4 a8 } -@end lilypond - -@subheading Grace notes - -@cindex grace notes -@cindex acciaccatura -@cindex appoggiatura - -@funindex \grace -@funindex grace -@funindex \acciaccatura -@funindex acciaccatura -@funindex \appoggiatura -@funindex acciaccatura - -Music Glossary: @rglos{grace notes}, @rglos{acciaccatura}, -@rglos{appoggiatura}. - -@notation{Grace notes} are created with the @code{\grace} command, -although they can also be created by prefixing a music expression -with the keyword @code{\appoggiatura} or @code{\acciaccatura}: - -@lilypond[verbatim,quote,relative=2] -c2 \grace { a32[ b] } c2 -c2 \appoggiatura b16 c2 -c2 \acciaccatura b16 c2 -@end lilypond - - -@seealso -Notation Reference: @ruser{Grace notes}, @ruser{Tuplets}, -@ruser{Upbeats}. - - -@node Multiple notes at once -@section Multiple notes at once - -This section introduces having more than one note at the same -time: multiple instruments, multiple staves for a single -instrument (i.e. piano), and chords. - -Polyphony in music refers to having more than one voice occurring -in a piece of music. Polyphony in LilyPond refers to having more -than one voice on the same staff. - -@menu -* Music expressions explained:: -* Multiple staves:: -* Staff groups:: -* Combining notes into chords:: -* Single staff polyphony:: -@end menu - - -@node Music expressions explained -@subsection Music expressions explained - -@cindex music expression -@cindex expression, music -@cindex compound music expression -@cindex music expression, compound - -In LilyPond input files, music is represented by @emph{music -expressions}. A single note is a music expression: - -@lilypond[verbatim,quote,relative=2] -a4 -@end lilypond - -Enclosing a note in braces creates a @emph{compound music -expression}. Here we have created a compound music expression -with two notes: - -@lilypond[verbatim,quote,relative=2] -{ a4 g4 } -@end lilypond - -Putting a group of music expressions (e.g. notes) in braces means -that they are in sequence (i.e. each one follows the previous -one). The result is another music expression: - -@lilypond[verbatim,quote,relative=2] -{ { a4 g } f g } -@end lilypond - -@subheading Analogy: mathematical expressions - -This mechanism is similar to mathematical formulas: a big formula -is created by composing small formulas. Such formulas are called -expressions, and they can contain other expressions, so you can -make arbitrarily complex and large expressions. For example, - -@example -1 - -1 + 2 - -(1 + 2) * 3 - -((1 + 2) * 3) / (4 * 5) -@end example - -This is a sequence of expressions, where each expression is -contained in the next (larger) one. The simplest expressions are -numbers, and larger ones are made by combining expressions with -operators (like @code{+}, @code{*} and @code{/}) and parentheses. -Like mathematical expressions, music expressions can be nested -arbitrarily deep, which is necessary for complex music like -polyphonic scores. - - -@subheading Simultaneous music expressions: multiple staves - -@cindex multiple staves -@cindex staves, multiple -@cindex polyphony -@cindex combining expressions in parallel -@cindex parallel expressions -@cindex expressions, parallel -@cindex relative notes and simultaneous music -@cindex relative notes and parallel expressions -@cindex simultaneous music and relative notes -@cindex parallel expressions and relative notes - -@funindex << -@funindex >> -@funindex << ... >> - -Music Glossary: @rglos{polyphony}. - -This technique is useful for @notation{polyphonic} music. To -enter music with more voices or more staves, we combine -expressions in parallel. To indicate that two voices should play -at the same time, simply enter a simultaneous combination of music -expressions. A @q{simultaneous} music expression is formed by -enclosing expressions inside @code{<<} and @code{>>}. In the -following example, three sequences (all containing two separate -notes) are combined simultaneously: - -@lilypond[verbatim,quote] -\relative c'' { - << - { a4 g } - { f e } - { d b } - >> -} -@end lilypond - -Note that we have indented each level of the input with a -different amount of space. LilyPond does not care how much (or -little) space there is at the beginning of a line, but indenting -LilyPond code like this makes it much easier for humans to read. - -@warning{each note is relative to the previous note in -the input, not relative to the @code{c''} in the initial -@code{@bs{}relative} command.} - - -@subheading Simultaneous music expressions: single staff - -To determine the number of staves in a piece, LilyPond looks at -the beginning of the first expression. If is a single note, there -is one staff; if there is a simultaneous expression, there is more -than one staff. - -@lilypond[verbatim,quote] -\relative c'' { - c2 <> - << { e f } { c <> } >> -} -@end lilypond - -@node Multiple staves -@subsection Multiple staves - -@cindex multiple staves -@cindex staves, multiple -@cindex context -@cindex context, notation -@cindex notation context - -@funindex \new Staff -@funindex new Staff -@funindex Staff -@funindex \new -@funindex new -@funindex Score -@funindex Voice -@funindex Lyrics -@funindex ChordNames - -LilyPond input files are constructed out of music expressions, as -we saw in @ref{Music expressions explained}. If the score begins -with simultaneous music expressions, LilyPond creates multiples -staves. However, it is easier to see what happens if we create -each staff explicitly. - -To print more than one staff, each piece of music that makes up a -staff is marked by adding @code{\new Staff} before it. These -@code{Staff} elements are then combined in parallel with @code{<<} -and @code{>>}: - -@lilypond[verbatim,quote] -\relative c'' { - << - \new Staff { \clef treble c } - \new Staff { \clef bass c,, } - >> -} -@end lilypond - -The command @code{\new} introduces a @q{notation context.} A -notation context is an environment in which musical events (like -notes or @code{\clef} commands) are interpreted. For simple -pieces, such notation contexts are created automatically. For -more complex pieces, it is best to mark contexts explicitly. - -There are several types of contexts. @code{Score}, @code{Staff}, -and @code{Voice} handle melodic notation, while @code{Lyrics} sets -lyric texts and @code{ChordNames} prints chord names. - -In terms of syntax, prepending @code{\new} to a music expression -creates a bigger music expression. In this way it resembles the -minus sign in mathematics. The formula @math{(4+5)} is an -expression, so @math{-(4+5)} is a bigger expression. - -Time signatures entered in one staff affects all other staves by -default. On the other hand, the key signature of one staff does -@emph{not} affect other staves. This different default behavior -is because scores with transposing instruments are more common -than polyrhythmic scores. - -@lilypond[verbatim,quote] -\relative c'' { - << - \new Staff { \clef treble \key d \major \time 3/4 c } - \new Staff { \clef bass c,, } - >> -} -@end lilypond - - - - -@node Staff groups -@subsection Staff groups - -@cindex piano staff -@cindex staff, piano -@cindex choir staff -@cindex staff, choir -@cindex grand staff -@cindex staff, grand -@cindex staff group - -@funindex PianoStaff -@funindex GrandStaff -@funindex ChoirStaff - -Music Glossary: @rglos{brace}. - -Piano music is typeset in two staves connected by a -@notation{brace}. -Printing such a staff is similar to the polyphonic example in -@ref{Multiple staves}. However, now this entire expression is -inserted inside a @code{PianoStaff}: - -@example -\new PianoStaff << - \new Staff @dots{} - \new Staff @dots{} ->> -@end example - -Here is a small example: - -@lilypond[verbatim,quote] -\relative c'' { - \new PianoStaff << - \new Staff { \time 2/4 c4 e g g, } - \new Staff { \clef bass c,, c' e c } - >> -} -@end lilypond - -Other staff groupings are introduced with @code{\new GrandStaff}, -suitable for orchestral scores, and @w{@code{\new ChoirStaff}}, -suitable for vocal scores. These staff groups each form another -type of context, one that generates the brace at the left end of -every system and also controls the extent of bar lines. - - -@seealso -Notation Reference: @ruser{Keyboard and other multi-staff -instruments}, -@ruser{Displaying staves}. - - -@node Combining notes into chords -@subsection Combining notes into chords - -@cindex chords -@cindex note durations in chords - -@funindex < -@funindex > -@funindex < ... > - -Music Glossary: @rglos{chord}. - -We saw earlier how notes can be combined into @notation{chords} by -indicating they are simultaneous by enclosing them in double angle -brackets. However, the normal way of indicating a chord is to -surround the pitches with @emph{single} angle brackets. Note that -all the notes in a chord must have the same duration, and that the -duration is placed after the closing bracket. - -@lilypond[verbatim,quote,relative=2] -r4 4 2 -@end lilypond - -Think of chords as almost equivalent to single notes: -almost everything you can attach to a single note can be attached -to a chord, and everything must go @emph{outside} the angle -brackets. For example, you can combine markings like beams and -ties with chords. They must be placed outside the angle brackets. - -@lilypond[verbatim,quote,relative=2] -r4 8[ ]~ 2 -r4 8( \> 4 \!) -@end lilypond - - -@node Single staff polyphony -@subsection Single staff polyphony - -@cindex polyphony -@cindex multiple voices -@cindex voices, more on one staff -@cindex single staff polyphony -@cindex spacer rest -@cindex rest, spacer - -@funindex << ... \\ ... >> -@funindex << -@funindex \\ -@funindex >> - -Polyphonic music in lilypond, while not difficult, uses concepts -that we haven't discussed yet, so we're not going to introduce -them here. Instead, the following sections introduce these concepts -and explain them thoroughly. - -@seealso -Learning Manual: @ref{Voices contain music}. - -Notation Reference: @ruser{Simultaneous notes}. - -@node Songs -@section Songs - -This section introduces vocal music and simple song sheets. - -@menu -* Setting simple songs:: -* Aligning lyrics to a melody:: -* Lyrics to multiple staves:: -@end menu - - -@node Setting simple songs -@subsection Setting simple songs - -@cindex lyrics -@cindex songs - -@funindex \addlyrics -@funindex addlyrics - -Music Glossary: @rglos{lyrics}. - -Here is the start of the melody to a nursery -rhyme, @notation{Girls and boys come out to play}: - -@lilypond[verbatim,quote] -\relative c'' { - \key g \major - \time 6/8 - d4 b8 c4 a8 d4 b8 g4 -} -@end lilypond - -The @notation{lyrics} can be set to these notes, combining both -with the @code{\addlyrics} keyword. Lyrics are entered by -separating each syllable with a space. - -@lilypond[verbatim,quote] -<< - \relative c'' { - \key g \major - \time 6/8 - d4 b8 c4 a8 d4 b8 g4 - } - \addlyrics { - Girls and boys come out to play, - } ->> -@end lilypond - -Note the curly brackets delimiting both the music and the lyrics, -and the double angle brackets @w{@code{<< ... >>}} around the -whole piece to show that the music and lyrics are to occur at the -same time. - -@node Aligning lyrics to a melody -@subsection Aligning lyrics to a melody - -@cindex melisma -@cindex extender line -@cindex hyphens -@cindex underscore -@cindex lyrics, aligning -@cindex aligning lyrics -@cindex lyrics, multi-syllable words -@cindex words with multiple syllables in lyrics - -Music Glossary: @rglos{melisma}, @rglos{extender line}. - -The next line in the nursery rhyme is @notation{The moon doth -shine as bright as day}. Let's extend it: - -@lilypond[verbatim,quote] -<< - \relative c'' { - \key g \major - \time 6/8 - d4 b8 c4 a8 d4 b8 g4 - g8 a4 b8 c b a d4 b8 g4. - } - \addlyrics { - Girls and boys come out to play, - The moon doth shine as bright as day; - } ->> -@end lilypond - -We see the extra lyrics do not align properly with the notes. The -word @notation{shine} should be sung on two notes, not one. This -is called a @notation{melisma}, a single syllable sung to more -than one note. There are several ways to spread a syllable over -multiple notes, the simplest being to add a slur across them, for -details, see @ref{Ties and slurs}: - -@lilypond[verbatim,quote] -<< - \relative c'' { - \key g \major - \time 6/8 - d4 b8 c4 a8 d4 b8 g4 - g8 a4 b8 c( b) a d4 b8 g4. - } - \addlyrics { - Girls and boys come out to play, - The moon doth shine as bright as day; - } ->> -@end lilypond - -The words now line up correctly with the notes, but the automatic -beaming for the notes above @notation{shine as} does not look right. -We can correct this by inserting manual beaming commands to override -the automatic beaming here, for details, see @ref{Automatic and -manual beams}. - -@lilypond[verbatim,quote] -<< - \relative c'' { - \key g \major - \time 6/8 - d4 b8 c4 a8 d4 b8 g4 - g8 a4 b8 c([ b]) a d4 b8 g4. - } - \addlyrics { - Girls and boys come out to play, - The moon doth shine as bright as day; - } ->> -@end lilypond - -As an alternative to using slurs, the melismata may be indicated -in just the lyrics by using an underscore @code{_} for each note -that should be included in the melisma: - -@lilypond[verbatim,quote] -<< - \relative c'' { - \key g \major - \time 6/8 - d4 b8 c4 a8 d4 b8 g4 - g8 a4 b8 c[ b] a d4 b8 g4. - } - \addlyrics { - Girls and boys come out to play, - The moon doth shine _ as bright as day; - } ->> -@end lilypond - -If a syllable extends over several notes or a single very long -note an @notation{extender line} is usually drawn from the -syllable extending under all the notes for that syllable. It is -entered as two underscores @code{__}. Here is an example from the -first three bars of @notation{Dido's Lament}, from Purcell's -@notation{Dido and Æneas}: - -@lilypond[verbatim,quote] -<< - \relative c'' { - \key g \minor - \time 3/2 - g2 a bes bes( a) - b c4.( bes8 a4. g8 fis4.) g8 fis1 - } - \addlyrics { - When I am laid, - am laid __ in earth, - } ->> -@end lilypond - -None of the examples so far have involved words containing more -than one syllable. Such words are usually split one syllable to a -note, with hyphens between syllables. Such hyphens are entered as -two dashes, resulting in a centered hyphen between the syllables. -Here is an example showing this and everything we have learned so -far about aligning lyrics to notes. - -@c no ragged-right here because otherwise the hyphens get lost, -@c but the example is long enough to avoid looking strange. -@lilypond[verbatim,quote,noragged-right] -<< - \relative c' { - \key g \major - \time 3/4 - \partial 4 - d4 g4 g a8( b) g4 g4 - b8( c) d4 d e4 c2 - } - \addlyrics { - A -- way in a __ man -- ger, - no __ crib for a bed, __ - } ->> -@end lilypond - -Some lyrics, especially those in Italian, require the opposite: -setting more than one syllable to a single note. This is -achieved by linking the syllables together with a single -underscore @code{_} (with no spaces), or enclosing them in quotes. -Here's an example from Rossini's @notation{Figaro}, where -@notation{al} has to be sung on the same note as the @notation{go} of -@notation{Largo} in Figaro's aria @notation{Largo al factotum}: - -@c no ragged-right here because otherwise the hyphens get lost, -@c but the example is long enough to avoid looking strange. -@lilypond[verbatim,quote,noragged-right] -<< - \relative c' { - \clef bass - \key c \major - \time 6/8 - c4.~ c8 d b c([ d]) b c d b c - } - \addlyrics { - Lar -- go_al fac -- to -- tum del -- la cit -- tà - } ->> -@end lilypond - - -@seealso -Notation Reference: @ruser{Vocal music}. - - -@node Lyrics to multiple staves -@subsection Lyrics to multiple staves - -@cindex lyrics and multiple staves -@cindex multiple staves and lyrics - -The simple approach using @code{\addlyrics} can be used for -placing lyrics under more than one staff. Here is an -example from Handel's @notation{Judas Maccabæus}: - -@lilypond[verbatim,quote] -<< - \relative c'' { - \key f \major - \time 6/8 - \partial 8 - c8 c([ bes]) a a([ g]) f f'4. b, c4.~ c4 - } - \addlyrics { - Let flee -- cy flocks the hills a -- dorn, __ - } - \relative c' { - \key f \major - \time 6/8 - \partial 8 - r8 r4. r4 c8 a'([ g]) f f([ e]) d e([ d]) c bes'4 - } - \addlyrics { - Let flee -- cy flocks the hills a -- dorn, - } ->> -@end lilypond - -Scores any more complex than this simple example are better -produced by separating out the score structure from the notes and -lyrics with variables. These are discussed in @ref{Organizing -pieces with variables}. - - -@seealso -Notation Reference: @ruser{Vocal music}. - - -@node Final touches -@section Final touches - -This is the final section of the tutorial; it demonstrates how to -add the final touches to simple pieces, and provides an -introduction to the rest of the manual. - -@menu -* Organizing pieces with variables:: -* Version number:: -* Adding titles:: -* Absolute note names:: -* After the tutorial:: -@end menu - - -@node Organizing pieces with variables -@subsection Organizing pieces with variables - -@cindex variables -@cindex variables, defining -@cindex identifiers -@cindex macros -@cindex assigning variables -@cindex using variables -@cindex variables, using -@cindex variables, characters allowed in -@cindex characters allowed in variables - -When all of the elements discussed earlier are combined to produce -larger files, the music expressions get a lot bigger. In -polyphonic music with many staves, the input files can become very -confusing. We can reduce this confusion by using -@emph{variables}. - -With variables (also known as identifiers or macros), we can break -up complex music expressions. A variable is assigned as -follows: - -@example -namedMusic = @{ @dots{} @} -@end example - -The contents of the music expression @code{namedMusic} can be used -later by placing a backslash in front of the name -(@code{\namedMusic}, just like a normal LilyPond command). - -@lilypond[verbatim,quote] -violin = \new Staff { - \relative c'' { - a4 b c b - } -} -cello = \new Staff { - \relative c { - \clef bass - e2 d - } -} -{ - << - \violin - \cello - >> -} -@end lilypond - -@noindent -The name of a variable must have alphabetic characters only, no -numbers, underscores, or dashes. - -Variables must be defined @emph{before} the main music -expression, but may be used as many times as required anywhere after -they have been defined. They may even be used in a later definition -of another variable, giving a way of shortening the input if a -section of music is repeated many times. - -@lilypond[verbatim,quote] -tripletA = \times 2/3 { c,8 e g } -barA = { \tripletA \tripletA \tripletA \tripletA } - -\relative c'' { - \barA \barA -} -@end lilypond - -Variables may be used for many other types of objects in -the input. For example, - -@example -width = 4.5\cm -name = "Wendy" -aFivePaper = \paper @{ paperheight = 21.0 \cm @} -@end example - -Depending on its contents, the variable can be used in different -places. The following example uses the above variables: - -@example -\paper @{ - \aFivePaper - line-width = \width -@} -@{ - c4^\name -@} -@end example - - -@node Version number -@subsection Version number - -@cindex versioning -@cindex version -@cindex version number -@cindex upgrades -@cindex future upgrades -@cindex updating files -@cindex files, updating - -@funindex \version -@funindex version -@funindex convert-ly - -The @code{\version} statement records the version of LilyPond that -was used to write the file: - -@example -\version @w{"@version{}"} -@end example - -@noindent -By convention, this is placed at the top of your LilyPond file. - -These annotations make future upgrades of LilyPond go more -smoothly. Changes in the syntax are handled with a special -program, @command{convert-ly}, and it uses @code{\version} to -determine what rules to apply. For details, see -@rprogram{Updating files with convert-ly}. - - -@node Adding titles -@subsection Adding titles - -@cindex title -@cindex headers -@cindex header block - -@funindex \header -@funindex header - -The title, composer, opus number, and similar information are -entered in the @code{\header} block. This exists outside of the -main music expression; the @code{\header} block is usually placed -underneath the version number. - -@example -\version @w{"@version{}"} -\header @{ - title = "Symphony" - composer = "Me" - opus = "Op. 9" -@} - -@{ - @dots{} music @dots{} -@} -@end example - -When the file is processed, the title and composer are printed -above the music. More information on titling can be found in -@ruser{Creating titles}. - - -@node Absolute note names -@subsection Absolute note names - -@cindex note names -@cindex note names, absolute -@cindex absolute mode -@cindex absolute values for pitches -@cindex pitches, absolute values -@cindex absolute note names - -So far we have always used @code{\relative} to define pitches. -This is the easiest way to enter most music, but another way of -defining pitches exists: absolute mode. - -If you omit the @code{\relative}, LilyPond treats all pitches as -absolute values. A @code{c'} will always mean middle C, a -@code{b} will always mean the note one step below middle C, and a -@code{g,} will always mean the note on the bottom staff of the -bass clef. - -@lilypond[verbatim,quote] -{ - \clef bass - c' b g, g, - g, f, f c' -} -@end lilypond - -Here is a four-octave scale: - -@lilypond[verbatim,quote] -{ - \clef bass - c, d, e, f, - g, a, b, c - d e f g - a b c' d' - \clef treble - e' f' g' a' - b' c'' d'' e'' - f'' g'' a'' b'' - c'''1 -} -@end lilypond - -As you can see, writing a melody in the treble clef involves a lot -of quote @code{'} marks. Consider this fragment from Mozart: - -@lilypond[verbatim,quote] -{ - \key a \major - \time 6/8 - cis''8. d''16 cis''8 e''4 e''8 - b'8. cis''16 b'8 d''4 d''8 -} -@end lilypond - -All these quotes makes the input less readable and they are a source -of errors. With @code{\relative}, the previous example is much -easier to read and type: - -@lilypond[verbatim,quote] -\relative c'' { - \key a \major - \time 6/8 - cis8. d16 cis8 e4 e8 - b8. cis16 b8 d4 d8 -} -@end lilypond - -If you make a mistake with an octave mark (@code{'} or @code{,}) -while working in @code{\relative} mode, it is very obvious -- many -notes will be in the wrong octave. When working in absolute mode, -a single mistake will not be as visible, and will not be as easy -to find. - -However, absolute mode is useful for music which has large -intervals, and is extremely useful for computer-generated LilyPond -files. - - - -@node After the tutorial -@subsection After the tutorial - -After finishing the tutorial, you should probably try writing a -piece or two. Start by adding notes to one of the -@ref{Templates}. If you need any notation that was not covered in -the tutorial, look at the Notation Reference, starting with -@ruser{Musical notation}. If you want to write for an instrument -ensemble that is not covered in the templates, take a look at -@ref{Extending the templates}. - -Once you have written a few short pieces, read the rest of the -Learning Manual (chapters 3-5). There's nothing wrong with -reading it now, of course! However, the rest of the Learning -Manual assumes that you are familiar with LilyPond input. You may -wish to skim these chapters right now, and come back to them after -you have more experience. - -In this tutorial and in the rest of the Learning Manual, there is a -paragraph @strong{See also} at the end of each section, which contains -cross-references to other sections: you should not follow these -cross-references at first reading; when you have read all of the -Learning Manual, you may want to read some sections again and follow -cross-references for further reading. - -If you have not done so already, @emph{please} read @ref{About the -documentation}. There is a lot of information about LilyPond, so -newcomers often do not know where they should look for help. If -you spend five minutes reading that section carefully, you might -save yourself hours of frustration looking in the wrong places! - diff --git a/Documentation/user/tweaks.itely b/Documentation/user/tweaks.itely deleted file mode 100644 index c0a6e72af9..0000000000 --- a/Documentation/user/tweaks.itely +++ /dev/null @@ -1,3769 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond-learning.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Tweaking output -@chapter Tweaking output - -This chapter discusses how to modify output. LilyPond is extremely -configurable; virtually every fragment of output may be changed. - - -@menu -* Tweaking basics:: -* The Internals Reference manual:: -* Appearance of objects:: -* Placement of objects:: -* Collisions of objects:: -* Further tweaking:: -@end menu - -@node Tweaking basics -@section Tweaking basics - -@menu -* Introduction to tweaks:: -* Objects and interfaces:: -* Naming conventions of objects and properties:: -* Tweaking methods:: -@end menu - -@node Introduction to tweaks -@subsection Introduction to tweaks - -@q{Tweaking} is a LilyPond term for the various methods available -to the user for modifying the actions taken during interpretation -of the input file and modifying the appearance of the printed -output. Some tweaks are very easy to use; others are more -complex. But taken together the methods available for tweaking -permit almost any desired appearance of the printed music to be -achieved. - -In this section we cover the basic concepts required to understand -tweaking. Later we give a variety of ready-made commands which can -simply be copied to obtain the same effect in your own scores, and -at the same time we show how these commands may be constructed so -that you may learn how to develop your own tweaks. - -Before starting on this Chapter you may wish to review the section -@ref{Contexts and engravers}, as Contexts, Engravers, and the -Properties contained within them are fundamental to understanding -and constructing Tweaks. - -@node Objects and interfaces -@subsection Objects and interfaces - -@cindex object -@cindex grob -@cindex spanner -@cindex interface -@cindex properties, object -@cindex object properties -@cindex layout object -@cindex object, layout -@cindex interface - -Tweaking involves modifying the internal operation and structures -of the LilyPond program, so we must first introduce some terms -which are used to describe those internal operations and -structures. - -The term @q{Object} is a generic term used to refer to the -multitude of internal structures built by LilyPond during the -processing of an input file. So when a command like @code{\new -Staff} is encountered a new object of type @code{Staff} is -constructed. That @code{Staff} object then holds all the -properties associated with that particular staff, for example, its -name and its key signature, together with details of the engravers -which have been assigned to operate within that staff's context. -Similarly, there are objects to hold the properties of all other -contexts, such as @code{Voice} objects, @code{Score} objects, -@code{Lyrics} objects, as well as objects to represent all -notational elements such as bar lines, -note heads, ties, dynamics, etc. Every object has its own set of -property values. - -Some types of object are given special names. Objects which represent -items of notation on the printed output such as note heads, stems, -slurs, ties, fingering, clefs, etc are called @q{Layout objects}, -often known as @q{Graphical Objects}, or @q{Grobs} for short. These -are still objects in the generic sense above, and so they too all have -properties associated with them, such as their position, size, color, -etc. - -Some layout objects are still more specialized. Phrasing slurs, -crescendo hairpins, ottava marks, and many other grobs are not -localized in a single place -- they have a starting point, an -ending point, and maybe other properties concerned with their -shape. Objects with an extended shape like these are called -@q{Spanners}. - -It remains to explain what @q{Interfaces} are. Many objects, even -though they are quite different, share common features which need to -be processed in the same way. For example, all grobs have a color, a -size, a position, etc, and all these properties are processed in the -same way during LilyPond's interpretation of the input file. To -simplify these internal operations these common actions and properties -are grouped together in an object called a @code{grob-interface}. -There are many other groupings of common properties like this, each -one given a name ending in @code{interface}. In total there are over -100 such interfaces. We shall see later why this is of interest and -use to the user. - -These, then, are the main terms relating to objects which we -shall use in this chapter. - -@node Naming conventions of objects and properties -@subsection Naming conventions of objects and properties - -@cindex naming conventions for objects -@cindex naming conventions for properties -@cindex objects, naming conventions -@cindex properties, naming conventions - -We met some object naming conventions previously, in -@ref{Contexts and engravers}. Here for reference is a list -of the most common object and property types together with -the conventions for naming them and a couple of examples of -some real names. We have used @q{A} to stand for any capitalized -alphabetic character and @q{aaa} to stand for any number of -lower-case alphabetic characters. Other characters are used -verbatim. - -@multitable @columnfractions .33 .33 .33 -@headitem Object/property type - @tab Naming convention - @tab Examples -@item Contexts - @tab Aaaa or AaaaAaaaAaaa - @tab Staff, GrandStaff -@item Layout Objects - @tab Aaaa or AaaaAaaaAaaa - @tab Slur, NoteHead -@item Engravers - @tab Aaaa_aaa_engraver - @tab Clef_engraver, Note_heads_engraver -@item Interfaces - @tab aaa-aaa-interface - @tab grob-interface, break-aligned-interface -@item Context Properties - @tab aaa or aaaAaaaAaaa - @tab alignAboveContext, skipBars -@item Layout Object Properties - @tab aaa or aaa-aaa-aaa - @tab direction, beam-thickness -@end multitable - -As we shall see shortly, the properties of different types of -object are modified by different commands, so it is useful to -be able to recognize the type of object from the names of its -properties. - - -@node Tweaking methods -@subsection Tweaking methods - -@cindex tweaking methods - -@strong{\override command} - -@cindex override command -@cindex override syntax - -@funindex \override -@funindex override - -We have already met the commands @code{\set} and @code{\with}, used to -change the properties of @strong{contexts} and to remove and add -@strong{engravers}, in @ref{Modifying context properties}, and -@ref{Adding and removing engravers}. We now must meet some more -important commands. - -The command to change the properties of @strong{layout objects} is -@code{\override}. Because this command has to modify -internal properties deep within LilyPond its syntax is not -as simple as the commands you have met so far. It needs to -know precisely which property of which object in which context -has to be modified, and what its new value is to be. Let's see -how this is done. - -The general syntax of this command is: - -@example -\override @var{Context}.@var{LayoutObject} #'@var{layout-property} = -#@var{value} -@end example - -@noindent -This will set the property with the name @var{layout-property} of the -layout object with the name @var{LayoutObject}, which is a member of -the @var{Context} context, to the value @var{value}. - -The @var{Context} can be omitted (and usually is) when the -required context is unambiguously implied and is one of lowest -level contexts, i.e., @code{Voice}, @code{ChordNames} or -@code{Lyrics}, and we shall omit it in many of the following -examples. We shall see later when it must be specified. - -Later sections deal comprehensively with properties and their -values, but to illustrate the format and use of these commands -we shall use just a few simple properties and values which are -easily understood. - -For now, don't worry about the @code{#'}, which must precede the -layout property, and the @code{#}, which must precede the value. -These must always be present in exactly this form. This is the -most common command used in tweaking, and most of the rest of -this chapter will be directed to presenting examples of how it is -used. Here is a simple example to change the color of the -note head: - -@cindex color property, example -@cindex NoteHead, example of overriding - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -c d -\override NoteHead #'color = #red -e f g -\override NoteHead #'color = #green -a b c -@end lilypond - -@strong{\revert command} - -@cindex revert command - -@funindex \revert -@funindex revert - -Once overridden, the property retains its new value until it is -overridden again or a @code{\revert} command is encountered. -The @code{\revert} command has the following syntax and causes -the value of the property to revert to its original default -value; note, not its previous value if several @code{\override} -commands have been issued. - -@example -\revert @var{Context}.@var{LayoutObject} #'@var{layout-property} -@end example - -Again, just like @var{Context} in the @code{\override} command, -@var{Context} is often not needed. It will be omitted -in many of the following examples. Here we revert the color -of the note head to the default value for the final two notes: - -@cindex color property, example -@cindex NoteHead, example of overriding - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -c d -\override NoteHead #'color = #red -e f g -\override NoteHead #'color = #green -a -\revert NoteHead #'color -b c -@end lilypond - -@strong{\once prefix} - -@funindex \once -@funindex once - -Both the @code{\override} and the @code{\set} commands may be -prefixed by @code{\once}. This causes the following -@code{\override} or @code{\set} command to be effective only -during the current musical moment before the property reverts -back to its default value. Using the same example, we can -change the color of a single note like this: - -@cindex color property, example -@cindex NoteHead, example of overriding - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -c d -\once \override NoteHead #'color = #red -e f g -\once \override NoteHead #'color = #green -a b c -@end lilypond - -@strong{\overrideProperty command} - -@cindex overrideProperty command - -@funindex \overrideProperty -@funindex overrideProperty - -There is another form of the override command, -@code{\overrideProperty}, which is occasionally required. -We mention it here for completeness, but for details see -@ruser{Difficult tweaks}. -@c Maybe explain in a later iteration -td - -@strong{\tweak command} - -@cindex tweak command - -@funindex \tweak -@funindex tweak - -The final tweaking command which is available is @code{\tweak}. -This should be used to change the properties of objects which -occur at the same musical moment, such as the notes within a -chord. Using @code{\override} would affect all the notes -within a chord, whereas @code{\tweak} affects just the following -item in the input stream. - -Here's an example. Suppose we wish to change the size of the -middle note head (the E) in a C major chord. Let's first see what -@code{\once \override} would do: - -@cindex font-size property, example -@cindex NoteHead, example of overriding - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] - 4 - \once \override NoteHead #'font-size = #-3 - - -@end lilypond - -We see the override affects @emph{all} the note heads in the chord. -This is because all the notes of a chord occur at the same -@emph{musical moment}, and the action of @code{\once} is to -apply the override to all layout objects of the type specified -which occur at the same musical moment as the @code{\override} -command itself. - -The @code{\tweak} command operates in a different way. It acts -on the immediately following item in the input stream. However, -it is effective only on objects which are created directly from -the input stream, essentially note heads and articulations; -objects such as stems and accidentals are created later and -cannot be tweaked in this way. Furthermore, when it is applied -to note heads these @emph{must} be within a chord, i.e., within -single angle brackets, so to tweak a single note the @code{\tweak} -command must be placed inside single angle brackets with the -note. - -So to return to our example, the size of the middle note of -a chord would be changed in this way: - -@cindex font-size property, example -@cindex @code{\tweak}, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] - 4 - 4 -@end lilypond - -Note that the syntax of @code{\tweak} is different from that -of the @code{\override} command. Neither the context nor the -layout object should be specified; in fact, it would generate -an error to do so. These are both implied by the following -item in the input stream. Note also that an equals sign should -not be present. So the general syntax of the -@code{\tweak} command is simply - -@example -\tweak #'@var{layout-property} #@var{value} -@end example - -A @code{\tweak} command can also be used to modify just one in -a series of articulations, as shown here: - -@cindex color property, example -@cindex @code{\tweak}, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -a ^Black - -\tweak #'color #red ^Red - -\tweak #'color #green _Green -@end lilypond - -@noindent -Note that the @code{\tweak} command must be preceded by an -articulation mark as if it were an articulation itself. - -@cindex tuplets, nested -@cindex triplets, nested -@cindex bracket, tuplet -@cindex bracket, triplet -@cindex tuplet bracket -@cindex triplet bracket - -@funindex TupletBracket - -The @code{\tweak} command must also be used to change the -appearance of one of a set of nested tuplets which begin at the -same musical moment. In the following example, the long tuplet -bracket and the first of the three short brackets begin at the -same musical moment, so any @code{\override} command would apply -to both of them. In the example, @code{\tweak} is used to -distinguish between them. The first @code{\tweak} command -specifies that the long tuplet bracket is to be placed above the -notes and the second one specifies that the tuplet number is to be -printed in red on the first short tuplet bracket. - -@cindex @code{\tweak}, example -@cindex direction property, example -@cindex color property, example - -@lilypond[quote,ragged-right,verbatim,fragment,relative=2] -\tweak #'direction #up -\times 4/3 { - \tweak #'color #red - \times 2/3 { c8[ c8 c8] } - \times 2/3 { c8[ c8 c8] } - \times 2/3 { c8[ c8 c8] } -} -@end lilypond - -If nested tuplets do not begin at the same moment, their -appearance may be modified in the usual way with -@code{\override} commands: - -@cindex text property, example -@cindex tuplet-number function, example -@cindex transparent property, example -@cindex TupletNumber, example of overriding - -@c NOTE Tuplet brackets collide if notes are high on staff -@c See issue 509 -@lilypond[quote,ragged-right,verbatim,fragment,relative=1] -\times 2/3 { c8[ c c]} -\once \override TupletNumber - #'text = #tuplet-number::calc-fraction-text -\times 2/3 { - c[ c] - c[ c] - \once \override TupletNumber #'transparent = ##t - \times 2/3 { c8[ c c] } -\times 2/3 { c8[ c c]} -} -@end lilypond - - -@seealso -Notation Reference: -@ruser{The tweak command}. - - -@node The Internals Reference manual -@section The Internals Reference manual - -@cindex Internals Reference - -@menu -* Properties of layout objects:: -* Properties found in interfaces:: -* Types of properties:: -@end menu - -@node Properties of layout objects -@subsection Properties of layout objects - -@cindex properties of layout objects -@cindex properties of grobs -@cindex grobs, properties of -@cindex layout objects, properties of -@cindex Internals Reference manual - -Suppose you have a slur in a score which, to your mind, -appears too thin and you'd like to draw it a little heavier. -How do you go about doing this? You know from the statements -earlier about the flexibility of LilyPond that such a thing -should be possible, and you would probably guess that an -@code{\override} command would be needed. But is there a -heaviness property for a slur, and if there is, how might it -be modified? This is where the Internals Reference manual -comes in. It contains all the information you might need to -construct this and all other @code{\override} commands. - -Before we look at the Internals Reference a word of warning. -This is a @strong{reference} document, which means there is -little or no explanation contained within it: its purpose is -to present information precisely and concisely. This -means it might look daunting at first sight. Don't worry! -The guidance and explanation presented here will enable you -to extract the information from the Internals Reference for -yourself with just a little practice. - -@cindex override example -@cindex Internals Reference, example of using -@cindex @code{\addlyrics} example - -Let's use a concrete example with a simple fragment of real -music: - -@lilypond[quote,verbatim,relative=2] -{ - \time 6/8 - { - r4 b8 b[( g]) g | - g[( e]) e d[( f]) a | - a g - } - \addlyrics { - The man who feels love's sweet e -- mo -- tion - } -} -@end lilypond - -Suppose now that we decide we would like the slurs to be a -little heavier. Is this possible? The slur is certainly a -layout object, so the question is, @q{Is there a property -belonging to a slur which controls the heaviness?} To answer -this we must look in the Internals Reference, or IR for short. - -The IR for the version of LilyPond you are using may be found -on the LilyPond website at @uref{http://lilypond.org}. Go to the -documentation page and click on the Internals Reference link. -For learning purposes you should use the standard HTML version, -not the @q{one big page} or the PDF. For the next few -paragraphs to make sense you will need to actually do this -as you read. - -Under the heading @strong{Top} you will see five links. Select -the link to the @emph{Backend}, which is where information about -layout objects is to be found. There, under the heading -@strong{Backend}, select the link to @emph{All layout objects}. -The page that appears lists all the layout objects used in your -version of LilyPond, in alphabetic order. Select the link to -Slur, and the properties of Slurs are listed. - -An alternative way of finding this page is from the Notation -Reference. On one of the pages that deals with slurs you may find a -link to the Internals Reference. This link will take you directly to -this page, but if you have an idea about the name of the layout object -to be tweaked, it is easier to go straight to the IR and search there. - -This Slur page in the IR tells us first that Slur objects are created -by the Slur_engraver. Then it lists the standard settings. Note -these are @strong{not} in alphabetic order. Browse down them looking -for a property that might control the heaviness of slurs, and you -should find - -@example -@code{thickness} (number) - @code{1.2} - Line thickness, generally measured in @code{line-thickness} -@end example - -This looks a good bet to change the heaviness. It tells us that -the value of @code{thickness} is a simple @emph{number}, -that the default value is 1.2, and that the units are -in another property called @code{line-thickness}. - -As we said earlier, there are few to no explanations in the IR, -but we already have enough information to try changing the -slur thickness. We see that the name of the layout object -is @code{Slur}, that the name of the property to change is -@code{thickness} and that the new value should be a number -somewhat larger than 1.2 if we are to make slurs thicker. - -We can now construct the @code{\override} command by simply -substituting the values we have found for the names, omitting -the context. Let's use a very large value for the thickness -at first, so we can be sure the command is working. We get: - -@example -\override Slur #'thickness = #5.0 -@end example - -Don't forget the @code{#'} preceding the -property name and a @code{#} preceding the new value! - -The final question is, @q{Where should this command be -placed?} While you are unsure and learning, the best -answer is, @q{Within the music, before the first slur and -close to it.} Let's do that: - -@cindex Slur example of overriding -@cindex thickness property, example - -@lilypond[quote,verbatim,relative=2] -{ - \time 6/8 - { - % Increase thickness of all following slurs from 1.2 to 5.0 - \override Slur #'thickness = #5.0 - r4 b8 b[( g]) g | - g[( e]) e d[( f]) a | - a g - } - \addlyrics { - The man who feels love's sweet e -- mo -- tion - } -} -@end lilypond - -@noindent -and we see that the slur is indeed heavier. - -So this is the basic way of constructing @code{\override} -commands. There are a few more complications that we -shall meet in later sections, but you now know all the -essentials required to make up your own -- but you will -still need some practice. This is provided in the examples -which follow. - -@subheading Finding the context - -@cindex context, finding -@cindex context, identifying correct - -But first, what if we had needed to specify the Context? -What should it be? We could guess that slurs are in -the Voice context, as they are clearly closely associated -with individual lines of music, but can we be sure? To -find out, go back to the top of the IR page describing the -Slur, where it says @q{Slur objects are created by: Slur -engraver}. So slurs will be created in whichever context -the @code{Slur_engraver} is in. Follow the link to the -@code{Slur_engraver} page. At the very bottom it tells -us that @code{Slur_engraver} is part of five Voice contexts, -including the standard voice context, @code{Voice}, so our -guess was correct. And because @code{Voice} is one of the -lowest level contexts which is implied unambiguously by -the fact that we are entering notes, we can omit it in this -location. - -@subheading Overriding once only - -@cindex overriding once only -@cindex once override - -@funindex \once -@funindex once - -As you can see, @emph{all} the slurs are thicker in the final example -above. But what if we wanted just the first slur to be thicker? This -is achieved with the @code{\once} command. Placed immediately before -the @code{\override} command it causes it to change only the slur -which begins on the @strong{immediately following} note. If the -immediately following note does not begin a slur the command has no -effect at all -- it is not remembered until a slur is encountered, it -is simply discarded. So the command with @code{\once} must be -repositioned as follows: - -@cindex Slur, example of overriding -@cindex thickness property, example - -@lilypond[quote,verbatim,relative=2] -{ - \time 6/8 - { - r4 b8 - % Increase thickness of immediately following slur only - \once \override Slur #'thickness = #5.0 - b[( g]) g | - g[( e]) e d[( f]) a | - a g - } - \addlyrics { - The man who feels love's sweet e -- mo -- tion - } -} -@end lilypond - -@noindent -Now only the first slur is made heavier. - -The @code{\once} command can also be used before the @code{\set} -command. - -@subheading Reverting - -@cindex revert -@cindex default properties, reverting to - -@funindex \revert -@funindex revert - -Finally, what if we wanted just the first two slurs to be -heavier? Well, we could use two commands, each preceded by -@code{\once} placed immediately before each of the notes where -the slurs begin: - -@cindex Slur, example of overriding -@cindex thickness property, example - -@lilypond[quote,verbatim,relative=2] -{ - \time 6/8 - { - r4 b8 - % Increase thickness of immediately following slur only - \once \override Slur #'thickness = #5.0 - b[( g]) g | - % Increase thickness of immediately following slur only - \once \override Slur #'thickness = #5.0 - g[( e]) e d[( f]) a | - a g - } - \addlyrics { - The man who feels love's sweet e -- mo -- tion - } -} -@end lilypond - -@noindent -or we could omit the @code{\once} command and use the @code{\revert} -command to return the @code{thickness} property to its default value -after the second slur: - -@cindex Slur, example of overriding -@cindex thickness property, example - -@lilypond[quote,verbatim,relative=2] -{ - \time 6/8 - { - r4 b8 - % Increase thickness of all following slurs from 1.2 to 5.0 - \override Slur #'thickness = #5.0 - b[( g]) g | - g[( e]) - % Revert thickness of all following slurs to default of 1.2 - \revert Slur #'thickness - e d[( f]) a | - a g - } - \addlyrics { - The man who feels love's sweet e -- mo -- tion - } -} -@end lilypond - -@noindent -The @code{\revert} command can be used to return any property -changed with @code{\override} back to its default value. -You may use whichever method best suits what you want to do. - -That concludes our introduction to the IR, and the basic -method of tweaking. Several examples follow in the later -sections of this Chapter, partly to introduce you to some of the -additional features of the IR, and partly to give you more -practice in extracting information from it. These examples will -contain progressively fewer words of guidance and explanation. - - -@node Properties found in interfaces -@subsection Properties found in interfaces - -@cindex interface -@cindex interface properties -@cindex properties in interfaces - -Suppose now that we wish to print the lyrics in italics. What form of -@code{\override} command do we need to do this? We first look in the -IR page listing @q{All layout objects}, as before, and look for an -object that might control lyrics. We find @code{LyricText}, which -looks right. Clicking on this shows the settable properties for lyric -text. These include the @code{font-series} and @code{font-size}, but -nothing that might give an italic shape. This is because the shape -property is one that is common to all font objects, so, rather than -including it in every layout object, it is grouped together with other -similar common properties and placed in an @strong{Interface}, the -@code{font-interface}. - -So now we need to learn how to find the properties of interfaces, -and to discover what objects use these interface properties. - -Look again at the IR page which describes LyricText. At the bottom of -the page is a list of clickable interfaces which LyricText supports. -The list has several items, including @code{font-interface}. Clicking -on this brings up the properties associated with this interface, which -are also properties of all the objects which support it, including -LyricText. - -Now we see all the user-settable properties which control fonts, -including @code{font-shape(symbol)}, where @code{symbol} can be -set to @code{upright}, @code{italics} or @code{caps}. - -You will notice that @code{font-series} and @code{font-size} are also -listed there. This immediately raises the question: Why are the -common font properties @code{font-series} and @code{font-size} listed -under @code{LyricText} as well as under the interface -@code{font-interface} but @code{font-shape} is not? The answer is -that @code{font-series} and @code{font-size} are changed from their -global default values when a @code{LyricText} object is created, but -@code{font-shape} is not. The entries in @code{LyricText} then tell -you the values for those two properties which apply to -@code{LyricText}. Other objects which support @code{font-interface} -will set these properties differently when they are created. - -Let's see if we can now construct the @code{\override} command -to change the lyrics to italics. The object is @code{LyricText}, -the property is @code{font-shape} and the value is -@code{italic}. As before, we'll omit the context. - -As an aside, although it is an important one, note that because the -values of @code{font-shape} are symbols they must be introduced with a -single apostrophe, @code{'}. That is why apostrophes are needed -before @code{thickness} in the earlier example and @code{font-shape}. -These are both symbols too. Symbols are then read internally by -LilyPond. Some of them are the names of properties, like -@code{thickness} or @code{font-shape}, others are used as values that -can be given to properties, like @code{italic}. Note the distinction -from arbitrary text strings, which would appear as @code{"a text -string"}; for more details about symbols and strings, see @ref{Scheme -tutorial}. - -Ok, so the @code{\override} command we need to print the lyrics -in italics should be - -@example -\override LyricText #'font-shape = #'italic -@end example - -@noindent -and this should be placed just in front of and close to the -lyrics which it should affect, like this: - -@cindex font-shape property, example -@cindex italic, example -@cindex LyricText, example of overriding -@cindex @code{\addlyrics}, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 6/8 - { - r4 b8 b[( g]) g | - g[( e]) e d[( f]) a | - a g - } - \addlyrics { - \override LyricText #'font-shape = #'italic - The man who feels love's sweet e -- mo -- tion - } -} -@end lilypond - -@noindent -and the lyrics are all printed in italics. - -@subheading Specifying the context in lyric mode - -@cindex context, specifying in lyric mode -@cindex lyric mode, specifying context - -In the case of lyrics, if you try specifying the context in the -format given earlier the command will fail. A syllable -entered in lyricmode is terminated by either a space, -a newline or a digit. All other characters are included -as part of the syllable. For this reason a space or newline -must appear before the terminating @code{@}} to prevent it being -included as part of the final syllable. Similarly, -spaces must be inserted before and after the -period or dot, @q{.}, separating the context name from the -object name, as otherwise the two names are run together and -the interpreter cannot recognize them. So the command should be: - -@example -\override Lyrics . LyricText #'font-shape = #'italic -@end example - -@warning{In lyrics always leave whitespace between the final -syllable and the terminating brace.} - -@warning{In overrides in lyrics always place spaces around -the dot between the context name and the object name.} - - -@seealso -Learning Manual: @ref{Scheme tutorial}. - - -@node Types of properties -@subsection Types of properties - -@cindex property types - -So far we have seen two types of property: @code{number} and -@code{symbol}. To be valid, the value given to a property -must be of the correct type and obey the rules for that type. -The type of property is always shown in brackets after the -property name in the IR. Here is a list of the types you may -need, together with the rules for that type, and some examples. -You must always add a hash symbol, @code{#}, of course, -to the front of these values when they are entered in the -@code{\override} command. - -@multitable @columnfractions .2 .45 .35 -@headitem Property type - @tab Rules - @tab Examples -@item Boolean - @tab Either True or False, represented by #t or #f - @tab @code{#t}, @code{#f} -@item Dimension (in staff space) - @tab A positive decimal number (in units of staff space) - @tab @code{2.5}, @code{0.34} -@item Direction - @tab A valid direction constant or its numerical equivalent (decimal -values between -1 and 1 are allowed) - @tab @code{LEFT}, @code{CENTER}, @code{UP}, - @code{1}, @code{-1} -@item Integer - @tab A positive whole number - @tab @code{3}, @code{1} -@item List - @tab A set of values separated by spaces, enclosed in parentheses -and preceded by an apostrophe - @tab @code{'(left-edge staff-bar)}, @code{'(1)}, - @code{'(1.0 0.25 0.5)} -@item Markup - @tab Any valid markup - @tab @code{\markup @{ \italic "cresc." @}} -@item Moment - @tab A fraction of a whole note constructed with the -make-moment function - @tab @code{(ly:make-moment 1 4)}, - @code{(ly:make-moment 3 8)} -@item Number - @tab Any positive or negative decimal value - @tab @code{3.5}, @code{-2.45} -@item Pair (of numbers) - @tab Two numbers separated by a @q{space . space} and enclosed -in brackets preceded by an apostrophe - @tab @code{'(2 . 3.5)}, @code{'(0.1 . -3.2)} -@item Symbol - @tab Any of the set of permitted symbols for that property, -preceded by an apostrophe - @tab @code{'italic}, @code{'inside} -@item Unknown - @tab A procedure, or @code{#f} to cause no action - @tab @code{bend::print}, @code{ly:text-interface::print}, - @code{#f} -@item Vector - @tab A list of three items enclosed in parentheses and preceded -by apostrophe-hash, @code{'#}. - @tab @code{'#(#t #t #f)} -@end multitable - - -@seealso -Learning Manual: @ref{Scheme tutorial}. - - -@node Appearance of objects -@section Appearance of objects - -Let us now put what we have learned into practice with a few -examples which show how tweaks may be used to change the -appearance of the printed music. - -@menu -* Visibility and color of objects:: -* Size of objects:: -* Length and thickness of objects:: -@end menu - -@node Visibility and color of objects -@subsection Visibility and color of objects - -In the educational use of music we might wish to print a score -with certain elements omitted as an exercise for the student, -who is required to supply them. As a simple example, -let us suppose the exercise is to supply the missing bar lines -in a piece of music. But the bar lines are normally inserted -automatically. How do we prevent them printing? - -Before we tackle this, let us remember that object properties are -grouped in what are called @emph{interfaces} -- see @ref{Properties -found in interfaces}. This is simply to group together those -properties that may be used together to tweak a graphical object -- if -one of them is allowed for an object, so are the others. Some objects -then use the properties in some interfaces, others use them from other -interfaces. The interfaces which contain the properties used by a -particular grob are listed in the IR at the bottom of the page -describing that grob, and those properties may be viewed by looking at -those interfaces. - -We explained how to find information about grobs in @ref{Properties of -layout objects}. Using the same approach, we go to the IR to find the -layout object which prints bar lines. Going via @emph{Backend} and -@emph{All layout objects} we find there is a layout object called -@code{BarLine}. Its properties include two that control its -visibility: @code{break-visibility} and @code{stencil}. Barline also -supports a number of interfaces, including the @code{grob-interface}, -where we find the @code{transparent} and the @code{color} properties. -All of these can affect the visibility of bar lines (and, of course, -by extension, many other layout objects too.) Let's consider each of -these in turn. - -@subheading stencil - -@cindex stencil property - -This property controls the appearance of the bar lines by specifying -the symbol (glyph) which should be printed. In common -with many other properties, it can be set to print nothing by -setting its value to @code{#f}. Let's try it, as before, omitting -the implied Context, @code{Voice}: - -@cindex BarLine, example of overriding -@cindex stencil property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override BarLine #'stencil = ##f - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -The bar lines are still printed. What is wrong? Go back to the IR -and look again at the page giving the properties of BarLine. At the -top of the page it says @qq{Barline objects are created by: -Bar_engraver}. Go to the @code{Bar_engraver} page. At the bottom it -gives a list of Contexts in which the bar engraver operates. All of -them are of the type @code{Staff}, so the reason the @code{\override} -command failed to work as expected is because @code{Barline} is not in -the default @code{Voice} context. If the context is specified -wrongly, the command simply does not work. No error message is -produced, and nothing is logged in the log file. Let's try correcting -it by adding the correct context: - -@cindex BarLine, example of overriding -@cindex stencil property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.BarLine #'stencil = ##f - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -Now the bar lines have vanished. - -Note, though, that setting the @code{stencil} property to @code{#f} -will cause errors when the dimensions of the object are required for -correct processing. For example, errors will be generated if the -@code{stencil} property of the @code{NoteHead} object is set to -@code{#f}. If this is the case, you can instead use the -@code{point-stencil} function, which sets the stencil to a object -with zero size: - -@lilypond[quote,verbatim,relative=2] -{ - c c - \once \override NoteHead #'stencil = #point-stencil - c c -} -@end lilypond - -@subheading break-visibility - -@cindex break-visibility property - -We see from the @code{BarLine} properties in the IR that the -@code{break-visibility} property requires a vector of three booleans. -These control respectively whether bar lines are printed at the end of -a line, in the middle of lines, and at the beginning of lines. For -our example we want all bar lines to be suppressed, so the value we -need is @code{'#(#f #f #f)}. Let's try that, remembering to include -the @code{Staff} context. Note also that in writing this value we -have @code{#'#} before the opening bracket. The @code{'#} is required -as part of the value to introduce a vector, and the first @code{#} is -required, as always, to precede the value itself in the -@code{\override} command. - -@cindex BarLine, example of overriding -@cindex break-visibility property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.BarLine #'break-visibility = #'#(#f #f #f) - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -And we see this too removes all the bar lines. - -@subheading transparent - -@cindex transparent property -@cindex transparency - -We see from the properties specified in the @code{grob-interface} page -in the IR that the @code{transparent} property is a boolean. This -should be set to @code{#t} to make the grob transparent. In this next -example let us make the time signature invisible rather than the bar -lines. To do this we need to find the grob name for the time -signature. Back to the @q{All layout objects} page in the IR to find -the properties of the @code{TimeSignature} layout object. This is -produced by the @code{Time_signature_engraver} which you can check -also lives in the @code{Staff} context and also supports the -@code{grob-interface}. So the command to make the time signature -transparent is: - -@cindex TimeSignature, example of overriding -@cindex transparent property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.TimeSignature #'transparent = ##t - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -@noindent -The time signature is gone, but this command leaves a gap where -the time signature should be. Maybe this is what is wanted for -an exercise for the student to fill it in, but in other -circumstances a gap might be undesirable. To remove it, the -stencil for the time signature should be set to @code{#f} -instead: - -@cindex TimeSignature, example of overriding -@cindex stencil property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.TimeSignature #'stencil = ##f - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -@noindent -and the difference is obvious: setting the stencil to @code{#f} -removes the object entirely; making the object @code{transparent} -leaves it where it is, but makes it invisible. - -@subheading color - -@cindex color property - -Finally let us try making the bar lines invisible by coloring -them white. (There is a difficulty with this in that the -white bar line may or may not blank out the staff lines where -they cross. You may see in some of the examples below that this -happens unpredictably. The details of why this is so and how to -control it are covered in @ruser{Painting objects white}. But at -the moment we are learning about color, so please just accept this -limitation for now.) - -The @code{grob-interface} specifies that the -color property value is a list, but there is no -explanation of what that list should be. The list it -requires is actually a list of values in internal units, -but, to avoid having to know what these are, several ways -are provided to specify colors. The first way is to use one -of the @q{normal} colors listed in the first table in -@ruser{List of colors}. To set the bar lines to white -we write: - -@cindex BarLine, example of overriding -@cindex color property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.BarLine #'color = #white - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -@noindent -and again, we see the bar lines are not visible. Note that -@emph{white} is not preceded by an apostrophe -- it is not -a symbol, but a @emph{function}. When called, it provides -the list of internal values required to set the color to -white. The other colors in the normal list are functions -too. To convince yourself this is working you might like -to change the color to one of the other functions in the -list. - -@cindex color, X11 -@cindex X11 colors - -@funindex x11-color - -The second way of changing the color is to use the list of -X11 color names in the second list in @ruser{List of colors}. -However, these must be preceded by another function, which -converts X11 color names into the list of internal values, -@code{x11-color}, like this: - -@cindex BarLine, example of overriding -@cindex color property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.BarLine #'color = #(x11-color 'white) - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -@noindent -Note that in this case the function @code{x11-color} takes -a symbol as an argument, so the symbol must be preceded by -an apostrophe and the two enclosed in brackets. - -@cindex rgb colors -@cindex color, rgb - -@funindex rgb-color - -There is yet a third function, one which converts RGB values into -internal colors -- the @code{rgb-color} function. This takes -three arguments giving the intensities of the red, green and -blue colors. These take values in the range 0 to 1. So to -set the color to red the value should be @code{(rgb-color 1 0 0)} -and to white it should be @code{(rgb-color 1 1 1)}: - -@cindex BarLine, example of overriding -@cindex color property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.BarLine #'color = #(rgb-color 1 1 1) - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -Finally, there is also a grey scale available as part of the -X11 set of colors. These range from black, @code{'grey0'}, -to white, @code{'grey100}, in steps of 1. Let's illustrate -this by setting all the layout objects in our example to -various shades of grey: - -@cindex StaffSymbol, example of overriding -@cindex TimeSignature, example of overriding -@cindex Clef, example of overriding -@cindex NoteHead, example of overriding -@cindex Stem, example of overriding -@cindex BarLine, example of overriding -@cindex color property, example -@cindex x11-color, example of using - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.StaffSymbol #'color = #(x11-color 'grey30) - \override Staff.TimeSignature #'color = #(x11-color 'grey60) - \override Staff.Clef #'color = #(x11-color 'grey60) - \override Voice.NoteHead #'color = #(x11-color 'grey85) - \override Voice.Stem #'color = #(x11-color 'grey85) - \override Staff.BarLine #'color = #(x11-color 'grey10) - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -@noindent -Note the contexts associated with each of the layout objects. -It is important to get these right, or the commands will not -work! Remember, the context is the one in which the appropriate -engraver is placed. The default context for engravers can be -found by starting from the layout object, going from there to -the engraver which produces it, and on the engraver page in the -IR it tells you in which context the engraver will normally be -found. - - -@node Size of objects -@subsection Size of objects - -@cindex changing size of objects -@cindex size of objects -@cindex objects, size of -@cindex objects, changing size of - -Let us begin by looking again at the earlier example -see @ref{Nesting music expressions}) which showed -how to introduce a new temporary staff, as in an @rglos{ossia}. - -@cindex alignAboveContext property, example -@cindex @code{\with}, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\new Staff ="main" { - \relative g' { - r4 g8 g c4 c8 d | - e4 r8 - << - { f c c } - \new Staff \with { - alignAboveContext = #"main" } - { f8 f c } - >> - r4 | - } - } -@end lilypond - -Ossia are normally written without clef and time signature, and -are usually printed slightly smaller than the main staff. We -already know now how to remove the clef and time signature -- -we simply set the stencil of each to @code{#f}, as follows: - -@cindex alignAboveContext property, example -@cindex @code{\with}, example -@cindex stencil property, example -@cindex Clef, example of overriding -@cindex TimeSignature, example of overriding - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\new Staff ="main" { - \relative g' { - r4 g8 g c4 c8 d | - e4 r8 - << - { f c c } - \new Staff \with { - alignAboveContext = #"main" - } - { - \override Staff.Clef #'stencil = ##f - \override Staff.TimeSignature #'stencil = ##f - { f8 f c } - } - >> - r4 | - } -} -@end lilypond - -@noindent -where the extra pair of braces after the @code{\with} clause are -required to ensure the enclosed overrides and music are applied -to the ossia staff. - -But what is the difference between modifying the staff context by -using @code{\with} and modifying the stencils of the clef and the -time signature with \override? The main difference is that -changes made in a @code{\with} clause are made at the time the -context is created, and remain in force as the @strong{default} -values for the duration of that context, whereas -@code{\set} or @code{\override} commands embedded in the -music are dynamic -- they make changes synchronized with -a particular point in the music. If changes are unset or -reverted using @code{\unset} or @code{\revert} they return to -their default values, which will be the ones set in the -@code{\with} clause, or if none have been set there, the normal -default values. - -Some context properties can be modified only in @code{\with} clauses. -These are those properties which cannot sensibly be changed after the -context has been created. @code{alignAboveContext} and its partner, -@code{alignBelowContext}, are two such properties -- once the staff -has been created its alignment is decided and it would make no sense -to try to change it later. - -The default values of layout object properties can also be set -in @code{\with} clauses. Simply use the normal @code{\override} -command leaving out the context name, since this is unambiguously -defined as the context which the @code{\with} clause is modifying. -If fact, an error will be generated if a context is specified -in this location. - -So we could replace the example above with - -@cindex alignAboveContext property, example -@cindex @code{\with}, example -@cindex Clef, example of overriding -@cindex TimeSignature, example of overriding - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\new Staff ="main" { - \relative g' { - r4 g8 g c4 c8 d | - e4 r8 - << - { f c c } - \new Staff \with { - alignAboveContext = #"main" - % Don't print clefs in this staff - \override Clef #'stencil = ##f - % Don't print time signatures in this staff - \override TimeSignature #'stencil = ##f - } - { f8 f c } - >> - r4 | - } -} -@end lilypond - -Finally we come to changing the size of layout objects. - -Some layout objects are created as glyphs selected from a typeface -font. These include note heads, accidentals, markup, clefs, time -signatures, dynamics and lyrics. Their size is changed by modifying -the @code{font-size} property, as we shall shortly see. Other layout -objects such as slurs and ties -- in general, spanner objects -- are -drawn individually, so there is no @code{font-size} associated with -them. These objects generally derive their size from the objects to -which they are attached, so usually there is no need to change their -size manually. Still other properties such as the length of stems and -bar lines, thickness of beams and other lines, and the separation of -staff lines all need to be modified in special ways. - -Returning to the ossia example, let us first change the font-size. -We can do this in two ways. We can either change the size of the -fonts of each object type, like @code{NoteHead}s with commands -like - -@example -\override NoteHead #'font-size = #-2 -@end example - -or we can change the size of all fonts by setting a special -property, @code{fontSize}, using @code{\set}, or by including -it in a @code{\with} clause (but without the @code{\set}). - -@example -\set fontSize = #-2 -@end example - -Both of these statements would cause the font size to be reduced -by 2 steps from its previous value, where each -step reduces or increases the size by approximately 12%. - -Let's try it in our ossia example: - -@cindex alignAboveContext property, example -@cindex @code{\with}, example -@cindex Clef, example of overriding -@cindex TimeSignature, example of overriding -@cindex fontSize property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\new Staff ="main" { - \relative g' { - r4 g8 g c4 c8 d | - e4 r8 - << - { f c c } - \new Staff \with { - alignAboveContext = #"main" - \override Clef #'stencil = ##f - \override TimeSignature #'stencil = ##f - % Reduce all font sizes by ~24% - fontSize = #-2 - } - { f8 f c } - >> - r4 | - } -} -@end lilypond - -This is still not quite right. The note heads and flags are -smaller, but the stems are too long in proportion and the -staff lines are spaced too widely apart. These need to be -scaled down in proportion to the font reduction. The next -sub-section discusses how this is done. - -@node Length and thickness of objects -@subsection Length and thickness of objects - -@cindex distances -@cindex thickness -@cindex length -@cindex magstep -@cindex size, changing -@cindex stem length, changing -@cindex staff line spacing, changing - -Distances and lengths in LilyPond are generally measured in -staff-spaces, the distance between adjacent lines in the staff, -(or occasionally half staff spaces) while most @code{thickness} -properties are measured in units of an internal property called -@code{line-thickness.} For example, by default, the lines of -hairpins are given a thickness of 1 unit of @code{line-thickness}, -while the @code{thickness} of a note stem is 1.3. Note, though, -that some thickness properties are different; for example, the -thickness of beams is measured in staff-spaces. - -So how are lengths to be scaled in proportion to the font size? -This can be done with the help of a special function called -@code{magstep} provided for exactly this purpose. It takes -one argument, the change in font size (#-2 in the example above) -and returns a scaling factor suitable for reducing other -objects in proportion. It is used like this: - -@cindex alignAboveContext property, example -@cindex @code{\with}, example -@cindex Clef, example of overriding -@cindex TimeSignature, example of overriding -@cindex fontSize property, example -@cindex StaffSymbol, example of overriding -@cindex magstep function, example of using -@cindex staff-space property, example -@cindex stencil property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\new Staff ="main" { - \relative g' { - r4 g8 g c4 c8 d | - e4 r8 - << - { f c c } - \new Staff \with { - alignAboveContext = #"main" - \override Clef #'stencil = ##f - \override TimeSignature #'stencil = ##f - fontSize = #-2 - % Reduce stem length and line spacing to match - \override StaffSymbol #'staff-space = #(magstep -2) - } - { f8 f c } - >> - r4 | - } -} -@end lilypond - -@noindent -Since the length of stems and many other length-related properties are -always calculated relative to the value of the @code{staff-space} -property these are automatically scaled down in length too. Note that -this affects only the vertical scale of the ossia -- the horizontal -scale is determined by the layout of the main music in order to remain -synchronized with it, so it is not affected by any of these changes in -size. Of course, if the scale of all the main music were changed in -this way then the horizontal spacing would be affected. This is -discussed later in the layout section. - -This, then, completes the creation of an ossia. The sizes and -lengths of all other objects may be modified in analogous ways. - -For small changes in scale, as in the example above, the -thickness of the various drawn lines such as bar lines, -beams, hairpins, slurs, etc does not usually require global -adjustment. If the thickness of any particular layout object -needs to be adjusted this can be best achieved by overriding its -@code{thickness} property. An example of changing the thickness -of slurs was shown above in @ref{Properties of layout objects}. -The thickness of all drawn objects (i.e., those not produced -from a font) may be changed in the same way. - - -@node Placement of objects -@section Placement of objects - -@menu -* Automatic behavior:: -* Within-staff objects:: -* Outside-staff objects:: -@end menu - - -@node Automatic behavior -@subsection Automatic behavior - -@cindex within-staff objects -@cindex outside-staff objects -@cindex objects, within-staff -@cindex objects, outside-staff - -There are some objects in musical notation that belong to -the staff and there are other objects that should be -placed outside the staff. These are called within-staff -objects and outside-staff objects respectively. - -Within-staff objects are those that are located on the staff --- note heads, stems, accidentals, etc. The positions of -these are usually fixed by the music itself -- they are -vertically positioned on specific lines of the staff or are -tied to other objects that are so positioned. Collisions of -note heads, stems and accidentals in closely set chords are -normally avoided automatically. There are commands and -overrides which can modify this automatic behavior, as we -shall shortly see. - -Objects belonging outside the staff include things such as -rehearsal marks, text and dynamic markings. LilyPond's rule for -the vertical placement of outside-staff objects is to place them -as close to the staff as possible but not so close that they -collide with any other object. LilyPond uses the -@code{outside-staff-priority} property to determine the order in -which the objects should be placed, as follows. - -First, LilyPond places all the within-staff objects. -Then it sorts the outside-staff objects according to their -@code{outside-staff-priority}. The outside-staff objects are -taken one by one, beginning with the object with the lowest -@code{outside-staff-priority}, and placed so that they do not -collide with any objects that have already been placed. That is, -if two outside-staff grobs are competing for the same space, the -one with the lower @code{outside-staff-priority} will be placed -closer to the staff. If two objects have the same -@code{outside-staff-priority} the one encountered first will be -placed closer to the staff. - -In the following example all the markup texts have the same -priority (since it is not explicitly set). Note that @q{Text3} -is automatically positioned close to the staff again, nestling -under @q{Text2}. - -@cindex markup example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -c2^"Text1" -c^"Text2" -c^"Text3" -c^"Text4" -@end lilypond - -Staves are also positioned, by default, as closely together as -possible (subject to a minimum separation). If notes project -a long way towards an adjacent staff they will force the -staves further apart only if an overlap of the notation -would otherwise occur. The following example demonstrates -this @q{nestling} of the notes on adjacent staves: - -@lilypond[quote,ragged-right,verbatim] -<< - \new Staff { - \relative c' { c a, } - } - \new Staff { - \relative c'''' { c a, } - } ->> -@end lilypond - - -@node Within-staff objects -@subsection Within-staff objects - -We have already seen how the commands @code{\voiceXXX} affect -the direction of slurs, ties, fingering and -everything else which depends on the direction of the stems. -These commands are essential when writing polyphonic music to -permit interweaving melodic lines to be distinguished. -But occasionally it may be necessary to override this automatic -behavior. This can be done for whole sections of music or even -for an individual note. The property which controls this -behavior is the @code{direction} property of each layout object. -We first explain what this does, and then introduce a number of -ready-made commands which avoid your having to code explicit -overrides for the more common modifications. - -Some layout objects like slurs and ties curve, bend or point -either up or down; others like stems and flags also move to -right or left when they point up or down. This is controlled -automatically when @code{direction} is set. - -@cindex down -@cindex up -@cindex center -@cindex neutral - -The following example shows in bar 1 the default behavior of stems, -with those on high notes pointing down and those on low notes pointing -up, followed by four notes with all stems forced down, four notes with -all stems forced up, and finally four notes reverted back to the -default behavior. - -@cindex Stem, example of overriding -@cindex direction property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -a4 g c a -\override Stem #'direction = #DOWN -a g c a -\override Stem #'direction = #UP -a g c a -\revert Stem #'direction -a g c a -@end lilypond - -Here we use the constants @code{DOWN} and @code{UP}. -These have the values @code{-1} and @code{+1} respectively, and -these numerical values may be used instead. The value @code{0} -may also be used in some cases. It is simply treated as meaning -@code{UP} for stems, but for some objects it means @q{center}. -There is a constant, @code{CENTER} which has the value @code{0}. - -However, these explicit overrides are not usually used, as there are -simpler equivalent predefined commands available. Here is a table of -the commonest. The meaning of each is stated where it is not obvious. - -@multitable @columnfractions .2 .2 .25 .35 -@headitem Down/Left - @tab Up/Right - @tab Revert - @tab Effect -@item @code{\arpeggioArrowDown} - @tab @code{\arpeggioArrowUp} - @tab @code{\arpeggioNormal} - @tab Arrow is at bottom, at top, or no arrow -@item @code{\dotsDown} - @tab @code{\dotsUp} - @tab @code{\dotsNeutral} - @tab Direction of movement to avoid staff lines -@item @code{\dynamicDown} - @tab @code{\dynamicUp} - @tab @code{\dynamicNeutral} - @tab -@item @code{\phrasingSlurDown} - @tab @code{\phrasingSlurUp} - @tab @code{\phrasingSlurNeutral} - @tab Note: distinct from slur commands -@item @code{\slurDown} - @tab @code{\slurUp} - @tab @code{\slurNeutral} - @tab -@item @code{\stemDown} - @tab @code{\stemUp} - @tab @code{\stemNeutral} - @tab -@item @code{\textSpannerDown} - @tab @code{\textSpannerUp} - @tab @code{\textSpannerNeutral} - @tab Text entered as spanner is below/above staff -@item @code{\tieDown} - @tab @code{\tieUp} - @tab @code{\tieNeutral} - @tab -@item @code{\tupletDown} - @tab @code{\tupletUp} - @tab @code{\tupletNeutral} - @tab Tuplets are below/above notes -@end multitable - -Note that these predefined commands may @strong{not} be -preceded by @code{\once}. If you wish to limit the -effect to a single note you must either use the equivalent -@code{\once \override} command or use the predefined command -followed after the affected note by the corresponding -@code{\xxxNeutral} command. - -@subheading Fingering - -@cindex fingering, placement -@cindex fingering, chords - -The placement of fingering on single notes can also be controlled -by the @code{direction} property, but changing @code{direction} -has no effect on chords. As we shall see, there are special -commands which allow the fingering of individual notes -of chords to be controlled, with the fingering being placed -above, below, to the left or to the right of each note. - -First, here's the effect of @code{direction} on the fingering -attached to single notes. The first bar shows the default -behaviour, and the following two bars shows the effect of -specifying @code{DOWN} and @code{UP}: - -@cindex Fingering, example of overriding -@cindex direction property, example - -@lilypond[quote,verbatim,relative=2] -c-5 a-3 f-1 c'-5 -\override Fingering #'direction = #DOWN -c-5 a-3 f-1 c'-5 -\override Fingering #'direction = #UP -c-5 a-3 f-1 c'-5 -@end lilypond - -However, overriding the @code{direction} property is not the -easiest way of manually setting the fingering above or below -the notes; using @code{_} or @code{^} instead of @code{-} before -the fingering number is usually preferable. Here is the previous -example using this method: - -@cindex fingering example - -@lilypond[quote,verbatim,relative=2] -c-5 a-3 f-1 c'-5 -c_5 a_3 f_1 c'_5 -c^5 a^3 f^1 c'^5 -@end lilypond - -The @code{direction} property is ignored for chords, but the -directional prefixes, @code{_} and @code{^} do work. By default, -the fingering is automatically placed both above and below the -notes of a chord, as shown: - -@cindex fingering example - -@lilypond[quote,verbatim,relative=2] - - - -@end lilypond - -@noindent -but this may be overridden to manually force all or any of the -individual fingering numbers above or below: - -@cindex fingering example - -@lilypond[quote,verbatim,relative=2] - - - -@end lilypond - -Even greater control over the placement of fingering of the -individual notes in a chord is possible by using the -@code{\set fingeringOrientations} command. The format of this -command is: - -@example -@code{\set fingeringOrientations = #'([up] [left/right] [down])} -@end example - -@noindent -@code{\set} is used because @code{fingeringOrientations} is a -property of the @code{Voice} context, created and used by the -@code{New_fingering_engraver}. - -The property may be set to a list of one to three values. -It controls whether fingerings may be placed above (if -@code{up} appears in the list), below (if @code{down} appears), -to the left (if @code{left} appears, or to the right -(if @code{right} appears). Conversely, if a location is not -listed, no fingering is placed there. LilyPond takes these -constraints and works out the best placement for the fingering -of the notes of the following chords. Note that @code{left} and -@code{right} are mutually exclusive -- fingering may be placed -only on one side or the other, not both. - -@warning{To control the placement of the fingering of a single -note using this command it is necessary to write it as a single -note chord by placing angle brackets round it.} - -Here are a few examples: - -@cindex fingering example -@cindex @code{\set}, example of using -@cindex fingeringOrientations property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -\set fingeringOrientations = #'(left) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(left) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(up left down) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(up left) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(right) - -< c-1 e-2 g-3 b-5 > 4 -@end lilypond - -@noindent -If the fingering seems a little crowded the @code{font-size} -could be reduced. The default value can be seen from the -@code{Fingering} object in the IR to be @code{-5}, so let's -try @code{-7}: - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -\override Fingering #'font-size = #-7 -\set fingeringOrientations = #'(left) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(left) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(up left down) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(up left) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(right) - -< c-1 e-2 g-3 b-5 > 4 -@end lilypond - -@node Outside-staff objects -@subsection Outside-staff objects - -Outside-staff objects are automatically placed to avoid collisions. -Objects with the lower value of the @code{outside-staff-priority} -property are placed nearer to the staff, and other outside-staff -objects are then raised as far as necessary to avoid collisions. -The @code{outside-staff-priority} is defined in the -@code{grob-interface} and so is a property of all layout objects. -By default it is set to @code{#f} for all within-staff objects, -and to a numerical value appropriate to each outside-staff object -when the object is created. The following table shows -the default numerical values for some of the commonest -outside-staff objects which are, by default, placed in the -@code{Staff} or @code{Voice} contexts. - -@multitable @columnfractions .3 .3 .3 -@headitem Layout Object - @tab Priority - @tab Controls position of: -@item @code{MultiMeasureRestText} - @tab @code{450} - @tab Text over full-bar rests -@item @code{TextScript} - @tab @code{450} - @tab Markup text -@item @code{OttavaBracket} - @tab @code{400} - @tab Ottava brackets -@item @code{TextSpanner} - @tab @code{350} - @tab Text spanners -@item @code{DynamicLineSpanner} - @tab @code{250} - @tab All dynamic markings -@item @code{VoltaBracketSpanner} - @tab @code{100} - @tab Volta brackets -@item @code{TrillSpanner} - @tab @code{50} - @tab Spanning trills -@end multitable - -Here is an example showing the default placement of some of -these. - -@cindex text spanner -@cindex ottava bracket - -@funindex \startTextSpan -@funindex startTextSpan -@funindex \stopTextSpan -@funindex stopTextSpan - -@cindex TextSpanner, example of overriding -@cindex bound-details property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -% Set details for later Text Spanner -\override TextSpanner #'(bound-details left text) - = \markup { \small \bold Slower } -% Place dynamics above staff -\dynamicUp -% Start Ottava Bracket -\ottava #1 -c' \startTextSpan -% Add Dynamic Text -c\pp -% Add Dynamic Line Spanner -c\< -% Add Text Script -c^Text -c c -% Add Dynamic Text -c\ff c \stopTextSpan -% Stop Ottava Bracket -\ottava #0 -c, c c c -@end lilypond - -This example also shows how to create Text Spanners -- -text with extender lines above a section of music. The -spanner extends from the @code{\startTextSpan} command to -the @code{\stopTextSpan} command, and the format of the -text is defined by the @code{\override TextSpanner} command. -For more details see @ruser{Text spanners}. - -It also shows how ottava brackets are created. - -@cindex tweaking bar number placement -@cindex bar numbers, tweaking placement -@cindex tweaking metronome mark placement -@cindex metronome mark, tweaking placement -@cindex tweaking rehearsal mark placement -@cindex rehearsal marks, tweaking placement - -Note that bar numbers, metronome marks and rehearsal marks are not -shown. By default these are created in the @code{Score} context and -their @code{outside-staff-priority} is ignored relative to the layout -objects which are created in the @code{Staff} context. If you wish to -place bar numbers, metronome marks or rehearsal marks in accordance -with the value of their @code{outside-staff-priority} the -@code{Bar_number_engraver}, @code{Metronome_mark_engraver} or -@code{Mark_engraver} respectively should be removed from the -@code{Score} context and placed in the top @code{Staff} context. If -this is done, these marks will be given the following default -@code{outside-staff-priority} values: - -@multitable @columnfractions .3 .3 -@headitem Layout Object @tab Priority -@item @code{RehearsalMark} @tab @code{1500} -@item @code{MetronomeMark} @tab @code{1000} -@item @code{BarNumber} @tab @code{ 100} -@end multitable - -If the default values of @code{outside-staff-priority} do not give you -the placing you want, the priority of any of the objects may be -overridden. Suppose we would like the ottava bracket to be placed -below the text spanner in the example above. All we need to do is to -look up the priority of @code{OttavaBracket} in the IR or in the -tables above, and reduce it to a value lower than that of a -@code{TextSpanner}, remembering that @code{OttavaBracket} is created -in the @code{Staff} context: - -@cindex TextSpanner, example of overriding -@cindex bound-details property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -% Set details for later Text Spanner -\override TextSpanner #'(bound-details left text) - = \markup { \small \bold Slower } -% Place dynamics above staff -\dynamicUp -%Place following Ottava Bracket below Text Spanners -\once \override Staff.OttavaBracket #'outside-staff-priority = #340 -% Start Ottava Bracket -\ottava #1 -c' \startTextSpan -% Add Dynamic Text -c\pp -% Add Dynamic Line Spanner -c\< -% Add Text Script -c^Text -c c -% Add Dynamic Text -c\ff c \stopTextSpan -% Stop Ottava Bracket -\ottava #0 -c, c c c -@end lilypond - -@cindex slurs and outside-staff-priority -@cindex slurs and articulations -@cindex articulations and slurs - -Slurs by default are classed as within-staff objects, but -they often appear above the staff if the notes to -which they are attached are high on the staff. This can push -outside-staff objects such as articulations too high, as the slur -will be placed first. The @code{avoid-slur} property of the -articulation can be set to @code{'inside} to bring the articulation -inside the slur, but the @code{avoid-slur} property is effective -only if the @code{outside-staff-priority} is also set to @code{#f}. -Alternatively, the @code{outside-staff-priority} of the slur -can be set to a numerical value to cause it to be placed along with -other outside-staff objects according to that value. Here's an -example showing the effect of the two methods: - -@lilypond[quote,verbatim,relative=2] -c4( c^\markup\tiny\sharp d4.) c8 -c4( -\once \override TextScript #'avoid-slur = #'inside -\once \override TextScript #'outside-staff-priority = ##f -c^\markup\tiny\sharp d4.) c8 -\once \override Slur #'outside-staff-priority = #500 -c4( c^\markup\tiny\sharp d4.) c8 -@end lilypond - -Changing the @code{outside-staff-priority} can also be used to -control the vertical placement of individual objects, although -the results may not always be desirable. Suppose we would -like @qq{Text3} to be placed above @qq{Text4} in the example -under Automatic behavior, above (see @ref{Automatic behavior}). -All we need to do is to look up the priority of @code{TextScript} -in the IR or in the tables above, and increase the priority of -@qq{Text3} to a higher value: - -@cindex TextScript, example of overriding -@cindex outside-staff-priority property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -c2^"Text1" -c^"Text2" -\once \override TextScript #'outside-staff-priority = #500 -c^"Text3" -c^"Text4" -@end lilypond - -This certainly lifts @qq{Text3} above @qq{Text4} but it also lifts it -above @qq{Text2}, and @qq{Text4} now drops down. Perhaps this is not -so good. What we would really like to do is to position all the -annotation at the same distance above the staff. To do this, we -clearly will need to space the notes out horizontally to make more -room for the text. This is done using the @code{textLengthOn} -command. - -@subheading \textLengthOn - -@cindex notes, spreading out with text - -@funindex \textLengthOn -@funindex textLengthOn -@funindex \textLengthOff -@funindex textLengthOff - -By default, text produced by markup takes up no horizontal space -as far as laying out the music is concerned. The @code{\textLengthOn} -command reverses this behavior, causing the notes to be spaced -out as far as is necessary to accommodate the text: - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\textLengthOn % Cause notes to space out to accommodate text -c2^"Text1" -c^"Text2" -c^"Text3" -c^"Text4" -@end lilypond - -The command to revert to the default behavior is -@code{\textLengthOff}. Remember @code{\once} only works with -@code{\override}, @code{\set}, @code{\revert} or @code{unset}, -so cannot be used with @code{\textLengthOn}. - -@cindex markup text, allowing collisions - -Markup text will also avoid notes which project above the staff. -If this is not desired, the automatic displacement upwards may -be turned off by setting the priority to @code{#f}. Here's an -example to show how markup text interacts with such notes. - -@cindex TextScript, example of overriding -@cindex outside-staff-priority property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -% This markup is short enough to fit without collision -c2^"Tex" -c''2 -R1 -% This is too long to fit, so it is displaced upwards -c,,2^"Text" -c''2 -R1 -% Turn off collision avoidance -\once \override TextScript #'outside-staff-priority = ##f -c,,2^"Long Text " -c''2 -R1 -% Turn off collision avoidance -\once \override TextScript #'outside-staff-priority = ##f -\textLengthOn % and turn on textLengthOn -c,,2^"Long Text " % Spaces at end are honored -c''2 -@end lilypond - - -@subheading Dynamics - -@cindex tweaking dynamics placement -@cindex dynamics, tweaking placement - -Dynamic markings will normally be positioned beneath the -staff, but may be positioned above with the @code{dynamicUp} -command. They will be positioned vertically relative to the -note to which they are attached, and will float below (or above) -all within-staff objects such as phrasing slurs and bar numbers. -This can give quite acceptable results, as this example -shows: - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -\clef "bass" -\key aes \major -\time 9/8 -\dynamicUp -bes4.~\f\< \( bes4 bes8 des4\ff\> c16 bes\! | -ees,2.~\)\mf ees4 r8 | -@end lilypond - -However, if the notes and attached dynamics are close -together the automatic placement will avoid collisions -by displacing later dynamic markings further away, but this may -not be the optimum placement, as this rather artificial example -shows: - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\dynamicUp -a4\f b\mf c\mp b\p -@end lilypond - -@noindent -Should a similar situation arise in @q{real} music, it may be -preferable to space out the notes a little further, so the dynamic -markings can all fit at the same vertical distance from the staff. We -were able to do this for markup text by using the @code{\textLengthOn} -command, but there is no equivalent command for dynamic marks. So we -shall have to work out how to do this using @code{\override} commands. - -@subheading Grob sizing - -@cindex grob sizing -@cindex sizing grobs - -First we must learn how grobs are sized. All grobs have a -reference point defined within them which is used to position -them relative to their parent object. This point in the grob -is then positioned at a horizontal distance, @code{X-offset}, -and at a vertical distance, @code{Y-offset}, from its parent. -The horizontal extent of the object is given by a pair of -numbers, @code{X-extent}, which say where the left and right -edges are relative to the reference point. The vertical extent -is similarly defined by a pair of numbers, @code{Y-extent}. -These are properties of all grobs which support the -@code{grob-interface}. - -@cindex @code{extra-spacing-width} - -By default, outside-staff objects are given a width of zero so -that they may overlap in the horizontal direction. This is done -by the trick of adding infinity to the leftmost extent and -minus infinity to the rightmost extent by setting the -@code{extra-spacing-width} to @code{'(+inf.0 . -inf.0)}. So -to ensure they do not overlap in the horizontal direction we -must override this value of @code{extra-spacing-width} to -@code{'(0 . 0)} so the true width shines through. This is -the command to do this for dynamic text: - -@example -\override DynamicText #'extra-spacing-width = #'(0 . 0) -@end example - -@noindent -Let's see if this works in our previous example: - -@cindex DynamicText, example of overriding -@cindex extra-spacing-width property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\dynamicUp -\override DynamicText #'extra-spacing-width = #'(0 . 0) -a4\f b\mf c\mp b\p -@end lilypond - -@noindent -Well, it has certainly stopped the dynamic marks being -displaced, but two problems remain. The marks should be -spaced a little further apart and it would be better -if they were all the same distance from the staff. -We can solve the first problem easily. Instead of making -the @code{extra-spacing-width} zero we could add a little -more to it. The units are the space between two staff -lines, so moving the left edge half a unit to the left and the -right edge half a unit to the right should do it: - -@cindex DynamicText, example of overriding -@cindex extra-spacing-width property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\dynamicUp -% Extend width by 1 staff space -\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5) -a4\f b\mf c\mp b\p -@end lilypond - -@noindent -This looks better, but maybe we would prefer the dynamic marks -to be aligned along the same baseline rather than going up and -down with the notes. The property to do this is -@code{staff-padding} which is covered in the following section. - - -@node Collisions of objects -@section Collisions of objects - -@menu -* Moving objects:: -* Fixing overlapping notation:: -* Real music example:: -@end menu - -@node Moving objects -@subsection Moving objects - -@cindex moving overlapping objects -@cindex moving colliding objects -@cindex moving colliding grobs -@cindex objects, moving colliding -@cindex grobs, moving colliding - -This may come as a surprise, but LilyPond is not perfect. Some -notation elements can overlap. This is unfortunate, but in fact -rather rare. Usually the need to move objects is for clarity or -aesthetic reasons -- they would look better with a little more -or a little less space around them. - -There are three main approaches to resolving overlapping -notation. They should be considered in the following order: - -@enumerate -@item -The @strong{direction} of one of the overlapping objects may -be changed using the predefined commands listed above for -within-staff objects (see @ref{Within-staff objects}). -Stems, slurs, beams, ties, dynamics, text and tuplets may be -repositioned easily in this way. The limitation is that you -have a choice of only two positions, and neither may be -suitable. - -@item -The @strong{object properties}, which LilyPond uses when positioning -layout objects, may be modified using @code{\override}. The -advantages of making changes to this type of property are (a) that -some other objects will be moved automatically if necessary to make -room and (b) the single override can apply to all instances of the -same type of object. Such properties include: - -@itemize - -@item -@code{direction} - -This has already been covered in some detail -- see -@ref{Within-staff objects}. - -@item -@code{padding}, @code{left-padding}, -@code{right-padding}, @code{staff-padding} - -@cindex padding -@cindex left-padding property -@cindex padding property -@cindex right-padding property -@cindex staff-padding property - -As an object is being positioned the value of its @code{padding} -property specifies the gap that must be left between itself and the -nearest edge of the object against which it is being positioned. Note -that it is the @code{padding} value of the object @strong{being -placed} that is used; the @code{padding} value of the object which is -already placed is ignored. Gaps specified by @code{padding} can be -applied to all objects which support the -@code{side-position-interface}. - -Instead of @code{padding}, the placement of groups of accidentals -is controlled by @code{left-padding} and @code{right-padding}. -These properties are to be found in the @code{AccidentalPlacement} -object which, note, lives in the @strong{staff} context. In the -type-setting process the note heads are type-set first and then -the accidentals, if any, are added to the left of the note heads -using the @code{right-padding} property to determine the separation -from the note heads. So only the @code{right-padding} property of the -@code{AccidentalPlacement} object has any effect on the placement -of the accidentals. - -The @code{staff-padding} property is closely related to the -@code{padding} property: @code{padding} controls the minimum amount of -space between any object which supports the -@code{side-position-interface} and the nearest other object (generally -the note or the staff lines); @code{staff-padding} applies only to -those objects which are always set outside the staff -- it controls -the minimum amount of space that should be inserted between that -object and the staff. Note that @code{staff-padding} has no effect on -objects which are positioned relative to the note rather than the -staff, even though it may be overridden without error for such objects --- it is simply ignored. - -To discover which padding property is required for the object you wish -to reposition, you need to return to the IR and look up the object's -properties. Be aware that the padding properties might not be located -in the obvious object, so look in objects that appear to be related. - -All padding values are measured in staff spaces. For most -objects, this value is set by default to be around 1.0 or less -(it varies with each object). It may be overridden if a larger -(or smaller) gap is required. - -@item -@code{self-alignment-X} - -@cindex self-alignment-X property - -This property can be used to align the object to the left, to -the right, or to center it with respect to the parent object's -reference point. It may be used with all objects which support -the @code{self-alignment-interface}. In general these are objects -that contain text. The values are @code{LEFT}, @code{RIGHT} -or @code{CENTER}. Alternatively, a numerical value between -@code{-1} and @code{+1} may be specified, where @code{-1} is -left-aligned, @code{+1} is right-aligned, and numbers in between -move the text progressively from left-aligned to right-aligned. -Numerical values greater than @code{1} may be specified to move -the text even further to the left, or less than @code{-1} to -move the text even further to the right. A change of @code{1} -in the value corresponds to a movement of half the text's length. - -@item -@code{extra-spacing-width} - -@cindex extra-spacing-width property - -This property is available for all objects which support the -@code{item-interface}. It takes two numbers, the first is added -to the leftmost extent and the second is added to the rightmost -extent. Negative numbers move the edge to the left, positive to -the right, so to widen an object the first number must be negative, -the second positive. Note that not all objects honor both -numbers. For example, the @code{Accidental} object only takes -notice of the first (left edge) number. - -@item -@code{staff-position} - -@cindex staff-position property - -@code{staff-position} is a property of the -@code{staff-symbol-referencer-interface}, which is supported by -objects which are positioned relative to the staff. It specifies -the vertical position of the object relative to the center line -of the staff in half staff-spaces. It is useful in resolving -collisions between layout objects like multi-measure rests, ties -and notes in different voices. - -@item -@code{force-hshift} - -@cindex force-hshift property - -Closely spaced notes in a chord, or notes occurring at the same -time in different voices, are arranged in two, occasionally more, -columns to prevent the note heads overlapping. These are called -note columns, and an object called @code{NoteColumn} is created -to lay out the notes in that column. - -The @code{force-hshift} property is a property of a @code{NoteColumn} -(actually of the @code{note-column-interface}). Changing it permits a -note column to be moved in units appropriate to a note column, -viz. the note head width of the first voice note. It should be used -in complex situations where the normal @code{\shiftOn} commands (see -@ref{Explicitly instantiating voices}) do not resolve the note -conflict. It is preferable to the @code{extra-offset} property for -this purpose as there is no need to work out the distance in -staff-spaces, and moving the notes into or out of a @code{NoteColumn} -affects other actions such as merging note heads. - -@end itemize - -@item -Finally, when all else fails, objects may be manually repositioned -relative to the staff center line vertically, or by displacing them by -any distance to a new position. The disadvantages are that the -correct values for the repositioning have to be worked out, often by -trial and error, for every object individually, and, because the -movement is done after LilyPond has placed all other objects, the user -is responsible for avoiding any collisions that might ensue. But the -main difficulty with this approach is that the repositioning values -may need to be reworked if the music is later modified. The -properties that can be used for this type of manual repositioning are: - -@table @code -@item extra-offset - -@cindex extra-offset property - -This property applies to any layout object supporting the -@code{grob-interface}. It takes a pair of numbers which specify the -extra displacement in the horizontal and vertical directions. -Negative numbers move the object to the left or down. The units are -staff-spaces. The extra displacement is made after the typesetting of -objects is finished, so an object may be repositioned anywhere without -affecting anything else. - -@item positions - -@cindex positions property - -This is most useful for manually adjusting the slope and height -of beams, slurs, and tuplets. It takes a pair of numbers -giving the position of the left and right ends of the beam, slur, -etc. relative to the center line of the staff. Units are -staff-spaces. Note, though, that slurs and phrasing slurs cannot -be repositioned by arbitrarily large amounts. LilyPond first -generates a list of possible positions for the slur and by default -finds the slur that @qq{looks best}. If the @code{positions} -property has been overridden the slur that is closest to the -requested positions is selected from the list. -@end table - -@end enumerate - -A particular object may not have all of these properties. -It is necessary to go to the IR to look up which properties -are available for the object in question. - -Here is a list of the objects which are most likely to be -involved in collisions, together with the name of the object which -should be looked up in the IR in order to discover which properties -should be used to move them. - -@multitable @columnfractions .5 .5 -@headitem Object type @tab Object name -@item Articulations @tab @code{Script} -@item Beams @tab @code{Beam} -@item Dynamics (vertically) @tab @code{DynamicLineSpanner} -@item Dynamics (horizontally) @tab @code{DynamicText} -@item Fingerings @tab @code{Fingering} -@item Rehearsal / Text marks @tab @code{RehearsalMark} -@item Slurs @tab @code{Slur} -@item Text e.g. @code{^"text"} @tab @code{TextScript} -@item Ties @tab @code{Tie} -@item Tuplets @tab @code{TupletBracket} -@end multitable - - -@node Fixing overlapping notation -@subsection Fixing overlapping notation - -Let's now see how the properties in the previous section can -help to resolve overlapping notation. - -@subheading padding property - -@cindex padding -@cindex fixing overlapping notation -@cindex overlapping notation - -The @code{padding} property can be set to increase -(or decrease) the distance between symbols that are printed -above or below notes. - -@cindex Script, example of overriding -@cindex padding property, example - -@lilypond[quote,fragment,relative=1,verbatim] -c2\fermata -\override Script #'padding = #3 -b2\fermata -@end lilypond - -@cindex MetronomeMark, example of overriding -@cindex padding property, example - -@lilypond[quote,fragment,relative=1,verbatim] -% This will not work, see below: -\override MetronomeMark #'padding = #3 -\tempo 4=120 -c1 -% This works: -\override Score.MetronomeMark #'padding = #3 -\tempo 4=80 -d1 -@end lilypond - -Note in the second example how important it is to figure out what -context handles a certain object. Since the @code{MetronomeMark} -object is handled in the @code{Score} context, property changes in the -@code{Voice} context will not be noticed. For more details, see -@ruser{Modifying properties}. - -If the @code{padding} property of an object is increased when that -object is in a stack of objects being positioned according to -their @code{outside-staff-priority}, then that object and all -objects outside it are moved. - - -@subheading left-padding and right-padding - -@cindex left-padding property -@cindex right-padding property - -The @code{right-padding} property affects the spacing between the -accidental and the note to which it applies. It is not often -required, but the following example shows one situation where it -is needed. Suppose we wish to show a chord containing both -a B-natural and a B-flat. To avoid ambiguity we would like to -precede the notes with both a natural and a flat sign. Here -are a few attempts to do this: - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] - - - -@end lilypond - -None work, with the second two showing bad collisions between -the two signs. - -One way of achieving this is to override the accidental stencil -with a markup containing the natural and flat symbols in the -order we would like, like this: - -@cindex Accidental, example of overriding -@cindex text property, example -@cindex stencil property, example -@cindex AccidentalPlacement, example of overriding -@cindex right-padding property, example - -@lilypond[quote,ragged-right,verbatim] -naturalplusflat = \markup { \natural \flat } -\relative c'' { - \once \override Accidental - #'stencil = #ly:text-interface::print - \once \override Accidental #'text = #naturalplusflat - \once \override Score.AccidentalPlacement #'right-padding = #1.5 - -} -@end lilypond - -@noindent -This necessarily uses an override for the accidental stencil which -will not be covered until later. The stencil type must be a -procedure, here changed to print the contents of the @code{text} -property of @code{Accidental}, which itself is set to be a natural -sign followed by a flat sign. These are then moved further away -from the note head by overriding @code{right-padding}. - -@noindent - -@subheading staff-padding property - -@cindex aligning objects on a baseline -@cindex objects, aligning on a baseline - -@code{staff-padding} can be used to align objects such as dynamics -along a baseline at a fixed height above the staff, rather than at a -height dependent on the position of the note to which they are -attached. It is not a property of @code{DynamicText} but of -@code{DynamicLineSpanner}. This is because the baseline should apply -equally to @strong{all} dynamics, including those created as extended -spanners. So this is the way to align the dynamic marks in the -example taken from the previous section: - -@cindex DynamicText, example of overriding -@cindex extra-spacing-width property, example -@cindex DynamicLineSpanner, example of overriding -@cindex staff-padding property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\dynamicUp -% Extend width by 1 unit -\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5) -% Align dynamics to a base line 2 units above staff -\override DynamicLineSpanner #'staff-padding = #2 -a4\f b\mf c\mp b\p -@end lilypond - - -@subheading self-alignment-X property - -The following example shows how this can resolve the collision -of a string fingering object with a note's stem by aligning the -right edge with the reference point of the parent note: - -@cindex StringNumber, example of overriding -@cindex self-alignment-X property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=3] -\voiceOne -< a \2 > -\once \override StringNumber #'self-alignment-X = #RIGHT -< a \2 > -@end lilypond - -@subheading staff-position property - -@cindex object collision within a staff - -Multimeasure rests in one voice can collide with notes in another. -Since these rests are typeset centered between the bar lines, it -would require significant effort for LilyPond to figure out which -other notes might collide with it, since all the current collision -handling between notes and between notes and rests is done only -for notes and rests that occur at the same time. Here's an -example of a collision of this type: - -@lilypond[quote,verbatim,fragment,ragged-right, relative=1] -<< {c c c c} \\ {R1} >> -@end lilypond - -The best solution here is to move the multimeasure rest down, since -the rest is in voice two. The default in @code{\voiceTwo} (i.e. in -the second voice of a @code{<<@{...@} \\ @{...@}>>} construct) is that -@code{staff-position} is set to -4 for MultiMeasureRest, so we need to -move it, say, four half-staff spaces down to @code{-8}. - -@cindex MultiMeasureRest, example of overriding -@cindex staff-position property, example - -@lilypond[quote,verbatim,fragment,ragged-right, relative=1] -<< - {c c c c} -\\ - \override MultiMeasureRest #'staff-position = #-8 - {R1} ->> -@end lilypond - -This is better than using, for example, @code{extra-offset}, -because the ledger line above the rest is inserted automatically. - -@subheading extra-offset property - -@cindex positioning objects -@cindex positioning grobs -@cindex objects, positioning -@cindex grobs, positioning - -The @code{extra-offset} property provides complete control over the -positioning of an object both horizontally and vertically. - -In the following example, the second fingering is moved a little to -the left, and 1.8 staff space downwards: - -@cindex Fingering, example of overriding -@cindex extra-offset property, example - -@lilypond[quote,fragment,relative=1,verbatim] -\stemUp -f-5 -\once \override Fingering - #'extra-offset = #'(-0.3 . -1.8) -f-5 -@end lilypond - - -@subheading positions property - -@cindex controlling tuplets, slurs, phrasing slurs, and beams manually -@cindex manually controlling tuplets, slurs, phrasing slurs, and beams -@cindex tuplet beams, controlling manually -@cindex slurs, controlling manually -@cindex phrasing slurs, controlling manually -@cindex beams, controlling manually - -The @code{positions} property allows the position and slope of -tuplets, slurs, phrasing slurs and beams to be controlled manually. -Here's an example which has an ugly phrasing slur due to its trying to -avoid the slur on the acciaccatura. - -@lilypond[quote,verbatim,fragment,ragged-right,relative=1] -r4 \acciaccatura e8\( d8 c ~c d c d\) -@end lilypond - -@noindent -We could simply move the phrasing slur above the notes, and this -would be the preferred solution: - -@lilypond[quote,verbatim,fragment,ragged-right,relative=1] -r4 -\phrasingSlurUp -\acciaccatura e8\( d8 c ~c d c d\) -@end lilypond - -@noindent -But if there were some reason why this could not be done the -other alternative would be to move the left end of the phrasing -slur down a little using the @code{positions} property. This -also resolves the rather nasty shape. - -@cindex PhrasingSlur, example of overriding -@cindex positions property, example - -@lilypond[quote,verbatim,fragment,ragged-right,relative=1] -r4 -\once \override PhrasingSlur #'positions = #'(-4 . -3) -\acciaccatura -e8\( d8 c ~c d c d\) -@end lilypond - -Here's a further example taken from the opening of the left-hand -staff of Chopin's Prelude Op 28 No. 2. We see that the beam -collides with the upper notes: - -@lilypond[quote,verbatim,fragment,ragged-right] -{ -\clef "bass" -<< {b,8 ais, b, g,} \\ {e, g e, g} >> -<< {b,8 ais, b, g,} \\ {e, g e, g} >> -} -@end lilypond - -@noindent -This can be resolved by manually moving both ends of the beam -up from their position at 2 staff-spaces above the center line to, -say, 3: - -@cindex Beam, example of overriding -@cindex positions property, example - -@lilypond[quote,verbatim,fragment,ragged-right] -{ - \clef "bass" - << - \override Beam #'positions = #'(3 . 3) - {b,8 ais, b, g,} - \\ - {e, g e, g} - >> - << {b,8 ais, b, g,} \\ {e, g e, g} >> -} -@end lilypond - -@noindent -Note that the override continues to apply in the first voice of -the second block of quavers, but not to any of the beams in the -second voice. - -@subheading force-hshift property - -@c FIXME: formatting stuff (ie not important right now IMO) -@c @a nchor Chopin finally corrected TODOgp - -We can now see how to apply the final corrections to the Chopin -example introduced at the end of @ref{I'm hearing Voices}, which -was left looking like this: - -@lilypond[quote,verbatim,fragment,ragged-right] -\new Staff \relative c'' { - \key aes \major - << - { c2 aes4. bes8 } \\ - { aes2 f4 fes } \\ - { \voiceFour - 2 - des2 - } - >> | - 1 | -} -@end lilypond - -@noindent -The lower two notes of the first chord (i.e, those in the third voice) -should not be shifted away from the note column of the higher two -notes. To correct this we set @code{force-hshift}, which is a -property of @code{NoteColumn}, of these notes to zero. The lower note -of the second chord is best placed just to the right of the higher -notes. We achieve this by setting @code{force-hshift} of this note to -0.5, ie half a note head's width to the right of the note column of -the higher notes. - -Here's the final result: - -@cindex NoteColumn, example of overriding -@cindex force-hshift property, example - -@lilypond[quote,verbatim,fragment,ragged-right] -\new Staff \relative c'' { - \key aes \major - << - { c2 aes4. bes8 } \\ - { aes2 f4 fes } \\ - { \voiceFour - \once \override NoteColumn #'force-hshift = #0 2 - \once \override NoteColumn #'force-hshift = #0.5 des2 - } - >> | - 1 | -} -@end lilypond - - -@node Real music example -@subsection Real music example - -We end this section on Tweaks by showing the steps to be taken to -deal with a tricky example which needs several tweaks to produce -the desired output. The example has been deliberately chosen to -illustrate the use of the Notation Reference to resolve unusual -problems with notation. It is not representative of more usual -engraving process, so please do not let these difficulties put -you off! Fortunately, difficulties like these are not very common! - -The example is from Chopin's Première Ballade, Op. 23, bars 6 to -9, the transition from the opening Lento to Moderato. -Here, first, is what we want the output to look like, but to avoid -over-complicating the example too much we have left out the -dynamics, fingering and pedalling. - -@c The following should appear as music without code -@c This example should not be indexed -@lilypond[quote,ragged-right] -rhMusic = \relative c'' { - r2 - c4.\( g8 | - \once \override Tie #'staff-position = #3.5 - bes1~ | - \bar "||" - \time 6/4 - \mergeDifferentlyHeadedOn - \mergeDifferentlyDottedOn - bes2.^\markup {\bold "Moderato"} r8 - << - {c,8[ d fis bes a] | } - \\ - % Reposition the c2 to the right of the merged note - {c,8~ \once \override NoteColumn #'force-hshift = #1.0 - % Move the c2 out of the main note column so the merge will work - \shiftOnn c2} - \\ - % Stem on the d2 must be down to permit merging - {s8 \stemDown \once \override Stem #'transparent = ##t d2} - \\ - {s4 fis4.} - >> - \mergeDifferentlyHeadedOff - \mergeDifferentlyDottedOff - g2.\) -} - -lhMusic = \relative c' { - r2 2( | - 1)\arpeggio | - r2. d,,4 r4 r | - r4 -} - -\score { - \new PianoStaff << - \new Staff = "RH" << - \key g \minor - \rhMusic - >> - \new Staff = "LH" << - \key g \minor - \clef "bass" - \lhMusic - >> - >> -} -@end lilypond - -We note first that the right hand part in the third bar -requires four voices. These are the five beamed eighth notes, -the tied C, the half-note D which is merged with the eighth note -D, and the dotted quarter note F-sharp, which is also merged with -the eighth note at the same pitch. Everything else is in a single -voice, so the easiest way is to introduce these four voices -temporarily at the time they are needed. If you have forgotten -how to do this, look at @ref{I'm hearing Voices}. Let us begin -by entering the notes as two variables and setting up the staff -structure in a score block, and see what LilyPond produces by -default: - -@lilypond[quote,verbatim,ragged-right] -rhMusic = \relative c'' { - r2 c4. g8 | - bes1~ | - \time 6/4 - bes2. r8 - % Start polyphonic section of four voices - << - {c,8 d fis bes a | } - \\ - {c,8~ c2 | } - \\ - {s8 d2 | } - \\ - {s4 fis4. | } - >> - g2. -} - -lhMusic = \relative c' { - r2 2 | - 1 | - r2. d,,4 r4 r | - r4 -} - -\score { - \new PianoStaff << - \new Staff = "RH" << - \key g \minor - \rhMusic - >> - \new Staff = "LH" << - \key g \minor - \clef "bass" - \lhMusic - >> - >> -} -@end lilypond - -All the notes are right, but the appearance is far from satisfactory. -The tie clashes with the change in time signature, the beaming in the -third bar is wrong, the notes are not merged together, and several -notation elements are missing. Let's first deal with the easier -things. We can correct the beaming by inserting a beam manually, and -we can easily add the left hand slur and the right hand phrasing slur, -since these were all covered in the Tutorial. Doing this gives: - -@lilypond[quote,verbatim,ragged-right] -rhMusic = \relative c'' { - r2 c4.\( g8 | - bes1~ | - \time 6/4 - bes2. r8 - % Start polyphonic section of four voices - << - {c,8[ d fis bes a] | } - \\ - {c,8~ c2 | } - \\ - {s8 d2 | } - \\ - {s4 fis4. | } - >> - g2.\) -} - -lhMusic = \relative c' { - r2 2( | - 1) | - r2. d,,4 r4 r | - r4 -} - -\score { - \new PianoStaff << - \new Staff = "RH" << - \key g \minor - \rhMusic - >> - \new Staff = "LH" << - \key g \minor - \clef "bass" - \lhMusic - >> - >> -} -@end lilypond - -The first bar is now correct. The second bar contains an arpeggio and -is terminated by a double bar line. How do we do these, as they have -not been mentioned in this Learning Manual? This is where we need to -turn to the Notation Reference. Looking up @q{arpeggio} and @q{bar -line} in the index quickly shows us that an arpeggio is produced by -appending @code{\arpeggio} to a chord, and a double bar line is -produced by the @code{\bar "||"} command. That's easily done. We -next need to correct the collision of the tie with the time signature. -This is best done by moving the tie upwards. Moving objects was -covered earlier in @ref{Moving objects}, which says that objects -positioned relative to the staff can be moved by overriding their -@code{staff-position} property, which is specified in half staff -spaces relative to the center line of the staff. So the following -override placed just before the first tied note would move the tie up -to 3.5 half staff spaces above the center line: - -@code{\once \override Tie #'staff-position = #3.5} - -This completes bar two, giving: - -@lilypond[quote,verbatim,ragged-right] -rhMusic = \relative c'' { - r2 c4.\( g8 | - \once \override Tie #'staff-position = #3.5 - bes1~ | - \bar "||" - \time 6/4 - bes2. r8 - % Start polyphonic section of four voices - << - {c,8[ d fis bes a] | } - \\ - {c,8~ c2 | } - \\ - {s8 d2 | } - \\ - {s4 fis4. | } - >> - g2.\) -} - -lhMusic = \relative c' { - r2 2( | - 1)\arpeggio | - r2. d,,4 r4 r | - r4 -} - -\score { - \new PianoStaff << - \new Staff = "RH" << - \key g \minor - \rhMusic - >> - \new Staff = "LH" << - \key g \minor - \clef "bass" - \lhMusic - >> - >> -} -@end lilypond - -On to bar three and the start of the Moderato section. The tutorial -showed how to add embolded text with the @code{\markup} command, so -adding @q{Moderato} in bold is easy. But how do we merge notes in -different voices together? This is where we need to turn to the -Notation Reference for help. A search for @qq{merge} in the Notation -Reference index quickly leads us to the commands for merging -differently headed and differently dotted notes in @ruser{Collision -resolution}. In our example we need to merge both types of note for -the duration of the polyphonic section in bar 3, so using the -information we find in the Notation Reference we add - -@example -\mergeDifferentlyHeadedOn -\mergeDifferentlyDottedOn -@end example - -@noindent -to the start of that section and - -@example -\mergeDifferentlyHeadedOff -\mergeDifferentlyDottedOff -@end example - -@noindent -to the end, giving: - -@lilypond[quote,verbatim,ragged-right] -rhMusic = \relative c'' { - r2 c4.\( g8 | - \once \override Tie #'staff-position = #3.5 - bes1~ | - \bar "||" - \time 6/4 - bes2.^\markup {\bold "Moderato"} r8 - \mergeDifferentlyHeadedOn - \mergeDifferentlyDottedOn - % Start polyphonic section of four voices - << - {c,8[ d fis bes a] | } - \\ - {c,8~ c2 | } - \\ - {s8 d2 | } - \\ - {s4 fis4. | } - >> - \mergeDifferentlyHeadedOff - \mergeDifferentlyDottedOff - g2.\) -} - -lhMusic = \relative c' { - r2 2( | - 1)\arpeggio | - r2. d,,4 r4 r | - r4 -} - -\score { - \new PianoStaff << - \new Staff = "RH" << - \key g \minor - \rhMusic - >> - \new Staff = "LH" << - \key g \minor - \clef "bass" - \lhMusic - >> - >> -} -@end lilypond - -These overrides have merged the two F-sharp notes, but not the two -on D. Why not? The answer is there in the same section in the -Notation Reference -- notes being merged must have stems in -opposite directions and two notes cannot be merged successfully if -there is a third note in the same note column. Here the two D's -both have upward stems and there is a third note -- the C. We know -how to change the stem direction using @code{\stemDown}, and -the Notation Reference also says how to move the C -- apply a shift -using one of the @code{\shift} commands. But which one? -The C is in voice two which has shift off, and the two D's are in -voices one and three, which have shift off and shift on, -respectively. So we have to shift the C a further level still -using @code{\shiftOnn} to avoid it interfering with the two D's. -Applying these changes gives: - -@cindex Tie, example of overriding -@cindex staff-position property, example - -@lilypond[quote,verbatim,ragged-right] -rhMusic = \relative c'' { - r2 c4.\( g8 | - \once \override Tie #'staff-position = #3.5 - bes1~ | - \bar "||" - \time 6/4 - bes2.^\markup {\bold "Moderato"} r8 - \mergeDifferentlyHeadedOn - \mergeDifferentlyDottedOn - % Start polyphonic section of four voices - << - {c,8[ d fis bes a] | } - \\ - % Move the c2 out of the main note column so the merge will work - {c,8~ \shiftOnn c2 | } - \\ - % Stem on the d2 must be down to permit merging - {s8 \stemDown d2 | } - \\ - {s4 fis4. | } - >> - \mergeDifferentlyHeadedOff - \mergeDifferentlyDottedOff - g2.\) -} - -lhMusic = \relative c' { - r2 2( | - 1)\arpeggio | - r2. d,,4 r4 r | - r4 -} - -\score { - \new PianoStaff << - \new Staff = "RH" << - \key g \minor - \rhMusic - >> - \new Staff = "LH" << - \key g \minor - \clef "bass" - \lhMusic - >> - >> -} -@end lilypond - -Nearly there. Only two problems remain: The downward stem on the -merged D should not be there, and the C would be better positioned -to the right of the D's. We know how to do both of these from the -earlier tweaks: we make the stem transparent, and move the C with -the @code{force-hshift} property. Here's the final result: - -@cindex NoteColumn, example of overriding -@cindex force-hshift property, example -@cindex Stem, example of overriding -@cindex transparent property, example - -@lilypond[quote,verbatim,ragged-right] -rhMusic = \relative c'' { - r2 - c4.\( g8 | - \once \override Tie #'staff-position = #3.5 - bes1~ | - \bar "||" - \time 6/4 - bes2.^\markup {\bold "Moderato"} r8 - \mergeDifferentlyHeadedOn - \mergeDifferentlyDottedOn - << - {c,8[ d fis bes a] | } - \\ - % Reposition the c2 to the right of the merged note - {c,8~ \once \override NoteColumn #'force-hshift = #1.0 - % Move the c2 out of the main note column so the merge will work - \shiftOnn c2} - \\ - % Stem on the d2 must be down to permit merging - {s8 \stemDown \once \override Stem #'transparent = ##t d2} - \\ - {s4 fis4.} - >> - \mergeDifferentlyHeadedOff - \mergeDifferentlyDottedOff - g2.\) -} - -lhMusic = \relative c' { - r2 2( | - 1)\arpeggio | - r2. d,,4 r4 r | - r4 -} - -\score { - \new PianoStaff << - \new Staff = "RH" << - \key g \minor - \rhMusic - >> - \new Staff = "LH" << - \key g \minor - \clef "bass" - \lhMusic - >> - >> -} -@end lilypond - - -@node Further tweaking -@section Further tweaking - -@menu -* Other uses for tweaks:: -* Using variables for tweaks:: -* Other sources of information:: -* Avoiding tweaks with slower processing:: -* Advanced tweaks with Scheme:: -@end menu - -@node Other uses for tweaks -@subsection Other uses for tweaks - -@cindex transparent property, use of -@cindex objects, making invisible -@cindex removing objects -@cindex objects, removing -@cindex hiding objects -@cindex objects, hiding -@cindex invisible objects -@cindex objects, invisible -@cindex tying notes across voices - -@subheading Tying notes across voices - -The following example demonstrates how to connect notes in -different voices using ties. Normally, only two notes in the -same voice can be connected with ties. By using two voices, -with the tied notes in one of them - -@lilypond[quote,fragment,relative=2] -<< { b8~ b8\noBeam } -\\ { b[ g8] } ->> -@end lilypond - -@noindent -and blanking the first up-stem in that voice, the tie appears to -cross voices: - -@cindex Stem, example of overriding -@cindex transparent property, example - -@lilypond[quote,fragment,relative=2,verbatim] -<< - { - \once \override Stem #'transparent = ##t - b8~ b8\noBeam - } -\\ - { b[ g8] } ->> -@end lilypond - -To make sure that the just-blanked stem doesn't squeeze the tie -too much, we can lengthen the stem by setting the -@code{length} to @code{8}, - -@lilypond[quote,fragment,relative=2,verbatim] -<< - { - \once \override Stem #'transparent = ##t - \once \override Stem #'length = #8 - b8~ b8\noBeam - } -\\ - { b[ g8] } ->> -@end lilypond - -@subheading Simulating a fermata in MIDI - -@cindex stencil property, use of -@cindex fermata, implementing in MIDI - -For outside-staff objects it is usually better to override the -object's @code{stencil} property rather than its @code{transparent} -property when you wish to remove it from the printed output. -Setting the @code{stencil} property of an object to @code{#f} will -remove that object entirely from the printed output. This means it -has no effect on the placement of other objects placed relative to -it. - -For example, if we wished to change the metronome setting in order -to simulate a fermata in the MIDI output we would not want the -metronome markings to appear in the printed output, and we would -not want it to influence the spacing between the two systems or -the positions of adjacent annotations on the staff. So setting -its @code{stencil} property to @code{#f} would be the best way. -We show here the effect of the two methods: - -@cindex MetronomeMark, example of overriding -@cindex transparent property, example - -@lilypond[quote,verbatim,ragged-right] -\score { - \relative c'' { - % Visible tempo marking - \tempo 4=120 - a4 a a - \once \override Score.MetronomeMark #'transparent = ##t - % Invisible tempo marking to lengthen fermata in MIDI - \tempo 4=80 - a\fermata - % New tempo for next section - \tempo 4=100 - a a a a - } - \layout { } - \midi { } -} -@end lilypond - -@cindex MetronomeMark, example of overriding -@cindex stencil property, example - -@lilypond[quote,verbatim,ragged-right] -\score { - \relative c'' { - % Visible tempo marking - \tempo 4=120 - a4 a a - \once \override Score.MetronomeMark #'stencil = ##f - % Invisible tempo marking to lengthen fermata in MIDI - \tempo 4=80 - a\fermata - % New tempo for next section - \tempo 4=100 - a a a a - } - \layout { } - \midi { } -} -@end lilypond - -@noindent -Both methods remove the metronome mark which lengthens the fermata -from the printed output, and both affect the MIDI timing as -required, but the transparent metronome mark in the first line -forces the following tempo indication too high while the -second (with the stencil removed) does not. - -@node Using variables for tweaks -@subsection Using variables for tweaks - -@cindex variables, using for tweaks -@cindex using variables for tweaks -@cindex tweaks, using variables for - -Override commands are often long and tedious to type, and they -have to be absolutely correct. If the same overrides are to be -used many times it may be worth defining variables to hold them. - -Suppose we wish to emphasize certain words in lyrics by printing -them in bold italics. The @code{\italic} and @code{\bold} -commands only work within lyrics if they are embedded, together with -the word or words to be modified, within a @code{\markup} block, -which makes them tedious to enter. The need to embed the words -themselves prevents their use in simple variables. As an -alternative can we use @code{\override} and @code{\revert} commands? - -@example -@code{\override Lyrics . LyricText #'font-shape = #'italic} -@code{\override Lyrics . LyricText #'font-series = #'bold} - -@code{\revert Lyrics . LyricText #'font-shape} -@code{\revert Lyrics . LyricText #'font-series} -@end example - -These would also be extremely tedious to enter if there were many -words requiring emphasis. But we @emph{can} define these as two -variables and use those to bracket the words to be emphasized. -Another advantage of using variables for these overrides is that -the spaces around the dot are not necessary, since they are not -being interpreted in @code{\lyricmode} directly. Here's an example -of this, although in practice we would choose shorter names -for the variables to make them quicker to type: - -@cindex LyricText, example of overriding -@cindex font-shape property, example -@cindex font-series property, example - -@lilypond[quote,verbatim] -emphasize = { - \override Lyrics.LyricText #'font-shape = #'italic - \override Lyrics.LyricText #'font-series = #'bold -} -normal = { - \revert Lyrics.LyricText #'font-shape - \revert Lyrics.LyricText #'font-series -} - -global = { \time 4/4 \partial 4 \key c \major} -SopranoMusic = \relative c' { c4 | e4. e8 g4 g | a a g } -AltoMusic = \relative c' { c4 | c4. c8 e4 e | f f e } -TenorMusic = \relative c { e4 | g4. g8 c4. b8 | a8 b c d e4 } -BassMusic = \relative c { c4 | c4. c8 c4 c | f8 g a b c4 } -VerseOne = \lyrics { E -- | ter -- nal \emphasize Fa -- ther, \normal | strong to save, } -VerseTwo = \lyricmode { O | \emphasize Christ, \normal whose voice the | wa -- ters heard, } -VerseThree = \lyricmode { O | \emphasize Ho -- ly Spi -- rit, \normal | who didst brood } -VerseFour = \lyricmode { O | \emphasize Tri -- ni -- ty \normal of | love and pow'r } - -\score { - \new ChoirStaff << - \new Staff << - \clef "treble" - \new Voice = "Soprano" { \voiceOne \global \SopranoMusic } - \new Voice = "Alto" { \voiceTwo \AltoMusic } - \new Lyrics \lyricsto "Soprano" { \VerseOne } - \new Lyrics \lyricsto "Soprano" { \VerseTwo } - \new Lyrics \lyricsto "Soprano" { \VerseThree } - \new Lyrics \lyricsto "Soprano" { \VerseFour } - >> - \new Staff << - \clef "bass" - \new Voice = "Tenor" { \voiceOne \TenorMusic } - \new Voice = "Bass" { \voiceTwo \BassMusic } - >> - >> -} -@end lilypond - - - -@node Other sources of information -@subsection Other sources of information - -The Internals Reference documentation contains a lot of information -about LilyPond, but even more information can be gathered by -looking at the internal LilyPond files. To explore these, you must -first find the directory appropriate to your system. The location -of this directory depends (a) on whether you obtained LilyPond -by downloading a precompiled binary from lilypond.org -or whether you installed it from a package manager (i.e. -distributed with Linux, or installed under fink or cygwin) or -compiled it from source, and (b) on which operating system it is -being used: - -@strong{Downloaded from lilypond.org} - -@itemize @bullet -@item Linux - -Navigate to -@file{@var{INSTALLDIR}/lilypond/usr/share/lilypond/current/} - -@item MacOS X - -Navigate to -@file{@var{INSTALLDIR}/LilyPond.app/Contents/Resources/share/lilypond/current/} -by either @code{cd}-ing into this directory from the -Terminal, or control-clicking on the LilyPond application and -selecting @q{Show Package Contents}. - -@item Windows - -Using Windows Explorer, navigate to -@file{@var{INSTALLDIR}/LilyPond/usr/share/lilypond/current/} - -@end itemize - -@strong{Installed from a package manager or compiled from source} - -Navigate to -@file{@var{PREFIX}/share/lilypond/@var{X.Y.Z}/}, where -@var{PREFIX} is set by your package manager or @code{configure} -script, and @var{X.Y.Z} is the LilyPond version number. - -@smallspace - -Within this directory the two interesting subdirectories are - -@itemize -@item @file{ly/} - contains files in LilyPond format -@item @file{scm/} - contains files in Scheme format -@end itemize - -Let's begin by looking at some files in @file{ly/}. -Open @file{ly/property-init.ly} in a text editor. The one -you normally use for @code{.ly} files will be fine. This file -contains the definitions of all the standard LilyPond predefined -commands, such as @code{\stemUp} and @code{\slurDotted}. You will -see that these are nothing more than definitions of variables -containing one or a group of @code{\override} commands. For -example, @code{/tieDotted} is defined to be: - -@example -tieDotted = @{ - \override Tie #'dash-period = #0.75 - \override Tie #'dash-fraction = #0.1 -@} -@end example - -If you do not like the default values these predefined commands can -be redefined easily, just like any other variable, at the -head of your input file. - -The following are the most useful files to be found in -@file{ly/}: - -@multitable @columnfractions .4 .6 -@headitem Filename - @tab Contents -@item @file{ly/engraver-init.ly} - @tab Definitions of engraver Contexts -@item @file{ly/paper-defaults-init.ly} - @tab Specifications of paper-related defaults -@item @file{ly/performer-init.ly} - @tab Definitions of performer Contexts -@item @file{ly/property-init.ly} - @tab Definitions of all common predefined commands -@item @file{ly/spanner-init.ly} - @tab Definitions of spanner-related predefined commands -@end multitable - -Other settings (such as the definitions of markup commands) are -stored as @code{.scm} (Scheme) files. The Scheme programming -language is used to provide a programmable interface into -LilyPond internal operation. Further explanation of these files -is currently outside the scope of this manual, as a knowledge of -the Scheme language is required. Users should be warned that -a substantial amount of technical knowledge or time is required -to understand Scheme and these files (see @ref{Scheme tutorial}). - -If you have this knowledge, the Scheme files which may be of -interest are: - -@multitable @columnfractions .4 .6 -@headitem Filename - @tab Contents -@item @file{scm/auto-beam.scm} - @tab Sub-beaming defaults -@item @file{scm/define-grobs.scm} - @tab Default settings for grob properties -@item @file{scm/define-markup-commands.scm} - @tab Specify all markup commands -@item @file{scm/midi.scm} - @tab Default settings for MIDI output -@item @file{scm/output-lib.scm} - @tab Settings that affect appearance of frets, colors, - accidentals, bar lines, etc -@item @file{scm/parser-clef.scm} - @tab Definitions of supported clefs -@item @file{scm/script.scm} - @tab Default settings for articulations -@end multitable - - - -@node Avoiding tweaks with slower processing -@subsection Avoiding tweaks with slower processing - -LilyPond can perform extra checks while it processes input files. These -checks will take extra time to perform, but fewer manual tweaks -may be required to obtain an acceptable result. If a text script -or part of the lyrics extends over the margins these checks will -compress that line of the score just enough to fit within the -margins. - -To be effective under all circumstances these checks must be enabled -by placing the overrides in a Score @code{\with} block, rather than -in-line in music, as follows: - -@example -\new Score \with @{ - % Makes sure text scripts and lyrics are within the paper margins - \override PaperColumn #'keep-inside-line = ##t - \override NonMusicalPaperColumn #'keep-inside-line = ##t -@} @{ - .. -@} -@end example - -@node Advanced tweaks with Scheme -@subsection Advanced tweaks with Scheme - -Although many things are possible with the @code{\override} and -@code{\tweak} commands, an even more powerful way of modifying -the action of LilyPond is available through a programmable -interface to the LilyPond internal operation. Code written in -the Scheme programming language can be incorporated directly in -the internal operation of LilyPond. Of course, at least a basic -knowledge of programming in Scheme is required to do this, and an -introduction is provided in the @ref{Scheme tutorial}. - -As an illustration of one of the many possibilities, instead of -setting a property to a constant it can be set to a Scheme -procedure which is then called whenever that property is accessed -by LilyPond. The property can then be set dynamically to a value -determined by the procedure at the time it is called. In this -example we color the note head in accordance with its position on -the staff. - -@cindex x11-color function, example of using -@cindex NoteHead, example of overriding -@cindex color property, setting to Scheme procedure - -@lilypond[quote,verbatim,ragged-right] -#(define (color-notehead grob) - "Color the notehead according to its position on the staff." - (let ((mod-position (modulo (ly:grob-property grob 'staff-position) 7))) - (case mod-position - ;; Return rainbow colors - ((1) (x11-color 'red )) ; for C - ((2) (x11-color 'orange )) ; for D - ((3) (x11-color 'yellow )) ; for E - ((4) (x11-color 'green )) ; for F - ((5) (x11-color 'blue )) ; for G - ((6) (x11-color 'purple )) ; for A - ((0) (x11-color 'violet )) ; for B - ) - ) -) - -\relative c' { - % Arrange to obtain color from color-notehead procedure - \override NoteHead #'color = #color-notehead - c2 c' | - b4 g8 a b4 c | - c,2 a' | - g1 | -} -\addlyrics { - Some -- where o -- ver the Rain -- bow, way up high, -} -@end lilypond - -Further examples showing the use of these programmable interfaces -can be found in @ref{Tweaking with Scheme}. - - - - - - - - - - - - - - - diff --git a/Documentation/user/unfretted-strings.itely b/Documentation/user/unfretted-strings.itely deleted file mode 100644 index 5b1a35c9a4..0000000000 --- a/Documentation/user/unfretted-strings.itely +++ /dev/null @@ -1,202 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Unfretted string instruments -@section Unfretted string instruments - -@lilypondfile[quote] -{unfretted-headword.ly} - -@cindex orchestral strings -@cindex strings, orchestral -@cindex strings, writing for - -This section provides information and references which are helpful -when writing for unfretted string instruments, principally -orchestral strings. - -@menu -* Common notation for unfretted strings:: -@end menu - -@node Common notation for unfretted strings -@subsection Common notation for unfretted strings - -There is little specialist notation for unfretted string -instruments. The music is notated on a single staff, and -usually only a single voice is required. Two voices might -be required for some double-stopped or divisi passages. - -@menu -* References for unfretted strings:: -* Bowing indications:: -* Harmonics:: -* Snap (Bartok) pizzicato:: -@end menu - -@node References for unfretted strings -@unnumberedsubsubsec References for unfretted strings - -Most of the notation which is useful for orchestral strings -and other bowed instruments is covered elsewhere: - -@itemize - -@item Textual indications such as @qq{pizz.} and @qq{arco} are -added as simple text -- see @ref{Text scripts}. - -@item Fingerings, including the thumb indication, are described -in @ref{Fingering instructions}. - -@item Double stopping is normally indicated by writing a chord, -see @ref{Chorded notes}. Directives for playing chords may be -added, see @ref{Arpeggio}. - -@item A template for a string quartet can be found in -@rlearning{String quartet}. Others are shown in the snippets. - -@end itemize - - -@seealso -Learning Manual: -@rlearning{String quartet}. - -Notation Reference: -@ref{Text scripts}, -@ref{Fingering instructions}, -@ref{Chorded notes}, -@ref{Arpeggio}. - -Snippets: -@rlsr{Unfretted strings}. - - -@node Bowing indications -@unnumberedsubsubsec Bowing indications - -@funindex \upbow -@funindex \downbow -@funindex \open - -@cindex bowing indications -@cindex up bow indication -@cindex down bow indication -@cindex open string indication -@cindex string, indicating open - -Bowing indications are created as articulations, which are -described in @ref{Articulations and ornamentations}. - -The bowing commands, @code{\upbow} and @code{\downbow}, are used -with slurs as follows: - -@lilypond[verbatim,quote,relative=2] -c4(\downbow d) e(\upbow f) -@end lilypond - -@noindent -and the following example shows three ways in which an open A -string on a violin might be indicated: - -@lilypond[verbatim,quote,relative=2] -a4 \open -a^\markup { \teeny "II" } -a2^\markup { \small "sul A" } -@end lilypond - - -@predefined -@code{\downbow}, -@code{\upbow}, -@code{\open}. -@endpredefined - - -@seealso -Notation Reference: -@ref{Articulations and ornamentations}, -@ref{Slurs}. - - -@node Harmonics -@unnumberedsubsubsec Harmonics - -@funindex \harmonic - -@strong{@i{Natural harmonics}} - -@cindex natural harmonics -@cindex harmonics, natural - -Natural harmonics can be notated in several ways. A diamond-shaped -note head generally means to touch the string where you would stop -the note if it were not a diamond. - -@warning{Harmonics @strong{must} be defined inside a chord -construct even if there is only a single note.} - -@c TODO If the default for harmonicDots is changed, change this -Dotted harmonics indicated with @code{\harmonic} do not show the -dots. The context property @code{harmonicDots} should be set if -dots are required. - -@lilypond[verbatim,quote,relative=2] -4 2. -\set harmonicDots = ##t -4 2. -@end lilypond - -Alternatively a normal note head is shown at the pitch to be -sounded together with a small circle to indicate it should be -played as a harmonic: - -@lilypond[verbatim,quote,relative=2] -d2^\flageolet d_\flageolet -@end lilypond - -A smaller circle may be created, see the snippet list in -@ref{References for unfretted strings}. - -@strong{@i{Artificial harmonics}} - -@cindex artificial harmonics -@cindex harmonics, artifical - -Artificial harmonics are notated with two notes, one with a normal -note head indicating the stopped position and one with an open -diamond note head to indicate the harmonic position. - -@lilypond[verbatim,quote,relative=1] -2 -@end lilypond - - -@seealso -Music Glossary: -@rglos{harmonics}. - -Notation Reference: -@ref{Special note heads}, -@ref{References for unfretted strings}. - - -@node Snap (Bartok) pizzicato -@unnumberedsubsubsec Snap (Bartók) pizzicato - -@cindex pizzicato, Bartók -@cindex pizzicato, snap -@cindex Bartók pizzicato -@cindex snap pizzicato - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{snap-pizzicato-markup-bartok-pizzicato.ly} diff --git a/Documentation/user/vocal.itely b/Documentation/user/vocal.itely deleted file mode 100644 index 3736331f83..0000000000 --- a/Documentation/user/vocal.itely +++ /dev/null @@ -1,1343 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Vocal music -@section Vocal music - -@c TODO: inspirational headword - -This section explains how to typeset vocal music, and make sure -that the lyrics will be aligned with the notes of their melody. - -@menu -* Common notation for vocal music:: -* Entering lyrics:: -* Aligning lyrics to a melody:: -* Specific uses of lyrics:: -* Stanzas:: -@end menu - - -@node Common notation for vocal music -@subsection Common notation for vocal music - -This section discusses issues related to vocal music in general, and -to some particular styles of vocal music. - -@menu -* References for vocal music and lyrics:: -* Opera:: -* Song books:: -* Spoken music:: -* Chants:: -* Ancient vocal music:: -@end menu - - -@node References for vocal music and lyrics -@unnumberedsubsubsec References for vocal music and lyrics - -@c TODO: split this section in two parts? -vv - -Various issues may arise when engraving vocal music. Some of these -are discussed in this section, while others are explained elsewhere: - -@itemize -@item -Most styles of vocal music use written text as lyrics. An introduction -to this notation is to be found in @rlearning{Setting simple songs}. - -@item -Vocal music is likely to require the use of @code{markup} mode, either -for lyrics of for other text elements (character's names, etc.). -This syntax is described in @ref{Text markup introduction}. - -@item -Lead sheets may be printed by combining vocal parts and @q{chord mode}; -this syntax is explained in @ref{Chord notation}. - -@item -@q{Ambitus} may be added at the beginning of vocal staves, as explained -in @ref{Ambitus}. - -@item -Vocal parts may be printed using traditional clefs, as shown in @ref{Clef}. - -@item -Ancient vocal music is supported, as explained in @ref{Ancient notation}. -@end itemize - - -@node Opera -@unnumberedsubsubsec Opera - -@c TODO -TBC - -@c add characters names snippet -vv - -@node Song books -@unnumberedsubsubsec Song books - -@c TODO -TBC - -@snippets -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{simple-lead-sheet.ly} - - -@seealso -Notation Reference: -@ref{Chord notation}. - - -@node Spoken music -@unnumberedsubsubsec Spoken music -@cindex parlato -@cindex Sprechgesang -Such effects as @q{parlato} or @q{Sprechgesang} require perfomers to speak -without pitch but still with rhythm; these are notated by cross -note heads, as demonstrated in @ref{Special note heads}. - -@c TODO add "marking-notes-on-spoken-parts" snippet -vv -@c add "showing the rhythm of a melody" snip -@c add "one staff-line notation" -@c add "improvisation" ref -@c add "lyrics independents of notes" ref - -@node Chants -@unnumberedsubsubsec Chants - -@c TODO Add text from lsr and -user -TBC - -@node Ancient vocal music -@unnumberedsubsubsec Ancient vocal music - -@c TODO -TBC - -@c Add "Printing both the ancient and the modern clef in vocal music" snippet, -@c and "Transcription of Ancient music with incipit" snippet. -vv - - -@seealso -Notation Reference: -@ref{Ancient notation}. - - -@node Entering lyrics -@subsection Entering lyrics - -@c TODO add one sentence here. -vv - -@menu -* Lyrics explained:: -* Setting simple songs:: -* Working with lyrics and variables:: -@end menu - - -@node Lyrics explained -@unnumberedsubsubsec Lyrics explained - -@cindex lyrics -@funindex \lyricmode -@cindex punctuation -@cindex spaces, in lyrics -@cindex quotes, in lyrics - -@c FIXME: this section is to be rewritten. -Since LilyPond input files are text, there is at least one -issue to consider when working with vocal music: -song texts must be interpreted as text, not notes. For example, the -input@tie{}@code{d} should be interpreted as a one letter syllable, -not the note@tie{}D. -Therefore, a special lyric mode has to be used, either explicitly -or using some abbreviated methods. - -Lyrics are entered in a special input mode, which can be introduced -by the keyword @code{\lyricmode}, or by using @code{\addlyrics} or -@code{\lyricsto}. In this mode you can enter lyrics, -with punctuation and accents, and the input @code{d} is not parsed as -a pitch, but rather as a one letter syllable. Syllables are entered -like notes, but with pitches replaced by text. For example, - -@example -\lyricmode @{ Twin-4 kle4 twin- kle litt- le star2 @} -@end example - -There are two main methods to specify the horizontal placement -of the syllables, either by specifying the duration of each syllable -explicitly, like in the example above, or by automatically aligning -the lyrics to a melody or other voice of music, using @code{\addlyrics} -or @code{\lyricsto}. -@c TODO: broken -@c For more details see @ref{The Lyrics context}. - -A word or syllable of lyrics begins with an alphabetic character, and ends -with -any space or digit. The following characters can be any character -that is not a digit or white space. - -Any character that is not a digit or white space will be regarded as -part of the syllable; one important consequence of this is that a word -can end with @code{@}}, which often leads to the following mistake: - -@example -\lyricmode @{ lah- lah@} -@end example - -In this example, the @code{@}} is included in the final syllable, so the -opening brace is not balanced and the input file will probably not -compile. - - -@funindex \property in \lyricmode - -@noindent -Similarly, a period which follows an alphabetic sequence is included in -the resulting string. As a consequence, spaces must be inserted around -property commands: do @emph{not} write - -@example -\override Score.LyricText #'font-shape = #'italic -@end example - -@noindent -but instead use - -@example -\override Score . LyricText #'font-shape = #'italic -@end example - -@funindex _ -@cindex spaces, in lyrics -@cindex quotes, in lyrics -@cindex ties, in lyrics - -In order to assign more than one syllable to a single note, you can -surround them with quotes or use a @code{_} character, to get spaces -between syllables, or use tilde symbol (@code{~}) to get a lyric tie. - -@lilypond[quote,ragged-right,fragment,verbatim] -\time 3/4 -\relative c' { c2 e4 g2 e4 } -\addlyrics { gran- de_a- mi- go } -\addlyrics { pu- "ro y ho-" nes- to } -\addlyrics { pu- ro~y~ho- nes- to } -@end lilypond - -@noindent -The lyric tie is implemented with the Unicode character -@code{U+203F}; therefore a font that includes this glyph -(such as DejaVuLGC) has to be used. More explanations about -text and non-text fonts can be found in @ref{Fonts}. - - -To enter lyrics with characters from non-English languages, or with -accented and special characters (such as the heart symbol or slanted quotes), -simply insert the characters directly into the input file and save -it with UTF-8 encoding. See @ref{Text encoding}, for more info. - -@lilypond[quote,ragged-right,fragment,verbatim] -\relative c' { e4 f e d e f e2 } -\addlyrics { He said: “Let my peo ple go”. } -@end lilypond - -To use normal quotes in lyrics, add a backslash before the -quotes. For example, - -@lilypond[quote,ragged-right,fragment,verbatim] -\relative c' { \time 3/4 e4 e4. e8 d4 e d c2. } -\addlyrics { "\"I" am so lone- "ly\"" said she } -@end lilypond - -The full definition of a word start in Lyrics mode is somewhat more -complex. - -A word in Lyrics mode begins with: an alphabetic character, @code{_}, -@code{?}, @code{!}, @code{:}, @code{'}, the control characters @code{^A} -through @code{^F}, @code{^Q} through @code{^W}, @code{^Y}, @code{^^}, -any 8-bit character with ASCII code over 127, or a two-character -combination of a backslash followed by one of @code{`}, @code{'}, -@code{"}, or @code{^}. - -@c " to balance double quotes for not-so-bright context-sensitive editors - -To define variables containing lyrics, the function @code{lyricmode} -must be used. - -@example -verseOne = \lyricmode @{ Joy to the world the Lord is come @} -\score @{ - << - \new Voice = "one" \relative c'' @{ - \autoBeamOff - \time 2/4 - c4 b8. a16 g4. f8 e4 d c2 - @} - \addlyrics @{ \verseOne @} - >> -@} -@end example - - -@seealso -Notation Reference: -@ref{Fonts}. - -Internals Reference: -@rinternals{LyricText}, -@rinternals{LyricSpace}. - - -@c FIXME: this title has to be changed (possible confusion with LM) -vv -@node Setting simple songs -@unnumberedsubsubsec Setting simple songs - -@cindex \addlyrics - -The easiest way to add lyrics to a melody is to append - -@example -\addlyrics @{ @var{the lyrics} @} -@end example - -@noindent -to a melody. Here is an example, - -@lilypond[ragged-right,verbatim,fragment,quote] -\time 3/4 -\relative c' { c2 e4 g2. } -\addlyrics { play the game } -@end lilypond - -More stanzas can be added by adding more -@code{\addlyrics} sections - -@lilypond[ragged-right,verbatim,fragment,quote] -\time 3/4 -\relative c' { c2 e4 g2. } -\addlyrics { play the game } -\addlyrics { speel het spel } -\addlyrics { joue le jeu } -@end lilypond - -The command @code{\addlyrics} cannot handle polyphony settings. For these -cases you should use @code{\lyricsto} and @code{\lyricmode}, as will be -introduced in @ref{Lyrics explained}. - -@c TODO: one additional section may be needed here, -@c such as "advanced lyric syntax" or whatever -vv - -@node Working with lyrics and variables -@unnumberedsubsubsec Working with lyrics and variables - -@cindex lyrics, variables - -To define variables containing lyrics, the function @code{\lyricmode} -must be used. You do not have to enter durations though, if you add -@code{\addlyrics} or @code{\lyricsto} -when invoking your variable. - -@example -verseOne = \lyricmode @{ Joy to the world the Lord is come @} -\score @{ - << - \new Voice = "one" \relative c'' @{ - \autoBeamOff - \time 2/4 - c4 b8. a16 g4. f8 e4 d c2 - @} - \addlyrics @{ \verseOne @} - >> -@} -@end example - -For different or more complex orderings, the best way is to setup the -hierarchy of staves and lyrics first, e.g., -@example -\new ChoirStaff << - \new Voice = "soprano" @{ @emph{music} @} - \new Lyrics = "sopranoLyrics" @{ s1 @} - \new Lyrics = "tenorLyrics" @{ s1 @} - \new Voice = "tenor" @{ @emph{music} @} ->> -@end example - -and then combine the appropriate melodies and lyric lines - -@example -\context Lyrics = sopranoLyrics \lyricsto "soprano" -@emph{the lyrics} -@end example - -@noindent - -The final input would resemble - -@example -<<\new ChoirStaff << @emph{setup the music} >> - \lyricsto "soprano" @emph{etc} - \lyricsto "alto" @emph{etc} -@emph{etc} ->> -@end example - -@ignore -@c FIXME -http://code.google.com/p/lilypond/issues/detail?id=329 -The problem cannot be reproduced. -The following has no sense, because the issue seems to be fixed. -A comment is in tracker waiting for response ---FV - - -Be careful when defining a variable with lyrics that creates a new -context, for example, using the deprecated @code{\lyrics} command. See -the next erroneous example: - -@example -words = \lyrics{ %warning: this creates a new context - one two -} -<< - \new Voice = "sop" { c1 } - \new Lyrics \lyricsto "sop" { \words } - \new Voice = "alt" { c2 c } - \new Lyrics \lyricsto "alt" { \words } ->> -@end example - -the problem is that \lyricsto will try to connect the "sop" melody with the context -created by "\new Lyrics". - -Then \lyrics in \words creates another context, and the original "\new Lyrics" one -remains empty. - -@end ignore - - -@seealso -@c TODO: document \new Staff << Voice \lyricsto >> bug -Internals Reference: -@rinternals{LyricCombineMusic}, -@rinternals{Lyrics}. - - -@node Aligning lyrics to a melody -@subsection Aligning lyrics to a melody - -@funindex \lyricmode -@funindex \addlyrics -@funindex \lyricsto - -@c FIXME: this stuff is to be rewritten. -vv - -Aligning of text with melodies can be made automatically, but if you -specify the durations of the syllables it can also be made manually. -Lyrics aligning and typesetting are prepared with the help of skips, -hyphens and extender lines. - -Lyrics are printed by interpreting them in the context called -@rinternals{Lyrics}. - -@example -\new Lyrics \lyricmode @dots{} -@end example - -There are two main methods to specify the horizontal placement -of the syllables: - -@itemize -@item -by automatically aligning -the lyrics to a melody or other voice of music, using @code{\addlyrics} -or @code{\lyricsto}. - -@item -or by specifying the duration of each syllable -explicitly, using @code{\lyricmode} -@end itemize - -The @code{Voice} context containing the melody to which the lyrics -are being aligned must not have @qq{died}, or the lyrics after that -point will be lost. This can happen if there are periods when that -voice has nothing to do. For methods of keeping contexts alive, see -@ref{Keeping contexts alive}. - - -@menu -* Automatic syllable durations:: -* Manual syllable durations:: -* Multiple syllables to one note:: -* Multiple notes to one syllable:: -* Skipping notes:: -* Extenders and hyphens:: -* Lyrics and repeats:: -@end menu - -@node Automatic syllable durations -@unnumberedsubsubsec Automatic syllable durations - -@cindex automatic syllable durations -@cindex lyrics and melodies - -The lyrics can be aligned under a given melody -automatically. This is achieved by combining the -melody and the lyrics with the @code{\lyricsto} expression - -@example -\new Lyrics \lyricsto @var{name} @dots{} -@end example - -This aligns the lyrics to the -notes of the @rinternals{Voice} context called @var{name}, which must -already exist. Therefore normally the @code{Voice} is specified first, and -then the lyrics are specified with @code{\lyricsto}. The command -@code{\lyricsto} switches to @code{\lyricmode} mode automatically, so the -@code{\lyricmode} keyword may be omitted. - -The following example uses different commands for entering lyrics. - -@lilypond[quote,fragment,ragged-right,verbatim] -<< - \new Voice = "one" \relative c'' { - \autoBeamOff - \time 2/4 - c4 b8. a16 g4. f8 e4 d c2 - } - -% not recommended: left aligns syllables - \new Lyrics \lyricmode { Joy4 to8. the16 world!4. the8 Lord4 is come.2 } - -% wrong: durations needed - \new Lyrics \lyricmode { Joy to the earth! the Sa -- viour reigns. } - -%correct - \new Lyrics \lyricsto "one" { No more let sins and sor -- rows grow. } ->> -@end lilypond - -The second stanza is not properly aligned because the durations -were not specified. A solution for that would be to use @code{\lyricsto}. - -The @code{\addlyrics} command is actually just a convenient way -to write a more complicated LilyPond structure that sets up the -lyrics. - -@example -@{ MUSIC @} -\addlyrics @{ LYRICS @} -@end example - -@noindent -is the same as - -@example -\new Voice = "blah" @{ music @} -\new Lyrics \lyricsto "blah" @{ LYRICS @} -@end example - -@node Manual syllable durations -@unnumberedsubsubsec Manual syllable durations - -Lyrics can also be entered without @code{\addlyrics} or -@code{\lyricsto}. In this case, -syllables are entered like notes -- but with pitches replaced by text -- and the -duration of each syllable must be entered explicitly. For example: - -@example -play2 the4 game2. -sink2 or4 swim2. -@end example - -The alignment to a melody can be specified with the -@code{associatedVoice} property, - -@example -\set associatedVoice = #"lala" -@end example - -@noindent -The value of the property (here: @code{"lala"}) should be the name of -a @rinternals{Voice} context. Without this setting, extender lines -will not be formatted properly. - -Here is an example demonstrating manual lyric durations, - -@lilypond[relative=1,ragged-right,verbatim,fragment,quote] -<< \new Voice = "melody" { - \time 3/4 - c2 e4 g2. - } - \new Lyrics \lyricmode { - \set associatedVoice = #"melody" - play2 the4 game2. - } >> -@end lilypond - - -@seealso -Notation Reference: -@ref{Keeping contexts alive}. - -Internals Reference: -@rinternals{Lyrics}. - - -@node Multiple syllables to one note -@unnumberedsubsubsec Multiple syllables to one note - - -@funindex _ -@cindex ties, in lyrics - -In order to assign more than one syllable to a single note, you can -surround them with quotes or use a @code{_} character, to get spaces -between syllables, or use tilde symbol (@code{~}) to get a lyric -tie@footnote{The lyric ties is implemented with the Unicode character -U+203F, so be -sure to have a font (Like DejaVuLGC) installed that includes this -glyph.}. - -@lilypond[quote,ragged-right,fragment,verbatim] -\time 3/4 -\relative c' { c2 e4 g2 e4 } -\addlyrics { gran- de_a- mi- go } -\addlyrics { pu- "ro y ho-" nes- to } -\addlyrics { pu- ro~y~ho- nes- to } -@end lilypond - - -@seealso -Internals Reference: -@rinternals{LyricCombineMusic}. - -@c Here come the section which used to be "Melismata" -@c the new title might be more self-explanatory - - -@node Multiple notes to one syllable -@unnumberedsubsubsec Multiple notes to one syllable - -@cindex melisma -@cindex melismata -@cindex phrasing, in lyrics - -Sometimes, particularly in Medieval music, several notes are to be sung on one -single syllable; such vocalises are called melismas, or melismata. - -@c this method seems to be the simplest; therefore -@c it might be better to present it first - vv - -You can define melismata entirely in the lyrics, by entering @code{_} -for every extra note that has to be added to the melisma. - -@c FIXME: clarify: __ is used to crate a lyric extender, -@c _ is used to add a note to a melisma, so both __ and _ are needed. - -@c verbose! --FV -@c duplicated: TODO fix -Additionaly, you can make an extender line to be typeset to indicate -the melisma in the score, writing a double underscore next to the -first syllable of the melisma. This example shows the three elements -that are used for this purpose (all of them surrounded by spaces): -double hyphens to separate syllables in a word, underscores to add -notes to a melisma, and a double underscore to put an extender line. - -@c wrong: extender line only on last syllable of a word. Change example -@lilypond[relative=1,verbatim,fragment,quote] -{ \set melismaBusyProperties = #'() - c d( e) f f( e) e e } -\addlyrics - { Ky -- _ _ ri __ _ _ _ e } -@end lilypond - -In this case, you can also have ties and slurs in the melody if you -set @code{melismaBusyProperties}, as is done in the example above. - -However, the @code{\lyricsto} command can also -detect melismata automatically: it only puts one -syllable under a tied or slurred group of notes. If you want to force -an unslurred group of notes to be a melisma, insert @code{\melisma} -after the first note of the group, and @code{\melismaEnd} after the -last one, e.g., - -@lilypond[quote,relative=2,ragged-right,fragment,verbatim] -<< - \new Voice = "lala" { - \time 3/4 - f4 g8 - \melisma - f e f - \melismaEnd - e2 - } - \new Lyrics \lyricsto "lala" { - la di __ daah - } ->> -@end lilypond - -In addition, notes are considered a melisma if they are manually -beamed, and automatic beaming (see @ref{Setting automatic beam -behavior}) is switched off. - -@c FIXME: this now links to LM -vv - -@cindex SATB -@cindex choral score - -A complete example of a SATB score setup is in section -@rlearning{Vocal ensembles}. - - -@predefined -@funindex \melisma -@code{\melisma}, -@funindex \melismaEnd -@code{\melismaEnd}. -@endpredefined - - -@seealso -@c @lsr{vocal,lyric@/-combine.ly}. - - -@knownissues - -Melismata are not detected automatically, and extender lines must be -inserted by hand. - -@node Skipping notes -@unnumberedsubsubsec Skipping notes - -Making a lyric line run slower than the melody can be achieved by -inserting @code{\skip}s into the lyrics. For every @code{\skip}, -the text will be delayed another note. The @code{\skip} command -must be followed by a valid duration, but this is ignored when -@code{\skip} is used in lyrics. - -For example, - -@lilypond[verbatim,ragged-right,quote] -\relative c' { c c g' } -\addlyrics { - twin -- \skip 4 - kle -} -@end lilypond - - -@node Extenders and hyphens -@unnumberedsubsubsec Extenders and hyphens - -@cindex melisma -@cindex extender - -@c leave this as samp. -gp -In the last syllable of a word, melismata are sometimes indicated with -a long horizontal line starting in the melisma syllable, and ending in -the next one. Such a line is called an extender line, and it is -entered as @samp{ __ } (note the spaces before and after the two -underscore characters). - -@warning{Melismata are indicated in the score with extender lines, -which are entered as one double underscore; but short melismata can -also be entered by skipping individual notes, which are entered as -single underscore characters; these do not make an extender line to be -typeset by default.} - -@cindex hyphens - -@c leave this as samp. -gp -Centered hyphens are entered as @samp{ -- } between syllables of a same word -(note the spaces before and after the two hyphen characters). The hyphen -will be centered between the syllables, and its length will be adjusted -depending on the space between the syllables. - -In tightly engraved music, hyphens can be removed. Whether this -happens can be controlled with the @code{minimum-distance} (minimum -distance between two syllables) and the @code{minimum-length} -(threshold below which hyphens are removed). - - -@seealso -Internals Reference: -@rinternals{LyricExtender}, -@rinternals{LyricHyphen} - - -@node Lyrics and repeats -@unnumberedsubsubsec Lyrics and repeats - -@c TODO New section. Add text -TBC - - -@node Specific uses of lyrics -@subsection Specific uses of lyrics - -@c FIXME This whole section is to be reorganized. -vv - -Often, different stanzas of one song are put to one melody in slightly -differing ways. Such variations can still be captured with -@code{\lyricsto}. - -@menu -* Divisi lyrics:: -* Lyrics independent of notes:: -* Spacing out syllables:: -* Centering lyrics between staves:: -@end menu - - - -@node Divisi lyrics -@unnumberedsubsubsec Divisi lyrics - -You can display alternate (or divisi) lyrics by naming voice -contexts and attaching lyrics to those specific contexts. - -@lilypond[verbatim,ragged-right,quote] -\score{ << - \new Voice = "melody" { - \relative c' { - c4 - << - { \voiceOne c8 e } - \new Voice = "splitpart" { \voiceTwo c4 } - >> - \oneVoice c4 c | c - } - } - \new Lyrics \lyricsto "melody" { we shall not o- ver- come } - \new Lyrics \lyricsto "splitpart" { will } ->> } -@end lilypond - - -You can use this trick to display different lyrics for a repeated -section. - -@lilypond[verbatim,ragged-right,quote] -\score{ << - \new Voice = "melody" \relative c' { - c2 e | g e | c1 | - \new Voice = "verse" \repeat volta 2 {c4 d e f | g1 | } - a2 b | c1} - \new Lyrics = "mainlyrics" \lyricsto melody \lyricmode { - do mi sol mi do - la si do } - \context Lyrics = "mainlyrics" \lyricsto verse \lyricmode { - do re mi fa sol } - \new Lyrics = "repeatlyrics" \lyricsto verse \lyricmode { - dodo rere mimi fafa solsol } ->> -} -@end lilypond - - - -@node Lyrics independent of notes -@unnumberedsubsubsec Lyrics independent of notes - -@cindex Devnull context - -In some complex vocal music, it may be desirable to place -lyrics completely independently of notes. Music defined -inside @code{lyricrhythm} disappears into the -@code{Devnull} context, but the rhythms can still be used -to place the lyrics. - -@lilypond[quote,verbatim,ragged-right] -voice = { - c''2 - \tag #'music { c''2 } - \tag #'lyricrhythm { c''4. c''8 } - d''1 -} - -lyr = \lyricmode { I like my cat! } - -<< - \new Staff \keepWithTag #'music \voice - \new Devnull="nowhere" \keepWithTag #'lyricrhythm \voice - \new Lyrics \lyricsto "nowhere" \lyr - \new Staff { c'8 c' c' c' c' c' c' c' - c' c' c' c' c' c' c' c' } ->> -@end lilypond - -This method is recommended only if the music in the @code{Devnull} -context does not contain melismata. Melismata are defined by the -@code{Voice} context. Connecting lyrics to a @code{Devnull} context -makes the voice/lyrics links to get lost, and so does the info on -melismata. Therefore, if you link lyrics to a @code{Devnull} context, -the implicit melismata get ignored. - -@c Conclusion: do not use devnull for lyrics -FV - -@c this clarifies http://code.google.com/p/lilypond/issues/detail?id=248 - -@node Spacing out syllables -@unnumberedsubsubsec Spacing out syllables - -@cindex Spacing lyrics -@cindex Lyrics, increasing space between - -To increase the spacing between lyrics, set the minimum-distance property of -LyricSpace. - -@lilypond[relative,verbatim,fragment,quote,ragged-right] -{ - c c c c - \override Lyrics.LyricSpace #'minimum-distance = #1.0 - c c c c -} -\addlyrics { - longtext longtext longtext longtext - longtext longtext longtext longtext -} -@end lilypond - -To make this change for all lyrics in the score, set the property in the -layout. - -@lilypond[verbatim,quote,ragged-right] -\score { - \relative c' { - c c c c - c c c c - } - \addlyrics { - longtext longtext longtext longtext - longtext longtext longtext longtext - } - \layout { - \context { - \Lyrics - \override LyricSpace #'minimum-distance = #1.0 - } - } -} -@end lilypond - -@c @snippets -@c This snippet has been renamed to "lyrics-alignment.ly" -@c update as soon as lsr/is updated -vv -@c @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -@c {lyrics-alignment.ly} - -@c TODO: move to LSR -vv -@snippets - -Checking to make sure that text scripts and lyrics are within the margins is -a relatively large computational task. To speed up processing, LilyPond does -not perform such calculations by default; to enable it, use - -@example -\override Score.PaperColumn #'keep-inside-line = ##t -@end example - -To make lyrics avoid bar lines as well, use - -@example -\layout @{ - \context @{ - \Lyrics - \consists "Bar_engraver" - \consists "Separating_line_group_engraver" - \override BarLine #'transparent = ##t - @} -@} -@end example - -@c TODO Create and add lsr example of lyricMelismaAlignment -@c It's used like this to center-align all lyric syllables, -@c even when notes are tied. -td - -@ignore -\layout -{ - \context { \Score lyricMelismaAlignment = #0 } -} -@end ignore - - -@node Centering lyrics between staves -@unnumberedsubsubsec Centering lyrics between staves - -@c TODO Add text from -user -TBC - -@node Stanzas -@subsection Stanzas - -@menu -* Adding stanza numbers:: -* Adding dynamics marks to stanzas:: -* Adding singers' names to stanzas:: -* Stanzas with different rhythms:: -* Printing stanzas at the end:: -* Printing stanzas at the end in multiple columns:: -@end menu - - -@node Adding stanza numbers -@unnumberedsubsubsec Adding stanza numbers - -@cindex stanza number - -Stanza numbers can be added by setting @code{stanza}, e.g., - -@lilypond[quote,ragged-right,verbatim,relative=2,fragment] -\new Voice { - \time 3/4 g2 e4 a2 f4 g2. -} \addlyrics { - \set stanza = #"1. " - Hi, my name is Bert. -} \addlyrics { - \set stanza = #"2. " - Oh, ché -- ri, je t'aime -} -@end lilypond - - -@noindent -These numbers are put just before the start of the first syllable. - -@c TODO Create and add snippet to show how two lines of a -@c stanza can be grouped together, along these lines: -@c (might need improving a bit) -td - -@ignore -leftbrace = \markup { \override #'(font-encoding . fetaBraces) \lookup -#"brace105" } - -stanzaOneOne = { - \set stanza = \markup { "1. " \leftbrace } - \lyricmode { Child, you're mine and I love you. - Lend thine ear to what I say. - - } -} - -stanzaOneThree = { -% \set stanza = \markup { " "} - \lyricmode { Child, I have no great -- er joy - Than to have you walk in truth. - - } -} - -\new Voice { - \repeat volta 2 { c'8 c' c' c' c' c' c'4 - c'8 c' c' c' c' c' c'4 } -} \addlyrics { \stanzaOneOne } - \addlyrics { \stanzaOneThree } - -@end ignore - -@node Adding dynamics marks to stanzas -@unnumberedsubsubsec Adding dynamics marks to stanzas - -Stanzas differing in loudness may be indicated by putting a -dynamics mark before each stanza. In LilyPond, everything coming in -front of a stanza goes into the @code{StanzaNumber} object; dynamics marks -are no different. For technical reasons, you have to set the stanza -outside @code{\lyricmode}: - -@lilypond[quote,ragged-right,verbatim] -text = { - \set stanza = \markup { \dynamic "ff" "1. " } - \lyricmode { - Big bang - } -} - -<< - \new Voice = "tune" { - \time 3/4 - g'4 c'2 - } -\new Lyrics \lyricsto "tune" \text ->> -@end lilypond - -@node Adding singers' names to stanzas -@unnumberedsubsubsec Adding singers' names to stanzas - -@cindex singer name -@cindex name of singer - -Names of singers can also be added. They are printed at the start of -the line, just like instrument names. They are created by setting -@code{vocalName}. A short version may be entered as @code{shortVocalName}. - -@lilypond[fragment,ragged-right,quote,verbatim,relative=2] -\new Voice { - \time 3/4 g2 e4 a2 f4 g2. -} \addlyrics { - \set vocalName = #"Bert " - Hi, my name is Bert. -} \addlyrics { - \set vocalName = #"Ernie " - Oh, ché -- ri, je t'aime -} -@end lilypond - -@node Stanzas with different rhythms -@unnumberedsubsubsec Stanzas with different rhythms - -@subsubheading Ignoring melismata - -One possibility is that the text has a melisma in one stanza, but -multiple syllables in another one. One solution is to make the faster -voice ignore the melisma. This is done by setting -@code{ignoreMelismata} in the Lyrics context. - -@lilypond[verbatim,ragged-right,quote] -<< - \relative c' \new Voice = "lahlah" { - \set Staff.autoBeaming = ##f - c4 - \slurDotted - f8.[( g16]) - a4 - } - \new Lyrics \lyricsto "lahlah" { - more slow -- ly - } - \new Lyrics \lyricsto "lahlah" { - go - \set ignoreMelismata = ##t - fas -- ter - \unset ignoreMelismata - still - } ->> -@end lilypond - -@knownissues -Unlike most @code{\set} commands, @code{\set ignoreMelismata} does -not work if prefixed with @code{\once}. It is necessary to use -@code{\set} and @code{\unset} to bracket the lyrics where melismata -are to be ignored. - -@subsubheading Switching to an alternative melody - -More complex variations in text underlay are possible. It is possible -to switch the melody for a line of lyrics during the text. This is -done by setting the @code{associatedVoice} property. In the example - -@lilypond[ragged-right,quote] -<< - \relative c' \new Voice = "lahlah" { - \set Staff.autoBeaming = ##f - c4 - << - \new Voice = "alternative" { - \voiceOne - \times 2/3 { - % show associations clearly. - \override NoteColumn #'force-hshift = #-3 - f8 f g - } - } - { - \voiceTwo - f8.[ g16] - \oneVoice - } >> - a8( b) c - } - \new Lyrics \lyricsto "lahlah" { - Ju -- ras -- sic Park - } - \new Lyrics \lyricsto "lahlah" { - % Tricky: need to set associatedVoice - % one syllable too soon! - \set associatedVoice = alternative % applies to "ran" - Ty -- - ran -- - no -- - \set associatedVoice = lahlah % applies to "rus" - sau -- rus Rex - } >> -@end lilypond - -@noindent -the text for the first stanza is set to a melody called @q{lahlah}, - -@example -\new Lyrics \lyricsto "lahlah" @{ - Ju -- ras -- sic Park -@} -@end example - - -The second stanza initially is set to the @code{lahlah} context, but -for the syllable @q{ran}, it switches to a different melody. -This is achieved with -@example -\set associatedVoice = alternative -@end example - -@noindent -Here, @code{alternative} is the name of the @code{Voice} context -containing the triplet. - -@c FIXME: make this easier to understand -vv -This command must be one syllable too early, before @q{Ty} in this -case. In other words, changing the associatedVoice happens one step -later than expected. This is for technical reasons, and it is not a -bug. - -@example -\new Lyrics \lyricsto "lahlah" @{ - \set associatedVoice = alternative % applies to "ran" - Ty -- - ran -- - no -- - \set associatedVoice = lahlah % applies to "rus" - sau -- rus Rex -@} -@end example - -@noindent -The underlay is switched back to the starting situation by assigning -@code{lahlah} to @code{associatedVoice}. - - -@node Printing stanzas at the end -@unnumberedsubsubsec Printing stanzas at the end - -Sometimes it is appropriate to have one stanza set -to the music, and the rest added in verse form at -the end of the piece. This can be accomplished by adding -the extra verses into a @code{\markup} section outside -of the main score block. Notice that there are two -different ways to force linebreaks when using -@code{\markup}. - -@lilypond[ragged-right,verbatim,quote] -melody = \relative c' { -e d c d | e e e e | -d d e d | c1 | -} - -text = \lyricmode { -\set stanza = #"1." Ma- ry had a lit- tle lamb, -its fleece was white as snow. -} - -\score{ << - \new Voice = "one" { \melody } - \new Lyrics \lyricsto "one" \text ->> - \layout { } -} -\markup { \column{ - \line{ Verse 2. } - \line{ All the children laughed and played } - \line{ To see a lamb at school. } - } -} -\markup{ - \wordwrap-string #" - Verse 3. - - Mary took it home again, - - It was against the rule." -} -@end lilypond - - -@node Printing stanzas at the end in multiple columns -@unnumberedsubsubsec Printing stanzas at the end in multiple columns - -When a piece of music has many verses, they are often printed in -multiple columns across the page. An outdented verse number often -introduces each verse. The following example shows how to produce such -output in LilyPond. - -@lilypond[ragged-right,quote,verbatim] -melody = \relative c' { - c c c c | d d d d -} - -text = \lyricmode { - \set stanza = #"1." This is verse one. - It has two lines. -} - -\score{ << - \new Voice = "one" { \melody } - \new Lyrics \lyricsto "one" \text - >> - \layout { } -} - -\markup { - \fill-line { - \hspace #0.1 % moves the column off the left margin; - % can be removed if space on the page is tight - \column { - \line { \bold "2." - \column { - "This is verse two." - "It has two lines." - } - } - \hspace #0.1 % adds vertical spacing between verses - \line { \bold "3." - \column { - "This is verse three." - "It has two lines." - } - } - } - \hspace #0.1 % adds horizontal spacing between columns; - % if they are still too close, add more " " pairs - % until the result looks good - \column { - \line { \bold "4." - \column { - "This is verse four." - "It has two lines." - } - } - \hspace #0.1 % adds vertical spacing between verses - \line { \bold "5." - \column { - "This is verse five." - "It has two lines." - } - } - } - \hspace #0.1 % gives some extra space on the right margin; - % can be removed if page space is tight - } -} -@end lilypond - - -@seealso -Internals Reference: -@rinternals{LyricText}, -@rinternals{StanzaNumber}. - - - - diff --git a/Documentation/user/wind.itely b/Documentation/user/wind.itely deleted file mode 100644 index 6507197554..0000000000 --- a/Documentation/user/wind.itely +++ /dev/null @@ -1,223 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Wind instruments -@section Wind instruments - -@lilypondfile[quote]{wind-headword.ly} - -This section includes some elements of music notation that arise when -writing for winds. - -@menu -* Common notation for wind instruments:: -* Bagpipes:: -@end menu - -@node Common notation for wind instruments -@subsection Common notation for wind instruments - -This section discusses some issues common to most wind instruments. - -@menu -* References for wind instruments:: -* Fingerings:: -@end menu - -@node References for wind instruments -@unnumberedsubsubsec References for wind instruments - -@cindex wind instruments - -Many notation issues for wind instruments pertain to breathing and -tonguing: - -@itemize -@item Breathing can be specified by rests or @ref{Breath marks}. -@item Legato playing is indicated by @ref{Slurs}. -@item Different types of tonguings, ranging from legato to non-legato to -stacatto are usually shown by articulation marks, sometimes combined -with slurs, see @ref{Articulations and ornamentations} and @ref{List of -articulations}. -@item Flutter tonguing is usually indicated by placing a tremolo mark -and a text markup on the note. See @ref{Tremolo repeats}. -@end itemize - -There are also other aspects of musical notation that can apply to wind -instruments: - -@itemize -@item Many wind instruments are transposing intruments, see -@ref{Instrument transpositions}. -@item The slide glissando are characteristic of the trombone, but other -winds may perform keyed or valved glissandi. See @ref{Glissando}. -@item Harmonic series glissandi, which are possible on all brass -instruments but common for French Horns, are usually written out as -@ref{Grace notes}. -@item Pitch inflections at the end of a note are discussed in @ref{Falls -and doits}. -@item Key slaps or valve slaps are often shown by the @code{cross} style -of @ref{Special note heads}. -@item Woodwinds can overblow low notes to sound harmonics. These are -shown by the @code{flageolet} articulation. See @ref{List of articulations}. -@item The use of brass mutes is usually indicated by a text markup, but -where there are many rapid changes it is better to use the -@code{stopped} and @code{open} articulations. See @ref{Articulations and -ornamentations} and @ref{List of articulations}. -@item Stopped horns are indicated by the @code{stopped} articulation. -See @ref{Articulations and ornamentations}. -@end itemize - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{changing--flageolet-mark-size.ly} - - -@seealso -Notation Reference: -@ref{Breath marks}, -@ref{Slurs}, -@ref{Articulations and ornamentations}, -@ref{List of articulations}, -@ref{Tremolo repeats}, -@ref{Instrument transpositions}, -@ref{Glissando}, -@ref{Grace notes}, -@ref{Falls and doits}, -@ref{Special note heads}, - -Snippets: -@rlsr{Winds} - - -@node Fingerings -@unnumberedsubsubsec Fingerings -@c TODO add link to LSR snippet by Libero Mureddo once he has added -@c it (after August 15th). -All wind instruments other than the trombone require the use of several -fingers to produce each pitch. - -TBC - -@node Bagpipes -@subsection Bagpipes - -This section includes extra information for writing for bagpipes. - -@menu -* Bagpipe definitions:: -* Bagpipe example:: -@end menu - -@node Bagpipe definitions -@unnumberedsubsubsec Bagpipe definitions - -@cindex bagpipe -@cindex Scottish highland bagpipe -@cindex grace notes -@funindex \taor -@funindex taor -@funindex \hideKeySignature -@funindex hideKeySignature -@funindex \showKeySignature -@funindex showKeySignature - -LilyPond contains special definitions for music for the Scottish -highland bagpipe; to use them, add - -@example -\include "bagpipe.ly" -@end example - -@noindent -at the top of your input file. This lets you add the special grace notes -common to bagpipe music with short commands. For example, you could -write @code{\taor} instead of - -@example -\grace @{ \small G32[ d G e] @} -@end example - -@code{bagpipe.ly} also contains pitch definitions for the bagpipe -notes in the appropriate octaves, so you do not need to worry about -@code{\relative} or @code{\transpose}. - -@lilypond[ragged-right,verbatim,quote,notime] -\include "bagpipe.ly" -{ \grg G4 \grg a \grg b \grg c \grg d \grg e \grg f \grA g A } -@end lilypond - -Bagpipe music nominally uses the key of D Major (even though that -isn't really true). However, since that is the only key that can be used, -the key signature is normally not written out. To set this up correctly, -always start your music with @code{\hideKeySignature}. If you for some -reason want to show the key signature, you can use @code{\showKeySignature} -instead. - -Some modern music use cross fingering on c and f to flatten those notes. -This can be indicated by @code{cflat} or @code{fflat}. Similarly, the -piobaireachd high g can be written @code{gflat} when it occurs in light -music. - - -@seealso -@rlsr{Winds} - - -@node Bagpipe example -@unnumberedsubsubsec Bagpipe example - -@cindex bagpipe example -@cindex Amazing Grace bagpipe example - -This is what the well known tune Amazing Grace looks like in bagpipe -notation. - -@lilypond[verbatim,quote] -\include "bagpipe.ly" -\layout { - indent = 0.0\cm - \context { \Score \remove "Bar_number_engraver" } -} - -\header { - title = "Amazing Grace" - meter = "Hymn" - arranger = "Trad. arr." -} - -{ - \hideKeySignature - \time 3/4 - \grg \partial 4 a8. d16 - \slurd d2 \grg f8[ e32 d16.] - \grg f2 \grg f8 e - \thrwd d2 \grg b4 - \grG a2 \grg a8. d16 - \slurd d2 \grg f8[ e32 d16.] - \grg f2 \grg e8. f16 - \dblA A2 \grg A4 - \grg A2 f8. A16 - \grg A2 \hdblf f8[ e32 d16.] - \grg f2 \grg f8 e - \thrwd d2 \grg b4 - \grG a2 \grg a8. d16 - \slurd d2 \grg f8[ e32 d16.] - \grg f2 e4 - \thrwd d2. - \slurd d2 - \bar "|." -} -@end lilypond - - -@seealso -@rlsr{Winds} diff --git a/Documentation/user/working.itely b/Documentation/user/working.itely deleted file mode 100644 index 3a55de2156..0000000000 --- a/Documentation/user/working.itely +++ /dev/null @@ -1,1189 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond-learning.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Working on LilyPond projects -@chapter Working on LilyPond projects - -This section explains how to solve or avoid certain common -problems. If you have programming experience, many of these -tips may seem obvious, but it is still advisable to read -this chapter. - - -@menu -* Suggestions for writing LilyPond input files:: -* When things don't work:: -* Scores and parts:: -* Make and Makefiles:: -@end menu - - -@node Suggestions for writing LilyPond input files -@section Suggestions for writing LilyPond input files - -Now you're ready to begin writing larger LilyPond input files -- -not just the little examples in the tutorial, but whole pieces. -But how should you go about doing it? - -As long as LilyPond can understand your input files and produce -the output that you want, it doesn't matter what your input files -look like. However, there are a few other things to consider when -writing LilyPond input files. - -@itemize -@item What if you make a mistake? The structure of a LilyPond -file can make certain errors easier (or harder) to find. - -@item What if you want to share your input files with somebody -else? In fact, what if you want to alter your own input files in -a few years? Some LilyPond input files are understandable at -first glance; others may leave you scratching your head -for an hour. - -@item What if you want to upgrade your LilyPond file for use -with a later version of LilyPond? The input syntax changes -occasionally as LilyPond improves. Most changes can be -done automatically with @code{convert-ly}, but some changes -might require manual assistance. LilyPond input files can be -structured in order to be easier (or harder) to update. - -@end itemize - -@menu -* General suggestions:: -* Typesetting existing music:: -* Large projects:: -* Saving typing with variables and functions:: -* Style sheets:: -@end menu - - -@node General suggestions -@subsection General suggestions - -Here are a few suggestions that can help you to avoid or fix -problems: - -@itemize -@item @strong{Include @code{\version} numbers in every file}. Note that all -templates contain @code{\version} information. We -highly recommend that you always include the @code{\version}, no matter -how small your file is. Speaking from personal experience, it's -quite frustrating to try to remember which version of LilyPond you were -using a few years ago. @command{convert-ly} requires you to declare -which version of LilyPond you used. - -@item @strong{Include checks}: @ruser{Bar and bar number checks}, -@ruser{Octave checks}. If you include checks every so often, then -if you make a mistake, you can pinpoint it quicker. How often is -@q{every so often}? It depends on the complexity of the music. -For very simple music, perhaps just once or twice. For very -complex music, perhaps every bar. - -@item @strong{One bar per line of text}. If there is anything complicated, -either in the music -itself or in the output you desire, it's often good to write only one bar -per line. Saving screen space by cramming eight bars per line just isn't -worth it if you have to @q{debug} your input files. - -@item @strong{Comment your input files}. Use either bar numbers -(every so often) or -references to musical themes (@q{second theme in violins,} @q{fourth -variation,} etc.). You may not need comments when you're writing the piece -for the first time, but if you want to go back to change something two or -three years later, or if you pass the source over to a friend, it will -be much more -challenging to determine your intentions or how your file is structured if -you didn't comment the file. - -@item @strong{Indent your braces}. A lot of problems are caused by an -imbalance -in the number of @code{@{} and @code{@}}. - -@item @strong{Explicitly add durations} at the beginnings of sections -and variables. If you specify @code{c4 d e} at the beginning of a -phrase (instead of just @code{c d e}) you can save yourself some -problems if you rearrange your music later. - -@item @strong{Separate tweaks} from music definitions. See -@ref{Saving typing with variables and functions}, and -@ref{Style sheets}. - -@end itemize - - -@node Typesetting existing music -@subsection Typesetting existing music - -If you are entering music from an existing score (i.e., typesetting a -piece of existing sheet music), - -@itemize - -@item Enter one manuscript (the physical copy) system at a time (but still -only one bar per line of text), and -check each system when you finish it. You may use the -@code{showLastLength} or @code{showFirstLength} properties to speed up -processing -- see @ruser{Skipping corrected music}. - -@item Define @code{mBreak = @{ \break @}} and insert @code{\mBreak} -in the input file whenever the manuscript has a line break. This -makes it much easier to compare the LilyPond music to the original -music. When you are finished proofreading your score, you may -define @code{mBreak = @{ @}} to remove all those line breaks. This -will allow LilyPond to place line breaks wherever it feels are -best. - -@item When entering a part for a transposing instrument into a -variable, it is recommended that the notes are wrapped in - -@example -\transpose c natural-pitch @{...@} -@end example -(where @code{natural-pitch} is the open pitch of the instrument) so -that the music in the variable is effectively in C. You can transpose -it back again when the variable is used, if required, but you might -not want to (e.g., when printing a score in concert pitch, -converting a trombone part from treble to bass clef, etc.) -Mistakes in transpositions are less likely if all the music in -variables is at a consistent pitch. - -Also, only ever transpose to/from C. That means that the only other -keys you will use are the natural pitches of the instruments - bes -for a B-flat trumpet, aes for an A-flat clarinet, etc. - -@end itemize - - -@node Large projects -@subsection Large projects - -When working on a large project, having a clear structure to your -lilypond input files becomes vital. - -@itemize - -@item @strong{Use a variable for each voice}, with a minimum of -structure inside the definition. The structure of the -@code{\score} section is the most likely thing to change; -the @code{violin} definition is extremely unlikely to change -in a new version of LilyPond. - -@example -violin = \relative c'' @{ -g4 c'8. e16 -@} -... -\score @{ - \new GrandStaff @{ - \new Staff @{ - \violin - @} - @} -@} -@end example - -@item @strong{Separate tweaks from music definitions}. This -point was made previously, but for large -projects it is absolutely vital. We might need to change -the definition of @code{fthenp}, but then we only need -to do this once, and we can still avoid touching anything -inside @code{violin}. - -@example -fthenp = _\markup@{ - \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p @} -violin = \relative c'' @{ -g4\fthenp c'8. e16 -@} -@end example - -@end itemize - - -@node Saving typing with variables and functions -@subsection Saving typing with variables and functions - -@cindex variables -@cindex variables - -By this point, you've seen this kind of thing: - -@lilypond[quote,verbatim,ragged-right] -hornNotes = \relative c'' { c4 b dis c } -\score { - { - \hornNotes - } -} -@end lilypond - -You may even realize that this could be useful in minimalist music: - -@lilypond[quote,verbatim,ragged-right] -fragmentA = \relative c'' { a4 a8. b16 } -fragmentB = \relative c'' { a8. gis16 ees4 } -violin = \new Staff { \fragmentA \fragmentA \fragmentB \fragmentA } -\score { - { - \violin - } -} -@end lilypond - -However, you can also use these variables (also known as -variables, macros, or (user-defined) command) for tweaks: - -@lilypond[quote,verbatim,ragged-right] -dolce = \markup{ \italic \bold dolce } -padText = { \once \override TextScript #'padding = #5.0 } -fthenp=_\markup{ \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p } -violin = \relative c'' { - \repeat volta 2 { - c4._\dolce b8 a8 g a b | - \padText - c4.^"hi there!" d8 e' f g d | - c,4.\fthenp b8 c4 c-. | - } -} -\score { - { - \violin - } -\layout{ragged-right=##t} -} -@end lilypond - -These variables are obviously useful for saving -typing. But they're worth considering even if you -only use them once -- they reduce complexity. Let's -look at the previous example without any -variables. It's a lot harder to read, especially -the last line. - -@example -violin = \relative c'' @{ - \repeat volta 2 @{ - c4._\markup@{ \italic \bold dolce @} b8 a8 g a b | - \once \override TextScript #'padding = #5.0 - c4.^"hi there!" d8 e' f g d | - c,4.\markup@{ \dynamic f \italic \small @{ 2nd @} - \hspace #0.1 \dynamic p @} b8 c4 c-. | - @} -@} -@end example - -@c TODO Replace the following with a better example -td -@c Skylining handles this correctly without padText - -So far we've seen static substitution -- when LilyPond -sees @code{\padText}, it replaces it with the stuff that -we've defined it to be (ie the stuff to the right of -@code{padtext=}). - -LilyPond can handle non-static substitution, too (you -can think of these as functions). - -@lilypond[quote,verbatim,ragged-right] -padText = -#(define-music-function (parser location padding) (number?) - #{ - \once \override TextScript #'padding = #$padding - #}) - -\relative c''' { - c4^"piu mosso" b a b - \padText #1.8 - c4^"piu mosso" d e f - \padText #2.6 - c4^"piu mosso" fis a g -} -@end lilypond - -Using variables is also a good way to reduce work if the -LilyPond input syntax changes (see @ref{Updating old input files}). If -you have a single definition (such as @code{\dolce}) for all your -input files (see @ref{Style sheets}), then if the syntax changes, you -only need to update your single @code{\dolce} definition, -instead of making changes throughout every @code{.ly} file. - - -@node Style sheets -@subsection Style sheets - -The output that LilyPond produces can be heavily modified; see -@ref{Tweaking output}, for details. But what if you have many -input files that you want to apply your tweaks to? Or what if you -simply want to separate your tweaks from the actual music? This -is quite easy to do. - -Let's look at an example. Don't worry if you don't understand -the parts with all the @code{#()}. This is explained in -@ref{Advanced tweaks with Scheme}. - -@lilypond[quote,verbatim,ragged-right] -mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0) - #:line(#:dynamic "mp" #:text #:italic "dolce" ))) - -inst = #(define-music-function (parser location string) (string?) - (make-music - 'TextScriptEvent - 'direction UP - 'text (markup #:bold (#:box string)))) - -\relative c'' { - \tempo 4=50 - a4.\mpdolce d8 cis4--\glissando a | b4 bes a2 - \inst "Clarinet" - cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2 -} -@end lilypond - -There are some problems with overlapping output; we'll fix those using -the techniques in @ref{Moving objects}. But let's also -do something about the @code{mpdolce} and @code{inst} -definitions. They produce the output we desire, but we might want -to use them in another piece. We could simply copy-and-paste them -at the top of every file, but that's an annoyance. It also leaves -those definitions in our input files, and I personally find all -the @code{#()} somewhat ugly. Let's hide them in another file: - -@example -%%% save this to a file called "definitions.ily" -mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0) - #:line(#:dynamic "mp" #:text #:italic "dolce" ))) - -inst = #(define-music-function (parser location string) (string?) - (make-music - 'TextScriptEvent - 'direction UP - 'text (markup #:bold (#:box string)))) -@end example - -We will refer to this file using the @code{\include} command near -the top of the music file. (The extension @code{.ily} is used to -distinguish this included file, which is not meant to be compiled -on its own, from the main file.) -Now let's modify our music (let's save this file as @file{"music.ly"}). - -@c We have to do this awkward example/lilypond-non-verbatim -@c because we can't do the \include stuff in the manual. - -@example -\include "definitions.ily" - -\relative c'' @{ - \tempo 4=50 - a4.\mpdolce d8 cis4--\glissando a | b4 bes a2 - \inst "Clarinet" - cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2 -@} -@end example - -@lilypond[quote,ragged-right] -mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0) - #:line(#:dynamic "mp" #:text #:italic "dolce" ))) - -inst = #(define-music-function (parser location string) (string?) - (make-music - 'TextScriptEvent - 'direction UP - 'text (markup #:bold (#:box string)))) - -\relative c'' { - \tempo 4=50 - a4.\mpdolce d8 cis4--\glissando a | b4 bes a2 - \inst "Clarinet" - cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2 -} -@end lilypond - -That looks better, but let's make a few changes. The glissando is hard -to see, so let's make it thicker and closer to the note heads. Let's -put the metronome marking above the clef, instead of over the first -note. And finally, my composition professor hates @q{C} time signatures, -so we'd better make that @q{4/4} instead. - -Don't change @file{music.ly}, though. Replace our @file{definitions.ily} -with this: - -@example -%%% definitions.ily -mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0) - #:line( #:dynamic "mp" #:text #:italic "dolce" ))) - -inst = #(define-music-function (parser location string) (string?) - (make-music - 'TextScriptEvent - 'direction UP - 'text (markup #:bold (#:box string)))) - -\layout@{ - \context @{ \Score - \override MetronomeMark #'extra-offset = #'(-9 . 0) - \override MetronomeMark #'padding = #'3 - @} - \context @{ \Staff - \override TimeSignature #'style = #'numbered - @} - \context @{ \Voice - \override Glissando #'thickness = #3 - \override Glissando #'gap = #0.1 - @} -@} -@end example - -@lilypond[quote,ragged-right] -mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0) - #:line( #:dynamic "mp" #:text #:italic "dolce" ))) - -inst = #(define-music-function (parser location string) (string?) - (make-music - 'TextScriptEvent - 'direction UP - 'text (markup #:bold (#:box string)))) - -\layout{ - \context { \Score - \override MetronomeMark #'extra-offset = #'(-9 . 0) - \override MetronomeMark #'padding = #'3 - } - \context { \Staff - \override TimeSignature #'style = #'numbered - } - \context { \Voice - \override Glissando #'thickness = #3 - \override Glissando #'gap = #0.1 - } -} - -\relative c'' { - \tempo 4=50 - a4.\mpdolce d8 cis4--\glissando a | b4 bes a2 - \inst "Clarinet" - cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2 -} -@end lilypond - -That looks nicer! But now suppose that I want to publish this -piece. My composition professor doesn't like @q{C} time -signatures, but I'm somewhat fond of them. Let's copy the -current @file{definitions.ily} to @file{web-publish.ily} and -modify that. Since this music is aimed at producing a pdf which -will be displayed on the screen, we'll also increase the -overall size of the output. - -@example -%%% definitions.ily -mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0) - #:line( #:dynamic "mp" #:text #:italic "dolce" ))) - -inst = #(define-music-function (parser location string) (string?) - (make-music - 'TextScriptEvent - 'direction UP - 'text (markup #:bold (#:box string)))) - -#(set-global-staff-size 23) -\layout@{ - \context @{ \Score - \override MetronomeMark #'extra-offset = #'(-9 . 0) - \override MetronomeMark #'padding = #'3 - @} - \context @{ \Staff - @} - \context @{ \Voice - \override Glissando #'thickness = #3 - \override Glissando #'gap = #0.1 - @} -@} -@end example - -@lilypond[quote,ragged-right] -mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0) - #:line( #:dynamic "mp" #:text #:italic "dolce" ))) - -inst = #(define-music-function (parser location string) (string?) - (make-music - 'TextScriptEvent - 'direction UP - 'text (markup #:bold (#:box string)))) - -#(set-global-staff-size 23) -\layout{ - \context { \Score - \override MetronomeMark #'extra-offset = #'(-9 . 0) - \override MetronomeMark #'padding = #'3 - } - \context { \Voice - \override Glissando #'thickness = #3 - \override Glissando #'gap = #0.1 - } -} - -\relative c'' { - \tempo 4=50 - a4.\mpdolce d8 cis4--\glissando a | b4 bes a2 - \inst "Clarinet" - cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2 -} -@end lilypond - -Now in our music, I simply replace -@code{\include "definitions.ily"} with -@code{\include "web-publish.ily"}. Of course, we could make this -even more convenient. We could make a @file{definitions.ily} file which -contains only the definitions of @code{mpdolce} and @code{inst}, a -@file{web-publish.ily} file which contains only the @code{\layout} -section listed above, and a @file{university.ily} file which -contains only the tweaks to produce the output that my professor -prefers. The top of @file{music.ly} would then look like this: - -@example -\include "definitions.ily" - -%%% Only uncomment one of these two lines! -\include "web-publish.ily" -%\include "university.ily" -@end example - -This approach can be useful even if you are only producing -one set of parts. I use half a dozen different -@q{style sheet} files for my projects. I begin every music -file with @code{\include "../global.ily"}, which contains - -@example -%%% global.ily -\version @w{"@version{}"} -#(ly:set-option 'point-and-click #f) -\include "../init/init-defs.ly" -\include "../init/init-layout.ly" -\include "../init/init-headers.ly" -\include "../init/init-paper.ly" -@end example - - -@node When things don't work -@section When things don't work - -@menu -* Updating old input files:: -* Troubleshooting (taking it all apart):: -* Minimal examples:: -@end menu - -@node Updating old input files -@subsection Updating old input files - -The LilyPond input syntax occasionally changes. As LilyPond itself -improves, the syntax (input language) is modified accordingly. Sometimes -these changes are made to make the input easier to read and write or -sometimes the changes are made to accommodate new features of LilyPond. - -LilyPond comes with a file that makes this updating easier: -@code{convert-ly}. For details about how to run this program, see -@rprogram{Updating files with convert-ly}. - -Unfortunately, @code{convert-ly} cannot handle all input changes. It -takes care of simple search-and-replace changes (such as @code{raggedright} -becoming @code{ragged-right}), but some changes are too -complicated. The syntax changes that @code{convert-ly} cannot handle -are listed in @rprogram{Updating files with convert-ly}. - -For example, in LilyPond 2.4 and earlier, accents and non-English -letters were entered using LaTeX -- for example, -@code{No\"el} (this would print the French word for -@q{Christmas}). In LilyPond 2.6 and above, the special -@code{ë} must be entered directly into the LilyPond file as an -UTF-8 character. @code{convert-ly} cannot change all the LaTeX -special characters into UTF-8 characters; you must manually update -your old LilyPond input files. - - -@node Troubleshooting (taking it all apart) -@subsection Troubleshooting (taking it all apart) - -Sooner or later, you will write a file that LilyPond cannot -compile. The messages that LilyPond gives may help -you find the error, but in many cases you need to do some -investigation to determine the source of the problem. - -The most powerful tools for this purpose are the -single line comment (indicated by @code{%}) and the block -comment (indicated by @code{%@{ ... %@}}). If you don't -know where a problem is, start commenting out huge portions -of your input file. After you comment out a section, try -compiling the file again. If it works, then the problem -must exist in the portion you just commented. If it doesn't -work, then keep on commenting out material until you have -something that works. - -In an extreme case, you might end up with only - -@example -\score @{ - << - % \melody - % \harmony - % \bass - >> - \layout@{@} -@} -@end example - -@noindent -(in other words, a file without any music) - -If that happens, don't give up. Uncomment a bit -- say, -the bass part -- and see if it works. If it doesn't work, -then comment out all of the bass music (but leave -@code{\bass} in the @code{\score} uncommented. - -@example -bass = \relative c' @{ -%@{ - c4 c c c - d d d d -%@} -@} -@end example - -Now start slowly uncommenting more and more of the -@code{bass} part until you find the problem line. - -Another very useful debugging technique is constructing -@ref{Minimal examples}. - - -@node Minimal examples -@subsection Minimal examples - -A minimal example is an example which is as small as possible. These -examples are much easier to understand than long examples. Minimal -examples are used for - -@itemize -@item Bug reports -@item Sending a help request to mailing lists -@item Adding an example to the @uref{http://lsr.dsi.unimi.it/, -LilyPond Snippet Repository} -@end itemize - -To construct an example which is as small as possible, the rule is -quite simple: remove anything which is not necessary. When trying to -remove unnecessary parts of a file, it is a very good idea to comment -out lines instead of deleting them. That way, if you discover that you -actually @emph{do} need some lines, you can uncomment them, instead of -typing them in from scratch. - -There are two exceptions to the @qq{as small as possible} rule: - -@itemize -@item Include the @code{\version} number. -@item If possible, use @code{\paper@{ ragged-right=##t @}} at the -top of your example. -@end itemize - -The whole point of a minimal example is to make it easy to read: - -@itemize -@item Avoid using complicated notes, keys, or time signatures, unless you -wish to demonstrate something is about the behavior of those items. -@item Do not use @code{\override} commands unless that is the point of the -example. -@end itemize - - - -@node Scores and parts -@section Scores and parts - -TODO: this is really old stuff from the really old tutorial. -Rewrite, fix, etc. Or maybe delete entirely. -gp -Include section on tags -td -and then move to section 5. Working ... -td - -In orchestral music, all notes are printed twice. Once in a part for -the musicians, and once in a full score for the conductor. Variables can -be used to avoid double work. The music is entered once, and stored in -a variable. The contents of that variable is then used to generate -both the part and the full score. - -It is convenient to define the notes in a special file. For example, -suppose that the file @file{horn-music.ly} contains the following part -of a horn/@/bassoon duo - -@example -hornNotes = \relative c @{ - \time 2/4 - r4 f8 a cis4 f e d -@} -@end example - -@noindent -Then, an individual part is made by putting the following in a file - -@example -\include "horn-music.ly" -\header @{ - instrument = "Horn in F" -@} - -@{ - \transpose f c' \hornNotes -@} -@end example - -The line - -@example -\include "horn-music.ly" -@end example - -@noindent -substitutes the contents of @file{horn-music.ly} at this position in -the file, so @code{hornNotes} is defined afterwards. The command -@code{\transpose f@tie{}c'} indicates that the argument, being -@code{\hornNotes}, should be transposed by a fifth upwards. Sounding -@code{f} is denoted by notated @code{c'}, which corresponds with the -tuning of a normal French Horn in@tie{}F. The transposition can be seen -in the following output - -@lilypond[quote,ragged-right] -\transpose f c' \relative c { - \time 2/4 - r4 f8 a cis4 f e d -} -@end lilypond - -In ensemble pieces, one of the voices often does not play for many -measures. This is denoted by a special rest, the multi-measure -rest. It is entered with a capital @code{R} followed by a duration -(@code{1}@tie{}for a whole note, @code{2}@tie{}for a half note, -etc.). By multiplying the -duration, longer rests can be constructed. For example, this rest -takes 3@tie{}measures in 2/4 time - -@example -R2*3 -@end example - -When printing the part, multi-rests -must be condensed. This is done by setting a run-time variable - -@example -\set Score.skipBars = ##t -@end example - -@noindent -This command sets the property @code{skipBars} in the -@code{Score} context to true (@code{##t}). Prepending the rest and -this option to the music above, leads to the following result - -@lilypond[quote,ragged-right] -\transpose f c' \relative c { - \time 2/4 - \set Score.skipBars = ##t - R2*3 - r4 f8 a cis4 f e d -} -@end lilypond - - -The score is made by combining all of the music together. Assuming -that the other voice is in @code{bassoonNotes} in the file -@file{bassoon-music.ly}, a score is made with - -@example -\include "bassoon-music.ly" -\include "horn-music.ly" - -<< - \new Staff \hornNotes - \new Staff \bassoonNotes ->> -@end example - -@noindent -leading to - -@lilypond[quote,ragged-right] -\relative c << - \new Staff { - \time 2/4 R2*3 - r4 f8 a cis4 f e d - } - \new Staff { - \clef bass - r4 d,8 f | gis4 c | b bes | - a8 e f4 | g d | gis f - } ->> -@end lilypond - - - -@node Make and Makefiles -@section Make and Makefiles - -@cindex makefiles -@cindex make - -Pretty well all the platforms Lilypond can run on support a software -facility called @code{make}. This software reads a special file called a -@code{Makefile} that defines what files depend on what others and what -commands you need to give the operating system to produce one file from -another. For example the makefile would spell out how to produce -@code{ballad.pdf} and @code{ballad.midi} from @code{ballad.ly} by -running Lilypond. - -There are times when it is a good idea to create a @code{Makefile} -for your project, either for your own convenience or -as a courtesy to others who might have access to your source files. -This is true for very large projects with many included files and -different output options (e.g. full score, parts, conductor's -score, piano reduction, etc.), or for projects that -require difficult commands to build them (such as -@code{lilypond-book} projects). Makefiles vary greatly in -complexity and flexibility, according to the needs and skills of -the authors. The program GNU Make comes installed on GNU/Linux -distributions and on MacOS X, and it is also available for Windows. - -See the @strong{GNU Make Manual} for full details on using -@code{make}, as what follows here gives only a glimpse of what it -can do. - -The commands to define rules in a makefile differ -according to platform; for instance the various forms of Linux and -MacOS use @code{bash}, while Windows uses @code{cmd}. Note that on -MacOS X, you need to configure the system to use the command-line -intepreter. Here are some example makefiles, with versions for both -Linux/MacOS and Windows. - -The first example is for an orchestral work in four -movements with a directory structure as follows: - -@example -Symphony/ -|-- MIDI/ -|-- Makefile -|-- Notes/ -| |-- cello.ily -| |-- figures.ily -| |-- horn.ily -| |-- oboe.ily -| |-- trioString.ily -| |-- viola.ily -| |-- violinOne.ily -| `-- violinTwo.ily -|-- PDF/ -|-- Parts/ -| |-- symphony-cello.ly -| |-- symphony-horn.ly -| |-- symphony-oboes.ly -| |-- symphony-viola.ly -| |-- symphony-violinOne.ly -| `-- symphony-violinTwo.ly -|-- Scores/ -| |-- symphony.ly -| |-- symphonyI.ly -| |-- symphonyII.ly -| |-- symphonyIII.ly -| `-- symphonyIV.ly -`-- symphonyDefs.ily -@end example - -The @code{.ly} files in the @code{Scores} and -@code{Parts} directories get their notes from @code{.ily} -files in the @code{Notes} directory: - -@example -%%% top of file "symphony-cello.ly" -\include ../definitions.ily -\include ../Notes/cello.ily -@end example - -The makefile will have targets of @code{score} (entire piece in -full score), @code{movements} (individual movements in full score), -and @code{parts} (individual parts for performers). There -is also a target @code{archive} that will create a tarball of -the source files, suitable for sharing via web or email. Here is -the makefile for GNU/Linux or MacOS X. It should be saved with the -name @code{Makefile} in the top directory of the project: - -@warning{When a target or pattern rule is defined, the -subsequent lines must begin with tabs, not spaces.} - -@example -# the name stem of the output files -piece = symphony -# determine how many processors are present -CPU_CORES=`cat /proc/cpuinfo | grep -m1 "cpu cores" | sed s/".*: "//` -# The command to run lilypond -LILY_CMD = lilypond -ddelete-intermediate-files \ - -dno-point-and-click -djob-count=$(CPU_CORES) - -# The suffixes used in this Makefile. -.SUFFIXES: .ly .ily .pdf .midi - -# Input and output files are searched in the directories listed in -# the VPATH variable. All of them are subdirectories of the current -# directory (given by the GNU make variable `CURDIR'). -VPATH = \ - $(CURDIR)/Scores \ - $(CURDIR)/PDF \ - $(CURDIR)/Parts \ - $(CURDIR)/Notes - -# The pattern rule to create PDF and MIDI files from a LY input file. -# The .pdf output files are put into the `PDF' subdirectory, and the -# .midi files go into the `MIDI' subdirectory. -%.pdf %.midi: %.ly - $(LILY_CMD) $<; \ # this line begins with a tab - if test -f "$*.pdf"; then \ - mv "$*.pdf" PDF/; \ - fi; \ - if test -f "$*.midi"; then \ - mv "$*.midi" MIDI/; \ - fi - -notes = \ - cello.ily \ - horn.ily \ - oboe.ily \ - viola.ily \ - violinOne.ily \ - violinTwo.ily - -# The dependencies of the movements. -$(piece)I.pdf: $(piece)I.ly $(notes) -$(piece)II.pdf: $(piece)II.ly $(notes) -$(piece)III.pdf: $(piece)III.ly $(notes) -$(piece)IV.pdf: $(piece)IV.ly $(notes) - -# The dependencies of the full score. -$(piece).pdf: $(piece).ly $(notes) - -# The dependencies of the parts. -$(piece)-cello.pdf: $(piece)-cello.ly cello.ily -$(piece)-horn.pdf: $(piece)-horn.ly horn.ily -$(piece)-oboes.pdf: $(piece)-oboes.ly oboe.ily -$(piece)-viola.pdf: $(piece)-viola.ly viola.ily -$(piece)-violinOne.pdf: $(piece)-violinOne.ly violinOne.ily -$(piece)-violinTwo.pdf: $(piece)-violinTwo.ly violinTwo.ily - -# Type `make score' to generate the full score of all four -# movements as one file. -.PHONY: score -score: $(piece).pdf - -# Type `make parts' to generate all parts. -# Type `make foo.pdf' to generate the part for instrument `foo'. -# Example: `make symphony-cello.pdf'. -.PHONY: parts -parts: $(piece)-cello.pdf \ - $(piece)-violinOne.pdf \ - $(piece)-violinTwo.pdf \ - $(piece)-viola.pdf \ - $(piece)-oboes.pdf \ - $(piece)-horn.pdf - -# Type `make movements' to generate files for the -# four movements separately. -.PHONY: movements -movements: $(piece)I.pdf \ - $(piece)II.pdf \ - $(piece)III.pdf \ - $(piece)IV.pdf - -all: score parts movements - -archive: - tar -cvvf stamitz.tar \ # this line begins with a tab - --exclude=*pdf --exclude=*~ \ - --exclude=*midi --exclude=*.tar \ - ../Stamitz/* -@end example - - -There are special complications on the Windows platform. After -downloading and installing GNU Make for Windows, you must set the -correct path in the system's environment variables so that the -DOS shell can find the Make program. To do this, right-click on -"My Computer," then choose @code{Properties} and -@code{Advanced}. Click @code{Environment Variables}, and then -in the @code{System Variables} pane, highlight @code{Path}, click -@code{edit}, and add the path to the GNU Make executable file, which - will look something like this: - -@example -C:\Program Files\GnuWin32\bin -@end example - -The makefile itself has to be altered to handle different shell -commands and to deal with spaces that are present -in some default system directories. The @code{archive} target -is eliminated since Windows does not have the @code{tar} command, -and Windows also has a different default extension for midi files. - - -@example -## WINDOWS VERSION -## -piece = symphony -LILY_CMD = lilypond -ddelete-intermediate-files \ - -dno-point-and-click \ - -djob-count=$(NUMBER_OF_PROCESSORS) - -#get the 8.3 name of CURDIR (workaround for spaces in PATH) -workdir = $(shell for /f "tokens=*" %%b in ("$(CURDIR)") \ - do @@echo %%~sb) - -.SUFFIXES: .ly .ily .pdf .mid - -VPATH = \ - $(workdir)/Scores \ - $(workdir)/PDF \ - $(workdir)/Parts \ - $(workdir)/Notes - -%.pdf %.mid: %.ly - $(LILY_CMD) $< # this line begins with a tab - if exist "$*.pdf" move /Y "$*.pdf" PDF/ # begin with tab - if exist "$*.mid" move /Y "$*.mid" MIDI/ # begin with tab - -notes = \ - cello.ily \ - figures.ily \ - horn.ily \ - oboe.ily \ - trioString.ily \ - viola.ily \ - violinOne.ily \ - violinTwo.ily - -$(piece)I.pdf: $(piece)I.ly $(notes) -$(piece)II.pdf: $(piece)II.ly $(notes) -$(piece)III.pdf: $(piece)III.ly $(notes) -$(piece)IV.pdf: $(piece)IV.ly $(notes) - -$(piece).pdf: $(piece).ly $(notes) - -$(piece)-cello.pdf: $(piece)-cello.ly cello.ily -$(piece)-horn.pdf: $(piece)-horn.ly horn.ily -$(piece)-oboes.pdf: $(piece)-oboes.ly oboe.ily -$(piece)-viola.pdf: $(piece)-viola.ly viola.ily -$(piece)-violinOne.pdf: $(piece)-violinOne.ly violinOne.ily -$(piece)-violinTwo.pdf: $(piece)-violinTwo.ly violinTwo.ily - -.PHONY: score -score: $(piece).pdf - -.PHONY: parts -parts: $(piece)-cello.pdf \ - $(piece)-violinOne.pdf \ - $(piece)-violinTwo.pdf \ - $(piece)-viola.pdf \ - $(piece)-oboes.pdf \ - $(piece)-horn.pdf - -.PHONY: movements -movements: $(piece)I.pdf \ - $(piece)II.pdf \ - $(piece)III.pdf \ - $(piece)IV.pdf - -all: score parts movements -@end example - - -The next Makefile is for a @command{lilypond-book} document done in -LaTeX. This project has an index, which requires that the -@command{latex} command be run twice to update links. Output files are -all stored in the @code{out} directory for .pdf output and in the -@code{htmlout} directory for the html output. - -@example -SHELL=/bin/sh -FILE=myproject -OUTDIR=out -WEBDIR=htmlout -VIEWER=acroread -BROWSER=firefox -LILYBOOK_PDF=lilypond-book --output=$(OUTDIR) --pdf $(FILE).lytex -LILYBOOK_HTML=lilypond-book --output=$(WEBDIR) $(FILE).lytex -PDF=cd $(OUTDIR) && pdflatex $(FILE) -HTML=cd $(WEBDIR) && latex2html $(FILE) -INDEX=cd $(OUTDIR) && makeindex $(FILE) -PREVIEW=$(VIEWER) $(OUTDIR)/$(FILE).pdf & - -all: pdf web keep - -pdf: - $(LILYBOOK_PDF) # begin with tab - $(PDF) # begin with tab - $(INDEX) # begin with tab - $(PDF) # begin with tab - $(PREVIEW) # begin with tab - -web: - $(LILYBOOK_HTML) # begin with tab - $(HTML) # begin with tab - cp -R $(WEBDIR)/$(FILE)/ ./ # begin with tab - $(BROWSER) $(FILE)/$(FILE).html & # begin with tab - -keep: pdf - cp $(OUTDIR)/$(FILE).pdf $(FILE).pdf # begin with tab - -clean: - rm -rf $(OUTDIR) # begin with tab - -web-clean: - rm -rf $(WEBDIR) # begin with tab - -archive: - tar -cvvf myproject.tar \ # begin this line with tab - --exclude=out/* \ - --exclude=htmlout/* \ - --exclude=myproject/* \ - --exclude=*midi \ - --exclude=*pdf \ - --exclude=*~ \ - ../MyProject/* -@end example - -TODO: make this thing work on Windows - -The previous makefile does not work on Windows. An alternative -for Windows users would be to create a simple batch file -containing the build commands. This will not -keep track of dependencies the way a makefile does, but it at -least reduces the build process to a single command. Save the -following code as @command{build.bat} or @command{build.cmd}. -The batch file can be run at the DOS prompt or by simply -double-clicking its icon. - -@example -lilypond-book --output=out --pdf myproject.lytex -cd out -pdflatex myproject -makeindex myproject -pdflatex myproject -cd .. -copy out\myproject.pdf MyProject.pdf -@end example - - -@seealso -Application Usage: -@rprogram{Setup for MacOS X}, -@rprogram{Command-line usage}, -@rprogram{LilyPond-book} diff --git a/Documentation/user/world.itely b/Documentation/user/world.itely deleted file mode 100644 index 8550f4b291..0000000000 --- a/Documentation/user/world.itely +++ /dev/null @@ -1,384 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node World music -@section World music - -The purpose of this section is to highlight musical notation issues -that are relevant to traditions outside the Western tradition. - -@menu -* Arabic music:: -@end menu - -@node Arabic music -@subsection Arabic music - -This section highlights issues that are relevant to notating Arabic -music. - -@menu -* References for Arabic music:: -* Arabic note names :: -* Arabic key signatures:: -* Arabic time signatures:: -* Arabic music example:: -* Further reading:: -@end menu - - -@node References for Arabic music -@unnumberedsubsubsec References for Arabic music - -@cindex Arabic music -@cindex medium intervals -@cindex maqam -@cindex maqams - -Arabic music so far has been mainly an oral tradition. When music -is transcribed, it is usually in a sketch format, on which -performers are expected to improvise significantly. Increasingly, -Western notation, with a few variations, is adopted in order to -communicate and preserve Arabic music. - -Some elements of Western musical notation such as the -transcription of chords or independent parts, are not required to -typeset the more traditional Arabic pieces. There are however -some different issues, such as the need to indicate medium -intervals that are somewhere between a semi-tone and a tone, in -addition to the minor and major intervals that are used in Western -music. There is also the need to group and indicate a large -number of different maqams (modes) that are part of Arabic music. - -In general, Arabic music notation does not attempt to precisely -indicate microtonal elements that are present in musical practice. - -Several issues that are relevant to Arabic music are covered -elsewhere: - -@itemize -@item Note names and accidentals (including quarter tones) can be -tailored as discussed in @ref{Note names in other languages}. - -@item Additional key signatures can also be tailored as described -in @ref{Key signature}. - -@item Complex time signatures may require that notes be grouped -manually as described in @ref{Manual beams}. - -@item @notation{Takasim} which are rhythmically free -improvisations may be written down omitting bar lines as -described in @ref{Unmetered music}. - -@end itemize - - -@seealso -Notation Reference: -@ref{Note names in other languages}, -@ref{Key signature}, -@ref{Manual beams}. - -Snippets: -@rlsr{World music}. - - -@node Arabic note names -@unnumberedsubsubsec Arabic note names - - -@cindex Arabic note names - -The more traditional Arabic note names can be quite long and are -not suitable for the purpose of music writing, so they are not -used. English note names are not very familiar in Arabic music -education, so Italian or Solfege note names (@code{do, re, mi, fa, -sol, la, si}) are used instead. Modifiers (accidentals) can also -be used, as discussed in @ref{Note names in other languages}. - -For example, this is how the Arabic @notation{rast} scale can be -notated: - -@lilypond[quote,verbatim] -\include "arabic.ly" -\relative do' { - do re misb fa sol la sisb do sisb la sol fa misb re do -} -@end lilypond - - -@cindex Arabic semi-flat symbol -@cindex Semi-flat symbol appearance - -The symbol for semi-flat does not match the symbol which is used -in Arabic notation. The @code{\dwn} symbol defined in -@code{arabic.ly} may be used preceding a flat symbol as a work -around if it is important to use the specific Arabic semi-flat -symbol. The appearance of the semi-flat symbol in the key -signature cannot be altered by using this method. - - -@lilypond[quote,verbatim] -\include "arabic.ly" -\relative do' { - \set Staff.extraNatural = ##f - dod dob dosd \dwn dob dobsb dodsd do do -} -@end lilypond - - -@seealso -Notation Reference: -@ref{Note names in other languages}. - -Snippets: -@rlsr{World music}. - - -@node Arabic key signatures -@unnumberedsubsubsec Arabic key signatures - -@cindex Arabic key signatures - -In addition to the minor and major key signatures, the following -key signatures are defined in @code{arabic.ly}: @notation{bayati}, -@notation{rast}, @notation{sikah}, @notation{iraq}, and -@notation{kurd}. These key signatures define a small number of -maqam groups rather than the large number of maqams that are in -common use. - -In general, a maqam uses the key signature of its group, or a -neighbouring group, and varying accidentals are marked throughout -the music. - -For example to indicate the key signature of a maqam muhayer piece: - -@example -\key re \bayati -@end example - -Here @var{re} is the default pitch of the muhayer maqam, and -@var{bayati} is the name of the base maqam in the group. - -While the key signature indicates the group, it is common for the -title to indicate the more specific maqam, so in this example, the -name of maqam muhayer should appear in the title. - -Other maqams in the same bayati group, as shown in the table below: -(bayati, hussaini, saba, and ushaq) can be indicated in the same -way. These are all variations of the base and most common maqam -in the group, which is bayati. They usually differ from the base -maqam in their upper tetrachords, or certain flow details that -don't change their fundamental nature, as siblings. - -The other maqam in the same group (Nawa) is related to bayati by -modulation which is indicated in the table in parenthesis for -those maqams that are modulations of their base maqam. Arabic -maqams admit of only limited modulations, due to the nature of -Arabic musical instruments. Nawa can be indicated as follows: - -@example -\key sol \bayati -@end example - -In Arabic music, the same term such as bayati that is used to -indicate a maqam group, is also a maqam which is usually the most -important in the group, and can also be thought of as a base -maqam. - -Here is one suggested grouping that maps the more common maqams to -key signatures: - -@multitable @columnfractions 0.1 0.1 0.1 0.6 -@headitem maqam group - @tab key - @tab finalis - @tab Other maqmas in group (finalis) -@item ajam - @tab major - @tab sib - @tab jaharka (fa) -@item bayati - @tab bayati - @tab re - @tab hussaini, muhayer, saba, ushaq, nawa (sol) -@item hijaz - @tab kurd - @tab re - @tab shahnaz, shad arban (sol), hijazkar (do) -@item iraq - @tab iraq - @tab sisb - @tab - -@item kurd - @tab kurd - @tab re - @tab hijazkar kurd (do) -@item nahawand - @tab minor - @tab do - @tab busalik (re), farah faza (sol) -@item nakriz - @tab minor - @tab do - @tab nawa athar, hisar (re) -@item rast - @tab rast - @tab do - @tab mahur, yakah (sol) -@item sikah - @tab sikah - @tab misb - @tab huzam -@end multitable - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{non-traditional-key-signatures.ly} - - -@seealso -Notation Reference: -@ref{Key signature}. - -Learning Manual: -@rlearning{Accidentals and key signatures}. - -Internals Reference: -@rinternals{KeySignature}. - -Snippets: -@rlsr{World music}, -@rlsr{Pitches}. - - -@node Arabic time signatures -@unnumberedsubsubsec Arabic time signatures - -@cindex Arabic time signatures -@cindex Semai form -@cindex taqasim - -Some Arabic and Turkish music classical forms such as -@notation{Semai} use unusual time signatures such as 10/8. This -may lead to an automatic grouping of notes that is quite different -from existing typeset music, where notes may not be grouped on the -beat, but in a manner that is difficult to match by adjusting -automatic beaming. You can override this by switching off -automatic beaming and beaming the notes manually. Where matching -existing typeset music is not an issue, you may still want to -adjust the beaming behaviour and/or use compound time signatures. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{compound-time-signatures.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{arabic-improvisation.ly} - - -@seealso -Notation Reference: -@ref{Manual beams}, -@ref{Automatic beams}, -@ref{Unmetered music}, -@ref{Automatic accidentals}, -@ref{Setting automatic beam behavior}, -@ref{Time signature}. - -Snippets: -@rlsr{World music}. - - -@node Arabic music example -@unnumberedsubsubsec Arabic music example - -@cindex Arabic music example -@cindex Arabic music template -@cindex Template Arabic music - -Here is a template that also uses the start of a Turkish Semai -that is familiar in Arabic music education in order to illustrate -some of the peculiarities of Arabic music notation, such as medium -intervals and unusual modes that are discussed in this section. - -@lilypond[quote,verbatim] -\include "arabic.ly" -\score { - \relative re' { - \set Staff.extraNatural = ##f - \set Staff.autoBeaming = ##f - \key re \bayati - \time 10/8 - - re4 re'8 re16 [misb re do] sisb [la sisb do] re4 r8 - re16 [misb do re] sisb [do] la [sisb sol8] la [sisb] do [re] misb - fa4 fa16 [misb] misb8. [re16] re8 [misb] re [do] sisb - do4 sisb8 misb16 [re do sisb] la [do sisb la] la4 r8 - } - \header { - title = "Semai Muhayer" - composer = "Jamil Bek" - } -} -@end lilypond - - -@seealso -Snippets: -@rlsr{World music} - - -@node Further reading -@unnumberedsubsubsec Further reading - -@enumerate - -@item -The music of the Arabs by Habib Hassan Touma [Amadeus Press, 1996], -contains a discussion of maqams and their method of groupings. - -There are also various web sites that explain maqams and some -provide audio examples such as : - -@itemize @bullet -@item -@uref{http://www.maqamworld.com/} -@item -@uref{http://www.turath.org/} -@end itemize - -There are some variations in the details of how maqams are grouped, -despite agreement on the criteria of grouping maqams that are -related through common lower tetra chords, or through modulation. - -@item -There is not a complete consistency, sometimes even in the same -text on how key signatures for particular maqams should be -specified. It is common, however, to use a key signature per -group, rather than a different key signature for each different -maqam. - -Oud methods by the following authors, contain examples of -mainly Turkish and Arabic compositions. - -@itemize @bullet -@item -Charbel Rouhana -@item -George Farah -@item -Ibrahim Ali Darwish Al-masri -@end itemize -@end enumerate - - diff --git a/Documentation/web-texi2html.init b/Documentation/web-texi2html.init new file mode 100644 index 0000000000..67bbfbf566 --- /dev/null +++ b/Documentation/web-texi2html.init @@ -0,0 +1,1094 @@ +#!/usr/bin/env perl +# -*- coding: utf-8; -*- + +### texi2html customization script for LilyPond +### Author: Reinhold Kainhofer , 2008. +### Some code parts copied from texi2html and adapted. These functions +### were written mainly by Patrice Dumas +### License: GPLv2+ +### +### +### Features implemented here: +### -) For split manuals, the main page is index.html. +### -) All @unnumbered* sections are placed into the same file +### (implemented by split_at_numbered_sections) +### -) Use our custom CSS file, with IE-specific fixes in another CSS file, +### impelmented by lilypond_css_lines +### -) TOC (folded, with the current page highlighted) in an overflown

    +### is added to every page; implemented by: +### lilypond_print_element_header -- building of the TOC +### lilypond_toc_body -- generation of customized TOC output +### lilypond_print_page_head -- start
    +### print_lilypond_page_foot -- closing id=main, output of footer & TOC +### -) External refs are formatted only as "Text of the node" (not as >>see +### "NODE" section "SECTION" in "BOOK"<< like with default texi2html). Also, +### the leading "(book-name)" is removed. +### Implemented by overriding lilypond_external_ref +### -) Navigation bars on top/bottom of the page and between sections are not +### left-aligned, but use a combination of left/center/right aligned table +### cells; For this, I heavily extend the texi2html code to allow for +### differently aligned cells and for multi-line tables); +### Implemented in lilypond_print_navigation +### -) Different formatting than the default: example uses the same formatting +### as quote. +### -) Allow translated section titles: All section titles can be translated, +### the original (English) title is associated with @translationof. This is +### needed, because the file name / anchor is generated from the original +### English title, since otherwise language-autoselection would break with +### posted links. +### Since it is then no longer possible to obtain the file name from the +### section title, I keep a sectionname<=>filename/anchor around. This way, +### xrefs from other manuals can simply load that map and retrieve the +### correct file name for the link. Implemented in: +### lilypond_unknown (handling of @translationof, in case +### extract_texi_filenames.py messes up...) +### lilypond_element_file_name (correct file name: use the map) +### lilypond_element_target_name (correct anchor: use the map) +### lilypond_init_map (read in the externally created map from disk) +### lilypond_external_href (load the map for xrefs, use the correct +### link target) +### -) The HTML anchors for all sections are derived from the node name / +### section title (pre-generated in the .xref-map file). Implemented by: +### lilypond_element_target_name (adjust section anchors) +### -) Use the standard footnote format "nr text" instead of the +### ugly format of texi2html (

    (nr)

    text

    ). Implemented in +### makeinfo_like_foot_line_and_ref +### makeinfo_like_foot_lines +### makeinfo_like_paragraph +### +### +### Useful helper functions: +### -) texinfo_file_name($node_name): returns a texinfo-compatible file name +### for the given string $node_name (whitespace trimmed/replaced by -, +### non-standard chars replaced by _xxxx (ascii char code) and forced to +### start with a letter by prepending t_g if necessary) + + +package Texi2HTML::Config; + +############################################################################# +### TRANSLATIONS +############################################################################# + +use utf8; +my $LY_LANGUAGES = {}; +$LY_LANGUAGES->{'fr'} = { + 'Back to Documentation Index' => 'Retour à l\'accueil de la documentation', +}; +$LY_LANGUAGES->{'es'} = { + 'Back to Documentation Index' => 'Volver al índice de la documentación', +}; +$LY_LANGUAGES->{'de'} = { + 'Back to Documentation Index' => 'Zur Dokumentationsübersicht', +}; +$LY_LANGUAGES->{'ja'} = { + 'Back to Documentation Index' => 'ドキュメント インデックスに戻る', +}; + + +sub ly_get_string () { + my $lang = $Texi2HTML::THISDOC{current_lang}; + my $string = shift; + if ($lang and $lang ne "en" and $LY_LANGUAGES->{$lang}->{$string}) { + return $LY_LANGUAGES->{$lang}->{$string}; + } else { + return $string; + } +} + + +############################################################################# +### SETTINGS FOR TEXI2HTML +############################################################################# + +# Validation fix for texi2html<=1.82 +$Texi2HTML::Config::DOCTYPE = ''; + +@Texi2HTML::Config::CSS_REFS = ( + {FILENAME => "lilypond-web.css", TITLE => "Default style"}, + {FILENAME => "lilypond-web-alt1.css", TITLE => "Alternate style 1"}, + {FILENAME => "lilypond-web-alt2.css", TITLE => "Alternate style 2"}, + ); + +# GOP tweak: We don't have alternate stylesheets right now +#@Texi2HTML::Config::ALT_CSS_REFS = ( +# {FILENAME => "lilypond.css", TITLE => "Andrew Hawryluk's design" }, +# {FILENAME => "lilypond-blue.css", TITLE => "Kurt Kroon's blue design" }, +#); + +$Texi2HTML::Config::USE_ACCESSKEY = 1; +$Texi2HTML::Config::USE_LINKS = 1; +$Texi2HTML::Config::USE_REL_REV = 1; +$Texi2HTML::Config::SPLIT_INDEX = 0; +$Texi2HTML::Config::SEPARATED_FOOTNOTES = 0; # Print footnotes on same page, not separated +# FIXME: remove for GOP +#if ($Texi2HTML::Config::SPLIT eq 'section') { +# $Texi2HTML::Config::element_file_name = \&lilypond_element_file_name; +#} + +## GOP tweak: +# FIXME: creates duplicate anchors, which causes Opera to barf; +# should be fixed in lilypond-texi2html.init too +# $Texi2HTML::Config::element_target_name = \&lilypond_element_target_name; +$default_print_element_header = $Texi2HTML::Config::print_element_header; +$Texi2HTML::Config::print_element_header = \&lilypond_print_element_header; +$Texi2HTML::Config::print_page_foot = \&print_lilypond_page_foot; +$Texi2HTML::Config::print_navigation = \&lilypond_print_navigation; +$Texi2HTML::Config::external_ref = \&lilypond_external_ref; +$default_external_href = $Texi2HTML::Config::external_href; +$Texi2HTML::Config::external_href = \&lilypond_external_href; +$default_toc_body = $Texi2HTML::Config::toc_body; +$Texi2HTML::Config::toc_body = \&lilypond_toc_body; +$Texi2HTML::Config::css_lines = \&lilypond_css_lines; +$default_unknown = $Texi2HTML::Config::unknown; +$Texi2HTML::Config::unknown = \&lilypond_unknown; +$default_print_page_head = $Texi2HTML::Config::print_page_head; +$Texi2HTML::Config::print_page_head = \&lilypond_print_page_head; +# $Texi2HTML::Config::foot_line_and_ref = \&lilypond_foot_line_and_ref; +$Texi2HTML::Config::foot_line_and_ref = \&makeinfo_like_foot_line_and_ref; +$Texi2HTML::Config::foot_lines = \&makeinfo_like_foot_lines; +$Texi2HTML::Config::paragraph = \&makeinfo_like_paragraph; + + + +# Examples should be formatted similar to quotes: +$Texi2HTML::Config::complex_format_map->{'example'} = { + 'begin' => q{"
    "}, + 'end' => q{"
    \n"}, + 'style' => 'code', + }; + +%Texi2HTML::config::misc_pages_targets = ( + 'Overview' => 'Overview', + 'Contents' => 'Contents', + 'About' => 'About' +); + + +my @section_to_filename; + + + + +############################################################################# +### DEBUGGING +############################################################################# + +use Data::Dumper; +$Data::Dumper::Maxdepth = 2; + +sub print_element_info($) +{ + my $element = shift; + print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"; + print "Element: $element\n"; + print Dumper($element); +} + + + + + +############################################################################# +### HELPER FUNCTIONS +############################################################################# + +# Convert a given node name to its proper file name (normalization as explained +# in the texinfo manual: +# http://www.gnu.org/software/texinfo/manual/texinfo/html_node/HTML-Xref-Node-Name-Expansion.html +sub texinfo_file_name($) +{ + my $text = shift; + my $result = ''; + # File name normalization by texinfo: + # 1/2: letters and numbers are left unchanged + # 3/4: multiple, leading and trailing whitespace is removed + $text = main::normalise_space($text); + # 5/6: all remaining spaces are converted to '-', all other 7- or 8-bit + # chars are replaced by _xxxx (xxxx=ascii character code) + while ($text ne '') { + if ($text =~ s/^([A-Za-z0-9]+)//o) { # number or letter stay unchanged + $result .= $1; + } elsif ($text =~ s/^ //o) { # space -> '-' + $result .= '-'; + } elsif ($text =~ s/^(.)//o) { # Otherwise use _xxxx (ascii char code) + my $ccode = ord($1); + if ( $ccode <= 0xFFFF ) { + $result .= sprintf("_%04x", $ccode); + } else { + $result .= sprintf("__%06x", $ccode); + } + } + } + # 7: if name does not begin with a letter, prepend 't_g' (so it starts with a letter) + if ($result !~ /^[a-zA-Z]/) { + $result = 't_g' . $result; + } + # DONE + return $result +} + + +# Load a file containing a nodename<=>filename map (tab-sepatared, i.e. +# NODENAME\tFILENAME\tANCHOR +# Returns a ref to a hash "Node title" => ["FilenameWithoutExt", "Anchor"] +sub load_map_file ($) +{ + my $mapfile = shift; + my $node_map = (); + + if (open(XREFFILE, $mapfile)) { + my $line; + while ( $line = ) { + # parse the tab-separated entries and insert them into the map: + chomp($line); + my @entries = split(/\t/, $line); + if (scalar (@entries) == 3) { + $node_map->{$entries[0]} = [$entries[1], $entries[2]]; + } else { + print STDERR "Invalid entry in the node file $mapfile: $line\n"; + } + } + close (XREFFILE); + } else { + print STDERR "WARNING: Unable to load the map file $mapfile\n"; + } + return $node_map; +} + + +# Split the given path into dir and basename (with .texi removed). Used mainly +# to get the path/basename of the original texi input file +sub split_texi_filename ($) +{ + my $docu = shift; + my ($docu_dir, $docu_name); + if ($docu =~ /(.*\/)/) { + chop($docu_dir = $1); + $docu_name = $docu; + $docu_name =~ s/.*\///; + } else { + $docu_dir = '.'; + $docu_name = $docu; + } + $docu_name =~ s/\.te?x(i|info)?$//; + return ($docu_dir, $docu_name); +} + + + + + +############################################################################# +### CSS HANDLING +############################################################################# + +# Include our standard CSS file, not hard-coded CSS code directly in the HTML! +# For IE, conditionally include the lilypond-ie-fixes.css style sheet +sub lilypond_css_lines ($$) +{ + my $import_lines = shift; + my $rule_lines = shift; + return if (defined($Texi2HTML::THISDOC{'CSS_LINES'})); + if (@$rule_lines or @$import_lines) + { + $Texi2HTML::THISDOC{'CSS_LINES'} = "\n"; + } + foreach my $ref (@CSS_REFS) + { + $Texi2HTML::THISDOC{'CSS_LINES'} .= "{TITLE}\" href=\"$ref->{FILENAME}\">\n"; + } + + # GOP tweak: We don't have alternate stylesheets + #foreach my $ref (@Texi2HTML::Config::ALT_CSS_REFS) + #{ + # $Texi2HTML::THISDOC{'CSS_LINES'} .= "{FILENAME}\" title=\"$ref->{TITLE}\">\n"; + #} + + # GOP tweak: We aren't using an IE-specific stylesheet + #$Texi2HTML::THISDOC{'CSS_LINES'} .= "\n"; +} + + + + + +############################################################################# +### SPLITTING BASED ON NUMBERED SECTIONS +############################################################################# + +# FIXME: removed for GOP. + + +############################################################################# +### CLEANER LINK TITLE FOR EXTERNAL REFS +############################################################################# + +# The default formatting of external refs returns e.g. +# "(lilypond-internals)Timing_translator", so we remove all (...) from the +# file_and_node argument. Also, we want only a very simple format, so we don't +# even call the default handler! +sub lilypond_external_ref($$$$$$) +{ + my $type = shift; + my $section = shift; + my $book = shift; + my $file_node = shift; + my $href = shift; + my $cross_ref = shift; + + my $displaytext = ''; + + # 1) if we have a cross ref name, that's the text to be displayed: + # 2) For the top node, use the (printable) name of the manual, unless we + # have an explicit cross ref name + # 3) In all other cases use the section name + if ($cross_ref ne '') { + $displaytext = $cross_ref; + } elsif (($section eq '') or ($section eq 'Top')) { + $displaytext = $book; + } else { + $displaytext = $section; + } + + $displaytext = &$anchor('', $href, $displaytext) if ($displaytext ne ''); + return &$I('%{node_file_href}', { 'node_file_href' => $displaytext }); +} + + + + + +############################################################################# +### HANDLING TRANSLATED SECTIONS: handle @translationof, secname<->filename +### map stored on disk, xrefs in other manuals load that map +############################################################################# + + +# Try to make use of @translationof to generate files according to the original +# English section title... +sub lilypond_unknown($$$$$) +{ + my $macro = shift; + my $line = shift; + my $pass = shift; + my $stack = shift; + my $state = shift; + + # the @translationof macro provides the original English section title, + # which should be used for file/anchor naming, while the title will be + # translated to each language + # It is already used by extract_texi_filenames.py, so this should not be + # necessary here at all. Still, I'll leave the code in just in case the + # python script messed up ;-) + if ($pass == 1 and $macro eq "translationof") { + if (ref($state->{'element'}) eq 'HASH') { + $state->{'element'}->{'translationof'} = main::normalise_space($line); + } + return ('', 1, undef, undef); + } else { + return &$default_unknown($macro, $line, $pass, $stack, $state); + } +} + + + + +my %translated_books = (); +# Construct a href to an external source of information. +# node is the node with texinfo @-commands +# node_id is the node transliterated and transformed as explained in the +# texinfo manual +# node_xhtml_id is the node transformed such that it is unique and can +# be used to make an html cross ref as explained in the texinfo manual +# file is the file in '(file)node' +sub lilypond_external_href($$$) +{ + my $node = shift; + my $node_id = shift; + my $node_hxmlt_id = shift; + my $file = shift; + + # 1) Keep a hash of book->section_map + # 2) if not file in keys hash => try to load the map (assign empty map if + # non-existent => will load only once!) + # 3) if node in the section=>(file, anchor) map, replace node_id and + # node_xhtml_id by the map's values + # 4) call the default_external_href with these values (or the old ones if not found) + + if (($node_id ne '') and defined($file) and ($node_id ne 'Top')) { + my $map_name = $file; + $map_name =~ s/-big-page//; + + # Load the map if we haven't done so already + if (!exists($translated_books{$map_name})) { + my ($docu_dir, $docu_name) = split_texi_filename ($Texi2HTML::THISDOC{'input_file_name'}); + my $map_filename = main::locate_include_file ("${map_name}.$Texi2HTML::THISDOC{current_lang}.xref-map") + || main::locate_include_file ("${map_name}.xref-map"); + $translated_books{$map_name} = load_map_file ($map_filename); + } + + # look up translation. use these values instead of the old filename/anchor + my $section_name_map = $translated_books{$map_name}; + my $node_text = main::remove_texi($node); + if (defined($section_name_map->{$node_text})) { + ($node_id, $node_hxmlt_id) = @{$section_name_map->{$node_text}}; + } else { + print STDERR "WARNING: Unable to find node '$node_text' in book $map_name.\n"; + } + } + + if (defined $file) { + return &$default_external_href($node, $node_id, $node_hxmlt_id, $file); + } else { + return &$default_external_href($node, $node_id, $node_hxmlt_id); + } +} + + + + + +############################################################################# +### CUSTOM TOC FOR EACH PAGE (in a frame on the left) +############################################################################# + +my $page_toc_depth = 2; +my @default_toc = []; + + +# Initialize the toc_depth to 1 if the command-line option -D=short_toc is given +sub lilypond_init_toc_depth () +{ + if (exists($main::value{'short_toc'}) and not exists($main::value{'bigpage'})) { + $page_toc_depth = 1; + } +} +# Set the TOC-depth (depending on a texinfo variable short_toc) in a +# command-handler, so we have them available when creating the pages +push @Texi2HTML::Config::command_handler_process, \&lilypond_init_toc_depth; + + +# recursively generate the TOC entries for the element and its children (which +# are only shown up to maxlevel. All ancestors of the current element are also +# shown with their immediate children, irrespective of their level. +# Unnumbered entries are only printed out if they are at top-level or 2nd level +# or their parent element is an ancestor of the currently viewed node. +# The conditions to call this method to print the entry for a child node is: +# -) the parent is an ancestor of the current page node +# -) the parent is a numbered element at top-level toplevel (i.e. show numbered +# and unnumbered 2nd-level children of numbered nodes) +# -) the child element is a numbered node below level maxlevel +sub generate_ly_toc_entries($$$) +{ + my $element = shift; + my $element_path = shift; + # FIXME + #my $maxlevel = shift; + my $maxlevel = 1; + # Skip undefined sections, plus all sections generated by index splitting + return() if (not defined($element) or exists($element->{'index_page'})); + my @result = (); + my $level = $element->{'toc_level'}; + my $is_parent_of_current = $element->{'id'} && $element_path->{$element->{'id'}}; + my $ind = ' ' x $level; + # GDP hack: leave this open for color + my $this_css_class = " class=\""; + $this_css_class .= $is_parent_of_current ? " toc_current" : ""; + + # GDP tweak: if the node name is in the color_X list + # TODO: use a hash, load from file? + # FIXME: load from file, to allow for translations! +# HORRIBLE HACK + my @color_1 = ( + + "Learning", "Glossary", "Essay", + "Contact", "Tiny examples", "Bug reports" + ); + my @color_2 = ( + "Features", "Examples", "Freedom", + "Unix", "MacOS X", "Windows", + "Notation", "Usage", "Snippets", + "Help us", "Development", "Authors" + ); + my @color_3 = ( + "Productions", "Testimonials", + "Source", "Old downloads", + "FAQ", "Changes", "Internals", + "Publications", "Old news" + ); + my @color_4 = ( + "Text input", + "GPL", + "Translated", "Old", "FDL" + ); + + my $addColor = " colorDefault"; + foreach $color (@color_1) { + if ($element->{'text'} eq $color) { + $addColor = " color1"; + } + } + foreach $color (@color_2) { + if ($element->{'text'} eq $color) { + $addColor = " color2"; + } + } + foreach $color (@color_3) { + if ($element->{'text'} eq $color) { + $addColor = " color3"; + } + } + foreach $color (@color_4) { + if ($element->{'text'} eq $color) { + $addColor = " color4"; + } + } + + $this_css_class .= $addColor . "\""; + + + + + my $entry = "$ind" . &$anchor ($element->{'tocid'}, "$element->{'file'}#$element->{'target'}",$element->{'text'}); + + push (@result, $entry); + my $children = $element->{'section_childs'}; + if (defined($children) and (ref($children) eq "ARRAY")) { + my $force_children = $is_parent_of_current or ($level == 1 and $element->{'number'}); + my @child_result = (); + foreach my $c (@$children) { + my $is_numbered_child = defined ($c->{'number'}); + my $below_maxlevel = $c->{'toc_level'} le $maxlevel; + if ($force_children or ($is_numbered_child and $below_maxlevel)) { + my @child_res = generate_ly_toc_entries($c, $element_path, $maxlevel); + push (@child_result, @child_res); + } + } + # if no child nodes were generated, e.g. for the index, where expanded pages + # are ignored, don't generate a list at all... + if (@child_result) { + push (@result, "\n$ind\n"); + + # GOP tweak: (next 2 lines; alternates) + push (@result, "$ind" . &$anchor ($element->{'tocid'}, "$element->{'file'}#$element->{'target'}","(main)")); + #push (@result, "$ind" . &$anchor ($element->{'tocid'}, "$element->{'file'}#$element->{'target'}","(".$element->{'text'}." main)")); + push (@result, @child_result); + push (@result, "$ind\n"); + } + } + push (@result, "$ind\n"); + return @result; +} + + +# Print a customized TOC, containing only the first two levels plus the whole +# path to the current page +sub lilypond_generate_page_toc_body($) +{ + my $element = shift; + my $current_element = $element; + my %parentelements; + $parentelements{$element->{'id'}} = 1; + # Find the path to the current element + while ( defined($current_element->{'sectionup'}) and + ($current_element->{'sectionup'} ne $current_element) ) + { + $parentelements{$current_element->{'sectionup'}->{'id'}} = 1 + if ($current_element->{'sectionup'}->{'id'} ne ''); + $current_element = $current_element->{'sectionup'}; + } + return () if not defined($current_element); + # Create the toc entries recursively +#FIXME + my @toc_entries = ("\n"); +# my @toc_entries = ("
    \n", "\n"); + +# FIXME: add link to main page, really hackily. + if ($element->{'sectionup'}) { + # it's not the top element + push (@toc_entries, "
  • Main
  • \n"); + } else { + push (@toc_entries, "
  • Main
  • \n"); + } + + my $children = $current_element->{'section_childs'}; +# FIXME: generate toc + foreach ( @$children ) { + push (@toc_entries, generate_ly_toc_entries($_, \%parentelements, $page_toc_depth)); + } +# FIXME: add search entry box + push (@toc_entries, "
  • \n"); + + push (@toc_entries, "\n"); +#FIXME +# push (@toc_entries, "
    \n"); + push (@toc_entries, "\n"); + return @toc_entries; +} + +sub lilypond_print_toc_div ($$) +{ + my $fh = shift; + my $tocref = shift; + my @lines = @$tocref; + # use default TOC if no custom lines have been generated + @lines = @default_toc if (not @lines); + if (@lines) { + + print $fh "\n\n
    \n"; + #print $fh "
    \n"; + + # Remove the leading "GNU LilyPond --- " from the manual title + my $topname = $Texi2HTML::NAME{'Top'}; + $topname =~ s/^GNU LilyPond(:| &[mn]dash;) //; + + # construct the top-level Docs index (relative path and including language!) + my $lang = $Texi2HTML::THISDOC{current_lang}; + if ($lang and $lang ne "en") { + $lang .= "."; + } else { + $lang = ""; + } + my $reldir = ""; + $reldir = "../" if ($Texi2HTML::Config::SPLIT eq 'section'); + my $uplink = $reldir."index.${lang}html"; + +# print $fh "

    << " . +# &ly_get_string ('Back to Documentation Index') . +# "

    \n"; + +# print $fh '

    ' . &$anchor('', +# $Texi2HTML::HREF{'Top'}, +# $topname, +# 'title="Start of the manual"' +# ) . "

    \n"; + + + foreach my $line (@lines) { + print $fh $line; + } + + print $fh "
    \n\n"; + } +} + +# Create the custom TOC for this page (partially folded, current page is +# highlighted) and store it in a global variable. The TOC is written out after +# the html contents (but positioned correctly using CSS), so that browsers with +# css turned off still show the contents first. +our @this_page_toc = (); +sub lilypond_print_element_header +{ + my $first_in_page = shift; + my $previous_is_top = shift; + if ($first_in_page and not @this_page_toc) { + if (defined($Texi2HTML::THIS_ELEMENT)) { + # Create the TOC for this page + @this_page_toc = lilypond_generate_page_toc_body($Texi2HTML::THIS_ELEMENT); + } + } + return &$default_print_element_header( $first_in_page, $previous_is_top); +} + +# Generate the HTML output for the TOC +sub lilypond_toc_body($) +{ + my $elements_list = shift; + # Generate a default TOC for pages without THIS_ELEMENT + @default_toc = lilypond_generate_page_toc_body(@$elements_list[0]); + return &$default_toc_body($elements_list); +} + +# Print out the TOC in a
    at the beginning of the page +sub lilypond_print_page_head($) +{ + my $fh = shift; + &$default_print_page_head($fh); + print $fh "
    \n"; +} + +# Print out the TOC in a
    , which will be formatted as a +# sidebar mimicking a TOC frame +sub print_lilypond_page_foot($) +{ + my $fh = shift; + my $program_string = &$program_string(); +# print $fh "

    $program_string
    $PRE_BODY_CLOSE

    \n"; + # GOP tweaks: + # Do not include language selection in div#main + print $fh "\n
    \n\n"; + + print $fh "\n\n"; + print $fh "
    \n"; + print $fh "
    \n"; + print $fh "

    Other languages

    \n"; + print $fh "

    Deutsch, Español, Français, Magyar.

    \n"; + print $fh "

    About automatic language selection.

    \n"; + print $fh "
    \n"; + + print $fh "
    \n"; + print $fh "

    Validation

    \n"; + print $fh "

    Thanks to webdev.nl"; + print $fh " for hosting lilypond.org.\n"; + print $fh "\n"; + print $fh "\"Valid

    \n"; + print $fh "

    Web pages created with"; + print $fh " "; + print $fh " GNU Texinfo\n"; + print $fh " and "; + print $fh " texi2html.

    \n"; + print $fh "
    "; + print $fh "
    "; + + # Print the TOC frame and reset the TOC: + lilypond_print_toc_div ($fh, \@this_page_toc); + @this_page_toc = (); + + # Close the page: + print $fh "\n\n"; +} + + + + + +############################################################################# +### NICER / MORE FLEXIBLE NAVIGATION PANELS +############################################################################# + +sub get_navigation_text +{ + my $button = shift; + my $text = $NAVIGATION_TEXT{$button}; + if ( ($button eq 'Back') or ($button eq 'FastBack') ) { + $text = $text . $Texi2HTML::NODE{$button} . " "; + } elsif ( ($button eq 'Forward') or ($button eq 'FastForward') ) { + $text = " " . $Texi2HTML::NODE{$button} . $text; + } elsif ( $button eq 'Up' ) { + $text = " ".$text.": " . $Texi2HTML::NODE{$button} . " "; + } + return $text; +} + + +# Don't automatically create left-aligned table cells for every link, but +# instead create a
    only on an appropriate '(left|right|center)-aligned-cell-n' +# button text. It's alignment as well as the colspan will be taken from the +# name of the button. Also, add 'newline' button text to create a new table +# row. The texts of the buttons are generated by get_navigation_text and +# will contain the name of the next/previous section/chapter. +sub lilypond_print_navigation +{ + my $buttons = shift; + my $vertical = shift; + my $spacing = 1; + my $result = "\n"; + + $result .= "" unless $vertical; + my $beginofline = 1; + foreach my $button (@$buttons) + { + $result .= qq{\n} if $vertical; + # Allow (left|right|center)-aligned-cell and newline as buttons! + if ( $button =~ /^(.*)-aligned-cell-(.*)$/ ) + { + $result .= qq{} unless $beginofline; + $result .= qq{} unless $beginofline; + $result .= qq{}; + $result .= qq{}; + $beginofline = 1; + + } + elsif (ref($button) eq 'CODE') + { + $result .= &$button($vertical); + } + elsif (ref($button) eq 'SCALAR') + { + $result .= "$$button" if defined($$button); + } + elsif (ref($button) eq 'ARRAY') + { + my $text = $button->[1]; + my $button_href = $button->[0]; + # verify that $button_href is simple text and text is a reference + if (defined($button_href) and !ref($button_href) + and defined($text) and (ref($text) eq 'SCALAR') and defined($$text)) + { # use given text + if ($Texi2HTML::HREF{$button_href}) + { + my $anchor_attributes = ''; + if ($USE_ACCESSKEY and (defined($BUTTONS_ACCESSKEY{$button_href})) and ($BUTTONS_ACCESSKEY{$button_href} ne '')) + { + $anchor_attributes = "accesskey=\"$BUTTONS_ACCESSKEY{$button_href}\""; + } + if ($USE_REL_REV and (defined($BUTTONS_REL{$button_href})) and ($BUTTONS_REL{$button_href} ne '')) + { + $anchor_attributes .= " rel=\"$BUTTONS_REL{$button_href}\""; + } + $result .= "" . + &$anchor('', + $Texi2HTML::HREF{$button_href}, + get_navigation_text($$text), + $anchor_attributes + ); + } + else + { + $result .= get_navigation_text($$text); + } + } + } + elsif ($button eq ' ') + { # handle space button + $result .= + ($ICONS && $ACTIVE_ICONS{' '}) ? + &$button_icon_img($BUTTONS_NAME{$button}, $ACTIVE_ICONS{' '}) : + $NAVIGATION_TEXT{' '}; + #next; + } + elsif ($Texi2HTML::HREF{$button}) + { # button is active + my $btitle = $BUTTONS_GOTO{$button} ? + 'title="' . $BUTTONS_GOTO{$button} . '"' : ''; + if ($USE_ACCESSKEY and (defined($BUTTONS_ACCESSKEY{$button})) and ($BUTTONS_ACCESSKEY{$button} ne '')) + { + $btitle .= " accesskey=\"$BUTTONS_ACCESSKEY{$button}\""; + } + if ($USE_REL_REV and (defined($BUTTONS_REL{$button})) and ($BUTTONS_REL{$button} ne '')) + { + $btitle .= " rel=\"$BUTTONS_REL{$button}\""; + } + if ($ICONS && $ACTIVE_ICONS{$button}) + { # use icon + $result .= '' . + &$anchor('', + $Texi2HTML::HREF{$button}, + &$button_icon_img($BUTTONS_NAME{$button}, + $ACTIVE_ICONS{$button}, + $Texi2HTML::SIMPLE_TEXT{$button}), + $btitle + ); + } + else + { # use text + $result .= + '[' . + &$anchor('', + $Texi2HTML::HREF{$button}, + get_navigation_text($button), + $btitle + ) . + ']'; + } + } + else + { # button is passive + $result .= + $ICONS && $PASSIVE_ICONS{$button} ? + &$button_icon_img($BUTTONS_NAME{$button}, + $PASSIVE_ICONS{$button}, + $Texi2HTML::SIMPLE_TEXT{$button}) : + + "[" . get_navigation_text($button) . "]"; + } + $result .= "\n" if $vertical; + $result .= "\n" if $vertical; + } + $result .= "" unless $beginofline; + $result .= "" unless $vertical; + $result .= "
    }; + $beginofline = 0; + } + elsif ( $button eq 'newline' ) + { + $result .= qq{
    \n"; +# return $result; + return "\n"; +} + + +@Texi2HTML::Config::SECTION_BUTTONS = + ('left-aligned-cell-1', 'FastBack', + 'center-aligned-cell-3', 'Top', 'Contents', 'Index', 'About', + 'right-aligned-cell-1', 'FastForward', + 'newline', + 'left-aligned-cell-2', 'Back', + 'center-aligned-cell-1', 'Up', + 'right-aligned-cell-2', 'Forward' + ); + +# buttons for misc stuff +@Texi2HTML::Config::MISC_BUTTONS = ('center-aligned-cell-3', 'Top', 'Contents', 'Index', 'About'); + +# buttons for chapter file footers +# (and headers but only if SECTION_NAVIGATION is false) +@Texi2HTML::Config::CHAPTER_BUTTONS = + ('left-aligned-cell-1', 'FastBack', + 'center-aligned-cell-3', 'Top', 'Contents', 'Index', 'About', + 'right-aligned-cell-1', 'FastForward', + ); + +# buttons for section file footers +@Texi2HTML::Config::SECTION_FOOTER_BUTTONS = + ('left-aligned-cell-1', 'FastBack', + 'center-aligned-cell-3', 'Top', 'Contents', 'Index', 'About', + 'right-aligned-cell-1', 'FastForward', + 'newline', + 'left-aligned-cell-2', 'Back', + 'center-aligned-cell-1', 'Up', + 'right-aligned-cell-2', 'Forward' + ); + +@Texi2HTML::Config::NODE_FOOTER_BUTTONS = + ('left-aligned-cell-1', 'FastBack', + 'center-aligned-cell-3', 'Top', 'Contents', 'Index', 'About', + 'right-aligned-cell-1', 'FastForward', + 'newline', + 'left-aligned-cell-2', 'Back', + 'center-aligned-cell-1', 'Up', + 'right-aligned-cell-2', 'Forward' + ); + + + + + +############################################################################# +### FOOTNOTE FORMATTING +############################################################################# + +# Format footnotes in a nicer way: Instead of printing the number in a separate +# (nr) heading line, use the standard way of prepending nr immediately +# before the fn text. + + +# The following code is copied from texi2html's examples/makeinfo.init and +# should be updated when texi2html makes some changes there! + +my $makekinfo_like_footnote_absolute_number = 0; + +sub makeinfo_like_foot_line_and_ref($$$$$$$$) +{ + my $foot_num = shift; + my $relative_num = shift; + my $footid = shift; + my $docid = shift; + my $from_file = shift; + my $footnote_file = shift; + my $lines = shift; + my $state = shift; + + $makekinfo_like_footnote_absolute_number++; + + # this is a bit obscure, this allows to add an anchor only if formatted + # as part of the document. + $docid = '' if ($state->{'outside_document'} or $state->{'multiple_pass'}); + + if ($from_file eq $footnote_file) + { + $from_file = $footnote_file = ''; + } + + my $foot_anchor = "" . &$anchor($docid, "$footnote_file#$footid", $relative_num) . ""; + $foot_anchor = &$anchor($docid, "$footnote_file#$footid", "($relative_num)") if ($state->{'preformatted'}); + +# unshift @$lines, "
  • "; +# push @$lines, "
  • \n"; + return ($lines, $foot_anchor); +} + +sub makeinfo_like_foot_lines($) +{ + my $lines = shift; + unshift @$lines, "
    \n

    $Texi2HTML::I18n::WORDS->{'Footnotes_Title'}

    \n"; +#
      \n"; +# push @$lines, "
    "; + return $lines; +} + +my %makekinfo_like_paragraph_in_footnote_nr; + +sub makeinfo_like_paragraph ($$$$$$$$$$$$$) +{ + my $text = shift; + my $align = shift; + my $indent = shift; + my $paragraph_command = shift; + my $paragraph_command_formatted = shift; + my $paragraph_number = shift; + my $format = shift; + my $item_nr = shift; + my $enumerate_style = shift; + my $number = shift; + my $command_stack_at_end = shift; + my $command_stack_at_begin = shift; + my $state = shift; +#print STDERR "format: $format\n" if (defined($format)); +#print STDERR "paragraph @$command_stack_at_end; @$command_stack_at_begin\n"; + $paragraph_command_formatted = '' if (!defined($paragraph_command_formatted) or + exists($special_list_commands{$format}->{$paragraph_command})); + return '' if ($text =~ /^\s*$/); + foreach my $style(t2h_collect_styles($command_stack_at_begin)) + { + $text = t2h_begin_style($style, $text); + } + foreach my $style(t2h_collect_styles($command_stack_at_end)) + { + $text = t2h_end_style($style, $text); + } + if (defined($paragraph_number) and defined($$paragraph_number)) + { + $$paragraph_number++; + return $text if (($format eq 'itemize' or $format eq 'enumerate') and + ($$paragraph_number == 1)); + } + my $open = '[0]) and $command_stack_at_begin->[0] eq 'footnote') + { + my $state = $Texi2HTML::THISDOC{'state'}; + $makekinfo_like_paragraph_in_footnote_nr{$makekinfo_like_footnote_absolute_number}++; + if ($makekinfo_like_paragraph_in_footnote_nr{$makekinfo_like_footnote_absolute_number} <= 1) + { + $open.=' class="footnote"'; + my $document_file = $state->{'footnote_document_file'}; + if ($document_file eq $state->{'footnote_footnote_file'}) + { + $document_file = ''; + } + my $docid = $state->{'footnote_place_id'}; + my $doc_state = $state->{'footnote_document_state'}; + $docid = '' if ($doc_state->{'outside_document'} or $doc_state->{'multiple_pass'}); + my $foot_label = &$anchor($state->{'footnote_footnote_id'}, + $document_file . "#$state->{'footnote_place_id'}", + "$state->{'footnote_number_in_page'}"); + $footnote_text = "[${foot_label}] "; + } + } + return $open.'>'.$footnote_text.$text.'

    '; +} + + +############################################################################# +### OTHER SETTINGS +############################################################################# + +# For split pages, use index.html as start page! +if ($Texi2HTML::Config::SPLIT eq 'section') { + $Texi2HTML::Config::TOP_FILE = 'index.html'; +} + + +return 1; diff --git a/GNUmakefile.in b/GNUmakefile.in index 8e379eb6cd..123684cabd 100644 --- a/GNUmakefile.in +++ b/GNUmakefile.in @@ -25,7 +25,7 @@ IN_FILES := $(call src-wildcard,*.in) RELEASE_FILES = ChangeLog RELEASE-COMMIT RELEASE_OUT_FILES = $(RELEASE_FILES:%=$(outdir)/%) OUT_DIST_FILES += $(RELEASE_OUT_FILES) -EXTRA_DIST_FILES = VERSION .gitignore lilypond-texi2html.init \ +EXTRA_DIST_FILES = VERSION .gitignore \ $(README_FILES) $(SCRIPTS) $(IN_FILES) INSTALLATION_DIR=$(local_lilypond_datadir) INSTALLATION_FILES=$(config_make) VERSION @@ -101,6 +101,7 @@ ifeq ($(out),www) install-WWW: -$(INSTALL) -m 755 -d $(DESTDIR)$(webdir) rsync -rl --exclude='*.signature' $(outdir)/offline-root/ $(DESTDIR)$(webdir) + $(MAKE) -C Documentation omf-local-install install-info-WWW: $(foreach d, $(INFO_DIRECTORIES),$(MAKE) -C $(d) install-info && ) true @@ -108,8 +109,7 @@ install-info-WWW: uninstall-WWW: rm -rf $(DESTDIR)$(webdir) -rmdir $(package_docdir) - $(MAKE) -C Documentation/user uninstall - $(MAKE) -C input/lsr uninstall + $(MAKE) -C Documentation uninstall # For online docs with content negotiation, issue `make doc WEB_TARGETS=online' diff --git a/ROADMAP b/ROADMAP index c027bec55e..050360d63d 100644 --- a/ROADMAP +++ b/ROADMAP @@ -12,25 +12,28 @@ source files. . Toplevel READMEs, ChangeLog, build bootstrapping, patches for third party programs Documentation/ + application/ Source files for Application Usage manual bibliography/ .bib files with references to books and articles + contributor/ Source files for the Contribotor's Guide + learning/ Source files for the Learning Manual misc/ Old announcements, ChangeLogs and NEWS + notation/ Source files for Notation Reference manual pictures/ The logo + snippets/ Snippets from the LilyPond Snippet Repository + (auto-generated, do not modify!) + new/ Snippets which are too new for LSR topdocs/ Sources for the toplevel READMEs - (README.txt, INSTALL.txt, NEWS.txt etc.) + (README.txt, INSTALL.txt etc.) user/ User manuals po/ Translated manual node names fr/ es/ de/ Docs translated to French, Spanish, German, resp. + ja/ Docs translated to Japanese elisp/ Emacs LilyPond mode and syntax coloring flower/ A simple C++ library input/ Music input examples - lsr/ Snippets from the LilyPond Snippet Repository - (auto-generated, do not modify!) manual/ Examples from the manual mutopia/ Real music, more at www.mutopiaproject.org - new/ Snippets which are too new for LSR regression/ Testing of features, one test per file - texidocs/ Translations of texidoc and doctitle fields - (for input/lsr) tutorial/ Examples from the tutorial lily/ C++ sources for the LilyPond binary ly/ System music include files diff --git a/VERSION b/VERSION index bff51bf45a..2c53ad6358 100644 --- a/VERSION +++ b/VERSION @@ -1,6 +1,6 @@ PACKAGE_NAME=LilyPond MAJOR_VERSION=2 MINOR_VERSION=13 -PATCH_LEVEL=3 +PATCH_LEVEL=4 MY_PATCH_LEVEL= diff --git a/flower/include/interval.hh b/flower/include/interval.hh index 27e221af8c..edb76deb1a 100644 --- a/flower/include/interval.hh +++ b/flower/include/interval.hh @@ -121,7 +121,7 @@ struct Interval_t : public Drul_array static bool left_less (Interval_t const &a, Interval_t const &b) { - return a[LEFT] < b[RIGHT]; + return a[LEFT] < b[LEFT]; } }; diff --git a/input/GNUmakefile b/input/GNUmakefile index f6cc680093..8191ba5f5a 100644 --- a/input/GNUmakefile +++ b/input/GNUmakefile @@ -1,6 +1,6 @@ depth = .. -SUBDIRS = regression tutorial mutopia manual lsr new texidocs +SUBDIRS = regression tutorial mutopia manual examples = typography-demo les-nereides wilhelmus proportional bach-schenker cary diff --git a/input/les-nereides.ly b/input/les-nereides.ly index 3d88381fc5..e5c1195111 100644 --- a/input/les-nereides.ly +++ b/input/les-nereides.ly @@ -253,28 +253,6 @@ theScore = \score{ pedalSustainStrings = #'("Ped." "*Ped." "*") \remove Bar_number_engraver } - \context { - \type "Engraver_group" - \name Dynamics - \consists "Output_property_engraver" - \override VerticalAxisGroup #'minimum-Y-extent = #'(0 . 0) - - \consists "Script_engraver" - \consists "Dynamic_engraver" - \consists "Text_engraver" - - %%\override TextScript #'font-size = #1 - \override TextScript #'font-shape = #'italic - - \consists "Skip_event_swallow_translator" - - \consists "Axis_group_engraver" - } - - \context { - \PianoStaff - \accepts Dynamics - } } } diff --git a/input/lsr/GNUmakefile b/input/lsr/GNUmakefile deleted file mode 100644 index 8afa862bb2..0000000000 --- a/input/lsr/GNUmakefile +++ /dev/null @@ -1,70 +0,0 @@ -depth = ../.. - -# urg, can't name itely templates foo.itely.in because of standard rule - -STEPMAKE_TEMPLATES=documentation texinfo -LOCALSTEPMAKE_TEMPLATES=lilypond ly -EXTRA_DIST_FILES += README $(call src-wildcard,*.snippet-list) - -default: - -ifneq ($(out),) -MAIN_INFO_DOC = lilypond-snippets -INFO_DOCS = lilypond-snippets -INFO_FILES = $(INFO_DOCS:%=$(outdir)/%.info) -INFO_IMAGES_DIR = lilypond-snippets -DEST_INFO_IMAGES_SUBDIR = input/lsr -endif - -include $(depth)/make/stepmake.make - -TEXI2HTML_FLAGS += -D short_toc - -IN_ITELY_FILES = $(call src-wildcard,*-intro.itely) -GENERATED_ITELY_FILES = $(IN_ITELY_FILES:%-intro.itely=$(outdir)/%.itely) - -$(outdir)/%.itely: %-intro.itely %.snippet-list - xargs $(LYS_TO_TELY) -f doctitle,texidoc,verbatim --name=$@ --template=$< < $(filter %.snippet-list, $^) - -$(outdir)/lilypond-snippets.texi: $(GENERATED_ITELY_FILES) $(LY_FILES) - -source-links = $(outdir)/source $(outdir)/lilypond-snippets/source - -$(outdir)/source: - @rm -f $(@) - ln -sf $(depth) $(@) - -$(outdir)/%/source: - @rm -f $(@) - mkdir -p $(dir $@) - ln -sf $(depth)/.. $(@) - -info: $(INFO_FILES) - -ifneq ($(out),www) -# cancel install-info target and $(INFO_FILES) 'default' target -# (there is no lilypond-snippets.info without images) -local-install-info: - -$(INFO_FILES): - true -endif - -local-clean: - rm -f $(INFO_IMAGES_DIR) - -ifeq ($(out),www) -# All web targets, except info image symlinks and info docs are -# installed in non-recursing target from TOP-SRC-DIR -local-install-WWW: local-install-info -local-uninstall-WWW: local-uninstall-info - -local-WWW-1: info $(outdir)/lilypond-snippets.pdf \ - $(outdir)/lilypond-snippets.texi - -local-WWW-2: $(outdir)/lilypond-snippets/index.html \ - $(outdir)/lilypond-snippets-big-page.html \ - $(source-links) -endif - -.SECONDARY: diff --git a/input/lsr/README b/input/lsr/README deleted file mode 100644 index f3c1608129..0000000000 --- a/input/lsr/README +++ /dev/null @@ -1,5 +0,0 @@ -This directory contains examples generated automatically from LSR -http://lsr.dsi.unimi.it/ - -To update this directory and find addtional information, see -the Contributors' Guide, section "LSR to Git". diff --git a/input/lsr/accordion-discant-symbols.ly b/input/lsr/accordion-discant-symbols.ly deleted file mode 100644 index 1e03a8a17a..0000000000 --- a/input/lsr/accordion-discant-symbols.ly +++ /dev/null @@ -1,195 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "keyboards" - -%% Translation of GIT committish: 00e3a8264e138ad61b4f115a173190d5e9dc7533 - texidoces = " -Los símbolos específicos de acordeón discanto se escriben mediante -@code{\\markup}. Se puede trucar la colocación vertical de los -símbolos modificando los argumentos de @code{\\raise}. - -" - doctitlees = "Símbolos de acordeón discanto" -%% Translation of GIT committish: 6743e7d829e2efe37d5d00133094df664f1960df - - doctitlede = "Symbole für Akkordeon-Diskantregister" - texidocde = " -Diskantregister für Akkordeon können mit @code{\\markup} dargestellt werden. -Die vertikale Position der einzelnen Elemente werden mit @code{\\raise} -angepasst. -" - - texidoc = " -Accordion discant-specific symbols are added using @code{\\markup}. The -vertical placement of the symbols can be tweaked by changing the -@code{\\raise} arguments. - - - -" - doctitle = "Accordion-discant symbols" -} % begin verbatim - -discant = \markup { - \musicglyph #"accordion.accDiscant" -} -dot = \markup { - \musicglyph #"accordion.accDot" -} - -\layout { ragged-right = ##t } - -% 16 voets register -accBasson = ^\markup { - \combine - \discant - \raise #0.5 \dot -} - -% een korig 8 en 16 voets register -accBandon = ^\markup { - \combine - \discant - \combine - \raise #0.5 \dot - \raise #1.5 \dot -} - -accVCello = ^\markup { - \combine - \discant - \combine - \raise #0.5 \dot - \combine - \raise #1.5 \dot - \translate #'(1 . 0) \raise #1.5 \dot -} - -% 4-8-16 voets register -accHarmon = ^\markup { - \combine - \discant - \combine - \raise #0.5 \dot - \combine - \raise #1.5 \dot - \raise #2.5 \dot -} - -accTrombon = ^\markup { - \combine - \discant - \combine - \raise #0.5 \dot - \combine - \raise #1.5 \dot - \combine - \translate #'(1 . 0) \raise #1.5 \dot - \translate #'(-1 . 0) \raise #1.5 \dot -} - -% eenkorig 4 en 16 voets register -accOrgan = ^\markup { - \combine - \discant - \combine - \raise #0.5 \dot - \raise #2.5 \dot -} - -accMaster = ^\markup { - \combine - \discant - \combine - \raise #0.5 \dot - \combine - \raise #1.5 \dot - \combine - \translate #'(1 . 0) \raise #1.5 \dot - \combine - \translate #'(-1 . 0) \raise #1.5 \dot - \raise #2.5 \dot -} - -accAccord = ^\markup { - \combine - \discant - \combine - \raise #1.5 \dot - \combine - \translate #'(1 . 0) \raise #1.5 \dot - \combine - \translate #'(-1 . 0) \raise #1.5 \dot - \raise #2.5 \dot -} - -accMusette = ^\markup { - \combine - \discant - \combine - \raise #1.5 \dot - \combine - \translate #'(1 . 0) \raise #1.5 \dot - \translate #'(-1 . 0) \raise #1.5 \dot -} - -accCeleste = ^\markup { - \combine - \discant - \combine - \raise #1.5 \dot - \translate #'(-1 . 0) \raise #1.5 \dot -} - -accOboe = ^\markup { - \combine - \discant - \combine - \raise #1.5 \dot - \raise #2.5 \dot -} - -accClarin = ^\markup { - \combine - \discant - \raise #1.5 \dot -} - -accPiccolo = ^\markup { - \combine - \discant - \raise #2.5 \dot -} - -accViolin = ^\markup { - \combine - \discant - \combine - \raise #1.5 \dot - \combine - \translate #'(1 . 0) \raise #1.5 \dot - \raise #2.5 \dot -} - -\relative c'' { - c4 d\accBasson e f - c4 d\accBandon e f - c4 d\accVCello e f - c4 d\accHarmon e f - c4 d\accTrombon e f - \break - c4 d\accOrgan e f - c4 d\accMaster e f - c4 d\accAccord e f - c4 d\accMusette e f - c4 d\accCeleste e f - \break - c4 d\accOboe e f - c4 d\accClarin e f - c4 d\accPiccolo e f - c4 d\accViolin e f -} - diff --git a/input/lsr/adding-a-figured-bass-above-or-below-the-notes.ly b/input/lsr/adding-a-figured-bass-above-or-below-the-notes.ly deleted file mode 100644 index 0cff5d93e5..0000000000 --- a/input/lsr/adding-a-figured-bass-above-or-below-the-notes.ly +++ /dev/null @@ -1,65 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "chords, ancient-notation, contexts-and-engravers" - -%% Translation of GIT committish: aea975539ec44fd0f1a8fd25930b88b5ab64b53a - texidoces = " -Al escribir un bajo cifrado, existe una forma de especificar si -queremos que las cifras se sitúen encima o debajo de las notas del -bajo, mediante la definición de la propiedad -@code{BassFigureAlignmentPositioning #'direction} (exclusivamente -dentro de un contexto @code{Staff}). Se puede elegir entre -@code{#UP} (o @code{#1}, arriba), @code{#CENTER} (o @code{#0}, -centrado) y @code{#DOWN} (o @code{#-1}, abajo). - -Como podemos ver, esta propiedad se puede cambiar tantas veces -como queramos. Utilice @code{\\once \\override} si no quiere que el -truco se aplique a toda la partitura. - -" - doctitlees = "Añadir un bajo cifrado encima o debajo de las notas" - -%% Translation of GIT committish: 7eb450e8e6c935410b8f3212cb53e5a731f4f33f - doctitlefr = "Ajout d'une basse chiffrée au-dessus ou au-dessous des notes" - - texidoc = " -When writing a figured bass, here's a way to specify if you want your -figures to be placed above or below the bass notes, by defining the -@code{BassFigureAlignmentPositioning #'direction} property (exclusively -in a @code{Staff} context). Choices are @code{#UP} (or @code{#1}), -@code{#CENTER} (or @code{#0}) and @code{#DOWN} (or @code{#-1}). - -As you can see here, this property can be changed as many times as you -wish. Use @code{\\once \\override} if you don't want the tweak to apply -to the whole score. - -" - doctitle = "Adding a figured bass above or below the notes" -} % begin verbatim - -bass = { - \clef bass - g4 b, c d - e d8 c d2 -} -continuo = \figuremode { - <_>4 <6>8 - \once \override Staff.BassFigureAlignmentPositioning #'direction = #CENTER - <5/>8 <_>4 - \override Staff.BassFigureAlignmentPositioning #'direction = #UP - <_+>4 <6> - \set Staff.useBassFigureExtenders = ##t - \override Staff.BassFigureAlignmentPositioning #'direction = #DOWN - <4>4. <4>8 <_+>4 -} -\score { - << - \new Staff = bassStaff \bass - \context Staff = bassStaff \continuo - >> -} - - diff --git a/input/lsr/adding-ambitus-per-voice.ly b/input/lsr/adding-ambitus-per-voice.ly deleted file mode 100644 index be7af34aa8..0000000000 --- a/input/lsr/adding-ambitus-per-voice.ly +++ /dev/null @@ -1,49 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "pitches, staff-notation, vocal-music" - -%% Translation of GIT committish: 674a5f874c07063ae56d55be25c55fc3b4bdb7bf - doctitlees = "Añadir un ámbito por voz" - texidoces = " -Se puede añadir un ámbito por cada voz. En este caso, el ámbito se -debe desplazar manualmente para evitar colisiones. - -" -%% Translation of GIT committish: e75f1604a1b866c853dee42dbffcb7800c706a5f - -texidocde = " -Ambitus können pro Stimme gesetzt werden. In diesem Fall müssen sie -manual verschoben werden, um Zusammenstöße zu verhindern. - -" -doctitlede = "Ambitus pro Stimme hinzufügen" - - texidoc = " -Ambitus can be added per voice. In this case, the ambitus must be moved -manually to prevent collisions. - -" - doctitle = "Adding ambitus per voice" -} % begin verbatim - -\new Staff << - \new Voice \with { - \consists "Ambitus_engraver" - } \relative c'' { - \override Ambitus #'X-offset = #2.0 - \voiceOne - c4 a d e - f1 - } - \new Voice \with { - \consists "Ambitus_engraver" - } \relative c' { - \voiceTwo - es4 f g as - b1 - } ->> - diff --git a/input/lsr/adding-an-extra-staff-at-a-line-break.ly b/input/lsr/adding-an-extra-staff-at-a-line-break.ly deleted file mode 100644 index 41dce7003e..0000000000 --- a/input/lsr/adding-an-extra-staff-at-a-line-break.ly +++ /dev/null @@ -1,62 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "staff-notation, contexts-and-engravers, breaks" - -%% Translation of GIT committish: f39a9724d9f51ed9d0d464689ef62f549d7b8dd6 - texidoces = " -Al añadir un pentagrama nuevo en un salto de línea, por desgracia -se añade un espacio adicional al final de la línea antes del salto -(reservado para hacer sitio a un cambio de armadura que de todas -formas no se va a imprimir). La solución alternativa es añadir un -ajuste para @code{Staff.explicitKeySignatureVisibility} como se -muestra en el ejemplo. En las versiones 2.10 y anteriores, -también se necesita un ajuste similar para las indicaciones de -compás (véase el ejemplo). - -" - doctitlees = "Añadir un pentagrama adicional en un salto de línea" - - texidoc = " -When adding a new staff at a line break, some extra space is -unfortunately added at the end of the line before the break (to fit in -a key signature change, which will never be printed anyway). The -workaround is to add a setting of -@code{Staff.explicitKeySignatureVisibility} as is shown in the example. -In versions 2.10 and earlier, a similar setting for the time signatures -is also required (see the example). - - - -" - doctitle = "Adding an extra staff at a line break" -} % begin verbatim - -\score { - \new StaffGroup \relative c'' { - \new Staff - \key f \major - c1 c^"Unwanted extra space" \break - << { c1 | c } - \new Staff { - \key f \major - \once \override Staff.TimeSignature #'stencil = ##f - c1 | c - } - >> - c1 | c^"Fixed here" \break - << { c1 | c } - \new Staff { - \once \set Staff.explicitKeySignatureVisibility = #end-of-line-invisible - % The next line is not needed in 2.11.x or later: - \once \override Staff.TimeSignature #'break-visibility = #end-of-line-invisible - \key f \major - \once \override Staff.TimeSignature #'stencil = ##f - c1 | c - } - >> - } -} - diff --git a/input/lsr/adding-an-extra-staff.ly b/input/lsr/adding-an-extra-staff.ly deleted file mode 100644 index 00693d1fb0..0000000000 --- a/input/lsr/adding-an-extra-staff.ly +++ /dev/null @@ -1,40 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "staff-notation, contexts-and-engravers" - -%% Translation of GIT committish: f39a9724d9f51ed9d0d464689ef62f549d7b8dd6 - texidoces = " -Se puede añadir (posiblemente de forma temporal) un pentagrama -nuevo una vez que la pieza ha comenzado. - -" - doctitlees = "Añadir un pentagrama nuevo" - - texidoc = " -An extra staff can be added (possibly temporarily) after the start of a -piece. - -" - doctitle = "Adding an extra staff" -} % begin verbatim - -\score { - << - \new Staff \relative c'' { c1 | c | c | c | c } - \new StaffGroup \relative c'' { - \new Staff { - c1 | c << - c1 \new Staff { - \once \override Staff.TimeSignature #'stencil = ##f - c1 - } - >> - c1 - } - } - >> -} - diff --git a/input/lsr/adding-bar-lines-to-chordnames-context.ly b/input/lsr/adding-bar-lines-to-chordnames-context.ly deleted file mode 100644 index cc95934407..0000000000 --- a/input/lsr/adding-bar-lines-to-chordnames-context.ly +++ /dev/null @@ -1,41 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "chords" - -%% Translation of GIT committish: 7e2910d2bc6167b10cfe328eb17a5f710f2a515a - texidoces = " -Para añadir indicaciones de línea divisoria dentro del contexto de -los nombres de acorde @code{ChordNames}, incluya el grabador -@code{Bar_engraver}. - -" - doctitlees = "Añadir barras de compás al contexto de nombres de acorde (ChordNames)" - -%% Translation of GIT committish: 33f623301a41fcc53efadf96bca1c72834763415 - texidocde = " -Um Taktstriche in einem @code{ChordNames}-Kontext anzeigen zu lassen, muss der -@code{Bar_engraver} hinzugefügt werden. - -" - doctitlede = "Tatkstriche in einen ChordNames-Kontext hinzufügen" - - texidoc = " -To add bar line indications in the @code{ChordNames} context, add the -@code{Bar_engraver}. - -" - doctitle = "Adding bar lines to ChordNames context" -} % begin verbatim - -\new ChordNames \with { - \override BarLine #'bar-size = #4 - \consists "Bar_engraver" -} -\chordmode { - f1:maj7 f:7 bes:7 -} - - diff --git a/input/lsr/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.ly b/input/lsr/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.ly deleted file mode 100644 index 70fef281d9..0000000000 --- a/input/lsr/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.ly +++ /dev/null @@ -1,47 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms, expressive-marks" - -%% Translation of GIT committish: dff50e8e1d3134657a6b6203b9c93826dc4cef65 - texidoces = " -La sintaxis de LilyPond puede implicar muchas colocaciones poco -comunes para los paréntesis, corchetes, etc, que a veces se tienen -que intercalar. Por ejemplo, al introducir una barra manual, el -corchete izquierdo de apertura se debe escribir después de la nota -inicial y de su duración, no antes. De forma similar, el corchete -derecho de cierre debe seguir inmediatamente a la nota que se -quiere situar al final del barrado, incluso si esta nota resulta -estar dentro de un grupo de valoración especial. Este fragmento de -código muestra cómo combinar el barrado manual, las ligaduras de -expresión y de unión y las ligaduras de fraseo, con secciones de -valoración especial (encerradas entre llaves). - -" - doctitlees = "Añadir barras, ligaduras de expresión y de unión, etc. cuando se usan ritmos con y sin grupos de valoración especial." - - texidoc = " -LilyPond syntax can involve many unusual placements for parentheses, -brackets etc., which might sometimes have to be interleaved. For -example, when entering a manual beam, the left square bracket has to be -placed after the starting note and its duration, not before. Similarly, -the right square bracket should directly follow the note which is to be -at the end of the requested beaming, even if this note happens to be -inside a tuplet section. This snippet demonstrates how to combine -manual beaming, manual slurs, ties and phrasing slurs with tuplet -sections (enclosed within curly braces). - -" - doctitle = "Adding beams, slurs, ties etc. when using tuplet and non-tuplet rhythms" -} % begin verbatim - -{ - r16[ g16 \times 2/3 { r16 e'8] } - g16( a \times 2/3 { b d e') } - g8[( a \times 2/3 { b d') e'] ~ } - \time 2/4 - \times 4/5 { e'32\( a b d' e' } a'4.\) -} - diff --git a/input/lsr/adding-drum-parts.ly b/input/lsr/adding-drum-parts.ly deleted file mode 100644 index df815991c3..0000000000 --- a/input/lsr/adding-drum-parts.ly +++ /dev/null @@ -1,76 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms, percussion" - -%% Translation of GIT committish: 00e3a8264e138ad61b4f115a173190d5e9dc7533 - texidoces = " -Mediante la utilización de las potentes herramientas preconfiguradas -como la función @code{\\drummode} y el contexto @code{DrumStaff}, la -introducción de partes para percusión es muy fácil: las percusiones se -sitúan en sus propias posiciones de pentagrama (con una clave -especial) y tienen las cabezas correspondientes al instrumento. Es -posible añadir un símbolo adicional a la percusión o reducir el número -de líneas. - -" - doctitlees = "Escritura de partes de percusión" - -%% Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - texidocfr = " -Grâce à la puissance des outils préconfigurés tels que la fonction -@code{\\drummode} et le contexte @code{DrumStaff}, la saisie de -parties pour percussions est extrêmement simplifiée : chaque composant -d'une batterie trouve sa place sur une portée dédiée (avec une clef -spécifique) et les têtes de note sont spécifiques à chaque élément. -Il est également possible d'affecter un symbole particulier à chaque -élément, tout comme de restreindre le nombre de lignes de la portée. - -" - - doctitlefr = "Ajout de parties de batterie" - - - texidoc = " -Using the powerful pre-configured tools such as the @code{\\drummode} -function and the @code{DrumStaff} context, inputting drum parts is -quite easy: drums are placed at their own staff positions (with a -special clef symbol) and have note heads according to the drum. -Attaching an extra symbol to the drum or restricting the number of -lines is possible. - -" - doctitle = "Adding drum parts" -} % begin verbatim - -drh = \drummode { cymc4.^"crash" hhc16^"h.h." hh hhc8 hho hhc8 hh16 hh hhc4 r4 r2 } -drl = \drummode { bd4 sn8 bd bd4 << bd ss >> bd8 tommh tommh bd toml toml bd tomfh16 tomfh } -timb = \drummode { timh4 ssh timl8 ssh r timh r4 ssh8 timl r4 cb8 cb } - -\score { - << - \new DrumStaff \with { - drumStyleTable = #timbales-style - \override StaffSymbol #'line-count = #2 - \override BarLine #'bar-size = #2 - } << - \set Staff.instrumentName = #"timbales" - \timb - >> - \new DrumStaff << - \set Staff.instrumentName = #"drums" - \new DrumVoice { \stemUp \drh } - \new DrumVoice { \stemDown \drl } - >> - >> - \layout { } - \midi { - \context { - \Score - tempoWholesPerMinute = #(ly:make-moment 120 4) - } - } -} - diff --git a/input/lsr/adding-fingerings-to-a-score.ly b/input/lsr/adding-fingerings-to-a-score.ly deleted file mode 100644 index 8eb17ffca7..0000000000 --- a/input/lsr/adding-fingerings-to-a-score.ly +++ /dev/null @@ -1,18 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "editorial-annotations, fretted-strings" - - texidoc = " -Fingering instructions can be entered using a simple syntax. - -" - doctitle = "Adding fingerings to a score" -} % begin verbatim - -\relative c'' { - c4-1 d-2 f-4 e-3 -} - diff --git a/input/lsr/adding-fingerings-to-tablatures.ly b/input/lsr/adding-fingerings-to-tablatures.ly deleted file mode 100644 index fd5de41166..0000000000 --- a/input/lsr/adding-fingerings-to-tablatures.ly +++ /dev/null @@ -1,48 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "fretted-strings" - -%% Translation of GIT committish: c8446d6eb2fadbf8931a867741572582759935ad - texidocfr = "Ajout de doigtés à des tablatures" - - doctitlefr = " -L'ajout de doigtés à des tablatures s'obtient en conjuguant des -@code{\\markup} et des @code{\\finger}. -" - - texidoc = " -To add fingerings to tablatures, use a combination of @code{\\markup} -and @code{\\finger}. - -" - doctitle = "Adding fingerings to tablatures" -} % begin verbatim - -one = \markup { \finger 1 } -two = \markup { \finger 2 } -threeTwo = \markup { - \override #'(baseline-skip . 2) - \column { - \finger 3 - \finger 2 - } -} -threeFour = \markup { - \override #'(baseline-skip . 2) - \column { - \finger 3 - \finger 4 - } -} - -\score { - \new TabStaff { - \stemUp - e8\4^\one b\2 ^>[ b\2 e\4] - ^>^\threeTwo[ b\2 e\4] - } -} - diff --git a/input/lsr/adding-parentheses-around-an-expressive-mark-or-chordal-note.ly b/input/lsr/adding-parentheses-around-an-expressive-mark-or-chordal-note.ly deleted file mode 100644 index 1660d53121..0000000000 --- a/input/lsr/adding-parentheses-around-an-expressive-mark-or-chordal-note.ly +++ /dev/null @@ -1,33 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks" - -%% Translation of GIT committish: dff50e8e1d3134657a6b6203b9c93826dc4cef65 - texidoces = " -La función @code{\\parenthesize} es un truco especial que encierra -objetos entre paréntesis. El grob asociado es -@code{Score.ParenthesesItem}. - -" - doctitlees = "Encerrar entre paréntesis una marca expresiva o una nota de un acorde" - - texidoc = " -The @code{\\parenthesize} function is a special tweak that encloses -objects in parentheses. The associated grob is -@code{Score.ParenthesesItem}. - -" - doctitle = "Adding parentheses around an expressive mark or chordal note" -} % begin verbatim - -\relative c' { - c2-\parenthesize -> - \override ParenthesesItem #'padding = #0.1 - \override ParenthesesItem #'font-size = #-4 - 2 -} - - diff --git a/input/lsr/adding-the-current-date-to-a-score.ly b/input/lsr/adding-the-current-date-to-a-score.ly deleted file mode 100644 index 57c10abcfd..0000000000 --- a/input/lsr/adding-the-current-date-to-a-score.ly +++ /dev/null @@ -1,49 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "text, titles" - -%% Translation of GIT committish: 00e3a8264e138ad61b4f115a173190d5e9dc7533 - texidoces = " -Con algo de código de Scheme, se puede añadir fácilmente la fecha -actual a una partitura. -" - doctitlees = "Añadir la fecha actual a una partitura" - -%% Translation of GIT committish: 7eb450e8e6c935410b8f3212cb53e5a731f4f33f - texidocfr = " -Avec un peu de code Scheme, voici comment ajouter facilement -la date du jour à votre partition. -" - - doctitlefr = "Ajout de la date du jour à une partition" - - texidoc = " -With a little Scheme code, the current date can easily be added to a -score. - -" - doctitle = "Adding the current date to a score" -} % begin verbatim - -% first, define a variable to hold the formatted date: -date = #(strftime "%d-%m-%Y" (localtime (current-time))) - -% use it in the title block: -\header { - title = "Including the date!" - subtitle = \date -} - -\score { - \relative c'' { - c4 c c c - } -} -% and use it in a \markup block: -\markup { - \date -} - diff --git a/input/lsr/adding-volta-brackets-to-additional-staves.ly b/input/lsr/adding-volta-brackets-to-additional-staves.ly deleted file mode 100644 index c5966922b5..0000000000 --- a/input/lsr/adding-volta-brackets-to-additional-staves.ly +++ /dev/null @@ -1,48 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "repeats" - -%% Translation of GIT committish: 00e3a8264e138ad61b4f115a173190d5e9dc7533 - texidoces = " -El grabador @code{Volta_engraver} reside de forma predeterminada -dentro del contexto de @code{Score}, y los corchetes de la repetición -se imprimen así normalmente sólo encima del pentagrama superior. Esto -se puede ajustar añadiendo el grabador @code{Volta_engraver} al -contexto de @code{Staff} en que deban aparecer los corchetes; véase -también el fragmento de código \"Volta multi staff\". - -" - doctitlees = "Añadir corchetes de primera y segunda vez a más pentagramas" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Der @code{Volta_engraver} befindet sich im @code{Score}-Kontext und Klammern -werden deshalb nur auf dem obersten System dargestellt. Das kann umgangen -werden, indem man den @code{Volta_engraver} zu dem @code{Staff}-Kontext -hinzufügt, in dem die Klammern zusätzlichen vorkommen sollen. Siehe auch -das \"Volta multi staff\"-Schnipsel. - -" - doctitlede = "Volta-Klammern zu zusätzlichen Systemen hinzufügen" - - texidoc = " -The @code{Volta_engraver} by default resides in the @code{Score} -context, and brackets for the repeat are thus normally only printed -over the topmost staff. This can be adjusted by adding the -@code{Volta_engraver} to the @code{Staff} context where the brackets -should appear; see also the \"Volta multi staff\" snippet. - -" - doctitle = "Adding volta brackets to additional staves" -} % begin verbatim - -<< - \new Staff { \repeat volta 2 { c'1 } \alternative { c' } } - \new Staff { \repeat volta 2 { c'1 } \alternative { c' } } - \new Staff \with { \consists "Volta_engraver" } { c'2 g' e' a' } - \new Staff { \repeat volta 2 { c'1 } \alternative { c' } } ->> - diff --git a/input/lsr/additional-voices-to-avoid-collisions.ly b/input/lsr/additional-voices-to-avoid-collisions.ly deleted file mode 100644 index 2775f51dfe..0000000000 --- a/input/lsr/additional-voices-to-avoid-collisions.ly +++ /dev/null @@ -1,65 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "simultaneous-notes" - -%% Translation of GIT committish: 73115c93908af74c12a19753e79cbca47b2c2978 - doctitlees = "Voces adicionales para evitar colisiones" - texidoces = " -En ciertos casos de polifonía compleja, se necesitan voces adicionales -para evitar colisiones entre las notas. Las voces adicionales se -añaden definiendo una variable que utiliza la función de Scheme -context-spec-music. - -" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Ein einigen Fällen von sehr komplexer polyphoner Musik sind zusätzliche -Stimmen notwendig, um Zusammestöße zwischen den Noten zu vermeiden. -Wenn mehr als vier parallele Stimmen benötigt werden, können zusätzliche -Stimmen definiert werden, indem eine Variable mit der Funktion -@code{context-spec-music} definiert wird. - -" - doctitlede = "Zusätzliche Stimmen, um Zusammenstöße zu vermeiden" - - texidoc = " -In some instances of complex polyphonic music, additional voices are -necessary to prevent collisions between notes. If more than four -parallel voices are needed, additional voices can be added by defining -a variable using the Scheme function @code{context-spec-music}. - -" - doctitle = "Additional voices to avoid collisions" -} % begin verbatim - -voiceFive = #(context-spec-music (make-voice-props-set 4) 'Voice) -\relative c'' { - \time 3/4 \key d \minor \partial 2 - << - { \voiceOne - a4. a8 - e'4 e4. e8 - f4 d4. c8 - } \\ { - \voiceThree - f,2 - bes4 a2 - a4 s2 - } \\ { - \voiceFive - s2 - g4 g2 - f4 f2 - } \\ { - \voiceTwo - d2 - d4 cis2 - d4 bes2 - } - >> -} - diff --git a/input/lsr/adjusting-lyrics-vertical-spacing.ly b/input/lsr/adjusting-lyrics-vertical-spacing.ly deleted file mode 100644 index 5feb110f47..0000000000 --- a/input/lsr/adjusting-lyrics-vertical-spacing.ly +++ /dev/null @@ -1,55 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "text, vocal-music, spacing" - -%% Translation of GIT committish: 00e3a8264e138ad61b4f115a173190d5e9dc7533 - texidoces = " -Este fragmento de código muestra cómo situar la línea de base de la -letra más cerca del pentagrama. - -" - doctitlees = "Ajuste del especiado vertical de la letra" - -%% Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - texidocfr = " -Cet extrait illustre la manière de rapprocher la ligne de paroles -de la portée. - -" - doctitlefr = "Ajustement de l'espacement vertical des paroles" - - - texidoc = " -This snippet shows how to bring the lyrics line closer to the staff. - -" - doctitle = "Adjusting lyrics vertical spacing" -} % begin verbatim - -% Default layout: -<< - \new Staff \new Voice = melody \relative c' { - c4 d e f - g4 f e d - c1 - } - \new Lyrics \lyricsto melody { aa aa aa aa aa aa aa aa aa } - -% Reducing the minimum space below the staff and above the lyrics: - \new Staff \with { - \override VerticalAxisGroup #'minimum-Y-extent = #'(-1 . 4) - } - \new Voice = melody \relative c' { - c4 d e f - g4 f e d - c1 - } - \new Lyrics \with { - \override VerticalAxisGroup #'minimum-Y-extent = #'(-1.2 . 1) - } - \lyricsto melody { aa aa aa aa aa aa aa aa aa } ->> - diff --git a/input/lsr/adjusting-the-shape-of-falls-and-doits.ly b/input/lsr/adjusting-the-shape-of-falls-and-doits.ly deleted file mode 100644 index 02d093f784..0000000000 --- a/input/lsr/adjusting-the-shape-of-falls-and-doits.ly +++ /dev/null @@ -1,40 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks" - -%% Translation of GIT committish: dff50e8e1d3134657a6b6203b9c93826dc4cef65 - texidoces = " -Puede ser necesario trucar la propiedad -@code{shortest-duration-space} para poder ajustar el tamaño de las -caídas y subidas de tono («falls» y «doits»). - -" - doctitlees = "Ajustar la forma de las subidas y caídas de tono" - -%% Translation of GIT committish: 6ce7f350682dfa99af97929be1dec6b9f1cbc01a -texidocde = " -Die @code{shortest-duration-space}-Eigenschaft kann verändert werden, um -das Aussehen von unbestimmten Glissandi anzupassen. - -" - doctitlede = "Das Aussehen von unbestimmten Glissandi anpassen" - - texidoc = " -The @code{shortest-duration-space} property may have to be tweaked to -adjust the shape of falls and doits. - -" - doctitle = "Adjusting the shape of falls and doits" -} % begin verbatim - -\relative c'' { - \override Score.SpacingSpanner #'shortest-duration-space = #4.0 - c2-\bendAfter #+5 - c2-\bendAfter #-3 - c2-\bendAfter #+8 - c2-\bendAfter #-6 -} - diff --git a/input/lsr/aligning-and-centering-instrument-names.ly b/input/lsr/aligning-and-centering-instrument-names.ly deleted file mode 100644 index 3763e10108..0000000000 --- a/input/lsr/aligning-and-centering-instrument-names.ly +++ /dev/null @@ -1,87 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "text, paper-and-layout, titles" - -%% Translation of GIT committish: 00e3a8264e138ad61b4f115a173190d5e9dc7533 - texidoces = " -Los nombres de instrumento se imprimen generalmente a la izquierda de -los pentagramas. Para alinear los nombres de varios instrumentos -distintos, sitúelos dentro de un bloque @code{\\markup} y utilice una -de las siguientes posiblidades: - -* - Nombres de instrumento alineados por la derecha: es el - comportamiento predeterminado - -* - Nombres de instrumento centrados: la utilización de la instrucción - @code{\\hcenter-in #n} sitúa los nombres de instrumento dentro de - un rectángulo separado, donde @code{n} es la anchura del - rectángulo - -* - Nombres de instrumento alineados por la izquierda: los nombres se - imprimen en la parte superior de un rectángulo vacío, utilizando - la instrucción @code{\\combine} con un objeto @code{\\hspace #n}. - -" - doctitlees = "Alinear y centrar los nombres de instrumento" - - texidoc = " -The horizontal alignment of instrument names is tweaked by changing the -@code{Staff.InstrumentName #'self-alignment-X} property. The -@code{\\layout} variables @code{indent} and @code{short-indent} define -the space in which the instrument names are aligned before the first -and the following systems, respectively. - -" - doctitle = "Aligning and centering instrument names" -} % begin verbatim - -\paper { - left-margin = 3\cm -} - -\score { - \new StaffGroup << - \new Staff { - \override Staff.InstrumentName #'self-alignment-X = #LEFT - \set Staff.instrumentName = \markup \left-column { - "Left aligned" - "instrument name" - } - \set Staff.shortInstrumentName = #"Left" - c''1 - \break - c''1 - } - \new Staff { - \override Staff.InstrumentName #'self-alignment-X = #CENTER - \set Staff.instrumentName = \markup \center-column { - Centered - "instrument name" - } - \set Staff.shortInstrumentName = #"Centered" - g'1 - g'1 - } - \new Staff { - \override Staff.InstrumentName #'self-alignment-X = #RIGHT - \set Staff.instrumentName = \markup \right-column { - "Right aligned" - "instrument name" - } - \set Staff.shortInstrumentName = #"Right" - e'1 - e'1 - } - >> - \layout { - ragged-right = ##t - indent = 4\cm - short-indent = 2\cm - } -} diff --git a/input/lsr/aligning-bar-numbers.ly b/input/lsr/aligning-bar-numbers.ly deleted file mode 100644 index 266fc8d124..0000000000 --- a/input/lsr/aligning-bar-numbers.ly +++ /dev/null @@ -1,59 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms" - -%% Translation of GIT committish: 5a33019d8b4a837f564eadd4979501ff07e9dfd5 - texidoces = " - -Los números de compás se alinean de forma predeterminada por la -derecha con su objeto padre. Éste es por lo general el borde -izquierdo de una línea o, si los números se imprimen dentro de la -línea, el lado izquierdo de una línea divisoria. Los números -también se pueden situar directamente sobre la barra de compás o -alineados por la izquierda con ella. - -" - - doctitlees = "Alineación de los números de compás" - -%% Translation of GIT committish: 13ac9d1dfbcc297166948ee396e9ade078d2446e - texidocde = " -Taktnummern sind standardmäßig links an ihrem Ursprungsobjet -ausgerichtet. Das ist normalerweise die linke Ecke einer Linie oder, -wenn die Nummern innerhalb einer Zeile gesetzt werden, auf der -linken Seite eines Taktstrichs. Die Nummern können auch -direkt über dem Taktstrich positioniert werden oder rechts vom -Taktstrich gesetzt werden. - -" - doctitlede = "Taktnummern ausrichten" - - texidoc = " -Bar numbers by default are right-aligned to their parent object. This -is usually the left edge of a line or, if numbers are printed within a -line, the left hand side of a bar line. The numbers may also be -positioned directly over the bar line or left-aligned to the bar line. - -" - doctitle = "Aligning bar numbers" -} % begin verbatim - -\relative c' { - \set Score.currentBarNumber = #111 - \override Score.BarNumber #'break-visibility = #'#(#t #t #t) - % Increase the size of the bar number by 2 - \override Score.BarNumber #'font-size = #2 - % Print a bar number every second measure - \set Score.barNumberVisibility = #(every-nth-bar-number-visible 2) - c1 | c1 - % Center-align bar numbers - \override Score.BarNumber #'self-alignment-X = #CENTER - c1 | c1 - % Left-align bar numbers - \override Score.BarNumber #'self-alignment-X = #LEFT - c1 | c1 -} - diff --git a/input/lsr/aligning-marks-with-various-notation-objects.ly b/input/lsr/aligning-marks-with-various-notation-objects.ly deleted file mode 100644 index 7f9d85ed69..0000000000 --- a/input/lsr/aligning-marks-with-various-notation-objects.ly +++ /dev/null @@ -1,108 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "text" - -%% Translation of GIT committish: 00e3a8264e138ad61b4f115a173190d5e9dc7533 - texidoces = " -Si están especificadas, las marcas de texto se pueden alinear con -objetos de notación distintos a las líneas divisorias. Entre estos -objetos se encuentran @code{ambitus}, @code{breathing-sign}, -@code{clef}, @code{custos}, @code{staff-bar}, @code{left-edge}, -@code{key-cancellation}, @code{key-signature} y @code{time-signature}. - -En estos casos, las marcas de texto se centran horizontalmente sobre -el objeto, aunque esto se puede cambiar, como se muestra en la segunda -línea de este ejemplo (en una partitura con varios pentagramas, se -debe hacer este ajuste para todos los pentagramas). - -" - doctitlees = "Alinear marcas con varios objetos de notación" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Wenn angegeben, können Textzeichen auch an anderen Objekten als Taktstrichen -ausgerichtet werden. Zu diesen Objekten gehören @code{ambitus}, -@code{breathing-sign}, @code{clef}, @code{custos}, @code{staff-bar}, -@code{left-edge}, @code{key-cancellation}, @code{key-signature} und -@code{time-signature}. - -In diesem Fall werden die Zeichen horizontal über dem Objekt zentriert. -Diese Ausrichtung kann auch geändert werden, wie die zweite Zeile -des Beispiels zeigt. In einer Partitur mit vielen Systemen sollte -diese Einstellung für alle Systeme gemacht werden. - -" - - doctitlede = "Zeichen an verschiedenen Notationsobjekten ausrichten" - - texidoc = " -If specified, text marks may be aligned with notation objects other -than bar lines. These objects include @code{ambitus}, -@code{breathing-sign}, @code{clef}, @code{custos}, @code{staff-bar}, -@code{left-edge}, @code{key-cancellation}, @code{key-signature}, and -@code{time-signature}. - - - -In such cases, text marks will be horizontally centered above the -object. However this can be changed, as demonstrated on the second line -of this example (in a score with multiple staves, this setting should -be done for all the staves). - - - -" - doctitle = "Aligning marks with various notation objects" -} % begin verbatim - -\relative c' { - e1 - - % the RehearsalMark will be centered above the Clef - \override Score.RehearsalMark #'break-align-symbols = #'(clef) - \key a \major - \clef treble - \mark "↓" - e1 - - % the RehearsalMark will be centered above the TimeSignature - \override Score.RehearsalMark #'break-align-symbols = #'(time-signature) - \key a \major - \clef treble - \time 3/4 - \mark "↓" - e2. - - % the RehearsalMark will be centered above the KeySignature - \override Score.RehearsalMark #'break-align-symbols = #'(key-signature) - \key a \major - \clef treble - \time 4/4 - \mark "↓" - e1 - - \break - e1 - - % the RehearsalMark will be aligned with the left edge of the KeySignature - \once \override Score.KeySignature #'break-align-anchor-alignment = #LEFT - \mark "↓" - \key a \major - e1 - - % the RehearsalMark will be aligned with the right edge of the KeySignature - \once \override Score.KeySignature #'break-align-anchor-alignment = #RIGHT - \key a \major - \mark "↓" - e1 - - % the RehearsalMark will be aligned with the left edge of the KeySignature - % and then shifted right by one unit. - \once \override Score.KeySignature #'break-align-anchor = #1 - \key a \major - \mark "↓" - e1 -} diff --git a/input/lsr/aligning-objects-created-with-the--mark-command.ly b/input/lsr/aligning-objects-created-with-the--mark-command.ly deleted file mode 100644 index dd9b34c616..0000000000 --- a/input/lsr/aligning-objects-created-with-the--mark-command.ly +++ /dev/null @@ -1,28 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "text" - - texidoc = " -By default the @code{\\mark} command centers objects over a bar line. -This behavior can be modified to align at right or left. - -" - doctitle = "Aligning objects created with the \\mark command" -} % begin verbatim - -\relative c' { - c1 \mark "(Center)" - c1 - \once \override Score.RehearsalMark #'self-alignment-X = #LEFT - \mark "(Left)" - c4 c c c - c4 c c c - \once \override Score.RehearsalMark #'self-alignment-X = #RIGHT - \mark "(Right)" - c1 -} - - diff --git a/input/lsr/allowing-fingerings-to-be-printed-inside-the-staff.ly b/input/lsr/allowing-fingerings-to-be-printed-inside-the-staff.ly deleted file mode 100644 index a026406c4b..0000000000 --- a/input/lsr/allowing-fingerings-to-be-printed-inside-the-staff.ly +++ /dev/null @@ -1,45 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "editorial-annotations, fretted-strings, spacing" - -%% Translation of GIT committish: 55ea64f469d9c1703222654c9e5bc8490b04a67a - texidoces = " -Las cifras de digitación se imprimen de forma predeterminada fuera -del pentagrama. Sin embargo, este comportamiento se puede -cancelar. - -" - doctitlees = "Permitir que las digitaciones se impriman dentro del pentagrama" - -%% Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 - texidocfr = " -L'empilement des indications de doigté se fait par défaut à l'extérieur de la portée. Néanmoins, il est possible d'annuler ce comportement. - -" - doctitlefr = "Impression des doigtés à l'intérieur de la portée" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Normalerweise werden vertikal orientierte Fingersatzzahlen außerhalb des Systems -gesetzt. Das kann aber verändert werden. - -" - doctitlede = "Fingersatz auch innerhalb des Systems setzen" - - texidoc = " -By default, vertically oriented fingerings are positioned outside the -staff. However, this behavior can be canceled. - -" - doctitle = "Allowing fingerings to be printed inside the staff" -} % begin verbatim - -\relative c' { - 2 - \once \override Fingering #'staff-padding = #'() - 2 -} - diff --git a/input/lsr/ambitus-with-multiple-voices.ly b/input/lsr/ambitus-with-multiple-voices.ly deleted file mode 100644 index fb743c6f3b..0000000000 --- a/input/lsr/ambitus-with-multiple-voices.ly +++ /dev/null @@ -1,50 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "pitches, vocal-music" - -%% Translation of GIT committish: 48f804da6794a7bc8e7fdd4b1649f485b0b09d26 - doctitlees = "Ámbitos con varias voces" - texidoces = " -La adición del grabador @code{Ambitus_engraver} al contexto de -@code{Staff} crea un solo ámbito por pentagrama, incluso en el caso de -pentagramas con varias voces. - -" - -%% Translation of GIT committish: e75f1604a1b866c853dee42dbffcb7800c706a5f - texidocde = " -Indem man den @code{Ambitus_engraver} im @code{Staff}-Kontext -hinzufügt, erhält man einen einzigen Ambitus pro System, auch in dem -Fall, dass mehrere Stimmen sich im gleichen System befinden. -" - doctitlede = "Ambitus mit vielen Stimmen" - - texidoc = " -Adding the @code{Ambitus_engraver} to the @code{Staff} context creates -a single ambitus per staff, even in the case of staves with multiple -voices. - -" - doctitle = "Ambitus with multiple voices" -} % begin verbatim - -\new Staff \with { - \consists "Ambitus_engraver" - } -<< - \new Voice \relative c'' { - \voiceOne - c4 a d e - f1 - } - \new Voice \relative c' { - \voiceTwo - es4 f g as - b1 - } ->> - - diff --git a/input/lsr/ambitus.ly b/input/lsr/ambitus.ly deleted file mode 100644 index 5ab08a5a72..0000000000 --- a/input/lsr/ambitus.ly +++ /dev/null @@ -1,41 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "pitches, vocal-music" - - texidoc = " -Ambitus indicate pitch ranges for voices. - - -Accidentals only show up if they are not part of the key signature. -@code{AmbitusNoteHead} grobs also have ledger lines. - -" - doctitle = "Ambitus" -} % begin verbatim - -\layout { - \context { - \Voice - \consists "Ambitus_engraver" - } -} - -<< - \new Staff { - \relative c' { - \time 2/4 - c4 f' - } - } - \new Staff { - \relative c' { - \time 2/4 - \key d \major - cis4 as' - } - } ->> - diff --git a/input/lsr/analysis-brackets-above-the-staff.ly b/input/lsr/analysis-brackets-above-the-staff.ly deleted file mode 100644 index d364a6bf0e..0000000000 --- a/input/lsr/analysis-brackets-above-the-staff.ly +++ /dev/null @@ -1,37 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "editorial-annotations, tweaks-and-overrides" - -%% Translation of GIT committish: 00e3a8264e138ad61b4f115a173190d5e9dc7533 - texidoces = " -De forma predeterminada se añaden corchetes de análisis sencillos -debajo del pentagrama. El ejemplo siguiente muestra una manera de -colocarlos por encima. - -" - doctitlees = "Corchetes de análisis encima del pentagrama" - - texidoc = " -Simple horizontal analysis brackets are added below the staff by -default. The following example shows a way to place them above the -staff instead. - -" - doctitle = "Analysis brackets above the staff" -} % begin verbatim - -\layout { - \context { - \Voice - \consists "Horizontal_bracket_engraver" - } -} -\relative c'' { - \once \override HorizontalBracket #'direction = #UP - c2\startGroup - d2\stopGroup -} - diff --git a/input/lsr/ancient-fonts.ly b/input/lsr/ancient-fonts.ly deleted file mode 100644 index b75ee7d4a0..0000000000 --- a/input/lsr/ancient-fonts.ly +++ /dev/null @@ -1,246 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "ancient-notation" - -%% Translation of GIT committish: aea975539ec44fd0f1a8fd25930b88b5ab64b53a - texidoces = " -Aquí se muestran muchos (¿o quizá todos?) de los símbolos que -están contemplados por la capacidad de LilyPond para la música -antigua. -" - - doctitlees = "Tipografía de música antigua" - -%% Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - texidocfr =" -Voici comment graver la plupart, sinon tous les symboles que -LilyPond prend en charge en matière de musique ancienne. - -" - doctitlefr = "Gravure de musique ancienne" - - texidoc = " -Shown here are many (all?) of the symbols that are included in -LilyPond's support for ancient notation. - - - -" - doctitle = "Ancient fonts" -} % begin verbatim - -upperStaff = \new VaticanaStaff = "upperStaff" << - \context VaticanaVoice << - \transpose c c { - - \override NoteHead #'style = #'vaticana.punctum - \key es \major - \clef "vaticana-fa2" - c1 des e f ges - - \override NoteHead #'style = #'vaticana.inclinatum - a! b ces' - \bar "|" - % \break % 1 (8*1) - - \override NoteHead #'style = #'vaticana.quilisma - b! des'! ges! fes! - \breathe - \clef "vaticana-fa1" - \override NoteHead #'style = #'vaticana.plica - es d - \override NoteHead #'style = #'vaticana.reverse.plica - c d - \bar "|" - % \break %2 (8*1) - - \override NoteHead #'style = #'vaticana.punctum.cavum - es f - \override NoteHead #'style = #'vaticana.lpes - g as - \override NoteHead #'style = #'vaticana.upes - bes as - \override NoteHead #'style = #'vaticana.vupes - g f - \override NoteHead #'style = #'vaticana.linea.punctum - \once \override Staff.BarLine #'bar-size = #2.0 \bar "|" - % \break % 3 (8*1) - - es d - \override NoteHead #'style = #'vaticana.epiphonus - c d - \override NoteHead #'style = #'vaticana.cephalicus - es f - - \override Staff.KeySignature #'glyph-name-alist = #alteration-medicaea-glyph-name-alist - \override Staff.Accidental #'glyph-name-alist = #alteration-medicaea-glyph-name-alist - \override Staff.Custos #'style = #'medicaea - \override NoteHead #'style = #'medicaea.punctum - \clef "medicaea-fa2" - ces des - \bar "|" - % \break % 4 (8*1) - - e! f! ges - \clef "medicaea-do2" - \override NoteHead #'style = #'medicaea.inclinatum - a! b! ces' - \override NoteHead #'style = #'medicaea.virga - b! a! - \bar "|" - % \break % 5 (8*1) - - ges fes - \clef "medicaea-fa1" - \override NoteHead #'style = #'medicaea.rvirga - e des ces - - \override Staff.KeySignature #'glyph-name-alist = #alteration-hufnagel-glyph-name-alist - \override Staff.Accidental #'glyph-name-alist = #alteration-hufnagel-glyph-name-alist - \override Staff.Custos #'style = #'hufnagel - \override NoteHead #'style = #'hufnagel.punctum - \clef "hufnagel-fa2" - ces des es - \bar "|" - % \break % 6 (8*1) - - fes ges - \clef "hufnagel-do2" - \override NoteHead #'style = #'hufnagel.lpes - as! bes! ces' - \override NoteHead #'style = #'hufnagel.virga - bes! as! - \bar "|" - % \break % 7 (8*1) - - ges! fes! - \clef "hufnagel-do-fa" - \override NoteHead #'style = #'hufnagel.punctum - es! des ces des! es! fes! - \bar "||" - % \break % 8 (8*1) - - s32*1 - % \break % 12 (32*1) - } - >> ->> - -lowerStaff = \new MensuralStaff = "lowerStaff" << - \context MensuralVoice << - \transpose c c { - - \key a \major - cis'1 d'\breve gis'\breve e'\breve \[ e'\longa fis'\longa \] - \set Staff.forceClef = ##t - \clef "neomensural-c2" - cis1 - \bar "|" - % \break % 2 (16*1) - - \[ g\breve dis''\longa \] - b\breve \[ a\longa d\longa \] - \clef "petrucci-c2" - % \break % 4 (16*1) - - fis1 ces1 - \clef "petrucci-c2" - r\longa - \set Staff.forceClef = ##t - \clef "mensural-c2" - r\breve - \bar "|" - % \break % 5 (8*1) - - r2 - \clef "mensural-g" - r4 r8 r16 r16 - \override NoteHead #'style = #'mensural - \override Rest #'style = #'mensural - \clef "petrucci-f" - c8 b, c16 b, c32 b, c64 b, c64 b, - d8 e d16 e d32 e d64 e d64 e - r\longa - \set Staff.forceClef = ##t - \clef "petrucci-f" - r\breve - \bar "|" - % \break % 6 (8*1) - - r\breve - \clef "mensural-f" - r2 r4 r8 r16 r16 - - \set Staff.forceClef = ##t - \clef "mensural-f" - e\breve f g a1 - \clef "mensural-g" - % \break % 7 (8*1) - - \[ bes'!\longa a'!\longa c''!\longa \] - e'1 d' c' d' \bar "|" - \bar "|" - % \break % 9 (16*1) - - bes'!\longa fis'!1 as'!1 ges'!\longa % lig - \set Staff.forceClef = ##t - \clef "mensural-g" - e'2 d' c' \bar "|" - % \break % 11 (16*1) - - \set Staff.forceClef = ##t - \clef "petrucci-g" - c'2 d' e' f' - \clef "petrucci-g" - g' as'! bes'! cis''! - bes'! as'! gis'! fis'! - \set Staff.forceClef = ##t - \clef "mensural-g" - es'! des'! cis'!1 \bar "||" - % \break % 12 (8*1) - } - >> ->> - -\paper { - line-thickness = #(/ staff-space 5.0) -} - -\score { - << - \upperStaff - \lowerStaff - >> - \layout { - indent = 0.0 - line-width = 17.25\cm - \context { - \Score - timing = ##f - } - \context { - \MensuralVoice - \override NoteHead #'style = #'neomensural - \override Rest #'style = #'neomensural - \override Stem #'flag-style = #'mensural - \override Stem #'thickness = #1.0 - } - \context { - \MensuralStaff - \revert BarLine #'transparent - \override KeySignature #'glyph-name-alist = #alteration-mensural-glyph-name-alist - clefGlyph = #"clefs.petrucci.c2" - } - \context { - \VaticanaStaff - \revert BarLine #'transparent - \override StaffSymbol #'thickness = #2.0 - \override KeySignature #'glyph-name-alist = #alteration-vaticana-glyph-name-alist - \override Custos #'neutral-position = #4 - } - } -} - diff --git a/input/lsr/ancient-notation-intro.itely b/input/lsr/ancient-notation-intro.itely deleted file mode 100644 index a6de3f24c6..0000000000 --- a/input/lsr/ancient-notation-intro.itely +++ /dev/null @@ -1,7 +0,0 @@ -@node Ancient notation -@unnumbered Ancient notation - -@ruser{Ancient notation} - -@lysnippets - diff --git a/input/lsr/ancient-notation-template----modern-transcription-of-gregorian-music.ly b/input/lsr/ancient-notation-template----modern-transcription-of-gregorian-music.ly deleted file mode 100644 index f431d9b5bb..0000000000 --- a/input/lsr/ancient-notation-template----modern-transcription-of-gregorian-music.ly +++ /dev/null @@ -1,72 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "ancient-notation, template" - -%% Translation of GIT committish: aea975539ec44fd0f1a8fd25930b88b5ab64b53a - texidoces = " -Este ejemplo muestra cómo hacer una transcripción moderna de canto -gregoriano. El canto gregoriano no tiene compás ni plicas; utiliza -solamente cabezas de nota de blanca y de negra, y unas marcas -especiales que indican silencios de distintas longitudes. - -" - - doctitlees = "Plantilla para notación de música antigua (transcripción moderna de canto gregoriano)" -%% Translation of GIT committish: 17633f6b8681af86230aa84597fe7561e98c91d6 - - texidocde = " -Dieses Beispiel zeigt eine moderne Transkription des Gregorianischen -Chorals. Hier gibt es keine Takte, keine Notenhälse und es werden nur -halbe und Viertelnoten verwendet. Zusätzliche Zeichen zeigen die -Länge von Pausen an. -" - - texidoc = " -This example demonstrates how to do modern transcription of Gregorian -music. Gregorian music has no measure, no stems; it uses only half and -quarter note heads, and special marks, indicating rests of different -length. - -" - doctitle = "Ancient notation template -- modern transcription of gregorian music" -} % begin verbatim - -\include "gregorian.ly" - -chant = \relative c' { - \set Score.timing = ##f - f4 a2 \divisioMinima - g4 b a2 f2 \divisioMaior - g4( f) f( g) a2 \finalis -} - -verba = \lyricmode { - Lo -- rem ip -- sum do -- lor sit a -- met -} - -\score { - \new Staff << - \new Voice = "melody" \chant - \new Lyrics = "one" \lyricsto melody \verba - >> - \layout { - \context { - \Staff - \remove "Time_signature_engraver" - \remove "Bar_engraver" - \override Stem #'transparent = ##t - } - \context { - \Voice - \override Stem #'length = #0 - } - \context { - \Score - barAlways = ##t - } - } -} - diff --git a/input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly b/input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly deleted file mode 100644 index bda4c2332e..0000000000 --- a/input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly +++ /dev/null @@ -1,292 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "ancient-notation, template" - -%% Translation of GIT committish: aea975539ec44fd0f1a8fd25930b88b5ab64b53a - texidoces = " -Al transcribir música mensural, es útil un «incipit» al compienzo -de la pieza para indicar la tonalidad y el tempo -originales. Aunque los músicos actuales están acostumbrados a las -barras de compás para reconocer con más facilidad los patrones -rítmicos, durante el período de la música mensural aún no se -habíen inventado las líneas divisorias; de hecho, la medida solía -cambiar a cada pocas notas. Como compromiso, a menudo las líneas -divisorias se imprimen entre los pentagramas en vez de hacerlo -encima de ellos. - -" - doctitlees = "Plantilla de notación de música antigua (transcripción moderna de música mensural)" -%% Translation of GIT committish: 17633f6b8681af86230aa84597fe7561e98c91d6 - - texidocde = " -Bei der Transkription von Mensuralmusik ist es oft erwünscht, ein -Incipit an den Anfang des Stückes zu stellen, damit klar ist, wie -Tempo und Schlüssel in der Originalnotation gesetzt waren. Während -heutzutage Musiker an Taktlinien gewöhnt sind, um Rhythmen schneller -zu erkennen, wurden diese in der Mensuralmusik nicht verwendet. -Tatsächlich ändern sich die Rhythmen auch oft alle paar Noten. Als -ein Kompromiss werden die Notenlinien nicht auf dem System, sondern -zwischen den Systemen geschrieben. -" - -%% Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - texidocfr = " -Lorsque l'on transcrit de la musique mensurale, il est d'usage -d'indiquer en début de partition, par un « incipit », les tonalité -et tempo originaux. De nos jours, les musiciens ont l'habitude de -voir des barres de mesure qui les aide à appréhender la structure -rythmique. Ces barres n'existaient pas du temps où ces œuvres ont -été écrites ; en fait, la métrique évoluait au fil de la pièce. Un -compromis consiste à imprimer des barres de mesure entre les portées -plutôt que sur la portée elle-même. - -" - doctitle = "Exemples de notation ancienne -- transcription moderne de musique mensurale" - - texidoc = " -When transcribing mensural music, an incipit at the beginning of the -piece is useful to indicate the original key and tempo. While today -musicians are used to bar lines in order to faster recognize rhythmic -patterns, bar lines were not yet invented during the period of mensural -music; in fact, the meter often changed after every few notes. As a -compromise, bar lines are often printed between the staves rather than -on the staves. - -" - doctitle = "Ancient notation template -- modern transcription of mensural music" -} % begin verbatim - -global = { - \set Score.skipBars = ##t - - % incipit - \once \override Score.SystemStartBracket #'transparent = ##t - \override Score.SpacingSpanner #'spacing-increment = #1.0 % tight spacing - \key f \major - \time 2/2 - \once \override Staff.TimeSignature #'style = #'neomensural - \override Voice.NoteHead #'style = #'neomensural - \override Voice.Rest #'style = #'neomensural - \set Staff.printKeyCancellation = ##f - \cadenzaOn % turn off bar lines - \skip 1*10 - \once \override Staff.BarLine #'transparent = ##f - \bar "||" - \skip 1*1 % need this extra \skip such that clef change comes - % after bar line - \bar "" - - % main - \revert Score.SpacingSpanner #'spacing-increment % CHECK: no effect? - \cadenzaOff % turn bar lines on again - \once \override Staff.Clef #'full-size-change = ##t - \set Staff.forceClef = ##t - \key g \major - \time 4/4 - \override Voice.NoteHead #'style = #'default - \override Voice.Rest #'style = #'default - - % FIXME: setting printKeyCancellation back to #t must not - % occur in the first bar after the incipit. Dto. for forceClef. - % Therefore, we need an extra \skip. - \skip 1*1 - \set Staff.printKeyCancellation = ##t - \set Staff.forceClef = ##f - - \skip 1*7 % the actual music - - % let finis bar go through all staves - \override Staff.BarLine #'transparent = ##f - - % finis bar - \bar "|." -} - -discantusNotes = { - \transpose c' c'' { - \set Staff.instrumentName = #"Discantus " - - % incipit - \clef "neomensural-c1" - c'1. s2 % two bars - \skip 1*8 % eight bars - \skip 1*1 % one bar - - % main - \clef "treble" - d'2. d'4 | - b e' d'2 | - c'4 e'4.( d'8 c' b | - a4) b a2 | - b4.( c'8 d'4) c'4 | - \once \override NoteHead #'transparent = ##t c'1 | - b\breve | - } -} - -discantusLyrics = \lyricmode { - % incipit - IV- - - % main - Ju -- bi -- | - la -- te De -- | - o, om -- - nis ter -- | - ra, __ om- | - "..." | - -us. | -} - -altusNotes = { - \transpose c' c'' { - \set Staff.instrumentName = #"Altus " - - % incipit - \clef "neomensural-c3" - r1 % one bar - f1. s2 % two bars - \skip 1*7 % seven bars - \skip 1*1 % one bar - - % main - \clef "treble" - r2 g2. e4 fis g | % two bars - a2 g4 e | - fis g4.( fis16 e fis4) | - g1 | - \once \override NoteHead #'transparent = ##t g1 | - g\breve | - } -} - -altusLyrics = \lyricmode { - % incipit - IV- - - % main - Ju -- bi -- la -- te | % two bars - De -- o, om -- | - nis ter -- ra, | - "..." | - -us. | -} - -tenorNotes = { - \transpose c' c' { - \set Staff.instrumentName = #"Tenor " - - % incipit - \clef "neomensural-c4" - r\longa % four bars - r\breve % two bars - r1 % one bar - c'1. s2 % two bars - \skip 1*1 % one bar - \skip 1*1 % one bar - - % main - \clef "treble_8" - R1 | - R1 | - R1 | - r2 d'2. d'4 b e' | % two bars - \once \override NoteHead #'transparent = ##t e'1 | - d'\breve | - } -} - -tenorLyrics = \lyricmode { - % incipit - IV- - - % main - Ju -- bi -- la -- te | % two bars - "..." | - -us. | -} - -bassusNotes = { - \transpose c' c' { - \set Staff.instrumentName = #"Bassus " - - % incipit - \clef "bass" - r\maxima % eight bars - f1. s2 % two bars - \skip 1*1 % one bar - - % main - \clef "bass" - R1 | - R1 | - R1 | - R1 | - g2. e4 | - \once \override NoteHead #'transparent = ##t e1 | - g\breve | - } -} - -bassusLyrics = \lyricmode { - % incipit - IV- - - % main - Ju -- bi- | - "..." | - -us. | -} - -\score { - \new StaffGroup = choirStaff << - \new Voice = - "discantusNotes" << \global \discantusNotes >> - \new Lyrics = - "discantusLyrics" \lyricsto discantusNotes { \discantusLyrics } - \new Voice = - "altusNotes" << \global \altusNotes >> - \new Lyrics = - "altusLyrics" \lyricsto altusNotes { \altusLyrics } - \new Voice = - "tenorNotes" << \global \tenorNotes >> - \new Lyrics = - "tenorLyrics" \lyricsto tenorNotes { \tenorLyrics } - \new Voice = - "bassusNotes" << \global \bassusNotes >> - \new Lyrics = - "bassusLyrics" \lyricsto bassusNotes { \bassusLyrics } - >> - \layout { - \context { - \Score - - % no bars in staves - \override BarLine #'transparent = ##t - - % incipit should not start with a start delimiter - \remove "System_start_delimiter_engraver" - } - \context { - \Voice - - % no slurs - \override Slur #'transparent = ##t - - % Comment in the below "\remove" command to allow line - % breaking also at those barlines where a note overlaps - % into the next bar. The command is commented out in this - % short example score, but especially for large scores, you - % will typically yield better line breaking and thus improve - % overall spacing if you comment in the following command. - %\remove "Forbid_line_break_engraver" - } - } -} - - - - diff --git a/input/lsr/ancient-notation.snippet-list b/input/lsr/ancient-notation.snippet-list deleted file mode 100644 index 8dabc7f59b..0000000000 --- a/input/lsr/ancient-notation.snippet-list +++ /dev/null @@ -1,11 +0,0 @@ -adding-a-figured-bass-above-or-below-the-notes.ly -ancient-fonts.ly -ancient-notation-template----modern-transcription-of-gregorian-music.ly -ancient-notation-template----modern-transcription-of-mensural-music.ly -ancient-time-signatures.ly -chant-or-psalms-notation.ly -custodes.ly -incipit.ly -mensurstriche-layout-bar-lines-between-the-staves.ly -rest-styles.ly -transcription-of-ancient-music-with-incipit.ly diff --git a/input/lsr/ancient-time-signatures.ly b/input/lsr/ancient-time-signatures.ly deleted file mode 100644 index 7b89bcc437..0000000000 --- a/input/lsr/ancient-time-signatures.ly +++ /dev/null @@ -1,28 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "ancient-notation" - -%% Translation of GIT committish: 00e3a8264e138ad61b4f115a173190d5e9dc7533 - texidoces = " -Las indicaciones de compás también se pueden grabar en estilo antiguo. - -" - doctitlees = "Indicaciones de compás antiguas" - - texidoc = " -Time signatures may also be engraved in an old style. - - - -" - doctitle = "Ancient time signatures" -} % begin verbatim - -{ - \override Staff.TimeSignature #'style = #'neomensural - s1 -} - diff --git a/input/lsr/applying-note-head-styles-depending-on-the-step-of-the-scale.ly b/input/lsr/applying-note-head-styles-depending-on-the-step-of-the-scale.ly deleted file mode 100644 index 986b9ffd47..0000000000 --- a/input/lsr/applying-note-head-styles-depending-on-the-step-of-the-scale.ly +++ /dev/null @@ -1,102 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "pitches, editorial-annotations" - -%% Translation of GIT committish: 48f804da6794a7bc8e7fdd4b1649f485b0b09d26 - doctitlees = "Aplicar estilos de cabeza según la nota de la escala" - texidoces = " -La propiedad @code{shapeNoteStyles} se puede usar para definir varios -estilos de cabezas de nota para cada grado de la escala (según esté -establecido por la armadura o por la propiedad \"tonic\"). Esta -propiedad requiere un conjunto de símbolos, que pueden ser puramente -arbitrarios (se permiten expresiones geométricas como @code{triangle}, -triángulo, @code{cross}, aspas, y @code{xcircle}, círculo con aspas) o -basados en una antigua tradición americana de grabado (ciertos nombres -de nota latinos trambién se permiten). - -Dicho esto, para imitar antiguos cancioneros americanos, existen varios -estilos predefinidos de cabezas de nota disponibles a través de -instrucciones de abreviatura como @code{\\aikenHeads} o -@code{\\sacredHarpHeads}. - -Este ejemplo muestra distintas formas de obtener cabezas de notas con forma, -y muestra la capacidad de transportar una melodía sin perder la -correspondencia entre las funciones armónicas y los estilos de cabezas de -nota. - -" - -%% Translation of GIT committish: e75f1604a1b866c853dee42dbffcb7800c706a5f - doctitlede = "Notenkopfstile besierend auf der Tonleiterstufe erstellen" - texidocde = " -Die @code{shapeNoteStyles}-(NotenFormenStile)-Eigenschaft kann benutzt -werden, um verschiedene Notenstile für jeden Schritt der Tonleiter -zudefinieren (vorgegeben von der Tonart oder der @q{tonic} -(Tonika)-Eigneschaft. Diese Eigenschaft braucht eine Anzahl von Symbolen, -welche beliebig sein können (geometrische Ausdrücke wie @code{triangle} -(Dreieck), @code{cross} (Kreuz) und @code{xcircle} (X-Kreis) sind erlaubt) -oder basierend auf einer alten amerikanischen Notensatztradition (einige -lateinische Notenbezeichnungen sind auch erlaubt). - -Um alte amerikanische Liederbücher zu imitieren, gibt es einige -vordefinierte Notenstile wie etwa @code{\\aikenHeads} (im Stil von Aiken) -oder @code{\\sacredHarpHeads} (im Stil der Sacred Harp-Tradition). - -Dieses Beispiel zeigt, wie man unterschiedlich geformte Noten erhält und -eine Melodie transponieren kann, ohne dass das Verhältnis zwischen den -harmonischen Funktionen und dem Notenstil verloren geht. - -" - - texidoc = " -The @code{shapeNoteStyles} property can be used to define various note -head styles for each step of the scale (as set by the key signature or -the \"tonic\" property). This property requires a set of symbols, which -can be purely arbitrary (geometrical expressions such as -@code{triangle}, @code{cross}, and @code{xcircle} are allowed) or based -on old American engraving tradition (some latin note names are also -allowed). - -That said, to imitate old American song books, there are several -predefined note head styles available through shortcut commands such as -@code{\\aikenHeads} or @code{\\sacredHarpHeads}. - -This example shows different ways to obtain shape note heads, and -demonstrates the ability to transpose a melody without losing the -correspondence between harmonic functions and note head styles. - -" - doctitle = "Applying note head styles depending on the step of the scale" -} % begin verbatim - -fragment = { - \key c \major - c2 d - e2 f - g2 a - b2 c -} - -\score { - \new Staff { - \transpose c d - \relative c' { - \set shapeNoteStyles = #'#(do re mi fa - #f la ti) - \fragment - } - - \break - - \relative c' { - \set shapeNoteStyles = #'#(cross triangle fa #f - mensural xcircle diamond) - \fragment - } - } - \layout { ragged-right = ##t } -} - diff --git a/input/lsr/arabic-improvisation.ly b/input/lsr/arabic-improvisation.ly deleted file mode 100644 index 9435fb864f..0000000000 --- a/input/lsr/arabic-improvisation.ly +++ /dev/null @@ -1,51 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "world-music" - -%% Translation of GIT committish: c2b2eafa00dc451e79e06f03ad1749a76b3c3947 - texidoces = " -Para las improvisaciones o @emph{taqasim} que son libres durante unos -momentos, se puede omitir la indicación de compás y se puede usar -@code{\cadenzaOn}. Podría ser necesario ajustar el estilo de -alteraciones accidentales, porque la ausencia de líneas divisorias -hará que la alteración aparezca una sola vez. He aquí un ejemplo de -cómo podría ser el comienzo de una improvisación @emph{hijaz}: - -" -doctitlees = "Improvisación de música árabe" - -%% Translation of GIT committish: 33f623301a41fcc53efadf96bca1c72834763415 - texidocde = " -Bei Improvisation oder @emph{taqasim}, die zeitlich frei gespielt -werden, kann die Taktart ausgelassen werden und @code{\cadenzaOn} -kann eingesetzt werden. Es kann nötig sein, den Versetzungszeichenstil -anzupassen, weil sonst die Versetzungszeichen nur einmal ausgegeben -werden, da keine Taktlinien gesetzt sind. Hier ein Beispiel, wie -der Begin einer @emph{hijaz}-Improvisation aussehen könnte: - -" - - doctitlede = "Arabische Improvisation" - - texidoc = " -For improvisations or taqasim which are temporarily free, the time -signature can be omitted and @code{\\cadenzaOn} can be used. Adjusting -the accidental style might be required, since the absence of bar lines -will cause the accidental to be marked only once. Here is an example -of what could be the start of a hijaz improvisation: - -" - doctitle = "Arabic improvisation" -} % begin verbatim - -\include "arabic.ly" - -\relative sol' { - \key re \kurd - #(set-accidental-style 'forget) - \cadenzaOn - sol4 sol sol sol fad mib sol1 fad8 mib re4. r8 mib1 fad sol -} diff --git a/input/lsr/automatic-beam-subdivisions.ly b/input/lsr/automatic-beam-subdivisions.ly deleted file mode 100644 index 359a133009..0000000000 --- a/input/lsr/automatic-beam-subdivisions.ly +++ /dev/null @@ -1,48 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms" - -%% Translation of GIT committish: 00e3a8264e138ad61b4f115a173190d5e9dc7533 - texidoces = " -Se pueden subdividir las barras automáticamente. Estableciendo la -propiedad @code{subdivideBeams}, las barras se subdividen en -posiciones de pulso (tal y como se especifica en @code{beatLength}). - -" - doctitlees = "Subdivisiones de barra automáticas" - - texidoc = " -Beams can be subdivided automatically. By setting the property -@code{subdivideBeams}, beams are subdivided at beat positions (as -specified in @code{beatLength}). - -" - doctitle = "Automatic beam subdivisions" -} % begin verbatim - -\new Staff { - \relative c'' { - << - { - \voiceOne - \set subdivideBeams = ##t - b32[ a g f c' b a g - b32^"subdivide beams" a g f c' b a g] - } - \new Voice { - \voiceTwo - b32_"default"[ a g f c' b a g - b32 a g f c' b a g] - } - >> - \oneVoice - \set beatLength = #(ly:make-moment 1 8) - b32^"beatLength 1 8"[ a g f c' b a g] - \set beatLength = #(ly:make-moment 1 16) - b32^"beatLength 1 16"[ a g f c' b a g] - } -} - diff --git a/input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly b/input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly deleted file mode 100644 index 091465e0f1..0000000000 --- a/input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly +++ /dev/null @@ -1,81 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms" - -%% Translation of GIT committish: 00e3a8264e138ad61b4f115a173190d5e9dc7533 - texidoces = " -En un compás sencillo como 2/2 ó 4/4, las corcheas se barran de forma -predeterminada como dos grupos de cuatro. - -Utilizando un macro que seobreescribe el comportamiento automático del -barrado, este fragmento de código cambia el barrado a pulsos de negra. - -" - doctitlees = "Barras automáticas de dos en dos en los compases de 4/4 o de 2/2" - -%% Translation of GIT committish: 1154b407d42f303a024598296ad36ab6c93e2b5a - texidocfr = " -Dans une métrique simple comme 4/4 ou 2/2, les croches sont ligaturées -par défaut en deux groupes de quatre. - -En utilisant une macro qui modifie le comportement des ligatures -automatiques, voici comment obtenir des ligatures basées sur la valeur -d'une noire. - -" - doctitlefr = "Ligature automatique deux par deux, aussi bien en 4/4 qu'en 2/2" - - texidoc = " -In a simple time signature of 2/2 or 4/4, 8th notes are beamed by -default as two sets of four. - -Using a macro which overrides the autobeaming behavior, this snippet -changes the beaming to quarter note beats. - -" - doctitle = "Automatic beams two per two in 4/4 or 2/2 time signature" -} % begin verbatim - -% Automatic beams two per two in 4/4 or 2/2 time signature -% _____ -% Default | | | | -% _ _ -% Required | | | | - -% macro for beamed two per two in 2/2 and 4/4 time signature -qBeam = { - #(override-auto-beam-setting '(end 1 8 * *) 1 4 'Staff) - #(override-auto-beam-setting '(end 1 8 * *) 2 4 'Staff) - #(override-auto-beam-setting '(end 1 8 * *) 3 4 'Staff) -} - -\score { - << - \new Staff { - \relative c'' { - \time 4/4 - g8-"without the macro" g g g g g g g - g8 g g g4 g8 g g - } - } - %Use the macro - \new Staff { - \relative c'' { - \time 4/4 - \qBeam - g8-"with the macro" g g g g g g g - g8 g g g4 g8 g g - } - } - >> - \layout { - \context { - \Staff - \override TimeSignature #'style = #'() - } - } -} - diff --git a/input/lsr/avoiding-collisions-with-chord-fingerings.ly b/input/lsr/avoiding-collisions-with-chord-fingerings.ly deleted file mode 100644 index fb1bbda9b8..0000000000 --- a/input/lsr/avoiding-collisions-with-chord-fingerings.ly +++ /dev/null @@ -1,39 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms, editorial-annotations, chords, tweaks-and-overrides" - - texidoc = " -Fingerings and string numbers applied to individual notes will -automatically avoid beams and stems, but this is not true by default -for fingerings and string numbers applied to the individual notes of -chords. The following example shows how this default behavior can be -overridden. - -" - doctitle = "Avoiding collisions with chord fingerings" -} % begin verbatim - -\relative c' { - \set fingeringOrientations = #'(up) - \set stringNumberOrientations = #'(up) - \set strokeFingerOrientations = #'(up) - - % Default behavior - r8 - 8 - 8 - 8 - - % Corrected to avoid collisions - r8 - \override Fingering #'add-stem-support = ##t - 8 - \override StringNumber #'add-stem-support = ##t - 8 - \override StrokeFinger #'add-stem-support = ##t - 8 -} - diff --git a/input/lsr/beam-endings-in-score-context.ly b/input/lsr/beam-endings-in-score-context.ly deleted file mode 100644 index 6dfd211618..0000000000 --- a/input/lsr/beam-endings-in-score-context.ly +++ /dev/null @@ -1,69 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms" - -%% Translation of GIT committish: 43774ddb81b9017802da04ba2862cae4586935b2 - texidoces = " -Las reglas de final de barra especificadas en el contexto -@code{Score} se aplican a todos los pentagramas, pero se pueden -modificar tanto en los niveles de @code{Staff} como de -@code{Voice}: - -" - doctitlees = "Finales de barra en el contexto Score" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Balkenenderegeln, die im @code{Score}-Kontext definiert werden, wirken -sich auf alle Systeme aus, können aber auf @code{Staff}- und -@code{Voice}-Ebene neu verändert werden: - -" - doctitlede = "Balkenenden auf Score-Ebene" - - texidoc = " -Beam-ending rules specified in the @code{Score} context apply to all -staves, but can be modified at both @code{Staff} and @code{Voice} -levels: - -" - doctitle = "Beam endings in Score context" -} % begin verbatim - -\relative c'' { - \time 5/4 - % Set default beaming for all staves - #(score-override-auto-beam-setting '(end * * 5 4) 3 8) - #(score-override-auto-beam-setting '(end * * 5 4) 7 8) - << - \new Staff { - c8 c c c c c c c c c - } - \new Staff { - % Modify beaming for just this staff - #(override-auto-beam-setting '(end * * 5 4) 6 8 'Staff) - #(revert-auto-beam-setting '(end * * 5 4) 7 8 'Staff) - c8 c c c c c c c c c - } - \new Staff { - % Inherit beaming from Score context - << - { - \voiceOne - c8 c c c c c c c c c - } - % Modify beaming for this voice only - \new Voice { - \voiceTwo - #(override-auto-beam-setting '(end * * 5 4) 6 8) - #(revert-auto-beam-setting '(end * * 5 4) 7 8) - a8 a a a a a a a a a - } - >> - } - >> -} - diff --git a/input/lsr/beam-grouping-in-7-8-time.ly b/input/lsr/beam-grouping-in-7-8-time.ly deleted file mode 100644 index c03eaf34c1..0000000000 --- a/input/lsr/beam-grouping-in-7-8-time.ly +++ /dev/null @@ -1,47 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms" - -%% Translation of GIT committish: 151f1bb8c0aae8294e62d0470246ee1019aedfbc - texidoces = " -No está especificada ninguna agrupación predeterminada automática -de las barras para el compás de 7/8, de forma que si se requieren -barras automáticas se debe especificar la forma de agrupamiento. -Por ejemplo, para agrupar todas las barras en la forma 2-3-2 en el -compás de 7/8, especificamos los finales de barra en 2/8 y 5/8: - -" - doctitlees = "Agrupamiento de las barras en el compás de 7/8" - -%% Translation of GIT committish: 6ce7f350682dfa99af97929be1dec6b9f1cbc01a -texidocde = " -Es gibt keine automatischen Balkengruppen für 7/8-Takte. Wenn diese -Taktart benötigt wird, müssen die Gruppierungen definiert werden. Um -beispielsweise alle Noten in 2/8-3/8-2/8 aufzuteilen, müssen Balkenenden -für 2/8 und 5/8 definiert werden: - -" - doctitlede = "Balkengruppen für 7/8-Takte" - - texidoc = " -There are no default automatic beam groupings specified for 7/8 time, -so if automatic beams are required the grouping must be specified. For -example, to group all beams 2-3-2 in 7/8 time, specify beam endings at -2/8 and 5/8: - -" - doctitle = "Beam grouping in 7/8 time" -} % begin verbatim - -\relative c'' { - \time 7/8 - % rhythm 2-3-2 - a8 a a a a a a - #(override-auto-beam-setting '(end * * 7 8) 2 8) - #(override-auto-beam-setting '(end * * 7 8) 5 8) - a8 a a a a a a -} - diff --git a/input/lsr/beams-across-line-breaks.ly b/input/lsr/beams-across-line-breaks.ly deleted file mode 100644 index 57eb66e085..0000000000 --- a/input/lsr/beams-across-line-breaks.ly +++ /dev/null @@ -1,50 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms" - -%% Translation of GIT committish: 151f1bb8c0aae8294e62d0470246ee1019aedfbc - texidoces = " -Normalmente están prohibidos los saltos de línea si las barras -atraviesan las líneas divisorias. Se puede cambiar este -comportamiento como se muestra aquí: - -" - doctitle = "Barras que atraviesan saltos de línea" - -%% Translation of GIT committish: 6ce7f350682dfa99af97929be1dec6b9f1cbc01a - -texidocde = " -Zeilenumbrüche sind normalerweise während Balken verboten. Das kann geändert -werden. - -" - doctitlede = "Balken über Zeilenumbrüche" - - -%% Translation of GIT committish: b3196fadd8f42d05ba35e8ac42f7da3caf8a3079 - - texidocfr = " -Il est normalement impensable qu'un saut de ligne tombe au milieu d'une -ligature. LilyPond permet néanmoins de l'obtenir. - -" - doctitlefr = "Ligature au moment d'un saut de ligne" - - texidoc = " -Line breaks are normally forbidden when beams cross bar lines. This -behavior can be changed as shown: - -" - doctitle = "Beams across line breaks" -} % begin verbatim - -\relative c'' { - \override Beam #'breakable = ##t - c8 c[ c] c[ c] c[ c] c[ \break - c8] c[ c] c[ c] c[ c] c -} - - diff --git a/input/lsr/blanking-staff-lines-using-the--whiteout-command.ly b/input/lsr/blanking-staff-lines-using-the--whiteout-command.ly deleted file mode 100644 index f75e409dfc..0000000000 --- a/input/lsr/blanking-staff-lines-using-the--whiteout-command.ly +++ /dev/null @@ -1,33 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "editorial-annotations, text" - -%% Translation of GIT committish: 55ea64f469d9c1703222654c9e5bc8490b04a67a - texidoces = " -La instrucción @code{\\whiteout} intercala un rectángulo blanco -debajo de un elemento de marcado. Este rectángulo blanco no tapa -a ningún otro objeto gráfico, puesto que las líneas del pentagrama -están en una capa inferior a la de la mayor parte de los otros -objetos. - -" - doctitlees = "Poner en blanco las líneas del pentagrama utilizando la instrucción \\whiteout" - - texidoc = " -The @code{\\whiteout} command underlays a markup with a white box. -Since staff lines are in a lower layer than most other grobs, this -white box will not overlap any other grob. - -" - doctitle = "Blanking staff lines using the \\whiteout command" -} % begin verbatim - -\layout { ragged-right = ##f } -\relative c' { - \override TextScript #'extra-offset = #'(2 . 4) - c2-\markup { \whiteout \pad-markup #0.5 "middle C" } c -} - diff --git a/input/lsr/book-parts.ly b/input/lsr/book-parts.ly deleted file mode 100644 index 609b607224..0000000000 --- a/input/lsr/book-parts.ly +++ /dev/null @@ -1,68 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "paper-and-layout" - - texidoc = " -@code{\\bookpart} can be used to split a book into several parts. Each -part last page can be affected by @code{ragged-last-bottom}. Header and -footer markups can detect a part last page, and make the difference -with the book last page. - -" - doctitle = "Book parts" -} % begin verbatim - -#(set-default-paper-size "a6") - -\book { - - %% book paper, which is inherited by all children bookparts - \paper { - ragged-last-bottom = ##t - %% Page footer: add a different part-tagline at part last page - oddFooterMarkup = \markup { - \column { - \fill-line { - %% Copyright header field only on book first page. - \on-the-fly #first-page \fromproperty #'header:copyright - } - \fill-line { - %% Part tagline header field only on each part last page. - \on-the-fly #part-last-page \fromproperty #'header:parttagline - } - \fill-line { - %% Tagline header field only on book last page. - \on-the-fly #last-page \fromproperty #'header:tagline - } - } - } - } - - %% book header, which is inherited by the first bookpart - \header { - title = "Book title" - copyright = "Copyright line on book first page" - parttagline = "Part tagline" - tagline = "Book tagline" - } - - \bookpart { - %% a different page breaking function may be used on each part - \paper { #(define page-breaking optimal-page-breaks) } - \header { subtitle = "First part" } - \markup { The first book part } - \markup { a page break } - \pageBreak - \markup { first part last page } - \markup \wordwrap { with ragged-last-bottom (see the space below this text) } - } - - \bookpart { - \header { subtitle = "Second part" } - { c' } - } - -} diff --git a/input/lsr/breaks.snippet-list b/input/lsr/breaks.snippet-list deleted file mode 100644 index 0dd9ee20d6..0000000000 --- a/input/lsr/breaks.snippet-list +++ /dev/null @@ -1,3 +0,0 @@ -adding-an-extra-staff-at-a-line-break.ly -positioning-segno-and-coda-with-line-break.ly -removing-the-first-empty-line.ly diff --git a/input/lsr/breathing-signs.ly b/input/lsr/breathing-signs.ly deleted file mode 100644 index b9bad0cfc1..0000000000 --- a/input/lsr/breathing-signs.ly +++ /dev/null @@ -1,40 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks" - - texidoc = " -Breathing signs are available in different tastes: commas (default), -ticks, vees and \"railroad tracks\" (caesura). - -" - doctitle = "Breathing signs" -} % begin verbatim - -\new Staff \relative c'' { - \key es \major - \time 3/4 - % this bar contains no \breathe - << { g4 as g } \\ { es4 bes es } >> | - % Modern notation: - % by default, \breathe uses the rcomma, just as if saying: - % \override BreathingSign #'text = #(make-musicglyph-markup "scripts.rcomma") - << { g4 as g } \\ { es4 \breathe bes es } >> | - - % rvarcomma and lvarcomma are variations of the default rcomma and lcomma - % N.B.: must use Staff context here, since we start a Voice below - \override Staff.BreathingSign #'text = \markup { \musicglyph #"scripts.rvarcomma" } - << { g4 as g } \\ { es4 \breathe bes es } >> | - - % vee - \override BreathingSign #'text = \markup { \musicglyph #"scripts.upbow" } - es8[ d es f g] \breathe f | - - % caesura - \override BreathingSign #'text = \markup { \musicglyph #"scripts.caesura.curved" } - es8[ d] \breathe es[ f g f] | - es2 r4 \bar "||" -} - diff --git a/input/lsr/broken-crescendo-hairpin.ly b/input/lsr/broken-crescendo-hairpin.ly deleted file mode 100644 index 2baa30cf8f..0000000000 --- a/input/lsr/broken-crescendo-hairpin.ly +++ /dev/null @@ -1,77 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks" - -%% Translation of GIT committish: dff50e8e1d3134657a6b6203b9c93826dc4cef65 - texidoces = " -Para hacer invisibles partes de un regulador de crescendo, se usa -el método de dibujar un rectángulo blanco encima de la parte -respectiva del regulador, tapándola. El rectángulo se define como -código PostScript dentro de un elemento de marcado de texto. - -Para realizar un ajuste fino de la posición y el tamaño del -elemento de marcado, se puede establecer el número que precede a -@code{setgray} en la definición de PostScript a un valor menor que -la unidad, haciendo que sea de color gris. Los dos números que -están antes de @code{scale} en el código PostScript son los -responsables del ancho y la altura del rectángulo, y los dos -números que están antes de @code{translate} cambian las -coordenadas X e Y de origen del rectángulo. - -Asegúrse de poner el regulador en una capa más baja que el -elemento de marcado de texto para trazar el rectángulo encima del -regulador. - -" - doctitlees = "Regulador interrumpido" - - texidoc = " -In order to make parts of a crescendo hairpin invisible, the following -method is used: A white rectangle is drawn on top of the respective -part of the crescendo hairpin, making it invisible. The rectangle is -defined as postscript code within a text markup. - -To fine-tune the position and size of the markup, the number preceding -@code{setgray} in the postscript definition can be set to a value less -than one, making it grey. The two numbers before @code{scale} in the -postscript code are responsible for the width and height of the -rectangle, the two numbers before @code{translate} change the x- and -y-origin of the rectangle. - - -Make sure to put the hairpin in a lower layer than the text markup to -draw the rectangle over the hairpin. - -" - doctitle = "Broken Crescendo Hairpin" -} % begin verbatim - -\relative c' { - << { - \dynamicUp - \override DynamicLineSpanner #'staff-padding = #4 - r2 r16 c'8.\pp r4 - } - \\ - { - \override DynamicLineSpanner #'layer = #0 - des,2\mf\< ~ - \override TextScript #'layer = #2 - des16_\markup { - \postscript #" - 1.9 -8 translate - 5 4 scale - 1 setgray - 0 0 moveto - 0 1 lineto - 1 1 lineto - 1 0 lineto - 0 0 lineto - fill" - } - r8. des4 ~ des16->\sff - } >> -} diff --git a/input/lsr/caesura-railtracks-with-fermata.ly b/input/lsr/caesura-railtracks-with-fermata.ly deleted file mode 100644 index f18af26e2a..0000000000 --- a/input/lsr/caesura-railtracks-with-fermata.ly +++ /dev/null @@ -1,44 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks, tweaks-and-overrides" - -%% Translation of GIT committish: dff50e8e1d3134657a6b6203b9c93826dc4cef65 - texidoces = " -A veces se denota una «cesura» con una doble marca de respiración -parecida a las vías del tren, con un calderón encima. Este -fragmento de código presenta una combinación de estas dos marcas, -visualmente satisfactoria. - -" - doctitlees = "Cesura tipo \"vías del tren\" con calderón" - - texidoc = " -A caesura is sometimes denoted by a double \"railtracks\" breath mark -with a fermata sign positioned above. This snippet should present an -optically pleasing combination of railtracks and fermata. - -" - doctitle = "Caesura (\"railtracks\") with fermata" -} % begin verbatim - - -\relative c'' { - c2. - % construct the symbol - \override BreathingSign #'text = \markup { - \line { - \musicglyph #"scripts.caesura.curved" - \translate #'(-1.75 . 1.6) - \musicglyph #"scripts.ufermata" - } - } - \breathe c4 - % set the breathe mark back to normal - \revert BreathingSign #'text - c2. \breathe c4 - \bar "|." -} - diff --git a/input/lsr/center-text-below-hairpin-dynamics.ly b/input/lsr/center-text-below-hairpin-dynamics.ly deleted file mode 100644 index 48c1469a3c..0000000000 --- a/input/lsr/center-text-below-hairpin-dynamics.ly +++ /dev/null @@ -1,50 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks, text" - -%% Translation of GIT committish: dff50e8e1d3134657a6b6203b9c93826dc4cef65 - texidoces = " -Este ejemplo proporciona una función para tipografiar un regulador -con texto por debajo, como \"molto\" o \"poco\". El ejemplo -ilustra también cómo modificar la manera en que se imprime -normalmente un objeto, utilizando código de Scheme. - -" - doctitlees = "Centrar texto debajo de un regulador" - - texidoc = " -This example provides a function to typeset a hairpin (de)crescendo -with some additional text below it, such as \"molto\" or \"poco\". The -example also illustrates how to modify the way an object is normally -printed, using some Scheme code. - -" - doctitle = "Center text below hairpin dynamics" -} % begin verbatim - -hairpinWithCenteredText = -#(define-music-function (parser location text) (markup?) -#{ - \override Voice.Hairpin #'stencil = #(lambda (grob) - (ly:stencil-aligned-to - (ly:stencil-combine-at-edge - (ly:stencil-aligned-to (ly:hairpin::print grob) X CENTER) - Y DOWN - (ly:stencil-aligned-to (grob-interpret-markup grob $text) X CENTER)) - X LEFT)) -#}) - -hairpinMolto = \hairpinWithCenteredText \markup { \italic molto } -hairpinMore = \hairpinWithCenteredText \markup { \larger moltissimo } - -\layout { ragged-right = ##f } - -\relative c' { - \hairpinMolto - c2\< c\f - \hairpinMore - c2\< c\f -} diff --git a/input/lsr/changing--flageolet-mark-size.ly b/input/lsr/changing--flageolet-mark-size.ly deleted file mode 100644 index 1ed164a0d0..0000000000 --- a/input/lsr/changing--flageolet-mark-size.ly +++ /dev/null @@ -1,55 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks, unfretted-strings" - -%% Translation of GIT committish: dff50e8e1d3134657a6b6203b9c93826dc4cef65 - texidoces = " -Para hacer más pequeño el círculo de @code{\\flageolet} (armónico) -utilice la siguiente función de Scheme. - -" - doctitlees = "Cambiar el tamaño de la marca de \\flageolet" - -%% Translation of GIT committish: 0099693675b95c7ec6664d7277f22411a14e9c1b - - texidocfr = " -Il est possible de rapetisser le cercle d'un @code{\\flageolet} grâce -à une fonction Scheme. - -" - doctitlefr = "Modifier la taille d'un \\flageolet" - -%% Translation of GIT committish: 33f623301a41fcc53efadf96bca1c72834763415 - texidocde = " -Um den @code{\\flageolet}-Kreis kleiner zu machen, kann diese -Scheme-Funktion eingesetzt werden. - -" - doctitlede = "\\flageolet-Zeichen verkleinern" - - texidoc = " -To make the @code{\\flageolet} circle smaller use the following Scheme -function. - -" - doctitle = "Changing \\flageolet mark size" -} % begin verbatim - -smallFlageolet = -#(let ((m (make-music 'ArticulationEvent - 'articulation-type "flageolet"))) - (ly:music-set-property! m 'tweaks - (acons 'font-size -3 - (ly:music-property m 'tweaks))) - m) - -\layout { ragged-right = ##f } - -\relative c'' { - d4^\flageolet_\markup { default size } d_\flageolet - c4^\smallFlageolet_\markup { smaller } c_\smallFlageolet -} - diff --git a/input/lsr/changing-a-single-notes-size-in-a-chord.ly b/input/lsr/changing-a-single-notes-size-in-a-chord.ly deleted file mode 100644 index 38befa698d..0000000000 --- a/input/lsr/changing-a-single-notes-size-in-a-chord.ly +++ /dev/null @@ -1,43 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "simultaneous-notes, editorial-annotations, tweaks-and-overrides" - -%% Translation of GIT committish: 55ea64f469d9c1703222654c9e5bc8490b04a67a - texidoces = " -Se pueden modificar notas individuales de un acorde con la -instrucción @code{\\tweak}, alterando la propiedad -@code{font-size}. - -Dentro de un acorde (entre ángulos simples @code{< >}), antes de -la nota que queremos alterar, situamos la instrucción -@code{\\tweak} seguida por @code{#'font-size} y definimos el -tamaño adecuado como @code{#-2} (una cabeza pequeña). - -" - doctitlees = "Modificar el tamaño de una nota suelta de un acorde" - - texidoc = " -Individual note heads in a chord can be modified with the -@code{\\tweak} command inside a chord, by altering the @code{font-size} -property. - - -Inside the chord (within the brackets @code{< >}), before the note to -be altered, place the @code{\\tweak} command, followed by -@code{#'font-size} and define the proper size like @code{#-2} (a tiny -notehead). - - - -" - doctitle = "Changing a single note's size in a chord" -} % begin verbatim - -\layout { ragged-right = ##t } -\relative { - <\tweak #'font-size #+2 c e g c \tweak #'font-size #-2 e>1^\markup { A tiny e }_\markup { A big c } -} - diff --git a/input/lsr/changing-beam-knee-gap.ly b/input/lsr/changing-beam-knee-gap.ly deleted file mode 100644 index f247b66fe6..0000000000 --- a/input/lsr/changing-beam-knee-gap.ly +++ /dev/null @@ -1,66 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms" - -%% Translation of GIT committish: 151f1bb8c0aae8294e62d0470246ee1019aedfbc - texidoces = " -Se insertan automáticamente barras en ángulo cuando se detecta un -intervalo muy grande entre las notas. Se puede hacer un ajuste -fino de este comportamiento a través de la propiedad -@code{auto-knee-gap}. Se traza una barra doblada si el salto es -mayor que el valor de @code{auto-knee-gap} más el ancho del objeto -barra (que depende de la duración de las notas y de la inclinación -de la barra). De forma predeterminada @code{auto-knee-gap} está -establecido a 5.5 espacios de pentagrama. - -" - doctitlees = "Cambiar el salto de las barras en ángulo" - -%% Translation of GIT committish: 6ce7f350682dfa99af97929be1dec6b9f1cbc01a -texidocde = " -Balken mit Hälsen in unterschiedliche Richtungen werden automatisch -erstellt, wenn ein großer Sprung zwischen Tonhöhen gefunden wird. Dieses -Verhalten kann durch die @code{auto-knee-gap}-Eigenschaft beeinflusst -werden. Ein derartiger Knie-Balken wird erstellt, wenn der Abstand größer -ist als der Wert von @code{auto-knee-gap} plus der Dicke des Balkens -(was von der Notendauer und der Neigung des Balkens abhängt). Der -Standardwert von @code{auto-knee-gap} ist 5.5 Notensystemabstände. - -" - doctitlede = "Balken für weit auseinander liegende Noten ändern" - - -%% Translation of GIT committish: b3196fadd8f42d05ba35e8ac42f7da3caf8a3079 - texidocfr = " -LilyPond insère automatiquement des ligatures coudées --- certaines -hampes vers le haut, d'autres vers le bas --- lorsqu'il détecte un -intervalle important entre des têtes de notes. Ce comportement peut être -changé par l'intermédiaire de l'objet @code{auto-knee-gap} --- défini -par défaut à @samp{5,5} espace, plus la largeur et la pente de la -ligature en question. - -" - doctitlefr = "Ligature et directions de hampe inversées" - - texidoc = " -Kneed beams are inserted automatically when a large gap is detected -between the note heads. This behavior can be tuned through the -@code{auto-knee-gap} property. A kneed beam is drawn if the gap is -larger than the value of @code{auto-knee-gap} plus the width of the -beam object (which depends on the duration of the notes and the slope -of the beam). By default @code{auto-knee-gap} is set to 5.5 staff -spaces. - -" - doctitle = "Changing beam knee gap" -} % begin verbatim - -{ - f8 f''8 f8 f''8 - \override Beam #'auto-knee-gap = #6 - f8 f''8 f8 f''8 -} - diff --git a/input/lsr/changing-chord-separator.ly b/input/lsr/changing-chord-separator.ly deleted file mode 100644 index 48529ce579..0000000000 --- a/input/lsr/changing-chord-separator.ly +++ /dev/null @@ -1,38 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "chords" - -%% Translation of GIT committish: 7e2910d2bc6167b10cfe328eb17a5f710f2a515a - texidoces = " -Se puede establecer el separador entre las distintas partes del -nombre de un acorde para que sea cualquier elemento de marcado. - -" - doctitlees = "Modificación del separador de acordes" - -%% Translation of GIT committish: 33f623301a41fcc53efadf96bca1c72834763415 - texidocde = " -Der Trenner zwischen unterschiedlichen Teilen eines Akkordsymbols kann -beliebeiger Text sein. - -" - doctitlede = "Akkordsymboltrenner verändern" - - texidoc = " -The separator between different parts of a chord name can be set to any -markup. - -" - doctitle = "Changing chord separator" -} % begin verbatim - -\chords { - c:7sus4 - \set chordNameSeparator - = \markup { \typewriter | } - c:7sus4 -} - diff --git a/input/lsr/changing-form-of-multi-measure-rests.ly b/input/lsr/changing-form-of-multi-measure-rests.ly deleted file mode 100644 index a7e6b2b3c5..0000000000 --- a/input/lsr/changing-form-of-multi-measure-rests.ly +++ /dev/null @@ -1,56 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms, tweaks-and-overrides" - -%% Translation of GIT committish: a634a20e0ab2a874ff8bf423e5651139df8733fc - doctitlees = "Cambiar la forma de los silencios multicompás" - texidoces = " -Si hay diez compases de silencio o menos, se imprime en el pentagrama -una serie de silencios de breve y longa (conocidos en alemán como -\"Kirchenpausen\", «silencios eclesiásticos»); en caso contrario se -muestra una barra normal. Este número predeterminado de diez se -puede cambiar sobreescribiendo la propiedad @code{expand-limit}: - -" - -%% Translation of GIT committish: b4f6b5ad66d016c312cddc8d4026ad852f9a7c36 - texidocde = " -Wenn zehn oder weniger Pausentakte vorkommen, wird eine Reihe von Longa- -und Brevispausen (auch Kirchenpausen genannt) gesetzt, bei mehr Takten -wird eine Line mit der Taktanzahl ausgegeben. Der vorgegebene Wert von -zehn kann geändert werden, indem man die @code{expand-limit}-Eigenschaft -setzt: -" - doctitlede = "Die Erscheinung von Pausentakten ändern" - - -%% Translation of GIT committish: e71f19ad847d3e94ac89750f34de8b6bb28611df -texidocfr = " -Dans le cas où ce silence dure mois de dix mesures, LilyPond imprime sur -la portée des @qq{ silences d'église } -- @emph{Kirchenpause} en -allemand -- et qui sont une simple suite de rectangles. La propriété -@code{expand-limit} permet d'obtenir un silence unique : - -" - doctitlefr = "Modifier l'apparence d'un silence multi-mesures" - - texidoc = " -If there are ten or fewer measures of rests, a series of longa and -breve rests (called in German \"Kirchenpausen\" - church rests) is -printed within the staff; otherwise a simple line is shown. This -default number of ten may be changed by overriding the -@code{expand-limit} property. - -" - doctitle = "Changing form of multi-measure rests" -} % begin verbatim - -\relative c'' { - \compressFullBarRests - R1*2 | R1*5 | R1*9 - \override MultiMeasureRest #'expand-limit = #3 - R1*2 | R1*5 | R1*9 -} diff --git a/input/lsr/changing-midi-output-to-one-channel-per-voice.ly b/input/lsr/changing-midi-output-to-one-channel-per-voice.ly deleted file mode 100644 index 9f013e96a9..0000000000 --- a/input/lsr/changing-midi-output-to-one-channel-per-voice.ly +++ /dev/null @@ -1,79 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "contexts-and-engravers, midi" - -%% Translation of GIT committish: f39a9724d9f51ed9d0d464689ef62f549d7b8dd6 - texidoces = " -Al producir una salida MIDI, el comportamiento predeterminado es -que cada pentagrama representa un canal MIDI, con todas las voces -de dicho pentagrama mezcladas. Esto reduce al mínimo el riesgo de -que se agote el número de canales MIDI disponibles, pues existe un -máximo de 16 canales por pista. - -Sin embargo, cuando se traslada el interpretador -@code{Staff_performer} al contexto @code{Voice}, cada voz de un -pentagrama puede tener su propio canal MIDI, como se muestra en el -siguiente ejemplo: a pesar de estar sobre el mismo pentagrama, se -crean dos canales MIDI, cada uno con un @code{midiInstrument} -distinto. - -" - doctitlees = "Modificar la salida MIDI para que tenga un canal por cada voz" - - texidoc = " -When outputting MIDI, the default behavior is for each staff to -represent one MIDI channel, with all the voices on a staff amalgamated. -This minimizes the risk of running out of MIDI channels, since there -are only 16 available per track. - -However, by moving the @code{Staff_performer} to the @code{Voice} -context, each voice on a staff can have its own MIDI channel, as is -demonstrated by the following example: despite being on the same staff, -two MIDI channels are created, each with a different -@code{midiInstrument}. - -" - doctitle = "Changing MIDI output to one channel per voice" -} % begin verbatim - -\score { - \new Staff << - \new Voice \relative c''' { - \set midiInstrument = #"flute" - \voiceOne - \key g \major - \time 2/2 - r2 g-"Flute" ~ - g fis ~ - fis4 g8 fis e2 ~ - e4 d8 cis d2 - } - \new Voice \relative c'' { - \set midiInstrument = #"clarinet" - \voiceTwo - b1-"Clarinet" - a2. b8 a - g2. fis8 e - fis2 r - } - >> - \layout { } - \midi { - \context { - \Staff - \remove "Staff_performer" - } - \context { - \Voice - \consists "Staff_performer" - } - \context { - \Score - tempoWholesPerMinute = #(ly:make-moment 72 2) - } - } -} - diff --git a/input/lsr/changing-partcombine-texts.ly b/input/lsr/changing-partcombine-texts.ly deleted file mode 100644 index 4ad3a2ae0a..0000000000 --- a/input/lsr/changing-partcombine-texts.ly +++ /dev/null @@ -1,47 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "simultaneous-notes" - -%% Translation of GIT committish: 04ab6c269b4067b6ed334d460339818d90513396 - texidoces = " -Al utilizar la posibilidad de combinación automática de partes, se -puede modificar el texto que se imprime para las secciones de solo -y de unísono: - -" - doctitlees = "Cambiar los textos de partcombine" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Wenn Stimmen automatisch kombiniert werden, kann der Text, der für -Solo- und Unisono-Stellen ausgegeben wird, geändert werden: - -" - doctitlede = "Partcombine-Text ändern" - - texidoc = " -When using the automatic part combining feature, the printed text for -the solo and unison sections may be changed: - -" - doctitle = "Changing partcombine texts" -} % begin verbatim - -\new Staff << - \set Staff.soloText = #"girl" - \set Staff.soloIIText = #"boy" - \set Staff.aDueText = #"together" - \partcombine - \relative c'' { - g4 g r r - a2 g - } - \relative c'' { - r4 r a( b) - a2 g - } ->> - diff --git a/input/lsr/changing-properties-for-individual-grobs.ly b/input/lsr/changing-properties-for-individual-grobs.ly deleted file mode 100644 index 10e57b8d1a..0000000000 --- a/input/lsr/changing-properties-for-individual-grobs.ly +++ /dev/null @@ -1,34 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "tweaks-and-overrides" - - texidoc = " -The @code{\\applyOutput} command allows the tuning of any layout -object, in any context. It requires a Scheme function with three -arguments. - -" - doctitle = "Changing properties for individual grobs" -} % begin verbatim - -#(define (mc-squared grob grob-origin context) - (let ((sp (ly:grob-property grob 'staff-position))) - (if (grob::has-interface grob 'note-head-interface) - (begin - (ly:grob-set-property! grob 'stencil - (grob-interpret-markup grob - (make-lower-markup 0.5 - (case sp - ((-5) "m") - ((-3) "c ") - ((-2) (make-smaller-markup (make-bold-markup "2"))) - (else "bla"))))))))) - -\relative c' { - 2 - \applyOutput #'Voice #mc-squared - 2 -} diff --git a/input/lsr/changing-stanza-fonts.ly b/input/lsr/changing-stanza-fonts.ly deleted file mode 100644 index 3a9e035035..0000000000 --- a/input/lsr/changing-stanza-fonts.ly +++ /dev/null @@ -1,32 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "vocal-music" - - texidoc = " -Fonts can be changed independently for each stanza, including the font -used for printing the stanza number. - -" - doctitle = "Changing stanza fonts" -} % begin verbatim - -\new Voice { - \time 3/4 - g2 e4 - a2 f4 - g2. -} -\addlyrics { - \set stanza = #"1. " - Hi, my name is Bert. -} -\addlyrics { - \override StanzaNumber #'font-name = #"DejaVu" - \set stanza = #"2. " - \override LyricText #'font-family = #'typewriter - Oh, ché -- ri, je t'aime -} - diff --git a/input/lsr/changing-text-and-spanner-styles-for-text-dynamics.ly b/input/lsr/changing-text-and-spanner-styles-for-text-dynamics.ly deleted file mode 100644 index 7ebecd7394..0000000000 --- a/input/lsr/changing-text-and-spanner-styles-for-text-dynamics.ly +++ /dev/null @@ -1,55 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks" - -%% Translation of GIT committish: dff50e8e1d3134657a6b6203b9c93826dc4cef65 - texidoces = " -Se puede modificar el texto empleado para los crescendos y -decrescendos modificando las propiedades de contexto -@code{crescendoText} y @code{decrescendoText}. El estiloo de la -línea de extensión se puede cambiar modificando la propiedad -@code{'style} de @code{DynamicTextSpanner}. El valor -predeterminado es @code{'hairpin} (regulador), y entre otros -valores posibles se encuentran @code{'line} (línea), -@code{'dashed-line} (línea intermitente) y @code{'dotted-line} -(línea de puntos): - -" - doctitlees = "Cambiar el texto y los estilos de objeto de extensión para las indicaciones dinámicas textuales" - -%% Translation of GIT committish: 6ce7f350682dfa99af97929be1dec6b9f1cbc01a -texidocde = " -Der Text, der für Crescendo und Decrescendo gestzt wird, kann geändert -werden, indem man die Eigenschaften @code{crescendoText} und -@code{decrescendoText} verändert. Der Stil des Streckers kann auch -geändert werden, indem die @code{'style}-Eigenschaft des -@code{DynamicTextSpanner} beeinflusst wird. Der Standardwert ist -@code{'hairpin}, ander Möglichkeiten sind @code{'line}, @code{'dashed-line} -und @code{'dotted-line}: -" - doctitlede = "Text und Strecker-Stile für Dynamik-Texte ändern" - - texidoc = " -The text used for crescendos and decrescendos can be changed by -modifying the context properties @code{crescendoText} and -@code{decrescendoText}. The style of the spanner line can be changed by -modifying the @code{'style} property of @code{DynamicTextSpanner}. The -default value is @code{'hairpin}, and other possible values include -@code{'line}, @code{'dashed-line} and @code{'dotted-line}. - -" - doctitle = "Changing text and spanner styles for text dynamics" -} % begin verbatim - -\relative c'' { - \set crescendoText = \markup { \italic { cresc. poco } } - \set crescendoSpanner = #'text - \override DynamicTextSpanner #'style = #'dotted-line - a2\< a - a2 a - a2 a - a2 a\mf -} diff --git a/input/lsr/changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.ly b/input/lsr/changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.ly deleted file mode 100644 index c1cb50db18..0000000000 --- a/input/lsr/changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.ly +++ /dev/null @@ -1,35 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks, editorial-annotations" - -%% Translation of GIT committish: 55ea64f469d9c1703222654c9e5bc8490b04a67a - texidoces = " -Se puede cambiar el aspecto de las ligaduras de expresión de -continuas a punteadas o intermitentes. - -" - doctitlees = "Modificar el aspecto continuo de una ligadura de expresión a punteado o intermitente" - - texidoc = " -The appearance of slurs may be changed from solid to dotted or dashed. - -" - doctitle = "Changing the appearance of a slur from solid to dotted or dashed" -} % begin verbatim - -\relative c' { - c4( d e c) - \slurDotted - c4( d e c) - \slurSolid - c4( d e c) - \slurDashed - c4( d e c) - \slurSolid - c4( d e c) -} - - diff --git a/input/lsr/changing-the-breath-mark-symbol.ly b/input/lsr/changing-the-breath-mark-symbol.ly deleted file mode 100644 index 2422268f33..0000000000 --- a/input/lsr/changing-the-breath-mark-symbol.ly +++ /dev/null @@ -1,40 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks" - -%% Translation of GIT committish: dff50e8e1d3134657a6b6203b9c93826dc4cef65 - texidoces = " -El glifo de la marca de respiración se puede ajustar -sobreescribiendo la propiedad de texto del objeto de presentación -@code{BreathingSign}, con cualquier otro texto de marcado. - -" - doctitlees = "Cambiar el símbolo de la marca de respiración" - -%% Translation of GIT committish: 6ce7f350682dfa99af97929be1dec6b9f1cbc01a - texidocde = " -Das Schriftzeichen für das Atemzeichen kann verändert werden, indem -die Text-Eigenschaft des @code{BreathingSign}-Layoutobjekts mit einer -beliebigen Textbeschriftung definiert wird. - -" - doctitlede = "Das Atemzeichen-Symbol verändern" - - texidoc = " -The glyph of the breath mark can be tuned by overriding the text -property of the @code{BreathingSign} layout object with any markup -text. - -" - doctitle = "Changing the breath mark symbol" -} % begin verbatim - -\relative c'' { - c2 - \override BreathingSign #'text = \markup { \musicglyph #"scripts.rvarcomma" } - \breathe - d2 -} diff --git a/input/lsr/changing-the-chord-names-to-german-or-semi-german-notation.ly b/input/lsr/changing-the-chord-names-to-german-or-semi-german-notation.ly deleted file mode 100644 index 6c13889962..0000000000 --- a/input/lsr/changing-the-chord-names-to-german-or-semi-german-notation.ly +++ /dev/null @@ -1,56 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "chords" - -%% Translation of GIT committish: 7e2910d2bc6167b10cfe328eb17a5f710f2a515a - texidoces = " -La nomenclatura inglesa (predeterminada) para los acordes del -cifrado americano se puede cambiar por la alemana -(@code{\\germanChords} sustituye B y Bes por H y B) o por la semi-alemana -(@code{\\semiGermanChords} sustituye B y Bes por H y Bb). - -" - doctitlees = "Cambiar la nomenclatura de los acordes del cifrado americano por la notación alemana o semi-alemana" - - texidoc = " -The english naming of chords (default) can be changed to german -(@code{\\germanChords} replaces B and Bes to H and B) or semi-german -(@code{\\semiGermanChords} replaces B and Bes to H and Bb). - - - - -" - doctitle = "Changing the chord names to German or semi-German notation" -} % begin verbatim - -music = \chordmode { - c1/c cis/cis - b/b bis/bis bes/bes -} - -%% The following is only here to print the names of the -%% chords styles; it can be removed if you do not need to -%% print them. - -\layout { - \context {\ChordNames \consists Instrument_name_engraver } -} - -<< - \new ChordNames { - \set ChordNames.instrumentName = #"default" - \music - } - \new ChordNames { - \set ChordNames.instrumentName = #"german" - \germanChords \music } - \new ChordNames { - \set ChordNames.instrumentName = #"semi-german" - \semiGermanChords \music } - \context Voice { \music } ->> - diff --git a/input/lsr/changing-the-default-text-font-family.ly b/input/lsr/changing-the-default-text-font-family.ly deleted file mode 100644 index 70f473881e..0000000000 --- a/input/lsr/changing-the-default-text-font-family.ly +++ /dev/null @@ -1,52 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "text, tweaks-and-overrides" - - texidoc = " -The default font families for text can be overridden with -@code{make-pango-font-tree}. - -" - doctitle = "Changing the default text font family" -} % begin verbatim - -\paper { - % change for other default global staff size. - myStaffSize = #20 - %{ - run - lilypond -dshow-available-fonts blabla - to show all fonts available in the process log. - %} - - #(define fonts - (make-pango-font-tree "Times New Roman" - "Nimbus Sans" - "Luxi Mono" -;; "Helvetica" -;; "Courier" - (/ myStaffSize 20))) -} - -\relative c'' { - c4^\markup { - roman: foo \bold bla \italic bar \italic \bold baz - } - c'4_\markup { - \override #'(font-family . sans) - { - sans: foo \bold bla \italic bar \italic \bold baz - } - } - c'2^\markup { - \override #'(font-family . typewriter) - { - mono: foo \bold bla \italic bar \italic \bold baz - } - } -} - - diff --git a/input/lsr/changing-the-number-of-lines-in-a-staff.ly b/input/lsr/changing-the-number-of-lines-in-a-staff.ly deleted file mode 100644 index 7d60f76df1..0000000000 --- a/input/lsr/changing-the-number-of-lines-in-a-staff.ly +++ /dev/null @@ -1,39 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "staff-notation" - - texidoc = " -The number of lines in a staff may changed by overriding the -@code{StaffSymbol} property @code{line-count}. - - - - -" - doctitle = "Changing the number of lines in a staff" -} % begin verbatim - -upper = \relative c'' { - c4 d e f -} - -lower = \relative c { - \clef bass - c4 b a g -} - -\score { - \context PianoStaff << - \new Staff { - \upper - } - \new Staff { - \override Staff.StaffSymbol #'line-count = #4 - \lower - } - >> -} - diff --git a/input/lsr/changing-the-positions-of-figured-bass-alterations.ly b/input/lsr/changing-the-positions-of-figured-bass-alterations.ly deleted file mode 100644 index 9c231cbcd4..0000000000 --- a/input/lsr/changing-the-positions-of-figured-bass-alterations.ly +++ /dev/null @@ -1,45 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "chords" - -%% Translation of GIT committish: 7e2910d2bc6167b10cfe328eb17a5f710f2a515a - texidoces = " -Las alteraciones y los signos «más» pueden aparecer antes o -después de los números, según el valor de las propiedades -@code{figuredBassAlterationDirection} y -@code{figuredBassPlusDirection}. - -" - doctitlees = "Cambiar las posiciones de las alteraciones del bajo cifrado" - -%% Translation of GIT committish: 33f623301a41fcc53efadf96bca1c72834763415 - texidocde = " -Versetzungszeichen und Pluszeichen können vor oder nach den Ziffern erscheinen, -je nach den Einstellungen der @code{figuredBassAlterationDirection} und -@code{figuredBassPlusDirection}-Eigenschaften. - -" - doctitlede = "Positionen von Generalbass-Alterationszeichen verändern" - - texidoc = " -Accidentals and plus signs can appear before or after the numbers, -depending on the @code{figuredBassAlterationDirection} and -@code{figuredBassPlusDirection} properties. - -" - doctitle = "Changing the positions of figured bass alterations" -} % begin verbatim - -\figures { - <6\+> <5+> <6 4-> r - \set figuredBassAlterationDirection = #RIGHT - <6\+> <5+> <6 4-> r - \set figuredBassPlusDirection = #RIGHT - <6\+> <5+> <6 4-> r - \set figuredBassAlterationDirection = #LEFT - <6\+> <5+> <6 4-> r -} - diff --git a/input/lsr/changing-the-staff-size.ly b/input/lsr/changing-the-staff-size.ly deleted file mode 100644 index e43db87e16..0000000000 --- a/input/lsr/changing-the-staff-size.ly +++ /dev/null @@ -1,33 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "staff-notation, tweaks-and-overrides, paper-and-layout" - - texidoc = " -Though the simplest way to resize staves is to use -@code{#(set-global-staff-size xx)}, an individual staff's size can be -changed by scaling the properties @code{'staff-space} and -@code{fontSize}. - -" - doctitle = "Changing the staff size" -} % begin verbatim - -<< - \new Staff { - \relative c'' { - \dynamicDown - c8\ff c c c c c c c - } - } - \new Staff \with { - fontSize = #-3 - \override StaffSymbol #'staff-space = #(magstep -3) - } { - \clef bass - c8 c c c c\f c c c - } ->> - diff --git a/input/lsr/changing-the-tempo-without-a-metronome-mark.ly b/input/lsr/changing-the-tempo-without-a-metronome-mark.ly deleted file mode 100644 index 67a1cf5577..0000000000 --- a/input/lsr/changing-the-tempo-without-a-metronome-mark.ly +++ /dev/null @@ -1,46 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "staff-notation, midi" - -%% Translation of GIT committish: dcd61338c753205b6f8d549389fcb0d999c3a675 - texidoces = " -Para cambiar el tempo en la salida MIDI sin -imprimir nada, hacemos invisible la indicación metronómica: - -" - - doctitlees = "Cambiar el tempo sin indicación metronómica" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Um das Tempo für die MIDI-Ausgabe zu ändern, ohne eine Tempoangabe in den -Noten auszugeben, kann die Metronombezeichnung unsichtbar gemacht werden: - -" - - doctitlede = "Das Tempo ohne Metronom-Angabe verändern" - - texidoc = " -To change the tempo in MIDI output without printing anything, make the -metronome mark invisible. - -" - doctitle = "Changing the tempo without a metronome mark" -} % begin verbatim - -\score { - \new Staff \relative c' { - \tempo 4 = 160 - c4 e g b - c4 b d c - \set Score.tempoHideNote = ##t - \tempo 4 = 96 - d,4 fis a cis - d4 cis e d - } - \layout { } - \midi { } -} diff --git a/input/lsr/changing-the-time-signature-without-affecting-the-beaming.ly b/input/lsr/changing-the-time-signature-without-affecting-the-beaming.ly deleted file mode 100644 index 4b81d2b2e4..0000000000 --- a/input/lsr/changing-the-time-signature-without-affecting-the-beaming.ly +++ /dev/null @@ -1,72 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms" - -%% Translation of GIT committish: 4f881627b3ff5eb538df5221ad77b73d0637aeb4 - texidoces = " -La instrucción @code{\time} establece las propiedades -@code{timeSignatureFraction}, @code{beatLength}, @code{beatGrouping} y -@code{measureLength} en el contexto @code{Timing}, que normalmente -tiene el alias @code{Score}. La modificación del valor de -@code{timeSignatureFraction} hace que se imprima la nueva indicación -de compás sin que cambie ninguna de las demás propiedades: - -" - doctitlees = "Cambio de compás sin afectar al barrado" - - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Der @code{\\time}-Befehl verändert die Eigenschaften -@code{timeSignatureFraction}, @code{beatLength}, @code{beatGrouping} -und @code{measureLength} im @code{Timing}-Kontext, welcher normalerweise -gleichbedeutend mit @code{Score} ist. Wenn der Wert von -@code{timeSignatureFraction} verändert wird, wird die neue -Taktart ausgegeben, ohne die anderen Eigenschaften zu beeinflussen: - -" - doctitlede = "Die Taktart verändern ohne die Bebalkung zu beeinflussen" - - -%% Translation of GIT committish: e71f19ad847d3e94ac89750f34de8b6bb28611df - texidocfr = " -La commande @code{\time} gère les propriétés -@code{timeSignatureFraction}, @code{beatLength}, @code{beatGrouping} -et @code{measureLength} dans le contexte @code{Timing}, normallement -rattaché à @code{Score}. Le fait de modifier la valeur de -@code{timeSignatureFraction} aura pour effet de changer l'apparence du -symbole affiché sans pour autant affecter les autres propriétés de la -métrique : - -" - doctitlefr = "Changement de métrique sans affecter les règles de ligature" - - texidoc = " -The @code{\\time} command sets the properties -@code{timeSignatureFraction}, @code{beatLength}, @code{beatGrouping} -and @code{measureLength} in the @code{Timing} context, which is -normally aliased to @code{Score}. Changing the value of -@code{timeSignatureFraction} causes the new time signature symbol to be -printed without changing any of the other properties: - -" - doctitle = "Changing the time signature without affecting the beaming" -} % begin verbatim - -\relative c'' { - \time 3/4 - a16 a a a a a a a a a a a - - % Change time signature symbol but keep 3/4 beaming - % due to unchanged underlying time signature - \set Score.timeSignatureFraction = #'(12 . 16) - a16 a a a a a a a a a a a - - \time 12/16 - % Lose 3/4 beaming now \time has been changed - a16 a a a a a a a a a a a -} - diff --git a/input/lsr/changing-the-tuplet-number.ly b/input/lsr/changing-the-tuplet-number.ly deleted file mode 100644 index 0d1af8649a..0000000000 --- a/input/lsr/changing-the-tuplet-number.ly +++ /dev/null @@ -1,60 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms" - -%% Translation of GIT committish: 3644a70508f73e9204837cb07430225e55bd38f6 - doctitlees = "Cambiar el número del grupo especial" - texidoces = " - -De forma predeterminada sólo se imprime el numerador del grupo -especial sobre el corchete de grupo, es decir, el denominador del -argumento de la instrucción @code{\\times}. De forma alternativa, se -puede imprimr un quebrado en la forma numerador:denominador del número -del grupo, o eliminar el número. - -" - -%% Translation of GIT committish: 6ce7f350682dfa99af97929be1dec6b9f1cbc01a -texidocde = " -Standardmäßig wird nur der Zähler des N-tolen-Bruchs über der Klammer -dargestellt, wie er dem @code{\\times}-Befehl übergeben wird. -Man kann aber auch Zähler/Nenner ausgeben lassen, oder die Zahl -vollständig unterdrücken. - -" - doctitlede = "Die Zahl der N-tole verändern" - - -%% Translation of GIT committish: e71f19ad847d3e94ac89750f34de8b6bb28611df - texidocfr = " -L'apparence du chiffre est déterminée par la propriété @code{text} dans -@code{TupletNumber}. La valeur par défaut imprime seulement le -dénominateur, mais si elle est définie par la fonction -@code{tuplet-number::calc-fraction-text}, la fraction entière -@var{num}:@var{den} sera imprimée à la place. - -" - doctitlefr = "Modifier l'apparence du chiffre de nolet" - - texidoc = " -By default, only the numerator of the tuplet number is printed over the -tuplet bracket, i.e., the denominator of the argument to the -@code{\\times} command. Alternatively, num:den of the tuplet number may -be printed, or the tuplet number may be suppressed altogether. - -" - doctitle = "Changing the tuplet number" -} % begin verbatim - -\relative c'' { - \times 2/3 { c8 c c } - \times 2/3 { c8 c c } - \override TupletNumber #'text = #tuplet-number::calc-fraction-text - \times 2/3 { c8 c c } - \override TupletNumber #'stencil = ##f - \times 2/3 { c8 c c } -} - diff --git a/input/lsr/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly b/input/lsr/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly deleted file mode 100644 index 6771ff0521..0000000000 --- a/input/lsr/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly +++ /dev/null @@ -1,65 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms, contexts-and-engravers" - -%% Translation of GIT committish: f39a9724d9f51ed9d0d464689ef62f549d7b8dd6 - texidoces = " -La propiedad @code{measureLength}, junto con -@code{measurePosition}, determina cuándo es necesario dibujar una -línea divisoria. Sin embargo, al utilizar -@code{\\scaleDurations}, el escalado proporcional de las -duraciones hace difícil introducir cambios de compás. En este -caso se debe establecer manualmente el valor de -@code{measureLength} utilizando la función @code{ly:make-moment}. -El segundo argumento debe ser el mismo que el segundo argumento de -@code{\\scaleDurations}. - -" - doctitlees = "Modificar el compás dentro de una sección polimétrica utilizando @code{\\scaleDurations}" - - texidoc = " -The @code{measureLength} property, together with -@code{measurePosition}, determines when a bar line is needed. However, -when using @code{\\scaleDurations}, the scaling of durations makes it -difficult to change time signatures. In this case, -@code{measureLength} should be set manually, using the -@code{ly:make-moment} callback. The second argument must be the same -as the second argument of @code{\\scaleDurations}. - -" - doctitle = "Changing time signatures inside a polymetric section using \\scaleDurations" -} % begin verbatim - -\layout { - \context { - \Score - \remove "Timing_translator" - \remove "Default_bar_line_engraver" - } - \context { - \Staff - \consists "Timing_translator" - \consists "Default_bar_line_engraver" - } -} - -<< - \new Staff { - \scaleDurations #'(8 . 5) { - \time 6/8 - \set Timing.measureLength = #(ly:make-moment 6 5) - b8 b b b b b - \time 2/4 - \set Timing.measureLength = #(ly:make-moment 4 5) - b4 b - } - } - \new Staff { - \clef bass - \time 2/4 - c2 d e f - } ->> diff --git a/input/lsr/chant-or-psalms-notation.ly b/input/lsr/chant-or-psalms-notation.ly deleted file mode 100644 index 27ba98ad56..0000000000 --- a/input/lsr/chant-or-psalms-notation.ly +++ /dev/null @@ -1,40 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms, vocal-music, ancient-notation, contexts-and-engravers" - -%% Translation of GIT committish: aea975539ec44fd0f1a8fd25930b88b5ab64b53a - texidoces = " -Este tipo de notación se utiliza para el canto de los Salmos, en -que las estrofas no siempre tienen la misma longitud. - -" - doctitlees = "Notación de responsos o salmos" - - texidoc = " -This form of notation is used for the chant of the Psalms, where verses -aren't always the same length. - -" - doctitle = "Chant or psalms notation" -} % begin verbatim - -stemOn = { \revert Staff.Stem #'transparent } -stemOff = { \override Staff.Stem #'transparent = ##t } - -\score { - \new Staff \with { \remove "Time_signature_engraver" } - { - \key g \minor - \cadenzaOn - \stemOff a'\breve bes'4 g'4 - \stemOn a'2 \bar "||" - \stemOff a'\breve g'4 a'4 - \stemOn f'2 \bar "||" - \stemOff a'\breve^\markup { \italic flexe } - \stemOn g'2 \bar "||" - } -} - diff --git a/input/lsr/chord-name-exceptions.ly b/input/lsr/chord-name-exceptions.ly deleted file mode 100644 index f5d15068b7..0000000000 --- a/input/lsr/chord-name-exceptions.ly +++ /dev/null @@ -1,58 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "chords" - -%% Translation of GIT committish: 7e2910d2bc6167b10cfe328eb17a5f710f2a515a - texidoces = " -Se puede usar la propiedad @code{chordNameExceptions} para -almacenar una lista de notaciones espaciales para acordes -específicos. - -" - doctitlees = "Excepciones para los nombres de acorde" - -%% Translation of GIT committish: 33f623301a41fcc53efadf96bca1c72834763415 - texidocde = " -Die Eigenschaft @code{chordNameExceptions} kann benutzt werden, um eine -Liste an besonderen Notationen für bestimmte Akkorde zu speichern. - -" - doctitlede = "Akkordsymbolausnahmen" - - texidoc = " -The property @code{chordNameExceptions} can be used to store a list of -special notations for specific chords. - -" - doctitle = "Chord name exceptions" -} % begin verbatim - -% modify maj9 and 6(add9) -% Exception music is chords with markups -chExceptionMusic = { - 1-\markup { \super "maj9" } - 1-\markup { \super "6(add9)" } -} - -% Convert music to list and prepend to existing exceptions. -chExceptions = #( append - ( sequential-music-to-chord-exceptions chExceptionMusic #t) - ignatzekExceptions) - -theMusic = \chordmode { - g1:maj9 g1:6.9 - \set chordNameExceptions = #chExceptions - g1:maj9 g1:6.9 -} - -\layout { - ragged-right = ##t -} - -<< \context ChordNames \theMusic - \context Voice \theMusic ->> - diff --git a/input/lsr/chord-name-major7.ly b/input/lsr/chord-name-major7.ly deleted file mode 100644 index 61a266e4ee..0000000000 --- a/input/lsr/chord-name-major7.ly +++ /dev/null @@ -1,38 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "chords" - -%% Translation of GIT committish: 33f623301a41fcc53efadf96bca1c72834763415 - texidocde = " -Das Aussehen des großen Septakkords kann mit @code{majorSevenSymbol} verändert werden. - -" - - doctitlede = "Akkordbezeichnung maj7" - - -%% Translation of GIT committish: 3e50373e10750e5bc1f5c69898df3740e6169165 - texidoces = " -La presentación del acorde de séptima mayor se -puede ajustar mediante majorSevenSymbol. - -" - doctitlees = "Nombre de acorde maj7" - - - texidoc = " -The layout of the major 7 can be tuned with @code{majorSevenSymbol}. - -" - doctitle = "chord name major7" -} % begin verbatim - -\chords { - c:7+ - \set majorSevenSymbol = \markup { j7 } - c:7+ -} - diff --git a/input/lsr/chordchanges-for-fretboards.ly b/input/lsr/chordchanges-for-fretboards.ly deleted file mode 100644 index 7e25c7f412..0000000000 --- a/input/lsr/chordchanges-for-fretboards.ly +++ /dev/null @@ -1,46 +0,0 @@ -%% Do not edit this file; it is auto-generated from input/new -%% This file is in the public domain. -%% Note: this file works from version 2.13.0 -\version "2.13.1" - -\header { -%% Translation of GIT committish: d4f58bb3ad4e7fe1967a6b48f25e3addffc8aa14 - texidoces = " -Se puede hacer que los diagramas de posiciones se muestren sólo -cuando el acorde cambia o al comienzo de una nueva línea. - -" - - doctitlees = "Cambios de acorde de posiciones de trastes" - -%% Translation of GIT committish: 6bf3e9149eb97e66b4c813e41dc7625f06c501aa -texidocde = " -Bunddiagramme können definiert werden, sodass sie nur angezeigt werden, -wenn der Akkord sich ändert oder eine neue Zeile anfängt. - -" - - - doctitlede = "Akkordänderungen für Bunddiagramme" - - lsrtags = "fretted-strings" - texidoc = "FretBoards can be set to display only when the chord changes -or at the beginning of a new line." - doctitle = "chordChanges for FretBoards" -} % begin verbatim - - -\include "predefined-guitar-fretboards.ly" - -myChords = \chordmode { - c1 c1 \break - \set chordChanges = ##t - c1 c1 \break - c1 c1 \break -} - -<< - \new ChordNames { \myChords } - \new FretBoards { \myChords } - \new Staff { \myChords } ->> diff --git a/input/lsr/chords-intro.itely b/input/lsr/chords-intro.itely deleted file mode 100644 index 83aeaaaf25..0000000000 --- a/input/lsr/chords-intro.itely +++ /dev/null @@ -1,7 +0,0 @@ -@node Chords -@unnumbered Chords - -@ruser{Chord notation} - -@lysnippets - diff --git a/input/lsr/chords.snippet-list b/input/lsr/chords.snippet-list deleted file mode 100644 index 5e3faa9387..0000000000 --- a/input/lsr/chords.snippet-list +++ /dev/null @@ -1,18 +0,0 @@ -adding-a-figured-bass-above-or-below-the-notes.ly -adding-bar-lines-to-chordnames-context.ly -avoiding-collisions-with-chord-fingerings.ly -changing-chord-separator.ly -changing-the-chord-names-to-german-or-semi-german-notation.ly -changing-the-positions-of-figured-bass-alterations.ly -chord-name-exceptions.ly -chord-name-major7.ly -clusters.ly -controlling-the-placement-of-chord-fingerings.ly -displaying-complex-chords.ly -manually-break-figured-bass-extenders-for-only-some-numbers.ly -showing-chords-at-changes.ly -simple-lead-sheet.ly -single-staff-template-with-notes,-lyrics,-and-chords.ly -single-staff-template-with-notes,-lyrics,-chords-and-frets.ly -single-staff-template-with-notes-and-chords.ly -volta-below-chords.ly diff --git a/input/lsr/clip-systems.ly b/input/lsr/clip-systems.ly deleted file mode 100644 index db83db418d..0000000000 --- a/input/lsr/clip-systems.ly +++ /dev/null @@ -1,91 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "paper-and-layout" - - texidoc = " -This code shows how to clip (extract) snippets from a full score. - -This file needs to be run separately with @code{-dclip-systems}; the -snippets page may not adequately show the results. - -The result will be files named -@samp{base-from-start-to-end[-count].eps}. - - -If system starts and ends are included, they include extents of the -System grob, e.g., instrument names. - - -Grace notes at the end point of the region are not included. - - -Regions can span multiple systems. In this case, multiple EPS files -are generated. - -" - doctitle = "Clip systems" -} % begin verbatim - -#(ly:set-option 'clip-systems) -#(set! output-count 1) - -origScore = \score { - \relative c' { - \set Staff.instrumentName = #"bla" - c1 - d1 - \grace c16 e1 - \key d \major - f1 \break - \clef bass - g,1 - fis1 - } -} - -\book { - \score { - \origScore - \layout { - % Each clip-region is a (START . END) pair - % where both are rhythmic-locations. - - % (make-rhythmic-locations BAR-NUMBER NUM DEN) - % means NUM/DEN whole-notes into bar numbered BAR-NUMBER - - clip-regions = #(list - (cons - (make-rhythmic-location 2 0 1) - (make-rhythmic-location 4 0 1)) - - (cons - (make-rhythmic-location 0 0 1) - (make-rhythmic-location 4 0 1)) - - (cons - (make-rhythmic-location 0 0 1) - (make-rhythmic-location 6 0 1)) - ) - } - } -} - -#(set! output-count 0) -#(ly:set-option 'clip-systems #f) - -\book { - \score { \origScore } - \markup { \bold \fontsize #6 clips } - \score { - \lyrics { - \markup { from-2.0.1-to-4.0.1-clip.eps } - \markup { - \epsfile #X #30.0 #(format #f "~a-1-from-2.0.1-to-4.0.1-clip.eps" - (ly:parser-output-name parser)) } - } - } -} - diff --git a/input/lsr/clusters.ly b/input/lsr/clusters.ly deleted file mode 100644 index e641c0bada..0000000000 --- a/input/lsr/clusters.ly +++ /dev/null @@ -1,38 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "simultaneous-notes, chords, keyboards" - -%% Translation of GIT committish: 7e2910d2bc6167b10cfe328eb17a5f710f2a515a - texidoces = " -Los «clusters» o racimos son un mecanismo para indicar la -interpretación de un ámbito de notas al mismo tiempo. - -" - doctitlees = "Clusters («racimos»)" - - texidoc = " -Clusters are a device to denote that a complete range of notes is to be -played. - -" - doctitle = "Clusters" -} % begin verbatim - -\layout { - ragged-right = ##t -} - -fragment = \relative c' { - c4 f 4 - 8 a4 c2 4 - e2 c -} - -<< - \new Staff \fragment - \new Staff \makeClusters \fragment ->> - diff --git a/input/lsr/coloring-notes-depending-on-their-pitch.ly b/input/lsr/coloring-notes-depending-on-their-pitch.ly deleted file mode 100644 index cab9e24489..0000000000 --- a/input/lsr/coloring-notes-depending-on-their-pitch.ly +++ /dev/null @@ -1,57 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "pitches, editorial-annotations" - - texidoc = " -It is possible to color note heads depending on their pitch and/or -their names: the function used in this example even makes it possible -to distinguish enharmonics. - -" - doctitle = "Coloring notes depending on their pitch" -} % begin verbatim - -%Association list of pitches to colors. -#(define color-mapping - (list - (cons (ly:make-pitch 0 0 0) (x11-color 'red)) - (cons (ly:make-pitch 0 0 1/2) (x11-color 'green)) - (cons (ly:make-pitch 0 1 -1/2) (x11-color 'green)) - (cons (ly:make-pitch 0 2 0) (x11-color 'red)) - (cons (ly:make-pitch 0 2 1/2) (x11-color 'green)) - (cons (ly:make-pitch 0 3 -1/2) (x11-color 'red)) - (cons (ly:make-pitch 0 3 0) (x11-color 'green)) - (cons (ly:make-pitch 0 4 1/2) (x11-color 'red)) - (cons (ly:make-pitch 0 5 0) (x11-color 'green)) - (cons (ly:make-pitch 0 5 -1/2) (x11-color 'red)) - (cons (ly:make-pitch 0 6 1/2) (x11-color 'red)) - (cons (ly:make-pitch 0 1 0) (x11-color 'blue)) - (cons (ly:make-pitch 0 3 1/2) (x11-color 'blue)) - (cons (ly:make-pitch 0 4 -1/2) (x11-color 'blue)) - (cons (ly:make-pitch 0 5 1/2) (x11-color 'blue)) - (cons (ly:make-pitch 0 6 -1/2) (x11-color 'blue)))) - -%Compare pitch and alteration (not octave). -#(define (pitch-equals? p1 p2) - (and - (= (ly:pitch-alteration p1) (ly:pitch-alteration p2)) - (= (ly:pitch-notename p1) (ly:pitch-notename p2)))) - -#(define (pitch-to-color pitch) - (let ((color (assoc pitch color-mapping pitch-equals?))) - (if color - (cdr color)))) - -#(define (color-notehead grob) - (pitch-to-color - (ly:event-property (event-cause grob) 'pitch))) - -\score { - \new Staff \relative c' { - \override NoteHead #'color = #color-notehead - c8 b d dis ees f g aes - } -} diff --git a/input/lsr/combining-dynamics-with-markup-texts.ly b/input/lsr/combining-dynamics-with-markup-texts.ly deleted file mode 100644 index 87ed3c243a..0000000000 --- a/input/lsr/combining-dynamics-with-markup-texts.ly +++ /dev/null @@ -1,31 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks, text" - -%% Translation of GIT committish: dff50e8e1d3134657a6b6203b9c93826dc4cef65 - texidoces = " -Ciertas indicaciones dinámicas pueden llevar textos (como \"più -forte\" o \"piano subito\"). Se pueden producir usando un -bloque @code{\\markup}. - -" - doctitlees = "Combinar indicaciones dinámicas con marcados textuales" - - texidoc = " -Some dynamics may involve text indications (such as \"più forte\" or -\"piano subito\"). They can be produced using a @code{\\markup} block. - -" - doctitle = "Combining dynamics with markup texts" -} % begin verbatim - -piuF = \markup { \italic più \dynamic f } -\layout { ragged-right = ##f } -\relative c'' { - c2\f c-\piuF -} - - diff --git a/input/lsr/combining-two-parts-on-the-same-staff.ly b/input/lsr/combining-two-parts-on-the-same-staff.ly deleted file mode 100644 index 4916607521..0000000000 --- a/input/lsr/combining-two-parts-on-the-same-staff.ly +++ /dev/null @@ -1,110 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "simultaneous-notes, text" - -%% Translation of GIT committish: 04ab6c269b4067b6ed334d460339818d90513396 - texidoces = " -La herramienta de combinación de partes ( instrucción -@code{\\partcombine}) permite la combinación de varias partes -diferentes sobre el mismo pentagrama. Las indicaciones textuales -tales como \"solo\" o \"a2\" se añaden de forma predeterminada; -para quitarlas, sencillamente establezca la propiedad -@code{printPartCombineTexts} al valor \"falso\". Para partituras -vocales (como himnos), no hay necesidad de añadir los textos -\"solo\" o \"a2\", por lo que se deben desactivar. Sin embargo, -podría ser mejor no usarlo si hay solos, porque éstos no se -indicarán. En tales casos podría ser preferible la notación -polifónica estándar. - -Este fragmento de código presenta las tres formas en que se pueden -imprimir dos partes sobre un solo pentagrama: polifonía estándar, -@code{\\partcombine} sin textos, y @code{\\partcombine} con -textos. - -" - doctitlees = "Combinar dos partes sobre el mismo pentagrama" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Die Funktion, die Stimmen kombiniert (also der @code{\\partcombine}-Befehl) -ermöglicht die Kombination unterschiedlicher Stimmen auf einem -System. Textanweisungen wie \"solo\" or \"a2\" werden automatisch -hinzugefügt. Wenn man sie entfernen will, muss man die Eigenschaft -@code{printPartCombineTexts} auf flasch setzen. Für Klavierauszüge -muss natürlich kein \"solo\"/\"a2\" usw. hinzugefügt werdne, man -sollte sie also ausschalten. Wenn aber Solo-Stellen in einem -Klavierauszug oder einer Chorpartitur angezeigt werden, ist es besser, -normale Polyphonie zu verwenden, weil so die Solostellen angezeigt -werden, auch wenn der Text des Stimmenkombinierers ausgeschaltet ist. - -Der Schnipsel zeigt drei Möglichkeiten, Stimmen auf einem System zu -kombinieren: Standardpolyphonie, @code{\\partcombine} ohne Text und -@code{\\partcombine} mit Text. - -" - doctitlede = "Zwei Stimmen auf einem System kombinieren" - - texidoc = " -The part combiner tool ( @code{\\partcombine} command ) allows the -combination of several different parts on the same staff. Text -directions such as \"solo\" or \"a2\" are added by default; to remove -them, simply set the property @code{printPartCombineTexts} to -\"false\". For vocal scores (hymns), there is no need to add -\"solo\"/\"a2\" texts, so they should be switched off. However, it -might be better not to use it if there are any solos, as they won't be -indicated. In such cases, standard polyphonic notation may be -preferable. - -This snippet presents the three ways two parts can be printed on a same -staff: standard polyphony, @code{\\partcombine} without texts, and -@code{\\partcombine} with texts. - - - - -" - doctitle = "Combining two parts on the same staff" -} % begin verbatim - -musicUp = \relative c'' { - \time 4/4 - a4 c4.( g8) a4 | - g4 e' g,( a8 b) | - c b a2. -} - -musicDown = \relative c'' { - g4 e4.( d8) c4 | - r2 g'4( f8 e) | - d2 \stemDown a -} - -\score { - << - << - \new Staff { - \set Staff.instrumentName = "Standard polyphony " - << \musicUp \\ \musicDown >> - } - \new Staff \with { printPartCombineTexts = ##f } { - \set Staff.instrumentName = "PartCombine without texts " - \partcombine \musicUp \musicDown - } - \new Staff { - \set Staff.instrumentName = "PartCombine with texts " - \partcombine \musicUp \musicDown - } - >> - >> - \layout { - indent = 6.0\cm - \context { - \Score - \override SystemStartBar #'collapse-height = #30 - } - } -} - diff --git a/input/lsr/compound-time-signatures.ly b/input/lsr/compound-time-signatures.ly deleted file mode 100644 index 4a0f811eef..0000000000 --- a/input/lsr/compound-time-signatures.ly +++ /dev/null @@ -1,73 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms" - -%% Translation of GIT committish: a634a20e0ab2a874ff8bf423e5651139df8733fc - doctitlees = "Indicaciones de compases compuestos" - texidoces = " -Las indicaciones de compás poco frecuentes como \"5/8\" se pueden -ejecutar como compases compuestos (p.ej. \"3/8 + 2/8\"), que combinan -dos o más metros diferentes. LilyPond puede hacer la música de este -tipo fácil de leer e interpretar, imprimiendo explícitamente las -indicaciones de compás compuesto y adaptando el comportamiento -automático de las barras (también se pueden añadir indicaciones -gráficas de la agrupación de compases; véase el fragmento de código -apropiado en la base de datos). - -" - -%% Translation of GIT committish: 6ce7f350682dfa99af97929be1dec6b9f1cbc01a -texidocde = " -Ungerade Taktarten werden (wie etwa \"5/8\") werden oft als zusammengesetzte -Taktarten interpretiert (bspw. \"3/8 + 2/8\"), in welchen zwei oder mehr -Teiltakte unterschieden werden. LilyPond kann derartige Noten produzieren, -indem entsprechende Taktarten gesetzt werden und die automatische -Bebalkung angepasst wird. - -" - doctitlede = "Zusammengesetzte Taktarten" - - -%% Translation of GIT committish: e71f19ad847d3e94ac89750f34de8b6bb28611df - texidocfr = " -Des métriques telles que \"5/8\" pauvent s'interpréter sous une forme -décomposée --- \"3/8 + 2/8\" par exemple --- qui combine plusieurs -métriques. LilyPond est capable de rendre ce type de notation, plus - facile à lire et à interpréter, en imprimant cette métrique composite - et en adaptant les règles de ligature automatique en conséquence. - -" - doctitlefr = "Métrique décomposée" - - texidoc = " -Odd 20th century time signatures (such as \"5/8\") can often be played -as compound time signatures (e.g. \"3/8 + 2/8\"), which combine two or -more inequal metrics. LilyPond can make such music quite easy to read -and play, by explicitly printing the compound time signatures and -adapting the automatic beaming behavior. (Graphic measure grouping -indications can also be added; see the appropriate snippet in this -database.) - -" - doctitle = "Compound time signatures" -} % begin verbatim - -#(define ((compound-time one two num) grob) - (grob-interpret-markup grob - (markup #:override '(baseline-skip . 0) #:number - (#:line ( - (#:column (one num)) - #:vcenter "+" - (#:column (two num))))))) - -\relative c' { - \override Staff.TimeSignature #'stencil = #(compound-time "2" "3" "8") - \time 5/8 - #(override-auto-beam-setting '(end 1 8 5 8) 1 4) - c8 d e fis gis - c8 fis, gis e d - c8 d e4 gis8 -} diff --git a/input/lsr/conducting-signs,-measure-grouping-signs.ly b/input/lsr/conducting-signs,-measure-grouping-signs.ly deleted file mode 100644 index d9fdc16f52..0000000000 --- a/input/lsr/conducting-signs,-measure-grouping-signs.ly +++ /dev/null @@ -1,90 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms" - -%% Translation of GIT committish: 151f1bb8c0aae8294e62d0470246ee1019aedfbc - texidoces = " -Las opciones para agrupar los pulsos de un compás están a nuestra -disposición a través de la función de Scheme -@code{set-time-signature}, que acepta tres argumentos: el número -de pulsos, la longitud del pulso, y la agrupación interna de los -pulsos dentro del compás. Si se incluye el grabador -@code{Measure_grouping_engraver}, la función crea también símbolos -de agrupación @code{MeasureGrouping}. Dichos símbolos facilitan -la lectura de la música moderna de cierta complejidad rítmica. En -el ejemplo, el compás de 9/8 se subdivide en 2, 2, 2 y 3. Esto se -pasa a la función @code{set-time-signature} como tercer argumento: -@code{'(2 2 2 3)}: - -" -doctitlees = "Símbolos de dirección, símbolos de agrupación de compás" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Optionen, mit denen die Balken in einem Takt gruppiert werden, sind -durch die Scheme-Funktion @code{set-time-signature} erhältlich, die -drei Argumente braucht: Die Zahl der Taktschläge, die Länge des -Schlages und die interne gruppieren von Balken in dem Takt. Wenn der -@code{Measure_grouping_engraver} hinzugefügt worden ist, erstellt -diese Funktion auch @code{MeasureGrouping}-(Taktgruppen)-Zeichen. Derartige -Zeichen erleichtern das Lesen von rhythmisch komplexer Musik. In dem -Beispiel ist der 9/8-Takt in 2, 2, 2 und 3 aufgeteilt. Das wird -der @code{set-time-signature}-Funktion als das dritte Argument mitgegeben: -@code{'(2 2 2 3)}: - -" - doctitlede = "Dirigirzeichen, Taktgruppenzeichen" - - -%% Translation of GIT committish: b3196fadd8f42d05ba35e8ac42f7da3caf8a3079 - texidocfr = " -Il existe des options qui permettent de grouper les ligatures au sein -d'une mesure, grâce à la fonction Scheme @code{set-time-signature}. -Celle-ci prend trois arguments : le nombre de pulsations, la durée de la -pulsation et le regroupement des pulsations dans la mesure. Si l'on -fait appel au @code{Measure_grouping_engraver}, la fonction -@code{set-time-signature} créera aussi des symboles -@code{MeasureGrouping}. Ces symboles aident à la lecture des œuvres -modernes à la rythmique complexe. Dans l'exemple qui suit, la mesure à -9/8 este divisée en 2, 2, 2 et 3. Ceci est fourni en tant que troisième -argument à @code{set-time-signature} : @code{'(2 2 2 3)}. - -" - doctitlefr = "Signes de direction, signes de sous-groupe" - - texidoc = " -Options to group beats within a bar are available through the Scheme -function @code{set-time-signature}, which takes three arguments: the -number of beats, the beat length, and the internal grouping of beats in -the measure. If the @code{Measure_grouping_engraver} is included, the -function will also create @code{MeasureGrouping} signs. Such signs -ease reading rhythmically complex modern music. In the example, the -9/8 measure is subdivided in 2, 2, 2 and 3. This is passed to -@code{set-time-signature} as the third argument: @code{'(2 2 2 3)}: - -" - doctitle = "Conducting signs, measure grouping signs" -} % begin verbatim - -\score { - \relative c'' { - #(set-time-signature 9 8 '(2 2 2 3)) - #(revert-auto-beam-setting '(end * * 9 8) 3 8) - #(override-auto-beam-setting '(end 1 8 9 8) 1 4) - #(override-auto-beam-setting '(end 1 8 9 8) 2 4) - #(override-auto-beam-setting '(end 1 8 9 8) 3 4) - g8 g d d g g a( bes g) | - #(set-time-signature 5 8 '(3 2)) - a4. g4 - } - \layout { - \context { - \Staff - \consists "Measure_grouping_engraver" - } - } -} - diff --git a/input/lsr/contemporary-glissando.ly b/input/lsr/contemporary-glissando.ly deleted file mode 100644 index e278534577..0000000000 --- a/input/lsr/contemporary-glissando.ly +++ /dev/null @@ -1,44 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks" - -%% Translation of GIT committish: dff50e8e1d3134657a6b6203b9c93826dc4cef65 - texidoces = " -Se puede tipografiar un gissando contemporáneo sin nota final -utilizando una nota oculta y temporalización de cadenza. - -" - doctitlees = "Glissando contemporáneo" - -%% Translation of GIT committish: 6ce7f350682dfa99af97929be1dec6b9f1cbc01a -texidocde = " -Ein modernes Glissando ohne eine Endnote kann gesetzt werden, indem -eine Kadenz eingesetzt wird und die Endnote unsichtbar gemacht wird. - -" - doctitlede = "Moderne Glissandi" - - texidoc = " -A contemporary glissando without a final note can be typeset using a -hidden note and cadenza timing. - -" - doctitle = "Contemporary glissando" -} % begin verbatim - -\relative c'' { - \time 3/4 - \override Glissando #'style = #'zigzag - c4 c - \cadenzaOn - c4\glissando - \hideNotes - c,,4 - \unHideNotes - \cadenzaOff - \bar "|" -} - diff --git a/input/lsr/contexts-and-engravers-intro.itely b/input/lsr/contexts-and-engravers-intro.itely deleted file mode 100644 index ef796b0592..0000000000 --- a/input/lsr/contexts-and-engravers-intro.itely +++ /dev/null @@ -1,11 +0,0 @@ -@node Contexts and engravers -@unnumbered Contexts and engravers - -@c FIXME make xref more precise when the chapter has been -@c revised in GDP -@ruser{Changing defaults} - -@rlearning{Contexts and engravers} - -@lysnippets - diff --git a/input/lsr/contexts-and-engravers.snippet-list b/input/lsr/contexts-and-engravers.snippet-list deleted file mode 100644 index 73055ed527..0000000000 --- a/input/lsr/contexts-and-engravers.snippet-list +++ /dev/null @@ -1,13 +0,0 @@ -adding-a-figured-bass-above-or-below-the-notes.ly -adding-an-extra-staff-at-a-line-break.ly -adding-an-extra-staff.ly -changing-midi-output-to-one-channel-per-voice.ly -changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly -chant-or-psalms-notation.ly -creating-blank-staves.ly -engravers-one-by-one.ly -mensurstriche-layout-bar-lines-between-the-staves.ly -nesting-staves.ly -removing-bar-numbers-from-a-score.ly -use-square-bracket-at-the-start-of-a-staff-group.ly -vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly diff --git a/input/lsr/controlling-the-placement-of-chord-fingerings.ly b/input/lsr/controlling-the-placement-of-chord-fingerings.ly deleted file mode 100644 index f55e59e5da..0000000000 --- a/input/lsr/controlling-the-placement-of-chord-fingerings.ly +++ /dev/null @@ -1,53 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "editorial-annotations, chords, keyboards, fretted-strings" - -%% Translation of GIT committish: 7e2910d2bc6167b10cfe328eb17a5f710f2a515a - texidoces = " -Se puede controlar con precisión la colocación de los números de digitación. - -" - doctitlees = "Controlar la colocación de las digitaciones de acordes" - - -%% Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 - - texidocfr = " -Le positionnement des doigtés peut être contrôlé de manière très précise. - -" - doctitlefr = "Conrôle du positionnement des doigtés" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Die Position von Fingersatzzahlen kann exakt kontrolliert werden. - -" - doctitlede = "Position von Fingersatz in Akkorden kontrollieren" - - texidoc = " -The placement of fingering numbers can be controlled precisely. - -" - doctitle = "Controlling the placement of chord fingerings" -} % begin verbatim - -\relative c' { - \set fingeringOrientations = #'(left) - 4 - \set fingeringOrientations = #'(down) - 4 - \set fingeringOrientations = #'(down right up) - 4 - \set fingeringOrientations = #'(up) - 4 - \set fingeringOrientations = #'(left) - 2 - \set fingeringOrientations = #'(down) - 2 -} - - diff --git a/input/lsr/controlling-the-vertical-ordering-of-scripts.ly b/input/lsr/controlling-the-vertical-ordering-of-scripts.ly deleted file mode 100644 index 9a4a5d1bac..0000000000 --- a/input/lsr/controlling-the-vertical-ordering-of-scripts.ly +++ /dev/null @@ -1,60 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks, tweaks-and-overrides" - -%% Translation of GIT committish: dff50e8e1d3134657a6b6203b9c93826dc4cef65 - texidoces = " -El orden vertical que ocupan las inscripciones gráficas está -controlado con la propiedad @code{script-priority}. Cuanto más -bajo es este número, más cerca de la nota se colocará. En este -ejemplo, el @code{TextScript} (el sostenido) tiene primero la -prioridad más baja, por lo que se sitúa en la posición más baja en -el primer ejemplo. En el segundo, el semitrino (el @code{Script}) -es el que la tiene más baja, por lo que se sitúa en la parte -interior. Cuando dos objetos tienen la misma prioridad, el orden -en que se introducen determina cuál será el que aparece en primer -lugar. - -" - doctitlees = "Controlar la ordenación vertical de las inscripciones" - -%% Translation of GIT committish: 6ce7f350682dfa99af97929be1dec6b9f1cbc01a -texidocde = " -Die vertikale Anordnung von Beschriftungen wird mit der -@code{'script-priority}-Eigenschaft kontrolliert. Um so kleiner die -Zahl, umso näher wird die Beschriftung in Bezug auf die Note gesetzt. In -diesem Beispiel hat das @code{TextScript}-Objekt (das Kreuz) zuerst -die niedrigste Priorität, wird also auch am niedrigsten in dem ersten -Beispiel gesetzt. Im zweiten Fall hat der Praller (das @code{Script}) -die niedrigste Priorität, darum wird er am nächsten zum System gesetzt. -Wenn zwei Objekte die gleiche Priorität haben, wird ihre Reihenfolge -anhand ihres Auftretens in der Quelldatei entschieden. - -" - doctitlede = "Die vertikale Anordnung von Beschriftungen kontrollieren" - - texidoc = " -The vertical ordering of scripts is controlled with the -@code{'script-priority} property. The lower this number, the closer it -will be put to the note. In this example, the @code{TextScript} (the -sharp symbol) first has the lowest priority, so it is put lowest in the -first example. In the second, the prall trill (the @code{Script}) has -the lowest, so it is on the inside. When two objects have the same -priority, the order in which they are entered determines which one -comes first. - -" - doctitle = "Controlling the vertical ordering of scripts" -} % begin verbatim - -\relative c''' { - \once \override TextScript #'script-priority = #-100 - a2^\prall^\markup { \sharp } - - \once \override Script #'script-priority = #-100 - a2^\prall^\markup { \sharp } -} - diff --git a/input/lsr/controlling-tuplet-bracket-visibility.ly b/input/lsr/controlling-tuplet-bracket-visibility.ly deleted file mode 100644 index de374e55ec..0000000000 --- a/input/lsr/controlling-tuplet-bracket-visibility.ly +++ /dev/null @@ -1,38 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms, tweaks-and-overrides" - - texidoc = " -The default behavior of tuplet-bracket visibility is to print a bracket -unless there is a beam of the same length as the tuplet. To control the -visibility of tuplet brackets, set the property -@code{'bracket-visibility} to either @code{#t} (always print a -bracket), @code{#f} (never print a bracket) or @code{#'if-no-beam} -(only print a bracket if there is no beam). - -" - doctitle = "Controlling tuplet bracket visibility" -} % begin verbatim - -music = \relative c'' { - \times 2/3 { c16[ d e } f8] - \times 2/3 { c8 d e } - \times 2/3 { c4 d e } -} - -\new Voice { - \relative c' { - << \music s4^"default" >> - \override TupletBracket #'bracket-visibility = #'if-no-beam - << \music s4^"'if-no-beam" >> - \override TupletBracket #'bracket-visibility = ##t - << \music s4^"#t" >> - \override TupletBracket #'bracket-visibility = ##f - << \music s4^"#f" >> - } -} - - diff --git a/input/lsr/creating-a-delayed-turn.ly b/input/lsr/creating-a-delayed-turn.ly deleted file mode 100644 index 5f7eb59fd6..0000000000 --- a/input/lsr/creating-a-delayed-turn.ly +++ /dev/null @@ -1,58 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks, editorial-annotations, tweaks-and-overrides" - -%% Translation of GIT committish: b10de35f895919aec109de6fb1fc84d42ad851b3 -texidoces = " -La creación de un grupeto circular de anticipación entre dos notas, -donde la nota inferior del grupeto utiliza una alteración, requiere -varias sobreescriturasw de propiedades. La propiedad -@code{outside-staff-priority} se debe establecer al valor #f, pues en -caso contrario tendría prioridad sobre la propiedad @code{avoid-slur -property}. El valor de @code{halign} se utiliza para colocar el -grupeto horizontalmente. - -" - -doctitlees = "Crear un grupeto de anticipación" - - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Einen Doppelschlag mit Vorhalt zu erstellen, wobei die untere Note das -Vorzeichen benutzt, erfordert einige Einstellungsänderungen. Die -@code{outside-staff-priority}-Eigenschaft muss auf falsch (@code{#f}) -gesetzt werden, weil sie sonst über die Eigenschaft -@code{avoid-slur property} dominieren würde. Der Wert von @code{halign} -wird benutzt, um den Doppelschlag horizontal zu positionieren. -" - - doctitlede = "Einen Doppelschlag mit Vorhalt erstellen" - - texidoc = " -Creating a delayed turn, where the lower note of the turn uses the -accidental, requires several overrides. The -@code{outside-staff-priority} property must be set to @code{#f}, as -otherwise this would take precedence over the @code{avoid-slur -property}. The value of @code{halign} is used to position the turn -horizontally. - -" - doctitle = "Creating a delayed turn" -} % begin verbatim - -\relative c'' { - \once \override TextScript #'avoid-slur = #'inside - \once \override TextScript #'outside-staff-priority = ##f - c2(^\markup \tiny \override #'(baseline-skip . 1) { - \halign #-4 - \center-column { - \sharp - \musicglyph #"scripts.turn" - } - } - d4.) c8 -} diff --git a/input/lsr/creating-a-sequence-of-notes-on-various-pitches.ly b/input/lsr/creating-a-sequence-of-notes-on-various-pitches.ly deleted file mode 100644 index 3667374650..0000000000 --- a/input/lsr/creating-a-sequence-of-notes-on-various-pitches.ly +++ /dev/null @@ -1,77 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "pitches" - -%% Translation of GIT committish: 48f804da6794a7bc8e7fdd4b1649f485b0b09d26 - texidoces = " -En una música que tenga muchas apariciones de la -misma secuencia de notas a distintas alturas, podría ser de -utilidad la siguiente función musical. Admite una nota, de la que -sólo se utiliza su altura. Las funciones de apoyo en Scheme se -han tomado prestadas del documento de \"Consejos y trucos\" de la -versión 2.10 del manual. Este ejemplo crea las duraciones -rítmicas que se usan a todo lo largo de «Marte», de «Los Planetas» -de Gustav Holst. - -" - doctitlees = "Crear una secuencia de notas a distintas alturas" - - texidoc = " -In music that contains many occurrences of the same sequence of notes -at different pitches, the following music function may prove useful. -It takes a note, of which only the pitch is used. The supporting -Scheme functions were borrowed from the \"Tips and tricks\" document in -the manual for version 2.10. This example creates the rhythm used -throughout Mars, from Gustav Holst's The Planets. - -" - doctitle = "Creating a sequence of notes on various pitches" -} % begin verbatim - -#(define (make-note-req p d) - (make-music 'NoteEvent - 'duration d - 'pitch p)) - -#(define (make-note p d) - (make-music 'EventChord - 'elements (list (make-note-req p d)))) - -#(define (seq-music-list elts) - (make-music 'SequentialMusic - 'elements elts)) - -#(define (make-triplet elt) - (make-music 'TimeScaledMusic - 'denominator 3 - 'numerator 2 - 'element elt)) - -rhythm = -#(define-music-function (parser location note) (ly:music?) - "Make the rhythm in Mars (the Planets) at the given note's pitch" - (let ((p (ly:music-property - (car (ly:music-property note 'elements)) - 'pitch))) - (seq-music-list - (list - (make-triplet (seq-music-list - (list - (make-note p (ly:make-duration 3 0 2 3)) - (make-note p (ly:make-duration 3 0 2 3)) - (make-note p (ly:make-duration 3 0 2 3))))) - (make-note p (ly:make-duration 2 0)) - (make-note p (ly:make-duration 2 0)) - (make-note p (ly:make-duration 3 0)) - (make-note p (ly:make-duration 3 0)) - (make-note p (ly:make-duration 2 0)))))) - -\new Staff { - \time 5/4 - \rhythm c' - \rhythm c'' - \rhythm g -} diff --git a/input/lsr/creating-arpeggios-across-notes-in-different-voices.ly b/input/lsr/creating-arpeggios-across-notes-in-different-voices.ly deleted file mode 100644 index a8af672984..0000000000 --- a/input/lsr/creating-arpeggios-across-notes-in-different-voices.ly +++ /dev/null @@ -1,46 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks" - -%% Translation of GIT committish: dff50e8e1d3134657a6b6203b9c93826dc4cef65 - texidoces = " -Se puede trazar un símbolo de arpegio entre notas de distintas -voces que están sobre el mismo pentagrama si el grabador -@code{Span_arpeggio_engraver} se traslada al contexto de -@code{Staff} context: - -" - doctitlees = "Crear arpegios entre notas de voces distintas" - -%% Translation of GIT committish: 6ce7f350682dfa99af97929be1dec6b9f1cbc01a -texidocde = " -Ein Arpeggio kann zwischen Noten aus unterschidlichen Stimmen auf demselben -System gezogen werden, wenn der @code{Span_arpeggio_engraver} in den -@code{Staff}-Kontext verschoben wird: - -" - doctitlede = "Arpeggios zwischen unterschiedlichen Stimmen erzeugen" - - texidoc = " -An arpeggio can be drawn across notes in different voices on the same -staff if the @code{Span_arpeggio_engraver} is moved to the @code{Staff} -context: - -" - doctitle = "Creating arpeggios across notes in different voices" -} % begin verbatim - -\new Staff \with { - \consists "Span_arpeggio_engraver" -} -\relative c' { - \set Staff.connectArpeggios = ##t - << - { 4\arpeggio 2 } \\ - { 2\arpeggio 2 } - >> -} - diff --git a/input/lsr/creating-blank-staves.ly b/input/lsr/creating-blank-staves.ly deleted file mode 100644 index 8728b56bab..0000000000 --- a/input/lsr/creating-blank-staves.ly +++ /dev/null @@ -1,59 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "staff-notation, editorial-annotations, contexts-and-engravers, paper-and-layout" - -%% Translation of GIT committish: f39a9724d9f51ed9d0d464689ef62f549d7b8dd6 - texidoces = " -Para crear pentagramas en blanco, genere compases vacíos y después -elimine el grabador de números de compás -@code{Bar_number_engraver} del contexto @code{Score}, y los -grabadores de la indicación de compás -@code{Time_signature_engraver}, de la clave @code{Clef_engraver} y -de los compases @code{Bar_engraver} del contexto de @code{Staff}. - -" - doctitlees = "Crear pentagramas en blanco" - - texidoc = " -To create blank staves, generate empty measures then remove the -@code{Bar_number_engraver} from the @code{Score} context, and the -@code{Time_signature_engraver}, @code{Clef_engraver} and -@code{Bar_engraver} from the @code{Staff} context. - -" - doctitle = "Creating blank staves" -} % begin verbatim - -#(set-global-staff-size 20) - -\score { - { - \repeat unfold 12 { s1 \break } - } - \layout { - indent = 0\in - \context { - \Staff - \remove "Time_signature_engraver" - \remove "Clef_engraver" - \remove "Bar_engraver" - } - \context { - \Score - \remove "Bar_number_engraver" - } - } -} - -\paper { - #(set-paper-size "letter") - ragged-last-bottom = ##f - line-width = 7.5\in - left-margin = 0.5\in - bottom-margin = 0.25\in - top-margin = 0.25\in -} - diff --git a/input/lsr/creating-cross-staff-arpeggios-in-a-piano-staff.ly b/input/lsr/creating-cross-staff-arpeggios-in-a-piano-staff.ly deleted file mode 100644 index f2adbf01f7..0000000000 --- a/input/lsr/creating-cross-staff-arpeggios-in-a-piano-staff.ly +++ /dev/null @@ -1,50 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks" - -%% Translation of GIT committish: dff50e8e1d3134657a6b6203b9c93826dc4cef65 - texidoces = " -Dentro de un @code{PianoStaff}, es posible hacer que un arpegio -cruce entre los pentagramas ajustando la propiedad -@code{PianoStaff.connectArpeggios}. - -" - doctitlees = "Crear arpegios que se cruzan entre pentagramas dentro de un sistema de piano" - -%% Translation of GIT committish: 6ce7f350682dfa99af97929be1dec6b9f1cbc01a -texidocde = " -Arpeggio über mehrere Systeme können in anderen Kontexten als dem -@code{PianoStaff} erstellt werden, wenn der @code{Span_arpeggio_engraver} -in den @code{Score}-Kontext eingefügt wird. - -" - doctitlede = "Arpeggio über mehrere Systeme in anderen Kontexten" - - texidoc = " -In a @code{PianoStaff}, it is possible to let an arpeggio cross between -the staves by setting the property @code{PianoStaff.connectArpeggios}. - - -" - doctitle = "Creating cross-staff arpeggios in a piano staff" -} % begin verbatim - -\new PianoStaff \relative c'' << - \set PianoStaff.connectArpeggios = ##t - \new Staff { - 4\arpeggio - 4\arpeggio - 4\arpeggio - 4\arpeggio - } - \new Staff { - \clef bass - \repeat unfold 4 { - 4\arpeggio - } - } ->> - diff --git a/input/lsr/creating-cross-staff-arpeggios-in-other-contexts.ly b/input/lsr/creating-cross-staff-arpeggios-in-other-contexts.ly deleted file mode 100644 index 35de0bf070..0000000000 --- a/input/lsr/creating-cross-staff-arpeggios-in-other-contexts.ly +++ /dev/null @@ -1,60 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks" - -%% Translation of GIT committish: dff50e8e1d3134657a6b6203b9c93826dc4cef65 - texidoces = " -Se pueden crear arpegios que se cruzan entre pentagramas dentro de -contextos distintos a @code{PianoStaff} si se incluye el grabador -@code{Span_arpeggio_engraver} en el contexto de @code{Score}. - -" - doctitlees = "Creación de arpegios que se cruzan entre pentagramas dentro de otros contextos" - -%% Translation of GIT committish: 6ce7f350682dfa99af97929be1dec6b9f1cbc01a - texidocde = " -In einem Klaviersystem (@code{PianoStaff}) ist es möglich, ein Arpeggio -zwischen beiden Systemen zu verbinden, indem die -@code{PianoStaff.connectArpeggios}-Eigenschaft gesetzt wird. - - -" - doctitlede = "Arpeggio zwischen Systemen in einem Klaviersystem erstellen" - - texidoc = " -Cross-staff arpeggios can be created in contexts other than -@code{PianoStaff} if the @code{Span_arpeggio_engraver} is included in -the @code{Score} context. - -" - doctitle = "Creating cross-staff arpeggios in other contexts" -} % begin verbatim - -\score { - \new StaffGroup { - \set Score.connectArpeggios = ##t - << - \new Voice \relative c' { - 2\arpeggio - 2\arpeggio - 1\arpeggio - } - \new Voice \relative c { - \clef bass - 2\arpeggio - 2\arpeggio - 1\arpeggio - } - >> - } - \layout { - \context { - \Score - \consists "Span_arpeggio_engraver" - } - } -} - diff --git a/input/lsr/creating-metronome-marks-in-markup-mode.ly b/input/lsr/creating-metronome-marks-in-markup-mode.ly deleted file mode 100644 index 0368919dd3..0000000000 --- a/input/lsr/creating-metronome-marks-in-markup-mode.ly +++ /dev/null @@ -1,45 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "staff-notation" - -%% Translation of GIT committish: dcd61338c753205b6f8d549389fcb0d999c3a675 - texidoces = " -Se pueden crear indicaciones metronómicas nuevas en modo de -marcado, pero no cambian el tempo en la salida MIDI. - -" - doctitlees = "Crear indicaciones metronómicas en modo de marcado" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Neue Metronombezeichnungen können als Textbeschriftung erstellt werden, -aber sie ändern nicht das Tempo für die MIDI-Ausgabe. - -" - - doctitlede = "Eine Metronombezeichnung als Textbeschriftung erstellen" - - texidoc = " -New metronome marks can be created in markup mode, but they will not -change the tempo in MIDI output. - -" - doctitle = "Creating metronome marks in markup mode" -} % begin verbatim - -\relative c' { - \tempo \markup { - \concat { - ( - \smaller \general-align #Y #DOWN \note #"16." #1 - " = " - \smaller \general-align #Y #DOWN \note #"8" #1 - ) - } - } - c1 - c4 c' c,2 -} diff --git a/input/lsr/creating-real-parenthesized-dynamics.ly b/input/lsr/creating-real-parenthesized-dynamics.ly deleted file mode 100644 index deaaf3e759..0000000000 --- a/input/lsr/creating-real-parenthesized-dynamics.ly +++ /dev/null @@ -1,53 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks, text" - -%% Translation of GIT committish: dff50e8e1d3134657a6b6203b9c93826dc4cef65 - texidoces = " -Aunque la manera más fácil de añadir paréntesis a una indicación -de dinámica es utilizar un bloque @code{\\markup}, este método -tiene un inconveniente: los objetos que se crean se comportarán -como elementos de marcado de texto y no como indicaciones -dinámicas. - -Sin embargo, es posible crear un objeto similar utilizando el -código de Scheme equivalente (como se explica en \"Interfaz del -programador de elementos de marcado\"), en combinación con la -función @code{make-dynamic-script}. De esta forma, el elemento de -marcado se tratará como una indicación dinámica, y por tanto -seguirá siendo compatible con instrucciones como -@code{\\dynamicUp} o @code{\\dynamicDown}. - -" - doctitlees = "Crear indicaciones dinámicas \"verdaderas\" entre paréntesis" - - texidoc = " -Although the easiest way to add parentheses to a dynamic mark is to use -a @code{\\markup} block, this method has a downside: the created -objects will behave like text markups, and not like dynamics. - -However, it is possible to create a similar object using the equivalent -Scheme code (as described in \"Markup programmer interface\"), combined -with the @code{make-dynamic-script} function. This way, the markup will -be regarded as a dynamic, and therefore will remain compatible with -commands such as @code{\\dynamicUp} or @code{\\dynamicDown}. - - - -" - doctitle = "Creating \"real\" parenthesized dynamics" -} % begin verbatim - -\paper { ragged-right = ##t } - -parenF = #(make-dynamic-script (markup #:line (#:normal-text #:italic - #:fontsize 2 "(" #:hspace -0.8 #:dynamic "f" #:normal-text - #:italic #:fontsize 2 ")" - ))) -\relative c'' { - c4\parenF c c \dynamicUp c\parenF -} - diff --git a/input/lsr/creating-simultaneous-rehearsal-marks.ly b/input/lsr/creating-simultaneous-rehearsal-marks.ly deleted file mode 100644 index 866749b830..0000000000 --- a/input/lsr/creating-simultaneous-rehearsal-marks.ly +++ /dev/null @@ -1,54 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks, text, tweaks-and-overrides" - -%% Translation of GIT committish: dff50e8e1d3134657a6b6203b9c93826dc4cef65 - texidoces = " -A diferencia de las inscripciones de texto, las lestras de ensayo -no se pueden apilar en un punto concreto de la partitura: sólo se -crea un objeto @code{RehearsalMark}. Utilizando un compás y línea -divisoria invisibles se puede crear una nueva marca de ensayo, -dando la apariencia de dos marcas en la misma columna. - -Este método también puede resultar útil para colocar marcas de -ensayo tanto al final de un sistema como al comienzo del sistema -siguiente. - -" - doctitlees = "Creación de marcas de ensayo simultáneas" - - texidoc = " -Unlike text scripts, rehearsal marks cannot be stacked at a particular -point in a score: only one @code{RehearsalMark} object is created. -Using an invisible measure and bar line, an extra rehearsal mark can be -added, giving the appearance of two marks in the same column. This -method may also prove useful for placing rehearsal marks at both the -end of one system and the start of the following system. - -" - doctitle = "Creating simultaneous rehearsal marks" -} % begin verbatim - -{ - \key a \major - \set Score.markFormatter = #format-mark-box-letters - \once \override Score.RehearsalMark #'outside-staff-priority = #5000 - \once \override Score.RehearsalMark #'self-alignment-X = #LEFT - \once \override Score.RehearsalMark #'break-align-symbols = #'(key-signature) - \mark \markup { \bold { Senza denti } } - - % the hidden measure and bar line - \once \override Score.TimeSignature #'stencil = ##f - \time 1/16 - s16 \bar "" - - \time 4/4 - \once \override Score.RehearsalMark #'self-alignment-X = #LEFT - \mark \markup { \box \bold Intro } - d'1 - \mark \default - d'1 -} diff --git a/input/lsr/creating-slurs-across-voices.ly b/input/lsr/creating-slurs-across-voices.ly deleted file mode 100644 index b132962104..0000000000 --- a/input/lsr/creating-slurs-across-voices.ly +++ /dev/null @@ -1,57 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks, keyboards, unfretted-strings" - -%% Translation of GIT committish: dff50e8e1d3134657a6b6203b9c93826dc4cef65 - texidoces = " -En determinadas situaciones es necesario crear ligaduras de -expresión entre notas que están en voces distintas. - -La solución es añadir notas invisibles a una de las voces -utilizando @code{\\hideNotes}. - -Este ejemplo es el compás 235 de la Chacona de la segunda Partita -para violín solo, BWV 1004, de Bach. - -" - doctitlees = "Hacer ligaduras entre voces distintas" - - texidoc = " -In some situations, it may be necessary to create slurs between notes -from different voices. - -The solution is to add invisible notes to one of the voices, using -@code{\\hideNotes}. - -This example is measure 235 of the Ciaconna from Bach's 2nd Partita for -solo violin, BWV 1004. - -" - doctitle = "Creating slurs across voices" -} % begin verbatim - -\relative c' { - << - { - d16( a') s a s a[ s a] s a[ s a] - } - \\ - { - \slurUp - bes,16[ s e]( - \hideNotes a) - \unHideNotes f[( - \hideNotes a) - \unHideNotes fis]( - \hideNotes a) - \unHideNotes g[( - \hideNotes a) - \unHideNotes gis]( - \hideNotes a) - } - >> -} - diff --git a/input/lsr/creating-text-spanners.ly b/input/lsr/creating-text-spanners.ly deleted file mode 100644 index 0fd479c404..0000000000 --- a/input/lsr/creating-text-spanners.ly +++ /dev/null @@ -1,63 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks, text, tweaks-and-overrides" - -%% Translation of GIT committish: dff50e8e1d3134657a6b6203b9c93826dc4cef65 - texidoces = " -Las instrucciones @code{\\startTextSpan} y @code{\\stopTextSpan} -permiten la creación de elementos de extensión textuales tan -fácilmente como indicaciones de pedal u -octavaciones. Sobreescribimos ciertas propiedades del objeto -@code{TextSpanner} para modificar su salida. - -" - doctitlees = "Crear elementos de extensión textuales" - - texidoc = " -The @code{\\startTextSpan} and @code{\\stopTextSpan} commands allow the -creation of text spanners as easily as pedal indications or -octavations. Override some properties of the @code{TextSpanner} object -to modify its output. - -" - doctitle = "Creating text spanners" -} % begin verbatim - -\paper { ragged-right = ##f } - -\relative c'' { - \override TextSpanner #'(bound-details left text) = #"bla" - \override TextSpanner #'(bound-details right text) = #"blu" - a4 \startTextSpan - b4 c - a4 \stopTextSpan - - \override TextSpanner #'style = #'line - \once \override TextSpanner - #'(bound-details left stencil-align-dir-y) = #CENTER - a4 \startTextSpan - b4 c - a4 \stopTextSpan - - \override TextSpanner #'style = #'dashed-line - \override TextSpanner #'(bound-details left text) = - \markup { \draw-line #'(0 . 1) } - \override TextSpanner #'(bound-details right text) = - \markup { \draw-line #'(0 . -2) } - \once \override TextSpanner #'(bound-details right padding) = #-2 - - a4 \startTextSpan - b4 c - a4 \stopTextSpan - - \set Staff.middleCPosition = #-13 - \override TextSpanner #'dash-period = #10 - \override TextSpanner #'dash-fraction = #0.5 - \override TextSpanner #'thickness = #10 - a4 \startTextSpan - b4 c - a4 \stopTextSpan -} diff --git a/input/lsr/custodes.ly b/input/lsr/custodes.ly deleted file mode 100644 index 41754b3aff..0000000000 --- a/input/lsr/custodes.ly +++ /dev/null @@ -1,43 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "ancient-notation, tweaks-and-overrides" - -%% Translation of GIT committish: aea975539ec44fd0f1a8fd25930b88b5ab64b53a - texidoces = " -Se pueden tipografiar «custos» en diferentes estilos. - -" - doctitlees = "Custos" - - texidoc = " -Custodes may be engraved in various styles. - -" - doctitle = "Custodes" -} % begin verbatim - -\layout { ragged-right = ##t } - -\new Staff \with { \consists "Custos_engraver" } \relative c' { - \override Staff.Custos #'neutral-position = #4 - - \override Staff.Custos #'style = #'hufnagel - c1^"hufnagel" \break - 1 - - \override Staff.Custos #'style = #'medicaea - c1^"medicaea" \break - 1 - - \override Staff.Custos #'style = #'vaticana - c1^"vaticana" \break - 1 - - \override Staff.Custos #'style = #'mensural - c1^"mensural" \break - 1 -} - diff --git a/input/lsr/customizing-fretboard-fret-diagrams.ly b/input/lsr/customizing-fretboard-fret-diagrams.ly deleted file mode 100644 index 9456589dd9..0000000000 --- a/input/lsr/customizing-fretboard-fret-diagrams.ly +++ /dev/null @@ -1,96 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "fretted-strings, tweaks-and-overrides" - -%% Translation of GIT committish: acbcbe3683d629575967b972b64ca5e1589bf330 - texidoces = " -Se pueden establecer las propiedades de los diagramas de -posiciones de acordes por medio de @code{'fret-diagram-details}. -Para los diagramas de posiciones de FretBoard, se aplican los -overrides (sobreescrituras) al objeto @code{FretBoards.FretBoard}. -Como @code{Voice}, @code{FretBoards} es un contexto del nivel -inferior, y por tanto se puede omitir su nombre en la -sobreescritura de propiedades. - -" - doctitlees = "Personalizar los diagramas de posiciones" - -%% Translation of GIT committish: 33f623301a41fcc53efadf96bca1c72834763415 - texidocde = " -Eigenschaften von Bunddiagrammen können in -@code{'fret-diagram-details} verändert werden. Einstellungen mit -dem @code{\override}-Befehl werden dem @code{FretBoards.FretBoard}-Objekt -zugewiesen. Genauso wie @code{Voice} ist auch @code{FretBoards} ein -Kontext der niedrigsten Ebene, weshalb der Kontext auch in dem Befehl -weggelassen werden kann. - -" - doctitlede = "Bunddiagramme anpassen" - - texidoc = " -Fret diagram properties can be set through -@code{'fret-diagram-details}. For FretBoard fret diagrams, overrides -are applied to the @code{FretBoards.FretBoard} object. Like -@code{Voice}, @code{FretBoards} is a bottom level context, therefore -can be omitted in property overrides. - -" - doctitle = "Customizing fretboard fret diagrams" -} % begin verbatim - -\include "predefined-guitar-fretboards.ly" -\storePredefinedDiagram \chordmode { c' } - #guitar-tuning - #"x;1-1-(;3-2;3-3;3-4;1-1-);" -<< - \new ChordNames { - \chordmode { c1 | c | c | d } - } - \new FretBoards { - % Set global properties of fret diagram - \override FretBoards.FretBoard #'size = #'1.2 - \override FretBoard - #'(fret-diagram-details finger-code) = #'in-dot - \override FretBoard - #'(fret-diagram-details dot-color) = #'white - \chordmode { - c - \once \override FretBoard #'size = #'1.0 - \once \override FretBoard - #'(fret-diagram-details barre-type) = #'straight - \once \override FretBoard - #'(fret-diagram-details dot-color) = #'black - \once \override FretBoard - #'(fret-diagram-details finger-code) = #'below-string - c' - \once \override FretBoard - #'(fret-diagram-details barre-type) = #'none - \once \override FretBoard - #'(fret-diagram-details number-type) = #'arabic - \once \override FretBoard - #'(fret-diagram-details orientation) = #'landscape - \once \override FretBoard - #'(fret-diagram-details mute-string) = #"M" - \once \override FretBoard - #'(fret-diagram-details label-dir) = #LEFT - \once \override FretBoard - #'(fret-diagram-details dot-color) = #'black - c' - \once \override FretBoard - #'(fret-diagram-details finger-code) = #'below-string - \once \override FretBoard - #'(fret-diagram-details dot-radius) = #0.35 - \once \override FretBoard - #'(fret-diagram-details dot-position) = #0.5 - \once \override FretBoard - #'(fret-diagram-details fret-count) = #3 - d - } - } - \new Voice { - c'1 | c' | c' | d' - } ->> diff --git a/input/lsr/customizing-markup-fret-diagrams.ly b/input/lsr/customizing-markup-fret-diagrams.ly deleted file mode 100644 index 3982630fe7..0000000000 --- a/input/lsr/customizing-markup-fret-diagrams.ly +++ /dev/null @@ -1,126 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "fretted-strings, tweaks-and-overrides" - -%% Translation of GIT committish: acbcbe3683d629575967b972b64ca5e1589bf330 - texidoces = " -Se pueden establecer las propiedades de los diagramas de -posiciones a través de @code{'fret-diagram-details}. Para los -diagramas de posiciones de marcado, se pueden aplicar overrides -(sobreescrituras) al objeto @code{Voice.TextScript} o directamente al elemento de marcado. - -" - doctitlees = "Personalizar diagramas de posiciones de marcado" - -%% Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 - - texidocfr = " -Les propriétés d'un diagramme de fret sont modifiables grâce au -@code{'fret-diagram-details}. Lorsqu'ils sont générés sous forme -de @code{\markup}, rien n'empêche de les modifier en jouant sur les -réglages de l'objet @code{Voice.TextScript} ou bien directement sur -le @qq{markup}. - -" - doctitlefr = "Personnalisation des diagrammes de fret" - -%% Translation of GIT committish: 33f623301a41fcc53efadf96bca1c72834763415 - texidocde = " -Bunddiagramme können mit der Eigenschaft @code{'fret-diagram-details} -angepasst werden. Bunddiagramme, die als Textbeschriftung eingefügt werden, -können Veränderungen im @code{Voice.TextScript}-Objekt oder direkt in der -Beschriftung vorgenommen werden. - -" - doctitlede = "Anpassung von Beschriftungs-Bunddiagrammen" - - texidoc = " -Fret diagram properties can be set through -@code{'fret-diagram-details}. For markup fret diagrams, overrides can -be applied to the @code{Voice.TextScript} object or directly to the -markup. - -" - doctitle = "Customizing markup fret diagrams" -} % begin verbatim - -<< - \chords { c1 | c | c | d } - - \new Voice = "mel" { - \textLengthOn - % Set global properties of fret diagram - \override TextScript #'size = #'1.2 - \override TextScript - #'(fret-diagram-details finger-code) = #'in-dot - \override TextScript - #'(fret-diagram-details dot-color) = #'white - - %% C major for guitar, no barre, using defaults - % terse style - c'1^\markup { \fret-diagram-terse #"x;3-3;2-2;o;1-1;o;" } - - %% C major for guitar, barred on third fret - % verbose style - % size 1.0 - % roman fret label, finger labels below string, straight barre - c'1^\markup { - % standard size - \override #'(size . 1.0) { - \override #'(fret-diagram-details . ( - (number-type . roman-lower) - (finger-code . in-dot) - (barre-type . straight))) { - \fret-diagram-verbose #'((mute 6) - (place-fret 5 3 1) - (place-fret 4 5 2) - (place-fret 3 5 3) - (place-fret 2 5 4) - (place-fret 1 3 1) - (barre 5 1 3)) - } - } - } - - %% C major for guitar, barred on third fret - % verbose style - % landscape orientation, arabic numbers, M for mute string - % no barre, fret label down or left, small mute label font - c'1^\markup { - \override #'(fret-diagram-details . ( - (finger-code . below-string) - (number-type . arabic) - (label-dir . -1) - (mute-string . "M") - (orientation . landscape) - (barre-type . none) - (xo-font-magnification . 0.4) - (xo-padding . 0.3))) { - \fret-diagram-verbose #'((mute 6) - (place-fret 5 3 1) - (place-fret 4 5 2) - (place-fret 3 5 3) - (place-fret 2 5 4) - (place-fret 1 3 1) - (barre 5 1 3)) - } - } - - %% simple D chord - % terse style - % larger dots, centered dots, fewer frets - % label below string - d'1^\markup { - \override #'(fret-diagram-details . ( - (finger-code . below-string) - (dot-radius . 0.35) - (dot-position . 0.5) - (fret-count . 3))) { - \fret-diagram-terse #"x;x;o;2-1;3-2;2-3;" - } - } - } ->> diff --git a/input/lsr/default-direction-of-stems-on-the-center-line-of-the-staff.ly b/input/lsr/default-direction-of-stems-on-the-center-line-of-the-staff.ly deleted file mode 100644 index 12ab026a49..0000000000 --- a/input/lsr/default-direction-of-stems-on-the-center-line-of-the-staff.ly +++ /dev/null @@ -1,40 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "editorial-annotations" - -%% Translation of GIT committish: 55ea64f469d9c1703222654c9e5bc8490b04a67a - texidoces = " -La dirección predeterminada de las plicas sobre la tercera línea -del pentagrama está determinada por la propiedad -@code{neutral-direction} del objeto @code{Stem}. - -" - doctitlees = "Dirección predeterminada de las plicas sobre la tercera línea del pentagrama" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Die Richtung von Hälsen auf der mittleren Linie kann mit der @code{Stem}-Eigenschaft -@code{neutral-direction} gesetzt werden. - -" - doctitlede = "Standardrichtung für Hälse auf der Mittellinie" - - texidoc = " -The default direction of stems on the center line of the staff is set -by the @code{Stem} property @code{neutral-direction}. - -" - doctitle = "Default direction of stems on the center line of the staff" -} % begin verbatim - -\relative c'' { - a4 b c b - \override Stem #'neutral-direction = #up - a4 b c b - \override Stem #'neutral-direction = #down - a4 b c b -} - diff --git a/input/lsr/defining-predefined-fretboards-for-other-instruments.ly b/input/lsr/defining-predefined-fretboards-for-other-instruments.ly deleted file mode 100644 index 64e72d0bfc..0000000000 --- a/input/lsr/defining-predefined-fretboards-for-other-instruments.ly +++ /dev/null @@ -1,164 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "fretted-strings" - -%% Translation of GIT committish: afbff4903c2dcf413255a42e38b1d26435509370 - texidoces = " - -Se pueden añadir diagramas de posiciones predefinidas para -instrumentos nuevos además de los estándar que se usan para la -guitarra. Este archivo muestra cómo se hace, definiendo una afinación -nueva y unas cuantas posiciones para el cuatro venezolano. - -Este archivo también muestra cómo se pueden incluir las digitaciones -en los acordes que se usan como puntos de referencia para la búsqueda -de acordes en la tabla, y mostrarse en el diagrama de posiciones y la -tablatura @code{TabStaff}, pero no en la música. - -Estas posiciones no se pueden transportar porque contienen información -de las cuerdas. Hay planes para corregir esto en un futuro. - -" - doctitlees = "Definición de posiciones predefinidas para otros instrumentos" - -%% Translation of GIT committish: cd4950757ab1ab6c89805b0b7c978bfca034f940 - - texidocfr = " -La liste des diagrammes standards prédéfinis pour la guitare peut être - augmentée d'autres définitions spécifiques à d'autres instruments. -Voici comment définir un nouvel accordage ainsi que quelques diagrammes -prédéfinis pour le @qq{cuatro vénézuélien}. - -Cet exemple illustre aussi la manière d'ajouter des doigtés aux -accords ; ils serviront de référence pour la boucle d'accord et seront -indiqués dans les diagrammes et le @code{TabStaff}, mais pas dans la musique. - -Ces diagrammes ne peuvent pas être transposés, dans la mesure où ils -contiennent des informations sur les cordes. Ceci est amené à évoluer. - -" - doctitlefr = "Création de diagrammes de fret prédéfinis pour d'autres instruments" - -%% Translation of GIT committish: 33f623301a41fcc53efadf96bca1c72834763415 - texidocde = " -Vordefinierte Bunddiagramme können für neue Instrumente hinzugefügt werden -neben denen, die schon für die Gitarre definiert sind. Dieses Schnipsel -zeigt, wie man eine neue Saitenstimmung definiert und dann eigene vordefinierte -Bunddiagramme bestimmt. Das Beispiel ist für das venezualische Cuatro. - -Dieses Schnipsel zeigt auch, wie Fingersatz in die Akkorde eingebunden -werden kann, um als Referenzpunkt für die Akkordauswahl benutzt werden -kann. Dieser Fingersatz wird im Bunddiagramm und in der Tabulatur, -aber nicht in den Noten angezeigt. - -Diese Bunddiagramme sind nicht transponierbar, weil sie Saiteninformationen -enthalten. Das soll in der Zukunft verbessert werden. - -" - doctitlede = "Eigene vordefinierte Bunddiagramme für andere Instrumente erstellen" - - texidoc = " -Predefined fret diagrams can be added for new instruments in addition -to the standards used for guitar. This file shows how this is done by -defining a new string-tuning and a few predefined fretboards for the -Venezuelan cuatro. - -This file also shows how fingerings can be included in the chords used -as reference points for the chord lookup, and displayed in the fret -diagram and the @code{TabStaff}, but not the music. - - -These fretboards are not transposable because they contain string -information. This is planned to be corrected in the future. - -" - doctitle = "Defining predefined fretboards for other instruments" -} % begin verbatim - -% add FretBoards for the Cuatro -% Note: This section could be put into a separate file -% predefined-cuatro-fretboards.ly -% and \included into each of your compositions - -cuatroTuning = #'(11 18 14 9) - -dSix = { } -dMajor = { } -aMajSeven = { } -dMajSeven = { } -gMajor = { } - -\storePredefinedDiagram \dSix - #cuatroTuning - #"o;o;o;o;" -\storePredefinedDiagram \dMajor - #cuatroTuning - #"o;o;o;3-3;" -\storePredefinedDiagram \aMajSeven - #cuatroTuning - #"o;2-2;1-1;2-3;" -\storePredefinedDiagram \dMajSeven - #cuatroTuning - #"o;o;o;1-1;" -\storePredefinedDiagram \gMajor - #cuatroTuning - #"2-2;o;1-1;o;" - -% end of potential include file /predefined-cuatro-fretboards.ly - - -#(set-global-staff-size 16) - -primerosNames = \chordmode { - d:6 d a:maj7 d:maj7 - g -} -primeros = { - \dSix \dMajor \aMajSeven \dMajSeven - \gMajor -} - -\score { - << - \new ChordNames { - \set chordChanges = ##t - \primerosNames - } - - \new Staff { - \new Voice \with { - \remove "New_fingering_engraver" - } - \relative c'' { - \primeros - } - } - - \new FretBoards { - \set stringTunings = #cuatroTuning - \override FretBoard - #'(fret-diagram-details string-count) = #'4 - \override FretBoard - #'(fret-diagram-details finger-code) = #'in-dot - \primeros - } - - \new TabStaff \relative c'' { - \set TabStaff.stringTunings = #cuatroTuning - \primeros - } - - >> - - \layout { - \context { - \Score - \override SpacingSpanner - #'base-shortest-duration = #(ly:make-moment 1 16) - } - } - \midi { } -} diff --git a/input/lsr/demo-midiinstruments.ly b/input/lsr/demo-midiinstruments.ly deleted file mode 100644 index c27263b427..0000000000 --- a/input/lsr/demo-midiinstruments.ly +++ /dev/null @@ -1,175 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "midi" - - texidoc = " -Problem: How to know which @code{midiInstrument} would be best for your -composition? Solution: A LilyPond demo file. - - - -" - doctitle = "Demo MidiInstruments" -} % begin verbatim - -\header { - title = "Demo of all midi sounds" - arranger = "Myself " -} - -baseMelody = \relative c' { - c4.\mf g c16 b' c d - e16 d e f g4 g'4 r - R1 -} -melody = { - \tempo 4 = 150 - \baseMelody -} - -\score { - \new Staff << - \new Voice \melody - >> - \layout { } -} - -\score { - \new Staff << - \new Voice { - r\mf - \set Staff.midiInstrument = #"acoustic grand" \melody - \set Staff.midiInstrument = #"bright acoustic" \melody - \set Staff.midiInstrument = #"electric grand" \melody - \set Staff.midiInstrument = #"honky-tonk" \melody - \set Staff.midiInstrument = #"electric piano 1" \melody - \set Staff.midiInstrument = #"electric piano 2" \melody - \set Staff.midiInstrument = #"harpsichord" \melody - \set Staff.midiInstrument = #"clav" \melody - \set Staff.midiInstrument = #"celesta" \melody - \set Staff.midiInstrument = #"glockenspiel" \melody - \set Staff.midiInstrument = #"music box" \melody - \set Staff.midiInstrument = #"vibraphone" \melody - \set Staff.midiInstrument = #"marimba" \melody - \set Staff.midiInstrument = #"xylophone" \melody - \set Staff.midiInstrument = #"tubular bells" \melody - \set Staff.midiInstrument = #"dulcimer" \melody - \set Staff.midiInstrument = #"drawbar organ" \melody - \set Staff.midiInstrument = #"percussive organ" \melody - \set Staff.midiInstrument = #"rock organ" \melody - \set Staff.midiInstrument = #"church organ" \melody - \set Staff.midiInstrument = #"reed organ" \melody - \set Staff.midiInstrument = #"accordion" \melody - \set Staff.midiInstrument = #"harmonica" \melody - \set Staff.midiInstrument = #"concertina" \melody - \set Staff.midiInstrument = #"acoustic guitar (nylon)" \melody - \set Staff.midiInstrument = #"acoustic guitar (steel)" \melody - \set Staff.midiInstrument = #"electric guitar (jazz)" \melody - \set Staff.midiInstrument = #"electric guitar (clean)" \melody - \set Staff.midiInstrument = #"electric guitar (muted)" \melody - \set Staff.midiInstrument = #"overdriven guitar" \melody - \set Staff.midiInstrument = #"distorted guitar" \melody - \set Staff.midiInstrument = #"acoustic bass" \melody - \set Staff.midiInstrument = #"electric bass (finger)" \melody - \set Staff.midiInstrument = #"electric bass (pick)" \melody - \set Staff.midiInstrument = #"fretless bass" \melody - \set Staff.midiInstrument = #"slap bass 1" \melody - \set Staff.midiInstrument = #"slap bass 2" \melody - \set Staff.midiInstrument = #"synth bass 1" \melody - \set Staff.midiInstrument = #"synth bass 2" \melody - \set Staff.midiInstrument = #"violin" \melody - \set Staff.midiInstrument = #"viola" \melody - \set Staff.midiInstrument = #"cello" \melody - \set Staff.midiInstrument = #"contrabass" \melody - \set Staff.midiInstrument = #"tremolo strings" \melody - \set Staff.midiInstrument = #"pizzicato strings" \melody - \set Staff.midiInstrument = #"orchestral harp" \melody - \set Staff.midiInstrument = #"timpani" \melody - \set Staff.midiInstrument = #"string ensemble 1" \melody - \set Staff.midiInstrument = #"string ensemble 2" \melody - \set Staff.midiInstrument = #"synthstrings 1" \melody - \set Staff.midiInstrument = #"synthstrings 2" \melody - \set Staff.midiInstrument = #"choir aahs" \melody - \set Staff.midiInstrument = #"voice oohs" \melody - \set Staff.midiInstrument = #"synth voice" \melody - \set Staff.midiInstrument = #"orchestra hit" \melody - \set Staff.midiInstrument = #"trumpet" \melody - \set Staff.midiInstrument = #"trombone" \melody - \set Staff.midiInstrument = #"tuba" \melody - \set Staff.midiInstrument = #"muted trumpet" \melody - \set Staff.midiInstrument = #"french horn" \melody - \set Staff.midiInstrument = #"brass section" \melody - \set Staff.midiInstrument = #"synthbrass 1" \melody - \set Staff.midiInstrument = #"synthbrass 2" \melody - \set Staff.midiInstrument = #"soprano sax" \melody - \set Staff.midiInstrument = #"alto sax" \melody - \set Staff.midiInstrument = #"tenor sax" \melody - \set Staff.midiInstrument = #"baritone sax" \melody - \set Staff.midiInstrument = #"oboe" \melody - \set Staff.midiInstrument = #"english horn" \melody - \set Staff.midiInstrument = #"bassoon" \melody - \set Staff.midiInstrument = #"clarinet" \melody - \set Staff.midiInstrument = #"piccolo" \melody - \set Staff.midiInstrument = #"flute" \melody - \set Staff.midiInstrument = #"recorder" \melody - \set Staff.midiInstrument = #"pan flute" \melody - \set Staff.midiInstrument = #"blown bottle" \melody - \set Staff.midiInstrument = #"shakuhachi" \melody - \set Staff.midiInstrument = #"whistle" \melody - \set Staff.midiInstrument = #"ocarina" \melody - \set Staff.midiInstrument = #"lead 1 (square)" \melody - \set Staff.midiInstrument = #"lead 2 (sawtooth)" \melody - \set Staff.midiInstrument = #"lead 3 (calliope)" \melody - \set Staff.midiInstrument = #"lead 4 (chiff)" \melody - \set Staff.midiInstrument = #"lead 5 (charang)" \melody - \set Staff.midiInstrument = #"lead 6 (voice)" \melody - \set Staff.midiInstrument = #"lead 7 (fifths)" \melody - \set Staff.midiInstrument = #"lead 8 (bass+lead)" \melody - \set Staff.midiInstrument = #"pad 1 (new age)" \melody - \set Staff.midiInstrument = #"pad 2 (warm)" \melody - \set Staff.midiInstrument = #"pad 3 (polysynth)" \melody - \set Staff.midiInstrument = #"pad 4 (choir)" \melody - \set Staff.midiInstrument = #"pad 5 (bowed)" \melody - \set Staff.midiInstrument = #"pad 6 (metallic)" \melody - \set Staff.midiInstrument = #"pad 7 (halo)" \melody - \set Staff.midiInstrument = #"pad 8 (sweep)" \melody - \set Staff.midiInstrument = #"fx 1 (rain)" \melody - \set Staff.midiInstrument = #"fx 2 (soundtrack)" \melody - \set Staff.midiInstrument = #"fx 3 (crystal)" \melody - \set Staff.midiInstrument = #"fx 4 (atmosphere)" \melody - \set Staff.midiInstrument = #"fx 5 (brightness)" \melody - \set Staff.midiInstrument = #"fx 6 (goblins)" \melody - \set Staff.midiInstrument = #"fx 7 (echoes)" \melody - \set Staff.midiInstrument = #"fx 8 (sci-fi)" \melody - \set Staff.midiInstrument = #"sitar" \melody - \set Staff.midiInstrument = #"banjo" \melody - \set Staff.midiInstrument = #"shamisen" \melody - \set Staff.midiInstrument = #"koto" \melody - \set Staff.midiInstrument = #"kalimba" \melody - \set Staff.midiInstrument = #"bagpipe" \melody - \set Staff.midiInstrument = #"fiddle" \melody - \set Staff.midiInstrument = #"shanai" \melody - \set Staff.midiInstrument = #"tinkle bell" \melody - \set Staff.midiInstrument = #"agogo" \melody - \set Staff.midiInstrument = #"steel drums" \melody - \set Staff.midiInstrument = #"woodblock" \melody - \set Staff.midiInstrument = #"taiko drum" \melody - \set Staff.midiInstrument = #"melodic tom" \melody - \set Staff.midiInstrument = #"synth drum" \melody - \set Staff.midiInstrument = #"reverse cymbal" \melody - \set Staff.midiInstrument = #"guitar fret noise" \melody - \set Staff.midiInstrument = #"breath noise" \melody - \set Staff.midiInstrument = #"seashore" \melody - \set Staff.midiInstrument = #"bird tweet" \melody - \set Staff.midiInstrument = #"telephone ring" \melody - \set Staff.midiInstrument = #"helicopter" \melody - \set Staff.midiInstrument = #"applause" \melody - \set Staff.midiInstrument = #"gunshot" \melody - } - >> - \midi { } -} - diff --git a/input/lsr/demonstrating-all-headers.ly b/input/lsr/demonstrating-all-headers.ly deleted file mode 100644 index 880f108655..0000000000 --- a/input/lsr/demonstrating-all-headers.ly +++ /dev/null @@ -1,55 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "text, paper-and-layout, titles" - - texidoc = " -A demonstration of all headers. - -" - doctitle = "Demonstrating all headers" -} % begin verbatim - -\header { - copyright = "copyright" - title = "title" - subtitle = "subtitle" - composer = "composer" - arranger = "arranger" - instrument = "instrument" - metre = "metre" - opus = "opus" - piece = "piece" - poet = "poet" - texidoc = "All header fields with special meanings." - copyright = "public domain" - enteredby = "jcn" - source = "urtext" -} - -\layout { - ragged-right = ##f -} - -\score { - \relative c'' { c1 | c | c | c } -} - -\score { - \relative c'' { c1 | c | c | c } - \header { - title = "localtitle" - subtitle = "localsubtitle" - composer = "localcomposer" - arranger = "localarranger" - instrument = "localinstrument" - metre = "localmetre" - opus = "localopus" - piece = "localpiece" - poet = "localpoet" - copyright = "localcopyright" - } -} - diff --git a/input/lsr/display-bracket-with-only-one-staff-in-a-system.ly b/input/lsr/display-bracket-with-only-one-staff-in-a-system.ly deleted file mode 100644 index e8df72f968..0000000000 --- a/input/lsr/display-bracket-with-only-one-staff-in-a-system.ly +++ /dev/null @@ -1,75 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "staff-notation, tweaks-and-overrides" - -%% Translation of GIT committish: dcd61338c753205b6f8d549389fcb0d999c3a675 - texidoces = " -Si hay un solo pentagrama en un de los tipos de sistema -@code{ChoirStaff} o @code{StaffGroup}, el comportamiento -predeterminado es que no se imprima el corchete en la barra inicial. -Esto se puede cambiar sobreescribiendo las propiedades adecuadas. - -Observe que en contextos como @code{PianoStaff} y -@code{GrandStaff} en que los sistemas empiezan con una llave en -lugar de un corchete, se debe establecer el valor de una propiedad -distinta, como se ve en el segundo sistema del ejemplo. - -" - doctitlees = "Mostrar corchete o llave en grupos de un solo pentagrama" - - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Wenn nur ein System einer Systemgruppe vom Typ @code{ChoirStaff} oder -@code{StaffGroup} angezeigt wird, wird die Klammer zu Beginn normalerweise -nicht gesetzt. Das kann verändert werden, indem man die ensprechende -Eigenschaft veränder. - -Bei Systemen wie @code{PianoStaff} und @code{GrandStaff}, die mit einer -geschweiften Klammer beginne, muss eine andere Eigenschaft verändt werden, -wie das zweite Beispiel zeigt. - -" - doctitlede = "Klammer anzeigen, wenn nur ein System gesetzt wird" - - texidoc = " -If there is only one staff in one of the staff types @code{ChoirStaff} -or @code{StaffGroup}, the bracket and the starting bar line will not be -displayed as standard behavior. This can be changed by overriding the -relevant properties. - -Note that in contexts such as @code{PianoStaff} and @code{GrandStaff} -where the systems begin with a brace instead of a bracket, another -property has to be set, as shown on the second system in the example. - -" - doctitle = "Display bracket with only one staff in a system" -} % begin verbatim - -\markup \left-column { - \score { - \new StaffGroup << - % Must be lower than the actual number of staff lines - \override StaffGroup.SystemStartBracket #'collapse-height = #1 - \override Score.SystemStartBar #'collapse-height = #1 - \new Staff { - c'1 - } - >> - \layout { } - } - \null - \score { - \new PianoStaff << - \override PianoStaff.SystemStartBrace #'collapse-height = #1 - \override Score.SystemStartBar #'collapse-height = #1 - \new Staff { - c'1 - } - >> - \layout { } - } -} diff --git a/input/lsr/displaying-complex-chords.ly b/input/lsr/displaying-complex-chords.ly deleted file mode 100644 index 5701c57c2a..0000000000 --- a/input/lsr/displaying-complex-chords.ly +++ /dev/null @@ -1,31 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "simultaneous-notes, chords" - - texidoc = " -Here is a way to display a chord where the same note is played twice -with different accidentals. - -" - doctitle = "Displaying complex chords" -} % begin verbatim - -fixA = { - \once \override Stem #'length = #9 - \once \override Accidental #'extra-offset = #'(0.3 . 0) -} -fixB = { - \once \override NoteHead #'extra-offset = #'(1.7 . 0) - \once \override Stem #'rotation = #'(45 0 0) - \once \override Stem #'extra-offset = #'(-0.2 . -0.2) - \once \override Stem #'flag-style = #'no-flag - \once \override Accidental #'extra-offset = #'(3.1 . 0) -} - -\relative c' { - << { \fixA 8 } \\ { \voiceThree \fixB dis } >> s -} - diff --git a/input/lsr/dodecaphonic-style-accidentals-for-each-note-including-naturals.ly b/input/lsr/dodecaphonic-style-accidentals-for-each-note-including-naturals.ly deleted file mode 100644 index 581a0a7eaf..0000000000 --- a/input/lsr/dodecaphonic-style-accidentals-for-each-note-including-naturals.ly +++ /dev/null @@ -1,64 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "pitches" - -%% Translation of GIT committish: 674a5f874c07063ae56d55be25c55fc3b4bdb7bf - doctitlees = "Alteraciones de estilo dodecafónico para todas las notas, incluidas las naturales" - texidoces = " -En las obras de principios del s.XX, empezando por Schoenberg, Berg y -Webern (la \"Segunda\" escuela de Viena), cada nota de la escala de -doce tonos se debe tratar con igualdad, sin ninguna jerarquía como los -grados clásicos tonales. Por tanto, estos compositores imprimen una -alteración accidental para cada nota, incluso en las notas naturales, -para enfatizar su nuevo enfoque de la teoría y el lenguaje musicales. - -Este fragmento de código muestra cómo conseguir dichas reglas de -notación. - -" - -%% Translation of GIT committish: e75f1604a1b866c853dee42dbffcb7800c706a5f - texidocde = " - In Werken des fürhen 20. Jahrhundert, angefangen mit Schönberg, Berg - und Webern (die zweite Wiener Schule), wird jeder Ton der - Zwölftonleiter als gleichwertig erachtet, ohne hierarchische - Ordnung. Deshalb wird in dieser Musik für jede Note ein Versetzungszeichen - ausgegeben, auch für unalterierte Tonhöhen, um das neue Verständnis - der Musiktheorie und Musiksprache zu verdeutlichen. - - Dieser Schnipsel zeigt, wie derartige Notationsregeln zu erstellen sind. - " - doctitlede = "Versetzungszeichen für jede Note im Stil der Zwölftonmusik" - - texidoc = " -In early 20th century works, starting with Schoenberg, Berg and Webern -(the \"Second\" Viennese school), every pitch in the twelve-tone scale -has to be regarded as equal, without any hierarchy such as the -classical (tonal) degrees. Therefore, these composers print one -accidental for each note, even at natural pitches, to emphasize their -new approach to music theory and language. - -This snippet shows how to achieve such notation rules. - -" - doctitle = "Dodecaphonic-style accidentals for each note including naturals" -} % begin verbatim - -\score { - \new Staff { - #(set-accidental-style 'dodecaphonic) - c'4 dis' cis' cis' - c'4 dis' cis' cis' - c'4 c' dis' des' - } - \layout { - \context { - \Staff - \remove "Key_engraver" - } - } -} - diff --git a/input/lsr/dotted-harmonics.ly b/input/lsr/dotted-harmonics.ly deleted file mode 100644 index e445756688..0000000000 --- a/input/lsr/dotted-harmonics.ly +++ /dev/null @@ -1,24 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "unfretted-strings, tweaks-and-overrides" - - texidoc = " -Artificial harmonics using @code{\\harmonic} do not show dots. To -override this behavior, set the context property @code{harmonicDots}. - -" - doctitle = "Dotted harmonics" -} % begin verbatim - -\relative c''' { - \time 3/4 - \key f \major - \set harmonicDots = ##t - 2. ~ - 4. 8( ) - 2. - 2. -} diff --git a/input/lsr/double-glissando.ly b/input/lsr/double-glissando.ly deleted file mode 100644 index 77afb3cb34..0000000000 --- a/input/lsr/double-glissando.ly +++ /dev/null @@ -1,33 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks, simultaneous-notes" - - texidoc = " -To connect chords with glissando lines, attach a second glissando to a -hidden voice. - -" - doctitle = "Double glissando" -} % begin verbatim - -\relative c { - \clef bass - << - { - % new voice ( = \voiceOne), hidden - \hideNotes - % attach glissando to note heads - e2\glissando g - } - \\ - { - % original voice with chords rearranged so that - % glissando is attached to a & c - 2\glissando - } - >> -} - diff --git a/input/lsr/drawing-boxes-around-grobs.ly b/input/lsr/drawing-boxes-around-grobs.ly deleted file mode 100644 index d8389c7a42..0000000000 --- a/input/lsr/drawing-boxes-around-grobs.ly +++ /dev/null @@ -1,34 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "editorial-annotations, tweaks-and-overrides" - - texidoc = " -The @code{print-function} can be overridden to draw a box around an -arbitrary grob. - -" - doctitle = "Drawing boxes around grobs" -} % begin verbatim - -\relative c'' { - \override TextScript #'stencil = - #(make-stencil-boxer 0.1 0.3 ly:text-interface::print) - c'4^"foo" - - \override Stem #'stencil = - #(make-stencil-boxer 0.05 0.25 ly:stem::print) - \override Score.RehearsalMark #'stencil = - #(make-stencil-boxer 0.15 0.3 ly:text-interface::print) - b8 - - \revert Stem #'stencil - c4. c4 - \mark "F" - c1 -} - - - diff --git a/input/lsr/drawing-circles-around-various-objects.ly b/input/lsr/drawing-circles-around-various-objects.ly deleted file mode 100644 index 24b477a90b..0000000000 --- a/input/lsr/drawing-circles-around-various-objects.ly +++ /dev/null @@ -1,32 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "editorial-annotations, tweaks-and-overrides" - - texidoc = " -The @code{\\circle} markup command draws circles around various -objects, for example fingering indications. For other objects, -specific tweaks may be required: this example demonstrates two -strategies for rehearsal marks and measure numbers. - -" - doctitle = "Drawing circles around various objects" -} % begin verbatim - -\relative c' { - c1 - \set Score.markFormatter = - #(lambda (mark context) - (make-circle-markup (format-mark-numbers mark context))) - \mark \default - c2 d^\markup { - \override #'(thickness . 3) { - \circle \finger 2 - } - } - \override Score.BarNumber #'break-visibility = #all-visible - \override Score.BarNumber #'stencil = - #(make-stencil-circler 0.1 0.25 ly:text-interface::print) -} diff --git a/input/lsr/editorial-annotations-intro.itely b/input/lsr/editorial-annotations-intro.itely deleted file mode 100644 index 0dd710632a..0000000000 --- a/input/lsr/editorial-annotations-intro.itely +++ /dev/null @@ -1,7 +0,0 @@ -@node Editorial annotations -@unnumbered Editorial annotations - -@ruser{Editorial annotations} - -@lysnippets - diff --git a/input/lsr/editorial-annotations.snippet-list b/input/lsr/editorial-annotations.snippet-list deleted file mode 100644 index f665b3bf67..0000000000 --- a/input/lsr/editorial-annotations.snippet-list +++ /dev/null @@ -1,25 +0,0 @@ -adding-fingerings-to-a-score.ly -allowing-fingerings-to-be-printed-inside-the-staff.ly -analysis-brackets-above-the-staff.ly -applying-note-head-styles-depending-on-the-step-of-the-scale.ly -avoiding-collisions-with-chord-fingerings.ly -blanking-staff-lines-using-the--whiteout-command.ly -changing-a-single-notes-size-in-a-chord.ly -changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.ly -coloring-notes-depending-on-their-pitch.ly -controlling-the-placement-of-chord-fingerings.ly -creating-a-delayed-turn.ly -creating-blank-staves.ly -default-direction-of-stems-on-the-center-line-of-the-staff.ly -drawing-boxes-around-grobs.ly -drawing-circles-around-various-objects.ly -embedding-native-postscript-in-a--markup-block.ly -grid-lines--changing-their-appearance.ly -grid-lines--emphasizing-rhythms-and-notes-synchronization.ly -making-some-staff-lines-thicker-than-the-others.ly -marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly -measure-counter.ly -positioning-fingering-indications-precisely.ly -positioning-text-markups-inside-slurs.ly -printing-text-from-right-to-left.ly -using-postscript-to-generate-special-note-head-shapes.ly diff --git a/input/lsr/embedding-native-postscript-in-a--markup-block.ly b/input/lsr/embedding-native-postscript-in-a--markup-block.ly deleted file mode 100644 index 68682ca081..0000000000 --- a/input/lsr/embedding-native-postscript-in-a--markup-block.ly +++ /dev/null @@ -1,34 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "editorial-annotations, text" - -%% Translation of GIT committish: 55ea64f469d9c1703222654c9e5bc8490b04a67a - texidoces = " -Se puede insertar códico PostScript directamente dentro de un -bloque @code{\\markup}. - -" - doctitlees = "Empotrar PostScript nativo dentro de un bloque \\markup" - - texidoc = " -PostScript code can be directly inserted inside a @code{\\markup} -block. - -" - doctitle = "Embedding native PostScript in a \\markup block" -} % begin verbatim - -% PostScript is a registered trademark of Adobe Systems Inc. - -\relative c'' { - a4-\markup { \postscript #"3 4 moveto 5 3 rlineto stroke" } - -\markup { \postscript #"[ 0 1 ] 0 setdash 3 5 moveto 5 -3 rlineto stroke " } - - b4-\markup { \postscript #"3 4 moveto 0 0 1 2 8 4 20 3.5 rcurveto stroke" } - s2 - a'1 -} - diff --git a/input/lsr/engravers-one-by-one.ly b/input/lsr/engravers-one-by-one.ly deleted file mode 100644 index 32ea13888b..0000000000 --- a/input/lsr/engravers-one-by-one.ly +++ /dev/null @@ -1,318 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "contexts-and-engravers" - -%% Translation of GIT committish: f39a9724d9f51ed9d0d464689ef62f549d7b8dd6 - texidoces = " -Del problema central de la notación, esto es, crear un determinado -símbolo, se encargan los «plugins» o complementos añadidos. Cada -uno de los complementos se conoce como un grabador. En este -ejemplo, los grabadores se van activando uno por uno, en el orden -siguiente: - -- cabeza de las notas, - -- el símbolo del pentagrama, - -- clave, - -- plicas, - -- barras, ligaduras de expresión, acentos, - -- alteraciones, líneas divisorias, indicación del compás, y armadura. - -Los grabadores se encuentran agrupados. Por ejemplo, las cabezas -de nota, ligaduras de expresión, barras de corchea, etc. forman un -contexto de voz. Los grabadores de la armadura, alteraciones, -compás, etc. forman un contexto de pentagrama. - -Sólo podemos ver el primer ejemplo en este documento; para ver los -demás debemos descartar el fragmento de código y procesarlo en -nuestro ordenador. - -" - doctitlees = "Los grabadores, uno por uno" - - texidoc = " -The notation problem, creating a certain symbol, is handled by plugins. -Each plugin is called an Engraver. In this example, engravers are -switched on one by one, in the following order: - -- note heads - - -- staff symbol, - - -- clef, - - -- stem, - - -- beams, slurs, accents, - - -- accidentals, bar lines, time signature, and key signature. - - - -Engravers are grouped. For example, note heads, slurs, beams etc. form -a Voice context. Engravers for key, accidental, bar, etc. form a Staff -context. - - -You may only see the first example in this document; please download -this snippet and run it from your own computer. - -" - doctitle = "Engravers one-by-one" -} % begin verbatim - -%% sample music -topVoice = \relative c' { - \key d\major - es8([ g] a[ fis]) - b4 - b16[-. b-. b-. cis-.] - d4-> -} - -botVoice = \relative c' { - \key d\major - c8[( f] b[ a)] - es4 - es16[-. es-. es-. fis-.] - b4-> -} - -hoom = \relative c { - \key d \major - \clef bass - g8-. r - r4 - fis8-. - r8 - r4 - b'4-> -} - -pah = \relative c' { - r8 b-. - r4 - r8 g8-. - r16 g-. r8 - \clef treble - fis'4-> -} - -% -% setup for Request->Element conversion. Guru-only -% - -MyStaff =\context { - \type "Engraver_group" - \name Staff - - \description "Handles clefs, bar lines, keys, accidentals. It can contain -@code{Voice} contexts." - - - \consists "Output_property_engraver" - - \consists "Font_size_engraver" - - \consists "Volta_engraver" - \consists "Separating_line_group_engraver" - \consists "Dot_column_engraver" - - \consists "Ottava_spanner_engraver" - \consists "Rest_collision_engraver" - \consists "Piano_pedal_engraver" - \consists "Piano_pedal_align_engraver" - \consists "Instrument_name_engraver" - \consists "Grob_pq_engraver" - \consists "Forbid_line_break_engraver" - \consists "Axis_group_engraver" - - \consists "Pitch_squash_engraver" - - \override VerticalAxisGroup #'minimum-Y-extent = #'(-6 . 6) - extraVerticalExtent = ##f - verticalExtent = ##f - localKeySignature = #'() - - % explicitly set instrument, so we don't get - % weird effects when doing instrument names for - % piano staves - - instrumentName = #'() - shortInstrumentName = #'() - - \accepts "Voice" -} - - -MyVoice = \context { - \type "Engraver_group" - \name Voice - - \description " - Corresponds to a voice on a staff. This context handles the - conversion of dynamic signs, stems, beams, super- and subscripts, - slurs, ties, and rests. - - You have to instantiate this explicitly if you want to have - multiple voices on the same staff." - - localKeySignature = #'() - \consists "Font_size_engraver" - - % must come before all - \consists "Output_property_engraver" - \consists "Arpeggio_engraver" - \consists "Multi_measure_rest_engraver" - \consists "Text_spanner_engraver" - \consists "Grob_pq_engraver" - \consists "Note_head_line_engraver" - \consists "Glissando_engraver" - \consists "Ligature_bracket_engraver" - \consists "Breathing_sign_engraver" - % \consists "Rest_engraver" - \consists "Grace_beam_engraver" - \consists "New_fingering_engraver" - \consists "Chord_tremolo_engraver" - \consists "Percent_repeat_engraver" - \consists "Slash_repeat_engraver" - -%{ - Must come before text_engraver, but after note_column engraver. - -%} - \consists "Text_engraver" - \consists "Dynamic_engraver" - \consists "Fingering_engraver" - - \consists "Script_column_engraver" - \consists "Rhythmic_column_engraver" - \consists "Cluster_spanner_engraver" - \consists "Tie_engraver" - \consists "Tie_engraver" - \consists "Tuplet_engraver" - \consists "Note_heads_engraver" - \consists "Rest_engraver" - - \consists "Skip_event_swallow_translator" -} - - -\score { - \topVoice - \layout { - \context { \MyStaff } - \context { \MyVoice } - } -} - - -MyStaff = \context { - \MyStaff - \consists "Staff_symbol_engraver" -} - -\score { - \topVoice - \layout { - \context { \MyStaff } - \context { \MyVoice } - } -} - -MyStaff = \context { - \MyStaff - \consists "Clef_engraver" - \remove "Pitch_squash_engraver" -} - -\score { - \topVoice - \layout { - \context { \MyStaff } - \context { \MyVoice } - } -} - -MyVoice = \context { - \MyVoice - \consists "Stem_engraver" -} - -\score { - \topVoice - \layout { - \context { \MyStaff } - \context { \MyVoice } - } -} - -MyVoice = \context { - \MyVoice - \consists "Beam_engraver" -} - -\score { - \topVoice - \layout { - \context { \MyStaff } - \context { \MyVoice } - } -} - -MyVoice= \context { - \MyVoice - \consists "Phrasing_slur_engraver" - \consists "Slur_engraver" - \consists "Script_engraver" -} - - -\score { - \topVoice - \layout { - \context { \MyStaff } - \context { \MyVoice } - } -} - -MyStaff = \context { - \MyStaff - \consists "Bar_engraver" - \consists "Time_signature_engraver" -} - -\score { - \topVoice - \layout { - \context { \MyStaff } - \context { \MyVoice } - } -} - -MyStaff = \context { - \MyStaff - \consists "Accidental_engraver" - \consists "Key_engraver" -} -\score { - \topVoice - \layout { - \context { \MyStaff } - \context { \MyVoice } - } -} - - diff --git a/input/lsr/engraving-ties-manually.ly b/input/lsr/engraving-ties-manually.ly deleted file mode 100644 index db8d13b76a..0000000000 --- a/input/lsr/engraving-ties-manually.ly +++ /dev/null @@ -1,57 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms" - -%% Translation of GIT committish: a634a20e0ab2a874ff8bf423e5651139df8733fc - doctitlees = "Grabado manual de las ligaduras" - texidoces = " -Se pueden grabar a mano las ligaduras modificando la propiedad -@code{tie-configuration} del objeto @code{TieColumn}. El primer número -indica la distancia a partir de la tercera línea del pentagrama en -espacios de pentagrama, y el segundo número indica la dirección (1 = -hacia arriba, -1 = hacia abajo). - -" - -%% Translation of GIT committish: 6ce7f350682dfa99af97929be1dec6b9f1cbc01a -texidocde = " -Überbindungen können manuell gesetzt werden, indem man die -@code{tie-configuration}-Eigenschaft des @code{TieColumn}-Objekts -beeinflusst. Die erste Zahl zeigt den Abstand von der Mitte in -Notensystemabständen an, die zweite Zahl zeigt die Richtung an (1 = nach oben, --1 = nach unten). - -" - doctitlede = "Bindebögen manuell setzen" - - -%% Translation of GIT committish: e71f19ad847d3e94ac89750f34de8b6bb28611df - texidocfr = " -Il est possible de graver manuellement les liaisons de tenue, en -modifiant la propriété @code{tie-configuration}. Pour chaque paire, le -premier nombre indique la distance à la portée, en espaces de portée, et -le second la direction (1 pour haut, @minus{}1 pour bas). - -" - doctitlefr = "Dessin à main levée de liaisons de tenue" - - texidoc = " -Ties may be engraved manually by changing the @code{tie-configuration} -property of the @code{TieColumn} object. The first number indicates the -distance from the center of the staff in staff-spaces, and the second -number indicates the direction (1 = up, -1 = down). - -" - doctitle = "Engraving ties manually" -} % begin verbatim - -\relative c' { - 2 ~ - \override TieColumn #'tie-configuration = - #'((0.0 . 1) (-2.0 . 1) (-4.0 . 1)) - ~ -} - diff --git a/input/lsr/engraving-tremolos-with-floating-beams.ly b/input/lsr/engraving-tremolos-with-floating-beams.ly deleted file mode 100644 index f001a70aff..0000000000 --- a/input/lsr/engraving-tremolos-with-floating-beams.ly +++ /dev/null @@ -1,46 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms, repeats" - - texidoc = " -If a tremolo's total duration is less than a quarter-note, or exactly a -half-note, or between a half-note and a whole-note, it is normally -typeset with all beams touching the stems. Certain engraving styles -typeset some of these beams as centered floating beams that do not -touch the stems. The number of floating beams in this type of tremolo -is controlled with the @code{'gap-count } property of the @code{Beam} -object, and the size of the gaps between beams and stems is set with -the @code{'gap} property. - - - -" - doctitle = "Engraving tremolos with floating beams" -} % begin verbatim - -\relative c'' { - \repeat tremolo 8 { a32 f } - \override Beam #'gap-count = #1 - \repeat tremolo 8 { a32 f } - \override Beam #'gap-count = #2 - \repeat tremolo 8 { a32 f } - \override Beam #'gap-count = #3 - \repeat tremolo 8 { a32 f } - - \override Beam #'gap-count = #3 - \override Beam #'gap = #1.33 - \repeat tremolo 8 { a32 f } - \override Beam #'gap = #1 - \repeat tremolo 8 { a32 f } - \override Beam #'gap = #0.67 - \repeat tremolo 8 { a32 f } - \override Beam #'gap = #0.33 - \repeat tremolo 8 { a32 f } -} - - - - diff --git a/input/lsr/entering-several-tuplets-using-only-one--times-command.ly b/input/lsr/entering-several-tuplets-using-only-one--times-command.ly deleted file mode 100644 index a62ba7649f..0000000000 --- a/input/lsr/entering-several-tuplets-using-only-one--times-command.ly +++ /dev/null @@ -1,78 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms" - -%% Translation of GIT committish: 3644a70508f73e9204837cb07430225e55bd38f6 - doctitlees = "Escribir varios grupos especiales usando una sola instrucción \\times" - texidoces = " -La propiedad @code{tupletSpannerDuration} establece cuánto debe durar -cada grupo de valoración especial contenido dentro del corchete que -aparece después de @code{\\times}. Así, se pueden escribir muchos -tresillos seguidos dentro de una sola expresión @code{\\times}, -ahorrando trabajo de teclado. - -En el ejemplo se muestran dos tresillos, aunque se ha escrito -@code{\\times} una sola vez. - - -Para ver más inforamción sobre @code{make-moment}, véase -\"Administración del tiempo\". - -" - -%% Translation of GIT committish: 6ce7f350682dfa99af97929be1dec6b9f1cbc01a - texidocde = " -Die Eigenschaft @code{tupletSpannerDuration} bestimmt, wie lange jede -der N-tolen innerhalb der Klammern nach dem @code{\\times}-Befehl -dauert. Auf diese Art können etwa viele Triolen nacheinander mit nur -einem @code{\\times}-Befehl geschrieben werden. - -Im Beispiel sind zwei Triolen zu sehen, obwohl @code{\\times} nur -einmal geschrieben wurde. - -Mehr Information über @code{make-moment} gibt es in \"Verwaltung der Zeiteinheiten\". - -" - doctitlede = "Mehrere Triolen notieren, aber nur einmal \\times benutzen" - - -%% Translation of GIT committish: e71f19ad847d3e94ac89750f34de8b6bb28611df - texidocfr = " -La propriété @code{tupletSpannerDuration} spécifie la longueur voulue de -chaque crochet. Avec elle, vous pouvez faire plusieurs nolets en ne -tapant @code{\times} qu'une fois, ce qui évite une longue saisie. - -Dans l'exemple suivant, deux triolets sont imprimés avec une seule fonction -@code{\times}. - -Pour plus d'information sur @code{make-moment}, voir @ref{Time administration}. - -" - doctitlefr = "Plusieurs triolets avec une seule commande \\times" - - texidoc = " -The property @code{tupletSpannerDuration} sets how long each of the -tuplets contained within the brackets after @code{\\times} should last. -Many consecutive tuplets can then be placed within a single -@code{\\times} expression, thus saving typing. - -In the example, two triplets are shown, while @code{\\times} was -entered only once. - - -For more information about @code{make-moment}, see \"Time -administration\". - -" - doctitle = "Entering several tuplets using only one \\times command" -} % begin verbatim - -\relative c' { - \time 2/4 - \set tupletSpannerDuration = #(ly:make-moment 1 4) - \times 2/3 { c8 c c c c c } -} - diff --git a/input/lsr/expressive-marks-intro.itely b/input/lsr/expressive-marks-intro.itely deleted file mode 100644 index c869a5347c..0000000000 --- a/input/lsr/expressive-marks-intro.itely +++ /dev/null @@ -1,7 +0,0 @@ -@node Expressive marks -@unnumbered Expressive marks - -@ruser{Expressive marks} - -@lysnippets - diff --git a/input/lsr/expressive-marks.snippet-list b/input/lsr/expressive-marks.snippet-list deleted file mode 100644 index f9b622b34d..0000000000 --- a/input/lsr/expressive-marks.snippet-list +++ /dev/null @@ -1,39 +0,0 @@ -adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.ly -adding-parentheses-around-an-expressive-mark-or-chordal-note.ly -adjusting-the-shape-of-falls-and-doits.ly -breathing-signs.ly -broken-crescendo-hairpin.ly -caesura-railtracks-with-fermata.ly -center-text-below-hairpin-dynamics.ly -changing--flageolet-mark-size.ly -changing-text-and-spanner-styles-for-text-dynamics.ly -changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.ly -changing-the-breath-mark-symbol.ly -combining-dynamics-with-markup-texts.ly -contemporary-glissando.ly -controlling-the-vertical-ordering-of-scripts.ly -creating-a-delayed-turn.ly -creating-arpeggios-across-notes-in-different-voices.ly -creating-cross-staff-arpeggios-in-a-piano-staff.ly -creating-cross-staff-arpeggios-in-other-contexts.ly -creating-real-parenthesized-dynamics.ly -creating-simultaneous-rehearsal-marks.ly -creating-slurs-across-voices.ly -creating-text-spanners.ly -double-glissando.ly -hiding-the-extender-line-for-text-dynamics.ly -horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly -inserting-a-caesura.ly -laissez-vibrer-ties.ly -line-arrows.ly -making-slurs-with-complex-dash-structure.ly -modifying-default-values-for-articulation-shorthand-notation.ly -piano-template-with-centered-dynamics.ly -positioning-text-markups-inside-slurs.ly -printing-hairpins-using-al-niente-notation.ly -printing-metronome-and-rehearsal-marks-below-the-staff.ly -setting-hairpin-behavior-at-bar-lines.ly -setting-the-minimum-length-of-hairpins.ly -snap-pizzicato-markup-bartok-pizzicato.ly -using-double-slurs-for-legato-chords.ly -vertically-aligning-dynamics-across-multiple-notes.ly diff --git a/input/lsr/faking-a-hammer-in-tablatures.ly b/input/lsr/faking-a-hammer-in-tablatures.ly deleted file mode 100644 index 887260d5d3..0000000000 --- a/input/lsr/faking-a-hammer-in-tablatures.ly +++ /dev/null @@ -1,24 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "fretted-strings" - - texidoc = " -A hammer in tablature can be faked with slurs. - -" - doctitle = "Faking a hammer in tablatures" -} % begin verbatim - -\score { - \new TabStaff { - \relative c'' { - c4( d) d( d) - d2( c) - } - } -} - - diff --git a/input/lsr/fine-tuning-pedal-brackets.ly b/input/lsr/fine-tuning-pedal-brackets.ly deleted file mode 100644 index 71ee9a7134..0000000000 --- a/input/lsr/fine-tuning-pedal-brackets.ly +++ /dev/null @@ -1,25 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "keyboards, tweaks-and-overrides" - - texidoc = " -The appearance of pedal brackets may be altered in different ways. - -" - doctitle = "Fine-tuning pedal brackets" -} % begin verbatim - -\paper { ragged-right = ##f } -\relative c'' { - c2\sostenutoOn c - c2\sostenutoOff c - \once \override Staff.PianoPedalBracket #'shorten-pair = #'(-7 . -2) - c2\sostenutoOn c - c2\sostenutoOff c - \once \override Staff.PianoPedalBracket #'edge-height = #'(0 . 3) - c2\sostenutoOn c - c2\sostenutoOff c -} diff --git a/input/lsr/fingerings,-string-indications,-and-right-hand-fingerings.ly b/input/lsr/fingerings,-string-indications,-and-right-hand-fingerings.ly deleted file mode 100644 index 67010be958..0000000000 --- a/input/lsr/fingerings,-string-indications,-and-right-hand-fingerings.ly +++ /dev/null @@ -1,51 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "fretted-strings" - -%% Translation of GIT committish: acbcbe3683d629575967b972b64ca5e1589bf330 - texidoces = " -En este ejemplo se combinan las digitaciones de la mano izquierda, -indicaciones del número de cuerda y digitaciones de la mano -derecha. - -" - doctitlees = "Digitaciones, indicación del número de cuerda y digitaciones de mano derecha" - -%% Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 - - texidocfr = " -L'exemple suivant illustre comment combiner des doigtés pour la main -gauche, des indications de corrde et des doigtés pour la main droite. - -" - doctitlefr = "Doigtés, indications de cordeet doigtés main droite" - -%% Translation of GIT committish: 33f623301a41fcc53efadf96bca1c72834763415 - texidocde = " -Dieses Beispiel kombiniert Fingersatz für die linke Hand, Saitennummern -und Fingersatz für die rechte Hand. - -" - doctitlede = "Fingersatz, Saitennummern und Fingersatz für die rechte Hand" - - texidoc = " -This example combines left-hand fingering, string indications, and -right-hand fingering. - -" - doctitle = "Fingerings, string indications, and right-hand fingerings" -} % begin verbatim - -#(define RH rightHandFinger) - -\relative c { - \clef "treble_8" - 4 - 4 - 4 - 4 -} - diff --git a/input/lsr/flamenco-notation.ly b/input/lsr/flamenco-notation.ly deleted file mode 100644 index 258acfd55a..0000000000 --- a/input/lsr/flamenco-notation.ly +++ /dev/null @@ -1,249 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "fretted-strings" - - texidoc = " -For flamenco guitar, special notation is used: - - -* a golpe symbol to indicate a slap on the guitar body with the nail of -the ring finger - - -* an arrow to indicate (the direction of) strokes - - -* different letters for fingering (\"p\": thumb, \"i\": index finger, -\"m\": middle finger, \"a\": ring finger and \"x\": little finger) - - -* 3- and 4-finger rasgueados; stroke upwards with all fingers, ending -with an up- and down using the index finger - - -* abanicos: strokes (in tuples) with thumb (down), little and index -finger (both up). There's also an abanico 2 where middle and ring -finger are used instead of the little finger. - - -* alza pua: fast playing with the thumb - - -Most figures use arrows in combination with fingering; with abanicos -and rasgueados, noteheads are printed only for the first chord. - -This snippet contains some header-like code that can be copied as -@samp{flamenco.ly} and included in source files. - -" - doctitle = "Flamenco notation" -} % begin verbatim - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%% Cut here ----- Start 'flamenco.ly' - -% Text indicators -abanico = \markup { \italic Abanico } -rasgueaso = \markup { \italic Ras. } -alzapua = \markup { \italic Alzapua } - -% Finger stroke symbols -strokeUp = \markup { \postscript #" - 0.1 setlinewidth - 0.5 0 moveto - 0.5 2 lineto - 0.2 1.4 lineto - 0.5 2 moveto - 0.8 1.4 lineto - stroke -"} - -strokeDown = \markup { \postscript #" - 0.1 setlinewidth - 0.5 2 moveto - 0.5 0 lineto - 0.2 0.6 lineto - 0.5 0 moveto - 0.8 0.6 lineto - stroke -"} - -% Golpe symbol -golpe = \markup { \postscript #" - 0.2 setlinewidth - 0 0 moveto - 1 0 lineto - 1 1 lineto - stroke - "\postscript #" - 0.1 setlinewidth - -0.6 -0.1 moveto - -0.6 1.0 lineto - 0.5 1.0 lineto - stroke -"} - -strokeUpGolpe = \markup { \column { \golpe \line { \strokeUp }}} -iUpGolpe = \markup { \column { \golpe \line { \small i } \line { \strokeUp }}} - -% Strokes for all fingers -pUp = \markup { \column { \small p \line { \strokeUp }}} -pDown = \markup { \column { \small p \line { \strokeDown }}} -iUp = \markup { \column { \small i \line { \strokeUp }}} -iDown = \markup { \column { \small i \line { \strokeDown }}} -mUp = \markup { \column { \small m \line { \strokeUp }}} -mDown = \markup { \column { \small m \line { \strokeDown }}} -aUp = \markup { \column { \small a \line { \strokeUp }}} -aDown = \markup { \column { \small a \line { \strokeDown }}} -xUp = \markup { \column { \small x \line { \strokeUp }}} -xDown = \markup { \column { \small x \line { \strokeDown }}} - - -% Just handy :) -tupletOff = { - \once \override TupletNumber #'stencil = ##f - \once \override TupletBracket #'stencil = ##f -} - -tupletsOff = { - \override TupletNumber #'stencil = ##f - \override TupletBracket #'bracket-visibility = #'if-no-beam -} - -tupletsOn = { - \override TupletBracket #'bracket-visibility = #'default - \revert TupletNumber #'stencil -} - -headsOff = { - \override TabNoteHead #'transparent = ##t - \override NoteHead #'transparent = ##t - \override NoteHead #'no-ledgers = ##t -} - -headsOn = { - \override TabNoteHead #'transparent = ##f - \override NoteHead #'transparent = ##f - \override NoteHead #'no-ledgers = ##f -} - -%%%%%%% Cut here ----- End 'flamenco.ly' -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -part = \relative c' { - 8^\iUp - 8^\iDown - r4 - r2^\golpe - - 8^\iUp - 8^\iDown - 8^\iUpGolpe - 8^\iDown - r2 - - 16^\aUp - \headsOff - ^\mUp - ^\iUp - ^\iDown~ - \headsOn - 2 - r4 - - \tupletOff - \times 4/5 { - 16^\xUp - \headsOff - ^\aUp - ^\mUp - ^\iUp - ^\iDown~ - \headsOn - } - 2 - r4 - - \tupletsOff - \times 2/3 { - 8^\pDown - \headsOff - ^\xUp - ^\iUp - \headsOn - } - - \times 2/3 { - 8^\pDown - \headsOff - ^\xUp - ^\iUp - \headsOn - } - - \times 2/3 { - 8^\pDown - \headsOff - ^\xUp - ^\iUp - \headsOn - } - \times 2/3 { - 8^\pDown - \headsOff - ^\xUp - ^\iUp - \headsOn - } - - \tupletsOff - \override Beam #'positions = #'(2 . 2) - \times 2/3 { - a8^\markup{ \small p } - ^\strokeUpGolpe - ^\strokeDown - } - \times 2/3 { - a,8^\markup{ \small p } - ^\strokeUpGolpe - ^\strokeDown - } - \times 2/3 { - a,8^\markup{ \small p } - ^\strokeUpGolpe - ^\strokeDown - } - \times 2/3 { - a,8^\markup{ \small p } - ^\strokeUpGolpe - ^\strokeDown - } - \tupletsOn - - \once \override TextScript #'extra-offset = #'(0 . -1) - 1_\golpe^\mUp - \bar "|." -} - -\score { - \new StaffGroup << - \context Staff = "part" << - \clef G - \transpose c c' - { - \part - } - >> - \context TabStaff { - \part - } - >> - \layout { - ragged-right = ##t - } -} - - diff --git a/input/lsr/flat-flags-and-beam-nibs.ly b/input/lsr/flat-flags-and-beam-nibs.ly deleted file mode 100644 index 993287229d..0000000000 --- a/input/lsr/flat-flags-and-beam-nibs.ly +++ /dev/null @@ -1,157 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms" - -%% Translation of GIT committish: 5c26e815f2ed54e6c4d022bac10dcc87a9916a29 - texidoces = " - Son posibles tanto los corchetes rectos sobre notas sueltas como -extremos de barra sueltos en figuras unidas, con una combinación de -@code{stemLeftBeamCount}, @code{stemRightBeamCount} e indicadores de -barra @code{[ ]} emparejados. - -Para corchetes rectos que apunten a la derecha sobre notas sueltas, -use indicadores de barra emparejados @code{[ ]} y establezca -@code{stemLeftBeamCount} a cero (véase el ejemplo 1). - -Para corchetes rectos que apunten a la izquierda, establezca en su -lugar @code{stemRightBeamCount} (ejemplo 2). - -Para extremos sueltos que apunten a la derecha al final de un conjunto -de notas unidas, establezca @code{stemRightBeamCount} a un valor -positivo. Y para extremos sueltos que apunten a la izquierda al -principio de un conjunto de notas unidas, establezca -@code{stemLeftBeamCount} en su lugar (ejemplo 3). - -A veces, para una nota suelta rodeada de silencios tiene sentido que -lleve los dos extremos sueltos del corchete plano, apuntando a derecha -e izquierda. Hágalo solamente con indicadores de barra emparejados -@code{[ ]} (ejemplo 4). - -(Observe que @code{\\set stemLeftBeamCount} siempre equivale a -@code{\\once \\set}. En otras palabras, los ajustes de la cantidad de -barras no se recuerdan, y por ello el par de corchetes planos -aplicados a la nota Do semicorchea @code{c'16 [ ]} del último ejemplo -no tiene nada que ver con el @code{\\set} de dos notas por detrás.) - -" - doctitlees = "Corchetes rectos y extremos de barra sueltos" - - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Gerade Fähnchen an einzelnen Noten und überstehende Balkenenden bei -bebalkten Notengruppen sind möglich mit einer Kombination aus -@code{stemLeftBeamCount}, @code{stemRightBeamCount} und Paaren von -@code{[]}-Balkenbegrenzungen. - -Für gerade Fähnchen, die nach rechts zeigen, kann @code{[]} eingesetzt -werden und @code{stemLeftBeamCount} auf Null gesetzt werden (wie -Bsp. 1). - -Für gerade Fähnchen, die nach links zeigen, muss @code{stemRightBeamCount} -eingesetzt werden (Bsp. 2). - -Für überstehende Balkenenden nach rechts muss @code{stemRightBeamCount} -auf einen positiven Wert gesetzt werden, für Balkenenden, die nach links -zeigen benutzt man @code{stemLeftBeamCount} (Bsp. 3). - -Manchmal können einzelne Noten, die von Pausen umgeben sind, auch Balkenenden -in beide Richtungen tragen. Das geschieht mit @code{[]}-Klammern (Bsp. 4). - -(@code{\\set stemLeftBeamCount} entspricht immer dem Befehl -@code{\\once \\set}. Anders gesagt müssen die Einstellungen immer wieder -wiederholt werden und die Fähnchen des letzten Sechszehntels im letzten -Beispiel haben nichts mit dem @code{\\set}-Befehl zwei Noten vorher zu tun.) - -" - doctitlede = "Gerade Fähnchen und überstehende Balkenenden" - - texidoc = " - Flat flags on lone notes and beam nibs at the ends of beamed figures -are both possible with a combination of @code{stemLeftBeamCount}, -@code{stemRightBeamCount} and paired @code{[]} beam indicators. - - - - -For right-pointing flat flags on lone notes, use paired @code{[]} beam -indicators and set @code{stemLeftBeamCount} to zero (see Example 1). - - - - -For left-pointing flat flags, set @code{stemRightBeamCount} instead -(Example 2). - - - - -For right-pointing nibs at the end of a run of beamed notes, set -@code{stemRightBeamCount} to a positive value. And for left-pointing -nibs at the start of a run of beamed notes, set -@code{stemLeftBeamCount} instead (Example 3). - - - - -Sometimes it may make sense for a lone note surrounded by rests to -carry both a left- and right-pointing flat flag. Do this with paired -@code{[]} beam indicators alone (Example 4). - - - - -(Note that @code{\\set stemLeftBeamCount} is always equivalent to -@code{\\once \\set}. In other words, the beam count settings are not -\"sticky\", so the pair of flat flags attached to the lone -@code{c'16[]} in the last example have nothing to do with the -@code{\\set} two notes prior.) - - - - -" - doctitle = "Flat flags and beam nibs" -} % begin verbatim - -\score { - << - % Example 1 - \new RhythmicStaff { - \set stemLeftBeamCount = #0 - c16[] - r8. - } - - % Example 2 - \new RhythmicStaff { - r8. - \set stemRightBeamCount = #0 - c16[] - } - - % Example 3 - \new RhythmicStaff { - c16 c - \set stemRightBeamCount = #2 - c16 r r - \set stemLeftBeamCount = #2 - c16 c c - } - - % Example 4 - \new RhythmicStaff { - c16 c - \set stemRightBeamCount = #2 - c16 r - c16[] - r16 - \set stemLeftBeamCount = #2 - c16 c - } - >> -} - diff --git a/input/lsr/flute-slap-notation.ly b/input/lsr/flute-slap-notation.ly deleted file mode 100644 index 3669ca46b4..0000000000 --- a/input/lsr/flute-slap-notation.ly +++ /dev/null @@ -1,32 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "winds" - - texidoc = " -It is possible to indicate special articulation techniques such as a -flute's \"tongue slap\" by replacing the note head with the appropriate -glyph. - -" - doctitle = "Flute slap notation" -} % begin verbatim - -slap = -#(define-music-function (parser location music) (ly:music?) -#{ - \override NoteHead #'stencil = #(lambda (grob) - (grob-interpret-markup grob - (markup #:musicglyph "scripts.sforzato"))) - \override NoteHead #'extra-offset = #'(0.1 . 0.0) - $music - \revert NoteHead #'stencil - \revert NoteHead #'extra-offset -#}) - -\relative c' { - c4 \slap c d r \slap { g a } b r -} - diff --git a/input/lsr/forcing-horizontal-shift-of-notes.ly b/input/lsr/forcing-horizontal-shift-of-notes.ly deleted file mode 100644 index 2339ba6455..0000000000 --- a/input/lsr/forcing-horizontal-shift-of-notes.ly +++ /dev/null @@ -1,47 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "simultaneous-notes, tweaks-and-overrides" - -%% Translation of GIT committish: 73115c93908af74c12a19753e79cbca47b2c2978 - doctitlees = "Forzar el desplazamiento horizontal de las notas" - texidoces = " -Cuando el motor de tipografiado no es capaz de todo, se puede usar la -propiedad force-hshift del objeto NoteColumn para sobreescribir -decisiones de tipografiado. Las unidades de medida que se usan aquí -son espacios de pentagrama. - -" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Wenn es zu Zusammenstößen kommt, kann mit folgender Lösung eine andere -Position manuell eingestellt werden. Die Einheiten hier sind -Notenlinienzwischenräume. - -" - doctitlede = "Horizontale Verschiebung von Noten erzwingen" - - texidoc = " -When the typesetting engine cannot cope, the following syntax can be -used to override typesetting decisions. The units of measure used here -are staff spaces. - -" - doctitle = "Forcing horizontal shift of notes" -} % begin verbatim - -\relative c' << - { - 2 - } - \\ - { - 2 - \once \override NoteColumn #'force-hshift = #1.7 - 2 - } ->> - diff --git a/input/lsr/forcing-rehearsal-marks-to-start-from-a-given-letter-or-number.ly b/input/lsr/forcing-rehearsal-marks-to-start-from-a-given-letter-or-number.ly deleted file mode 100644 index 281c0a519a..0000000000 --- a/input/lsr/forcing-rehearsal-marks-to-start-from-a-given-letter-or-number.ly +++ /dev/null @@ -1,37 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms" - - texidoc = " -This snippet demonstrates how to obtain automatic ordered rehearsal -marks, but from the letter or number desired. - -" - doctitle = "Forcing rehearsal marks to start from a given letter or number" -} % begin verbatim - -\relative c''{ - c1 \mark \default - c1 \mark \default - c1 \mark \default - c1 \mark #14 - c1 \mark \default - c1 \mark \default - c1 \mark \default - c1 \mark \default - \break - \set Score.markFormatter = #format-mark-numbers - c1 \mark #1 - c1 \mark \default - c1 \mark \default - c1 \mark \default - c1 \mark #14 - c1 \mark \default - c1 \mark \default - c1 \mark \default - c1 \mark \default -} - diff --git a/input/lsr/formatting-lyrics-syllables.ly b/input/lsr/formatting-lyrics-syllables.ly deleted file mode 100644 index 54c13a8553..0000000000 --- a/input/lsr/formatting-lyrics-syllables.ly +++ /dev/null @@ -1,32 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "text, vocal-music" - - texidoc = " -To format individual syllables in lyrics, use @code{\\markup @{ .... -@}} on these lyrics. - -" - doctitle = "Formatting lyrics syllables" -} % begin verbatim - -% Tip taken from http://lists.gnu.org/archive/html/lilypond-user/2007-12/msg00215.html -\header { - title = "Markup can be used inside lyrics!" -} - -mel = \relative c'' { c4 c c c } -lyr = \lyricmode { - Lyrics \markup { \italic "can" } \markup {\with-color #red "contain" } - \markup {\fontsize #8 \bold "Markup!" } -} - -<< - \context Voice = melody \mel - \context Lyrics \lyricsto melody \lyr ->> - - diff --git a/input/lsr/fret-diagrams-explained-and-developed.ly b/input/lsr/fret-diagrams-explained-and-developed.ly deleted file mode 100644 index 3d8a68e94b..0000000000 --- a/input/lsr/fret-diagrams-explained-and-developed.ly +++ /dev/null @@ -1,349 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "fretted-strings, tweaks-and-overrides" - - texidoc = " -This snippet shows many possibilities for obtaining and tweaking fret -diagrams. - -" - doctitle = "Fret diagrams explained and developed" -} % begin verbatim - -<< - \chords { - a2 a - \repeat unfold 3 { - c c c d d - } - } - - \new Voice = "mel" { - \textLengthOn - % Set global properties of fret diagram - \override TextScript #'size = #1.2 - \override TextScript - #'fret-diagram-details #'finger-code = #'below-string - \override TextScript #'fret-diagram-details #'dot-color = #'black - - %% A chord for ukelele - a'2^\markup { - \override #'(fret-diagram-details . ( - (string-count . 4) - (dot-color . white) - (finger-code . in-dot))) { - \fret-diagram #"4-2-2;3-1-1;2-o;1-o;" - } - } - - %% A chord for ukelele, with formatting defined in definition string - % 1.2 * size, 4 strings, 4 frets, fingerings below string - % dot radius .35 of fret spacing, dot position 0.55 of fret spacing - a'2^\markup { - \override #'(fret-diagram-details . ( - (dot-color . white) - (open-string . "o"))) { - \fret-diagram #"s:1.2;w:4;h:3;f:2;d:0.35;p:0.55;4-2-2;3-1-1;2-o;1-o;" - } - } - - %% These chords will be in normal orientation - - %% C major for guitar, barred on third fret - % verbose style - % roman fret label, finger labels below string, straight barre - c'2^\markup { - % 110% of default size - \override #'(size . 1.1) { - \override #'(fret-diagram-details . ( - (number-type . roman-lower) - (finger-code . below-string) - (barre-type . straight))) { - \fret-diagram-verbose #'((mute 6) - (place-fret 5 3 1) - (place-fret 4 5 2) - (place-fret 3 5 3) - (place-fret 2 5 4) - (place-fret 1 3 1) - (barre 5 1 3)) - } - } - } - - %% C major for guitar, barred on third fret - %% Double barre used to test barre function - % verbose style - c'2^\markup { - % 110% of default size - \override #'(size . 1.1) { - \override #'(fret-diagram-details . ( - (number-type . arabic) - (dot-label-font-mag . 0.9) - (finger-code . in-dot) - (fret-label-font-mag . 0.6) - (fret-label-vertical-offset . 0) - (label-dir . -1) - (mute-string . "M") - (xo-font-magnification . 0.4) - (xo-padding . 0.3))) { - \fret-diagram-verbose #'((mute 6) - (place-fret 5 3 1) - (place-fret 4 5 2) - (place-fret 3 5 3) - (place-fret 2 5 4) - (place-fret 1 3 1) - (barre 4 2 5) - (barre 5 1 3)) - } - } - } - - %% C major for guitar, with capo on third fret - % verbose style - c'2^\markup { - % 110% of default size - \override #'(size . 1.1) { - \override #'(fret-diagram-details . ( - (number-type . roman-upper) - (dot-label-font-mag . 0.9) - (finger-code . none) - (fret-label-vertical-offset . 0.5) - (xo-font-magnification . 0.4) - (xo-padding . 0.3))) { - \fret-diagram-verbose #'((mute 6) - (capo 3) - (open 5) - (place-fret 4 5 1) - (place-fret 3 5 2) - (place-fret 2 5 3) - (open 1)) - } - } - } - - %% simple D chord - d'2^\markup { - \override #'(fret-diagram-details . ( - (finger-code . below-string) - (dot-radius . 0.35) - (string-thickness-factor . 0.3) - (dot-position . 0.5) - (fret-count . 3))) { - \fret-diagram-terse #"x;x;o;2-1;3-2;2-3;" - } - } - - %% simple D chord, large top fret thickness - d'2^\markup { - \override #'(fret-diagram-details . ( - (finger-code . below-string) - (dot-radius . 0.35) - (dot-position . 0.5) - (top-fret-thickness . 7) - (fret-count . 3))) { - \fret-diagram-terse #"x;x;o;2-1;3-2;2-3;" - } - } - - % These chords will be in landscape orientation - \override TextScript - #'fret-diagram-details #'orientation = #'landscape - - %% C major for guitar, barred on third fret - % verbose style - % roman fret label, finger labels below string, straight barre - c'2^\markup { - % 110% of default size - \override #'(size . 1.1) { - \override #'(fret-diagram-details . ( - (number-type . roman-lower) - (finger-code . below-string) - (barre-type . straight))) { - \fret-diagram-verbose #'((mute 6) - (place-fret 5 3 1) - (place-fret 4 5 2) - (place-fret 3 5 3) - (place-fret 2 5 4) - (place-fret 1 3 1) - (barre 5 1 3)) - } - } - } - - %% C major for guitar, barred on third fret - %% Double barre used to test barre function - % verbose style - c'2^\markup { - % 110% of default size - \override #'(size . 1.1) { - \override #'(fret-diagram-details . ( - (number-type . arabic) - (dot-label-font-mag . 0.9) - (finger-code . in-dot) - (fret-label-font-mag . 0.6) - (fret-label-vertical-offset . 0) - (label-dir . -1) - (mute-string . "M") - (xo-font-magnification . 0.4) - (xo-padding . 0.3))) { - \fret-diagram-verbose #'((mute 6) - (place-fret 5 3 1) - (place-fret 4 5 2) - (place-fret 3 5 3) - (place-fret 2 5 4) - (place-fret 1 3 1) - (barre 4 2 5) - (barre 5 1 3)) - } - } - } - - %% C major for guitar, with capo on third fret - % verbose style - c'2^\markup { - % 110% of default size - \override #'(size . 1.1) { - \override #'(fret-diagram-details . ( - (number-type . roman-upper) - (dot-label-font-mag . 0.9) - (finger-code . none) - (fret-label-vertical-offset . 0.5) - (xo-font-magnification . 0.4) - (xo-padding . 0.3))) { - \fret-diagram-verbose #'((mute 6) - (capo 3) - (open 5) - (place-fret 4 5 1) - (place-fret 3 5 2) - (place-fret 2 5 3) - (open 1)) - } - } - } - - %% simple D chord - d'2^\markup { - \override #'(fret-diagram-details . ( - (finger-code . below-string) - (dot-radius . 0.35) - (dot-position . 0.5) - (fret-count . 3))) { - \fret-diagram-terse #"x;x;o;2-1;3-2;2-3;" - } - } - - %% simple D chord, large top fret thickness - d'2^\markup { - \override #'(fret-diagram-details . ( - (finger-code . below-string) - (dot-radius . 0.35) - (dot-position . 0.5) - (top-fret-thickness . 7) - (fret-count . 3))) { - \fret-diagram-terse #"x;x;o;2-1;3-2;2-3;" - } - } - - % These chords will be in opposing-landscape orientation - \override TextScript #'fret-diagram-details - #'orientation = #'opposing-landscape - - %% C major for guitar, barred on third fret - % verbose style - % roman fret label, finger labels below string, straight barre - c'2^\markup { - % 110% of default size - \override #'(size . 1.1) { - \override #'(fret-diagram-details . ( - (number-type . roman-lower) - (finger-code . below-string) - (barre-type . straight))) { - \fret-diagram-verbose #'((mute 6) - (place-fret 5 3 1) - (place-fret 4 5 2) - (place-fret 3 5 3) - (place-fret 2 5 4) - (place-fret 1 3 1) - (barre 5 1 3)) - } - } - } - - %% C major for guitar, barred on third fret - %% Double barre used to test barre function - % verbose style - c'2^\markup { - % 110% of default size - \override #'(size . 1.1) { - \override #'(fret-diagram-details . ( - (number-type . arabic) - (dot-label-font-mag . 0.9) - (finger-code . in-dot) - (fret-label-font-mag . 0.6) - (fret-label-vertical-offset . 0) - (label-dir . -1) - (mute-string . "M") - (xo-font-magnification . 0.4) - (xo-padding . 0.3))) { - \fret-diagram-verbose #'((mute 6) - (place-fret 5 3 1) - (place-fret 4 5 2) - (place-fret 3 5 3) - (place-fret 2 5 4) - (place-fret 1 3 1) - (barre 4 2 5) - (barre 5 1 3)) - } - } - } - - %% C major for guitar, with capo on third fret - % verbose style - c'2^\markup { - % 110% of default size - \override #'(size . 1.1) { - \override #'(fret-diagram-details . ( - (number-type . roman-upper) - (dot-label-font-mag . 0.9) - (finger-code . none) - (fret-label-vertical-offset . 0.5) - (xo-font-magnification . 0.4) - (xo-padding . 0.3))) { - \fret-diagram-verbose #'((mute 6) - (capo 3) - (open 5) - (place-fret 4 5 1) - (place-fret 3 5 2) - (place-fret 2 5 3) - (open 1)) - } - } - } - - %% simple D chord - d'2^\markup { - \override #'(fret-diagram-details . ( - (finger-code . below-string) - (dot-radius . 0.35) - (dot-position . 0.5) - (fret-count . 3))) { - \fret-diagram-terse #"x;x;o;2-1;3-2;2-3;" - } - } - - %% simple D chord, large top fret thickness - d'2^\markup { - \override #'(fret-diagram-details . ( - (finger-code . below-string) - (dot-radius . 0.35) - (dot-position . 0.5) - (top-fret-thickness . 7) - (fret-count . 3))) { - \fret-diagram-terse #"x;x;o;2-1;3-2;2-3;" - } - } - } ->> diff --git a/input/lsr/fretted-strings-intro.itely b/input/lsr/fretted-strings-intro.itely deleted file mode 100644 index 48a1fea65c..0000000000 --- a/input/lsr/fretted-strings-intro.itely +++ /dev/null @@ -1,7 +0,0 @@ -@node Fretted strings -@unnumbered Fretted strings - -@ruser{Fretted string instruments} - -@lysnippets - diff --git a/input/lsr/fretted-strings.snippet-list b/input/lsr/fretted-strings.snippet-list deleted file mode 100644 index d06972bae0..0000000000 --- a/input/lsr/fretted-strings.snippet-list +++ /dev/null @@ -1,21 +0,0 @@ -adding-fingerings-to-a-score.ly -adding-fingerings-to-tablatures.ly -allowing-fingerings-to-be-printed-inside-the-staff.ly -chordchanges-for-fretboards.ly -controlling-the-placement-of-chord-fingerings.ly -customizing-fretboard-fret-diagrams.ly -customizing-markup-fret-diagrams.ly -defining-predefined-fretboards-for-other-instruments.ly -faking-a-hammer-in-tablatures.ly -fingerings,-string-indications,-and-right-hand-fingerings.ly -flamenco-notation.ly -fret-diagrams-explained-and-developed.ly -guitar-strum-rhythms.ly -how-to-change-fret-diagram-position.ly -jazz-combo-template.ly -laissez-vibrer-ties.ly -letter-tablature-formatting.ly -modern-tab-text-clef.ly -placement-of-right-hand-fingerings.ly -polyphony-in-tablature.ly -stem-and-beam-behavior-in-tablature.ly diff --git a/input/lsr/generating-random-notes.ly b/input/lsr/generating-random-notes.ly deleted file mode 100644 index 1611b89b6d..0000000000 --- a/input/lsr/generating-random-notes.ly +++ /dev/null @@ -1,47 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "pitches" - -%% Translation of GIT committish: 48f804da6794a7bc8e7fdd4b1649f485b0b09d26 - texidoces = " -Este fragmento de código basado en Scheme genera -24 notas aleatorias (o tantas como se necesiten), basándose en la -hora actual (o en cualquier número pseudo-aleatorio que se -especifique en su lugar, para obtener las mismas notas aleatorias -cada vez): es decir, para obtener distintos patrones de notas, -sólo tiene que modificar este número. - -" - doctitlees = "Generación de notas aleatorias" - - texidoc = " -This Scheme-based snippet generates 24 random notes (or as many as -required), based on the current time (or any randomish number specified -instead, in order to obtain the same random notes each time): i.e., to -get different random note patterns, just change this number. - -" - doctitle = "Generating random notes" -} % begin verbatim - -\score { - { - #(let ((random-state (seed->random-state (current-time)))) - (ly:export - (make-sequential-music - (map (lambda (x) - (let ((idx (random 12 random-state))) - (make-event-chord - (list - (make-music 'NoteEvent - 'duration (ly:make-duration 2 0 1 1) - 'pitch (ly:make-pitch - (quotient idx 7) - (remainder idx 7) - 0)))))) - (make-list 24))))) - } -} diff --git a/input/lsr/grid-lines--changing-their-appearance.ly b/input/lsr/grid-lines--changing-their-appearance.ly deleted file mode 100644 index 62e660b175..0000000000 --- a/input/lsr/grid-lines--changing-their-appearance.ly +++ /dev/null @@ -1,73 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "editorial-annotations" - -%% Translation of GIT committish: 55ea64f469d9c1703222654c9e5bc8490b04a67a - texidoces = " -Se puede cambiar el aspecto de las líneas de rejilla -sobreescribiendo algunas de sus propiedades. - -" - doctitlees = "Líneas de rejilla: modificar su aspecto" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Die Erscheinung der Gitternetzlinien kann durch einige Eigenschaften -geändert werden. - -" - doctitlede = "Gitternetzlinien: Aussehen verändern" - - texidoc = " -The appearance of grid lines can be changed by overriding some of their -properties. - -" - doctitle = "Grid lines: changing their appearance" -} % begin verbatim - -\score { - \new ChoirStaff << - \new Staff { - \relative c'' { - \stemUp - c'4. d8 e8 f g4 - } - } - \new Staff { - \relative c { - % this moves them up one staff space from the default position - \override Score.GridLine #'extra-offset = #'(0.0 . 1.0) - \stemDown - \clef bass - \once \override Score.GridLine #'thickness = #5.0 - c4 - \once \override Score.GridLine #'thickness = #1.0 - g'4 - \once \override Score.GridLine #'thickness = #3.0 - f4 - \once \override Score.GridLine #'thickness = #5.0 - e4 - } - } - >> - \layout { - \context { - \Staff - % set up grids - \consists "Grid_point_engraver" - % set the grid interval to one quarter note - gridInterval = #(ly:make-moment 1 4) - } - \context { - \Score - \consists "Grid_line_span_engraver" - % this moves them to the right half a staff space - \override NoteColumn #'X-offset = #-0.5 - } - } -} - diff --git a/input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly b/input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly deleted file mode 100644 index 3cee144d8d..0000000000 --- a/input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly +++ /dev/null @@ -1,75 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "editorial-annotations" - -%% Translation of GIT committish: 55ea64f469d9c1703222654c9e5bc8490b04a67a - texidoces = " -Se pueden trazar líneas verticales normales entre pentagramas para -mostrar la relación entre notas; sin embargo, en caso de música -monofónica, podemos hacer invisible el segundo pentagrama, y que -las líneas sean más cortas, como en este fragmento de código. - -" - doctitlees = "Líneas de rejilla: destacar ritmos y la relación temporal entre notas" - - texidoc = " -Regular vertical lines can be drawn between staves to show note -synchronization; however, in case of monophonic music, you may want to -make the second stave invisible, and make the lines shorter like in -this snippet. - -" - doctitle = "Grid lines: emphasizing rhythms and notes synchronization" -} % begin verbatim - -\score { - \new ChoirStaff { - \relative c'' << - \new Staff { - \time 12/8 - \stemUp - c4. d8 e8 f g4 f8 e8. d16 c8 - } - \new Staff { - % hides staff and notes so that only the grid lines are visible - \hideNotes - \override Staff.BarLine #'transparent = ##t - \override Staff.StaffSymbol #'line-count = #0 - \override Staff.TimeSignature #'transparent = ##t - \override Staff.Clef #'transparent = ##t - - % dummy notes to force regular note spacing - \once \override Score.GridLine #'thickness = #4.0 - c8 c c - \once \override Score.GridLine #'thickness = #3.0 - c8 c c - \once \override Score.GridLine #'thickness = #4.0 - c8 c c - \once \override Score.GridLine #'thickness = #3.0 - c8 c c - } - >> - } - \layout { - \context { - \Score - \consists "Grid_line_span_engraver" - % center grid lines horizontally below note heads - \override NoteColumn #'X-offset = #-0.5 - } - \context { - \Staff - \consists "Grid_point_engraver" - gridInterval = #(ly:make-moment 1 8) - % set line length and positioning: - % two staff spaces above center line on hidden staff - % to four spaces below center line on visible staff - \override GridPoint #'Y-extent = #'(2 . -4) - } - ragged-right = ##t - } -} - diff --git a/input/lsr/grouping-beats.ly b/input/lsr/grouping-beats.ly deleted file mode 100644 index e5820fa807..0000000000 --- a/input/lsr/grouping-beats.ly +++ /dev/null @@ -1,49 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms" - -%% Translation of GIT committish: 151f1bb8c0aae8294e62d0470246ee1019aedfbc - texidoces = " -Los patrones de barrado se pueden alterar con la propiedad -@code{beatGrouping}: - -" - doctitlees = "Agrupar los pulsos" - -%% Translation of GIT committish: 6ce7f350682dfa99af97929be1dec6b9f1cbc01a -texidocde = " -Balkengruppen können mit der @code{beatGrouping}-Eigenschaft geändert -werden: - -" - doctitlede = "Notengruppen" - - -%% Translation of GIT committish: b3196fadd8f42d05ba35e8ac42f7da3caf8a3079 - texidocfr = " -La manière de gérer les ligatures est influencée par la propriété -@code{beatGrouping} : - -" - doctitlefr = "Regroupement selon la pulsation" - - texidoc = " -Beaming patterns may be altered with the @code{beatGrouping} property: - -" - doctitle = "Grouping beats" -} % begin verbatim - -\relative c'' { - \time 5/16 - #(override-auto-beam-setting '(end * * 5 16) 5 16) - \set beatGrouping = #'(2 3) - c8^"(2+3)" c16 c8 - \set beatGrouping = #'(3 2) - c8^"(3+2)" c16 c8 -} - - diff --git a/input/lsr/guitar-strum-rhythms.ly b/input/lsr/guitar-strum-rhythms.ly deleted file mode 100644 index 1adb20fc04..0000000000 --- a/input/lsr/guitar-strum-rhythms.ly +++ /dev/null @@ -1,79 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms, fretted-strings" - -%% Translation of GIT committish: 4c465c44a037a2a9570964bde1ce64c1cb15014f - texidoces = " -Para la música de guitarra, es posible mostrar los ritmos de rasgueo, -además de las notas de la melodía, acordes y diagramas de posiciones. - -" - doctitlees = "Ritmos rasgueados de guitarra" - -%% Translation of GIT committish: 6ce7f350682dfa99af97929be1dec6b9f1cbc01a - texidocde = " -In Guitarrennotation kann neben Melodie, Akkordbezeichnungen und -Bunddiagrammen auch der Schlagrhythmus angegeben werden. - -" - doctitlede = "Schlagrhythmus für Guitarren" - - -%% Translation of GIT committish: fa7695ea860d7ab2db86581dd5f8bc4f413f6705 - texidocfr = " -En matière de notation pour guitare, il arrive que soient indiqués les -@qq{coups de gratte} en plus de la mélodie, grilles d'accords et -diagrammes de tablature. - -" - doctitlede = "Rythmique et guitare" - - texidoc = " -For guitar music, it is possible to show strum rhythms, along with -melody notes, chord names and fret diagrams. - -" - doctitle = "Guitar strum rhythms" -} % begin verbatim - -\include "predefined-guitar-fretboards.ly" -<< - \new ChordNames { - \chordmode { - c1 f g c - } - } - \new FretBoards { - \chordmode { - c1 f g c - } - } - \new Voice \with { - \consists "Pitch_squash_engraver" - } { - \relative c'' { - \improvisationOn - c4 c8 c c4 c8 c - f4 f8 f f4 f8 f - g4 g8 g g4 g8 g - c4 c8 c c4 c8 c - } - } - \new Voice = "melody" { - \relative c'' { - c2 e4 e4 - f2. r4 - g2. a4 - e4 c2. - } - } - \new Lyrics { - \lyricsto "melody" { - This is my song. - I like to sing. - } - } ->> diff --git a/input/lsr/heavily-customized-polymetric-time-signatures.ly b/input/lsr/heavily-customized-polymetric-time-signatures.ly deleted file mode 100644 index 9c6d0ae43f..0000000000 --- a/input/lsr/heavily-customized-polymetric-time-signatures.ly +++ /dev/null @@ -1,57 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms, percussion" - - texidoc = " -Though the polymetric time signature shown was not the most essential -item here, it has been included to show the beat of this piece (which -is the template of a real Balkan song!). - -" - doctitle = "Heavily customized polymetric time signatures" -} % begin verbatim - -#(define plus (markup #:vcenter "+")) -#(define ((custom-time-signature one two three four five six - seven eight nine ten eleven num) grob) - (grob-interpret-markup grob - (markup #:override '(baseline-skip . 0) #:number - (#:line ( - (#:column (one num)) plus - (#:column (two num)) plus - (#:column (three num)) plus - (#:column (four num)) plus - (#:column (five num)) plus - (#:column (six num)) plus - (#:column (seven num)) plus - (#:column (eight num)) plus - (#:column (nine num)) plus - (#:column (ten num)) plus - (#:column (eleven num))))))) - -melody = \relative c'' { - \set Staff.instrumentName = #"Bb Sop." - \key g \major - #(set-time-signature 25 8 '(3 2 2 3 2 2 2 2 3 2 2)) - \override Staff.TimeSignature #'stencil = - #(custom-time-signature "3" "2" "2" "3" "2" "2" - "2" "2" "3" "2" "2" "8") - c8 c c d4 c8 c b c b a4 g fis8 e d c b' c d e4-^ fis8 g \break - c,4. d4 c4 d4. c4 d c2 d4. e4-^ d4 - c4. d4 c4 d4. c4 d c2 d4. e4-^ d4 \break - c4. d4 c4 d4. c4 d c2 d4. e4-^ d4 - c4. d4 c4 d4. c4 d c2 d4. e4-^ d4 \break -} - -drum = \new DrumStaff \drummode { - \bar "|:" bd4.^\markup { "Drums" } sn4 bd \bar ":" sn4. - bd4 sn \bar ":" bd sn bd4. sn4 bd \bar ":|" -} - -{ - \melody - \drum -} diff --git a/input/lsr/hiding-the-extender-line-for-text-dynamics.ly b/input/lsr/hiding-the-extender-line-for-text-dynamics.ly deleted file mode 100644 index 208914bdc7..0000000000 --- a/input/lsr/hiding-the-extender-line-for-text-dynamics.ly +++ /dev/null @@ -1,40 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks" - -%% Translation of GIT committish: dff50e8e1d3134657a6b6203b9c93826dc4cef65 - texidoces = " -Los cambios de dinámica con estilo de texto (como cresc. y dim.) -se imprimen con una línea intermitente que muestra su alcance. -Esta línea se puede suprimir de la siguiente manera: - -" - doctitlees = "Ocultar la línea de extensión de las expresiones textuales de dinámica" - -%% Translation of GIT committish: 6ce7f350682dfa99af97929be1dec6b9f1cbc01a -texidocde = " -Dynamik-Texte (wie cresc. und dim.) werden mit einer gestrichelten Linie -gesetzt, die ihre Dauer anzeigt. Diese Linie kann auf foldenge Weise -unterdrückt werden: - -" - doctitlede = "Crescendo-Linien von Dynamik-Texten unterdrücken" - - texidoc = " -Text style dynamic changes (such as cresc. and dim.) are printed with a -dashed line showing their extent. This line can be suppressed in the -following way: - -" - doctitle = "Hiding the extender line for text dynamics" -} % begin verbatim - -\relative c'' { - \override DynamicTextSpanner #'dash-period = #-1.0 - \crescTextCresc - c1\< | d | b | c\! -} - diff --git a/input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly b/input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly deleted file mode 100644 index 0457dcfcb0..0000000000 --- a/input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly +++ /dev/null @@ -1,161 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks, tweaks-and-overrides" - - texidoc = " -Some dynamic expressions involve additional text, like \"sempre pp\". -Since lilypond aligns all dynamics centered on the note, the \\pp would -be displayed way after the note it applies to. - -To correctly align the \"sempre \\pp\" horizontally, so that it is -aligned as if it were only the \\pp, there are several approaches: - -* Simply use @code{\\once\\override DynamicText #'X-offset = #-9.2} -before the note with the dynamics to manually shift it to the correct -position. Drawback: This has to be done manually each time you use that -dynamic markup... * Add some padding (@code{#:hspace 7.1}) into the -definition of your custom dynamic mark, so that after lilypond -center-aligns it, it is already correctly aligned. Drawback: The -padding really takes up that space and does not allow any other markup -or dynamics to be shown in that position. - -* Shift the dynamic script @code{\\once\\override ... #'X-offset = ..}. -Drawback: @code{\\once\\override} is needed for every invocation! - -* Set the dimensions of the additional text to 0 (using -@code{#:with-dimensions '(0 . 0) '(0 . 0)}). Drawback: To lilypond -\"sempre\" has no extent, so it might put other stuff there and create -collisions (which are not detected by the collision dection!). Also, -there seems to be some spacing, so it's not exactly the same alignment -as without the additional text - -* Add an explicit shifting directly inside the scheme function for the -dynamic-script. - -* Set an explicit alignment inside the dynamic-script. By default, this -won't have any effect, only if one sets X-offset! Drawback: One needs -to set @code{DynamicText #'X-offset}, which will apply to all dynamic -texts! Also, it is aligned at the right edge of the additional text, -not at the center of pp. - - - - -" - doctitle = "Horizontally aligning custom dynamics (e.g. \"sempre pp\", \"piu f\", \"subito p\")" -} % begin verbatim - -\header { title = "Horizontally aligning custom dynamics" } - -\paper { ragged-right = ##f } - -% Solution 1: Using a simple markup with a particular halign value -% Drawback: It's a markup, not a dynamic command, so \dynamicDown -% etc. will have no effect -semppMarkup = \markup { \halign #1.4 \italic "sempre" \dynamic "pp" } - -% Solution 2: Using a dynamic script & shifting with -% \once \override ... #'X-offset = .. -% Drawback: \once \override needed for every invocation -semppK = -#(make-dynamic-script - (markup #:line - (#:normal-text - #:italic "sempre" - #:dynamic "pp"))) - -% Solution 3: Padding the dynamic script so the center-alignment -% puts it at the correct position -% Drawback: the padding really reserves the space, nothing else can be there -semppT = -#(make-dynamic-script - (markup #:line - (#:normal-text - #:italic "sempre" - #:dynamic "pp" - #:hspace 7.1))) - -% Solution 4: Dynamic, setting the dimensions of the additional text to 0 -% Drawback: To lilypond "sempre" has no extent, so it might put -% other stuff there => collisions -% Drawback: Also, there seems to be some spacing, so it's not exactly the -% same alignment as without the additional text -semppM = -#(make-dynamic-script - (markup #:line (#:with-dimensions '(0 . 0) '(0 . 0) - #:right-align #:normal-text #:italic "sempre" #:dynamic "pp"))) - -% Solution 5: Dynamic with explicit shifting inside the scheme function -semppG = -#(make-dynamic-script - (markup - #:hspace 0 #:translate '(-18.85 . 0) - #:line( #:normal-text #:italic "sempre" #:dynamic "pp"))) - -% Solution 6: Dynamic with explicit alignment. This has only effect, if one sets X-offset! -% Drawback: One needs to set DynamicText #'X-offset! -% Drawback: Aligned at the right edge of the additional text, not at the center of pp -semppMII = -#(make-dynamic-script (markup #:line(#:right-align - #:normal-text #:italic "sempre" #:dynamic "pp"))) - -\context StaffGroup << - \context Staff = "s" << - \set Staff.instrumentName = "Normal" - \relative c'' { - \key es \major - c4\pp c\p c c | c\ff c c\pp c - } - >> - \context Staff = "sMarkup" << - \set Staff.instrumentName = \markup \column { Normal markup } - \relative c'' { - \key es \major - c4-\semppMarkup c\p c c | c\ff c c-\semppMarkup c - } - >> - \context Staff = "sK" << - \set Staff.instrumentName = \markup \column { Explicit shifting } - \relative c'' { - \key es \major - \once \override DynamicText #'X-offset = #-9.2 - c4\semppK c\p c c - c4\ff c - \once \override DynamicText #'X-offset = #-9.2 - c4\semppK c - } - >> - \context Staff = "sT" << - \set Staff.instrumentName = \markup \column { Right padding } - \relative c'' { - \key es \major - c4\semppT c\p c c | c\ff c c\semppT c - } - >> - \context Staff = "sM" << - \set Staff.instrumentName = \markup \column { Setting dimension "to zero" } - \relative c'' { - \key es \major - c4\semppM c\p c c | c\ff c c\semppM c - } - >> - \context Staff = "sG" << - \set Staff.instrumentName = \markup \column { Shifting inside dynamics } - \relative c'' { - \key es \major - c4\semppG c\p c c | c\ff c c\semppG c - } - >> - \context Staff = "sMII" << - \set Staff.instrumentName = \markup \column { Alignment inside dynamics } - \relative c'' { - \key es \major - % Setting to ##f (false) gives the same result - \override DynamicText #'X-offset = #0 - c4\semppMII c\p c c | c\ff c c\semppMII c - } - >> ->> diff --git a/input/lsr/how-to-change-fret-diagram-position.ly b/input/lsr/how-to-change-fret-diagram-position.ly deleted file mode 100644 index 1e86c71dd0..0000000000 --- a/input/lsr/how-to-change-fret-diagram-position.ly +++ /dev/null @@ -1,58 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "fretted-strings, tweaks-and-overrides" - - texidoc = " -If you want to move the position of a fret diagram, for example, to -avoid collision, or to place it between two notes, you have various -possibilities: - -1) modify #'padding or #'extra-offset values (as shown in the first -snippet) - -2) you can add an invisible voice and attach the fret diagrams to the -invisible notes in that voice (as shown in the second example). - - If you need to move the fret according with a rythmic position inside -the bar (in the example, the third beat of the measure) the second -example is better, because the fret is aligned with the third beat -itself. - -" - doctitle = "How to change fret diagram position" -} % begin verbatim - -harmonies = \chordmode -{ - a8:13 -% THE FOLLOWING IS THE COMMAND TO MOVE THE CHORD NAME - \once \override ChordNames.ChordName #'extra-offset = #'(10 . 0) - b8:13 s2. -% THIS LINE IS THE SECOND METHOD - s4 s4 b4:13 -} - -\score -{ - << - \context ChordNames \harmonies - \context Staff - {a8^\markup { \fret-diagram #"6-x;5-0;4-2;3-0;2-0;1-2;" } -% THE FOLLOWING IS THE COMMAND TO MOVE THE FRET DIAGRAM - \once \override TextScript #'extra-offset = #'(10 . 0) - b4.~^\markup { \fret-diagram #"6-x;5-2;4-4;3-2;2-2;1-4;" } b4. a8\break -% HERE IS THE SECOND METHOD - << - { a8 b4.~ b4. a8} - { s4 s4 s4^\markup { \fret-diagram #"6-x;5-2;4-4;3-2;2-2;1-4;" } - } - >> - } - >> -} - - - diff --git a/input/lsr/how-to-put-ties-between-syllables-in-lyrics.ly b/input/lsr/how-to-put-ties-between-syllables-in-lyrics.ly deleted file mode 100644 index 6601079409..0000000000 --- a/input/lsr/how-to-put-ties-between-syllables-in-lyrics.ly +++ /dev/null @@ -1,18 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "text, vocal-music" - - texidoc = " -This can be achieved by separating those syllables by tildes. - -" - doctitle = "How to put ties between syllables in lyrics" -} % begin verbatim - -\lyrics { - wa~o~a -} - diff --git a/input/lsr/incipit.ly b/input/lsr/incipit.ly deleted file mode 100644 index 6929ccfa6d..0000000000 --- a/input/lsr/incipit.ly +++ /dev/null @@ -1,282 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "staff-notation, ancient-notation" - -%% Translation of GIT committish: aea975539ec44fd0f1a8fd25930b88b5ab64b53a - texidoces = " -Los «incipit» se pueden escribir utilizando el grob del nombre del -instruemento, pero manteniendo independientes las definiciones del -nombre del instrumento y del incipit." - - doctitlees = "Incipit" - - texidoc = " -Incipits can be added using the instrument name grob, but keeping -separate the instrument name definition and the incipit definition. - -" - doctitle = "Incipit" -} % begin verbatim - -incipit = -#(define-music-function (parser location incipit-music) (ly:music?) - #{ - \once \override Staff.InstrumentName #'self-alignment-X = #RIGHT - \once \override Staff.InstrumentName #'self-alignment-Y = #UP - \once \override Staff.InstrumentName #'Y-offset = #4 - \once \override Staff.InstrumentName #'padding = #0.3 - \once \override Staff.InstrumentName #'stencil = - #(lambda (grob) - (let* ((instrument-name (ly:grob-property grob 'long-text)) - (layout (ly:output-def-clone (ly:grob-layout grob))) - (music (make-music 'SequentialMusic - 'elements (list (make-music 'ContextSpeccedMusic - 'context-type 'MensuralStaff - 'element (make-music 'PropertySet - 'symbol 'instrumentName - 'value instrument-name)) - $incipit-music))) - (score (ly:make-score music)) - (mm (ly:output-def-lookup layout 'mm)) - (indent (ly:output-def-lookup layout 'indent)) - (width (ly:output-def-lookup layout 'incipit-width)) - (incipit-width (if (number? width) - (* width mm) - (* indent 0.5)))) - (ly:output-def-set-variable! layout 'indent (- indent incipit-width)) - (ly:output-def-set-variable! layout 'line-width indent) - (ly:output-def-set-variable! layout 'ragged-right #f) - (ly:output-def-set-variable! layout 'ragged-last #f) - (ly:output-def-set-variable! layout 'system-count 1) - (ly:score-add-output-def! score layout) - (ly:grob-set-property! grob 'long-text - (markup #:score score)) - (ly:system-start-text::print grob))) - #}) - -%%%%%%%%%%%%%%%%%%%%%%%%% - -global = { - \set Score.skipBars = ##t - \key g \major - \time 4/4 - - % the actual music - \skip 1*8 - - % let finis bar go through all staves - \override Staff.BarLine #'transparent = ##f - - % finis bar - \bar "|." -} - -discantusIncipit = << - \new MensuralVoice = "discantusIncipit" << - \repeat unfold 9 { s1 \noBreak } - { - \clef "neomensural-c1" - \key f \major - \time 2/2 - c''1. - } - >> - \new Lyrics \lyricsto discantusIncipit { IV- } ->> - -discantusNotes = { - \transpose c' c'' { - \clef "treble" - d'2. d'4 | - b e' d'2 | - c'4 e'4.( d'8 c' b | - a4) b a2 | - b4.( c'8 d'4) c'4 | - \once \override NoteHead #'transparent = ##t - c'1 | - b\breve | - } -} - -discantusLyrics = \lyricmode { - Ju -- bi -- | - la -- te De -- | - o, om -- - nis ter -- | - ra, __ om- | - "..." | - -us. | -} - -altusIncipit = << - \new MensuralVoice = "altusIncipit" << - \repeat unfold 9 { s1 \noBreak } - { - \clef "neomensural-c3" - \key f \major - \time 2/2 - r1 f'1. - } - >> - \new Lyrics \lyricsto altusIncipit { IV- } ->> - -altusNotes = { - \transpose c' c'' { - \clef "treble" - % two measures - r2 g2. e4 fis g | - a2 g4 e | - fis g4.( fis16 e fis4) | - g1 | - \once \override NoteHead #'transparent = ##t - g1 | - g\breve | - } -} - -altusLyrics = \lyricmode { - % two measures - Ju -- bi -- la -- te | - De -- o, om -- | - nis ter -- ra, | - "..." | - -us. | -} - -tenorIncipit = << - \new MensuralVoice = "tenorIncipit" << - \repeat unfold 9 { s1 \noBreak } - { - \clef "neomensural-c4" - \key f \major - \time 2/2 - r\longa - r\breve - r1 c'1. - } - >> - \new Lyrics \lyricsto tenorIncipit { IV- } ->> - -tenorNotes = { - \transpose c' c' { - \once \override Staff.VerticalAxisGroup #'minimum-Y-extent = #'(-6 . 3) - \clef "treble_8" - R1 | - R1 | - R1 | - % two measures - r2 d'2. d'4 b e' | - \once \override NoteHead #'transparent = ##t - e'1 | - d'\breve | - } -} - -tenorLyrics = \lyricmode { - % two measures - Ju -- bi -- la -- te | - "..." | - -us. -} - -bassusIncipit = << - \new MensuralVoice = "bassusIncipit" << - \repeat unfold 9 { s1 \noBreak } - { - \clef "bass" - \key f \major - \time 2/2 - %% incipit - r\maxima - f1. - } - >> - \new Lyrics \lyricsto bassusIncipit { IV- } ->> - -bassusNotes = { - \transpose c' c' { - \clef "bass" - R1 | - R1 | - R1 | - R1 | - g2. e4 | - \once \override NoteHead #'transparent = ##t - e1 | - g\breve | - } -} - -bassusLyrics = \lyricmode { - Ju -- bi- | - "..." | - -us. -} - -\score { - << - \new StaffGroup = choirStaff << - \new Voice = "discantusNotes" << - \global - \set Staff.instrumentName = #"Discantus" - \incipit \discantusIncipit - \discantusNotes - >> - \new Lyrics = "discantusLyrics" \lyricsto discantusNotes { \discantusLyrics } - \new Voice = "altusNotes" << - \global - \set Staff.instrumentName = #"Altus" - \incipit \altusIncipit - \altusNotes - >> - \new Lyrics = "altusLyrics" \lyricsto altusNotes { \altusLyrics } - \new Voice = "tenorNotes" << - \global - \set Staff.instrumentName = #"Tenor" - \incipit \tenorIncipit - \tenorNotes - >> - \new Lyrics = "tenorLyrics" \lyricsto tenorNotes { \tenorLyrics } - \new Voice = "bassusNotes" << - \global - \set Staff.instrumentName = #"Bassus" - \incipit \bassusIncipit - \bassusNotes - >> - \new Lyrics = "bassusLyrics" \lyricsto bassusNotes { \bassusLyrics } - >> - >> - \layout { - \context { - \Score - %% no bar lines in staves or lyrics - \override BarLine #'transparent = ##t - } - %% the next two instructions keep the lyrics between the bar lines - \context { - \Lyrics - \consists "Bar_engraver" - \consists "Separating_line_group_engraver" - } - \context { - \Voice - %% no slurs - \override Slur #'transparent = ##t - %% Comment in the below "\remove" command to allow line - %% breaking also at those bar lines where a note overlaps - %% into the next measure. The command is commented out in this - %% short example score, but especially for large scores, you - %% will typically yield better line breaking and thus improve - %% overall spacing if you comment in the following command. - %%\remove "Forbid_line_break_engraver" - } - indent = 6\cm - incipit-width = 4\cm - } -} diff --git a/input/lsr/indicating-cross-staff-chords-with-arpeggio-bracket.ly b/input/lsr/indicating-cross-staff-chords-with-arpeggio-bracket.ly deleted file mode 100644 index ed2c356c2b..0000000000 --- a/input/lsr/indicating-cross-staff-chords-with-arpeggio-bracket.ly +++ /dev/null @@ -1,77 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "keyboards" - -%% Translation of GIT committish: e968d89055d045a29276db76970570f30ccc917e - texidoces = " -Un corchete de arpegio puede indicar que se tienen que tocadr con la -misma mano notas que están en dos pentagramas distintos. Para hacerlo, -el @code{PianoStaff} se debe configurar para que acepte símbolos de -arpegio de pentagrama cruzado y los símbolos de arpegio se deben -configurar a la forma de corchete en el contexto de @code{PianoStaff}. - -(Debussy, Les collines d’Anacapri, m. 65) - -" - doctitlees = "Indicar acordes de pentagrama cruzado con corchetes de arpegio" - -%% Translation of GIT committish: 33f623301a41fcc53efadf96bca1c72834763415 - texidocde = " -Eine Arpeggioklammer kann anzeigen, dass Noten auf zwei unterschiedlichen -Systemen mit der selben Hand gespielt werden sollen. Damit das notiert -werden kann, muss der @code{PianoStaff}-Kontext so eingestellt werden, -dass er Arpeggios über Systeme hinweg akzeptiert und die Form der Arpeggios -muss auf eine Klammer eingestellt werden. - -(Debussy, Les collines d’Anacapri, T. 65) - -" - doctitlede = "Akkorde auf zwei Systemen mit Arpeggioklammern anzeigen" - - texidoc = " -An arpeggio bracket can indicate that notes on two different staves are -to be played with the same hand. In order to do this, the -@code{PianoStaff} must be set to accept cross-staff arpeggios and the -arpeggios must be set to the bracket shape in the @code{PianoStaff} -context. - - -(Debussy, Les collines d’Anacapri, m. 65) - -" - doctitle = "Indicating cross-staff chords with arpeggio bracket" -} % begin verbatim - -\paper { ragged-right = ##t } - -\new PianoStaff << - \set PianoStaff.connectArpeggios = ##t - \override PianoStaff.Arpeggio #'stencil = #ly:arpeggio::brew-chord-bracket - \new Staff { - \relative c' { - \key b \major - \time 6/8 - b8-.(\arpeggio fis'-.\> cis-. e-. gis-. b-.)\!\fermata^\laissezVibrer - \bar "||" - } - } - \new Staff { - \relative c' { - \clef bass - \key b \major - << - { - 2.\arpeggio - } - \\ - { - 2. - } - >> - } - } ->> - diff --git a/input/lsr/inserting-a-caesura.ly b/input/lsr/inserting-a-caesura.ly deleted file mode 100644 index 80fb66e644..0000000000 --- a/input/lsr/inserting-a-caesura.ly +++ /dev/null @@ -1,44 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks, tweaks-and-overrides" - -%% Translation of GIT committish: a71dfe75d190e18a075443575d71140173829504 - texidoces = " -Las marcas de cesura se pueden crear sobreescribiendo la propiedad -@code{'text} del objeto @code{BreathingSign}. También está disponible -una marca de cesura curva. - -" - doctitlees = "Insertar una cesura" - -%% Translation of GIT committish: 6ce7f350682dfa99af97929be1dec6b9f1cbc01a - texidocde = " -Zäsurzeichen können erstellt werden, indem die @code{'text}-Eigenschaft -des @code{BreathingSign}-Objektes verändert wird. Ein gekrümmtes -Zäsurzeichen ist auch möglich. -" - doctitlede = "Eine Zäsur einfügen" - - texidoc = " -Caesura marks can be created by overriding the @code{'text} property of -the @code{BreathingSign} object. A curved caesura mark is also -available. - -" - doctitle = "Inserting a caesura" -} % begin verbatim - -\relative c'' { - \override BreathingSign #'text = \markup { - \musicglyph #"scripts.caesura.straight" - } - c8 e4. \breathe g8. e16 c4 - - \override BreathingSign #'text = \markup { - \musicglyph #"scripts.caesura.curved" - } - g8 e'4. \breathe g8. e16 c4 -} diff --git a/input/lsr/inserting-score-fragments-above-a-staff,-as-markups.ly b/input/lsr/inserting-score-fragments-above-a-staff,-as-markups.ly deleted file mode 100644 index 66f1a63781..0000000000 --- a/input/lsr/inserting-score-fragments-above-a-staff,-as-markups.ly +++ /dev/null @@ -1,41 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "staff-notation" - - texidoc = " -The @code{\\markup} command is quite versatile. In this snippet, it -contains a @code{\\score} block instead of texts or marks. - -" - doctitle = "Inserting score fragments above a staff, as markups" -} % begin verbatim - -tuning = \markup { - \score { - \new Staff \with { \remove "Time_signature_engraver" } - { - \clef bass 1 - } - \layout { ragged-right = ##t } - } -} - -\header { - title = "Solo Cello Suites" - subtitle = "Suite IV" - subsubtitle = \markup { Originalstimmung: \general-align #Y #CENTER \tuning } -} - -\layout { ragged-right = ##f } - -\relative c'' { - \time 4/8 - \times 2/3 { c8 d e } \times 2/3 { c d e } - \times 2/3 { c8 d e } \times 2/3 { c d e } - g8 a g a - g8 a g a -} - diff --git a/input/lsr/isolated-percent-repeats.ly b/input/lsr/isolated-percent-repeats.ly deleted file mode 100644 index 950edd6ff6..0000000000 --- a/input/lsr/isolated-percent-repeats.ly +++ /dev/null @@ -1,40 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "repeats" - -%% Translation of GIT committish: da84f4caeafed6832152295e67ae852a9930f568 - texidoces = " -También se pueden imprimir símbolos de porcentaje sueltos. Esto se -hace introduciendo un silencio multicompás con una función de -impresión distinta: - -" - doctitlees = "Símbolos de porcentaje sueltos" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Isolierte Prozentwiederholungen können auch ausgegeben werden. Das wird -erreicht, indem man eine Ganztaktpause notiert und ihre Ausgabeform -ändert: - -" - doctitlede = "Isolierte Prozentwiederholungen" - - texidoc = " -Isolated percents can also be printed. This is done by entering a -multi-measure rest with a different print function: - -" - doctitle = "Isolated percent repeats" -} % begin verbatim - -\relative c'' { - \override MultiMeasureRest #'stencil - = #ly:multi-measure-rest::percent - \override MultiMeasureRest #'thickness = #0.48 - R1 -} - diff --git a/input/lsr/jazz-combo-template.ly b/input/lsr/jazz-combo-template.ly deleted file mode 100644 index 65f385cc06..0000000000 --- a/input/lsr/jazz-combo-template.ly +++ /dev/null @@ -1,298 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "keyboards, percussion, fretted-strings, template" - -%% Translation of GIT committish: d35687993883eb31442009fc50d5ae063108bfa7 - texidoces = " -Ésta es una plantilla bastante avanzada, para un conjunto de -jazz. Observe que la notación de todos los instrumentos está en -@code{\\key c \\major} (Do mayor). Esto se refiere al tono de -concierto; la armadura se transporta automáticamente si la música está -dentro de una sección @code{\\transpose}. - -" - doctitlees = "Plantilla para combo de jazz" - -%% Translation of GIT committish: 17633f6b8681af86230aa84597fe7561e98c91d6 - texidocde = " -Hier ist ein ziemlich kompliziertes Beispiel für ein Jazz-Ensemble. Achtung: -Alle Instrumente sind in @code{\key c \major} (C-Dur) notiert. Das bezieht sich -auf die klingende Musik: LilyPond transponiert die Tonart automatisch, wenn -sich die Noten innerhalb eines @code{\transpose}-Abschnitts befinden. - -" - - doctitlede = "Vorlage für Jazz-Combo" - - texidoc = " -This is quite an advanced template, for a jazz ensemble. Note that all -instruments are notated in @code{\\key c \\major}. This refers to the -key in concert pitch; the key will be automatically transposed if the -music is within a @code{\\transpose} section. - -" - doctitle = "Jazz combo template" -} % begin verbatim - -\header { - title = "Song" - subtitle = "(tune)" - composer = "Me" - meter = "moderato" - piece = "Swing" - tagline = \markup { - \column { - "LilyPond example file by Amelie Zapf," - "Berlin 07/07/2003" - } - } -} - -%#(set-global-staff-size 16) -\include "english.ly" - -%%%%%%%%%%%% Some macros %%%%%%%%%%%%%%%%%%% - -sl = { - \override NoteHead #'style = #'slash - \override Stem #'transparent = ##t -} -nsl = { - \revert NoteHead #'style - \revert Stem #'transparent -} -crOn = \override NoteHead #'style = #'cross -crOff = \revert NoteHead #'style - -%% insert chord name style stuff here. - -jazzChords = { } - -%%%%%%%%%%%% Keys'n'thangs %%%%%%%%%%%%%%%%% - -global = { \time 4/4 } - -Key = { \key c \major } - -% ############ Horns ############ - -% ------ Trumpet ------ -trpt = \transpose c d \relative c'' { - \Key - c1 | c | c | -} -trpHarmony = \transpose c' d { - \jazzChords -} -trumpet = { - \global - \set Staff.instrumentName = #"Trumpet" - \clef treble - << - \trpt - >> -} - -% ------ Alto Saxophone ------ -alto = \transpose c a \relative c' { - \Key - c1 | c | c | -} -altoHarmony = \transpose c' a { - \jazzChords -} -altoSax = { - \global - \set Staff.instrumentName = #"Alto Sax" - \clef treble - << - \alto - >> -} - -% ------ Baritone Saxophone ------ -bari = \transpose c a' \relative c { - \Key - c1 - c1 - \sl - d4^"Solo" d d d - \nsl -} -bariHarmony = \transpose c' a \chordmode { - \jazzChords s1 s d2:maj e:m7 -} -bariSax = { - \global - \set Staff.instrumentName = #"Bari Sax" - \clef treble - << - \bari - >> -} - -% ------ Trombone ------ -tbone = \relative c { - \Key - c1 | c | c -} -tboneHarmony = \chordmode { - \jazzChords -} -trombone = { - \global - \set Staff.instrumentName = #"Trombone" - \clef bass - << - \tbone - >> -} - -% ############ Rhythm Section ############# - -% ------ Guitar ------ -gtr = \relative c'' { - \Key - c1 - \sl - b4 b b b - \nsl - c1 -} -gtrHarmony = \chordmode { - \jazzChords - s1 c2:min7+ d2:maj9 -} -guitar = { - \global - \set Staff.instrumentName = #"Guitar" - \clef treble - << - \gtr - >> -} - -%% ------ Piano ------ -rhUpper = \relative c'' { - \voiceOne - \Key - c1 | c | c -} -rhLower = \relative c' { - \voiceTwo - \Key - e1 | e | e -} - -lhUpper = \relative c' { - \voiceOne - \Key - g1 | g | g -} -lhLower = \relative c { - \voiceTwo - \Key - c1 | c | c -} - -PianoRH = { - \clef treble - \global - \set Staff.midiInstrument = #"acoustic grand" - << - \new Voice = "one" \rhUpper - \new Voice = "two" \rhLower - >> -} -PianoLH = { - \clef bass - \global - \set Staff.midiInstrument = "acoustic grand" - << - \new Voice = "one" \lhUpper - \new Voice = "two" \lhLower - >> -} - -piano = { - << - \set PianoStaff.instrumentName = #"Piano" - \new Staff = "upper" \PianoRH - \new Staff = "lower" \PianoLH - >> -} - -% ------ Bass Guitar ------ -Bass = \relative c { - \Key - c1 | c | c -} -bass = { - \global - \set Staff.instrumentName = #"Bass" - \clef bass - << - \Bass - >> -} - -% ------ Drums ------ -up = \drummode { - \voiceOne - hh4 hh - hh4 hh - hh4 hh -} -down = \drummode { - \voiceTwo - bd4 s bd s - bd4 s bd s - bd4 s bd s -} - -drumContents = { - \global - << - \set DrumStaff.instrumentName = #"Drums" - \new DrumVoice \up - \new DrumVoice \down - >> -} - -%%%%%%%%% It All Goes Together Here %%%%%%%%%%%%%%%%%%%%%% - -\score { - << - \new StaffGroup = "horns" << - \new Staff = "trumpet" \trumpet - \new Staff = "altosax" \altoSax - \new ChordNames = "barichords" \bariHarmony - \new Staff = "barisax" \bariSax - \new Staff = "trombone" \trombone - >> - - \new StaffGroup = "rhythm" << - \new ChordNames = "chords" \gtrHarmony - \new Staff = "guitar" \guitar - \new PianoStaff = "piano" \piano - \new Staff = "bass" \bass - \new DrumStaff \drumContents - >> - >> - - \layout { - \context { \RemoveEmptyStaffContext } - \context { - \Score - \override BarNumber #'padding = #3 - \override RehearsalMark #'padding = #2 - skipBars = ##t - } - } - - \midi { } -} - diff --git a/input/lsr/keyboards-intro.itely b/input/lsr/keyboards-intro.itely deleted file mode 100644 index 3fd9b07b27..0000000000 --- a/input/lsr/keyboards-intro.itely +++ /dev/null @@ -1,7 +0,0 @@ -@node Keyboards -@unnumbered Keyboards - -@ruser{Keyboard and other multi-staff instruments} - -@lysnippets - diff --git a/input/lsr/keyboards.snippet-list b/input/lsr/keyboards.snippet-list deleted file mode 100644 index d4f7e28184..0000000000 --- a/input/lsr/keyboards.snippet-list +++ /dev/null @@ -1,13 +0,0 @@ -accordion-discant-symbols.ly -clusters.ly -controlling-the-placement-of-chord-fingerings.ly -creating-slurs-across-voices.ly -fine-tuning-pedal-brackets.ly -indicating-cross-staff-chords-with-arpeggio-bracket.ly -jazz-combo-template.ly -laissez-vibrer-ties.ly -piano-template-simple.ly -piano-template-with-centered-dynamics.ly -piano-template-with-centered-lyrics.ly -piano-template-with-melody-and-lyrics.ly -vocal-ensemble-template-with-automatic-piano-reduction.ly diff --git a/input/lsr/laissez-vibrer-ties.ly b/input/lsr/laissez-vibrer-ties.ly deleted file mode 100644 index d2e6aa2d09..0000000000 --- a/input/lsr/laissez-vibrer-ties.ly +++ /dev/null @@ -1,28 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks, keyboards, fretted-strings" - - texidoc = " -Laissez vibrer ties have a fixed size. Their formatting can be tuned -using @code{'tie-configuration}. - -" - doctitle = "Laissez vibrer ties" -} % begin verbatim - -\relative c' { - 4\laissezVibrer r \laissezVibrer r - 4\laissezVibrer r 4.\laissezVibrer r8 - - 4\laissezVibrer r - \override LaissezVibrerTieColumn #'tie-configuration - = #`((-7 . ,DOWN) - (-5 . ,DOWN) - (-3 . ,UP) - (-1 . ,UP)) - 4\laissezVibrer r -} - diff --git a/input/lsr/letter-tablature-formatting.ly b/input/lsr/letter-tablature-formatting.ly deleted file mode 100644 index baf88fa35e..0000000000 --- a/input/lsr/letter-tablature-formatting.ly +++ /dev/null @@ -1,42 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "staff-notation, fretted-strings" - - texidoc = " -Tablature can be formatted using letters instead of numbers. - -" - doctitle = "Letter tablature formatting" -} % begin verbatim - -#(define (letter-tablature-format str context event) - (let ((tuning (ly:context-property context 'stringTunings)) - (pitch (ly:event-property event 'pitch))) - (make-whiteout-markup - (make-vcenter-markup - (string (integer->char - (+ (char->integer #\a) - (- (ly:pitch-semitones pitch) - (list-ref tuning (- str 1)))))))))) - -music = \relative c { - c4 d e f - g4 a b c - d4 e f g -} - -<< - \new Staff { - \clef "G_8" - \music - } - \new TabStaff \with { - tablatureFormat = #letter-tablature-format - } - { - \music - } ->> diff --git a/input/lsr/lilypond-snippets.tely b/input/lsr/lilypond-snippets.tely deleted file mode 100644 index 0062153a2b..0000000000 --- a/input/lsr/lilypond-snippets.tely +++ /dev/null @@ -1,216 +0,0 @@ -\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- -@setfilename lilypond-snippets.info -@settitle LilyPond snippets -@documentencoding UTF-8 -@documentlanguage en - -@iftex -@afourpaper -@c don't replace quotes with directed quotes -@tex -\gdef\SETtxicodequoteundirected{Foo} -\gdef\SETtxicodequotebacktick{Bla} -@end tex -@end iftex - -@include version.itexi - -@ifnothtml -@macro lydoctitle{TEXT} -@unnumberedsec \TEXT\ -@end macro -@end ifnothtml - -@ifhtml - -@macro lydoctitle{TEXT} -@node \TEXT\ -@unnumberedsec \TEXT\ -@end macro - -@ifset bigpage - -@macro rlearning{NAME} -See also Learning Manual, section -@ref{\NAME\,,,lilypond-learning-big-page,Learning Manual}. -@end macro - -@macro ruser{NAME} -These snippets illustrate the Notation Reference, -section @ref{\NAME\,,,lilypond-big-page,Notation Reference}. -@end macro - -@end ifset - - -@ifclear bigpage - -@macro rlearning{NAME} -See also Learning Manual, section -@ref{\NAME\,,,lilypond-learning,Learning Manual}. -@end macro - -@macro ruser{NAME} -These snippets illustrate the Notation Reference, -section @ref{\NAME\,,,lilypond,Notation Reference}. -@end macro - -@end ifclear - -@end ifhtml - - -@ifnothtml - -@macro rlearning{NAME} -See also @ref{\NAME\,,,lilypond-learning,Learning Manual}. -@end macro - -@macro ruser{NAME} -These snippets illustrate @ref{\NAME\,,,lilypond,Notation Reference}. -@end macro - -@end ifnothtml - -@dircategory GNU LilyPond --- the music typesetter -@direntry -* LilyPond Snippets: (lilypond-snippets). Short tricks, tips, and examples. -@end direntry - -@finalout - -@titlepage -@title LilyPond -@subtitle The music typesetter -@titlefont{Snippets} -@author LilyPond Snippet Repository contributors - -@vskip 20pt - -This document shows a selected set of LilyPond snippets from the -@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository} -(LSR). It is in the public domain. - -We would like to address many thanks to Sebastiano Vigna for maintaining -LSR web site and database, and the University of Milano for hosting LSR. - -Please note that this document is not an exact subset of LSR: some -snippets come from @file{input/new} LilyPond sources directory, and -snippets from LSR are converted through @command{convert-ly}, as LSR is -based on a stable LilyPond version, and this document is for version -@c @value{version}. - -Snippets are grouped by tags; tags listed in the table of contents match -a section of LilyPond notation manual. Snippets may have several tags, -and not all LSR tags may appear in this document. - -In the HTML version of this document, you can click on the file name -or figure for each example to see the corresponding input file. - -@end titlepage - -@iftex -@contents -@end iftex - -@ifnottex -@node Top -@top GNU LilyPond --- Snippets List - -@ifhtml -@ifclear bigpage -This document is also available as a -@uref{source/Documentation/user/lilypond-snippets.pdf,PDF} and as -@uref{source/input/lsr/lilypond-snippets-big-page.html,one big page}. -@end ifclear -@ifset bigpage -This document is also available as a -@uref{source/Documentation/user/lilypond-snippets.pdf,PDF} and as -@uref{source/input/lsr/lilypond-snippets/index.html,HTML indexed multiple pages}. -@end ifset -@end ifhtml - -This document shows a selected set of LilyPond snippets from the -@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository} -(LSR). It is in the public domain. - -Please note that it is not an exact subset of LSR: some snippets come -from @file{input/new} LilyPond sources directory, and snippets from LSR -are converted through @command{convert-ly}, as LSR is based on a stable -LilyPond version, and this document is for version @version{}. - -Snippets are grouped by tags; tags listed in the table of contents match -a section of LilyPond notation manual. Snippets may have several tags, -and not all LSR tags may appear in this document. - -In the HTML version of this document, you can click on the file name -or figure for each example to see the corresponding input file. -@end ifnottex - -@c maybe generate/update @menu and @includes automatically? --jm -@menu -Musical notation -* Pitches:: -* Rhythms:: -* Expressive marks:: -* Repeats:: -* Simultaneous notes:: -* Staff notation:: -* Editorial annotations:: -* Text:: - -Specialist notation -* Vocal music:: -* Chords:: -* Keyboards:: -* Percussion:: -* Fretted strings:: -* Unfretted strings:: -* Winds:: -* Ancient notation:: -* World music:: - -Other collections -* Contexts and engravers:: -* Tweaks and overrides:: -* Paper and layout:: -* Titles:: -* Spacing:: -* MIDI:: -* Templates:: -@end menu - -@contents - - -@c Please take care of naming every .itely -@c with an existing tag name. - -@include pitches.itely -@include rhythms.itely -@include expressive-marks.itely -@include repeats.itely -@include simultaneous-notes.itely -@include staff-notation.itely -@include editorial-annotations.itely -@include text.itely - -@include vocal-music.itely -@include chords.itely -@include keyboards.itely -@include percussion.itely -@include fretted-strings.itely -@include unfretted-strings.itely -@include winds.itely -@include ancient-notation.itely -@include world-music.itely - -@include contexts-and-engravers.itely -@include tweaks-and-overrides.itely -@include paper-and-layout.itely -@include titles.itely -@include spacing.itely -@include midi.itely -@include template.itely - -@bye diff --git a/input/lsr/line-arrows.ly b/input/lsr/line-arrows.ly deleted file mode 100644 index dc8d664d5b..0000000000 --- a/input/lsr/line-arrows.ly +++ /dev/null @@ -1,41 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks, tweaks-and-overrides" - -%% Translation of GIT committish: dff50e8e1d3134657a6b6203b9c93826dc4cef65 - texidoces = " -Se pueden aplicar puntas de flecha a los elementos de extensión de -texto y de línea (como el Glissando). - -" - doctitlees = "Puntas de flecha para las líneas" - - texidoc = " -Arrows can be applied to text-spanners and line-spanners (such as the -Glissando). - -" - doctitle = "Line arrows" -} % begin verbatim - -\relative c'' { - \override TextSpanner #'bound-padding = #1.0 - \override TextSpanner #'style = #'line - \override TextSpanner #'(bound-details right arrow) = ##t - \override TextSpanner #'(bound-details left text) = #"fof" - \override TextSpanner #'(bound-details right text) = #"gag" - \override TextSpanner #'(bound-details right padding) = #0.6 - - \override TextSpanner #'(bound-details right stencil-align-dir-y) = #CENTER - \override TextSpanner #'(bound-details left stencil-align-dir-y) = #CENTER - - \override Glissando #'(bound-details right arrow) = ##t - \override Glissando #'arrow-length = #0.5 - \override Glissando #'arrow-width = #0.25 - - a8\startTextSpan gis a4 b\glissando b, - g'4 c\stopTextSpan c2 -} diff --git a/input/lsr/lyrics-alignment.ly b/input/lsr/lyrics-alignment.ly deleted file mode 100644 index 5b2e7718d9..0000000000 --- a/input/lsr/lyrics-alignment.ly +++ /dev/null @@ -1,44 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "text, vocal-music" - -%% Translation of GIT committish: 3b206eff0a7feaab0001db3cff95f7d3b63b4601 - texidoces = " -La alineación horizontal de la letra se puede ajustar sobreescribiendo -la propiedad @code{self-alignment-X} del objeto @code{LyricText}. -@code{#-1} es izquierda, @code{#0} es centrado y @code{#1} es derecha; -sin embargo, puede usar también @code{#LEFT}, @code{#CENTER} y -@code{#RIGHT}. - -" - doctitlees = "Alineación de la letra" - - texidoc = " -Horizontal alignment for lyrics cam be set by overriding the -@code{self-alignment-X} property of the @code{LyricText} object. -@code{#-1} is left, @code{#0} is center and @code{#1} is right; -however, you can use @code{#LEFT}, @code{#CENTER} and @code{#RIGHT} as -well. - -" - doctitle = "Lyrics alignment" -} % begin verbatim - -\layout { ragged-right = ##f } -\relative c'' { - c1 - c1 - c1 -} -\addlyrics { - \once \override LyricText #'self-alignment-X = #LEFT - "This is left-aligned" - \once \override LyricText #'self-alignment-X = #CENTER - "This is centered" - \once \override LyricText #'self-alignment-X = #1 - "This is right-aligned" -} - diff --git a/input/lsr/makam-example.ly b/input/lsr/makam-example.ly deleted file mode 100644 index 1c0d29df06..0000000000 --- a/input/lsr/makam-example.ly +++ /dev/null @@ -1,49 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "pitches, world-music" - -%% Translation of GIT committish: 33d87eaa6928c0242687fc2361e89de854161c1d - texidoces = " -El «Makam» es un tipo de melodía de Turquía que -utiliza intervalos microtonales de 1/9 de tono. Consulte el -archivo de inicio @code{makam.ly} (véase el 'Manual de -aprendizaje @version{}, 4.6.3 Otras fuentes de información' para -averiguar la situación de este archivo) para ver detalles de los -nombres de las notas y las alteraciones. - -" - doctitlees = "El «Makam»" - - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Makam ist eine türkische Melodie, in der 1/9-Tonabstände -eingesetzt werden. Sehen Sie sich die Initialisierungsdatei -@code{makam.ly} für weiter Information zu Tonhöhenbezeichnungen -und Alterationen an (siehe -Handbuch zum Lernen @version{}, 4.6.3 Weitere Information zu -Hinweisen, wo diese Datei gespeichert ist)." - - doctitlede = "Makam-Beispiel" - - texidoc = " -Makam is a type of melody from Turkey using 1/9th-tone microtonal -alterations. Consult the initialization file @samp{ly/makam.ly} for -details of pitch names and alterations. - -" - doctitle = "Makam example" -} % begin verbatim - -% Initialize makam settings -\include "makam.ly" - -\relative c' { - \set Staff.keySignature = #`((6 . ,(- KOMA)) (3 . ,BAKIYE)) - c4 cc db fk - gbm4 gfc gfb efk - fk4 db cc c -} diff --git a/input/lsr/making-an-object-invisible-with-the-transparent-property.ly b/input/lsr/making-an-object-invisible-with-the-transparent-property.ly deleted file mode 100644 index 32af8183d2..0000000000 --- a/input/lsr/making-an-object-invisible-with-the-transparent-property.ly +++ /dev/null @@ -1,40 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms, simultaneous-notes, tweaks-and-overrides" - - texidoc = " -Setting the @code{transparent} property will cause an object to be -printed in \"invisible ink\": the object is not printed, but all its -other behavior is retained. The object still takes up space, it takes -part in collisions, and slurs, ties and beams can be attached to it. - - -This snippet demonstrates how to connect different voices using ties. -Normally, ties only connect two notes in the same voice. By -introducing a tie in a different voice, and blanking the first up-stem -in that voice, the tie appears to cross voices. - -" - doctitle = "Making an object invisible with the 'transparent property" -} % begin verbatim - -\relative c'' { - \time 2/4 - << - { - \once \override Stem #'transparent = ##t - \once \override Stem #'length = #8 - b8 ~ b\noBeam - \once \override Stem #'transparent = ##t - \once \override Stem #'length = #8 - g8 ~ g\noBeam - } - \\ - { - b8 g g e - } - >> -} diff --git a/input/lsr/making-slurs-with-complex-dash-structure.ly b/input/lsr/making-slurs-with-complex-dash-structure.ly deleted file mode 100644 index 0b6f93485e..0000000000 --- a/input/lsr/making-slurs-with-complex-dash-structure.ly +++ /dev/null @@ -1,88 +0,0 @@ -%% Do not edit this file; it is auto-generated from input/new -%% This file is in the public domain. -%% Note: this file works from version 2.13.1 -\version "2.13.1" - -\header { -%% Translation of GIT committish: d4f58bb3ad4e7fe1967a6b48f25e3addffc8aa14 - texidoces = " - -Las ligaduras de expresión se pueden construir con patrones de -discontinuidad complejos mediante la definición de la propiedad -@code{dash-definition}. @code{dash-definition} es una lista de -@code{elementos de discontinuidad}. Un @code{elemento de -discontinuidad} es una lista de parámetros que definen el -comportamiento de discontinuidad de un segmento de la ligadura de -expresión. - -La ligadura se define en términos del parámetro de bezier t cuyo -rango va de 0 a la izquierda de la ligadura hasta 1 en el extremo -derecho de la ligadura. Cada @code{elemento de discontinuidad} es -una lista @code{(t-inicio t-final fracción-discontinuidad -período-discontinuidad)}. La región de la ligadura desde -@code{t-inicio} hasta @code{t-final} tendrá una fracción -@code{fracción-discontinuidad} de cada -@code{período-discontinuidad} de color negro. -@code{período-discontinuidad} se define en términos de espacios de -pentagrama. @code{fracción-discontinuidad} se establece al valor -de 1 para una ligadura continua. - -" - - doctitlees = "Hacer ligaduras de expresión con estructura compleja de discontinuidad" - - -%% Translation of GIT committish: 13ac9d1dfbcc297166948ee396e9ade078d2446e - texidocde = " -Legatobögen können mit einem komplizierten Strichelmuster -gesetzt werden, indem die @code{dash-definition}-Eigenschaft -definiert wird. @code{dash-definition} ist eine Liste bestehend -aus @code{dash-elements}-Elementen. Ein @code{dash-element} ist -eine Liste an Parametern, die das Strichverhalten für einen -Abschnitt des Legatobogens definieren. - -Der Bogen wird nach dem Bezierparameter t definiert, welcher -von 0 am linken Ende des Bogens zu 1 am rechten Ende des Bogens -reicht. @code{dash-element} ist eine Liste @code{(start-t stop-t dash-Unterbrechung dash-Abschnitt)}. Die Region des Bogens von @code{start-t} -bis @code{stop-t} hat eine Unterbrechung von @code{dash-Unterbrechung} -von jedem @code{dash-Abschnitt}-Schwarzabschnitt. @code{dash-Abschnitt} ist in Notenlinienzwischenräumen definiert. -@code{dash-Abschnitt} ist auf 1 für einen durchgehenden Bogen -gesetzt. -" - doctitlede = "Legatobögen mit kompliziertem Strichelmuster - definieren" - - lsrtags = "rhythms, expressive-marks" - texidoc = " -Slurs can be made with complex dash patterns by defining -the @code{dash-definition} property. @code{dash-definition} -is a list of @code{dash-elements}. A @code{dash-element} is a -list of parameters defining the dash behavior for a segment of -the slur. - -The slur is defined in terms of the bezier parameter t -which ranges from 0 -at the left end of the slur to 1 at the right end of the slur. -@code{dash-element} is a list @code{(start-t stop-t dash-fraction -dash-period)}. The region of the slur from @code{start-t} to -@code{stop-t} will have a fraction @code{dash-fraction} -of each @code{dash-period} black. @code{dash-period} is -defined in terms of staff spaces. @code{dash-fraction} is -set to 1 for a solid slur. -" - doctitle = "Making slurs with complex dash structure" -} % begin verbatim - - -\relative c' { - \once \override - Slur #'dash-definition = #'((0 0.3 0.1 0.75) - (0.3 0.6 1 1) - (0.65 1.0 0.4 0.75)) - c( d e f) - \once \override - Slur #'dash-definition = #'((0 0.25 1 1) - (0.3 0.7 0.4 0.75) - (0.75 1.0 1 1)) - c( d e f) -} diff --git a/input/lsr/making-some-staff-lines-thicker-than-the-others.ly b/input/lsr/making-some-staff-lines-thicker-than-the-others.ly deleted file mode 100644 index 3e92b79ebe..0000000000 --- a/input/lsr/making-some-staff-lines-thicker-than-the-others.ly +++ /dev/null @@ -1,44 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "staff-notation, editorial-annotations" - -%% Translation of GIT committish: 55ea64f469d9c1703222654c9e5bc8490b04a67a - texidoces = " -Se puede engrosar una línea del pentagrama con fines pedagógicos -(p.ej. la tercera línea o la de la clave de Sol). Esto se puede -conseguir añadiendo más líneas muy cerca de la línea que se quiere -destacar, utilizando la propiedad @code{line-positions} del objeto -@code{StaffSymbol}. - -" - doctitlees = "Hacer unas líneas del pentagrama más gruesas que las otras" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Für den pädagogischen Einsatz kann eine Linie des Notensystems dicker -gezeichnet werden (z. B. die Mittellinie, oder um den Schlüssel hervorzuheben). -Das ist möglich, indem man zusätzliche Linien sehr nahe an der Linie, die -dicker erscheinen soll, einfügt. Dazu wird die @code{line-positions}-Eigenschaft -herangezogen. - -" - doctitlede = "Eine Linie des Notensystems dicker als die anderen machen" - texidoc = " -For pedagogical purposes, a staff line can be thickened (e.g., the -middle line, or to emphasize the line of the G clef). This can be -achieved by adding extra lines very close to the line that should be -emphasized, using the @code{line-positions} property of the -@code{StaffSymbol} object. - -" - doctitle = "Making some staff lines thicker than the others" -} % begin verbatim - -{ - \override Staff.StaffSymbol #'line-positions = #'(-4 -2 -0.2 0 0.2 2 4) - d'4 e' f' g' -} - diff --git a/input/lsr/manually-break-figured-bass-extenders-for-only-some-numbers.ly b/input/lsr/manually-break-figured-bass-extenders-for-only-some-numbers.ly deleted file mode 100644 index 1644820a31..0000000000 --- a/input/lsr/manually-break-figured-bass-extenders-for-only-some-numbers.ly +++ /dev/null @@ -1,30 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "chords" - - texidoc = " -Figured bass often uses extenders to indicate continuation of the -corresponding step. However, in this case lilypond is in greedy-mode -and uses extenders whenever possible. To break individual extenders, -one can simply use a modifier \\! to a number, which breaks any -extender attributed to that number right before the number. - -" - doctitle = "Manually break figured bass extenders for only some numbers" -} % begin verbatim - -bassfigures = \figuremode { - \set useBassFigureExtenders = ##t - <6 4>4 <6 4\!> <6 4\!> <6 4\!> | <6\! 4\!> <6 4> <6 4\!> <6 4> -} - -<< - \new Staff \relative c'' { c1 c1 } - \new FiguredBass \bassfigures ->> - - - diff --git a/input/lsr/manually-controlling-beam-positions.ly b/input/lsr/manually-controlling-beam-positions.ly deleted file mode 100644 index 969c534f7d..0000000000 --- a/input/lsr/manually-controlling-beam-positions.ly +++ /dev/null @@ -1,29 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms, tweaks-and-overrides" - - texidoc = " -Beam positions may be controlled manually, by overriding the -@code{positions} setting of the @code{Beam} grob. - - - - -" - doctitle = "Manually controlling beam positions" -} % begin verbatim - -\relative c' { - \time 2/4 - % from upper staff-line (position 2) to center (position 0) - \override Beam #'positions = #'(2 . 0) - c8 c - % from center to one above center (position 1) - \override Beam #'positions = #'(0 . 1) - c8 c -} - - diff --git a/input/lsr/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly b/input/lsr/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly deleted file mode 100644 index 4aa2af7618..0000000000 --- a/input/lsr/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly +++ /dev/null @@ -1,49 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "editorial-annotations, vocal-music" - - texidoc = " -This example shows how to put crosses on stems. Mark the beginning of -a spoken section with the @code{\\speakOn} keyword, and end it with the -@code{\\speakOff} keyword. - -" - doctitle = "Marking notes of spoken parts with a cross on the stem" -} % begin verbatim - -speakOn = { - \override Stem #'stencil = #(lambda (grob) - (let* ((x-parent (ly:grob-parent grob X)) - (is-rest? (ly:grob? (ly:grob-object x-parent 'rest)))) - (if is-rest? - empty-stencil - (ly:stencil-combine-at-edge - (ly:stem::print grob) - Y - (- (ly:grob-property grob 'direction)) - (grob-interpret-markup grob - (markup #:hspace -1.025 #:fontsize -4 - #:musicglyph "noteheads.s2cross")) - -2.3 0)))) -} - -speakOff = { - \revert Stem #'stencil -} - -\score { - \new Staff { - \relative c'' { - a4 b a c - \speakOn - g4 f r g - b4 r d e - \speakOff - c4 a g f - } - } -} - diff --git a/input/lsr/markup-lines.ly b/input/lsr/markup-lines.ly deleted file mode 100644 index 0edf778b6d..0000000000 --- a/input/lsr/markup-lines.ly +++ /dev/null @@ -1,48 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "text" - - texidoc = " -Text that can spread over pages is entered with the -@code{\\markuplines} command. - -" - doctitle = "Markup lines" -} % begin verbatim - -#(set-default-paper-size "a6") - -#(define-markup-list-command (paragraph layout props args) (markup-list?) - (interpret-markup-list layout props - (make-justified-lines-markup-list (cons (make-hspace-markup 2) args)))) - -% Candide, Voltaire -\markuplines { - \override-lines #'(baseline-skip . 2.5) { - \paragraph { - Il y avait en Westphalie, dans le château de M. le baron de - Thunder-ten-tronckh, un jeune garçon à qui la nature avait donné - les mœurs les plus douces. Sa physionomie annonçait son âme. - Il avait le jugement assez droit, avec l'esprit le plus simple ; - c'est, je crois, pour cette raison qu'on le nommait Candide. Les - anciens domestiques de la maison soupçonnaient qu'il était fils - de la sœur de monsieur le baron et d'un bon et honnête - gentilhomme du voisinage, que cette demoiselle ne voulut jamais - épouser parce qu'il n'avait pu prouver que soixante et onze - quartiers, et que le reste de son arbre généalogique avait été - perdu par l'injure du temps. - } - \paragraph { - Monsieur le baron était un des plus puissants seigneurs de la - Westphalie, car son château avait une porte et des fenêtres. Sa - grande salle même était ornée d'une tapisserie. Tous les chiens - de ses basses-cours composaient une meute dans le besoin ; ses - palefreniers étaient ses piqueurs; le vicaire du village était - son grand-aumônier. Ils l'appelaient tous monseigneur, et ils - riaient quand il faisait des contes. - } - } -} diff --git a/input/lsr/measure-counter.ly b/input/lsr/measure-counter.ly deleted file mode 100644 index 3bd18201b1..0000000000 --- a/input/lsr/measure-counter.ly +++ /dev/null @@ -1,40 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "repeats, staff-notation, editorial-annotations" - -%% Translation of GIT committish: 55ea64f469d9c1703222654c9e5bc8490b04a67a - texidoces = " -Este fragmento de código proporciona una solución alternativa a la -producción de contadores de compás utilizando repeticiones -transparentes de tipo porcentaje. - -" - doctitlees = "Contador de compases" - - texidoc = " -This snippet provides a workaround for emitting measure counters using -transparent percent repeats. - -" - doctitle = "Measure counter" -} % begin verbatim - -<< - \context Voice = "foo" { - \clef bass - c4 r g r - c4 r g r - c4 r g r - c4 r g r - } - \context Voice = "foo" { - \set countPercentRepeats = ##t - \override PercentRepeat #'transparent = ##t - \override PercentRepeatCounter #'staff-padding = #1 - \repeat percent 4 { s1 } - } ->> - diff --git a/input/lsr/mensurstriche-layout-bar-lines-between-the-staves.ly b/input/lsr/mensurstriche-layout-bar-lines-between-the-staves.ly deleted file mode 100644 index cb63f4e220..0000000000 --- a/input/lsr/mensurstriche-layout-bar-lines-between-the-staves.ly +++ /dev/null @@ -1,53 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "staff-notation, ancient-notation, contexts-and-engravers, tweaks-and-overrides" - -%% Translation of GIT committish: aea975539ec44fd0f1a8fd25930b88b5ab64b53a - texidoces = " -La disposición «mensurstriche» en que las líneas divisorias no -están dibujadas sobre los pentagramas, sino entre ellos, se puede -conseguir con un @code{StaffGroup} en vez de un @code{ChoirStaff}. -La línea divisoria sobre los pentagramas se borra estableciendo la -propiedad @code{transparent}. - -" - - doctitlees = "Disposición Mensurstriche (líneas divisorias entre pentagramas)" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Das Mensurstiche-Layout, in welchem die Taktlinien nicht auf den Systemen, -sondern zwischen den Systemen gesetzt werden, kann mit einer @code{StaffGroup} -anstelle von @code{ChoirStaff} erreicht werden. Die Taktlinien auf den -Systemen werden mit der the @code{transparent}-Eigenschaft ausgelöscht. - -" - doctitlede = "Mensurstriche-Layout (Taktstriche zwischen den Systemen" - - texidoc = " -The mensurstriche-layout where the bar lines do not show on the staves -but between staves can be achieved with a @code{StaffGroup} instead of -a @code{ChoirStaff}. The bar line on staves is blanked out by setting -the @code{transparent} property. - -" - doctitle = "Mensurstriche layout (bar lines between the staves)" -} % begin verbatim - -global = { - \override Staff.BarLine #'transparent = ##t - s1 s - % the final bar line is not interrupted - \revert Staff.BarLine #'transparent - \bar "|." -} -\new StaffGroup \relative c'' { - << - \new Staff { << \global { c1 c } >> } - \new Staff { << \global { c c } >> } - >> -} - diff --git a/input/lsr/merging-multi-measure-rests-in-a-polyphonic-part.ly b/input/lsr/merging-multi-measure-rests-in-a-polyphonic-part.ly deleted file mode 100644 index 018700c00c..0000000000 --- a/input/lsr/merging-multi-measure-rests-in-a-polyphonic-part.ly +++ /dev/null @@ -1,38 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms" - - texidoc = " -When using multi-measure rests in a polyphonic staff, the rests will be -placed differently depending on the voice they belong to. However they -can be printed on the same staff line, using the following setting. - -" - doctitle = "Merging multi-measure rests in a polyphonic part" -} % begin verbatim - -normalPos = \revert MultiMeasureRest #'staff-position - -{ - << - { - c''1 - R1 - c''1 - \normalPos - R1 - } - \\ - { - c'1 - R1 - c'1 - \normalPos - R1 - } - >> -} - diff --git a/input/lsr/midi-intro.itely b/input/lsr/midi-intro.itely deleted file mode 100644 index cfa76077b8..0000000000 --- a/input/lsr/midi-intro.itely +++ /dev/null @@ -1,7 +0,0 @@ -@node MIDI -@unnumbered MIDI - -@ruser{MIDI output} - -@lysnippets - diff --git a/input/lsr/midi.snippet-list b/input/lsr/midi.snippet-list deleted file mode 100644 index 4c94738982..0000000000 --- a/input/lsr/midi.snippet-list +++ /dev/null @@ -1,3 +0,0 @@ -changing-midi-output-to-one-channel-per-voice.ly -changing-the-tempo-without-a-metronome-mark.ly -demo-midiinstruments.ly diff --git a/input/lsr/modern-tab-text-clef.ly b/input/lsr/modern-tab-text-clef.ly deleted file mode 100644 index 18c2210125..0000000000 --- a/input/lsr/modern-tab-text-clef.ly +++ /dev/null @@ -1,33 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "staff-notation, fretted-strings" - - texidoc = " -Use a markup text to replace the (TAB) clef glyph with a modern font. - -" - doctitle = "Modern TAB text clef" -} % begin verbatim - -TAB = \markup { - \raise #1.5 - \sans - \bold - \huge - \override #'(baseline-skip . 2.5) - \left-align - \center-column { - T - A - B - } -} - -\new TabStaff { - \override Staff.Clef #'stencil = #(lambda (grob) - (grob-interpret-markup grob TAB)) - a -} diff --git a/input/lsr/modifying-default-values-for-articulation-shorthand-notation.ly b/input/lsr/modifying-default-values-for-articulation-shorthand-notation.ly deleted file mode 100644 index acebf78a7f..0000000000 --- a/input/lsr/modifying-default-values-for-articulation-shorthand-notation.ly +++ /dev/null @@ -1,54 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks" - -%% Translation of GIT committish: dff50e8e1d3134657a6b6203b9c93826dc4cef65 - texidoces = " -Las abreviaturas se encuentran definidas dentro del archivo -@code{ly/script-init.ly}, donde las variables @code{dashHat}, -@code{dashPlus}, @code{dashDash}, @code{dashBar}, -@code{dashLarger}, @code{dashDot} y @code{dashUnderscore} reciben -valores predeterminados. Se pueden modificar estos valores -predeterminados para las abreviaturas. Por ejemplo, para asociar -la abreviatura @code{-+} (@code{dashPlus}) con el símbolo del -semitrino en lugar del símbolo predeterminado +, asigne el valor -@code{trill} a la variable @code{dashPlus}: - -" - doctitlees = "Modificar los valores predeterminados para la notación abreviada de las articulaciones" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Die Abkürzungen sind in der Datei @samp{ly/script-init.ly} definiert, wo -den Variablen @code{dashHat}, @code{dashPlus}, @code{dashDash}, -@code{dashBar}, @code{dashLarger}, @code{dashDot} und -@code{dashUnderscore} Standardwerte zugewiesen werden. Diese Standardwerte -können verändert werden. Um zum Beispiel die Abkürzung -@code{-+} (@code{dashPlus}) mit dem Triller anstatt mit dem +-Symbol zu -assoziieren, muss der Wert @code{trill} der Variable -@code{dashPlus} zugewiesen werden: - -" - doctitlede = "Die Standardwerte der Abkürzungen von Artikulationen verändern" - - texidoc = " -The shorthands are defined in @samp{ly/script-init.ly}, where the -variables @code{dashHat}, @code{dashPlus}, @code{dashDash}, -@code{dashBar}, @code{dashLarger}, @code{dashDot}, and -@code{dashUnderscore} are assigned default values. The default values -for the shorthands can be modified. For example, to associate the -@code{-+} (@code{dashPlus}) shorthand with the trill symbol instead of -the default + symbol, assign the value @code{trill} to the variable -@code{dashPlus}: - -" - doctitle = "Modifying default values for articulation shorthand notation" -} % begin verbatim - -\relative c'' { c1-+ } -dashPlus = "trill" -\relative c'' { c1-+ } - diff --git a/input/lsr/modifying-tuplet-bracket-length.ly b/input/lsr/modifying-tuplet-bracket-length.ly deleted file mode 100644 index 3a7f1d4294..0000000000 --- a/input/lsr/modifying-tuplet-bracket-length.ly +++ /dev/null @@ -1,36 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms" - - texidoc = " -Tuplet brackets can be made to run to prefatory matter or the next -note. Default tuplet brackets end at the right edge of the final note -of the tuplet; full-length tuplet brackets extend farther to the right, -either to cover all the non-rhythmic notation up to the following note, -or to cover only the whitespace before the next item of notation, be -that a clef, time signature, key signature, or another note. The -example shows how to switch tuplets to full length mode and how to -modify what material they cover. - -" - doctitle = "Modifying tuplet bracket length" -} % begin verbatim - -\new RhythmicStaff { - % Set tuplets to be extendable... - \set tupletFullLength = ##t - % ...to cover all items up to the next note - \set tupletFullLengthNote = ##t - \time 2/4 - \times 2/3 { c4 c c } - % ...or to cover just whitespace - \set tupletFullLengthNote = ##f - \time 4/4 - \times 4/5 { c4 c1 } - \time 3/4 - c2. -} - diff --git a/input/lsr/multi-measure-rest-markup.ly b/input/lsr/multi-measure-rest-markup.ly deleted file mode 100644 index b873c251d1..0000000000 --- a/input/lsr/multi-measure-rest-markup.ly +++ /dev/null @@ -1,87 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms, text" - -%% Translation of GIT committish: a041509cb268bc38f6491a33fdeabae91ed6de67 -texidoces = " -Los elementos de marcado aplicados a un silencio multicompás se -centran encima o debajo de éste. Los elementos de marcado extensos -que se adjuntan a silencios multicompás no producen la expansión del -compás. Para expandir un silencio multicompás de forma que quepa todo -el marcado, utilice un silencio de separación con un marcado aplicado -antes del silencio multicompás. - -Observe que el silencio separador produce la inserción de un compás. -El texto aplicado a un siencio sparador de esta forma se alinea por la -izquierda a la posición en que la nota estaría situada dentro del -compás, pero si la longitud del compás está determinada por la -longitud del texto, éste aparecerá centrado. - -" - -doctitlees = "Marcado de silencios multicompás" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = "Textbeschriftungen, die an Mehrtaktpausen gehängt wird, -wird über oder unter der Pause zentriert. Lange Beschriftungen -lassen den Takt nicht breiter werden. Um eine Mehrtaktpause einer -Beschriftung anzupassen, muss eine unsichtbare Pause mit der -Beschriftung direkt vor der Mehrtkatpause eingesetzt werden. - -Man sollte beachten, dass unsichtbare Pausen automatische Taktstriche -nach sich ziehen. Text, der an eine unsichtbare Pause gehänt wird, -ist links ausgerichtet an der Position, wo die Pause erscheinen -würde. Wenn aber die Länge des Taktes durch die Länge des Textes -bestimmt wird, sieht es so aus, als ob der Text zentriert gesetzt -ist." - - doctitlede = "Textbeschriftung und Mehrtaktpausen" - - -%% Translation of GIT committish: e71f19ad847d3e94ac89750f34de8b6bb28611df - texidocfr = " -Lorsque du texte est attaché à un silence multi-mesures, il sera centré -dans la mesure, au-dessus ou en dessous de la portée. Afin d'étirer la -mesure dans le cas ou ce texte est relativement long, il suffit -d'insérer un silence invisible auquel on attache le texte en question, -avant le silence multi-mesures. - -Rappelez-vous qu'un silence invisible génère une barre de mesure. Le -texte attaché à ce silence invisible sera alors aligné sur la gauche de -là où serait positionnée la note. Cependant, si la taille de la mesure -est déterminée par la longueur du texte, il apparaîtra comme centré. - -" - doctitlefr = "Ajout de texte à un silence multi-mesures" - - texidoc = " -Markups attached to a multi-measure rest will be centered above or -below it. Long markups attached to multi-measure rests do not cause -the measure to expand. To expand a multi-measure rest to fit the -markup, use a spacer rest with an attached markup before the -multi-measure rest. - -

    Note that the spacer rest causes a bar line to be inserted. Text -attached to a spacer rest in this way is left-aligned to the position -where the note would be placed in the measure, but if the measure -length is determined by the length of the text, the text will appear to -be centered. - -" - doctitle = "Multi-measure rest markup" -} % begin verbatim - -\relative c' { - \compressFullBarRests - \textLengthOn - s1*0^\markup { [MAJOR GENERAL] } - R1*19 - s1*0_\markup { \italic { Cue: ... it is yours } } - s1*0^\markup { A } - R1*30^\markup { [MABEL] } - \textLengthOff - c4^\markup { CHORUS } d f c -} diff --git a/input/lsr/nesting-staves.ly b/input/lsr/nesting-staves.ly deleted file mode 100644 index 422b907487..0000000000 --- a/input/lsr/nesting-staves.ly +++ /dev/null @@ -1,69 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "staff-notation, contexts-and-engravers, tweaks-and-overrides" - -%% Translation of GIT committish: f39a9724d9f51ed9d0d464689ef62f549d7b8dd6 - texidoces = " -Se puede utilizar la propiedad -@code{systemStartDelimiterHierarchy} para crear grupos de -pentagramas anidados de forma más compleja. La instrucción -@code{\\set StaffGroup.systemStartDelimiterHierarchy} toma una -lista alfabética del número de pentagramas producidos. Se puede -proporcionar antes de cada pentagrama un delimitador de comienzo -de sistema. Se debe encerrar entre corchetes y admite tantos -pentagramas como encierren las llaves. Se pueden omitir los -elementos de la lista, pero el primer corchete siempre abarca -todos los pentagramas. Las posibilidades son -@code{SystemStartBar}, @code{SystemStartBracket}, -@code{SystemStartBrace} y @code{SystemStartSquare}. - -" - doctitlees = "Anidado de grupos de pentagramas" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Die Eigenschaft @code{systemStartDelimiterHierarchy} kann eingesetzt -werden, um komplizierte geschachtelte Systemklammern zu erstellen. Der -Befehl @code{\\set StaffGroup.systemStartDelimiterHierarchy} nimmt eine -Liste mit der Anzahl der Systeme, die ausgegeben werden, auf. Vor jedem -System kann eine Systemanfangsklammer angegeben werden. Sie muss in Klammern eingefügt -werden und umfasst so viele Systeme, wie die Klammer einschließt. Elemente -in der Liste können ausgelassen werden, aber die erste Klammer umfasst immer -die gesamte Gruppe. Die Möglichkeiten der Anfangsklammer sind: @code{SystemStartBar}, -@code{SystemStartBracket}, @code{SystemStartBrace} und -@code{SystemStartSquare}. - -" - doctitlede = "Systeme schachteln" - - texidoc = " -The property @code{systemStartDelimiterHierarchy} can be used to make -more complex nested staff groups. The command @code{\\set -StaffGroup.systemStartDelimiterHierarchy} takes an alphabetical list of -the number of staves produced. Before each staff a system start -delimiter can be given. It has to be enclosed in brackets and takes as -much staves as the brackets enclose. Elements in the list can be -omitted, but the first bracket takes always the complete number of -staves. The possibilities are @code{SystemStartBar}, -@code{SystemStartBracket}, @code{SystemStartBrace}, and -@code{SystemStartSquare}. - -" - doctitle = "Nesting staves" -} % begin verbatim - -\new StaffGroup -\relative c'' << - \set StaffGroup.systemStartDelimiterHierarchy - = #'(SystemStartSquare (SystemStartBrace (SystemStartBracket a - (SystemStartSquare b) ) c ) d) - \new Staff { c1 } - \new Staff { c1 } - \new Staff { c1 } - \new Staff { c1 } - \new Staff { c1 } ->> - diff --git a/input/lsr/non-default-tuplet-numbers.ly b/input/lsr/non-default-tuplet-numbers.ly deleted file mode 100644 index 595d579ba0..0000000000 --- a/input/lsr/non-default-tuplet-numbers.ly +++ /dev/null @@ -1,74 +0,0 @@ -%% Do not edit this file; it is auto-generated from input/new -%% This file is in the public domain. -%% Note: this file works from version 2.13.1 -\version "2.13.1" - -\header { -%% Translation of GIT committish: d4f58bb3ad4e7fe1967a6b48f25e3addffc8aa14 - texidoces = " -LilyPond también proporciona funciones de formato para imprimir -números de grupo especial diferentes a la propia fracción, así -como para añadir una figura al número o a la fracción de la -agrupación. - -" - - doctitlees = "Números de agrupación especial distintos a los predeterminados" - -%% Translation of GIT committish: 6bf3e9149eb97e66b4c813e41dc7625f06c501aa -texidocde = " -LilyPond stellt auch Formatierungsfunktionen zur Verfügung, mit denen -N-tolennummern gesetzt werden können, die sich von dem eigentlichen Bruch -unterscheiden. Auch ein Notenwert kann zu Nenner oder Zähler des Bruchs -hinzugefügt werden. -" - doctitlede = "Nicht-standard-N-tolennummern" - -%% Translation of GIT committish: fa7695ea860d7ab2db86581dd5f8bc4f413f6705 - texidocfr = " -LilyPond sait aussi gérer des nolets dont le chiffrage imprimé ne -correspond pas exactement à la fraction de mesure à laquelle ils se -réfèrent, tout comme ceux auxquels une valeur de note vient en complément -au chiffre. -" - doctitlefr = "Nolets au chiffrage inhabituel" - - lsrtags = "rhythms" - - texidoc = " -LilyPond also provides formatting functions to print tuplet numbers different -than the actual fraction, as well as to append a note value to the tuplet -number or tuplet fraction. -" - doctitle = "Non-default tuplet numbers" -} % begin verbatim - - -\relative c'' { - \once \override TupletNumber #'text = - #(tuplet-number::non-default-tuplet-denominator-text 7) - \times 2/3 { c4. c4. c4. c4. } - \once \override TupletNumber #'text = - #(tuplet-number::non-default-tuplet-fraction-text 12 7) - \times 2/3 { c4. c4. c4. c4. } - \once \override TupletNumber #'text = - #(tuplet-number::append-note-wrapper - (tuplet-number::non-default-tuplet-fraction-text 12 7) "8") - \times 2/3 { c4. c4. c4. c4. } - - \once \override TupletNumber #'text = - #(tuplet-number::append-note-wrapper - tuplet-number::calc-denominator-text "4") - \times 2/3 { c8 c8 c8 c8 c8 c8 } - \once \override TupletNumber #'text = - #(tuplet-number::append-note-wrapper - tuplet-number::calc-fraction-text "4") - \times 2/3 { c8 c8 c8 c8 c8 c8 } - - \once \override TupletNumber #'text = - #(tuplet-number::fraction-with-notes "4." "8") - \times 2/3 { c4. c4. c4. c4. } - \once \override TupletNumber #'text = - #(tuplet-number::non-default-fraction-with-notes 12 "8" 4 "4") - \times 2/3 { c4. c4. c4. c4. } -} diff --git a/input/lsr/non-traditional-key-signatures.ly b/input/lsr/non-traditional-key-signatures.ly deleted file mode 100644 index d3184a6c49..0000000000 --- a/input/lsr/non-traditional-key-signatures.ly +++ /dev/null @@ -1,91 +0,0 @@ -%% Do not edit this file; it is auto-generated from input/new -%% This file is in the public domain. -%% Note: this file works from version 2.13.0 -\version "2.13.1" - -\header { -%% Translation of GIT committish: d4f58bb3ad4e7fe1967a6b48f25e3addffc8aa14 - doctitlees = "Armaduras de tonalidad no tradicionales" - texidoces = " - -La muy utilizada instrucción @code{\\key} establece la propiedad -@code{keySignature} property, dentro del contexto @code{Staff}. - -Para crear armaduras de tonalidad no estándar, ajuste esta -propiedad directamente. El formato de esta instrucción es una -lista: - -@code{\\set Staff.keySignature = #`(((octava . paso) . alteración) -((octava . paso) . alteración) ...)} donde, para cada elemento -dentro de la lista, @code{octava} especifica la octava -(siendo@tie{}cero la octava desde el Do@tie{}central hasta el Si -por encima), @code{paso} especifica la nota dentro de la octava -(cero@tie{}significa@tie{}Do y 6@tie{}significa@tie{}Si), y -@code{alteración} es @code{,SHARP ,FLAT ,DOUBLE-SHARP} -etc. (observe la coma precedente.) - -De forma alternativa, para cada elemento de la lista el uso del -formato más conciso @code{(paso . alteración)} especifica que la -misma alteración debe estar en todas las octavas. - -He aquí un ejemplo de una posible armadura para generar una escala -exátona: -" - -%% Translation of GIT committish: 6bf3e9149eb97e66b4c813e41dc7625f06c501aa - doctitlede = "Untypische Tonarten" - texidocde = " -Der üblicherweise benutzte @code{\\key}-Befehl setzt die -@code{keySignature}-Eigenschaft im @code{Staff}-Kontext. - -Um untypische Tonartenvorzeichen zu erstellen, muss man diese Eigenschaft -direkt setzen. Das Format für den Befehl ist eine Liste: @code{ \\set -Staff.keySignature = #`(((Oktave . Schritt) . Alteration) ((Oktave -. Schritt) . Alteration) ...)} wobei für jedes Element in der Liste -@code{Oktave} die Oktave angibt (0@tie{}ist die Oktave vom -eingestrichenen@tie{}C bis zum eingestrichenen@tie{}H), @code{Schritt} gibt -die Note innerhalb der Oktave an (0@tie{}heißt@tie{}C und -6@tie{}heißt@tie{}H), und @code{Alteration} ist @code{,SHARP ,FLAT -,DOUBLE-SHARP} usw. (Beachte das beginnende Komma.) - -Alternativ kann auch jedes Element der Liste mit dem allgemeineren Format -@code{(Schritt . Alteration)} gesetzt werden, wobei dann die Einstellungen -für alle Oktaven gelten. - -Hier ein Beispiel einer möglichen Tonart für eine Ganztonleiter: -" - - lsrtags = "pitches, staff-notation" - texidoc = " -The commonly used @code{\\key} command sets the @code{keySignature} -property, in the @code{Staff} context. - -To create non-standard key signatures, set this property directly. The -format of this command is a list: - -@code{\\set Staff.keySignature = #`(((octave . step) . alter) ((octave -. step) . alter) ...)} where, for each element in the list, -@code{octave} specifies the octave (0@tie{}being the octave from -middle@tie{}C to the B above), @code{step} specifies the note within the -octave (0@tie{}means@tie{}C and 6@tie{}means@tie{}B), and @code{alter} is -@code{,SHARP ,FLAT ,DOUBLE-SHARP} etc. (Note the leading comma.) - -Alternatively, for each item in the list, using the more concise format -@code{(step . alter)} specifies that the same alteration should hold in all -octaves. - -Here is an example of a possible key signature for generating a whole-tone -scale: -" - doctitle = "Non-traditional key signatures" -} % begin verbatim - - -\relative c' { - \set Staff.keySignature = #`(((0 . 6) . ,FLAT) - ((0 . 5) . ,FLAT) - ((0 . 3) . ,SHARP)) - c4 d e fis - aes4 bes c2 -} - diff --git a/input/lsr/orchestra,-choir-and-piano-template.ly b/input/lsr/orchestra,-choir-and-piano-template.ly deleted file mode 100644 index 4b2da1de2d..0000000000 --- a/input/lsr/orchestra,-choir-and-piano-template.ly +++ /dev/null @@ -1,177 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "template" - -%% Translation of GIT committish: 632d908ee4b36bc84b6f3b15e392040dc9b10dbb - texidoces = " - -Esta plantilla muestra el uso de contextos @code{StaffGroup} y -@code{GrandStaff} anidados para sub-agrupar instrumentos del mismo -tipo, y el uso de @code{\\transpose} para los instrumentos -transpositores. Toda la música que está dentro de variables se -almacena en Do. La música se puede introducir en Do, o (de forma -alternativa) escribirse en el tono del instrumento y transportada -a Do antes de ser asignada a una variable. - -" - doctitlees = "Plantilla de orquesta, coro y piano" - - texidoc = " -This template demonstrates the use of nested @code{StaffGroup} and -@code{GrandStaff} contexts to sub-group instruments of the same type -together, and the use of @code{\\transpose} for transposing -instruments. All music in variables is stored in C. Music may be -entered in C or, alternatively, entered in the instrument key and -transposed to C before being assigned to a variable. - -" - doctitle = "Orchestra, choir and piano template" -} % begin verbatim - -#(set-global-staff-size 17) - -\paper { - indent = 3.0\cm - short-indent = 1.5\cm -} - -fluteMusic = \relative c { \key c \major c'1 d } -oboeMusic = \relative c { \key c \major c'1 d } -clarinetMusic = \relative c { \key c \major c'1 d } -bassoonMusic = \relative c { \clef bass \key c \major c1 d } -trumpetMusic = \relative c { \key c \major c''1 d } -tromboneMusic = \relative c { \key c \major c1 d } -hornIMusic = \relative c { c'1 d } -hornIIMusic = \relative c { c1 d } -percussionMusic = \relative c { \key c \major c1 d } -sopranoMusic = \relative c'' { \key c \major c1 d } -sopranoLyrics = \lyricmode { Sop -- ra } -altoIMusic = \relative c' { \key c \major c1 d } -altoILyrics = \lyricmode { A -- one } -altoIIMusic = \relative c' { \key c \major c1 d } -altoIILyrics = \lyricmode { A -- two } -tenorMusic = \relative c' { \key c \major c1 d } -tenorLyrics = \lyricmode { Ten -- or } -pianoRHMusic = \relative c { \key c \major c'1 d } -pianoLHMusic = \relative c { \key c \major c1 d } -violinIMusic = \relative c { \key c \major c'1 d } -violinIIMusic = \relative c { \key c \major c'1 d } -violaMusic = \relative c { \clef alto \key c \major c'1 d } -celloMusic = \relative c { \clef bass \key c \major c1 d } -bassMusic = \relative c { \clef "bass_8" \key c \major c,1 d } - -\score { - \new GrandStaff = "GrandStaff_score" << - \new StaffGroup = "StaffGroup_woodwinds" << - \new Staff = "Staff_flute" { - \set Staff.instrumentName = #"Flute" - \fluteMusic - } - \new Staff = "Staff_oboe" { - \set Staff.instrumentName = #"Oboe" - \oboeMusic - } - \new Staff = "Staff_clarinet" { - \set Staff.instrumentName = \markup \concat { "Clarinet in B" \flat } - \transposition bes - \transpose bes c' \clarinetMusic - } - \new Staff = "Staff_bassoon" { - \set Staff.instrumentName = #"Bassoon" - \bassoonMusic - } - >> - \new StaffGroup = "StaffGroup_brass" << - \new GrandStaff << - \new Staff = "Staff_hornI" { - \set Staff.instrumentName = #"Horn I" - \transposition f - \transpose f c' \hornIMusic - } - \new Staff = "Staff_hornII" { - \set Staff.instrumentName = #"Horn II" - \clef bass - \transposition f' - \transpose f c \hornIIMusic - } - >> - \new Staff = "Staff_trumpet" { - \set Staff.instrumentName = #"Trumpet in C" - \trumpetMusic - } - \new Staff = "Staff_trombone" { - \set Staff.instrumentName = #"Trombone" - \clef bass - \tromboneMusic - } - >> - \new RhythmicStaff = "RhythmicStaff_percussion" << - \set RhythmicStaff.instrumentName = #"Percussion" - \percussionMusic - >> - \new PianoStaff << - \set PianoStaff.instrumentName = #"Piano" - \new Staff { \pianoRHMusic } - \new Staff { - \clef bass - \pianoLHMusic - } - >> - \new ChoirStaff = "ChoirStaff_choir" << - \new Staff = "Staff_soprano" { - \set Staff.instrumentName = #"Soprano" - \new Voice = "soprano" - \sopranoMusic - } - \new Lyrics \lyricsto "soprano" { \sopranoLyrics } - \new GrandStaff = "GrandStaff_altos" \with { \accepts Lyrics } << - \new Staff = "Staff_altoI" { - \set Staff.instrumentName = #"Alto I" - \new Voice = "altoI" - \altoIMusic - } - \new Lyrics \lyricsto "altoI" { \altoILyrics } - \new Staff = "Staff_altoII" { - \set Staff.instrumentName = #"Alto II" - \new Voice = "altoII" - \altoIIMusic - } - \new Lyrics \lyricsto "altoII" { \altoIILyrics } - >> - \new Staff = "Staff_tenor" { - \set Staff.instrumentName = #"Tenor" - \clef "treble_8" - \new Voice = "tenor" - \tenorMusic - } - \new Lyrics \lyricsto "tenor" { \tenorLyrics } - >> - \new StaffGroup = "StaffGroup_strings" << - \new GrandStaff = "GrandStaff_violins" << - \new Staff = "Staff_violinI" { - \set Staff.instrumentName = #"Violin I" - \violinIMusic - } - \new Staff = "Staff_violinII" { - \set Staff.instrumentName = #"Violin II" - \violinIIMusic - } - >> - \new Staff = "Staff_viola" { - \set Staff.instrumentName = #"Viola" - \violaMusic - } - \new Staff = "Staff_cello" { - \set Staff.instrumentName = #"Cello" - \celloMusic - } - \new Staff = "Staff_bass" { - \set Staff.instrumentName = #"Double Bass" - \bassMusic - } - >> - >> -} diff --git a/input/lsr/ottava-text.ly b/input/lsr/ottava-text.ly deleted file mode 100644 index afdd13ec40..0000000000 --- a/input/lsr/ottava-text.ly +++ /dev/null @@ -1,51 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "pitches, text" - -%% Translation of GIT committish: 674a5f874c07063ae56d55be25c55fc3b4bdb7bf - texidoces = " -Internamente, la función @code{set-octavation} establece las -propiedades @code{ottavation} (por ejemplo, a @code{\"8va\"} o a -@code{\"8vb\"}) y @code{middleCPosition}. Para sobreescribir el texto -del corchete, ajuste @code{ottavation} despues de invocar a -@code{set-octavation}. -" - doctitlees = "Texto de octava alta y baja" -%% Translation of GIT committish: e75f1604a1b866c853dee42dbffcb7800c706a5f - - -texidocde = " -Intern setzt die @code{set-octavation}-Funktion die Eigenschaften -@code{ottavation} (etwa auf den Wert @code{\"8va\"} oder @code{\"8vb\"}) -und @code{middleCPosition}. Um den Text der Oktavierungsklammer zu -ändern, kann @code{ottavation} manuell gesetzt werden, nachdem -@code{set-octavation} benützt wurde. - -" - -doctitlede = "Ottava-Text" - - texidoc = " -Internally, @code{\\ottava} sets the properties @code{ottavation} (for -example, to @code{\"8va\"} or @code{\"8vb\"}) and -@code{middleCPosition}. To override the text of the bracket, set -@code{ottavation} after invoking @code{\\ottava}. - -" - doctitle = "Ottava text" -} % begin verbatim - -{ - \ottava #1 - \set Staff.ottavation = #"8" - c''1 - \ottava #0 - c'1 - \ottava #1 - \set Staff.ottavation = #"Text" - c''1 -} - diff --git a/input/lsr/outputting-the-version-number.ly b/input/lsr/outputting-the-version-number.ly deleted file mode 100644 index bade2a58ee..0000000000 --- a/input/lsr/outputting-the-version-number.ly +++ /dev/null @@ -1,28 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "text, titles" - - texidoc = " -By putting the output of - @code{lilypond-version} into a lyric, it is possible to print the - version number of LilyPond in a score, or in a document generated - with @code{lilypond-book}. Another possibility is to append the - version number to the doc-string, in this manner: - -" - doctitle = "Outputting the version number" -} % begin verbatim - -\score { - \new Lyrics { - \override Score.RehearsalMark #'self-alignment-X = #LEFT - \mark #(string-append "Processed with LilyPond version " (lilypond-version)) - s2 - } -} - - - diff --git a/input/lsr/page-label.ly b/input/lsr/page-label.ly deleted file mode 100644 index f55e121821..0000000000 --- a/input/lsr/page-label.ly +++ /dev/null @@ -1,59 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "spacing" - - texidoc = " -Page labels may be placed inside music or at top-level, and referred to -in markups. - -" - doctitle = "Page label" -} % begin verbatim - -#(set-default-paper-size "a6") - -#(define-markup-command (toc-line layout props label text) - (symbol? markup?) - (interpret-markup layout props - (markup #:fill-line (text #:page-ref label "8" "?")))) - -\book { - \markup \huge \fill-line { \null Title Page \null } - - \pageBreak - - \label #'toc - \markup \column { - \large \fill-line { \null Table of contents \null } - \toc-line #'toc "Table of contents" - \toc-line #'firstScore "First Score" - \toc-line #'markA "Mark A" - \toc-line #'markB "Mark B" - \toc-line #'markC "Mark C" - \toc-line #'unknown "Unknown label" - } - - \pageBreak - - \label #'firstScore - \score { - \new Staff \relative c' { - c2 c - \mark \markup { - A (page \concat { \page-ref #'markA "0" "?" ) } - } \label #'markA - c2 c - \pageBreak - \mark "B" \label #'markB - d2 d - d2 d - \once \override Score.RehearsalMark #'break-visibility = - #begin-of-line-invisible - \mark "C" \label #'markC - } - \header { piece = "First score" } - } -} diff --git a/input/lsr/paper-and-layout-intro.itely b/input/lsr/paper-and-layout-intro.itely deleted file mode 100644 index 5b654b797f..0000000000 --- a/input/lsr/paper-and-layout-intro.itely +++ /dev/null @@ -1,8 +0,0 @@ -@node Paper and layout -@unnumbered Paper and layout - -@c FIXME not precise enough reference? -@ruser{Spacing issues} - -@lysnippets - diff --git a/input/lsr/paper-and-layout.snippet-list b/input/lsr/paper-and-layout.snippet-list deleted file mode 100644 index 81975b1181..0000000000 --- a/input/lsr/paper-and-layout.snippet-list +++ /dev/null @@ -1,7 +0,0 @@ -aligning-and-centering-instrument-names.ly -book-parts.ly -changing-the-staff-size.ly -clip-systems.ly -creating-blank-staves.ly -demonstrating-all-headers.ly -table-of-contents.ly diff --git a/input/lsr/percent-repeat-count-visibility.ly b/input/lsr/percent-repeat-count-visibility.ly deleted file mode 100644 index 75d4f6fa03..0000000000 --- a/input/lsr/percent-repeat-count-visibility.ly +++ /dev/null @@ -1,38 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "repeats, tweaks-and-overrides" - -%% Translation of GIT committish: 43774ddb81b9017802da04ba2862cae4586935b2 - texidoces = " -Se pueden mostrar los contadores de las repeticiones del tipo -porcentaje a intervalos regulares mediante el establecimiento de -la propiedad de contexto @code{repeatCountVisibility}. - -" - doctitlees = "Visibilidad del contador de repeticiones de tipo porcentaje" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Prozentwiederholungszähler können in regelmäßigen Intervallen angezeigt -werden, indem man die Eigenschaft @code{repeatCountVisibility} beeinflusst. -" - doctitlede = "Sichtbarkeit von Prozent-Wiederholungen" - - texidoc = " -Percent repeat counters can be shown at regular intervals by setting -the context property @code{repeatCountVisibility}. - -" - doctitle = "Percent repeat count visibility" -} % begin verbatim - -\relative c'' { - \set countPercentRepeats = ##t - \set repeatCountVisibility = #(every-nth-repeat-count-visible 5) - \repeat percent 10 { c1 } \break - \set repeatCountVisibility = #(every-nth-repeat-count-visible 2) - \repeat percent 6 { c1 d1 } -} diff --git a/input/lsr/percent-repeat-counter.ly b/input/lsr/percent-repeat-counter.ly deleted file mode 100644 index b15045af18..0000000000 --- a/input/lsr/percent-repeat-counter.ly +++ /dev/null @@ -1,37 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "repeats" - -%% Translation of GIT committish: da84f4caeafed6832152295e67ae852a9930f568 - texidoces = " -Las repeticiones de compases completos mayores de dos repeticiones -pueden llevar un contador si se activa la propiedad adecuada, como se -ve en este ejemplo: - -" - doctitlees = "Percent repeat counter" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Ganztaktwiederholungen mit mehr als zwei Wiederholungen erhalten einen -Zähler, wenn man die entsprechende Eigenschaft einsetzt: - -" - doctitlede = "Prozent-Wiederholungen zählen" - - texidoc = " -Measure repeats of more than two repeats can get a counter when the -convenient property is switched, as shown in this example: - -" - doctitle = "Percent repeat counter" -} % begin verbatim - -\relative c'' { - \set countPercentRepeats = ##t - \repeat percent 4 { c1 } -} - diff --git a/input/lsr/percussion-beaters.ly b/input/lsr/percussion-beaters.ly deleted file mode 100644 index b891c760e7..0000000000 --- a/input/lsr/percussion-beaters.ly +++ /dev/null @@ -1,158 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "percussion" - - texidoc = " -Graphic symbols for percussion instruments are not natively supported; -however it is possible to include such symbols, either as an external -EPS file or as embedded PostScript code inside a markup, as -demonstrated in this example. - -" - doctitle = "Percussion beaters" -} % begin verbatim - -stick = \markup { - \with-dimensions #'(0 . 5) #'(0 . 5) - \postscript #" - 0 6 translate - 0.8 -0.8 scale - 0 0 0 setrgbcolor - [] 0 setdash - 1 setlinewidth - 0 setlinejoin - 0 setlinecap - gsave [1 0 0 1 0 0] concat - gsave [1 0 0 1 -3.5406095 -199.29342] concat - gsave - 0 0 0 setrgbcolor - newpath - 7.1434065 200.94354 moveto - 7.2109628 200.90454 7.2785188 200.86554 7.3460747 200.82654 curveto - 8.2056347 202.31535 9.0651946 203.80414 9.9247546 205.29295 curveto - 9.8571989 205.33195 9.7896429 205.37095 9.7220864 205.40996 curveto - 8.8625264 203.92115 8.0029664 202.43233 7.1434065 200.94354 curveto - closepath - eofill - grestore - gsave - 0 0 0 setrgbcolor - newpath - 4.9646672 203.10444 moveto - 5.0036707 203.03688 5.0426744 202.96933 5.0816777 202.90176 curveto - 6.5704792 203.76133 8.0592809 204.6209 9.5480824 205.48045 curveto - 9.5090791 205.54801 9.4700754 205.61556 9.4310717 205.68311 curveto - 7.94227 204.82356 6.4534687 203.96399 4.9646672 203.10444 curveto - closepath - eofill - grestore - gsave - << - /ShadingType 3 - /ColorSpace /DeviceRGB - /Coords [113.13708 207.87465 0 113.13708 207.87465 16.162441] - /Extend [true true] - /Domain [0 1] - /Function << - /FunctionType 3 - /Functions - [ - << - /FunctionType 2 - /Domain [0 1] - /C0 [1 1 1] - /C1 [0.72941178 0.72941178 0.72941178] - /N 1 - >> - ] - /Domain [0 1] - /Bounds [ ] - /Encode [ 0 1 ] - >> - >> - newpath - 7.6422017 200.76488 moveto - 7.6505696 201.02554 7.3905363 201.24867 7.1341335 201.20075 curveto - 6.8759501 201.16916 6.6949602 200.87978 6.7801462 200.63381 curveto - 6.8480773 200.39155 7.1438307 200.25377 7.3728389 200.35861 curveto - 7.5332399 200.42458 7.6444521 200.59122 7.6422017 200.76488 curveto - closepath - clip - gsave [0.052859054 0.063089841 -0.020912282 0.017521108 5.7334261 189.76443] concat - shfill - grestore - grestore - 0 0 0 setrgbcolor - [] 0 setdash - 0.027282091 setlinewidth - 0 setlinejoin - 0 setlinecap - newpath - 7.6422017 200.76488 moveto - 7.6505696 201.02554 7.3905363 201.24867 7.1341335 201.20075 curveto - 6.8759501 201.16916 6.6949602 200.87978 6.7801462 200.63381 curveto - 6.8480773 200.39155 7.1438307 200.25377 7.3728389 200.35861 curveto - 7.5332399 200.42458 7.6444521 200.59122 7.6422017 200.76488 curveto - closepath - stroke - gsave - << - /ShadingType 3 - /ColorSpace /DeviceRGB - /Coords [113.13708 207.87465 0 113.13708 207.87465 16.162441] - /Extend [true true] - /Domain [0 1] - /Function << - /FunctionType 3 - /Functions - [ - << - /FunctionType 2 - /Domain [0 1] - /C0 [1 1 1] - /C1 [0.72941178 0.72941178 0.72941178] - /N 1 - >> - ] - /Domain [0 1] - /Bounds [ ] - /Encode [ 0 1 ] - >> - >> - newpath - 5.2721217 202.83181 moveto - 5.2804896 203.09247 5.0204563 203.3156 4.7640539 203.26768 curveto - 4.5058701 203.23609 4.3248803 202.94671 4.4100662 202.70074 curveto - 4.4779975 202.45848 4.7737511 202.3207 5.0027593 202.42554 curveto - 5.1631598 202.49149 5.2743721 202.65813 5.2721217 202.83181 curveto - closepath - clip - gsave [0.052859054 0.063089841 -0.020912282 0.017521108 3.363346 191.83136] concat - shfill - grestore - grestore - 0 0 0 setrgbcolor - [] 0 setdash - 0.027282091 setlinewidth - 0 setlinejoin - 0 setlinecap - newpath - 5.2721217 202.83181 moveto - 5.2804896 203.09247 5.0204563 203.3156 4.7640539 203.26768 curveto - 4.5058701 203.23609 4.3248803 202.94671 4.4100662 202.70074 curveto - 4.4779975 202.45848 4.7737511 202.3207 5.0027593 202.42554 curveto - 5.1631598 202.49149 5.2743721 202.65813 5.2721217 202.83181 curveto - closepath - stroke - grestore - grestore - " -} - -\score { - b1^\stick -} - diff --git a/input/lsr/percussion-intro.itely b/input/lsr/percussion-intro.itely deleted file mode 100644 index 68369ab077..0000000000 --- a/input/lsr/percussion-intro.itely +++ /dev/null @@ -1,7 +0,0 @@ -@node Percussion -@unnumbered Percussion - -@ruser{Percussion} - -@lysnippets - diff --git a/input/lsr/percussion.snippet-list b/input/lsr/percussion.snippet-list deleted file mode 100644 index 5a29fb2c15..0000000000 --- a/input/lsr/percussion.snippet-list +++ /dev/null @@ -1,5 +0,0 @@ -adding-drum-parts.ly -heavily-customized-polymetric-time-signatures.ly -jazz-combo-template.ly -percussion-beaters.ly -printing-music-with-different-time-signatures.ly diff --git a/input/lsr/permitting-line-breaks-within-beamed-tuplets.ly b/input/lsr/permitting-line-breaks-within-beamed-tuplets.ly deleted file mode 100644 index 8032447a40..0000000000 --- a/input/lsr/permitting-line-breaks-within-beamed-tuplets.ly +++ /dev/null @@ -1,64 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms" - -%% Translation of GIT committish: 3644a70508f73e9204837cb07430225e55bd38f6 - doctitlees = "Permitir saltos de línea dentro de grupos especiales con barra" - texidoces = " -Este ejemplo artificial muestra cómo se pueden permitir tanto los -saltos de línea manuales como los automáticos dentro de un grupo de -valoración especial unido por una barra. Observe que estos grupos -sincopados se deben barrar manualmente. - -" - -%% Translation of GIT committish: 6ce7f350682dfa99af97929be1dec6b9f1cbc01a - texidocde = " -Dieses künstliche Beispiel zeigt, wie sowohl automatische als auch -manuelle Zeilenumbrüche innerhalb einer N-tole mit Balken erlaubt -werden können. Diese unregelmäßige Bebalkung muss allerdings manuell -gesetzt werden. - -" - doctitlede = "Zeilenumbrüche bei N-tolen mit Balken erlauben" - - -%% Translation of GIT committish: e71f19ad847d3e94ac89750f34de8b6bb28611df - texidocfr = " -Cet exemple peu académique démontre comment il est possible d'insérer un saut -de ligne dans un nolet portant une ligature. Ces ligatures doivent toutefois -être explicites. - -" - doctitlefr = "Saut de ligne au milieu d'un nolet avec ligature" - - texidoc = " -This artificial example shows how both manual and automatic line breaks -may be permitted to within a beamed tuplet. Note that such off-beat -tuplets have to be beamed manually. - -" - doctitle = "Permitting line breaks within beamed tuplets" -} % begin verbatim - -\layout { - \context { - \Voice - % Permit line breaks within tuplets - \remove "Forbid_line_break_engraver" - % Allow beams to be broken at line breaks - \override Beam #'breakable = ##t - } -} -\relative c'' { - a8 - \repeat unfold 5 { \times 2/3 { c[ b a] } } - % Insert a manual line break within a tuplet - \times 2/3 { c[ b \bar "" \break a] } - \repeat unfold 5 { \times 2/3 { c[ b a] } } - c8 -} - diff --git a/input/lsr/piano-template-simple.ly b/input/lsr/piano-template-simple.ly deleted file mode 100644 index 89fa28cf59..0000000000 --- a/input/lsr/piano-template-simple.ly +++ /dev/null @@ -1,55 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "keyboards, template" - -%% Translation of GIT committish: d35687993883eb31442009fc50d5ae063108bfa7 - texidoces = " -Presentamos a continuación una plantilla de piano sencilla con algunas -notas. - -" - doctitlees = "Plantilla de piano (sencilla)" - -%% Translation of GIT committish: 17633f6b8681af86230aa84597fe7561e98c91d6 - texidocde = " -Hier ein einfaches Klaviersystem. - -" - doctitlede = "Vorlage für einfache Klaviernotation" - - texidoc = " -Here is a simple piano staff with some notes. - -" - doctitle = "Piano template (simple)" -} % begin verbatim - -upper = \relative c'' { - \clef treble - \key c \major - \time 4/4 - - a4 b c d -} - -lower = \relative c { - \clef bass - \key c \major - \time 4/4 - - a2 c -} - -\score { - \new PianoStaff << - \set PianoStaff.instrumentName = #"Piano " - \new Staff = "upper" \upper - \new Staff = "lower" \lower - >> - \layout { } - \midi { } -} - diff --git a/input/lsr/piano-template-with-centered-dynamics.ly b/input/lsr/piano-template-with-centered-dynamics.ly deleted file mode 100644 index eac25157f6..0000000000 --- a/input/lsr/piano-template-with-centered-dynamics.ly +++ /dev/null @@ -1,109 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks, keyboards, template" - -%% Translation of GIT committish: dff50e8e1d3134657a6b6203b9c93826dc4cef65 - texidoces = " -Muchas partituras de piano tienen las indicaciones dinámicas -centradas entre los dos pentagramas. Esto requiere un poco de -trucaje, pero puesto que la plantilla está aquí mismo, no tenemos -que hacer este trucaje por nuestra cuenta. - -" - doctitlees = "Plantilla de piano con matices centrados" -%% Translation of GIT committish: 17633f6b8681af86230aa84597fe7561e98c91d6 - - texidocde = " -In der meisten Klaviernotation werden die Dynamikzeichen zwischen -den beiden Systemen zentriert. Für LilyPond muss man die Einstellungen -etwas anpassen, aber Sie können ja das angepasste Beispiel von hier -kopieren. -" - -%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae - texidocja = " -多くのピアノ譜は、強弱記号を 2 つの譜の間に置きます。これを実現するにはちょっ@c -とした調整が必要ですが、そのテンプレートがここにあるので、あなた自身が調整を行@c -う必要はありません。 -" - - texidoc = " -Many piano scores have the dynamics centered between the two staves. -This requires a bit of tweaking to implement, but since the template is -right here, you don't have to do the tweaking yourself. - -" - doctitle = "Piano template with centered dynamics" -} % begin verbatim - -global = { - \key c \major - \time 4/4 -} - -upper = \relative c'' { - \clef treble - a4 b c d -} - -lower = \relative c { - \clef bass - a2 c -} - -dynamics = { - s2\fff\> s4 s\!\pp -} - -pedal = { - s2\sustainOn s\sustainOff -} - -\score { - \new PianoStaff = "PianoStaff_pf" << - \new Staff = "Staff_pfUpper" << \global \upper >> - \new Dynamics = "Dynamics_pf" \dynamics - \new Staff = "Staff_pfLower" << \global \lower >> - \new Dynamics = "pedal" \pedal - >> - - \layout { - % define Dynamics context - \context { - \type "Engraver_group" - \name Dynamics - \alias Voice - \consists "Output_property_engraver" - \consists "Piano_pedal_engraver" - \consists "Script_engraver" - \consists "New_dynamic_engraver" - \consists "Dynamic_align_engraver" - \consists "Text_engraver" - \consists "Skip_event_swallow_translator" - \consists "Axis_group_engraver" - - pedalSustainStrings = #'("Ped." "*Ped." "*") - pedalUnaCordaStrings = #'("una corda" "" "tre corde") - \override DynamicLineSpanner #'Y-offset = #0 - \override TextScript #'font-size = #2 - \override TextScript #'font-shape = #'italic - \override VerticalAxisGroup #'minimum-Y-extent = #'(-1 . 1) - } - % modify PianoStaff context to accept Dynamics context - \context { - \PianoStaff - \accepts Dynamics - } - } -} - -\score { - \new PianoStaff = "PianoStaff_pf" << - \new Staff = "Staff_pfUpper" << \global \upper \dynamics \pedal >> - \new Staff = "Staff_pfLower" << \global \lower \dynamics \pedal >> - >> - \midi { } -} diff --git a/input/lsr/piano-template-with-centered-lyrics.ly b/input/lsr/piano-template-with-centered-lyrics.ly deleted file mode 100644 index 512998d7b0..0000000000 --- a/input/lsr/piano-template-with-centered-lyrics.ly +++ /dev/null @@ -1,74 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "text, keyboards, template" - -%% Translation of GIT committish: d35687993883eb31442009fc50d5ae063108bfa7 - texidoces = " -En lugar de tener un pentagrama dedicado a la melodía y la letra, ésta -se puede centrar entre los pentagramas de un sistema de piano. - -" - doctitlees = "Plantilla de piano con letra centrada" - -%% Translation of GIT committish: 17633f6b8681af86230aa84597fe7561e98c91d6 - texidocde = " -Anstatt ein eigenes System für Melodie und Text zu schreiben, können -Sie den Text auch zwischen die beiden Klaviersysteme schreiben -(und damit das zusätzliche System für die Gesangstimme auslassen). -" - -%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae - texidocja = " -旋律と歌詞のための譜表を持つ代わりに、歌詞をピアノ譜の 2 つの譜の間に置くことができます。 -" - - texidoc = " -Instead of having a full staff for the melody and lyrics, lyrics can be -centered between the staves of a piano staff. - -" - doctitle = "Piano template with centered lyrics" -} % begin verbatim - -upper = \relative c'' { - \clef treble - \key c \major - \time 4/4 - - a4 b c d -} - -lower = \relative c { - \clef bass - \key c \major - \time 4/4 - - a2 c -} - -text = \lyricmode { - Aaa Bee Cee Dee -} - -\score { - \new GrandStaff << - \new Staff = upper { \new Voice = "singer" \upper } - \new Lyrics \lyricsto "singer" \text - \new Staff = lower { \lower } - >> - \layout { - \context { - \GrandStaff - \accepts "Lyrics" - } - \context { - \Lyrics - \consists "Bar_engraver" - } - } - \midi { } -} - diff --git a/input/lsr/piano-template-with-melody-and-lyrics.ly b/input/lsr/piano-template-with-melody-and-lyrics.ly deleted file mode 100644 index 8d80c301f4..0000000000 --- a/input/lsr/piano-template-with-melody-and-lyrics.ly +++ /dev/null @@ -1,77 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "vocal-music, keyboards, template" - -%% Translation of GIT committish: d35687993883eb31442009fc50d5ae063108bfa7 - texidoces = " -He aquí el típico formato dde una canción: un pentagrama con la -melodía y la letra, y el acompañamiento de piano por debajo. - -" - doctitlees = "Plantilla de piano con melodía y letra" - -%% Translation of GIT committish: 17633f6b8681af86230aa84597fe7561e98c91d6 - texidocde = " -Das nächste Beispiel ist typisch für ein Lied: Im oberen System die -Melodie mit Text, darunter Klavierbegleitung. -" - -%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae - texidocja = " -これは一般的な歌曲のフォーマットです: 旋律と歌詞を持つ譜表と、その下にピアノ伴奏譜があります。 -" - - texidoc = " -Here is a typical song format: one staff with the melody and lyrics, -with piano accompaniment underneath. - -" - doctitle = "Piano template with melody and lyrics" -} % begin verbatim - -melody = \relative c'' { - \clef treble - \key c \major - \time 4/4 - - a b c d -} - -text = \lyricmode { - Aaa Bee Cee Dee -} - -upper = \relative c'' { - \clef treble - \key c \major - \time 4/4 - - a4 b c d -} - -lower = \relative c { - \clef bass - \key c \major - \time 4/4 - - a2 c -} - -\score { - << - \new Voice = "mel" { \autoBeamOff \melody } - \new Lyrics \lyricsto mel \text - \new PianoStaff << - \new Staff = "upper" \upper - \new Staff = "lower" \lower - >> - >> - \layout { - \context { \RemoveEmptyStaffContext } - } - \midi { } -} - diff --git a/input/lsr/pitches-intro.itely b/input/lsr/pitches-intro.itely deleted file mode 100644 index 7ca94ff7a2..0000000000 --- a/input/lsr/pitches-intro.itely +++ /dev/null @@ -1,7 +0,0 @@ -@node Pitches -@unnumbered Pitches - -@ruser{Pitches} - -@lysnippets - diff --git a/input/lsr/pitches.snippet-list b/input/lsr/pitches.snippet-list deleted file mode 100644 index d6f0217428..0000000000 --- a/input/lsr/pitches.snippet-list +++ /dev/null @@ -1,17 +0,0 @@ -adding-ambitus-per-voice.ly -ambitus-with-multiple-voices.ly -ambitus.ly -applying-note-head-styles-depending-on-the-step-of-the-scale.ly -coloring-notes-depending-on-their-pitch.ly -creating-a-sequence-of-notes-on-various-pitches.ly -dodecaphonic-style-accidentals-for-each-note-including-naturals.ly -generating-random-notes.ly -makam-example.ly -non-traditional-key-signatures.ly -ottava-text.ly -preventing-extra-naturals-from-being-automatically-added.ly -preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly -quoting-another-voice-with-transposition.ly -separating-key-cancellations-from-key-signature-changes.ly -transposing-pitches-with-minimum-accidentals-smart-transpose.ly -tweaking-clef-properties.ly diff --git a/input/lsr/placement-of-right-hand-fingerings.ly b/input/lsr/placement-of-right-hand-fingerings.ly deleted file mode 100644 index e7a6622c62..0000000000 --- a/input/lsr/placement-of-right-hand-fingerings.ly +++ /dev/null @@ -1,59 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "fretted-strings" - -%% Translation of GIT committish: acbcbe3683d629575967b972b64ca5e1589bf330 - texidoces = " -Es posible ejercer un mayor control sobre la colocación de las -digitaciones de la mano derecha estableciendo el valor de una -propiedad específica, como se muestra en el ejemplo siguiente. - -" - doctitlees = "Posicionamiento de digitaciones de mano derecha" - -%% Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 - - texidocfr = " -Vous disposez d'une propriété spécifique qui permet de contrôler plus -finement le positionnement des doigtés main droite, comme l'indique -l'exemple suivant. - -" - doctitlefr = "Positionnement des doigtés main droite" - -%% Translation of GIT committish: 33f623301a41fcc53efadf96bca1c72834763415 - texidocde = " -Man kann die Positionierung von Fingersatz der rechten Hand besser -kontrollieren, wenn eine bestimmte Eigenschaft gesetzt wird, wie -das folgende Beispiel zeigt: - -" - doctitlede = "Positionierung von Fingersatz der rechten Hand" - - texidoc = " -It is possible to exercise greater control over the placement of -right-hand fingerings by setting a specific property, as demonstrated -in the following example. - -" - doctitle = "Placement of right-hand fingerings" -} % begin verbatim - -#(define RH rightHandFinger) - -\relative c { - \clef "treble_8" - - \set strokeFingerOrientations = #'(up down) - 4 - - \set strokeFingerOrientations = #'(up right down) - 4 - - \set strokeFingerOrientations = #'(left) - 2 -} - diff --git a/input/lsr/polyphony-in-tablature.ly b/input/lsr/polyphony-in-tablature.ly deleted file mode 100644 index 06ecab5a22..0000000000 --- a/input/lsr/polyphony-in-tablature.ly +++ /dev/null @@ -1,69 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "fretted-strings" - -%% Translation of GIT committish: acbcbe3683d629575967b972b64ca5e1589bf330 - texidoces = " -La polifonía se crea de la misma forma en un @code{TabStaff} que -en una pauta normal. - -" - doctitlees = "Polifonía en tablaturas" - -%% Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 - - texidocfr = " -Une section polyphonique s'obtient dans un @code{TabStaff} de la -même manière que dans une portée normale. - -" - doctitlefr = "Polyphonie en mode tablature" - -%% Translation of GIT committish: 33f623301a41fcc53efadf96bca1c72834763415 - texidocde = " -Polyphonie kann in einer Tabulatur (@code{TabStaff}) genauso wie in einem -normalen Notensystem erstellt werden. - -" - doctitlede = "Polyphonie in einer Tabulatur" - - texidoc = " -Polyphony is created the same way in a @code{TabStaff} as in a regular -staff. - -" - doctitle = "Polyphony in tablature" -} % begin verbatim - -upper = \relative c' { - \time 12/8 - \key e \minor - \voiceOne - r4. r8 e, fis g16 b g e e' b c b a g fis e -} - -lower = \relative c { - \key e \minor - \voiceTwo - r16 e d c b a g4 fis8 e fis g a b c -} - -\score { - << - \new StaffGroup = "tab with traditional" << - \new Staff = "guitar traditional" << - \clef "treble_8" - \context Voice = "upper" \upper - \context Voice = "lower" \lower - >> - \new TabStaff = "guitar tab" << - \context TabVoice = "upper" \upper - \context TabVoice = "lower" \lower - >> - >> - >> -} - diff --git a/input/lsr/positioning-fingering-indications-precisely.ly b/input/lsr/positioning-fingering-indications-precisely.ly deleted file mode 100644 index b9d2d9d329..0000000000 --- a/input/lsr/positioning-fingering-indications-precisely.ly +++ /dev/null @@ -1,34 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "editorial-annotations" - - texidoc = " -Generally the options available for positioning the fingering of chords -work well by default, but if one of the indications needs to positioned -more precisely the following tweak may be used. This is particularly -useful for correcting the positioning when intervals of a second are -involved. - -" - doctitle = "Positioning fingering indications precisely" -} % begin verbatim - -\relative c' { - \set fingeringOrientations = #'(left) - 4 - 4 - \set fingeringOrientations = #'(down) - 4 - 4 - \set fingeringOrientations = #'(down right up) - 4 - 4 - \set fingeringOrientations = #'(up) - 4 - 4 -} - - diff --git a/input/lsr/positioning-grace-notes-with-floating-space.ly b/input/lsr/positioning-grace-notes-with-floating-space.ly deleted file mode 100644 index 51536e9f86..0000000000 --- a/input/lsr/positioning-grace-notes-with-floating-space.ly +++ /dev/null @@ -1,57 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms" - -%% Translation of GIT committish: 5a33019d8b4a837f564eadd4979501ff07e9dfd5 - texidoces = " - -Al establecer la propiedad @code{'strict-grace-spacing} hacemos -que las columnas musicales para las notas de adorno sean -'flotantes', es decir, desacopladas de las notas que no son de -adorno: primero se aplica el espaciado de las notas normales, y -luego se ponen las columnas musicales de las notas de adorno a la -izquierda de las columnas musicales de las notas principales. - -" - - doctitlees = "Posicionamiento de las notas de adorno con espacio flotante" - - -%% Translation of GIT committish: 13ac9d1dfbcc297166948ee396e9ade078d2446e - texidocde = " -Wenn man die Eigenschaft @code{'strict-grace-spacing} aktiviert, -werden die Verzierungsnoten \"fließend\" gemacht, d.h. sie sind -von den normalen Noten los gekoppelt: Zuerst werden die normalen -Noten platziert, dann erst die Verzierungen links von der -Hauptnote gesetzt. - -" - doctitlede = "Positionierung von Verzierungen mit verschiebbarem Platz" - - texidoc = " -Setting the property @code{'strict-grace-spacing} makes the musical -columns for grace notes 'floating', i.e., decoupled from the non-grace -notes: first the normal notes are spaced, then the (musical columns of -the) graces are put left of the musical columns for the main notes. - -" - doctitle = "Positioning grace notes with floating space" -} % begin verbatim - -\relative c'' { - << - \override Score.SpacingSpanner #'strict-grace-spacing = ##t - \new Staff \new Voice { - \afterGrace c4 { c16[ c8 c16] } - c8[ \grace { b16[ d] } c8] - c4 r - } - \new Staff { - c16 c c c c c c c c4 r - } - >> -} - diff --git a/input/lsr/positioning-multi-measure-rests.ly b/input/lsr/positioning-multi-measure-rests.ly deleted file mode 100644 index 0792d41889..0000000000 --- a/input/lsr/positioning-multi-measure-rests.ly +++ /dev/null @@ -1,81 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms, tweaks-and-overrides" - -%% Translation of GIT committish: a634a20e0ab2a874ff8bf423e5651139df8733fc - doctitlees = "Posicionar los silencios multicompás" - texidoces = " -A diferencia de los silencios normales, no existe una instrucción -predefinida para modificar la posición predefinida de un símbolo -multicompás sobre el pentagrama, adjuntándolo a una nota, -independientemente de cuál sea su forma. Sin embargo, en la música -polifónica los silencios multicompás de las voces de numeración par e -impar están separados verticalmente. La colocación de los silencios -multicompás se puede controlar como se ve a continuación: - -" -%% Translation of GIT committish: b4f6b5ad66d016c312cddc8d4026ad852f9a7c36 - -texidocde = " -Anders als bei normalen Pausen gibt es keinen direkten Befehl, um die -vertikale Position von Ganztaktpausen zu beeinflussen, indem man sie an -eine Tonhöhe anhängt. In polyphoner Notation wird aber dennoch die -Position der Pausen von geraden und ungeraden Stimmen voneinander -unterschieden. Die Position von Ganztaktpausen kann wie folgt verändert -werden: - " - doctitlede = "Positionierung von Ganztaktpausen" - - -%% Translation of GIT committish: e71f19ad847d3e94ac89750f34de8b6bb28611df - texidocfr = " -Si l'on peut positionner verticalement un silence simple en le -rattachant à une note, il n'en va pas de même pur un silence -multi-mesure. Néanmoins, et uniquement dans le cadre de musique -polyphonique, les silences multi-mesures sont positionnées différemment -selon qu'ils appartiennent à une voix au numéro pair ou impair. Le -positionnement des silences multi-mesures peut se contrôler ainsi : -" - doctitlefr = "Positionnement des silences multi-mesures" - - texidoc = " -Unlike ordinary rests, there is no predefined command to change the -staff position of a multi-measure rest symbol of either form by -attaching it to a note. However, in polyphonic music multi-measure -rests in odd-numbered and even-numbered voices are vertically -separated. The positioning of multi-measure rests can be controlled as -follows: - -" - doctitle = "Positioning multi-measure rests" -} % begin verbatim - -\relative c'' { - % Multi-measure rests by default are set under the second line - R1 - % They can be moved with an override - \override MultiMeasureRest #'staff-position = #-2 - R1 - % A value of 0 is the default position; - % the following trick moves the rest to the center line - \override MultiMeasureRest #'staff-position = #-0.01 - R1 - % Multi-measure rests in odd-numbered voices are under the top line - << { R1 } \\ { a1 } >> - % Multi-measure rests in even-numbered voices are under the bottom line - << { c1 } \\ { R1 } >> - % They remain separated even in empty measures - << { R1 } \\ { R1 } >> - % This brings them together even though there are two voices - \compressFullBarRests - << - \revert MultiMeasureRest #'staff-position - { R1*3 } - \\ - \revert MultiMeasureRest #'staff-position - { R1*3 } - >> -} diff --git a/input/lsr/positioning-segno-and-coda-with-line-break.ly b/input/lsr/positioning-segno-and-coda-with-line-break.ly deleted file mode 100644 index 93f81eaf40..0000000000 --- a/input/lsr/positioning-segno-and-coda-with-line-break.ly +++ /dev/null @@ -1,119 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "repeats, breaks" - - texidoc = " -If you want to place an exiting segno sign and add text like \"D.S. al -Coda\" next to it where usually the staff lines are you can use this -snippet. The coda will resume in a new line. There is a variation -documented in this snippet, where the coda will remain on the same -line. - -" - doctitle = "Positioning segno and coda (with line break)" -} % begin verbatim - -{ - \clef treble - \key g \major - \time 4/4 - \relative c'' { - \repeat unfold 2 { - | c4 c c c - } - - % Set segno sign as rehearsal mark and adjust size if needed - % \once \override Score.RehearsalMark #'font-size = #3 - \mark \markup { \musicglyph #"scripts.segno" } - \repeat unfold 2 { - | c4 c c c - } - - % Set coda sign as rehearsal mark and adjust size if needed - \once \override Score.RehearsalMark #'font-size = #4 - \mark \markup { \musicglyph #"scripts.coda" } - \repeat unfold 2 { - | c4 c c c - } - - % Should Coda be on anew line? - % Coda NOT on new line: use \nobreak - % Coda on new line: DON'T use \nobreak - % \noBreak - - \bar "||" - - % Set segno sign as rehearsal mark and adjust size if needed - \once \override Score.RehearsalMark #'break-visibility = #begin-of-line-invisible - % \once \override Score.RehearsalMark #'font-size = #3 - \mark \markup { \musicglyph #"scripts.segno" } - - % Here begins the trickery! - % \cadenzaOn will suppress the bar count and \stopStaff removes the staff lines. - \cadenzaOn - \stopStaff - % Some examples of possible text-displays - - % text line-aligned - % ================== - % Move text to the desired position - % \once \override TextScript #'extra-offset = #'( 2 . -3.5 ) - % | s1*0^\markup { D.S. al Coda } } - - % text center-aligned - % ==================== - % Move text to the desired position - % \once \override TextScript #'extra-offset = #'( 6 . -5.0 ) - % | s1*0^\markup { \center-column { D.S. "al Coda" } } - - % text and symbols center-aligned - % =============================== - % Move text to the desired position and tweak spacing for optimum text alignment - %\once \override TextScript #'extra-offset = #'( 8 . -5.5 ) - \once \override TextScript #'word-space = #1.5 - \once \override TextScript #'X-offset = #8 - \once \override TextScript #'Y-offset = #1.5 - | s1*0^\markup { \center-column { "D.S. al Coda" \line { \musicglyph #"scripts.coda" \musicglyph #"scripts.tenuto" \musicglyph #"scripts.coda"} } } - - % Increasing the unfold counter will expand the staff-free space - \repeat unfold 4 { - s4 s4 s4 s4 - \bar "" - } - % Resume bar count and show staff lines again - \startStaff - \cadenzaOff - - % Should Coda be on new line? - % Coda NOT on new line: DON'T use \break - % Coda on new line: use \break - \break - - % Show up, you clef and key! - \once \override Staff.KeySignature #'break-visibility = #end-of-line-invisible - \once \override Staff.Clef #'break-visibility = #end-of-line-invisible - - % Set coda sign as rehearsal mark and adjust size and position - - % Put the coda sign ontop of the (treble-)clef dependend on coda's line-position - - % Coda NOT on new line, use this: - % \once \override Score.RehearsalMark #'extra-offset = #'( -2 . 1.75 ) - - % Coda on new line, use this: - \once \override Score.RehearsalMark #'extra-offset = #'( -8.42 . 1.75 ) - - \once \override Score.RehearsalMark #'font-size = #5 - \mark \markup { \musicglyph #"scripts.coda" } - - % The coda - \repeat unfold 5 { - | c4 c c c - } - \bar"|." - } -} - diff --git a/input/lsr/positioning-text-markups-inside-slurs.ly b/input/lsr/positioning-text-markups-inside-slurs.ly deleted file mode 100644 index a468703635..0000000000 --- a/input/lsr/positioning-text-markups-inside-slurs.ly +++ /dev/null @@ -1,40 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks, editorial-annotations, tweaks-and-overrides" - -%% Translation of GIT committish: b10de35f895919aec109de6fb1fc84d42ad851b3 - texidoces = " - -Los elementos de marcado de texto deben tener la propiedad -@code{outside-staff-priority} establecida al valor falso para que se -impriman por dentro de las ligaduras de expresión. - -" - doctitlees = "Situar los elementos de marcado de texto por dentro de las ligaduras" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Textbeschriftung kann innerhalb von Bögen gesetzt werden, wenn die -@code{outside-staff-priority}-Eigenschaft auf falsch gesetzt wird. - -" - doctitlede = "Textbeschriftung innerhalb von Bögen positionieren" - - texidoc = " -Text markups need to have the @code{outside-staff-priority} property -set to false in order to be printed inside slurs. - -" - doctitle = "Positioning text markups inside slurs" -} % begin verbatim - -\relative c'' { - \override TextScript #'avoid-slur = #'inside - \override TextScript #'outside-staff-priority = ##f - c2(^\markup { \halign #-10 \natural } d4.) c8 -} - - diff --git a/input/lsr/preventing-extra-naturals-from-being-automatically-added.ly b/input/lsr/preventing-extra-naturals-from-being-automatically-added.ly deleted file mode 100644 index fcb5a19e86..0000000000 --- a/input/lsr/preventing-extra-naturals-from-being-automatically-added.ly +++ /dev/null @@ -1,57 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "pitches" - -%% Translation of GIT committish: 203ab4a7388f36b9c89c66671498dbaefccbf86e - texidocfr = " -En accord avec les règles standards de l'écriture musicale, on grave -un bécarre avant un dièse ou un bémol si on a besoin d'annuler une -altération précédente. Pour modifier ce comportement, assignez la propriété -@code{extraNatural} du contexte @code{Staff} à la valeur @code{##f} (faux). -" - -%% Translation of GIT committish: 4866dfd58d5c3a8cab4c6c06d5c4fca8e05a3cd7 -doctitlees = "Evitar que se añadan becuadros adicionales automáticamente" - -texidoces = " -Según las reglas estándar de composición -tipográfica, se imprime un becuadro antes de un sostenido o un -bemol cuando se tiene que cancelar una alteración anterior en la -misma nota. Para modificar este comportamiento, establezca el -valor de la propiedad @code{extraNatural} a @code{##f} (falso) -dentro del contexto de @code{Staff}. - -" - -%% Translation of GIT committish: e75f1604a1b866c853dee42dbffcb7800c706a5f - doctitlede = "Verhindern, dass zusätzliche Auflösungszeichen automatisch -hinzugefügt werden" - -texidocde = "Den tranditionellen Notensatzregeln zufolge wird ein -Auflösungszeichen immer dann vor einem Kreuz oder B gesetzt, wenn -ein vorheriges Versetzungszeichen der gleichen Note aufgehoben werden -soll. Um dieses Verhalten zu ändern, muss die Eigenschaft -@code{extraNatural} im @code{Staff}-Kontext auf \"false\" gesetzt werden. -" - - texidoc = " -In accordance with standard typesetting rules, a natural sign is -printed before a sharp or flat if a previous accidental on the same -note needs to be canceled. To change this behavior, set the -@code{extraNatural} property to \"false\" in the @code{Staff} context. - - - -" - doctitle = "Preventing extra naturals from being automatically added" -} % begin verbatim - -\relative c'' { - aeses4 aes ais a - \set Staff.extraNatural = ##f - aeses4 aes ais a -} - diff --git a/input/lsr/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly b/input/lsr/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly deleted file mode 100644 index 4f047f63f9..0000000000 --- a/input/lsr/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly +++ /dev/null @@ -1,49 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "pitches" - -%% Translation of GIT committish: 674a5f874c07063ae56d55be25c55fc3b4bdb7bf -doctitlees = "Evitar que se impriman becuadros cuando cambia la armadura" -texidoces = " -Cuando cambia la armadura de la tonalidad, se imprimen becuadros -automáticamente para cancelar las alteraciones de las armaduras -anteriores. Esto se puede evitar estableciendo al valor \"falso\" la -propiedad @code{printKeyCancellation} del contexto @code{Staff}. - -" - -%% Translation of GIT committish: e75f1604a1b866c853dee42dbffcb7800c706a5f -doctitlede = "Auflösungzeichen nicht setzen, wenn die Tonart wechselt" - -texidocde = " -Wenn die Tonart wechselt, werden automatisch Auflösungszeichen ausgegeben, -um Versetzungszeichen der vorherigen Tonart aufzulösen. Das kann -verhindert werden, indem die @code{printKeyCancellation}-Eigenschaft -im @code{Staff}-Kontext auf \"false\" gesetzt wird. -" - - texidoc = " -When the key signature changes, natural signs are automatically printed -to cancel any accidentals from previous key signatures. This may be -prevented by setting to \"false\" the @code{printKeyCancellation} -property in the @code{Staff} context. - -" - doctitle = "Preventing natural signs from being printed when the key signature changes" -} % begin verbatim - -\relative c' { - \key d \major - a4 b cis d - \key g \minor - a4 bes c d - \set Staff.printKeyCancellation = ##f - \key d \major - a4 b cis d - \key g \minor - a4 bes c d -} - diff --git a/input/lsr/printing-a-repeat-sign-at-the-beginning-of-a-piece.ly b/input/lsr/printing-a-repeat-sign-at-the-beginning-of-a-piece.ly deleted file mode 100644 index 8e472b86f3..0000000000 --- a/input/lsr/printing-a-repeat-sign-at-the-beginning-of-a-piece.ly +++ /dev/null @@ -1,50 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "repeats, tweaks-and-overrides" - -%% Translation of GIT committish: da84f4caeafed6832152295e67ae852a9930f568 - texidoces = " -Se puede imprimir una línea divisoria de la forma @code{|:} al -principio de la pieza, sobreescribiendo la propiedad correspondiente: - -" - doctitlees = "Imprimir puntos de repetición al prinicpio de la pieza" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Ein @code{|:}-Taktstrich kann auch zu Beginn eines Stückes ausgegeben werden, indem -man die entsprechende Eigenschaft verändert: - -" - doctitlede = "Ein Wiederholungszeichen zu Beginn eines Stückes ausgeben" - - texidoc = " -A @code{|:} bar line can be printed at the beginning of a piece, by -overriding the relevant property: - -" - doctitle = "Printing a repeat sign at the beginning of a piece" -} % begin verbatim - -\relative c'' { - \once \override Score.BreakAlignment #'break-align-orders = - #(make-vector 3 '(instrument-name - left-edge - ambitus - span-bar - breathing-sign - clef - key-signature - time-signature - staff-bar - custos - span-bar)) - \bar "|:" - c1 - d1 - d4 e f g -} - diff --git a/input/lsr/printing-bar-numbers-at-regular-intervals.ly b/input/lsr/printing-bar-numbers-at-regular-intervals.ly deleted file mode 100644 index 972652b0c1..0000000000 --- a/input/lsr/printing-bar-numbers-at-regular-intervals.ly +++ /dev/null @@ -1,51 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms" - -%% Translation of GIT committish: 5a33019d8b4a837f564eadd4979501ff07e9dfd5 - texidoces = " - -Se pueden imprimir los números de compás a intervalos regulares -mediante el establecimiento de la propiedad -@code{barNumberVisibility}. Aquí los números de compás se -imprimen a cada dos compases excepto al final de la línea. - -" - - doctitlees = "Imprimir números de compás a intervalos regulares" - - -%% Translation of GIT committish: 13ac9d1dfbcc297166948ee396e9ade078d2446e - texidocde = " -Taktnummern können in regelmäßigen Intervallen gesetzt werden, indem -man die Eigenschaft @code{barNumberVisibility} definiert. In diesem -Beispiel werden die Taktnummern jeden zweiten Takt gesetzt, außer -am Ende einer Zeile. - -" - doctitlede = "Setzen der Taktnummern in regelmäßigen Intevallen" - - texidoc = " -Bar numbers can be printed at regular intervals by setting the property -@code{barNumberVisibility}. Here the bar numbers are printed every two -measures except at the end of the line. - -" - doctitle = "Printing bar numbers at regular intervals" -} % begin verbatim - -\relative c' { - \override Score.BarNumber #'break-visibility = #'#(#f #t #t) - \set Score.currentBarNumber = #11 - % Permit first bar number to be printed - \bar "" - % Print a bar number every second measure - \set Score.barNumberVisibility = #(every-nth-bar-number-visible 2) - c1 | c | c | c | c - \break - c1 | c | c | c | c -} - diff --git a/input/lsr/printing-bar-numbers-inside-boxes-or-circles.ly b/input/lsr/printing-bar-numbers-inside-boxes-or-circles.ly deleted file mode 100644 index 0faf6a16f5..0000000000 --- a/input/lsr/printing-bar-numbers-inside-boxes-or-circles.ly +++ /dev/null @@ -1,49 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms, tweaks-and-overrides" - -%% Translation of GIT committish: 5a33019d8b4a837f564eadd4979501ff07e9dfd5 - texidoces = " - -Los números de compás también se pueden imprimir dentro de rectángulos o de circunferencias. - -" - doctitlees = "Imprimir números de compás dentro de rectángulos o circunferencias" - - -%% Translation of GIT committish: 13ac9d1dfbcc297166948ee396e9ade078d2446e - texidocde = " -Taktnummern können auch in Boxen oder Kreisen gesetzt werden. - -" - doctitlede = "Setzen von Taktnummern in Boxen oder Kreisen" - - texidoc = " -Bar numbers can also be printed inside boxes or circles. - -" - doctitle = "Printing bar numbers inside boxes or circles" -} % begin verbatim - -\relative c' { - % Prevent bar numbers at the end of a line and permit them elsewhere - \override Score.BarNumber #'break-visibility = #end-of-line-invisible - \set Score.barNumberVisibility = #(every-nth-bar-number-visible 4) - - % Increase the size of the bar number by 2 - \override Score.BarNumber #'font-size = #2 - - % Draw a box round the following bar number(s) - \override Score.BarNumber #'stencil - = #(make-stencil-boxer 0.1 0.25 ly:text-interface::print) - \repeat unfold 5 { c1 } - - % Draw a circle round the following bar number(s) - \override Score.BarNumber #'stencil - = #(make-stencil-circler 0.1 0.25 ly:text-interface::print) - \repeat unfold 4 { c1 } \bar "|." -} - diff --git a/input/lsr/printing-hairpins-using-al-niente-notation.ly b/input/lsr/printing-hairpins-using-al-niente-notation.ly deleted file mode 100644 index e5699ef82c..0000000000 --- a/input/lsr/printing-hairpins-using-al-niente-notation.ly +++ /dev/null @@ -1,41 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks" - -%% Translation of GIT committish: dff50e8e1d3134657a6b6203b9c93826dc4cef65 - texidoces = " -Se pueden imprimir reguladores con un círculo en la punta -(notación «al niente») estableciendo la propiedad -@code{circled-tip} del objeto @code{Hairpin} al valor @code{#t}. - -" - doctitlees = "Impresión de reguladores utilizando la notación «al niente»" - -%% Translation of GIT committish: 6ce7f350682dfa99af97929be1dec6b9f1cbc01a - texidocde = " - Crescendo-Klammern können mit einem kleinen Kreis vor der Spitze - notiert werden (al niente = bis zum Nichts), indem die -@code{circled-tip}-Eigenschaft des @code{Hairpin}-Objekts auf -@code{#t} gesetzt wird. - -" - doctitlede = "Crescendo Klammern al niente schreiben" - - texidoc = " -Hairpins may be printed with a circled tip (al niente notation) by -setting the @code{circled-tip} property of the @code{Hairpin} object to -@code{#t}. - -" - doctitle = "Printing hairpins using al niente notation" -} % begin verbatim - -\relative c'' { - \override Hairpin #'circled-tip = ##t - c2\< c\! - c4\> c\< c2\! -} - diff --git a/input/lsr/printing-marks-at-the-end-of-a-line-or-a-score.ly b/input/lsr/printing-marks-at-the-end-of-a-line-or-a-score.ly deleted file mode 100644 index 4c624469aa..0000000000 --- a/input/lsr/printing-marks-at-the-end-of-a-line-or-a-score.ly +++ /dev/null @@ -1,59 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "text" - -%% Translation of GIT committish: e968d89055d045a29276db76970570f30ccc917e - texidoces = " -Las marcas se pueden imprimir al final de la línea actual, en vez de -al comienzo de la línea siguiente. Esto es útil principalmente cuando -se tiene que añadir una marca al final de la partitura (donde no hay -línea siguiente). - -En tales casos, el extremo derecho de la marca se tiene que alinear -con la última línea divisoria, como muestra la segunda línea de este -ejemplo. - -" - doctitlees = "Imprimir marcas al final de la línea o de la partitura" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Zeichen können auch am Ende der aktuellen Zeile ausgegeben werden, anstatt -dass sie auf die folgende Zeile verschoben werden. Das ist nüztlich, -wenn ein Zeichen am Ende einer Partitur eingefügt werden soll, wo -gar keine nächste Zeile vorhanden ist. - -In derartigen Fällen muss die rechte Ecke des Zeichens an dem letzten -Taktstrich ausgerichtet werden, wie die zweite Zeile des Beispiels zeigt. - -" - doctitlede = "Zeichen am Ende einer Zeile oder Partitur setzen" - - texidoc = " -Marks can be printed at the end of the current line, instead of the -beginning of the following line. This is particularly useful when a -mark has to be added at the end of a score -- when there is no next -line. - -In such cases, the right end of the mark has to be aligned with the -final bar line, as demonstrated on the second line of this example. - -" - doctitle = "Printing marks at the end of a line or a score" -} % begin verbatim - -\relative c'' { - \override Score.RehearsalMark #'break-visibility = #begin-of-line-invisible - g2 c - d,2 a' - \mark \default - \break - g2 b, - c1 \bar "||" - \override Score.RehearsalMark #'self-alignment-X = #RIGHT - \mark "D.C. al Fine" -} - diff --git a/input/lsr/printing-marks-on-every-staff.ly b/input/lsr/printing-marks-on-every-staff.ly deleted file mode 100644 index 4f90cdd9f7..0000000000 --- a/input/lsr/printing-marks-on-every-staff.ly +++ /dev/null @@ -1,51 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "text" - -%% Translation of GIT committish: e968d89055d045a29276db76970570f30ccc917e - texidoces = " -Aunque normalmente las marcas de texto sólo se imprimen sobre el -pentagrama superior, también se pueden imprimir en otro pentagrama -cualquiera. - -" - doctitlees = "Imprimir marcas en cualquier pentagrama" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Normalerweise werden Textzeichen nur über dem obersten Notensystem gesetzt. Sie -können aber auch über jedem System ausgegeben werden. - -" - doctitlede = "Zeichen über jedem System ausgeben" - - texidoc = " -Although text marks are normally only printed above the topmost staff, -they may also be printed on every staff. - -" - doctitle = "Printing marks on every staff" -} % begin verbatim - -\score { - << - \new Staff { c''1 \mark "molto" c'' } - \new Staff { c'1 \mark "molto" c' } - >> - \layout { - \context { - \Score - \remove "Mark_engraver" - \remove "Staff_collecting_engraver" - } - \context { - \Staff - \consists "Mark_engraver" - \consists "Staff_collecting_engraver" - } - } -} - diff --git a/input/lsr/printing-metronome-and-rehearsal-marks-below-the-staff.ly b/input/lsr/printing-metronome-and-rehearsal-marks-below-the-staff.ly deleted file mode 100644 index f8fccee298..0000000000 --- a/input/lsr/printing-metronome-and-rehearsal-marks-below-the-staff.ly +++ /dev/null @@ -1,52 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms, expressive-marks, staff-notation, tweaks-and-overrides" - -%% Translation of GIT committish: dff50e8e1d3134657a6b6203b9c93826dc4cef65 - texidoces = " -De forma predeterminada, las indicaciones metronómicas y las -letras de ensayo se imprimen encima del pentagrama. Para -colocarlas debajo del pentagrama, simplemente ajustamos -adecuadamente las propiedades @code{side-axis} y @code{direction} -de @code{MetronomeMark} o de @code{RehearsalMark}. - -" - - doctitlees = "Impresión de indicaciones metronómicas y letras de ensayo debajo del pentagrama" - - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Normalerweise werden Metronom- und Übungszeichen über dem Notensystem ausgegeben. -Um sie unter das System zu setzen, muss die @code{direction}-Eigenschaft -von @code{MetronomeMark} oder @code{RehearsalMark} entsprechend verändert werden. - -" - doctitlede = "Metronom- und Übungszeichen unter das System setzen" - - texidoc = " -By default, metronome and rehearsal marks are printed above the staff. -To place them below the staff simply set the @code{direction} property -of @code{MetronomeMark} or @code{RehearsalMark} appropriately. - -" - doctitle = "Printing metronome and rehearsal marks below the staff" -} % begin verbatim - -\layout { ragged-right = ##f } - -{ - % Metronome marks below the staff - \override Score.MetronomeMark #'direction = #DOWN - \tempo 8. = 120 - c''1 - - % Rehearsal marks below the staff - \override Score.RehearsalMark #'direction = #DOWN - \mark \default - c''1 -} - diff --git a/input/lsr/printing-music-with-different-time-signatures.ly b/input/lsr/printing-music-with-different-time-signatures.ly deleted file mode 100644 index b0a4455d91..0000000000 --- a/input/lsr/printing-music-with-different-time-signatures.ly +++ /dev/null @@ -1,145 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms, percussion" - - texidoc = " -In the following snippet, two parts have a completely different time -signature, yet remain synchronized. The bar lines can no longer be -printed at the @code{Score} level; to allow independent bar lines in -each part, the @code{Default_barline_engraver} and -@code{Timing_translator} are moved from the @code{Score} context to the -@code{Staff} context. - -" - doctitle = "Printing music with different time signatures" -} % begin verbatim - -\paper { - indent = #0 - ragged-right = ##t -} - -global = { \time 3/4 { s2.*3 } \bar "" \break { s2.*3 } } - -\layout { - \context { - \Score - \remove "Timing_translator" - \remove "Time_signature_engraver" - \remove "Default_bar_line_engraver" - \override SpacingSpanner #'uniform-stretching = ##t - \override SpacingSpanner #'strict-note-spacing = ##t - proportionalNotationDuration = #(ly:make-moment 1 64) - } - \context { - \Staff - \consists "Timing_translator" - \consists "Default_bar_line_engraver" - \consists "Time_signature_engraver" - } - \context { - \Voice - \remove "Forbid_line_break_engraver" - tupletFullLength = ##t - } -} - -Bassklarinette = \new Staff << - \global { - \bar "|" - \clef treble - \time 3/8 - d''4. - - \bar "|" - \time 3/4 - r8 des''2( c''8) - - \bar "|" - \time 7/8 - r4. ees''2 ~ - - \bar "|" - \time 2/4 - \tupletUp - \times 2/3 { ees''4 r4 d''4 ~ } - - \bar "|" - \time 3/8 - \tupletUp - \times 3/4 { d''4 r4 } - - \bar "|" - \time 2/4 - e''2 - - \bar "|" - \time 3/8 - es''4. - - \bar "|" - \time 3/4 - r8 d''2 r8 - \bar "|" - } ->> - -Perkussion = \new StaffGroup << - \new Staff << - \global { - \bar "|" - \clef percussion - \time 3/4 - r4 c'2 ~ - - \bar "|" - c'2. - - \bar "|" - R2. - - \bar "|" - r2 g'4 ~ - - \bar "|" - g'2. ~ - - \bar "|" - g'2. - } - >> - \new Staff << - \global { - \bar "|" - \clef percussion - \time 3/4 - R2. - - \bar "|" - g'2. ~ - - \bar "|" - g'2. - - \bar "|" - r4 g'2 ~ - - \bar "|" - g'2 r4 - - \bar "|" - g'2. - } - >> ->> - -\score { - << - \Bassklarinette - \Perkussion - >> -} - diff --git a/input/lsr/printing-text-from-right-to-left.ly b/input/lsr/printing-text-from-right-to-left.ly deleted file mode 100644 index 29fe10d10b..0000000000 --- a/input/lsr/printing-text-from-right-to-left.ly +++ /dev/null @@ -1,25 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "editorial-annotations, text, world-music" - - texidoc = " -It is possible to print text from right to left in a markup object, as -demonstrated here. - -" - doctitle = "Printing text from right to left" -} % begin verbatim - -{ - b1^\markup { - \line { i n g i r u m i m u s n o c t e } - } - f'_\markup { - \override #'(text-direction . -1) - \line { i n g i r u m i m u s n o c t e } - } -} - diff --git a/input/lsr/printing-the-bar-number-for-the-first-measure.ly b/input/lsr/printing-the-bar-number-for-the-first-measure.ly deleted file mode 100644 index 09228ce935..0000000000 --- a/input/lsr/printing-the-bar-number-for-the-first-measure.ly +++ /dev/null @@ -1,51 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms" - -%% Translation of GIT committish: 5a33019d8b4a837f564eadd4979501ff07e9dfd5 - texidoces = " - -De forma predeterminada se suprime el número del primer compás de -una partitura si es menor o igual a `1'. Al establecer el valor -de @code{barNumberVisibility} a @code{all-bar-numbers-visible}, se -puede imprimir cualquier número de compás para el primer compás y -todos los siguientes. Observe que, para que esto funcione, se -debe insertar una líinea divisoria vacía antes de la primera nota. - -" - - doctitlees = "Imprimir el número de compás en el primer compás" - - -%% Translation of GIT committish: 13ac9d1dfbcc297166948ee396e9ade078d2446e - texidocde = " -Standardmäßig wird die erste Taktzahl einer Paritur nicht gesetzt, -wenn sie weniger oder gleich '1' ist. Indem man @code{barNumberVisibility} -auf @code{all-bar-numbers-visible} setzt, kann eine beliebige -Taktzahl für den ersten und die folgenden Takte gesetzt werden. -Eine leere Taktlinie muss jedoch vor der ersten Note eingefügt -werden, damit das funktioniert. - -" - doctitlede = "Setzen der Taktnummer für den ersten Takt" - - texidoc = " -By default, the first bar number in a score is suppressed if it is less -than or equal to `1'. By setting @code{barNumberVisibility} to -@code{all-bar-numbers-visible}, any bar number can be printed for the -first measure and all subsequent measures. Note that an empty bar line -must be inserted before the first note for this to work. - -" - doctitle = "Printing the bar number for the first measure" -} % begin verbatim - -\relative c' { - \set Score.barNumberVisibility = #all-bar-numbers-visible - \bar "" - c1 d e f \break - g1 e d c -} diff --git a/input/lsr/proportional-strict-notespacing.ly b/input/lsr/proportional-strict-notespacing.ly deleted file mode 100644 index 16de3f17f3..0000000000 --- a/input/lsr/proportional-strict-notespacing.ly +++ /dev/null @@ -1,33 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "tweaks-and-overrides, spacing" - - texidoc = " -If @code{strict-note-spacing} is set spacing of notes is not influenced -by bars or clefs within a system. Rather, they are placed just before -the note that occurs at the same time. This may cause collisions. - -" - doctitle = "Proportional strict notespacing" -} % begin verbatim - -\paper { - ragged-right = ##t -} - -\relative c'' << - \override Score.SpacingSpanner #'strict-note-spacing = ##t - \set Score.proportionalNotationDuration = #(ly:make-moment 1 16) - \new Staff { - c8[ c \clef alto c c \grace { d16 } c8 c] c4 - c2 \grace { c16[ c16] } c2 - } - \new Staff { - c2 \times 2/3 { c8 \clef bass cis,, c } c4 - c1 - } ->> - diff --git a/input/lsr/quoting-another-voice-with-transposition.ly b/input/lsr/quoting-another-voice-with-transposition.ly deleted file mode 100644 index a0632cb113..0000000000 --- a/input/lsr/quoting-another-voice-with-transposition.ly +++ /dev/null @@ -1,69 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "pitches, staff-notation" - -%% Translation of GIT committish: 48f804da6794a7bc8e7fdd4b1649f485b0b09d26 - texidoces = " -Los pasajes citados tienen en cuenta la transposición de la fuente -tanto como la del destino. En este ejemplo, todos los -instrumentos interpreta una nota con el sonido del Do central; el -destino de un instrumento transpositor en Fa. La parte de destino -se puede transponer utilizando @code{\\transpose}. En este caso -se transportan todas las notas (incluidas las citadas). - -" - -doctitlees = "Citar otra voz con transposición" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Zitate berücksichtigen sowohl die Transposition der Quelle als auch -des Zielinstruments. In diesem Beispiel spielen alle Instrumente -klingendes C, das Zielinstrument ist in F. Die Noten für das -Zielinstrument können mit @code{\\transpose} transponiert werden, -in diesem Fall werden alle Noten (auch die zitierten) transponiert. - -" - doctitlede = "Eine Stimme mit Transposition zitieren" - - texidoc = " -Quotations take into account the transposition of both source and -target. In this example, all instruments play sounding middle C; the -target is an instrument in F. The target part may be transposed using -@code{\\transpose}. In this case, all the pitches (including the -quoted ones) are transposed. - -" - doctitle = "Quoting another voice with transposition" -} % begin verbatim - -\addQuote clarinet { - \transposition bes - \repeat unfold 8 { d'16 d' d'8 } -} - -\addQuote sax { - \transposition es' - \repeat unfold 16 { a8 } -} - -quoteTest = { - % french horn - \transposition f - g'4 - << \quoteDuring #"clarinet" { \skip 4 } s4^"clar." >> - << \quoteDuring #"sax" { \skip 4 } s4^"sax." >> - g'4 -} - -{ - \set Staff.instrumentName = - \markup { - \center-column { Horn \line { in F } } - } - \quoteTest - \transpose c' d' << \quoteTest s4_"up a tone" >> -} diff --git a/input/lsr/quoting-another-voice.ly b/input/lsr/quoting-another-voice.ly deleted file mode 100644 index 94af02f166..0000000000 --- a/input/lsr/quoting-another-voice.ly +++ /dev/null @@ -1,79 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "staff-notation" - -%% Translation of GIT committish: dcd61338c753205b6f8d549389fcb0d999c3a675 - texidoces = " -La propiedad @code{quotedEventTypes} determina los tipos de -eventos musicales que resultan citados. El valor predeterminado -es @code{(note-event rest-event)}, que significa que sólo aparecen -en la expresión @code{\\quoteDuring} las notas y los silencios. -En el ejemplo siguiente, el silencio de semicorchea no aparece en -el fragmento citado porque @code{rest-event} no está dentro de los -@code{quotedEventTypes}. - -" - doctitlees = "Citar otra voz" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Die @code{quotedEventTypes}-Eigenschaft bestimmt die -Typen an Musikereignissen, die zitiert werden. Die -Standardeinstellung ist @code{(note-event rest-event)}, womit -nur Noten und Pausen der zitierten Stimme für den -@code{\\quoteDuring}-Ausdruck übernommen werden. Im -Beispiel hier wird die 16-Pause nicht übernommen, weil -sich @code{rest-event} nicht in @code{quotedEventTypes} befindet. - -" - - doctitlede = "Eine andere Stimme zitieren" - - texidoc = " -The @code{quotedEventTypes} property determines the music event types -that are quoted. The default value is @code{(note-event rest-event)}, -which means that only notes and rests of the quoted voice appear in the -@code{\\quoteDuring} expression. In the following example, a 16th rest -is not quoted since @code{rest-event} is not in -@code{quotedEventTypes}. - -" - doctitle = "Quoting another voice" -} % begin verbatim - -quoteMe = \relative c' { - fis4 r16 a8.-> b4\ff c -} -\addQuote quoteMe \quoteMe - -original = \relative c'' { - c8 d s2 - \once \override NoteColumn #'ignore-collision = ##t - es8 gis8 -} - -<< - \new Staff { - \set Staff.instrumentName = #"quoteMe" - \quoteMe - } - \new Staff { - \set Staff.instrumentName = #"orig" - \original - } - \new Staff \relative c'' << - \set Staff.instrumentName = #"orig+quote" - \set Staff.quotedEventTypes = - #'(note-event articulation-event) - \original - \new Voice { - s4 - \set fontSize = #-4 - \override Stem #'length-fraction = #(magstep -4) - \quoteDuring #"quoteMe" { \skip 2. } - } - >> ->> diff --git a/input/lsr/redefining-grace-note-global-defaults.ly b/input/lsr/redefining-grace-note-global-defaults.ly deleted file mode 100644 index 4c61efb175..0000000000 --- a/input/lsr/redefining-grace-note-global-defaults.ly +++ /dev/null @@ -1,64 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms" - -%% Translation of GIT committish: 5a33019d8b4a837f564eadd4979501ff07e9dfd5 - texidoces = " - -Los valores predeterminados para las notas de adorno están -almacenados en los identificadores @code{startGraceMusic}, -@code{stopGraceMusic}, @code{startAcciaccaturaMusic}, -@code{stopAcciaccaturaMusic}, @code{startAppoggiaturaMusic} y -@code{stopAppoggiaturaMusic}, que están definidos en el archivo -@code{ly/grace-init.ly}. Redefiniéndolos se pueden obtener otros -efectos. - -" - - doctitlees = "Redefinición de los valores globales predeterminados para notas de adorno" - - -%% Translation of GIT committish: 13ac9d1dfbcc297166948ee396e9ade078d2446e - texidocde = " -Die globalen Standardeinstellungen für Verzierungsnoten werden in -den Variablen@code{startGraceMusic}, @code{stopGraceMusic}, -@code{startAcciaccaturaMusic}, @code{stopAcciaccaturaMusic}, -@code{startAppoggiaturaMusic} und @code{stopAppoggiaturaMusic} -gespeichert, die in der Datei @code{ly/grace-init.ly} definiert -sind. Wenn man sie umdefiniert, können andere Effekte erreicht -werden. - -" - doctitlede = "Globale Umdefinition von Verzierungsnoten" - - texidoc = " -The global defaults for grace notes are stored in the identifiers -@code{startGraceMusic}, @code{stopGraceMusic}, -@code{startAcciaccaturaMusic}, @code{stopAcciaccaturaMusic}, -@code{startAppoggiaturaMusic} and @code{stopAppoggiaturaMusic}, which -are defined in the file @code{ly/grace-init.ly}. By redefining them -other effects may be obtained. - -" - doctitle = "Redefining grace note global defaults" -} % begin verbatim - -startAcciaccaturaMusic = { - s1*0( - \override Stem #'stroke-style = #"grace" - \slurDashed -} - -stopAcciaccaturaMusic = { - \revert Stem #'stroke-style - \slurSolid - s1*0) -} - -\relative c'' { - \acciaccatura d8 c1 -} - diff --git a/input/lsr/removing-bar-numbers-from-a-score.ly b/input/lsr/removing-bar-numbers-from-a-score.ly deleted file mode 100644 index 8b7816941e..0000000000 --- a/input/lsr/removing-bar-numbers-from-a-score.ly +++ /dev/null @@ -1,50 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms, contexts-and-engravers" - -%% Translation of GIT committish: 5a33019d8b4a837f564eadd4979501ff07e9dfd5 - texidoces = " - -Se pueden eliminar completamente los números de compás quitando el -grabador @code{Bar_number_engraver} del contexto de @code{Score}. - -" - - doctitlees = "Suprimir los números de compás de toda la partitura" - - -%% Translation of GIT committish: 13ac9d1dfbcc297166948ee396e9ade078d2446e - texidocde = " -Taktnummern können vollkommen aus den Noten entfernt werden, indem -man den @code{Bar_number_engraver} aus dem @code{Score}-Kontext -entfernt. - -" - doctitlede = "Entfernung von Taktnummern in einer Partitur" - - - - - texidoc = " -Bar numbers can be removed entirely by removing the -@code{Bar_number_engraver} from the @code{Score} context. - -" - doctitle = "Removing bar numbers from a score" -} % begin verbatim - -\layout { - \context { - \Score - \remove "Bar_number_engraver" - } -} - -\relative c'' { - c4 c c c \break - c4 c c c -} - diff --git a/input/lsr/removing-the-first-empty-line.ly b/input/lsr/removing-the-first-empty-line.ly deleted file mode 100644 index 7dae894a5a..0000000000 --- a/input/lsr/removing-the-first-empty-line.ly +++ /dev/null @@ -1,87 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "staff-notation, tweaks-and-overrides, breaks" - -%% Translation of GIT committish: dcd61338c753205b6f8d549389fcb0d999c3a675 - texidoces = " -El primer pentagrama vacío también se puede suprimir de la -partitura estableciendo la propiedad @code{remove-first} de -@code{VerticalAxisGroup}. Esto se puede hacer globalmente dentro -del bloque @code{\\layout}, o localmente dentro del pentagrama -concreto que se quiere suprimir. En este último caso, tenemos que -especificar el contexto (@code{Staff} se aplica sólo al pentagrama -actual) delante de la propiedad. - -El pentagrama inferior del segundo grupo no se elimina, porque el -ajuste sólo se aplica al pentagrama concreto dentro del que se -escribe. - -" - doctitlees = "Quitar la primera línea vacía" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Ein leeres Notensystem kann auch aus der ersten Zeile einer Partitur -entfernt werden, indem die Eigenschaft @code{remove-first} der -@code{VerticalAxisGroup}-Eigenschaft eingesetzt wird. Das kann -man global in einer @code{\\layout}-Umgebung oder lokal in dem -bestimmten Notensystem machen, das entfernt werden soll. In letzterem -Fall muss man den Kontext angeben. - -Das untere Notensystem der zweiten Systemgruppe wird nicht entfernt, -weil in die Einstellungen in dem Schnipsel nur für das eine Notensystem -gültig sind. - -" - doctitlede = "Die erste leere Notenzeile auch entfernen" - - texidoc = " -The first empty staff can also be removed from the score by setting the -@code{VerticalAxisGroup} property @code{remove-first}. This can be done -globally inside the @code{\\layout} block, or locally inside the -specific staff that should be removed. In the latter case, you have to -specify the context (@code{Staff} applies only to the current staff) in -front of the property. - -The lower staff of the second staff group is not removed, because the -setting applies only to the specific staff inside of which it is -written. - -" - doctitle = "Removing the first empty line" -} % begin verbatim - -\layout { - \context { - \RemoveEmptyStaffContext - % To use the setting globally, uncomment the following line: - % \override VerticalAxisGroup #'remove-first = ##t - } -} -\new StaffGroup << - \new Staff \relative c' { - e4 f g a \break - c1 - } - \new Staff { - % To use the setting globally, comment this line, - % uncomment the line in the \layout block above - \override Staff.VerticalAxisGroup #'remove-first = ##t - R1 \break - R - } ->> -\new StaffGroup << - \new Staff \relative c' { - e4 f g a \break - c1 - } - \new Staff { - R1 \break - R - } ->> - diff --git a/input/lsr/repeats-intro.itely b/input/lsr/repeats-intro.itely deleted file mode 100644 index 896f8f8e4e..0000000000 --- a/input/lsr/repeats-intro.itely +++ /dev/null @@ -1,7 +0,0 @@ -@node Repeats -@unnumbered Repeats - -@ruser{Repeats} - -@lysnippets - diff --git a/input/lsr/repeats.snippet-list b/input/lsr/repeats.snippet-list deleted file mode 100644 index 288f87d567..0000000000 --- a/input/lsr/repeats.snippet-list +++ /dev/null @@ -1,12 +0,0 @@ -adding-volta-brackets-to-additional-staves.ly -engraving-tremolos-with-floating-beams.ly -isolated-percent-repeats.ly -measure-counter.ly -percent-repeat-count-visibility.ly -percent-repeat-counter.ly -positioning-segno-and-coda-with-line-break.ly -printing-a-repeat-sign-at-the-beginning-of-a-piece.ly -shortening-volta-brackets.ly -volta-below-chords.ly -volta-multi-staff.ly -volta-text-markup-using-repeatcommands.ly diff --git a/input/lsr/rest-styles.ly b/input/lsr/rest-styles.ly deleted file mode 100644 index 2fd8d651a4..0000000000 --- a/input/lsr/rest-styles.ly +++ /dev/null @@ -1,67 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms, ancient-notation, tweaks-and-overrides" - -%% Translation of GIT committish: a634a20e0ab2a874ff8bf423e5651139df8733fc - doctitlees = "Estilos de silencios" - texidoces = " -Los silencios se pueden imprimir en distintos estilos. -" -%% Translation of GIT committish: 6743e7d829e2efe37d5d00133094df664f1960df - - doctitlede = "Pausenstile" - texidocde = " -Pausen können in verschiedenen Stilen dargestellt werden. -" - - -%% Translation of GIT committish: e71f19ad847d3e94ac89750f34de8b6bb28611df - texidocfr = " -Les silences peuvent être gravés selon différents styles. - -" - doctitlefr = "Styles de silences" - - texidoc = " -Rests may be used in various styles. - - - - -" - doctitle = "Rest styles" -} % begin verbatim - -\layout { - indent = 0.0 - \context { - \Staff - \remove "Time_signature_engraver" - } -} - -\new Staff \relative c { - \cadenzaOn - \override Staff.Rest #'style = #'mensural - r\maxima^\markup \typewriter { mensural } - r\longa r\breve r1 r2 r4 r8 r16 s32 s64 s128 s128 - \bar "" - - \override Staff.Rest #'style = #'neomensural - r\maxima^\markup \typewriter { neomensural } - r\longa r\breve r1 r2 r4 r8 r16 s32 s64 s128 s128 - \bar "" - - \override Staff.Rest #'style = #'classical - r\maxima^\markup \typewriter { classical } - r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 s128 - \bar "" - - \override Staff.Rest #'style = #'default - r\maxima^\markup \typewriter { default } - r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 s128 -} - diff --git a/input/lsr/reverting-default-beam-endings.ly b/input/lsr/reverting-default-beam-endings.ly deleted file mode 100644 index 9b5666f294..0000000000 --- a/input/lsr/reverting-default-beam-endings.ly +++ /dev/null @@ -1,55 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms" - -%% Translation of GIT committish: 151f1bb8c0aae8294e62d0470246ee1019aedfbc - texidoces = " -Para tipografiar las barras agrupadas en la forma @code{3-4-3-2} -en 12/8, en primer lugar tenemos que sobreescribir los finales de -barra predeterminados en 12/8, y después preparar los finales de -barra nuevos: - -" - doctitlees = "Alteración de los finales de barra predeterminados" - - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Um Balken im 12/8-Takt als @code{3-4-3-2} zu gruppieren, muss man zuerst die -Standardwerte für die Balken im 12/8-Takt rückgängig machen und dann die neuen -Werte setzen: - -" - doctitlede = "Standard-Balkenwerte rückgängig machen" - - texidoc = " -To typeset beams grouped @code{3-4-3-2} in 12/8 it is necessary first -to override the default beam endings in 12/8, and then to set up the -new beaming endings: - -" - doctitle = "Reverting default beam endings" -} % begin verbatim - -\relative c'' { - \time 12/8 - - % Default beaming - a8 a a a a a a a a a a a - - % Revert default values in scm/auto-beam.scm for 12/8 time - #(revert-auto-beam-setting '(end * * 12 8) 3 8) - #(revert-auto-beam-setting '(end * * 12 8) 3 4) - #(revert-auto-beam-setting '(end * * 12 8) 9 8) - a8 a a a a a a a a a a a - - % Set new values for beam endings - #(override-auto-beam-setting '(end * * 12 8) 3 8) - #(override-auto-beam-setting '(end * * 12 8) 7 8) - #(override-auto-beam-setting '(end * * 12 8) 10 8) - a8 a a a a a a a a a a a -} - diff --git a/input/lsr/rhythmic-slashes.ly b/input/lsr/rhythmic-slashes.ly deleted file mode 100644 index 554be0e035..0000000000 --- a/input/lsr/rhythmic-slashes.ly +++ /dev/null @@ -1,51 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms, tweaks-and-overrides" - - texidoc = " -In \"simple\" lead-sheets, sometimes no actual notes are written, -instead only \"rhythmic patterns\" and chords above the measures are -notated giving the structure of a song. Such a feature is for example -useful while creating/transcribing the structure of a song and also -when sharing lead sheets with guitarists or jazz musicians. The -standard support for this using @code{\\repeat percent} is unsuitable -here since the first beat has to be an ordinary note or rest. This -example shows two solutions to this problem, by redefining ordinary -rests to be printed as slashes. (If the duration of each beat is not a -quarter note, replace the @code{r4} in the definitions with a rest of -the appropriate duration). - -" - doctitle = "Rhythmic slashes" -} % begin verbatim - -% Macro to print single slash -rs = { - \once \override Rest #'stencil = #ly:percent-repeat-item-interface::beat-slash - \once \override Rest #'thickness = #0.48 - \once \override Rest #'slope = #1.7 - r4 -} - -% Function to print a specified number of slashes -comp = #(define-music-function (parser location count) ( integer?) - #{ - \override Rest #'stencil = #ly:percent-repeat-item-interface::beat-slash - \override Rest #'thickness = #0.48 - \override Rest #'slope = #1.7 - \repeat unfold $count { r4 } - \revert Rest #'stencil - #} -) - -\score { - \relative c' { - c4 d e f | - \rs \rs \rs \rs | - \comp #4 | - } -} - diff --git a/input/lsr/rhythms-intro.itely b/input/lsr/rhythms-intro.itely deleted file mode 100644 index dede3bf13e..0000000000 --- a/input/lsr/rhythms-intro.itely +++ /dev/null @@ -1,7 +0,0 @@ -@node Rhythms -@unnumbered Rhythms - -@ruser{Rhythms} - -@lysnippets - diff --git a/input/lsr/rhythms.snippet-list b/input/lsr/rhythms.snippet-list deleted file mode 100644 index ac87f9c016..0000000000 --- a/input/lsr/rhythms.snippet-list +++ /dev/null @@ -1,56 +0,0 @@ -adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.ly -adding-drum-parts.ly -aligning-bar-numbers.ly -automatic-beam-subdivisions.ly -automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly -avoiding-collisions-with-chord-fingerings.ly -beam-endings-in-score-context.ly -beam-grouping-in-7-8-time.ly -beams-across-line-breaks.ly -changing-beam-knee-gap.ly -changing-form-of-multi-measure-rests.ly -changing-the-time-signature-without-affecting-the-beaming.ly -changing-the-tuplet-number.ly -changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly -chant-or-psalms-notation.ly -compound-time-signatures.ly -conducting-signs,-measure-grouping-signs.ly -controlling-tuplet-bracket-visibility.ly -engraving-ties-manually.ly -engraving-tremolos-with-floating-beams.ly -entering-several-tuplets-using-only-one--times-command.ly -flat-flags-and-beam-nibs.ly -forcing-rehearsal-marks-to-start-from-a-given-letter-or-number.ly -grouping-beats.ly -guitar-strum-rhythms.ly -heavily-customized-polymetric-time-signatures.ly -making-an-object-invisible-with-the-transparent-property.ly -making-slurs-with-complex-dash-structure.ly -manually-controlling-beam-positions.ly -merging-multi-measure-rests-in-a-polyphonic-part.ly -modifying-tuplet-bracket-length.ly -multi-measure-rest-markup.ly -non-default-tuplet-numbers.ly -permitting-line-breaks-within-beamed-tuplets.ly -positioning-grace-notes-with-floating-space.ly -positioning-multi-measure-rests.ly -printing-bar-numbers-at-regular-intervals.ly -printing-bar-numbers-inside-boxes-or-circles.ly -printing-metronome-and-rehearsal-marks-below-the-staff.ly -printing-music-with-different-time-signatures.ly -printing-the-bar-number-for-the-first-measure.ly -redefining-grace-note-global-defaults.ly -removing-bar-numbers-from-a-score.ly -rest-styles.ly -reverting-default-beam-endings.ly -rhythmic-slashes.ly -skips-in-lyric-mode-2.ly -skips-in-lyric-mode.ly -specifying-context-with-beatgrouping.ly -stemlets.ly -sub-dividing-beams.ly -three-sided-box.ly -tweaking-grace-layout-within-music.ly -using-beatlength-and-beatgrouping.ly -using-grace-note-slashes-with-normal-heads.ly -using-ties-with-arpeggios.ly diff --git a/input/lsr/score-for-diatonic-accordion.ly b/input/lsr/score-for-diatonic-accordion.ly deleted file mode 100644 index c995e2167b..0000000000 --- a/input/lsr/score-for-diatonic-accordion.ly +++ /dev/null @@ -1,234 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "template" - - texidoc = " -A template to write a score for a diatonic accordion. - -- There is a horizontal staff indicating if the accordion must be -pushed (thick line) or pulled (thin line) - -- There is a small rhythmic staff with lyrics that describes the bass -buttons to press. The bar lines are made from gridlines - -- The tabulator staff for diatonic accordions shows the geographic -position of the buttons and not (as for every other instrument) the -pitch of the notes; the keys on the melody-side of the accordion are -placed in three columns and about 12 rows - - -In the tabulator staff notation the outermost column is described with -notes between lines, the innermost column is described with notes -between lines and a cross as accidental, and the middle column is -described with notes on a line, whereby the row in the middle is -represented on the middle line in the staff. - - -Some words to transpose piano notes to the diatonic accordion: - - -1. Every diatonic accordion is built for some keys only (for example, -for the keys of C major and F major), so it is important to transpose a -piano melody to match one of these keys. Transpose the source code, not -only the output because this code is required later on to translate it -once more to the tabulator staff. This can be done with the command -@code{displayLilyMusic}. - - -2. You have to alternate the push- and pull-direction of the accordion -regularly. If the player has a too long part to pull the accordion gets -broken. On the other hand, some harmonies are only available in one -direction. Considering this, decide which parts of the melody are the -push-parts and which the pull-parts. - - -3. For each pull- or push-part translate the piano notes to the -according tabulature representation. - - -This snippet comes with a useful optional macro for the jEdit text -editor. - -" - doctitle = "Score for diatonic accordion" -} % begin verbatim - -verse = \lyricmode { Wie gross bist du! Wie gross bist du! } - -harmonies = \new ChordNames \chordmode { - \germanChords - \set chordChanges = ##t - bes8 bes8 bes8 - es2 f - bes1 -} - -NoStem = \override Stem #'transparent = ##t -NoNoteHead = \override NoteHead #'transparent = ##t -ZeroBeam = \override Beam #'positions = #'(0 . 0) - -staffTabLine = \new Staff \with { - \remove "Time_signature_engraver" - \remove "Clef_engraver" -} { - \override Staff.StaffSymbol #'line-positions = #'(0) -% Shows one horizontal line. The vertical line (simulating a bar-line) is simulated with a gridline - \set Staff.midiInstrument = #"choir aahs" - \key c \major - \relative c'' - { - % disable the following line to see the the noteheads while writing the song - \NoNoteHead - \override NoteHead #'no-ledgers = ##t - - % The beam between 8th-notes is used to draw the push-line - %How to fast write the push-lines: - % 1. write repeatedly 'c c c c c c c c |' for the whole length of the song - % 2. uncomment the line \NoNoteHead - % 3. compile - % 4. Mark the positions on which push/pull changes. - % In the score-picture click on the position the push- or pull-part starts - % (on the noteHead, the cursor will change to a hand-icon). - % The cursor in the source code will jump just at this position. - % a) If a push-part starts there, replace the 'c' by an 'e[' - % b) If a pull-part starts there, replace the 'c' by an 's' - % 5. Switch into 'overwrite-mode' by pressing the 'ins' key. - % 6. For the pull-parts overwrite the 'c' with 's' - % 7. For every push-part replace the last 'c' with 'e]' - % 8. Switch into 'insert-mode' again - % 9. At last it should look lik e.g. (s s e[ c | c c c c c c c c | c c c c c c e] s s) - % 10. re-enable the line \NoNoteHead - \autoBeamOff - \ZeroBeam - s8 s s e[ c c c c c c e] | s s s s s - } -} - -%{ -%} - -% Accordion melody in tabulator score -% 1. Place a copy of the piano melody below -% 2. Separate piano melody into pull- and push-parts according to the staffTabLine you've already made -% 3. For each line: Double the line. Remark the 1st one (Keeps unchanged as reference) and then change the second line using the transformation paper -% or the macros 'conv2diaton push.bsh' and 'conv2diaton pull.bsh' -% Tips: -% - In jEdit Search & Replace mark the Option 'Keep Dialog' - -AccordionTabTwoCBesDur = { - % pull 1 - %8 8 8 | -8 8 8 | - % push 2 - %4 | -4 | - % pull 3 -% 2 r8 } - 2 r8 } - - AccordionTab= { \dynamicUp -% 1. Place a copy of the piano melody above -% 2. Separate piano melody into pull- and push-parts according to the staffTabLine you've already made -% 3. For each line: Double the line. Remark the 1st one (Keeps unchanged as reference) and then -% change the second line using the transformation paper -% Tips: -% - In jEdit Search & Replace mark the Option 'Keep Dialog' -% - -\AccordionTabTwoCBesDur - } - - - - \layout { - \context { - \Staff - \consists "Grid_point_engraver" - - gridInterval = #(ly:make-moment 4 4) % 4/4 - tact. How many beats per bar - - % The following line has to be adjusted O-F-T-E-N. - \override GridPoint #'Y-extent = #'(-2 . -21) - } - \context { - \ChoirStaff - \remove "System_start_delimiter_engraver" - } -} - -staffVoice = \new Staff=astaffvoice { - \time 4/4 - \set Staff.instrumentName="Voice" - \set Staff.midiInstrument="voice oohs" - \key bes \major - \partial 8*3 - \clef treble - { - \context Voice = "melodyVoi" - { 8 8 8 | 4 | 2 r8 } - \bar "|." - } -} - -staffAccordionMel = \new Staff \with { \remove "Clef_engraver" } { - #(set-accidental-style 'forget) %Set the accidentals (Vorzeichen) for each note, - %do not remember them for the rest of the measure. - \time 4/4 - \set Staff.instrumentName="Accordion" - \set Staff.midiInstrument="voice oohs" - \key c \major - \clef treble - { \AccordionTab \bar "|." } -} - - AltOn = #(define-music-function (parser location mag) (number?) - #{ \override Stem #'length = #$(* 7.0 mag) - \override NoteHead #'font-size = - #$(inexact->exact (* (/ 6.0 (log 2.0)) (log mag))) #}) - - AltOff = { - \revert Stem #'length - \revert NoteHead #'font-size - } - -BassRhytm = {s4 s8 | c2 c2 | c2 s8 } -LyricBassRhythmI= \lyricmode { c b | c } - -staffBassRhytm = \new Staff=staffbass \with { \remove "Clef_engraver" } { - % This is not a RhythmicStaff because it must be possible to append lyrics. - - \override Score.GridLine #'extra-offset = #'( 13.0 . 0.0 ) % x.y - \override Staff.StaffSymbol #'line-positions = #'( 0 ) - % Shows one horizontal line. The vertical line (simulating a bar-line) is simulated by a grid - % Search for 'grid' in this page to find all related functions - \time 4/4 - { - \context Voice = "VoiceBassRhytm" - \stemDown \AltOn #0.6 - \relative c'' - { - \BassRhytm - } - \AltOff - \bar "|." - } -} - -\new Score -\with { - \consists "Grid_line_span_engraver" %The vertical line (simulating a bar-line) in the staffBassRhytm is a gridline -} -\new ChoirStaff - << - \harmonies - \staffVoice - \context Lyrics = "lmelodyVoi" \with {alignBelowContext=astaffvoice} { \lyricsto "melodyVoi" \verse } - \staffAccordionMel - \staffTabLine - \staffBassRhytm - \context Lyrics = "lBassRhytmAboveI" \with {alignAboveContext=staffbass} \lyricsto VoiceBassRhytm \LyricBassRhythmI - >> -%} - diff --git a/input/lsr/separating-key-cancellations-from-key-signature-changes.ly b/input/lsr/separating-key-cancellations-from-key-signature-changes.ly deleted file mode 100644 index 396d00bb8f..0000000000 --- a/input/lsr/separating-key-cancellations-from-key-signature-changes.ly +++ /dev/null @@ -1,42 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "pitches, tweaks-and-overrides" - - texidoc = " -By default, the accidentals used for key cancellations are placed -adjacent to those for key signature changes. This behavior can be -changed by overriding the @code{'break-align-orders} property of the -@code{BreakAlignment} grob. - - -The value of @code{'break-align-orders} is a vector of length 3, with -quoted lists of breakable items as elements. This example only -modifies the second list, moving @code{key-cancellation} before -@code{staff-bar}; by modifying the second list, break alignment -behavior only changes in the middle of a system, not at the beginning -or the end. - -" - doctitle = "Separating key cancellations from key signature changes" -} % begin verbatim - -\new Staff { - \override Score.BreakAlignment #'break-align-orders = - #'#((left-edge ambitus breathing-sign clef staff-bar - key-cancellation key-signature time-signature custos) - - (left-edge ambitus breathing-sign clef key-cancellation - staff-bar key-signature time-signature custos) - - (left-edge ambitus breathing-sign clef key-cancellation - key-signature staff-bar time-signature custos)) - - \key des \major - c'1 - \bar "||" - \key bes \major - c'1 -} diff --git a/input/lsr/setting-hairpin-behavior-at-bar-lines.ly b/input/lsr/setting-hairpin-behavior-at-bar-lines.ly deleted file mode 100644 index 1212c55a1b..0000000000 --- a/input/lsr/setting-hairpin-behavior-at-bar-lines.ly +++ /dev/null @@ -1,42 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks, tweaks-and-overrides" - -%% Translation of GIT committish: dff50e8e1d3134657a6b6203b9c93826dc4cef65 - texidoces = " -Si la nota que da fin a un regulador cae sobre la primera parte de -un compás, el regulador se detiene en la línea divisoria -inmediatamente precedente. Se puede controlar este comportamiento -sobreescribiendo la propiedad @code{to-barline}. - -" - doctitlees = "Establecer el comportamiento de los reguladores en las barras de compás" - -%% Translation of GIT committish: 6ce7f350682dfa99af97929be1dec6b9f1cbc01a -texidocde = " -Wenn die Note, an welcher eine Crescendo-Klammer endet, die erste Note -eines Taktes ist, wird die Klammer an der vorhergehenden Tatklinie -beendet. Dieses Verhalten kann auch mit der Eigenschaft -@code{'to-barline} geändert werden: -" - doctitlede = "Das Verhalten von Crescendo-Klammern an Taktlinien beeinflussen" - - texidoc = " -If the note which ends a hairpin falls on a downbeat, the hairpin stops -at the bar line immediately preceding. This behavior can be controlled -by overriding the @code{'to-barline} property. - -" - doctitle = "Setting hairpin behavior at bar lines" -} % begin verbatim - -\relative c'' { - e4\< e2. - e1\! - \override Hairpin #'to-barline = ##f - e4\< e2. - e1\! -} diff --git a/input/lsr/setting-the-minimum-length-of-hairpins.ly b/input/lsr/setting-the-minimum-length-of-hairpins.ly deleted file mode 100644 index 70db964bdf..0000000000 --- a/input/lsr/setting-the-minimum-length-of-hairpins.ly +++ /dev/null @@ -1,39 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks" - -%% Translation of GIT committish: dff50e8e1d3134657a6b6203b9c93826dc4cef65 - texidoces = " -Si los reguladores son demasiado cortos, se pueden alargar -modificando la propiedad @code{minimum-length} del objeto -@code{Hairpin}. - -" - doctitlees = "Ajustar la longitud mínima de los reguladores" - -%% Translation of GIT committish: 6ce7f350682dfa99af97929be1dec6b9f1cbc01a -texidocde = " -Wenn Crescendo-Klammern zu kurz sind, können sie verlängert werden, indem -die @code{minimum-length}-Eigenschaft des @code{Hairpin}-Objektes -verändert wird. - -" - doctitlede = "Die Mindestlänge von Crescendo-Klammern bestimmen" - - texidoc = " -If hairpins are too short, they can be lengthened by modifying the -@code{minimum-length} property of the @code{Hairpin} object. - -" - doctitle = "Setting the minimum length of hairpins" -} % begin verbatim - -\relative c'' { - c4\< c\! d\> e\! - \override Hairpin #'minimum-length = #5 - << f1 { s4 s\< s\> s\! } >> -} - diff --git a/input/lsr/shortening-volta-brackets.ly b/input/lsr/shortening-volta-brackets.ly deleted file mode 100644 index dff3b7b4a1..0000000000 --- a/input/lsr/shortening-volta-brackets.ly +++ /dev/null @@ -1,52 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "repeats" - -%% Translation of GIT committish: da84f4caeafed6832152295e67ae852a9930f568 - texidoces = " -De forma predeterminada, los corchetes de primera y segunda vez se -trazan encima de los finales alternativos completos, pero es posible -acortartlos estableciendo un valor cierto para -@code{voltaSpannerDuration}. En el ejemplo siguiente, el corchete -sólo dura un compás, que corresponde a una duración de 3/4. - -" - doctitlees = "Shortening volta brackets" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Volta-Klammern werden normalerweise über alle Noten der Klammer gezogen, aber -es ist möglich sie zu verkürzen. Hierzu muss -@code{voltaSpannerDuration} definiert werden, in dem Beispiel etwa als -3/4, sodass die Klammer nur einen Takt dauert. - -" - doctitlede = "Volta-Klammern verkürzen" - - texidoc = " -By default, the volta brackets will be drawn over all of the -alternative music, but it is possible to shorten them by setting -@code{voltaSpannerDuration}. In the next example, the bracket only -lasts one measure, which is a duration of 3/4. - -" - doctitle = "Shortening volta brackets" -} % begin verbatim - -\relative c'' { - \time 3/4 - c4 c c - \set Score.voltaSpannerDuration = #(ly:make-moment 3 4) - \repeat volta 5 { d4 d d } - \alternative { - { - e4 e e - f4 f f - } - { g4 g g } - } -} - diff --git a/input/lsr/showing-chords-at-changes.ly b/input/lsr/showing-chords-at-changes.ly deleted file mode 100644 index 12bd7ad7f3..0000000000 --- a/input/lsr/showing-chords-at-changes.ly +++ /dev/null @@ -1,44 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "chords" - -%% Translation of GIT committish: 7e2910d2bc6167b10cfe328eb17a5f710f2a515a - texidoces = " -Se pueden imprimir los acordes exclusivamente al comienzo de las -líneas y cuando cambia el acorde. - -" - doctitlees = "Imprimir los acordes cuando se produce un cambio" - -%% Translation of GIT committish: 33f623301a41fcc53efadf96bca1c72834763415 - texidocde = " -Akkordsymbole können so eingestellt werden, dass sie nur zu Beginn der Zeile -und bei Akkordwechseln angezeigt werden. - -" - doctitlede = "Akkordsymbole bei Wechsel anzeigen" - - texidoc = " -Chord names can be displayed only at the start of lines and when the -chord changes. - -" - doctitle = "Showing chords at changes" -} % begin verbatim - -harmonies = \chordmode { - c1:m c:m \break c:m c:m d -} -<< - \new ChordNames { - \set chordChanges = ##t - \harmonies - } - \new Staff { - \relative c' { \harmonies } - } ->> - diff --git a/input/lsr/simple-lead-sheet.ly b/input/lsr/simple-lead-sheet.ly deleted file mode 100644 index e5a4d159c9..0000000000 --- a/input/lsr/simple-lead-sheet.ly +++ /dev/null @@ -1,38 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "chords" - -%% Translation of GIT committish: 7e2910d2bc6167b10cfe328eb17a5f710f2a515a - texidoces = " -Al juntar nombres de acorde en cifrado americano, melodía y letra, -obtenemos una hoja guía de acordes o «lead sheet»: - -" - doctitlees = "Hoja guía de acordes o «lead sheet» sencilla" - -%% Translation of GIT committish: 33f623301a41fcc53efadf96bca1c72834763415 - texidocde = " -Ein Liedblatt besteht aus Akkordbezeichnungen, einer Melodie und dem Liedtext: - -" - doctitlede = "Ein einfaches Liedblatt" - - texidoc = " -When put together, chord names, a melody, and lyrics form a lead sheet: - -" - doctitle = "Simple lead sheet" -} % begin verbatim - -<< - \chords { c2 g:sus4 f e } - \relative c'' { - a4 e c8 e r4 - b2 c4( d) - } - \addlyrics { One day this shall be free __ } ->> - diff --git a/input/lsr/simultaneous-notes-intro.itely b/input/lsr/simultaneous-notes-intro.itely deleted file mode 100644 index 9a4612c2ea..0000000000 --- a/input/lsr/simultaneous-notes-intro.itely +++ /dev/null @@ -1,7 +0,0 @@ -@node Simultaneous notes -@unnumbered Simultaneous notes - -@ruser{Simultaneous notes} - -@lysnippets - diff --git a/input/lsr/simultaneous-notes.snippet-list b/input/lsr/simultaneous-notes.snippet-list deleted file mode 100644 index ace5627929..0000000000 --- a/input/lsr/simultaneous-notes.snippet-list +++ /dev/null @@ -1,10 +0,0 @@ -additional-voices-to-avoid-collisions.ly -changing-a-single-notes-size-in-a-chord.ly -changing-partcombine-texts.ly -clusters.ly -combining-two-parts-on-the-same-staff.ly -displaying-complex-chords.ly -double-glissando.ly -forcing-horizontal-shift-of-notes.ly -making-an-object-invisible-with-the-transparent-property.ly -suppressing-warnings-for-clashing-note-columns.ly diff --git a/input/lsr/single-staff-template-with-notes,-lyrics,-and-chords.ly b/input/lsr/single-staff-template-with-notes,-lyrics,-and-chords.ly deleted file mode 100644 index 569c8fd59a..0000000000 --- a/input/lsr/single-staff-template-with-notes,-lyrics,-and-chords.ly +++ /dev/null @@ -1,63 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "vocal-music, chords, template" - -%% Translation of GIT committish: 7e2910d2bc6167b10cfe328eb17a5f710f2a515a - texidoces = " -Esta plantilla facilita la preparación de una canción con melodía, -letra y acordes. - -" - doctitlees = "Plantilla de pentagrama único con música, letra y acordes" - -%% Translation of GIT committish: 17633f6b8681af86230aa84597fe7561e98c91d6 - texidocde = " -Mit diesem Beispiel können Sie einen Song mit Melodie, -Text und Akkorden schreiben. -" - -%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae - texidocja = " -これは旋律、単語、コードを持つ歌曲の楽譜のためのテンプレートです。 -" - - texidoc = " -This template allows the preparation of a song with melody, words, and -chords. - -" - doctitle = "Single staff template with notes, lyrics, and chords" -} % begin verbatim - -melody = \relative c' { - \clef treble - \key c \major - \time 4/4 - - a4 b c d -} - -text = \lyricmode { - Aaa Bee Cee Dee -} - -harmonies = \chordmode { - a2 c -} - -\score { - << - \new ChordNames { - \set chordChanges = ##t - \harmonies - } - \new Voice = "one" { \autoBeamOff \melody } - \new Lyrics \lyricsto "one" \text - >> - \layout { } - \midi { } -} - diff --git a/input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly b/input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly deleted file mode 100644 index e67156b7c5..0000000000 --- a/input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly +++ /dev/null @@ -1,77 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "vocal-music, chords, template" - -%% Translation of GIT committish: 7e2910d2bc6167b10cfe328eb17a5f710f2a515a - texidoces = " -Presentamos a continuación un ejemplo de plantilla para una hoja -guía de acordes con melodía, letra, acordes y diagramas de -trastes. -" - - doctitlees = "Plantilla para un pentagrama único con música, letra, acordes y trastes" - - texidoc = " -Here is a simple lead sheet template with melody, lyrics, chords and -fret diagrams. - -" - doctitle = "Single staff template with notes, lyrics, chords and frets" -} % begin verbatim - -% Define the fret diagrams to be used -cFretDiagram = \markup { - \fret-diagram #"6-x;5-3-3;4-2-2;3-o;2-1-1;1-o;" -} - -gFretDiagram = \markup { - \fret-diagram #"6-3-2;5-2-1;4-o;3-o;2-o;1-3-3;" -} - -verseI = \lyricmode { - \set stanza = #"1." - This is the first verse -} - -verseII = \lyricmode { - \set stanza = #"2." - This is the second verse. -} - -theChords = \new ChordNames { - \chordmode { - % insert the chords for chordnames here - c2 g4 c - } -} - -staffMelody = \new Staff { - \context Voice = "voiceMelody" { - \key c \major - \clef treble - \relative c' { - % Type notes and fret diagram markups here - c4^\cFretDiagram d8 e f4^\gFretDiagram g^\cFretDiagram - \bar "|." - } - } -} - -\score { - << - \theChords - \staffMelody - \new Lyrics = "lyricsI" \lyricmode { - \lyricsto "voiceMelody" \verseI - } - \new Lyrics = "lyricsII" \lyricmode { - \lyricsto "voiceMelody" \verseII - } - >> - \layout { } - \midi { } -} - diff --git a/input/lsr/single-staff-template-with-notes-and-chords.ly b/input/lsr/single-staff-template-with-notes-and-chords.ly deleted file mode 100644 index b0897f6595..0000000000 --- a/input/lsr/single-staff-template-with-notes-and-chords.ly +++ /dev/null @@ -1,61 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "chords, template" - -%% Translation of GIT committish: 7e2910d2bc6167b10cfe328eb17a5f710f2a515a - texidoces = " -¿Quiere preparar una hoja guía de acordes (o «lead sheet») con -melodía y acordes? ¡No busque más! - -" - -doctitlees = "Plantilla de pentagrama único con música y acordes" -%% Translation of GIT committish: 17633f6b8681af86230aa84597fe7561e98c91d6 - - texidocde = " -Wollen Sie ein Liedblatt mit Melodie und Akkorden schreiben? Hier ist -das richtige Beispiel für Sie! -" - -%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae - texidocja = " -旋律とコードを持つリード譜を欲しくはありませんか?他を見る必要はありません! -" - - texidoc = " -Want to prepare a lead sheet with a melody and chords? Look no further! - - -" - doctitle = "Single staff template with notes and chords" -} % begin verbatim - -melody = \relative c' { - \clef treble - \key c \major - \time 4/4 - - f4 e8[ c] d4 g - a2 ~ a -} - -harmonies = \chordmode { - c4:m f:min7 g:maj c:aug - d2:dim b:sus -} - -\score { - << - \new ChordNames { - \set chordChanges = ##t - \harmonies - } - \new Staff \melody - >> - \layout{ } - \midi { } -} - diff --git a/input/lsr/single-staff-template-with-notes-and-lyrics.ly b/input/lsr/single-staff-template-with-notes-and-lyrics.ly deleted file mode 100644 index 2251a94a47..0000000000 --- a/input/lsr/single-staff-template-with-notes-and-lyrics.ly +++ /dev/null @@ -1,72 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "vocal-music, template" - -%% Translation of GIT committish: d35687993883eb31442009fc50d5ae063108bfa7 - texidoces = " -Esta pequeña plantilla muestra una melodía sencilla con letra. Córtela -y péguela, escriba las notas y luego la letra. Este ejemplo desactiva -el barrado automático, que es lo más frecuente en las partes vocales -antiguas. Para usar el barrado automático modifique o marque como un -comentario la línea correspondiente. - -" - doctitlees = "Plantilla de pentagrama único don notas y letra" -%% Translation of GIT committish: 17633f6b8681af86230aa84597fe7561e98c91d6 - - texidocde = " -Das nächste Beispiel zeigt eine einfache Melodie mit Text. Kopieren -Sie es in Ihre Datei, fügen Sie Noten und Text hinzu und übersetzen -Sie es mit LilyPond. In dem Beispiel wird die automatische -Balkenverbindung ausgeschaltet (mit dem Befehl @code{\autoBeamOff}), -wie es für Vokalmusik üblich ist. -Wenn Sie die Balken wieder einschalten wollen, müssen Sie die -entsprechende Zeile entweder ändern oder auskommentieren. -" - -%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae - texidocja = " -この小さなテンプレートは歌詞を持つ簡単な旋律を表しています。カット&ペーストして、音符@c -を付け加えて、それから歌詞の単語を付け加えてください。この例は自動ビームを off にして@c -います。これはボーカル パートでは一般的なことです。自動ビームを使用するには、対応する@c -行を変更するか、コメント アウトしてください。 -" - - - texidoc = " -This small template demonstrates a simple melody with lyrics. Cut and -paste, add notes, then words for the lyrics. This example turns off -automatic beaming, which is common for vocal parts. To use automatic -beaming, change or comment out the relevant line. - -" - doctitle = "Single staff template with notes and lyrics" -} % begin verbatim - -melody = \relative c' { - \clef treble - \key c \major - \time 4/4 - - a4 b c d -} - -text = \lyricmode { - Aaa Bee Cee Dee -} - -\score{ - << - \new Voice = "one" { - \autoBeamOff - \melody - } - \new Lyrics \lyricsto "one" \text - >> - \layout { } - \midi { } -} - diff --git a/input/lsr/single-staff-template-with-only-notes.ly b/input/lsr/single-staff-template-with-only-notes.ly deleted file mode 100644 index 67d5a7ca3b..0000000000 --- a/input/lsr/single-staff-template-with-only-notes.ly +++ /dev/null @@ -1,54 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "template" - -%% Translation of GIT committish: d35687993883eb31442009fc50d5ae063108bfa7 - texidoces = " -Esta plantilla simple prepara un pentagrama con notas, adecuado para -un instrumento solista o un fragmento melódico. Córtelo y péguelo en -un archivo, escriba las notas y ¡ya está! - -" - doctitlees = "Plantilla de un solo pentagrama, con notas únicamente" -%% Translation of GIT committish: 17633f6b8681af86230aa84597fe7561e98c91d6 - - texidocde = " -Das erste Beispiel zeigt ein Notensystem mit Noten, passend für ein -Soloinstrument oder ein Melodiefragment. Kopieren Sie es und fügen -Sie es in Ihre Datei ein, schreiben Sie die Noten hinzu, und Sie haben -eine vollständige Notationsdatei. -" - -%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae - texidocja = " -これは音符を持つ譜表を提供するとても簡単なテンプレートであり、ソロの楽器や旋律に適しています。@c -これをファイルにカット&ペーストして、音符を付け加えれば完了です! -" - - - texidoc = " -This very simple template gives you a staff with notes, suitable for a -solo instrument or a melodic fragment. Cut and paste this into a file, -add notes, and you're finished! - -" - doctitle = "Single staff template with only notes" -} % begin verbatim - -melody = \relative c' { - \clef treble - \key c \major - \time 4/4 - - a4 b c d -} - -\score { - \new Staff \melody - \layout { } - \midi { } -} - diff --git a/input/lsr/skips-in-lyric-mode-2.ly b/input/lsr/skips-in-lyric-mode-2.ly deleted file mode 100644 index 80ec4fbbde..0000000000 --- a/input/lsr/skips-in-lyric-mode-2.ly +++ /dev/null @@ -1,21 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms, vocal-music" - - texidoc = " -Although @code{s} skips cannot be used in @code{\\lyricmode} (it is -taken to be a literal \"s\", not a space), double quotes (@code{\"\"}) -or underscores (@code{_}) are available.So for example: - -" - doctitle = "Skips in lyric mode (2)" -} % begin verbatim - -<< - \relative c'' { a4 b c d } - \new Lyrics \lyricmode { a4 "" _ gap } ->> - diff --git a/input/lsr/skips-in-lyric-mode.ly b/input/lsr/skips-in-lyric-mode.ly deleted file mode 100644 index 0335261931..0000000000 --- a/input/lsr/skips-in-lyric-mode.ly +++ /dev/null @@ -1,21 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms, vocal-music" - - texidoc = " -The @code{s} syntax for skips is only available in note mode and chord -mode. In other situations, for example, when entering lyrics, using the -@code{\\skip} command is recommended. - -" - doctitle = "Skips in lyric mode" -} % begin verbatim - -<< - \relative { a'1 a } - \new Lyrics \lyricmode { \skip 1 bla1 } ->> - diff --git a/input/lsr/snap-pizzicato-markup-bartok-pizzicato.ly b/input/lsr/snap-pizzicato-markup-bartok-pizzicato.ly deleted file mode 100644 index da9941b5d6..0000000000 --- a/input/lsr/snap-pizzicato-markup-bartok-pizzicato.ly +++ /dev/null @@ -1,68 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks, unfretted-strings" - -%% Translation of GIT committish: 00fe3d48c0b9f7ba3902bcd8266c3e21d95986ad - doctitlees = "Marca de pizzicato de chasquido (@q{pizzicato de Bartók})" - texidoces = " -El pizzicato de chasquido (también llamado @q{Pizzicato de Bartók}) es un -@q{pizzicato fuerte en que la cuerda se pulsa verticalmente produciendo un -chasquido y rebotando en el diapasón del instrumento} (Wikipedia). Se -denota mediante una circunferencia con una línea vertical corta que parte -del centro de aquélla hacia fuera. Aunque LilyPond no tiene ninguna -instrucción predefinida para crear esta marca, es fácil hacer la definición -y colocarla directamente en el archivo de lilypond. -" - -%% Translation of GIT committish: 6743e7d829e2efe37d5d00133094df664f1960df - doctitlede = "Bartók-Pizzicato" - texidocde = " -Das Bartók-Pizzicato @q{ist eine besondere Form des Pizzicato, bei dem der -Spieler die Saite auf das Griffbrett aufschlagen lässt, sodass zusätzlich -zum angeschlagenen Ton ein scharfes, knallendes Geräusch ertönt} -(Wikipedia). Es wird dargestellt als kleiner Kreis mit einer vertikalen -Linie, die vom Kreiszentrum aus nach oben weist und ein Stück außerhalb des -Kreises endet. Lilypond hat keinen eigenen Glyphen für dieses Symbol; es -ist aber einfach, direkt eine Definition in die Eingabedatei einzufügen. -" - - texidoc = " -A snap-pizzicato (also known as \"Bartok pizzicato\") is a \"strong -pizzicato where the string is plucked vertically by snapping and -rebounds off the fingerboard of the instrument\" (Wikipedia). It is -denoted by a cicle with a vertical line going from the center upwards -outside the circle. While Lilypond does not have a pre-defined command -to created this markup, it is easy to create a definition and place it -directly into the lilypond file. - -" - doctitle = "Snap-pizzicato markup (\"Bartok pizzicato\")" -} % begin verbatim - -#(define-markup-command (snappizz layout props) () - (interpret-markup layout props - (markup #:stencil - (ly:stencil-translate-axis - (ly:stencil-add - (make-circle-stencil 0.7 0.1 #f) - (ly:make-stencil - (list 'draw-line 0.1 0 0.1 0 1) - '(-0.1 . 0.1) '(0.1 . 1))) - 0.7 X)))) - -snapPizzicato = \markup \snappizz - -% now it can be used as \snappizzicato after the note/chord -% Note that a direction (-, ^ or _) is required. -\relative c' { - c4^\snapPizzicato - % This does NOT work: - %\snapPizzicato - -\snapPizzicato - ^\snapPizzicato - _\snapPizzicato -} - diff --git a/input/lsr/spacing-intro.itely b/input/lsr/spacing-intro.itely deleted file mode 100644 index c19a14091c..0000000000 --- a/input/lsr/spacing-intro.itely +++ /dev/null @@ -1,7 +0,0 @@ -@node Spacing -@unnumbered Spacing - -@ruser{Spacing issues} - -@lysnippets - diff --git a/input/lsr/spacing.snippet-list b/input/lsr/spacing.snippet-list deleted file mode 100644 index 81a465a289..0000000000 --- a/input/lsr/spacing.snippet-list +++ /dev/null @@ -1,6 +0,0 @@ -adjusting-lyrics-vertical-spacing.ly -allowing-fingerings-to-be-printed-inside-the-staff.ly -page-label.ly -proportional-strict-notespacing.ly -vertically-aligned-dynamics-and-textscripts.ly -vertically-aligning-ossias-and-lyrics.ly diff --git a/input/lsr/specifying-context-with-beatgrouping.ly b/input/lsr/specifying-context-with-beatgrouping.ly deleted file mode 100644 index df25766d0e..0000000000 --- a/input/lsr/specifying-context-with-beatgrouping.ly +++ /dev/null @@ -1,67 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms, tweaks-and-overrides" - -%% Translation of GIT committish: 5c26e815f2ed54e6c4d022bac10dcc87a9916a29 - texidoces = " -Mediante la especificación del contexto, el efecto de -@code{beatGrouping} puede limitarse al contexto especificado, y -sobreescribirse los valores establecidos en contextos de niveles más -altos: - -" - doctitlees = "Especificar el contexto con beatGrouping" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Wenn der Kontext angegeben wird, kann die Auswirkung von @code{beatGrouping} -auf den angegebenen Kontext beschränkt werden und die Werte, die in Kontexten -auf höhrer Ebene angegeben wurden, können verändert werden. Der -@code{\\set}-Befehl muss @emph{nach} den @code{\\time}-Befehl geschrieben -werden: -" - doctitlede = "Den Kontext für beatGrouping angeben" - - -%% Translation of GIT committish: b3196fadd8f42d05ba35e8ac42f7da3caf8a3079 - texidocfr = " -Le fait de spécifier un contexte à @code{beatGrouping} permet d'en -limiter les effets. Par voie de conséquence, il sera possible -d'outrepasser les règles définies à un niveau supérieur. La commande -@code{\set} destinée à en modifier les valeurs doit se placer après la -commande @code{\time} : - -" - doctitlefr = "Spécification du contexte auquel s'appliquera beatGrouping" - - texidoc = " -By specifying the context, the effect of @code{beatGrouping} can be -limited to the context specified, and the values which may have been -set in higher-level contexts can be overridden. The @code{\\set} -commands must be placed after all @code{\\time} commands: - -" - doctitle = "Specifying context with beatGrouping" -} % begin verbatim - -\score { - \new Staff << - \time 7/8 - \new Voice { - \relative c'' { - \set Staff.beatGrouping = #'(2 3 2) - a8 a a a a a a - } - } - \new Voice { - \relative c' { - \voiceTwo - \set beatGrouping = #'(1 3 3) - f8 f f f f f f - } - } - >> -} diff --git a/input/lsr/staff-notation-intro.itely b/input/lsr/staff-notation-intro.itely deleted file mode 100644 index b78176376a..0000000000 --- a/input/lsr/staff-notation-intro.itely +++ /dev/null @@ -1,7 +0,0 @@ -@node Staff notation -@unnumbered Staff notation - -@ruser{Staff notation} - -@lysnippets - diff --git a/input/lsr/staff-notation.snippet-list b/input/lsr/staff-notation.snippet-list deleted file mode 100644 index 5c9b6db9b4..0000000000 --- a/input/lsr/staff-notation.snippet-list +++ /dev/null @@ -1,28 +0,0 @@ -adding-ambitus-per-voice.ly -adding-an-extra-staff-at-a-line-break.ly -adding-an-extra-staff.ly -changing-the-number-of-lines-in-a-staff.ly -changing-the-staff-size.ly -changing-the-tempo-without-a-metronome-mark.ly -creating-blank-staves.ly -creating-metronome-marks-in-markup-mode.ly -display-bracket-with-only-one-staff-in-a-system.ly -incipit.ly -inserting-score-fragments-above-a-staff,-as-markups.ly -letter-tablature-formatting.ly -making-some-staff-lines-thicker-than-the-others.ly -measure-counter.ly -mensurstriche-layout-bar-lines-between-the-staves.ly -modern-tab-text-clef.ly -nesting-staves.ly -non-traditional-key-signatures.ly -printing-metronome-and-rehearsal-marks-below-the-staff.ly -quoting-another-voice-with-transposition.ly -quoting-another-voice.ly -removing-the-first-empty-line.ly -tick-bar-lines.ly -time-signature-in-parentheses.ly -tweaking-clef-properties.ly -use-square-bracket-at-the-start-of-a-staff-group.ly -volta-below-chords.ly -volta-multi-staff.ly diff --git a/input/lsr/stand-alone-two-column-markup.ly b/input/lsr/stand-alone-two-column-markup.ly deleted file mode 100644 index ee1ff9376a..0000000000 --- a/input/lsr/stand-alone-two-column-markup.ly +++ /dev/null @@ -1,54 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "text" - -%% Translation of GIT committish: 07181d48fd1aab2fe558345a23690681c9c4af18 - texidoces = " -Los textos independientes se pueden disponer en varias columnas -utilizando instrucciones @code{\\markup}: - -" - doctitlees = "Elemento de marcado de texto independiente en dos columnas" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Isolierter Text kann in mehreren Spalten mit @code{\\markup}-Befehlen -angeordnet werden: - -" - doctitlede = "Isolierter Text in zwei Spalten" - - texidoc = " -Stand-alone text may be arranged in several columns using -@code{\\markup} commands: - -" - doctitle = "Stand-alone two-column markup" -} % begin verbatim - -\markup { - \fill-line { - \hspace #1 - \column { - \line { O sacrum convivium } - \line { in quo Christus sumitur, } - \line { recolitur memoria passionis ejus, } - \line { mens impletur gratia, } - \line { futurae gloriae nobis pignus datur. } - \line { Amen. } - } - \hspace #2 - \column { - \line { \italic { O sacred feast } } - \line { \italic { in which Christ is received, } } - \line { \italic { the memory of His Passion is renewed, } } - \line { \italic { the mind is filled with grace, } } - \line { \italic { and a pledge of future glory is given to us. } } - \line { \italic { Amen. } } - } - \hspace #1 - } -} diff --git a/input/lsr/stem-and-beam-behavior-in-tablature.ly b/input/lsr/stem-and-beam-behavior-in-tablature.ly deleted file mode 100644 index da8fcb6fcd..0000000000 --- a/input/lsr/stem-and-beam-behavior-in-tablature.ly +++ /dev/null @@ -1,53 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "fretted-strings" - -%% Translation of GIT committish: acbcbe3683d629575967b972b64ca5e1589bf330 - texidoces = " -La dirección de las plicas se contola de la misma forma en la -tablatura que en la notación tradicional. Las barras se pueden -poner horizontales, como se muestra en este ejemplo. - -" - doctitlees = "Comportamiento de las plicas y las barras de corchea en tablaturas" - -%% Translation of GIT committish: cd4950757ab1ab6c89805b0b7c978bfca034f940 - - texidocfr = " -La direction des hampes se gère dans les tablatures tout comme en -notation traditionnelle. Les ligatures peuvent être mises à l'horizontale -comme le montre cet exemple. - -" - doctitlefr = "Hampes et ligatures en mode tablature" - -%% Translation of GIT committish: 33f623301a41fcc53efadf96bca1c72834763415 - texidocde = " -Die Richtung von Hälsen wird in Tabulaturen genauso wie in normaler Notation -eingestellt. Balken können horizontal eingestellt werden, wie das Beispiel -zeigt. - -" - doctitlede = "Hals- und Balkenverhalten in einer Tabulatur" - - texidoc = " -The direction of stems is controlled the same way in tablature as in -traditional notation. Beams can be made horizontal, as shown in this -example. - -" - doctitle = "Stem and beam behavior in tablature" -} % begin verbatim - -\new TabStaff { - \relative c { - g16 b d g b d g b - \stemDown - \override Beam #'damping = #+inf.0 - g,,16 b d g b d g b - } -} - diff --git a/input/lsr/stemlets.ly b/input/lsr/stemlets.ly deleted file mode 100644 index 23b822cef1..0000000000 --- a/input/lsr/stemlets.ly +++ /dev/null @@ -1,42 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms" - - texidoc = " -In some notational conventions beams are allowed to extend over rests. -Depending on preference, these beams may drop 'stemlets' to help the -eye appreciate the rhythm better, and in some modern music the rest -itself is omitted and only the stemlet remains. - - -This snippet shows a progression from traditional notation, to beams -over the rest, to stemlets over the rest, to stemlets alone. Stemlets -are generated by overriding the @code{'stemlet-length} property of -@code{Stem}, while rests are hidden by setting @code{'transparent = -##t}. - - -Some @code{\\markup} elements are included in the source to highlight -the different notations. - -" - doctitle = "Stemlets" -} % begin verbatim - -\paper { ragged-right = ##f } - -{ - c'16^\markup { traditional } d' r f' - g'16[^\markup { beams over rests } f' r d'] - - % N.B. use Score.Stem to set for the whole score. - \override Staff.Stem #'stemlet-length = #0.75 - - c'16[^\markup { stemlets over rests } d' r f'] - g'16[^\markup { stemlets and no rests } f' \once \override Rest #'transparent = ##t r d'] -} - - diff --git a/input/lsr/string-quartet-template-simple.ly b/input/lsr/string-quartet-template-simple.ly deleted file mode 100644 index d1ea2723c1..0000000000 --- a/input/lsr/string-quartet-template-simple.ly +++ /dev/null @@ -1,90 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "unfretted-strings, template" - -%% Translation of GIT committish: d35687993883eb31442009fc50d5ae063108bfa7 - texidoces = " -Esta plantilla muestra un cuarteto de cuerda normal. También utiliza -una sección @code{\\global} para el compás y la armadura - -" - doctitlees = "Plantilla de cuarteto de cuerda (sencilla)" -%% Translation of GIT committish: 17633f6b8681af86230aa84597fe7561e98c91d6 - - texidocde = " -Dieses Beispiel demonstriert die Partitur für ein Streichquartett. Hier -wird auch eine @qq{@code{\global}}-Variable für Taktart und -Vorzeichen benutzt. -" - -%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae - texidocja = " -これは簡単な弦楽四重奏のためのテンプレートです。これは拍子記号と調号のために -@code{@bs{}global} セクションを使っています。 -" - - texidoc = " -This template demonstrates a simple string quartet. It also uses a -@code{\\global} section for time and key signatures - -" - doctitle = "String quartet template (simple)" -} % begin verbatim - -global= { - \time 4/4 - \key c \major -} - -violinOne = \new Voice \relative c'' { - \set Staff.instrumentName = #"Violin 1 " - - c2 d - e1 - - \bar "|." -} - -violinTwo = \new Voice \relative c'' { - \set Staff.instrumentName = #"Violin 2 " - - g2 f - e1 - - \bar "|." -} - -viola = \new Voice \relative c' { - \set Staff.instrumentName = #"Viola " - \clef alto - - e2 d - c1 - - \bar "|." -} - -cello = \new Voice \relative c' { - \set Staff.instrumentName = #"Cello " - \clef bass - - c2 b - a1 - - \bar "|." -} - -\score { - \new StaffGroup << - \new Staff << \global \violinOne >> - \new Staff << \global \violinTwo >> - \new Staff << \global \viola >> - \new Staff << \global \cello >> - >> - \layout { } - \midi { } -} - diff --git a/input/lsr/string-quartet-template-with-separate-parts.ly b/input/lsr/string-quartet-template-with-separate-parts.ly deleted file mode 100644 index 15925ec3a5..0000000000 --- a/input/lsr/string-quartet-template-with-separate-parts.ly +++ /dev/null @@ -1,181 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "unfretted-strings, template" - -%% Translation of GIT committish: d35687993883eb31442009fc50d5ae063108bfa7 - texidoces = " -El fragmento de código \"Plantilla de cuarteto de cuerda\" produce un -resultado satisfactorio para el cuarteto, pero ¿y si tenemos que -imprimir las particellas? Esta nueva plantilla muestra cómo usar la -funcionalidad @code{\\tag} (etiqueta) para dividir fácilmente una -pieza en particellas indicviduales. - -Tenemos que dividir esta plantilla en archivos independientes; los -nombres de archivo están dentro de los comentarios al principio de -cada archivo. @code{piece.ly} contiene todas las definiciones de -música. Los otros archivos (@code{score.ly}, @code{vn1.ly}, -@code{vn2.ly}, @code{vla.ly} y @code{vlc.ly}) producen la particella -correspondiente. - -¡No olvide quitar los comentarios que hemos especificado cuando use -los archivos independientes! - -" - doctitlees = "Plantilla de cuarteto de cuerda con particellas independientes" - -%% Translation of GIT committish: 17633f6b8681af86230aa84597fe7561e98c91d6 - texidocde = " -Mit diesem Beispiel können Sie ein schönes Streichquartett notieren, -aber wie gehen Sie vor, wenn Sie Stimmen brauchen? Das Beispiel -oben hat gezeigt, wie Sie mit Variablen einzelne Abschnitte getrennt -voneinander notieren können. Im nächsten Beispiel wird nun -gezeigt, wie Sie mit diesen Variablen einzelne Stimmen erstellen. - -Sie müssen das Beispiel in einzelne Dateien aufteilen; die Dateinamen -sind in den Kommentaren am Anfang jeder Datei enthalten. @code{piece.ly} -enthält die Noten. Die anderen Dateien -- @code{score.ly}, -@code{vn1.ly}, @code{vn2.ly}, @code{vla.ly} und -@code{vlc.ly} -- erstellen daraus die entsprechenden Stimmen bzw. die -Partitur (@code{score.ly}). Mit @code{\tag} wird den Stimmen ein Name -zugewiesen, auf den zurückgegriffen werden kann. -" - -%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae - texidocja = " -\"弦楽四重奏テンプレート\" は適切な弦楽四重奏の楽譜を作り出しますが、個々の@c -パート譜を譜刻する必要がある場合はどうでしょうか?今度の新しいテンプレートは -@code{@bs{}tag} 機能を用いて容易に楽曲を個々のパートに分ける方法を示しています。 - -このテンプレートは別々のファイルに分ける必要があります。ファイル名は各ファイル@c -の開始部分のコメントの中に記述されています。@code{piece.ly} はすべての音楽定義@c -を保持しています。他のファイル - @code{score.ly}, @code{vn1.ly}, @code{vn2.ly}, -@code{vla.ly} それに @code{vlc.ly} - は対応するパートを作り出します。 - - -別々のファイルに分ける場合は、指定されたコメントを外すことを忘れないでください! -" - - texidoc = " -The \"String quartet template\" snippet produces a nice string quartet, -but what if you needed to print parts? This new template demonstrates -how to use the @code{\\tag} feature to easily split a piece into -individual parts. - -You need to split this template into separate files; the filenames are -contained in comments at the beginning of each file. @code{piece.ly} -contains all the music definitions. The other files – @code{score.ly}, -@code{vn1.ly}, @code{vn2.ly}, @code{vla.ly}, and @code{vlc.ly} – -produce the appropriate part. - - -Do not forget to remove specified comments when using separate files! - -" - doctitle = "String quartet template with separate parts" -} % begin verbatim - -%%%%% piece.ly -%%%%% (This is the global definitions file) - -global= { - \time 4/4 - \key c \major -} - -Violinone = \new Voice { \relative c''{ - \set Staff.instrumentName = #"Violin 1 " - - c2 d e1 - -\bar "|." }} %********************************* -Violintwo = \new Voice { \relative c''{ - \set Staff.instrumentName = #"Violin 2 " - - g2 f e1 - -\bar "|." }} %********************************* -Viola = \new Voice { \relative c' { - \set Staff.instrumentName = #"Viola " - \clef alto - - e2 d c1 - -\bar "|." }} %********************************* -Cello = \new Voice { \relative c' { - \set Staff.instrumentName = #"Cello " - \clef bass - - c2 b a1 - -\bar "|."}} %********************************** - -music = { - << - \tag #'score \tag #'vn1 \new Staff { << \global \Violinone >> } - \tag #'score \tag #'vn2 \new Staff { << \global \Violintwo>> } - \tag #'score \tag #'vla \new Staff { << \global \Viola>> } - \tag #'score \tag #'vlc \new Staff { << \global \Cello>> } - >> -} - -%%% These are the other files you need to save on your computer - -%%%%% score.ly -%%%%% (This is the main file) - - -%\include "piece.ly" %%% uncomment this line when using a separate file -#(set-global-staff-size 14) -\score { - \new StaffGroup \keepWithTag #'score \music - \layout { } - \midi { } -} - - -%{ Uncomment this block when using separate files - -%%%%% vn1.ly -%%%%% (This is the Violin 1 part file) - -\include "piece.ly" -\score { - \keepWithTag #'vn1 \music - \layout { } -} - - -%%%%% vn2.ly -%%%%% (This is the Violin 2 part file) - -\include "piece.ly" -\score { - \keepWithTag #'vn2 \music - \layout { } -} - - -%%%%% vla.ly -%%%%% (This is the Viola part file) - -\include "piece.ly" -\score { - \keepWithTag #'vla \music - \layout { } -} - - -%%%%% vlc.ly -%%%%% (This is the Cello part file) - -\include "piece.ly" -\score { - \keepWithTag #'vlc \music - \layout { } -} - -%} - diff --git a/input/lsr/sub-dividing-beams.ly b/input/lsr/sub-dividing-beams.ly deleted file mode 100644 index 8aa437b80f..0000000000 --- a/input/lsr/sub-dividing-beams.ly +++ /dev/null @@ -1,90 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms" - -%% Translation of GIT committish: 151f1bb8c0aae8294e62d0470246ee1019aedfbc - texidoces = " -Las barras de semicorcheas (o notas más breves) seguidas no se -subdividen de forma predeterminada. Esto es: las tres (o más) -barras se prolongan, sin dividirse, sobre grupos completos de -notas. Este comportamiento se puede modificar para que las barras -se subdividan en subgrupos mediante el establecimiento de la -propiedad @code{subdivideBeams}. Cuando está establecida, las -diversas barras se subdividen a intervalos definidos por el valor -actual de la longitud del pulso @code{beatLength} reduciendo las -barras múltiples a una sola entre los subgrupos. Observe que el -valor predeterminado de @code{beatLength} es de una negra si no -está establecido explícitamente. Se debe establecer al valor de -una fracción que da la duración el subgrupo de barras utilizando -la función @code{make-moment}, como se muestra aquí: - -" - doctitlees = "Subdivisión de las barras de semicorchea" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Die Balken von aufeinanderfolgenden Sechszehnteln (oder kürzeren Notenwerten) -werden standardmäßig nicht unterteilt. Dieses Verhalten kann verändert -werden, sodass die Balken in Untergruppen aufgeteilt werden, indem man -die Eigenschaft @code{subdivideBeams} verändert. Man muss die Unterteilungsintervalle -als Notenbruch mit der @code{make-moment}-Funktion für @code{beatLength} angeben, -damit die Balken unterbrochen wird und nur ein Balken durchgezogen bleibt. Der -Standardwert für @code{beatLength} ist 1 / Zähler des aktuellen Taktes. - -" - doctitlede = "Balken in Untergruppen teilen" - - -%% Translation of GIT committish: b3196fadd8f42d05ba35e8ac42f7da3caf8a3079 - texidocfr = " -Les ligatures d'une succession de notes de durée inférieure à la croche -ne sont pas subdivisées par défaut. Autrement dit, tous les traits de -ligature seront continus. Ce comportement peut être modifié aafin de -diviser la ligature en sous-groupes grâce à la propriété -@code{subdivideBeams}. Lorsqu'elle est activée, les ligatures seront -subdivisées selon un intervalle défini par @code{beatLength} ; il n'y -aura alors plus qu'un seul trait de ligature entre chaque sous-groupe. -Par défaut, @code{beatLength} fixe la valeur de référence à une noire. -Il faudra donc lui fournir, à l'aide de la fonction @code{make-moment}, -une fraction correspondant au sous-groupe désiré, comme dans l'exemple -suivant. - -" - doctitlefr = "Subdivision des ligatures" - - texidoc = " -The beams of consecutive 16th (or shorter) notes are, by default, not -sub-divided. That is, the three (or more) beams stretch unbroken over -entire groups of notes. This behavior can be modified to sub-divide -the beams into sub-groups by setting the property -@code{subdivideBeams}. When set, multiple beams will be sub-divided at -intervals defined by the current value of @code{beatLength} by reducing -the multiple beams to just one beam between the sub-groups. Note that -@code{beatLength} defaults to one over the denominator of the current -time signature if not set explicitly. It must be set to a fraction -giving the duration of the beam sub-group using the @code{make-moment} -function, as shown here: - - - -" - doctitle = "Sub-dividing beams" -} % begin verbatim - -\relative c'' { - c32[ c c c c c c c] - \set subdivideBeams = ##t - c32[ c c c c c c c] - - % Set beam sub-group length to an eighth note - \set beatLength = #(ly:make-moment 1 8) - c32[ c c c c c c c] - - % Set beam sub-group length to a sixteenth note - \set beatLength = #(ly:make-moment 1 16) - c32[ c c c c c c c] -} - diff --git a/input/lsr/suppressing-warnings-for-clashing-note-columns.ly b/input/lsr/suppressing-warnings-for-clashing-note-columns.ly deleted file mode 100644 index 3d114acd62..0000000000 --- a/input/lsr/suppressing-warnings-for-clashing-note-columns.ly +++ /dev/null @@ -1,29 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "simultaneous-notes, tweaks-and-overrides" - - texidoc = " -If notes from two voices with stems in the same direction are placed at -the same position, and both voices have no shift or the same shift -specified, the error message \"warning: ignoring too many clashing note -columns\" will appear when compiling the LilyPond file. This message -can be suppressed by setting the @code{'ignore-collision} property of -the @code{NoteColumn} object to @code{#t}. - -" - doctitle = "Suppressing warnings for clashing note columns" -} % begin verbatim - -ignore = \override NoteColumn #'ignore-collision = ##t - -\relative c' { - << - \ignore - { \stemDown f2 g } - \\ - { c2 c, } - >> -} diff --git a/input/lsr/table-of-contents.ly b/input/lsr/table-of-contents.ly deleted file mode 100644 index e7f4b60303..0000000000 --- a/input/lsr/table-of-contents.ly +++ /dev/null @@ -1,36 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "paper-and-layout" - - texidoc = " -A table of contents is included using @code{\\markuplines -\\table-of-contents}. The TOC items are added with the -@code{\\tocItem} command. - -" - doctitle = "Table of contents" -} % begin verbatim - -#(set-default-paper-size "a6") - -\book { - \markuplines \table-of-contents - \pageBreak - \tocItem \markup { The first score } - \score { - { - c'1 \pageBreak - \mark "A" \tocItem \markup { Mark A } - d'1 - } - } - \pageBreak - \tocItem \markup { The second score } - \score { - { e'1 } - \header { piece = "Second score" } - } -} diff --git a/input/lsr/template-intro.itely b/input/lsr/template-intro.itely deleted file mode 100644 index 22c9952e84..0000000000 --- a/input/lsr/template-intro.itely +++ /dev/null @@ -1,5 +0,0 @@ -@node Templates -@unnumbered Templates - -@lysnippets - diff --git a/input/lsr/template.snippet-list b/input/lsr/template.snippet-list deleted file mode 100644 index 7c846c5347..0000000000 --- a/input/lsr/template.snippet-list +++ /dev/null @@ -1,19 +0,0 @@ -ancient-notation-template----modern-transcription-of-gregorian-music.ly -ancient-notation-template----modern-transcription-of-mensural-music.ly -jazz-combo-template.ly -orchestra,-choir-and-piano-template.ly -piano-template-simple.ly -piano-template-with-centered-dynamics.ly -piano-template-with-centered-lyrics.ly -piano-template-with-melody-and-lyrics.ly -score-for-diatonic-accordion.ly -single-staff-template-with-notes,-lyrics,-and-chords.ly -single-staff-template-with-notes,-lyrics,-chords-and-frets.ly -single-staff-template-with-notes-and-chords.ly -single-staff-template-with-notes-and-lyrics.ly -single-staff-template-with-only-notes.ly -string-quartet-template-simple.ly -string-quartet-template-with-separate-parts.ly -vocal-ensemble-template-with-automatic-piano-reduction.ly -vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly -vocal-ensemble-template.ly diff --git a/input/lsr/text-intro.itely b/input/lsr/text-intro.itely deleted file mode 100644 index eb71a4598e..0000000000 --- a/input/lsr/text-intro.itely +++ /dev/null @@ -1,7 +0,0 @@ -@node Text -@unnumbered Text - -@ruser{Text} - -@lysnippets - diff --git a/input/lsr/text.snippet-list b/input/lsr/text.snippet-list deleted file mode 100644 index 649e13cf62..0000000000 --- a/input/lsr/text.snippet-list +++ /dev/null @@ -1,31 +0,0 @@ -adding-the-current-date-to-a-score.ly -adjusting-lyrics-vertical-spacing.ly -aligning-and-centering-instrument-names.ly -aligning-marks-with-various-notation-objects.ly -aligning-objects-created-with-the--mark-command.ly -blanking-staff-lines-using-the--whiteout-command.ly -center-text-below-hairpin-dynamics.ly -changing-the-default-text-font-family.ly -combining-dynamics-with-markup-texts.ly -combining-two-parts-on-the-same-staff.ly -creating-real-parenthesized-dynamics.ly -creating-simultaneous-rehearsal-marks.ly -creating-text-spanners.ly -demonstrating-all-headers.ly -embedding-native-postscript-in-a--markup-block.ly -formatting-lyrics-syllables.ly -how-to-put-ties-between-syllables-in-lyrics.ly -lyrics-alignment.ly -markup-lines.ly -multi-measure-rest-markup.ly -ottava-text.ly -outputting-the-version-number.ly -piano-template-with-centered-lyrics.ly -printing-marks-at-the-end-of-a-line-or-a-score.ly -printing-marks-on-every-staff.ly -printing-text-from-right-to-left.ly -stand-alone-two-column-markup.ly -three-sided-box.ly -utf-8.ly -vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly -volta-text-markup-using-repeatcommands.ly diff --git a/input/lsr/three-sided-box.ly b/input/lsr/three-sided-box.ly deleted file mode 100644 index eaa321a8b1..0000000000 --- a/input/lsr/three-sided-box.ly +++ /dev/null @@ -1,52 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms, text" - - texidoc = " -This example shows how to add a markup command to get a three sided box -around some text (or other markup). - -" - doctitle = "Three-sided box" -} % begin verbatim - -% New command to add a three sided box, with sides north, west and south -% Based on the box-stencil command defined in scm/stencil.scm -% Note that ";" is used to comment a line in Scheme -#(define-public (NWS-box-stencil stencil thickness padding) - "Add a box around STENCIL, producing a new stencil." - (let* ((x-ext (interval-widen (ly:stencil-extent stencil 0) padding)) - (y-ext (interval-widen (ly:stencil-extent stencil 1) padding)) - (y-rule (make-filled-box-stencil (cons 0 thickness) y-ext)) - (x-rule (make-filled-box-stencil - (interval-widen x-ext thickness) (cons 0 thickness)))) -; (set! stencil (ly:stencil-combine-at-edge stencil X 1 y-rule padding)) - (set! stencil (ly:stencil-combine-at-edge stencil X -1 y-rule padding)) - (set! stencil (ly:stencil-combine-at-edge stencil Y 1 x-rule 0.0)) - (set! stencil (ly:stencil-combine-at-edge stencil Y -1 x-rule 0.0)) - stencil)) - -% The corresponding markup command, based on the \box command defined -% in scm/define-markup-commands.scm -#(define-markup-command (NWS-box layout props arg) (markup?) - "Draw a box round @var{arg}. Looks at @code{thickness}, -@code{box-padding} and @code{font-size} properties to determine line -thickness and padding around the markup." - (let* ((th (chain-assoc-get 'thickness props 0.1)) - (size (chain-assoc-get 'font-size props 0)) - (pad (* (magstep size) - (chain-assoc-get 'box-padding props 0.2))) - (m (interpret-markup layout props arg))) - (NWS-box-stencil m th pad))) - -% Test it: - -\layout { ragged-right = ##f } -\relative c' { - c2^\markup { \NWS-box ABCD } - c2^\markup { \NWS-box \note #"4" #1.0 } -} - diff --git a/input/lsr/tick-bar-lines.ly b/input/lsr/tick-bar-lines.ly deleted file mode 100644 index 470e41a5f6..0000000000 --- a/input/lsr/tick-bar-lines.ly +++ /dev/null @@ -1,23 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "staff-notation" - - texidoc = " -'Tick' bar lines are often used in music where the bar line is used -only for coordination and is not meant to imply any rhythmic stress. - -" - doctitle = "Tick bar lines" -} % begin verbatim - -\relative c' { - \set Score.defaultBarType = #"'" - c4 d e f - g4 f e d - c4 d e f - g4 f e d - \bar "|." -} diff --git a/input/lsr/time-signature-in-parentheses.ly b/input/lsr/time-signature-in-parentheses.ly deleted file mode 100644 index a7423fdb0c..0000000000 --- a/input/lsr/time-signature-in-parentheses.ly +++ /dev/null @@ -1,21 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "staff-notation, tweaks-and-overrides" - - texidoc = " -The time signature can be enclosed within parentheses. - -" - doctitle = "Time signature in parentheses" -} % begin verbatim - -\relative c'' { - \override Staff.TimeSignature #'stencil = #(lambda (grob) - (bracketify-stencil (ly:time-signature::print grob) Y 0.1 0.2 0.1)) - \time 2/4 - a4 b8 c -} - diff --git a/input/lsr/titles-intro.itely b/input/lsr/titles-intro.itely deleted file mode 100644 index 1d4c288f93..0000000000 --- a/input/lsr/titles-intro.itely +++ /dev/null @@ -1,7 +0,0 @@ -@node Titles -@unnumbered Titles - -@ruser{Titles and headers} - -@lysnippets - diff --git a/input/lsr/titles.snippet-list b/input/lsr/titles.snippet-list deleted file mode 100644 index 0b2c5c162f..0000000000 --- a/input/lsr/titles.snippet-list +++ /dev/null @@ -1,4 +0,0 @@ -adding-the-current-date-to-a-score.ly -aligning-and-centering-instrument-names.ly -demonstrating-all-headers.ly -outputting-the-version-number.ly diff --git a/input/lsr/transcription-of-ancient-music-with-incipit.ly b/input/lsr/transcription-of-ancient-music-with-incipit.ly deleted file mode 100644 index b5f30ade83..0000000000 --- a/input/lsr/transcription-of-ancient-music-with-incipit.ly +++ /dev/null @@ -1,292 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "ancient-notation, tweaks-and-overrides" - -%% Translation of GIT committish: aea975539ec44fd0f1a8fd25930b88b5ab64b53a - texidoces = " -A modo de alternativa para obtener auténticos «incipit» -independientes de la partitura principal, se incluyen como -elemento de marcado en el campo que se usa normalmente para el -nombre del instrumento. Por el momento, la letra sólo se puede -añadir como marcado directo. Por desgracia, su espaciado no es -análogo al de la letra principal. - -" - doctitlees = "Transcripción de música antigua con incipit" - - texidoc = " -As a workaround to get real incipits which are independent from the -main score these are included as a markup into the field normally used -for the instrument name. As for now lyrics can only be added as a -direct markup. It doesn't unfortunately conform with the spacing of the -main lyrics. - -" - doctitle = "Transcription of Ancient music with incipit" -} % begin verbatim - -global = { - \set Score.skipBars = ##t - \key g \major - \time 4/4 - - %make the staff lines invisible on staves - \override Staff.BarLine #'transparent = ##t - \skip 1*8 % the actual music - - % let finis bar go through all staves - \override Staff.BarLine #'transparent = ##f - - % finis bar - \bar "|." -} - - -discantusNotes = { - \transpose c' c'' { - \clef "treble" - d'2. d'4 | - b e' d'2 | - c'4 e'4.( d'8 c' b | - a4) b a2 | - b4.( c'8 d'4) c'4 | - \once \override NoteHead #'transparent = ##t c'1 | - b\breve | - } -} - -discantusLyrics = \lyricmode { - Ju -- bi -- | - la -- te De -- | - o, om -- - nis ter -- | - ra, __ om- | - "..." | - -us. | -} - -altusNotes = { - \transpose c' c'' { - \clef "treble" - r2 g2. e4 fis g | % two bars - a2 g4 e | - fis g4.( fis16 e fis4) | - g1 | - \once \override NoteHead #'transparent = ##t g1 | - g\breve | - } -} - -altusLyrics = \lyricmode { - Ju -- bi -- la -- te | % two bars - De -- o, om -- | - nis ter -- ra, | - "..." | - -us. | -} - -tenorNotes = { - \transpose c' c' { - \clef "treble_8" - R1 | - R1 | - R1 | - r2 d'2. d'4 b e' | % two bars - \once \override NoteHead #'transparent = ##t e'1 | - d'\breve | - } -} - -tenorLyrics = \lyricmode { - Ju -- bi -- la -- te | % two bars - "..." | - -us. -} - -bassusNotes = { - \transpose c' c' { - \clef "bass" - R1 | - R1 | - R1 | - R1 | - g2. e4 | - \once \override NoteHead #'transparent = ##t e1 | - g\breve | - } -} - -bassusLyrics = \lyricmode { - Ju -- bi- | - "..." | - -us. -} - -incipitDiscantus = \markup{ - \score{ - { - \set Staff.instrumentName="Discantus " - \override NoteHead #'style = #'neomensural - \override Rest #'style = #'neomensural - \override Staff.TimeSignature #'style = #'neomensural - \cadenzaOn - \clef "neomensural-c1" - \key f \major - \time 2/2 - c''1._"IV-" s2 %two bars - \skip 1*8 % eight bars - } - \layout { - \context {\Voice - \remove Ligature_bracket_engraver - \consists Mensural_ligature_engraver - } - line-width=4.5\cm - } - } -} - -incipitAltus = \markup{ - \score{ - { - \set Staff.instrumentName="Altus " - \override NoteHead #'style = #'neomensural - \override Rest #'style = #'neomensural - \override Staff.TimeSignature #'style = #'neomensural - \cadenzaOn - \clef "neomensural-c3" - \key f \major - \time 2/2 - r1 % one bar - f'1._"IV-" s2 % two bars - \skip 1*7 % seven bars - } - \layout { - \context {\Voice - \remove Ligature_bracket_engraver - \consists Mensural_ligature_engraver - } - line-width=4.5\cm - } - } -} - -incipitTenor = \markup{ - \score{ { - \set Staff.instrumentName = "Tenor " - \override NoteHead #'style = #'neomensural - \override Rest #'style = #'neomensural - \override Staff.TimeSignature #'style = #'neomensural - \cadenzaOn - \clef "neomensural-c4" - \key f \major - \time 2/2 - r\longa % four bars - r\breve % two bars - r1 % one bar - c'1._"IV-" s2 % two bars - \skip 1 % one bar - } - \layout { - \context {\Voice - \remove Ligature_bracket_engraver - \consists Mensural_ligature_engraver - } - line-width=4.5\cm -} -} -} - -incipitBassus = \markup{ - \score{ { - \set Staff.instrumentName = "Bassus " - \override NoteHead #'style = #'neomensural - \override Rest #'style = #'neomensural - \override Staff.TimeSignature #'style = #'neomensural - \cadenzaOn - \clef "bass" - \key f \major - \time 2/2 - % incipit - r\maxima % eight bars - f1._"IV-" s2 % two bars - } - \layout { - \context {\Voice - \remove Ligature_bracket_engraver - \consists Mensural_ligature_engraver - } - line-width=4.5\cm - } - } -} - -%StaffGroup is used instead of ChoirStaff to get bar lines between systems -\score { - << - \new StaffGroup = choirStaff << - \new Voice = - "discantusNotes" << \global - \set Staff.instrumentName=\incipitDiscantus - \discantusNotes >> - \new Lyrics = - "discantusLyrics" \lyricsto discantusNotes { \discantusLyrics } - - \new Voice = - "altusNotes" << \global - \set Staff.instrumentName=\incipitAltus - \altusNotes >> - \new Lyrics = - "altusLyrics" \lyricsto altusNotes { \altusLyrics } - - \new Voice = - "tenorNotes" << \global - \set Staff.instrumentName=\incipitTenor - \tenorNotes >> - \new Lyrics = - "tenorLyrics" \lyricsto tenorNotes { \tenorLyrics } - - \new Voice = - "bassusNotes" << \global - \set Staff.instrumentName=\incipitBassus - \bassusNotes >> - >> - \new Lyrics = - "bassusLyrics" \lyricsto bassusNotes { \bassusLyrics } - %Keep the bass lyrics outside of the staff group to avoid bar lines - %between the lyrics. - >> - - \layout { - \context { - \Score - - % no bars in staves - \override BarLine #'transparent = ##t - } - % the next three instructions keep the lyrics between the barlines - \context { \Lyrics - \consists "Bar_engraver" - \override BarLine #'transparent = ##t } - \context { \StaffGroup \consists "Separating_line_group_engraver" } - \context { - \Voice - - % no slurs - \override Slur #'transparent = ##t - - % Comment in the below "\remove" command to allow line - % breaking also at those barlines where a note overlaps - % into the next bar. The command is commented out in this - % short example score, but especially for large scores, you - % will typically yield better line breaking and thus improve - % overall spacing if you comment in the following command. - %\remove "Forbid_line_break_engraver" - } - indent=5\cm - } -} - diff --git a/input/lsr/transposing-pitches-with-minimum-accidentals-smart-transpose.ly b/input/lsr/transposing-pitches-with-minimum-accidentals-smart-transpose.ly deleted file mode 100644 index 44af17bbf7..0000000000 --- a/input/lsr/transposing-pitches-with-minimum-accidentals-smart-transpose.ly +++ /dev/null @@ -1,148 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "pitches" - -%% Translation of GIT committish: 4866dfd58d5c3a8cab4c6c06d5c4fca8e05a3cd7 -doctitlees = "Transportar música con el menor número de alteraciones" -texidoces = " -Este ejemplo utiliza código de Scheme para forzar las -modificaciones enarmónicas de las notas, y así tener el menor -número de alteraciones accidentales. En este caso se aplican las -siguientes reglas: - -@itemize -@item -Se quitan las dobles alteraciones - -@item -Si sostenido -> Do - -@item -Mi sistenido -> Fa - -@item -Do bemol -> Si - -@item -Fa bemol -> Mi - -@end itemize - -De esta forma se selecciona el mayor número de notas enarmónicas -naturales. - -" - -%% Translation of GIT committish: e75f1604a1b866c853dee42dbffcb7800c706a5f - doctitlede = "Noten mit minimaler Anzahl an Versetzungszeichen transponieren." - texidocde = "Dieses Beispiel benutzt Scheme-Code, um enharmonische -Verwechslungen für Noten zu erzwingen, damit nur eine minimale Anzahl -an Versetzungszeichen ausgegeben wird. In diesem Fall gelten die -folgenden Regeln: - -@itemize -@item -Doppelte Versetzungszeichen sollen entfernt werden - -@item -His -> C - -@item -Eis -> F - -@item -Ces -> B - -@item -Fes -> E - -@end itemize - -Auf diese Art werden am meisten natürliche Tonhöhen als enharmonische -Variante gewählt. -" - - - texidoc = " -This example uses some Scheme code to enforce enharmonic modifications -for notes in order to have the minimum number of accidentals. In this -case, the following rules apply: - -Double accidentals should be removed - - -B sharp -> C - - -E sharp -> F - - -C flat -> B - - -F flat -> E - - -In this manner, the most natural enharmonic notes are chosen. - -" - doctitle = "Transposing pitches with minimum accidentals (\"Smart\" transpose)" -} % begin verbatim - -#(define (naturalize-pitch p) - (let ((o (ly:pitch-octave p)) - (a (* 4 (ly:pitch-alteration p))) - ;; alteration, a, in quarter tone steps, - ;; for historical reasons - (n (ly:pitch-notename p))) - (cond - ((and (> a 1) (or (eq? n 6) (eq? n 2))) - (set! a (- a 2)) - (set! n (+ n 1))) - ((and (< a -1) (or (eq? n 0) (eq? n 3))) - (set! a (+ a 2)) - (set! n (- n 1)))) - (cond - ((> a 2) (set! a (- a 4)) (set! n (+ n 1))) - ((< a -2) (set! a (+ a 4)) (set! n (- n 1)))) - (if (< n 0) (begin (set! o (- o 1)) (set! n (+ n 7)))) - (if (> n 6) (begin (set! o (+ o 1)) (set! n (- n 7)))) - (ly:make-pitch o n (/ a 4)))) - -#(define (naturalize music) - (let ((es (ly:music-property music 'elements)) - (e (ly:music-property music 'element)) - (p (ly:music-property music 'pitch))) - (if (pair? es) - (ly:music-set-property! - music 'elements - (map (lambda (x) (naturalize x)) es))) - (if (ly:music? e) - (ly:music-set-property! - music 'element - (naturalize e))) - (if (ly:pitch? p) - (begin - (set! p (naturalize-pitch p)) - (ly:music-set-property! music 'pitch p))) - music)) - -naturalizeMusic = -#(define-music-function (parser location m) - (ly:music?) - (naturalize m)) - -music = \relative c' { c4 d e g } - -\score { - \new Staff { - \transpose c ais { \music } - \naturalizeMusic \transpose c ais { \music } - \transpose c deses { \music } - \naturalizeMusic \transpose c deses { \music } - } - \layout { } -} diff --git a/input/lsr/tweaking-clef-properties.ly b/input/lsr/tweaking-clef-properties.ly deleted file mode 100644 index 62737a728b..0000000000 --- a/input/lsr/tweaking-clef-properties.ly +++ /dev/null @@ -1,158 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "pitches, staff-notation, tweaks-and-overrides" - -%% Translation of GIT committish: 4866dfd58d5c3a8cab4c6c06d5c4fca8e05a3cd7 - doctitlees = "Trucaje de las propiedades de clave" - texidoces = " -La instrucción @code{\\clef \"treble_8\"} equivale a un ajuste de -@code{clefGlyph}, @code{clefPosition} (que controla la posición -vertical de la clave), @code{middleCPosition} y -@code{clefOctavation}. Se imprime una clave cada vez que se -modifica cualquiera de las propiedades excepto -@code{middleCPosition}. - -Observe que la modificación del glifo, la posición de la clave o -su octavación, no cambian 'per se' la posición de las siguientes -notas del pentagrama: para hacer esto también se debe especificar -la posición del Do central. Los parámetros posicionales están en -relación con la tercera línea del pentagrama, los números -positivos desplazan hacia arriba, contando una unidad por cada -línea y espacio. El valor de @code{clefOctavation} se -establecería normalmente a 7, -7, 15 or -15, pero son válidos -otros valores. - -Cuando se produce un cambio de clave en el salto de línea se -imprime la clave nueva tanto al final de la línea anterior como al -principio de la nueva, de forma predeterminada. Si no se necesita -la clave de advertencia al final de la línea anterior, se puede -quitar estableciendo el valor de la propiedad -@code{explicitClefVisibility} de @code{Staff}, a -@code{end-of-line-invisible}. El comportamiento predeterminado se -puede recuperar con @code{\\unset Staff.explicitClefVisibility}. - -Los siguientes ejemplos muestran las posibilidades cuando se -ajustan estas propiedades manualmente. En la primera línea, los -cambios manuales preservan el posicionamiento relativo estándar de -las claves y las notas, pero no lo hacen en la segunda línea. -" - -%% Translation of GIT committish: 2f4e16a76afee992a5f8d11e119667efe7238e7d - doctitlede = "Eigenschaften des Schlüssels optimieren" - texidocde = " -Der Befehl @code{\\clef \"treble_8\"} ist gleichbedeutend mit einem -expliziten Setzen der Eigenschaften von @code{clefGlyph}, -@code{clefPosition} (welche die vertikale Position des Schlüssels bestimmt), -@code{middleCPosition} und @code{clefOctavation}. Ein Schlüssel wird -ausgegeben, wenn eine der Eigenschaften außer @code{middleCPosition} sich -ändert. - -Eine Änderung des Schriftzeichens (Glyph), der Schlüsselposition oder der -Oktavierung selber ändert noch nicht die Position der darauf folgenden Noten -auf dem System: das geschieht nur, wenn auch die Position des -eingestrichenen@tie{}C (middleCPosition) angegeben wird. Die -Positionsparameter sind relativ zur Mittellinie des Systems, dabei versetzen -positive Zahlen die Position nach oben, jeweils eine Zahl für jede Linie -plus Zwischenraum. Der @code{clefOctavation}-Wert ist normalerweise auf 7, --7, 15 oder -15 gesetzt, aber auch andere Werte sind gültig. - -Wenn ein Schlüsselwechsel an einem Zeilenwechsel geschieht, wird das neue -Symbol sowohl am Ende der alten Zeilen als auch am Anfang der neuen Zeile -ausgegeben. Wenn der Warnungs-Schlüssel am Ende der alten Zeile nicht -erforderlich ist, kann er unterdrückt werden, indem die -@code{explicitClefVisibility}-Eigenschaft des @code{Staff}-Kontextes auf den -Wert @code{end-of-line-invisible} gesetzt wird. Das Standardverhalten kann -mit @code{\\unset Staff.explicitClefVisibility} wieder hergestellt werden. - -Die folgenden Beispiele zeigen die Möglichkeiten, wenn man diese -Eigenschaften manuell setzt. Auf der ersten Zeile erhalten die manuellen -Änderungen die ursprüngliche relative Positionierung von Schlüssel und -Noten, auf der zweiten Zeile nicht. -" - - texidoc = " -The command @code{\\clef \"treble_8\"} is equivalent to setting -@code{clefGlyph}, @code{clefPosition} (which controls the vertical -position of the clef), @code{middleCPosition} and -@code{clefOctavation}. A clef is printed when any of the properties -except @code{middleCPosition} are changed. - - -Note that changing the glyph, the position of the clef, or the -octavation does not in itself change the position of subsequent notes -on the staff: the position of middle C must also be specified to do -this. The positional parameters are relative to the staff center line, -positive numbers displacing upwards, counting one for each line and -space. The @code{clefOctavation} value would normally be set to 7, -7, -15 or -15, but other values are valid. - - -When a clef change takes place at a line break the new clef symbol is -printed at both the end of the previous line and the beginning of the -new line by default. If the warning clef at the end of the previous -line is not required it can be suppressed by setting the @code{Staff} -property @code{explicitClefVisibility} to the value -@code{end-of-line-invisible}. The default behavior can be recovered -with @code{\\unset Staff.explicitClefVisibility}. - -The following examples show the possibilities when setting these -properties manually. On the first line, the manual changes preserve the -standard relative positioning of clefs and notes, whereas on the second -line, they do not. - -" - doctitle = "Tweaking clef properties" -} % begin verbatim - -\layout { ragged-right = ##t } - -{ - % The default treble clef - c'1 - % The standard bass clef - \set Staff.clefGlyph = #"clefs.F" - \set Staff.clefPosition = #2 - \set Staff.middleCPosition = #6 - c'1 - % The baritone clef - \set Staff.clefGlyph = #"clefs.C" - \set Staff.clefPosition = #4 - \set Staff.middleCPosition = #4 - c'1 - % The standard choral tenor clef - \set Staff.clefGlyph = #"clefs.G" - \set Staff.clefPosition = #-2 - \set Staff.clefOctavation = #-7 - \set Staff.middleCPosition = #1 - c'1 - % A non-standard clef - \set Staff.clefPosition = #0 - \set Staff.clefOctavation = #0 - \set Staff.middleCPosition = #-4 - c'1 \break - - % The following clef changes do not preserve - % the normal relationship between notes and clefs: - - \set Staff.clefGlyph = #"clefs.F" - \set Staff.clefPosition = #2 - c'1 - \set Staff.clefGlyph = #"clefs.G" - c'1 - \set Staff.clefGlyph = #"clefs.C" - c'1 - \set Staff.clefOctavation = #7 - c'1 - \set Staff.clefOctavation = #0 - \set Staff.clefPosition = #0 - c'1 - - % Return to the normal clef: - - \set Staff.middleCPosition = #0 - c'1 -} - diff --git a/input/lsr/tweaking-grace-layout-within-music.ly b/input/lsr/tweaking-grace-layout-within-music.ly deleted file mode 100644 index f5f3ce9046..0000000000 --- a/input/lsr/tweaking-grace-layout-within-music.ly +++ /dev/null @@ -1,56 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms, tweaks-and-overrides" - -%% Translation of GIT committish: 5a33019d8b4a837f564eadd4979501ff07e9dfd5 - texidoces = " - -La disposición de las expresiones de adorno se puede cambiar a lo -largo de toda la música usando las funciones -@code{add-grace-property} y @code{remove-grace-property}. El -ejemplo siguiente borra la definición de la dirección de la plica -para esta nota de adorno, de manera que las plicas no siemmpre -apuntan hacia arriba, y cambia la forma predeterminada de las -cabezas a aspas. - -" - - doctitlees = "Trucar la disposición de las notas de adorno dentro de la música" - - -%% Translation of GIT committish: 13ac9d1dfbcc297166948ee396e9ade078d2446e - texidocde = " -Das Layout von Verzierungsausdrücken kann in der Musik verändert -werden mit den Funktionen @code{add-grace-property} und -@code{remove-grace-property}. Das folgende Beispiel definiert -die Richtung von Hälsen (Stem) für diese Verzierung, sodass die -Hälse nicht immer nach unten zeigen, und ändert den Standardnotenkopf -in ein Kreuz. -" - doctitlede = "Veränderung des Layouts von Verzierungen innerhalb der Noten" - - texidoc = " -The layout of grace expressions can be changed throughout the music -using the functions @code{add-grace-property} and -@code{remove-grace-property}. The following example undefines the -@code{Stem} direction for this grace, so that stems do not always point -up, and changes the default note heads to crosses. - -" - doctitle = "Tweaking grace layout within music" -} % begin verbatim - -\relative c'' { - \new Staff { - #(remove-grace-property 'Voice 'Stem 'direction) - #(add-grace-property 'Voice 'NoteHead 'style 'cross) - \new Voice { - \acciaccatura { f16 } g4 - \grace { d16[ e] } f4 - \appoggiatura { f,32[ g a] } e2 - } - } -} diff --git a/input/lsr/tweaks-and-overrides-intro.itely b/input/lsr/tweaks-and-overrides-intro.itely deleted file mode 100644 index d5308b5bf8..0000000000 --- a/input/lsr/tweaks-and-overrides-intro.itely +++ /dev/null @@ -1,11 +0,0 @@ -@node Tweaks and overrides -@unnumbered Tweaks and overrides - -@c FIXME make xref more precise when the chapter has been -@c revised in GDP -@ruser{Changing defaults} - -@rlearning{Tweaking output} - -@lysnippets - diff --git a/input/lsr/tweaks-and-overrides.snippet-list b/input/lsr/tweaks-and-overrides.snippet-list deleted file mode 100644 index 968e8ba340..0000000000 --- a/input/lsr/tweaks-and-overrides.snippet-list +++ /dev/null @@ -1,54 +0,0 @@ -analysis-brackets-above-the-staff.ly -avoiding-collisions-with-chord-fingerings.ly -caesura-railtracks-with-fermata.ly -changing-a-single-notes-size-in-a-chord.ly -changing-form-of-multi-measure-rests.ly -changing-properties-for-individual-grobs.ly -changing-the-default-text-font-family.ly -changing-the-staff-size.ly -controlling-the-vertical-ordering-of-scripts.ly -controlling-tuplet-bracket-visibility.ly -creating-a-delayed-turn.ly -creating-simultaneous-rehearsal-marks.ly -creating-text-spanners.ly -custodes.ly -customizing-fretboard-fret-diagrams.ly -customizing-markup-fret-diagrams.ly -display-bracket-with-only-one-staff-in-a-system.ly -dotted-harmonics.ly -drawing-boxes-around-grobs.ly -drawing-circles-around-various-objects.ly -fine-tuning-pedal-brackets.ly -forcing-horizontal-shift-of-notes.ly -fret-diagrams-explained-and-developed.ly -horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly -how-to-change-fret-diagram-position.ly -inserting-a-caesura.ly -line-arrows.ly -making-an-object-invisible-with-the-transparent-property.ly -manually-controlling-beam-positions.ly -mensurstriche-layout-bar-lines-between-the-staves.ly -nesting-staves.ly -percent-repeat-count-visibility.ly -positioning-multi-measure-rests.ly -positioning-text-markups-inside-slurs.ly -printing-a-repeat-sign-at-the-beginning-of-a-piece.ly -printing-bar-numbers-inside-boxes-or-circles.ly -printing-metronome-and-rehearsal-marks-below-the-staff.ly -proportional-strict-notespacing.ly -removing-the-first-empty-line.ly -rest-styles.ly -rhythmic-slashes.ly -separating-key-cancellations-from-key-signature-changes.ly -setting-hairpin-behavior-at-bar-lines.ly -specifying-context-with-beatgrouping.ly -suppressing-warnings-for-clashing-note-columns.ly -time-signature-in-parentheses.ly -transcription-of-ancient-music-with-incipit.ly -tweaking-clef-properties.ly -tweaking-grace-layout-within-music.ly -using-beatlength-and-beatgrouping.ly -using-postscript-to-generate-special-note-head-shapes.ly -using-the--tweak-command-to-tweak-individual-grobs.ly -vertically-aligned-dynamics-and-textscripts.ly -vertically-aligning-ossias-and-lyrics.ly diff --git a/input/lsr/unfretted-strings-intro.itely b/input/lsr/unfretted-strings-intro.itely deleted file mode 100644 index 4770fa7bec..0000000000 --- a/input/lsr/unfretted-strings-intro.itely +++ /dev/null @@ -1,7 +0,0 @@ -@node Unfretted strings -@unnumbered Unfretted strings - -@ruser{Unfretted string instruments} - -@lysnippets - diff --git a/input/lsr/unfretted-strings.snippet-list b/input/lsr/unfretted-strings.snippet-list deleted file mode 100644 index 3b2b16d62e..0000000000 --- a/input/lsr/unfretted-strings.snippet-list +++ /dev/null @@ -1,6 +0,0 @@ -changing--flageolet-mark-size.ly -creating-slurs-across-voices.ly -dotted-harmonics.ly -snap-pizzicato-markup-bartok-pizzicato.ly -string-quartet-template-simple.ly -string-quartet-template-with-separate-parts.ly diff --git a/input/lsr/use-square-bracket-at-the-start-of-a-staff-group.ly b/input/lsr/use-square-bracket-at-the-start-of-a-staff-group.ly deleted file mode 100644 index 2571ca3716..0000000000 --- a/input/lsr/use-square-bracket-at-the-start-of-a-staff-group.ly +++ /dev/null @@ -1,42 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "staff-notation, contexts-and-engravers" - -%% Translation of GIT committish: f39a9724d9f51ed9d0d464689ef62f549d7b8dd6 - texidoces = " -Se puede usar el delimitador de comienzo de un sistema -@code{SystemStartSquare} estableciéndolo explícitamente dentro de -un contexto @code{StaffGroup} o @code{ChoirStaffGroup}. - -" - doctitlees = "Uso del corchete recto al comienzo de un grupo de pentagramas" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Die Klammer zu Beginn von Systemgruppen kann auch in eine eckige Klammer -(@code{SystemStartSquare}) umgewandelt werden, wenn man sie explizit -im @code{StaffGroup}- oder @code{ChoirStaffGroup}-Kontext setzt. - -" - doctitlede = "Eine eckige Klammer zu Beginn von Systemgruppen benutzen" - - texidoc = " -The system start delimiter @code{SystemStartSquare} can be used by -setting it explicitly in a @code{StaffGroup} or @code{ChoirStaffGroup} -context. - -" - doctitle = "Use square bracket at the start of a staff group" -} % begin verbatim - -\score { - \new StaffGroup { << - \set StaffGroup.systemStartDelimiter = #'SystemStartSquare - \new Staff { c'4 d' e' f' } - \new Staff { c'4 d' e' f' } - >> } -} - diff --git a/input/lsr/using-beatlength-and-beatgrouping.ly b/input/lsr/using-beatlength-and-beatgrouping.ly deleted file mode 100644 index 12efda9dee..0000000000 --- a/input/lsr/using-beatlength-and-beatgrouping.ly +++ /dev/null @@ -1,90 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms, tweaks-and-overrides" - -%% Translation of GIT committish: 4f881627b3ff5eb538df5221ad77b73d0637aeb4 - texidoces = " -La propiedad @code{measureLength} determina dónde se deben insertar -líneas divisorias y, con @code{beatLength} y @code{beatGrouping}, cómo -se deben generar las barras autoomáticas para las duraciones de barra -y compases para los que no hay ninguna regla definida para los finales -de barra. Este ejemplo muestra distintas dormas de controlar el -barrado mediante el establecimiento de estas propiedades. Las -explicaciones están en forma de comentarios dentro del código. - -" - doctitlees = "Utilización de beatLength y beatGrouping" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Die Eigenschaft @code{measureLength} bestimmt, wo Taktstriche eingefügt -werden sollen und, zusammen mit @code{beatLength} und -@code{beatGrouping}, wie automtische Balken für Notenlängen und -Taktarten, für die keine definierten Regeln gefunden werden, gesetzt -werden sollen. Dieses Beispiel zeigt verschiedene Möglichkeiten, -die Balken zu kontrollieren, indem man diese Eigenschaften -beeinflusst. Die Erklärungen werden als Kommentare im Quellcode -gegeben. -" - doctitlede = "beatLength und beatGrouping benutzen" - -%% Translation of GIT committish: b3196fadd8f42d05ba35e8ac42f7da3caf8a3079 - texidocfr = " -La propriété @code{measureLength} détermine la pulsation et, combinée à -@code{beatLength} y @code{beatGrouping}, comment générer les ligatures -automatiques selon les durées et la métrique lorsqu'aucune règle n'a été -définie. L'exemple commenté qui suit indique différentes façons de -contrôler les ligatures à l'aide de ces propriétés. - -" - doctitlefr = "Utilisation conjointe de beatLength et beatGrouping" - - texidoc = " -The property @code{measureLength} determines where bar lines should be -inserted and, with @code{beatLength} and @code{beatGrouping}, how -automatic beams should be generated for beam durations and time -signatures for which no beam-ending rules are defined. This example -shows several ways of controlling beaming by setting these properties. -The explanations are shown as comments in the code. - -" - doctitle = "Using beatLength and beatGrouping" -} % begin verbatim - -\relative c'' { - \time 3/4 - % The default in 3/4 time is to beam in three groups - % each of a quarter note length - a16 a a a a a a a a a a a - - \time 12/16 - % No auto-beaming is defined for 12/16 - a16 a a a a a a a a a a a - - \time 3/4 - % Change time signature symbol, but retain underlying 3/4 beaming - \set Score.timeSignatureFraction = #'(12 . 16) - a16 a a a a a a a a a a a - - % The 3/4 time default grouping of (1 1 1) and beatLength of 1/8 - % are not consistent with a measureLength of 3/4, so the beams - % are grouped at beatLength intervals - \set Score.beatLength = #(ly:make-moment 1 8) - a16 a a a a a a a a a a a - - % Specify beams in groups of (3 3 2 3) 1/16th notes - % 3+3+2+3=11, and 11*1/16<>3/4, so beatGrouping does not apply, - % and beams are grouped at beatLength (1/16) intervals - \set Score.beatLength = #(ly:make-moment 1 16) - \set Score.beatGrouping = #'(3 3 2 3) - a16 a a a a a a a a a a a - - % Specify beams in groups of (3 4 2 3) 1/16th notes - % 3+4+2+3=12, and 12*1/16=3/4, so beatGrouping applies - \set Score.beatLength = #(ly:make-moment 1 16) - \set Score.beatGrouping = #'(3 4 2 3) - a16 a a a a a a a a a a a -} diff --git a/input/lsr/using-double-slurs-for-legato-chords.ly b/input/lsr/using-double-slurs-for-legato-chords.ly deleted file mode 100644 index 8193762123..0000000000 --- a/input/lsr/using-double-slurs-for-legato-chords.ly +++ /dev/null @@ -1,36 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks" - -%% Translation of GIT committish: dff50e8e1d3134657a6b6203b9c93826dc4cef65 - texidoces = " -Algunos compositores escriben dos ligaduras cuando quieren acordes -legato. Esto se puede conseguir estableciendo @code{doubleSlurs}. - -" - doctitlees = "Utilizar ligaduras dobles para acordes legato" - -%% Translation of GIT committish: 6ce7f350682dfa99af97929be1dec6b9f1cbc01a -texidocde = " -Einige Komponisten schreiben doppelte Bögen, wenn Legato-Akkorde notiert -werden. Das kann mit der Eigenschaft @code{doubleSlurs} erreicht werden. - -" - doctitlede = "Doppelte Bögen für Legato-Akkorde benutzen" - - texidoc = " -Some composers write two slurs when they want legato chords. This can -be achieved by setting @code{doubleSlurs}. - -" - doctitle = "Using double slurs for legato chords" -} % begin verbatim - -\relative c' { - \set doubleSlurs = ##t - 4( ) -} - diff --git a/input/lsr/using-grace-note-slashes-with-normal-heads.ly b/input/lsr/using-grace-note-slashes-with-normal-heads.ly deleted file mode 100644 index 50be0997aa..0000000000 --- a/input/lsr/using-grace-note-slashes-with-normal-heads.ly +++ /dev/null @@ -1,30 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms" - -%% Translation of GIT committish: 5a33019d8b4a837f564eadd4979501ff07e9dfd5 - texidoces = " - -Es posible aplicar la barrita que cruza la barra de las -acciaccaturas, en otras situaciones. - -" - - doctitlees = "Utilizar la barra que tacha las notas de adorno con notas normales" - - texidoc = " -The slash through the stem found in acciaccaturas can be applied in -other situations. - -" - doctitle = "Using grace note slashes with normal heads" -} % begin verbatim - -\relative c'' { - \override Stem #'stroke-style = #"grace" - c8( d2) e8( f4) -} - diff --git a/input/lsr/using-postscript-to-generate-special-note-head-shapes.ly b/input/lsr/using-postscript-to-generate-special-note-head-shapes.ly deleted file mode 100644 index 68fd252ce1..0000000000 --- a/input/lsr/using-postscript-to-generate-special-note-head-shapes.ly +++ /dev/null @@ -1,52 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "editorial-annotations, tweaks-and-overrides" - -%% Translation of GIT committish: 522d964c61521ed64f352c4774c4f2860f7ae5ec - texidocfr = " -Lorsqu'il est impossible d'obtenir facilement une allure particulière -pour les têtes de note en recourant à la technique du @code{\\markup}, un -code Postscript peut vous tirer d'embarras. Voici comment générer des -têtes ressemblant à des parallélogrammes. - -" - doctitlefr = "Utilisation de Postscript pour générer des têtes de note à l'allure particulière" - - texidoc = " -When a note head with a special shape cannot easily be generated with -graphic markup, PostScript code can be used to generate the shape. -This example shows how a parallelogram-shaped note head is generated. - -" - doctitle = "Using PostScript to generate special note head shapes" -} % begin verbatim - -parallelogram = - #(ly:make-stencil (list 'embedded-ps - "gsave - currentpoint translate - newpath - 0 0.25 moveto - 1.3125 0.75 lineto - 1.3125 -0.25 lineto - 0 -0.75 lineto - closepath - fill - grestore" ) - (cons 0 1.3125) - (cons 0 0)) - -myNoteHeads = \override NoteHead #'stencil = \parallelogram -normalNoteHeads = \revert NoteHead #'stencil - -\relative c'' { - \myNoteHeads - g4 d' - \normalNoteHeads - 4 d -} - - diff --git a/input/lsr/using-the--tweak-command-to-tweak-individual-grobs.ly b/input/lsr/using-the--tweak-command-to-tweak-individual-grobs.ly deleted file mode 100644 index 9a218f1501..0000000000 --- a/input/lsr/using-the--tweak-command-to-tweak-individual-grobs.ly +++ /dev/null @@ -1,26 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "tweaks-and-overrides" - - texidoc = " -With the @code{\\tweak} command, every grob can be tuned directly. -Here are some examples of available tweaks. - -" - doctitle = "Using the \\tweak command to tweak individual grobs" -} % begin verbatim - -\relative c' { - \time 2/4 - \set fingeringOrientations = #'(right) - < - \tweak #'font-size #3 c - \tweak #'color #red d-\tweak #'font-size #8 -4 - \tweak #'style #'cross g - \tweak #'duration-log #2 a - >2 -} - diff --git a/input/lsr/using-ties-with-arpeggios.ly b/input/lsr/using-ties-with-arpeggios.ly deleted file mode 100644 index e1e0af6fc6..0000000000 --- a/input/lsr/using-ties-with-arpeggios.ly +++ /dev/null @@ -1,65 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "rhythms" - -%% Translation of GIT committish: a634a20e0ab2a874ff8bf423e5651139df8733fc - doctitlees = "Uso de ligaduras en los arpegios" - texidoces = " -En ocasiones se usan ligaduras de unión para escribir los arpegios. -En este caso, las dos notas ligadas no tienen que ser consecutivas. -Esto se puede conseguir estableciendo la propiedad -@code{tieWaitForNote} al valor \"verdadero\". La misma funcionalidad -es de utilidad, por ejemplo, para ligar un trémolo a un acorde, pero -en principio, también se puede usar para notas normales consecutivas, -como se muestra en este ejemplo. - -" - -%% Translation of GIT committish: 6ce7f350682dfa99af97929be1dec6b9f1cbc01a - texidocde = " - Überbindungen werden teilweise benutzt, um Arpeggios zu notieren. In - diesem Fall stehen die übergebundenen Noten nicht unbedingt hintereinander. -Das Verhalten kann erreicht werden, indem die @code{tieWaitForNote}-Eigenschaft -auf @code{#t} gesetzt wird. Diese Funktion ist auch sinnvoll, um etwa -ein Tremolo mit einem Akkord zu überbinden, kann aber prinzipiell auch -für normale Überbindungen eingesetzt werden -" - doctitlede = "Überbingungen für Arpeggio genutzen" - - -%% Translation of GIT committish: e71f19ad847d3e94ac89750f34de8b6bb28611df - texidocfr = " -Les liaisons de tenue servent parfois à rendre un accord arpégé. Dans -ce cas, les notes liées ne sont pas toutes consécutives. Il faut alors -assigner à la propriété @code{tieWaitForNote} la valeur @code{#t} -(@emph{true} pour @qq{vrai}). Cette même méthode peut servir, par -exemple, à lier un trémolo à un accord. -" - doctitlefr = "Liaison de tenue et arpège" - - texidoc = " -Ties are sometimes used to write out arpeggios. In this case, two tied -notes need not be consecutive. This can be achieved by setting the -@code{tieWaitForNote} property to @code{#t}. The same feature is also -useful, for example, to tie a tremolo to a chord, but in principle, it -can also be used for ordinary consecutive notes. - -" - doctitle = "Using ties with arpeggios" -} % begin verbatim - -\relative c' { - \set tieWaitForNote = ##t - \grace { c16[ ~ e ~ g] ~ } 2 - \repeat tremolo 8 { c32 ~ c' ~ } 1 - e8 ~ c ~ a ~ f ~ 2 - \tieUp - c8 ~ a - \tieDown - \tieDotted - g8 ~ c g2 -} - diff --git a/input/lsr/utf-8.ly b/input/lsr/utf-8.ly deleted file mode 100644 index 618719061d..0000000000 --- a/input/lsr/utf-8.ly +++ /dev/null @@ -1,69 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "text" - - texidoc = " -Various scripts may be used for texts (like titles and lyrics) by -entering them in UTF-8 encoding, and using a Pango based backend. -Depending on the fonts installed, this fragment will render Bulgarian -(Cyrillic), Hebrew, Japanese and Portuguese. - -" - doctitle = "UTF-8" -} % begin verbatim - -% end verbatim - this comment is a hack to prevent texinfo.tex -% from choking on non-European UTF-8 subsets - -%% Edit this file using a Unicode aware editor, such as GVIM, GEDIT, Emacs - -%{ - -You may have to install additional fonts. - -Red Hat Fedora - - taipeifonts fonts-xorg-truetype ttfonts-ja fonts-arabic \ - ttfonts-zh_CN fonts-ja fonts-hebrew - -Debian GNU/Linux - - apt-get install emacs-intl-fonts xfonts-intl-.* \ - ttf-kochi-gothic ttf-kochi-mincho \ - xfonts-bolkhov-75dpi xfonts-cronyx-100dpi xfonts-cronyx-75dpi -%} - -% Cyrillic font -bulgarian = \lyricmode { - Жълтата дюля беше щастлива, че пухът, който цъфна, замръзна като гьон. -} - -hebrew = \lyricmode { - זה כיף סתם לשמוע איך תנצח קרפד עץ טוב בגן. -} - -japanese = \lyricmode { - いろはにほへど ちりぬるを - わがよたれぞ つねならむ - うゐのおくや まけふこえて - あさきゆめみじ ゑひもせず -} - -% "a legal song to you" -portuguese = \lyricmode { - à vo -- cê uma can -- ção legal -} - -\relative c' { - c2 d - e2 f - g2 f - e1 -} -\addlyrics { \bulgarian } -\addlyrics { \hebrew } -\addlyrics { \japanese } -\addlyrics { \portuguese } diff --git a/input/lsr/vertically-aligned-dynamics-and-textscripts.ly b/input/lsr/vertically-aligned-dynamics-and-textscripts.ly deleted file mode 100644 index 43ae0ea49d..0000000000 --- a/input/lsr/vertically-aligned-dynamics-and-textscripts.ly +++ /dev/null @@ -1,63 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "tweaks-and-overrides, spacing" - -%% Translation of GIT committish: a71dfe75d190e18a075443575d71140173829504 - texidoces = " -Mediante el establecimiento de la propiedad @code{Y-extent} a un valor -adecuado, todos los objetos @code{DynamicLineSpanner} (reguladores e -indicaciones dinámicas textuales) se pueden alinear con un punto de -referencia común, independientemente de sus dimensiones. De esta -manera, todos los elementos estarán alineados verticalmente, -produciendo así un resultado más satisfactorio. - -Se usa una idea similar para alinear las inscripciones de texto a lo -largo de su línea de base. - -" - doctitlees = "Indicaciones dinámicas y textuales alineadas verticalmente" - -%% Translation of GIT committish: 6ce7f350682dfa99af97929be1dec6b9f1cbc01a -texidocde = " -Indem man die @code{'Y-extent}-Eigenschaft auf einen passenden Wert setzt, -können alle @code{DynamicLineSpanner}-Objekte (Crescendo-Klammern und -Dynamik-Texte) (hairpins and dynamic texts) unabhängig von ihrer -wirklichen Ausdehnung an einem gemeinsamen Referenzpunkt ausgerichtet werden. -Auf diese Weise ist jedes Element vertikal ausgerichtet und der Notensatz -sieht ansprechender aus. - -Die gleiche Idee wird benutzt, um Textbeschriftungen an ihrer -Grundlinie auszurichten. - -" - doctitlede = "Vertikale Ausrichtung von Dynamik und Textbeschriftung beeinflussen" - - texidoc = " -By setting the @code{'Y-extent} property to a suitable value, all -@code{DynamicLineSpanner} objects (hairpins and dynamic texts) can be -aligned to a common reference point, regardless of their actual extent. -This way, every element will be vertically aligned, thus producing a -more pleasing output. - -The same idea is used to align the text scripts along their baseline. - -" - doctitle = "Vertically aligned dynamics and textscripts" -} % begin verbatim - -music = \relative c'' { - c2\p^\markup { gorgeous } c\f^\markup { fantastic } - c4\p c\f\> c c\!\p -} - -{ - \music \break - \override DynamicLineSpanner #'staff-padding = #2.0 - \override DynamicLineSpanner #'Y-extent = #'(-1.5 . 1.5) - \override TextScript #'Y-extent = #'(-1.5 . 1.5) - \music -} - diff --git a/input/lsr/vertically-aligning-dynamics-across-multiple-notes.ly b/input/lsr/vertically-aligning-dynamics-across-multiple-notes.ly deleted file mode 100644 index 2d0dc14ea5..0000000000 --- a/input/lsr/vertically-aligning-dynamics-across-multiple-notes.ly +++ /dev/null @@ -1,34 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "expressive-marks" - -%% Translation of GIT committish: dff50e8e1d3134657a6b6203b9c93826dc4cef65 - texidoces = " -Las expresiones dinámicas que se comienzan, terminan o se producen -en la misma nota se alinean verticalmente. Para asegurar que las -expresiones dinámicas se alinean cuando no se producen sobre la -misma nota, incremente la propiedad @code{staff-padding} del -objeto @code{DynamicLineSpanner}. - -" - doctitlees = "Alinear verticalmente expresiones dinámicas que abarcan varias notas" - - texidoc = " -Dynamics that occur at, begin on, or end on the same note will be -vertically aligned. To ensure that dynamics are aligned when they do -not occur on the same note, increase the @code{staff-padding} property -of the @code{DynamicLineSpanner} object. - -" - doctitle = "Vertically aligning dynamics across multiple notes" -} % begin verbatim - -\relative c' { - \override DynamicLineSpanner #'staff-padding = #4 - c2\p f\mf - g2\< b4\> c\! -} - diff --git a/input/lsr/vertically-aligning-ossias-and-lyrics.ly b/input/lsr/vertically-aligning-ossias-and-lyrics.ly deleted file mode 100644 index 1678a54895..0000000000 --- a/input/lsr/vertically-aligning-ossias-and-lyrics.ly +++ /dev/null @@ -1,63 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "vocal-music, tweaks-and-overrides, spacing" - -%% Translation of GIT committish: dcd61338c753205b6f8d549389fcb0d999c3a675 - texidoces = " -Este fragmento de código muestra el uso de las propiedades de -contexto @code{alignBelowContext} y @code{alignAboveContext} para -controlar la posición de la letra y los compases de ossia. - -" - doctitlees = "Alineación vertical de la letra y los compases de ossia" - -%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 - texidocde = " -Dieser Schnipsel zeigt, wie man die Kontexteigenschaften -@code{alignBelowContext} und @code{alignAboveContext} benutzen kann, um -die Positionierung von Gesangstext und Ossia-Abschnitten zu kontrollieren. - -" - doctitlede = "Gesangstext und Ossia vertikal ausrichten" - - texidoc = " -This snippet demonstrates the use of the context properties -@code{alignBelowContext} and @code{alignAboveContext} to control the -positioning of lyrics and ossias. - -" - doctitle = "Vertically aligning ossias and lyrics" -} % begin verbatim - -\paper { - ragged-right = ##t -} - -\relative c' << - \new Staff = "1" { c4 c s2 } - \new Staff = "2" { c4 c s2 } - \new Staff = "3" { c4 c s2 } - { \skip 2 - << - \lyrics { - \set alignBelowContext = #"1" - lyrics4 below - } - \new Staff \with { - alignAboveContext = #"3" - fontSize = #-2 - \override StaffSymbol #'staff-space = #(magstep -2) - \remove "Time_signature_engraver" - } { - \times 4/6 { - \override TextScript #'padding = #3 - c8[^"ossia above" d e d e f] - } - } - >> - } ->> - diff --git a/input/lsr/vertically-centered-common-lyrics.ly b/input/lsr/vertically-centered-common-lyrics.ly deleted file mode 100644 index b191d44c05..0000000000 --- a/input/lsr/vertically-centered-common-lyrics.ly +++ /dev/null @@ -1,56 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "vocal-music" - - texidoc = " -In a vocal piece where there are several (two,four or more) lines of -lyrics, and common lyrics for all voices at some point, these common -lyrics may be vertically centered regardingly, as shown in the -following example: - -" - doctitle = "Vertically centered common lyrics" -} % begin verbatim - -\include "english.ly" -leftbrace = \markup { \override #'(font-encoding . fetaBraces) \lookup #"brace240" } -rightbrace = \markup { \rotate #180 \leftbrace } - -dropLyrics = -{ - \override LyricText #'extra-offset = #'(0 . -5) - \override LyricHyphen #'extra-offset = #'(0 . -5) - \override LyricExtender #'extra-offset = #'(0 . -5) -} - -raiseLyrics = -{ - \revert LyricText #'extra-offset - \revert LyricHyphen #'extra-offset - \revert LyricExtender #'extra-offset -} - -skipFour = \repeat unfold 4 { \skip 8 } - -lyricsA = \lyricmode { The first verse has \dropLyrics the com -- mon -__ words \raiseLyrics used in all four. } -lyricsB = \lyricmode { In stan -- za two, \skipFour al -- so ap -- pear. } -lyricsC = \lyricmode { By the third verse, \skipFour are get -- ting dull. } -lyricsD = \lyricmode { Last stan -- za, and \skipFour get used once more. } - -melody = \relative c' { c4 d e f g f e8( e f) d4 c e d c } - -\score -{ - << - \new Voice = m \melody - \new Lyrics \lyricsto m \lyricsA - \new Lyrics \lyricsto m \lyricsB - \new Lyrics \lyricsto m \lyricsC - \new Lyrics \lyricsto m \lyricsD - >> -} - diff --git a/input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly b/input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly deleted file mode 100644 index ec20bbe012..0000000000 --- a/input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly +++ /dev/null @@ -1,127 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "vocal-music, keyboards, template" - -%% Translation of GIT committish: d35687993883eb31442009fc50d5ae063108bfa7 - texidoces = " -Esta plantilla añade una reducción de piano automática a la partitura -vocal SATB estándar que se mostró en la \"Plantilla de conjunto -vocal\". Esto presenta uno de los puntos fuertes de LilyPond: podemos -usar una definición de música más de una vez. Si se hace cualquier -cambio en las notas de la parte vocal (digamos @code{tenorMusic}), -entonces los cambios se aplicarán también a la reducción de piano. - -" - doctitlees = "Plantilla de conjunto vocal con reducción de piano automática" - -%% Translation of GIT committish: 17633f6b8681af86230aa84597fe7561e98c91d6 - texidocde = " -In diesem Beispiel wird ein automatischer Klavierauszug zu der -Chorpartitur hinzugefügt. Das zeigt eine der Stärken von LilyPond --- man kann eine Variable mehr als einmal benutzen. Wenn Sie -irgendeine Änderung an einer Chorstimme vornehmen, (etwa -tenorMusic), verändert sich auch der Klavierauszug entsprechend. -" - -%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae - texidocja = " -このテンプレートは、\"合唱テンプレート\"で示された標準の SATB ボーカル譜に自動@c -ピアノ譜を付け加えています。これは LilyPond の強みの 1 つを示しています - 音楽@c -定義を何回も使用することができます。ボーカルの音符 (例えば、@code{tenorMusic} -の音符) に変更が加えられた場合、その変更はピアノ譜にも適用されます。 -" - texidoc = " -This template adds an automatic piano reduction to the standard SATB -vocal score demonstrated in \"Vocal ensemble template\". This -demonstrates one of the strengths of LilyPond – you can use a music -definition more than once. If any changes are made to the vocal notes -(say, @code{tenorMusic}), then the changes will also apply to the piano -reduction. - -" - doctitle = "Vocal ensemble template with automatic piano reduction" -} % begin verbatim - -global = { - \key c \major - \time 4/4 -} - -sopMusic = \relative c'' { - c4 c c8[( b)] c4 -} -sopWords = \lyricmode { - hi hi hi hi -} - -altoMusic = \relative c' { - e4 f d e -} -altoWords =\lyricmode { - ha ha ha ha -} - -tenorMusic = \relative c' { - g4 a f g -} -tenorWords = \lyricmode { - hu hu hu hu -} - -bassMusic = \relative c { - c4 c g c -} -bassWords = \lyricmode { - ho ho ho ho -} - -\score { - << - \new ChoirStaff << - \new Lyrics = sopranos { s1 } - \new Staff = women << - \new Voice = sopranos { \voiceOne << \global \sopMusic >> } - \new Voice = altos { \voiceTwo << \global \altoMusic >> } - >> - \new Lyrics = altos { s1 } - \new Lyrics = tenors { s1 } - \new Staff = men << - \clef bass - \new Voice = tenors { \voiceOne <<\global \tenorMusic >> } - \new Voice = basses { \voiceTwo <<\global \bassMusic >> } - >> - \new Lyrics = basses { s1 } - \context Lyrics = sopranos \lyricsto sopranos \sopWords - \context Lyrics = altos \lyricsto altos \altoWords - \context Lyrics = tenors \lyricsto tenors \tenorWords - \context Lyrics = basses \lyricsto basses \bassWords - >> - \new PianoStaff << - \new Staff << - \set Staff.printPartCombineTexts = ##f - \partcombine - << \global \sopMusic >> - << \global \altoMusic >> - >> - \new Staff << - \clef bass - \set Staff.printPartCombineTexts = ##f - \partcombine - << \global \tenorMusic >> - << \global \bassMusic >> - >> - >> - >> - \layout { - \context { - % a little smaller so lyrics - % can be closer to the staff - \Staff - \override VerticalAxisGroup #'minimum-Y-extent = #'(-3 . 3) - } - } -} - diff --git a/input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly b/input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly deleted file mode 100644 index d5cbedb324..0000000000 --- a/input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly +++ /dev/null @@ -1,104 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "text, vocal-music, contexts-and-engravers, template" - -%% Translation of GIT committish: f39a9724d9f51ed9d0d464689ef62f549d7b8dd6 - texidoces = " -Esta plantilla es, básicamente, la misma que la sencilla plantilla -\"Conjunto vocal\", excepto que aquí todas las líneas de letra se -colocan utilizando @code{alignAboveContext} y -@code{alignBelowContext}. - -" - doctitlees = "Plantilla para conjunto vocal con letras alineadas encima y debajo de los pentagramas" - -%% Translation of GIT committish: 17633f6b8681af86230aa84597fe7561e98c91d6 - texidocde = " -In diesem Beispiel werden die Texte mit den Befehlen -@code{alignAboveContext} und @code{alignBelowContext} -über und unter dem System angeordnet. -" - -%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae - texidocja = " -このテンプレートは基本的に単純な \"合唱\" テンプレートと同じですが、歌詞が -@code{alignAboveContext} と @code{alignBelowContext} を用いて配置されています。 -" - - texidoc = " -This template is basically the same as the simple \"Vocal ensemble\" -template, with the exception that here all the lyrics lines are placed -using @code{alignAboveContext} and @code{alignBelowContext}. - -" - doctitle = "Vocal ensemble template with lyrics aligned below and above the staves" -} % begin verbatim - -global = { - \key c \major - \time 4/4 -} - -sopMusic = \relative c'' { - c4 c c8[( b)] c4 -} -sopWords = \lyricmode { - hi hi hi hi -} - -altoMusic = \relative c' { - e4 f d e -} -altoWords = \lyricmode { - ha ha ha ha -} - -tenorMusic = \relative c' { - g4 a f g -} -tenorWords = \lyricmode { - hu hu hu hu -} - -bassMusic = \relative c { - c4 c g c -} -bassWords = \lyricmode { - ho ho ho ho -} - -\score { - \new ChoirStaff << - \new Staff = women << - \new Voice = "sopranos" { \voiceOne << \global \sopMusic >> } - \new Voice = "altos" { \voiceTwo << \global \altoMusic >> } - >> - \new Lyrics \with { alignAboveContext = women } \lyricsto sopranos \sopWords - \new Lyrics \with { alignBelowContext = women } \lyricsto altos \altoWords - % we could remove the line about this with the line below, since we want - % the alto lyrics to be below the alto Voice anyway. - % \new Lyrics \lyricsto altos \altoWords - - \new Staff = men << - \clef bass - \new Voice = "tenors" { \voiceOne << \global \tenorMusic >> } - \new Voice = "basses" { \voiceTwo << \global \bassMusic >> } - >> - \new Lyrics \with { alignAboveContext = men } \lyricsto tenors \tenorWords - \new Lyrics \with { alignBelowContext = men } \lyricsto basses \bassWords - % again, we could replace the line above this with the line below. - % \new Lyrics \lyricsto basses \bassWords - >> - \layout { - \context { - % a little smaller so lyrics - % can be closer to the staff - \Staff - \override VerticalAxisGroup #'minimum-Y-extent = #'(-3 . 3) - } - } -} - diff --git a/input/lsr/vocal-ensemble-template.ly b/input/lsr/vocal-ensemble-template.ly deleted file mode 100644 index 9ecf40af53..0000000000 --- a/input/lsr/vocal-ensemble-template.ly +++ /dev/null @@ -1,118 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "vocal-music, template" - -%% Translation of GIT committish: d35687993883eb31442009fc50d5ae063108bfa7 - texidoces = " -He aquí una partitura vocal estándar para cuatro voces SATB. Con -grupos mayores, suele ser útil incluir una sección que aparezca en -todas las partes. Por ejemplo, el compás y la armadura casi siempre -son los mismos para todas. Como en la plantilla \"Himno\", las cuatro -voces se reagrupan en sólo dos pentagramas. - -" - doctitlees = "Plantilla de conjunto vocal" -%% Translation of GIT committish: 17633f6b8681af86230aa84597fe7561e98c91d6 - - texidocde = " -Dieses Beispiel ist für vierstimmigen Gesang (SATB). Bei größeren -Stücken ist es oft sinnvoll, eine allgemeine Variable zu bestimmen, -die in allen Stimmen eingefügt wird. Taktart und Vorzeichen etwa -sind fast immer gleich in allen Stimmen. -" - -%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae - texidocja = " -これは標準の 4 パート SATB (ソプラノ、アルト、テナー、バス) ボーカル譜です。@c -もっと大きな合唱では、すべてのパートで使用されるセクションをインクルードすると@c -便利です。例えば、拍子記号と調号はほとんど常にすべてのパートで同じです。\"賛美@c -歌\" テンプレートのように、4 つのボイスは 2 つの譜にグループ分けされています。" - - texidoc = " -Here is a standard four-part SATB vocal score. With larger ensembles, -it is often useful to include a section which is included in all parts. -For example, the time signature and key signature are almost always the -same for all parts. Like in the \"Hymn\" template, the four voices are -regrouped on only two staves. - -" - doctitle = "Vocal ensemble template" -} % begin verbatim - -global = { - \key c \major - \time 4/4 -} - -sopMusic = \relative c'' { - c4 c c8[( b)] c4 -} -sopWords = \lyricmode { - hi hi hi hi -} - -altoMusic = \relative c' { - e4 f d e -} -altoWords = \lyricmode { - ha ha ha ha -} - -tenorMusic = \relative c' { - g4 a f g -} -tenorWords = \lyricmode { - hu hu hu hu -} - -bassMusic = \relative c { - c4 c g c -} -bassWords = \lyricmode { - ho ho ho ho -} - -\score { - \new ChoirStaff << - \new Lyrics = sopranos { s1 } - \new Staff = women << - \new Voice = "sopranos" { - \voiceOne - << \global \sopMusic >> - } - \new Voice = "altos" { - \voiceTwo - << \global \altoMusic >> - } - >> - \new Lyrics = "altos" { s1 } - \new Lyrics = "tenors" { s1 } - \new Staff = men << - \clef bass - \new Voice = "tenors" { - \voiceOne - << \global \tenorMusic >> - } - \new Voice = "basses" { - \voiceTwo << \global \bassMusic >> - } - >> - \new Lyrics = basses { s1 } - \context Lyrics = sopranos \lyricsto sopranos \sopWords - \context Lyrics = altos \lyricsto altos \altoWords - \context Lyrics = tenors \lyricsto tenors \tenorWords - \context Lyrics = basses \lyricsto basses \bassWords - >> - \layout { - \context { - % a little smaller so lyrics - % can be closer to the staff - \Staff - \override VerticalAxisGroup #'minimum-Y-extent = #'(-3 . 3) - } - } -} - diff --git a/input/lsr/vocal-music-intro.itely b/input/lsr/vocal-music-intro.itely deleted file mode 100644 index fd192ae925..0000000000 --- a/input/lsr/vocal-music-intro.itely +++ /dev/null @@ -1,7 +0,0 @@ -@node Vocal music -@unnumbered Vocal music - -@ruser{Vocal music} - -@lysnippets - diff --git a/input/lsr/vocal-music.snippet-list b/input/lsr/vocal-music.snippet-list deleted file mode 100644 index 1a8ef8ebb1..0000000000 --- a/input/lsr/vocal-music.snippet-list +++ /dev/null @@ -1,21 +0,0 @@ -adding-ambitus-per-voice.ly -adjusting-lyrics-vertical-spacing.ly -ambitus-with-multiple-voices.ly -ambitus.ly -changing-stanza-fonts.ly -chant-or-psalms-notation.ly -formatting-lyrics-syllables.ly -how-to-put-ties-between-syllables-in-lyrics.ly -lyrics-alignment.ly -marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly -piano-template-with-melody-and-lyrics.ly -single-staff-template-with-notes,-lyrics,-and-chords.ly -single-staff-template-with-notes,-lyrics,-chords-and-frets.ly -single-staff-template-with-notes-and-lyrics.ly -skips-in-lyric-mode-2.ly -skips-in-lyric-mode.ly -vertically-aligning-ossias-and-lyrics.ly -vertically-centered-common-lyrics.ly -vocal-ensemble-template-with-automatic-piano-reduction.ly -vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly -vocal-ensemble-template.ly diff --git a/input/lsr/volta-below-chords.ly b/input/lsr/volta-below-chords.ly deleted file mode 100644 index 74e88222b0..0000000000 --- a/input/lsr/volta-below-chords.ly +++ /dev/null @@ -1,55 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "repeats, staff-notation, chords" - -%% Translation of GIT committish: 7e2910d2bc6167b10cfe328eb17a5f710f2a515a - texidoces = " -Mediante la adición del grabador @code{Volta_engraver} al -pentagrama pertinente, se pueden poner los corchetes de primera y -segunda vez debajo de los acordes. - -" - doctitlees = "Corchetes de primera y segunda vez debajo de los acordes" - - -%% Translation of GIT committish: 33f623301a41fcc53efadf96bca1c72834763415 - texidocde = " -Indem man den @code{Volta_engraver} zu dem entsprechenden Notensystem -hinzufügt, können Wiederholungsklammern unterhalb der Akkorde gesetzt -werden. - -" - doctitlede = "Wiederholungs-(Volta-)Klammern unterhalb der Akkordsymbole" - - texidoc = " -By adding the @code{Volta_engraver} to the relevant staff, volte can be -put under chords. - -" - doctitle = "Volta below chords" -} % begin verbatim - -\score { - << - \chords { - c1 - c1 - } - \new Staff \with { - \consists "Volta_engraver" - } - { - \repeat volta 2 { c'1 } - \alternative { c' } - } - >> - \layout { - \context { - \Score - \remove "Volta_engraver" - } - } -} diff --git a/input/lsr/volta-multi-staff.ly b/input/lsr/volta-multi-staff.ly deleted file mode 100644 index c0d7e752b6..0000000000 --- a/input/lsr/volta-multi-staff.ly +++ /dev/null @@ -1,36 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "repeats, staff-notation" - - texidoc = " -By adding the @code{Volta_engraver} to the relevant staff, volte can be -put over staves other than the topmost one in a score. - -" - doctitle = "Volta multi staff" -} % begin verbatim - -voltaMusic = \relative c'' { - \repeat volta 2 { - c1 - } - \alternative { - d1 - e - } -} - -<< - \new StaffGroup << - \new Staff \voltaMusic - \new Staff \voltaMusic - >> - \new StaffGroup << - \new Staff \with { \consists "Volta_engraver" } - \voltaMusic - \new Staff \voltaMusic - >> ->> diff --git a/input/lsr/volta-text-markup-using-repeatcommands.ly b/input/lsr/volta-text-markup-using-repeatcommands.ly deleted file mode 100644 index 5f725fed88..0000000000 --- a/input/lsr/volta-text-markup-using-repeatcommands.ly +++ /dev/null @@ -1,32 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.13.1" - -\header { - lsrtags = "repeats, text" - - texidoc = " -Though volte are best specified using @code{\\repeat volta}, the -context property @code{repeatCommands} must be used in cases where the -volta text needs more advanced formatting with @code{\\markup}. - -Since @code{repeatCommands} takes a list, the simplest method of -including markup is to use an identifier for the text and embed it in -the command list using the Scheme syntax @code{#(list (list 'volta -textIdentifier))}. Start- and end-repeat commands can be added as -separate list elements: - -" - doctitle = "Volta text markup using repeatCommands" -} % begin verbatim - -voltaAdLib = \markup { 1. 2. 3... \text \italic { ad lib. } } - -\relative c'' { - c1 - \set Score.repeatCommands = #(list (list 'volta voltaAdLib) 'start-repeat) - c4 b d e - \set Score.repeatCommands = #'((volta #f) (volta "4.") end-repeat) - f1 - \set Score.repeatCommands = #'((volta #f)) -} diff --git a/input/lsr/winds-intro.itely b/input/lsr/winds-intro.itely deleted file mode 100644 index 01c5671f6f..0000000000 --- a/input/lsr/winds-intro.itely +++ /dev/null @@ -1,7 +0,0 @@ -@node Winds -@unnumbered Winds - -@ruser{Wind instruments} - -@lysnippets - diff --git a/input/lsr/winds.snippet-list b/input/lsr/winds.snippet-list deleted file mode 100644 index d707cf7af7..0000000000 --- a/input/lsr/winds.snippet-list +++ /dev/null @@ -1 +0,0 @@ -flute-slap-notation.ly diff --git a/input/lsr/world-music-intro.itely b/input/lsr/world-music-intro.itely deleted file mode 100644 index 7dc01da4d3..0000000000 --- a/input/lsr/world-music-intro.itely +++ /dev/null @@ -1,7 +0,0 @@ -@node World music -@unnumbered World music - -@ruser{World music} - -@lysnippets - diff --git a/input/lsr/world-music.snippet-list b/input/lsr/world-music.snippet-list deleted file mode 100644 index ff88b90b47..0000000000 --- a/input/lsr/world-music.snippet-list +++ /dev/null @@ -1,3 +0,0 @@ -arabic-improvisation.ly -makam-example.ly -printing-text-from-right-to-left.ly diff --git a/input/manual/font-table.ly b/input/manual/font-table.ly index c8e0876b5d..b468deb016 100644 --- a/input/manual/font-table.ly +++ b/input/manual/font-table.ly @@ -1,5 +1,173 @@ #(set-global-staff-size 16) +#(begin + + ;; some helper functions + + (define (filter-out pred lst) + (filter (lambda (x) (not (pred x))) lst)) + + (define (filter-out-group glyph-list substring) + (filter-out (lambda (x) (string-contains x substring)) glyph-list)) + + (define (filter-out-groups glyph-list . substrings) + (let loop ((new glyph-list) (rem substrings)) + (if (null? rem) + new + (loop (filter-out-group new (car rem)) + (cdr rem))))) + + (define (get-group glyph-list substring) + (filter (lambda (x) (string-contains x substring)) glyph-list)) + + (define glyph-list + (delete ".notdef" + (ly:otf-glyph-list (ly:system-font-load "emmentaler-20")))) + + ;;;;;;;;; + + ;; define these 3 groups first since they're + ;; harder to get with (get-groups ...) + (define numbers + '("plus" "comma" "hyphen" "period" + "zero" "one" "two" "three" "four" + "five" "six" "seven" "eight" "nine")) + + (define default-noteheads + '("noteheads.uM2" "noteheads.dM2" "noteheads.sM1" + "noteheads.s0" "noteheads.s1" "noteheads.s2")) + + (define dynamics + '("space" "f" "m" "p" "r" "s" "z")) + + ;; remove them from the glyph-list + (for-each + (lambda (x) (set! glyph-list (delete x glyph-list))) + (append numbers + default-noteheads + dynamics)) + + ;;;;;;;;; + + ;; extract ancient-music groups before extracting default + ;; accidentals, rests, etc. to prevent duplication. + (define vaticana (get-group glyph-list "vaticana")) + (define medicaea (get-group glyph-list "medicaea")) + (define hufnagel (get-group glyph-list "hufnagel")) + (define neomensural (get-group glyph-list "neomensural")) + + ;; remove neomensural before defining mensural; otherwise, searching + ;; for "mensural" would return "neomensural" matches too. + (set! glyph-list + (filter-out-groups + glyph-list + "vaticana" + "medicaea" + "hufnagel" + "neomensural")) + + ;; get the rest of the ancient-music groups + (define mensural (get-group glyph-list "mensural")) + (define petrucci (get-group glyph-list "petrucci")) + (define solesmes (get-group glyph-list "solesmes")) + + ;; remove them from the glyph-list + (set! glyph-list + (filter-out-groups + glyph-list + "mensural" + "petrucci" + "solesmes")) + + ;; This would only get "rests.2classical". + ;; We're leaving it with the other rests for now. + ;; (define classical (get-group glyph-list "classical")) + ;; (set! glyph-list (filter-out-groups glyph-list "classical")) + + ;;;;;;;;; + + ;; get everything else except noteheads. + ;; * Some accidentals contain "slash" substring, so extract + ;; "accidentals" before extracting "slash" (noteheads). + ;; * Also use "pedal." not "pedal", for example, to prevent things + ;; like "scripts.upedalheel" ending up in the "pedal." list. + ;; * This doesn't apply to the ancient stuff because searching for + ;; "vaticana." (as an example) would miss things like + ;; "dots.dotvaticana" + (define clefs (get-group glyph-list "clefs.")) + (define timesig (get-group glyph-list "timesig.")) + (define accidentals (get-group glyph-list "accidentals.")) + (define rests (get-group glyph-list "rests.")) + (define flags (get-group glyph-list "flags.")) + (define dots (get-group glyph-list "dots.")) + (define scripts (get-group glyph-list "scripts.")) + (define arrowheads (get-group glyph-list "arrowheads.")) + (define brackettips (get-group glyph-list "brackettips.")) + (define pedal (get-group glyph-list "pedal.")) + (define accordion (get-group glyph-list "accordion.")) + + ;; remove them from the glyph-list + (set! glyph-list + (filter-out-groups + glyph-list + "clefs." + "timesig." + "accidentals." + "rests." + "flags." + "dots." + "scripts." + "arrowheads." + "brackettips." + "pedal." + "accordion.")) + + ;;;;;;;;; + + ;; get special noteheads + (define cross (get-group glyph-list "cross")) + (define diamond (get-group glyph-list "diamond")) + (define harmonic (get-group glyph-list "harmonic")) + (define slash (get-group glyph-list "slash")) + (define triangle (get-group glyph-list "triangle")) + (define xcircle (get-group glyph-list "xcircle")) + + (define special-noteheads + (append cross + diamond + harmonic + slash + triangle + xcircle)) + + ;; remove special noteheads from the glyph-list + (set! glyph-list + (filter-out-groups + glyph-list + "cross" + "diamond" + "harmonic" + "slash" + "triangle" + "xcircle")) + + ;; (lazy solution) + ;; any remaining glyphs containing "noteheads." should be shape-notes. + (define shape-note-noteheads (get-group glyph-list "noteheads.")) + + ;; remove shape-note-noteheads from the glyph-list + (set! glyph-list (filter-out-group glyph-list "noteheads.")) + + ;;;;;;;;; + + ;; simple debug test for any glyphs that didn't make it. + (if #f + (if (null? glyph-list) + (format #t "No glyphs are missing from the table.\n") + (format #t "You missed these glyphs: ~a\n" glyph-list))) + +) % end of (begin ...) + \paper { %% ugh. text on toplevel is a bit broken... @@ -54,7 +222,3 @@ (cons (make-line-markup (map make-doc-char-markup head)) acc))))) (interpret-markup-list layout props (doc-chars-aux names (list)))) - -\markuplines \override-lines #'(word-space . 4) - \doc-chars #(delete ".notdef" - (ly:otf-glyph-list (ly:system-font-load "emmentaler-20"))) diff --git a/input/manual/fretted-headword.ly b/input/manual/fretted-headword.ly index dc97841f20..f2d13ee0af 100644 --- a/input/manual/fretted-headword.ly +++ b/input/manual/fretted-headword.ly @@ -107,8 +107,9 @@ bass = \relative c { e,1 | % m. 4 %% new section starts here in A minor - #(revert-auto-beam-setting '(end 1 12 4 4) 1 4) - #(revert-auto-beam-setting '(end 1 12 4 4) 3 4) + \overrideBeamSettings #'Score #'(4 . 4) #'end + #'((* . (1 1 1 1)) + ((1 . 12) . (3 3 3 3))) \once \override TextScript #'staff-padding = #1.7 \times 2/3 { a8\p^\andantino e' a c a e a, e' a c a e } | % m. 5 diff --git a/input/mutopia/claop.py b/input/mutopia/claop.py index 8edd91fedf..92a8f7351d 100644 --- a/input/mutopia/claop.py +++ b/input/mutopia/claop.py @@ -275,7 +275,7 @@ stemme%s = { sys.stdout.write (r""" << \override Score.BarNumber #'padding = #2.5 - #(override-auto-beam-setting '(end * * * *) 1 4) + %#(override-auto-beam-setting '(end * * * *) 1 4) \set Score.skipBars = ##t \context StaffGroup << \override StaffGroup.Stem #'direction = #UP diff --git a/input/new/GNUmakefile b/input/new/GNUmakefile deleted file mode 100644 index bc32848ae7..0000000000 --- a/input/new/GNUmakefile +++ /dev/null @@ -1,7 +0,0 @@ -depth = ../.. - -STEPMAKE_TEMPLATES=documentation -EXTRA_DIST_FILES=README -EXTRA_DIST_FILES+=$(call src-wildcard,*.ly) - -include $(depth)/make/stepmake.make diff --git a/input/new/README b/input/new/README deleted file mode 100644 index 1b226cf95e..0000000000 --- a/input/new/README +++ /dev/null @@ -1,6 +0,0 @@ -This directory is for examples of new features in the current -unstable development series. These snippets will be added to LSR -when it supports a version of LilyPond that includes these features. - -See additional instructions in the Contributors' Guide, section -Adding and editing snippets. diff --git a/input/new/chordchanges-for-fretboards.ly b/input/new/chordchanges-for-fretboards.ly deleted file mode 100644 index 062f76cae8..0000000000 --- a/input/new/chordchanges-for-fretboards.ly +++ /dev/null @@ -1,23 +0,0 @@ -\version "2.13.0" - -\header { - lsrtags = "fretted-strings" - texidoc = "FretBoards can be set to display only when the chord changes -or at the beginning of a new line." - doctitle = "chordChanges for FretBoards" -} - -\include "predefined-guitar-fretboards.ly" - -myChords = \chordmode { - c1 c1 \break - \set chordChanges = ##t - c1 c1 \break - c1 c1 \break -} - -<< - \new ChordNames { \myChords } - \new FretBoards { \myChords } - \new Staff { \myChords } ->> diff --git a/input/new/making-slurs-with-complex-dash-structure.ly b/input/new/making-slurs-with-complex-dash-structure.ly deleted file mode 100644 index e2d1b8cff7..0000000000 --- a/input/new/making-slurs-with-complex-dash-structure.ly +++ /dev/null @@ -1,36 +0,0 @@ -\version "2.13.1" - -\header { - lsrtags = "rhythms, expressive-marks" - texidoc = " -Slurs can be made with complex dash patterns by defining -the @code{dash-definition} property. @code{dash-definition} -is a list of @code{dash-elements}. A @code{dash-element} is a -list of parameters defining the dash behavior for a segment of -the slur. - -The slur is defined in terms of the bezier parameter t -which ranges from 0 -at the left end of the slur to 1 at the right end of the slur. -@code{dash-element} is a list @code{(start-t stop-t dash-fraction -dash-period)}. The region of the slur from @code{start-t} to -@code{stop-t} will have a fraction @code{dash-fraction} -of each @code{dash-period} black. @code{dash-period} is -defined in terms of staff spaces. @code{dash-fraction} is -set to 1 for a solid slur. -" - doctitle = "Making slurs with complex dash structure" -} - -\relative c' { - \once \override - Slur #'dash-definition = #'((0 0.3 0.1 0.75) - (0.3 0.6 1 1) - (0.65 1.0 0.4 0.75)) - c( d e f) - \once \override - Slur #'dash-definition = #'((0 0.25 1 1) - (0.3 0.7 0.4 0.75) - (0.75 1.0 1 1)) - c( d e f) -} diff --git a/input/new/non-default-tuplet-numbers.ly b/input/new/non-default-tuplet-numbers.ly deleted file mode 100644 index c72ee01b72..0000000000 --- a/input/new/non-default-tuplet-numbers.ly +++ /dev/null @@ -1,41 +0,0 @@ -\version "2.13.1" - -\header { - lsrtags = "rhythms" - - texidoc = " -LilyPond also provides formatting functions to print tuplet numbers different -than the actual fraction, as well as to append a note value to the tuplet -number or tuplet fraction. -" - doctitle = "Non-default tuplet numbers" -} - -\relative c'' { - \once \override TupletNumber #'text = - #(tuplet-number::non-default-tuplet-denominator-text 7) - \times 2/3 { c4. c4. c4. c4. } - \once \override TupletNumber #'text = - #(tuplet-number::non-default-tuplet-fraction-text 12 7) - \times 2/3 { c4. c4. c4. c4. } - \once \override TupletNumber #'text = - #(tuplet-number::append-note-wrapper - (tuplet-number::non-default-tuplet-fraction-text 12 7) "8") - \times 2/3 { c4. c4. c4. c4. } - - \once \override TupletNumber #'text = - #(tuplet-number::append-note-wrapper - tuplet-number::calc-denominator-text "4") - \times 2/3 { c8 c8 c8 c8 c8 c8 } - \once \override TupletNumber #'text = - #(tuplet-number::append-note-wrapper - tuplet-number::calc-fraction-text "4") - \times 2/3 { c8 c8 c8 c8 c8 c8 } - - \once \override TupletNumber #'text = - #(tuplet-number::fraction-with-notes "4." "8") - \times 2/3 { c4. c4. c4. c4. } - \once \override TupletNumber #'text = - #(tuplet-number::non-default-fraction-with-notes 12 "8" 4 "4") - \times 2/3 { c4. c4. c4. c4. } -} diff --git a/input/new/non-traditional-key-signatures.ly b/input/new/non-traditional-key-signatures.ly deleted file mode 100644 index b0f2a629b3..0000000000 --- a/input/new/non-traditional-key-signatures.ly +++ /dev/null @@ -1,36 +0,0 @@ -\version "2.13.0" - -\header { - lsrtags = "pitches, staff-notation" - texidoc = " -The commonly used @code{\\key} command sets the @code{keySignature} -property, in the @code{Staff} context. - -To create non-standard key signatures, set this property directly. The -format of this command is a list: - -@code{\\set Staff.keySignature = #`(((octave . step) . alter) ((octave -. step) . alter) ...)} where, for each element in the list, -@code{octave} specifies the octave (0@tie{}being the octave from -middle@tie{}C to the B above), @code{step} specifies the note within the -octave (0@tie{}means@tie{}C and 6@tie{}means@tie{}B), and @code{alter} is -@code{,SHARP ,FLAT ,DOUBLE-SHARP} etc. (Note the leading comma.) - -Alternatively, for each item in the list, using the more concise format -@code{(step . alter)} specifies that the same alteration should hold in all -octaves. - -Here is an example of a possible key signature for generating a whole-tone -scale: -" - doctitle = "Non-traditional key signatures" -} - -\relative c' { - \set Staff.keySignature = #`(((0 . 6) . ,FLAT) - ((0 . 5) . ,FLAT) - ((0 . 3) . ,SHARP)) - c4 d e fis - aes4 bes c2 -} - diff --git a/input/regression/alignment-vertical-manual-setting.ly b/input/regression/alignment-vertical-manual-setting.ly index b176e931ce..b7f30c719c 100644 --- a/input/regression/alignment-vertical-manual-setting.ly +++ b/input/regression/alignment-vertical-manual-setting.ly @@ -1,12 +1,12 @@ \header { texidoc = "Alignments may be changed pre system by setting - @code{alignment-offsets} in the @code{line-break-system-details} + @code{alignment-distances} in the @code{line-break-system-details} property" } -\version "2.12.0" +\version "2.13.2" \book { \score { @@ -17,17 +17,17 @@ \overrideProperty #"Score.NonMusicalPaperColumn" #'line-break-system-details - #'((alignment-offsets . (#f #f -30))) + #'((alignment-distances . (#f 20))) c1 \break \overrideProperty #"Score.NonMusicalPaperColumn" #'line-break-system-details - #'((alignment-offsets . (0 -5 -20))) + #'((alignment-distances . (5 15))) c1 \break \overrideProperty #"Score.NonMusicalPaperColumn" #'line-break-system-details - #'((alignment-offsets . (0 -15 -20))) + #'((alignment-distances . (15 5))) c1 c } >> diff --git a/input/regression/alignment-vertical-spacing.ly b/input/regression/alignment-vertical-spacing.ly deleted file mode 100644 index 2140e3754e..0000000000 --- a/input/regression/alignment-vertical-spacing.ly +++ /dev/null @@ -1,51 +0,0 @@ - -\header { - - texidoc = "By setting properties in @code{NonMusicalPaperColumn}, vertical -spacing of alignments can be adjusted per system. - -By setting @code{alignment-extra-space} or -@code{fixed-alignment-extra-space} an individual system may be -stretched vertically. - -For technical reasons, @code{overrideProperty} has to be used for -setting properties on individual object. @code{\override} in a -@code{\context} block may still be used for global overrides. - -" - -} - -\version "2.12.0" - -#(set-global-staff-size 13) - -\relative c'' -\new StaffGroup << - \new Staff { - c1\break - c\break c\break - } - \new Staff { c1 c c } - \new PianoStaff << - \new Voice { - \set PianoStaff.instrumentName = #"piano" - \set PianoStaff.shortInstrumentName = #"pn" - c1_"normal" - - \overrideProperty - #"Score.NonMusicalPaperColumn" - #'line-break-system-details - #'((fixed-alignment-extra-space . 15)) - c_"fixed-aligment-extra-space" - - \overrideProperty - #"Score.NonMusicalPaperColumn" - #'line-break-system-details - #'((alignment-extra-space . 15)) - c_"aligment-extra-space" - } - { c1 c c } - >> ->> - diff --git a/input/regression/auto-beam-beat-grouping.ly b/input/regression/auto-beam-beat-grouping.ly deleted file mode 100644 index 1a9761d2db..0000000000 --- a/input/regression/auto-beam-beat-grouping.ly +++ /dev/null @@ -1,30 +0,0 @@ -\version "2.12.0" -\header { - - texidoc = "Autobeaming will break beams according to beatGrouping -if the total length of the beat groups is equal to measureLength. -Otherwise, it will break beams according to beatLength." -} - -{ - \time 12/16 - - % default beatLength is 1/16; beatGrouping for this time is '() - b16 b b b b b b b b b b b % beatlength is used to breatk these beams - % use beatGrouping to get 1/8 groups - \set Timing.beatGrouping = #'(2 2 2 2 2 2) % 6*2 = 12 so beatGrouping applies - b16 b b b b b b b b b b b % beam groups are 1/8 - % use beatLength to get 1/8 groups -- beatGrouping no longer applies - \set Score.beatLength = #(ly:make-moment 2 16 ) % 12*2/16 = 24/16 - % bad beatGrouping; use - % beatLength (1/8 notes) - b16 b b b b b b b b b b b - % make custom beatGrouping - \set Timing.beatGrouping = #'(3 1 2) % 6*2/16 = 12/16 - b16 b b b b b b b b b b b - % change beatLength - \set Score.beatLength = #(ly:make-moment 3 16 ) % 6*3/16 = 18/16; use beatLength - b16 b b b b b b b b b b b - \set Score.beatLength = #(ly:make-moment 4 16 ) % 6*4/16 = 24/16; use beatLength - b16 b b b b b b b b b b b -} diff --git a/input/regression/beam-beat-grouping.ly b/input/regression/beam-beat-grouping.ly index e3af9219b5..2be98d88bd 100644 --- a/input/regression/beam-beat-grouping.ly +++ b/input/regression/beam-beat-grouping.ly @@ -1,18 +1,19 @@ \header { - texidoc = "Beaming patterns obey the @code{beatGrouping} property. " + texidoc = "Default beaming patterns can be set for the current time +signature by @code{\\setBeatGrouping}. " } \layout { ragged-right = ##t } -\version "2.12.0" +\version "2.13.4" \relative c'' { \time 5/16 - \set beatGrouping = #'(2 3) + \setBeatGrouping #'(2 3) c8[^"(2+3)" c16 c8] - \set beatGrouping = #'(3 2) + \setBeatGrouping #'(3 2) c8[^"(3+2)" c16 c8] } diff --git a/input/regression/dead-notes.ly b/input/regression/dead-notes.ly new file mode 100644 index 0000000000..253fdd5bf3 --- /dev/null +++ b/input/regression/dead-notes.ly @@ -0,0 +1,26 @@ +\version "2.13.4" + +\header{ texidoc = "Muted notes (also called dead notes) are supported + within normal staves and tablature." + } + +deadnotes = \relative c,, { + e8. \deadNotesOn e16 \deadNotesOff g4 a b | + e8. \deadNote e16 g4 a b | + e,4. \deadNote { e8 e e } e4 | + < e, \deadNote b' e >8 < e \deadNote b' e > < e \deadNote b' e >4 < e \deadNote b' e >4 r + \bar "|." +} + +\context StaffGroup << + \context Staff << + \clef "bass_8" + \deadnotes + >> + \context TabStaff << + \set TabStaff.stringTunings = #bass-tuning + \deadnotes + >> +>> + + diff --git a/input/regression/display-lily-tests.ly b/input/regression/display-lily-tests.ly index f8e49a1cb3..80d41549ee 100644 --- a/input/regression/display-lily-tests.ly +++ b/input/regression/display-lily-tests.ly @@ -124,7 +124,7 @@ stderr of this run." \test "" ##[ { c-1 c^2 c_3 } #] % FingerEvent \test "" ##[ { c-"foo" c^"foo" c_"foo" } #] % TextScriptEvent \test "" ##[ { R1*4-"foo" R^"foo" R_"foo" } #] % MultiMeasureTextEvent -\test "" ##[ { c4-\harmonic c^\harmonic c_\harmonic } #] % HarmonicEvent +\test "" ##[ { < c\harmonic >4 < c e\harmonic > } #] % HarmonicEvent \test "" ##[ { c-\glissando c^\glissando c_\glissando } #] % GlissandoEvent \test "" ##[ { c-\arpeggio c^\arpeggio c_\arpeggio } #] % ArpeggioEvent \test "" ##[ { c\p c^\ff c_\sfz } #] % AbsoluteDynamicEvent diff --git a/input/regression/markup-brace-warning.ly b/input/regression/markup-brace-warning.ly new file mode 100644 index 0000000000..2646a798ae --- /dev/null +++ b/input/regression/markup-brace-warning.ly @@ -0,0 +1,17 @@ +\version "2.13.4" + +#(ly:set-option 'warning-as-error #f) + +\header { + texidoc = "If @code{\\left-brace} or @code{\\right-brace} cannot +find a match for the given point size, it should default +gracefully to either @code{brace0} or @code{brace575} and display +a warning. +" +} + +\markup { + % warning message expected; should default to 10.5 pt for + % global-staff-size = 20 + \left-brace #10 +} diff --git a/input/regression/markup-braces.ly b/input/regression/markup-braces.ly new file mode 100644 index 0000000000..2ef0406a06 --- /dev/null +++ b/input/regression/markup-braces.ly @@ -0,0 +1,15 @@ +\version "2.13.4" + +\header { + texidoc = "The markup command @code{\\left-brace} selects a +@code{fetaBraces} glyph based on point size, using a binary search. +@code{\\right-brace} is simply a @code{\\left-brace} rotated 180 +degrees. +" +} + +\markup { + \left-brace #30 + \hspace #2 + \right-brace #40 +} diff --git a/input/regression/modern-tab-clef-scaled.ly b/input/regression/modern-tab-clef-scaled.ly new file mode 100644 index 0000000000..12caf11139 --- /dev/null +++ b/input/regression/modern-tab-clef-scaled.ly @@ -0,0 +1,39 @@ +\version "2.13.4" + +\header{ texidoc = "The sans serif style tab clef is automatically adjusted to + different string spacings." + } + +guitar = \relative c { + c4 d e f + e4 d c2 +} + +\score { + << + \new Staff { + \clef "treble_8" + \guitar + } + \new TabStaff { + \clef "moderntab" + \set TabStaff.stringTunings = #guitar-tuning + \guitar + } + >> +} + +\score { + << + \new Staff { + \clef "treble_8" + \guitar + } + \new TabStaff { + \clef "moderntab" + \set TabStaff.stringTunings = #guitar-tuning + \override TabStaff.StaffSymbol #'staff-space = #1.0 % default value is 1.5 + \guitar + } + >> +} \ No newline at end of file diff --git a/input/regression/modern-tab-clef.ly b/input/regression/modern-tab-clef.ly new file mode 100644 index 0000000000..d95fb23bcb --- /dev/null +++ b/input/regression/modern-tab-clef.ly @@ -0,0 +1,44 @@ +\version "2.13.4" + +\header{ texidoc = "Sans serif style tab clefs are supported by @code{\\clef moderntab}. + This alternative clef supports four- to seven-stringed instruments + and is scaled automatically." + } + +bass = \relative c, { + c4 d e f + e4 d c2 +} + +guitar = \relative c { + c4 d e f + e4 d c2 +} + +\score { + << + \new Staff { + \clef "bass_8" + \bass + } + \new TabStaff { + \clef "moderntab" + \set TabStaff.stringTunings = #bass-four-string-tuning + \bass + } + >> +} + +\score { + << + \new Staff { + \clef "treble_8" + \guitar + } + \new TabStaff { + \clef "moderntab" + \set TabStaff.stringTunings = #guitar-seven-string-tuning + \guitar + } + >> +} \ No newline at end of file diff --git a/input/regression/page-layout-twopass.ly b/input/regression/page-layout-twopass.ly deleted file mode 100644 index c1e93dfc1d..0000000000 --- a/input/regression/page-layout-twopass.ly +++ /dev/null @@ -1,32 +0,0 @@ -\header -{ - texidoc = "Page breaking details can be stored for later reference." -} - -\version "2.12.0" - -\paper { - #(define write-page-layout #t) -} -bla = \new Staff { - c1 c1 - \break - \grace { c16 } c1\break - \repeat unfold 5 \relative { c1 c1 c1 } -} - - -\book { - \score { - \bla - \layout { - #(define tweak-key "blabla") - } - } -} - -tweakFileName = #(format "~a-page-layout.ly" (ly:parser-output-name parser)) - -#(newline) - -#(ly:progress "Contents of: '~a'" (ly:gulp-file tweakFileName)) diff --git a/input/regression/page-spacing-bottom-spring.ly b/input/regression/page-spacing-bottom-spring.ly new file mode 100644 index 0000000000..f7802af043 --- /dev/null +++ b/input/regression/page-spacing-bottom-spring.ly @@ -0,0 +1,20 @@ +\version "2.13.2" +#(set-default-paper-size "a6") + +\book { + \header { + texidoc = "The spring at the bottom of a page is fairly flexible (much more so +than the one at the top), so it does not drag the staff to the bottom of the +page. However, it is sufficiently stiff to cause stretching." + } + + \paper { + ragged-last-bottom = ##f + } + + \new StaffGroup + << + \new Staff c'1 + \new Staff c'1 + >> +} \ No newline at end of file diff --git a/input/regression/page-spacing-first-system-spacing.ly b/input/regression/page-spacing-first-system-spacing.ly new file mode 100644 index 0000000000..82f7b4e805 --- /dev/null +++ b/input/regression/page-spacing-first-system-spacing.ly @@ -0,0 +1,19 @@ +\version "2.13.2" + +#(set-default-paper-size "a6") + +\book { + + \header { + texidoc = "first-system-spacing controls the spacing to the first +non-title staff on every page." + title = "Title" + } + + \paper { + first-system-spacing = #'((minimum-distance . 30)) + ragged-bottom = ##t + } + + { c'1 \pageBreak c'1 } +} \ No newline at end of file diff --git a/input/regression/page-spacing-first-system-title-spacing.ly b/input/regression/page-spacing-first-system-title-spacing.ly new file mode 100644 index 0000000000..e6117fcff9 --- /dev/null +++ b/input/regression/page-spacing-first-system-title-spacing.ly @@ -0,0 +1,19 @@ +\version "2.13.2" + +#(set-default-paper-size "a6") + +\book { + + \header { + texidoc = "first-system-title-spacing controls the spacing to the title, +provided that it is the first system on a page." + title = "Title" + } + + \paper { + first-system-title-spacing = #'((minimum-distance . 30)) + ragged-bottom = ##t + } + + { c'1 \pageBreak c'1 } +} \ No newline at end of file diff --git a/input/regression/page-spacing-loose-lines-after.ly b/input/regression/page-spacing-loose-lines-after.ly new file mode 100644 index 0000000000..8a7903dab9 --- /dev/null +++ b/input/regression/page-spacing-loose-lines-after.ly @@ -0,0 +1,25 @@ +\header { + texidoc = "A loose line (eg. a lyric line) at the bottom of a system +gets spaced as though it wasn't loose." +} + +\layout { + ragged-right = ##t + \context { + \Lyrics + \override VerticalAxisGroup #'inter-loose-line-spacing #'space = #20 + } +} +<< + \new Staff \relative { + d'2 d c4 bes a2 \break + } + \addlyrics { + My first Li -- ly song, + } + \addlyrics { + Not much can go wrong! + } +>> + +\version "2.12.0" diff --git a/input/regression/page-spacing-loose-lines-before.ly b/input/regression/page-spacing-loose-lines-before.ly new file mode 100644 index 0000000000..15a0a732c2 --- /dev/null +++ b/input/regression/page-spacing-loose-lines-before.ly @@ -0,0 +1,26 @@ +\header { + texidoc = "A loose line (eg. a lyric line) at the top of a system +gets spaced as though it wasn't loose." +} + +\layout { + ragged-right = ##t + \context { + \Lyrics + \override VerticalAxisGroup #'inter-loose-line-spacing #'space = #20 + \override VerticalAxisGroup #'staff-affinity = #DOWN + } +} +<< + \new Lyrics \lyricmode { + My2 first Li4 -- ly song, + } + \new Lyrics \lyricmode { + Not2 much can4 go wrong! + } + \context Voice = "voice" \relative { + d'2 d c4 bes a2 + } +>> + +\version "2.12.0" diff --git a/input/regression/page-spacing-staff-group.ly b/input/regression/page-spacing-staff-group.ly new file mode 100644 index 0000000000..9f38cd6997 --- /dev/null +++ b/input/regression/page-spacing-staff-group.ly @@ -0,0 +1,30 @@ +\version "2.13.2" + +#(set-default-paper-size "a6") + +\book { + + \header { + texidoc = "By default, the staves within a StaffGroup are spaced more +closely than staves not in a StaffGroup." + } + + \paper { + ragged-last-bottom = ##f + } + + << + \new StaffGroup + << + \new Staff c'1 + \new Staff c'1 + \new Staff c'1 + >> + \new StaffGroup + << + \new Staff c'1 + \new Staff c'1 + \new Staff c'1 + >> + >> +} \ No newline at end of file diff --git a/input/regression/page-spacing-stretchability.ly b/input/regression/page-spacing-stretchability.ly new file mode 100644 index 0000000000..563a12b426 --- /dev/null +++ b/input/regression/page-spacing-stretchability.ly @@ -0,0 +1,19 @@ +\version "2.13.2" + +#(set-default-paper-size "a6") + +\book { + + \header { + texidoc = "The stretchability property affects the amount that staves will +move under extreme stretching, but it does not affect the default distance +between staves." + } + + << + \new Staff {c'1 \pageBreak c'1} + \new Staff \with { \override VerticalAxisGroup #'default-next-staff-spacing #'stretchability = #50 } {c'1 c'1} + + \new Staff {c'1 c'1} + >> +} \ No newline at end of file diff --git a/input/regression/page-spacing-system-count.ly b/input/regression/page-spacing-system-count.ly new file mode 100644 index 0000000000..3758bd4cf1 --- /dev/null +++ b/input/regression/page-spacing-system-count.ly @@ -0,0 +1,22 @@ +\version "2.13.4" + +\header { + texidoc = "Page layout and stretching work with system-cound enabled." +} + +#(set-default-paper-size "a6") + +\paper { + system-count = 2 + ragged-last-bottom = ##f +} + +\book { + \score { + << + \relative c'' { \repeat unfold 10 c1 } + \relative c'' { \repeat unfold 10 c1 } + \relative c'' { \repeat unfold 10 c1 } + >> + } +} diff --git a/input/regression/palm-mute.ly b/input/regression/palm-mute.ly new file mode 100644 index 0000000000..33123f3f8e --- /dev/null +++ b/input/regression/palm-mute.ly @@ -0,0 +1,27 @@ +\version "2.13.4" + +\header{ texidoc = "The palm mute technique for stringed instruments + is supported by triangle-shaped note heads." + } + +palmmute = \relative c, { + \time 4/4 + e8^\markup { \musicglyph #"noteheads.u2do" = palm mute } + \palmMuteOn e e \palmMuteOff e e \palmMute e e e | + e8 \palmMute { e e e } e e e e | + \palmMuteOn < e b' e >8 e e e < e b' e >2 \palmMuteOff | + < \palmMute e b' e >8 \palmMute { e e e } < \palmMute e b' e >2 + \bar "|." +} + +\context StaffGroup << + \context Staff << + \clef "G_8" + \palmmute + >> + \context TabStaff << + \palmmute + >> +>> + + diff --git a/input/regression/tablature-full-notation.ly b/input/regression/tablature-full-notation.ly new file mode 100644 index 0000000000..80a48688be --- /dev/null +++ b/input/regression/tablature-full-notation.ly @@ -0,0 +1,36 @@ +\version "2.13.4" + +\header{ texidoc = "As default, tablature staves show only the fret numbers, because + in most situations, they are combined with normal staves. + When used without standard notation, @code{tabFullNotation} + can be used." + } + +tabstuff = { + \time 3/4 + c4^"test" d( e) + f4\f g a^\fermata + c8\<\( c16 c ~ c2\! + c'2.\) + \mark \default + R2. + r4 d4 r8 e + \times 3/4 { b4 c \glissando d\5 \glissando c } + c4. d-_( e\varcoda) + ->f g~ a\prall g\thumb e-. + \bar "|." +} + +\score { + << + \new Staff { \clef "G_8" \tabstuff } + \new TabStaff { \tabstuff } + >> +} + +\score { + \new TabStaff { + \tabFullNotation + \tabstuff + } +} diff --git a/input/regression/tablature-glissando.ly b/input/regression/tablature-glissando.ly new file mode 100644 index 0000000000..17db67a307 --- /dev/null +++ b/input/regression/tablature-glissando.ly @@ -0,0 +1,23 @@ +\version "2.13.4" + +\header{ texidoc = "Glissando lines in tablature have the right slope." + } + +\paper { ragged-right = ##f } % strech the staff to make glissando lines visible + +glissandotest = \relative c { + c4\5 \glissando d\5 \glissando e\5 f\5 | + c4\5 \glissando d\5 \glissando c2\5 | + c4\5 \glissando c'\4 c\4 \glissando c,\5 + \bar "|." +} + +\context StaffGroup << + \context Staff << + \clef "G_8" + \glissandotest + >> + \context TabStaff << + \glissandotest + >> +>> diff --git a/input/regression/tablature-grace-notes.ly b/input/regression/tablature-grace-notes.ly new file mode 100644 index 0000000000..5012ddd643 --- /dev/null +++ b/input/regression/tablature-grace-notes.ly @@ -0,0 +1,24 @@ +\version "2.13.4" + +\header{ texidoc = "Fret numbers belonging to grace notes are smaller." + } + +gracenotes = \relative c { + c4 d e f + \grace e8 c4 d e f + \grace \parenthesize e8 c4 d e f + \appoggiatura e8 c4 d e f + \acciaccatura e8 c4 d e f + \bar "|." +} + +\context StaffGroup << + \context Staff << + \clef "G_8" + \gracenotes + >> + \context TabStaff << + \gracenotes + >> +>> + diff --git a/input/regression/tablature-tie-behaviour.ly b/input/regression/tablature-tie-behaviour.ly new file mode 100644 index 0000000000..8760c9f204 --- /dev/null +++ b/input/regression/tablature-tie-behaviour.ly @@ -0,0 +1,31 @@ +\version "2.13.4" + +\header{ texidoc = "In tablature, notes that are tied to are invisible + except after a line break or within a second volta; + here, the fret number is displayed in parentheses." + } + +tietest = \relative c { + \override Voice.StringNumber #'transparent = ##t % remove circled string numbers + \repeat volta 2 { + f2 ~ f4 e + g8 g ~ g g ~ g g~ g g ~ + g1 + c1 ~ \break c2 ~ c + < c\3 e\2 g\1 >4 < c\3 e\2 g\1 > ~ < c\3 e\2 g\1 >\laissezVibrer r + c4. d8 e2 ~ + } + \alternative { { e2 r } { e2\repeatTie e2^\fermata } } + \bar "|." +} + +\context StaffGroup << + \context Staff << + \clef "G_8" + \tietest + >> + \context TabStaff << + \tietest + >> +>> + diff --git a/input/texidocs/GNUmakefile b/input/texidocs/GNUmakefile deleted file mode 100644 index 6142dd9bd3..0000000000 --- a/input/texidocs/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth=../.. - -EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc) - -include $(depth)/make/stepmake.make diff --git a/input/texidocs/accordion-discant-symbols.texidoc b/input/texidocs/accordion-discant-symbols.texidoc deleted file mode 100644 index 1383c8c186..0000000000 --- a/input/texidocs/accordion-discant-symbols.texidoc +++ /dev/null @@ -1,16 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Los símbolos específicos de acordeón discanto se escriben mediante -@code{\\markup}. Se puede trucar la colocación vertical de los -símbolos modificando los argumentos de @code{\\raise}. - -" - doctitlees = "Símbolos de acordeón discanto" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - doctitlede = "Symbole für Akkordeon-Diskantregister" - texidocde = " -Diskantregister für Akkordeon können mit @code{\\markup} dargestellt werden. -Die vertikale Position der einzelnen Elemente werden mit @code{\\raise} -angepasst. -" diff --git a/input/texidocs/adding-a-figured-bass-above-or-below-the-notes.texidoc b/input/texidocs/adding-a-figured-bass-above-or-below-the-notes.texidoc deleted file mode 100644 index d66db434b5..0000000000 --- a/input/texidocs/adding-a-figured-bass-above-or-below-the-notes.texidoc +++ /dev/null @@ -1,19 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Al escribir un bajo cifrado, existe una forma de especificar si -queremos que las cifras se sitúen encima o debajo de las notas del -bajo, mediante la definición de la propiedad -@code{BassFigureAlignmentPositioning #'direction} (exclusivamente -dentro de un contexto @code{Staff}). Se puede elegir entre -@code{#UP} (o @code{#1}, arriba), @code{#CENTER} (o @code{#0}, -centrado) y @code{#DOWN} (o @code{#-1}, abajo). - -Como podemos ver, esta propiedad se puede cambiar tantas veces -como queramos. Utilice @code{\\once \\override} si no quiere que el -truco se aplique a toda la partitura. - -" - doctitlees = "Añadir un bajo cifrado encima o debajo de las notas" - -%% Translation of GIT committish: 7eb450e8e6c935410b8f3212cb53e5a731f4f33f - doctitlefr = "Ajout d'une basse chiffrée au-dessus ou au-dessous des notes" diff --git a/input/texidocs/adding-ambitus-per-voice.texidoc b/input/texidocs/adding-ambitus-per-voice.texidoc deleted file mode 100644 index 30230f361d..0000000000 --- a/input/texidocs/adding-ambitus-per-voice.texidoc +++ /dev/null @@ -1,14 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - doctitlees = "Añadir un ámbito por voz" - texidoces = " -Se puede añadir un ámbito por cada voz. En este caso, el ámbito se -debe desplazar manualmente para evitar colisiones. - -" -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d -texidocde = " -Ambitus können pro Stimme gesetzt werden. In diesem Fall müssen sie -manual verschoben werden, um Zusammenstöße zu verhindern. - -" -doctitlede = "Ambitus pro Stimme hinzufügen" diff --git a/input/texidocs/adding-an-extra-staff-at-a-line-break.texidoc b/input/texidocs/adding-an-extra-staff-at-a-line-break.texidoc deleted file mode 100644 index 47c014a425..0000000000 --- a/input/texidocs/adding-an-extra-staff-at-a-line-break.texidoc +++ /dev/null @@ -1,13 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Al añadir un pentagrama nuevo en un salto de línea, por desgracia -se añade un espacio adicional al final de la línea antes del salto -(reservado para hacer sitio a un cambio de armadura que de todas -formas no se va a imprimir). La solución alternativa es añadir un -ajuste para @code{Staff.explicitKeySignatureVisibility} como se -muestra en el ejemplo. En las versiones 2.10 y anteriores, -también se necesita un ajuste similar para las indicaciones de -compás (véase el ejemplo). - -" - doctitlees = "Añadir un pentagrama adicional en un salto de línea" diff --git a/input/texidocs/adding-an-extra-staff.texidoc b/input/texidocs/adding-an-extra-staff.texidoc deleted file mode 100644 index 409f405542..0000000000 --- a/input/texidocs/adding-an-extra-staff.texidoc +++ /dev/null @@ -1,7 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Se puede añadir (posiblemente de forma temporal) un pentagrama -nuevo una vez que la pieza ha comenzado. - -" - doctitlees = "Añadir un pentagrama nuevo" diff --git a/input/texidocs/adding-bar-lines-to-chordnames-context.texidoc b/input/texidocs/adding-bar-lines-to-chordnames-context.texidoc deleted file mode 100644 index 02ac2e850d..0000000000 --- a/input/texidocs/adding-bar-lines-to-chordnames-context.texidoc +++ /dev/null @@ -1,16 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Para añadir indicaciones de línea divisoria dentro del contexto de -los nombres de acorde @code{ChordNames}, incluya el grabador -@code{Bar_engraver}. - -" - doctitlees = "Añadir barras de compás al contexto de nombres de acorde (ChordNames)" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Um Taktstriche in einem @code{ChordNames}-Kontext anzeigen zu lassen, muss der -@code{Bar_engraver} hinzugefügt werden. - -" - doctitlede = "Tatkstriche in einen ChordNames-Kontext hinzufügen" diff --git a/input/texidocs/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.texidoc b/input/texidocs/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.texidoc deleted file mode 100644 index 4dffe82f0d..0000000000 --- a/input/texidocs/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.texidoc +++ /dev/null @@ -1,16 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -La sintaxis de LilyPond puede implicar muchas colocaciones poco -comunes para los paréntesis, corchetes, etc, que a veces se tienen -que intercalar. Por ejemplo, al introducir una barra manual, el -corchete izquierdo de apertura se debe escribir después de la nota -inicial y de su duración, no antes. De forma similar, el corchete -derecho de cierre debe seguir inmediatamente a la nota que se -quiere situar al final del barrado, incluso si esta nota resulta -estar dentro de un grupo de valoración especial. Este fragmento de -código muestra cómo combinar el barrado manual, las ligaduras de -expresión y de unión y las ligaduras de fraseo, con secciones de -valoración especial (encerradas entre llaves). - -" - doctitlees = "Añadir barras, ligaduras de expresión y de unión, etc. cuando se usan ritmos con y sin grupos de valoración especial." diff --git a/input/texidocs/adding-drum-parts.texidoc b/input/texidocs/adding-drum-parts.texidoc deleted file mode 100644 index acbe084ecf..0000000000 --- a/input/texidocs/adding-drum-parts.texidoc +++ /dev/null @@ -1,27 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Mediante la utilización de las potentes herramientas preconfiguradas -como la función @code{\\drummode} y el contexto @code{DrumStaff}, la -introducción de partes para percusión es muy fácil: las percusiones se -sitúan en sus propias posiciones de pentagrama (con una clave -especial) y tienen las cabezas correspondientes al instrumento. Es -posible añadir un símbolo adicional a la percusión o reducir el número -de líneas. - -" - doctitlees = "Escritura de partes de percusión" - -%% Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - texidocfr = " -Grâce à la puissance des outils préconfigurés tels que la fonction -@code{\\drummode} et le contexte @code{DrumStaff}, la saisie de -parties pour percussions est extrêmement simplifiée : chaque composant -d'une batterie trouve sa place sur une portée dédiée (avec une clef -spécifique) et les têtes de note sont spécifiques à chaque élément. -Il est également possible d'affecter un symbole particulier à chaque -élément, tout comme de restreindre le nombre de lignes de la portée. - -" - - doctitlefr = "Ajout de parties de batterie" - diff --git a/input/texidocs/adding-fingerings-to-tablatures.texidoc b/input/texidocs/adding-fingerings-to-tablatures.texidoc deleted file mode 100644 index 657462c3ea..0000000000 --- a/input/texidocs/adding-fingerings-to-tablatures.texidoc +++ /dev/null @@ -1,7 +0,0 @@ -%% Translation of GIT committish: c8446d6eb2fadbf8931a867741572582759935ad - texidocfr = "Ajout de doigtés à des tablatures" - - doctitlefr = " -L'ajout de doigtés à des tablatures s'obtient en conjuguant des -@code{\\markup} et des @code{\\finger}. -" diff --git a/input/texidocs/adding-parentheses-around-an-expressive-mark-or-chordal-note.texidoc b/input/texidocs/adding-parentheses-around-an-expressive-mark-or-chordal-note.texidoc deleted file mode 100644 index e1a49f753b..0000000000 --- a/input/texidocs/adding-parentheses-around-an-expressive-mark-or-chordal-note.texidoc +++ /dev/null @@ -1,8 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -La función @code{\\parenthesize} es un truco especial que encierra -objetos entre paréntesis. El grob asociado es -@code{Score.ParenthesesItem}. - -" - doctitlees = "Encerrar entre paréntesis una marca expresiva o una nota de un acorde" diff --git a/input/texidocs/adding-the-current-date-to-a-score.texidoc b/input/texidocs/adding-the-current-date-to-a-score.texidoc deleted file mode 100644 index 9383795840..0000000000 --- a/input/texidocs/adding-the-current-date-to-a-score.texidoc +++ /dev/null @@ -1,14 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Con algo de código de Scheme, se puede añadir fácilmente la fecha -actual a una partitura. -" - doctitlees = "Añadir la fecha actual a una partitura" - -%% Translation of GIT committish: 7eb450e8e6c935410b8f3212cb53e5a731f4f33f - texidocfr = " -Avec un peu de code Scheme, voici comment ajouter facilement -la date du jour à votre partition. -" - - doctitlefr = "Ajout de la date du jour à une partition" diff --git a/input/texidocs/adding-volta-brackets-to-additional-staves.texidoc b/input/texidocs/adding-volta-brackets-to-additional-staves.texidoc deleted file mode 100644 index d3a1780afd..0000000000 --- a/input/texidocs/adding-volta-brackets-to-additional-staves.texidoc +++ /dev/null @@ -1,22 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -El grabador @code{Volta_engraver} reside de forma predeterminada -dentro del contexto de @code{Score}, y los corchetes de la repetición -se imprimen así normalmente sólo encima del pentagrama superior. Esto -se puede ajustar añadiendo el grabador @code{Volta_engraver} al -contexto de @code{Staff} en que deban aparecer los corchetes; véase -también el fragmento de código \"Volta multi staff\". - -" - doctitlees = "Añadir corchetes de primera y segunda vez a más pentagramas" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Der @code{Volta_engraver} befindet sich im @code{Score}-Kontext und Klammern -werden deshalb nur auf dem obersten System dargestellt. Das kann umgangen -werden, indem man den @code{Volta_engraver} zu dem @code{Staff}-Kontext -hinzufügt, in dem die Klammern zusätzlichen vorkommen sollen. Siehe auch -das \"Volta multi staff\"-Schnipsel. - -" - doctitlede = "Volta-Klammern zu zusätzlichen Systemen hinzufügen" diff --git a/input/texidocs/additional-voices-to-avoid-collisions.texidoc b/input/texidocs/additional-voices-to-avoid-collisions.texidoc deleted file mode 100644 index 43a81c8281..0000000000 --- a/input/texidocs/additional-voices-to-avoid-collisions.texidoc +++ /dev/null @@ -1,20 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - doctitlees = "Voces adicionales para evitar colisiones" - texidoces = " -En ciertos casos de polifonía compleja, se necesitan voces adicionales -para evitar colisiones entre las notas. Si se necesitan más de cuatro -voces paralelas, las voces adicionales se añaden definiendo una -variable que utiliza la función de Scheme @code{context-spec-music}. - -" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Ein einigen Fällen von sehr komplexer polyphoner Musik sind zusätzliche -Stimmen notwendig, um Zusammestöße zwischen den Noten zu vermeiden. -Wenn mehr als vier parallele Stimmen benötigt werden, können zusätzliche -Stimmen definiert werden, indem eine Variable mit der Funktion -@code{context-spec-music} definiert wird. - -" - doctitlede = "Zusätzliche Stimmen, um Zusammenstöße zu vermeiden" diff --git a/input/texidocs/adjusting-lyrics-vertical-spacing.texidoc b/input/texidocs/adjusting-lyrics-vertical-spacing.texidoc deleted file mode 100644 index 960e3a16a2..0000000000 --- a/input/texidocs/adjusting-lyrics-vertical-spacing.texidoc +++ /dev/null @@ -1,16 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Este fragmento de código muestra cómo situar la línea de base de la -letra más cerca del pentagrama. - -" - doctitlees = "Ajuste del especiado vertical de la letra" - -%% Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - texidocfr = " -Cet extrait illustre la manière de rapprocher la ligne de paroles -de la portée. - -" - doctitlefr = "Ajustement de l'espacement vertical des paroles" - diff --git a/input/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc b/input/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc deleted file mode 100644 index 703b77846d..0000000000 --- a/input/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc +++ /dev/null @@ -1,16 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Puede ser necesario trucar la propiedad -@code{shortest-duration-space} para poder ajustar el tamaño de las -caídas y subidas de tono («falls» y «doits»). - -" - doctitlees = "Ajustar la forma de las subidas y caídas de tono" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d -texidocde = " -Die @code{shortest-duration-space}-Eigenschaft kann verändert werden, um -das Aussehen von unbestimmten Glissandi anzupassen. - -" - doctitlede = "Das Aussehen von unbestimmten Glissandi anpassen" diff --git a/input/texidocs/aligning-and-centering-instrument-names.texidoc b/input/texidocs/aligning-and-centering-instrument-names.texidoc deleted file mode 100644 index fb34d376e7..0000000000 --- a/input/texidocs/aligning-and-centering-instrument-names.texidoc +++ /dev/null @@ -1,11 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -La alineación horizontal de los nombres de instrumento se puede -trucar modificando la propiedad @code{Staff.InstrumentName -#'self-alignment-X}. Las variables de @code{\\layout} -@code{indent} y @code{short-indent} definen el espacio en que se -alinean los nombres de instrumento antes del primer sistema y de -los siguientes, respectivamente. - -" - doctitlees = "Alinear y centrar los nombres de instrumento" diff --git a/input/texidocs/aligning-bar-numbers.texidoc b/input/texidocs/aligning-bar-numbers.texidoc deleted file mode 100644 index 9ba4e5c9fe..0000000000 --- a/input/texidocs/aligning-bar-numbers.texidoc +++ /dev/null @@ -1,25 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " - -Los números de compás se alinean de forma predeterminada por la -derecha con su objeto padre. Éste es por lo general el borde -izquierdo de una línea o, si los números se imprimen dentro de la -línea, el lado izquierdo de una línea divisoria. Los números -también se pueden situar directamente sobre la barra de compás o -alineados por la izquierda con ella. - -" - - doctitlees = "Alineación de los números de compás" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Taktnummern sind standardmäßig links an ihrem Ursprungsobjet -ausgerichtet. Das ist normalerweise die linke Ecke einer Linie oder, -wenn die Nummern innerhalb einer Zeile gesetzt werden, auf der -linken Seite eines Taktstrichs. Die Nummern können auch -direkt über dem Taktstrich positioniert werden oder rechts vom -Taktstrich gesetzt werden. - -" - doctitlede = "Taktnummern ausrichten" diff --git a/input/texidocs/aligning-marks-with-various-notation-objects.texidoc b/input/texidocs/aligning-marks-with-various-notation-objects.texidoc deleted file mode 100644 index 595ae1f9ef..0000000000 --- a/input/texidocs/aligning-marks-with-various-notation-objects.texidoc +++ /dev/null @@ -1,32 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Si están especificadas, las marcas de texto se pueden alinear con -objetos de notación distintos a las líneas divisorias. Entre estos -objetos se encuentran @code{ambitus}, @code{breathing-sign}, -@code{clef}, @code{custos}, @code{staff-bar}, @code{left-edge}, -@code{key-cancellation}, @code{key-signature} y @code{time-signature}. - -En estos casos, las marcas de texto se centran horizontalmente sobre -el objeto, aunque esto se puede cambiar, como se muestra en la segunda -línea de este ejemplo (en una partitura con varios pentagramas, se -debe hacer este ajuste para todos los pentagramas). - -" - doctitlees = "Alinear marcas con varios objetos de notación" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Wenn angegeben, können Textzeichen auch an anderen Objekten als Taktstrichen -ausgerichtet werden. Zu diesen Objekten gehören @code{ambitus}, -@code{breathing-sign}, @code{clef}, @code{custos}, @code{staff-bar}, -@code{left-edge}, @code{key-cancellation}, @code{key-signature} und -@code{time-signature}. - -In diesem Fall werden die Zeichen horizontal über dem Objekt zentriert. -Diese Ausrichtung kann auch geändert werden, wie die zweite Zeile -des Beispiels zeigt. In einer Partitur mit vielen Systemen sollte -diese Einstellung für alle Systeme gemacht werden. - -" - - doctitlede = "Zeichen an verschiedenen Notationsobjekten ausrichten" diff --git a/input/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc b/input/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc deleted file mode 100644 index 13efad76f3..0000000000 --- a/input/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc +++ /dev/null @@ -1,23 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Las cifras de digitación orientadas verticalmente se colocan de -forma predeterminada fuera del pentagrama. Sin embargo, este -comportamiento se puede cancelar. - -" - doctitlees = "Permitir que las digitaciones se impriman dentro del pentagrama" - -%% Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 - texidocfr = " -L'empilement des indications de doigté se fait par défaut à l'extérieur de la portée. Néanmoins, il est possible d'annuler ce comportement. - -" - doctitlefr = "Impression des doigtés à l'intérieur de la portée" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Normalerweise werden vertikal orientierte Fingersatzzahlen außerhalb des Systems -gesetzt. Das kann aber verändert werden. - -" - doctitlede = "Fingersatz auch innerhalb des Systems setzen" diff --git a/input/texidocs/ambitus-with-multiple-voices.texidoc b/input/texidocs/ambitus-with-multiple-voices.texidoc deleted file mode 100644 index c2193db8d1..0000000000 --- a/input/texidocs/ambitus-with-multiple-voices.texidoc +++ /dev/null @@ -1,16 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - doctitlees = "Ámbitos con varias voces" - texidoces = " -La adición del grabador @code{Ambitus_engraver} al contexto de -@code{Staff} crea un solo ámbito por pentagrama, incluso en el caso de -pentagramas con varias voces. - -" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Indem man den @code{Ambitus_engraver} im @code{Staff}-Kontext -hinzufügt, erhält man einen einzigen Ambitus pro System, auch in dem -Fall, dass mehrere Stimmen sich im gleichen System befinden. -" - doctitlede = "Ambitus mit vielen Stimmen" diff --git a/input/texidocs/analysis-brackets-above-the-staff.texidoc b/input/texidocs/analysis-brackets-above-the-staff.texidoc deleted file mode 100644 index d9620d4ab4..0000000000 --- a/input/texidocs/analysis-brackets-above-the-staff.texidoc +++ /dev/null @@ -1,8 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -De forma predeterminada se añaden corchetes de análisis sencillos -debajo del pentagrama. El ejemplo siguiente muestra una manera de -colocarlos por encima. - -" - doctitlees = "Corchetes de análisis encima del pentagrama" diff --git a/input/texidocs/ancient-fonts.texidoc b/input/texidocs/ancient-fonts.texidoc deleted file mode 100644 index 00a7a2efc9..0000000000 --- a/input/texidocs/ancient-fonts.texidoc +++ /dev/null @@ -1,16 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Aquí se muestran muchos de (¿o quizá todos?) los símbolos que -están contemplados por la capacidad de LilyPond para la música -antigua. -" - - doctitlees = "Tipografía de música antigua" - -%% Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - texidocfr =" -Voici comment graver la plupart, sinon tous les symboles que -LilyPond prend en charge en matière de musique ancienne. - -" - doctitlefr = "Gravure de musique ancienne" diff --git a/input/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc b/input/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc deleted file mode 100644 index 3d89bd50e4..0000000000 --- a/input/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc +++ /dev/null @@ -1,20 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Este ejemplo muestra cómo hacer una transcripción moderna de canto -gregoriano. El canto gregoriano no tiene compás ni plicas; utiliza -solamente cabezas de nota de blanca y de negra, y unas marcas -especiales que indican silencios de distintas longitudes. - -" - - doctitlees = "Plantilla para notación de música antigua (transcripción moderna de canto gregoriano)" -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - - texidocde = " -Dieses Beispiel zeigt eine moderne Transkription des Gregorianischen -Chorals. Hier gibt es keine Takte, keine Notenhälse und es werden nur -halbe und Viertelnoten verwendet. Zusätzliche Zeichen zeigen die -Länge von Pausen an. -" - - doctitlede = "Vorlage für Alte Notation -- moderne Transkription des gregorianischen Chorals" diff --git a/input/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc b/input/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc deleted file mode 100644 index b2dd4718c3..0000000000 --- a/input/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc +++ /dev/null @@ -1,42 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Al transcribir música mensural, es útil un «incipit» al compienzo -de la pieza para indicar la tonalidad y el tempo -originales. Aunque los músicos actuales están acostumbrados a las -barras de compás para reconocer con más facilidad los patrones -rítmicos, durante el período de la música mensural aún no se -habíen inventado las líneas divisorias; de hecho, la medida solía -cambiar a cada pocas notas. Como compromiso, a menudo las líneas -divisorias se imprimen entre los pentagramas en vez de hacerlo -encima de ellos. - -" - doctitlees = "Plantilla de notación de música antigua (transcripción moderna de música mensural)" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Bei der Transkription von Mensuralmusik ist es oft erwünscht, ein -Incipit an den Anfang des Stückes zu stellen, damit klar ist, wie -Tempo und Schlüssel in der Originalnotation gesetzt waren. Während -heutzutage Musiker an Taktlinien gewöhnt sind, um Rhythmen schneller -zu erkennen, wurden diese in der Mensuralmusik nicht verwendet. -Tatsächlich ändern sich die Rhythmen auch oft alle paar Noten. Als -ein Kompromiss werden die Notenlinien nicht auf dem System, sondern -zwischen den Systemen geschrieben. -" - -doctitlede = "Vorlage für Alte Notation -- moderne Transkription von Mensuralmusik" - -%% Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - texidocfr = " -Lorsque l'on transcrit de la musique mensurale, il est d'usage -d'indiquer en début de partition, par un « incipit », les tonalité -et tempo originaux. De nos jours, les musiciens ont l'habitude de -voir des barres de mesure qui les aide à appréhender la structure -rythmique. Ces barres n'existaient pas du temps où ces œuvres ont -été écrites ; en fait, la métrique évoluait au fil de la pièce. Un -compromis consiste à imprimer des barres de mesure entre les portées -plutôt que sur la portée elle-même. - -" - doctitlefr = "Exemples de notation ancienne -- transcription moderne de musique mensurale" diff --git a/input/texidocs/ancient-time-signatures.texidoc b/input/texidocs/ancient-time-signatures.texidoc deleted file mode 100644 index 86b428e10d..0000000000 --- a/input/texidocs/ancient-time-signatures.texidoc +++ /dev/null @@ -1,6 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Las indicaciones de compás también se pueden grabar en estilo antiguo. - -" - doctitlees = "Indicaciones de compás antiguas" diff --git a/input/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc b/input/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc deleted file mode 100644 index 6612c9f57b..0000000000 --- a/input/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc +++ /dev/null @@ -1,45 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - doctitlees = "Aplicar estilos de cabeza según la nota de la escala" - texidoces = " -La propiedad @code{shapeNoteStyles} se puede usar para definir varios -estilos de cabezas de nota para cada grado de la escala (según esté -establecido por la armadura o por la propiedad \"tonic\"). Esta -propiedad requiere un conjunto de símbolos, que pueden ser puramente -arbitrarios (se permiten expresiones geométricas como @code{triangle}, -triángulo, @code{cross}, aspas, y @code{xcircle}, círculo con aspas) o -basados en una antigua tradición americana de grabado (ciertos nombres -de nota latinos trambién se permiten). - -Dicho esto, para imitar antiguos cancioneros americanos, existen varios -estilos predefinidos de cabezas de nota disponibles a través de -instrucciones de abreviatura como @code{\\aikenHeads} o -@code{\\sacredHarpHeads}. - -Este ejemplo muestra distintas formas de obtener cabezas de notas con forma, -y muestra la capacidad de transportar una melodía sin perder la -correspondencia entre las funciones armónicas y los estilos de cabezas de -nota. - -" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - doctitlede = "Notenkopfstile basierend auf der Tonleiterstufe erstellen" - texidocde = " -Die @code{shapeNoteStyles}-(NotenFormenStile)-Eigenschaft kann benutzt -werden, um verschiedene Notenstile für jeden Schritt der Tonleiter -zu definieren (vorgegeben von der Tonart oder der @qq{tonic} -(Tonika)-Eigneschaft. Diese Eigenschaft braucht eine Anzahl von Symbolen, -welche beliebig sein können (geometrische Ausdrücke wie @code{triangle} -(Dreieck), @code{cross} (Kreuz) und @code{xcircle} (X-Kreis) sind erlaubt) -oder basierend auf einer alten amerikanischen Notensatztradition (einige -lateinische Notenbezeichnungen sind auch erlaubt). - -Um alte amerikanische Liederbücher zu imitieren, gibt es einige -vordefinierte Notenstile wie etwa @code{\\aikenHeads} (im Stil von Aiken) -oder @code{\\sacredHarpHeads} (im Stil der Sacred Harp-Tradition). - -Dieses Beispiel zeigt, wie man unterschiedlich geformte Noten erhält und -eine Melodie transponieren kann, ohne dass das Verhältnis zwischen den -harmonischen Funktionen und dem Notenstil verloren geht. - -" diff --git a/input/texidocs/arabic-improvisation.texidoc b/input/texidocs/arabic-improvisation.texidoc deleted file mode 100644 index b5b5b007aa..0000000000 --- a/input/texidocs/arabic-improvisation.texidoc +++ /dev/null @@ -1,24 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Para las improvisaciones o @emph{taqasim} que son libres durante unos -momentos, se puede omitir la indicación de compás y se puede usar -@code{\cadenzaOn}. Podría ser necesario ajustar el estilo de -alteraciones accidentales, porque la ausencia de líneas divisorias -hará que la alteración aparezca una sola vez. He aquí un ejemplo de -cómo podría ser el comienzo de una improvisación @emph{hijaz}: - -" -doctitlees = "Improvisación de música árabe" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Bei Improvisation oder @emph{taqasim}, die zeitlich frei gespielt -werden, kann die Taktart ausgelassen werden und @code{\cadenzaOn} -kann eingesetzt werden. Es kann nötig sein, den Versetzungszeichenstil -anzupassen, weil sonst die Versetzungszeichen nur einmal ausgegeben -werden, da keine Taktlinien gesetzt sind. Hier ein Beispiel, wie -der Begin einer @emph{hijaz}-Improvisation aussehen könnte: - -" - - doctitlede = "Arabische Improvisation" diff --git a/input/texidocs/automatic-beam-subdivisions.texidoc b/input/texidocs/automatic-beam-subdivisions.texidoc deleted file mode 100644 index 2f3d149c8d..0000000000 --- a/input/texidocs/automatic-beam-subdivisions.texidoc +++ /dev/null @@ -1,8 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Se pueden subdividir las barras automáticamente. Estableciendo la -propiedad @code{subdivideBeams}, las barras se subdividen en -posiciones de pulso (tal y como se especifica en @code{beatLength}). - -" - doctitlees = "Subdivisiones de barra automáticas" diff --git a/input/texidocs/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.texidoc b/input/texidocs/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.texidoc deleted file mode 100644 index 9a08031448..0000000000 --- a/input/texidocs/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.texidoc +++ /dev/null @@ -1,22 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -En un compás sencillo como 2/2 ó 4/4, las corcheas se barran de forma -predeterminada como dos grupos de cuatro. - -Utilizando un macro que seobreescribe el comportamiento automático del -barrado, este fragmento de código cambia el barrado a pulsos de negra. - -" - doctitlees = "Barras automáticas de dos en dos en los compases de 4/4 o de 2/2" - -%% Translation of GIT committish: 1154b407d42f303a024598296ad36ab6c93e2b5a - texidocfr = " -Dans une métrique simple comme 4/4 ou 2/2, les croches sont ligaturées -par défaut en deux groupes de quatre. - -En utilisant une macro qui modifie le comportement des ligatures -automatiques, voici comment obtenir des ligatures basées sur la valeur -d'une noire. - -" - doctitlefr = "Ligature automatique deux par deux, aussi bien en 4/4 qu'en 2/2" diff --git a/input/texidocs/beam-endings-in-score-context.texidoc b/input/texidocs/beam-endings-in-score-context.texidoc deleted file mode 100644 index 695c3e2dd8..0000000000 --- a/input/texidocs/beam-endings-in-score-context.texidoc +++ /dev/null @@ -1,28 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Las reglas de final de barra especificadas en el contexto -@code{Score} se aplican a todos los pentagramas, pero se pueden -modificar tanto en los niveles de @code{Staff} como de -@code{Voice}: - -" - doctitlees = "Finales de barra en el contexto Score" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Balkenenderegeln, die im @code{Score}-Kontext definiert werden, wirken -sich auf alle Systeme aus, können aber auf @code{Staff}- und -@code{Voice}-Ebene neu verändert werden: - -" - doctitlede = "Balkenenden auf Score-Ebene" - - -%% Translation of GIT committish: bee31293920d834cd3698f00ddcc2402c3164619 - texidocfr = " -Les règles de ligatures définies au niveau du contexte @code{Score} -s'appliqueront à toutes les portées. Il est toutefois possible de -moduler au niveau @code{Staff} ou {Voice} : - -" - doctitlefr = "Définition de règles de ligature pour la partition" diff --git a/input/texidocs/beam-grouping-in-7-8-time.texidoc b/input/texidocs/beam-grouping-in-7-8-time.texidoc deleted file mode 100644 index 4ed387848d..0000000000 --- a/input/texidocs/beam-grouping-in-7-8-time.texidoc +++ /dev/null @@ -1,30 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -No está especificada ninguna agrupación predeterminada automática -de las barras para el compás de 7/8, de forma que si se requieren -barras automáticas se debe especificar la forma de agrupamiento. -Por ejemplo, para agrupar todas las barras en la forma 2-3-2 en el -compás de 7/8, especificamos los finales de barra en 2/8 y 5/8: - -" - doctitlees = "Agrupamiento de las barras en el compás de 7/8" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d -texidocde = " -Es gibt keine automatischen Balkengruppen für 7/8-Takte. Wenn diese -Taktart benötigt wird, müssen die Gruppierungen definiert werden. Um -beispielsweise alle Noten in 2/8-3/8-2/8 aufzuteilen, müssen Balkenenden -für 2/8 und 5/8 definiert werden: - -" - doctitlede = "Balkengruppen für 7/8-Takte" - -%% Translation of GIT committish: bee31293920d834cd3698f00ddcc2402c3164619 -texidocfr = " -Aucune règle de ligature automatique n'est disponible pour une mesure à -7/8. Il faudra donc, en pareil cas, définir vous-même les règles de -regroupement. Pour, par exemple, ligaturer sur la base de 2/8-3/8-2/8, -il faudra donc définir les terminaisons de 2/8 et 5/8 : - -" - doctitlefr = "Règle de ligature dans une mesure à 7/8" diff --git a/input/texidocs/beams-across-line-breaks.texidoc b/input/texidocs/beams-across-line-breaks.texidoc deleted file mode 100644 index af2211ffe4..0000000000 --- a/input/texidocs/beams-across-line-breaks.texidoc +++ /dev/null @@ -1,26 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Normalmente están prohibidos los saltos de línea si las barras -atraviesan las líneas divisorias. Se puede cambiar este -comportamiento como se muestra aquí: - -" - doctitle = "Barras que atraviesan saltos de línea" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d -texidocde = " -Zeilenumbrüche sind normalerweise während Balken verboten. Das kann geändert -werden. - -" - doctitlede = "Balken über Zeilenumbrüche" - - -%% Translation of GIT committish: b3196fadd8f42d05ba35e8ac42f7da3caf8a3079 - - texidocfr = " -Il est normalement impensable qu'un saut de ligne tombe au milieu d'une -ligature. LilyPond permet néanmoins de l'obtenir. - -" - doctitlefr = "Ligature au moment d'un saut de ligne" diff --git a/input/texidocs/blanking-staff-lines-using-the--whiteout-command.texidoc b/input/texidocs/blanking-staff-lines-using-the--whiteout-command.texidoc deleted file mode 100644 index c84f96e6a2..0000000000 --- a/input/texidocs/blanking-staff-lines-using-the--whiteout-command.texidoc +++ /dev/null @@ -1,10 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -La instrucción @code{\\whiteout} intercala un rectángulo blanco -debajo de un elemento de marcado. Este rectángulo blanco no tapa -a ningún otro objeto gráfico, puesto que las líneas del pentagrama -están en una capa inferior a la de la mayor parte de los otros -objetos. - -" - doctitlees = "Poner en blanco las líneas del pentagrama utilizando la instrucción \\whiteout" diff --git a/input/texidocs/broken-crescendo-hairpin.texidoc b/input/texidocs/broken-crescendo-hairpin.texidoc deleted file mode 100644 index 6d62a582b6..0000000000 --- a/input/texidocs/broken-crescendo-hairpin.texidoc +++ /dev/null @@ -1,22 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Para hacer invisibles partes de un regulador de crescendo, se usa -el método de dibujar un rectángulo blanco encima de la parte -respectiva del regulador, tapándola. El rectángulo se define como -código PostScript dentro de un elemento de marcado de texto. - -Para realizar un ajuste fino de la posición y el tamaño del -elemento de marcado, se puede establecer el número que precede a -@code{setgray} en la definición de PostScript a un valor menor que -la unidad, haciendo que sea de color gris. Los dos números que -están antes de @code{scale} en el código PostScript son los -responsables del ancho y la altura del rectángulo, y los dos -números que están antes de @code{translate} cambian las -coordenadas X e Y de origen del rectángulo. - -Asegúrse de poner el regulador en una capa más baja que el -elemento de marcado de texto para trazar el rectángulo encima del -regulador. - -" - doctitlees = "Regulador interrumpido" diff --git a/input/texidocs/caesura-railtracks-with-fermata.texidoc b/input/texidocs/caesura-railtracks-with-fermata.texidoc deleted file mode 100644 index 730c809ccf..0000000000 --- a/input/texidocs/caesura-railtracks-with-fermata.texidoc +++ /dev/null @@ -1,9 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -A veces se denota una «cesura» mediante una doble marca de respiración -parecida a las vías del tren, con un calderón encima. Este fragmento -de código presenta una combinación de estas dos marcas, visualmente -satisfactoria. - -" - doctitlees = "Cesura tipo \"vías del tren\" con calderón" diff --git a/input/texidocs/center-text-below-hairpin-dynamics.texidoc b/input/texidocs/center-text-below-hairpin-dynamics.texidoc deleted file mode 100644 index 01c232a093..0000000000 --- a/input/texidocs/center-text-below-hairpin-dynamics.texidoc +++ /dev/null @@ -1,9 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Este ejemplo proporciona una función para tipografiar un regulador -con texto por debajo, como \"molto\" o \"poco\". El ejemplo -ilustra también cómo modificar la manera en que se imprime -normalmente un objeto, utilizando código de Scheme. - -" - doctitlees = "Centrar texto debajo de un regulador" diff --git a/input/texidocs/changing--flageolet-mark-size.texidoc b/input/texidocs/changing--flageolet-mark-size.texidoc deleted file mode 100644 index 686aef37a8..0000000000 --- a/input/texidocs/changing--flageolet-mark-size.texidoc +++ /dev/null @@ -1,24 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Para hacer más pequeño el círculo de @code{\\flageolet} (armónico) -utilice la siguiente función de Scheme. - -" - doctitlees = "Cambiar el tamaño de la marca de \\flageolet" - -%% Translation of GIT committish: 0099693675b95c7ec6664d7277f22411a14e9c1b - - texidocfr = " -Il est possible de rapetisser le cercle d'un @code{\\flageolet} grâce -à une fonction Scheme. - -" - doctitlefr = "Modifier la taille d'un \\flageolet" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Um den @code{\\flageolet}-Kreis kleiner zu machen, kann diese -Scheme-Funktion eingesetzt werden. - -" - doctitlede = "\\flageolet-Zeichen verkleinern" diff --git a/input/texidocs/changing-a-single-notes-size-in-a-chord.texidoc b/input/texidocs/changing-a-single-notes-size-in-a-chord.texidoc deleted file mode 100644 index 7615baa9a7..0000000000 --- a/input/texidocs/changing-a-single-notes-size-in-a-chord.texidoc +++ /dev/null @@ -1,13 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Se pueden modificar notas individuales de un acorde con la -instrucción @code{\\tweak}, alterando la propiedad -@code{font-size}. - -Dentro de un acorde (entre ángulos simples @code{< >}), antes de -la nota que queremos alterar, situamos la instrucción -@code{\\tweak} seguida por @code{#'font-size} y definimos el -tamaño adecuado como @code{#-2} (una cabeza pequeña). - -" - doctitlees = "Modificar el tamaño de una nota suelta de un acorde" diff --git a/input/texidocs/changing-beam-knee-gap.texidoc b/input/texidocs/changing-beam-knee-gap.texidoc deleted file mode 100644 index 13062a3435..0000000000 --- a/input/texidocs/changing-beam-knee-gap.texidoc +++ /dev/null @@ -1,39 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Se insertan automáticamente barras en ángulo cuando se detecta un -intervalo muy grande entre las notas. Se puede hacer un ajuste -fino de este comportamiento a través de la propiedad -@code{auto-knee-gap}. Se traza una barra doblada si el salto es -mayor que el valor de @code{auto-knee-gap} más el ancho del objeto -barra (que depende de la duración de las notas y de la inclinación -de la barra). De forma predeterminada @code{auto-knee-gap} está -establecido a 5.5 espacios de pentagrama. - -" - doctitlees = "Cambiar el salto de las barras en ángulo" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d -texidocde = " -Balken mit Hälsen in unterschiedliche Richtungen werden automatisch -erstellt, wenn ein großer Sprung zwischen Tonhöhen gefunden wird. Dieses -Verhalten kann durch die @code{auto-knee-gap}-Eigenschaft beeinflusst -werden. Ein derartiger Knie-Balken wird erstellt, wenn der Abstand größer -ist als der Wert von @code{auto-knee-gap} plus der Dicke des Balkens -(was von der Notendauer und der Neigung des Balkens abhängt). Der -Standardwert von @code{auto-knee-gap} ist 5.5 Notensystemabstände. - -" - doctitlede = "Balken für weit auseinander liegende Noten ändern" - - -%% Translation of GIT committish: b3196fadd8f42d05ba35e8ac42f7da3caf8a3079 - texidocfr = " -LilyPond insère automatiquement des ligatures coudées --- certaines -hampes vers le haut, d'autres vers le bas --- lorsqu'il détecte un -intervalle important entre des têtes de notes. Ce comportement peut être -changé par l'intermédiaire de l'objet @code{auto-knee-gap} --- défini -par défaut à @samp{5,5} espace, plus la largeur et la pente de la -ligature en question. - -" - doctitlefr = "Ligature et directions de hampe inversées" diff --git a/input/texidocs/changing-chord-separator.texidoc b/input/texidocs/changing-chord-separator.texidoc deleted file mode 100644 index ad604d4536..0000000000 --- a/input/texidocs/changing-chord-separator.texidoc +++ /dev/null @@ -1,15 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Se puede establecer el separador entre las distintas partes del -nombre de un acorde para que sea cualquier elemento de marcado. - -" - doctitlees = "Modificación del separador de acordes" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Der Trenner zwischen unterschiedlichen Teilen eines Akkordsymbols kann -beliebeiger Text sein. - -" - doctitlede = "Akkordsymboltrenner verändern" diff --git a/input/texidocs/changing-form-of-multi-measure-rests.texidoc b/input/texidocs/changing-form-of-multi-measure-rests.texidoc deleted file mode 100644 index 4934a8a339..0000000000 --- a/input/texidocs/changing-form-of-multi-measure-rests.texidoc +++ /dev/null @@ -1,31 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - doctitlees = "Cambiar la forma de los silencios multicompás" - texidoces = " -Si hay diez compases de silencio o menos, se imprime en el pentagrama -una serie de silencios de breve y longa (conocidos en alemán como -\"Kirchenpausen\", «silencios eclesiásticos»); en caso contrario se -muestra una barra normal. Este número predeterminado de diez se -puede cambiar sobreescribiendo la propiedad @code{expand-limit}: - -" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Wenn zehn oder weniger Pausentakte vorkommen, wird eine Reihe von Longa- -und Brevispausen (auch Kirchenpausen genannt) gesetzt, bei mehr Takten -wird eine Line mit der Taktanzahl ausgegeben. Der vorgegebene Wert von -zehn kann geändert werden, indem man die @code{expand-limit}-Eigenschaft -setzt: -" - doctitlede = "Die Erscheinung von Pausentakten ändern" - - -%% Translation of GIT committish: e71f19ad847d3e94ac89750f34de8b6bb28611df -texidocfr = " -Dans le cas où ce silence dure moins de dix mesures, LilyPond imprime sur -la portée des @qq{ silences d'église } -- @emph{Kirchenpause} en -allemand -- et qui sont une simple suite de rectangles. La propriété -@code{expand-limit} permet d'obtenir un silence unique : - -" - doctitlefr = "Modifier l'apparence d'un silence multi-mesures" diff --git a/input/texidocs/changing-midi-output-to-one-channel-per-voice.texidoc b/input/texidocs/changing-midi-output-to-one-channel-per-voice.texidoc deleted file mode 100644 index 7af9894d37..0000000000 --- a/input/texidocs/changing-midi-output-to-one-channel-per-voice.texidoc +++ /dev/null @@ -1,17 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Al producir una salida MIDI, el comportamiento predeterminado es -que cada pentagrama representa un canal MIDI, con todas las voces -de dicho pentagrama mezcladas. Esto reduce al mínimo el riesgo de -que se agote el número de canales MIDI disponibles, pues existe un -máximo de 16 canales por pista. - -Sin embargo, cuando se traslada el interpretador -@code{Staff_performer} al contexto @code{Voice}, cada voz de un -pentagrama puede tener su propio canal MIDI, como se muestra en el -siguiente ejemplo: a pesar de estar sobre el mismo pentagrama, se -crean dos canales MIDI, cada uno con un @code{midiInstrument} -distinto. - -" - doctitlees = "Modificar la salida MIDI para que tenga un canal por cada voz" diff --git a/input/texidocs/changing-partcombine-texts.texidoc b/input/texidocs/changing-partcombine-texts.texidoc deleted file mode 100644 index 243576fce9..0000000000 --- a/input/texidocs/changing-partcombine-texts.texidoc +++ /dev/null @@ -1,16 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Al utilizar la posibilidad de combinación automática de partes, se -puede modificar el texto que se imprime para las secciones de solo -y de unísono: - -" - doctitlees = "Cambiar los textos de partcombine" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Wenn Stimmen automatisch kombiniert werden, kann der Text, der für -Solo- und Unisono-Stellen ausgegeben wird, geändert werden: - -" - doctitlede = "Partcombine-Text ändern" diff --git a/input/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc b/input/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc deleted file mode 100644 index aa63ed0ecf..0000000000 --- a/input/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc +++ /dev/null @@ -1,26 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Se puede modificar el texto empleado para los crescendos y -decrescendos modificando las propiedades de contexto -@code{crescendoText} y @code{decrescendoText}. El estilo de la -línea de extensión se puede cambiar modificando la propiedad -@code{'style} de @code{DynamicTextSpanner}. El valor -predeterminado es @code{'hairpin} (regulador), y entre otros -valores posibles se encuentran @code{'line} (línea), -@code{'dashed-line} (línea discontinua) y @code{'dotted-line} -(línea de puntos): - -" - doctitlees = "Cambiar el texto y los estilos de objeto de extensión para las indicaciones dinámicas textuales" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d -texidocde = " -Der Text, der für Crescendo und Decrescendo gestzt wird, kann geändert -werden, indem man die Eigenschaften @code{crescendoText} und -@code{decrescendoText} verändert. Der Stil des Streckers kann auch -geändert werden, indem die @code{'style}-Eigenschaft des -@code{DynamicTextSpanner} beeinflusst wird. Der Standardwert ist -@code{'hairpin}, ander Möglichkeiten sind @code{'line}, @code{'dashed-line} -und @code{'dotted-line}. -" - doctitlede = "Text und Strecker-Stile für Dynamik-Texte ändern" diff --git a/input/texidocs/changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.texidoc b/input/texidocs/changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.texidoc deleted file mode 100644 index 923dff7222..0000000000 --- a/input/texidocs/changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.texidoc +++ /dev/null @@ -1,7 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Se puede cambiar el aspecto de las ligaduras de expresión de -continuas a punteadas o intermitentes. - -" - doctitlees = "Modificar el aspecto continuo de una ligadura de expresión a punteado o intermitente" diff --git a/input/texidocs/changing-the-breath-mark-symbol.texidoc b/input/texidocs/changing-the-breath-mark-symbol.texidoc deleted file mode 100644 index df860158b0..0000000000 --- a/input/texidocs/changing-the-breath-mark-symbol.texidoc +++ /dev/null @@ -1,17 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -El glifo de la marca de respiración se puede ajustar -sobreescribiendo la propiedad de texto del objeto de presentación -@code{BreathingSign}, con cualquier otro texto de marcado. - -" - doctitlees = "Cambiar el símbolo de la marca de respiración" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Das Schriftzeichen für das Atemzeichen kann verändert werden, indem -die Text-Eigenschaft des @code{BreathingSign}-Layoutobjekts mit einer -beliebigen Textbeschriftung definiert wird. - -" - doctitlede = "Das Atemzeichen-Symbol verändern" diff --git a/input/texidocs/changing-the-chord-names-to-german-or-semi-german-notation.texidoc b/input/texidocs/changing-the-chord-names-to-german-or-semi-german-notation.texidoc deleted file mode 100644 index 3a568b1b16..0000000000 --- a/input/texidocs/changing-the-chord-names-to-german-or-semi-german-notation.texidoc +++ /dev/null @@ -1,9 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -La nomenclatura inglesa (predeterminada) para los acordes del -cifrado americano se puede cambiar por la alemana -(@code{\\germanChords} sustituye B y Bes por H y B) o por la semi-alemana -(@code{\\semiGermanChords} sustituye B y Bes por H y Bb). - -" - doctitlees = "Cambiar la nomenclatura de los acordes del cifrado americano por la notación alemana o semi-alemana" diff --git a/input/texidocs/changing-the-positions-of-figured-bass-alterations.texidoc b/input/texidocs/changing-the-positions-of-figured-bass-alterations.texidoc deleted file mode 100644 index 326f17b6cd..0000000000 --- a/input/texidocs/changing-the-positions-of-figured-bass-alterations.texidoc +++ /dev/null @@ -1,18 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Las alteraciones y los signos «más» pueden aparecer antes o -después de los números, según el valor de las propiedades -@code{figuredBassAlterationDirection} y -@code{figuredBassPlusDirection}. - -" - doctitlees = "Cambiar las posiciones de las alteraciones del bajo cifrado" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Versetzungszeichen und Pluszeichen können vor oder nach den Ziffern erscheinen, -je nach den Einstellungen der @code{figuredBassAlterationDirection} und -@code{figuredBassPlusDirection}-Eigenschaften. - -" - doctitlede = "Positionen von Generalbass-Alterationszeichen verändern" diff --git a/input/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc b/input/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc deleted file mode 100644 index b877616ec0..0000000000 --- a/input/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc +++ /dev/null @@ -1,17 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Para cambiar el tempo en la salida MIDI sin -imprimir nada, hacemos invisible la indicación metronómica: - -" - - doctitlees = "Cambiar el tempo sin indicación metronómica" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Um das Tempo für die MIDI-Ausgabe zu ändern, ohne eine Tempoangabe in den -Noten auszugeben, kann die Metronombezeichnung unsichtbar gemacht werden: - -" - - doctitlede = "Das Tempo ohne Metronom-Angabe verändern" diff --git a/input/texidocs/changing-the-time-signature-without-affecting-the-beaming.texidoc b/input/texidocs/changing-the-time-signature-without-affecting-the-beaming.texidoc deleted file mode 100644 index 3e2854d755..0000000000 --- a/input/texidocs/changing-the-time-signature-without-affecting-the-beaming.texidoc +++ /dev/null @@ -1,38 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -La instrucción @code{\time} establece las propiedades -@code{timeSignatureFraction}, @code{beatLength}, @code{beatGrouping} y -@code{measureLength} en el contexto @code{Timing}, que normalmente -tiene el alias @code{Score}. La modificación del valor de -@code{timeSignatureFraction} hace que se imprima la nueva indicación -de compás sin que cambie ninguna de las demás propiedades: - -" - doctitlees = "Cambio de compás sin afectar al barrado" - - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Der @code{\\time}-Befehl verändert die Eigenschaften -@code{timeSignatureFraction}, @code{beatLength}, @code{beatGrouping} -und @code{measureLength} im @code{Timing}-Kontext, welcher normalerweise -gleichbedeutend mit @code{Score} ist. Wenn der Wert von -@code{timeSignatureFraction} verändert wird, wird die neue -Taktart ausgegeben, ohne die anderen Eigenschaften zu beeinflussen: - -" - doctitlede = "Die Taktart verändern ohne die Bebalkung zu beeinflussen" - - -%% Translation of GIT committish: e71f19ad847d3e94ac89750f34de8b6bb28611df - texidocfr = " -La commande @code{\\time} gère les propriétés -@code{timeSignatureFraction}, @code{beatLength}, @code{beatGrouping} -et @code{measureLength} dans le contexte @code{Timing}, normallement -rattaché à @code{Score}. Le fait de modifier la valeur de -@code{timeSignatureFraction} aura pour effet de changer l'apparence du -symbole affiché sans pour autant affecter les autres propriétés de la -métrique : - -" - doctitlefr = "Changement de métrique sans affecter les règles de ligature" diff --git a/input/texidocs/changing-the-tuplet-number.texidoc b/input/texidocs/changing-the-tuplet-number.texidoc deleted file mode 100644 index 8d1656bf2b..0000000000 --- a/input/texidocs/changing-the-tuplet-number.texidoc +++ /dev/null @@ -1,33 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - doctitlees = "Cambiar el número del grupo especial" - texidoces = " - -De forma predeterminada sólo se imprime el numerador del grupo -especial sobre el corchete de grupo, es decir, el denominador del -argumento de la instrucción @code{\\times}. De forma alternativa, se -puede imprimr un quebrado en la forma numerador:denominador del número -del grupo, o eliminar el número. - -" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d -texidocde = " -Standardmäßig wird nur der Zähler des N-tolen-Bruchs über der Klammer -dargestellt, wie er dem @code{\\times}-Befehl übergeben wird. -Man kann aber auch Zähler/Nenner ausgeben lassen, oder die Zahl -vollständig unterdrücken. - -" - doctitlede = "Die Zahl der N-tole verändern" - - -%% Translation of GIT committish: e71f19ad847d3e94ac89750f34de8b6bb28611df - texidocfr = " -L'apparence du chiffre est déterminée par la propriété @code{text} dans -@code{TupletNumber}. La valeur par défaut imprime seulement le -dénominateur, mais si elle est définie par la fonction -@code{tuplet-number::calc-fraction-text}, la fraction entière -@var{num}:@var{den} sera imprimée à la place. - -" - doctitlefr = "Modifier l'apparence du chiffre de nolet" diff --git a/input/texidocs/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.texidoc b/input/texidocs/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.texidoc deleted file mode 100644 index b792f065ea..0000000000 --- a/input/texidocs/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.texidoc +++ /dev/null @@ -1,14 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -La propiedad @code{measureLength}, junto con -@code{measurePosition}, determina cuándo es necesario dibujar una -línea divisoria. Sin embargo, al utilizar -@code{\\scaleDurations}, el escalado proporcional de las -duraciones hace difícil introducir cambios de compás. En este -caso se debe establecer manualmente el valor de -@code{measureLength} utilizando la función @code{ly:make-moment}. -El segundo argumento debe ser el mismo que el segundo argumento de -@code{\\scaleDurations}. - -" - doctitlees = "Modificar el compás dentro de una sección polimétrica utilizando @code{\\scaleDurations}" diff --git a/input/texidocs/chant-or-psalms-notation.texidoc b/input/texidocs/chant-or-psalms-notation.texidoc deleted file mode 100644 index bb23259b48..0000000000 --- a/input/texidocs/chant-or-psalms-notation.texidoc +++ /dev/null @@ -1,7 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Este tipo de notación se utiliza para el canto de los Salmos, en -que las estrofas no siempre tienen la misma longitud. - -" - doctitlees = "Notación de responsos o salmos" diff --git a/input/texidocs/chord-name-exceptions.texidoc b/input/texidocs/chord-name-exceptions.texidoc deleted file mode 100644 index c1fb53c7d4..0000000000 --- a/input/texidocs/chord-name-exceptions.texidoc +++ /dev/null @@ -1,16 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Se puede usar la propiedad @code{chordNameExceptions} para -almacenar una lista de notaciones espaciales para acordes -específicos. - -" - doctitlees = "Excepciones para los nombres de acorde" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Die Eigenschaft @code{chordNameExceptions} kann benutzt werden, um eine -Liste an besonderen Notationen für bestimmte Akkorde zu speichern. - -" - doctitlede = "Akkordsymbolausnahmen" diff --git a/input/texidocs/chord-name-major7.texidoc b/input/texidocs/chord-name-major7.texidoc deleted file mode 100644 index 1c9a2873ee..0000000000 --- a/input/texidocs/chord-name-major7.texidoc +++ /dev/null @@ -1,17 +0,0 @@ -%% Translation of GIT committish: d4f58bb3ad4e7fe1967a6b48f25e3addffc8aa14 - texidocde = " -Das Aussehen des großen Septakkords kann mit @code{majorSevenSymbol} verändert werden. - -" - - doctitlede = "Akkordbezeichnung maj7" - - -%% Translation of GIT committish: 3e50373e10750e5bc1f5c69898df3740e6169165 - texidoces = " -La presentación del acorde de séptima mayor se -puede ajustar mediante majorSevenSymbol. - -" - doctitlees = "Nombre de acorde maj7" - diff --git a/input/texidocs/chordchanges-for-fretboards.texidoc b/input/texidocs/chordchanges-for-fretboards.texidoc deleted file mode 100644 index 3ae9f4a111..0000000000 --- a/input/texidocs/chordchanges-for-fretboards.texidoc +++ /dev/null @@ -1,17 +0,0 @@ -%% Translation of GIT committish: d4f58bb3ad4e7fe1967a6b48f25e3addffc8aa14 - texidoces = " -Se puede hacer que los diagramas de posiciones se muestren sólo -cuando el acorde cambia o al comienzo de una nueva línea. - -" - - doctitlees = "Cambios de acorde de posiciones de trastes" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d -texidocde = " -Bunddiagramme können definiert werden, sodass sie nur angezeigt werden, -wenn der Akkord sich ändert oder eine neue Zeile anfängt. - -" - - doctitlede = "Akkordänderungen für Bunddiagramme" diff --git a/input/texidocs/clusters.texidoc b/input/texidocs/clusters.texidoc deleted file mode 100644 index 537da75a6b..0000000000 --- a/input/texidocs/clusters.texidoc +++ /dev/null @@ -1,7 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Los «clusters» o racimos son un mecanismo para indicar la -interpretación de un ámbito de notas al mismo tiempo. - -" - doctitlees = "Clusters («racimos»)" diff --git a/input/texidocs/combining-dynamics-with-markup-texts.texidoc b/input/texidocs/combining-dynamics-with-markup-texts.texidoc deleted file mode 100644 index 2cd14dfec2..0000000000 --- a/input/texidocs/combining-dynamics-with-markup-texts.texidoc +++ /dev/null @@ -1,8 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Ciertas indicaciones dinámicas pueden llevar textos (como \"più -forte\" o \"piano subito\"). Se pueden producir usando un -bloque @code{\\markup}. - -" - doctitlees = "Combinar indicaciones dinámicas con marcados textuales" diff --git a/input/texidocs/combining-two-parts-on-the-same-staff.texidoc b/input/texidocs/combining-two-parts-on-the-same-staff.texidoc deleted file mode 100644 index 417c7f3c99..0000000000 --- a/input/texidocs/combining-two-parts-on-the-same-staff.texidoc +++ /dev/null @@ -1,41 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -La herramienta de combinación de partes ( instrucción -@code{\\partcombine}) permite la combinación de varias partes -diferentes sobre el mismo pentagrama. Las indicaciones textuales -tales como \"solo\" o \"a2\" se añaden de forma predeterminada; -para quitarlas, sencillamente establezca la propiedad -@code{printPartCombineTexts} al valor \"falso\". Para partituras -vocales (como himnos), no hay necesidad de añadir los textos -\"solo\" o \"a2\", por lo que se deben desactivar. Sin embargo, -podría ser mejor no usarlo si hay solos, porque éstos no se -indicarán. En tales casos podría ser preferible la notación -polifónica estándar. - -Este fragmento de código presenta las tres formas en que se pueden -imprimir dos partes sobre un solo pentagrama: polifonía estándar, -@code{\\partcombine} sin textos, y @code{\\partcombine} con -textos. - -" - doctitlees = "Combinar dos partes sobre el mismo pentagrama" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Die Funktion, die Stimmen kombiniert (also der @code{\\partcombine}-Befehl) -ermöglicht die Kombination unterschiedlicher Stimmen auf einem -System. Textanweisungen wie \"solo\" or \"a2\" werden automatisch -hinzugefügt. Wenn man sie entfernen will, muss man die Eigenschaft -@code{printPartCombineTexts} auf flasch setzen. Für Klavierauszüge -muss natürlich kein \"solo\"/\"a2\" usw. hinzugefügt werdne, man -sollte sie also ausschalten. Wenn aber Solo-Stellen in einem -Klavierauszug oder einer Chorpartitur angezeigt werden, ist es besser, -normale Polyphonie zu verwenden, weil so die Solostellen angezeigt -werden, auch wenn der Text des Stimmenkombinierers ausgeschaltet ist. - -Der Schnipsel zeigt drei Möglichkeiten, Stimmen auf einem System zu -kombinieren: Standardpolyphonie, @code{\\partcombine} ohne Text und -@code{\\partcombine} mit Text. - -" - doctitlede = "Zwei Stimmen auf einem System kombinieren" diff --git a/input/texidocs/compound-time-signatures.texidoc b/input/texidocs/compound-time-signatures.texidoc deleted file mode 100644 index 30892f66d9..0000000000 --- a/input/texidocs/compound-time-signatures.texidoc +++ /dev/null @@ -1,36 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - doctitlees = "Indicaciones de compases compuestos" - texidoces = " -Las indicaciones de compás poco frecuentes como \"5/8\" se pueden -ejecutar como compases compuestos (p.ej. \"3/8 + 2/8\"), que combinan -dos o más metros diferentes. LilyPond puede hacer la música de este -tipo fácil de leer e interpretar, imprimiendo explícitamente las -indicaciones de compás compuesto y adaptando el comportamiento -automático de las barras (también se pueden añadir indicaciones -gráficas de la agrupación de compases; véase el fragmento de código -apropiado en la base de datos). - -" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d -texidocde = " -Ungerade Taktarten werden (wie etwa \"5/8\") werden oft als zusammengesetzte -Taktarten interpretiert (bspw. \"3/8 + 2/8\"), in welchen zwei oder mehr -Teiltakte unterschieden werden. LilyPond kann derartige Noten produzieren, -indem entsprechende Taktarten gesetzt werden und die automatische -Bebalkung angepasst wird. - -" - doctitlede = "Zusammengesetzte Taktarten" - - -%% Translation of GIT committish: e71f19ad847d3e94ac89750f34de8b6bb28611df - texidocfr = " -Des métriques telles que @qq{5/8} peuvent s'interpréter sous une forme -décomposée --- @qq{3/8 + 2/8} par exemple --- qui combine plusieurs -métriques. LilyPond est capable de rendre ce type de notation, plus - facile à lire et à interpréter, en imprimant cette métrique composite - et en adaptant les règles de ligature automatique en conséquence. - -" - doctitlefr = "Métrique décomposée" diff --git a/input/texidocs/conducting-signs,-measure-grouping-signs.texidoc b/input/texidocs/conducting-signs,-measure-grouping-signs.texidoc deleted file mode 100644 index b9ca5a39f5..0000000000 --- a/input/texidocs/conducting-signs,-measure-grouping-signs.texidoc +++ /dev/null @@ -1,49 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Las opciones para agrupar los pulsos de un compás están a nuestra -disposición a través de la función de Scheme -@code{set-time-signature}, que acepta tres argumentos: el número -de pulsos, la longitud del pulso, y la agrupación interna de los -pulsos dentro del compás. Si se incluye el grabador -@code{Measure_grouping_engraver}, la función crea también símbolos -de agrupación @code{MeasureGrouping}. Dichos símbolos facilitan -la lectura de la música moderna de cierta complejidad rítmica. En -el ejemplo, el compás de 9/8 se subdivide en 2, 2, 2 y 3. Esto se -pasa a la función @code{set-time-signature} como tercer argumento: -@code{'(2 2 2 3)}: - -" -doctitlees = "Símbolos de dirección, símbolos de agrupación de compás" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Optionen, mit denen die Balken in einem Takt gruppiert werden, sind -durch die Scheme-Funktion @code{set-time-signature} erhältlich, die -drei Argumente braucht: Die Zahl der Taktschläge, die Länge des -Schlages und die interne gruppieren von Balken in dem Takt. Wenn der -@code{Measure_grouping_engraver} hinzugefügt worden ist, erstellt -diese Funktion auch @code{MeasureGrouping}-(Taktgruppen)-Zeichen. Derartige -Zeichen erleichtern das Lesen von rhythmisch komplexer Musik. In dem -Beispiel ist der 9/8-Takt in 2, 2, 2 und 3 aufgeteilt. Das wird -der @code{set-time-signature}-Funktion als das dritte Argument mitgegeben: -@code{'(2 2 2 3)}: - -" - doctitlede = "Dirigirzeichen, Taktgruppenzeichen" - - -%% Translation of GIT committish: b3196fadd8f42d05ba35e8ac42f7da3caf8a3079 - texidocfr = " -Il existe des options qui permettent de grouper les ligatures au sein -d'une mesure, grâce à la fonction Scheme @code{set-time-signature}. -Celle-ci prend trois arguments : le nombre de pulsations, la durée de la -pulsation et le regroupement des pulsations dans la mesure. Si l'on -fait appel au @code{Measure_grouping_engraver}, la fonction -@code{set-time-signature} créera aussi des symboles -@code{MeasureGrouping}. Ces symboles aident à la lecture des œuvres -modernes à la rythmique complexe. Dans l'exemple qui suit, la mesure à -9/8 est divisée en 2, 2, 2 et 3. Ceci est fourni en tant que troisième -argument à @code{set-time-signature} : @code{'(2 2 2 3)}. - -" - doctitlefr = "Signes de direction, signes de sous-groupe" diff --git a/input/texidocs/contemporary-glissando.texidoc b/input/texidocs/contemporary-glissando.texidoc deleted file mode 100644 index 0946c1b66e..0000000000 --- a/input/texidocs/contemporary-glissando.texidoc +++ /dev/null @@ -1,15 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Se puede tipografiar un gissando contemporáneo sin nota final -utilizando una nota oculta y temporalización de cadenza. - -" - doctitlees = "Glissando contemporáneo" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d -texidocde = " -Ein modernes Glissando ohne eine Endnote kann gesetzt werden, indem -eine Kadenz eingesetzt wird und die Endnote unsichtbar gemacht wird. - -" - doctitlede = "Moderne Glissandi" diff --git a/input/texidocs/controlling-the-placement-of-chord-fingerings.texidoc b/input/texidocs/controlling-the-placement-of-chord-fingerings.texidoc deleted file mode 100644 index fe4ed26bca..0000000000 --- a/input/texidocs/controlling-the-placement-of-chord-fingerings.texidoc +++ /dev/null @@ -1,22 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Se puede controlar con precisión la colocación de los números de digitación. - -" - doctitlees = "Controlar la colocación de las digitaciones de acordes" - - -%% Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 - - texidocfr = " -Le positionnement des doigtés peut être contrôlé de manière très précise. - -" - doctitlefr = "Conrôle du positionnement des doigtés" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Die Position von Fingersatzzahlen kann exakt kontrolliert werden. - -" - doctitlede = "Position von Fingersatz in Akkorden kontrollieren" diff --git a/input/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc b/input/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc deleted file mode 100644 index 6665bc7978..0000000000 --- a/input/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc +++ /dev/null @@ -1,30 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -El orden vertical que ocupan las inscripciones gráficas está -controlado con la propiedad @code{'script-priority}. Cuanto más -bajo es este número, más cerca de la nota se colocará. En este -ejemplo, el @code{TextScript} (el sostenido) tiene primero la -prioridad más baja, por lo que se sitúa en la posición más baja en -el primer ejemplo. En el segundo, el semitrino (el @code{Script}) -es el que la tiene más baja, por lo que se sitúa en la parte -interior. Cuando dos objetos tienen la misma prioridad, el orden -en que se introducen determina cuál será el que aparece en primer -lugar. - -" - doctitlees = "Controlar la ordenación vertical de las inscripciones" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d -texidocde = " -Die vertikale Anordnung von Beschriftungen wird mit der -@code{'script-priority}-Eigenschaft kontrolliert. Um so kleiner die -Zahl, umso näher wird die Beschriftung in Bezug auf die Note gesetzt. In -diesem Beispiel hat das @code{TextScript}-Objekt (das Kreuz) zuerst -die niedrigste Priorität, wird also auch am niedrigsten in dem ersten -Beispiel gesetzt. Im zweiten Fall hat der Praller (das @code{Script}) -die niedrigste Priorität, darum wird er am nächsten zum System gesetzt. -Wenn zwei Objekte die gleiche Priorität haben, wird ihre Reihenfolge -anhand ihres Auftretens in der Quelldatei entschieden. - -" - doctitlede = "Die vertikale Anordnung von Beschriftungen kontrollieren" diff --git a/input/texidocs/creating-a-delayed-turn.texidoc b/input/texidocs/creating-a-delayed-turn.texidoc deleted file mode 100644 index dcbdf96b4d..0000000000 --- a/input/texidocs/creating-a-delayed-turn.texidoc +++ /dev/null @@ -1,26 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca -texidoces = " -La creación de un grupeto circular de anticipación entre dos notas, -donde la nota inferior del grupeto utiliza una alteración, requiere -varias sobreescriturasw de propiedades. La propiedad -@code{outside-staff-priority} se debe establecer al valor @code{#f}, pues en -caso contrario tendría prioridad sobre la propiedad @code{avoid-slur -property}. El valor de @code{halign} se utiliza para colocar el -grupeto horizontalmente. - -" - -doctitlees = "Crear un grupeto de anticipación" - - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Einen Doppelschlag mit Vorhalt zu erstellen, wobei die untere Note das -Vorzeichen benutzt, erfordert einige Einstellungsänderungen. Die -@code{outside-staff-priority}-Eigenschaft muss auf falsch (@code{#f}) -gesetzt werden, weil sie sonst über die Eigenschaft -@code{avoid-slur property} dominieren würde. Der Wert von @code{halign} -wird benutzt, um den Doppelschlag horizontal zu positionieren. -" - - doctitlede = "Einen Doppelschlag mit Vorhalt erstellen" diff --git a/input/texidocs/creating-a-sequence-of-notes-on-various-pitches.texidoc b/input/texidocs/creating-a-sequence-of-notes-on-various-pitches.texidoc deleted file mode 100644 index c167fb45d2..0000000000 --- a/input/texidocs/creating-a-sequence-of-notes-on-various-pitches.texidoc +++ /dev/null @@ -1,13 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -En una música que tenga muchas apariciones de la -misma secuencia de notas a distintas alturas, podría ser de -utilidad la siguiente función musical. Admite una nota, de la que -sólo se utiliza su altura. Las funciones de apoyo en Scheme se -han tomado prestadas del documento de \"Consejos y trucos\" de la -versión 2.10 del manual. Este ejemplo crea las duraciones -rítmicas que se usan a todo lo largo de «Marte», de «Los Planetas» -de Gustav Holst. - -" - doctitlees = "Crear una secuencia de notas a distintas alturas" diff --git a/input/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc b/input/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc deleted file mode 100644 index ddd1e82466..0000000000 --- a/input/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc +++ /dev/null @@ -1,18 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Se puede trazar un símbolo de arpegio entre notas de distintas -voces que están sobre el mismo pentagrama si el grabador -@code{Span_arpeggio_engraver} se traslada al contexto de -@code{Staff} context: - -" - doctitlees = "Crear arpegios entre notas de voces distintas" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d -texidocde = " -Ein Arpeggio kann zwischen Noten aus unterschidlichen Stimmen auf demselben -System gezogen werden, wenn der @code{Span_arpeggio_engraver} in den -@code{Staff}-Kontext verschoben wird: - -" - doctitlede = "Arpeggios zwischen unterschiedlichen Stimmen erzeugen" diff --git a/input/texidocs/creating-blank-staves.texidoc b/input/texidocs/creating-blank-staves.texidoc deleted file mode 100644 index 17eca4f7db..0000000000 --- a/input/texidocs/creating-blank-staves.texidoc +++ /dev/null @@ -1,11 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Para crear pentagramas en blanco, genere compases vacíos y después -elimine el grabador de números de compás -@code{Bar_number_engraver} del contexto @code{Score}, y los -grabadores de la indicación de compás -@code{Time_signature_engraver}, de la clave @code{Clef_engraver} y -de los compases @code{Bar_engraver} del contexto de @code{Staff}. - -" - doctitlees = "Crear pentagramas en blanco" diff --git a/input/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc b/input/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc deleted file mode 100644 index d8fa5d4ac1..0000000000 --- a/input/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc +++ /dev/null @@ -1,17 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Dentro de un @code{PianoStaff}, es posible hacer que un arpegio -cruce entre los pentagramas ajustando la propiedad -@code{PianoStaff.connectArpeggios}. - -" - doctitlees = "Crear arpegios que se cruzan entre pentagramas dentro de un sistema de piano" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d -texidocde = " -Arpeggio über mehrere Systeme können in anderen Kontexten als dem -@code{PianoStaff} erstellt werden, wenn der @code{Span_arpeggio_engraver} -in den @code{Score}-Kontext eingefügt wird. - -" - doctitlede = "Arpeggio über mehrere Systeme in anderen Kontexten" diff --git a/input/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc b/input/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc deleted file mode 100644 index ce2abb883c..0000000000 --- a/input/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc +++ /dev/null @@ -1,18 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Se pueden crear arpegios que se cruzan entre pentagramas dentro de -contextos distintos a @code{PianoStaff} si se incluye el grabador -@code{Span_arpeggio_engraver} en el contexto de @code{Score}. - -" - doctitlees = "Creación de arpegios que se cruzan entre pentagramas dentro de otros contextos" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -In einem Klaviersystem (@code{PianoStaff}) ist es möglich, ein Arpeggio -zwischen beiden Systemen zu verbinden, indem die -@code{PianoStaff.connectArpeggios}-Eigenschaft gesetzt wird. - - -" - doctitlede = "Arpeggio zwischen Systemen in einem Klaviersystem erstellen" diff --git a/input/texidocs/creating-metronome-marks-in-markup-mode.texidoc b/input/texidocs/creating-metronome-marks-in-markup-mode.texidoc deleted file mode 100644 index 78901d8eba..0000000000 --- a/input/texidocs/creating-metronome-marks-in-markup-mode.texidoc +++ /dev/null @@ -1,16 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Se pueden crear indicaciones metronómicas nuevas en modo de -marcado, pero no cambian el tempo en la salida MIDI. - -" - doctitlees = "Crear indicaciones metronómicas en modo de marcado" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Neue Metronombezeichnungen können als Textbeschriftung erstellt werden, -aber sie ändern nicht das Tempo für die MIDI-Ausgabe. - -" - - doctitlede = "Eine Metronombezeichnung als Textbeschriftung erstellen" diff --git a/input/texidocs/creating-real-parenthesized-dynamics.texidoc b/input/texidocs/creating-real-parenthesized-dynamics.texidoc deleted file mode 100644 index 1c9d4547b3..0000000000 --- a/input/texidocs/creating-real-parenthesized-dynamics.texidoc +++ /dev/null @@ -1,18 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Aunque la manera más fácil de añadir paréntesis a una indicación -de dinámica es utilizar un bloque @code{\\markup}, este método -tiene un inconveniente: los objetos que se crean se comportarán -como elementos de marcado de texto y no como indicaciones -dinámicas. - -Sin embargo, es posible crear un objeto similar utilizando el -código de Scheme equivalente (como se explica en \"Interfaz del -programador de elementos de marcado\"), en combinación con la -función @code{make-dynamic-script}. De esta forma, el elemento de -marcado se tratará como una indicación dinámica, y por tanto -seguirá siendo compatible con instrucciones como -@code{\\dynamicUp} o @code{\\dynamicDown}. - -" - doctitlees = "Crear indicaciones dinámicas \"verdaderas\" entre paréntesis" diff --git a/input/texidocs/creating-simultaneous-rehearsal-marks.texidoc b/input/texidocs/creating-simultaneous-rehearsal-marks.texidoc deleted file mode 100644 index 5b81e68c0a..0000000000 --- a/input/texidocs/creating-simultaneous-rehearsal-marks.texidoc +++ /dev/null @@ -1,14 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -A diferencia de las inscripciones de texto, las lestras de ensayo -no se pueden apilar en un punto concreto de la partitura: sólo se -crea un objeto @code{RehearsalMark}. Utilizando un compás y línea -divisoria invisibles se puede crear una nueva marca de ensayo, -dando la apariencia de dos marcas en la misma columna. - -Este método también puede resultar útil para colocar marcas de -ensayo tanto al final de un sistema como al comienzo del sistema -siguiente. - -" - doctitlees = "Creación de marcas de ensayo simultáneas" diff --git a/input/texidocs/creating-slurs-across-voices.texidoc b/input/texidocs/creating-slurs-across-voices.texidoc deleted file mode 100644 index 3a47242ab1..0000000000 --- a/input/texidocs/creating-slurs-across-voices.texidoc +++ /dev/null @@ -1,13 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -En determinadas situaciones es necesario crear ligaduras de -expresión entre notas que están en voces distintas. - -La solución es añadir notas invisibles a una de las voces -utilizando @code{\\hideNotes}. - -Este ejemplo es el compás 235 de la Chacona de la segunda Partita -para violín solo, BWV 1004, de Bach. - -" - doctitlees = "Hacer ligaduras entre voces distintas" diff --git a/input/texidocs/creating-text-spanners.texidoc b/input/texidocs/creating-text-spanners.texidoc deleted file mode 100644 index 68039a0bee..0000000000 --- a/input/texidocs/creating-text-spanners.texidoc +++ /dev/null @@ -1,10 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Las instrucciones @code{\\startTextSpan} y @code{\\stopTextSpan} -permiten la creación de elementos de extensión textuales tan -fácilmente como indicaciones de pedal u -octavaciones. Sobreescribimos ciertas propiedades del objeto -@code{TextSpanner} para modificar su salida. - -" - doctitlees = "Crear elementos de extensión textuales" diff --git a/input/texidocs/custodes.texidoc b/input/texidocs/custodes.texidoc deleted file mode 100644 index 2eb1822c70..0000000000 --- a/input/texidocs/custodes.texidoc +++ /dev/null @@ -1,6 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Se pueden tipografiar «custos» en diferentes estilos. - -" - doctitlees = "Custos" diff --git a/input/texidocs/customizing-fretboard-fret-diagrams.texidoc b/input/texidocs/customizing-fretboard-fret-diagrams.texidoc deleted file mode 100644 index 71a0438cdf..0000000000 --- a/input/texidocs/customizing-fretboard-fret-diagrams.texidoc +++ /dev/null @@ -1,24 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Se pueden establecer las propiedades de los diagramas de -posiciones de acordes por medio de @code{'fret-diagram-details}. -Para los diagramas de posiciones de FretBoard, se aplican los -overrides (sobreescrituras) al objeto @code{FretBoards.FretBoard}. -Como @code{Voice}, @code{FretBoards} es un contexto del nivel -inferior, y por tanto se puede omitir su nombre en la -sobreescritura de propiedades. - -" - doctitlees = "Personalizar los diagramas de posiciones" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Eigenschaften von Bunddiagrammen können in -@code{'fret-diagram-details} verändert werden. Einstellungen mit -dem @code{\override}-Befehl werden dem @code{FretBoards.FretBoard}-Objekt -zugewiesen. Genauso wie @code{Voice} ist auch @code{FretBoards} ein -Kontext der niedrigsten Ebene, weshalb der Kontext auch in dem Befehl -weggelassen werden kann. - -" - doctitlede = "Bunddiagramme anpassen" diff --git a/input/texidocs/customizing-markup-fret-diagrams.texidoc b/input/texidocs/customizing-markup-fret-diagrams.texidoc deleted file mode 100644 index cba3b90d46..0000000000 --- a/input/texidocs/customizing-markup-fret-diagrams.texidoc +++ /dev/null @@ -1,31 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Se pueden establecer las propiedades de los diagramas de -posiciones a través de @code{'fret-diagram-details}. Para los -diagramas de posiciones de marcado, se pueden aplicar overrides -(sobreescrituras) al objeto @code{Voice.TextScript} o directamente al elemento de marcado. - -" - doctitlees = "Personalizar diagramas de posiciones de marcado" - -%% Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 - - texidocfr = " -Les propriétés d'un diagramme de fret sont modifiables grâce au -@code{'fret-diagram-details}. Lorsqu'ils sont générés sous forme -de @code{\markup}, rien n'empêche de les modifier en jouant sur les -réglages de l'objet @code{Voice.TextScript} ou bien directement sur -le @qq{markup}. - -" - doctitlefr = "Personnalisation des diagrammes de fret" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Bunddiagramme können mit der Eigenschaft @code{'fret-diagram-details} -angepasst werden. Bunddiagramme, die als Textbeschriftung eingefügt werden, -können Veränderungen im @code{Voice.TextScript}-Objekt oder direkt in der -Beschriftung vorgenommen werden. - -" - doctitlede = "Anpassung von Beschriftungs-Bunddiagrammen" diff --git a/input/texidocs/default-direction-of-stems-on-the-center-line-of-the-staff.texidoc b/input/texidocs/default-direction-of-stems-on-the-center-line-of-the-staff.texidoc deleted file mode 100644 index a84847a821..0000000000 --- a/input/texidocs/default-direction-of-stems-on-the-center-line-of-the-staff.texidoc +++ /dev/null @@ -1,16 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -La dirección predeterminada de las plicas sobre la tercera línea -del pentagrama está determinada por la propiedad -@code{neutral-direction} del objeto @code{Stem}. - -" - doctitlees = "Dirección predeterminada de las plicas sobre la tercera línea del pentagrama" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Die Richtung von Hälsen auf der mittleren Linie kann mit der @code{Stem}-Eigenschaft -@code{neutral-direction} gesetzt werden. - -" - doctitlede = "Standardrichtung für Hälse auf der Mittellinie" diff --git a/input/texidocs/defining-predefined-fretboards-for-other-instruments.texidoc b/input/texidocs/defining-predefined-fretboards-for-other-instruments.texidoc deleted file mode 100644 index 617ed81c3b..0000000000 --- a/input/texidocs/defining-predefined-fretboards-for-other-instruments.texidoc +++ /dev/null @@ -1,54 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " - -Se pueden añadir diagramas de posiciones predefinidas para -instrumentos nuevos además de los estándar que se usan para la -guitarra. Este archivo muestra cómo se hace, definiendo una afinación -nueva y unas cuantas posiciones para el cuatro venezolano. - -Este archivo también muestra cómo se pueden incluir las digitaciones -en los acordes que se usan como puntos de referencia para la búsqueda -de acordes en la tabla, y mostrarse en el diagrama de posiciones y la -tablatura @code{TabStaff}, pero no en la música. - -Estas posiciones no se pueden transportar porque contienen información -de las cuerdas. Hay planes para corregir esto en un futuro. - -" - doctitlees = "Definición de posiciones predefinidas para otros instrumentos" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - - texidocfr = " -La liste des diagrammes standards prédéfinis pour la guitare peut être - augmentée d'autres définitions spécifiques à d'autres instruments. -Voici comment définir un nouvel accordage ainsi que quelques diagrammes -prédéfinis pour le @qq{cuatro vénézuélien}. - -Cet exemple illustre aussi la manière d'ajouter des doigtés aux -accords ; ils serviront de référence pour la boucle d'accord et seront -indiqués dans les diagrammes et le @code{TabStaff}, mais pas dans la musique. - -Ces diagrammes ne peuvent pas être transposés, dans la mesure où ils -contiennent des informations sur les cordes. Ceci est amené à évoluer. - -" - doctitlefr = "Création de diagrammes de fret prédéfinis pour d'autres instruments" - -%% Translation of GIT committish: 33f623301a41fcc53efadf96bca1c72834763415 - texidocde = " -Vordefinierte Bunddiagramme können für neue Instrumente hinzugefügt werden -neben denen, die schon für die Gitarre definiert sind. Dieses Schnipsel -zeigt, wie man eine neue Saitenstimmung definiert und dann eigene vordefinierte -Bunddiagramme bestimmt. Das Beispiel ist für das venezualische Cuatro. - -Dieses Schnipsel zeigt auch, wie Fingersatz in die Akkorde eingebunden -werden kann, um als Referenzpunkt für die Akkordauswahl benutzt werden -kann. Dieser Fingersatz wird im Bunddiagramm und in der Tabulatur, -aber nicht in den Noten angezeigt. - -Diese Bunddiagramme sind nicht transponierbar, weil sie Saiteninformationen -enthalten. Das soll in der Zukunft verbessert werden. - -" - doctitlede = "Eigene vordefinierte Bunddiagramme für andere Instrumente erstellen" diff --git a/input/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc b/input/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc deleted file mode 100644 index 319a526af0..0000000000 --- a/input/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc +++ /dev/null @@ -1,29 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Si hay un solo pentagrama en un de los tipos de sistema -@code{ChoirStaff} o @code{StaffGroup}, el comportamiento -predeterminado es que no se imprima el corchete en la barra inicial. -Esto se puede cambiar sobreescribiendo las propiedades adecuadas. - -Observe que en contextos como @code{PianoStaff} y -@code{GrandStaff} en que los sistemas empiezan con una llave en -lugar de un corchete, se debe establecer el valor de una propiedad -distinta, como se ve en el segundo sistema del ejemplo. - -" - doctitlees = "Mostrar corchete o llave en grupos de un solo pentagrama" - - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Wenn nur ein System einer Systemgruppe vom Typ @code{ChoirStaff} oder -@code{StaffGroup} angezeigt wird, wird die Klammer zu Beginn normalerweise -nicht gesetzt. Das kann verändert werden, indem man die ensprechende -Eigenschaft veränder. - -Bei Systemen wie @code{PianoStaff} und @code{GrandStaff}, die mit einer -geschweiften Klammer beginne, muss eine andere Eigenschaft verändt werden, -wie das zweite Beispiel zeigt. - -" - doctitlede = "Klammer anzeigen, wenn nur ein System gesetzt wird" diff --git a/input/texidocs/dodecaphonic-style-accidentals-for-each-note-including-naturals.texidoc b/input/texidocs/dodecaphonic-style-accidentals-for-each-note-including-naturals.texidoc deleted file mode 100644 index 9a053c1f71..0000000000 --- a/input/texidocs/dodecaphonic-style-accidentals-for-each-note-including-naturals.texidoc +++ /dev/null @@ -1,27 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - doctitlees = "Alteraciones de estilo dodecafónico para todas las notas, incluidas las naturales" - texidoces = " -En las obras de principios del s.XX, empezando por Schoenberg, Berg y -Webern (la \"Segunda\" escuela de Viena), cada nota de la escala de -doce tonos se debe tratar con igualdad, sin ninguna jerarquía como los -grados clásicos tonales. Por tanto, estos compositores imprimen una -alteración accidental para cada nota, incluso en las notas naturales, -para enfatizar su nuevo enfoque de la teoría y el lenguaje musicales. - -Este fragmento de código muestra cómo conseguir dichas reglas de -notación. - -" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " - In Werken des fürhen 20. Jahrhundert, angefangen mit Schönberg, Berg - und Webern (die zweite Wiener Schule), wird jeder Ton der - Zwölftonleiter als gleichwertig erachtet, ohne hierarchische - Ordnung. Deshalb wird in dieser Musik für jede Note ein Versetzungszeichen - ausgegeben, auch für unalterierte Tonhöhen, um das neue Verständnis - der Musiktheorie und Musiksprache zu verdeutlichen. - - Dieser Schnipsel zeigt, wie derartige Notationsregeln zu erstellen sind. - " - doctitlede = "Versetzungszeichen für jede Note im Stil der Zwölftonmusik" diff --git a/input/texidocs/embedding-native-postscript-in-a--markup-block.texidoc b/input/texidocs/embedding-native-postscript-in-a--markup-block.texidoc deleted file mode 100644 index 4dab4d33e1..0000000000 --- a/input/texidocs/embedding-native-postscript-in-a--markup-block.texidoc +++ /dev/null @@ -1,7 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Se puede insertar códico PostScript directamente dentro de un -bloque @code{\\markup}. - -" - doctitlees = "Empotrar PostScript nativo dentro de un bloque \\markup" diff --git a/input/texidocs/engravers-one-by-one.texidoc b/input/texidocs/engravers-one-by-one.texidoc deleted file mode 100644 index 9664f073c6..0000000000 --- a/input/texidocs/engravers-one-by-one.texidoc +++ /dev/null @@ -1,31 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Del problema central de la notación, esto es, crear un determinado -símbolo, se encargan los «plugins» o complementos añadidos. Cada -uno de los complementos se conoce como un grabador. En este -ejemplo, los grabadores se van activando uno por uno, en el orden -siguiente: - -- cabeza de las notas, - -- el símbolo del pentagrama, - -- clave, - -- plicas, - -- barras, ligaduras de expresión, acentos, - -- alteraciones, líneas divisorias, indicación del compás, y armadura. - -Los grabadores se encuentran agrupados. Por ejemplo, las cabezas -de nota, ligaduras de expresión, barras de corchea, etc. forman un -contexto de voz. Los grabadores de la armadura, alteraciones, -compás, etc. forman un contexto de pentagrama. - -Sólo podemos ver el primer ejemplo en este documento; para ver los -demás debemos descartar el fragmento de código y procesarlo en -nuestro ordenador. - -" - doctitlees = "Los grabadores, uno por uno" diff --git a/input/texidocs/engraving-ties-manually.texidoc b/input/texidocs/engraving-ties-manually.texidoc deleted file mode 100644 index 9e3610c98d..0000000000 --- a/input/texidocs/engraving-ties-manually.texidoc +++ /dev/null @@ -1,32 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - doctitlees = "Grabado manual de las ligaduras" - texidoces = " -Se pueden grabar a mano las ligaduras modificando la propiedad -@code{tie-configuration} del objeto @code{TieColumn}. El primer número -indica la distancia a partir de la tercera línea del pentagrama en -espacios de pentagrama, y el segundo número indica la dirección (1 = -hacia arriba, -1 = hacia abajo). - -" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d -texidocde = " -Überbindungen können manuell gesetzt werden, indem man die -@code{tie-configuration}-Eigenschaft des @code{TieColumn}-Objekts -beeinflusst. Die erste Zahl zeigt den Abstand von der Mitte in -Notensystemabständen an, die zweite Zahl zeigt die Richtung an (1 = nach oben, --1 = nach unten). - -" - doctitlede = "Bindebögen manuell setzen" - - -%% Translation of GIT committish: e71f19ad847d3e94ac89750f34de8b6bb28611df - texidocfr = " -Il est possible de graver manuellement les liaisons de tenue, en -modifiant la propriété @code{tie-configuration}. Pour chaque paire, le -premier nombre indique la distance à la portée, en espaces de portée, et -le second la direction (1 pour haut, @minus{}1 pour bas). - -" - doctitlefr = "Dessin à main levée de liaisons de tenue" diff --git a/input/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc b/input/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc deleted file mode 100644 index dcf9373376..0000000000 --- a/input/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc +++ /dev/null @@ -1,47 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - doctitlees = "Escribir varios grupos especiales usando una sola instrucción \\times" - texidoces = " -La propiedad @code{tupletSpannerDuration} establece cuánto debe durar -cada grupo de valoración especial contenido dentro del corchete que -aparece después de @code{\\times}. Así, se pueden escribir muchos -tresillos seguidos dentro de una sola expresión @code{\\times}, -ahorrando trabajo de teclado. - -En el ejemplo se muestran dos tresillos, aunque se ha escrito -@code{\\times} una sola vez. - - -Para ver más inforamción sobre @code{make-moment}, véase -\"Administración del tiempo\". - -" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Die Eigenschaft @code{tupletSpannerDuration} bestimmt, wie lange jede -der N-tolen innerhalb der Klammern nach dem @code{\\times}-Befehl -dauert. Auf diese Art können etwa viele Triolen nacheinander mit nur -einem @code{\\times}-Befehl geschrieben werden. - -Im Beispiel sind zwei Triolen zu sehen, obwohl @code{\\times} nur -einmal geschrieben wurde. - -Mehr Information über @code{make-moment} gibt es in \"Verwaltung der Zeiteinheiten\". - -" - doctitlede = "Mehrere Triolen notieren, aber nur einmal \\times benutzen" - - -%% Translation of GIT committish: e71f19ad847d3e94ac89750f34de8b6bb28611df - texidocfr = " -La propriété @code{tupletSpannerDuration} spécifie la longueur voulue de -chaque crochet. Avec elle, vous pouvez faire plusieurs nolets en ne -tapant @code{\\times} qu'une fois, ce qui évite une longue saisie. - -Dans l'exemple suivant, deux triolets sont imprimés avec une seule fonction -@code{\\times}. - -Pour plus d'information sur @code{make-moment}, voir @ref{Time administration}. - -" - doctitlefr = "Plusieurs triolets avec une seule commande \\times" diff --git a/input/texidocs/fingerings,-string-indications,-and-right-hand-fingerings.texidoc b/input/texidocs/fingerings,-string-indications,-and-right-hand-fingerings.texidoc deleted file mode 100644 index 18766b75f5..0000000000 --- a/input/texidocs/fingerings,-string-indications,-and-right-hand-fingerings.texidoc +++ /dev/null @@ -1,25 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -En este ejemplo se combinan las digitaciones de la mano izquierda, -indicaciones del número de cuerda y digitaciones de la mano -derecha. - -" - doctitlees = "Digitaciones, indicación del número de cuerda y digitaciones de mano derecha" - -%% Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 - - texidocfr = " -L'exemple suivant illustre comment combiner des doigtés pour la main -gauche, des indications de corrde et des doigtés pour la main droite. - -" - doctitlefr = "Doigtés, indications de cordeet doigtés main droite" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Dieses Beispiel kombiniert Fingersatz für die linke Hand, Saitennummern -und Fingersatz für die rechte Hand. - -" - doctitlede = "Fingersatz, Saitennummern und Fingersatz für die rechte Hand" diff --git a/input/texidocs/flat-flags-and-beam-nibs.texidoc b/input/texidocs/flat-flags-and-beam-nibs.texidoc deleted file mode 100644 index c05c4f703b..0000000000 --- a/input/texidocs/flat-flags-and-beam-nibs.texidoc +++ /dev/null @@ -1,63 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " - Son posibles tanto los corchetes rectos sobre notas sueltas como -extremos de barra sueltos en figuras unidas, con una combinación de -@code{stemLeftBeamCount}, @code{stemRightBeamCount} e indicadores de -barra @code{[ ]} emparejados. - -Para corchetes rectos que apunten a la derecha sobre notas sueltas, -use indicadores de barra emparejados @code{[]} y establezca -@code{stemLeftBeamCount} a cero (véase el ejemplo 1). - -Para corchetes rectos que apunten a la izquierda, establezca en su -lugar @code{stemRightBeamCount} (ejemplo 2). - -Para extremos sueltos que apunten a la derecha al final de un conjunto -de notas unidas, establezca @code{stemRightBeamCount} a un valor -positivo. Y para extremos sueltos que apunten a la izquierda al -principio de un conjunto de notas unidas, establezca -@code{stemLeftBeamCount} en su lugar (ejemplo 3). - -A veces, para una nota suelta rodeada de silencios tiene sentido que -lleve los dos extremos sueltos del corchete plano, apuntando a derecha -e izquierda. Hágalo solamente con indicadores de barra emparejados -@code{[ ]} (ejemplo 4). - -(Observe que @code{\\set stemLeftBeamCount} siempre equivale a -@code{\\once \\set}. En otras palabras, los ajustes de la cantidad de -barras no se recuerdan, y por ello el par de corchetes planos -aplicados a la nota Do semicorchea @code{c'16[]} del último ejemplo -no tiene nada que ver con el @code{\\set} de dos notas por detrás.) - -" - doctitlees = "Corchetes rectos y extremos de barra sueltos" - - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Gerade Fähnchen an einzelnen Noten und überstehende Balkenenden bei -bebalkten Notengruppen sind möglich mit einer Kombination aus -@code{stemLeftBeamCount}, @code{stemRightBeamCount} und Paaren von -@code{[]}-Balkenbegrenzungen. - -Für gerade Fähnchen, die nach rechts zeigen, kann @code{[]} eingesetzt -werden und @code{stemLeftBeamCount} auf Null gesetzt werden (wie -Bsp. 1). - -Für gerade Fähnchen, die nach links zeigen, muss @code{stemRightBeamCount} -eingesetzt werden (Bsp. 2). - -Für überstehende Balkenenden nach rechts muss @code{stemRightBeamCount} -auf einen positiven Wert gesetzt werden, für Balkenenden, die nach links -zeigen benutzt man @code{stemLeftBeamCount} (Bsp. 3). - -Manchmal können einzelne Noten, die von Pausen umgeben sind, auch Balkenenden -in beide Richtungen tragen. Das geschieht mit @code{[]}-Klammern (Bsp. 4). - -(@code{\\set stemLeftBeamCount} entspricht immer dem Befehl -@code{\\once \\set}. Anders gesagt müssen die Einstellungen immer wieder -wiederholt werden und die Fähnchen des letzten Sechszehntels im letzten -Beispiel haben nichts mit dem @code{\\set}-Befehl zwei Noten vorher zu tun.) - -" - doctitlede = "Gerade Fähnchen und überstehende Balkenenden" diff --git a/input/texidocs/forcing-horizontal-shift-of-notes.texidoc b/input/texidocs/forcing-horizontal-shift-of-notes.texidoc deleted file mode 100644 index 63a0a50340..0000000000 --- a/input/texidocs/forcing-horizontal-shift-of-notes.texidoc +++ /dev/null @@ -1,19 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - - doctitlees = "Forzar el desplazamiento horizontal de las notas" - -texidoces = " - Cuando el motor de tipografiado no es capaz de todo, se puede usar la - sintaxis siguiente para sobreescribir las decisiones de tipografía. - Las unidades de medida que se usan aquí son espacios de pentagrama. - -" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Wenn es zu Zusammenstößen kommt, kann mit folgender Lösung eine andere -Position manuell eingestellt werden. Die Einheiten hier sind -Notenlinienzwischenräume. - -" - doctitlede = "Horizontale Verschiebung von Noten erzwingen" diff --git a/input/texidocs/generating-random-notes.texidoc b/input/texidocs/generating-random-notes.texidoc deleted file mode 100644 index 5317824877..0000000000 --- a/input/texidocs/generating-random-notes.texidoc +++ /dev/null @@ -1,11 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Este fragmento de código basado en Scheme genera -24 notas aleatorias (o tantas como se necesiten), basándose en la -hora actual (o en cualquier número pseudo-aleatorio que se -especifique en su lugar, para obtener las mismas notas aleatorias -cada vez): es decir, para obtener distintos patrones de notas, -sólo tiene que modificar este número. - -" - doctitlees = "Generación de notas aleatorias" diff --git a/input/texidocs/grid-lines--changing-their-appearance.texidoc b/input/texidocs/grid-lines--changing-their-appearance.texidoc deleted file mode 100644 index ed181b7a37..0000000000 --- a/input/texidocs/grid-lines--changing-their-appearance.texidoc +++ /dev/null @@ -1,15 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Se puede cambiar el aspecto de las líneas de rejilla -sobreescribiendo algunas de sus propiedades. - -" - doctitlees = "Líneas de rejilla: modificar su aspecto" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Die Erscheinung der Gitternetzlinien kann durch einige Eigenschaften -geändert werden. - -" - doctitlede = "Gitternetzlinien: Aussehen verändern" diff --git a/input/texidocs/grid-lines--emphasizing-rhythms-and-notes-synchronization.texidoc b/input/texidocs/grid-lines--emphasizing-rhythms-and-notes-synchronization.texidoc deleted file mode 100644 index f6ec7ca344..0000000000 --- a/input/texidocs/grid-lines--emphasizing-rhythms-and-notes-synchronization.texidoc +++ /dev/null @@ -1,9 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Se pueden trazar líneas verticales normales entre pentagramas para -mostrar la relación entre notas; sin embargo, en caso de música -monofónica, podemos hacer invisible el segundo pentagrama, y que -las líneas sean más cortas, como en este fragmento de código. - -" - doctitlees = "Líneas de rejilla: destacar ritmos y la relación temporal entre notas" diff --git a/input/texidocs/grouping-beats.texidoc b/input/texidocs/grouping-beats.texidoc deleted file mode 100644 index 4e27feb9ff..0000000000 --- a/input/texidocs/grouping-beats.texidoc +++ /dev/null @@ -1,24 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Los patrones de barrado se pueden alterar con la propiedad -@code{beatGrouping}: - -" - doctitlees = "Agrupar los pulsos" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d -texidocde = " -Balkengruppen können mit der @code{beatGrouping}-Eigenschaft geändert -werden: - -" - doctitlede = "Notengruppen" - - -%% Translation of GIT committish: b3196fadd8f42d05ba35e8ac42f7da3caf8a3079 - texidocfr = " -La manière de gérer les ligatures est influencée par la propriété -@code{beatGrouping} : - -" - doctitlefr = "Regroupement selon la pulsation" diff --git a/input/texidocs/guitar-strum-rhythms.texidoc b/input/texidocs/guitar-strum-rhythms.texidoc deleted file mode 100644 index 4020fd2663..0000000000 --- a/input/texidocs/guitar-strum-rhythms.texidoc +++ /dev/null @@ -1,25 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Para la música de guitarra, es posible mostrar los ritmos de rasgueo, -además de las notas de la melodía, acordes y diagramas de posiciones. - -" - doctitlees = "Ritmos rasgueados de guitarra" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -In Guitarrennotation kann neben Melodie, Akkordbezeichnungen und -Bunddiagrammen auch der Schlagrhythmus angegeben werden. - -" - doctitlede = "Schlagrhythmus für Guitarren" - - -%% Translation of GIT committish: fa7695ea860d7ab2db86581dd5f8bc4f413f6705 - texidocfr = " -En matière de notation pour guitare, il arrive que soient indiqués les -@qq{coups de gratte} en plus de la mélodie, grilles d'accords et -diagrammes de tablature. - -" - doctitlefr = "Rythmique et guitare" diff --git a/input/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc b/input/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc deleted file mode 100644 index 1e707264b5..0000000000 --- a/input/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc +++ /dev/null @@ -1,17 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Los cambios de dinámica con estilo de texto (como cresc. y dim.) -se imprimen con una línea intermitente que muestra su alcance. -Esta línea se puede suprimir de la siguiente manera: - -" - doctitlees = "Ocultar la línea de extensión de las expresiones textuales de dinámica" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d -texidocde = " -Dynamik-Texte (wie cresc. und dim.) werden mit einer gestrichelten Linie -gesetzt, die ihre Dauer anzeigt. Diese Linie kann auf foldenge Weise -unterdrückt werden: - -" - doctitlede = "Crescendo-Linien von Dynamik-Texten unterdrücken" diff --git a/input/texidocs/incipit.texidoc b/input/texidocs/incipit.texidoc deleted file mode 100644 index e0b6dcda1b..0000000000 --- a/input/texidocs/incipit.texidoc +++ /dev/null @@ -1,7 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Los «incipit» se pueden escribir utilizando el grob del nombre del -instruemento, pero manteniendo independientes las definiciones del -nombre del instrumento y del incipit." - - doctitlees = "Incipit" diff --git a/input/texidocs/indicating-cross-staff-chords-with-arpeggio-bracket.texidoc b/input/texidocs/indicating-cross-staff-chords-with-arpeggio-bracket.texidoc deleted file mode 100644 index ac9b399f9b..0000000000 --- a/input/texidocs/indicating-cross-staff-chords-with-arpeggio-bracket.texidoc +++ /dev/null @@ -1,25 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Un corchete de arpegio puede indicar que se tienen que tocadr con la -misma mano notas que están en dos pentagramas distintos. Para hacerlo, -el @code{PianoStaff} se debe configurar para que acepte símbolos de -arpegio de pentagrama cruzado y los símbolos de arpegio se deben -configurar a la forma de corchete en el contexto de @code{PianoStaff}. - -(Debussy, Les collines d’Anacapri, m. 65) - -" - doctitlees = "Indicar acordes de pentagrama cruzado con corchetes de arpegio" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Eine Arpeggioklammer kann anzeigen, dass Noten auf zwei unterschiedlichen -Systemen mit der selben Hand gespielt werden sollen. Damit das notiert -werden kann, muss der @code{PianoStaff}-Kontext so eingestellt werden, -dass er Arpeggios über Systeme hinweg akzeptiert und die Form der Arpeggios -muss auf eine Klammer eingestellt werden. - -(Debussy, Les collines d’Anacapri, T. 65) - -" - doctitlede = "Akkorde auf zwei Systemen mit Arpeggioklammern anzeigen" diff --git a/input/texidocs/inserting-a-caesura.texidoc b/input/texidocs/inserting-a-caesura.texidoc deleted file mode 100644 index 59b680cb6e..0000000000 --- a/input/texidocs/inserting-a-caesura.texidoc +++ /dev/null @@ -1,16 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Las marcas de cesura se pueden crear sobreescribiendo la propiedad -@code{'text} del objeto @code{BreathingSign}. También está disponible -una marca de cesura curva. - -" - doctitlees = "Insertar una cesura" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Zäsurzeichen können erstellt werden, indem die @code{'text}-Eigenschaft -des @code{BreathingSign}-Objektes verändert wird. Ein gekrümmtes -Zäsurzeichen ist auch möglich. -" - doctitlede = "Eine Zäsur einfügen" diff --git a/input/texidocs/isolated-percent-repeats.texidoc b/input/texidocs/isolated-percent-repeats.texidoc deleted file mode 100644 index ad428d1b0b..0000000000 --- a/input/texidocs/isolated-percent-repeats.texidoc +++ /dev/null @@ -1,17 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -También se pueden imprimir símbolos de porcentaje sueltos. Esto se -hace introduciendo un silencio multicompás con una función de -impresión distinta: - -" - doctitlees = "Símbolos de porcentaje sueltos" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Isolierte Prozentwiederholungen können auch ausgegeben werden. Das wird -erreicht, indem man eine Ganztaktpause notiert und ihre Ausgabeform -ändert: - -" - doctitlede = "Isolierte Prozentwiederholungen" diff --git a/input/texidocs/jazz-combo-template.texidoc b/input/texidocs/jazz-combo-template.texidoc deleted file mode 100644 index 190423cce4..0000000000 --- a/input/texidocs/jazz-combo-template.texidoc +++ /dev/null @@ -1,21 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Ésta es una plantilla bastante avanzada, para un conjunto de -jazz. Observe que la notación de todos los instrumentos está en -@code{\\key c \\major} (Do mayor). Esto se refiere al tono de -concierto; la armadura se transporta automáticamente si la música está -dentro de una sección @code{\\transpose}. - -" - doctitlees = "Plantilla para combo de jazz" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Hier ist ein ziemlich kompliziertes Beispiel für ein Jazz-Ensemble. Achtung: -Alle Instrumente sind in @code{\key c \major} (C-Dur) notiert. Das bezieht sich -auf die klingende Musik: LilyPond transponiert die Tonart automatisch, wenn -sich die Noten innerhalb eines @code{\transpose}-Abschnitts befinden. - -" - - doctitlede = "Vorlage für Jazz-Combo" diff --git a/input/texidocs/line-arrows.texidoc b/input/texidocs/line-arrows.texidoc deleted file mode 100644 index 84efe3a7bb..0000000000 --- a/input/texidocs/line-arrows.texidoc +++ /dev/null @@ -1,7 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Se pueden aplicar puntas de flecha a los elementos de extensión de -texto y de línea (como el Glissando). - -" - doctitlees = "Puntas de flecha para las líneas" diff --git a/input/texidocs/lyrics-alignment.texidoc b/input/texidocs/lyrics-alignment.texidoc deleted file mode 100644 index 6249b060e6..0000000000 --- a/input/texidocs/lyrics-alignment.texidoc +++ /dev/null @@ -1,10 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -La alineación horizontal de la letra se puede ajustar sobreescribiendo -la propiedad @code{self-alignment-X} del objeto @code{LyricText}. -@code{#-1} es izquierda, @code{#0} es centrado y @code{#1} es derecha; -sin embargo, puede usar también @code{#LEFT}, @code{#CENTER} y -@code{#RIGHT}. - -" - doctitlees = "Alineación de la letra" diff --git a/input/texidocs/makam-example.texidoc b/input/texidocs/makam-example.texidoc deleted file mode 100644 index 000e11607d..0000000000 --- a/input/texidocs/makam-example.texidoc +++ /dev/null @@ -1,23 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -El «Makam» es un tipo de melodía de Turquía que -utiliza alteraciones microtonales de 1/9 de tono. Consulte el -archivo de inicio @code{makam.ly} (véase el 'Manual de -aprendizaje @version{}, 4.6.3 Otras fuentes de información' para -averiguar la situación de este archivo) para ver detalles de los -nombres de las notas y las alteraciones. - -" - doctitlees = "Ejemplo de «Makam»" - - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Makam ist eine türkische Melodie, in der 1/9-Tonabstände -eingesetzt werden. Sehen Sie sich die Initialisierungsdatei -@code{makam.ly} für weiter Information zu Tonhöhenbezeichnungen -und Alterationen an (siehe -Handbuch zum Lernen @version{}, 4.6.3 Weitere Information zu -Hinweisen, wo diese Datei gespeichert ist)." - - doctitlede = "Makam-Beispiel" diff --git a/input/texidocs/making-slurs-with-complex-dash-structure.texidoc b/input/texidocs/making-slurs-with-complex-dash-structure.texidoc deleted file mode 100644 index c2ea25a7d4..0000000000 --- a/input/texidocs/making-slurs-with-complex-dash-structure.texidoc +++ /dev/null @@ -1,47 +0,0 @@ -%% Translation of GIT committish: d4f58bb3ad4e7fe1967a6b48f25e3addffc8aa14 - texidoces = " - -Las ligaduras de expresión se pueden construir con patrones de -discontinuidad complejos mediante la definición de la propiedad -@code{dash-definition}. @code{dash-definition} es una lista de -@code{elementos de discontinuidad}. Un @code{elemento de -discontinuidad} es una lista de parámetros que definen el -comportamiento de discontinuidad de un segmento de la ligadura de -expresión. - -La ligadura se define en términos del parámetro de bezier t cuyo -rango va de 0 a la izquierda de la ligadura hasta 1 en el extremo -derecho de la ligadura. Cada @code{elemento de discontinuidad} es -una lista @code{(t-inicio t-final fracción-discontinuidad -período-discontinuidad)}. La región de la ligadura desde -@code{t-inicio} hasta @code{t-final} tendrá una fracción -@code{fracción-discontinuidad} de cada -@code{período-discontinuidad} de color negro. -@code{período-discontinuidad} se define en términos de espacios de -pentagrama. @code{fracción-discontinuidad} se establece al valor -de 1 para una ligadura continua. - -" - - doctitlees = "Hacer ligaduras de expresión con estructura compleja de discontinuidad" - - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Legatobögen können mit einem komplizierten Strichelmuster -gesetzt werden, indem die @code{dash-definition}-Eigenschaft -definiert wird. @code{dash-definition} ist eine Liste bestehend -aus @code{dash-elements}-Elementen. Ein @code{dash-element} ist -eine Liste an Parametern, die das Strichverhalten für einen -Abschnitt des Legatobogens definieren. - -Der Bogen wird nach dem Bezierparameter t definiert, welcher -von 0 am linken Ende des Bogens zu 1 am rechten Ende des Bogens -reicht. @code{dash-element} ist eine Liste @code{(start-t stop-t dash-Unterbrechung dash-Abschnitt)}. Die Region des Bogens von @code{start-t} -bis @code{stop-t} hat eine Unterbrechung von @code{dash-Unterbrechung} -von jedem @code{dash-Abschnitt}-Schwarzabschnitt. @code{dash-Abschnitt} ist in Notenlinienzwischenräumen definiert. -@code{dash-Abschnitt} ist auf 1 für einen durchgehenden Bogen -gesetzt. -" - doctitlede = "Legatobögen mit kompliziertem Strichelmuster - definieren" diff --git a/input/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc b/input/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc deleted file mode 100644 index cebc9425b6..0000000000 --- a/input/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc +++ /dev/null @@ -1,21 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Se puede engrosar una línea del pentagrama con fines pedagógicos -(p.ej. la tercera línea o la de la clave de Sol). Esto se puede -conseguir añadiendo más líneas muy cerca de la línea que se quiere -destacar, utilizando la propiedad @code{line-positions} del objeto -@code{StaffSymbol}. - -" - doctitlees = "Hacer unas líneas del pentagrama más gruesas que las otras" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Für den pädagogischen Einsatz kann eine Linie des Notensystems dicker -gezeichnet werden (z. B. die Mittellinie, oder um den Schlüssel hervorzuheben). -Das ist möglich, indem man zusätzliche Linien sehr nahe an der Linie, die -dicker erscheinen soll, einfügt. Dazu wird die @code{line-positions}-Eigenschaft -herangezogen. - -" - doctitlede = "Eine Linie des Notensystems dicker als die anderen machen" diff --git a/input/texidocs/measure-counter.texidoc b/input/texidocs/measure-counter.texidoc deleted file mode 100644 index bf652b2a47..0000000000 --- a/input/texidocs/measure-counter.texidoc +++ /dev/null @@ -1,8 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Este fragmento de código proporciona una solución alternativa a la -producción de contadores de compás utilizando repeticiones -transparentes de tipo porcentaje. - -" - doctitlees = "Contador de compases" diff --git a/input/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc b/input/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc deleted file mode 100644 index fe74750b8d..0000000000 --- a/input/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc +++ /dev/null @@ -1,21 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -La disposición «mensurstriche» en que las líneas divisorias no -están dibujadas sobre los pentagramas, sino entre ellos, se puede -conseguir con un @code{StaffGroup} en vez de un @code{ChoirStaff}. -La línea divisoria sobre los pentagramas se borra estableciendo la -propiedad @code{transparent}. - -" - - doctitlees = "Disposición Mensurstriche (líneas divisorias entre pentagramas)" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Das Mensurstiche-Layout, in welchem die Taktlinien nicht auf den Systemen, -sondern zwischen den Systemen gesetzt werden, kann mit einer @code{StaffGroup} -anstelle von @code{ChoirStaff} erreicht werden. Die Taktlinien auf den -Systemen werden mit der the @code{transparent}-Eigenschaft ausgelöscht. - -" - doctitlede = "Mensurstriche-Layout (Taktstriche zwischen den Systemen" diff --git a/input/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc b/input/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc deleted file mode 100644 index b6a68ff874..0000000000 --- a/input/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc +++ /dev/null @@ -1,28 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Las abreviaturas se encuentran definidas dentro del archivo -@code{ly/script-init.ly}, donde las variables @code{dashHat}, -@code{dashPlus}, @code{dashDash}, @code{dashBar}, -@code{dashLarger}, @code{dashDot} y @code{dashUnderscore} reciben -valores predeterminados. Se pueden modificar estos valores -predeterminados para las abreviaturas. Por ejemplo, para asociar -la abreviatura @code{-+} (@code{dashPlus}) con el símbolo del -semitrino en lugar del símbolo predeterminado +, asigne el valor -@code{trill} a la variable @code{dashPlus}: - -" - doctitlees = "Modificar los valores predeterminados para la notación abreviada de las articulaciones" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Die Abkürzungen sind in der Datei @samp{ly/script-init.ly} definiert, wo -den Variablen @code{dashHat}, @code{dashPlus}, @code{dashDash}, -@code{dashBar}, @code{dashLarger}, @code{dashDot} und -@code{dashUnderscore} Standardwerte zugewiesen werden. Diese Standardwerte -können verändert werden. Um zum Beispiel die Abkürzung -@code{-+} (@code{dashPlus}) mit dem Triller anstatt mit dem +-Symbol zu -assoziieren, muss der Wert @code{trill} der Variable -@code{dashPlus} zugewiesen werden: - -" - doctitlede = "Die Standardwerte der Abkürzungen von Artikulationen verändern" diff --git a/input/texidocs/multi-measure-rest-markup.texidoc b/input/texidocs/multi-measure-rest-markup.texidoc deleted file mode 100644 index 9f0e2365d7..0000000000 --- a/input/texidocs/multi-measure-rest-markup.texidoc +++ /dev/null @@ -1,51 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca -texidoces = " -Los elementos de marcado aplicados a un silencio multicompás se -centran encima o debajo de éste. Los elementos de marcado extensos -que se adjuntan a silencios multicompás no producen la expansión del -compás. Para expandir un silencio multicompás de forma que quepa todo -el marcado, utilice un silencio de separación con un marcado aplicado -antes del silencio multicompás. - -Observe que el silencio separador produce la inserción de un compás. -El texto aplicado a un siencio sparador de esta forma se alinea por la -izquierda a la posición en que la nota estaría situada dentro del -compás, pero si la longitud del compás está determinada por la -longitud del texto, éste aparecerá centrado. - -" - -doctitlees = "Marcado de silencios multicompás" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = "Textbeschriftungen, die an Mehrtaktpausen gehängt wird, -wird über oder unter der Pause zentriert. Lange Beschriftungen -lassen den Takt nicht breiter werden. Um eine Mehrtaktpause einer -Beschriftung anzupassen, muss eine unsichtbare Pause mit der -Beschriftung direkt vor der Mehrtkatpause eingesetzt werden. - -Man sollte beachten, dass unsichtbare Pausen automatische Taktstriche -nach sich ziehen. Text, der an eine unsichtbare Pause gehänt wird, -ist links ausgerichtet an der Position, wo die Pause erscheinen -würde. Wenn aber die Länge des Taktes durch die Länge des Textes -bestimmt wird, sieht es so aus, als ob der Text zentriert gesetzt -ist." - - doctitlede = "Textbeschriftung und Mehrtaktpausen" - - -%% Translation of GIT committish: e71f19ad847d3e94ac89750f34de8b6bb28611df - texidocfr = " -Lorsque du texte est attaché à un silence multi-mesures, il sera centré -dans la mesure, au-dessus ou en dessous de la portée. Afin d'étirer la -mesure dans le cas ou ce texte est relativement long, il suffit -d'insérer un silence invisible auquel on attache le texte en question, -avant le silence multi-mesures. - -Rappelez-vous qu'un silence invisible génère une barre de mesure. Le -texte attaché à ce silence invisible sera alors aligné sur la gauche de -là où serait positionnée la note. Cependant, si la taille de la mesure -est déterminée par la longueur du texte, il apparaîtra comme centré. - -" - doctitlefr = "Ajout de texte à un silence multi-mesures" diff --git a/input/texidocs/nesting-staves.texidoc b/input/texidocs/nesting-staves.texidoc deleted file mode 100644 index 1728e437cd..0000000000 --- a/input/texidocs/nesting-staves.texidoc +++ /dev/null @@ -1,33 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Se puede utilizar la propiedad -@code{systemStartDelimiterHierarchy} para crear grupos de -pentagramas anidados de forma más compleja. La instrucción -@code{\\set StaffGroup.systemStartDelimiterHierarchy} toma una -lista alfabética del número de pentagramas producidos. Se puede -proporcionar antes de cada pentagrama un delimitador de comienzo -de sistema. Se debe encerrar entre corchetes y admite tantos -pentagramas como encierren las llaves. Se pueden omitir los -elementos de la lista, pero el primer corchete siempre abarca -todos los pentagramas. Las posibilidades son -@code{SystemStartBar}, @code{SystemStartBracket}, -@code{SystemStartBrace} y @code{SystemStartSquare}. - -" - doctitlees = "Anidado de grupos de pentagramas" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Die Eigenschaft @code{systemStartDelimiterHierarchy} kann eingesetzt -werden, um komplizierte geschachtelte Systemklammern zu erstellen. Der -Befehl @code{\\set StaffGroup.systemStartDelimiterHierarchy} nimmt eine -Liste mit der Anzahl der Systeme, die ausgegeben werden, auf. Vor jedem -System kann eine Systemanfangsklammer angegeben werden. Sie muss in Klammern eingefügt -werden und umfasst so viele Systeme, wie die Klammer einschließt. Elemente -in der Liste können ausgelassen werden, aber die erste Klammer umfasst immer -die gesamte Gruppe. Die Möglichkeiten der Anfangsklammer sind: @code{SystemStartBar}, -@code{SystemStartBracket}, @code{SystemStartBrace} und -@code{SystemStartSquare}. - -" - doctitlede = "Systeme schachteln" diff --git a/input/texidocs/non-default-tuplet-numbers.texidoc b/input/texidocs/non-default-tuplet-numbers.texidoc deleted file mode 100644 index 5187b133eb..0000000000 --- a/input/texidocs/non-default-tuplet-numbers.texidoc +++ /dev/null @@ -1,28 +0,0 @@ -%% Translation of GIT committish: d4f58bb3ad4e7fe1967a6b48f25e3addffc8aa14 - texidoces = " -LilyPond también proporciona funciones de formato para imprimir -números de grupo especial diferentes a la propia fracción, así -como para añadir una figura al número o a la fracción de la -agrupación. - -" - - doctitlees = "Números de agrupación especial distintos a los predeterminados" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d -texidocde = " -LilyPond stellt auch Formatierungsfunktionen zur Verfügung, mit denen -N-tolennummern gesetzt werden können, die sich von dem eigentlichen Bruch -unterscheiden. Auch ein Notenwert kann zu Nenner oder Zähler des Bruchs -hinzugefügt werden. -" - doctitlede = "Nicht-standard-N-tolennummern" - -%% Translation of GIT committish: fa7695ea860d7ab2db86581dd5f8bc4f413f6705 - texidocfr = " -LilyPond sait aussi gérer des nolets dont le chiffrage imprimé ne -correspond pas exactement à la fraction de mesure à laquelle ils se -réfèrent, tout comme ceux auxquels une valeur de note vient en complément -au chiffre. -" - doctitlefr = "Nolets au chiffrage inhabituel" diff --git a/input/texidocs/non-traditional-key-signatures.texidoc b/input/texidocs/non-traditional-key-signatures.texidoc deleted file mode 100644 index 6f0ec93840..0000000000 --- a/input/texidocs/non-traditional-key-signatures.texidoc +++ /dev/null @@ -1,50 +0,0 @@ -%% Translation of GIT committish: d4f58bb3ad4e7fe1967a6b48f25e3addffc8aa14 - doctitlees = "Armaduras de tonalidad no tradicionales" - texidoces = " - -La muy utilizada instrucción @code{\\key} establece la propiedad -@code{keySignature} property, dentro del contexto @code{Staff}. - -Para crear armaduras de tonalidad no estándar, ajuste esta -propiedad directamente. El formato de esta instrucción es una -lista: - -@code{\\set Staff.keySignature = #`(((octava . paso) . alteración) -((octava . paso) . alteración) ...)} donde, para cada elemento -dentro de la lista, @code{octava} especifica la octava -(siendo@tie{}cero la octava desde el Do@tie{}central hasta el Si -por encima), @code{paso} especifica la nota dentro de la octava -(cero@tie{}significa@tie{}Do y 6@tie{}significa@tie{}Si), y -@code{alteración} es @code{,SHARP ,FLAT ,DOUBLE-SHARP} -etc. (observe la coma precedente.) - -De forma alternativa, para cada elemento de la lista el uso del -formato más conciso @code{(paso . alteración)} especifica que la -misma alteración debe estar en todas las octavas. - -He aquí un ejemplo de una posible armadura para generar una escala -exátona: -" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - doctitlede = "Untypische Tonarten" - texidocde = " -Der üblicherweise benutzte @code{\\key}-Befehl setzt die -@code{keySignature}-Eigenschaft im @code{Staff}-Kontext. - -Um untypische Tonartenvorzeichen zu erstellen, muss man diese Eigenschaft -direkt setzen. Das Format für den Befehl ist eine Liste: @code{ \\set -Staff.keySignature = #`(((Oktave . Schritt) . Alteration) ((Oktave -. Schritt) . Alteration) ...)} wobei für jedes Element in der Liste -@code{Oktave} die Oktave angibt (0@tie{}ist die Oktave vom -eingestrichenen@tie{}C bis zum eingestrichenen@tie{}H), @code{Schritt} gibt -die Note innerhalb der Oktave an (0@tie{}heißt@tie{}C und -6@tie{}heißt@tie{}H), und @code{Alteration} ist @code{,SHARP ,FLAT -,DOUBLE-SHARP} usw. (Beachte das beginnende Komma.) - -Alternativ kann auch jedes Element der Liste mit dem allgemeineren Format -@code{(Schritt . Alteration)} gesetzt werden, wobei dann die Einstellungen -für alle Oktaven gelten. - -Hier ein Beispiel einer möglichen Tonart für eine Ganztonleiter: -" diff --git a/input/texidocs/orchestra,-choir-and-piano-template.texidoc b/input/texidocs/orchestra,-choir-and-piano-template.texidoc deleted file mode 100644 index ea259746f5..0000000000 --- a/input/texidocs/orchestra,-choir-and-piano-template.texidoc +++ /dev/null @@ -1,13 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " - -Esta plantilla muestra el uso de contextos @code{StaffGroup} y -@code{GrandStaff} anidados para sub-agrupar instrumentos del mismo -tipo, y el uso de @code{\\transpose} para los instrumentos -transpositores. Toda la música que está dentro de variables se -almacena en Do. La música se puede introducir en Do, o (de forma -alternativa) escribirse en el tono del instrumento y transportada -a Do antes de ser asignada a una variable. - -" - doctitlees = "Plantilla de orquesta, coro y piano" diff --git a/input/texidocs/ottava-text.texidoc b/input/texidocs/ottava-text.texidoc deleted file mode 100644 index 43916c2281..0000000000 --- a/input/texidocs/ottava-text.texidoc +++ /dev/null @@ -1,23 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Internamente, @code{\\ottava} establece las propiedades -@code{ottavation} (por ejemplo, a @code{\"8va\"} o a -@code{\"8vb\"}) y @code{middleCPosition}. Para sobreescribir el -texto del corchete, ajuste @code{ottavation} después de invocar la -instrucción @code{\\ottava}. - -" - - doctitlees = "Texto de octava alta y baja" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d -texidocde = " -Intern setzt die @code{set-octavation}-Funktion die Eigenschaften -@code{ottavation} (etwa auf den Wert @code{\"8va\"} oder @code{\"8vb\"}) -und @code{middleCPosition}. Um den Text der Oktavierungsklammer zu -ändern, kann @code{ottavation} manuell gesetzt werden, nachdem -@code{set-octavation} benützt wurde. - -" - -doctitlede = "Ottava-Text" diff --git a/input/texidocs/percent-repeat-count-visibility.texidoc b/input/texidocs/percent-repeat-count-visibility.texidoc deleted file mode 100644 index 34f9c34b7d..0000000000 --- a/input/texidocs/percent-repeat-count-visibility.texidoc +++ /dev/null @@ -1,15 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Se pueden mostrar los contadores de las repeticiones del tipo -porcentaje a intervalos regulares mediante el establecimiento de -la propiedad de contexto @code{repeatCountVisibility}. - -" - doctitlees = "Visibilidad del contador de repeticiones de tipo porcentaje" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Prozentwiederholungszähler können in regelmäßigen Intervallen angezeigt -werden, indem man die Eigenschaft @code{repeatCountVisibility} beeinflusst. -" - doctitlede = "Sichtbarkeit von Prozent-Wiederholungen" diff --git a/input/texidocs/percent-repeat-counter.texidoc b/input/texidocs/percent-repeat-counter.texidoc deleted file mode 100644 index 200118b10f..0000000000 --- a/input/texidocs/percent-repeat-counter.texidoc +++ /dev/null @@ -1,16 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Las repeticiones de compases completos mayores de dos repeticiones -pueden llevar un contador si se activa la propiedad adecuada, como se -ve en este ejemplo: - -" - doctitlees = "Percent repeat counter" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Ganztaktwiederholungen mit mehr als zwei Wiederholungen erhalten einen -Zähler, wenn man die entsprechende Eigenschaft einsetzt: - -" - doctitlede = "Prozent-Wiederholungen zählen" diff --git a/input/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc b/input/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc deleted file mode 100644 index fa65d37507..0000000000 --- a/input/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc +++ /dev/null @@ -1,29 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - doctitlees = "Permitir saltos de línea dentro de grupos especiales con barra" - texidoces = " -Este ejemplo artificial muestra cómo se pueden permitir tanto los -saltos de línea manuales como los automáticos dentro de un grupo de -valoración especial unido por una barra. Observe que estos grupos -sincopados se deben barrar manualmente. - -" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Dieses künstliche Beispiel zeigt, wie sowohl automatische als auch -manuelle Zeilenumbrüche innerhalb einer N-tole mit Balken erlaubt -werden können. Diese unregelmäßige Bebalkung muss allerdings manuell -gesetzt werden. - -" - doctitlede = "Zeilenumbrüche bei N-tolen mit Balken erlauben" - - -%% Translation of GIT committish: e71f19ad847d3e94ac89750f34de8b6bb28611df - texidocfr = " -Cet exemple peu académique démontre comment il est possible d'insérer un saut -de ligne dans un nolet portant une ligature. Ces ligatures doivent toutefois -être explicites. - -" - doctitlefr = "Saut de ligne au milieu d'un nolet avec ligature" diff --git a/input/texidocs/piano-template-simple.texidoc b/input/texidocs/piano-template-simple.texidoc deleted file mode 100644 index 3126075d6b..0000000000 --- a/input/texidocs/piano-template-simple.texidoc +++ /dev/null @@ -1,14 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Presentamos a continuación una plantilla de piano sencilla con algunas -notas. - -" - doctitlees = "Plantilla de piano (sencilla)" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Hier ein einfaches Klaviersystem. - -" - doctitlede = "Vorlage für einfache Klaviernotation" diff --git a/input/texidocs/piano-template-with-centered-dynamics.texidoc b/input/texidocs/piano-template-with-centered-dynamics.texidoc deleted file mode 100644 index 536896c5ca..0000000000 --- a/input/texidocs/piano-template-with-centered-dynamics.texidoc +++ /dev/null @@ -1,24 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Muchas partituras de piano tienen las indicaciones dinámicas -centradas entre los dos pentagramas. Esto requiere un poco de -trucaje, pero puesto que la plantilla está aquí mismo, no tenemos -que hacer este trucaje por nuestra cuenta. - -" - doctitlees = "Plantilla de piano con matices centrados" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -In der meisten Klaviernotation werden die Dynamikzeichen zwischen -den beiden Systemen zentriert. Für LilyPond muss man die Einstellungen -etwas anpassen, aber Sie können ja das angepasste Beispiel von hier -kopieren. -" - -%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae - texidocja = " -多くのピアノ譜は、強弱記号を 2 つの譜の間に置きます。これを実現するにはちょっ@c -とした調整が必要ですが、そのテンプレートがここにあるので、あなた自身が調整を行@c -う必要はありません。 -" diff --git a/input/texidocs/piano-template-with-centered-lyrics.texidoc b/input/texidocs/piano-template-with-centered-lyrics.texidoc deleted file mode 100644 index 2770028bca..0000000000 --- a/input/texidocs/piano-template-with-centered-lyrics.texidoc +++ /dev/null @@ -1,19 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -En lugar de tener un pentagrama dedicado a la melodía y la letra, ésta -se puede centrar entre los pentagramas de un sistema de piano. - -" - doctitlees = "Plantilla de piano con letra centrada" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Anstatt ein eigenes System für Melodie und Text zu schreiben, können -Sie den Text auch zwischen die beiden Klaviersysteme schreiben -(und damit das zusätzliche System für die Gesangstimme auslassen). -" - -%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae - texidocja = " -旋律と歌詞のための譜表を持つ代わりに、歌詞をピアノ譜の 2 つの譜の間に置くことができます。 -" diff --git a/input/texidocs/piano-template-with-melody-and-lyrics.texidoc b/input/texidocs/piano-template-with-melody-and-lyrics.texidoc deleted file mode 100644 index e5995fce00..0000000000 --- a/input/texidocs/piano-template-with-melody-and-lyrics.texidoc +++ /dev/null @@ -1,20 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -He aquí el típico formato dde una canción: un pentagrama con la -melodía y la letra, y el acompañamiento de piano por debajo. - -" - doctitlees = "Plantilla de piano con melodía y letra" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Das nächste Beispiel ist typisch für ein Lied: Im oberen System die -Melodie mit Text, darunter Klavierbegleitung. -" - - doctitlede = "Vorlage für Klavier und Gesangsstimme" - -%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae - texidocja = " -これは一般的な歌曲のフォーマットです: 旋律と歌詞を持つ譜表と、その下にピアノ伴奏譜があります。 -" diff --git a/input/texidocs/placement-of-right-hand-fingerings.texidoc b/input/texidocs/placement-of-right-hand-fingerings.texidoc deleted file mode 100644 index ad111a3acc..0000000000 --- a/input/texidocs/placement-of-right-hand-fingerings.texidoc +++ /dev/null @@ -1,27 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Es posible ejercer un mayor control sobre la colocación de las -digitaciones de la mano derecha estableciendo el valor de una -propiedad específica, como se muestra en el ejemplo siguiente. - -" - doctitlees = "Posicionamiento de digitaciones de mano derecha" - -%% Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 - - texidocfr = " -Vous disposez d'une propriété spécifique qui permet de contrôler plus -finement le positionnement des doigtés main droite, comme l'indique -l'exemple suivant. - -" - doctitlefr = "Positionnement des doigtés main droite" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Man kann die Positionierung von Fingersatz der rechten Hand besser -kontrollieren, wenn eine bestimmte Eigenschaft gesetzt wird, wie -das folgende Beispiel zeigt: - -" - doctitlede = "Positionierung von Fingersatz der rechten Hand" diff --git a/input/texidocs/polyphony-in-tablature.texidoc b/input/texidocs/polyphony-in-tablature.texidoc deleted file mode 100644 index b435c9387d..0000000000 --- a/input/texidocs/polyphony-in-tablature.texidoc +++ /dev/null @@ -1,24 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -La polifonía se crea de la misma forma en un @code{TabStaff} que -en una pauta normal. - -" - doctitlees = "Polifonía en tablaturas" - -%% Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 - - texidocfr = " -Une section polyphonique s'obtient dans un @code{TabStaff} de la -même manière que dans une portée normale. - -" - doctitlefr = "Polyphonie en mode tablature" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Polyphonie kann in einer Tabulatur (@code{TabStaff}) genauso wie in einem -normalen Notensystem erstellt werden. - -" - doctitlede = "Polyphonie in einer Tabulatur" diff --git a/input/texidocs/positioning-grace-notes-with-floating-space.texidoc b/input/texidocs/positioning-grace-notes-with-floating-space.texidoc deleted file mode 100644 index 1124b814dc..0000000000 --- a/input/texidocs/positioning-grace-notes-with-floating-space.texidoc +++ /dev/null @@ -1,25 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " - -Al establecer la propiedad @code{'strict-grace-spacing} hacemos -que las columnas musicales para las notas de adorno sean -'flotantes', es decir, desacopladas de las notas que no son de -adorno: primero se aplica el espaciado de las notas normales, y -luego se ponen las columnas musicales de las notas de adorno a la -izquierda de las columnas musicales de las notas principales. - -" - - doctitlees = "Posicionamiento de las notas de adorno con espacio flotante" - - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Wenn man die Eigenschaft @code{'strict-grace-spacing} aktiviert, -werden die Verzierungsnoten \"fließend\" gemacht, d.h. sie sind -von den normalen Noten los gekoppelt: Zuerst werden die normalen -Noten platziert, dann erst die Verzierungen links von der -Hauptnote gesetzt. - -" - doctitlede = "Positionierung von Verzierungen mit verschiebbarem Platz" diff --git a/input/texidocs/positioning-multi-measure-rests.texidoc b/input/texidocs/positioning-multi-measure-rests.texidoc deleted file mode 100644 index 4f76345438..0000000000 --- a/input/texidocs/positioning-multi-measure-rests.texidoc +++ /dev/null @@ -1,35 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - doctitlees = "Posicionar los silencios multicompás" - texidoces = " -A diferencia de los silencios normales, no existe una instrucción -predefinida para modificar la posición predeterminada de un -símbolo de silencio multicompás sobre el pentagrama, adjuntándolo -a una nota, independientemente de cuál sea su forma. Sin embargo, -en la música polifónica los silencios multicompás de las voces de -numeración par e impar están separados verticalmente. La -colocación de los silencios multicompás se puede controlar como se -ve a continuación: - -" -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d -texidocde = " -Anders als bei normalen Pausen gibt es keinen direkten Befehl, um die -vertikale Position von Ganztaktpausen zu beeinflussen, indem man sie an -eine Tonhöhe anhängt. In polyphoner Notation wird aber dennoch die -Position der Pausen von geraden und ungeraden Stimmen voneinander -unterschieden. Die Position von Ganztaktpausen kann wie folgt verändert -werden: - " - doctitlede = "Positionierung von Ganztaktpausen" - - -%% Translation of GIT committish: e71f19ad847d3e94ac89750f34de8b6bb28611df - texidocfr = " -Si l'on peut positionner verticalement un silence simple en le -rattachant à une note, il n'en va pas de même pour un silence -multi-mesures. Néanmoins, et uniquement dans le cadre de musique -polyphonique, les silences multi-mesures sont positionnés différemment -selon qu'ils appartiennent à une voix au numéro pair ou impair. Le -positionnement des silences multi-mesures peut se contrôler ainsi : -" - doctitlefr = "Positionnement des silences multi-mesures" diff --git a/input/texidocs/positioning-text-markups-inside-slurs.texidoc b/input/texidocs/positioning-text-markups-inside-slurs.texidoc deleted file mode 100644 index cde0d0a0d3..0000000000 --- a/input/texidocs/positioning-text-markups-inside-slurs.texidoc +++ /dev/null @@ -1,17 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " - -Los elementos de marcado de texto deben tener la propiedad -@code{outside-staff-priority} establecida al valor falso para que se -impriman por dentro de las ligaduras de expresión. - -" - doctitlees = "Situar los elementos de marcado de texto por dentro de las ligaduras" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Textbeschriftung kann innerhalb von Bögen gesetzt werden, wenn die -@code{outside-staff-priority}-Eigenschaft auf falsch gesetzt wird. - -" - doctitlede = "Textbeschriftung innerhalb von Bögen positionieren" diff --git a/input/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc b/input/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc deleted file mode 100644 index 6f3f5bc6cd..0000000000 --- a/input/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc +++ /dev/null @@ -1,31 +0,0 @@ -%% Translation of GIT committish: 203ab4a7388f36b9c89c66671498dbaefccbf86e - texidocfr = " -En accord avec les règles standards de l'écriture musicale, on grave -un bécarre avant un dièse ou un bémol si on a besoin d'annuler une -altération précédente. Pour modifier ce comportement, assignez la propriété -@code{extraNatural} du contexte @code{Staff} à la valeur @code{##f} (faux). -" - -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca -doctitlees = "Evitar que se añadan becuadros adicionales automáticamente" - -texidoces = " -Según las reglas estándar de composición -tipográfica, se imprime un becuadro antes de un sostenido o un -bemol cuando se tiene que cancelar una alteración anterior en la -misma nota. Para modificar este comportamiento, establezca el -valor de la propiedad @code{extraNatural} a @code{##f} (falso) -dentro del contexto de @code{Staff}. - -" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - doctitlede = "Verhindern, dass zusätzliche Auflösungszeichen automatisch -hinzugefügt werden" - -texidocde = "Den tranditionellen Notensatzregeln zufolge wird ein -Auflösungszeichen immer dann vor einem Kreuz oder B gesetzt, wenn -ein vorheriges Versetzungszeichen der gleichen Note aufgehoben werden -soll. Um dieses Verhalten zu ändern, muss die Eigenschaft -@code{extraNatural} im @code{Staff}-Kontext auf \"false\" gesetzt werden. -" diff --git a/input/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc b/input/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc deleted file mode 100644 index 28a1f1fddb..0000000000 --- a/input/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc +++ /dev/null @@ -1,19 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca -doctitlees = "Evitar que se impriman becuadros cuando cambia la armadura" -texidoces = " -Cuando cambia la armadura de la tonalidad, se imprimen becuadros -automáticamente para cancelar las alteraciones de las armaduras -anteriores. Esto se puede evitar estableciendo al valor \"falso\" la -propiedad @code{printKeyCancellation} del contexto @code{Staff}. - -" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d -doctitlede = "Auflösungzeichen nicht setzen, wenn die Tonart wechselt" - -texidocde = " -Wenn die Tonart wechselt, werden automatisch Auflösungszeichen ausgegeben, -um Versetzungszeichen der vorherigen Tonart aufzulösen. Das kann -verhindert werden, indem die @code{printKeyCancellation}-Eigenschaft -im @code{Staff}-Kontext auf \"false\" gesetzt wird. -" diff --git a/input/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc b/input/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc deleted file mode 100644 index 1fef776d4f..0000000000 --- a/input/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc +++ /dev/null @@ -1,15 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Se puede imprimir una línea divisoria de la forma @code{|:} al -principio de la pieza, sobreescribiendo la propiedad correspondiente: - -" - doctitlees = "Imprimir puntos de repetición al prinicpio de la pieza" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Ein @code{|:}-Taktstrich kann auch zu Beginn eines Stückes ausgegeben werden, indem -man die entsprechende Eigenschaft verändert: - -" - doctitlede = "Ein Wiederholungszeichen zu Beginn eines Stückes ausgeben" diff --git a/input/texidocs/printing-bar-numbers-at-regular-intervals.texidoc b/input/texidocs/printing-bar-numbers-at-regular-intervals.texidoc deleted file mode 100644 index f0e43891db..0000000000 --- a/input/texidocs/printing-bar-numbers-at-regular-intervals.texidoc +++ /dev/null @@ -1,22 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " - -Se pueden imprimir los números de compás a intervalos regulares -mediante el establecimiento de la propiedad -@code{barNumberVisibility}. Aquí los números de compás se -imprimen a cada dos compases excepto al final de la línea. - -" - - doctitlees = "Imprimir números de compás a intervalos regulares" - - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Taktnummern können in regelmäßigen Intervallen gesetzt werden, indem -man die Eigenschaft @code{barNumberVisibility} definiert. In diesem -Beispiel werden die Taktnummern jeden zweiten Takt gesetzt, außer -am Ende einer Zeile. - -" - doctitlede = "Setzen der Taktnummern in regelmäßigen Intevallen" diff --git a/input/texidocs/printing-bar-numbers-inside-boxes-or-circles.texidoc b/input/texidocs/printing-bar-numbers-inside-boxes-or-circles.texidoc deleted file mode 100644 index 3b4eb945d2..0000000000 --- a/input/texidocs/printing-bar-numbers-inside-boxes-or-circles.texidoc +++ /dev/null @@ -1,15 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " - -Los números de compás también se pueden imprimir dentro de rectángulos o de circunferencias. - -" - doctitlees = "Imprimir números de compás dentro de rectángulos o circunferencias" - - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Taktnummern können auch in Boxen oder Kreisen gesetzt werden. - -" - doctitlede = "Setzen von Taktnummern in Kästen oder Kreisen" diff --git a/input/texidocs/printing-hairpins-using-al-niente-notation.texidoc b/input/texidocs/printing-hairpins-using-al-niente-notation.texidoc deleted file mode 100644 index 2d0e4e50f0..0000000000 --- a/input/texidocs/printing-hairpins-using-al-niente-notation.texidoc +++ /dev/null @@ -1,18 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Se pueden imprimir reguladores con un círculo en la punta -(notación «al niente») estableciendo la propiedad -@code{circled-tip} del objeto @code{Hairpin} al valor @code{#t}. - -" - doctitlees = "Impresión de reguladores utilizando la notación «al niente»" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " - Crescendo-Klammern können mit einem kleinen Kreis vor der Spitze - notiert werden (al niente = bis zum Nichts), indem die -@code{circled-tip}-Eigenschaft des @code{Hairpin}-Objekts auf -@code{#t} gesetzt wird. - -" - doctitlede = "Crescendo Klammern al niente schreiben" diff --git a/input/texidocs/printing-marks-at-the-end-of-a-line-or-a-score.texidoc b/input/texidocs/printing-marks-at-the-end-of-a-line-or-a-score.texidoc deleted file mode 100644 index 2353706113..0000000000 --- a/input/texidocs/printing-marks-at-the-end-of-a-line-or-a-score.texidoc +++ /dev/null @@ -1,26 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Las marcas se pueden imprimir al final de la línea actual, en vez de -al comienzo de la línea siguiente. Esto es útil principalmente cuando -se tiene que añadir una marca al final de la partitura (donde no hay -línea siguiente). - -En tales casos, el extremo derecho de la marca se tiene que alinear -con la última línea divisoria, como muestra la segunda línea de este -ejemplo. - -" - doctitlees = "Imprimir marcas al final de la línea o de la partitura" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Zeichen können auch am Ende der aktuellen Zeile ausgegeben werden, anstatt -dass sie auf die folgende Zeile verschoben werden. Das ist nüztlich, -wenn ein Zeichen am Ende einer Partitur eingefügt werden soll, wo -gar keine nächste Zeile vorhanden ist. - -In derartigen Fällen muss die rechte Ecke des Zeichens an dem letzten -Taktstrich ausgerichtet werden, wie die zweite Zeile des Beispiels zeigt. - -" - doctitlede = "Zeichen am Ende einer Zeile oder Partitur setzen" diff --git a/input/texidocs/printing-marks-on-every-staff.texidoc b/input/texidocs/printing-marks-on-every-staff.texidoc deleted file mode 100644 index 94cf4d665c..0000000000 --- a/input/texidocs/printing-marks-on-every-staff.texidoc +++ /dev/null @@ -1,16 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Aunque normalmente las marcas de texto sólo se imprimen sobre el -pentagrama superior, también se pueden imprimir en otro pentagrama -cualquiera. - -" - doctitlees = "Imprimir marcas en cualquier pentagrama" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Normalerweise werden Textzeichen nur über dem obersten Notensystem gesetzt. Sie -können aber auch über jedem System ausgegeben werden. - -" - doctitlede = "Zeichen über jedem System ausgeben" diff --git a/input/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc b/input/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc deleted file mode 100644 index 0a871c16d3..0000000000 --- a/input/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc +++ /dev/null @@ -1,21 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -De forma predeterminada, las indicaciones metronómicas y las -letras de ensayo se imprimen encima del pentagrama. Para -colocarlas debajo del pentagrama, simplemente ajustamos -adecuadamente la propiedad @code{direction} de -@code{MetronomeMark} o de @code{RehearsalMark}. - -" - - doctitlees = "Impresión de indicaciones metronómicas y letras de ensayo debajo del pentagrama" - - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Normalerweise werden Metronom- und Übungszeichen über dem Notensystem ausgegeben. -Um sie unter das System zu setzen, muss die @code{direction}-Eigenschaft -von @code{MetronomeMark} oder @code{RehearsalMark} entsprechend verändert werden. - -" - doctitlede = "Metronom- und Übungszeichen unter das System setzen" diff --git a/input/texidocs/printing-the-bar-number-for-the-first-measure.texidoc b/input/texidocs/printing-the-bar-number-for-the-first-measure.texidoc deleted file mode 100644 index d6d2e9229d..0000000000 --- a/input/texidocs/printing-the-bar-number-for-the-first-measure.texidoc +++ /dev/null @@ -1,26 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " - -De forma predeterminada se suprime el número del primer compás de -una partitura si es menor o igual a `1'. Al establecer el valor -de @code{barNumberVisibility} a @code{all-bar-numbers-visible}, se -puede imprimir cualquier número de compás para el primer compás y -todos los siguientes. Observe que, para que esto funcione, se -debe insertar una líinea divisoria vacía antes de la primera nota. - -" - - doctitlees = "Imprimir el número de compás en el primer compás" - - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Standardmäßig wird die erste Taktzahl einer Paritur nicht gesetzt, -wenn sie weniger oder gleich '1' ist. Indem man @code{barNumberVisibility} -auf @code{all-bar-numbers-visible} setzt, kann eine beliebige -Taktzahl für den ersten und die folgenden Takte gesetzt werden. -Eine leere Taktlinie muss jedoch vor der ersten Note eingefügt -werden, damit das funktioniert. - -" - doctitlede = "Setzen der Taktnummer für den ersten Takt" diff --git a/input/texidocs/quoting-another-voice-with-transposition.texidoc b/input/texidocs/quoting-another-voice-with-transposition.texidoc deleted file mode 100644 index 5291e57b4a..0000000000 --- a/input/texidocs/quoting-another-voice-with-transposition.texidoc +++ /dev/null @@ -1,23 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Los pasajes citados tienen en cuenta la transposición de la fuente -tanto como la del destino. En este ejemplo, todos los -instrumentos interpreta una nota con el sonido del Do central; el -destino de un instrumento transpositor en Fa. La parte de destino -se puede transponer utilizando @code{\\transpose}. En este caso -se transportan todas las notas (incluidas las citadas). - -" - -doctitlees = "Citar otra voz con transposición" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Zitate berücksichtigen sowohl die Transposition der Quelle als auch -des Zielinstruments. In diesem Beispiel spielen alle Instrumente -klingendes C, das Zielinstrument ist in F. Die Noten für das -Zielinstrument können mit @code{\\transpose} transponiert werden, -in diesem Fall werden alle Noten (auch die zitierten) transponiert. - -" - doctitlede = "Eine Stimme mit Transposition zitieren" diff --git a/input/texidocs/quoting-another-voice.texidoc b/input/texidocs/quoting-another-voice.texidoc deleted file mode 100644 index 865ec4fea0..0000000000 --- a/input/texidocs/quoting-another-voice.texidoc +++ /dev/null @@ -1,26 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -La propiedad @code{quotedEventTypes} determina los tipos de -eventos musicales que resultan citados. El valor predeterminado -es @code{(note-event rest-event)}, que significa que sólo aparecen -en la expresión @code{\\quoteDuring} las notas y los silencios. -En el ejemplo siguiente, el silencio de semicorchea no aparece en -el fragmento citado porque @code{rest-event} no está dentro de los -@code{quotedEventTypes}. - -" - doctitlees = "Citar otra voz" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Die @code{quotedEventTypes}-Eigenschaft bestimmt die -Typen an Musikereignissen, die zitiert werden. Die -Standardeinstellung ist @code{(note-event rest-event)}, womit -nur Noten und Pausen der zitierten Stimme für den -@code{\\quoteDuring}-Ausdruck übernommen werden. Im -Beispiel hier wird die 16-Pause nicht übernommen, weil -sich @code{rest-event} nicht in @code{quotedEventTypes} befindet. - -" - - doctitlede = "Eine andere Stimme zitieren" diff --git a/input/texidocs/redefining-grace-note-global-defaults.texidoc b/input/texidocs/redefining-grace-note-global-defaults.texidoc deleted file mode 100644 index 1d1660115c..0000000000 --- a/input/texidocs/redefining-grace-note-global-defaults.texidoc +++ /dev/null @@ -1,28 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " - -Los valores predeterminados para las notas de adorno están -almacenados en los identificadores @code{startGraceMusic}, -@code{stopGraceMusic}, @code{startAcciaccaturaMusic}, -@code{stopAcciaccaturaMusic}, @code{startAppoggiaturaMusic} y -@code{stopAppoggiaturaMusic}, que están definidos en el archivo -@code{ly/grace-init.ly}. Redefiniéndolos se pueden obtener otros -efectos. - -" - - doctitlees = "Redefinición de los valores globales predeterminados para notas de adorno" - - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Die globalen Standardeinstellungen für Verzierungsnoten werden in -den Variablen@code{startGraceMusic}, @code{stopGraceMusic}, -@code{startAcciaccaturaMusic}, @code{stopAcciaccaturaMusic}, -@code{startAppoggiaturaMusic} und @code{stopAppoggiaturaMusic} -gespeichert, die in der Datei @code{ly/grace-init.ly} definiert -sind. Wenn man sie umdefiniert, können andere Effekte erreicht -werden. - -" - doctitlede = "Globale Umdefinition von Verzierungsnoten" diff --git a/input/texidocs/removing-bar-numbers-from-a-score.texidoc b/input/texidocs/removing-bar-numbers-from-a-score.texidoc deleted file mode 100644 index 5fac43ac4c..0000000000 --- a/input/texidocs/removing-bar-numbers-from-a-score.texidoc +++ /dev/null @@ -1,22 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " - -Se pueden eliminar completamente los números de compás quitando el -grabador @code{Bar_number_engraver} del contexto de @code{Score}. - -" - - doctitlees = "Suprimir los números de compás de toda la partitura" - - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Taktnummern können vollkommen aus den Noten entfernt werden, indem -man den @code{Bar_number_engraver} aus dem @code{Score}-Kontext -entfernt. - -" - doctitlede = "Entfernung von Taktnummern in einer Partitur" - - - diff --git a/input/texidocs/removing-the-first-empty-line.texidoc b/input/texidocs/removing-the-first-empty-line.texidoc deleted file mode 100644 index 2de8f812c2..0000000000 --- a/input/texidocs/removing-the-first-empty-line.texidoc +++ /dev/null @@ -1,32 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -El primer pentagrama vacío también se puede suprimir de la -partitura estableciendo la propiedad @code{remove-first} de -@code{VerticalAxisGroup}. Esto se puede hacer globalmente dentro -del bloque @code{\\layout}, o localmente dentro del pentagrama -concreto que se quiere suprimir. En este último caso, tenemos que -especificar el contexto (@code{Staff} se aplica sólo al pentagrama -actual) delante de la propiedad. - -El pentagrama inferior del segundo grupo no se elimina, porque el -ajuste sólo se aplica al pentagrama concreto dentro del que se -escribe. - -" - doctitlees = "Quitar la primera línea vacía" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Ein leeres Notensystem kann auch aus der ersten Zeile einer Partitur -entfernt werden, indem die Eigenschaft @code{remove-first} der -@code{VerticalAxisGroup}-Eigenschaft eingesetzt wird. Das kann -man global in einer @code{\\layout}-Umgebung oder lokal in dem -bestimmten Notensystem machen, das entfernt werden soll. In letzterem -Fall muss man den Kontext angeben. - -Das untere Notensystem der zweiten Systemgruppe wird nicht entfernt, -weil in die Einstellungen in dem Schnipsel nur für das eine Notensystem -gültig sind. - -" - doctitlede = "Die erste leere Notenzeile auch entfernen" diff --git a/input/texidocs/rest-styles.texidoc b/input/texidocs/rest-styles.texidoc deleted file mode 100644 index 5033ea2e74..0000000000 --- a/input/texidocs/rest-styles.texidoc +++ /dev/null @@ -1,19 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - doctitlees = "Estilos de silencios" - texidoces = " -Los silencios se pueden imprimir en distintos estilos. -" -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - - doctitlede = "Pausenstile" - texidocde = " -Pausen können in verschiedenen Stilen dargestellt werden. -" - - -%% Translation of GIT committish: e71f19ad847d3e94ac89750f34de8b6bb28611df - texidocfr = " -Les silences peuvent être gravés selon différents styles. - -" - doctitlefr = "Styles de silences" diff --git a/input/texidocs/reverting-default-beam-endings.texidoc b/input/texidocs/reverting-default-beam-endings.texidoc deleted file mode 100644 index 10dd842de5..0000000000 --- a/input/texidocs/reverting-default-beam-endings.texidoc +++ /dev/null @@ -1,29 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Para tipografiar las barras agrupadas en la forma @code{3-4-3-2} -en 12/8, en primer lugar tenemos que sobreescribir los finales de -barra predeterminados en 12/8, y después preparar los finales de -barra nuevos: - -" - doctitlees = "Alteración de los finales de barra predeterminados" - - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Um Balken im 12/8-Takt als @code{3-4-3-2} zu gruppieren, muss man zuerst die -Standardwerte für die Balken im 12/8-Takt rückgängig machen und dann die neuen -Werte setzen: - -" - doctitlede = "Standard-Balkenwerte rückgängig machen" - - -%% Translation of GIT committish: bee31293920d834cd3698f00ddcc2402c3164619 - texidocfr = " -Pour obtenir des ligatures en groupes de @code{3-4-3-2} croches, dans -une mesure à 12/8, il faudra préalablement annuler les réglages par -défaut relatifs à 12/8, puis ajouter nos propres règles : - -" - doctitlefr = "Annulation des règles de ligature par défaut" diff --git a/input/texidocs/script-chart.texidoc b/input/texidocs/script-chart.texidoc deleted file mode 100644 index 5118807004..0000000000 --- a/input/texidocs/script-chart.texidoc +++ /dev/null @@ -1,5 +0,0 @@ -%% Translation of GIT committish: 6bf3e9149eb97e66b4c813e41dc7625f06c501aa -texidoces = " -He aquí un cuadro que muestra todas las articulaciones disponibles: - -" \ No newline at end of file diff --git a/input/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc b/input/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc deleted file mode 100644 index 21264c9f4e..0000000000 --- a/input/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc +++ /dev/null @@ -1,18 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Si la nota que da fin a un regulador cae sobre la primera parte de -un compás, el regulador se detiene en la línea divisoria -inmediatamente precedente. Se puede controlar este comportamiento -sobreescribiendo la propiedad @code{'to-barline}. - -" - doctitlees = "Establecer el comportamiento de los reguladores en las barras de compás" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d -texidocde = " -Wenn die Note, an welcher eine Crescendo-Klammer endet, die erste Note -eines Taktes ist, wird die Klammer an der vorhergehenden Tatklinie -beendet. Dieses Verhalten kann auch mit der Eigenschaft -@code{'to-barline} geändert werden: -" - doctitlede = "Das Verhalten von Crescendo-Klammern an Taktlinien beeinflussen" diff --git a/input/texidocs/setting-the-minimum-length-of-hairpins.texidoc b/input/texidocs/setting-the-minimum-length-of-hairpins.texidoc deleted file mode 100644 index 4facf1a792..0000000000 --- a/input/texidocs/setting-the-minimum-length-of-hairpins.texidoc +++ /dev/null @@ -1,17 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Si los reguladores son demasiado cortos, se pueden alargar -modificando la propiedad @code{minimum-length} del objeto -@code{Hairpin}. - -" - doctitlees = "Ajustar la longitud mínima de los reguladores" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d -texidocde = " -Wenn Crescendo-Klammern zu kurz sind, können sie verlängert werden, indem -die @code{minimum-length}-Eigenschaft des @code{Hairpin}-Objektes -verändert wird. - -" - doctitlede = "Die Mindestlänge von Crescendo-Klammern bestimmen" diff --git a/input/texidocs/shortening-volta-brackets.texidoc b/input/texidocs/shortening-volta-brackets.texidoc deleted file mode 100644 index e5e5414d2c..0000000000 --- a/input/texidocs/shortening-volta-brackets.texidoc +++ /dev/null @@ -1,20 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -De forma predeterminada, los corchetes de primera y segunda vez se -trazan encima de los finales alternativos completos, pero es posible -acortartlos estableciendo un valor cierto para -@code{voltaSpannerDuration}. En el ejemplo siguiente, el corchete -sólo dura un compás, que corresponde a una duración de 3/4. - -" - doctitlees = "Shortening volta brackets" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Volta-Klammern werden normalerweise über alle Noten der Klammer gezogen, aber -es ist möglich sie zu verkürzen. Hierzu muss -@code{voltaSpannerDuration} definiert werden, in dem Beispiel etwa als -3/4, sodass die Klammer nur einen Takt dauert. - -" - doctitlede = "Volta-Klammern verkürzen" diff --git a/input/texidocs/showing-chords-at-changes.texidoc b/input/texidocs/showing-chords-at-changes.texidoc deleted file mode 100644 index c92f71b869..0000000000 --- a/input/texidocs/showing-chords-at-changes.texidoc +++ /dev/null @@ -1,15 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Se pueden imprimir los acordes exclusivamente al comienzo de las -líneas y cuando cambia el acorde. - -" - doctitlees = "Imprimir los acordes cuando se produce un cambio" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Akkordsymbole können so eingestellt werden, dass sie nur zu Beginn der Zeile -und bei Akkordwechseln angezeigt werden. - -" - doctitlede = "Akkordsymbole bei Wechsel anzeigen" diff --git a/input/texidocs/simple-lead-sheet.texidoc b/input/texidocs/simple-lead-sheet.texidoc deleted file mode 100644 index c0a8038721..0000000000 --- a/input/texidocs/simple-lead-sheet.texidoc +++ /dev/null @@ -1,14 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Al juntar nombres de acorde en cifrado americano, melodía y letra, -obtenemos una hoja guía de acordes o «lead sheet»: - -" - doctitlees = "Hoja guía de acordes o «lead sheet» sencilla" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Ein Liedblatt besteht aus Akkordbezeichnungen, einer Melodie und dem Liedtext: - -" - doctitlede = "Ein einfaches Liedblatt" diff --git a/input/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc b/input/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc deleted file mode 100644 index cd4cbac892..0000000000 --- a/input/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc +++ /dev/null @@ -1,20 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Esta plantilla facilita la preparación de una canción con melodía, -letra y acordes. - -" - doctitlees = "Plantilla de pentagrama único con música, letra y acordes" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Mit diesem Beispiel können Sie einen Song mit Melodie, -Text und Akkorden schreiben. -" - - doctitlede = "Vorlage für eine Notenzeile mit Noten, Text und Akkorden" - -%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae - texidocja = " -これは旋律、単語、コードを持つ歌曲の楽譜のためのテンプレートです。 -" diff --git a/input/texidocs/single-staff-template-with-notes,-lyrics,-chords-and-frets.texidoc b/input/texidocs/single-staff-template-with-notes,-lyrics,-chords-and-frets.texidoc deleted file mode 100644 index bd05b20a99..0000000000 --- a/input/texidocs/single-staff-template-with-notes,-lyrics,-chords-and-frets.texidoc +++ /dev/null @@ -1,8 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Presentamos a continuación un ejemplo de plantilla para una hoja -guía de acordes con melodía, letra, acordes y diagramas de -trastes. -" - - doctitlees = "Plantilla para un pentagrama único con música, letra, acordes y trastes" diff --git a/input/texidocs/single-staff-template-with-notes-and-chords.texidoc b/input/texidocs/single-staff-template-with-notes-and-chords.texidoc deleted file mode 100644 index 408ed0bb7b..0000000000 --- a/input/texidocs/single-staff-template-with-notes-and-chords.texidoc +++ /dev/null @@ -1,21 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -¿Quiere preparar una hoja guía de acordes (o «lead sheet») con -melodía y acordes? ¡No busque más! - -" - -doctitlees = "Plantilla de pentagrama único con música y acordes" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Wollen Sie ein Liedblatt mit Melodie und Akkorden schreiben? Hier ist -das richtige Beispiel für Sie! -" - - doctitlede = "Vorlage für eine Notenzeile mit Akkorden" - -%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae - texidocja = " -旋律とコードを持つリード譜を欲しくはありませんか?他を見る必要はありません! -" diff --git a/input/texidocs/single-staff-template-with-notes-and-lyrics.texidoc b/input/texidocs/single-staff-template-with-notes-and-lyrics.texidoc deleted file mode 100644 index 9f5a6a5917..0000000000 --- a/input/texidocs/single-staff-template-with-notes-and-lyrics.texidoc +++ /dev/null @@ -1,32 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Esta pequeña plantilla muestra una melodía sencilla con letra. Córtela -y péguela, escriba las notas y luego la letra. Este ejemplo desactiva -el barrado automático, que es lo más frecuente en las partes vocales -antiguas. Para usar el barrado automático modifique o marque como un -comentario la línea correspondiente. - -" - doctitlees = "Plantilla de pentagrama único don notas y letra" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Das nächste Beispiel zeigt eine einfache Melodie mit Text. Kopieren -Sie es in Ihre Datei, fügen Sie Noten und Text hinzu und übersetzen -Sie es mit LilyPond. In dem Beispiel wird die automatische -Balkenverbindung ausgeschaltet (mit dem Befehl @code{\autoBeamOff}), -wie es für Vokalmusik üblich ist. -Wenn Sie die Balken wieder einschalten wollen, müssen Sie die -entsprechende Zeile entweder ändern oder auskommentieren. -" - - doctitlede = "Vorlage für ein Notensystem mit Noten und Gesangstext" - -%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae - texidocja = " -この小さなテンプレートは歌詞を持つ簡単な旋律を表しています。カット&ペーストして、音符@c -を付け加えて、それから歌詞の単語を付け加えてください。この例は自動ビームを off にして@c -います。これはボーカル パートでは一般的なことです。自動ビームを使用するには、対応する@c -行を変更するか、コメント アウトしてください。 -" - diff --git a/input/texidocs/single-staff-template-with-only-notes.texidoc b/input/texidocs/single-staff-template-with-only-notes.texidoc deleted file mode 100644 index d9365e10a0..0000000000 --- a/input/texidocs/single-staff-template-with-only-notes.texidoc +++ /dev/null @@ -1,25 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Esta plantilla simple prepara un pentagrama con notas, adecuado para -un instrumento solista o un fragmento melódico. Córtelo y péguelo en -un archivo, escriba las notas y ¡ya está! - -" - doctitlees = "Plantilla de un solo pentagrama, con notas únicamente" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Das erste Beispiel zeigt ein Notensystem mit Noten, passend für ein -Soloinstrument oder ein Melodiefragment. Kopieren Sie es und fügen -Sie es in Ihre Datei ein, schreiben Sie die Noten hinzu, und Sie haben -eine vollständige Notationsdatei. -" - - doctitlede = "Vorlage für ein Notensystem" - -%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae - texidocja = " -これは音符を持つ譜表を提供するとても簡単なテンプレートであり、ソロの楽器や旋律に適しています。@c -これをファイルにカット&ペーストして、音符を付け加えれば完了です! -" - diff --git a/input/texidocs/snap-pizzicato-markup-bartok-pizzicato.texidoc b/input/texidocs/snap-pizzicato-markup-bartok-pizzicato.texidoc deleted file mode 100644 index e5f3852fbe..0000000000 --- a/input/texidocs/snap-pizzicato-markup-bartok-pizzicato.texidoc +++ /dev/null @@ -1,23 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - doctitlees = "Marca de pizzicato de chasquido (@q{pizzicato de Bartók})" - texidoces = " -El pizzicato de chasquido (también llamado @q{Pizzicato de Bartók}) es un -@q{pizzicato fuerte en que la cuerda se pulsa verticalmente produciendo un -chasquido y rebotando en el diapasón del instrumento} (Wikipedia). Se -denota mediante una circunferencia con una línea vertical corta que parte -del centro de aquélla hacia fuera. Aunque LilyPond no tiene ninguna -instrucción predefinida para crear esta marca, es fácil hacer la definición -y colocarla directamente en el archivo de lilypond. -" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - doctitlede = "Bartók-Pizzicato" - texidocde = " -Das Bartók-Pizzicato @q{ist eine besondere Form des Pizzicato, bei dem der -Spieler die Saite auf das Griffbrett aufschlagen lässt, sodass zusätzlich -zum angeschlagenen Ton ein scharfes, knallendes Geräusch ertönt} -(Wikipedia). Es wird dargestellt als kleiner Kreis mit einer vertikalen -Linie, die vom Kreiszentrum aus nach oben weist und ein Stück außerhalb des -Kreises endet. Lilypond hat keinen eigenen Glyphen für dieses Symbol; es -ist aber einfach, direkt eine Definition in die Eingabedatei einzufügen. -" diff --git a/input/texidocs/specifying-context-with-beatgrouping.texidoc b/input/texidocs/specifying-context-with-beatgrouping.texidoc deleted file mode 100644 index 049a186164..0000000000 --- a/input/texidocs/specifying-context-with-beatgrouping.texidoc +++ /dev/null @@ -1,33 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Mediante la especificación del contexto, el efecto de -@code{beatGrouping} puede limitarse al contexto especificado, y -sobreescribirse los valores establecidos en contextos de niveles -más altos. Las instruccionees @code{\\set} se deben situar -@emph{después} de todas las instrucciones @code{\\time}: - - -" - doctitlees = "Especificar el contexto con beatGrouping" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Wenn der Kontext angegeben wird, kann die Auswirkung von @code{beatGrouping} -auf den angegebenen Kontext beschränkt werden und die Werte, die in Kontexten -auf höhrer Ebene angegeben wurden, können verändert werden. Der -@code{\\set}-Befehl muss @emph{nach} den @code{\\time}-Befehl geschrieben -werden: -" - doctitlede = "Den Kontext für beatGrouping angeben" - - -%% Translation of GIT committish: b3196fadd8f42d05ba35e8ac42f7da3caf8a3079 - texidocfr = " -Le fait de spécifier un contexte à @code{beatGrouping} permet d'en -limiter les effets. Par voie de conséquence, il sera possible -d'outrepasser les règles définies à un niveau supérieur. La commande -@code{\\set} destinée à en modifier les valeurs doit se placer après la -commande @code{\\time} : - -" - doctitlefr = "Spécification du contexte auquel s'appliquera beatGrouping" diff --git a/input/texidocs/stand-alone-two-column-markup.texidoc b/input/texidocs/stand-alone-two-column-markup.texidoc deleted file mode 100644 index e82d429216..0000000000 --- a/input/texidocs/stand-alone-two-column-markup.texidoc +++ /dev/null @@ -1,15 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Los textos independientes se pueden disponer en varias columnas -utilizando instrucciones @code{\\markup}: - -" - doctitlees = "Elemento de marcado de texto independiente en dos columnas" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Isolierter Text kann in mehreren Spalten mit @code{\\markup}-Befehlen -angeordnet werden: - -" - doctitlede = "Isolierter Text in zwei Spalten" diff --git a/input/texidocs/stem-and-beam-behavior-in-tablature.texidoc b/input/texidocs/stem-and-beam-behavior-in-tablature.texidoc deleted file mode 100644 index 31ff6cd910..0000000000 --- a/input/texidocs/stem-and-beam-behavior-in-tablature.texidoc +++ /dev/null @@ -1,27 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -La dirección de las plicas se contola de la misma forma en la -tablatura que en la notación tradicional. Las barras se pueden -poner horizontales, como se muestra en este ejemplo. - -" - doctitlees = "Comportamiento de las plicas y las barras de corchea en tablaturas" - -%% Translation of GIT committish: cd4950757ab1ab6c89805b0b7c978bfca034f940 - - texidocfr = " -La direction des hampes se gère dans les tablatures tout comme en -notation traditionnelle. Les ligatures peuvent être mises à l'horizontale -comme le montre cet exemple. - -" - doctitlefr = "Hampes et ligatures en mode tablature" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Die Richtung von Hälsen wird in Tabulaturen genauso wie in normaler Notation -eingestellt. Balken können horizontal eingestellt werden, wie das Beispiel -zeigt. - -" - doctitlede = "Hals- und Balkenverhalten in einer Tabulatur" diff --git a/input/texidocs/string-quartet-template-simple.texidoc b/input/texidocs/string-quartet-template-simple.texidoc deleted file mode 100644 index 9c56737ac6..0000000000 --- a/input/texidocs/string-quartet-template-simple.texidoc +++ /dev/null @@ -1,22 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Esta plantilla muestra un cuarteto de cuerda normal. También utiliza -una sección @code{\\global} para el compás y la armadura - -" - doctitlees = "Plantilla de cuarteto de cuerda (sencilla)" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Dieses Beispiel demonstriert die Partitur für ein Streichquartett. Hier -wird auch eine @qq{@code{\global}}-Variable für Taktart und -Vorzeichen benutzt. -" - - doctitlede = "Vorlage für Streichquartett (einfach)" - -%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae - texidocja = " -これは簡単な弦楽四重奏のためのテンプレートです。これは拍子記号と調号のために -@code{@bs{}global} セクションを使っています。 -" diff --git a/input/texidocs/string-quartet-template-with-separate-parts.texidoc b/input/texidocs/string-quartet-template-with-separate-parts.texidoc deleted file mode 100644 index 442985c9c6..0000000000 --- a/input/texidocs/string-quartet-template-with-separate-parts.texidoc +++ /dev/null @@ -1,54 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -El fragmento de código \"Plantilla de cuarteto de cuerda\" produce un -resultado satisfactorio para el cuarteto, pero ¿y si tenemos que -imprimir las particellas? Esta nueva plantilla muestra cómo usar la -funcionalidad @code{\\tag} (etiqueta) para dividir fácilmente una -pieza en particellas indicviduales. - -Tenemos que dividir esta plantilla en archivos independientes; los -nombres de archivo están dentro de los comentarios al principio de -cada archivo. @code{piece.ly} contiene todas las definiciones de -música. Los otros archivos (@code{score.ly}, @code{vn1.ly}, -@code{vn2.ly}, @code{vla.ly} y @code{vlc.ly}) producen la particella -correspondiente. - -¡No olvide quitar los comentarios que hemos especificado cuando use -los archivos independientes! - -" - doctitlees = "Plantilla de cuarteto de cuerda con particellas independientes" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Mit diesem Beispiel können Sie ein schönes Streichquartett notieren, -aber wie gehen Sie vor, wenn Sie Stimmen brauchen? Das Beispiel -oben hat gezeigt, wie Sie mit Variablen einzelne Abschnitte getrennt -voneinander notieren können. Im nächsten Beispiel wird nun -gezeigt, wie Sie mit diesen Variablen einzelne Stimmen erstellen. - -Sie müssen das Beispiel in einzelne Dateien aufteilen; die Dateinamen -sind in den Kommentaren am Anfang jeder Datei enthalten. @code{piece.ly} -enthält die Noten. Die anderen Dateien -- @code{score.ly}, -@code{vn1.ly}, @code{vn2.ly}, @code{vla.ly} und -@code{vlc.ly} -- erstellen daraus die entsprechenden Stimmen bzw. die -Partitur (@code{score.ly}). Mit @code{\tag} wird den Stimmen ein Name -zugewiesen, auf den zurückgegriffen werden kann. -" - - doctitlede = "Vorlage für Streichquartett mit einzelnen Stimmen" - -%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae - texidocja = " -\"弦楽四重奏テンプレート\" は適切な弦楽四重奏の楽譜を作り出しますが、個々の@c -パート譜を譜刻する必要がある場合はどうでしょうか?今度の新しいテンプレートは -@code{@bs{}tag} 機能を用いて容易に楽曲を個々のパートに分ける方法を示しています。 - -このテンプレートは別々のファイルに分ける必要があります。ファイル名は各ファイル@c -の開始部分のコメントの中に記述されています。@code{piece.ly} はすべての音楽定義@c -を保持しています。他のファイル - @code{score.ly}, @code{vn1.ly}, @code{vn2.ly}, -@code{vla.ly} それに @code{vlc.ly} - は対応するパートを作り出します。 - - -別々のファイルに分ける場合は、指定されたコメントを外すことを忘れないでください! -" diff --git a/input/texidocs/sub-dividing-beams.texidoc b/input/texidocs/sub-dividing-beams.texidoc deleted file mode 100644 index 72b7bc2fe1..0000000000 --- a/input/texidocs/sub-dividing-beams.texidoc +++ /dev/null @@ -1,50 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Las barras de semicorcheas (o notas más breves) seguidas no se -subdividen de forma predeterminada. Esto es: las tres (o más) -barras se prolongan, sin dividirse, sobre grupos completos de -notas. Este comportamiento se puede modificar para que las barras -se subdividan en subgrupos mediante el establecimiento de la -propiedad @code{subdivideBeams}. Cuando está establecida, las -diversas barras se subdividen a intervalos definidos por el valor -actual de la longitud del pulso @code{beatLength} reduciendo las -barras múltiples a una sola entre los subgrupos. Observe que el -valor predeterminado de @code{beatLength} es de una unidad sobre -el denominador del compás en curso, si no está establecido -explícitamente. Se debe establecer al valor de una fracción que -da la duración el subgrupo de barras utilizando la función -@code{make-moment}, como se muestra aquí: - -" - doctitlees = "Subdivisión de las barras de semicorchea" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Die Balken von aufeinanderfolgenden Sechszehnteln (oder kürzeren Notenwerten) -werden standardmäßig nicht unterteilt. Dieses Verhalten kann verändert -werden, sodass die Balken in Untergruppen aufgeteilt werden, indem man -die Eigenschaft @code{subdivideBeams} verändert. Man muss die Unterteilungsintervalle -als Notenbruch mit der @code{make-moment}-Funktion für @code{beatLength} angeben, -damit die Balken unterbrochen wird und nur ein Balken durchgezogen bleibt. Der -Standardwert für @code{beatLength} ist 1 / Zähler des aktuellen Taktes. - -" - doctitlede = "Balken in Untergruppen teilen" - - -%% Translation of GIT committish: b3196fadd8f42d05ba35e8ac42f7da3caf8a3079 - texidocfr = " -Les ligatures d'une succession de notes de durée inférieure à la croche -ne sont pas subdivisées par défaut. Autrement dit, tous les traits de -ligature seront continus. Ce comportement peut être modifié afin de -diviser la ligature en sous-groupes grâce à la propriété -@code{subdivideBeams}. Lorsqu'elle est activée, les ligatures seront -subdivisées selon un intervalle défini par @code{beatLength} ; il n'y -aura alors plus qu'un seul trait de ligature entre chaque sous-groupe. -Par défaut, @code{beatLength} fixe la valeur de référence à une noire. -Il faudra donc lui fournir, à l'aide de la fonction @code{make-moment}, -une fraction correspondant au sous-groupe désiré, comme dans l'exemple -suivant. - -" - doctitlefr = "Subdivision des ligatures" diff --git a/input/texidocs/transcription-of-ancient-music-with-incipit.texidoc b/input/texidocs/transcription-of-ancient-music-with-incipit.texidoc deleted file mode 100644 index 982100ad49..0000000000 --- a/input/texidocs/transcription-of-ancient-music-with-incipit.texidoc +++ /dev/null @@ -1,11 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -A modo de alternativa para obtener auténticos «incipit» -independientes de la partitura principal, se incluyen como -elemento de marcado en el campo que se usa normalmente para el -nombre del instrumento. Por el momento, la letra sólo se puede -añadir como marcado directo. Por desgracia, su espaciado no es -análogo al de la letra principal. - -" - doctitlees = "Transcripción de música antigua con incipit" diff --git a/input/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc b/input/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc deleted file mode 100644 index e2a9132b56..0000000000 --- a/input/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc +++ /dev/null @@ -1,60 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca -doctitlees = "Transportar música con el menor número de alteraciones" -texidoces = " -Este ejemplo utiliza código de Scheme para forzar las -modificaciones enarmónicas de las notas, y así tener el menor -número de alteraciones accidentales. En este caso se aplican las -siguientes reglas: - -@itemize -@item -Se quitan las dobles alteraciones - -@item -Si sostenido -> Do - -@item -Mi sistenido -> Fa - -@item -Do bemol -> Si - -@item -Fa bemol -> Mi - -@end itemize - -De esta forma se selecciona el mayor número de notas enarmónicas -naturales. - -" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - doctitlede = "Noten mit minimaler Anzahl an Versetzungszeichen transponieren." - texidocde = "Dieses Beispiel benutzt Scheme-Code, um enharmonische -Verwechslungen für Noten zu erzwingen, damit nur eine minimale Anzahl -an Versetzungszeichen ausgegeben wird. In diesem Fall gelten die -folgenden Regeln: - -@itemize -@item -Doppelte Versetzungszeichen sollen entfernt werden - -@item -His -> C - -@item -Eis -> F - -@item -Ces -> B - -@item -Fes -> E - -@end itemize - -Auf diese Art werden am meisten natürliche Tonhöhen als enharmonische -Variante gewählt. -" - diff --git a/input/texidocs/tweaking-clef-properties.texidoc b/input/texidocs/tweaking-clef-properties.texidoc deleted file mode 100644 index ca17eeb62b..0000000000 --- a/input/texidocs/tweaking-clef-properties.texidoc +++ /dev/null @@ -1,67 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - doctitlees = "Trucaje de las propiedades de clave" - texidoces = " -La instrucción @code{\\clef \"treble_8\"} equivale a un ajuste de -@code{clefGlyph}, @code{clefPosition} (que controla la posición -vertical de la clave), @code{middleCPosition} y -@code{clefOctavation}. Se imprime una clave cada vez que se -modifica cualquiera de las propiedades excepto -@code{middleCPosition}. - -Observe que la modificación del glifo, la posición de la clave o -su octavación, no cambian 'per se' la posición de las siguientes -notas del pentagrama: para hacer esto también se debe especificar -la posición del Do central. Los parámetros posicionales están en -relación con la tercera línea del pentagrama, los números -positivos desplazan hacia arriba, contando una unidad por cada -línea y espacio. El valor de @code{clefOctavation} se -establecería normalmente a 7, -7, 15 or -15, pero son válidos -otros valores. - -Cuando se produce un cambio de clave en el salto de línea se -imprime la clave nueva tanto al final de la línea anterior como al -principio de la nueva, de forma predeterminada. Si no se necesita -la clave de advertencia al final de la línea anterior, se puede -quitar estableciendo el valor de la propiedad -@code{explicitClefVisibility} de @code{Staff}, a -@code{end-of-line-invisible}. El comportamiento predeterminado se -puede recuperar con @code{\\unset Staff.explicitClefVisibility}. - -Los siguientes ejemplos muestran las posibilidades cuando se -ajustan estas propiedades manualmente. En la primera línea, los -cambios manuales preservan el posicionamiento relativo estándar de -las claves y las notas, pero no lo hacen en la segunda línea. -" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - doctitlede = "Eigenschaften des Schlüssels optimieren" - texidocde = " -Der Befehl @code{\\clef \"treble_8\"} ist gleichbedeutend mit einem -expliziten Setzen der Eigenschaften von @code{clefGlyph}, -@code{clefPosition} (welche die vertikale Position des Schlüssels bestimmt), -@code{middleCPosition} und @code{clefOctavation}. Ein Schlüssel wird -ausgegeben, wenn eine der Eigenschaften außer @code{middleCPosition} sich -ändert. - -Eine Änderung des Schriftzeichens (Glyph), der Schlüsselposition oder der -Oktavierung selber ändert noch nicht die Position der darauf folgenden Noten -auf dem System: das geschieht nur, wenn auch die Position des -eingestrichenen@tie{}C (middleCPosition) angegeben wird. Die -Positionsparameter sind relativ zur Mittellinie des Systems, dabei versetzen -positive Zahlen die Position nach oben, jeweils eine Zahl für jede Linie -plus Zwischenraum. Der @code{clefOctavation}-Wert ist normalerweise auf 7, --7, 15 oder -15 gesetzt, aber auch andere Werte sind gültig. - -Wenn ein Schlüsselwechsel an einem Zeilenwechsel geschieht, wird das neue -Symbol sowohl am Ende der alten Zeilen als auch am Anfang der neuen Zeile -ausgegeben. Wenn der Warnungs-Schlüssel am Ende der alten Zeile nicht -erforderlich ist, kann er unterdrückt werden, indem die -@code{explicitClefVisibility}-Eigenschaft des @code{Staff}-Kontextes auf den -Wert @code{end-of-line-invisible} gesetzt wird. Das Standardverhalten kann -mit @code{\\unset Staff.explicitClefVisibility} wieder hergestellt werden. - -Die folgenden Beispiele zeigen die Möglichkeiten, wenn man diese -Eigenschaften manuell setzt. Auf der ersten Zeile erhalten die manuellen -Änderungen die ursprüngliche relative Positionierung von Schlüssel und -Noten, auf der zweiten Zeile nicht. -" diff --git a/input/texidocs/tweaking-grace-layout-within-music.texidoc b/input/texidocs/tweaking-grace-layout-within-music.texidoc deleted file mode 100644 index 447e0dcadd..0000000000 --- a/input/texidocs/tweaking-grace-layout-within-music.texidoc +++ /dev/null @@ -1,26 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " - -La disposición de las expresiones de adorno se puede cambiar a lo -largo de toda la música usando las funciones -@code{add-grace-property} y @code{remove-grace-property}. El -ejemplo siguiente borra la definición de la dirección de la plica -para esta nota de adorno, de manera que las plicas no siemmpre -apuntan hacia arriba, y cambia la forma predeterminada de las -cabezas a aspas. - -" - - doctitlees = "Trucar la disposición de las notas de adorno dentro de la música" - - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Das Layout von Verzierungsausdrücken kann in der Musik verändert -werden mit den Funktionen @code{add-grace-property} und -@code{remove-grace-property}. Das folgende Beispiel definiert -die Richtung von Hälsen (Stem) für diese Verzierung, sodass die -Hälse nicht immer nach unten zeigen, und ändert den Standardnotenkopf -in ein Kreuz. -" - doctitlede = "Veränderung des Layouts von Verzierungen innerhalb der Noten" diff --git a/input/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc b/input/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc deleted file mode 100644 index 791a0fee9a..0000000000 --- a/input/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc +++ /dev/null @@ -1,17 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Se puede usar el delimitador de comienzo de un sistema -@code{SystemStartSquare} estableciéndolo explícitamente dentro de -un contexto @code{StaffGroup} o @code{ChoirStaffGroup}. - -" - doctitlees = "Uso del corchete recto al comienzo de un grupo de pentagramas" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Die Klammer zu Beginn von Systemgruppen kann auch in eine eckige Klammer -(@code{SystemStartSquare}) umgewandelt werden, wenn man sie explizit -im @code{StaffGroup}- oder @code{ChoirStaffGroup}-Kontext setzt. - -" - doctitlede = "Eine eckige Klammer zu Beginn von Systemgruppen benutzen" diff --git a/input/texidocs/using-beatlength-and-beatgrouping.texidoc b/input/texidocs/using-beatlength-and-beatgrouping.texidoc deleted file mode 100644 index c6c604a427..0000000000 --- a/input/texidocs/using-beatlength-and-beatgrouping.texidoc +++ /dev/null @@ -1,36 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -La propiedad @code{measureLength} determina dónde se deben insertar -líneas divisorias y, con @code{beatLength} y @code{beatGrouping}, cómo -se deben generar las barras autoomáticas para las duraciones de barra -y compases para los que no hay ninguna regla definida para los finales -de barra. Este ejemplo muestra distintas dormas de controlar el -barrado mediante el establecimiento de estas propiedades. Las -explicaciones están en forma de comentarios dentro del código. - -" - doctitlees = "Utilización de beatLength y beatGrouping" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Die Eigenschaft @code{measureLength} bestimmt, wo Taktstriche eingefügt -werden sollen und, zusammen mit @code{beatLength} und -@code{beatGrouping}, wie automtische Balken für Notenlängen und -Taktarten, für die keine definierten Regeln gefunden werden, gesetzt -werden sollen. Dieses Beispiel zeigt verschiedene Möglichkeiten, -die Balken zu kontrollieren, indem man diese Eigenschaften -beeinflusst. Die Erklärungen werden als Kommentare im Quellcode -gegeben. -" - doctitlede = "beatLength und beatGrouping benutzen" - -%% Translation of GIT committish: b3196fadd8f42d05ba35e8ac42f7da3caf8a3079 - texidocfr = " -La propriété @code{measureLength} détermine la pulsation et, combinée à -@code{beatLength} et @code{beatGrouping}, comment générer les ligatures -automatiques selon les durées et la métrique lorsqu'aucune règle n'a été -définie. L'exemple commenté qui suit indique différentes façons de -contrôler les ligatures à l'aide de ces propriétés. - -" - doctitlefr = "Utilisation conjointe de beatLength et beatGrouping" diff --git a/input/texidocs/using-double-slurs-for-legato-chords.texidoc b/input/texidocs/using-double-slurs-for-legato-chords.texidoc deleted file mode 100644 index 7b67a98a65..0000000000 --- a/input/texidocs/using-double-slurs-for-legato-chords.texidoc +++ /dev/null @@ -1,15 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Algunos compositores escriben dos ligaduras cuando quieren acordes -legato. Esto se puede conseguir estableciendo @code{doubleSlurs}. - -" - doctitlees = "Utilizar ligaduras dobles para acordes legato" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d -texidocde = " -Einige Komponisten schreiben doppelte Bögen, wenn Legato-Akkorde notiert -werden. Das kann mit der Eigenschaft @code{doubleSlurs} erreicht werden. - -" - doctitlede = "Doppelte Bögen für Legato-Akkorde benutzen" diff --git a/input/texidocs/using-grace-note-slashes-with-normal-heads.texidoc b/input/texidocs/using-grace-note-slashes-with-normal-heads.texidoc deleted file mode 100644 index 925fbd4cac..0000000000 --- a/input/texidocs/using-grace-note-slashes-with-normal-heads.texidoc +++ /dev/null @@ -1,9 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " - -Es posible aplicar la barrita que cruza la barra de las -acciaccaturas, en otras situaciones. - -" - - doctitlees = "Utilizar la barra que tacha las notas de adorno con notas normales" diff --git a/input/texidocs/using-postscript-to-generate-special-note-head-shapes.texidoc b/input/texidocs/using-postscript-to-generate-special-note-head-shapes.texidoc deleted file mode 100644 index bc5213f85c..0000000000 --- a/input/texidocs/using-postscript-to-generate-special-note-head-shapes.texidoc +++ /dev/null @@ -1,9 +0,0 @@ -%% Translation of GIT committish: 522d964c61521ed64f352c4774c4f2860f7ae5ec - texidocfr = " -Lorsqu'il est impossible d'obtenir facilement une allure particulière -pour les têtes de note en recourant à la technique du @code{\\markup}, un -code Postscript peut vous tirer d'embarras. Voici comment générer des -têtes ressemblant à des parallélogrammes. - -" - doctitlefr = "Utilisation de Postscript pour générer des têtes de note à l'allure particulière" diff --git a/input/texidocs/using-ties-with-arpeggios.texidoc b/input/texidocs/using-ties-with-arpeggios.texidoc deleted file mode 100644 index c8be0b942d..0000000000 --- a/input/texidocs/using-ties-with-arpeggios.texidoc +++ /dev/null @@ -1,33 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - doctitlees = "Uso de ligaduras en los arpegios" - texidoces = " -En ocasiones se usan ligaduras de unión para escribir los arpegios. -En este caso, las dos notas ligadas no tienen que ser consecutivas. -Esto se puede conseguir estableciendo la propiedad -@code{tieWaitForNote} al valor @code{#t}. La misma funcionalidad -es de utilidad, por ejemplo, para ligar un trémolo a un acorde, pero -en principio también se puede usar para notas normales consecutivas. - -" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " - Überbindungen werden teilweise benutzt, um Arpeggios zu notieren. In - diesem Fall stehen die übergebundenen Noten nicht unbedingt hintereinander. -Das Verhalten kann erreicht werden, indem die @code{tieWaitForNote}-Eigenschaft -auf @code{#t} gesetzt wird. Diese Funktion ist auch sinnvoll, um etwa -ein Tremolo mit einem Akkord zu überbinden, kann aber prinzipiell auch -für normale Überbindungen eingesetzt werden -" - doctitlede = "Überbingungen für Arpeggio genutzen" - - -%% Translation of GIT committish: e71f19ad847d3e94ac89750f34de8b6bb28611df - texidocfr = " -Les liaisons de tenue servent parfois à rendre un accord arpégé. Dans -ce cas, les notes liées ne sont pas toutes consécutives. Il faut alors -assigner à la propriété @code{tieWaitForNote} la valeur @code{#t} -(@emph{true} pour @qq{vrai}). Cette même méthode peut servir, par -exemple, à lier un trémolo à un accord. -" - doctitlefr = "Liaison de tenue et arpège" diff --git a/input/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc b/input/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc deleted file mode 100644 index 59d3b2dfbf..0000000000 --- a/input/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc +++ /dev/null @@ -1,29 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Mediante el establecimiento de la propiedad @code{'Y-extent} a un valor -adecuado, todos los objetos @code{DynamicLineSpanner} (reguladores e -indicaciones dinámicas textuales) se pueden alinear con un punto de -referencia común, independientemente de sus dimensiones. De esta -manera, todos los elementos estarán alineados verticalmente, -produciendo así un resultado más satisfactorio. - -Se usa una idea similar para alinear las inscripciones de texto a lo -largo de su línea de base. - -" - doctitlees = "Indicaciones dinámicas y textuales alineadas verticalmente" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d -texidocde = " -Indem man die @code{'Y-extent}-Eigenschaft auf einen passenden Wert setzt, -können alle @code{DynamicLineSpanner}-Objekte (Crescendo-Klammern und -Dynamik-Texte) (hairpins and dynamic texts) unabhängig von ihrer -wirklichen Ausdehnung an einem gemeinsamen Referenzpunkt ausgerichtet werden. -Auf diese Weise ist jedes Element vertikal ausgerichtet und der Notensatz -sieht ansprechender aus. - -Die gleiche Idee wird benutzt, um Textbeschriftungen an ihrer -Grundlinie auszurichten. - -" - doctitlede = "Vertikale Ausrichtung von Dynamik und Textbeschriftung beeinflussen" diff --git a/input/texidocs/vertically-aligning-dynamics-across-multiple-notes.texidoc b/input/texidocs/vertically-aligning-dynamics-across-multiple-notes.texidoc deleted file mode 100644 index 69323916e4..0000000000 --- a/input/texidocs/vertically-aligning-dynamics-across-multiple-notes.texidoc +++ /dev/null @@ -1,10 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Las expresiones dinámicas que se comienzan, terminan o se producen -en la misma nota se alinean verticalmente. Para asegurar que las -expresiones dinámicas se alinean cuando no se producen sobre la -misma nota, incremente la propiedad @code{staff-padding} del -objeto @code{DynamicLineSpanner}. - -" - doctitlees = "Alinear verticalmente expresiones dinámicas que abarcan varias notas" diff --git a/input/texidocs/vertically-aligning-ossias-and-lyrics.texidoc b/input/texidocs/vertically-aligning-ossias-and-lyrics.texidoc deleted file mode 100644 index de1ad06530..0000000000 --- a/input/texidocs/vertically-aligning-ossias-and-lyrics.texidoc +++ /dev/null @@ -1,17 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Este fragmento de código muestra el uso de las propiedades de -contexto @code{alignBelowContext} y @code{alignAboveContext} para -controlar la posición de la letra y los compases de ossia. - -" - doctitlees = "Alineación vertical de la letra y los compases de ossia" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Dieser Schnipsel zeigt, wie man die Kontexteigenschaften -@code{alignBelowContext} und @code{alignAboveContext} benutzen kann, um -die Positionierung von Gesangstext und Ossia-Abschnitten zu kontrollieren. - -" - doctitlede = "Gesangstext und Ossia vertikal ausrichten" diff --git a/input/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc b/input/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc deleted file mode 100644 index 6ad608e7b8..0000000000 --- a/input/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc +++ /dev/null @@ -1,28 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Esta plantilla añade una reducción de piano automática a la partitura -vocal SATB estándar que se mostró en la \"Plantilla de conjunto -vocal\". Esto presenta uno de los puntos fuertes de LilyPond: podemos -usar una definición de música más de una vez. Si se hace cualquier -cambio en las notas de la parte vocal (digamos @code{tenorMusic}), -entonces los cambios se aplicarán también a la reducción de piano. - -" - doctitlees = "Plantilla de conjunto vocal con reducción de piano automática" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -In diesem Beispiel wird ein automatischer Klavierauszug zu der -Chorpartitur hinzugefügt. Das zeigt eine der Stärken von LilyPond --- man kann eine Variable mehr als einmal benutzen. Wenn Sie -irgendeine Änderung an einer Chorstimme vornehmen, (etwa -tenorMusic), verändert sich auch der Klavierauszug entsprechend. -" - -%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae - texidocja = " -このテンプレートは、\"合唱テンプレート\"で示された標準の SATB ボーカル譜に自動@c -ピアノ譜を付け加えています。これは LilyPond の強みの 1 つを示しています - 音楽@c -定義を何回も使用することができます。ボーカルの音符 (例えば、@code{tenorMusic} -の音符) に変更が加えられた場合、その変更はピアノ譜にも適用されます。 -" diff --git a/input/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc b/input/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc deleted file mode 100644 index aac4775ddc..0000000000 --- a/input/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc +++ /dev/null @@ -1,24 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Esta plantilla es, básicamente, la misma que la sencilla plantilla -\"Conjunto vocal\", excepto que aquí todas las líneas de letra se -colocan utilizando @code{alignAboveContext} y -@code{alignBelowContext}. - -" - doctitlees = "Plantilla para conjunto vocal con letras alineadas encima y debajo de los pentagramas" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -In diesem Beispiel werden die Texte mit den Befehlen -@code{alignAboveContext} und @code{alignBelowContext} -über und unter dem System angeordnet. -" - - doctitlede = "Vorlage für Vokalensemble mit dem Gesangstext über und unter dem System" - -%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae - texidocja = " -このテンプレートは基本的に単純な \"合唱\" テンプレートと同じですが、歌詞が -@code{alignAboveContext} と @code{alignBelowContext} を用いて配置されています。 -" diff --git a/input/texidocs/vocal-ensemble-template.texidoc b/input/texidocs/vocal-ensemble-template.texidoc deleted file mode 100644 index f33a3bfccf..0000000000 --- a/input/texidocs/vocal-ensemble-template.texidoc +++ /dev/null @@ -1,27 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -He aquí una partitura vocal estándar para cuatro voces SATB. Con -grupos mayores, suele ser útil incluir una sección que aparezca en -todas las partes. Por ejemplo, el compás y la armadura casi siempre -son los mismos para todas. Como en la plantilla \"Himno\", las cuatro -voces se reagrupan en sólo dos pentagramas. - -" - doctitlees = "Plantilla de conjunto vocal" - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Dieses Beispiel ist für vierstimmigen Gesang (SATB). Bei größeren -Stücken ist es oft sinnvoll, eine allgemeine Variable zu bestimmen, -die in allen Stimmen eingefügt wird. Taktart und Vorzeichen etwa -sind fast immer gleich in allen Stimmen. -" - - doctitlede = "Vorlage für Vokalensemble" - -%% Translation of GIT committish: 06d99c3c9ad1c3472277b4eafd7761c4aadb84ae - texidocja = " -これは標準の 4 パート SATB (ソプラノ、アルト、テナー、バス) ボーカル譜です。@c -もっと大きな合唱では、すべてのパートで使用されるセクションをインクルードすると@c -便利です。例えば、拍子記号と調号はほとんど常にすべてのパートで同じです。\"賛美@c -歌\" テンプレートのように、4 つのボイスは 2 つの譜にグループ分けされています。" diff --git a/input/texidocs/volta-below-chords.texidoc b/input/texidocs/volta-below-chords.texidoc deleted file mode 100644 index 83af64fc3e..0000000000 --- a/input/texidocs/volta-below-chords.texidoc +++ /dev/null @@ -1,18 +0,0 @@ -%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca - texidoces = " -Mediante la adición del grabador @code{Volta_engraver} al -pentagrama pertinente, se pueden poner los corchetes de primera y -segunda vez debajo de los acordes. - -" - doctitlees = "Corchetes de primera y segunda vez debajo de los acordes" - - -%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d - texidocde = " -Indem man den @code{Volta_engraver} zu dem entsprechenden Notensystem -hinzufügt, können Wiederholungsklammern unterhalb der Akkorde gesetzt -werden. - -" - doctitlede = "Wiederholungs-(Volta-)Klammern unterhalb der Akkordsymbole" diff --git a/lily/GNUmakefile b/lily/GNUmakefile index 508020c039..f3fb922b53 100644 --- a/lily/GNUmakefile +++ b/lily/GNUmakefile @@ -37,15 +37,15 @@ O_FILES += $(outdir)/lilypond.rc.o $(outdir)/lilypond: $(outdir)/lilypond.rc.o $(outdir)/lilypond.rc.o: $(outdir)/lilypond.ico $(outdir)/ly.ico -$(top-build-dir)/Documentation/pictures/$(outbase)/lilypond.ico: - $(MAKE) -C $(top-build-dir)/Documentation/pictures +$(top-build-dir)/Documentation/logo/$(outbase)/lilypond.ico: + $(MAKE) -C $(top-build-dir)/Documentation/logo -$(outdir)/lilypond.ico: $(top-build-dir)/Documentation/pictures/$(outbase)/lilypond.ico +$(outdir)/lilypond.ico: $(top-build-dir)/Documentation/logo/$(outbase)/lilypond.ico cp $< $@ -$(top-build-dir)/Documentation/pictures/$(outbase)/ly.ico: - $(MAKE) -C $(top-build-dir)/Documentation/pictures +$(top-build-dir)/Documentation/logo/$(outbase)/ly.ico: + $(MAKE) -C $(top-build-dir)/Documentation/logo -$(outdir)/ly.ico: $(top-build-dir)/Documentation/pictures/$(outbase)/ly.ico +$(outdir)/ly.ico: $(top-build-dir)/Documentation/logo/$(outbase)/ly.ico cp $< $@ endif diff --git a/lily/align-interface.cc b/lily/align-interface.cc index 36aa81f111..8fe151b337 100644 --- a/lily/align-interface.cc +++ b/lily/align-interface.cc @@ -12,6 +12,8 @@ #include "hara-kiri-group-spanner.hh" #include "international.hh" #include "item.hh" +#include "page-layout-problem.hh" +#include "paper-book.hh" #include "paper-column.hh" #include "pointer-group-interface.hh" #include "spanner.hh" @@ -19,16 +21,10 @@ #include "system.hh" #include "warn.hh" -/* - TODO: for vertical spacing, should also include a rod & spring - scheme of sorts into this: the alignment should default to a certain - distance between element refpoints, unless bbox force a bigger - distance. - */ -MAKE_SCHEME_CALLBACK (Align_interface, calc_positioning_done, 1); +MAKE_SCHEME_CALLBACK (Align_interface, align_to_minimum_distances, 1); SCM -Align_interface::calc_positioning_done (SCM smob) +Align_interface::align_to_minimum_distances (SCM smob) { Grob *me = unsmob_grob (smob); @@ -37,47 +33,22 @@ Align_interface::calc_positioning_done (SCM smob) SCM axis = scm_car (me->get_property ("axes")); Axis ax = Axis (scm_to_int (axis)); - Align_interface::align_elements_to_extents (me, ax); + Align_interface::align_elements_to_minimum_distances (me, ax); return SCM_BOOL_T; } -/* - TODO: This belongs to the old two-pass spacing. Delete me. -*/ -MAKE_SCHEME_CALLBACK (Align_interface, stretch_after_break, 1) +MAKE_SCHEME_CALLBACK (Align_interface, align_to_ideal_distances, 1); SCM -Align_interface::stretch_after_break (SCM grob) +Align_interface::align_to_ideal_distances (SCM smob) { - Grob *me = unsmob_grob (grob); + Grob *me = unsmob_grob (smob); - Spanner *me_spanner = dynamic_cast (me); - extract_grob_set (me, "elements", elems); + me->set_property ("positioning-done", SCM_BOOL_T); - if (me_spanner && elems.size ()) - { - Grob *common = common_refpoint_of_array (elems, me, Y_AXIS); - - /* force position callbacks */ - for (vsize i = 0; i < elems.size (); i++) - elems[i]->relative_coordinate (common, Y_AXIS); - - SCM details = me_spanner->get_bound (LEFT)->get_property ("line-break-system-details"); - SCM extra_space_handle = scm_assoc (ly_symbol2scm ("fixed-alignment-extra-space"), details); - - Real extra_space = robust_scm2double (scm_is_pair (extra_space_handle) - ? scm_cdr (extra_space_handle) - : SCM_EOL, - 0.0); - - Direction stacking_dir = robust_scm2dir (me->get_property ("stacking-dir"), - DOWN); - Real delta = extra_space / elems.size () * stacking_dir; - for (vsize i = 0; i < elems.size (); i++) - elems[i]->translate_axis (i * delta, Y_AXIS); - } - - return SCM_UNSPECIFIED; + Align_interface::align_elements_to_ideal_distances (me); + + return SCM_BOOL_T; } /* for each grob, find its upper and lower skylines. If the grob has @@ -108,23 +79,6 @@ get_skylines (Grob *me, if (skys) skylines = *skys; - /* this is perhaps an abuse of minimum-?-extent: maybe we should create - another property? But it seems that the only (current) use of - minimum-Y-extent is to separate vertically-aligned elements */ - SCM min_extent = g->get_property (a == X_AXIS - ? ly_symbol2scm ("minimum-X-extent") - : ly_symbol2scm ("minimum-Y-extent")); - - if (is_number_pair (min_extent)) - { - Box b; - Interval other_extent = g->extent (other_common, other_axis (a)); - b[a] = ly_scm2interval (min_extent); - b[other_axis (a)] = other_extent; - if (!other_extent.is_empty ()) - skylines.insert (b, 0, other_axis (a)); - } - /* This skyline was calculated relative to the grob g. In order to compare it to skylines belonging to other grobs, we need to shift it so that it is relative to the common reference. */ @@ -177,76 +131,91 @@ get_skylines (Grob *me, } vector -Align_interface::get_extents_aligned_translates (Grob *me, - vector const &all_grobs, - Axis a, - bool pure, int start, int end) +Align_interface::get_minimum_translations (Grob *me, + vector const &all_grobs, + Axis a, + bool pure, int start, int end) { - Spanner *me_spanner = dynamic_cast (me); - - - SCM line_break_details = SCM_EOL; - if (a == Y_AXIS && me_spanner) - { - if (pure) - line_break_details = get_root_system (me)->column (start)->get_property ("line-break-system-details"); - else - line_break_details = me_spanner->get_bound (LEFT)->get_property ("line-break-system-details"); - - if (!me->get_system () && !pure) - me->programming_error ("vertical alignment called before line-breaking"); - } + if (!pure && a == Y_AXIS && dynamic_cast (me) && !me->get_system ()) + me->programming_error ("vertical alignment called before line-breaking"); Direction stacking_dir = robust_scm2dir (me->get_property ("stacking-dir"), DOWN); - vector elems (all_grobs); // writable copy vector skylines; get_skylines (me, &elems, a, pure, start, end, &skylines); + SCM forced_distances = ly_assoc_get (ly_symbol2scm ("alignment-distances"), + Page_layout_problem::get_details (me), + SCM_EOL); + Real where = 0; - /* TODO: extra-space stuff belongs to two-pass spacing. Delete me */ - SCM extra_space_handle = scm_assq (ly_symbol2scm ("alignment-extra-space"), line_break_details); - Real extra_space = robust_scm2double (scm_is_pair (extra_space_handle) - ? scm_cdr (extra_space_handle) - : SCM_EOL, - 0.0); - - Real padding = robust_scm2double (me->get_property ("padding"), 0.0); + Real default_padding = robust_scm2double (me->get_property ("padding"), 0.0); vector translates; Skyline down_skyline (stacking_dir); + Real last_spaceable_element_pos = 0; + Grob *last_spaceable_element = 0; for (vsize j = 0; j < elems.size (); j++) { Real dy = 0; + Real padding = default_padding; + if (j == 0) dy = skylines[j][-stacking_dir].max_height (); else { down_skyline.merge (skylines[j-1][stacking_dir]); dy = down_skyline.distance (skylines[j][-stacking_dir]); + + SCM spec = Page_layout_problem::get_spacing_spec (elems[j-1], elems[j]); + Page_layout_problem::read_spacing_spec (spec, &padding, ly_symbol2scm ("padding")); + + Real min_distance = 0; + if (Page_layout_problem::read_spacing_spec (spec, &min_distance, ly_symbol2scm ("minimum-distance"))) + dy = max (dy, min_distance); + + if (Page_layout_problem::is_spaceable (elems[j]) && last_spaceable_element) + { + // Spaceable staves may have min-distance and padding + // constraints coming from the previous spaceable staff + // as well as from the previous staff. + spec = Page_layout_problem::get_spacing_spec (last_spaceable_element, elems[j]); + Real spaceable_padding = 0; + Page_layout_problem::read_spacing_spec (spec, + &spaceable_padding, + ly_symbol2scm ("padding")); + padding = max (padding, spaceable_padding); + + Real min_distance = 0; + if (Page_layout_problem::read_spacing_spec (spec, + &min_distance, + ly_symbol2scm ("minimum-distance"))) + dy = max (dy, min_distance + stacking_dir*(last_spaceable_element_pos - where)); + + if (scm_is_pair (forced_distances)) + { + SCM forced_dist = scm_car (forced_distances); + forced_distances = scm_cdr (forced_distances); + + if (scm_is_number (forced_dist)) + dy = scm_to_double (forced_dist) + stacking_dir * (last_spaceable_element_pos - where); + } + } } if (isinf (dy)) /* if the skyline is empty, maybe max_height is infinity_f */ dy = 0.0; - dy = max (0.0, dy + padding + extra_space / elems.size ()); + dy = max (0.0, dy + padding); down_skyline.raise (-stacking_dir * dy); where += stacking_dir * dy; translates.push_back (where); - } - SCM offsets_handle = scm_assq (ly_symbol2scm ("alignment-offsets"), - line_break_details); - if (scm_is_pair (offsets_handle)) - { - vsize i = 0; - - for (SCM s = scm_cdr (offsets_handle); - scm_is_pair (s) && i < translates.size (); s = scm_cdr (s), i++) + if (Page_layout_problem::is_spaceable (elems[j])) { - if (scm_is_number (scm_car (s))) - translates[i] = scm_to_double (scm_car (s)); + last_spaceable_element = elems[j]; + last_spaceable_element_pos = where; } } @@ -268,33 +237,23 @@ Align_interface::get_extents_aligned_translates (Grob *me, } void -Align_interface::align_elements_to_extents (Grob *me, Axis a) +Align_interface::align_elements_to_ideal_distances (Grob *me) { - extract_grob_set (me, "elements", all_grobs); + System *sys = me->get_system (); + Page_layout_problem layout (NULL, SCM_EOL, scm_list_1 (sys->self_scm ())); - vector translates = get_extents_aligned_translates (me, all_grobs, a, false, 0, 0); - if (translates.size ()) - for (vsize j = 0; j < all_grobs.size (); j++) - all_grobs[j]->translate_axis (translates[j], a); + layout.solution (true); } -/* After we have already determined the y-offsets of our children, we may still - want to stretch them a little. */ void -Align_interface::stretch (Grob *me, Real amount, Axis a) +Align_interface::align_elements_to_minimum_distances (Grob *me, Axis a) { - extract_grob_set (me, "elements", elts); - Real non_empty_elts = stretchable_children_count (me); - Real offset = 0.0; - Direction dir = robust_scm2dir (me->get_property ("stacking-dir"), DOWN); - for (vsize i = 1; i < elts.size (); i++) - { - if (!elts[i]->extent (me, a).is_empty () - && !to_boolean (elts[i]->get_property ("keep-fixed-while-stretching"))) - offset += amount / non_empty_elts; - elts[i]->translate_axis (dir * offset, a); - } - me->flush_extent_cache (Y_AXIS); + extract_grob_set (me, "elements", all_grobs); + + vector translates = get_minimum_translations (me, all_grobs, a, false, 0, 0); + if (translates.size ()) + for (vsize j = 0; j < all_grobs.size (); j++) + all_grobs[j]->translate_axis (translates[j], a); } Real @@ -318,7 +277,7 @@ Align_interface::get_pure_child_y_translation (Grob *me, Grob *ch, int start, in } else { - vector translates = get_extents_aligned_translates (me, all_grobs, Y_AXIS, true, start, end); + vector translates = get_minimum_translations (me, all_grobs, Y_AXIS, true, start, end); if (translates.size ()) { @@ -330,7 +289,7 @@ Align_interface::get_pure_child_y_translation (Grob *me, Grob *ch, int start, in return 0; } - programming_error (_ ("tried to get a translation for something that is no child of mine")); + programming_error ("tried to get a translation for something that is no child of mine"); return 0; } @@ -366,46 +325,6 @@ Align_interface::set_ordered (Grob *me) ga->set_ordered (true); } -int -Align_interface::stretchable_children_count (Grob const *me) -{ - extract_grob_set (me, "elements", elts); - int ret = 0; - - /* start at 1: we will never move the first child while stretching */ - for (vsize i = 1; i < elts.size (); i++) - if (!to_boolean (elts[i]->get_property ("keep-fixed-while-stretching")) - && !elts[i]->extent (elts[i], Y_AXIS).is_empty ()) - ret++; - - return ret; -} - -MAKE_SCHEME_CALLBACK (Align_interface, calc_max_stretch, 1) -SCM -Align_interface::calc_max_stretch (SCM smob) -{ - Grob *me = unsmob_grob (smob); - Spanner *spanner_me = dynamic_cast (me); - Real ret = 0; - - if (spanner_me && stretchable_children_count (me) > 0) - { - Paper_column *left = dynamic_cast (spanner_me->get_bound (LEFT)); - Real height = me->extent (me, Y_AXIS).length (); - SCM line_break_details = left->get_property ("line-break-system-details"); - SCM fixed_offsets = scm_assq (ly_symbol2scm ("alignment-offsets"), - line_break_details); - - /* if there are fixed offsets, we refuse to stretch */ - if (fixed_offsets != SCM_BOOL_F) - ret = 0; - else - ret = height * height / 80.0; /* why this, exactly? -- jneem */ - } - return scm_from_double (ret); -} - ADD_INTERFACE (Align_interface, "Order grobs from top to bottom, left to right, right to left" " or bottom to top. For vertical alignments of staves, the" diff --git a/lily/arpeggio.cc b/lily/arpeggio.cc index 8e6e9c5a33..89bb54f677 100644 --- a/lily/arpeggio.cc +++ b/lily/arpeggio.cc @@ -204,8 +204,7 @@ Arpeggio::pure_height (SCM smob, SCM, SCM) } ADD_INTERFACE (Arpeggio, - "Functions and settings for drawing an arpeggio symbol (a" - " wavy line left to noteheads.", + "Functions and settings for drawing an arpeggio symbol.", /* properties */ "arpeggio-direction " diff --git a/lily/auto-beam-engraver.cc b/lily/auto-beam-engraver.cc index 4c813a7038..c44e59ccde 100644 --- a/lily/auto-beam-engraver.cc +++ b/lily/auto-beam-engraver.cc @@ -434,7 +434,7 @@ ADD_TRANSLATOR (Auto_beam_engraver, /* read */ "autoBeaming " - "autoBeamSettings " + "beamSettings " "beatLength " "subdivideBeams ", diff --git a/lily/axis-group-interface.cc b/lily/axis-group-interface.cc index 87abab3a2f..4ce0a01a65 100644 --- a/lily/axis-group-interface.cc +++ b/lily/axis-group-interface.cc @@ -10,15 +10,16 @@ #include "align-interface.hh" #include "directional-element-interface.hh" -#include "pointer-group-interface.hh" #include "grob-array.hh" #include "hara-kiri-group-spanner.hh" #include "international.hh" #include "lookup.hh" #include "paper-column.hh" #include "paper-score.hh" +#include "pointer-group-interface.hh" #include "separation-item.hh" #include "skyline-pair.hh" +#include "staff-grouper-interface.hh" #include "stencil.hh" #include "system.hh" #include "warn.hh" @@ -579,7 +580,7 @@ add_grobs_of_one_priority (Skyline_pair *const skylines, b.translate (Offset (0, dir*dist)); elements[i]->translate_axis (dir*dist, Y_AXIS); } - (*skylines)[dir].insert (b, 0, X_AXIS); + skylines->insert (b, 0, X_AXIS); elements[i]->set_property ("outside-staff-priority", SCM_BOOL_F); last_affected_position[dir] = b[X_AXIS][RIGHT]; } @@ -641,7 +642,11 @@ Axis_group_interface::skyline_spacing (Grob *me, vector elements) current_elts.push_back (elements[i]); while (i + 1 < elements.size () && scm_eq_p (elements[i+1]->get_property ("outside-staff-priority"), priority)) - current_elts.push_back (elements[++i]); + { + if (!to_boolean (elements[i+1]->get_property ("cross-staff"))) + current_elts.push_back (elements[i+1]); + ++i; + } add_grobs_of_one_priority (&skylines, current_elts, x_common, y_common); } @@ -649,21 +654,6 @@ Axis_group_interface::skyline_spacing (Grob *me, vector elements) return skylines; } -MAKE_SCHEME_CALLBACK (Axis_group_interface, calc_max_stretch, 1) -SCM -Axis_group_interface::calc_max_stretch (SCM smob) -{ - Grob *me = unsmob_grob (smob); - Real ret = 0; - extract_grob_set (me, "elements", elts); - - for (vsize i = 0; i < elts.size (); i++) - if (Axis_group_interface::has_interface (elts[i])) - ret += robust_scm2double (elts[i]->get_property ("max-stretch"), 0.0); - - return scm_from_double (ret); -} - MAKE_SCHEME_CALLBACK (Axis_group_interface, print, 1) SCM Axis_group_interface::print (SCM smob) @@ -683,20 +673,47 @@ Axis_group_interface::print (SCM smob) return ret.smobbed_copy (); } +MAKE_SCHEME_CALLBACK (Axis_group_interface, calc_next_staff_spacing, 1) +SCM +Axis_group_interface::calc_next_staff_spacing (SCM smob) +{ + Grob *me = unsmob_grob (smob); + Grob *grouper = unsmob_grob (me->get_object ("staff-grouper")); + + if (grouper) + { + Grob *last_in_group = Staff_grouper_interface::get_last_grob (grouper); + if (me == last_in_group) + return grouper->get_property ("after-last-staff-spacing"); + else + return grouper->get_property ("between-staff-spacing"); + } + return me->get_property ("default-next-staff-spacing"); +} + ADD_INTERFACE (Axis_group_interface, "An object that groups other layout objects.", + // TODO: some of these properties are specific to + // VerticalAxisGroup. We should split off a + // vertical-axis-group-interface. /* properties */ "X-common " "Y-common " "adjacent-pure-heights " "axes " + "default-next-staff-spacing " "elements " + "inter-loose-line-spacing " + "inter-staff-spacing " "keep-fixed-while-stretching " "max-stretch " + "next-staff-spacing " "no-alignment " "pure-Y-common " "pure-relevant-items " "pure-relevant-spanners " + "staff-affinity " + "staff-grouper " "vertical-skylines " ); diff --git a/lily/beam-setting-scheme.cc b/lily/beam-setting-scheme.cc new file mode 100644 index 0000000000..9ac70202cd --- /dev/null +++ b/lily/beam-setting-scheme.cc @@ -0,0 +1,67 @@ +/* + beam-setting-scheme.cc -- Retrieving beam settings + + source file of the GNU LilyPond music typesetter + + Copyright (c) 2009 Carl Sorensen +*/ + +#include "beam-settings.hh" +#include "context.hh" +#include "guile-compatibility.hh" + +LY_DEFINE (ly_grouping_rules, "ly:grouping-rules", + 3, 0, 0, (SCM settings, SCM time_signature, SCM rule_type), + "Return grouping rules for @var{time-signature} and" + " @var{rule-type} from @var{settings}.") +{ + LY_ASSERT_TYPE (ly_cheap_is_list, settings, 1); + LY_ASSERT_TYPE (scm_is_pair, time_signature, 2); + LY_ASSERT_TYPE (ly_is_symbol, rule_type, 3); + + SCM grouping_rules = SCM_EOL; + if (scm_is_pair (settings)) + grouping_rules = + ly_assoc_get (scm_list_2 (time_signature, rule_type), + settings, + SCM_EOL); + return grouping_rules; +} + +LY_DEFINE (ly_beam_grouping, "ly:beam-grouping", + 4, 0, 0, (SCM settings, SCM time_signature, SCM rule_type, + SCM beam_type), + "Return grouping for beams of @var{beam-type} in" + " @var{time-signature} for" + " @var{rule-type} from @var{settings}.") +{ + LY_ASSERT_TYPE (ly_cheap_is_list, settings, 1); + LY_ASSERT_TYPE (scm_is_pair, time_signature, 2); + LY_ASSERT_TYPE (ly_is_symbol, rule_type, 3); + SCM_ASSERT_TYPE (scm_is_symbol(beam_type) || scm_is_pair(beam_type), + beam_type, SCM_ARG4, __FUNCTION__, "symbol or pair"); + SCM beam_grouping = + ly_assoc_get (beam_type, + ly_grouping_rules (settings,time_signature,rule_type), + SCM_EOL); + return beam_grouping; +} + +LY_DEFINE (ly_beat_grouping, "ly:beat-grouping", + 1, 0, 0, (SCM context), + "Return default beat grouping currently active in @var{context}.") +{ + LY_ASSERT_SMOB (Context, context, 1); + Context *c = unsmob_context (context); + SCM time_signature = + c->get_property ("timeSignatureFraction"); + SCM settings = + c->get_property("beamSettings"); + SCM beat_grouping = + ly_beam_grouping (settings, + time_signature, + ly_symbol2scm ("end"), + ly_symbol2scm ("*")); + return beat_grouping; +} + diff --git a/lily/beaming-pattern.cc b/lily/beaming-pattern.cc index 251e65bb99..5e6d29ca68 100644 --- a/lily/beaming-pattern.cc +++ b/lily/beaming-pattern.cc @@ -13,8 +13,9 @@ (c) 1999--2009 Han-Wen Nienhuys */ -#include "beaming-pattern.hh" #include "context.hh" +#include "beam-settings.hh" +#include "beaming-pattern.hh" /* Represents a stem belonging to a beam. Sometimes (for example, if the stem @@ -52,7 +53,7 @@ Beam_rhythmic_element::de_grace () { if (start_moment_.grace_part_) { - start_moment_.main_part_ = start_moment_.grace_part_; + start_moment_.main_part_ = start_moment_.grace_part_; start_moment_.grace_part_ = 0; } } @@ -150,7 +151,7 @@ Beaming_pattern::beamify (Beaming_options const &options) void Beaming_pattern::find_rhythmic_importance (Beaming_options const &options) { - Moment measure_pos (0); + Moment measure_pos (0); SCM grouping = options.grouping_; vsize i = 0; @@ -243,7 +244,7 @@ Beaming_pattern::beamlet_count (int i, Direction d) const void Beaming_options::from_context (Context *context) { - grouping_ = context->get_property ("beatGrouping"); + grouping_ = ly_beat_grouping (context->self_scm ()); subdivide_beams_ = to_boolean (context->get_property ("subdivideBeams")); beat_length_ = robust_scm2moment (context->get_property ("beatLength"), Moment (1, 4)); measure_length_ = robust_scm2moment (context->get_property ("measureLength"), Moment (4, 4)); diff --git a/lily/constrained-breaking.cc b/lily/constrained-breaking.cc index f7f832b57b..8fb24f1eab 100644 --- a/lily/constrained-breaking.cc +++ b/lily/constrained-breaking.cc @@ -12,6 +12,7 @@ #include "international.hh" #include "main.hh" #include "output-def.hh" +#include "page-layout-problem.hh" #include "paper-column.hh" #include "paper-score.hh" #include "simple-spacer.hh" @@ -333,11 +334,15 @@ Constrained_breaking::initialize () Output_def *l = pscore_->layout (); System *sys = pscore_->root_system (); - Real space = robust_scm2double (l->c_variable ("ideal-system-space"), 0); - SCM padding_scm = l->c_variable ("page-breaking-between-system-padding"); - if (!scm_is_number (padding_scm)) - padding_scm = l->c_variable ("between-system-padding"); - Real padding = robust_scm2double (padding_scm, 0.0); + + // TODO: add support for minimum-distance and stretchability here and + // to the page-breaker. + SCM spacing_spec = l->c_variable ("between-system-spacing"); + SCM page_breaking_spacing_spec = l->c_variable ("page-breaking-between-system-spacing"); + Real space = 0; + Real padding = 0; + Page_layout_problem::read_spacing_spec (spacing_spec, &padding, ly_symbol2scm ("padding")); + Page_layout_problem::read_spacing_spec (page_breaking_spacing_spec, &padding, ly_symbol2scm ("padding")); Interval first_line = line_dimensions_int (pscore_->layout (), 0); Interval other_lines = line_dimensions_int (pscore_->layout (), 1); @@ -367,6 +372,7 @@ Constrained_breaking::initialize () break; Grob *c = all_[breaks_[j]]; + line.last_column_ = c; line.break_penalty_ = robust_scm2double (c->get_property ("line-break-penalty"), 0); line.page_penalty_ = robust_scm2double (c->get_property ("page-break-penalty"), 0); line.turn_penalty_ = robust_scm2double (c->get_property ("page-turn-penalty"), 0); diff --git a/lily/context-scheme.cc b/lily/context-scheme.cc index 9ce9a9baa0..aef5404768 100644 --- a/lily/context-scheme.cc +++ b/lily/context-scheme.cc @@ -69,14 +69,14 @@ LY_DEFINE (ly_context_pushpop_property, "ly:context-pushpop-property", } LY_DEFINE (ly_context_property, "ly:context-property", - 2, 0, 0, (SCM c, SCM name), - "Return the value of @var{name} from context @var{c}.") + 2, 0, 0, (SCM context, SCM sym), + "Return the value for property @var{sym} in @var{context}.") { - LY_ASSERT_SMOB (Context, c, 1); - LY_ASSERT_TYPE (ly_is_symbol, name, 2); + LY_ASSERT_SMOB (Context, context, 1); + LY_ASSERT_TYPE (ly_is_symbol, sym, 2); - Context *t = unsmob_context (c); - return t->internal_get_property (name); + Context *t = unsmob_context (context); + return t->internal_get_property (sym); } LY_DEFINE (ly_context_set_property_x, "ly:context-set-property!", diff --git a/lily/dispatcher.cc b/lily/dispatcher.cc index 29ad2ba376..5101e158e3 100644 --- a/lily/dispatcher.cc +++ b/lily/dispatcher.cc @@ -13,7 +13,7 @@ #include "warn.hh" IMPLEMENT_SMOBS (Dispatcher); -IMPLEMENT_TYPE_P (Dispatcher, "dispatcher"); +IMPLEMENT_TYPE_P (Dispatcher, "ly:dispatcher?"); IMPLEMENT_DEFAULT_EQUAL_P (Dispatcher); Dispatcher::~Dispatcher () diff --git a/lily/font-metric-scheme.cc b/lily/font-metric-scheme.cc index bb4dbd401c..cf351b2628 100644 --- a/lily/font-metric-scheme.cc +++ b/lily/font-metric-scheme.cc @@ -120,7 +120,7 @@ LY_DEFINE (ly_text_dimension, "ly:text-dimension", LY_ASSERT_SMOB (Font_metric, font, 1); LY_ASSERT_TYPE (scm_is_string, text, 2); - Stencil stc (fm->text_stencil (ly_scm2string (text))); + Stencil stc (fm->text_stencil (ly_scm2string (text), false)); return scm_cons (ly_interval2scm (stc.extent (X_AXIS)), ly_interval2scm (stc.extent (Y_AXIS))); } diff --git a/lily/font-metric.cc b/lily/font-metric.cc index 12d8807831..928adef851 100644 --- a/lily/font-metric.cc +++ b/lily/font-metric.cc @@ -179,15 +179,15 @@ Font_metric::sub_fonts () const } Stencil -Font_metric::word_stencil (string str) const +Font_metric::word_stencil (string str, bool feta) const { - return text_stencil (str); + return text_stencil (str, feta); } Stencil -Font_metric::text_stencil (string /* str */) const +Font_metric::text_stencil (string, bool) const { - programming_error("Cannot get a text stencil from this font"); + programming_error ("Cannot get a text stencil from this font"); return Stencil (Box (), SCM_EOL); } diff --git a/lily/general-scheme.cc b/lily/general-scheme.cc index 8b5766387e..b74354c6bc 100644 --- a/lily/general-scheme.cc +++ b/lily/general-scheme.cc @@ -140,9 +140,10 @@ LY_DEFINE (ly_warning, "ly:warning", LY_DEFINE (ly_dir_p, "ly:dir?", 1, 0, 0, (SCM s), - "A type predicate. The direction@tie{}@code{s} is @code{-1}," - " @code{0} or@tie{}@code{1}, where @code{-1} represents" - " left or down and @code{1} represents right or up.") + "Is @var{s} a direction? Valid directions are @code{-1}," + " @code{0}, or@tie{}@code{1}, where @code{-1} represents" + " left or down, @code{1}@tie{}represents right or up, and @code{0}" + " represents a neutral direction.") { if (scm_is_number (s)) { @@ -311,10 +312,10 @@ LY_DEFINE (ly_effective_prefix, "ly:effective-prefix", } LY_DEFINE (ly_chain_assoc_get, "ly:chain-assoc-get", - 2, 1, 0, (SCM key, SCM achain, SCM dfault), + 2, 1, 0, (SCM key, SCM achain, SCM val), "Return value for @var{key} from a list of alists @var{achain}." - " If no entry is found, return @var{dfault} or @code{#f} if no" - " @var{dfault} is specified.") + " If no entry is found, return @var{val} or @code{#f} if" + " @var{val} is not specified.") { if (scm_is_pair (achain)) { @@ -322,9 +323,9 @@ LY_DEFINE (ly_chain_assoc_get, "ly:chain-assoc-get", if (scm_is_pair (handle)) return scm_cdr (handle); else - return ly_chain_assoc_get (key, scm_cdr (achain), dfault); + return ly_chain_assoc_get (key, scm_cdr (achain), val); } - return dfault == SCM_UNDEFINED ? SCM_BOOL_F : dfault; + return val == SCM_UNDEFINED ? SCM_BOOL_F : val; } diff --git a/lily/global-context-scheme.cc b/lily/global-context-scheme.cc index d672178a54..214710cf8d 100644 --- a/lily/global-context-scheme.cc +++ b/lily/global-context-scheme.cc @@ -24,25 +24,25 @@ LY_DEFINE (ly_format_output, "ly:format-output", " in its final state.") { Global_context *g = dynamic_cast (unsmob_context (context)); - - LY_ASSERT_TYPE (unsmob_global_context, context, 1) + + LY_ASSERT_TYPE (unsmob_global_context, context, 1); SCM output = g->get_output (); progress_indication ("\n"); if (Music_output *od = unsmob_music_output (output)) od->process (); - + return output; } LY_DEFINE (ly_make_global_translator, "ly:make-global-translator", - 1, 0, 0, (SCM global), - "Create a translator group and connect it to the global context" - " @var{global}. The translator group is returned.") + 1, 0, 0, (SCM global), + "Create a translator group and connect it to the global context" + " @var{global}. The translator group is returned.") { Global_context *g = dynamic_cast (unsmob_context (global)); - LY_ASSERT_TYPE (unsmob_global_context, global, 1) + LY_ASSERT_TYPE (unsmob_global_context, global, 1); Translator_group *tg = new Translator_group (); tg->connect_to_context (g); @@ -57,7 +57,7 @@ LY_DEFINE (ly_make_global_context, "ly:make-global-context", " block @var{output_def}. The context is returned.") { LY_ASSERT_SMOB (Output_def, output_def, 1); - Output_def *odef = unsmob_output_def (output_def); + Output_def *odef = unsmob_output_def (output_def); Global_context *glob = new Global_context (odef); diff --git a/lily/grace-engraver.cc b/lily/grace-engraver.cc index c377166d63..19072ae7ad 100644 --- a/lily/grace-engraver.cc +++ b/lily/grace-engraver.cc @@ -80,10 +80,8 @@ Grace_engraver::consider_change_grace_settings () = scm_cons (scm_cons (c->self_scm (), entry), grace_settings_); } else - { - programming_error ("cannot find context: "); - scm_display (context_name, scm_current_error_port ()); - } + programming_error ("cannot find context from graceSettings: " + + ly_symbol2string (context_name)); } } diff --git a/lily/grob-interface-scheme.cc b/lily/grob-interface-scheme.cc index 0472d5bef6..635ce5fc08 100644 --- a/lily/grob-interface-scheme.cc +++ b/lily/grob-interface-scheme.cc @@ -27,21 +27,24 @@ internal_add_interface (SCM a, SCM b, SCM c) } LY_DEFINE (ly_add_interface, "ly:add-interface", - 3, 0, 0, (SCM a, SCM b, SCM c), - "Add an interface description.") + 3, 0, 0, (SCM iface, SCM desc, SCM props), + "Add a new grob interface. @var{iface} is the" + " interface name, @var{desc} is the interface" + " description, and @var{props} is the list of" + " user-settable properties for the interface.") { - LY_ASSERT_TYPE (ly_is_symbol, a, 1); - LY_ASSERT_TYPE (scm_is_string, b, 2); - LY_ASSERT_TYPE (ly_is_list, c, 3); + LY_ASSERT_TYPE (ly_is_symbol, iface, 1); + LY_ASSERT_TYPE (scm_is_string, desc, 2); + LY_ASSERT_TYPE (ly_is_list, props, 3); - internal_add_interface (a,b,c); + internal_add_interface (iface, desc, props); return SCM_UNSPECIFIED; } LY_DEFINE (ly_all_grob_interfaces, "ly:all-grob-interfaces", 0, 0, 0, (), - "Get a hash table with all interface descriptions.") + "Return the hash table with all grob interface descriptions.") { return all_ifaces; } diff --git a/lily/grob-scheme.cc b/lily/grob-scheme.cc index 9c6f238895..c53aa6304d 100644 --- a/lily/grob-scheme.cc +++ b/lily/grob-scheme.cc @@ -17,7 +17,8 @@ LY_DEFINE (ly_grob_property_data, "ly:grob-property-data", 2, 0, 0, (SCM grob, SCM sym), - "Retrieve @var{sym} for @var{grob} but don't process callbacks.") + "Return the value for property @var{sym} of @var{grob}," + " but do not process callbacks.") { Grob *sc = unsmob_grob (grob); @@ -45,22 +46,21 @@ LY_DEFINE (ly_grob_set_property_x, "ly:grob-set-property!", } LY_DEFINE (ly_grob_property, "ly:grob-property", - 2, 1, 0, (SCM grob, SCM sym, SCM deflt), - "Return the value of a value in grob@tie{}@var{g} of property" - " @var{sym}. It returns @code{'()} (end-of-list) or" - " @var{deflt} (if specified) if @var{sym} is undefined" - " in@tie{}@var{g}.") + 2, 1, 0, (SCM grob, SCM sym, SCM val), + "Return the value for property @var{sym} of @var{grob}." + " If no value is found, return @var{val} or @code{'()}" + " if @var{val} is not specified.") { Grob *sc = unsmob_grob (grob); - + LY_ASSERT_SMOB (Grob, grob, 1); LY_ASSERT_TYPE (ly_is_symbol, sym, 2); - if (deflt == SCM_UNDEFINED) - deflt = SCM_EOL; + if (val == SCM_UNDEFINED) + val = SCM_EOL; SCM retval = sc->internal_get_property (sym); if (retval == SCM_EOL) - retval = deflt; + retval = val; return retval; } diff --git a/lily/grob.cc b/lily/grob.cc index a3f41a856d..ce3e41c76d 100644 --- a/lily/grob.cc +++ b/lily/grob.cc @@ -19,6 +19,7 @@ #include "music.hh" #include "output-def.hh" #include "pointer-group-interface.hh" +#include "program-option.hh" #include "stencil.hh" #include "stream-event.hh" #include "system.hh" @@ -533,6 +534,9 @@ Grob::fixup_refpoint () void Grob::warning (string s) const { + if (get_program_option ("warning-as-error")) + error (s); + SCM cause = self_scm (); while (Grob *g = unsmob_grob (cause)) cause = g->get_property ("cause"); @@ -559,6 +563,9 @@ Grob::name () const void Grob::programming_error (string s) const { + if (get_program_option ("warning-as-error")) + error (s); + SCM cause = self_scm (); while (Grob *g = unsmob_grob (cause)) cause = g->get_property ("cause"); @@ -569,7 +576,7 @@ Grob::programming_error (string s) const if (Music *m = unsmob_music (cause)) m->origin ()->message (s); else if (Stream_event *ev = unsmob_stream_event (cause)) - ev->origin ()->warning (s); + ev->origin ()->message (s); else ::message (s); } @@ -606,8 +613,8 @@ ADD_INTERFACE (Grob, " properties are variables that are specific to one grob." " Typically, lists of other objects, or results from" " computations are stored in mutable properties. In" - " particular, every call to @code{set-grob-property} (or its" - " C++ equivalent) sets a mutable property.\n" + " particular, every call to @code{ly:grob-set-property!}" + " (or its C++ equivalent) sets a mutable property.\n" "\n" "The properties @code{after-line-breaking} and" " @code{before-line-breaking} are dummies that are not" @@ -740,3 +747,17 @@ robust_relative_extent (Grob *me, Grob *refpoint, Axis a) return ext; } +// Checks whether there is a vertical alignment in the chain of +// parents between this and commony. +bool +Grob::check_cross_staff (Grob *commony) +{ + if (Align_interface::has_interface (commony)) + return true; + + for (Grob *g = this; g && g != commony; g = g->get_parent (Y_AXIS)) + if (Align_interface::has_interface (g)) + return true; + + return false; +} diff --git a/lily/include/align-interface.hh b/lily/include/align-interface.hh index 149ef321c1..467f1248f2 100644 --- a/lily/include/align-interface.hh +++ b/lily/include/align-interface.hh @@ -15,15 +15,13 @@ struct Align_interface { - DECLARE_SCHEME_CALLBACK (calc_positioning_done, (SCM)); - DECLARE_SCHEME_CALLBACK (stretch_after_break, (SCM element)); - DECLARE_SCHEME_CALLBACK (calc_max_stretch, (SCM)); - static void stretch (Grob *, Real amount, Axis a); - static void align_elements_to_extents (Grob *, Axis a); - static vector get_extents_aligned_translates (Grob *, vector const&, - Axis a, - bool safe, int start, int end); - static int stretchable_children_count (Grob const*); + DECLARE_SCHEME_CALLBACK (align_to_minimum_distances, (SCM)); + DECLARE_SCHEME_CALLBACK (align_to_ideal_distances, (SCM)); + static void align_elements_to_minimum_distances(Grob *, Axis a); + static void align_elements_to_ideal_distances(Grob *); + static vector get_minimum_translations (Grob *, vector const&, + Axis a, + bool safe, int start, int end); static void set_ordered (Grob *); static Axis axis (Grob *); static void add_element (Grob *, Grob *); diff --git a/lily/include/axis-group-interface.hh b/lily/include/axis-group-interface.hh index f852c92a34..b147896b05 100644 --- a/lily/include/axis-group-interface.hh +++ b/lily/include/axis-group-interface.hh @@ -25,9 +25,9 @@ struct Axis_group_interface DECLARE_SCHEME_CALLBACK (pure_height, (SCM smob, SCM start, SCM end)); DECLARE_SCHEME_CALLBACK (calc_skylines, (SCM smob)); DECLARE_SCHEME_CALLBACK (combine_skylines, (SCM smob)); - DECLARE_SCHEME_CALLBACK (calc_max_stretch, (SCM smob)); DECLARE_SCHEME_CALLBACK (print, (SCM smob)); DECLARE_SCHEME_CALLBACK (adjacent_pure_heights, (SCM)); + DECLARE_SCHEME_CALLBACK (calc_next_staff_spacing, (SCM)); static Interval relative_group_extent (vector const &list, Grob *common, Axis); static Interval relative_pure_height (Grob *me, int start, int end); diff --git a/lily/include/beam-settings.hh b/lily/include/beam-settings.hh new file mode 100644 index 0000000000..d66006321b --- /dev/null +++ b/lily/include/beam-settings.hh @@ -0,0 +1,18 @@ +/* + beam-settings.hh -- Prototypes for retrieving beam settings + + source file of the GNU LilyPond music typesetter + + Copyright (c) 2009 Carl Sorensen +*/ + +#ifndef BEAM_SETTINGS_HH +#define BEAM_SETTINGS_HH + +#include "lily-guile.hh" + +SCM ly_grouping_rules (SCM settings, SCM time_sig, SCM rule_type); +SCM ly_beam_grouping (SCM settings, SCM time_sig, SCM rule_type, + SCM beam_type); +SCM ly_beat_grouping (SCM context); +#endif // BEAM_SETTINGS_HH diff --git a/lily/include/constrained-breaking.hh b/lily/include/constrained-breaking.hh index 48771545e4..8378a959e2 100644 --- a/lily/include/constrained-breaking.hh +++ b/lily/include/constrained-breaking.hh @@ -15,6 +15,7 @@ #include "prob.hh" struct Line_details { + Grob *last_column_; Real force_; Interval extent_; /* Y-extent of the system */ @@ -43,6 +44,7 @@ struct Line_details { Line_details () { + last_column_ = 0; force_ = infinity_f; padding_ = 0; bottom_padding_ = 0; @@ -61,6 +63,7 @@ struct Line_details { Line_details (Prob *pb) { + last_column_ = 0; force_ = 0; extent_ = unsmob_stencil (pb->get_property ("stencil")) ->extent (Y_AXIS); padding_ = robust_scm2double (pb->get_property ("next-padding"), 0); diff --git a/lily/include/font-metric.hh b/lily/include/font-metric.hh index 8346b4378a..5c1eb50be3 100644 --- a/lily/include/font-metric.hh +++ b/lily/include/font-metric.hh @@ -28,8 +28,8 @@ public: SCM description_; string file_name_; - virtual Stencil text_stencil (string) const; - virtual Stencil word_stencil (string) const; + virtual Stencil text_stencil (string, bool) const; + virtual Stencil word_stencil (string, bool) const; // ugh. virtual Box text_dimension (string) const; diff --git a/lily/include/grob.hh b/lily/include/grob.hh index 66cc0530b7..3a724c8d95 100644 --- a/lily/include/grob.hh +++ b/lily/include/grob.hh @@ -128,6 +128,7 @@ public: void fixup_refpoint (); virtual Interval_t spanned_rank_interval () const; + bool check_cross_staff (Grob *common); }; /* smob utilities */ diff --git a/lily/include/lily-guile.hh b/lily/include/lily-guile.hh index 797d22d0a5..88c7fe8a1c 100644 --- a/lily/include/lily-guile.hh +++ b/lily/include/lily-guile.hh @@ -48,7 +48,7 @@ SCM ly_rational2scm (Rational); SCM ly_offset2scm (Offset); Offset ly_scm2offset (SCM); SCM ly_chain_assoc (SCM key, SCM achain); -SCM ly_chain_assoc_get (SCM key, SCM achain, SCM dfault); +SCM ly_chain_assoc_get (SCM key, SCM achain, SCM val); SCM ly_assoc_cdr (SCM key, SCM alist); SCM ly_assoc_get (SCM key, SCM alist, SCM def); Interval ly_scm2interval (SCM); diff --git a/lily/include/modified-font-metric.hh b/lily/include/modified-font-metric.hh index 101949674c..8b5b244fa1 100644 --- a/lily/include/modified-font-metric.hh +++ b/lily/include/modified-font-metric.hh @@ -17,7 +17,7 @@ struct Modified_font_metric : public Font_metric public: Box text_dimension (string) const; Box word_dimension (string) const; - Stencil text_stencil (string) const; + Stencil text_stencil (string, bool) const; static SCM make_scaled_font_metric (Font_metric *fm, Real magnification); size_t count () const; diff --git a/lily/include/page-breaking.hh b/lily/include/page-breaking.hh index c6c1bc02c8..e0b2abac33 100644 --- a/lily/include/page-breaking.hh +++ b/lily/include/page-breaking.hh @@ -54,12 +54,17 @@ struct Break_position Grob *col_; bool score_ender_; + /* if non-zero, this is the (fixed, uncompressed) number of lines between + this Break_position and the previous. */ + int forced_line_count_; + Break_position (vsize s=VPOS, vsize brk=VPOS, Grob *g=NULL, bool end=false) { system_spec_index_ = s; score_break_ = brk; col_ = g; score_ender_ = end; + forced_line_count_ = 0; } /* @@ -105,12 +110,13 @@ public: int max_systems_per_page () const; int min_systems_per_page () const; Real page_height (int page_number, bool last) const; - Real page_top_space () const; vsize system_count () const; Real line_count_penalty (int line_count) const; int line_count_status (int line_count) const; bool too_many_lines (int line_count) const; bool too_few_lines (int line_count) const; + Real min_whitespace_at_top_of_page (Line_details const&) const; + Real min_whitespace_at_bottom_of_page (Line_details const&) const; protected: Paper_book *book_; @@ -162,7 +168,6 @@ private: int systems_per_page_; int max_systems_per_page_; int min_systems_per_page_; - Real page_top_space_; vsize system_count_; vector current_configurations_; @@ -195,5 +200,8 @@ private: Page_spacing_result finalize_spacing_result (vsize configuration_index, Page_spacing_result); void create_system_list (); void find_chunks_and_breaks (Break_predicate); + SCM make_page (int page_num, bool last) const; + SCM get_page_configuration (SCM systems, int page_num, bool ragged, bool last); + SCM draw_page (SCM systems, SCM config, int page_num, bool last); }; #endif /* PAGE_BREAKING_HH */ diff --git a/lily/include/page-layout-problem.hh b/lily/include/page-layout-problem.hh new file mode 100644 index 0000000000..e7e8d73dba --- /dev/null +++ b/lily/include/page-layout-problem.hh @@ -0,0 +1,81 @@ +/* + page-layout-problem.hh -- space systems nicely on a page. If systems can + be stretched, do that too. + + source file of the GNU LilyPond music typesetter + + (c) 2009 Joe Neeman +*/ + +#ifndef PAGE_LAYOUT_HH +#define PAGE_LAYOUT_HH + +#include "simple-spacer.hh" +#include "skyline.hh" + +class Page_layout_problem +{ +public: + Page_layout_problem (Paper_book*, SCM page, SCM systems); + + SCM solution (bool ragged); + void set_header_height (Real); + void set_footer_height (Real); + static bool read_spacing_spec (SCM spec, Real* dest, SCM sym); + static bool is_spaceable (Grob *g); + static SCM get_details (Grob *g); + static SCM get_spacing_spec (Grob *before, Grob *after); + +protected: + void append_system (System*, Spring const&, Real padding); + void append_prob (Prob*, Spring const&, Real padding); + + void solve_rod_spring_problem (bool ragged); + SCM find_system_offsets (); + void distribute_loose_lines (vector const&, vector const&, Real, Real); + void add_loose_lines_as_spaceable_lines (vector const&, + vector const&, + vsize start, vsize end); + + static Grob* find_vertical_alignment (System*); + static void build_system_skyline (vector const&, vector const&, Skyline* up, Skyline* down); + static vector filter_dead_elements (vector const&); + + // This is a union (in spirit). + // Either staves must be empty or prob must be null. + typedef struct Element { + Prob *prob; + vector staves; + vector min_offsets; + + Element (vector const& a, vector const& o) + { + staves = a; + min_offsets = o; + prob = 0; + } + + Element (Prob *p) + { + prob = p; + } + } Element; + + static Interval first_staff_extent (Element const&); + static Interval last_staff_extent (Element const&); + static Interval prob_extent (Prob*); + static SCM get_details (Element const&); + static SCM details_get_property (SCM details, const char*); + static void alter_spring_from_spacing_spec (SCM spec, Spring* spring); + static void mark_as_spaceable (Grob*); + + vector springs_; + vector elements_; + vector solution_; + Skyline bottom_skyline_; + Real page_height_; + Real header_height_; + Real footer_height_; +}; + +#endif /* PAGE_LAYOUT_HH */ diff --git a/lily/include/page-spacing.hh b/lily/include/page-spacing.hh index 958a1b21ff..bf8a7e1826 100644 --- a/lily/include/page-spacing.hh +++ b/lily/include/page-spacing.hh @@ -83,15 +83,15 @@ struct Page_spacing Real rod_height_; Real spring_len_; Real inverse_spring_k_; - Real page_top_space_; Line_details last_line_; Line_details first_line_; + Page_breaking const *breaker_; - Page_spacing (Real page_height, Real page_top_space) + Page_spacing (Real page_height, Page_breaking const *breaker) { page_height_ = page_height; - page_top_space_ = page_top_space; + breaker_ = breaker; clear (); } diff --git a/lily/include/pango-font.hh b/lily/include/pango-font.hh index 09f3ff7fad..f36adffb3b 100644 --- a/lily/include/pango-font.hh +++ b/lily/include/pango-font.hh @@ -38,12 +38,12 @@ public: string description_string () const; SCM font_file_name () const; void register_font_file (string, string, int); - Stencil text_stencil (string, bool tight) const; + Stencil text_stencil (string, bool, bool) const; - Stencil pango_item_string_stencil (PangoItem const *, string, bool tight) const; + Stencil pango_item_string_stencil (PangoItem const *, string, bool) const; - virtual Stencil word_stencil (string) const; - virtual Stencil text_stencil (string) const; + virtual Stencil word_stencil (string, bool) const; + virtual Stencil text_stencil (string, bool) const; virtual void derived_mark () const; }; diff --git a/lily/include/prob.hh b/lily/include/prob.hh index 069aa07924..7e39582da6 100644 --- a/lily/include/prob.hh +++ b/lily/include/prob.hh @@ -50,7 +50,7 @@ public: DECLARE_UNSMOB(Prob,prob); SCM ly_prob_set_property_x (SCM system, SCM sym, SCM value); -SCM ly_prob_property (SCM system, SCM sym, SCM dfault); +SCM ly_prob_property (SCM prob, SCM sym, SCM val); SCM ly_prob_type_p (SCM obj, SCM sym); diff --git a/lily/include/skyline.hh b/lily/include/skyline.hh index 26830b92c9..38d922c6a5 100644 --- a/lily/include/skyline.hh +++ b/lily/include/skyline.hh @@ -67,6 +67,7 @@ public: Real height (Real airplane) const; Real max_height () const; void set_minimum_height (Real height); + void clear (); bool is_empty () const; }; diff --git a/lily/include/spring.hh b/lily/include/spring.hh index c379889adb..4288af5884 100644 --- a/lily/include/spring.hh +++ b/lily/include/spring.hh @@ -39,6 +39,7 @@ public: void set_distance (Real); void set_min_distance (Real); + void ensure_min_distance (Real); void set_inverse_stretch_strength (Real); void set_inverse_compress_strength (Real); void set_blocking_force (Real); diff --git a/lily/include/staff-grouper-interface.hh b/lily/include/staff-grouper-interface.hh new file mode 100644 index 0000000000..f5feaeb85d --- /dev/null +++ b/lily/include/staff-grouper-interface.hh @@ -0,0 +1,22 @@ +/* + staff-grouper-interface.hh -- declare Staff_grouper_interface + + source file of the GNU LilyPond music typesetter + + (c) 2009 Joe Neeman +*/ + +#ifndef STAFF_GROUPER_INTERFACE_HH +#define STAFF_GROUPER_INTERFACE_HH + +#include "grob.hh" + +class Staff_grouper_interface +{ +public: + DECLARE_GROB_INTERFACE (); + + static Grob *get_last_grob (Grob *); +}; + +#endif /* STAFF_GROUPER_INTERFACE_HH */ diff --git a/lily/input.cc b/lily/input.cc index 084b1f3b64..f2ddedd4e8 100644 --- a/lily/input.cc +++ b/lily/input.cc @@ -12,6 +12,7 @@ using namespace std; #include "international.hh" +#include "program-option.hh" #include "source-file.hh" #include "sources.hh" #include "warn.hh" @@ -79,15 +80,22 @@ Input::message (string s) const void Input::programming_error (string s) const { - message (_f ("programming error: %s", s.c_str ())); - message (_ ("continuing, cross fingers") + "\n"); + if (get_program_option ("warning-as-error")) + ::error (s); + else { + message (_f ("programming error: %s", s.c_str ())); + message (_ ("continuing, cross fingers") + "\n"); + } } void Input::warning (string s) const { - message (_f ("warning: %s", s)); + if (get_program_option ("warning-as-error")) + ::error (s); + else + message (_f ("warning: %s", s)); } void diff --git a/lily/laissez-vibrer-engraver.cc b/lily/laissez-vibrer-engraver.cc index 762d56d980..0c4c793679 100644 --- a/lily/laissez-vibrer-engraver.cc +++ b/lily/laissez-vibrer-engraver.cc @@ -7,7 +7,6 @@ */ - #include "engraver.hh" #include "item.hh" #include "pointer-group-interface.hh" @@ -20,8 +19,8 @@ class Laissez_vibrer_engraver : public Engraver Stream_event *event_; Grob *lv_column_; vector lv_ties_; - - void stop_translation_timestep (); + + void stop_translation_timestep (); DECLARE_ACKNOWLEDGER (note_head); protected: DECLARE_TRANSLATOR_LISTENER (laissez_vibrer); @@ -56,34 +55,33 @@ Laissez_vibrer_engraver::acknowledge_note_head (Grob_info inf) if (!event_) return; + SCM cause = event_->self_scm (); + if (!lv_column_) - { - lv_column_ = make_item ("LaissezVibrerTieColumn", event_->self_scm ()); - } + lv_column_ = make_item ("LaissezVibrerTieColumn", cause); - SCM cause = event_->self_scm (); Grob *lv_tie = make_item ("LaissezVibrerTie", cause); lv_tie->set_object ("note-head", inf.grob ()->self_scm ()); - + Pointer_group_interface::add_grob (lv_column_, ly_symbol2scm ("ties"), lv_tie); if (is_direction (unsmob_stream_event (cause)->get_property ("direction"))) { Direction d = to_dir (unsmob_stream_event (cause)->get_property ("direction")); - lv_tie->set_property ("direction", scm_from_int (d)); + lv_tie->set_property ("direction", scm_from_int (d)); } - + lv_tie->set_parent (lv_column_, Y_AXIS); lv_ties_.push_back (lv_tie); } ADD_ACKNOWLEDGER (Laissez_vibrer_engraver, note_head); -ADD_TRANSLATOR (Laissez_vibrer_engraver, +ADD_TRANSLATOR (Laissez_vibrer_engraver, /* doc */ "Create laissez vibrer items.", - + /* create */ "LaissezVibrerTie " "LaissezVibrerTieColumn ", diff --git a/lily/listener.cc b/lily/listener.cc index c8202a9d34..477733dfe2 100644 --- a/lily/listener.cc +++ b/lily/listener.cc @@ -58,4 +58,4 @@ Listener::equal_p (SCM a, SCM b) } IMPLEMENT_SIMPLE_SMOBS (Listener); -IMPLEMENT_TYPE_P (Listener, "listener"); +IMPLEMENT_TYPE_P (Listener, "ly:listener?"); diff --git a/lily/measure-grouping-engraver.cc b/lily/measure-grouping-engraver.cc index 03192a1def..d77cf8d499 100644 --- a/lily/measure-grouping-engraver.cc +++ b/lily/measure-grouping-engraver.cc @@ -11,6 +11,7 @@ #include "global-context.hh" #include "engraver.hh" #include "spanner.hh" +#include "beam-settings.hh" #include "translator.icc" @@ -61,7 +62,16 @@ Measure_grouping_engraver::process_music () if (now.grace_part_) return; - SCM grouping = get_property ("beatGrouping"); + SCM settings = get_property ("beamSettings"); + SCM grouping = SCM_EOL; + if (scm_is_pair (settings)) + { + SCM time_signature_fraction = get_property ("timeSignatureFraction"); + grouping = ly_beam_grouping (settings, + time_signature_fraction, + ly_symbol2scm ("end"), + ly_symbol2scm ("*")); + } if (scm_is_pair (grouping)) { Moment *measpos = unsmob_moment (get_property ("measurePosition")); @@ -83,19 +93,21 @@ Measure_grouping_engraver::process_music () programming_error ("last grouping not finished yet"); continue; } + if (grouplen > 1) + { + grouping_ = make_spanner ("MeasureGrouping", SCM_EOL); + grouping_->set_bound (LEFT, unsmob_grob (get_property ("currentMusicalColumn"))); - grouping_ = make_spanner ("MeasureGrouping", SCM_EOL); - grouping_->set_bound (LEFT, unsmob_grob (get_property ("currentMusicalColumn"))); - - stop_grouping_mom_ = now.main_part_ + Rational (grouplen - 1) * beat_length; - get_global_context ()->add_moment_to_process (Moment (stop_grouping_mom_)); + stop_grouping_mom_ = now.main_part_ + Rational (grouplen - 1) * beat_length; + get_global_context ()->add_moment_to_process (Moment (stop_grouping_mom_)); - if (grouplen == 3) - grouping_->set_property ("style", ly_symbol2scm ("triangle")); - else - grouping_->set_property ("style", ly_symbol2scm ("bracket")); + if (grouplen == 3) + grouping_->set_property ("style", ly_symbol2scm ("triangle")); + else + grouping_->set_property ("style", ly_symbol2scm ("bracket")); - break; + break; + } } } } @@ -118,7 +130,7 @@ ADD_TRANSLATOR (Measure_grouping_engraver, "beatLength " "currentMusicalColumn " "measurePosition " - "beatGrouping ", + "beamSettings ", /* write */ "" diff --git a/lily/modified-font-metric.cc b/lily/modified-font-metric.cc index 6972b44f92..71b532d618 100644 --- a/lily/modified-font-metric.cc +++ b/lily/modified-font-metric.cc @@ -102,12 +102,12 @@ Modified_font_metric::derived_mark () const } Stencil -Modified_font_metric::text_stencil (string text) const +Modified_font_metric::text_stencil (string text, bool feta) const { Box b; if (Pango_font *pf = dynamic_cast (orig_)) { - Stencil stc = pf->text_stencil (text); + Stencil stc = pf->text_stencil (text, feta); Box b = stc.extent_box (); @@ -116,7 +116,7 @@ Modified_font_metric::text_stencil (string text) const return scaled; } - return Font_metric::text_stencil (text); + return Font_metric::text_stencil (text, feta); } Box diff --git a/lily/music-scheme.cc b/lily/music-scheme.cc index c90acd5f17..21d223f2aa 100644 --- a/lily/music-scheme.cc +++ b/lily/music-scheme.cc @@ -21,13 +21,14 @@ LY_DEFINE (ly_music_length, "ly:music-length", return sc->get_length ().smobbed_copy (); } -LY_DEFINE (ly_music_property, - "ly:music-property", 2, 1, 0, (SCM mus, SCM sym, SCM dfault), - "Get the property @var{sym} of music expression @var{mus}." - " If @var{sym} is undefined, return @code{'()}.") +LY_DEFINE (ly_music_property, "ly:music-property", + 2, 1, 0, (SCM mus, SCM sym, SCM val), + "Return the value for property @var{sym} of music expression" + " @var{mus}. If no value is found, return @var{val} or" + " @code{'()} if @var{val} is not specified.") { LY_ASSERT_TYPE (unsmob_music, mus, 1); - return ly_prob_property (mus, sym, dfault); + return ly_prob_property (mus, sym, val); } LY_DEFINE (ly_music_set_property_x, "ly:music-set-property!", @@ -57,7 +58,7 @@ LY_DEFINE (ly_make_music, "ly:make-music", LY_DEFINE (ly_music_p, "ly:music?", 1, 0, 0, (SCM obj), - "Type predicate.") + "Is @var{obj} a music object?") { return scm_from_bool (unsmob_music (obj)); } @@ -76,8 +77,7 @@ LY_DEFINE (ly_music_mutable_properties, "ly:music-mutable-properties", LY_DEFINE (ly_music_list_p, "ly:music-list?", 1, 0, 0, (SCM lst), - "Type predicate: Return true if @var{lst} is a list" - " of music objects.") + "Is @var{lst} a list of music objects?") { if (scm_list_p (lst) == SCM_BOOL_T) while (scm_is_pair (lst)) diff --git a/lily/open-type-font-scheme.cc b/lily/open-type-font-scheme.cc index 2d33394fc8..3ce37b6ef7 100644 --- a/lily/open-type-font-scheme.cc +++ b/lily/open-type-font-scheme.cc @@ -15,6 +15,7 @@ LY_DEFINE (ly_font_sub_fonts, "ly:font-sub-fonts", 1, 0, 0, " names of the subfonts within @var{font}.") { LY_ASSERT_SMOB (Font_metric, font, 1); + Font_metric *fm = unsmob_metrics (font); return fm->sub_fonts (); } @@ -26,9 +27,11 @@ LY_DEFINE (ly_otf_font_glyph_info, "ly:otf-font-glyph-info", 2, 0, 0, { Modified_font_metric *fm = dynamic_cast (unsmob_metrics (font)); - Open_type_font *otf = dynamic_cast (fm->original_font ()); + Open_type_font *otf = fm + ? dynamic_cast (fm->original_font ()) + : dynamic_cast (unsmob_metrics (font)); - SCM_ASSERT_TYPE (otf, font, SCM_ARG1, __FUNCTION__, "OTF font-metric"); + SCM_ASSERT_TYPE (otf, font, SCM_ARG1, __FUNCTION__, "OpenType font"); LY_ASSERT_TYPE (scm_is_string, glyph, 2); SCM sym = scm_string_to_symbol (glyph); @@ -42,11 +45,11 @@ LY_DEFINE (ly_otf_font_table_data, "ly:otf-font-table-data", 2, 0, 0, { Modified_font_metric *fm = dynamic_cast (unsmob_metrics (font)); - - Open_type_font *otf = fm ? dynamic_cast (fm->original_font ()) + Open_type_font *otf = fm + ? dynamic_cast (fm->original_font ()) : dynamic_cast (unsmob_metrics (font)); - SCM_ASSERT_TYPE (otf, font, SCM_ARG1, __FUNCTION__, "Open type font"); + SCM_ASSERT_TYPE (otf, font, SCM_ARG1, __FUNCTION__, "OpenType font"); LY_ASSERT_TYPE (scm_is_string, tag, 2); char ctag [5] = " "; @@ -65,25 +68,39 @@ LY_DEFINE (ly_otf_font_p, "ly:otf-font?", 1, 0, 0, { Modified_font_metric *fm = dynamic_cast (unsmob_metrics (font)); - - Open_type_font *otf = fm ? dynamic_cast (fm->original_font ()) + Open_type_font *otf = fm + ? dynamic_cast (fm->original_font ()) : dynamic_cast (unsmob_metrics (font)); return scm_from_bool (otf); } -LY_DEFINE (ly_otf_glyph_list, "ly:otf-glyph-list", - 1, 0, 0, (SCM font), - "Return a list of glyph names for @var{font}.") +LY_DEFINE (ly_otf_glyph_count, "ly:otf-glyph-count", 1, 0, 0, + (SCM font), + "Return the the number of glyphs in @var{font}.") { Modified_font_metric *fm = dynamic_cast (unsmob_metrics (font)); + Open_type_font *otf = fm + ? dynamic_cast (fm->original_font ()) + : dynamic_cast (unsmob_metrics (font)); + + SCM_ASSERT_TYPE (otf, font, SCM_ARG1, __FUNCTION__, "OpenType font"); - Open_type_font *otf = fm ? dynamic_cast (fm->original_font ()) + return scm_from_int ((int) otf->count ()); +} + +LY_DEFINE (ly_otf_glyph_list, "ly:otf-glyph-list", 1, 0, 0, + (SCM font), + "Return a list of glyph names for @var{font}.") +{ + Modified_font_metric *fm + = dynamic_cast (unsmob_metrics (font)); + Open_type_font *otf = fm + ? dynamic_cast (fm->original_font ()) : dynamic_cast (unsmob_metrics (font)); + SCM_ASSERT_TYPE (otf, font, SCM_ARG1, __FUNCTION__, "OpenType font"); - SCM_ASSERT_TYPE (otf, font, SCM_ARG1, __FUNCTION__, "OTF font"); return otf->glyph_list (); - } diff --git a/lily/output-def-scheme.cc b/lily/output-def-scheme.cc index f3b7a1cf0a..73a8048bff 100644 --- a/lily/output-def-scheme.cc +++ b/lily/output-def-scheme.cc @@ -15,22 +15,22 @@ #include "lily-parser.hh" LY_DEFINE (ly_output_def_lookup, "ly:output-def-lookup", - 2, 1, 0, (SCM pap, SCM sym, SCM def), - "Look up @var{sym} in the @var{pap} output definition" - " (e.g., @code{\\paper}). Return the value or @var{def}" - " (which defaults to @code{'()}) if undefined.") + 2, 1, 0, (SCM def, SCM sym, SCM val), + "Return the value of @var{sym} in output definition @var{def}" + " (e.g., @code{\\paper}). If no value is found, return" + " @var{val} or @code{'()} if @var{val} is undefined.") { - LY_ASSERT_SMOB (Output_def, pap, 1); - Output_def *op = unsmob_output_def (pap); + LY_ASSERT_SMOB (Output_def, def, 1); + Output_def *op = unsmob_output_def (def); LY_ASSERT_TYPE (ly_is_symbol, sym, 2); SCM answer = op->lookup_variable (sym); if (answer == SCM_UNDEFINED) { - if (def == SCM_UNDEFINED) - def = SCM_EOL; + if (val == SCM_UNDEFINED) + val = SCM_EOL; - answer = def; + answer = val; } return answer; @@ -38,7 +38,7 @@ LY_DEFINE (ly_output_def_lookup, "ly:output-def-lookup", LY_DEFINE (ly_output_def_scope, "ly:output-def-scope", 1, 0, 0, (SCM def), - "Get the variable scope inside @var{def}.") + "Return the variable scope inside @var{def}.") { LY_ASSERT_SMOB (Output_def, def, 1); Output_def *op = unsmob_output_def (def); @@ -47,7 +47,7 @@ LY_DEFINE (ly_output_def_scope, "ly:output-def-scope", LY_DEFINE (ly_output_def_parent, "ly:output-def-parent", 1, 0, 0, (SCM def), - "Get the parent output definition of @var{def}.") + "Return the parent output definition of @var{def}.") { LY_ASSERT_SMOB (Output_def, def, 1); Output_def *op = unsmob_output_def (def); @@ -96,17 +96,17 @@ LY_DEFINE (ly_output_description, "ly:output-description", LY_DEFINE (ly_output_def_p, "ly:output-def?", 1, 0, 0, (SCM def), - "Is @var{def} a layout definition?") + "Is @var{def} an output definition?") { return ly_bool2scm (unsmob_output_def (def)); } LY_DEFINE (ly_paper_outputscale, "ly:paper-outputscale", - 1, 0, 0, (SCM bp), - "Get output-scale for @var{bp}.") + 1, 0, 0, (SCM def), + "Return the output-scale for output definition @var{def}.") { - LY_ASSERT_SMOB (Output_def, bp, 1); - Output_def *b = unsmob_output_def (bp); + LY_ASSERT_SMOB (Output_def, def, 1); + Output_def *b = unsmob_output_def (def); return scm_from_double (output_scale (b)); } @@ -118,35 +118,37 @@ LY_DEFINE (ly_make_output_def, "ly:make-output-def", return bp->unprotect (); } -LY_DEFINE (ly_paper_get_font, "ly:paper-get-font", 2, 0, 0, - (SCM paper_smob, SCM chain), - "Return a font metric satisfying the font-qualifiers" - " in the alist chain @var{chain}. (An alist chain is a" - " list of alists, containing grob properties.)") +LY_DEFINE (ly_paper_get_font, "ly:paper-get-font", + 2, 0, 0, (SCM def, SCM chain), + "Find a font metric in output definition @var{def} satisfying" + " the font-qualifiers in alist chain @var{chain}, and return" + " it. (An alist chain is a list of alists, containing grob" + " properties.)") { - LY_ASSERT_SMOB (Output_def, paper_smob, 1); + LY_ASSERT_SMOB (Output_def, def, 1); - Output_def *paper = unsmob_output_def (paper_smob); + Output_def *paper = unsmob_output_def (def); Font_metric *fm = select_font (paper, chain); return fm->self_scm (); } -LY_DEFINE (ly_paper_get_number, "ly:paper-get-number", 2, 0, 0, - (SCM layout_smob, SCM name), - "Return the layout variable @var{name}.") +LY_DEFINE (ly_paper_get_number, "ly:paper-get-number", + 2, 0, 0, (SCM def, SCM sym), + "Return the value of variable @var{sym} in output definition" + " @var{def} as a double.") { - LY_ASSERT_SMOB (Output_def, layout_smob, 1); - Output_def *layout = unsmob_output_def (layout_smob); - return scm_from_double (layout->get_dimension (name)); + LY_ASSERT_SMOB (Output_def, def, 1); + Output_def *layout = unsmob_output_def (def); + return scm_from_double (layout->get_dimension (sym)); } LY_DEFINE (ly_paper_fonts, "ly:paper-fonts", - 1, 0, 0, - (SCM bp), - "Return fonts from the @code{\\paper} block @var{bp}.") + 1, 0, 0, (SCM def), + "Return a list containing the fonts from output definition" + " @var{def} (e.g., @code{\\paper}).") { - LY_ASSERT_SMOB (Output_def, bp, 1); - Output_def *b = unsmob_output_def (bp); + LY_ASSERT_SMOB (Output_def, def, 1); + Output_def *b = unsmob_output_def (def); SCM tab1 = b->lookup_variable (ly_symbol2scm ("scaled-fonts")); SCM tab2 = b->lookup_variable (ly_symbol2scm ("pango-fonts")); diff --git a/lily/page-breaking.cc b/lily/page-breaking.cc index 668231f63a..8dc19ef357 100644 --- a/lily/page-breaking.cc +++ b/lily/page-breaking.cc @@ -68,6 +68,7 @@ #include "international.hh" #include "item.hh" #include "output-def.hh" +#include "page-layout-problem.hh" #include "page-spacing.hh" #include "paper-book.hh" #include "paper-score.hh" @@ -97,7 +98,9 @@ compress_lines (const vector &orig) compressed.compressed_nontitle_lines_count_ = old.compressed_nontitle_lines_count_ + (compressed.title_ ? 0 : 1); - compressed.title_ = compressed.title_ && old.title_; + // compressed.title_ is true if and only if the first of its + // compressed lines was a title. + compressed.title_ = old.title_; ret.back () = compressed; } else @@ -156,7 +159,6 @@ Page_breaking::Page_breaking (Paper_book *pb, Break_predicate is_break) system_count_ = 0; ragged_ = to_boolean (pb->paper_->c_variable ("ragged-bottom")); ragged_last_ = to_boolean (pb->paper_->c_variable ("ragged-last-bottom")); - page_top_space_ = robust_scm2double (pb->paper_->c_variable ("page-top-space"), 0); systems_per_page_ = max (0, robust_scm2int (pb->paper_->c_variable ("systems-per-page"), 0)); max_systems_per_page_ = max (0, robust_scm2int (pb->paper_->c_variable ("max-systems-per-page"), 0)); min_systems_per_page_ = max (0, robust_scm2int (pb->paper_->c_variable ("min-systems-per-page"), 0)); @@ -210,12 +212,6 @@ Page_breaking::min_systems_per_page () const return min_systems_per_page_; } -Real -Page_breaking::page_top_space () const -{ - return page_top_space_; -} - vsize Page_breaking::system_count () const { @@ -331,25 +327,33 @@ Page_breaking::systems () return scm_append (scm_reverse (ret)); } +SCM +Page_breaking::make_page (int page_num, bool last) const +{ + bool last_part = ly_scm2bool (book_->paper_->c_variable ("is-last-bookpart")); + SCM mod = scm_c_resolve_module ("scm page"); + SCM make_page_scm = scm_c_module_lookup (mod, "make-page"); + + make_page_scm = scm_variable_ref (make_page_scm); + + return scm_apply_0 (make_page_scm, + scm_list_n (book_->self_scm (), + ly_symbol2scm ("page-number"), scm_from_int (page_num), + ly_symbol2scm ("is-last-bookpart"), scm_from_bool (last_part), + ly_symbol2scm ("is-bookpart-last-page"), scm_from_bool (last), + SCM_UNDEFINED)); +} + Real Page_breaking::page_height (int page_num, bool last) const { - bool last_part = ly_scm2bool (book_->paper_->c_variable ("is-last-bookpart")); SCM mod = scm_c_resolve_module ("scm page"); + SCM page = make_page (page_num, last); SCM calc_height = scm_c_module_lookup (mod, "calc-printable-height"); - SCM make_page = scm_c_module_lookup (mod, "make-page"); - calc_height = scm_variable_ref (calc_height); - make_page = scm_variable_ref (make_page); - - SCM page = scm_apply_0 (make_page, scm_list_n ( - book_->self_scm (), - ly_symbol2scm ("page-number"), scm_from_int (page_num), - ly_symbol2scm ("is-last-bookpart"), scm_from_bool (last_part), - ly_symbol2scm ("is-bookpart-last-page"), scm_from_bool (last), - SCM_UNDEFINED)); + SCM height = scm_apply_1 (calc_height, page, SCM_EOL); - return scm_to_double (height) - page_top_space_; + return scm_to_double (height); } SCM @@ -365,38 +369,86 @@ Page_breaking::breakpoint_property (vsize breakpoint, char const *str) } SCM -Page_breaking::make_pages (vector lines_per_page, SCM systems) +Page_breaking::get_page_configuration (SCM systems, int page_num, bool ragged, bool last) { - SCM layout_module = scm_c_resolve_module ("scm layout-page-layout"); - SCM page_module = scm_c_resolve_module ("scm page"); + SCM dummy_page = make_page (page_num, last); + Page_layout_problem layout (book_, dummy_page, systems); + return scm_is_pair (systems) ? layout.solution (ragged) : SCM_EOL; +} + +SCM +Page_breaking::draw_page (SCM systems, SCM configuration, int page_num, bool last) +{ + // Create a stencil for each system. + SCM paper_systems = SCM_EOL; + for (SCM s = scm_reverse (systems); scm_is_pair (s); s = scm_cdr (s)) + { + SCM paper_system = scm_car (s); + if (Grob *g = unsmob_grob (scm_car (s))) + { + System *sys = dynamic_cast (g); + paper_system = sys->get_paper_system (); + } + + paper_systems = scm_cons (paper_system, paper_systems); + } - SCM make_page = scm_c_module_lookup (layout_module, "stretch-and-draw-page"); + // Create the page and draw it. + SCM page = make_page (page_num, last); + SCM page_module = scm_c_resolve_module ("scm page"); SCM page_stencil = scm_c_module_lookup (page_module, "page-stencil"); - make_page = scm_variable_ref (make_page); page_stencil = scm_variable_ref (page_stencil); - SCM book = book_->self_scm (); + Prob *p = unsmob_prob (page); + p->set_property ("lines", paper_systems); + p->set_property ("configuration", configuration); + scm_apply_1 (page_stencil, page, SCM_EOL); + + return page; +} + +SCM +Page_breaking::make_pages (vector lines_per_page, SCM systems) +{ int first_page_number = robust_scm2int (book_->paper_->c_variable ("first-page-number"), 1); - bool last_bookpart = ly_scm2bool (book_->paper_->c_variable ("is-last-bookpart")); SCM ret = SCM_EOL; SCM label_page_table = book_->top_paper ()->c_variable ("label-page-table"); if (label_page_table == SCM_UNDEFINED) label_page_table = SCM_EOL; + // Build a list of (systems . configuration) pairs. Note that we lay out + // the staves and find the configurations before drawing anything. Some + // grobs (like tuplet brackets) look at their neighbours while drawing + // themselves. If this happens before the neighbouring staves have + // been laid out, bad side-effects could happen (in particular, + // Align_interface::align_to_ideal_distances might be called). + SCM systems_and_configs = SCM_EOL; + for (vsize i = 0; i < lines_per_page.size (); i++) { - SCM page_num = scm_from_int (i + first_page_number); - bool partbook_last_page = (i == lines_per_page.size () - 1); - SCM rag = scm_from_bool (ragged () || ( partbook_last_page && ragged_last ())); + int page_num = i + first_page_number; + bool bookpart_last_page = (i == lines_per_page.size () - 1); + bool rag = ragged () || (bookpart_last_page && ragged_last ()); SCM line_count = scm_from_int (lines_per_page[i]); SCM lines = scm_list_head (systems, line_count); - SCM page = scm_apply_0 (make_page, - scm_list_n (book, lines, page_num, rag, - scm_from_bool (last_bookpart), - scm_from_bool (partbook_last_page), - SCM_UNDEFINED)); + SCM config = get_page_configuration (lines, page_num, rag, bookpart_last_page); + + systems_and_configs = scm_cons (scm_cons (lines, config), systems_and_configs); + systems = scm_list_tail (systems, line_count); + } + + // Now it's safe to make the pages. + int page_num = first_page_number + lines_per_page.size () - 1; + for (SCM s = systems_and_configs; scm_is_pair (s); s = scm_cdr (s)) + { + SCM lines = scm_caar (s); + SCM config = scm_cdar (s); + bool bookpart_last_page = (s == systems_and_configs); + SCM page = draw_page (lines, config, page_num, bookpart_last_page); + /* collect labels */ + SCM page_num_scm = scm_from_int (page_num); for (SCM l = lines ; scm_is_pair (l) ; l = scm_cdr (l)) { SCM labels = SCM_EOL; @@ -409,16 +461,14 @@ Page_breaking::make_pages (vector lines_per_page, SCM systems) labels = prob->get_property ("labels"); for (SCM lbls = labels ; scm_is_pair (lbls) ; lbls = scm_cdr (lbls)) - label_page_table = scm_cons (scm_cons (scm_car (lbls), page_num), + label_page_table = scm_cons (scm_cons (scm_car (lbls), page_num_scm), label_page_table); } - scm_apply_1 (page_stencil, page, SCM_EOL); ret = scm_cons (page, ret); - systems = scm_list_tail (systems, line_count); + --page_num; } book_->top_paper ()->set_variable (ly_symbol2scm ("label-page-table"), label_page_table); - ret = scm_reverse (ret); return ret; } @@ -438,14 +488,7 @@ Page_breaking::create_system_list () { if (Paper_score *ps = dynamic_cast (unsmob_music_output (scm_car (s)))) { - SCM system_count = ps->layout ()->c_variable ("system-count"); - - if (scm_is_number (system_count)) - s = scm_append (scm_list_3 (scm_list_1 (scm_car (s)), - scm_vector_to_list (ps->get_paper_systems ()), - scm_cdr (s))); - else - system_specs_.push_back (System_spec (ps)); + system_specs_.push_back (System_spec (ps)); } else { @@ -470,8 +513,24 @@ Page_breaking::find_chunks_and_breaks (Break_predicate is_break) { if (system_specs_[i].pscore_) { - vector cols - = system_specs_[i].pscore_->root_system ()->used_columns (); + vector cols; + + SCM system_count = system_specs_[i].pscore_->layout ()->c_variable ("system-count"); + if (scm_is_number (system_count)) + { + // With system-count given, the line configuration for + // this score is fixed. We need to ensure that chunk + // boundaries only occur at line breaks. + Constrained_breaking breaking (system_specs_[i].pscore_); + vector details = breaking.line_details (0, VPOS, scm_to_int (system_count)); + + for (vsize j = 0; j < details.size (); j++) + cols.push_back (details[j].last_column_); + } + else + cols = system_specs_[i].pscore_->root_system ()->used_columns (); + + int last_chunk_idx = -1; vector line_breaker_columns; line_breaker_columns.push_back (0); @@ -485,10 +544,22 @@ Page_breaking::find_chunks_and_breaks (Break_predicate is_break) cols[j], last); + // NOTE: even in the breaks_ list, forced_line_count_ + // refers to the number of lines between a + // Break_position and the start of that /chunk/. This + // is needed for system_count_bounds to work correctly, + // since it mixes Break_positions from breaks_ and + // chunks_. + if (scm_is_number (system_count)) + cur_pos.forced_line_count_ = j - last_chunk_idx; + if (break_point || (i == system_specs_.size () - 1 && last)) breaks_.push_back (cur_pos); if (chunk_end || last) - chunks_.push_back (cur_pos); + { + chunks_.push_back (cur_pos); + last_chunk_idx = j; + } if ((break_point || chunk_end) && !last) line_breaker_columns.push_back (j); @@ -564,7 +635,10 @@ Page_breaking::system_count_bounds (vector const &chunks, for (vsize i = 0; i + 1 < chunks.size (); i++) { vsize sys = next_system (chunks[i]); - if (system_specs_[sys].pscore_) + + if (chunks[i+1].forced_line_count_) + ret[i] = chunks[i+1].forced_line_count_; + else if (system_specs_[sys].pscore_) { vsize start; vsize end; @@ -647,7 +721,10 @@ Page_breaking::set_to_ideal_line_configuration (vsize start, vsize end) for (vsize i = 0; i+1 < current_chunks_.size (); i++) { vsize sys = next_system (current_chunks_[i]); - if (system_specs_[sys].pscore_) + + if (current_chunks_[i+1].forced_line_count_) + div.push_back (current_chunks_[i+1].forced_line_count_); + else if (system_specs_[sys].pscore_) { line_breaker_args (sys, current_chunks_[i], current_chunks_[i+1], &start, &end); div.push_back (line_breaking_[sys].best_solution (start, end).size ()); @@ -673,10 +750,11 @@ Page_breaking::cache_line_details (vsize configuration_index) if (cached_configuration_index_ != configuration_index) { cached_configuration_index_ = configuration_index; - SCM padding_scm = book_->paper_->c_variable ("page-breaking-between-system-padding"); - if (!scm_is_number (padding_scm)) - padding_scm = book_->paper_->c_variable ("between-system-padding"); - Real padding = robust_scm2double (padding_scm, 0.0); + Real padding = 0; + SCM spacing_spec = book_->paper_->c_variable ("between-system-spacing"); + SCM page_breaking_spacing_spec = book_->paper_->c_variable ("page-breaking-between-system-spacing"); + Page_layout_problem::read_spacing_spec (spacing_spec, &padding, ly_symbol2scm ("padding")); + Page_layout_problem::read_spacing_spec (page_breaking_spacing_spec, &padding, ly_symbol2scm ("padding")); Line_division &div = current_configurations_[configuration_index]; uncompressed_line_details_.clear (); @@ -756,6 +834,7 @@ vsize Page_breaking::min_page_count (vsize configuration, vsize first_page_num) { vsize ret = 1; + vsize page_starter = 0; Real cur_rod_height = 0; Real cur_spring_height = 0; Real cur_page_height = page_height (first_page_num, false); @@ -763,10 +842,8 @@ Page_breaking::min_page_count (vsize configuration, vsize first_page_num) cache_line_details (configuration); - // If the first line on a page has titles, allow them some extra space. - if (cached_line_details_.size () - && cached_line_details_[0].compressed_nontitle_lines_count_ < cached_line_details_[0].compressed_lines_count_) - cur_page_height += page_top_space (); + if (cached_line_details_.size ()) + cur_page_height -= min_whitespace_at_top_of_page (cached_line_details_[0]); for (vsize i = 0; i < cached_line_details_.size (); i++) { @@ -774,7 +851,8 @@ Page_breaking::min_page_count (vsize configuration, vsize first_page_num) Real next_rod_height = cur_rod_height + ext_len + ((cur_rod_height > 0) ? cached_line_details_[i].padding_: 0); Real next_spring_height = cur_spring_height + cached_line_details_[i].space_; - Real next_height = next_rod_height + (ragged () ? next_spring_height : 0); + Real next_height = next_rod_height + (ragged () ? next_spring_height : 0) + + min_whitespace_at_bottom_of_page (cached_line_details_[i]); int next_line_count = line_count + cached_line_details_[i].compressed_nontitle_lines_count_; if ((!too_few_lines (line_count) && (next_height > cur_page_height && cur_rod_height > 0)) @@ -785,10 +863,11 @@ Page_breaking::min_page_count (vsize configuration, vsize first_page_num) line_count = cached_line_details_[i].compressed_nontitle_lines_count_; cur_rod_height = ext_len; cur_spring_height = cached_line_details_[i].space_; + page_starter = i; + cur_page_height = page_height (first_page_num + ret, false); + cur_page_height -= min_whitespace_at_top_of_page (cached_line_details_[i]); - if (cached_line_details_[i].compressed_nontitle_lines_count_ < cached_line_details_[i].compressed_lines_count_) - cur_page_height += page_top_space (); ret++; } else @@ -813,6 +892,9 @@ Page_breaking::min_page_count (vsize configuration, vsize first_page_num) */ cur_page_height = page_height (first_page_num + ret - 1, true); + cur_page_height -= min_whitespace_at_top_of_page (cached_line_details_[page_starter]); + cur_page_height -= min_whitespace_at_bottom_of_page (cached_line_details_.back ()); + Real cur_height = cur_rod_height + ((ragged_last () || ragged ()) ? cur_spring_height : 0); if (!too_few_lines (line_count - cached_line_details_.back ().compressed_nontitle_lines_count_) && cur_height > cur_page_height @@ -962,7 +1044,7 @@ Page_breaking::space_systems_with_fixed_number_per_page (vsize configuration, vsize first_page_num) { Page_spacing_result res; - Page_spacing space (page_height (first_page_num, false), page_top_space_); + Page_spacing space (page_height (first_page_num, false), this); vsize line = 0; vsize page = 0; vsize page_first_line = 0; @@ -1015,7 +1097,7 @@ Page_breaking::pack_systems_on_least_pages (vsize configuration, vsize first_pag Page_spacing_result res; vsize page = 0; vsize page_first_line = 0; - Page_spacing space (page_height (first_page_num, false), page_top_space_); + Page_spacing space (page_height (first_page_num, false), this); cache_line_details (configuration); for (vsize line = 0; line < cached_line_details_.size (); line++) @@ -1117,7 +1199,7 @@ Page_breaking::finalize_spacing_result (vsize configuration, Page_spacing_result Page_spacing_result Page_breaking::space_systems_on_1_page (vector const &lines, Real page_height, bool ragged) { - Page_spacing space (page_height, page_top_space_); + Page_spacing space (page_height, this); Page_spacing_result ret; int line_count = 0; @@ -1173,8 +1255,8 @@ Page_breaking::space_systems_on_2_pages (vsize configuration, vsize first_page_n vector page1_status; vector page2_status; - Page_spacing page1 (page1_height, page_top_space_); - Page_spacing page2 (page2_height, page_top_space_); + Page_spacing page1 (page1_height, this); + Page_spacing page2 (page2_height, this); int page1_line_count = 0; int page2_line_count = 0; @@ -1276,3 +1358,45 @@ Page_breaking::last_break_position () const { return breaks_.size () - 1; } + +// This gives the minimum distance between the top of the +// printable area (ie. the bottom of the top-margin) and +// the extent box of the topmost system. +Real +Page_breaking::min_whitespace_at_top_of_page (Line_details const &line) const +{ + SCM first_system_spacing = book_->paper_->c_variable ("first-system-spacing"); + if (line.title_) + first_system_spacing = book_->paper_->c_variable ("first-system-title-spacing"); + + Real min_distance = -infinity_f; + Real padding = 0; + + Page_layout_problem::read_spacing_spec (first_system_spacing, + &min_distance, + ly_symbol2scm ("minimum-distance")); + Page_layout_problem::read_spacing_spec (first_system_spacing, + &padding, + ly_symbol2scm ("padding")); + + // FIXME: take into account the height of the header + return max (0.0, max (padding, min_distance - line.extent_[UP])); +} + +Real +Page_breaking::min_whitespace_at_bottom_of_page (Line_details const &line) const +{ + SCM last_system_spacing = book_->paper_->c_variable ("last-system-spacing"); + Real min_distance = -infinity_f; + Real padding = 0; + + Page_layout_problem::read_spacing_spec (last_system_spacing, + &min_distance, + ly_symbol2scm ("minimum-distance")); + Page_layout_problem::read_spacing_spec (last_system_spacing, + &padding, + ly_symbol2scm ("padding")); + + // FIXME: take into account the height of the footer + return max (0.0, max (padding, min_distance + line.extent_[DOWN])); +} diff --git a/lily/page-layout-problem.cc b/lily/page-layout-problem.cc new file mode 100644 index 0000000000..61a7ebb901 --- /dev/null +++ b/lily/page-layout-problem.cc @@ -0,0 +1,659 @@ +/* + page-layout-problem.cc -- space systems nicely on a page. If systems can + be stretched, do that too. + + source file of the GNU LilyPond music typesetter + + (c) 2009 Joe Neeman +*/ + +#include "page-layout-problem.hh" + +#include "align-interface.hh" +#include "hara-kiri-group-spanner.hh" +#include "international.hh" +#include "item.hh" +#include "output-def.hh" +#include "paper-book.hh" +#include "pointer-group-interface.hh" +#include "prob.hh" +#include "skyline-pair.hh" +#include "system.hh" + +Page_layout_problem::Page_layout_problem (Paper_book *pb, SCM page_scm, SCM systems) + : bottom_skyline_ (DOWN) +{ + Prob *page = unsmob_prob (page_scm); + header_height_ = 0; + footer_height_ = 0; + page_height_ = 100; + + if (page) + { + Stencil *head = unsmob_stencil (page->get_property ("head-stencil")); + Stencil *foot = unsmob_stencil (page->get_property ("foot-stencil")); + + header_height_ = head ? head->extent (Y_AXIS).length () : 0; + footer_height_ = foot ? foot->extent (Y_AXIS).length () : 0; + page_height_ = robust_scm2double (page->get_property ("paper-height"), 100); + } + + // Initially, bottom_skyline_ represents the top of the page. Make + // it solid, so that the top of the first system will be forced + // below the top of the printable area. + bottom_skyline_.set_minimum_height (-header_height_); + + SCM between_system_spacing = SCM_EOL; + SCM after_title_spacing = SCM_EOL; + SCM before_title_spacing = SCM_EOL; + SCM between_title_spacing = SCM_EOL; + + // first_system_spacing controls the spring from the top of the printable + // area to the first staff. It allows the user to control the offset of + // the first staff (as opposed to the top of the first system) from the + // top of the page. Similarly for last_system_spacing. + SCM first_system_spacing = SCM_EOL; + SCM last_system_spacing = SCM_EOL; + if (pb && pb->paper_) + { + Output_def *paper = pb->paper_; + between_system_spacing = paper->c_variable ("between-system-spacing"); + after_title_spacing = paper->c_variable ("after-title-spacing"); + before_title_spacing = paper->c_variable ("before-title-spacing"); + between_title_spacing = paper->c_variable ("between-title-spacing"); + last_system_spacing = paper->c_variable ("last-system-spacing"); + first_system_spacing = paper->c_variable ("first-system-spacing"); + if (scm_is_pair (systems) && unsmob_prob (scm_car (systems))) + first_system_spacing = paper->c_variable ("first-system-title-spacing"); + + // Note: the page height here does _not_ reserve space for headers and + // footers. This is because we want to anchor the first-system-spacing + // spring at the _top_ of the header. + page_height_ -= robust_scm2double (paper->c_variable ("top-margin"), 0) + + robust_scm2double (paper->c_variable ("bottom-margin"), 0); + } + bool last_system_was_title = false; + + + for (SCM s = systems; scm_is_pair (s); s = scm_cdr (s)) + { + bool first = (s == systems); + + if (Grob *g = unsmob_grob (scm_car (s))) + { + System *sys = dynamic_cast (g); + if (!sys) + { + programming_error ("got a grob for vertical spacing that wasn't a System"); + continue; + } + + SCM spec = first ? first_system_spacing + : (last_system_was_title ? after_title_spacing : between_system_spacing); + Spring spring (first ? 0 : 1, 0.0); + Real padding = 0.0; + alter_spring_from_spacing_spec (spec, &spring); + read_spacing_spec (spec, &padding, ly_symbol2scm ("padding")); + + append_system (sys, spring, padding); + last_system_was_title = false; + } + else if (Prob *p = unsmob_prob (scm_car (s))) + { + SCM spec = first ? first_system_spacing + : (last_system_was_title ? between_title_spacing : before_title_spacing); + Spring spring (first ? 0 : 1, 0.0); + Real padding = 0.0; + alter_spring_from_spacing_spec (spec, &spring); + read_spacing_spec (spec, &padding, ly_symbol2scm ("padding")); + + append_prob (p, spring, padding); + last_system_was_title = true; + } + else + programming_error ("got a system that was neither a Grob nor a Prob"); + } + + Spring last_spring (0, 0); + Real last_padding = 0; + alter_spring_from_spacing_spec (last_system_spacing, &last_spring); + read_spacing_spec (last_system_spacing, &last_padding, ly_symbol2scm ("padding")); + last_spring.ensure_min_distance (last_padding - bottom_skyline_.max_height () + footer_height_); + springs_.push_back (last_spring); +} + +void +Page_layout_problem::set_header_height (Real height) +{ + header_height_ = height; +} + +void +Page_layout_problem::set_footer_height (Real height) +{ + footer_height_ = height; +} + +Grob* +Page_layout_problem::find_vertical_alignment (System *sys) +{ + extract_grob_set (sys, "elements", elts); + for (vsize i = 0; i < elts.size (); ++i) + if (Align_interface::has_interface (elts[i])) + return elts[i]; + + return 0; +} + +void +Page_layout_problem::append_system (System *sys, Spring const& spring, Real padding) +{ + Grob *align = find_vertical_alignment (sys); + if (!align) + { + sys->programming_error ("no VerticalAlignment in system: can't do vertical spacing"); + return; + } + + align->set_property ("positioning-done", SCM_BOOL_T); + + extract_grob_set (align, "elements", all_elts); + vector elts = filter_dead_elements (all_elts); + vector minimum_offsets = Align_interface::get_minimum_translations (align, elts, Y_AXIS, + false, 0, 0); + + Skyline up_skyline (UP); + Skyline down_skyline (DOWN); + build_system_skyline (elts, minimum_offsets, &up_skyline, &down_skyline); + + Real minimum_distance = up_skyline.distance (bottom_skyline_) + padding; + + Spring spring_copy = spring; + spring_copy.ensure_min_distance (minimum_distance); + springs_.push_back (spring_copy); + + bottom_skyline_ = down_skyline; + elements_.push_back (Element (elts, minimum_offsets)); + + // Add the springs for the VerticalAxisGroups in this system. + + // If the user has specified the offsets of the individual staves, fix the + // springs at the given distances. Otherwise, use stretchable springs. + SCM details = get_details (elements_.back ()); + SCM manual_dists = ly_assoc_get (ly_symbol2scm ("alignment-distances"), details, SCM_EOL); + vsize last_spaceable_staff = 0; + bool found_spaceable_staff = false; + for (vsize i = 0; i < elts.size (); ++i) + { + if (is_spaceable (elts[i])) + { + // We don't add a spring for the first staff, since + // we are only adding springs _between_ staves here. + if (!found_spaceable_staff) + { + if (i > 0) + add_loose_lines_as_spaceable_lines (elts, minimum_offsets, 0, i-1); + + found_spaceable_staff = true; + last_spaceable_staff = i; + continue; + } + + Spring spring (0.5, 0.0); + SCM spec = elts[last_spaceable_staff]->get_property ("next-staff-spacing"); + alter_spring_from_spacing_spec (spec, &spring); + + springs_.push_back (spring); + Real min_distance = minimum_offsets[last_spaceable_staff] - minimum_offsets[i]; + springs_.back ().ensure_min_distance (min_distance); + + if (scm_is_pair (manual_dists)) + { + if (scm_is_number (scm_car (manual_dists))) + { + Real dy = scm_to_double (scm_car (manual_dists)); + + springs_.back ().set_distance (dy); + springs_.back ().set_min_distance (dy); + springs_.back ().set_inverse_stretch_strength (0); + } + manual_dists = scm_cdr (manual_dists); + } + last_spaceable_staff = i; + } + } + // Any loose lines hanging off the end are treated as spaceable + // lines. This might give slightly weird results if the hanging + // systems have staff-affinity != UP. It's not quite clear what + // should happen in that case, though. + if (last_spaceable_staff + 1 < elts.size ()) + add_loose_lines_as_spaceable_lines (elts, minimum_offsets, + found_spaceable_staff ? last_spaceable_staff + 1 : 0, + elts.size () - 1); + // Corner case: there was only one staff, and it wasn't spaceable. + // Mark it spaceable, because we do not allow non-spaceable staves + // to be at the top or bottom of a system. + else if (!found_spaceable_staff && elts.size ()) + mark_as_spaceable (elts[0]); +} + +// first and last are inclusive +void +Page_layout_problem::add_loose_lines_as_spaceable_lines (vector const& elts, + vector const& minimum_offsets, + vsize first, vsize last) +{ + vsize start = first; + vsize end = last; + if (start > 0) + --start; + if (end + 1 < elts.size ()) + ++end; + + for (vsize i = start; i < end; ++i) + { + SCM spec = get_spacing_spec (elts[i], elts[i+1]); + Spring spring (1.0, 0.0); + alter_spring_from_spacing_spec (spec, &spring); + if (spec == SCM_BOOL_F) + { + spring.set_inverse_compress_strength (10000); + spring.set_inverse_stretch_strength (10000); + } + + Real min_distance = minimum_offsets[i] - minimum_offsets[i+1]; + spring.ensure_min_distance (min_distance); + springs_.push_back (spring); + } + + for (vsize i = first; i <= last; ++i) + mark_as_spaceable (elts[i]); +} + +void +Page_layout_problem::append_prob (Prob *prob, Spring const& spring, Real padding) +{ + Skyline_pair *sky = Skyline_pair::unsmob (prob->get_property ("vertical-skylines")); + Real minimum_distance = 0; + if (sky) + { + minimum_distance = (*sky)[UP].distance (bottom_skyline_); + bottom_skyline_ = (*sky)[DOWN]; + } + else if (Stencil *sten = unsmob_stencil (prob->get_property ("stencil"))) + { + Interval iv = sten->extent (Y_AXIS); + minimum_distance = iv[UP] - bottom_skyline_.max_height (); + + bottom_skyline_.clear (); + bottom_skyline_.set_minimum_height (iv[DOWN]); + } + minimum_distance += padding; + + Spring spring_copy = spring; + spring_copy.ensure_min_distance (minimum_distance); + springs_.push_back (spring_copy); + elements_.push_back (Element (prob)); +} + +void +Page_layout_problem::solve_rod_spring_problem (bool ragged) +{ + Simple_spacer spacer; + + for (vsize i = 0; i < springs_.size (); ++i) + spacer.add_spring (springs_[i]); + + Real bottom_padding = 0; + Interval first_staff_iv (0, 0); + Interval last_staff_iv (0, 0); + if (elements_.size ()) + { + first_staff_iv = first_staff_extent (elements_[0]); + last_staff_iv = last_staff_extent (elements_.back ()); + + // TODO: junk bottom-space now that we have last-spring-spacing? + // bottom-space has the flexibility that one can do it per-system. + // NOTE: bottom-space is misnamed since it is not stretchable space. + if (Prob *p = elements_.back ().prob) + bottom_padding = robust_scm2double (p->get_property ("bottom-space"), 0); + else if (elements_.back ().staves.size ()) + { + SCM details = get_details (elements_.back ()); + bottom_padding = robust_scm2double (ly_assoc_get (ly_symbol2scm ("bottom-space"), + details, + SCM_BOOL_F), + 0.0); + } + } + + spacer.solve (page_height_ - bottom_padding, ragged); + solution_ = spacer.spring_positions (); +} + +// The solution_ vector stores the position of every live VerticalAxisGroup +// and every title. From that information, +// 1) within each system, stretch the staves so they land at the right position +// 2) find the offset of each system (relative to the printable area of the page). +// TODO: this function is getting too long, maybe split it up? +SCM +Page_layout_problem::find_system_offsets () +{ + SCM system_offsets = SCM_EOL; + SCM *tail = &system_offsets; + + // spring_idx 0 is the top of the page. Interesting values start from 1. + vsize spring_idx = 1; + for (vsize i = 0; i < elements_.size (); ++i) + { + if (elements_[i].prob) + { + *tail = scm_cons (scm_from_double (solution_[spring_idx]), SCM_EOL); + tail = SCM_CDRLOC (*tail); + spring_idx++; + } + else + { + // Getting this signs right here is a little tricky. The configuration + // we return has zero at the top of the page and positive numbers further + // down, as does the solution_ vector. Within a staff, however, positive + // numbers are up. + // TODO: perhaps change the way the page 'configuration variable works so + // that it is consistent with the usual up/down sign conventions in + // Lilypond. Then this would be less confusing. + + // These two positions are relative to the page (with positive numbers being + // down). + Real first_staff_position = solution_[spring_idx]; + Real first_staff_min_translation = elements_[i].min_offsets.size () ? elements_[i].min_offsets[0] : 0; + Real system_position = first_staff_position + first_staff_min_translation; + + // Position the staves within this system. + Real translation = 0; + vector loose_lines; + vector const& min_offsets = elements_[i].min_offsets; + vector loose_line_min_distances; + Grob *last_spaceable_line = 0; + Real last_spaceable_line_translation = 0; + for (vsize staff_idx = 0; staff_idx < elements_[i].staves.size (); ++staff_idx) + { + Grob *staff = elements_[i].staves[staff_idx]; + + if (is_spaceable (staff)) + { + // this is relative to the system: negative numbers are down. + translation = system_position - solution_[spring_idx]; + spring_idx++; + + // Lay out any non-spaceable lines between this line and + // the last one. + if (loose_lines.size ()) + { + loose_line_min_distances.push_back (min_offsets[staff_idx-1] - min_offsets[staff_idx]); + loose_lines.push_back (staff); + distribute_loose_lines (loose_lines, loose_line_min_distances, + last_spaceable_line_translation, translation); + loose_lines.clear (); + loose_line_min_distances.clear (); + } + last_spaceable_line = staff; + last_spaceable_line_translation = translation; + + staff->translate_axis (translation, Y_AXIS); + } + else + { + if (loose_lines.empty ()) + loose_lines.push_back (last_spaceable_line); + + loose_lines.push_back (staff); + loose_line_min_distances.push_back (min_offsets[staff_idx-1] - min_offsets[staff_idx]); + } + } + + // Corner case: even if a system has no live staves, it still takes up + // one spring (a system with one live staff also takes up one spring), + // which we need to increment past. + if (elements_[i].staves.empty ()) + spring_idx++; + + *tail = scm_cons (scm_from_double (system_position), SCM_EOL); + tail = SCM_CDRLOC (*tail); + } + } + + assert (spring_idx == solution_.size () - 1); + return system_offsets; +} + +// Given two lines that are already spaced (the first and last +// elements of loose_lines), distribute some unspaced lines between +// them. +void +Page_layout_problem::distribute_loose_lines (vector const &loose_lines, + vector const &min_distances, + Real first_translation, Real last_translation) +{ + Simple_spacer spacer; + for (vsize i = 0; i + 1 < loose_lines.size (); ++i) + { + SCM spec = get_spacing_spec (loose_lines[i], loose_lines[i+1]); + Spring spring (1.0, 0.0); + alter_spring_from_spacing_spec (spec, &spring); + spring.ensure_min_distance (min_distances[i]); + + if (spec == SCM_BOOL_F) + { + // Insert a very flexible spring, so it doesn't have much effect. + spring.set_inverse_stretch_strength (100000); + spring.set_inverse_compress_strength (100000); + } + + spacer.add_spring (spring); + } + + // Remember: offsets are decreasing, since we're going from UP to DOWN! + spacer.solve (first_translation - last_translation, false); + + vector solution = spacer.spring_positions (); + for (vsize i = 1; i + 1 < solution.size (); ++i) + loose_lines[i]->translate_axis (first_translation - solution[i], Y_AXIS); +} + +SCM +Page_layout_problem::solution (bool ragged) +{ + solve_rod_spring_problem (ragged); + return find_system_offsets (); +} + +// Build upper and lower skylines for a system. We don't yet know the positions +// of the staves within the system, so we make the skyline as conservative as +// possible. That is, for the upper skyline, we pretend that all of the staves +// in the system are packed together close to the top system; for the lower +// skyline, we pretend that all of the staves are packed together close to +// the bottom system. +// +// The upper skyline is relative to the top staff; the lower skyline is relative to +// the bottom staff. +void +Page_layout_problem::build_system_skyline (vector const& staves, + vector const& minimum_translations, + Skyline *up, + Skyline *down) +{ + if (minimum_translations.empty ()) + return; + + assert (staves.size () == minimum_translations.size ()); + Real first_translation = minimum_translations[0]; + Real last_dy = 0; + + for (vsize i = 0; i < staves.size (); ++i) + { + Real dy = minimum_translations[i] - first_translation; + Grob *g = staves[i]; + Skyline_pair *sky = Skyline_pair::unsmob (g->get_property ("vertical-skylines")); + if (sky) + { + up->raise (-dy); + up->merge ((*sky)[UP]); + up->raise (dy); + + down->raise (-dy); + down->merge ((*sky)[DOWN]); + down->raise (dy); + + last_dy = dy; + } + } + + // Leave the down skyline at a position + // relative to the bottom staff. + down->raise (-last_dy); +} + +Interval +Page_layout_problem::prob_extent (Prob *p) +{ + Stencil *sten = unsmob_stencil (p->get_property ("stencil")); + return sten ? sten->extent (Y_AXIS) : Interval (0, 0); +} + +Interval +Page_layout_problem::first_staff_extent (Element const& e) +{ + if (e.prob) + return prob_extent (e.prob); + else if (e.staves.size ()) + return e.staves[0]->extent (e.staves[0], Y_AXIS); + + return Interval (0, 0); +} + +Interval +Page_layout_problem::last_staff_extent (Element const& e) +{ + if (e.prob) + return prob_extent (e.prob); + else if (e.staves.size ()) + return e.staves.back ()->extent (e.staves.back (), Y_AXIS); + + return Interval (0, 0); +} + +SCM +Page_layout_problem::get_details (Element const& elt) +{ + if (elt.staves.empty ()) + return SCM_EOL; + + return get_details (elt.staves.back ()->get_system ()); +} + +SCM +Page_layout_problem::get_details (Grob *g) +{ + Grob *left_bound = dynamic_cast (g)->get_bound (LEFT); + return left_bound->get_property ("line-break-system-details"); +} + +bool +Page_layout_problem::is_spaceable (Grob *g) +{ + return !scm_is_number (g->get_property ("staff-affinity")); +} + +void +Page_layout_problem::mark_as_spaceable (Grob *g) +{ + g->set_property ("staff-affinity", SCM_BOOL_F); +} + +bool +Page_layout_problem::read_spacing_spec (SCM spec, Real* dest, SCM sym) +{ + SCM pair = scm_sloppy_assq (sym, spec); + if (scm_is_pair (pair) && scm_is_number (scm_cdr (pair))) + { + *dest = scm_to_double (scm_cdr (pair)); + return true; + } + return false; +} + +// Returns the spacing spec connecting BEFORE to AFTER. A return +// value of SCM_BOOL_F means that there should be no spring (in +// practice, this means that we use a very flexible spring). +SCM +Page_layout_problem::get_spacing_spec (Grob *before, Grob *after) +{ + if (is_spaceable (before)) + { + if (is_spaceable (after)) + return before->get_property ("next-staff-spacing"); + else + { + Direction affinity = to_dir (after->get_property ("staff-affinity")); + return (affinity == DOWN) ? SCM_BOOL_F : after->get_property ("inter-staff-spacing"); + } + } + else + { + if (is_spaceable (after)) + { + Direction affinity = to_dir (before->get_property ("staff-affinity")); + return (affinity == UP) ? SCM_BOOL_F : before->get_property ("inter-staff-spacing"); + } + else + { + Direction before_affinity = to_dir (before->get_property ("staff-affinity")); + Direction after_affinity = to_dir (after->get_property ("staff-affinity")); + if (after_affinity > before_affinity) + { + warning (_ ("staff-affinities should only decrease")); + after_affinity = before_affinity; + } + if (before_affinity != UP) + return before->get_property ("inter-loose-line-spacing"); + else if (after_affinity != DOWN) + return before->get_property ("inter-loose-line-spacing"); + } + } + return SCM_BOOL_F; +} + +void +Page_layout_problem::alter_spring_from_spacing_spec (SCM spec, Spring* spring) +{ + Real space; + Real stretch; + Real min_dist; + if (read_spacing_spec (spec, &space, ly_symbol2scm ("space"))) + spring->set_distance (space); + if (read_spacing_spec (spec, &min_dist, ly_symbol2scm ("minimum-distance"))) + spring->set_min_distance (min_dist); + spring->set_default_strength (); + + if (read_spacing_spec (spec, &stretch, ly_symbol2scm ("stretchability"))) + { + spring->set_inverse_stretch_strength (stretch); + spring->set_inverse_compress_strength (stretch); + } +} + +vector +Page_layout_problem::filter_dead_elements (vector const& input) +{ + vector output; + for (vsize i = 0; i < input.size (); ++i) + { + if (Hara_kiri_group_spanner::has_interface (input[i])) + Hara_kiri_group_spanner::consider_suicide (input[i]); + + if (input[i]->is_live ()) + output.push_back (input[i]); + } + + return output; +} diff --git a/lily/page-spacing.cc b/lily/page-spacing.cc index cc84cfd943..ab8085c1d5 100644 --- a/lily/page-spacing.cc +++ b/lily/page-spacing.cc @@ -16,9 +16,9 @@ void Page_spacing::calc_force () { - /* If the first system contains a title, we add back in the page-top-space. */ - bool starts_with_title = first_line_.compressed_nontitle_lines_count_ < first_line_.compressed_lines_count_; - Real height = starts_with_title ? page_height_ + page_top_space_ : page_height_; + Real height = page_height_ + - breaker_->min_whitespace_at_top_of_page (first_line_) + - breaker_->min_whitespace_at_bottom_of_page (last_line_); if (rod_height_ + last_line_.bottom_padding_ >= height) force_ = infinity_f; @@ -194,7 +194,7 @@ Page_spacer::calc_subproblem (vsize page, vsize line) { bool last = line == lines_.size () - 1; Page_spacing space (breaker_->page_height (page + first_page_num_, last), - breaker_->page_top_space ()); + breaker_); Page_spacing_node &cur = state_.at (line, page); bool ragged = ragged_ || (ragged_last_ && last); int line_count = 0; diff --git a/lily/pango-font.cc b/lily/pango-font.cc index d02b63ae7a..14ceadf438 100644 --- a/lily/pango-font.cc +++ b/lily/pango-font.cc @@ -285,19 +285,20 @@ Pango_font::physical_font_tab () const } Stencil -Pango_font::word_stencil (string str) const +Pango_font::word_stencil (string str, bool feta) const { - return text_stencil (str, true); + return text_stencil (str, feta, true); } Stencil -Pango_font::text_stencil (string str) const +Pango_font::text_stencil (string str, bool feta) const { - return text_stencil (str, false); + return text_stencil (str, feta, false); } Stencil Pango_font::text_stencil (string str, + bool feta, bool tight) const { GList *items @@ -346,10 +347,27 @@ Pango_font::text_stencil (string str, dest.add_stencil (item_stencil); } - // UGH. Should have flags per output format signifying supported - // options. string name = get_output_backend_name (); - if (name != "ps" && name != "eps") + string output_mod = "scm output-" + name; + SCM mod = scm_c_resolve_module (output_mod.c_str ()); + + bool has_utf8_string = false; + + if (ly_is_module (mod)) + { + SCM utf8_string = ly_module_lookup (mod, ly_symbol2scm ("utf-8-string")); + if (utf8_string != SCM_BOOL_F) + has_utf8_string = true; + } + + /* + The SVG backend only uses utf-8-string for the non-music + fonts, hence the check here. --pmccarty + + TODO: use a program option (-dmusic-strings-to-paths) here + instead that is enabled only when -dbackend=svg. + */ + if ((name == "svg" && !feta) || (name != "svg" && has_utf8_string)) { // For Pango based backends, we take a shortcut. SCM exp = scm_list_3 (ly_symbol2scm ("utf-8-string"), diff --git a/lily/paper-book-scheme.cc b/lily/paper-book-scheme.cc index 6714a46239..c3c45a1c5f 100644 --- a/lily/paper-book-scheme.cc +++ b/lily/paper-book-scheme.cc @@ -54,7 +54,8 @@ LY_DEFINE (ly_paper_book_systems, "ly:paper-book-systems", LY_DEFINE (ly_paper_book_paper, "ly:paper-book-paper", 1, 0, 0, (SCM pb), - "Return pages in book @var{pb}.") + "Return the paper output definition (@code{\\paper})" + " in book @var{pb}.") { LY_ASSERT_SMOB (Paper_book, pb, 1); Paper_book *pbook = unsmob_paper_book (pb); diff --git a/lily/paper-book.cc b/lily/paper-book.cc index fd519d5d75..3db1321f5e 100644 --- a/lily/paper-book.cc +++ b/lily/paper-book.cc @@ -601,8 +601,11 @@ Paper_book::pages () } else if (scm_is_pair (scores_)) { - SCM proc = paper_->c_variable ("page-breaking-wrapper"); - pages_ = scm_apply_0 (proc, scm_list_1 (self_scm ())); + SCM page_breaking = paper_->c_variable ("page-breaking"); + pages_ = scm_apply_0 (page_breaking, scm_list_1 (self_scm ())); + SCM post_process = paper_->c_variable ("page-post-process"); + if (ly_is_procedure (post_process)) + scm_apply_2 (post_process, paper_->self_scm (), pages_, SCM_EOL); /* set systems_ from the pages */ if (systems_ == SCM_BOOL_F) diff --git a/lily/paper-outputter.cc b/lily/paper-outputter.cc index 6aedacca91..d366426093 100644 --- a/lily/paper-outputter.cc +++ b/lily/paper-outputter.cc @@ -37,6 +37,13 @@ Paper_outputter::Paper_outputter (SCM port, string format) string module_name = "scm output-" + format; output_module_ = scm_c_resolve_module (module_name.c_str ()); + + /* + Enable errors for undefined stencil routines if + -dwarning-as-error is specified; else enable warnings. + */ + SCM proc = ly_lily_module_constant ("backend-testing"); + scm_call_1 (proc, output_module_); } Paper_outputter::~Paper_outputter () @@ -105,5 +112,14 @@ void Paper_outputter::close () { if (scm_port_p (file_) == SCM_BOOL_T) - scm_close_port (file_); + { + scm_close_port (file_); + /* + Remove the "warning" definitions for missing stencil + expressions so that we start fresh with the next \book + block. --pmccarty + */ + SCM proc = ly_lily_module_constant ("remove-stencil-warnings"); + scm_call_1 (proc, output_module_); + } } diff --git a/lily/paper-system-scheme.cc b/lily/paper-system-scheme.cc index 137cef0c5c..3b0c0c09c5 100644 --- a/lily/paper-system-scheme.cc +++ b/lily/paper-system-scheme.cc @@ -13,7 +13,8 @@ LY_DEFINE (ly_paper_system_p, "ly:paper-system?", 1, 0, 0, (SCM obj), - "Type predicate.") + "Is @var{obj} a C++ @code{Prob} object of type" + " @code{paper-system}?") { return ly_prob_type_p (obj, ly_symbol2scm ("paper-system")); } diff --git a/lily/prob-scheme.cc b/lily/prob-scheme.cc index cc74f8ada1..0f8c0f6bae 100644 --- a/lily/prob-scheme.cc +++ b/lily/prob-scheme.cc @@ -31,19 +31,21 @@ LY_DEFINE (ly_prob_property_p, "ly:prob-property?", } LY_DEFINE (ly_prob_property, "ly:prob-property", - 2, 1, 0, (SCM obj, SCM sym, SCM dfault), - "Return the value for @var{sym}.") + 2, 1, 0, (SCM prob, SCM sym, SCM val), + "Return the value for property @var{sym} of Prob object" + " @var{prob}. If no value is found, return @var{val} or" + " @code{'()} if @var{val} is not specified.") { - LY_ASSERT_SMOB (Prob, obj, 1); - Prob *ps = unsmob_prob (obj); + LY_ASSERT_SMOB (Prob, prob, 1); + Prob *ps = unsmob_prob (prob); LY_ASSERT_TYPE (ly_is_symbol, sym, 2); - if (dfault == SCM_UNDEFINED) - dfault = SCM_EOL; + if (val == SCM_UNDEFINED) + val = SCM_EOL; SCM retval = ps->internal_get_property (sym); if (retval == SCM_EOL) - return dfault; + return val; else return retval; } diff --git a/lily/program-option-scheme.cc b/lily/program-option-scheme.cc index 1e03c5f951..bfa5d09934 100644 --- a/lily/program-option-scheme.cc +++ b/lily/program-option-scheme.cc @@ -113,6 +113,8 @@ internal_set_option (SCM var, relative_includes = to_boolean (val); val = scm_from_bool (to_boolean (val)); } + else if (var == ly_symbol2scm ("warning-as-error")) + val = scm_from_bool (to_boolean (val)); scm_hashq_set_x (option_hash, var, val); } @@ -181,7 +183,8 @@ LY_DEFINE (ly_option_usage, "ly:option-usage", 0, 0, 0, (), LY_DEFINE (ly_add_option, "ly:add-option", 3, 0, 0, (SCM sym, SCM val, SCM description), - "Add a program option @var{sym} with default @var{val}.") + "Add a program option @var{sym}. @var{val} is the default" + " value and @var{description} is a string description.") { if (!option_hash) option_hash = scm_permanent_object (scm_c_make_hash_table (11)); diff --git a/lily/simple-closure.cc b/lily/simple-closure.cc index 34bfd58f1b..dc4c3f4f7f 100644 --- a/lily/simple-closure.cc +++ b/lily/simple-closure.cc @@ -84,8 +84,8 @@ evaluate_with_simple_closure (SCM delayed_argument, } LY_DEFINE (ly_simple_closure_p, "ly:simple-closure?", - 1,0,0, (SCM clos), - "Type predicate.") + 1, 0, 0, (SCM clos), + "Is @var{clos} a simple closure?") { return scm_from_bool (is_simple_closure (clos)); } diff --git a/lily/simple-spacer.cc b/lily/simple-spacer.cc index 1d38d9a70f..bab2a05dcb 100644 --- a/lily/simple-spacer.cc +++ b/lily/simple-spacer.cc @@ -216,7 +216,9 @@ Simple_spacer::compress_line () { Spring sp = sorted_springs[i]; - assert (sp.blocking_force () <= cur_force); + if (sp.blocking_force () > cur_force) + continue; + if (isinf (sp.blocking_force ())) break; @@ -234,7 +236,7 @@ Simple_spacer::compress_line () } cur_len -= block_dist; - inv_hooke -= sp.inverse_compress_strength (); + inv_hooke -= compressed ? sp.inverse_compress_strength () : sp.inverse_stretch_strength (); cur_force = sp.blocking_force (); } diff --git a/lily/skyline.cc b/lily/skyline.cc index a3047a98bb..e733cfd080 100644 --- a/lily/skyline.cc +++ b/lily/skyline.cc @@ -542,6 +542,12 @@ Skyline::is_empty () const return b.end_ == infinity_f && b.y_intercept_ == -infinity_f; } +void +Skyline::clear () +{ + buildings_.clear (); + empty_skyline (&buildings_); +} /****************************************************************/ diff --git a/lily/spring.cc b/lily/spring.cc index 67d41c9c39..f57695bfd7 100644 --- a/lily/spring.cc +++ b/lily/spring.cc @@ -32,10 +32,18 @@ Spring::Spring (Real dist, Real min_dist) void Spring::update_blocking_force () { - if (distance_ == min_distance_) - blocking_force_ = 0.0; + if (min_distance_ > distance_) + blocking_force_ = (min_distance_ - distance_) / inverse_stretch_strength_; else blocking_force_ = (min_distance_ - distance_) / inverse_compress_strength_; + + // If the spring is fixed, it's not clear what the natural value + // of blocking_force_ would be. -infinity_f works fine for now. + if (isnan (blocking_force_) || blocking_force_ == infinity_f) + blocking_force_ = -infinity_f; + + if (blocking_force_ >= 0) + inverse_compress_strength_ = 0; } /* scale a spring, but in a way that doesn't violate min_distance */ @@ -43,8 +51,9 @@ void Spring::operator*= (Real r) { distance_ = max (min_distance_, distance_ * r); - inverse_compress_strength_ = distance_ - min_distance_; + inverse_compress_strength_ = max (0.0, distance_ - min_distance_); inverse_stretch_strength_ *= 0.8; + update_blocking_force (); } bool @@ -90,7 +99,6 @@ Spring::set_distance (Real d) programming_error ("insane spring distance requested, ignoring it"); else { - min_distance_ = min (min_distance_, d); distance_ = d; update_blocking_force (); } @@ -104,11 +112,16 @@ Spring::set_min_distance (Real d) else { min_distance_ = d; - distance_ = max (distance_, min_distance_); update_blocking_force (); } } +void +Spring::ensure_min_distance (Real d) +{ + set_min_distance (max (d, min_distance_)); +} + void Spring::set_inverse_stretch_strength (Real f) { @@ -116,6 +129,8 @@ Spring::set_inverse_stretch_strength (Real f) programming_error ("insane spring constant"); else inverse_stretch_strength_ = f; + + update_blocking_force (); } void @@ -147,8 +162,9 @@ Spring::set_blocking_force (Real f) void Spring::set_default_strength () { - inverse_compress_strength_ = distance_ - min_distance_; - inverse_stretch_strength_ = distance_ - min_distance_; + inverse_compress_strength_ = (distance_ >= min_distance_) ? distance_ - min_distance_ : 0; + inverse_stretch_strength_ = distance_; + update_blocking_force (); } Real @@ -157,11 +173,15 @@ Spring::length (Real f) const Real force = max (f, blocking_force_); Real inv_k = force < 0.0 ? inverse_compress_strength_ : inverse_stretch_strength_; - if (isinf (force)) + if (force == infinity_f) { programming_error ("cruelty to springs"); force = 0.0; } - return distance_ + force * inv_k; + // There is a corner case here: if min_distance_ is larger than + // distance_ but the spring is fixed, then inv_k will be zero + // and we need to make sure that we return min_distance_. + return max (min_distance_, distance_ + force * inv_k); } + diff --git a/lily/staff-grouper-interface.cc b/lily/staff-grouper-interface.cc new file mode 100644 index 0000000000..0eae7e531f --- /dev/null +++ b/lily/staff-grouper-interface.cc @@ -0,0 +1,31 @@ +/* + staff-grouper-interface.cc -- implement Staff_grouper_interface + + source file of the GNU LilyPond music typesetter + + (c) 2009 Joe Neeman +*/ + +#include "staff-grouper-interface.hh" + +#include "pointer-group-interface.hh" + +Grob* +Staff_grouper_interface::get_last_grob (Grob *me) +{ + extract_grob_set (me, "elements", elts); + for (vsize i = elts.size (); i--;) + if (elts[i]->is_live ()) + return elts[i]; + + return 0; +} + +ADD_INTERFACE (Staff_grouper_interface, + "A grob that collects staves together.", + + /* properties */ + "between-staff-spacing " + "after-last-staff-spacing " + ); + diff --git a/lily/system-scheme.cc b/lily/system-scheme.cc deleted file mode 100644 index 37ec8b0549..0000000000 --- a/lily/system-scheme.cc +++ /dev/null @@ -1,43 +0,0 @@ -/* - system-scheme.cc -- implement scheme bindings to System - - source file of the GNU LilyPond music typesetter - - (c) 2007--2009 Joe Neeman -*/ - -#include "align-interface.hh" -#include "pointer-group-interface.hh" -#include "system.hh" - - -LY_DEFINE (ly_system_print, "ly:system-print", - 1, 0, 0, (SCM system), - "Draw the system and return the prob containing its" - " stencil.") -{ - Grob *me = unsmob_grob (system); - System *me_system = dynamic_cast (me); - SCM_ASSERT_TYPE (me, system, SCM_ARG1, __FUNCTION__, "grob"); - - return me_system->get_paper_system (); -} - -LY_DEFINE (ly_system_stretch, "ly:system-stretch", - 2, 0, 0, (SCM system, SCM amount_scm), - "Stretch the system vertically by the given amount." - " This must be called before the system is drawn (for example" - " with @code{ly:system-print}).") -{ - Grob *me = unsmob_grob (system); - Real amount = robust_scm2double (amount_scm, 0.0); - - extract_grob_set (me, "elements", elts); - for (vsize i = 0; i < elts.size (); i++) - if (Align_interface::has_interface (elts[i])) - { - Align_interface::stretch (elts[i], amount, Y_AXIS); - break; - } - return SCM_UNDEFINED; -} diff --git a/lily/text-interface.cc b/lily/text-interface.cc index 8b55618521..1c88d97cb3 100644 --- a/lily/text-interface.cc +++ b/lily/text-interface.cc @@ -64,7 +64,22 @@ Text_interface::interpret_string (SCM layout_smob, Font_metric *fm = select_encoded_font (layout, props); replace_whitespace (&str); - return fm->word_stencil (str).smobbed_copy (); + + /* + We want to use "glyph-string" in the SVG backend for all + music fonts (Emmentaler and Aybabtu) that pass through the + text interface. Here the font encoding is checked to see if + it matches one of the music font encodings. --pmccarty + */ + SCM encoding = ly_chain_assoc_get (ly_symbol2scm ("font-encoding"), + props, + SCM_BOOL_F); + SCM music_encodings = ly_lily_module_constant ("all-music-font-encodings"); + + if (scm_memq (encoding, music_encodings) != SCM_BOOL_F) + return fm->word_stencil (str, true).smobbed_copy (); + else + return fm->word_stencil (str, false).smobbed_copy (); } MAKE_SCHEME_CALLBACK_WITH_OPTARGS (Text_interface, interpret_markup, 3, 0, diff --git a/lily/tuplet-bracket.cc b/lily/tuplet-bracket.cc index 4ddb09245e..c633f49810 100644 --- a/lily/tuplet-bracket.cc +++ b/lily/tuplet-bracket.cc @@ -744,28 +744,29 @@ SCM Tuplet_bracket::calc_cross_staff (SCM smob) { Grob *me = unsmob_grob (smob); - Grob *staff_symbol = 0; extract_grob_set (me, "note-columns", cols); + extract_grob_set (me, "tuplets", tuplets); + + Grob *commony = common_refpoint_of_array (cols, me, Y_AXIS); + commony = common_refpoint_of_array (tuplets, commony, Y_AXIS); + if (Grob *st = Staff_symbol_referencer::get_staff_symbol (me)) + commony = st->common_refpoint (commony, Y_AXIS); + if (me->check_cross_staff (commony)) + return SCM_BOOL_T; + bool equally_long = false; Grob *par_beam = parallel_beam (me, cols, &equally_long); - if (par_beam) - return par_beam->get_property ("cross-staff"); + if (par_beam && to_boolean (par_beam->get_property ("cross-staff"))) + return SCM_BOOL_T; for (vsize i = 0; i < cols.size (); i++) { Grob *stem = unsmob_grob (cols[i]->get_object ("stem")); - if (!stem) - continue; - - if (to_boolean (stem->get_property ("cross-staff"))) + if (stem && to_boolean (stem->get_property ("cross-staff"))) return SCM_BOOL_T; - - Grob *stem_staff = Staff_symbol_referencer::get_staff_symbol (stem); - if (staff_symbol && (stem_staff != staff_symbol)) - return SCM_BOOL_T; - staff_symbol = stem_staff; } + return SCM_BOOL_F; } diff --git a/lily/vertical-align-engraver.cc b/lily/vertical-align-engraver.cc index 365c35cb48..14f67333cf 100644 --- a/lily/vertical-align-engraver.cc +++ b/lily/vertical-align-engraver.cc @@ -33,6 +33,8 @@ protected: void process_music (); virtual void finalize (); virtual void initialize (); + + bool top_level_; }; ADD_ACKNOWLEDGER (Vertical_align_engraver, axis_group); @@ -56,6 +58,7 @@ Vertical_align_engraver::Vertical_align_engraver () { valign_ = 0; id_to_group_hashtab_ = SCM_EOL; + top_level_ = false; } void @@ -75,7 +78,9 @@ Vertical_align_engraver::process_music () { if (!valign_) { - valign_ = make_spanner ("VerticalAlignment", SCM_EOL); + top_level_ = to_boolean (get_property ("topLevelAlignment")); + + valign_ = make_spanner (top_level_ ? "VerticalAlignment" : "StaffGrouper", SCM_EOL); valign_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn"))); Align_interface::set_ordered (valign_); } @@ -105,7 +110,7 @@ Vertical_align_engraver::qualifies (Grob_info i) const void Vertical_align_engraver::acknowledge_axis_group (Grob_info i) { - if (qualifies (i)) + if (top_level_ && qualifies (i)) { string id = i.context ()->id_string (); @@ -145,4 +150,9 @@ Vertical_align_engraver::acknowledge_axis_group (Grob_info i) } } } + else if (!top_level_) + { + Pointer_group_interface::add_grob (valign_, ly_symbol2scm ("elements"), i.grob ()); + i.grob ()->set_object ("staff-grouper", valign_->self_scm ()); + } } diff --git a/lilypond-texi2html.init b/lilypond-texi2html.init deleted file mode 100644 index e8393f1fc0..0000000000 --- a/lilypond-texi2html.init +++ /dev/null @@ -1,1091 +0,0 @@ -#!/usr/bin/env perl -# -*- coding: utf-8; -*- - -### texi2html customization script for LilyPond -### Author: Reinhold Kainhofer , 2008. -### Some code parts copied from texi2html and adapted. These functions -### were written mainly by Patrice Dumas -### License: GPLv2+ -### -### -### Features implemented here: -### -) For split manuals, the main page is index.html. -### -) All @unnumbered* sections are placed into the same file -### (implemented by split_at_numbered_sections) -### -) Use our custom CSS file, with IE-specific fixes in another CSS file, -### impelmented by lilypond_css_lines -### -) TOC (folded, with the current page highlighted) in an overflown

    -### is added to every page; implemented by: -### lilypond_print_element_header -- building of the TOC -### lilypond_toc_body -- generation of customized TOC output -### lilypond_print_page_head -- start
    -### print_lilypond_page_foot -- closing id=main, output of footer & TOC -### -) External refs are formatted only as "Text of the node" (not as >>see -### "NODE" section "SECTION" in "BOOK"<< like with default texi2html). Also, -### the leading "(book-name)" is removed. -### Implemented by overriding lilypond_external_ref -### -) Navigation bars on top/bottom of the page and between sections are not -### left-aligned, but use a combination of left/center/right aligned table -### cells; For this, I heavily extend the texi2html code to allow for -### differently aligned cells and for multi-line tables); -### Implemented in lilypond_print_navigation -### -) Different formatting than the default: example uses the same formatting -### as quote. -### -) Allow translated section titles: All section titles can be translated, -### the original (English) title is associated with @translationof. This is -### needed, because the file name / anchor is generated from the original -### English title, since otherwise language-autoselection would break with -### posted links. -### Since it is then no longer possible to obtain the file name from the -### section title, I keep a sectionname<=>filename/anchor around. This way, -### xrefs from other manuals can simply load that map and retrieve the -### correct file name for the link. Implemented in: -### lilypond_unknown (handling of @translationof, in case -### extract_texi_filenames.py messes up...) -### lilypond_element_file_name (correct file name: use the map) -### lilypond_element_target_name (correct anchor: use the map) -### lilypond_init_map (read in the externally created map from disk) -### lilypond_external_href (load the map for xrefs, use the correct -### link target) -### -) The HTML anchors for all sections are derived from the node name / -### section title (pre-generated in the .xref-map file). Implemented by: -### lilypond_element_target_name (adjust section anchors) -### -) Use the standard footnote format "nr text" instead of the -### ugly format of texi2html (

    (nr)

    text

    ). Implemented in -### makeinfo_like_foot_line_and_ref -### makeinfo_like_foot_lines -### makeinfo_like_paragraph -### -### -### Useful helper functions: -### -) texinfo_file_name($node_name): returns a texinfo-compatible file name -### for the given string $node_name (whitespace trimmed/replaced by -, -### non-standard chars replaced by _xxxx (ascii char code) and forced to -### start with a letter by prepending t_g if necessary) - - -package Texi2HTML::Config; - -############################################################################# -### TRANSLATIONS -############################################################################# - -use utf8; -my $LY_LANGUAGES = {}; -$LY_LANGUAGES->{'fr'} = { - 'Back to Documentation Index' => 'Retour à l\'accueil de la documentation', -}; -$LY_LANGUAGES->{'es'} = { - 'Back to Documentation Index' => 'Volver al índice de la documentación', -}; -$LY_LANGUAGES->{'de'} = { - 'Back to Documentation Index' => 'Zur Dokumentationsübersicht', -}; -$LY_LANGUAGES->{'ja'} = { - 'Back to Documentation Index' => 'ドキュメント インデックスに戻る', -}; - - -sub ly_get_string () { - my $lang = $Texi2HTML::THISDOC{current_lang}; - my $string = shift; - if ($lang and $lang ne "en" and $LY_LANGUAGES->{$lang}->{$string}) { - return $LY_LANGUAGES->{$lang}->{$string}; - } else { - return $string; - } -} - - -############################################################################# -### SETTINGS FOR TEXI2HTML -############################################################################# - -@Texi2HTML::Config::CSS_REFS = ( - {FILENAME => "lilypond-mccarty.css", TITLE => "Patrick McCarty's design"} -); -@Texi2HTML::Config::ALT_CSS_REFS = ( - {FILENAME => "lilypond.css", TITLE => "Andrew Hawryluk's design" }, - {FILENAME => "lilypond-blue.css", TITLE => "Kurt Kroon's blue design" }, -); -$Texi2HTML::Config::USE_ACCESSKEY = 1; -$Texi2HTML::Config::USE_LINKS = 1; -$Texi2HTML::Config::USE_REL_REV = 1; -$Texi2HTML::Config::SPLIT_INDEX = 0; -$Texi2HTML::Config::SEPARATED_FOOTNOTES = 0; # Print footnotes on same page, not separated -if ($Texi2HTML::Config::SPLIT eq 'section') { - $Texi2HTML::Config::element_file_name = \&lilypond_element_file_name; -} -$Texi2HTML::Config::element_target_name = \&lilypond_element_target_name; -$default_print_element_header = $Texi2HTML::Config::print_element_header; -$Texi2HTML::Config::print_element_header = \&lilypond_print_element_header; -$Texi2HTML::Config::print_page_foot = \&print_lilypond_page_foot; -$Texi2HTML::Config::print_navigation = \&lilypond_print_navigation; -$Texi2HTML::Config::external_ref = \&lilypond_external_ref; -$default_external_href = $Texi2HTML::Config::external_href; -$Texi2HTML::Config::external_href = \&lilypond_external_href; -$default_toc_body = $Texi2HTML::Config::toc_body; -$Texi2HTML::Config::toc_body = \&lilypond_toc_body; -$Texi2HTML::Config::css_lines = \&lilypond_css_lines; -$default_unknown = $Texi2HTML::Config::unknown; -$Texi2HTML::Config::unknown = \&lilypond_unknown; -$default_print_page_head = $Texi2HTML::Config::print_page_head; -$Texi2HTML::Config::print_page_head = \&lilypond_print_page_head; -# $Texi2HTML::Config::foot_line_and_ref = \&lilypond_foot_line_and_ref; -$Texi2HTML::Config::foot_line_and_ref = \&makeinfo_like_foot_line_and_ref; -$Texi2HTML::Config::foot_lines = \&makeinfo_like_foot_lines; -$Texi2HTML::Config::paragraph = \&makeinfo_like_paragraph; - - - -# Examples should be formatted similar to quotes: -$Texi2HTML::Config::complex_format_map->{'example'} = { - 'begin' => q{"
    "}, - 'end' => q{"
    \n"}, - 'style' => 'code', - }; - -%Texi2HTML::config::misc_pages_targets = ( - 'Overview' => 'Overview', - 'Contents' => 'Contents', - 'About' => 'About' -); - - -my @section_to_filename; - - - - -############################################################################# -### DEBUGGING -############################################################################# - -use Data::Dumper; -$Data::Dumper::Maxdepth = 2; - -sub print_element_info($) -{ - my $element = shift; - print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"; - print "Element: $element\n"; - print Dumper($element); -} - - - - - -############################################################################# -### HELPER FUNCTIONS -############################################################################# - -# Convert a given node name to its proper file name (normalization as explained -# in the texinfo manual: -# http://www.gnu.org/software/texinfo/manual/texinfo/html_node/HTML-Xref-Node-Name-Expansion.html -sub texinfo_file_name($) -{ - my $text = shift; - my $result = ''; - # File name normalization by texinfo: - # 1/2: letters and numbers are left unchanged - # 3/4: multiple, leading and trailing whitespace is removed - $text = main::normalise_space($text); - # 5/6: all remaining spaces are converted to '-', all other 7- or 8-bit - # chars are replaced by _xxxx (xxxx=ascii character code) - while ($text ne '') { - if ($text =~ s/^([A-Za-z0-9]+)//o) { # number or letter stay unchanged - $result .= $1; - } elsif ($text =~ s/^ //o) { # space -> '-' - $result .= '-'; - } elsif ($text =~ s/^(.)//o) { # Otherwise use _xxxx (ascii char code) - my $ccode = ord($1); - if ( $ccode <= 0xFFFF ) { - $result .= sprintf("_%04x", $ccode); - } else { - $result .= sprintf("__%06x", $ccode); - } - } - } - # 7: if name does not begin with a letter, prepend 't_g' (so it starts with a letter) - if ($result !~ /^[a-zA-Z]/) { - $result = 't_g' . $result; - } - # DONE - return $result -} - - -# Load a file containing a nodename<=>filename map (tab-sepatared, i.e. -# NODENAME\tFILENAME\tANCHOR -# Returns a ref to a hash "Node title" => ["FilenameWithoutExt", "Anchor"] -sub load_map_file ($) -{ - my $mapfile = shift; - my $node_map = (); - - if (open(XREFFILE, $mapfile)) { - my $line; - while ( $line = ) { - # parse the tab-separated entries and insert them into the map: - chomp($line); - my @entries = split(/\t/, $line); - if (scalar (@entries) == 3) { - $node_map->{$entries[0]} = [$entries[1], $entries[2]]; - } else { - print STDERR "Invalid entry in the node file $mapfile: $line\n"; - } - } - close (XREFFILE); - } else { - print STDERR "WARNING: Unable to load the map file $mapfile\n"; - } - return $node_map; -} - - -# Split the given path into dir and basename (with .texi removed). Used mainly -# to get the path/basename of the original texi input file -sub split_texi_filename ($) -{ - my $docu = shift; - my ($docu_dir, $docu_name); - if ($docu =~ /(.*\/)/) { - chop($docu_dir = $1); - $docu_name = $docu; - $docu_name =~ s/.*\///; - } else { - $docu_dir = '.'; - $docu_name = $docu; - } - $docu_name =~ s/\.te?x(i|info)?$//; - return ($docu_dir, $docu_name); -} - - - - - -############################################################################# -### CSS HANDLING -############################################################################# - -# Include our standard CSS file, not hard-coded CSS code directly in the HTML! -# For IE, conditionally include the lilypond-ie-fixes.css style sheet -sub lilypond_css_lines ($$) -{ - my $import_lines = shift; - my $rule_lines = shift; - return if (defined($Texi2HTML::THISDOC{'CSS_LINES'})); - if (@$rule_lines or @$import_lines) - { - $Texi2HTML::THISDOC{'CSS_LINES'} = "\n"; - } - foreach my $ref (@CSS_REFS) - { - $Texi2HTML::THISDOC{'CSS_LINES'} .= "{TITLE}\" href=\"$ref->{FILENAME}\">\n"; - } - foreach my $ref (@Texi2HTML::Config::ALT_CSS_REFS) - { - $Texi2HTML::THISDOC{'CSS_LINES'} .= "{FILENAME}\" title=\"$ref->{TITLE}\">\n"; - } - $Texi2HTML::THISDOC{'CSS_LINES'} .= "\n"; -} - - - - - -############################################################################# -### SPLITTING BASED ON NUMBERED SECTIONS -############################################################################# - -my $lastfilename; -my $docnr = 0; -my $node_to_filename_map = (); - - -# This function makes sure that files are only generated for numbered sections, -# but not for unnumbered ones. It is called after texi2html has done its own -# splitting and simply returns the filename for the node given as first argument -# Nodes with the same filename will be printed out to the same filename, so -# this really all we need. Also, make sure that the file names for sections -# are derived from the section title. We also might want to name the anchors -# according to node titles, which works by simply overriding the id element of -# the $element hash. -# If an external nodename<=>filename/anchor map file is found (loaded in -# the command handler, use the externally created values, otherwise use the -# same logic here. -sub lilypond_element_file_name($$$) -{ - my $element = shift; - my $type = shift; - my $docu_name = shift; - my $docu_ext = $Texi2HTML::Config::EXTENSION; - - my $node_name = main::remove_texi($element->{'node_ref'}->{'texi'}); - # the snippets page does not use nodes for the snippets, so in this case - # we'll have to use the section name! - if ($node_name eq '') { - $node_name = main::remove_texi($element->{'texi'}); - } - - # If we have an entry in the section<=>filename map, use that one, otherwise - # generate the filename/anchor here. In the latter case, external manuals - # will not be able to retrieve the file name for xrefs!!! Still, I already - # had that code, so I'll leave it in in case something goes wrong with the - # extract_texi_filenames.py script in the lilypond build process! - if (exists ($node_to_filename_map->{$node_name})) { - (my $filename, my $anchor) = @{$node_to_filename_map->{$node_name}}; - $filename .= ".$docu_ext" if (defined($docu_ext)); - - # unnumbered sections (except those at top-level!) always go to the same - # file as the previous numbered section - if (not ($element->{number}) and not ($lastfilename eq '') and ($element->{level} > 1)) { - $filename = $lastfilename; - } - if (($filename eq $lastfilename)) { - $$element{doc_nr} = $docnr; - } else { - $docnr += 1; - $$element{doc_nr} = $docnr; - $lastfilename = $filename; - } - return $filename; - - } elsif ($type eq "top" or $type eq "toc" or $type eq "doc" or $type eq "stoc" or $type eq "foot" or $type eq "about") { - return; - } else { - print STDERR "WARNING: Node '$node_name' was NOT found in the map\n" - unless ($node_name eq '') or ($element->{'tag'} eq 'unnumberedsec') - or ($node_name =~ /NOT REALLY USED/); - - # Numbered sections will get a filename Node_title, unnumbered sections will use - # the file name of the previous numbered section: - if (($element->{number}) or ($lastfilename eq '') or ($element->{level} == 1)) { - # normalize to the same file name as texinfo - if ($element->{translationof}) { - $node_name = main::remove_texi($element->{translationof}); - } - my $filename = texinfo_file_name($node_name); - $filename .= ".$docu_ext" if (defined($docu_ext)); - $docnr += 1; - $$element{doc_nr} = $docnr; - $lastfilename = $filename; - return $filename; - } else { - $$element{doc_nr} = $docnr; - return $lastfilename; - } - } - - return; -} - -sub lilypond_element_target_name($$$) -{ - my $element = shift; - my $target = shift; - my $id = shift; - # Target is based on node name (or sec name for secs without node attached) - my $node_name = main::remove_texi($element->{'node_ref'}->{'texi'}); - if ($node_name eq '') { - $node_name = main::remove_texi($element->{'texi'}); - } - - # If we have an entry in the section<=>filename map, use that one, otherwise - # generate the anchor here. - if (exists ($node_to_filename_map->{$node_name})) { - (my $filename, $target) = @{$node_to_filename_map->{$node_name}}; - } else { - my $anchor = $node_name; - if ($element->{translationof}) { - $anchor = main::remove_texi($element->{translationof}); - } - # normalize to the same file name as texinfo - $target = texinfo_file_name($anchor); - } - # TODO: Once texi2html correctly prints out the target and not the id for - # the sections, change this back to ($id, $target) - return ($target, $target); -} - - -## Load the map file for the corrently processed texi file. We do this -# using a command init handler, since texi2html does not have any -# other hooks that are called after THISDOC is filled but before phase 2 -# of the texi2html conversion. -sub lilypond_init_map () -{ - my ($docu_dir, $docu_name) = split_texi_filename ($Texi2HTML::THISDOC{'input_file_name'}); - my $map_filename = main::locate_include_file ("${docu_name}.$Texi2HTML::THISDOC{current_lang}.xref-map") - || main::locate_include_file ("${docu_name}.xref-map"); - $node_to_filename_map = load_map_file ($map_filename); -} -push @Texi2HTML::Config::command_handler_init, \&lilypond_init_map; - - - -############################################################################# -### CLEANER LINK TITLE FOR EXTERNAL REFS -############################################################################# - -# The default formatting of external refs returns e.g. -# "(lilypond-internals)Timing_translator", so we remove all (...) from the -# file_and_node argument. Also, we want only a very simple format, so we don't -# even call the default handler! -sub lilypond_external_ref($$$$$$) -{ - my $type = shift; - my $section = shift; - my $book = shift; - my $file_node = shift; - my $href = shift; - my $cross_ref = shift; - - my $displaytext = ''; - - # 1) if we have a cross ref name, that's the text to be displayed: - # 2) For the top node, use the (printable) name of the manual, unless we - # have an explicit cross ref name - # 3) In all other cases use the section name - if ($cross_ref ne '') { - $displaytext = $cross_ref; - } elsif (($section eq '') or ($section eq 'Top')) { - $displaytext = $book; - } else { - $displaytext = $section; - } - - $displaytext = &$anchor('', $href, $displaytext) if ($displaytext ne ''); - return &$I('%{node_file_href}', { 'node_file_href' => $displaytext }); -} - - - - - -############################################################################# -### HANDLING TRANSLATED SECTIONS: handle @translationof, secname<->filename -### map stored on disk, xrefs in other manuals load that map -############################################################################# - - -# Try to make use of @translationof to generate files according to the original -# English section title... -sub lilypond_unknown($$$$$) -{ - my $macro = shift; - my $line = shift; - my $pass = shift; - my $stack = shift; - my $state = shift; - - # the @translationof macro provides the original English section title, - # which should be used for file/anchor naming, while the title will be - # translated to each language - # It is already used by extract_texi_filenames.py, so this should not be - # necessary here at all. Still, I'll leave the code in just in case the - # python script messed up ;-) - if ($pass == 1 and $macro eq "translationof") { - if (ref($state->{'element'}) eq 'HASH') { - $state->{'element'}->{'translationof'} = main::normalise_space($line); - } - return ('', 1, undef, undef); - } else { - return &$default_unknown($macro, $line, $pass, $stack, $state); - } -} - - - - -my %translated_books = (); -# Construct a href to an external source of information. -# node is the node with texinfo @-commands -# node_id is the node transliterated and transformed as explained in the -# texinfo manual -# node_xhtml_id is the node transformed such that it is unique and can -# be used to make an html cross ref as explained in the texinfo manual -# file is the file in '(file)node' -sub lilypond_external_href($$$) -{ - my $node = shift; - my $node_id = shift; - my $node_hxmlt_id = shift; - my $file = shift; - - # 1) Keep a hash of book->section_map - # 2) if not file in keys hash => try to load the map (assign empty map if - # non-existent => will load only once!) - # 3) if node in the section=>(file, anchor) map, replace node_id and - # node_xhtml_id by the map's values - # 4) call the default_external_href with these values (or the old ones if not found) - - if (($node_id ne '') and defined($file) and ($node_id ne 'Top')) { - my $map_name = $file; - $map_name =~ s/-big-page//; - - # Load the map if we haven't done so already - if (!exists($translated_books{$map_name})) { - my ($docu_dir, $docu_name) = split_texi_filename ($Texi2HTML::THISDOC{'input_file_name'}); - my $map_filename = main::locate_include_file ("${map_name}.$Texi2HTML::THISDOC{current_lang}.xref-map") - || main::locate_include_file ("${map_name}.xref-map"); - $translated_books{$map_name} = load_map_file ($map_filename); - } - - # look up translation. use these values instead of the old filename/anchor - my $section_name_map = $translated_books{$map_name}; - my $node_text = main::remove_texi($node); - if (defined($section_name_map->{$node_text})) { - ($node_id, $node_hxmlt_id) = @{$section_name_map->{$node_text}}; - } else { - print STDERR "WARNING: Unable to find node '$node_text' in book $map_name.\n"; - } - } - - if (defined $file) { - return &$default_external_href($node, $node_id, $node_hxmlt_id, $file); - } else { - return &$default_external_href($node, $node_id, $node_hxmlt_id); - } -} - - - - - -############################################################################# -### CUSTOM TOC FOR EACH PAGE (in a frame on the left) -############################################################################# - -my $page_toc_depth = 2; -my @default_toc = []; - - -# Initialize the toc_depth to 1 if the command-line option -D=short_toc is given -sub lilypond_init_toc_depth () -{ - if (exists($main::value{'short_toc'}) and not exists($main::value{'bigpage'})) { - $page_toc_depth = 1; - } -} -# Set the TOC-depth (depending on a texinfo variable short_toc) in a -# command-handler, so we have them available when creating the pages -push @Texi2HTML::Config::command_handler_process, \&lilypond_init_toc_depth; - - -# recursively generate the TOC entries for the element and its children (which -# are only shown up to maxlevel. All ancestors of the current element are also -# shown with their immediate children, irrespective of their level. -# Unnumbered entries are only printed out if they are at top-level or 2nd level -# or their parent element is an ancestor of the currently viewed node. -# The conditions to call this method to print the entry for a child node is: -# -) the parent is an ancestor of the current page node -# -) the parent is a numbered element at top-level toplevel (i.e. show numbered -# and unnumbered 2nd-level children of numbered nodes) -# -) the child element is a numbered node below level maxlevel -sub generate_ly_toc_entries($$$) -{ - my $element = shift; - my $element_path = shift; - my $maxlevel = shift; - # Skip undefined sections, plus all sections generated by index splitting - return() if (not defined($element) or exists($element->{'index_page'})); - my @result = (); - my $level = $element->{'toc_level'}; - my $is_parent_of_current = $element->{'id'} && $element_path->{$element->{'id'}}; - my $ind = ' ' x $level; - my $this_css_class = $is_parent_of_current ? " class=\"toc_current\"" : ""; - - my $entry = "$ind" . &$anchor ($element->{'tocid'}, "$element->{'file'}#$element->{'target'}",$element->{'text'}); - - push (@result, $entry); - my $children = $element->{'section_childs'}; - if (defined($children) and (ref($children) eq "ARRAY")) { - my $force_children = $is_parent_of_current or ($level == 1 and $element->{'number'}); - my @child_result = (); - foreach my $c (@$children) { - my $is_numbered_child = defined ($c->{'number'}); - my $below_maxlevel = $c->{'toc_level'} le $maxlevel; - if ($force_children or ($is_numbered_child and $below_maxlevel)) { - my @child_res = generate_ly_toc_entries($c, $element_path, $maxlevel); - push (@child_result, @child_res); - } - } - # if no child nodes were generated, e.g. for the index, where expanded pages - # are ignored, don't generate a list at all... - if (@child_result) { - push (@result, "\n$ind\n"); - push (@result, @child_result); - push (@result, "$ind\n"); - } - } - push (@result, "$ind\n"); - return @result; -} - - -# Print a customized TOC, containing only the first two levels plus the whole -# path to the current page -sub lilypond_generate_page_toc_body($) -{ - my $element = shift; - my $current_element = $element; - my %parentelements; - $parentelements{$element->{'id'}} = 1; - # Find the path to the current element - while ( defined($current_element->{'sectionup'}) and - ($current_element->{'sectionup'} ne $current_element) ) - { - $parentelements{$current_element->{'sectionup'}->{'id'}} = 1 - if ($current_element->{'sectionup'}->{'id'} ne ''); - $current_element = $current_element->{'sectionup'}; - } - return () if not defined($current_element); - # Create the toc entries recursively - my @toc_entries = ("
    \n", "\n"); - my $children = $current_element->{'section_childs'}; - foreach ( @$children ) { - push (@toc_entries, generate_ly_toc_entries($_, \%parentelements, $page_toc_depth)); - } - push (@toc_entries, "\n"); - push (@toc_entries, "
    \n"); - return @toc_entries; -} - -sub lilypond_print_toc_div ($$) -{ - my $fh = shift; - my $tocref = shift; - my @lines = @$tocref; - # use default TOC if no custom lines have been generated - @lines = @default_toc if (not @lines); - if (@lines) { - - print $fh "\n\n
    \n\n"; - } -} - -# Create the custom TOC for this page (partially folded, current page is -# highlighted) and store it in a global variable. The TOC is written out after -# the html contents (but positioned correctly using CSS), so that browsers with -# css turned off still show the contents first. -our @this_page_toc = (); -sub lilypond_print_element_header -{ - my $first_in_page = shift; - my $previous_is_top = shift; - if ($first_in_page and not @this_page_toc) { - if (defined($Texi2HTML::THIS_ELEMENT)) { - # Create the TOC for this page - @this_page_toc = lilypond_generate_page_toc_body($Texi2HTML::THIS_ELEMENT); - } - } - return &$default_print_element_header( $first_in_page, $previous_is_top); -} - -# Generate the HTML output for the TOC -sub lilypond_toc_body($) -{ - my $elements_list = shift; - # Generate a default TOC for pages without THIS_ELEMENT - @default_toc = lilypond_generate_page_toc_body(@$elements_list[0]); - return &$default_toc_body($elements_list); -} - -# Print out the TOC in a
    at the beginning of the page -sub lilypond_print_page_head($) -{ - my $fh = shift; - &$default_print_page_head($fh); - print $fh "
    \n"; -} - -# Print out the TOC in a
    at the end of th page, which will be formatted as a -# sidebar mimicking a TOC frame -sub print_lilypond_page_foot($) -{ - my $fh = shift; - my $program_string = &$program_string(); -# print $fh "

    $program_string
    $PRE_BODY_CLOSE

    \n"; - print $fh "\n\n"; - print $fh "\n
    \n\n"; - - # Print the TOC frame and reset the TOC: - lilypond_print_toc_div ($fh, \@this_page_toc); - @this_page_toc = (); - - # Close the page: - print $fh "\n\n"; -} - - - - - -############################################################################# -### NICER / MORE FLEXIBLE NAVIGATION PANELS -############################################################################# - -sub get_navigation_text -{ - my $button = shift; - my $text = $NAVIGATION_TEXT{$button}; - if ( ($button eq 'Back') or ($button eq 'FastBack') ) { - $text = $text . $Texi2HTML::NODE{$button} . " "; - } elsif ( ($button eq 'Forward') or ($button eq 'FastForward') ) { - $text = " " . $Texi2HTML::NODE{$button} . $text; - } elsif ( $button eq 'Up' ) { - $text = " ".$text.": " . $Texi2HTML::NODE{$button} . " "; - } - return $text; -} - - -# Don't automatically create left-aligned table cells for every link, but -# instead create a
    only on an appropriate '(left|right|center)-aligned-cell-n' -# button text. It's alignment as well as the colspan will be taken from the -# name of the button. Also, add 'newline' button text to create a new table -# row. The texts of the buttons are generated by get_navigation_text and -# will contain the name of the next/previous section/chapter. -sub lilypond_print_navigation -{ - my $buttons = shift; - my $vertical = shift; - my $spacing = 1; - my $result = "\n"; - - $result .= "" unless $vertical; - my $beginofline = 1; - foreach my $button (@$buttons) - { - $result .= qq{\n} if $vertical; - # Allow (left|right|center)-aligned-cell and newline as buttons! - if ( $button =~ /^(.*)-aligned-cell-(.*)$/ ) - { - $result .= qq{} unless $beginofline; - $result .= qq{} unless $beginofline; - $result .= qq{}; - $result .= qq{}; - $beginofline = 1; - - } - elsif (ref($button) eq 'CODE') - { - $result .= &$button($vertical); - } - elsif (ref($button) eq 'SCALAR') - { - $result .= "$$button" if defined($$button); - } - elsif (ref($button) eq 'ARRAY') - { - my $text = $button->[1]; - my $button_href = $button->[0]; - # verify that $button_href is simple text and text is a reference - if (defined($button_href) and !ref($button_href) - and defined($text) and (ref($text) eq 'SCALAR') and defined($$text)) - { # use given text - if ($Texi2HTML::HREF{$button_href}) - { - my $anchor_attributes = ''; - if ($USE_ACCESSKEY and (defined($BUTTONS_ACCESSKEY{$button_href})) and ($BUTTONS_ACCESSKEY{$button_href} ne '')) - { - $anchor_attributes = "accesskey=\"$BUTTONS_ACCESSKEY{$button_href}\""; - } - if ($USE_REL_REV and (defined($BUTTONS_REL{$button_href})) and ($BUTTONS_REL{$button_href} ne '')) - { - $anchor_attributes .= " rel=\"$BUTTONS_REL{$button_href}\""; - } - $result .= "" . - &$anchor('', - $Texi2HTML::HREF{$button_href}, - get_navigation_text($$text), - $anchor_attributes - ); - } - else - { - $result .= get_navigation_text($$text); - } - } - } - elsif ($button eq ' ') - { # handle space button - $result .= - ($ICONS && $ACTIVE_ICONS{' '}) ? - &$button_icon_img($BUTTONS_NAME{$button}, $ACTIVE_ICONS{' '}) : - $NAVIGATION_TEXT{' '}; - #next; - } - elsif ($Texi2HTML::HREF{$button}) - { # button is active - my $btitle = $BUTTONS_GOTO{$button} ? - 'title="' . $BUTTONS_GOTO{$button} . '"' : ''; - if ($USE_ACCESSKEY and (defined($BUTTONS_ACCESSKEY{$button})) and ($BUTTONS_ACCESSKEY{$button} ne '')) - { - $btitle .= " accesskey=\"$BUTTONS_ACCESSKEY{$button}\""; - } - if ($USE_REL_REV and (defined($BUTTONS_REL{$button})) and ($BUTTONS_REL{$button} ne '')) - { - $btitle .= " rel=\"$BUTTONS_REL{$button}\""; - } - if ($ICONS && $ACTIVE_ICONS{$button}) - { # use icon - $result .= '' . - &$anchor('', - $Texi2HTML::HREF{$button}, - &$button_icon_img($BUTTONS_NAME{$button}, - $ACTIVE_ICONS{$button}, - $Texi2HTML::SIMPLE_TEXT{$button}), - $btitle - ); - } - else - { # use text - $result .= - '[' . - &$anchor('', - $Texi2HTML::HREF{$button}, - get_navigation_text($button), - $btitle - ) . - ']'; - } - } - else - { # button is passive - $result .= - $ICONS && $PASSIVE_ICONS{$button} ? - &$button_icon_img($BUTTONS_NAME{$button}, - $PASSIVE_ICONS{$button}, - $Texi2HTML::SIMPLE_TEXT{$button}) : - - "[" . get_navigation_text($button) . "]"; - } - $result .= "\n" if $vertical; - $result .= "\n" if $vertical; - } - $result .= "" unless $beginofline; - $result .= "" unless $vertical; - $result .= "
    }; - $beginofline = 0; - } - elsif ( $button eq 'newline' ) - { - $result .= qq{
    \n"; - return $result; -} - - -@Texi2HTML::Config::SECTION_BUTTONS = - ('left-aligned-cell-1', 'FastBack', - 'center-aligned-cell-3', 'Top', 'Contents', 'Index', 'About', - 'right-aligned-cell-1', 'FastForward', - 'newline', - 'left-aligned-cell-2', 'Back', - 'center-aligned-cell-1', 'Up', - 'right-aligned-cell-2', 'Forward' - ); - -# buttons for misc stuff -@Texi2HTML::Config::MISC_BUTTONS = ('center-aligned-cell-3', 'Top', 'Contents', 'Index', 'About'); - -# buttons for chapter file footers -# (and headers but only if SECTION_NAVIGATION is false) -@Texi2HTML::Config::CHAPTER_BUTTONS = - ('left-aligned-cell-1', 'FastBack', - 'center-aligned-cell-3', 'Top', 'Contents', 'Index', 'About', - 'right-aligned-cell-1', 'FastForward', - ); - -# buttons for section file footers -@Texi2HTML::Config::SECTION_FOOTER_BUTTONS = - ('left-aligned-cell-1', 'FastBack', - 'center-aligned-cell-3', 'Top', 'Contents', 'Index', 'About', - 'right-aligned-cell-1', 'FastForward', - 'newline', - 'left-aligned-cell-2', 'Back', - 'center-aligned-cell-1', 'Up', - 'right-aligned-cell-2', 'Forward' - ); - -@Texi2HTML::Config::NODE_FOOTER_BUTTONS = - ('left-aligned-cell-1', 'FastBack', - 'center-aligned-cell-3', 'Top', 'Contents', 'Index', 'About', - 'right-aligned-cell-1', 'FastForward', - 'newline', - 'left-aligned-cell-2', 'Back', - 'center-aligned-cell-1', 'Up', - 'right-aligned-cell-2', 'Forward' - ); - - - - - -############################################################################# -### FOOTNOTE FORMATTING -############################################################################# - -# Format footnotes in a nicer way: Instead of printing the number in a separate -# (nr) heading line, use the standard way of prepending nr immediately -# before the fn text. - - -# The following code is copied from texi2html's examples/makeinfo.init and -# should be updated when texi2html makes some changes there! - -my $makekinfo_like_footnote_absolute_number = 0; - -sub makeinfo_like_foot_line_and_ref($$$$$$$$) -{ - my $foot_num = shift; - my $relative_num = shift; - my $footid = shift; - my $docid = shift; - my $from_file = shift; - my $footnote_file = shift; - my $lines = shift; - my $state = shift; - - $makekinfo_like_footnote_absolute_number++; - - # this is a bit obscure, this allows to add an anchor only if formatted - # as part of the document. - $docid = '' if ($state->{'outside_document'} or $state->{'multiple_pass'}); - - if ($from_file eq $footnote_file) - { - $from_file = $footnote_file = ''; - } - - my $foot_anchor = "" . &$anchor($docid, "$footnote_file#$footid", $relative_num) . ""; - $foot_anchor = &$anchor($docid, "$footnote_file#$footid", "($relative_num)") if ($state->{'preformatted'}); - -# unshift @$lines, "
  • "; -# push @$lines, "
  • \n"; - return ($lines, $foot_anchor); -} - -sub makeinfo_like_foot_lines($) -{ - my $lines = shift; - unshift @$lines, "
    \n

    $Texi2HTML::I18n::WORDS->{'Footnotes_Title'}

    \n"; -#
      \n"; -# push @$lines, "
    "; - return $lines; -} - -my %makekinfo_like_paragraph_in_footnote_nr; - -sub makeinfo_like_paragraph ($$$$$$$$$$$$$) -{ - my $text = shift; - my $align = shift; - my $indent = shift; - my $paragraph_command = shift; - my $paragraph_command_formatted = shift; - my $paragraph_number = shift; - my $format = shift; - my $item_nr = shift; - my $enumerate_style = shift; - my $number = shift; - my $command_stack_at_end = shift; - my $command_stack_at_begin = shift; - my $state = shift; -#print STDERR "format: $format\n" if (defined($format)); -#print STDERR "paragraph @$command_stack_at_end; @$command_stack_at_begin\n"; - $paragraph_command_formatted = '' if (!defined($paragraph_command_formatted) or - exists($special_list_commands{$format}->{$paragraph_command})); - return '' if ($text =~ /^\s*$/); - foreach my $style(t2h_collect_styles($command_stack_at_begin)) - { - $text = t2h_begin_style($style, $text); - } - foreach my $style(t2h_collect_styles($command_stack_at_end)) - { - $text = t2h_end_style($style, $text); - } - if (defined($paragraph_number) and defined($$paragraph_number)) - { - $$paragraph_number++; - return $text if (($format eq 'itemize' or $format eq 'enumerate') and - ($$paragraph_number == 1)); - } - my $open = '[0]) and $command_stack_at_begin->[0] eq 'footnote') - { - my $state = $Texi2HTML::THISDOC{'state'}; - $makekinfo_like_paragraph_in_footnote_nr{$makekinfo_like_footnote_absolute_number}++; - if ($makekinfo_like_paragraph_in_footnote_nr{$makekinfo_like_footnote_absolute_number} <= 1) - { - $open.=' class="footnote"'; - my $document_file = $state->{'footnote_document_file'}; - if ($document_file eq $state->{'footnote_footnote_file'}) - { - $document_file = ''; - } - my $docid = $state->{'footnote_place_id'}; - my $doc_state = $state->{'footnote_document_state'}; - $docid = '' if ($doc_state->{'outside_document'} or $doc_state->{'multiple_pass'}); - my $foot_label = &$anchor($state->{'footnote_footnote_id'}, - $document_file . "#$state->{'footnote_place_id'}", - "$state->{'footnote_number_in_page'}"); - $footnote_text = "[${foot_label}] "; - } - } - return $open.'>'.$footnote_text.$text.'

    '; -} - - -############################################################################# -### OTHER SETTINGS -############################################################################# - -# For split pages, use index.html as start page! -if ($Texi2HTML::Config::SPLIT eq 'section') { - $Texi2HTML::Config::TOP_FILE = 'index.html'; -} - - -return 1; diff --git a/ly/bagpipe.ly b/ly/bagpipe.ly index eabe1c7f88..cfe1ec1450 100644 --- a/ly/bagpipe.ly +++ b/ly/bagpipe.ly @@ -69,20 +69,16 @@ showKeySignature = { % Sets the autobeamer to span quarter notes only. Use for fast music. % TODO: Needs more tweaking quarterBeaming = { - #(override-auto-beam-setting '(end * * * *) 1 4 'Staff) - #(override-auto-beam-setting '(end * * * *) 1 2 'Staff) - #(override-auto-beam-setting '(end * * * *) 3 4 'Staff) - #(override-auto-beam-setting '(end * * * *) 4 4 'Staff) - #(revert-auto-beam-setting '(end 1 32 2 4 ) 1 8 'Staff) - #(revert-auto-beam-setting '(end 1 32 2 4 ) 3 8 'Staff) - #(revert-auto-beam-setting '(end 1 32 4 4 ) 1 8 'Staff) - #(revert-auto-beam-setting '(end 1 32 4 4 ) 3 8 'Staff) - #(revert-auto-beam-setting '(end 1 32 4 4 ) 5 8 'Staff) - #(revert-auto-beam-setting '(end 1 32 4 4 ) 7 8 'Staff) + \overrideBeamSettings #'Staff #'(4 . 4) #'end + #'((* . (1 1 1 1)) ; could omit this and use beatLength + ((1 . 32) . (4 4 4 4 4 4 4 4))) + \overrideBeamSettings #'Staff #'(2 . 4) #'end + #'((* . (1 1)) + ((1 . 32) . (4 4 4 4))) } halfBeaming = { - #(override-auto-beam-setting '(end * * 2 2) 1 2 'Staff) - #(override-auto-beam-setting '(end * * 2 2) 2 2 'Staff) + \overrideBeamSettings #'Staff #'(2 . 2) #'end + #'((* . (1 1))) % could omit this and use beatLength } % Reels are in allabreve time with half note beaming. reelTime = { diff --git a/ly/dynamic-scripts-init.ly b/ly/dynamic-scripts-init.ly index a29430f158..8db53c4d3c 100644 --- a/ly/dynamic-scripts-init.ly +++ b/ly/dynamic-scripts-init.ly @@ -7,6 +7,8 @@ #(define (make-dynamic-script str) (make-music 'AbsoluteDynamicEvent 'text str)) + +%% don't exceed ppppp or fffff; see midi.scm. ppppp = #(make-dynamic-script "ppppp") pppp = #(make-dynamic-script "pppp") ppp = #(make-dynamic-script "ppp") @@ -20,6 +22,7 @@ mf = #(make-dynamic-script "mf") ff = #(make-dynamic-script "ff") fff = #(make-dynamic-script "fff") ffff = #(make-dynamic-script "ffff") +fffff = #(make-dynamic-script "fffff") fp = #(make-dynamic-script "fp") sf = #(make-dynamic-script "sf") sfp = #(make-dynamic-script "sfp") diff --git a/ly/engraver-init.ly b/ly/engraver-init.ly index ba7b18b218..ed7698ef09 100644 --- a/ly/engraver-init.ly +++ b/ly/engraver-init.ly @@ -10,15 +10,16 @@ \grobdescriptions #all-grob-descriptions } +% FIXME: replace minimum-Y-extents with proper spacing commands. \context { \type "Engraver_group" \name "FretBoards" - + \description "A context for displaying fret diagrams." \consists "Fretboard_engraver" - \consists "Rest_swallow_translator" - \consists "Output_property_engraver" + \consists "Rest_swallow_translator" + \consists "Output_property_engraver" \consists "Skip_event_swallow_translator" \consists "Hara_kiri_engraver" \consists "Separating_line_group_engraver" @@ -31,14 +32,14 @@ \context { \type "Engraver_group" \name "Staff" - - \consists "Output_property_engraver" + + \consists "Output_property_engraver" \consists "Bar_engraver" %% Bar_engraver must be first so default bars aren't overwritten %% with empty ones. - + \consists "Font_size_engraver" - \consists "Separating_line_group_engraver" + \consists "Separating_line_group_engraver" \consists "Dot_column_engraver" \consists "Staff_collecting_engraver" @@ -47,7 +48,7 @@ \consists "Clef_engraver" \consists "Key_engraver" \consists "Time_signature_engraver" - \consists "Ledger_line_engraver" + \consists "Ledger_line_engraver" \consists "Staff_symbol_engraver" \consists "Collision_engraver" \consists "Grob_pq_engraver" @@ -64,20 +65,20 @@ localKeySignature = #'() createSpacing = ##t - ignoreFiguredBassRest = ##t + ignoreFiguredBassRest = ##t \override VerticalAxisGroup #'minimum-Y-extent = #'(-4 . 4) - - %% explicitly set instrument, so we don't get + + %% explicitly set instrument, so we don't get %% weird effects when doing instrument names for %% piano staves instrumentName = #'() shortInstrumentName = #'() - + \defaultchild "Voice" \accepts "Voice" \accepts "CueVoice" - + \description "Handles clefs, bar lines, keys, accidentals. It can contain @code{Voice} contexts." @@ -88,13 +89,13 @@ \type "Engraver_group" \name "DrumStaff" \alias "Staff" - + \remove "Accidental_engraver" \remove "Ottava_spanner_engraver" - \remove "Key_engraver" + \remove "Key_engraver" \remove "Piano_pedal_engraver" \remove "String_number_engraver" - + \description "Handles typesetting for percussion." \denies "Voice" @@ -103,13 +104,16 @@ clefGlyph = #"clefs.percussion" clefPosition = #0 - \override Script #'staff-padding = #0.75 + \override Script #'staff-padding = #0.75 } \context { \type "Engraver_group" \name "ChoirStaff" + \consists "Vertical_align_engraver" + topLevelAlignment = ##f + \consists "System_start_delimiter_engraver" systemStartDelimiter = #'SystemStartBracket vocalName = #'() @@ -131,7 +135,7 @@ contained staves are not connected vertically." \context{ \type "Engraver_group" - + \override VerticalAxisGroup #'minimum-Y-extent = ##f localKeySignature = #'() createSpacing = ##t @@ -139,17 +143,17 @@ contained staves are not connected vertically." squashedPosition = #0 \name RhythmicStaff \alias "Staff" - + \override BarLine #'bar-size = #4 \override VoltaBracket #'staff-padding = #3 - \override StaffSymbol #'line-count = #1 + \override StaffSymbol #'line-count = #1 \override Stem #'neutral-direction = #UP \override Beam #'neutral-direction = #UP - + \consists "Output_property_engraver" \consists "Font_size_engraver" - \consists "Separating_line_group_engraver" + \consists "Separating_line_group_engraver" \consists "Dot_column_engraver" \consists "Bar_engraver" \consists "Staff_symbol_engraver" @@ -157,8 +161,8 @@ contained staves are not connected vertically." \consists "Time_signature_engraver" \consists "Instrument_name_engraver" \consists "Axis_group_engraver" - \consists "Ledger_line_engraver" - + \consists "Ledger_line_engraver" + \accepts "Voice" \accepts "CueVoice" \defaultchild "Voice" @@ -183,7 +187,7 @@ multiple voices on the same staff." \consists "Font_size_engraver" \consists "Pitched_trill_engraver" - \consists "Output_property_engraver" + \consists "Output_property_engraver" \consists "Arpeggio_engraver" \consists "Multi_measure_rest_engraver" \consists "Text_spanner_engraver" @@ -200,7 +204,7 @@ multiple voices on the same staff." \consists "Dots_engraver" \consists "Rest_engraver" \consists "Tweak_engraver" - + %% switch on to make stem directions interpolate for the %% center line. % \consists "Melody_engraver" @@ -212,7 +216,7 @@ multiple voices on the same staff." %% must come before Script_column_engraver. \consists "New_fingering_engraver" - + \consists "Chord_tremolo_engraver" \consists "Percent_repeat_engraver" \consists "Slash_repeat_engraver" @@ -242,7 +246,7 @@ multiple voices on the same staff." \context{ \Voice - + \name CueVoice \alias Voice fontSize = #-4 @@ -278,7 +282,7 @@ multiple voices on the same staff." \type "Engraver_group" \name GrandStaff localKeySignature = #'() - + \description "A group of staves, with a brace on the left side, grouping the staves together. The bar lines of the contained staves are connected vertically." @@ -291,6 +295,7 @@ contained staves are connected vertically." \defaultchild "Staff" \accepts "Staff" \accepts "FiguredBass" + \accepts "Dynamics" } \context{ @@ -302,6 +307,10 @@ contained staves are connected vertically." instrument names at the start of each system." \consists "Instrument_name_engraver" + \consists "Vertical_align_engraver" + topLevelAlignment = ##f + + \override StaffGrouper #'between-staff-spacing #'stretchability = #5 instrumentName = #'() shortInstrumentName = #'() @@ -311,9 +320,12 @@ instrument names at the start of each system." \type "Engraver_group" \name "StaffGroup" + \consists "Vertical_align_engraver" + topLevelAlignment = ##f + \consists "Span_bar_engraver" \consists "Span_arpeggio_engraver" - \consists "Output_property_engraver" + \consists "Output_property_engraver" systemStartDelimiter = #'SystemStartBracket \consists "System_start_delimiter_engraver" @@ -324,30 +336,54 @@ instrument names at the start of each system." \accepts "DrumStaff" \accepts "GrandStaff" \accepts "PianoStaff" - \accepts "TabStaff" + \accepts "TabStaff" \accepts "Lyrics" \accepts "ChordNames" \accepts "FiguredBass" \accepts "ChoirStaff" \accepts "StaffGroup" - + \description "Groups staves while adding a bracket on the left side, grouping the staves together. The bar lines of the contained staves are connected vertically. @code{StaffGroup} only consists of a collection of staves, with a bracket in front and spanning bar lines." } +\context { + \type "Engraver_group" + \name Dynamics + \alias Voice + \consists "Output_property_engraver" + \consists "Piano_pedal_engraver" + \consists "Script_engraver" + \consists "New_dynamic_engraver" + \consists "Dynamic_align_engraver" + \consists "Text_engraver" + \consists "Skip_event_swallow_translator" + \consists "Axis_group_engraver" + + pedalSustainStrings = #'("Ped." "*Ped." "*") + pedalUnaCordaStrings = #'("una corda" "" "tre corde") + \override VerticalAxisGroup #'staff-affinity = #CENTER + \override VerticalAxisGroup #'inter-staff-spacing = #'((space . 5) (padding . 0.5)) + \override TextScript #'font-shape = #'italic + + \description "Holds a single line of dynamics, which will be +centered between the staves surrounding this context." +} + + \context{ \type "Engraver_group" \override VerticalAxisGroup #'minimum-Y-extent = #'(-0.75 . 2.0) \description "Corresponds to a voice with lyrics. Handles the printing of a single line of lyrics." - + \name "Lyrics" instrumentName = #'() shortInstrumentName = #'() - + \consists "Lyric_engraver" \consists "Extender_engraver" \consists "Hyphen_engraver" @@ -359,7 +395,9 @@ printing of a single line of lyrics." \override VerticalAxisGroup #'remove-first = ##t \override VerticalAxisGroup #'remove-empty = ##t - \override VerticalAxisGroup #'keep-fixed-while-stretching = ##t + \override VerticalAxisGroup #'staff-affinity = #UP + \override VerticalAxisGroup #'inter-staff-spacing = #'((space . 5.5) (stretchability . 1) (padding . 0.5)) + \override VerticalAxisGroup #'inter-loose-line-spacing = #'((space . 2) (stretchability . 0.5) (padding . 0.2)) \override SeparationItem #'padding = #0.2 \override InstrumentName #'self-alignment-Y = ##f @@ -368,19 +406,22 @@ printing of a single line of lyrics." %% make sure that barlines aren't collapsed, when %% Bar_engraver is there. - \override BarLine #'bar-size = #0.1 - + \override BarLine #'bar-size = #0.1 + } \context { \type "Engraver_group" \name NoteNames + \description "A context for printing the names of notes." \consists "Axis_group_engraver" \override VerticalAxisGroup #'minimum-Y-extent = ##f + % FIXME: not sure what the default should be here. + \override VerticalAxisGroup #'staff-affinity = #DOWN - - \consists "Rest_swallow_translator" + + \consists "Rest_swallow_translator" \consists "Skip_event_swallow_translator" \consists "Tie_engraver" \consists "Note_name_engraver" @@ -391,9 +432,9 @@ printing of a single line of lyrics." \type "Engraver_group" \name ChordNames \description "Typesets chord names." - - \consists "Rest_swallow_translator" - \consists "Output_property_engraver" + + \consists "Rest_swallow_translator" + \consists "Output_property_engraver" \consists "Separating_line_group_engraver" \consists "Chord_name_engraver" \consists "Skip_event_swallow_translator" @@ -402,6 +443,7 @@ printing of a single line of lyrics." \override VerticalAxisGroup #'minimum-Y-extent = #'(0 . 2) \override VerticalAxisGroup #'remove-first = ##t \override VerticalAxisGroup #'remove-empty = ##t + \override VerticalAxisGroup #'staff-affinity = #DOWN } @@ -415,7 +457,7 @@ RemoveEmptyStaffContext= \context { AncientRemoveEmptyStaffContext = \context { %% why not add by default? - + \RemoveEmptyStaffContext \accepts "VaticanaVoice" \accepts "GregorianTranscriptionVoice" @@ -425,7 +467,7 @@ AncientRemoveEmptyStaffContext = \context { \context { \type "Score_engraver" \name "Score" - + \description "This is the top level notation context. No other context can contain a @code{Score} context. This context handles the administration of time signatures. It also makes sure @@ -450,7 +492,7 @@ automatically when an output definition (a @code{\score} or \consists "System_start_delimiter_engraver" \consists "Mark_engraver" \consists "Volta_engraver" - \consists "Metronome_mark_engraver" + \consists "Metronome_mark_engraver" \consists "Break_align_engraver" \consists "Spacing_engraver" \consists "Grace_spacing_engraver" @@ -458,7 +500,7 @@ automatically when an output definition (a @code{\score} or \consists "Stanza_number_align_engraver" \consists "Bar_number_engraver" \consists "Parenthesis_engraver" - + \defaultchild "Staff" \accepts "FretBoards" @@ -488,7 +530,7 @@ automatically when an output definition (a @code{\score} or systemStartDelimiter =#'SystemStartBar drumStyleTable = #drums-style - + melismaBusyProperties = #default-melisma-properties tieWaitForNote = ##f clefGlyph = #"clefs.G" @@ -499,19 +541,19 @@ automatically when an output definition (a @code{\score} or crescendoSpanner = #'hairpin decrescendoSpanner = #'hairpin - + defaultBarType = #"|" doubleRepeatType = #":|:" barNumberVisibility = #first-bar-number-invisible automaticBars = ##t - + explicitClefVisibility = #all-visible explicitKeySignatureVisibility = #all-visible implicitTimeSignatureVisibility = #end-of-line-invisible - + repeatCountVisibility = #all-repeat-counts-visible - - autoBeamSettings = #default-auto-beam-settings + + beamSettings = #default-beam-settings autoBeaming = ##t autoBeamCheck = #default-auto-beam-check scriptDefinitions = #default-script-alist @@ -522,24 +564,24 @@ automatically when an output definition (a @code{\score} or pedalUnaCordaStyle = #'text %% These are in ordinary italic font, including the *, -%% but they are unlikely to be used, +%% but they are unlikely to be used, %% as the default pedal-style for SostenutoPedal is 'mixed': -%% i.e. Sost. Ped_____________________ - pedalSostenutoStrings = #'("Sost. Ped." "*Sost. Ped." "*") +%% i.e. Sost. Ped_____________________ + pedalSostenutoStrings = #'("Sost. Ped." "*Sost. Ped." "*") pedalSostenutoStyle = #'mixed - harmonicAccidentals = ##t + harmonicAccidentals = ##t fingeringOrientations = #'(up down) stringNumberOrientations = #'(up down) strokeFingerOrientations = #'(right) - + lyricMelismaAlignment = #LEFT markFormatter = #format-mark-letters rehearsalMark = #1 subdivideBeams = ##f extraNatural = ##t autoAccidentals = #`(Staff ,(make-accidental-rule 'same-octave 0)) - autoCautionaries = #'() + autoCautionaries = #'() printKeyCancellation = ##t keyAlterationOrder = #`( @@ -550,7 +592,7 @@ automatically when an output definition (a @code{\score} or ) barCheckSynchronize = ##f - + %% chord names: chordNameFunction = #ignatzek-chord-names majorSevenSymbol = #whiteTriangleMarkup @@ -586,6 +628,7 @@ automatically when an output definition (a @code{\score} or (Voice Stem direction ,UP) (Voice Stem font-size -3) (Voice NoteHead font-size -3) + (Voice TabNoteHead font-size -4) (Voice Dots font-size -3) (Voice Stem length-fraction 0.8) (Voice Stem no-stem-extend #t) @@ -605,7 +648,7 @@ automatically when an output definition (a @code{\score} or percent-repeat-item-interface percent-repeat-interface - ;; need this, as stanza numbers are items, and appear only once. + ;; need this, as stanza numbers are items, and appear only once. stanza-number-interface ) quotedEventTypes = #'( @@ -617,7 +660,8 @@ automatically when an output definition (a @code{\score} or instrumentTransposition = #(ly:make-pitch 0 0 0) verticallySpacedContexts = #'(Staff) - + topLevelAlignment = ##t + timing = ##t } @@ -627,6 +671,7 @@ automatically when an output definition (a @code{\score} or \context { \type "Engraver_group" \name "FiguredBass" + \description "A context for printing a figured bass line." \consists "Figured_bass_engraver" \consists "Note_swallow_translator" @@ -636,6 +681,7 @@ automatically when an output definition (a @code{\score} or \override VerticalAxisGroup #'remove-empty = ##t \override VerticalAxisGroup #'remove-first = ##t + \override VerticalAxisGroup #'staff-affinity = #UP \override VerticalAxisGroup #'minimum-Y-extent = #'(0 . 2) } @@ -643,7 +689,7 @@ automatically when an output definition (a @code{\score} or \name "Devnull" \type "Engraver_group" -%% don't want to route anything out of here: +%% don't want to route anything out of here: \alias "Staff" \alias "Voice" \consists "Swallow_engraver" @@ -657,7 +703,7 @@ context." \alias "Voice" \consists "Tab_note_heads_engraver" \consists "Tab_harmonic_engraver" - + \remove "Note_heads_engraver" \remove "Fingering_engraver" \remove "New_fingering_engraver" @@ -672,12 +718,39 @@ context." %% No accidental in tablature ! \remove "Accidental_engraver" - - \override Glissando #'extra-dy = #0.75 + %% remove stems, beams, dots and rests ... + \override Stem #'stencil = ##f + \override Beam #'stencil = ##f + \override Dots #'stencil = ##f + \override Rest #'stencil = ##f + \override MultiMeasureRest #'stencil = ##f + %% ... all kinds of ties/slurs + \override Tie #'stencil = ##f + \override RepeatTie #'stencil = ##f + \override LaissezVibrerTie #'stencil = ##f + \override Slur #'stencil = ##f + \override PhrasingSlur #'stencil = ##f + %% 'tied to' fret numbers become invisible or parenthesized, respectively) + \override Tie #'after-line-breaking = #tie::handle-tab-tie + \override RepeatTie #'after-line-breaking = #repeat-tie::parenthesize-tab-note-head + %% ... and all kinds of markups, spanners etc. + \override TupletBracket #'stencil = ##f + \override TupletNumber #'stencil = ##f + \override DynamicText #'transparent = ##t + \override DynamicTextSpanner #'stencil = ##f + \override TextSpanner #'stencil = ##f + \override Hairpin #'transparent = ##t + \override Script #'stencil = ##f + \override TextScript #'stencil = ##f + %% the direction for glissando lines will be automatically corrected + \override Glissando #'extra-dy = #glissando::calc-tab-extra-dy \override Glissando #'bound-details #'right = #`((attach-dir . ,LEFT) (padding . 0.3)) \override Glissando #'bound-details #'left = #`((attach-dir . ,RIGHT) (padding . 0.3)) + %% dead notes + \override TabNoteHead #'glyph-name = #tab-note-head::calc-glyph-name + \override TabNoteHead #'stencil = #tab-note-head::whiteout-if-style-set } \context { @@ -686,22 +759,30 @@ context." \name "TabStaff" \denies "Voice" \consists "Tab_staff_symbol_engraver" - + \description "Context for generating tablature. [DOCME]" \accepts "TabVoice" \defaultchild "TabVoice" - + %% 6 strings \override StaffSymbol #'staff-space = #1.5 %% Don't draw stems over the tablature figures ! \override Stem #'avoid-note-head = ##t - + %% No accidental in tablature ! \remove "Accidental_engraver" \remove "Key_engraver" \remove "String_number_engraver" + %% the clef handler + \override Clef #'stencil = #clef::print-modern-tab-if-set + %% no time signature + \override TimeSignature #'stencil = ##f + %% better parentheses in a TabStaff + \override ParenthesesItem #'stencils = #parentheses-item::calc-tabstaff-parenthesis-stencils + %% no arpeggios + \override Arpeggio #'stencil = ##f %% Special "TAB" clef clefGlyph = #"clefs.tab" clefPosition = #0 diff --git a/ly/espanol.ly b/ly/espanol.ly index 90305f603e..432aa09dba 100644 --- a/ly/espanol.ly +++ b/ly/espanol.ly @@ -8,52 +8,94 @@ %} -% contributed by Carlos García Suárez <> +%{ + + contributed by Carlos García Suárez <> + + and contributed by Maximiliano G. G. <> con: + doble alteración alternativa, x para doble sostenido + cuartos de tono: tcb, cb, cs, tcs +%} -% For using "sostingut" notation, which is also correct pitchnamesEspanol = #`( (dobb . ,(ly:make-pitch -1 0 DOUBLE-FLAT)) + (dotcb . ,(ly:make-pitch -1 0 THREE-Q-FLAT)) (dob . ,(ly:make-pitch -1 0 FLAT)) + (docb . ,(ly:make-pitch -1 0 SEMI-FLAT)) (do . ,(ly:make-pitch -1 0 NATURAL)) + (docs . ,(ly:make-pitch -1 0 SEMI-SHARP)) (dos . ,(ly:make-pitch -1 0 SHARP)) + (dotcs . ,(ly:make-pitch -1 0 THREE-Q-SHARP)) (doss . ,(ly:make-pitch -1 0 DOUBLE-SHARP)) + (dox . ,(ly:make-pitch -1 0 DOUBLE-SHARP)) (rebb . ,(ly:make-pitch -1 1 DOUBLE-FLAT)) + (retcb . ,(ly:make-pitch -1 1 THREE-Q-FLAT)) (reb . ,(ly:make-pitch -1 1 FLAT)) + (recb . ,(ly:make-pitch -1 1 SEMI-FLAT)) (re . ,(ly:make-pitch -1 1 NATURAL)) + (recs . ,(ly:make-pitch -1 1 SEMI-SHARP)) (res . ,(ly:make-pitch -1 1 SHARP)) + (retcs . ,(ly:make-pitch -1 1 THREE-Q-SHARP)) (ress . ,(ly:make-pitch -1 1 DOUBLE-SHARP)) + (rex . ,(ly:make-pitch -1 1 DOUBLE-SHARP)) (mibb . ,(ly:make-pitch -1 2 DOUBLE-FLAT)) + (mitcb . ,(ly:make-pitch -1 2 THREE-Q-FLAT)) (mib . ,(ly:make-pitch -1 2 FLAT)) + (micb . ,(ly:make-pitch -1 2 SEMI-FLAT)) (mi . ,(ly:make-pitch -1 2 NATURAL)) + (mics . ,(ly:make-pitch -1 2 SEMI-SHARP)) (mis . ,(ly:make-pitch -1 2 SHARP)) + (mitcs . ,(ly:make-pitch -1 2 THREE-Q-SHARP)) (miss . ,(ly:make-pitch -1 2 DOUBLE-SHARP)) + (mix . ,(ly:make-pitch -1 2 DOUBLE-SHARP)) (fabb . ,(ly:make-pitch -1 3 DOUBLE-FLAT)) + (fatcb . ,(ly:make-pitch -1 3 THREE-Q-FLAT)) (fab . ,(ly:make-pitch -1 3 FLAT)) + (facb . ,(ly:make-pitch -1 3 SEMI-FLAT)) (fa . ,(ly:make-pitch -1 3 NATURAL)) + (facs . ,(ly:make-pitch -1 3 SEMI-SHARP)) (fas . ,(ly:make-pitch -1 3 SHARP)) + (fatcs . ,(ly:make-pitch -1 3 THREE-Q-SHARP)) (fass . ,(ly:make-pitch -1 3 DOUBLE-SHARP)) + (fax . ,(ly:make-pitch -1 3 DOUBLE-SHARP)) (solbb . ,(ly:make-pitch -1 4 DOUBLE-FLAT)) + (soltcb . ,(ly:make-pitch -1 4 THREE-Q-FLAT)) (solb . ,(ly:make-pitch -1 4 FLAT)) + (solcb . ,(ly:make-pitch -1 4 SEMI-FLAT)) (sol . ,(ly:make-pitch -1 4 NATURAL)) + (solcs . ,(ly:make-pitch -1 4 SEMI-SHARP)) (sols . ,(ly:make-pitch -1 4 SHARP)) + (soltcs . ,(ly:make-pitch -1 4 THREE-Q-SHARP)) (solss . ,(ly:make-pitch -1 4 DOUBLE-SHARP)) + (solx . ,(ly:make-pitch -1 4 DOUBLE-SHARP)) (labb . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) + (latcb . ,(ly:make-pitch -1 5 THREE-Q-FLAT)) (lab . ,(ly:make-pitch -1 5 FLAT)) + (lacb . ,(ly:make-pitch -1 5 SEMI-FLAT)) (la . ,(ly:make-pitch -1 5 NATURAL)) + (lacs . ,(ly:make-pitch -1 5 SEMI-SHARP)) (las . ,(ly:make-pitch -1 5 SHARP)) + (latcs . ,(ly:make-pitch -1 5 THREE-Q-SHARP)) (lass . ,(ly:make-pitch -1 5 DOUBLE-SHARP)) + (lax . ,(ly:make-pitch -1 5 DOUBLE-SHARP)) (sibb . ,(ly:make-pitch -1 6 DOUBLE-FLAT)) + (sitcb . ,(ly:make-pitch -1 6 THREE-Q-FLAT)) (sib . ,(ly:make-pitch -1 6 FLAT)) + (sicb . ,(ly:make-pitch -1 6 SEMI-FLAT)) (si . ,(ly:make-pitch -1 6 NATURAL)) + (sics . ,(ly:make-pitch -1 6 SEMI-SHARP)) (sis . ,(ly:make-pitch -1 6 SHARP)) + (sitcs . ,(ly:make-pitch -1 6 THREE-Q-SHARP)) (siss . ,(ly:make-pitch -1 6 DOUBLE-SHARP)) + (six . ,(ly:make-pitch -1 6 DOUBLE-SHARP)) + ) pitchnames = \pitchnamesEspanol diff --git a/ly/guile-debugger.ly b/ly/guile-debugger.ly new file mode 100644 index 0000000000..26179d1178 --- /dev/null +++ b/ly/guile-debugger.ly @@ -0,0 +1,36 @@ +%%%% guile-debugger.ly +%%%% +%%%% Source file of the GNU LilyPond music typesetter +%%%% +%%%% (c) 2009 by Ian Hulin + +%% \include this file to enable the setting of breakpoints in guile. +%% Once loaded, this file will open a guile debug prompt. Type +%% help +%% at the debug prompt to get a list of possible commands. +%% For more information, see the Contributors' Guide. + + +\version "2.13.0" + +#(use-modules (ice-9 debugger) (ice-9 debugging trace) (ice-9 debugging steps) (ice-9 debugging ice-9-debugger-extensions) ) + +#(define (break! proc) + (install-trap (make + #:procedure proc + #:behaviour debug-trap))) + +#(define (trace! proc) + (install-trap (make + #:procedure proc + #:behaviour (list trace-trap + trace-at-exit)))) + +#(define (trace-subtree! proc) + (install-trap (make + #:procedure proc + #:behaviour (list trace-trap + trace-until-exit)))) +#(module-define! (resolve-module '(guile-user)) 'lilypond-module (current-module)) +#(top-repl) +#(set-current-module lilypond-module) diff --git a/ly/music-functions-init.ly b/ly/music-functions-init.ly index c8b0a84b18..3f3bdca54d 100644 --- a/ly/music-functions-init.ly +++ b/ly/music-functions-init.ly @@ -359,6 +359,30 @@ musicMap = #(define-music-function (parser location proc mus) (procedure? ly:music?) (music-map proc mus)) +overrideBeamSettings = +#(define-music-function + (parser location + context time-signature rule-type grouping-rule) + (symbol? pair? symbol? pair?) + + (_i "Override beamSettings in @var{context} +for time signatures of @var{time-signature} and rules of type +@var{rule-type} to have a grouping rule alist +@var{grouping-rule}. +@var{rule-type} can be @code{end} or @code{subdivide}, +with a potential future value of @code{begin}. +@var{grouping-rule} is an alist of @var{(beam-type . grouping)} +entries. @var{grouping} is in units of @var{beam-type}. If +@var{beam-type} is @code{*}, grouping is in units of the denominator +of @var{time-signature}.") + + ;; TODO -- add warning if largest value of grouping is + ;; greater than time-signature. + +#{ +#(override-beam-setting + $time-signature $rule-type $grouping-rule $context) +#}) overrideProperty = #(define-music-function (parser location name property value) @@ -647,6 +671,19 @@ resetRelativeOctave = reference-note)) +revertBeamSettings = +#(define-music-function + (parser location + context time-signature rule-type) + (symbol? pair? symbol?) + + (_i "Revert beam settings in @var{context} for time signatures of +@var{time-signature} and groups of type +@var{group-type}. @var{group-type} can be @code{end} +or @code{subdivide}.") +#{ + #(revert-beam-setting $time-signature $rule-type $context) +#}) scaleDurations = #(define-music-function (parser location fraction music) (number-pair? ly:music?) @@ -654,6 +691,25 @@ scaleDurations = (ly:music-compress music (ly:make-moment (car fraction) (cdr fraction)))) +setBeatGrouping = +#(define-music-function (parser location grouping) (pair?) + (_i "Set the beat grouping in the current time signature to +@var{grouping}.") + (define (default-group-setting c) + (let* ((context-time-signature + (ly:context-property c 'timeSignatureFraction)) + (time-signature (if (null? context-time-signature) + '(4 . 4) + context-time-signature))) + (override-property-setting + c + 'beamSettings + (list time-signature 'end) + (list (cons '* grouping))))) + + (context-spec-music + (make-apply-context default-group-setting) + 'Score)) shiftDurations = diff --git a/ly/paper-defaults-init.ly b/ly/paper-defaults-init.ly index 9d2725ede0..33d8ee9a6b 100644 --- a/ly/paper-defaults-init.ly +++ b/ly/paper-defaults-init.ly @@ -1,5 +1,5 @@ \version "2.12.0" -#(use-modules (scm layout-page-layout)) + \paper { %%% WARNING @@ -23,7 +23,6 @@ #(define-public book-title (marked-up-title 'bookTitleMarkup)) #(define-public score-title (marked-up-title 'scoreTitleMarkup)) - #(define-public force-eps-font-include #f) %% %% ugh. hard coded? @@ -41,30 +40,15 @@ (is-book-title . #t) )) - %% - %% this dimension includes the extent of the - %% staves themselves. - %% - between-system-space = #(* 20 mm) - - - %% - %% fixed space between systems. - %% - between-system-padding = #(* 4 mm) + %% Note: these are not scaled; they are in staff-spaces. + between-system-spacing = #'((space . 12) (minimum-distance . 8) (padding . 1)) + after-title-spacing = #'((space . 2) (padding . 0.5)) + before-title-spacing = #'((space . 5) (padding . 0.5)) + between-title-spacing = #'((space . 1) (padding . 0.5)) + first-system-spacing = #'((space . 1) (padding . 0) (min-distance . 0)) + first-system-title-spacing = #'((space . 1) (padding . 1) (min-distance . 0)) + last-system-spacing = #'((space . 1) (padding . 0) (min-distance . 0) (stretchability . 5)) - after-title-space = 5 \mm - before-title-space = 10 \mm - between-title-space = 2 \mm - - - %% - %% Small staves are aligned so they come out on the same place on - %% across different pages. - %% - page-top-space = #(* 12 mm) - - ragged-bottom = ##f %% @@ -97,8 +81,6 @@ (word-space . 0.6))) #(define page-breaking ly:optimal-breaking) - #(define page-breaking-wrapper page-breaking-wrapper) - #(define page-post-process post-process-pages) #(define write-page-layout (ly:get-option 'dump-tweaks)) #(define system-maximum-stretch-procedure diff --git a/ly/property-init.ly b/ly/property-init.ly index 79ddd427c4..f91c4b8d85 100644 --- a/ly/property-init.ly +++ b/ly/property-init.ly @@ -361,6 +361,10 @@ italianChords = { \set chordPrefixSpacer = #0.4 } +harmonicsOn = \override NoteHead #'style = #'harmonic + +harmonicsOff = \revert NoteHead #'style + improvisationOn = { \set squashedPosition = #0 \override NoteHead #'style = #'slash @@ -416,3 +420,84 @@ pointAndClickOff = #(define-music-function (parser location) () pointAndClickOn = #(define-music-function (parser location) () (ly:set-option 'point-and-click #t) (make-music 'SequentialMusic 'void #t)) + +palmMuteOn = { + \override NoteHead #'style = #'do +} + +palmMuteOff = { + \revert NoteHead #'style +} + +palmMute = +#(define-music-function (parser location note) (ly:music?) + ;; are we inside a <...>? + (if (eq? (ly:music-property note 'name) 'NoteEvent) + ;; yes -> add a tweak + (begin (set! (ly:music-property note 'tweaks) + (acons 'style 'do (ly:music-property note 'tweaks))) + note) + ;; no -> use predefined commands to switch to triangle-shaped note heads + #{ + \palmMuteOn + $note + \palmMuteOff + #})) + +deadNotesOn = { + \override TabNoteHead #'style = #'cross + \override NoteHead #'style = #'cross +} + +deadNotesOff = { + \revert TabNoteHead #'style + \revert NoteHead #'style +} + +deadNote = +#(define-music-function (parser location note) (ly:music?) + ;; are we inside a <...>? + (if (eq? (ly:music-property note 'name) 'NoteEvent) + ;; yes -> add a tweak + (begin (set! (ly:music-property note 'tweaks) + (acons 'style 'cross (ly:music-property note 'tweaks))) + note) + ;; no -> use predefined commmands for changing + ;; note head and tablature fret signs + #{ + \deadNotesOn + $note + \deadNotesOff + #})) + +tabFullNotation = { + % time signature + \revert TabStaff.TimeSignature #'stencil + % stems (the half note gets a double stem) + \override TabVoice.Stem #'stencil = #tabvoice::draw-double-stem-for-half-notes + % beams, dots + \revert TabVoice.Beam #'stencil + \revert TabVoice.Dots #'stencil + \revert TabVoice.Tie #'stencil + \revert TabVoice.Tie #'after-line-breaking + \revert TabVoice.RepeatTie #'stencil + \revert TabVoice.RepeatTie #'after-line-braking + \revert TabVoice.LaissezVibrerTie #'stencil + \revert TabVoice.Slur #'stencil + \revert PhrasingSlur #'stencil + % tuplet stuff + \revert TabVoice.TupletBracket #'stencil + \revert TabVoice.TupletNumber #'stencil + % dynamic signs + \revert DynamicText #'transparent + \revert DynamicTextSpanner #'stencil + \revert TabVoice.DynamicTextSpanner #'stencil + \revert TabVoice.Hairpin #'transparent + % rests + \revert TabVoice.Rest #'stencil + \revert TabVoice.MultiMeasureRest #'stencil + % markups etc. + \revert TabVoice.Script #'stencil + \revert TabVoice.TextScript #'stencil + \revert TabStaff.Arpeggio #'stencil +} diff --git a/make/doc-i18n-root-rules.make b/make/doc-i18n-root-rules.make index 1bb8bf6d7f..e63acb4f65 100644 --- a/make/doc-i18n-root-rules.make +++ b/make/doc-i18n-root-rules.make @@ -1 +1,40 @@ -# empty +$(top-build-dir)/Documentation/$(outdir)/%/index.$(ISOLANG).html: $(outdir)/%.texi $(XREF_MAPS_DIR)/%.$(ISOLANG).xref-map $(TRANSLATION_LILY_IMAGES) + mkdir -p $(dir $@) + mkdir -p $(outdir)/$* + $(TEXI2HTML) --I=$(src-dir) --I=$(outdir) $(TEXI2HTML_FLAGS) --output=$(outdir)/$* --prefix=index --split=section $(TEXI2HTML_INIT) $< + find $(outdir)/$* -name '*.html' | xargs grep -L --label="" 'UNTRANSLATED NODE: IGNORE ME' | sed 's!$(outdir)/!!g' | xargs $(buildscript-dir)/mass-link --prepend-suffix .$(ISOLANG) hard $(outdir) $(top-build-dir)/Documentation/$(outdir) + + +$(top-build-dir)/Documentation/$(outdir)/%-big-page.$(ISOLANG).html: $(outdir)/%.texi $(XREF_MAPS_DIR)/%.$(ISOLANG).xref-map $(TRANSLATION_LILY_IMAGES) + $(TEXI2HTML) --I=$(src-dir) --I=$(outdir) -D bigpage $(TEXI2HTML_FLAGS) --output=$@ $(TEXI2HTML_INIT) $< + +$(top-build-dir)/Documentation/$(outdir)/%.$(ISOLANG).html: $(outdir)/%.texi $(XREF_MAPS_DIR)/%.$(ISOLANG).xref-map $(outdir)/version.itexi + $(TEXI2HTML) --I=$(src-dir) --I=$(outdir) $(TEXI2HTML_FLAGS) --output=$@ $(TEXI2HTML_INIT) $< + +$(top-build-dir)/Documentation/$(outdir)/%.$(ISOLANG).pdf: $(outdir)/%.texi + cd $(outdir) && \ + texi2pdf $(TEXI2PDF_FLAGS) $(TEXINFO_PAPERSIZE_OPTION) $*.texi && \ + mkdir -p $(dir $@) && mv $*.pdf $@ + +$(outdir)/version.%: $(top-src-dir)/VERSION + echo '@macro version'> $@ + echo $(TOPLEVEL_VERSION)>> $@ + echo '@end macro'>> $@ + +$(outdir)/%.png: $(top-build-dir)/Documentation/$(outdir)/%.png + ln -f $< $@ + +$(XREF_MAPS_DIR)/%.$(ISOLANG).xref-map: $(outdir)/%.texi $(XREF_MAPS_DIR)/%.xref-map + $(buildscript-dir)/extract_texi_filenames -o $(XREF_MAPS_DIR) $(XREF_MAP_FLAGS) --master-map-file=$(XREF_MAPS_DIR)/$*.xref-map $< + +$(MASTER_TEXI_FILES): $(ITELY_FILES) $(ITEXI_FILES) $(outdir)/pictures + +$(outdir)/pictures: + $(MAKE) -C $(top-build-dir)/Documentation/pictures WWW-1 + ln -sf $(top-build-dir)/Documentation/pictures/$(outdir) $@ + +$(TRANSLATION_LILY_IMAGES): $(MASTER_TEXI_FILES) + find $(outdir) \( -name 'lily-*.png' -o -name 'lily-*.ly' \) | sed 's!$(outdir)/!!g' | xargs $(buildscript-dir)/mass-link hard $(outdir) $(top-build-dir)/Documentation/$(outdir) + touch $@ + +.SECONDARY: diff --git a/make/doc-i18n-root-targets.make b/make/doc-i18n-root-targets.make index 213e478fa8..64c00b0348 100644 --- a/make/doc-i18n-root-targets.make +++ b/make/doc-i18n-root-targets.make @@ -1,6 +1,18 @@ default: ifeq ($(out),www) -local-WWW-2: $(OUT_HTML_FILES) +ifeq ($(ISOLANG),ja) +local-WWW-1: $(MASTER_TEXI_FILES) $(XREF_MAPS_FILES) +endif +ifneq ($(ISOLANG),ja) +local-WWW-1: $(MASTER_TEXI_FILES) $(PDF_FILES) $(XREF_MAPS_FILES) +endif + +local-WWW-2: $(DEEP_HTML_FILES) $(BIG_PAGE_HTML_FILES) $(DOCUMENTATION_LOCALE_TARGET) $(OUT_HTML_FILES) +# FIXME: move the following line to a rule that generate the right file $(buildscript-dir)/mass-link --prepend-suffix .$(ISOLANG) hard $(outdir) $(top-build-dir)/Documentation/$(outdir) $(HTML_FILES) + +$(DOCUMENTATION_LOCALE_TARGET): + $(MAKE) -C $(depth)/Documentation/po out=www messages + touch $@ endif diff --git a/make/doc-i18n-root-vars.make b/make/doc-i18n-root-vars.make index fdf8664263..ed68660f74 100644 --- a/make/doc-i18n-root-vars.make +++ b/make/doc-i18n-root-vars.make @@ -1,3 +1,52 @@ HTML_PAGE_NAMES = index translations HTML_FILES = $(HTML_PAGE_NAMES:%=%.html) OUT_HTML_FILES = $(HTML_PAGE_NAMES:%=$(outdir)/%.html) + +# ISOLANG must be defined + +LANGS = $(shell $(PYTHON) $(buildscript-dir)/langdefs.py) + +CSS_SOURCE_FILES = $(shell ls $(top-src-dir)/Documentation/lilypond*.css) + +TELY_FILES := $(call src-wildcard,*.tely) +MASTER_TEXI_FILES := $(TELY_FILES:%.tely=$(outdir)/%.texi) + +SPLITTED_HTML_MANUALS = $(foreach manual, $(TELY_FILES:%.tely=%),\ + $(if $(findstring $(manual), $(UNSPLITTED_HTML_MANUALS)),,$(manual))) + +OUT_HTML_FILES += $(UNSPLITTED_HTML_MANUALS:%=$(top-build-dir)/Documentation/$(outdir)/%.$(ISOLANG).html) +BIG_PAGE_HTML_FILES := $(SPLITTED_HTML_MANUALS:%=$(top-build-dir)/Documentation/$(outdir)/%-big-page.$(ISOLANG).html) +DEEP_HTML_FILES := $(SPLITTED_HTML_MANUALS:%=$(top-build-dir)/Documentation/$(outdir)/%/index.$(ISOLANG).html) +PDF_FILES := $(TELY_FILES:%.tely=$(top-build-dir)/Documentation/$(outdir)/%.$(ISOLANG).pdf) + +ITELY_FILES := $(call src-wildcard,*.itely) +ITEXI_FILES := $(call src-wildcard,*.itexi) + +DOCUMENTATION_INCLUDES = \ + -I $(top-src-dir)/Documentation \ + -I $(top-build-dir)/Documentation/$(outdir) + +LILYPOND_BOOK_INCLUDES += $(DOCUMENTATION_INCLUDES) +MAKEINFO_FLAGS += --force --enable-encoding $(DOCUMENTATION_INCLUDES) +MAKEINFO = LANG= $(MAKEINFO_PROGRAM) $(MAKEINFO_FLAGS) + +# texi2html xref map files +XREF_MAPS_DIR=$(top-build-dir)/out/xref-maps +XREF_MAPS_FILES=$(TELY_FILES:%.tely=$(XREF_MAPS_DIR)/%.$(ISOLANG).xref-map) +XREF_MAP_FLAGS += -I $(outdir) + +# texi2html flags +TEXI2HTML_INIT= --init-file=$(top-src-dir)/Documentation/lilypond-texi2html.init +TEXI2HTML_LANG=--lang=$(ISOLANG) +TEXI2HTML_FLAGS += $(TEXI2HTML_LANG) $(DOCUMENTATION_INCLUDES) \ + -I $(XREF_MAPS_DIR) +TEXI2HTML = PERL_UNICODE=SD LANG= $(TEXI2HTML_PROGRAM) + +TEXI2PDF_FLAGS += --batch $(DOCUMENTATION_INCLUDES) + +ifdef QUIET_BUILD +TEXI2PDF_FLAGS += -q +endif + +DOCUMENTATION_LOCALE_TARGET = $(outdir)/doc-po +TRANSLATION_LILY_IMAGES = $(outdir)/translation-lily-images diff --git a/make/doc-i18n-topdocs-rules.make b/make/doc-i18n-topdocs-rules.make deleted file mode 100644 index 874e7d5537..0000000000 --- a/make/doc-i18n-topdocs-rules.make +++ /dev/null @@ -1,14 +0,0 @@ -$(outdir)/%.html: $(outdir)/%.texi - $(TEXI2HTML) --I=$(src-dir) --I=$(outdir) $(TEXI2HTML_FLAGS) --output=$@ $(TEXI2HTML_INIT) $< - cp $(top-src-dir)/Documentation/lilypond*.css $(dir $@) - -$(outdir)/%.pdf: $(outdir)/%.texi - cd $(outdir); texi2pdf $(TEXI2PDF_FLAGS) $(TEXINFO_PAPERSIZE_OPTION) $(notdir $*).texi - -$(outdir)/version.%: $(top-src-dir)/VERSION - echo '@macro version'> $@ - echo $(TOPLEVEL_VERSION)>> $@ - echo '@end macro'>> $@ - -$(outdir)/%.txt: $(outdir)/%.texi - $(MAKEINFO) -I$(src-dir) -I$(outdir) -P $(outdir) --output=$@ --no-split --no-headers $< diff --git a/make/doc-i18n-topdocs-targets.make b/make/doc-i18n-topdocs-targets.make deleted file mode 100644 index d7e26a95ce..0000000000 --- a/make/doc-i18n-topdocs-targets.make +++ /dev/null @@ -1,9 +0,0 @@ -default: - -ifeq ($(out),www) -local-WWW-1: $(MASTER_TEXI_FILES) $(PDF_FILES) - -local-WWW-2: $(HTML_FILES) - find $(outdir) -name '*.html' | sed 's!$(outdir)/!!g' | xargs $(buildscript-dir)/mass-link --prepend-suffix .$(ISOLANG) hard $(outdir) $(top-build-dir)/Documentation/topdocs/$(outdir) NEWS.pdf - find $(outdir) \( -name 'lily-*.png' -o -name 'lily-*.ly' \) | sed 's!$(outdir)/!!g' | xargs $(buildscript-dir)/mass-link hard $(outdir) $(top-build-dir)/Documentation/topdocs/$(outdir) -endif diff --git a/make/doc-i18n-topdocs-vars.make b/make/doc-i18n-topdocs-vars.make deleted file mode 100644 index 456f79d56a..0000000000 --- a/make/doc-i18n-topdocs-vars.make +++ /dev/null @@ -1,26 +0,0 @@ -OUTTXT_FILES= $(outdir)/NEWS.txt - -TELY_FILES := $(call src-wildcard,*.tely) -MASTER_TEXI_FILES := $(TELY_FILES:%.tely=$(outdir)/%.texi) -HTML_FILES := $(TELY_FILES:%.tely=$(outdir)/%.html) -PDF_FILES := $(TELY_FILES:%.tely=$(outdir)/%.pdf) - -DOCUMENTATION_INCLUDES = \ - -I $(top-src-dir)/Documentation/user \ - -I $(top-build-dir)/Documentation/user/$(outdir) - -LILYPOND_BOOK_INCLUDES += $(DOCUMENTATION_INCLUDES) -MAKEINFO_FLAGS += --force --enable-encoding $(DOCUMENTATION_INCLUDES) -MAKEINFO = LANG= $(MAKEINFO_PROGRAM) $(MAKEINFO_FLAGS) - -# texi2html flags -TEXI2HTML_INIT= --init-file=$(top-src-dir)/lilypond-texi2html.init -TEXI2HTML_LANG=--lang=$(ISOLANG) -TEXI2HTML_FLAGS += $(TEXI2HTML_LANG) $(DOCUMENTATION_INCLUDES) -TEXI2HTML = LANG= $(TEXI2HTML_PROGRAM) - -TEXI2PDF_FLAGS += --batch $(DOCUMENTATION_INCLUDES) - -ifdef QUIET_BUILD -TEXI2PDF_FLAGS += -q -endif diff --git a/make/doc-i18n-user-rules.make b/make/doc-i18n-user-rules.make deleted file mode 100644 index 4b59115ecd..0000000000 --- a/make/doc-i18n-user-rules.make +++ /dev/null @@ -1,29 +0,0 @@ -$(outdir)/%/index.html: $(outdir)/%.texi $(XREF_MAPS_DIR)/%.$(ISOLANG).xref-map $(OUT_PNG_IMAGES) - mkdir -p $(dir $@) - $(TEXI2HTML) --I=$(src-dir) --I=$(outdir) $(TEXI2HTML_FLAGS) --output=$(dir $@) --prefix=index --split=section $(TEXI2HTML_INIT) $< - cp $(top-src-dir)/Documentation/lilypond*.css $(dir $@) - -$(outdir)/%-big-page.html: $(outdir)/%.texi $(XREF_MAPS_DIR)/%.$(ISOLANG).xref-map $(OUT_PNG_IMAGES) - $(TEXI2HTML) --I=$(src-dir) --I=$(outdir) -D bigpage $(TEXI2HTML_FLAGS) --output=$@ $(TEXI2HTML_INIT) $< - cp $(top-src-dir)/Documentation/lilypond*.css $(dir $@) - -$(outdir)/%.pdftexi: $(outdir)/%.texi - $(buildscript-dir)/texi-gettext $(ISOLANG) $< - -$(outdir)/%.pdf: $(outdir)/%.pdftexi - cd $(outdir); texi2pdf $(TEXI2PDF_FLAGS) $(TEXINFO_PAPERSIZE_OPTION) $(notdir $*).pdftexi - -$(outdir)/version.%: $(top-src-dir)/VERSION - echo '@macro version'> $@ - echo $(TOPLEVEL_VERSION)>> $@ - echo '@end macro'>> $@ - -$(outdir)/%.png: $(top-build-dir)/Documentation/user/$(outdir)/%.png - ln -f $< $@ - -$(XREF_MAPS_DIR)/%.$(ISOLANG).xref-map: $(outdir)/%.texi - $(buildscript-dir)/extract_texi_filenames -o $(XREF_MAPS_DIR) $< - -$(MASTER_TEXI_FILES): $(ITELY_FILES) $(ITEXI_FILES) - -.SECONDARY: diff --git a/make/doc-i18n-user-targets.make b/make/doc-i18n-user-targets.make deleted file mode 100644 index 478bfac498..0000000000 --- a/make/doc-i18n-user-targets.make +++ /dev/null @@ -1,14 +0,0 @@ -default: - -ifeq ($(out),www) -local-WWW-1: $(MASTER_TEXI_FILES) $(PDF_FILES) $(XREF_MAPS_FILES) - -local-WWW-2: $(DEEP_HTML_FILES) $(BIG_PAGE_HTML_FILES) $(DOCUMENTATION_LOCALE_TARGET) - find $(outdir) -name '*.html' | xargs grep -L 'UNTRANSLATED NODE: IGNORE ME' | xargs $(buildscript-dir)/html-gettext $(ISOLANG) - find $(outdir) -name '*.html' | xargs grep -L --label="" 'UNTRANSLATED NODE: IGNORE ME' | sed 's!$(outdir)/!!g' | xargs $(buildscript-dir)/mass-link --prepend-suffix .$(ISOLANG) hard $(outdir) $(top-build-dir)/Documentation/user/$(outdir) $(TELY_FILES:%.tely=%.pdf) - find $(outdir) \( -name 'lily-*.png' -o -name 'lily-*.ly' \) | sed 's!$(outdir)/!!g' | xargs $(buildscript-dir)/mass-link hard $(outdir) $(top-build-dir)/Documentation/user/$(outdir) - -$(DOCUMENTATION_LOCALE_TARGET): - $(MAKE) -C $(depth)/Documentation/po out=www messages - touch $@ -endif diff --git a/make/doc-i18n-user-vars.make b/make/doc-i18n-user-vars.make deleted file mode 100644 index 2170d43f40..0000000000 --- a/make/doc-i18n-user-vars.make +++ /dev/null @@ -1,42 +0,0 @@ -# ISOLANG must be defined - -LANGS = $(shell $(PYTHON) $(buildscript-dir)/langdefs.py) - -SOURCE_PNG_IMAGES=$(shell ls $(top-src-dir)/Documentation/user/*.png) -OUT_PNG_IMAGES=$(SOURCE_PNG_IMAGES:$(top-src-dir)/Documentation/user/%.png=$(outdir)/%.png) $(outdir)/context-example.png - -TELY_FILES := $(call src-wildcard,*.tely) -MASTER_TEXI_FILES := $(TELY_FILES:%.tely=$(outdir)/%.texi) -BIG_PAGE_HTML_FILES := $(TELY_FILES:%.tely=$(outdir)/%-big-page.html) -DEEP_HTML_FILES := $(TELY_FILES:%.tely=$(outdir)/%/index.html) -PDF_FILES := $(TELY_FILES:%.tely=$(outdir)/%.pdf) - -ITELY_FILES := $(call src-wildcard,*.itely) -ITEXI_FILES := $(call src-wildcard,*.itexi) - -DOCUMENTATION_INCLUDES = \ - -I $(top-src-dir)/Documentation/user \ - -I $(top-build-dir)/Documentation/user/$(outdir) - -LILYPOND_BOOK_INCLUDES += $(DOCUMENTATION_INCLUDES) -MAKEINFO_FLAGS += --force --enable-encoding $(DOCUMENTATION_INCLUDES) -MAKEINFO = LANG= $(MAKEINFO_PROGRAM) $(MAKEINFO_FLAGS) - -# texi2html xref map files -XREF_MAPS_DIR=$(top-build-dir)/out/xref-maps -XREF_MAPS_FILES=$(TELY_FILES:%.tely=$(XREF_MAPS_DIR)/%.$(ISOLANG).xref-map) - -# texi2html flags -TEXI2HTML_INIT= --init-file=$(top-src-dir)/lilypond-texi2html.init -TEXI2HTML_LANG=--lang=$(ISOLANG) -TEXI2HTML_FLAGS += $(TEXI2HTML_LANG) $(DOCUMENTATION_INCLUDES) \ - -I $(XREF_MAPS_DIR) -TEXI2HTML = LANG= $(TEXI2HTML_PROGRAM) - -TEXI2PDF_FLAGS += --batch $(DOCUMENTATION_INCLUDES) - -ifdef QUIET_BUILD -TEXI2PDF_FLAGS += -q -endif - -DOCUMENTATION_LOCALE_TARGET = $(outdir)/doc-po diff --git a/make/generic-vars.make b/make/generic-vars.make index 44cb80ccaa..c5831d7ec5 100644 --- a/make/generic-vars.make +++ b/make/generic-vars.make @@ -33,7 +33,7 @@ EXTRA_DOC_FILES = \ Documentation/out/*.txt\ Documentation/tex/*.doc\ Documentation/tex/*.bib\ - Documentation/pictures/out/lelie_logo.gif\ + Documentation/logo/out/lelie_logo.gif\ input\ INSTALLED_EXTRA_DOC_FILES = $(addprefix $(prefix:/%=%)/doc/lilypond/, $(EXTRA_DOC_FILES)) diff --git a/make/lilypond-vars.make b/make/lilypond-vars.make index 4faeb8fcd5..c01e27cb2f 100644 --- a/make/lilypond-vars.make +++ b/make/lilypond-vars.make @@ -27,9 +27,12 @@ CONVERT_LY = $(script-dir)/convert-ly.py LILYPOND_BOOK = $(script-dir)/lilypond-book.py LILYPOND_BOOK_INCLUDES = -I $(src-dir)/ -I $(outdir) -I $(input-dir) \ - -I $(input-dir)/lsr/ -I $(input-dir)/regression/ -I $(input-dir)/manual/ \ + -I $(top-src-dir)/Documentation -I $(top-src-dir)/Documentation/snippets \ + -I $(input-dir)/regression/ -I $(input-dir)/manual/ \ -I $(input-dir)/tutorial/ -I $(top-build-dir)/mf/$(outconfbase)/ \ - -I $(top-build-dir)/mf/out/ -I $(top-src-dir)/input/manual + -I $(top-build-dir)/mf/out/ -I $(top-src-dir)/input/manual \ + -I $(top-src-dir)/Documentation/pictures \ + -I $(top-build-dir)/Documentation/pictures/$(outdir) ## override from cmd line to speed up. ANTI_ALIAS_FACTOR=2 diff --git a/make/ly-rules.make b/make/ly-rules.make index 52ee4b015e..19b00f05b2 100644 --- a/make/ly-rules.make +++ b/make/ly-rules.make @@ -15,7 +15,9 @@ $(i) $(i): endef -$(eval $(firstword $(MASTER_TEXI_FILES)): $(foreach i, $(wordlist 2, $(words $(MASTER_TEXI_FILES)), $(MASTER_TEXI_FILES)),$(CHAIN_RULE))) +$(eval $(firstword $(TEXI_FILES_FROM_TELY)):\ + $(foreach i, $(wordlist 2, $(words $(TEXI_FILES_FROM_TELY)),\ + $(TEXI_FILES_FROM_TELY)),$(CHAIN_RULE))) # don't do ``cd $(outdir)'', and assume that $(outdir)/.. is the src dir. # it is not, for --srcdir builds @@ -33,14 +35,8 @@ $(outdir)/%.html.omf: %.tely $(outdir)/%.pdf.omf: %.tely $(call GENERATE_OMF,pdf) -$(outdir)/%.ps.gz.omf: %.tely - $(call GENERATE_OMF,ps.gz) - $(outdir)/%.html.omf: $(outdir)/%.texi $(call GENERATE_OMF,html) $(outdir)/%.pdf.omf: $(outdir)/%.texi $(call GENERATE_OMF,pdf) - -$(outdir)/%.ps.gz.omf: $(outdir)/%.texi - $(call GENERATE_OMF,ps.gz) diff --git a/make/ly-vars.make b/make/ly-vars.make index c3c8a24ba4..7d572adb75 100644 --- a/make/ly-vars.make +++ b/make/ly-vars.make @@ -1,8 +1,7 @@ # rules for directories with LilyPond files. TELY_FILES := $(call src-wildcard,*.tely) -MASTER_TEXI_FILES := $(sort $(TELY_FILES:%.tely=$(outdir)/%.texi))\ - $(OUT_MASTER_TEXI_FILES) +TEXI_FILES_FROM_TELY := $(TELY_FILES:%.tely=$(outdir)/%.texi) $(TEXI_FILES_FROM_TELY) OMF_FILES += $(foreach format, html pdf, $(foreach f, $(TELY_FILES), $(outdir)/$(f:.tely=.$(format)).omf)) diff --git a/make/lysdoc-rules.make b/make/lysdoc-rules.make index 6745887514..cfaabe3355 100644 --- a/make/lysdoc-rules.make +++ b/make/lysdoc-rules.make @@ -1,3 +1,2 @@ $(outdir)/collated-files.tely: $(COLLATED_FILES) $(LYS_TO_TELY) --name=$(outdir)/collated-files.tely --title="$(TITLE)" $^ - diff --git a/make/mutopia-targets.make b/make/mutopia-targets.make index f89fcc4060..4eeb80ed0c 100644 --- a/make/mutopia-targets.make +++ b/make/mutopia-targets.make @@ -4,7 +4,7 @@ .PRECIOUS: $(outdir)-letter/%.ps -all: $(OUT_FILES) +all: ifeq ($(out),www) local-WWW-1: $(ly_examples) $(pdf_examples) $(png_examples) diff --git a/make/mutopia-vars.make b/make/mutopia-vars.make index 3cd87a7d05..60add179f2 100644 --- a/make/mutopia-vars.make +++ b/make/mutopia-vars.make @@ -7,9 +7,6 @@ include $(make-dir)/lilypond-vars.make SCORE_LY_FILES = $(shell cd $(src-dir) && fgrep -l score *.ly) ILY_FILES = $(call src-wildcard,*.ily) -M4_FILES = $(call src-wildcard,*.m4) -LYM4_FILES = $(call src-wildcard,*.lym4) -EXTRA_DIST_FILES += $(M4_FILES) $(LYM4_FILES) ly_examples=$(addprefix $(outdir)/, $(addsuffix .ly, $(examples))) ly_examples+= $(ILY_FILES:%.ily=$(outdir)/%.ily) @@ -24,7 +21,4 @@ html_subdirs=$(addprefix --subdirs ,$(SUBDIRS)) name-stem= $(notdir $(basename $<)) -OUT_FILES = $(addprefix $(outdir)/,$(M4_FILES:%.m4=%)) \ - $(addprefix $(outdir)/,$(LYM4_FILES:%.lym4=%.ly)) - -score_ps = $(addprefix $(outdir)/, $(addsuffix .ps.gz, $($SCORE_LY_FILES))) +score_ps = $(addprefix $(outdir)/, $(addsuffix .ps.gz, $(SCORE_LY_FILES))) diff --git a/po/de.po b/po/de.po index efcc72da8e..1b4b2623aa 100644 --- a/po/de.po +++ b/po/de.po @@ -3,15 +3,15 @@ # This file is distributed under the same license as the lilypond package. # Erwin Dieterich , 1999 # Roland Stigge , 2003, 2004, 2005, 2006, 2007 -# Till Rettig , 2007, 2008 +# Till Paala , 2007, 2008, 2009 # msgid "" msgstr "" -"Project-Id-Version: lilypond 2.12.0\n" +"Project-Id-Version: lilypond 2.13.3\n" "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n" "POT-Creation-Date: 2008-12-20 11:58+0100\n" -"PO-Revision-Date: 2009-01-06 20:11+0200\n" -"Last-Translator: Till Rettig \n" +"PO-Revision-Date: 2009-08-03 21:17+0300\n" +"Last-Translator: Till Paala \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1073,12 +1073,12 @@ msgstr "" #: musicxml2ly.py:2576 msgid "" -"Copyright (c) 2005--2008 by\n" +"Copyright (c) 2005--2009 by\n" " Han-Wen Nienhuys ,\n" " Jan Nieuwenhuizen and\n" " Reinhold Kainhofer \n" msgstr "" -"Copyright (c) 2005--2008\n" +"Copyright (c) 2005--2009\n" "····Han-Wen·Nienhuys·,\n" "····Jan·Nieuwenhuizen··and\n" "····Reinhold·Kainhofer·\n" diff --git a/po/es.po b/po/es.po index e93b1ddf46..e463b2ff4d 100644 --- a/po/es.po +++ b/po/es.po @@ -1,19 +1,19 @@ -# translation of lilypond-2.12.0.po to Español +# translation of lilypond-2.13.3.po to Español # Spanish translation of GNU Lilypond - http://lilypond.org -# Copyright (C) 2002, 2007, 2008 Free Software Foundation, Inc. +# Copyright (C) 2002, 2007, 2008, 2009 Free Software Foundation, Inc. # # This file is distributed under the same license as the lilypond package. # # Quique , 2002, 2004. # Daniel Tonda , 2006. -# Francisco Vila , 2007, 2008. +# Francisco Vila , 2007, 2008, 2009. # This file is distributed under the same license as the lilypond package. msgid "" msgstr "" -"Project-Id-Version: lilypond-2.12.0\n" +"Project-Id-Version: lilypond-2.13.3\n" "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n" "POT-Creation-Date: 2008-12-20 11:58+0100\n" -"PO-Revision-Date: 2008-12-30 01:36+0100\n" +"PO-Revision-Date: 2009-07-28 17:20+0200\n" "Last-Translator: Francisco Vila \n" "Language-Team: Spanish \n" "MIME-Version: 1.0\n" @@ -81,7 +81,7 @@ msgstr "%s en desuso" #: convertrules.py:290 #, python-format msgid "deprecate %s " -msgstr "%s en desuso" +msgstr "%s en desuso " #: convertrules.py:319 msgid "new \\notenames format" @@ -134,7 +134,7 @@ msgstr "suprimir %s" #: convertrules.py:1001 convertrules.py:1005 msgid "cluster syntax" -msgstr "sintaxis de los racimos (cluster)" +msgstr "sintaxis de los racimos (clusters)" #: convertrules.py:1014 msgid "new Pedal style syntax" @@ -1301,7 +1301,7 @@ msgstr "no se cambia al mismo tipo de contexto: %s" #. FIXME: uncomprehensable message #: change-iterator.cc:95 msgid "none of these in my family" -msgstr "ninguno de éstos en mi familia" +msgstr "no hay ninguno de estos en mi familia" #: chord-tremolo-engraver.cc:88 msgid "No tremolo to end" diff --git a/po/fr.po b/po/fr.po index c642c85aef..9315757934 100644 --- a/po/fr.po +++ b/po/fr.po @@ -3,14 +3,14 @@ # French translation of GNU/lilypond - http//lilypond.org # Copyright © 2004 Free Software Foundation, Inc. # Michel Robitaille , 1996-2007. -# Jean-Charles Malahieude , 2008 +# Jean-Charles Malahieude , 2007-2009 # msgid "" msgstr "" -"Project-Id-Version: lilypond 2.12.0\n" +"Project-Id-Version: lilypond 2.13.3\n" "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n" "POT-Creation-Date: 2008-12-20 11:58+0100\n" -"PO-Revision-Date: 2008-12-31 13:53+0100\n" +"PO-Revision-Date: 2009-07-28 18:25+0200\n" "Last-Translator: Jean-Charles Malahieude \n" "Language-Team: French \n" "MIME-Version: 1.0\n" @@ -47,7 +47,7 @@ msgstr "\\header { clé = concat + avec + opérateur }" #: convertrules.py:58 #, python-format msgid "deprecated %s" -msgstr "%s obsolète" +msgstr "%s est obsolète" #: convertrules.py:70 msgid "deprecated \\textstyle, new \\key syntax" @@ -191,7 +191,7 @@ msgstr "" "Un \\outputproperty a été localisé.\n" "Éditer manuellement, en utilisant\n" "\n" -" \\applyoutput #(outputproperty-compatibility %s '%s )\n" +" \\applyoutput #(outputproperty-compatibility %s '%s )\n" "\n" "comme texte de substitution." @@ -269,7 +269,7 @@ msgid "" "Page layout has been changed, using paper size and margins.\n" "textheight is no longer used.\n" msgstr "" -"La mise en page a été modifiée, utilisant le taille du papier et les marges.\n" +"La mise en page a été modifiée, utilisant la taille du papier et les marges.\n" "« textheight » n'est plus utilisé.\n" #: convertrules.py:2011 @@ -955,7 +955,7 @@ msgstr "permettre des n-olets de durée DUR*NUM/DEN" #: midi2ly.py:885 msgid "treat every text as a lyric" -msgstr "traiter chaque texte comme des paroles" +msgstr "traiter tout texte comme étant des paroles" #: midi2ly.py:888 msgid "Examples" @@ -1096,7 +1096,7 @@ msgid "" "Convert MusicXML from FILE.xml to LilyPond input.\n" "If the given filename is -, musicxml2ly reads from the command line.\n" msgstr "" -"Convertit FICHIER.xml (MusicXML) au format LilyPnd.\n" +"Convertit FICHIER.xml (MusicXML) au format LilyPond.\n" "Si le nom du fichier est « - », musicxml2ly lira la ligne de commande.\n" #: musicxml2ly.py:2576 @@ -3044,33 +3044,3 @@ msgstr "~a s'est terminé avec le statut ~S" #, scheme-format msgid "assertion failed: ~S" msgstr "erreur d'assertion : ~S" - -#~ msgid "requested time signature, but time sig is unknown" -#~ msgstr "Une métrique est obligatoire, mais la définition trouvée est inconnue" - -#~ msgid "Report bugs via" -#~ msgstr "Rapporter toute anomalie à" - -#~ msgid "Negative skip %s" -#~ msgstr "Retour en arrière de %s" - -#~ msgid "ignoring unknown accidental rule: %s" -#~ msgstr "altération accidentelle inconnue, donc ignorée : %s" - -#~ msgid "generate DVI (tex backend only)" -#~ msgstr "générer le DVI (uniquement pour tex)" - -#~ msgid "generate TeX (tex backend only)" -#~ msgstr "générer le TeX (uniquement pour tex)" - -#~ msgid "Computing page breaks..." -#~ msgstr "Calcul des sauts de page..." - -#~ msgid "cannot generate ~S using the postscript back-end" -#~ msgstr "impossible de générer ~S à l'aide du support postscript" - -#~ msgid "TeX file name must not contain whitespace: `~a'" -#~ msgstr "un nom de fichier TeX ne peut contenir d'espace : « ~a »" - -#~ msgid "cannot find ~a in ~a" -#~ msgstr "impossible de trouver ~a dans ~a" diff --git a/python/auxiliar/buildlib.py b/python/auxiliar/buildlib.py index cd99586ff8..04a72c7924 100644 --- a/python/auxiliar/buildlib.py +++ b/python/auxiliar/buildlib.py @@ -20,20 +20,22 @@ def read_pipe (command): return (output, error) revision_re = re.compile ('GIT [Cc]ommittish:\s+([a-f0-9]+)') -vc_diff_cmd = 'git diff %(color_flag)s %(revision)s HEAD -- %(original)s | cat' +vc_diff_cmd = 'git diff --patience -M %(color_flag)s %(revision)s %(upper_revision)s -- %(original)s | cat' +no_committish_fatal_error = """error: %s: no 'GIT committish: ' found. +Please check the whole file against the original in English, then +fill in HEAD committish in the header. +""" -def check_translated_doc (original, translated_file, translated_contents, color=False): +def check_translated_doc (original, translated_file, translated_contents, + color=False, upper_revision='HEAD'): m = revision_re.search (translated_contents) if not m: - sys.stderr.write ('error: ' + translated_file + \ - ": no 'GIT committish: ' found.\nPlease check " + \ - 'the whole file against the original in English, then ' + \ - 'fill in HEAD committish in the header.\n') + sys.stderr.write (no_committish_fatal_error % translated_file) sys.exit (1) revision = m.group (1) if color: - color_flag = '--color' + color_flag = '--color --color-words' else: color_flag = '--no-color' c = vc_diff_cmd % vars () diff --git a/python/auxiliar/manuals_definitions.py b/python/auxiliar/manuals_definitions.py index e8e6d50cd9..4b548f11e1 100644 --- a/python/auxiliar/manuals_definitions.py +++ b/python/auxiliar/manuals_definitions.py @@ -3,9 +3,9 @@ # This module is imported by check_texi_refs.py references_dict = { - 'lilypond': 'ruser', - 'lilypond-learning': 'rlearning', - 'lilypond-program': 'rprogram', - 'lilypond-snippets': 'rlsr', + 'notation': 'ruser', + 'learning': 'rlearning', + 'application': 'rprogram', + 'snippets': 'rlsr', 'music-glossary': 'rglos', - 'lilypond-internals': 'rinternals' } + 'internals': 'rinternals' } diff --git a/python/auxiliar/postprocess_html.py b/python/auxiliar/postprocess_html.py index 15fcbbec10..3db9fda8d1 100644 --- a/python/auxiliar/postprocess_html.py +++ b/python/auxiliar/postprocess_html.py @@ -13,17 +13,19 @@ import langdefs # This is to try to make the docball not too big with almost duplicate files # see process_links() -non_copied_pages = ['Documentation/user/out-www/lilypond-big-page', - 'Documentation/user/out-www/lilypond-internals-big-page', - 'Documentation/user/out-www/lilypond-learning-big-page', - 'Documentation/user/out-www/lilypond-program-big-page', - 'Documentation/user/out-www/music-glossary-big-page', +non_copied_pages = ['Documentation/out-www/notation-big-page', + 'Documentation/out-www/internals-big-page', + 'Documentation/out-www/learning-big-page', + 'Documentation/out-www/application-big-page', + 'Documentation/out-www/music-glossary-big-page', + 'Documentation/out-www/contributor', + 'Documentation/out-www/changes', + 'Documentation/out-www/snippets', 'out-www/examples', 'Documentation/topdocs', 'Documentation/bibliography', 'Documentation/out-www/THANKS', 'Documentation/out-www/DEDICATION', - 'Documentation/out-www/devel', 'input/'] def _doc (s): @@ -91,13 +93,10 @@ def build_pages_dict (filelist): def source_links_replace (m, source_val): return 'href="' + os.path.join (source_val, m.group (1)) + '"' -splitted_docs_re = re.compile ('(input/lsr/out-www/lilypond-snippets|\ -Documentation/user/out-www/(lilypond|music-glossary|lilypond-program|\ -lilypond-learning))/') - -snippets_ref_re = re.compile (r'href="(\.\./)?lilypond-snippets') -user_ref_re = re.compile ('href="(?:\.\./)?lilypond\ -(-internals|-learning|-program|(?!-snippets))') +splitted_docs_re = re.compile ('(Documentation/out-www/(notation|\ +music-glossary|application|general|learning|snippets))/') +lily_snippets_re = re.compile ('(href|src)="(../lily-.*?|.*?[.]png)"') +pictures_re = re.compile ('src="(pictures/.*?)"') docindex_link_re = re.compile (r'href="index.html"') @@ -108,22 +107,18 @@ docindex_link_re = re.compile (r'href="index.html"') # this also fixes missing PNGs only present in translated docs def hack_urls (s, prefix): if splitted_docs_re.match (prefix): - s = re.sub ('(href|src)="(../lily-.*?|.*?[.]png)"', '\\1="../\\2"', s) - - # fix xrefs between documents in different directories ad hoc - if 'user/out-www/lilypond' in prefix: - s = snippets_ref_re.sub ('href="source/input/lsr/lilypond-snippets', s) - elif 'input/lsr' in prefix: - s = user_ref_re.sub ('href="source/Documentation/user/lilypond\\1', s) - + s = lily_snippets_re.sub ('\\1="../\\2"', s) + s = pictures_re.sub ('src="../\\1"', s) + # we also need to replace in the lsr, which is already processed above! - if 'input/' in prefix or 'Documentation/topdocs' in prefix: + if 'input/' in prefix or 'Documentation/topdocs' in prefix or \ + 'Documentation/contributor' in prefix: # fix the link from the regtest, lsr and topdoc pages to the doc index # (rewrite prefix to obtain the relative path of the doc index page) rel_link = re.sub (r'out-www/.*$', '', prefix) rel_link = re.sub (r'[^/]*/', '../', rel_link) - if 'input/regression' in prefix: - indexfile = "Documentation/devel/index" + if 'input/regression' in prefix or 'Documentation/contributor' in prefix: + indexfile = "Documentation/devel" else: indexfile = "index" s = docindex_link_re.sub ('href="' + rel_link + indexfile + '.html\"', s) @@ -225,7 +220,8 @@ def process_i18n_big_page_links (match, prefix, lang_ext): if big_page_name: destination_path = os.path.normpath (os.path.join (os.path.dirname (prefix), big_page_name.group (0))) - if not lang_ext in pages_dict[destination_path]: + if not (destination_path in pages_dict and + lang_ext in pages_dict[destination_path]): return match.group (0) return 'href="' + match.group (1) + '.' + lang_ext \ + match.group (2) + match.group (3) + '"' diff --git a/python/convertrules.py b/python/convertrules.py index 9aac7314d9..187dfdd09b 100644 --- a/python/convertrules.py +++ b/python/convertrules.py @@ -1187,7 +1187,7 @@ def text_markup (str): while match: result = result + str[:match.end (1)] + " \markup" str = str[match.end( 2):] - # Count matching parentheses to find the end of the + # Count matching parentheses to find the end of the # current markup: nesting_level = 0 pars = re.finditer(r"[()]",str) @@ -1228,7 +1228,7 @@ def articulation_substitute (str): string_or_scheme = re.compile ('("(?:[^"\\\\]|\\\\.)*")|(#\\s*\'?\\s*\\()') -# Only apply articulation_substitute () outside strings and +# Only apply articulation_substitute () outside strings and # Scheme expressions: def smarter_articulation_subst (str): result = '' @@ -1242,7 +1242,7 @@ def smarter_articulation_subst (str): # Copy the string to output: result = result + match.group (1) str = str[match.end(1):] - else: # Found a Scheme expression. Count + else: # Found a Scheme expression. Count # matching parentheses to find its end str = str[match.start ():] nesting_level = 0 @@ -1321,7 +1321,7 @@ def conv (str): return str -@rule ((1, 9, 3), (_ ("%s misspelling") % "\\acciaccatura") + +@rule ((1, 9, 3), (_ ("%s misspelling") % "\\acciaccatura") + ", fingerHorizontalDirection -> fingeringOrientations") def conv (str): str = re.sub ('accacciatura', @@ -2002,7 +2002,7 @@ def conv (str): str = re.sub ('soloADue', 'printPartCombineTexts', str) str = re.sub (r'\\applymusic\s*#notes-to-clusters', '\\makeClusters', str) - + str = re.sub (r'pagenumber\s*=', 'firstpagenumber = ', str) return str @@ -2055,7 +2055,7 @@ with str = re.sub (r'#\(paper-set-staff-size', '%Use set-global-staff-size at toplevel\n% #(layout-set-staff-size', str) return str - + @rule ((2, 3, 23), r'\context Foo = NOTENAME -> \context Foo = "NOTENAME"') def conv (str): @@ -2240,7 +2240,7 @@ def conv (str): @rule ((2, 7, 0), 'ly:get-default-font -> ly:grob-default-font') def conv (str): - return re.sub('ly:get-default-font', 'ly:grob-default-font', str) + return re.sub('ly:get-default-font', 'ly:grob-default-font', str) @rule ((2, 7, 1), '''ly:parser-define -> ly:parser-define! @@ -2539,7 +2539,7 @@ def conv (str): while dur > 1 : dur /= 2 log2 += 1 - + den = (1 << dots) * (1 << log2) num = ((1 << (dots+1)) - 1) @@ -2552,7 +2552,7 @@ def conv (str): } """ % (num*count, den) - + str = re.sub (r'\\midi\s*{\s*\\tempo ([0-9]+)\s*([.]*)\s*=\s*([0-9]+)\s*}', sub_tempo, str) return str @@ -2595,10 +2595,10 @@ def conv (str): @rule ((2, 11, 6), _ ("Rename accidental glyphs, use glyph-name-alist.")) def conv (str): - + def sub_acc_name (m): idx = int (m.group (1).replace ('M','-')) - + return ["accidentals.doublesharp", "accidentals.sharp.slashslash.stemstemstem", "accidentals.sharp", @@ -2610,7 +2610,7 @@ def conv (str): "accidentals.flatflat"][4-idx] str = re.sub (r"accidentals[.](M?[-0-9]+)", - sub_acc_name, str) + sub_acc_name, str) str = re.sub (r"(KeySignature|Accidental[A-Za-z]*)\s*#'style\s*=\s*#'([a-z]+)", r"\1 #'glyph-name-alist = #alteration-\2-glyph-name-alist", str) ## FIXME: standard vs default, alteration-FOO vs FOO-alteration @@ -2669,15 +2669,15 @@ def conv (str): context = m.group (2) if not context: context = '' - + s += (r"%s \override %sTextSpanner #'bound-details #'%s #'text = \markup { \draw-line #'(0 . %s) }" % (once, context, var, h)) s += '\n' - + return s - - + + str = re.sub (r"(\\once)?\s*\\override\s*([a-zA-Z]+\s*[.]\s*)?TextSpanner\s*#'edge-height\s*=\s*#'\(\s*([0-9.-]+)\s+[.]\s+([0-9.-]+)\s*\)", sub_edge_height, str) return str @@ -2744,8 +2744,8 @@ def conv (str): "\t(format-metronome-markup text dur count context)\n") ## warning 2/2: fret diagram properties moved to fret-diagram-details - fret_props = ['barre-type', - 'dot-color', + fret_props = ['barre-type', + 'dot-color', 'dot-radius', 'finger-code', 'fret-count', @@ -2800,7 +2800,7 @@ def conv (str): @rule ((2, 11, 55), "#(set-octavation oct) -> \\ottava #oct,\n\ \\put-adjacent markup axis dir markup -> \\put-adjacent axis dir markup markup") -def conv (str): +def conv (str): str = re.sub (r"#\(set-octavation (-*[0-9]+)\)", r"\\ottava #\1", str) if re.search ('put-adjacent', str): stderr_write (NOT_SMART % _ ("\\put-adjacent argument order.\n")) @@ -2907,6 +2907,35 @@ def conv(str): stderr_write (UPDATE_MANUALLY) return str +@rule ((2, 13, 4), + _ ("Autobeaming rules have changed. override-auto-beam-setting and\n\ +revert-auto-beam-setting have been eliminated. \\overrideBeamSettings has been\n\ +added. BeatGrouping has been eliminated.\n\ +Different settings for vertical layout.")) +def conv(str): + if re.search("override-auto-beam-setting", str): + stderr_write ("\n") + stderr_write (NOT_SMART % _("override-auto-beam-setting.\n\ + Autobeam settings are now overriden with \\overrideBeamSettings.\n")) + stderr_write (UPDATE_MANUALLY) + if re.search("revert-auto-beam-setting", str): + stderr_write ("\n") + stderr_write (NOT_SMART % _("override-auto-beam-setting.\n\ + Autobeam settings are now reverted with \\revertBeamSettings.\n")) + stderr_write (UPDATE_MANUALLY) + str = re.sub(r"\\set\s+#\'beatGrouping", r"\\setBeatGrouping", str) + if re.search(r"(\w+\.beatGrouping)", str): + stderr_write (NOT_SMART % _(".beatGrouping. \n\ + beatGrouping with a specified context must now be accomplished with\n\ + \\overrideBeamSettings.\n")) + stderr_write (UPDATE_MANUALLY) + if re.search(r'alignment-offsets', str): + stderr_write("\n") + stderr_write(NOT_SMART % _("alignment-offsets has been changed to alignment-distances: \ +you must now specify the distances between staves rather than the offset of staves.\n")) + stderr_write(UPDATE_MANUALLY) + return str + # Guidelines to write rules (please keep this at the end of this file) # # - keep at most one rule per version; if several conversions should be done, @@ -2917,5 +2946,5 @@ def conv(str): # - write rule for bumping major stable version with # # _ ("bump version for release") -# +# # as exact description. diff --git a/python/musicexp.py b/python/musicexp.py index 9ebdb70a00..b13c9ac201 100644 --- a/python/musicexp.py +++ b/python/musicexp.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- import inspect import sys import string @@ -907,7 +908,7 @@ class BarLine (Music): bar_symbol = { 'regular': "|", 'dotted': ":", 'dashed': "dashed", 'heavy': "|", 'light-light': "||", 'light-heavy': "|.", 'heavy-light': ".|", 'heavy-heavy': ".|.", 'tick': "'", - 'short': "'|", 'none': "" }.get (self.type, None) + 'short': "'", 'none': "" }.get (self.type, None) if bar_symbol <> None: printer.dump ('\\bar "%s"' % bar_symbol) else: diff --git a/scm/GNUmakefile b/scm/GNUmakefile index f2555bb481..d3f055f77f 100644 --- a/scm/GNUmakefile +++ b/scm/GNUmakefile @@ -1,4 +1,4 @@ -# scm/Makefile +# scm/GNUmakefile depth = .. diff --git a/scm/auto-beam.scm b/scm/auto-beam.scm index 4f23d06198..1e77399b06 100644 --- a/scm/auto-beam.scm +++ b/scm/auto-beam.scm @@ -4,286 +4,26 @@ ;;;; ;;;; (c) 2000--2009 Jan Nieuwenhuizen -;;; specify generic beam end times - -;;; format: -;;; -;;; function shortest-duration-in-beam time-signature -;;; -;;; where -;;; -;;; function = begin or end -;;; shortest-duration-in-beam = numerator denominator; e.g.: 1 16 -;;; time-signature = numerator denominator, e.g.: 4 4 -;;; -;;; unspecified or wildcard entries for duration or time-signature -;;; are given by * * - -;;; maybe do: '(end shortest-1 16 time-3 4) ? - -(define-public default-auto-beam-settings - `( - ;; in 2 2 time: - ;; use beatLength for all except 32nd notes - ;; end beams with 32nd notes each 1 4 beat - - ((end 1 32 2 2) . ,(ly:make-moment 1 4)) - ((end 1 32 2 2) . ,(ly:make-moment 2 4)) - ((end 1 32 2 2) . ,(ly:make-moment 3 4)) - - ;; in 2 4, 2 8 and 2 16 time: - ;; use beatLength - - ;; in 3 2 time: - ;; use beatLength for all except 32nd notes - ;; end beams with 32nd notes each 1 4 beat - - ((end 1 32 3 2) . ,(ly:make-moment 1 4)) - ((end 1 32 3 2) . ,(ly:make-moment 2 4)) - ((end 1 32 3 2) . ,(ly:make-moment 3 4)) - ((end 1 32 3 2) . ,(ly:make-moment 4 4)) - ((end 1 32 3 2) . ,(ly:make-moment 5 4)) - - ;; in 3 4, 3 8 and 3 16 time: - ;; use beatLength - - ;; in 4 2 time: - ;; use beatLength for all except 16th and 32nd notes - ;; end beams with 16th notes each 1 4 beat - ;; end beams with 32nd notes each 1 8 beat - - ((end 1 16 4 2) . ,(ly:make-moment 1 4)) - ((end 1 16 4 2) . ,(ly:make-moment 2 4)) - ((end 1 16 4 2) . ,(ly:make-moment 3 4)) - ((end 1 16 4 2) . ,(ly:make-moment 4 4)) - ((end 1 16 4 2) . ,(ly:make-moment 5 4)) - ((end 1 16 4 2) . ,(ly:make-moment 6 4)) - ((end 1 16 4 2) . ,(ly:make-moment 7 4)) - - ((end 1 32 4 2) . ,(ly:make-moment 1 8)) - ((end 1 32 4 2) . ,(ly:make-moment 2 8)) - ((end 1 32 4 2) . ,(ly:make-moment 3 8)) - ((end 1 32 4 2) . ,(ly:make-moment 4 8)) - ((end 1 32 4 2) . ,(ly:make-moment 5 8)) - ((end 1 32 4 2) . ,(ly:make-moment 6 8)) - ((end 1 32 4 2) . ,(ly:make-moment 7 8)) - ((end 1 32 4 2) . ,(ly:make-moment 8 8)) - ((end 1 32 4 2) . ,(ly:make-moment 9 8)) - ((end 1 32 4 2) . ,(ly:make-moment 10 8)) - ((end 1 32 4 2) . ,(ly:make-moment 11 8)) - ((end 1 32 4 2) . ,(ly:make-moment 12 8)) - ((end 1 32 4 2) . ,(ly:make-moment 13 8)) - ((end 1 32 4 2) . ,(ly:make-moment 14 8)) - ((end 1 32 4 2) . ,(ly:make-moment 15 8)) - - ;; in 4 4 (common) time: - ;; use beatLength for all except 32nd notes: - ;; end beams with 32nd notes each 1 8 beat - - ((end 1 32 4 4) . ,(ly:make-moment 1 8)) - ((end 1 32 4 4) . ,(ly:make-moment 2 8)) - ((end 1 32 4 4) . ,(ly:make-moment 3 8)) - ((end 1 32 4 4) . ,(ly:make-moment 4 8)) - ((end 1 32 4 4) . ,(ly:make-moment 5 8)) - ((end 1 32 4 4) . ,(ly:make-moment 6 8)) - ((end 1 32 4 4) . ,(ly:make-moment 7 8)) - - ;; in 4 8 and 4 16 time: - ;; use beatLength - - ;; in 6 4 time: - ;; use beatGrouping for all except 16th, 32nd notes - ;; end beams with 16th or 32nd notes each 1 4 beat - - - ((end 1 16 6 4) . ,(ly:make-moment 1 4)) - ((end 1 16 6 4) . ,(ly:make-moment 2 4)) - ((end 1 16 6 4) . ,(ly:make-moment 3 4)) - ((end 1 16 6 4) . ,(ly:make-moment 4 4)) - ((end 1 16 6 4) . ,(ly:make-moment 5 4)) - - ((end 1 32 6 4) . ,(ly:make-moment 1 4)) - ((end 1 32 6 4) . ,(ly:make-moment 2 4)) - ((end 1 32 6 4) . ,(ly:make-moment 3 4)) - ((end 1 32 6 4) . ,(ly:make-moment 4 4)) - ((end 1 32 6 4) . ,(ly:make-moment 5 4)) - - ;; in 6 8 time: - ;; use beatGrouping for all except 32nd notes - ;; end beams with 32nd notes each 1 8 beat - - ((end 1 32 6 8) . ,(ly:make-moment 1 8)) - ((end 1 32 6 8) . ,(ly:make-moment 2 8)) - ((end 1 32 6 8) . ,(ly:make-moment 3 8)) - ((end 1 32 6 8) . ,(ly:make-moment 4 8)) - ((end 1 32 6 8) . ,(ly:make-moment 5 8)) - - ;; in 6 16 time: - ;; use beatGrouping - - ;; in 9 4 time: - ;; use beatGrouping for all except 16th, 32nd notes - ;; end beams with 16th or 32nd notes each 1 4 beat - - ((end 1 16 9 4) . ,(ly:make-moment 1 4)) - ((end 1 16 9 4) . ,(ly:make-moment 2 4)) - ((end 1 16 9 4) . ,(ly:make-moment 3 4)) - ((end 1 16 9 4) . ,(ly:make-moment 4 4)) - ((end 1 16 9 4) . ,(ly:make-moment 5 4)) - ((end 1 16 9 4) . ,(ly:make-moment 6 4)) - ((end 1 16 9 4) . ,(ly:make-moment 7 4)) - ((end 1 16 9 4) . ,(ly:make-moment 8 4)) - - ((end 1 32 9 4) . ,(ly:make-moment 1 4)) - ((end 1 32 9 4) . ,(ly:make-moment 2 4)) - ((end 1 32 9 4) . ,(ly:make-moment 3 4)) - ((end 1 32 9 4) . ,(ly:make-moment 4 4)) - ((end 1 32 9 4) . ,(ly:make-moment 5 4)) - ((end 1 32 9 4) . ,(ly:make-moment 6 4)) - ((end 1 32 9 4) . ,(ly:make-moment 7 4)) - ((end 1 32 9 4) . ,(ly:make-moment 8 4)) - - ;; in 9 8 time: - ;; use beatGrouping for all except 32nd notes - ;; end beams with 32nd notes each 1 8 beat - - ((end 1 32 9 8) . ,(ly:make-moment 1 8)) - ((end 1 32 9 8) . ,(ly:make-moment 2 8)) - ((end 1 32 9 8) . ,(ly:make-moment 3 8)) - ((end 1 32 9 8) . ,(ly:make-moment 4 8)) - ((end 1 32 9 8) . ,(ly:make-moment 5 8)) - ((end 1 32 9 8) . ,(ly:make-moment 6 8)) - ((end 1 32 9 8) . ,(ly:make-moment 7 8)) - ((end 1 32 9 8) . ,(ly:make-moment 8 8)) - - ;; in 9 16 time - ;; use beatGrouping - - ;; in 12 4 time: - ;; use beatGrouping for all except 16th, 32nd notes - ;; end beams with 16th or 32nd notes each 1 4 beat - - ((end 1 16 12 4) . ,(ly:make-moment 1 4)) - ((end 1 16 12 4) . ,(ly:make-moment 2 4)) - ((end 1 16 12 4) . ,(ly:make-moment 3 4)) - ((end 1 16 12 4) . ,(ly:make-moment 4 4)) - ((end 1 16 12 4) . ,(ly:make-moment 5 4)) - ((end 1 16 12 4) . ,(ly:make-moment 6 4)) - ((end 1 16 12 4) . ,(ly:make-moment 7 4)) - ((end 1 16 12 4) . ,(ly:make-moment 8 4)) - ((end 1 16 12 4) . ,(ly:make-moment 9 4)) - ((end 1 16 12 4) . ,(ly:make-moment 10 4)) - ((end 1 16 12 4) . ,(ly:make-moment 11 4)) - - ((end 1 32 12 4) . ,(ly:make-moment 1 4)) - ((end 1 32 12 4) . ,(ly:make-moment 2 4)) - ((end 1 32 12 4) . ,(ly:make-moment 3 4)) - ((end 1 32 12 4) . ,(ly:make-moment 4 4)) - ((end 1 32 12 4) . ,(ly:make-moment 5 4)) - ((end 1 32 12 4) . ,(ly:make-moment 6 4)) - ((end 1 32 12 4) . ,(ly:make-moment 7 4)) - ((end 1 32 12 4) . ,(ly:make-moment 8 4)) - ((end 1 32 12 4) . ,(ly:make-moment 9 4)) - ((end 1 32 12 4) . ,(ly:make-moment 10 4)) - ((end 1 32 12 4) . ,(ly:make-moment 11 4)) - - ;; in 12 8 time: - ;; use beatGrouping for all except 32nd notes - ;; end beams with 32nd notes each 1 8 beat - - ((end 1 32 12 8) . ,(ly:make-moment 1 8)) - ((end 1 32 12 8) . ,(ly:make-moment 2 8)) - ((end 1 32 12 8) . ,(ly:make-moment 3 8)) - ((end 1 32 12 8) . ,(ly:make-moment 4 8)) - ((end 1 32 12 8) . ,(ly:make-moment 5 8)) - ((end 1 32 12 8) . ,(ly:make-moment 6 8)) - ((end 1 32 12 8) . ,(ly:make-moment 7 8)) - ((end 1 32 12 8) . ,(ly:make-moment 8 8)) - ((end 1 32 12 8) . ,(ly:make-moment 9 8)) - ((end 1 32 12 8) . ,(ly:make-moment 10 8)) - ((end 1 32 12 8) . ,(ly:make-moment 11 8)) - - ;; in 12 16 time: - ;; use beatGrouping - - )) - -(define (override-property-setting context property setting value) - "Like the C++ code that executes \\override, but without type -checking. " - (ly:context-set-property! - context property - (cons (cons setting value) (ly:context-property context property)))) - -(define (revert-property-setting context property setting) - "Like the C++ code that executes \revert, but without type -checking. " - - (define (revert-member alist entry new) - "Return ALIST, with ENTRY removed. ALIST is not modified, instead -a fresh copy of the list-head is made." - (cond - ((null? alist) new) - ((equal? (car alist) entry) (revert-member (cdr alist) entry new)) - (else (revert-member (cdr alist) entry (cons (car alist) new))))) - - (ly:context-set-property! - context property - (revert-member (ly:context-property context property) setting '()))) - -(define-public (override-auto-beam-setting setting num den . rest) - (ly:export - (context-spec-music - (make-apply-context (lambda (c) - (override-property-setting - c 'autoBeamSettings - setting (ly:make-moment num den)))) - (if (and (pair? rest) (symbol? (car rest))) - (car rest) - 'Voice)))) - -(define-public (score-override-auto-beam-setting setting num den) - (override-auto-beam-setting setting num den 'Score)) - -(define-public (revert-auto-beam-setting setting num den . rest) - (ly:export - (context-spec-music - (make-apply-context - (lambda (c) - (revert-property-setting - c 'autoBeamSettings - (cons setting (ly:make-moment num den))))) - (if (and (pair? rest) (symbol? (car rest))) - (car rest) - 'Voice)))) - ;; Determine end moment for auto beaming (or begin moment, but mostly -;; 0== anywhere). In order of decreasing priority: +;; 0== anywhere). We only consider the current time signature. +;; In order of decreasing priority: ;; -;; 1. end * * -;; 2. end * * * -;; 3. end -;; 4. end * -;; 5. if 1-4 not specified, begin anywhere, end at time determined by -;; beatGrouping and beatLength: -;; if beatGrouping and beatLength are consistent with measureLength, -;; use beatGrouping to determine end of beams. -;; if beatGrouping and beatLength are inconsistent with measureLength, -;; use beatLength to determine end of beams. +;; 1. end +;; 2. end * +;; 3. if 1-2 not specified, begin anywhere, end at beatLength intervals ;; ;; Rationale: ;; ;; [user override] ;; 1. override for specific duration type -;; 2. generic override +;; 2. override for all duration types in a time signature. ;; -;; [to be defined in config file] -;; 3. exceptions for specific time signature, for specific duration type -;; 4. exceptions for specific time signature -;; 5. easy catch-all rule for non-specified measure types +;; defined in scm/beam-settings.scm: +;; 1. Default grouping for common time signatures +;; 2. exceptions for specific time signature, for specific duration type -(define-public (default-auto-beam-check context dir test) +(define-public (default-auto-beam-check context dir test-beam) (define (get name default) (let ((value (ly:context-property context name))) (if (not (null? value)) value default))) @@ -295,69 +35,54 @@ a fresh copy of the list-head is made." (cons (ly:moment-mul (ly:make-moment new-start 1) beat-length) (ending-moments (cdr group-list) new-start beat-length))))) - (define (make-end-settings time ending-list moment-den) - (if (null? ending-list) - '() - (cons (cons (append '(end * *) time) - (ly:make-moment (car ending-list) moment-den)) - (make-end-settings time (cdr ending-list) moment-den)))) - + ;; Start of actual auto-beam test routine + ;; + ;; ;; Don't start auto beams on grace notes (if (and (!= (ly:moment-grace-numerator (ly:context-now context)) 0) (= dir START)) #f - (let* ((beat-length (get 'beatLength (ly:make-moment 1 4))) - (measure-length (get 'measureLength (ly:make-moment 1 1))) - (measure-pos (get 'measurePosition ZERO-MOMENT)) - (beat-grouping (get 'beatGrouping '())) - (settings (get 'autoBeamSettings '())) - (function (list (if (= dir START) 'begin 'end))) - ;; Calculate implied time signature based on measureLength - ;; and beatLength for default value in get - (num-mom (ly:moment-div measure-length beat-length)) - (num (inexact->exact - (round (/ (ly:moment-main-numerator num-mom) - (ly:moment-main-denominator num-mom))))) - (den (ly:moment-main-denominator beat-length)) - (time-signature-fraction - (get 'timeSignatureFraction (cons num den))) - (time (list (car time-signature-fraction) - (cdr time-signature-fraction))) - (type (list (ly:moment-main-numerator test) - (ly:moment-main-denominator test))) - (pos (if (>= (ly:moment-main-numerator measure-pos) 0) - measure-pos - (ly:moment-add measure-length measure-pos))) - (grouping-moments (ending-moments beat-grouping 0 beat-length)) - ;; Calculate implied measure length from beatGrouping - ;; and beatLength - (grouping-length (if (null? grouping-moments) - ZERO-MOMENT - (list-ref grouping-moments - (1- (length grouping-moments))))) - (lst (list - ;; Hmm, should junk user-override feature, - ;; or split this in user-override and config section? - (append function type '(* *)) - (append function '(* * * *)) - (append function type time) - (append function '(* *) time))) - (predefined-setting (first-assoc lst settings))) - (if (or - ;; always begin or end beams at beginning/ending of measure + (if (= dir START) + ;; start anywhere is currently implemented + #t + (let* ((beat-length (get 'beatLength (ly:make-moment 1 4))) + (measure-length (get 'measureLength (ly:make-moment 1 1))) + (time-signature-fraction + (get 'timeSignatureFraction '(4 . 4))) + (measure-pos (get 'measurePosition ZERO-MOMENT)) + (settings (get 'beamSettings '())) + (function (if (= dir START) 'begin 'end)) + (type (cons (ly:moment-main-numerator test-beam) + (ly:moment-main-denominator test-beam))) + (pos (if (>= (ly:moment-main-numerator measure-pos) 0) + measure-pos + (ly:moment-add measure-length measure-pos))) + (type-grouping (ly:beam-grouping + settings + time-signature-fraction + function + type)) + (default-grouping (ly:beam-grouping + settings + time-signature-fraction + function + '*)) + (beat-grouping (if (null? type-grouping) + default-grouping + type-grouping)) + (grouping-moment (if (null? type-grouping) + beat-length + test-beam)) + (grouping-moments (ending-moments + beat-grouping 0 grouping-moment))) + (if (null? beat-grouping) + ;; no rule applies, so end at beatLength + (= (ly:moment-main-denominator + (ly:moment-div pos beat-length)) 1) + ;; otherwise, end at beginning of measure or + ;; at specified moment + (or + ;; start/end at beginning of measure (= (ly:moment-main-numerator pos) 0) - (first-member (map (lambda (x) (cons x pos)) lst) settings)) - #t - (if (= dir START) - ;; if no entry matches our function + time or type, - ;; start anywhere - (not predefined-setting) - ;; if entry matches our function + time or type, check moment - (if predefined-setting - (equal? measure-pos (cdr predefined-setting)) - ;; if measure-length matches grouping-length, use - ;; grouping moments, else use beat-length - (if (equal? measure-length grouping-length) - (member measure-pos grouping-moments) - (= (ly:moment-main-denominator - (ly:moment-div pos beat-length)) 1)))))))) + ;; end if measure-pos matches a specified ending moment + (member measure-pos grouping-moments))))))) diff --git a/scm/autochange.scm b/scm/autochange.scm index c445997199..54f5e96250 100644 --- a/scm/autochange.scm +++ b/scm/autochange.scm @@ -1,7 +1,7 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; autochange - fairly related to part combining. +;; autochange.scm - fairly related to part combining. (define-public (make-autochange-music parser music) (define (generate-split-list change-moment event-list acc) diff --git a/scm/backend-library.scm b/scm/backend-library.scm index 301868cb84..9fa094f518 100644 --- a/scm/backend-library.scm +++ b/scm/backend-library.scm @@ -8,6 +8,9 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; backend helpers. +(use-modules (scm ps-to-png) + (ice-9 optargs)) + (define-public (ly:system command . rest) (let* ((status 0) (dev-null "/dev/null") @@ -118,8 +121,6 @@ (ly:progress "\n") (ly:system cmd))) -(use-modules (scm ps-to-png)) - (define-public (postscript->png resolution paper-width paper-height name) (let* ((verbose (ly:get-option 'verbose)) (rename-page-1 #f)) @@ -189,3 +190,26 @@ scope))) (apply string-append (map output-scope scopes))) +(define missing-stencil-list '()) + +(define-public (backend-testing output-module) + (define (missing-stencil-expression name) + (begin + (ly:warning (_ "missing stencil expression `~S'") name) + "")) + + (map (lambda (x) + (if (not (module-defined? output-module x)) + (begin + (module-define! output-module x + (lambda* (#:optional y . z) + (missing-stencil-expression x))) + (set! missing-stencil-list (append (list x) + missing-stencil-list))))) + (ly:all-stencil-commands))) + +(define-public (remove-stencil-warnings output-module) + (for-each + (lambda (x) + (module-remove! output-module x)) + missing-stencil-list)) diff --git a/scm/beam-settings.scm b/scm/beam-settings.scm new file mode 100644 index 0000000000..def8949abd --- /dev/null +++ b/scm/beam-settings.scm @@ -0,0 +1,228 @@ +;;;; beam-settings.scm -- Handle auto-beam and subdivide-beam settings +;;;; +;;;; source file of the GNU LilyPond music typesetter +;;;; +;;;; (c) 2009 Carl Sorensen + +;;; specify default beaming rules + +;;; format: +;;; +;;; alist of +;;; ((time-signature function) . (beam-type . grouping)) entries +;;; +;;; where +;;; +;;; time-signature = time signature fraction (pair of numbers, (4 .4) ) +;;; function = 'end or 'subdivide (possibly implement 'begin in the future) +;;; beam-type = '* or (numerator . denominator); e.g. (1 . 16) +;;; NOTE: numerator is kept in beam-type because of +;;; tuplets, e.g. (2 . 24) = (2 . 3) * (1 . 8) +;;; for eighth-note triplets. +;;; grouping = a list of groups, in units of time signature denominator +;;; (for default rules) or beam-type (for explicit rules) +;;; + +(define-public default-beam-settings + `( + ;; in 2 2 time: + ;; default: end beams on 1 2 note boundaries + ;; end beams with 32nd notes each 1 4 beat + (((2 . 2) end) . + ((* . (1 1)) + ((1 . 32) . (8 8 8 8)))) + + ;; in 2 4, 2 8 and 2 16 time: + ;; default: end beams on beats + (((2 . 4) end) . ((* . (1 1)))) + (((2 . 8) end) . ((* . (1 1)))) + (((2 . 16) end) . ((* . (1 1)))) + + ;; in 3 2 time: + ;; default: end beams on beats + ;; end beams with 32nd notes each 1 4 beat + (((3 . 2) end) . + ((* . (1 1 1)) + ((1 . 32) . (8 8 8 8 8 8)))) + + ;; in 3 4 time: + ;; default: end beams on beats + ;; group 1/8 note beams on measure + (((3 . 4) end) .((* . (3)) + ((1 16) . (4 4 4)) + ((1 32) . (8 8 8)) + ((1 64) . (16 16 16)) + ((1 128) . (32 32 32)))) + + ;; in 3 8 and 3 16 time time: + ;; default: group on 3 + (((3 . 8) end) . ((* . (3)))) + (((3 . 16) end) . ((* . (3)))) + + ;; in 4 2 time: + ;; default: end beams on beats + ;; end beams with 16th notes each 1 4 beat + ;; end beams with 32nd notes each 1 8 beat + (((4 . 2) end) . + ((* . (1 1 1 1)) + ((1 . 16) . (4 4 4 4 4 4 4 4)) + ((1 . 32) . (4 4 4 4 + 4 4 4 4 + 4 4 4 4 + 4 4 4 4)))) + + ;; in 4 4 (common) time: + ;; default: end beams on beats + ;; use beatLength for all except 32nd notes: + ;; end beams with 32nd notes each 1 8 beat + (((4 . 4) end) . + ((* . (2 2)) + ((1 . 32) . (4 4 4 4 + 4 4 4 4)))) + + ;; in 4 8 time: + ;; default: group on 1 4 notes + (((4 . 8) end) . ((* . (2 2)))) + + ;; in 4 16 time: + ;; default: group on beats + (((4 . 16) end) . ((* . (1 1 1 1)))) + + ;; in 6 4 time: + ;; default group at 3 4 + ;; end beams with 16th or 32nd notes each 1 4 beat + (((6 . 4) end) . + ((* . (3 3)) + ((1 . 16) . (4 4 4 4 4 4)) + ((1 . 32) . (8 8 8 8 8 8)))) + + ;; in 6 8 time: + ;; default: group at 3 8 + ;; end beams with 32nd notes each 1 8 beat + (((6 . 8) end) . + ((* . (3 3)) + ((6 . 8) . (4 4 4 4 4 4)))) + + ;; in 6 16 time: + ;; default: group at 3 16 + (((6 . 16) end) . ((* . (3 3)))) + + ;; in 9 4 time: + ;; default: group at 3 4 + ;; end beams with 16th or 32nd notes each 1 4 beat + (((9 . 4) end) . + ((* . (3 3 3)) + ((1 . 16) . (4 4 4 4 4 4 4 4 4)) + ((1 . 32) . (8 8 8 8 8 8 8 8 8)))) + + ;; in 9 8 time: + ;; default: group at 3 8 + ;; use beatGrouping for all except 32nd notes + ;; end beams with 32nd notes each 1 8 beat + (((9 . 8) end) . + ((* . (3 3 3)) + ((1 . 32) . (4 4 4 4 4 4 4 4 4)))) + + ;; in 9 16 time + ;; default: group at 3 8 + (((9 . 16) end) . ((* . (3 3 3)))) + + ;; in 12 4 time: + ;; default: group at 3 4 + ;; end beams with 16th or 32nd notes each 1 4 beat + (((12 . 4) end) . + ((* . (3 3 3 3)) + ((1 . 16) . (4 4 4 4 4 4 4 4 4 4 4 4 4)) + ((12 . 4) . (8 8 8 8 8 8 8 8 8 8 8 8 8)))) + + ;; in 12 8 time: + ;; default: group at 3 8 + ;; end beams with 32nd notes each 1 8 beat + (((12 . 8) end) . + ((* . (3 3 3 3)) + ((1 . 32) . (4 4 4 4 4 4 4 4 4 4 4 4 4)))) + + ;; in 12 16 time: + ;; default: group at 3 16 + (((12 . 16) end) . ((* . (3 3 3 3)))) + + ;; in 5 8 time: + ;; default: group (3 2) + (((5 . 8) end) . ((* . (3 2)))) + + ;; in 8 8 time: + ;; default: group (3 3 2) + (((8 . 8) end) . ((* . (3 3 2)))) + )) ; end of alist definition + +;;; Functions for overriding beam settings +;;; + +(define (overridden-property-alist context property setting value) + "Return an alist containing the current @{context} value of +@code{property} overriden by @code{(setting . value)}. " + (cons (cons setting value) (ly:context-property context property))) + +(define-public (override-property-setting context property setting value) + "Like the C++ code that executes \\override, but without type +checking. " + (ly:context-set-property! + context property + (overridden-property-alist context property setting value))) + +(define (revert-property-setting context property setting) + "Like the C++ code that executes \revert, but without type +checking. " + + (define (revert-member alist entry new) + "Return ALIST, with ENTRY removed. ALIST is not modified, instead +a fresh copy of the list-head is made." + (cond + ((null? alist) new) + ((equal? (car alist) entry) (revert-member (cdr alist) entry new)) + (else (revert-member (cdr alist) entry (cons (car alist) new))))) + + (ly:context-set-property! + context property + (revert-member (ly:context-property context property) setting '()))) + +(define-public (override-beam-setting + time-signature rule-type rule . rest) + "Override the beam settings for the context in @var{rest}, +for @var{time-signature} and @var{rule-type}, with the +new rule alist @var{rule}. " + (define (make-setting c) + (let ((new-settings + (overridden-property-alist + c + 'beamSettings + (list time-signature rule-type) + rule))) + (ly:context-set-property! c 'beamSettings new-settings))) + + (let ((music-to-export + (context-spec-music + (make-apply-context make-setting) + (if (and (pair? rest) (symbol? (car rest))) + (car rest) + 'Voice)))) + (ly:export music-to-export))) + +(define-public (score-override-beam-setting + time-signature rule-type rule) + (override-beam-setting + time-signature rule-type rule 'Score)) + +(define-public (revert-beam-setting + time-signature rule-type . rest) + (ly:export + (context-spec-music + (make-apply-context + (lambda (c) + (revert-property-setting + c + 'beamSettings + (list time-signature rule-type)))) + (if (and (pair? rest) (symbol? (car rest))) + (car rest) + 'Voice)))) diff --git a/scm/c++.scm b/scm/c++.scm index b6ec6a4ee7..8db8bb96c0 100644 --- a/scm/c++.scm +++ b/scm/c++.scm @@ -1,7 +1,7 @@ ;;;; c++.scm -- implement Scheme frontends to C++ functions ;;;; ;;;; source file of the GNU LilyPond music typesetter -;;;; +;;;; ;;;; (c) 1998--2009 Jan Nieuwenhuizen ;;;; Han-Wen Nienhuys @@ -41,7 +41,7 @@ ;; moved list to end of lily.scm: then all type-predicates are ;; defined. -(define type-p-name-alist '()) +(define type-p-name-alist '()) (define (match-predicate obj alist) (if (null? alist) diff --git a/scm/coverage.scm b/scm/coverage.scm index e7392bb683..3c210555ae 100644 --- a/scm/coverage.scm +++ b/scm/coverage.scm @@ -1,3 +1,5 @@ +;;;; coverage.scm + (define-module (scm coverage)) (use-modules (lily) diff --git a/scm/define-context-properties.scm b/scm/define-context-properties.scm index 3b18e94df4..b6a5becfb5 100644 --- a/scm/define-context-properties.scm +++ b/scm/define-context-properties.scm @@ -1,7 +1,7 @@ ;;;; define-context-properties.scm -- part of backend documentation ;;;; ;;;; source file of the GNU LilyPond music typesetter -;;;; +;;;; ;;;; (c) 1998--2009 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen @@ -14,11 +14,11 @@ (procedure? type?) (string? description))) (throw 'init-format-error)) - - + + (if (not (equal? #f (object-property symbol 'translation-doc))) (ly:error (_ "symbol ~S redefined" symbol))) - + (set-object-property! symbol 'translation-type? type?) (set-object-property! symbol 'translation-doc description) (set! all-translation-properties (cons symbol all-translation-properties)) @@ -32,14 +32,14 @@ `( ;; TODO FIXME - + (aDueText ,markup? "Text to print at a unisono passage.") - (alignBelowContext ,string? "Where to insert newly created context in -vertical alignment.") (alignAboveContext ,string? "Where to insert newly created context in vertical alignment.") (alignBassFigureAccidentals ,boolean? "If true, then the accidentals are aligned in bass figure context.") + (alignBelowContext ,string? "Where to insert newly created context in +vertical alignment.") (associatedVoice ,string? "Name of the @code{Voice} that has the melody for this @code{Lyrics} line.") (autoAccidentals ,list? "List of different ways to typeset an @@ -90,9 +90,6 @@ printed. @code{(#t . #f)} does not make sense. arguments, @var{context}, @var{dir} [start/stop (-1 or 1)], and @var{test} [shortest note in the beam]. A non-@code{#f} return value starts or stops the auto beam.") - (autoBeamSettings ,list? "Specifies when automatically generated -beams should begin and end. See @ruser{Setting automatic beam -behavior} for more information.") (autoBeaming ,boolean? "If set to true then beams are generated automatically.") (autoCautionaries ,list? "List similar to @code{autoAccidentals}, @@ -105,7 +102,7 @@ be printed automatically; they must be explicitly created with a are still counted. Bar line generation will resume according to that count if this property is unset.") - + (barAlways ,boolean? "If set to true a bar line is drawn after each note.") (barCheckSynchronize ,boolean? "If true then reset @@ -120,15 +117,15 @@ format.") (bassStaffProperties ,list? "An alist of property settings to apply for the down staff of @code{PianoStaff}. Used by @code{\\autochange}.") + (beamSettings ,list? "Specifies when automatically generated +beams should begin and end, as well as beam subdivision behavior. +See @ruser{Setting automatic beam +behavior} for more information.") (beatLength ,ly:moment? "The length of one beat in this time signature.") - (beatGrouping ,list? "A list of beatgroups, e.g., in 5/8 time -@code{'(2 3)}.") (chordChanges ,boolean? "Only show changes in chords scheme?") - (chordNameFunction ,procedure? "The function that converts lists -of pitches to chord names.") (chordNameExceptions ,list? "An alist of chord exceptions. Contains @code{(@var{chord} . @var{markup})} entries.") (chordNameExceptionsFull ,list? "An alist of full chord @@ -136,6 +133,8 @@ exceptions. Contains @code{(@var{chord} . @var{markup})} entries.") (chordNameExceptionsPartial ,list? "An alist of partial chord exceptions. Contains @code{(@var{chord} . (@var{prefix-markup} @var{suffix-markup}))} entries.") + (chordNameFunction ,procedure? "The function that converts lists +of pitches to chord names.") (chordNameSeparator ,markup? "The markup object used to separate parts of a chord name.") (chordNoteNamer ,procedure? "A function that converts from a pitch @@ -159,11 +158,11 @@ percent repeats.") the clef is changed.") (createSpacing ,boolean? "Create @code{StaffSpacing} objects? Should be set for staves.") - (crescendoText ,markup? "The text to print at start of non-hairpin -crescendo, i.e., @samp{cresc.}.") (crescendoSpanner ,symbol? "The type of spanner to be used for crescendi. Available values are @samp{hairpin} and @samp{text}. If unset, a hairpin crescendo is used.") + (crescendoText ,markup? "The text to print at start of non-hairpin +crescendo, i.e., @samp{cresc.}.") (currentBarNumber ,integer? "Contains the current barnumber. This property is incremented at every bar line.") @@ -256,12 +255,12 @@ printed as numbers, but only as extender lines.") the default time signature.") (instrumentCueName ,markup? "The name to print if another instrument is to be taken.") - (instrumentName ,markup? "The name to print left of a staff. The -@code{instrument} property labels the staff in the first system, and -the @code{instr} property labels following lines.") (instrumentEqualizer ,procedure? "A function taking a string (instrument name), and returning a @code{(@var{min} . @var{max})} pair of numbers for the loudness range of the instrument.") + (instrumentName ,markup? "The name to print left of a staff. The +@code{instrument} property labels the staff in the first system, and +the @code{instr} property labels following lines.") ;; the definition is reversed wrt traditional transposition ;; otherwise \transpose { \transposition .. } won't work (instrumentTransposition ,ly:pitch? "Define the transposition of @@ -270,11 +269,11 @@ This is used to transpose the MIDI output, and @code{\\quote}s.") (internalBarNumber ,integer? "Contains the current barnumber. This property is used for internal timekeeping, among others by the @code{Accidental_engraver}.") - + (keepAliveInterfaces ,list? "A list of symbols, signifying grob interfaces that are worth keeping a staff with @code{remove-empty} set -around for.") +around for.") (keyAlterationOrder ,list? "An alist that defines in what order alterations should be printed. The format is @code{(@var{step} . @var{alter})}, where @var{step} is a number from 0 to@tie{}6 and @@ -309,11 +308,6 @@ manual beams are considered. Possible values include @code{beamMelismaBusy}.") (metronomeMarkFormatter ,procedure? "How to produce a metronome markup. Called with four arguments: text, duration, count and context.") - (midiInstrument ,string? "Name of the MIDI instrument to use.") - (midiMaximumVolume ,number? "Analogous to -@code{midiMinimumVolume}.") - (midiMinimumVolume ,number? "Set the minimum loudness for MIDI. -Ranges from 0 to@tie{}1.") (middleCClefPosition ,number? "The position of the middle C, as determined only by the clef. This can be calculated by looking at @code{clefPosition} and @code{clefGlyph}.") @@ -323,6 +317,11 @@ is used for ottava brackets.") (middleCPosition ,number? "The place of the middle C, measured in half staff-spaces. Usually determined by looking at @code{middleCClefPosition} and @code{middleCOffset}.") + (midiInstrument ,string? "Name of the MIDI instrument to use.") + (midiMaximumVolume ,number? "Analogous to +@code{midiMinimumVolume}.") + (midiMinimumVolume ,number? "Set the minimum loudness for MIDI. +Ranges from 0 to@tie{}1.") (minimumFret ,number? "The tablature auto string-selecting mechanism selects the highest string with a fret at least @code{minimumFret}.") @@ -437,18 +436,18 @@ cautionary suggestions over the note.") of the system/staff? Set to @code{SystemStartBrace}, @code{SystemStartBracket} or @code{SystemStartBar}.") (systemStartDelimiterHierarchy ,pair? "A nested list, indicating -the nesting of a start delimiters.") +the nesting of a start delimiters.") (tablatureFormat ,procedure? "A function formatting a tablature note head. Called with three arguments: string number, context and event. It returns the text as a string.") - (tempoWholesPerMinute ,ly:moment? "The tempo in whole notes per -minute.") + (tempoHideNote ,boolean? "Hide the note=count in tempo marks.") + (tempoText ,markup? "Text for tempo marks.") (tempoUnitCount ,number? "Count for specifying tempo.") (tempoUnitDuration ,ly:duration? "Unit for specifying tempo.") - (tempoText ,markup? "Text for tempo marks.") - (tempoHideNote ,boolean? "Hide the note=count in tempo marks.") + (tempoWholesPerMinute ,ly:moment? "The tempo in whole notes per +minute.") (tieWaitForNote ,boolean? "If true, tied notes do not have to follow each other directly. This can be used for writing out arpeggios.") @@ -458,6 +457,9 @@ signifying the time signature. For example, @code{#'(4 . 4)} is a (timing ,boolean? "Keep administration of measure length, position, bar number, etc.? Switch off for cadenzas.") (tonic ,ly:pitch? "The tonic of the current scale.") + (topLevelAlignment ,boolean? "If true, the @var{Vertical_align_engraver} +will create a @var{VerticalAlignment}; otherwise, it will create a +@var{StaffGrouper}") (trebleStaffProperties ,list? "An alist of property settings to apply for the up staff of @code{PianoStaff}. Used by @code{\\autochange}.") @@ -481,7 +483,7 @@ setting this property, you can make brackets last shorter. (useBassFigureExtenders ,boolean? "Whether to use extender lines for repeated bass figures.") - + (verticallySpacedContexts ,list? "List of symbols, containing context names whose vertical axis groups should be taken into account for vertical spacing of systems.") @@ -536,7 +538,9 @@ current breakable (clef, key signature, etc.) items.") non-breakable items (note heads, lyrics, etc.).") - (dynamicAbsoluteVolumeFunction ,procedure? "[DOCUMENT-ME]") + (dynamicAbsoluteVolumeFunction ,procedure? "A procedure that takes +one argument, the text value of a dynamic event, and returns the absolute +volume of that dynamic event.") (finalizations ,list? "A list of expressions to evaluate before diff --git a/scm/define-event-classes.scm b/scm/define-event-classes.scm index f5d7b790de..b2edbe8250 100644 --- a/scm/define-event-classes.scm +++ b/scm/define-event-classes.scm @@ -1,4 +1,4 @@ -;;;; stream-event-classes.scm -- define the tree of stream-event classes. +;;;; define-event-classes.scm -- define the tree of stream-event classes. ;;;; ;;;; source file of the GNU LilyPond music typesetter ;;;; diff --git a/scm/define-grob-interfaces.scm b/scm/define-grob-interfaces.scm index a2ee15276f..0bed1adc65 100644 --- a/scm/define-grob-interfaces.scm +++ b/scm/define-grob-interfaces.scm @@ -1,4 +1,4 @@ -;;;; interface-description.scm -- part of generated backend documentation +;;;; define-grob-interfaces.scm -- part of generated backend documentation ;;;; ;;;; source file of the GNU LilyPond music typesetter ;;;; diff --git a/scm/define-grob-properties.scm b/scm/define-grob-properties.scm index fd66a4968e..98eb2c022c 100644 --- a/scm/define-grob-properties.scm +++ b/scm/define-grob-properties.scm @@ -27,6 +27,10 @@ ;; (add-stem-support ,boolean? "If set, the @code{Stem} object is included in this script's support.") + (after-last-staff-spacing ,list? "An alist of spacing variables +that controls the spacing after the last staff in this staff group. +See @var{next-staff-spacing} for a description of the elements of +this alist.") (after-line-breaking ,boolean? "Dummy property, used to trigger callback for @code{after-line-breaking}.") (align-dir ,ly:dir? "Which side to align? @code{-1}: left side, @@ -95,10 +99,14 @@ beamlet, as a proportion of the distance between two adjacent stems.") (before-line-breaking ,boolean? "Dummy property, used to trigger a callback function.") (between-cols ,pair? "Where to attach a loose column to.") - (bound-padding ,number? "The amount of padding to insert around -spanner bounds.") + (between-staff-spacing ,list? "An alist of spacing variables +that controls the spacing between staves within this staff group. +See @var{next-staff-spacing} for a description of the elements of +this alist.") (bound-details ,list? "An alist of properties for determining attachments of spanners to edges.") + (bound-padding ,number? "The amount of padding to insert around +spanner bounds.") (bracket-flare ,number-pair? "A pair of numbers specifying how much edges of brackets should slant outward. Value @code{0.0} means straight edges.") @@ -114,15 +122,6 @@ center of the bar line.") (break-align-anchor-alignment ,number? "Read by @code{ly:break-aligned-interface::calc-extent-aligned-anchor} for aligning an anchor to a grob's extent.") - (break-align-symbol ,symbol? "This key is used for aligning and -spacing breakable items.") - (break-align-symbols ,list? "A list of symbols that determine -which break-aligned grobs to align this to. If the grob selected by -the first symbol in the list is invisible due to break-visibility, we -will align to the next grob (and so on). Choices are @code{left-edge}, -@code{ambitus}, @code{breathing-sign}, @code{clef}, @code{staff-bar}, -@code{key-cancellation}, @code{key-signature}, @code{time-signature}, -and @code{custos}.") (break-align-orders ,vector? "Defines the order in which prefatory matter (clefs, key signatures) appears. The format is a vector of length@tie{}3, where each element is one order for @@ -140,6 +139,15 @@ For example, clefs are put after key signatures by setting clef time-signature)) @end example") + (break-align-symbol ,symbol? "This key is used for aligning and +spacing breakable items.") + (break-align-symbols ,list? "A list of symbols that determine +which break-aligned grobs to align this to. If the grob selected by +the first symbol in the list is invisible due to break-visibility, we +will align to the next grob (and so on). Choices are @code{left-edge}, +@code{ambitus}, @code{breathing-sign}, @code{clef}, @code{staff-bar}, +@code{key-cancellation}, @code{key-signature}, @code{time-signature}, +and @code{custos}.") (break-overshoot ,number-pair? "How much does a broken spanner stick out of its bounds?") (break-visibility ,vector? "A vector of 3@tie{}booleans, @@ -178,7 +186,7 @@ this should list the control points of a third-order B@'ezier curve.") ;; d ;; (damping ,number? "Amount of beam slope damping.") - (dash-definition ,pair? "List of @code{dash-elements} defining the + (dash-definition ,pair? "List of @code{dash-elements} defining the dash structure. Each @code{dash-element} has a starting t value, an ending t-value, a @code{dash-fraction}, and a @code{dash-period}.") (dash-fraction ,number? "Size of the dashes, relative to @@ -188,8 +196,12 @@ an ending t-value, a @code{dash-fraction}, and a @code{dash-period}.") whitespace. If negative, no line is drawn at all.") (default-direction ,ly:dir? "Direction determined by note head positions.") + (default-next-staff-spacing ,list? "An alist of spacing variables +that controls the spacing between this staff and the next. +See @var{next-staff-spacing} for a description of the elements of +this alist.") (details ,list? "Alist of parameters for detailed grob behavior. -More information on the allowed parameters for a grob can be found by +More information on the allowed parameters for a grob can be found by looking at the top of the Internals Reference page for each interface having a @code{details} property.") (digit-names ,vector? "Names for string finger digits.") @@ -223,10 +235,6 @@ the vertical edges: @code{(@var{left-height} . @var{right-height})}.") edges: @code{(@var{left-text} . @var{right-text})}.") (expand-limit ,integer? "Maximum number of measures expanded in church rests.") - (extra-X-extent ,number-pair? "A grob is enlarged in -X@tie{}dimension by this much.") - (extra-Y-extent ,number-pair? "A grob is enlarged in -Y@tie{}dimension by this much.") ;; remove me? (extra-dy ,number? "Slope glissandi this much extra.") (extra-offset ,number-pair? "A pair representing an offset. This @@ -244,6 +252,10 @@ problem, we pad each item by this amount (by adding the @q{car} on the left side of the item and adding the @q{cdr} on the right side of the item). In order to make a grob take up no horizontal space at all, set this to @code{(+inf.0 . -inf.0)}.") + (extra-X-extent ,number-pair? "A grob is enlarged in +X@tie{}dimension by this much.") + (extra-Y-extent ,number-pair? "A grob is enlarged in +Y@tie{}dimension by this much.") ;; @@ -386,6 +398,7 @@ read from the NonMusicalPaperColumn that begins the measure.") (glyph ,string? "A string determining what @q{style} of glyph is typeset. Valid choices depend on the function that is reading this property.") + (glyph-name ,string? "The glyph name within the font.") (glyph-name-alist ,list? "An alist of key-string pairs.") (grow-direction ,ly:dir? "Crescendo or decrescendo?") @@ -450,6 +463,13 @@ resolution on this @code{NoteColumn}.") configuration to this index, and print the respective scores.") (inspect-quants ,number-pair? "If debugging is set, set beam and slur quants to this position, and print the respective scores.") + (inter-loose-line-spacing ,list? "Specifies how to vertically +position a non-spaced line relative to the other non-spaced lines +around it. See @var{next-staff-spacing} for the format of this list.") + (inter-staff-spacing ,list? "Specifies how to vertically +position a non-spaced line relative to the staff for which it +has affinity. See @var{next-staff-spacing} for the format of this list.") + ;; @@ -529,10 +549,6 @@ guitar notation. The value of this setting is used by @code{merge-differently-headed} only applies to opposing stem directions (i.e., voice 1 &@tie{}2).") - (minimum-X-extent ,number-pair? "Minimum size of an object in -X@tie{}dimension, measured in @code{staff-space} units.") - (minimum-Y-extent ,number-pair? "Minimum size of an object in -Y@tie{}dimension, measured in @code{staff-space} units.") (minimum-distance ,ly:dimension? "Minimum distance between rest and notes or beam.") (minimum-length ,ly:dimension? "Try to make a spanner at least @@ -544,6 +560,10 @@ noteheads.") as fraction of note head size.") (minimum-space ,ly:dimension? "Minimum distance that the victim should move (after padding).") + (minimum-X-extent ,number-pair? "Minimum size of an object in +X@tie{}dimension, measured in @code{staff-space} units.") + (minimum-Y-extent ,number-pair? "Minimum size of an object in +Y@tie{}dimension, measured in @code{staff-space} units.") ;; @@ -555,6 +575,25 @@ center of the staff.") to flip the direction of custos stem.") (next ,ly:grob? "Object that is next relation (e.g., the lyric syllable following an extender).") + (next-staff-spacing ,list? "An alist of properties used to position +the next staff in the system. The symbols that can be defined in the alist +are +@itemize @bullet +@item @var{space} -- the amount of stretchable space between the center +of this staff and the center of the next staff; +@item @var{padding} -- the minimum amount of whitespace that must be +present between this staff and the next staff; +@item @var{stretchability} -- the ease with which the stretchable +space increases when the system to which this staff belongs is stretched. +If this is zero, the distance to the next staff will be fixed either at +@var{space} or at @var{padding} plus the minimum distance to ensure +there is no overlap, whichever is larger; +@item @var{minimum-distance} -- the minimum distance to place between +the center of this staff and the center of the next. This differs +from @var{padding} in that the height of a staff has no effect on +the application of @var{minimum-distance} (whereas the height of a +staff is crucial for @var{padding}). +@end itemize") (no-alignment ,boolean? "If set, don't place this grob in a @code{VerticalAlignment}; rather, place it using its own @code{Y-offset} callback.") @@ -656,11 +695,6 @@ value @code{-1} means left aligned, @code{0}@tie{}centered, and values may also be specified.") (self-alignment-Y ,number? "Like @code{self-alignment-X} but for the Y@tie{}axis.") - (toward-stem-shift ,number? "Amount by which scripts are shifted -toward the stem if their direction coincides with the stem direction. -@code{0.0} means keep the default position (centered on the note -head), @code{1.0} means centered on the stem. Interpolated values are -possible.") (shorten-pair ,number-pair? "The lengths to shorten a text-spanner on both sides, for example a pedal bracket. Positive values shorten the text-spanner, while negative values lengthen it.") @@ -707,6 +741,8 @@ duration. Typically, the width of a note head. See also (springs-and-rods ,boolean? "Dummy variable for triggering spacing routines.") (stacking-dir ,ly:dir? "Stack objects in which direction?") + (staff-affinity ,ly:dir? "The direction of the staff to which this +line should stick.") (staff-padding ,ly:dimension? "Maintain this much space between reference points and the staff. Its effect is to align objects of differing sizes (like the dynamics @b{p} and @b{f}) on their @@ -766,6 +802,11 @@ in the list causes the corresponding tie to be formatted automatically.") (to-barline ,boolean? "If true, the spanner will stop at the bar line just before it would otherwise stop.") + (toward-stem-shift ,number? "Amount by which scripts are shifted +toward the stem if their direction coincides with the stem direction. +@code{0.0} means keep the default position (centered on the note +head), @code{1.0} means centered on the stem. Interpolated values are +possible.") (transparent ,boolean? "This makes the grob invisible.") @@ -843,127 +884,124 @@ constructed from a whole number of squiggles.") `( ;;;;;;;;;;;;;;;; ;; grobs & grob arrays. (alphabetical) - (X-common ,ly:grob? "Common reference point for axis group.") - - (Y-common ,ly:grob? "See @code{X-common}.") - (accidental-grob ,ly:grob? "The accidental for this note.") (accidental-grobs ,list? "An alist with @code{(@var{notename} . @var{groblist})} entries.") - (adjacent-pure-heights ,pair? "A pair of vectors. Used by a -@code{VerticalAxisGroup} to cache the @code{Y-extent}s of different column -ranges.") - (adjacent-hairpins ,ly:grob-array? "A list of directly neighboring + (adjacent-hairpins ,ly:grob-array? "An array of directly neighboring hairpins.") - (all-elements ,ly:grob-array? "A list of all grobs in this line. Its + (all-elements ,ly:grob-array? "An array of all grobs in this line. Its function is to protect objects from being garbage collected.") (arpeggio ,ly:grob? "A pointer to an @code{Arpeggio} object.") (axis-group-parent-X ,ly:grob? "Containing X@tie{}axis group.") (axis-group-parent-Y ,ly:grob? "Containing Y@tie{}axis group.") - (bar-extent ,number-pair? "The Y-extent of the actual bar line. -This may differ from @code{Y-extent} because it does not include the dots in -a repeat bar line.") - (bars ,ly:grob-array? "A list of bar line pointers.") + (bars ,ly:grob-array? "An array of bar line pointers.") (beam ,ly:grob? "A pointer to the beam, if applicable.") - (bounded-by-me ,ly:grob-array? "A list of spanners that have this + (bounded-by-me ,ly:grob-array? "An array of spanners that have this column as start/begin point. Only columns that have grobs or act as bounds are spaced.") (bracket ,ly:grob? "The bracket for a number.") - (columns ,ly:grob-array? "A list of grobs, typically containing + (columns ,ly:grob-array? "An array of grobs, typically containing @code{PaperColumn} or @code{NoteColumn} objects.") (conditional-elements ,ly:grob-array? "Internal use only.") - (cross-staff ,boolean? "For a beam or a stem, this is true if we -depend on inter-staff spacing.") (direction-source ,ly:grob? "In case @code{side-relative-direction} is set, which grob to get the direction from.") (dot ,ly:grob? "A reference to a @code{Dots} object.") (dots ,ly:grob-array? "Multiple @code{Dots} objects.") - (elements ,ly:grob-array? "A list of grobs; the type is depending on + (elements ,ly:grob-array? "An array of grobs; the type is depending on the grob where this is set in.") (encompass-objects ,ly:grob-array? "Objects that a slur should avoid in addition to notes and stems.") (figures ,ly:grob-array? "Figured bass objects for continuation line.") - (forced ,boolean? "Manually forced accidental.") - (glyph-name ,string? "The glyph name within the font.") (grace-spacing ,ly:grob? "A run of grace notes.") - (heads ,ly:grob-array? "A list of note heads.") + (heads ,ly:grob-array? "An array of note heads.") - (important-column-ranks ,vector? "A cache of columns that contain -@code{items-worth-living} data.") - (items-worth-living ,ly:grob-array? "A list of interesting items. If + (items-worth-living ,ly:grob-array? "An array of interesting items. If empty in a particular staff, then that staff is erased.") (left-items ,ly:grob-array? "DOCME") - (left-neighbors ,ly:grob-array? "A list of @code{spacing-wishes} grobs + (left-neighbors ,ly:grob-array? "An array of @code{spacing-wishes} grobs that are close to the current column. The closest @code{spacing-wishes} determine the actual distances between the columns.") (normal-stems ,ly:grob-array? "An array of visible stems.") - (note-columns ,pair? "A list of @code{NoteColumn} grobs.") + (note-columns ,ly:grob-array? "An array of @code{NoteColumn} grobs.") (note-head ,ly:grob? "A single note head.") - (note-heads ,ly:grob-array? "A list of note head grobs.") + (note-heads ,ly:grob-array? "An array of note head grobs.") (pedal-text ,ly:grob? "A pointer to the text of a mixed-style piano pedal.") - (pure-Y-common ,ly:grob? "A cache of the -@code{common_refpoint_of_array} of the @code{elements} grob set.") - (pure-Y-offset-in-progress ,boolean? "A debugging aid for catching -cyclic dependencies.") (pure-relevant-items ,ly:grob-array? "A subset of elements that are relevant for finding the @code{pure-Y-extent}.") (pure-relevant-spanners ,ly:grob-array? "A subset of elements that are relevant for finding the @code{pure-Y-extent}.") + (pure-Y-common ,ly:grob? "A cache of the +@code{common_refpoint_of_array} of the @code{elements} grob set.") (rest ,ly:grob? "A pointer to a @code{Rest} object.") (rest-collision ,ly:grob? "A rest collision that a rest is in.") - (rests ,ly:grob-array? "A list of rest objects.") + (rests ,ly:grob-array? "An array of rest objects.") (right-items ,ly:grob-array? "DOCME") (right-neighbors ,ly:grob-array? "See @code{left-neighbors}.") - (separation-item ,ly:grob? "A separation item.") - (side-support-elements ,ly:grob-array? "The side support, a list of + (separation-item ,ly:grob? "A pointer to a @code{SeparationItem} +object.") + (side-support-elements ,ly:grob-array? "The side support, an array of grobs.") (slur ,ly:grob? "A pointer to a @code{Slur} object.") (spaceable-staves ,ly:grob-array? "Objects to be spaced during page layout.") (spacing ,ly:grob? "The spacing spanner governing this section.") - (spacing-wishes ,ly:grob-array? "List of note spacing or staff spacing + (spacing-wishes ,ly:grob-array? "An array of note spacing or staff spacing objects.") + (staff-grouper ,ly:grob? "The staff grouper we belong to.") (staff-symbol ,ly:grob? "The staff symbol grob that we are in.") (stem ,ly:grob? "A pointer to a @code{Stem} object.") - (stems ,ly:grob-array? "A list of stem objects, corresponding to the -notes that the arpeggio has to be before.") + (stems ,ly:grob-array? "An array of stem objects.") (tie ,ly:grob? "A pointer to a @code{Tie} object.") (tremolo-flag ,ly:grob? "The tremolo object on a stem.") (tuplet-number ,ly:grob? "The number for a bracket.") - (tuplets ,ly:grob-array? "A list of smaller tuplet brackets.") + (tuplets ,ly:grob-array? "An array of smaller tuplet brackets.") + (X-common ,ly:grob? "Common reference point for axis group.") + (Y-common ,ly:grob? "See @code{X-common}.") ;;;;;;;;;;;;;;;; ;; other - (begin-of-line-visible ,boolean? "Set to make @code{ChordName} or -@code{FretBoard} be visible only at beginning of line or at + (adjacent-pure-heights ,pair? "A pair of vectors. Used by a +@code{VerticalAxisGroup} to cache the @code{Y-extent}s of different column +ranges.") + + (bar-extent ,number-pair? "The Y-extent of the actual bar line. +This may differ from @code{Y-extent} because it does not include the dots in +a repeat bar line.") + (begin-of-line-visible ,boolean? "Set to make @code{ChordName} or +@code{FretBoard} be visible only at beginning of line or at chord changes.") (cause ,scheme? "Any kind of causation objects (i.e., music, or perhaps translator) that was the cause for this grob.") + (cross-staff ,boolean? "For a beam or a stem, this is true if we +depend on inter-staff spacing.") (delta-position ,number? "The vertical position difference.") (font ,ly:font-metric? "A cached font metric object.") + (forced ,boolean? "Manually forced accidental.") (head-width ,ly:dimension? "The width of this ligature head.") (ideal-distances ,list? "@code{(@var{obj} . (@var{dist} . @var{strength}))} pairs.") + (important-column-ranks ,vector? "A cache of columns that contain +@code{items-worth-living} data.") (interfaces ,list? "A list of symbols indicating the interfaces supported by this object. It is initialized from the @code{meta} field.") @@ -977,6 +1015,8 @@ entries @code{name} and @code{interfaces}.") (positioning-done ,boolean? "Used to signal that a positioning element did its job. This ensures that a positioning is only done once.") (pure-Y-extent ,number-pair? "The estimated height of a system.") + (pure-Y-offset-in-progress ,boolean? "A debugging aid for catching +cyclic dependencies.") (quant-score ,string? "The beam quanting score; stored for debugging.") @@ -1024,8 +1064,8 @@ a head may be affected by the left and/or right neighbour head. @code{context-info} holds for each head such information about the left and right neighbour, encoded as a bit mask.") - (descendens ,boolean? "Is this neume of descendent type?") (deminutum ,boolean? "Is this neume deminished?") + (descendens ,boolean? "Is this neume of descendent type?") (flexa-height ,ly:dimension? "The height of a flexa shape in a ligature grob (in @code{staff-space} units).") @@ -1036,7 +1076,8 @@ ligature grob in (in @code{staff-space} units).") (join-heads ,boolean? "Whether to join the note heads of an ambitus grob with a vertical line.") - (join-right-amount ,number? "DOCME") + (join-right-amount ,number? "A length used for calculating the +Y-extent of mensural ligatures.") (linea ,boolean? "Attach vertical lines to this neume?") diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm index 1a03e9df5b..a20dc54cb0 100644 --- a/scm/define-grobs.scm +++ b/scm/define-grobs.scm @@ -13,191 +13,179 @@ ;; TODO: junk the meta field in favor of something more compact? -;;; todo:: reorder sensibly. - (define-public all-grob-descriptions `( (Accidental . ( + (alteration . ,accidental-interface::calc-alteration) (avoid-slur . inside) (glyph-name-alist . ,standard-alteration-glyph-name-alist) - (alteration . ,accidental-interface::calc-alteration) (stencil . ,ly:accidental-interface::print) - (Y-extent . ,ly:accidental-interface::height) (X-extent . ,ly:accidental-interface::width) + (Y-extent . ,ly:accidental-interface::height) (meta . ((class . Item) (interfaces . (accidental-interface font-interface)))))) (AccidentalCautionary . ( + (alteration . ,accidental-interface::calc-alteration) (avoid-slur . inside) - (parenthesized . #t) (glyph-name-alist . ,standard-alteration-glyph-name-alist) - (alteration . ,accidental-interface::calc-alteration) + (parenthesized . #t) (stencil . ,ly:accidental-interface::print) (Y-extent . ,ly:accidental-interface::height) (meta . ((class . Item) (interfaces . (accidental-interface font-interface)))))) + (AccidentalPlacement + . ( + (direction . ,LEFT) + (left-padding . 0.2) + (positioning-done . ,ly:accidental-placement::calc-positioning-done) + + ;; this is quite small, but it is very ugly to have + ;; accs closer to the previous note than to the next one. + (right-padding . 0.15) + + ;; for horizontally stacked scripts. + (script-priority . -100) + + (X-extent . ,ly:axis-group-interface::width) + (meta . ((class . Item) + (interfaces . (accidental-placement-interface)))))) + (AccidentalSuggestion . ( + (alteration . ,accidental-interface::calc-alteration) + (direction . ,UP) + (font-size . -2) + (glyph-name-alist . ,standard-alteration-glyph-name-alist) + (outside-staff-priority . 0) + (script-priority . 0) + (self-alignment-X . ,CENTER) + (side-axis . ,Y) + (staff-padding . 0.25) (stencil . ,ly:accidental-interface::print) - (X-extent . ,ly:accidental-interface::width) - (Y-extent . ,ly:accidental-interface::height) + (X-extent . ,ly:accidental-interface::width) (X-offset . ,(ly:make-simple-closure `(,+ ,(ly:make-simple-closure (list ly:self-alignment-interface::centered-on-x-parent)) ,(ly:make-simple-closure (list ly:self-alignment-interface::x-aligned-on-self))))) - (self-alignment-X . ,CENTER) - (font-size . -2) - (glyph-name-alist . ,standard-alteration-glyph-name-alist) - (alteration . ,accidental-interface::calc-alteration) + (Y-extent . ,ly:accidental-interface::height) (Y-offset . ,ly:side-position-interface::y-aligned-side) - (direction . ,UP) - (staff-padding . 0.25) - (outside-staff-priority . 0) - (script-priority . 0) - (side-axis . ,Y) (meta . ((class . Item) - (interfaces . (side-position-interface - script-interface - accidental-interface + (interfaces . (accidental-interface accidental-suggestion-interface + font-interface + script-interface self-alignment-interface - font-interface)))))) - - (AccidentalPlacement - . ( - (left-padding . 0.2) + side-position-interface)))))) - ;; for horizontally stacked scripts. - (script-priority . -100) - (direction . ,LEFT) - - (positioning-done . ,ly:accidental-placement::calc-positioning-done) - (X-extent . ,ly:axis-group-interface::width) - - ;; this is quite small, but it is very ugly to have - ;; accs closer to the previous note than to the next one. - (right-padding . 0.15) - (meta . ((class . Item) - (interfaces . (accidental-placement-interface)))))) - (Ambitus . ( (axes . (,X ,Y)) - (X-extent . ,ly:axis-group-interface::width) - (Y-extent . ,ly:axis-group-interface::height) + (break-align-symbol . ambitus) + (break-visibility . ,begin-of-line-visible) + (non-musical . #t) (space-alist . ( (clef . (extra-space . 0.5)) (key-signature . (extra-space . 0.0)) (staff-bar . (extra-space . 0.0)) (time-signature . (extra-space . 0.0)) (first-note . (fixed-space . 0.0)))) - (non-musical . #t) - (break-align-symbol . ambitus) - (break-visibility . ,begin-of-line-visible) - (meta . ((class . Item) - (interfaces . (axis-group-interface - break-aligned-interface - ambitus-interface)))))) - - (AmbitusLine - . ( - (stencil . ,ly:ambitus::print) - (join-heads . #t) - (thickness . 2) - (X-offset . ,ly:self-alignment-interface::centered-on-x-parent) + (X-extent . ,ly:axis-group-interface::width) + (Y-extent . ,ly:axis-group-interface::height) (meta . ((class . Item) (interfaces . (ambitus-interface - staff-symbol-referencer-interface - font-interface)))))) + axis-group-interface + break-aligned-interface)))))) + (AmbitusAccidental . ( + (direction . ,LEFT) (font-family . music) + (glyph-name-alist . ,standard-alteration-glyph-name-alist) (padding . 0.5) - (X-offset . ,ly:side-position-interface::x-aligned-side) - (direction . ,LEFT) + (side-axis . ,X) (stencil . ,ly:accidental-interface::print) + (X-offset . ,ly:side-position-interface::x-aligned-side) (Y-extent . ,ly:accidental-interface::height) - (glyph-name-alist . ,standard-alteration-glyph-name-alist) - (side-axis . ,X) (meta . ((class . Item) - (interfaces . ( - accidental-interface + (interfaces . (accidental-interface break-aligned-interface - side-position-interface - font-interface)))))) + font-interface + side-position-interface)))))) + + (AmbitusLine + . ( + (join-heads . #t) + (stencil . ,ly:ambitus::print) + (thickness . 2) + (X-offset . ,ly:self-alignment-interface::centered-on-x-parent) + (meta . ((class . Item) + (interfaces . (ambitus-interface + font-interface + staff-symbol-referencer-interface)))))) (AmbitusNoteHead . ( (duration-log . 2) - (stencil . ,ly:note-head::print) (glyph-name . ,note-head::calc-glyph-name) + (stencil . ,ly:note-head::print) (Y-offset . ,ly:staff-symbol-referencer::callback) (meta . ((class . Item) - (interfaces . (font-interface + (interfaces . (ambitus-interface + font-interface + ledgered-interface note-head-interface - ambitus-interface - staff-symbol-referencer-interface rhythmic-head-interface - ledgered-interface)))))) + staff-symbol-referencer-interface)))))) (Arpeggio - . ((X-extent . ,ly:arpeggio::width) - (stencil . ,ly:arpeggio::print) - (Y-offset . ,ly:staff-symbol-referencer::callback) - (X-offset . ,ly:side-position-interface::x-aligned-side) + . ( (direction . ,LEFT) - (positions . ,ly:arpeggio::calc-positions) (padding . 0.5) + (positions . ,ly:arpeggio::calc-positions) (script-priority . 0) (side-axis . ,X) (staff-position . 0.0) + (stencil . ,ly:arpeggio::print) + (X-extent . ,ly:arpeggio::width) + (X-offset . ,ly:side-position-interface::x-aligned-side) (Y-extent . ,ly:arpeggio::height) + (Y-offset . ,ly:staff-symbol-referencer::callback) (meta . ((class . Item) (interfaces . (arpeggio-interface - staff-symbol-referencer-interface + font-interface side-position-interface - font-interface)))))) + staff-symbol-referencer-interface)))))) - (BalloonTextItem - . ((stencil . ,ly:balloon-interface::print) - (text . ,(grob::calc-property-by-copy 'text)) - (X-offset . ,(grob::calc-property-by-copy 'X-offset)) - (Y-offset . ,(grob::calc-property-by-copy 'Y-offset)) + (BalloonTextItem + . ( + (stencil . ,ly:balloon-interface::print) + (text . ,(grob::calc-property-by-copy 'text)) + (X-offset . ,(grob::calc-property-by-copy 'X-offset)) + (Y-offset . ,(grob::calc-property-by-copy 'Y-offset)) (meta . ((class . Item) (interfaces . (balloon-interface - text-interface - font-interface)))))) + font-interface + text-interface)))))) + (BarLine . ( - (break-align-symbol . staff-bar) + (allow-span-bar . #t) + (bar-extent . ,ly:bar-line::calc-bar-extent) + (bar-size . ,ly:bar-line::calc-bar-size) (break-align-anchor . ,ly:bar-line::calc-anchor) - (glyph . "|") - (gap . 0.4) - (layer . 0) + (break-align-symbol . staff-bar) (break-visibility . ,bar-line::calc-break-visibility) - (non-musical . #t) - (stencil . ,ly:bar-line::print) + (gap . 0.4) + (glyph . "|") (glyph-name . ,bar-line::calc-glyph-name) - (bar-size . ,ly:bar-line::calc-bar-size) - (bar-extent . ,ly:bar-line::calc-bar-extent) - (allow-span-bar . #t) - - (space-alist . ( - (time-signature . (extra-space . 0.75)) - (custos . (minimum-space . 2.0)) - (clef . (minimum-space . 1.0)) - (key-signature . (extra-space . 1.0)) - (key-cancellation . (extra-space . 1.0)) - (first-note . (fixed-space . 1.3)) - (next-note . (semi-fixed-space . 0.9)) - (right-edge . (extra-space . 0.0)))) ;; ;; Ross. page 151 lists other values, we opt for a leaner look @@ -208,6 +196,19 @@ (thin-kern . 3.0) (hair-thickness . 1.9) (thick-thickness . 6.0) + + (layer . 0) + (non-musical . #t) + (space-alist . ( + (time-signature . (extra-space . 0.75)) + (custos . (minimum-space . 2.0)) + (clef . (minimum-space . 1.0)) + (key-signature . (extra-space . 1.0)) + (key-cancellation . (extra-space . 1.0)) + (first-note . (fixed-space . 1.3)) + (next-note . (semi-fixed-space . 0.9)) + (right-edge . (extra-space . 0.0)))) + (stencil . ,ly:bar-line::print) (meta . ((class . Item) (interfaces . (bar-line-interface break-aligned-interface @@ -215,74 +216,74 @@ (BarNumber . ( - (stencil . ,ly:text-interface::print) - (non-musical . #t) + ;; want the bar number before the clef at line start. + (break-align-symbols . (left-edge staff-bar)) + (break-visibility . ,begin-of-line-visible) - (padding . 1.0) (direction . ,UP) (font-family . roman) (font-size . -2) - (Y-offset . ,ly:side-position-interface::y-aligned-side) - (side-axis . ,Y) + (non-musical . #t) (outside-staff-priority . 100) + (padding . 1.0) + (self-alignment-X . ,RIGHT) + (side-axis . ,Y) + (stencil . ,ly:text-interface::print) (X-offset . ,(ly:make-simple-closure `(,+ ,(ly:make-simple-closure (list ly:break-alignable-interface::self-align-callback)) ,(ly:make-simple-closure (list ly:self-alignment-interface::x-aligned-on-self))))) - - (self-alignment-X . ,RIGHT) - - ;; want the bar number before the clef at line start. - (break-align-symbols . (left-edge staff-bar)) + (Y-offset . ,ly:side-position-interface::y-aligned-side) (meta . ((class . Item) - (interfaces . (side-position-interface - text-interface - break-alignable-interface + (interfaces . (break-alignable-interface + font-interface self-alignment-interface - font-interface)))))) + side-position-interface + text-interface)))))) (BassFigure . ( (stencil . ,ly:text-interface::print) (meta . ((class . Item) - (interfaces . (text-interface + (interfaces . (bass-figure-interface + font-interface rhythmic-grob-interface - bass-figure-interface - font-interface)))))) + text-interface)))))) (BassFigureAlignment . ( (axes . (,Y)) + (padding . 0.2) + (positioning-done . ,ly:align-interface::align-to-minimum-distances) + (stacking-dir . ,DOWN) (threshold . (2 . 1000)) - (positioning-done . ,ly:align-interface::calc-positioning-done) (Y-extent . ,ly:axis-group-interface::height) - (stacking-dir . ,DOWN) - (padding . 0.2) (meta . ((class . Spanner) (interfaces . (align-interface - bass-figure-alignment-interface - axis-group-interface)))))) + axis-group-interface + bass-figure-alignment-interface)))))) (BassFigureAlignmentPositioning - . ((Y-offset . ,ly:side-position-interface::y-aligned-side) - (side-axis . ,Y) - (direction . ,UP) - (Y-extent . ,ly:axis-group-interface::height) + . ( (axes . (,Y)) - (staff-padding . 1.0) + (direction . ,UP) (padding . 0.5) + (side-axis . ,Y) + (staff-padding . 1.0) + (Y-extent . ,ly:axis-group-interface::height) + (Y-offset . ,ly:side-position-interface::y-aligned-side) (meta . ((class . Spanner) - (interfaces . (side-position-interface - axis-group-interface)))))) - + (interfaces . (axis-group-interface + side-position-interface)))))) + (BassFigureBracket . ( + (edge-height . (0.2 . 0.2)) (stencil . ,ly:enclosing-bracket::print) (X-extent . ,ly:enclosing-bracket::width) - (edge-height . (0.2 . 0.2)) (meta . ((class . Item) (interfaces . (enclosing-bracket-interface)))))) @@ -295,10 +296,10 @@ (BassFigureLine . ( + (adjacent-pure-heights . ,ly:axis-group-interface::adjacent-pure-heights) (axes . (,Y)) - (Y-extent . ,ly:axis-group-interface::height) (vertical-skylines . ,ly:axis-group-interface::calc-skylines) - (adjacent-pure-heights . ,ly:axis-group-interface::adjacent-pure-heights) + (Y-extent . ,ly:axis-group-interface::height) (meta . ((class . Spanner) (interfaces . (axis-group-interface)))))) @@ -307,43 +308,10 @@ . ( ;; todo: clean this up a bit: the list is getting ;; rather long. - (gap . 0.8) - (positions . ,(ly:make-simple-closure - (ly:make-simple-closure - (list chain-grob-member-functions - `(,cons 0 0) - ly:beam::calc-least-squares-positions - ly:beam::slope-damping - ly:beam::shift-region-to-valid - ly:beam::quanting - )))) - ;; this is a hack to set stem lengths, if positions is set. - (quantized-positions . ,ly:beam::set-stem-lengths) - (concaveness . ,ly:beam::calc-concaveness) - (direction . ,ly:beam::calc-direction) - (shorten . ,ly:beam::calc-stem-shorten) - (beaming . ,ly:beam::calc-beaming) - (stencil . ,ly:beam::print) - (clip-edges . #t) - (cross-staff . ,ly:beam::calc-cross-staff) - (details - .( - (secondary-beam-demerit . 10) - (stem-length-demerit-factor . 5) - (region-size . 2) - (beam-eps . 0.001) - (stem-length-limit-penalty . 5000) - (damping-direction-penalty . 800) - (hint-direction-penalty . 20) - (musical-direction-factor . 400) - (ideal-slope-factor . 10) - (round-to-zero-slope . 0.02))) - ;; TODO: should be in SLT. - (thickness . 0.48) ; in staff-space - (neutral-direction . ,DOWN) + (auto-knee-gap . 5.5) - ;; Whe have some unreferenced problems here. + ;; We have some unreferenced problems here. ;; ;; If we shorten beamed stems less than normal stems (1 staff-space), ;; or high order less than 8th beams, patterns like @@ -358,33 +326,79 @@ ;; isolated shortened beams look nice and a bit shortened, ;; sadly possibly breaking patterns with high order beams. (beamed-stem-shorten . (1.0 0.5 0.25)) + + (beaming . ,ly:beam::calc-beaming) + (clip-edges . #t) + (concaveness . ,ly:beam::calc-concaveness) + (cross-staff . ,ly:beam::calc-cross-staff) (damping . 1) - (auto-knee-gap . 5.5) + (details + .( + (secondary-beam-demerit . 10) + (stem-length-demerit-factor . 5) + (region-size . 2) + (beam-eps . 0.001) + (stem-length-limit-penalty . 5000) + (damping-direction-penalty . 800) + (hint-direction-penalty . 20) + (musical-direction-factor . 400) + (ideal-slope-factor . 10) + (round-to-zero-slope . 0.02))) + (direction . ,ly:beam::calc-direction) ;; only for debugging. (font-family . roman) + + (gap . 0.8) + (neutral-direction . ,DOWN) + (positions . ,(ly:make-simple-closure + (ly:make-simple-closure + (list chain-grob-member-functions + `(,cons 0 0) + ly:beam::calc-least-squares-positions + ly:beam::slope-damping + ly:beam::shift-region-to-valid + ly:beam::quanting + )))) + + ;; this is a hack to set stem lengths, if positions is set. + (quantized-positions . ,ly:beam::set-stem-lengths) + + (shorten . ,ly:beam::calc-stem-shorten) + (stencil . ,ly:beam::print) + + ;; TODO: should be in SLT. + (thickness . 0.48) ; in staff-space + (meta . ((class . Spanner) - (object-callbacks . ((normal-stems . ,ly:beam::calc-normal-stems))) - (interfaces . (staff-symbol-referencer-interface - unbreakable-spanner-interface - beam-interface - font-interface)))))) + (object-callbacks . ((normal-stems . ,ly:beam::calc-normal-stems))) + (interfaces . (beam-interface + font-interface + staff-symbol-referencer-interface + unbreakable-spanner-interface)))))) (BendAfter . ( - (stencil . ,bend::print) (minimum-length . 0.5) + (stencil . ,bend::print) (thickness . 2.0) (meta . ((class . Spanner) - (interfaces . (spanner-interface - bend-after-interface)))))) + (interfaces . (bend-after-interface + spanner-interface)))))) - (BreakAlignment + (BreakAlignGroup . ( - (non-musical . #t) - (stacking-dir . 1) - (positioning-done . ,ly:break-alignment-interface::calc-positioning-done) + (axes . (,X)) + (break-align-anchor . ,ly:break-aligned-interface::calc-average-anchor) + (break-visibility . ,ly:break-aligned-interface::calc-break-visibility) (X-extent . ,ly:axis-group-interface::width) + (meta . ((class . Item) + (interfaces . (axis-group-interface + break-aligned-interface)))))) + + (BreakAlignment + . ( + (axes . (,X)) (break-align-orders . ;; end of line #(( left-edge @@ -420,24 +434,18 @@ staff-bar time-signature custos))) - (axes . (,X)) - (meta . ((class . Item) - (interfaces . (break-alignment-interface - axis-group-interface)))))) - - (BreakAlignGroup - . ( - (axes . (,X)) + (non-musical . #t) + (positioning-done . ,ly:break-alignment-interface::calc-positioning-done) + (stacking-dir . 1) (X-extent . ,ly:axis-group-interface::width) - (break-align-anchor . ,ly:break-aligned-interface::calc-average-anchor) - (break-visibility . ,ly:break-aligned-interface::calc-break-visibility) (meta . ((class . Item) - (interfaces . (break-aligned-interface - axis-group-interface)))))) + (interfaces . (axis-group-interface + break-alignment-interface)))))) (BreathingSign . ( (break-align-symbol . breathing-sign) + (break-visibility . ,begin-of-line-invisible) (non-musical . #t) (space-alist . ( (ambitus . (extra-space . 2.0)) @@ -451,23 +459,34 @@ (stencil . ,ly:text-interface::print) (text . ,(make-musicglyph-markup "scripts.rcomma")) (Y-offset . ,ly:breathing-sign::offset-callback) - (break-visibility . ,begin-of-line-invisible) (meta . ((class . Item) (interfaces . (break-aligned-interface breathing-sign-interface - text-interface - font-interface)))))) + font-interface + text-interface)))))) + + (ChordName + . ( + (after-line-breaking . ,ly:chord-name::after-line-breaking) + (font-family . sans) + (font-size . 1.5) + (stencil . ,ly:text-interface::print) + (word-space . 0.0) + (meta . ((class . Item) + (interfaces . (chord-name-interface + font-interface + rhythmic-grob-interface + text-interface)))))) (Clef . ( - (stencil . ,ly:clef::print) - (glyph-name . ,ly:clef::calc-glyph-name) - (non-musical . #t) (avoid-slur . inside) - (font-family . music) - (break-align-symbol . clef) (break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor) + (break-align-symbol . clef) (break-visibility . ,begin-of-line-visible) + (font-family . music) + (glyph-name . ,ly:clef::calc-glyph-name) + (non-musical . #t) (space-alist . ((ambitus . (extra-space . 2.0)) (staff-bar . (extra-space . 0.7)) (key-cancellation . (minimum-space . 3.5)) @@ -476,123 +495,118 @@ (first-note . (minimum-fixed-space . 5.0)) (next-note . (extra-space . 0.5)) (right-edge . (extra-space . 0.5)))) + (stencil . ,ly:clef::print) (Y-offset . ,ly:staff-symbol-referencer::callback) (meta . ((class . Item) - (interfaces . (clef-interface - staff-symbol-referencer-interface + (interfaces . (break-aligned-interface + clef-interface font-interface - break-aligned-interface)))))) - - (ClusterSpannerBeacon - . ( - (Y-extent . ,ly:cluster-beacon::height) - (meta . ((class . Item) - (interfaces . (rhythmic-grob-interface - cluster-beacon-interface)))))) + staff-symbol-referencer-interface)))))) (ClusterSpanner . ( - (springs-and-rods . ,ly:spanner::set-spacing-rods) - (stencil . ,ly:cluster::print) + (cross-staff . ,ly:cluster::calc-cross-staff) (minimum-length . 0.0) (padding . 0.25) - (cross-staff . ,ly:cluster::calc-cross-staff) + (springs-and-rods . ,ly:spanner::set-spacing-rods) + (stencil . ,ly:cluster::print) (style . ramp) (meta . ((class . Spanner) (interfaces . (cluster-interface)))))) - (ChordName + (ClusterSpannerBeacon . ( - (stencil . ,ly:text-interface::print) - (after-line-breaking . ,ly:chord-name::after-line-breaking) - (word-space . 0.0) - (font-family . sans) - (font-size . 1.5) + (Y-extent . ,ly:cluster-beacon::height) (meta . ((class . Item) - (interfaces . (font-interface - rhythmic-grob-interface - text-interface - chord-name-interface)))))) + (interfaces . (cluster-beacon-interface + rhythmic-grob-interface)))))) (CombineTextScript . ( - (stencil . ,ly:text-interface::print) - (extra-spacing-width . (+inf.0 . -inf.0)) - (Y-offset . ,ly:side-position-interface::y-aligned-side) - (X-offset . ,ly:self-alignment-interface::x-aligned-on-self) + (avoid-slur . outside) + (baseline-skip . 2) (direction . ,UP) + (extra-spacing-width . (+inf.0 . -inf.0)) + (font-series . bold) (padding . 0.5) - (staff-padding . 0.5) (script-priority . 200) - ;; todo: add X self alignment? - (baseline-skip . 2) (side-axis . ,Y) - (avoid-slur . outside) - (font-series . bold) + (staff-padding . 0.5) + ;; todo: add X self alignment? + (stencil . ,ly:text-interface::print) + (X-offset . ,ly:self-alignment-interface::x-aligned-on-self) + (Y-offset . ,ly:side-position-interface::y-aligned-side) (meta . ((class . Item) - (interfaces . (text-script-interface - text-interface + (interfaces . (font-interface side-position-interface - font-interface)))))) + text-interface + text-script-interface)))))) (Custos . ( (break-align-symbol . custos) - (non-musical . #t) - (stencil . ,ly:custos::print) (break-visibility . ,end-of-line-visible) - (style . vaticana) (neutral-direction . ,DOWN) - (Y-offset . ,ly:staff-symbol-referencer::callback) + (non-musical . #t) (space-alist . ( (first-note . (minimum-fixed-space . 0.0)) (right-edge . (extra-space . 0.1)))) + (stencil . ,ly:custos::print) + (style . vaticana) + (Y-offset . ,ly:staff-symbol-referencer::callback) (meta . ((class . Item) - (interfaces . (custos-interface - staff-symbol-referencer-interface + (interfaces . (break-aligned-interface + custos-interface font-interface - break-aligned-interface)))))) + staff-symbol-referencer-interface)))))) (DotColumn . ( (axes . (,X)) (direction . ,RIGHT) - (positioning-done . ,ly:dot-column::calc-positioning-done) + (positioning-done . ,ly:dot-column::calc-positioning-done) (X-extent . ,ly:axis-group-interface::width) (meta . ((class . Item) - (interfaces . (dot-column-interface - axis-group-interface)))))) + (interfaces . (axis-group-interface + dot-column-interface)))))) (Dots . ( - (stencil . ,ly:dots::print) (dot-count . ,dots::calc-dot-count) (staff-position . ,dots::calc-staff-position) + (stencil . ,ly:dots::print) (meta . ((class . Item) - (interfaces . (font-interface - staff-symbol-referencer-interface - dots-interface)))))) + (interfaces . (dots-interface + font-interface + staff-symbol-referencer-interface)))))) (DoublePercentRepeat . ( - (stencil . ,ly:percent-repeat-item-interface::double-percent) - (non-musical . #t) - (slope . 1.0) + (break-align-symbol . staff-bar) + (break-visibility . ,begin-of-line-invisible) (dot-negative-kern . 0.75) - (slash-negative-kern . 1.6) (font-encoding . fetaMusic) - (width . 2.0) + (non-musical . #t) + (slash-negative-kern . 1.6) + (slope . 1.0) + (stencil . ,ly:percent-repeat-item-interface::double-percent) (thickness . 0.48) - (break-align-symbol . staff-bar) - (break-visibility . ,begin-of-line-invisible) + (width . 2.0) (meta . ((class . Item) - (interfaces . (font-interface - break-aligned-interface + (interfaces . (break-aligned-interface + font-interface percent-repeat-interface percent-repeat-item-interface)))))) (DoublePercentRepeatCounter . ( + (direction . ,UP) + (font-encoding . fetaNumber) + (font-size . -2) + (padding . 0.2) + (self-alignment-X . ,CENTER) + (side-axis . ,Y) + (staff-padding . 0.25) (stencil . ,ly:text-interface::print) (X-offset . ,(ly:make-simple-closure `(,+ @@ -601,35 +615,28 @@ ,(ly:make-simple-closure (list ly:self-alignment-interface::x-aligned-on-self))))) (Y-offset . ,ly:side-position-interface::y-aligned-side) - (font-encoding . fetaNumber) - (self-alignment-X . ,CENTER) - (font-size . -2) - (direction . ,UP) - (padding . 0.2) - (staff-padding . 0.25) - (side-axis . ,Y) (meta . ((class . Item) - (interfaces . (side-position-interface - self-alignment-interface - percent-repeat-item-interface + (interfaces . (font-interface percent-repeat-interface - font-interface + percent-repeat-item-interface + self-alignment-interface + side-position-interface text-interface)))))) (DynamicLineSpanner . ( (axes . (,Y)) - (Y-offset . ,ly:side-position-interface::y-aligned-side) - (staff-padding . 0.1) - (padding . 0.6) - (slur-padding . 0.3) - (minimum-space . 1.2) + (cross-staff . ,ly:side-position-interface::calc-cross-staff) (direction . ,DOWN) - (side-axis . ,Y) + (minimum-space . 1.2) (outside-staff-priority . 250) - (Y-extent . ,ly:axis-group-interface::height) + (padding . 0.6) + (side-axis . ,Y) + (slur-padding . 0.3) + (staff-padding . 0.1) (X-extent . ,ly:axis-group-interface::width) - (cross-staff . ,ly:side-position-interface::calc-cross-staff) + (Y-extent . ,ly:axis-group-interface::height) + (Y-offset . ,ly:side-position-interface::y-aligned-side) (meta . ((class . Spanner) (interfaces . (axis-group-interface dynamic-interface @@ -641,35 +648,27 @@ ;; todo. - (stencil . ,ly:text-interface::print) (direction . ,ly:script-interface::calc-direction) - (positioning-done . ,ly:script-interface::calc-positioning-done) - - (X-offset . ,ly:self-alignment-interface::x-aligned-on-self) - (self-alignment-X . ,CENTER) - (Y-offset . ,ly:self-alignment-interface::y-aligned-on-self) - (self-alignment-Y . ,CENTER) - (font-series . bold) + (extra-spacing-width . (+inf.0 . -inf.0)) (font-encoding . fetaDynamic) + (font-series . bold) (font-shape . italic) - (extra-spacing-width . (+inf.0 . -inf.0)) (outside-staff-priority . 250) + (positioning-done . ,ly:script-interface::calc-positioning-done) + (self-alignment-X . ,CENTER) + (self-alignment-Y . ,CENTER) + (stencil . ,ly:text-interface::print) + (X-offset . ,ly:self-alignment-interface::x-aligned-on-self) + (Y-offset . ,ly:self-alignment-interface::y-aligned-on-self) (meta . ((class . Item) - (interfaces . (font-interface - text-interface + (interfaces . (dynamic-interface + font-interface + script-interface self-alignment-interface - dynamic-interface - script-interface)))))) + text-interface)))))) (DynamicTextSpanner . ( - ;; rather ugh with NCSB - ;; (font-series . bold) - (font-shape . italic) - (style . dashed-line) - - ;; make sure the spanner doesn't get too close to notes - (minimum-Y-extent . (-1 . 1)) (bound-details . ((right . ((attach-dir . ,LEFT) (Y . 0) (padding . 0.75) @@ -677,7 +676,7 @@ (right-broken . ((attach-dir . ,RIGHT) (padding . 0.0) )) - + (left . ((attach-dir . ,LEFT) (Y . 0) (stencil-offset . (0 . -0.5)) @@ -686,70 +685,76 @@ (left-broken . ((attach-dir . ,RIGHT) )) )) - (stencil . ,ly:line-spanner::print) - (left-bound-info . ,ly:line-spanner::calc-left-bound-info-and-text) - (right-bound-info . ,ly:line-spanner::calc-right-bound-info) + (dash-fraction . 0.2) + (dash-period . 3.0) + + ;; rather ugh with NCSB + ;; (font-series . bold) + (font-shape . italic) ;; need to blend with dynamic texts. (font-size . 1) - (dash-fraction . 0.2) - (dash-period . 3.0) + + (left-bound-info . ,ly:line-spanner::calc-left-bound-info-and-text) + + ;; make sure the spanner doesn't get too close to notes + (minimum-Y-extent . (-1 . 1)) + + (right-bound-info . ,ly:line-spanner::calc-right-bound-info) + (stencil . ,ly:line-spanner::print) + (style . dashed-line) (meta . ((class . Spanner) - (interfaces . (font-interface - text-interface - line-spanner-interface - line-interface - dynamic-interface + (interfaces . (dynamic-interface dynamic-text-spanner-interface - spanner-interface)))))) + font-interface + line-interface + line-spanner-interface + spanner-interface + text-interface)))))) + - (Fingering . ( ;; sync with TextScript (?) - (padding . 0.5) (avoid-slur . around) - (slur-padding . 0.2) - (staff-padding . 0.5) - (self-alignment-X . ,CENTER) - (self-alignment-Y . ,CENTER) - (script-priority . 100) - (stencil . ,ly:text-interface::print) - (direction . ,ly:script-interface::calc-direction) - (positioning-done . ,ly:script-interface::calc-positioning-done) (cross-staff . ,ly:side-position-interface::calc-cross-staff) - - (text . ,fingering::calc-text) + (direction . ,ly:script-interface::calc-direction) (font-encoding . fetaNumber) (font-size . -5) ; don't overlap when next to heads. + (padding . 0.5) + (positioning-done . ,ly:script-interface::calc-positioning-done) + (script-priority . 100) + (self-alignment-X . ,CENTER) + (self-alignment-Y . ,CENTER) + (slur-padding . 0.2) + (staff-padding . 0.5) + (stencil . ,ly:text-interface::print) + (text . ,fingering::calc-text) (meta . ((class . Item) (interfaces . (finger-interface font-interface - text-script-interface - text-interface + self-alignment-interface side-position-interface - self-alignment-interface)))))) + text-interface + text-script-interface)))))) (FretBoard - . ((stencil . ,fret-board::calc-stencil) + . ( (after-line-breaking . ,ly:chord-name::after-line-breaking) (fret-diagram-details . ((finger-code . below-string))) + (stencil . ,fret-board::calc-stencil) (meta . ((class . Item) - (interfaces . (fret-diagram-interface - rhythmic-grob-interface - chord-name-interface - font-interface)))))) + (interfaces . (chord-name-interface + font-interface + fret-diagram-interface + rhythmic-grob-interface)))))) (Glissando . ( - (style . line) - (gap . 0.5) - (zigzag-width . 0.75) - (X-extent . #f) - (Y-extent . #f) + (after-line-breaking . ,ly:spanner::kill-zero-spanned-time) (bound-details . ((right . ((attach-dir . ,CENTER) (padding . 1.5) )) @@ -757,206 +762,217 @@ (padding . 1.5) )) )) - (after-line-breaking . ,ly:spanner::kill-zero-spanned-time) - (stencil . ,ly:line-spanner::print) + (gap . 0.5) (left-bound-info . ,ly:line-spanner::calc-left-bound-info) (right-bound-info . ,ly:line-spanner::calc-right-bound-info) + (stencil . ,ly:line-spanner::print) + (style . line) + (X-extent . #f) + (Y-extent . #f) + (zigzag-width . 0.75) (meta . ((class . Spanner) (interfaces . (line-interface - unbreakable-spanner-interface - line-spanner-interface)))))) + line-spanner-interface + unbreakable-spanner-interface)))))) (GraceSpacing . ( (common-shortest-duration . ,grace-spacing::calc-shortest-duration) - (spacing-increment . 0.8) (shortest-duration-space . 1.6) + (spacing-increment . 0.8) (meta . ((class . Spanner) (interfaces . (grace-spacing-interface spacing-options-interface spanner-interface)))))) - (GridPoint - . ( - (X-extent . (0 . 0)) - (Y-extent . (0 . 0)) - (meta . ((class . Item) - (interfaces . (grid-point-interface)))))) - (GridLine . ( - (X-extent . ,ly:grid-line-interface::width) - (stencil . ,ly:grid-line-interface::print) + (layer . 0) (self-alignment-X . ,CENTER) + (stencil . ,ly:grid-line-interface::print) + (X-extent . ,ly:grid-line-interface::width) (X-offset . ,(ly:make-simple-closure `(,+ ,(ly:make-simple-closure (list ly:self-alignment-interface::centered-on-x-parent)) ,(ly:make-simple-closure (list ly:self-alignment-interface::x-aligned-on-self))))) - (layer . 0) (meta . ((class . Item) - (interfaces . (self-alignment-interface - grid-line-interface)))))) + (interfaces . (grid-line-interface + self-alignment-interface)))))) + + (GridPoint + . ( + (X-extent . (0 . 0)) + (Y-extent . (0 . 0)) + (meta . ((class . Item) + (interfaces . (grid-point-interface)))))) (Hairpin . ( - (stencil . ,ly:hairpin::print) - (springs-and-rods . ,ly:spanner::set-spacing-rods) (after-line-breaking . ,ly:spanner::kill-zero-spanned-time) - (grow-direction . ,hairpin::calc-grow-direction) + (bound-padding . 1.0) (circled-tip . #f) - (to-barline . #t) - (thickness . 1.0) + (grow-direction . ,hairpin::calc-grow-direction) (height . 0.6666) (minimum-length . 2.0) - (bound-padding . 1.0) (self-alignment-Y . ,CENTER) - (Y-offset . ,ly:self-alignment-interface::y-aligned-on-self) + (springs-and-rods . ,ly:spanner::set-spacing-rods) + (stencil . ,ly:hairpin::print) + (thickness . 1.0) + (to-barline . #t) (Y-extent . ,ly:hairpin::height) + (Y-offset . ,ly:self-alignment-interface::y-aligned-on-self) (meta . ((class . Spanner) - (interfaces . (hairpin-interface + (interfaces . (dynamic-interface + hairpin-interface line-interface self-alignment-interface - dynamic-interface spanner-interface)))))) + (HarmonicParenthesesItem + . ( + (padding . 0) + (stencil . ,parentheses-item::print) + (stencils . ,parentheses-item::calc-angled-bracket-stencils) + (meta . ((class . Item) + (interfaces . (font-interface + parentheses-interface)))))) + (HorizontalBracket . ( - (thickness . 1.0) - (stencil . ,ly:horizontal-bracket::print) - (Y-offset . ,ly:side-position-interface::y-aligned-side) + (bracket-flare . (0.5 . 0.5)) (connect-to-neighbor . ,ly:tuplet-bracket::calc-connect-to-neighbors) - - (padding . 0.2) - (staff-padding . 0.2) (direction . ,DOWN) + (padding . 0.2) (side-axis . ,Y) - (bracket-flare . (0.5 . 0.5)) + (staff-padding . 0.2) + (stencil . ,ly:horizontal-bracket::print) + (thickness . 1.0) + (Y-offset . ,ly:side-position-interface::y-aligned-side) (meta . ((class . Spanner) (interfaces . (horizontal-bracket-interface - side-position-interface line-interface + side-position-interface spanner-interface)))))) (InstrumentName . ( + (direction . ,LEFT) (padding . 0.3) + (self-alignment-X . ,CENTER) + (self-alignment-Y . ,CENTER) (stencil . ,ly:system-start-text::print) (X-offset . ,ly:side-position-interface::x-aligned-side) - (direction . ,LEFT) - (self-alignment-Y . ,CENTER) - (self-alignment-X . ,CENTER) (meta . ((class . Spanner) - (interfaces . (system-start-text-interface - side-position-interface + (interfaces . (font-interface self-alignment-interface - font-interface)))))) + side-position-interface + system-start-text-interface)))))) (InstrumentSwitch . ( + (direction . ,UP) + (extra-spacing-width . (+inf.0 . -inf.0)) + (outside-staff-priority . 500) (padding . 0.5) + (self-alignment-X . ,LEFT) + (side-axis . ,Y) + (staff-padding . 0.5) (stencil . ,ly:text-interface::print) - (Y-offset . ,ly:side-position-interface::y-aligned-side) (X-offset . ,ly:self-alignment-interface::x-aligned-on-self) - (staff-padding . 0.5) - (direction . ,UP) - (side-axis . ,Y) - (self-alignment-X . ,LEFT) - (outside-staff-priority . 500) - (extra-spacing-width . (+inf.0 . -inf.0)) + (Y-offset . ,ly:side-position-interface::y-aligned-side) (meta . ((class . Item) - (interfaces . (side-position-interface + (interfaces . (font-interface self-alignment-interface - text-interface - font-interface)))))) + side-position-interface + text-interface)))))) + - (KeyCancellation . ( - (stencil . ,ly:key-signature-interface::print) + (break-align-symbol . key-cancellation) + (break-visibility . ,begin-of-line-invisible) (glyph-name-alist . ,cancellation-glyph-name-alist) + (non-musical . #t) (space-alist . ( (time-signature . (extra-space . 1.25)) (staff-bar . (extra-space . 0.6)) (key-signature . (extra-space . 0.5)) (right-edge . (extra-space . 0.5)) (first-note . (fixed-space . 2.5)))) + (stencil . ,ly:key-signature-interface::print) (Y-offset . ,ly:staff-symbol-referencer::callback) - (break-align-symbol . key-cancellation) - (break-visibility . ,begin-of-line-invisible) - (non-musical . #t) (meta . ((class . Item) - (interfaces . (key-cancellation-interface - key-signature-interface - staff-symbol-referencer-interface + (interfaces . (break-aligned-interface font-interface - break-aligned-interface)))))) + key-cancellation-interface + key-signature-interface + staff-symbol-referencer-interface)))))) (KeySignature . ( - (stencil . ,ly:key-signature-interface::print) (avoid-slur . inside) + (break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor) + (break-align-symbol . key-signature) + (break-visibility . ,begin-of-line-visible) (glyph-name-alist . ,standard-alteration-glyph-name-alist) + (non-musical . #t) (space-alist . ( (time-signature . (extra-space . 1.15)) (staff-bar . (extra-space . 1.1)) (right-edge . (extra-space . 0.5)) (first-note . (fixed-space . 2.5)))) + (stencil . ,ly:key-signature-interface::print) (Y-offset . ,ly:staff-symbol-referencer::callback) - (break-align-symbol . key-signature) - (break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor) - (break-visibility . ,begin-of-line-visible) - (non-musical . #t) (meta . ((class . Item) - (interfaces . (key-signature-interface - staff-symbol-referencer-interface + (interfaces . (break-aligned-interface font-interface - break-aligned-interface)))))) - - + key-signature-interface + staff-symbol-referencer-interface)))))) + + (LaissezVibrerTie . ( - (stencil . ,ly:tie::print) (control-points . ,ly:semi-tie::calc-control-points) - (direction . ,ly:tie::calc-direction) (details . ((ratio . 0.333) (height-limit . 1.0))) + (direction . ,ly:tie::calc-direction) (head-direction . ,LEFT) + (stencil . ,ly:tie::print) (thickness . 1.0) (meta . ((class . Item) (interfaces . (semi-tie-interface)))))) (LaissezVibrerTieColumn . ( - (X-extent . #f) - (Y-extent . #f) (head-direction . ,LEFT) (positioning-done . ,ly:semi-tie-column::calc-positioning-done) + (X-extent . #f) + (Y-extent . #f) (meta . ((class . Item) (interfaces . (semi-tie-column-interface)))))) (LedgerLineSpanner . ( + (layer . 0) + (length-fraction . 0.25) + (minimum-length-fraction . 0.25) (springs-and-rods . ,ly:ledger-line-spanner::set-spacing-rods) (stencil . ,ly:ledger-line-spanner::print) (X-extent . #f) (Y-extent . #f) - (minimum-length-fraction . 0.25) - (length-fraction . 0.25) - (layer . 0) (meta . ((class . Spanner) (interfaces . (ledger-line-spanner-interface)))))) (LeftEdge . ( - (break-align-symbol . left-edge) (break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor) - (X-extent . (0 . 0)) - (non-musical . #t) + (break-align-symbol . left-edge) (break-visibility . ,center-invisible) + (non-musical . #t) (space-alist . ( (custos . (extra-space . 0.0)) (ambitus . (extra-space . 2.0)) @@ -969,6 +985,7 @@ (key-signature . (extra-space . 0.0)) (key-cancellation . (extra-space . 0.0)) )) + (X-extent . (0 . 0)) (meta . ((class . Item) (interfaces . (break-aligned-interface)))))) @@ -977,89 +994,90 @@ ;; ugh. A ligature bracket is totally different from ;; a tuplet bracket. - (padding . 2.0) - (thickness . 1.6) - (edge-height . (0.7 . 0.7)) - (shorten-pair . (-0.2 . -0.2)) + (connect-to-neighbor . ,ly:tuplet-bracket::calc-connect-to-neighbors) + (control-points . ,ly:tuplet-bracket::calc-control-points) (direction . ,UP) + (edge-height . (0.7 . 0.7)) + (padding . 2.0) (positions . ,ly:tuplet-bracket::calc-positions) - (stencil . ,ly:tuplet-bracket::print) + (shorten-pair . (-0.2 . -0.2)) (staff-padding . 0.25) - (connect-to-neighbor . ,ly:tuplet-bracket::calc-connect-to-neighbors) - (control-points . ,ly:tuplet-bracket::calc-control-points) + (stencil . ,ly:tuplet-bracket::print) + (thickness . 1.6) (meta . ((class . Spanner) (interfaces . (line-interface tuplet-bracket-interface)))))) (LyricExtender . ( + (minimum-length . 1.5) (stencil . ,ly:lyric-extender::print) (thickness . 0.8) ; line-thickness - (minimum-length . 1.5) (Y-extent . (0 . 0)) (meta . ((class . Spanner) - (interfaces . (lyric-interface - lyric-extender-interface)))))) + (interfaces . (lyric-extender-interface + lyric-interface)))))) (LyricHyphen . ( - (thickness . 1.3) - (height . 0.42) (dash-period . 10.0) + (height . 0.42) (length . 0.66) - (minimum-length . 0.3) (minimum-distance . 0.1) + (minimum-length . 0.3) (padding . 0.07) (springs-and-rods . ,ly:lyric-hyphen::set-spacing-rods) (stencil . ,ly:lyric-hyphen::print) + (thickness . 1.3) (Y-extent . (0 . 0)) (meta . ((class . Spanner) - (interfaces . (lyric-interface - font-interface + (interfaces . (font-interface lyric-hyphen-interface + lyric-interface spanner-interface)))))) (LyricSpace - . ((minimum-distance . 0.45) - (springs-and-rods . ,ly:lyric-hyphen::set-spacing-rods) + . ( + (minimum-distance . 0.45) (padding . 0.0) - (Y-extent . #f) + (springs-and-rods . ,ly:lyric-hyphen::set-spacing-rods) (X-extent . #f) + (Y-extent . #f) (meta . ((class . Spanner) - (interfaces . (spanner-interface - lyric-hyphen-interface)))))) - + (interfaces . (lyric-hyphen-interface + spanner-interface)))))) + (LyricText . ( - (stencil . ,lyric-text::print) - (text . ,(grob::calc-property-by-copy 'text)) - (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent) - (self-alignment-X . ,CENTER) - (word-space . 0.6) + (extra-spacing-width . (0.0 . 0.0)) (font-series . bold-narrow) (font-size . 1.0) - (extra-spacing-width . (0.0 . 0.0)) + (self-alignment-X . ,CENTER) + (stencil . ,lyric-text::print) + (text . ,(grob::calc-property-by-copy 'text)) + (word-space . 0.6) + (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent) (meta . ((class . Item) - (interfaces . (rhythmic-grob-interface + (interfaces . (font-interface lyric-syllable-interface + rhythmic-grob-interface self-alignment-interface - text-interface - font-interface)))))) + text-interface)))))) (MeasureGrouping . ( - (Y-offset . ,ly:side-position-interface::y-aligned-side) - (side-axis . ,Y) - (stencil . ,ly:measure-grouping::print) - (padding . 2) (direction . ,UP) - (thickness . 1) (height . 2.0) + (padding . 2) + (side-axis . ,Y) (staff-padding . 3) + (stencil . ,ly:measure-grouping::print) + (thickness . 1) + (Y-offset . ,ly:side-position-interface::y-aligned-side) (meta . ((class . Spanner) - (interfaces . (side-position-interface - measure-grouping-interface)))))) + (interfaces . (measure-grouping-interface + side-position-interface)))))) (MelodyItem . ( @@ -1069,49 +1087,55 @@ (MensuralLigature . ( - (thickness . 1.4) (flexa-width . 2.0) (stencil . ,ly:mensural-ligature::print) + (thickness . 1.4) (meta . ((class . Spanner) - (interfaces . (mensural-ligature-interface - font-interface)))))) + (interfaces . (font-interface + mensural-ligature-interface)))))) (MetronomeMark . ( - (stencil . ,ly:text-interface::print) - (Y-offset . ,ly:side-position-interface::y-aligned-side) (direction . ,UP) - (padding . 0.8) - (side-axis . ,Y) (extra-spacing-width . (+inf.0 . -inf.0)) (outside-staff-priority . 1000) + (padding . 0.8) + (side-axis . ,Y) + (stencil . ,ly:text-interface::print) + (Y-offset . ,ly:side-position-interface::y-aligned-side) (meta . ((class . Item) - (interfaces . (text-interface + (interfaces . (font-interface + metronome-mark-interface side-position-interface - font-interface - metronome-mark-interface)))))) + text-interface)))))) (MultiMeasureRest . ( - (stencil . ,ly:multi-measure-rest::print) - (springs-and-rods . ,ly:multi-measure-rest::set-spacing-rods) - (Y-offset . ,ly:staff-symbol-referencer::callback) - (staff-position . 0) (expand-limit . 10) - (thick-thickness . 6.6) (hair-thickness . 2.0) (padding . 1) + (springs-and-rods . ,ly:multi-measure-rest::set-spacing-rods) + (staff-position . 0) + (stencil . ,ly:multi-measure-rest::print) + (thick-thickness . 6.6) + (Y-offset . ,ly:staff-symbol-referencer::callback) (meta . ((class . Spanner) - (interfaces . (multi-measure-rest-interface + (interfaces . (font-interface multi-measure-interface + multi-measure-rest-interface rest-interface - font-interface staff-symbol-referencer-interface)))))) (MultiMeasureRestNumber . ( (bound-padding . 2.0) + (direction . ,UP) + (font-encoding . fetaNumber) + (padding . 0.4) + (self-alignment-X . ,CENTER) + (side-axis . ,Y) (springs-and-rods . ,ly:multi-measure-rest::set-text-rods) + (staff-padding . 0.4) (stencil . ,ly:text-interface::print) (X-offset . ,(ly:make-simple-closure `(,+ @@ -1120,21 +1144,20 @@ ,(ly:make-simple-closure (list ly:self-alignment-interface::x-centered-on-y-parent))))) (Y-offset . ,ly:side-position-interface::y-aligned-side) - (side-axis . ,Y) - (self-alignment-X . ,CENTER) - (direction . ,UP) - (padding . 0.4) - (staff-padding . 0.4) - (font-encoding . fetaNumber) (meta . ((class . Spanner) - (interfaces . (side-position-interface + (interfaces . (font-interface multi-measure-interface self-alignment-interface - font-interface + side-position-interface text-interface)))))) (MultiMeasureRestText . ( + (direction . ,UP) + (outside-staff-priority . 450) + (padding . 0.2) + (self-alignment-X . ,CENTER) + (staff-padding . 0.25) (stencil . ,ly:text-interface::print) (X-offset . ,(ly:make-simple-closure `(,+ @@ -1143,16 +1166,11 @@ ,(ly:make-simple-closure (list ly:self-alignment-interface::x-aligned-on-self))))) (Y-offset . ,ly:side-position-interface::y-aligned-side) - (self-alignment-X . ,CENTER) - (direction . ,UP) - (padding . 0.2) - (staff-padding . 0.25) - (outside-staff-priority . 450) (meta . ((class . Spanner) - (interfaces . (side-position-interface + (interfaces . (font-interface multi-measure-interface self-alignment-interface - font-interface + side-position-interface text-interface)))))) @@ -1161,194 +1179,180 @@ (allow-loose-spacing . #t) (axes . (,X)) (before-line-breaking . ,ly:paper-column::before-line-breaking) - (X-extent . ,ly:axis-group-interface::width) + (full-measure-extra-space . 1.0) (horizontal-skylines . ,ly:separation-item::calc-skylines) ;; (stencil . ,ly:paper-column::print) - - (non-musical . #t) + (line-break-permission . allow) + (non-musical . #t) (page-break-permission . allow) - (full-measure-extra-space . 1.0) ;; debugging stuff: print column number. ;; (font-size . -6) (font-name . "sans") (Y-extent . #f) + (X-extent . ,ly:axis-group-interface::width) (meta . ((class . Paper_column) - (interfaces . (paper-column-interface - axis-group-interface + (interfaces . (axis-group-interface + font-interface + paper-column-interface separation-item-interface - spaceable-grob-interface - font-interface)))))) + spaceable-grob-interface)))))) (NoteCollision . ( (axes . (,X ,Y)) + (positioning-done . ,ly:note-collision-interface::calc-positioning-done) + (prefer-dotted-right . #t) (X-extent . ,ly:axis-group-interface::width) (Y-extent . ,ly:axis-group-interface::height) - (prefer-dotted-right . #t) - (positioning-done . ,ly:note-collision-interface::calc-positioning-done) (meta . ((class . Item) - (interfaces . (note-collision-interface - axis-group-interface)))))) + (interfaces . (axis-group-interface + note-collision-interface)))))) (NoteColumn . ( (axes . (,X ,Y)) + (horizontal-skylines . ,ly:separation-item::calc-skylines) (X-extent . ,ly:axis-group-interface::width) (Y-extent . ,ly:axis-group-interface::height) - (horizontal-skylines . ,ly:separation-item::calc-skylines) (meta . ((class . Item) (interfaces . (axis-group-interface - separation-item-interface - note-column-interface)))))) + note-column-interface + separation-item-interface)))))) (NoteHead . ( - (stencil . ,ly:note-head::print) (duration-log . ,note-head::calc-duration-log) - (stem-attachment . ,ly:note-head::calc-stem-attachment) (glyph-name . ,note-head::calc-glyph-name) - (Y-offset . ,ly:staff-symbol-referencer::callback) + (stem-attachment . ,ly:note-head::calc-stem-attachment) + (stencil . ,ly:note-head::print) (X-offset . ,ly:note-head::stem-x-shift) + (Y-offset . ,ly:staff-symbol-referencer::callback) (meta . ((class . Item) - (interfaces . (rhythmic-grob-interface - rhythmic-head-interface - font-interface - note-head-interface - ledgered-interface - staff-symbol-referencer-interface + (interfaces . (font-interface gregorian-ligature-interface + ledgered-interface mensural-ligature-interface + note-head-interface + rhythmic-grob-interface + rhythmic-head-interface + staff-symbol-referencer-interface vaticana-ligature-interface)))))) + (NoteName + . ( + (stencil . ,ly:text-interface::print) + (meta . ((class . Item) + (interfaces . (font-interface + note-name-interface + text-interface)))))) + (NoteSpacing . ( - (stem-spacing-correction . 0.5) - (same-direction-correction . 0.25) - (space-to-barline . #t) ;; Changed this from 0.75. ;; If you ever change this back, please document! --hwn (knee-spacing-correction . 1.0) + (same-direction-correction . 0.25) + (space-to-barline . #t) + (stem-spacing-correction . 0.5) (meta . ((class . Item) - (interfaces . (spacing-interface - note-spacing-interface)))))) - - (NoteName - . ( - (stencil . ,ly:text-interface::print) - (meta . ((class . Item) - (interfaces . (note-name-interface - text-interface - font-interface)))))) + (interfaces . (note-spacing-interface + spacing-interface)))))) (OctavateEight . ( - (self-alignment-X . ,CENTER) (break-visibility . ,begin-of-line-visible) + (font-shape . italic) + (font-size . -4) + (self-alignment-X . ,CENTER) + (staff-padding . 0.2) + (stencil . ,ly:text-interface::print) (X-offset . ,(ly:make-simple-closure `(,+ ,(ly:make-simple-closure (list ly:self-alignment-interface::x-aligned-on-self)) ,(ly:make-simple-closure - (list ly:self-alignment-interface::centered-on-x-parent))))) + (list ly:self-alignment-interface::centered-on-x-parent))))) (Y-offset . ,ly:side-position-interface::y-aligned-side) - (stencil . ,ly:text-interface::print) - (font-shape . italic) - (staff-padding . 0.2) - (font-size . -4) (meta . ((class . Item) - (interfaces . (text-interface + (interfaces . (font-interface self-alignment-interface side-position-interface - font-interface)))))) + text-interface)))))) (OttavaBracket . ( - (Y-offset . ,ly:side-position-interface::y-aligned-side) - (stencil . ,ly:ottava-bracket::print) + (dash-fraction . 0.3) + (direction . ,UP) + (edge-height . (0 . 1.2)) (font-shape . italic) + (minimum-length . 1.0) + (outside-staff-priority . 400) + (padding . 0.5) (shorten-pair . (0.0 . -0.6)) (staff-padding . 1.0) - (padding . 0.5) - (minimum-length . 1.0) + (stencil . ,ly:ottava-bracket::print) (style . dashed-line) - (dash-fraction . 0.3) - (edge-height . (0 . 1.2)) - (direction . ,UP) - (outside-staff-priority . 400) + (Y-offset . ,ly:side-position-interface::y-aligned-side) (meta . ((class . Spanner) - (interfaces . (ottava-bracket-interface + (interfaces . (font-interface horizontal-bracket-interface line-interface + ottava-bracket-interface side-position-interface - font-interface text-interface)))))) (PaperColumn . ( - (axes . (,X)) (allow-loose-spacing . #t) + (axes . (,X)) (before-line-breaking . ,ly:paper-column::before-line-breaking) (horizontal-skylines . ,ly:separation-item::calc-skylines) ;; (stencil . ,ly:paper-column::print) (X-extent . ,ly:axis-group-interface::width) - + ;; debugging ;; (font-size . -6) (font-name . "sans") (Y-extent . #f) (meta . ((class . Paper_column) - (interfaces . (paper-column-interface + (interfaces . (axis-group-interface + font-interface + paper-column-interface separation-item-interface - axis-group-interface - spaceable-grob-interface - font-interface)))))) + spaceable-grob-interface)))))) (ParenthesesItem - . ((stencil . ,parentheses-item::print) - (stencils . ,parentheses-item::calc-parenthesis-stencils) + . ( (font-size . -6) (padding . 0.2) + (stencil . ,parentheses-item::print) + (stencils . ,parentheses-item::calc-parenthesis-stencils) (meta . ((class . Item) - (interfaces . (parentheses-interface font-interface)))))) - - (HarmonicParenthesesItem - . ((stencil . ,parentheses-item::print) - (padding . 0) - (stencils . ,parentheses-item::calc-angled-bracket-stencils) - (meta . ((class . Item) - (interfaces . (parentheses-interface font-interface)))))) - - (PhrasingSlur - . ((details . ,default-slur-details) - (control-points . ,ly:slur::calc-control-points) - (direction . ,ly:slur::calc-direction) - (springs-and-rods . ,ly:spanner::set-spacing-rods) - (Y-extent . ,ly:slur::height) - (stencil . ,ly:slur::print) - (thickness . 1.1) - (minimum-length . 1.5) - (height-limit . 2.0) - (ratio . 0.333) - (cross-staff . ,ly:slur::calc-cross-staff) - (meta . ((class . Spanner) - (interfaces . (slur-interface)))))) + (interfaces . (font-interface + parentheses-interface)))))) (PercentRepeat . ( + (dot-negative-kern . 0.75) + (font-encoding . fetaMusic) + (slope . 1.0) (springs-and-rods . ,ly:multi-measure-rest::set-spacing-rods) (stencil . ,ly:multi-measure-rest::percent) - (slope . 1.0) (thickness . 0.48) - (dot-negative-kern . 0.75) - (font-encoding . fetaMusic) (meta . ((class . Spanner) - (interfaces . (multi-measure-rest-interface - font-interface + (interfaces . (font-interface + multi-measure-rest-interface percent-repeat-interface)))))) (PercentRepeatCounter . ( + (direction . ,UP) + (font-encoding . fetaNumber) + (font-size . -2) + (padding . 0.2) + (self-alignment-X . ,CENTER) + (staff-padding . 0.25) (stencil . ,ly:text-interface::print) (X-offset . ,(ly:make-simple-closure `(,+ @@ -1357,38 +1361,58 @@ ,(ly:make-simple-closure (list ly:self-alignment-interface::x-aligned-on-self))))) (Y-offset . ,ly:side-position-interface::y-aligned-side) - (self-alignment-X . ,CENTER) - (direction . ,UP) - (padding . 0.2) - (staff-padding . 0.25) - (font-size . -2) - (font-encoding . fetaNumber) (meta . ((class . Spanner) - (interfaces . (side-position-interface - self-alignment-interface + (interfaces . (font-interface percent-repeat-interface - font-interface + self-alignment-interface + side-position-interface text-interface)))))) + (PhrasingSlur + . ( + (control-points . ,ly:slur::calc-control-points) + (cross-staff . ,ly:slur::calc-cross-staff) + (details . ,default-slur-details) + (direction . ,ly:slur::calc-direction) + (height-limit . 2.0) + (minimum-length . 1.5) + (ratio . 0.333) + (springs-and-rods . ,ly:spanner::set-spacing-rods) + (stencil . ,ly:slur::print) + (thickness . 1.1) + (Y-extent . ,ly:slur::height) + (meta . ((class . Spanner) + (interfaces . (slur-interface)))))) + ;; an example of a text spanner (PianoPedalBracket . ( - (stencil . ,ly:piano-pedal-bracket::print) - (style . line) (bound-padding . 1.0) - (direction . ,DOWN) (bracket-flare . (0.5 . 0.5)) + (direction . ,DOWN) (edge-height . (1.0 . 1.0)) (shorten-pair . (0.0 . 0.0)) + (stencil . ,ly:piano-pedal-bracket::print) + (style . line) (thickness . 1.0) (meta . ((class . Spanner) (interfaces . (line-interface - piano-pedal-interface - piano-pedal-bracket-interface)))))) + piano-pedal-bracket-interface + piano-pedal-interface)))))) (RehearsalMark . ( + (baseline-skip . 2) + (break-align-symbols . (staff-bar clef)) + (break-visibility . ,end-of-line-invisible) + (direction . ,UP) + (extra-spacing-width . (+inf.0 . -inf.0)) + (font-size . 2) + (non-musical . #t) + (outside-staff-priority . 1500) + (padding . 0.8) + (self-alignment-X . ,CENTER) (stencil . ,ly:text-interface::print) (X-offset . ,(ly:make-simple-closure `(,+ @@ -1397,72 +1421,61 @@ ,(ly:make-simple-closure (list ly:self-alignment-interface::x-aligned-on-self))))) (Y-offset . ,ly:side-position-interface::y-aligned-side) - (extra-spacing-width . (+inf.0 . -inf.0)) - (self-alignment-X . ,CENTER) - (direction . ,UP) - (non-musical . #t) - (font-size . 2) - (baseline-skip . 2) - (break-visibility . ,end-of-line-invisible) - (break-align-symbols . (staff-bar clef)) - (padding . 0.8) - (outside-staff-priority . 1500) (meta . ((class . Item) - (interfaces . (text-interface - side-position-interface - break-alignable-interface + (interfaces . (break-alignable-interface font-interface mark-interface - self-alignment-interface)))))) + self-alignment-interface + side-position-interface + text-interface)))))) (RepeatSlash . ( + (slope . 1.7) (stencil . ,ly:percent-repeat-item-interface::beat-slash) (thickness . 0.48) - (slope . 1.7) (meta . ((class . Item) - (interfaces . (rhythmic-grob-interface - percent-repeat-interface - percent-repeat-item-interface)))))) + (interfaces . (percent-repeat-interface + percent-repeat-item-interface + rhythmic-grob-interface)))))) (RepeatTie . ( - (stencil . ,ly:tie::print) (control-points . ,ly:semi-tie::calc-control-points) - (direction . ,ly:tie::calc-direction) (details . ((ratio . 0.333) (height-limit . 1.0))) - (thickness . 1.0) + (direction . ,ly:tie::calc-direction) (head-direction . ,RIGHT) + (stencil . ,ly:tie::print) + (thickness . 1.0) (meta . ((class . Item) (interfaces . (semi-tie-interface)))))) (RepeatTieColumn . ( - (X-extent . #f) - (Y-extent . #f) (direction . ,ly:tie::calc-direction) (head-direction . ,ly:semi-tie-column::calc-head-direction) - (positioning-done . ,ly:semi-tie-column::calc-positioning-done) + (X-extent . #f) + (Y-extent . #f) (meta . ((class . Item) (interfaces . (semi-tie-column-interface)))))) (Rest . ( - (stencil . ,ly:rest::print) + (cross-staff . ,ly:rest::calc-cross-staff) (duration-log . ,stem::calc-duration-log) + (minimum-distance . 0.25) + (stencil . ,ly:rest::print) (X-extent . ,ly:rest::width) (Y-extent . ,ly:rest::height) (Y-offset . ,ly:rest::y-offset-callback) - (minimum-distance . 0.25) - (cross-staff . ,ly:rest::calc-cross-staff) (meta . ((class . Item) (interfaces . (font-interface - rhythmic-head-interface + rest-interface rhythmic-grob-interface - staff-symbol-referencer-interface - rest-interface)))))) + rhythmic-head-interface + staff-symbol-referencer-interface)))))) (RestCollision . ( @@ -1474,23 +1487,22 @@ (Script . ( - ;; don't set direction here: it breaks staccato. + (cross-staff . ,ly:script-interface::calc-cross-staff) + (direction . ,ly:script-interface::calc-direction) + (font-encoding . fetaMusic) + (positioning-done . ,ly:script-interface::calc-positioning-done) + (side-axis . ,Y) ;; padding set in script definitions. (staff-padding . 0.25) - (X-offset . ,script-interface::calc-x-offset) - (Y-offset . ,ly:side-position-interface::y-aligned-side) - (side-axis . ,Y) (stencil . ,ly:script-interface::print) - (direction . ,ly:script-interface::calc-direction) - (positioning-done . ,ly:script-interface::calc-positioning-done) - (font-encoding . fetaMusic) - (cross-staff . ,ly:script-interface::calc-cross-staff) + (X-offset . ,script-interface::calc-x-offset) + (Y-offset . ,ly:side-position-interface::y-aligned-side) (meta . ((class . Item) - (interfaces . (script-interface - side-position-interface - font-interface)))))) + (interfaces . (font-interface + script-interface + side-position-interface)))))) (ScriptColumn . ( @@ -1507,93 +1519,86 @@ (SeparationItem . ( (avoid-slur . inside) - (X-extent . ,ly:axis-group-interface::width) - (Y-extent . ,ly:axis-group-interface::height) (horizontal-skylines . ,ly:separation-item::calc-skylines) (stencil . ,ly:separation-item::print) + (X-extent . ,ly:axis-group-interface::width) + (Y-extent . ,ly:axis-group-interface::height) (meta . ((class . Item) (interfaces . (separation-item-interface)))))) (Slur . ( - (details . ,default-slur-details) + (avoid-slur . inside) (control-points . ,ly:slur::calc-control-points) + (cross-staff . ,ly:slur::calc-cross-staff) + (details . ,default-slur-details) (direction . ,ly:slur::calc-direction) - (springs-and-rods . ,ly:spanner::set-spacing-rods) - (Y-extent . ,ly:slur::height) - (stencil . ,ly:slur::print) - (thickness . 1.2) + (height-limit . 2.0) (line-thickness . 0.8) (minimum-length . 1.5) - (height-limit . 2.0) (ratio . 0.25) - (avoid-slur . inside) - (cross-staff . ,ly:slur::calc-cross-staff) + (springs-and-rods . ,ly:spanner::set-spacing-rods) + (stencil . ,ly:slur::print) + (thickness . 1.2) + (Y-extent . ,ly:slur::height) (meta . ((class . Spanner) (interfaces . (slur-interface)))))) (SostenutoPedal . ( - (stencil . ,ly:text-interface::print) (direction . ,RIGHT) - (X-offset . ,ly:self-alignment-interface::x-aligned-on-self) (extra-spacing-width . (+inf.0 . -inf.0)) - (padding . 0.0) ;; padding relative to SostenutoPedalLineSpanner (font-shape . italic) + (padding . 0.0) ;; padding relative to SostenutoPedalLineSpanner (self-alignment-X . ,CENTER) + (stencil . ,ly:text-interface::print) + (X-offset . ,ly:self-alignment-interface::x-aligned-on-self) (meta . ((class . Item) - (interfaces . (text-interface - self-alignment-interface + (interfaces . (font-interface piano-pedal-script-interface - font-interface)))))) + self-alignment-interface + text-interface)))))) (SostenutoPedalLineSpanner . ( (axes . (,Y)) - (Y-extent . ,ly:axis-group-interface::height) - (X-extent . ,ly:axis-group-interface::width) - (Y-offset . ,ly:side-position-interface::y-aligned-side) + (direction . ,DOWN) + (minimum-space . 1.0) (outside-staff-priority . 1000) + (padding . 1.2) (side-axis . ,Y) (staff-padding . 1.0) - (padding . 1.2) - (minimum-space . 1.0) - (direction . ,DOWN) + (X-extent . ,ly:axis-group-interface::width) + (Y-extent . ,ly:axis-group-interface::height) + (Y-offset . ,ly:side-position-interface::y-aligned-side) (meta . ((class . Spanner) - (interfaces . (piano-pedal-interface - axis-group-interface + (interfaces . (axis-group-interface + piano-pedal-interface side-position-interface)))))) (SpacingSpanner . ( - (springs-and-rods . ,ly:spacing-spanner::set-springs) - (common-shortest-duration . ,ly:spacing-spanner::calc-common-shortest-duration) (average-spacing-wishes . #t) + (base-shortest-duration . ,(ly:make-moment 3 16)) + (common-shortest-duration . ,ly:spacing-spanner::calc-common-shortest-duration) (shortest-duration-space . 2.0) (spacing-increment . 1.2) - - (base-shortest-duration . ,(ly:make-moment 3 16)) + (springs-and-rods . ,ly:spacing-spanner::set-springs) (meta . ((class . Spanner) (interfaces . (spacing-options-interface spacing-spanner-interface)))))) (SpanBar . ( + (allow-span-bar . #t) + (bar-extent . ,ly:axis-group-interface::height) + (bar-size . ,ly:span-bar::calc-bar-size) + (before-line-breaking . ,ly:span-bar::before-line-breaking) (break-align-symbol . staff-bar) - (Y-extent . ,ly:axis-group-interface::height) (cross-staff . #t) - (layer . 0) - (non-musical . #t) - (stencil . ,ly:span-bar::print) - (bar-size . ,ly:span-bar::calc-bar-size) - (bar-extent . ,ly:axis-group-interface::height) - (X-extent . ,ly:span-bar::width) (glyph-name . ,ly:span-bar::calc-glyph-name) - (before-line-breaking . ,ly:span-bar::before-line-breaking) - (allow-span-bar . #t) - - ;; ugh duplication! + ;; ugh duplication! (these 4 properties were copied from Barline) ;; ;; Ross. page 151 lists other values, we opt for a leaner look ;; @@ -1601,24 +1606,23 @@ (thin-kern . 3.0) (hair-thickness . 1.6) (thick-thickness . 6.0) + + (layer . 0) + (non-musical . #t) + (stencil . ,ly:span-bar::print) + (X-extent . ,ly:span-bar::width) + (Y-extent . ,ly:axis-group-interface::height) (meta . ((class . Item) - (interfaces . (span-bar-interface + (interfaces . (bar-line-interface font-interface - bar-line-interface)))))) + span-bar-interface)))))) - (StanzaNumber + (StaffGrouper . ( - (stencil . ,ly:text-interface::print) - (font-series . bold) - (padding . 1.0) - (X-offset . ,ly:side-position-interface::x-aligned-side) - (side-axis . ,X) - (direction . ,LEFT) - (meta . ((class . Item) - (interfaces . (side-position-interface - stanza-number-interface - text-interface - font-interface)))))) + (between-staff-spacing . ((space . 9) (minimum-distance . 7))) + (after-last-staff-spacing . ((space . 10.5) (minimum-distance . 8))) + (meta . ((class . Spanner) + (interfaces . (staff-grouper-interface)))))) (StaffSpacing . ( @@ -1627,36 +1631,37 @@ (meta . ((class . Item) (interfaces . (spacing-interface staff-spacing-interface)))))) - + (StaffSymbol . ( - (Y-extent . ,ly:staff-symbol::height) - (stencil . ,ly:staff-symbol::print) - (line-count . 5) - (ledger-line-thickness . (1.0 . 0.1)) (layer . 0) + (ledger-line-thickness . (1.0 . 0.1)) + (line-count . 5) + (stencil . ,ly:staff-symbol::print) + (Y-extent . ,ly:staff-symbol::height) (meta . ((class . Spanner) (interfaces . (staff-symbol-interface)))))) - (Stem + (StanzaNumber . ( - (direction . ,ly:stem::calc-direction) - (duration-log . ,stem::calc-duration-log) - (default-direction . ,ly:stem::calc-default-direction) - (stem-end-position . ,ly:stem::calc-stem-end-position) + (direction . ,LEFT) + (font-series . bold) + (padding . 1.0) + (side-axis . ,X) + (stencil . ,ly:text-interface::print) + (X-offset . ,ly:side-position-interface::x-aligned-side) + (meta . ((class . Item) + (interfaces . (font-interface + side-position-interface + stanza-number-interface + text-interface)))))) - (neutral-direction . ,DOWN) - (stem-info . ,ly:stem::calc-stem-info) - (positioning-done . ,ly:stem::calc-positioning-done) - (stencil . ,ly:stem::print) - (X-extent . ,ly:stem::width) - (Y-extent . ,ly:stem::height) - (length . ,ly:stem::calc-length) - (thickness . 1.3) - (cross-staff . ,ly:stem::calc-cross-staff) - (flag . ,ly:stem::calc-flag) + (Stem + . ( (beamlet-default-length . (1.1 . 1.1)) (beamlet-max-length-proportion . (0.75 . 0.75)) + (cross-staff . ,ly:stem::calc-cross-staff) + (default-direction . ,ly:stem::calc-default-direction) (details . ( ;; 3.5 (or 3 measured from note head) is standard length @@ -1688,130 +1693,144 @@ ;; We use the normal minima as minimum for the ideal lengths, ;; and the extreme minima as abolute minimum length. + (direction . ,ly:stem::calc-direction) + (duration-log . ,stem::calc-duration-log) + (flag . ,ly:stem::calc-flag) + (length . ,ly:stem::calc-length) + (neutral-direction . ,DOWN) + (positioning-done . ,ly:stem::calc-positioning-done) + (stem-end-position . ,ly:stem::calc-stem-end-position) + (stem-info . ,ly:stem::calc-stem-info) + (stencil . ,ly:stem::print) + (thickness . 1.3) + (X-extent . ,ly:stem::width) (X-offset . ,ly:stem::offset-callback) + (Y-extent . ,ly:stem::height) (Y-offset . ,ly:staff-symbol-referencer::callback) (meta . ((class . Item) - (interfaces . (stem-interface - font-interface)))))) + (interfaces . (font-interface + stem-interface)))))) (StemTremolo . ( - (Y-extent . ,ly:stem-tremolo::height) - (X-extent . ,ly:stem-tremolo::width) - (stencil . ,ly:stem-tremolo::print) - (slope . ,ly:stem-tremolo::calc-slope) - (beam-width . ,ly:stem-tremolo::calc-width) ; staff-space - (style . ,ly:stem-tremolo::calc-style) (beam-thickness . 0.48) ; staff-space + (beam-width . ,ly:stem-tremolo::calc-width) ; staff-space + (slope . ,ly:stem-tremolo::calc-slope) + (stencil . ,ly:stem-tremolo::print) + (style . ,ly:stem-tremolo::calc-style) + (X-extent . ,ly:stem-tremolo::width) + (Y-extent . ,ly:stem-tremolo::height) (meta . ((class . Item) (interfaces . (stem-tremolo-interface)))))) (StringNumber . ( - (stencil . ,print-circled-text-callback) - (text . ,string-number::calc-text) - (padding . 0.5) - (staff-padding . 0.5) - (self-alignment-X . ,CENTER) - (self-alignment-Y . ,CENTER) - (script-priority . 100) (avoid-slur . around) (font-encoding . fetaNumber) (font-size . -5) ; don't overlap when next to heads. + (padding . 0.5) + (script-priority . 100) + (self-alignment-X . ,CENTER) + (self-alignment-Y . ,CENTER) + (staff-padding . 0.5) + (stencil . ,print-circled-text-callback) + (text . ,string-number::calc-text) (meta . ((class . Item) - (interfaces . (string-number-interface - font-interface - text-script-interface - text-interface + (interfaces . (font-interface + self-alignment-interface side-position-interface - self-alignment-interface)))))) - + string-number-interface + text-interface + text-script-interface)))))) + (StrokeFinger . ( - (stencil . ,ly:text-interface::print) - (text . ,stroke-finger::calc-text) (digit-names . #("p" "i" "m" "a" "x")) + (font-shape . italic) + (font-size . -4) ; don't overlap when next to heads. (padding . 0.5) - (staff-padding . 0.5) + (script-priority . 100) (self-alignment-X . ,CENTER) (self-alignment-Y . ,CENTER) - (script-priority . 100) - (font-shape . italic) - (font-size . -4) ; don't overlap when next to heads. + (staff-padding . 0.5) + (stencil . ,ly:text-interface::print) + (text . ,stroke-finger::calc-text) (meta . ((class . Item) - (interfaces . (stroke-finger-interface - font-interface - text-script-interface - text-interface + (interfaces . (font-interface + self-alignment-interface side-position-interface - self-alignment-interface)))))) + stroke-finger-interface + text-interface + text-script-interface)))))) (SustainPedal . ( - (extra-spacing-width . (+inf.0 . -inf.0)) - (stencil . ,ly:sustain-pedal::print) - (self-alignment-X . ,CENTER) (direction . ,RIGHT) + (extra-spacing-width . (+inf.0 . -inf.0)) (padding . 0.0) ;; padding relative to SustainPedalLineSpanner + (self-alignment-X . ,CENTER) + (stencil . ,ly:sustain-pedal::print) (X-offset . ,ly:self-alignment-interface::x-aligned-on-self) (meta . ((class . Item) - (interfaces . (piano-pedal-interface - text-interface - self-alignment-interface + (interfaces . (font-interface + piano-pedal-interface piano-pedal-script-interface - font-interface)))))) + self-alignment-interface + text-interface)))))) (SustainPedalLineSpanner . ( (axes . (,Y)) - (Y-extent . ,ly:axis-group-interface::height) - (X-extent . ,ly:axis-group-interface::width) - (Y-offset . ,ly:side-position-interface::y-aligned-side) + (direction . ,DOWN) + (minimum-space . 1.0) (outside-staff-priority . 1000) - (side-axis . ,Y) (padding . 1.2) + (side-axis . ,Y) (staff-padding . 1.2) - (minimum-space . 1.0) - (direction . ,DOWN) + (X-extent . ,ly:axis-group-interface::width) + (Y-extent . ,ly:axis-group-interface::height) + (Y-offset . ,ly:side-position-interface::y-aligned-side) (meta . ((class . Spanner) - (interfaces . (piano-pedal-interface - axis-group-interface + (interfaces . (axis-group-interface + piano-pedal-interface side-position-interface)))))) (System . ( (axes . (,X ,Y)) + (vertical-skylines . ,ly:axis-group-interface::calc-skylines) (X-extent . ,ly:axis-group-interface::width) (Y-extent . ,ly:axis-group-interface::height) - (vertical-skylines . ,ly:axis-group-interface::calc-skylines) - (max-stretch . ,ly:axis-group-interface::calc-max-stretch) (meta . ((class . System) - (interfaces . (system-interface - axis-group-interface)))))) + (interfaces . (axis-group-interface + system-interface)))))) - (SystemStartBrace + (SystemStartBar . ( - (style . brace) - (padding . 0.3) - (stencil . ,ly:system-start-delimiter::print) (collapse-height . 5.0) - (X-offset . ,ly:side-position-interface::x-aligned-side) (direction . ,LEFT) - (font-encoding . fetaBraces) + + ;; ugh--hardcoded. + (padding . -0.1) ;; bar must cover rounded ending of staff line. + (stencil . ,ly:system-start-delimiter::print) + (style . bar-line) + (thickness . 1.6) + (X-offset . ,ly:side-position-interface::x-aligned-side) (Y-extent . #f) (meta . ((class . Spanner) - (interfaces . (system-start-delimiter-interface - side-position-interface - font-interface)))))) + (interfaces . (side-position-interface + system-start-delimiter-interface)))))) - (SystemStartSquare + (SystemStartBrace . ( - (Y-extent . #f) - (X-offset . ,ly:side-position-interface::x-aligned-side) + (collapse-height . 5.0) (direction . ,LEFT) + (font-encoding . fetaBraces) + (padding . 0.3) (stencil . ,ly:system-start-delimiter::print) - (style . line-bracket) - (thickness . 1.0) + (style . brace) + (X-offset . ,ly:side-position-interface::x-aligned-side) + (Y-extent . #f) (meta . ((class . Spanner) (interfaces . (font-interface side-position-interface @@ -1819,98 +1838,82 @@ (SystemStartBracket . ( - (Y-extent . #f) - (padding . 0.8) - (X-offset . ,ly:side-position-interface::x-aligned-side) + (collapse-height . 5.0) (direction . ,LEFT) + (padding . 0.8) (stencil . ,ly:system-start-delimiter::print) (style . bracket) - (collapse-height . 5.0) (thickness . 0.45) + (X-offset . ,ly:side-position-interface::x-aligned-side) + (Y-extent . #f) (meta . ((class . Spanner) (interfaces . (font-interface side-position-interface system-start-delimiter-interface)))))) - (SystemStartBar + (SystemStartSquare . ( - (Y-extent . #f) - - ;; ugh--hardcoded. - (padding . -0.1) ;; bar must cover rounded ending of staff line. - (X-offset . ,ly:side-position-interface::x-aligned-side) (direction . ,LEFT) - (style . bar-line) - (collapse-height . 5.0) - (thickness . 1.6) (stencil . ,ly:system-start-delimiter::print) + (style . line-bracket) + (thickness . 1.0) + (X-offset . ,ly:side-position-interface::x-aligned-side) + (Y-extent . #f) (meta . ((class . Spanner) - (interfaces . (side-position-interface + (interfaces . (font-interface + side-position-interface system-start-delimiter-interface)))))) (TabNoteHead . ( - (stencil . ,ly:text-interface::print) - (duration-log . ,note-head::calc-duration-log) - (Y-offset . ,ly:staff-symbol-referencer::callback) - (X-offset . ,ly:self-alignment-interface::x-aligned-on-self) (direction . ,CENTER) + (duration-log . ,note-head::calc-duration-log) + (font-series . bold) (font-size . -2) (stem-attachment . (0.0 . 1.35)) - (font-series . bold) + (stencil . ,ly:text-interface::print) + (X-offset . ,ly:self-alignment-interface::x-aligned-on-self) + (Y-offset . ,ly:staff-symbol-referencer::callback) (meta . ((class . Item) - (interfaces . (rhythmic-head-interface - font-interface - rhythmic-grob-interface + (interfaces . (font-interface note-head-interface + rhythmic-grob-interface + rhythmic-head-interface staff-symbol-referencer-interface text-interface)))))) (TextScript . ( - (extra-spacing-width . (+inf.0 . -inf.0)) - (X-offset . ,ly:self-alignment-interface::x-aligned-on-self) - (Y-offset . ,ly:side-position-interface::y-aligned-side) - (side-axis . ,Y) + (avoid-slur . around) + (cross-staff . ,ly:script-interface::calc-cross-staff) (direction . ,DOWN) + (direction . ,ly:script-interface::calc-direction) + (extra-spacing-width . (+inf.0 . -inf.0)) + (outside-staff-priority . 450) ;; sync with Fingering ? (padding . 0.5) - (staff-padding . 0.5) - (stencil . ,ly:text-interface::print) - (direction . ,ly:script-interface::calc-direction) (positioning-done . ,ly:script-interface::calc-positioning-done) - - (outside-staff-priority . 450) - (avoid-slur . around) - (slur-padding . 0.5) (script-priority . 200) - (cross-staff . ,ly:script-interface::calc-cross-staff) + (side-axis . ,Y) + (slur-padding . 0.5) + (staff-padding . 0.5) + (stencil . ,ly:text-interface::print) ;; todo: add X self alignment? + (X-offset . ,ly:self-alignment-interface::x-aligned-on-self) + (Y-offset . ,ly:side-position-interface::y-aligned-side) (meta . ((class . Item) - (interfaces . (text-script-interface - text-interface + (interfaces . (font-interface instrument-specific-markup-interface - side-position-interface self-alignment-interface - font-interface)))))) + side-position-interface + text-interface + text-script-interface)))))) (TextSpanner . ( - (Y-offset . ,ly:side-position-interface::y-aligned-side) - (font-shape . italic) - (style . dashed-line) - (staff-padding . 0.8) - (dash-fraction . 0.2) - (dash-period . 3.0) - (side-axis . ,Y) - (direction . ,UP) - (outside-staff-priority . 350) - - (left-bound-info . ,ly:line-spanner::calc-left-bound-info) - (right-bound-info . ,ly:line-spanner::calc-right-bound-info) (bound-details . ((left . ((Y . 0) (padding . 0.25) (attach-dir . ,LEFT) @@ -1919,23 +1922,29 @@ (padding . 0.25) )) )) + (dash-fraction . 0.2) + (dash-period . 3.0) + (direction . ,UP) + (font-shape . italic) + (left-bound-info . ,ly:line-spanner::calc-left-bound-info) + (outside-staff-priority . 350) + (right-bound-info . ,ly:line-spanner::calc-right-bound-info) + (side-axis . ,Y) + (staff-padding . 0.8) (stencil . ,ly:line-spanner::print) + (style . dashed-line) + (Y-offset . ,ly:side-position-interface::y-aligned-side) (meta . ((class . Spanner) - (interfaces . (line-spanner-interface + (interfaces . (font-interface line-interface - side-position-interface - font-interface)))))) + line-spanner-interface + side-position-interface)))))) (Tie . ( - (control-points . ,ly:tie::calc-control-points) - (springs-and-rods . ,ly:spanner::set-spacing-rods) (avoid-slur . inside) - (direction . ,ly:tie::calc-direction) - (neutral-direction . ,UP) - (stencil . ,ly:tie::print) - (font-size . -6) + (control-points . ,ly:tie::calc-control-points) (details . ( ;; for a full list, see tie-details.cc (ratio . 0.333) @@ -1947,7 +1956,7 @@ (horizontal-distance-penalty-factor . 10) (same-dir-as-stem-penalty . 8) (min-length-penalty-factor . 26) - (tie-tie-collision-distance . 0.45) + (tie-tie-collision-distance . 0.45) (tie-tie-collision-penalty . 25.0) (intra-space-threshold . 1.25) (outer-tie-vertical-distance-symmetry-penalty-factor . 10) @@ -1957,16 +1966,21 @@ (multi-tie-region-size . 3) (single-tie-region-size . 4) (between-length-limit . 1.0))) - - (thickness . 1.2) + + (direction . ,ly:tie::calc-direction) + (font-size . -6) (line-thickness . 0.8) + (neutral-direction . ,UP) + (springs-and-rods . ,ly:spanner::set-spacing-rods) + (stencil . ,ly:tie::print) + (thickness . 1.2) (meta . ((class . Spanner) (interfaces . (tie-interface)))))) (TieColumn . ( - (positioning-done . ,ly:tie-column::calc-positioning-done) (before-line-breaking . ,ly:tie-column::before-line-breaking) + (positioning-done . ,ly:tie-column::calc-positioning-done) (X-extent . #f) (Y-extent . #f) (meta . ((class . Spanner) @@ -1974,190 +1988,188 @@ (TimeSignature . ( - (stencil . ,ly:time-signature::print) - (break-align-symbol . time-signature) + (avoid-slur . inside) (break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor) + (break-align-symbol . time-signature) (break-visibility . ,all-visible) - (avoid-slur . inside) (extra-spacing-height . (-1.0 . 1.0)) + (non-musical . #t) (space-alist . ( (first-note . (fixed-space . 2.0)) (right-edge . (extra-space . 0.5)) (staff-bar . (minimum-space . 2.0)))) - (non-musical . #t) + (stencil . ,ly:time-signature::print) (style . C) (meta . ((class . Item) - (interfaces . (time-signature-interface - break-aligned-interface - font-interface)))))) - - (TrillSpanner - . ( - (left-bound-info . ,ly:line-spanner::calc-left-bound-info) - (right-bound-info . ,ly:line-spanner::calc-right-bound-info) - - (bound-details . ((left . ((text . ,(make-translate-scaled-markup - '(0.0 . -1.0) - (make-musicglyph-markup "scripts.trill"))) - (Y . 0) - (stencil-offset . (-0.5 . 0)) - (padding . 1.5) - (attach-dir . ,CENTER) - ;; this isn't CENTER because the trill glyph's origin - ;; is not centered in its extent; to have the trill - ;; spanner aligned the same as a trill, we need a slight offset - (anchor-alignment . 0.15) - )) - (left-broken . ((end-on-note . #t))) - (right . ((Y . 0))) - )) - - (stencil . ,ly:line-spanner::print) - (after-line-breaking . ,ly:spanner::kill-zero-spanned-time) - (style . trill) - (staff-padding . 1.0) - (padding . 0.5) - (direction . ,UP) - (Y-offset . ,ly:side-position-interface::y-aligned-side) - (side-axis . ,Y) - (outside-staff-priority . 50) - (meta . ((class . Spanner) - (interfaces . (line-spanner-interface - line-interface - trill-spanner-interface - side-position-interface - font-interface)))))) + (interfaces . (break-aligned-interface + font-interface + time-signature-interface)))))) (TrillPitchAccidental - . ((X-offset . ,ly:side-position-interface::x-aligned-side) - (padding . 0.2) + . ( (direction . ,LEFT) (font-size . -4) + (glyph-name-alist . ,standard-alteration-glyph-name-alist) + (padding . 0.2) (side-axis . ,X) (stencil . ,ly:accidental-interface::print) + (X-offset . ,ly:side-position-interface::x-aligned-side) (Y-extent . ,ly:accidental-interface::height) - (glyph-name-alist . ,standard-alteration-glyph-name-alist) (meta . ((class . Item) - (interfaces . (trill-pitch-accidental-interface - accidental-interface + (interfaces . (accidental-interface + font-interface side-position-interface - font-interface)))))) + trill-pitch-accidental-interface)))))) (TrillPitchGroup - . ((X-offset . ,ly:side-position-interface::x-aligned-side) + . ( (axes . (,X)) + (direction . ,RIGHT) (font-size . -4) + (padding . 0.3) + (side-axis . ,X) (stencil . ,parenthesize-elements) (stencils . ,parentheses-item::calc-parenthesis-stencils) - (direction . ,RIGHT) - (side-axis . ,X) - (padding . 0.3) + (X-offset . ,ly:side-position-interface::x-aligned-side) (meta . ((class . Item) - (interfaces . (side-position-interface - parentheses-interface - note-head-interface + (interfaces . (axis-group-interface font-interface - axis-group-interface)))))) + note-head-interface + parentheses-interface + side-position-interface)))))) (TrillPitchHead . ( - (stencil . ,ly:note-head::print) (duration-log . 2) - (Y-offset . ,ly:staff-symbol-referencer::callback) (font-size . -4) + (stencil . ,ly:note-head::print) + (Y-offset . ,ly:staff-symbol-referencer::callback) (meta . ((class . Item) - (interfaces . (rhythmic-head-interface - font-interface - pitched-trill-interface + (interfaces . (font-interface ledgered-interface + pitched-trill-interface + rhythmic-head-interface staff-symbol-referencer-interface)))))) + (TrillSpanner + . ( + (after-line-breaking . ,ly:spanner::kill-zero-spanned-time) + (bound-details . ((left . ((text . ,(make-translate-scaled-markup + '(0.0 . -1.0) + (make-musicglyph-markup "scripts.trill"))) + (Y . 0) + (stencil-offset . (-0.5 . 0)) + (padding . 1.5) + (attach-dir . ,CENTER) + ;; this isn't CENTER because the trill glyph's origin + ;; is not centered in its extent; to have the trill + ;; spanner aligned the same as a trill, we need a slight offset + (anchor-alignment . 0.15) + )) + (left-broken . ((end-on-note . #t))) + (right . ((Y . 0))) + )) + (direction . ,UP) + (left-bound-info . ,ly:line-spanner::calc-left-bound-info) + (outside-staff-priority . 50) + (padding . 0.5) + (right-bound-info . ,ly:line-spanner::calc-right-bound-info) + (side-axis . ,Y) + (staff-padding . 1.0) + (stencil . ,ly:line-spanner::print) + (style . trill) + (Y-offset . ,ly:side-position-interface::y-aligned-side) + (meta . ((class . Spanner) + (interfaces . (font-interface + line-interface + line-spanner-interface + side-position-interface + trill-spanner-interface)))))) + (TupletBracket . ( - (padding . 1.1) - (thickness . 1.6) + (connect-to-neighbor . ,ly:tuplet-bracket::calc-connect-to-neighbors) + (control-points . ,ly:tuplet-bracket::calc-control-points) + (cross-staff . ,ly:tuplet-bracket::calc-cross-staff) + (direction . ,ly:tuplet-bracket::calc-direction) (edge-height . (0.7 . 0.7)) - (shorten-pair . (-0.2 . -0.2)) - (staff-padding . 0.25) (full-length-to-extent . #t) - (direction . ,ly:tuplet-bracket::calc-direction) + (padding . 1.1) (positions . ,ly:tuplet-bracket::calc-positions) - (connect-to-neighbor . ,ly:tuplet-bracket::calc-connect-to-neighbors) - (control-points . ,ly:tuplet-bracket::calc-control-points) + (shorten-pair . (-0.2 . -0.2)) + (staff-padding . 0.25) (stencil . ,ly:tuplet-bracket::print) - (cross-staff . ,ly:tuplet-bracket::calc-cross-staff) - + (thickness . 1.6) + (meta . ((class . Spanner) (interfaces . (line-interface tuplet-bracket-interface)))))) (TupletNumber . ( - (stencil . ,ly:tuplet-number::print) - (text . ,tuplet-number::calc-denominator-text) - (font-shape . italic) - (font-size . -2) (avoid-slur . inside) (cross-staff . ,ly:tuplet-number::calc-cross-staff) + (font-shape . italic) + (font-size . -2) + (stencil . ,ly:tuplet-number::print) + (text . ,tuplet-number::calc-denominator-text) (meta . ((class . Spanner) - (interfaces . (text-interface tuplet-number-interface - font-interface)))))) + (interfaces . (font-interface + text-interface + tuplet-number-interface)))))) + - (UnaCordaPedal . ( - (stencil . ,ly:text-interface::print) - (font-shape . italic) - (extra-spacing-width . (+inf.0 . -inf.0)) - (self-alignment-X . ,CENTER) (direction . ,RIGHT) + (extra-spacing-width . (+inf.0 . -inf.0)) + (font-shape . italic) (padding . 0.0) ;; padding relative to UnaCordaPedalLineSpanner + (self-alignment-X . ,CENTER) + (stencil . ,ly:text-interface::print) (X-offset . ,ly:self-alignment-interface::x-aligned-on-self) (meta . ((class . Item) - (interfaces . (text-interface + (interfaces . (font-interface piano-pedal-script-interface self-alignment-interface - font-interface)))))) + text-interface)))))) (UnaCordaPedalLineSpanner . ( (axes . (,Y)) - (Y-extent . ,ly:axis-group-interface::height) - (X-extent . ,ly:axis-group-interface::width) - (Y-offset . ,ly:side-position-interface::y-aligned-side) + (direction . ,DOWN) + (minimum-space . 1.0) (outside-staff-priority . 1000) - (side-axis . ,Y) (padding . 1.2) + (side-axis . ,Y) (staff-padding . 1.2) - (minimum-space . 1.0) - (direction . ,DOWN) + (X-extent . ,ly:axis-group-interface::width) + (Y-extent . ,ly:axis-group-interface::height) + (Y-offset . ,ly:side-position-interface::y-aligned-side) (meta . ((class . Spanner) - (interfaces . (piano-pedal-interface - axis-group-interface + (interfaces . (axis-group-interface + piano-pedal-interface side-position-interface)))))) (VaticanaLigature . ( - (thickness . 0.6) (flexa-width . 2.0) (stencil . ,ly:vaticana-ligature::print) + (thickness . 0.6) (meta . ((class . Spanner) - (interfaces . (vaticana-ligature-interface - font-interface)))))) + (interfaces . (font-interface + vaticana-ligature-interface)))))) (VerticalAlignment . ( (axes . (,Y)) - (positioning-done . ,ly:align-interface::calc-positioning-done) - (after-line-breaking . ,ly:align-interface::stretch-after-break) - (Y-extent . ,ly:axis-group-interface::height) - (X-extent . ,ly:axis-group-interface::width) + (positioning-done . ,ly:align-interface::align-to-ideal-distances) (stacking-dir . -1) - (padding . 0.5) (vertical-skylines . ,ly:axis-group-interface::combine-skylines) - (max-stretch . 0) + (X-extent . ,ly:axis-group-interface::width) + (Y-extent . ,ly:axis-group-interface::height) (meta . ((class . Spanner) (object-callbacks . ((Y-common . ,ly:axis-group-interface::calc-y-common))) (interfaces . (align-interface @@ -2165,73 +2177,74 @@ (VerticalAxisGroup . ( + (adjacent-pure-heights . ,ly:axis-group-interface::adjacent-pure-heights) (axes . (,Y)) - (Y-offset . ,ly:hara-kiri-group-spanner::force-hara-kiri-callback) - (Y-extent . ,ly:hara-kiri-group-spanner::y-extent) - (X-extent . ,ly:axis-group-interface::width) - (vertical-skylines . ,ly:hara-kiri-group-spanner::calc-skylines) - (max-stretch . ,ly:axis-group-interface::calc-max-stretch) + (default-next-staff-spacing . ((space . 9) (minimum-distance . 8))) + (next-staff-spacing . ,ly:axis-group-interface::calc-next-staff-spacing) (stencil . ,ly:axis-group-interface::print) - (adjacent-pure-heights . ,ly:axis-group-interface::adjacent-pure-heights) + (vertical-skylines . ,ly:hara-kiri-group-spanner::calc-skylines) + (X-extent . ,ly:axis-group-interface::width) + (Y-extent . ,ly:hara-kiri-group-spanner::y-extent) + (Y-offset . ,ly:hara-kiri-group-spanner::force-hara-kiri-callback) (meta . ((class . Spanner) (object-callbacks . ((X-common . ,ly:axis-group-interface::calc-x-common))) (interfaces . (axis-group-interface hara-kiri-group-spanner-interface vertically-spaceable-interface)))))) + (VoiceFollower + . ( + (after-line-breaking . ,ly:spanner::kill-zero-spanned-time) + (bound-details . ((right . ((attach-dir . ,CENTER) + (padding . 1.5) + )) + (left . ((attach-dir . ,CENTER) + (padding . 1.5) + )) + )) + (gap . 0.5) + (left-bound-info . ,ly:line-spanner::calc-left-bound-info) + (non-musical . #t) + (right-bound-info . ,ly:line-spanner::calc-right-bound-info) + (stencil . ,ly:line-spanner::print) + (style . line) + (X-extent . #f) + (Y-extent . #f) + (meta . ((class . Spanner) + (interfaces . (line-interface + line-spanner-interface)))))) + (VoltaBracket . ( - (stencil . ,ly:volta-bracket-interface::print) - (font-encoding . fetaNumber) - (thickness . 1.6) ;; line-thickness + (direction . ,UP) (edge-height . (2.0 . 2.0)) ;; staff-space; + (font-encoding . fetaNumber) (font-size . -4) + (stencil . ,ly:volta-bracket-interface::print) + (thickness . 1.6) ;; line-thickness (word-space . 0.6) - (direction . ,UP) (meta . ((class . Spanner) - (interfaces . (volta-bracket-interface - horizontal-bracket-interface + (interfaces . (font-interface + horizontal-bracket-interface line-interface - text-interface side-position-interface - font-interface)))))) + text-interface + volta-bracket-interface)))))) (VoltaBracketSpanner - . ( + . ( (axes . (,Y)) - (side-axis . ,Y) (direction . ,UP) - (padding . 1) - (Y-offset . ,ly:side-position-interface::y-aligned-side) + (no-alignment . ,#t) (outside-staff-priority . 100) - (Y-extent . ,ly:axis-group-interface::height) + (padding . 1) + (side-axis . ,Y) (X-extent . ,ly:axis-group-interface::width) - (no-alignment . ,#t) - (meta . ((class . Spanner) - (interfaces . (side-position-interface - axis-group-interface)))))) - - (VoiceFollower - . ( - (style . line) - (gap . 0.5) - (non-musical . #t) - (X-extent . #f) - (Y-extent . #f) - (bound-details . ((right . ((attach-dir . ,CENTER) - (padding . 1.5) - )) - (left . ((attach-dir . ,CENTER) - (padding . 1.5) - )) - )) - (after-line-breaking . ,ly:spanner::kill-zero-spanned-time) - (stencil . ,ly:line-spanner::print) - (left-bound-info . ,ly:line-spanner::calc-left-bound-info) - (right-bound-info . ,ly:line-spanner::calc-right-bound-info) + (Y-extent . ,ly:axis-group-interface::height) + (Y-offset . ,ly:side-position-interface::y-aligned-side) (meta . ((class . Spanner) - (interfaces . (line-spanner-interface - line-interface)))))) + (interfaces . (axis-group-interface + side-position-interface)))))) )) diff --git a/scm/define-markup-commands.scm b/scm/define-markup-commands.scm index e953774466..7836da51a1 100644 --- a/scm/define-markup-commands.scm +++ b/scm/define-markup-commands.scm @@ -1003,7 +1003,7 @@ the line width, where @var{X} is the number of staff spaces. @lilypond[verbatim,quote] \\header { title = \"My title\" - description = \"Lorem ipsum dolor sit amet, consectetur adipisicing + myText = \"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\" @@ -1014,7 +1014,7 @@ the line width, where @var{X} is the number of staff spaces. \\column { \\fill-line { \\fromproperty #'header:title } \\null - \\wordwrap-field #'header:descr + \\wordwrap-field #'header:myText } } } @@ -1037,7 +1037,7 @@ the line width, where @var{X} is the number of staff spaces. @lilypond[verbatim,quote] \\header { title = \"My title\" - description = \"Lorem ipsum dolor sit amet, consectetur adipisicing + myText = \"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\" @@ -1048,7 +1048,7 @@ the line width, where @var{X} is the number of staff spaces. \\column { \\fill-line { \\fromproperty #'header:title } \\null - \\justify-field #'header:description + \\justify-field #'header:myText } } } @@ -2595,9 +2595,67 @@ figured bass notation. \\markup { \\eyeglasses } @end lilypond" (interpret-markup layout props - (make-with-dimensions-markup '(-0.55 . 2.9) '(0.4 . 2.4) + (make-with-dimensions-markup '(-0.61 . 3.21) '(0.21 . 2.4) (make-postscript-markup eyeglassesps)))) +(define-builtin-markup-command (left-brace layout props size) + (number?) + other + () + " +A feta brace in point size @var{size}. + +@lilypond[verbatim,quote] +\\markup { + \\left-brace #35 + \\hspace #2 + \\left-brace #45 +} +@end lilypond" + (let* ((font (ly:paper-get-font layout + (cons '((font-encoding . fetaBraces) + (font-name . #f)) + props))) + (glyph-count (1- (ly:otf-glyph-count font))) + (scale (ly:output-def-lookup layout 'output-scale)) + (scaled-size (/ (ly:pt size) scale)) + (glyph (lambda (n) + (ly:font-get-glyph font (string-append "brace" + (number->string n))))) + (get-y-from-brace (lambda (brace) + (interval-length + (ly:stencil-extent (glyph brace) Y)))) + (find-brace (binary-search 0 glyph-count get-y-from-brace scaled-size)) + (glyph-found (glyph find-brace))) + + (if (or (null? (ly:stencil-expr glyph-found)) + (< scaled-size (interval-length (ly:stencil-extent (glyph 0) Y))) + (> scaled-size (interval-length + (ly:stencil-extent (glyph glyph-count) Y)))) + (begin + (ly:warning (_ "no brace found for point size ~S ") size) + (ly:warning (_ "defaulting to ~S pt") + (/ (* scale (interval-length + (ly:stencil-extent glyph-found Y))) + (ly:pt 1))))) + glyph-found)) + +(define-builtin-markup-command (right-brace layout props size) + (number?) + other + () + " +A feta brace in point size @var{size}, rotated 180 degrees. + +@lilypond[verbatim,quote] +\\markup { + \\right-brace #45 + \\hspace #2 + \\right-brace #35 +} +@end lilypond" + (interpret-markup layout props (markup #:rotate 180 #:left-brace size))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; the note command. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/scm/define-music-display-methods.scm b/scm/define-music-display-methods.scm index f76b335af2..10b1df3566 100644 --- a/scm/define-music-display-methods.scm +++ b/scm/define-music-display-methods.scm @@ -58,7 +58,7 @@ (args (cdr expr))) (if (eqv? cmd simple-markup) ;; a simple markup (format #f "~s" (car args)) - (format #f "\\~a~{ ~a~}" + (format #f "\\~a~{ ~a~}" (proc->command cmd) (map-in-order arg->string args)))))) (cond ((string? markup-expr) @@ -134,33 +134,34 @@ ;;; post events ;;; -(define post-event? (make-music-type-predicate - 'StringNumberEvent - 'ArticulationEvent - 'FingeringEvent - 'TextScriptEvent - 'MultiMeasureTextEvent - 'HyphenEvent - 'ExtenderEvent - 'BeamEvent - 'SlurEvent - 'TieEvent - 'CrescendoEvent - 'DecrescendoEvent - 'PhrasingSlurEvent - 'TremoloEvent - 'SustainEvent - 'SostenutoEvent - 'TextSpanEvent - 'HarmonicEvent - 'BeamForbidEvent - 'AbsoluteDynamicEvent - 'TupletSpanEvent - 'TrillSpanEvent - 'GlissandoEvent - 'ArpeggioEvent - 'NoteGroupingEvent - 'UnaCordaEvent)) +(define post-event? + (make-music-type-predicate + 'AbsoluteDynamicEvent + 'ArpeggioEvent + 'ArticulationEvent + 'BeamEvent + 'BeamForbidEvent + 'CrescendoEvent + 'DecrescendoEvent + 'ExtenderEvent + 'FingeringEvent + 'GlissandoEvent + 'HarmonicEvent + 'HyphenEvent + 'MultiMeasureTextEvent + 'NoteGroupingEvent + 'PhrasingSlurEvent + 'SlurEvent + 'SostenutoEvent + 'StringNumberEvent + 'SustainEvent + 'TextScriptEvent + 'TextSpanEvent + 'TieEvent + 'TremoloEvent + 'TrillSpanEvent + 'TupletSpanEvent + 'UnaCordaEvent)) (define* (event-direction->lily-string event #:optional (required #t)) (let ((direction (ly:music-property event 'direction))) @@ -223,7 +224,7 @@ (define-post-event-display-method MultiMeasureTextEvent (event parser) #t (markup->lily-string (ly:music-property event 'text))) -(define-post-event-display-method HarmonicEvent (event parser) #t "\\harmonic") +(define-post-event-display-method HarmonicEvent (event parser) #f "\\harmonic") (define-post-event-display-method GlissandoEvent (event parser) #t "\\glissando") (define-post-event-display-method ArpeggioEvent (event parser) #t "\\arpeggio") (define-post-event-display-method AbsoluteDynamicEvent (event parser) #f @@ -247,7 +248,7 @@ ;;; (define-display-method GraceMusic (expr parser) - (format #f "\\grace ~a" + (format #f "\\grace ~a" (music->lily-string (ly:music-property expr 'element) parser))) ;; \acciaccatura \appoggiatura \grace @@ -265,7 +266,7 @@ ?stop)))) ;; we check whether ?start and ?stop look like ;; startAppoggiaturaMusic stopAppoggiaturaMusic - (and (with-music-match (?start (music + (and (with-music-match (?start (music 'SequentialMusic elements ((music 'EventChord @@ -276,7 +277,7 @@ 'SlurEvent span-direction START)))))) #t) - (with-music-match (?stop (music + (with-music-match (?stop (music 'SequentialMusic elements ((music 'EventChord @@ -300,7 +301,7 @@ ?stop)))) ;; we check whether ?start and ?stop look like ;; startAcciaccaturaMusic stopAcciaccaturaMusic - (and (with-music-match (?start (music + (and (with-music-match (?start (music 'SequentialMusic elements ((music 'EventChord @@ -318,7 +319,7 @@ grob-value "grace" symbol 'Stem))))) #t) - (with-music-match (?stop (music + (with-music-match (?stop (music 'SequentialMusic elements ((music 'ContextSpeccedMusic @@ -357,7 +358,7 @@ (define-display-method SequentialMusic (seq parser) (let ((force-line-break (and (*force-line-break*) - ;; hm + ;; hm (> (length (ly:music-property seq 'elements)) (*max-element-number-before-break*)))) (elements (ly:music-property seq 'elements)) @@ -424,7 +425,7 @@ Otherwise, return #f." (format #f "\\afterGrace ~a ~a" (music->lily-string ?before-grace parser) (music->lily-string ?grace parser)))) - + ;;; ;;; Chords ;;; @@ -439,7 +440,7 @@ Otherwise, return #f." ;; tagged_post_event: '-' \tag embedded_scm post_event (let* ((elements (ly:music-property chord 'elements)) - (simple-elements (filter (make-music-type-predicate + (simple-elements (filter (make-music-type-predicate 'NoteEvent 'ClusterNoteEvent 'RestEvent 'MultiMeasureRestEvent 'SkipEvent 'LyricEvent) elements))) @@ -448,7 +449,13 @@ Otherwise, return #f." ;; and BreathingEvent (\breathe) (music->lily-string (car elements) parser) (if (and (not (null? simple-elements)) - (null? (cdr simple-elements))) + (null? (cdr simple-elements)) + ;; special case: if this simple_element has a HarmonicEvent in its + ;; 'articulations list, it should be interpreted instead as a + ;; note_chord_element, since \harmonic only works inside chords, + ;; even for single notes, e.g., < c\harmonic > + (null? (filter (make-music-type-predicate 'HarmonicEvent) + (ly:music-property (car simple-elements) 'articulations)))) ;; simple_element : note | figure | rest | mmrest | lyric_element | skip (let* ((simple-element (car simple-elements)) (duration (ly:music-property simple-element 'duration)) @@ -475,7 +482,7 @@ Otherwise, return #f." (music->lily-string music parser)) chord-elements) (duration->lily-string (ly:music-property (car chord-elements) - 'duration)) + 'duration)) (map-in-order (lambda (music) (music->lily-string music parser)) post-events)))) @@ -562,7 +569,7 @@ Otherwise, return #f." (if (or (null? pitch-alist) (null? tonic)) "\\key \\default" - (let ((c-pitch-alist (ly:transpose-key-alist pitch-alist + (let ((c-pitch-alist (ly:transpose-key-alist pitch-alist (ly:pitch-diff (ly:make-pitch 0 0 0) tonic)))) (format #f "\\key ~a \\~a~a" (note-name->lily-string (ly:music-property key 'tonic) parser) @@ -607,7 +614,7 @@ Otherwise, return #f." (else fig)) (if (null? alteration) "" - (cond + (cond ((= alteration DOUBLE-FLAT) "--") ((= alteration FLAT) "-") ((= alteration NATURAL) "!") @@ -655,7 +662,7 @@ Otherwise, return #f." (parameterize ((*force-line-break* #f) (*time-factor-numerator* (/ num nd-gcd)) (*time-factor-denominator* (/ den nd-gcd))) - (format #f "\\times ~a/~a ~a" + (format #f "\\times ~a/~a ~a" num den (music->lily-string (ly:music-property times 'element) parser))))) @@ -725,7 +732,7 @@ Otherwise, return #f." ;;; ;;; Contexts -;;; +;;; (define-display-method ContextSpeccedMusic (expr parser) (let ((id (ly:music-property expr 'context-id)) @@ -742,8 +749,8 @@ Otherwise, return #f." "" (format #f " = ~s" id)) (if (null? operations) - "" - (format #f " \\with {~{~a~}~%~v_}" + "" + (format #f " \\with {~{~a~}~%~v_}" (parameterize ((*indent* (+ (*indent*) 2))) (map (lambda (op) (format #f "~%~v_\\~a ~s" @@ -810,8 +817,8 @@ Otherwise, return #f." (if (and (not (null? once))) "\\once " "") - (if (eqv? (*current-context*) 'Bottom) - "" + (if (eqv? (*current-context*) 'Bottom) + "" (format #f "~a . " (*current-context*))) property (property-value->lily-string value parser) @@ -819,8 +826,8 @@ Otherwise, return #f." (define-display-method PropertyUnset (expr parser) (format #f "\\unset ~a~a~a" - (if (eqv? (*current-context*) 'Bottom) - "" + (if (eqv? (*current-context*) 'Bottom) + "" (format #f "~a . " (*current-context*))) (ly:music-property expr 'symbol) (new-line->lily-string))) @@ -841,8 +848,8 @@ Otherwise, return #f." (not once)) "" "\\once ") - (if (eqv? (*current-context*) 'Bottom) - "" + (if (eqv? (*current-context*) 'Bottom) + "" (format #f "~a . " (*current-context*))) symbol (if (null? (cdr properties)) @@ -850,13 +857,13 @@ Otherwise, return #f." properties) (property-value->lily-string value parser) (new-line->lily-string)))) - + (define-display-method RevertProperty (expr parser) (let ((symbol (ly:music-property expr 'symbol)) (properties (ly:music-property expr 'grob-property-path))) (format #f "\\revert ~a~a #'~a~a" - (if (eqv? (*current-context*) 'Bottom) - "" + (if (eqv? (*current-context*) 'Bottom) + "" (format #f "~a . " (*current-context*))) symbol (if (null? (cdr properties)) @@ -924,7 +931,7 @@ Otherwise, return #f." symbol 'tempoText))))) (format #f "\\tempo ~a" (scheme-expr->lily-string ?tempo-text))))) -;;; \clef +;;; \clef (define clef-name-alist #f) (define-public (memoize-clef-names clefs) "Initialize `clef-name-alist', if not already set." @@ -971,32 +978,37 @@ Otherwise, return #f." ;;; \time (define-extra-display-method ContextSpeccedMusic (expr parser) "If `expr' is a time signature set, return \"\\time ...\". -Otherwise, return #f." - (with-music-match (expr (music - 'ContextSpeccedMusic - element (music - 'ContextSpeccedMusic - context-type 'Timing - element (music - 'SequentialMusic - elements ((music - 'PropertySet - value ?num+den - symbol 'timeSignatureFraction) - (music - 'PropertySet - symbol 'beatLength) - (music - 'PropertySet - symbol 'measureLength) - (music - 'PropertySet - value ?grouping - symbol 'beatGrouping)))))) - (if (null? ?grouping) - (format #f "\\time ~a/~a~a" (car ?num+den) (cdr ?num+den) (new-line->lily-string)) - (format #f "#(set-time-signature ~a ~a '~s)~a" - (car ?num+den) (cdr ?num+den) ?grouping (new-line->lily-string))))) +Otherwise, return #f. Note: default grouping is not available." + (with-music-match + (expr (music + 'ContextSpeccedMusic + element (music + 'ContextSpeccedMusic + context-type 'Timing + element (music + 'SequentialMusic + elements ?elts)))) + (and + (> (length ?elts) 2) + (with-music-match ((cadr ?elts) + (music 'PropertySet + symbol 'beatLength)) + #t) + (with-music-match ((caddr ?elts) + (music 'PropertySet + symbol 'measureLength)) + #t) + (with-music-match ((car ?elts) + (music 'PropertySet + value ?num+den + symbol 'timeSignatureFraction)) + (if (eq? (length ?elts) 3) + (format + #f "\\time ~a/~a~a" + (car ?num+den) (cdr ?num+den) (new-line->lily-string)) + (format + #f "#(set-time-signature ~a ~a '())~a" + (car ?num+den) (cdr ?num+den) (new-line->lily-string))))))) ;;; \bar (define-extra-display-method ContextSpeccedMusic (expr parser) @@ -1032,7 +1044,7 @@ Otherwise, return #f." (define (moment->duration moment) (let ((result (assoc (- moment) moment-duration-alist =))) - (and result + (and result (cdr result)))) (define-extra-display-method ContextSpeccedMusic (expr parser) diff --git a/scm/define-music-properties.scm b/scm/define-music-properties.scm index 6daf65bef6..3d11e06c1c 100644 --- a/scm/define-music-properties.scm +++ b/scm/define-music-properties.scm @@ -1,4 +1,4 @@ -;;;; music-property-description.scm -- part of generated backend documentation +;;;; define-music-properties.scm -- part of generated backend documentation ;;;; ;;;; source file of the GNU LilyPond music typesetter ;;;; @@ -16,25 +16,20 @@ (map (lambda (x) (apply music-property-description x)) `( - (X-offset ,number? - "Offset of resulting grob; only used for balloon texts.") - (Y-offset ,number? - "Offset of resulting grob; only used for balloon texts.") - - (alteration ,number? "Alteration for figured bass.") (absolute-octave ,integer? "The absolute octave for a octave check note.") - (articulations ,ly:music-list? - "Articulation events specifically for this note.") + (alteration ,number? "Alteration for figured bass.") (articulation-type ,string? "Key for script definitions alist. TODO: Consider making type into symbol.") + (articulations ,ly:music-list? + "Articulation events specifically for this note.") + (associated-context ,string? "Name of the Voice context associated with +this @code{\\lyricsto} section.") (augmented ,boolean? "This figure is for an augmented figured bass (with @code{+} sign).") (augmented-slash ,boolean? "This figure is for an augmented figured bass (back-slashed number).") - (associated-context ,string? "Name of the Voice context associated with -this @code{\\newaddlyrics} section.") (bass ,boolean? "Set if this note is a bass note in a chord.") (bracket-start ,boolean? "Start a bracket here. @@ -56,23 +51,23 @@ Arg@tie{}1: the music, arg@tie{}2: factor.") (create-new ,boolean? "Create a fresh context.") (delta-step ,number? "How much should a fall change pitch?") + (denominator ,integer? "Denominator in a time signature.") (descend-only ,boolean? "If set, this @code{\\context} only descends in the context tree.") - (denominator ,integer? "Denominator in a time signature.") (digit ,integer? "Digit for fingering.") (diminished ,boolean? "This bass figure should be slashed.") (direction ,ly:dir? "Print this up or down?") (drum-type ,symbol? "Which percussion instrument to play this note on.") (duration ,ly:duration? "Duration of this note or lyric.") - (error-found ,boolean? - "If true, a parsing error was found in this expression.") (element ,ly:music? "The single child of a Music_wrapper music object, or the body of a repeat.") (elements ,ly:music-list? "A list of elements for sequential of simultaneous music, or the alternatives of repeated music.") (elements-callback ,procedure? "Return a list of children, for use by a sequential iterator. Takes a single music parameter.") + (error-found ,boolean? + "If true, a parsing error was found in this expression.") (figure ,integer? "A bass figure.") (force-accidental ,boolean? "If set, a cautionary accidental should @@ -103,9 +98,9 @@ whether to allow, forbid or force a line break.") (no-continuation ,boolean? "If set, disallow continuation lines.") (numerator ,integer? "Numerator of a time signature.") - (once ,boolean? "Apply this operation only during one time step?") (octavation ,integer? "This pitch was octavated by how many octaves? For chord inversions, this is negative.") + (once ,boolean? "Apply this operation only during one time step?") (origin ,ly:input-location? "Where was this piece of music defined?") (page-break-permission ,symbol? "When the music is at top-level, @@ -115,9 +110,9 @@ whether to allow, forbid or force a page break.") top-level, a page marker object is instanciated instead of a score.") (page-turn-permission ,symbol? "When the music is at top-level, whether to allow, forbid or force a page turn.") + (parenthesize ,boolean? "Enclose resulting objects in parentheses?") (part-combine-status ,symbol? "Change to what kind of state? Options are @code{solo1}, @code{solo2} and @code{unisono}.") - (parenthesize ,boolean? "Enclose resulting objects in parentheses?") (pitch ,ly:pitch? "The pitch of this note.") (pitch-alist ,list? "A list of pitches jointly forming the scale of a key signature.") @@ -129,17 +124,17 @@ It must take a single argument, being the context.") (property-operations ,list? "Do these operations for instantiating the context.") + (quoted-context-id ,string? "The ID of the context to direct quotes to, +e.g., @code{cue}.") + (quoted-context-type ,symbol? "The name of the context to +direct quotes to, e.g., @code{Voice}.") (quoted-events ,vector? "A vector of with @code{moment} and @code{event-list} entries.") (quoted-music-name ,string? "The name of the voice to quote.") - (quoted-voice-direction ,ly:dir? "Should the quoted voice be up-stem -or down-stem?") - (quoted-context-type ,symbol? "The name of the context to -direct quotes to, e.g., @code{Voice}.") - (quoted-context-id ,string? "The ID of the context to direct quotes to, -e.g., @code{cue}.") (quoted-transposition ,ly:pitch? "The pitch used for the quote, overriding @code{\\transposition}.") + (quoted-voice-direction ,ly:dir? "Should the quoted voice be up-stem +or down-stem?") (repeat-count ,integer? "Do a @code{\\repeat} how often?") @@ -158,21 +153,21 @@ a @code{StringNumberEvent}.") (tags ,list? "List of symbols that for denoting extra details, e.g., @code{\\tag #'part @dots{}} could tag a piece of music as only being active in a part.") + (tempo-unit ,ly:duration? "The unit for the metronome count.") + (text ,markup? "Markup expression to be printed.") (text-type ,symbol? "Particular type of text script (e.g., finger, dynamic).") - (text ,markup? "Markup expression to be printed.") - (tempo-unit ,ly:duration? "The unit for the metronome count.") (to-relative-callback ,procedure? "How to transform a piece of music to relative pitches.") (tonic ,ly:pitch? "Base of the scale.") (tremolo-type ,integer? "Speed of tremolo, e.g., 16 for @code{c4:16}.") (trill-pitch ,ly:pitch? "Pitch of other note of the trill.") + (tweaks ,list? "An alist of properties to override in the backend +for the grob made of this event.") (type ,symbol? "The type of this music object. Determines iteration in some cases.") (types ,list? "The types of this music object; determines by what engraver this music expression is processed.") - (tweaks ,list? "An alist of properties to override in the backend -for the grob made of this event.") (untransposable ,boolean? "If set, this music is not transposed.") @@ -183,4 +178,10 @@ music expression is to be discarded by the toplevel music handler.") (what ,symbol? "What to change for auto-change. FIXME: Naming.") + + (X-offset ,number? + "Offset of resulting grob; only used for balloon texts.") + + (Y-offset ,number? + "Offset of resulting grob; only used for balloon texts.") ))) diff --git a/scm/define-music-types.scm b/scm/define-music-types.scm index 1017a2c5c4..0dc1c66bcf 100644 --- a/scm/define-music-types.scm +++ b/scm/define-music-types.scm @@ -120,6 +120,13 @@ Syntax: @var{note}@code{\\breathe}") (types . (general-music event breathing-event)) )) + (ClusterNoteEvent + . ((description . "A note that is part of a cluster.") + ;; not a note-event, to ensure that Note_heads_engraver doesn't eat it. + (types . (general-music cluster-note-event melodic-event + rhythmic-event event)) + )) + (ContextChange . ((description . "Change staves in Piano staff. @@ -128,13 +135,6 @@ Syntax: @code{\\change Staff = @var{new-id}}") (types . (general-music translator-change-instruction)) )) - (ClusterNoteEvent - . ((description . "A note that is part of a cluster.") - ;; not a note-event, to ensure that Note_engraver doesn't eat it. - (types . (general-music cluster-note-event melodic-event - rhythmic-event event)) - )) - (ContextSpeccedMusic . ((description . "Interpret the argument music within a specific context.") @@ -147,25 +147,25 @@ specific context.") (CrescendoEvent . ((description . "Begin or end a crescendo. -Syntax: @var{note}@code{\\cr} @dots{} @var{note}@code{\\rc} +Syntax: @var{note}@code{\\<} @dots{} @var{note}@code{\\!} -You can also use @code{\\<}, @code{\\!}, @code{\\cresc}, and -@code{\\endcresc}. See the Notation Reference for details.") +An alternative syntax is @var{note}@code{\\cr} @dots{} +@var{note}@code{\\endcr}.") (types . (general-music span-event span-dynamic-event crescendo-event event)) )) (DecrescendoEvent - . ((description . "See @ref{CrescendoEvent}.") + . ((description . "Begin or end a decrescendo. + +Syntax: @var{note}@code{\\>} @dots{} @var{note}@code{\\!} + +An alternative syntax is @var{note}@code{\\decr} @dots{} +@var{note}@code{\\enddecr}.") (types . (general-music span-event span-dynamic-event decrescendo-event event)) )) - (ExtenderEvent - . ((description . "Extend lyrics.") - (types . (general-music extender-event event)) - )) - (Event . ((description . "Atomic music event.") (types . (general-music event)) @@ -180,6 +180,11 @@ You can also use @code{\\<}, @code{\\!}, @code{\\cresc}, and (types . (general-music event-chord simultaneous-music)) )) + (ExtenderEvent + . ((description . "Extend lyrics.") + (types . (general-music extender-event event)) + )) + (FingeringEvent . ((description . "Specify what finger to use for this note.") (types . (general-music fingering-event event)) @@ -363,14 +368,16 @@ Syntax: @var{note}@code{\\(} and @var{note}@code{\\)}") (PropertySet . ((description . "Set a context property. -Syntax: @code{\\property @var{context}.@var{prop} = @var{scheme-val}}") +Syntax: @code{\\set @var{context}.@var{prop} = @var{scheme-val}}") (types . (layout-instruction-event general-music)) (iterator-ctor . ,ly:property-iterator::constructor) )) (PropertyUnset - . ((description . "Remove the definition of a context -@code{\\property}.") + . ((description . "Restore the default setting for a context +property. See @ref{PropertySet}. + +Syntax: @code{\\unset @var{context}.@var{prop}}") (types . (layout-instruction-event general-music)) (iterator-ctor . ,ly:property-unset-iterator::constructor) )) @@ -398,16 +405,16 @@ Syntax: @code{\\property @var{context}.@var{prop} = @var{scheme-val}}") (types . (music-wrapper-music general-music relative-octave-music)) )) - (RepeatTieEvent - . ((description . "Ties for starting a second volta bracket.") - (types . (general-music event repeat-tie-event)) - )) - (RepeatedMusic . ((description . "Repeat music in different ways.") (types . (general-music repeated-music)) )) + (RepeatTieEvent + . ((description . "Ties for starting a second volta bracket.") + (types . (general-music event repeat-tie-event)) + )) + (RestEvent . ((description . "A Rest. diff --git a/scm/define-stencil-commands.scm b/scm/define-stencil-commands.scm index 2e816ccaa2..2ff87cfc72 100644 --- a/scm/define-stencil-commands.scm +++ b/scm/define-stencil-commands.scm @@ -6,52 +6,61 @@ ;; (c) 2005--2009 Han-Wen Nienhuys ;; -(map ly:register-stencil-expression - '(beam - bezier-sandwich - blank - bracket - char - circle - dashed-line - dashed-slur - dot - draw-line - ellipse - embedded-ps - glyph-string - named-glyph - oval - path - polygon - repeat-slash - resetcolor - round-filled-box - setcolor - text - url-link - utf-8-string - white-dot - white-text - zigzag-line - - grob-cause - no-origin - placebox - unknown +;; TODO: +;; - stencil-commands should have docstrings. - delay-stencil-evaluation - )) +(define-public (ly:all-stencil-commands) + "Return the list of stencil commands that can be +defined in the output modules (output-*.scm)" + '(beam + bezier-sandwich + blank + bracket + char + circle + dashed-line + dashed-slur + dot + draw-line + ellipse + embedded-ps + embedded-svg + glyph-string + grob-cause + named-glyph + no-origin + oval + path + placebox + polygon + repeat-slash + resetcolor + resetrotation + round-filled-box + setcolor + setrotation + text + unknown + url-link + utf-8-string + white-dot + white-text + zigzag-line + )) ;; TODO: -;; - generate this list by registering the output-backend-commands -;; output-backend-commands should have docstrings. -;; - remove hard copies in output-ps +;; - output-backend-commands should have docstrings. (define-public (ly:all-output-backend-commands) - "Return list of output backend commands." - '(combine-stencil - color - translate-stencil)) + "Return the list of extra output backend commands that +are used internally in lily/stencil-interpret.cc." + '(color + combine-stencil + delay-stencil-evaluation + rotate-stencil + translate-stencil + )) -(map ly:register-stencil-expression (ly:all-output-backend-commands)) +(map ly:register-stencil-expression + (append (ly:all-stencil-commands) + (ly:all-output-backend-commands))) diff --git a/scm/document-backend.scm b/scm/document-backend.scm index d77a194d31..41c2aab60c 100644 --- a/scm/document-backend.scm +++ b/scm/document-backend.scm @@ -1,14 +1,36 @@ -;;;; backend-documentation-lib.scm -- Functions for backend documentation +;;;; document-backend.scm -- Functions for backend documentation ;;;; ;;;; source file of the GNU LilyPond music typesetter ;;;; ;;;; (c) 2000--2009 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen +(define (sort-grob-properties x) + ;; force 'meta to the end of each prop-list + (let ((meta (assoc 'meta x))) + (append (sort (assoc-remove! x 'meta) ly:alist-citexi 'backend pr grob-description))) @@ -61,7 +83,7 @@ (hashq-ref iface->grob-table (car interface) '())) - string #:name name #:text (string-append @@ -93,11 +115,14 @@ node." (name (cdr (assoc 'name meta))) ;; (bla (display name)) (ifaces (map lookup-interface (cdr (assoc 'interfaces meta)))) - (ifacedoc (map (lambda (iface) - (if (pair? iface) - (ref-ify (symbol->string (car iface))) - (ly:error (_ "pair expected in doc ~s") name))) - (reverse ifaces))) + (ifacedoc (map ref-ify + (sort + (map (lambda (iface) + (if (pair? iface) + (symbol->string (car iface)) + (ly:error (_ "pair expected in doc ~s") name))) + ifaces) + ly:string-cistring lst) stringstring lst) ly:string-citexi 'backend (string->symbol prop) '())) ps)) (texi (description-list->texi descs #f))) diff --git a/scm/document-functions.scm b/scm/document-functions.scm index 34d406f89f..3c7646cc79 100644 --- a/scm/document-functions.scm +++ b/scm/document-functions.scm @@ -34,7 +34,7 @@ (let* ((fdocs (map (lambda (x) (document-scheme-function (car x) (cadr x) (cddr x))) all-scheme-functions)) - (sfdocs (sort fdocs string #:name "Scheme functions" #:desc "Primitive functions exported by LilyPond." diff --git a/scm/document-identifiers.scm b/scm/document-identifiers.scm index 67e282bd86..0d67934288 100644 --- a/scm/document-identifiers.scm +++ b/scm/document-identifiers.scm @@ -46,7 +46,7 @@ (define (identifierstring (car a)) (symbol->string (car b)))) diff --git a/scm/document-markup.scm b/scm/document-markup.scm index af4a65d7c6..ef99452be7 100644 --- a/scm/document-markup.scm +++ b/scm/document-markup.scm @@ -62,7 +62,7 @@ "@end itemize\n")))))) (define (markup-functionstring (procedure-name a)) (symbol->string (procedure-name b)))) + (ly:string-cistring (procedure-name a)) (symbol->string (procedure-name b)))) (define (markup-category-doc-node category) (let* ((category-string (symbol->string category)) diff --git a/scm/document-music.scm b/scm/document-music.scm index b8190d95f4..53e5bad155 100644 --- a/scm/document-music.scm +++ b/scm/document-music.scm @@ -1,4 +1,4 @@ -;;;; document-markup.scm -- part of generated backend documentation +;;;; document-music.scm -- part of generated backend documentation ;;;; ;;;; source file of the GNU LilyPond music typesetter ;;;; @@ -10,7 +10,7 @@ #:name "Music properties" #:desc "All music properties, including descriptions." #:text - (let* ((ps (sort (map symbol->string all-music-properties) stringstring all-music-properties) ly:string-citexi 'music (string->symbol prop))) ps)) @@ -53,9 +53,8 @@ (symbol->string (car entry)) "} is in music objects of type " (human-listify - (sort - (map (lambda (x) (ref-ify (symbol->string x))) - (cdr entry)) stringstring (cdr entry)) + ly:string-cialist music-types->names) alistalist music-types->names) ly:alist-cistring classes))) + (map ref-ify (sort (map symbol->string classes) + ly:string-citexi (map (lambda (x) (property->texi 'music x props)) - (map car props)) + (sort (map car props) ly:symbol-cistring x) - "}")) accepted))) + (map ref-ify (sort (map symbol->string accepted) ly:string-citexi - (map (lambda (x) (property->texi 'translation x '())) propsr) + (map (lambda (x) (property->texi 'translation x '())) + (sort propsr ly:symbol-citexi - (map (lambda (x) (property->texi 'translation x '())) propsw) + (map (lambda (x) (property->texi 'translation x '())) + (sort propsw ly:symbol-cistring contexts) - string #:name name @@ -171,17 +169,18 @@ (if (pair? aliases) (string-append "\n\nThis context also accepts commands for the following context(s):\n\n" - (human-listify aliases) + (human-listify (sort aliases ly:string-cistring accepts))) + (human-listify (map ref-ify (sort (map symbol->string accepts) + ly:string-citexi - (map document-engraver-by-name consists) + (map document-engraver-by-name (sort consists ly:symbol-cistring (map car layout-alist)) stringstring (map car layout-alist)) ly:string-ci @@ -243,7 +243,7 @@ (define all-engravers-list (ly:get-all-translators)) (set! all-engravers-list (sort all-engravers-list - (lambda (a b) (stringstring (ly:translator-name a)) + (lambda (a b) (ly:string-cistring (ly:translator-name a)) (symbol->string (ly:translator-name b)))))) (define (all-engravers-doc) @@ -255,7 +255,7 @@ (map engraver-doc all-engravers-list))) (define (translation-properties-doc-string lst) - (let* ((ps (sort (map symbol->string lst) stringstring lst) ly:string-cisymbol ps)) (propdescs (map diff --git a/scm/documentation-generate.scm b/scm/documentation-generate.scm index 04b0a59942..09c3f35d49 100644 --- a/scm/documentation-generate.scm +++ b/scm/documentation-generate.scm @@ -1,4 +1,4 @@ -;;;; generate-documentation.scm -- Generate documentation +;;;; documentation-generate.scm -- Generate documentation ;;;; ;;;; source file of the GNU LilyPond music typesetter ;;;; @@ -17,6 +17,7 @@ ;; todo: naming: grob vs. layout property (map ly:load '("documentation-lib.scm" + "lily-sort.scm" "document-functions.scm" "document-translation.scm" "document-music.scm" @@ -57,7 +58,7 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(define file-name "lilypond-internals") +(define file-name "internals") (define outname (string-append file-name ".texi")) (define out-port (open-output-file outname)) @@ -66,8 +67,8 @@ (display (string-append - (texi-file-head "LilyPond program-reference" file-name - "(lilypond/lilypond-internals.info)") + (texi-file-head "LilyPond Internals Reference" file-name + "(lilypond-internals.info)") " @include macros.itexi @@ -83,11 +84,6 @@ @iftex @afourpaper -@c don't replace quotes with directed quotes -@tex -\\gdef\\SETtxicodequoteundirected{Foo} -\\gdef\\SETtxicodequotebacktick{Bla} -@end tex @end iftex @finalout @@ -119,13 +115,13 @@ For LilyPond version @version{} @ifhtml @ifclear bigpage This document is also available as a -@uref{source/Documentation/user/lilypond-internals.pdf,PDF} and as -@uref{source/Documentation/user/lilypond-internals-big-page.html,one big page}. +@uref{source/Documentation/internals.pdf,PDF} and as +@uref{source/Documentation/internals-big-page.html,one big page}. @end ifclear @ifset bigpage This document is also available as a -@uref{source/Documentation/user/lilypond-internals.pdf,PDF} and as a -@uref{source/Documentation/user/lilypond-internals/index.html,HTML indexed multiple pages}. +@uref{source/Documentation/internals.pdf,PDF} and as a +@uref{source/Documentation/internals/index.html,HTML indexed multiple pages}. @end ifset @end ifhtml diff --git a/scm/documentation-lib.scm b/scm/documentation-lib.scm index ba434f1947..8315a765c1 100644 --- a/scm/documentation-lib.scm +++ b/scm/documentation-lib.scm @@ -149,7 +149,8 @@ string-to-use). If QUOTE? is #t, embed table in a @quotation environment." name) (define (ref-ify x) - "Add ref to X" + "Return @ref{X}. If mapping ref-ify to a list that needs to be sorted, + sort the list first." (string-append "@ref{" x "}")) (define (human-listify lst) diff --git a/scm/font.scm b/scm/font.scm index c29258860c..3d30e45695 100644 --- a/scm/font.scm +++ b/scm/font.scm @@ -1,7 +1,7 @@ ;;;; font.scm -- construct font trees ;;;; ;;;; source file of the GNU LilyPond music typesetter -;;;; +;;;; ;;;; (c) 2004--2009 Han-Wen Nienhuys ;; TODO: @@ -28,14 +28,14 @@ qualifier default) (make #:qualifier qualifier - #:default default + #:default default #:children (make-hash-table 11))) (define-method (display (leaf ) port) (map (lambda (x) (display x port)) (list "#" ))) @@ -50,7 +50,7 @@ "(def: " (font-default node) ") {\n")) - (for-each + (for-each (lambda (x) (display "\n") (display (car x) port) @@ -65,7 +65,7 @@ (define-method (add-font (node ) fprops size-family) (define (assoc-delete key alist) (assoc-remove! (list-copy alist) key)) - + (define (make-node fprops size-family) (if (null? fprops) (make-font-tree-leaf (car size-family) (cdr size-family)) @@ -151,12 +151,12 @@ (fetaNumber ,(ly:pt 20.0) ,feta-alphabet-size-vector) (fetaMusic ,(ly:pt 20.0) #(,(delay (ly:system-font-load "emmentaler-11")) - ,(delay (ly:system-font-load "emmentaler-13")) + ,(delay (ly:system-font-load "emmentaler-13")) ,(delay (ly:system-font-load "emmentaler-14")) - ,(delay (ly:system-font-load "emmentaler-16")) + ,(delay (ly:system-font-load "emmentaler-16")) ,(delay (ly:system-font-load "emmentaler-18")) - ,(delay (ly:system-font-load "emmentaler-20")) - ,(delay (ly:system-font-load "emmentaler-23")) + ,(delay (ly:system-font-load "emmentaler-20")) + ,(delay (ly:system-font-load "emmentaler-23")) ,(delay (ly:system-font-load "emmentaler-26")))) (fetaBraces ,(ly:pt 20.0) #(,(delay (ly:system-font-load "aybabtu"))))))) @@ -178,9 +178,9 @@ (font-shape . ,shape))) (ly:pt 12))))))) - (add-node 'upright 'normal) - (add-node 'caps 'normal) - (add-node 'upright 'bold) + (add-node 'upright 'normal) + (add-node 'caps 'normal) + (add-node 'upright 'bold) (add-node 'italic 'normal) (add-node 'italic 'bold)) @@ -194,8 +194,17 @@ (define-public (make-century-schoolbook-tree factor) (make-pango-font-tree - "Century Schoolbook L" - "Sans" "Mono" factor)) + "Century Schoolbook L,serif" + "sans-serif" "monospace" factor)) + +(define-public all-text-font-encodings + '(latin1)) + +(define-public all-music-font-encodings + '(fetaBraces + fetaDynamic + fetaMusic + fetaNumber)) (define-public (magstep s) (exp (* (/ s 6) (log 2)))) diff --git a/scm/framework-eps.scm b/scm/framework-eps.scm index 7383f3181c..bd1d9bb1aa 100644 --- a/scm/framework-eps.scm +++ b/scm/framework-eps.scm @@ -1,4 +1,4 @@ -;;;; framework-ps.scm -- +;;;; framework-eps.scm -- ;;;; ;;;; source file of the GNU LilyPond music typesetter ;;;; diff --git a/scm/framework-null.scm b/scm/framework-null.scm index a552b5e707..bcc58142e5 100644 --- a/scm/framework-null.scm +++ b/scm/framework-null.scm @@ -1,4 +1,4 @@ -;; module for benchmarking. +;;;; framework-null.scm -- module for benchmarking. (define-module (scm framework-null) #:export (output-framework) diff --git a/scm/framework-scm.scm b/scm/framework-scm.scm index 5cb3a67490..7c7c7e1045 100644 --- a/scm/framework-scm.scm +++ b/scm/framework-scm.scm @@ -1,3 +1,4 @@ +;;;; framework-scm.scm (define-module (scm framework-scm) #:export (output-framework) diff --git a/scm/framework-socket.scm b/scm/framework-socket.scm index 69b48db8a1..ab612e59aa 100644 --- a/scm/framework-socket.scm +++ b/scm/framework-socket.scm @@ -1,3 +1,5 @@ +;;;; framework-socket.scm + (define-module (scm framework-socket) #:export (output-framework) ) diff --git a/scm/framework-svg.scm b/scm/framework-svg.scm index b2e0b5604d..3d03aa6e30 100644 --- a/scm/framework-svg.scm +++ b/scm/framework-svg.scm @@ -34,8 +34,8 @@ (page-count (length page-stencils)) (paper-width (ly:output-def-lookup paper 'paper-width)) (paper-height (ly:output-def-lookup paper 'paper-height)) - (page-width (inexact->exact (ceiling (* output-scale paper-width)))) - (page-height (inexact->exact (ceiling (* output-scale paper-height)))) + (page-width (* output-scale paper-width)) + (page-height (* output-scale paper-height)) (page-set? (or (> page-count 1) landscape?))) (ly:outputter-output-scheme outputter @@ -44,19 +44,16 @@ '(xmlns . "http://www.w3.org/2000/svg") '(xmlns:xlink . "http://www.w3.org/1999/xlink") '(version . "1.2") - - ;; Argggghhhh: SVG takes the px <-> mm mapping from the windowing system - `(width . ,(format "~s" page-width)) - `(height . ,(format "~s" page-height)))) + `(width . ,(ly:format "~2fmm" page-width)) + `(height . ,(ly:format "~2fmm" page-height)) + `(viewBox . ,(ly:format "0 0 ~4f ~4f" + paper-width paper-height)))) - (dump (dump-fonts outputter paper)) (dump (string-append ;; FIXME: only use pages if there are more than one, pageSet is ;; not supported by all SVG applications yet. - (if page-set? (eo 'pageSet) "") - (eo 'g `(transform . ,(format "scale(~a, ~a) " - output-scale output-scale))))) + (if page-set? (eo 'pageSet) ""))) (for-each (lambda (page) @@ -67,7 +64,6 @@ (if page-set? (eo 'pageSet) "") (dump (string-append - (ec 'g) (if page-set? (ec 'pageSet) "") (ec 'svg))) @@ -84,27 +80,6 @@ (eo 'page '(page-orientation . "270")) (eo 'page)))) - (dump (string-append (eo 'g ))) (ly:outputter-dump-stencil outputter page) - (dump (string-append (ec 'g))) (if (or landscape? page-set?) (dump (ec 'page)))) - -(define (embed-font string) - (let ((start (string-contains string "")) - (end (string-contains string ""))) - (substring string (+ start 7) (- end 1)))) - -(define (dump-fonts outputter paper) - (let* ((fonts (ly:paper-fonts paper)) - (font-names (uniq-list (sort - (filter string? - (map ly:font-file-name fonts)) string -;; - -(define-module (scm kpathsea)) - -(use-modules (ice-9 popen) - (lily) - (ice-9 rdelim)) - - - -(define-public (ly:kpathsea-find-file name) - (let* - ((cmd (format #f "kpsewhich ~a" - (sanitize-command-option name))) - (unused (if (ly:get-option 'verbose) - (ly:message "Running ~a" cmd))) - (pipe (open-input-pipe cmd)) - (answer (read-line pipe))) - - (if (string? answer) - answer - #f))) - -(define-public (ly:kpathsea-expand-variable var) - (let* - ((cmd (format #f "kpsexpand '$'~a" - (sanitize-command-option var))) - (unused (if (ly:get-option 'verbose) - (ly:message "Running ~a" cmd))) - (pipe (open-input-pipe cmd)) - (answer (read-line pipe))) - - (if (string? answer) - answer #f))) - -;; Test: - -;;(display (ly:kpathsea-find-file "cmr10.tfm")) -;; -;;(display (ly:kpathsea-expand-variable "TEXMF")) - diff --git a/scm/layout-beam.scm b/scm/layout-beam.scm index 09dc09fd8e..e99387864d 100644 --- a/scm/layout-beam.scm +++ b/scm/layout-beam.scm @@ -1,5 +1,5 @@ ;;;; -;;;; beam.scm -- Beam scheme stuff +;;;; layout-beam.scm -- Beam scheme stuff ;;;; ;;;; source file of the GNU LilyPond music typesetter ;;;; diff --git a/scm/layout-page-dump.scm b/scm/layout-page-dump.scm deleted file mode 100644 index 8237106f06..0000000000 --- a/scm/layout-page-dump.scm +++ /dev/null @@ -1,147 +0,0 @@ -;;;; layout-page-tweaks.scm -- page breaking and page layout -;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 2006 Han-Wen Nienhuys -;;;; 2006 Nicolas Sceaux - -(define-module (scm layout-page-dump) - #:use-module (srfi srfi-1) - #:use-module (ice-9 pretty-print) - #:use-module (scm paper-system) - #:use-module (scm page) - #:use-module (scm layout-page-layout) - #:use-module (lily) - #:export (write-page-breaks - ;; utilisties for writing other page dump functions - record-tweaks dump-all-tweaks)) - -(define (record-tweaks what property-pairs tweaks) - (let ((key (ly:output-def-lookup (ly:grob-layout what) - 'tweak-key - "tweaks")) - (when (ly:grob-property what 'when))) - (if (not (hash-ref tweaks key)) - (hash-set! tweaks key '())) - (hash-set! tweaks key - (acons when property-pairs - (hash-ref tweaks key))))) - -(define (graceless-moment mom) - (ly:make-moment (ly:moment-main-numerator mom) - (ly:moment-main-denominator mom) - 0 0)) - -(define (moment->skip mom) - (let ((main (if (> (ly:moment-main-numerator mom) 0) - (format "\\skip 1*~a/~a" - (ly:moment-main-numerator mom) - (ly:moment-main-denominator mom)) - "")) - (grace (if (< (ly:moment-grace-numerator mom) 0) - (format "\\grace { \\skip 1*~a/~a }" - (- (ly:moment-grace-numerator mom)) - (ly:moment-grace-denominator mom)) - ""))) - (format "~a~a" main grace))) - -(define (dump-tweaks out-port tweak-list last-moment) - (if (not (null? tweak-list)) - (let* ((now (caar tweak-list)) - (diff (ly:moment-sub now last-moment)) - (these-tweaks (cdar tweak-list)) - (skip (moment->skip diff)) - (line-break-str (if (assoc-get 'line-break these-tweaks #f) - "\\break\n" - "")) - (page-break-str (if (assoc-get 'page-break these-tweaks #f) - "\\pageBreak\n" - "")) - (space-tweaks (format "\\spacingTweaks #'~a\n" - (with-output-to-string - (lambda () - (pretty-print - (assoc-get 'spacing-parameters - these-tweaks '())))))) - (base (format "~a~a~a" - line-break-str - page-break-str - space-tweaks))) - (format out-port "~a\n~a\n" skip base) - (dump-tweaks out-port (cdr tweak-list) (graceless-moment now))))) - -(define (dump-all-tweaks pages tweaks output-name) - (let* ((paper (ly:paper-book-paper (page-property (car pages) 'paper-book))) - (name (format "~a-page-layout.ly" output-name)) - (out-port (open-output-file name))) - - (ly:message "Writing page layout to ~a" name) - (hash-for-each - (lambda (key val) - (format out-port "~a = {" key) - (dump-tweaks out-port (reverse val) (ly:make-moment 0 1)) - (display "}" out-port)) - tweaks) - (close-port out-port))) - -(define (write-page-breaks pages output-name) - "Dump page breaks and tweaks" - (let ((tweaks (make-hash-table 60))) - (define (handle-page page) - "Computes vertical stretch for each music line of `page' (starting by - the smallest lines), then record the tweak parameters of each line to - the `tweaks' hash-table." - (let* ((lines (page-property page 'lines)) - (line-count (length lines)) - (compute-max-stretch (ly:output-def-lookup - (ly:paper-book-paper (page-property page - 'paper-book)) - 'system-maximum-stretch-procedure)) - (page-number (page-property page 'page-number))) - (let set-line-stretch! ((sorted-lines (sort lines - (lambda (l1 l2) - (< (line-height l1) - (line-height l2))))) - (rest-height ;; sum of stretchable line heights - (reduce + 0.0 - (map line-height - (filter stretchable-line? lines)))) - (space-left (page-maximum-space-left page))) - (if (not (null? sorted-lines)) - (let* ((line (first sorted-lines)) - (height (line-height line)) - (stretch (min (compute-max-stretch line) - (if (and (stretchable-line? line) - (positive? rest-height)) - (/ (* height space-left) rest-height) - 0.0)))) - (set! (ly:prob-property line 'stretch) stretch) - (set-line-stretch! (cdr sorted-lines) - (if (stretchable-line? line) - (- rest-height height) - rest-height) - (- space-left stretch))))) - (let record-line-tweak ((lines lines) - (is-first-line #t) - (index 0)) - (if (not (null? lines)) - (let ((line (first lines))) - (if (not (ly:prob-property? line 'is-title)) - (record-tweaks - (ly:spanner-bound (ly:prob-property line 'system-grob) LEFT) - `((line-break . #t) - (page-break . ,is-first-line) - (spacing-parameters - . ((page-number . ,page-number) - (system-index . ,index) - (system-stretch . ,(ly:prob-property line 'stretch)) - (system-Y-extent . ,(paper-system-extent line Y)) - (system-refpoint-Y-extent . ,(paper-system-staff-extents line)) - (page-system-count . ,line-count) - (page-printable-height . ,(page-printable-height page)) - (page-space-left . ,(page-property page 'space-left))))) - tweaks)) - (record-line-tweak (cdr lines) #f (1+ index))))))) - ;; Compute tweaks for each page, then dump them to the page-layout file - (for-each handle-page pages) - (dump-all-tweaks pages tweaks output-name))) diff --git a/scm/layout-page-layout.scm b/scm/layout-page-layout.scm deleted file mode 100644 index ffd6d632c4..0000000000 --- a/scm/layout-page-layout.scm +++ /dev/null @@ -1,478 +0,0 @@ -;;;; layout-page-layout.scm -- page breaking and page layout -;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 2004--2009 Jan Nieuwenhuizen -;;;; Han-Wen Nienhuys - -(define-module (scm layout-page-layout) - #:use-module (srfi srfi-1) - #:use-module (oop goops describe) - #:use-module (oop goops) - #:use-module (scm paper-system) - #:use-module (scm page) - #:use-module (scm layout-page-dump) - #:use-module (lily) - #:export (post-process-pages optimal-page-breaks make-page-from-systems - page-breaking-wrapper - stretchable-line? ; delete me - ;; utilities for writing custom page breaking functions - line-height line-next-space line-next-padding - line-minimum-distance line-ideal-distance - first-line-position - line-ideal-relative-position line-minimum-relative-position - page-maximum-space-to-fill page-maximum-space-left space-systems)) - -; this is for 2-pass spacing. Delete me. -(define (stretchable-line? line) - "Say whether a system can be stretched." - (not (or (ly:prob-property? line 'is-title) - (let ((system-extent (paper-system-staff-extents line))) - (= (interval-start system-extent) - (interval-end system-extent)))))) - -(define (stretch-and-draw-page paper-book systems page-number ragged - is-last-bookpart is-bookpart-last-page) - (define (max-stretch sys) - (if (ly:grob? sys) - (ly:grob-property sys 'max-stretch) - 0.0)) - - (define (stretchable? sys) - (and (ly:grob? sys) - (> (max-stretch sys) 0.0))) - - (define (height-estimate sys) - (interval-length - (if (ly:grob? sys) - (ly:grob-property sys 'pure-Y-extent) - (paper-system-extent sys Y)))) - - (define (print-system sys) - (if (ly:grob? sys) - (ly:system-print sys) - sys)) - - (define (set-line-stretch! sorted-lines rest-height space-left) - (if (not (null? sorted-lines)) - (let* ((line (first sorted-lines)) - (height (height-estimate line)) - (stretch (min (max-stretch line) - (if (positive? rest-height) - (/ (* height space-left) rest-height) - 0.0)))) - (if (stretchable? line) - (ly:system-stretch line stretch)) - (set-line-stretch! (cdr sorted-lines) - (if (stretchable? line) - (- rest-height height) - rest-height) - (- space-left stretch))))) - - (define (total-padding systems) - (let ((layout (ly:paper-book-paper paper-book))) - (if (or (null? systems) - (null? (cdr systems))) - 0.0 - (+ (line-next-padding (car systems) (cadr systems) layout) - (total-padding (cdr systems)))))) - - (let* ((page (make-page paper-book - 'page-number page-number - 'is-last-bookpart is-last-bookpart - 'is-bookpart-last-page is-bookpart-last-page)) - (paper (ly:paper-book-paper paper-book)) - (height (page-printable-height page)) - ; there is a certain amount of impreciseness going on here: - ; the system heights are estimated, we aren't using skyline distances - ; yet, etc. If we overstretch because of underestimation, the result - ; is very bad. So we stick in some extra space, just to be sure. - (buffer (/ height 10.0)) - (total-system-height (+ (apply + (map height-estimate systems)) - (total-padding systems))) - (height-left (- height total-system-height buffer))) - - (if (and - (not ragged) - (> height-left 0)) - (set-line-stretch! (sort systems - (lambda (s1 s2) - (< (height-estimate s1) - (height-estimate s2)))) - (apply + (map height-estimate - (filter stretchable? systems))) - height-left)) - - (let ((lines (map print-system systems))) - (page-set-property! page 'lines lines) - (page-set-property! - page 'configuration - (if (null? lines) - (list) - (let* ((paper (ly:paper-book-paper paper-book)) - (max-space-to-fill (page-maximum-space-to-fill page lines paper)) - (space-to-fill (if (ly:output-def-lookup - paper 'page-limit-inter-system-space #f) - (min max-space-to-fill - (* (ly:output-def-lookup - paper 'page-limit-inter-system-space-factor 1.4) - (- max-space-to-fill - (or (page-ideal-space-left page) 0)))) - max-space-to-fill)) - (spacing (space-systems space-to-fill lines ragged paper #f))) - (if (and (> (length lines) 1) - (or (not (car spacing)) (inf? (car spacing)))) - (begin - (ly:warning (_ "Can't fit systems on page -- ignoring between-system-padding")) - (cdr (space-systems space-to-fill lines ragged paper #t))) - (cdr spacing))))) - page))) - -(define (page-breaking-wrapper paper-book) - "Compute line and page breaks by calling the page-breaking paper variable, - then performs the post process function using the page-post-process paper - variable. Finally, return the pages." - (let* ((paper (ly:paper-book-paper paper-book)) - (pages ((ly:output-def-lookup paper 'page-breaking) paper-book))) - ((ly:output-def-lookup paper 'page-post-process) paper pages) - pages)) - -(define (post-process-pages layout pages) - "If the write-page-layout paper variable is true, dumps page breaks - and tweaks." - - (let* - ((parser (ly:modules-lookup (list (current-module)) 'parser)) - (output-name (ly:parser-output-name parser)) - ) - - (if (ly:output-def-lookup layout 'write-page-layout #f) - (write-page-breaks pages output-name)))) - -;;; -;;; Utilities for computing line distances and positions -;;; -(define (line-extent line) - "Return the extent of the line (its lowest and highest Y-coordinates)." - (paper-system-extent line Y)) - -(define (line-height line) - "Return the system height, that is the length of its vertical extent." - (interval-length (line-extent line))) - -(define (line-next-space line next-line layout) - "Return space to use between `line' and `next-line'. - `next-line' can be #f, meaning that `line' is the last line." - (let* ((title (paper-system-title? line)) - (next-title (and next-line (paper-system-title? next-line)))) - (ly:prob-property - line 'next-space - (ly:output-def-lookup layout - (cond ((and title next-title) 'between-title-space) - (title 'after-title-space) - (next-title 'before-title-space) - (else 'between-system-space)))))) - -(define (line-next-padding line next-line layout) - "Return padding to use between `line' and `next-line'. - `next-line' can be #f, meaning that `line' is the last line." - (let ((default (ly:output-def-lookup layout 'between-system-padding))) - (if (ly:grob? line) - (let* ((details (ly:grob-property line 'line-break-system-details)) - (padding (assq 'next-padding details))) - (if padding - (cdr padding) - default)) - (ly:prob-property line 'next-padding default)))) - - -(define (line-minimum-distance line next-line layout ignore-padding) - "Minimum distance between `line' reference position and `next-line' - reference position. If next-line is #f, return #f." - (and next-line - (let ((padding (if ignore-padding - 0 - (line-next-padding line next-line layout)))) - (if (or (ly:grob? line) (ly:grob? next-line)) - (max 0 (+ padding - (- (interval-start (line-extent line)) - (interval-end (line-extent next-line))))) - (max 0 (+ padding - (ly:paper-system-minimum-distance line next-line))))))) - -(define (line-ideal-distance line next-line layout ignore-padding) - "Ideal distance between `line' reference position and `next-line' - reference position. If next-line is #f, return #f." - (and next-line - (max 0 - (+ (- (+ (interval-end (paper-system-staff-extents next-line)) - (if ignore-padding 0 (line-next-padding line next-line layout))) - (interval-start (paper-system-staff-extents line))) - (line-next-space line next-line layout))))) - -(define (first-line-position line layout) - "Position of the first line on page" - (max (+ (if (ly:prob-property? line 'is-title) - ;; do not use page-top-space if first line is a title - 0.0 - (ly:output-def-lookup layout 'page-top-space)) - (interval-end (paper-system-staff-extents line))) - (interval-end (line-extent line)))) - -(define (line-ideal-relative-position line prev-line layout ignore-padding) - "Return ideal position of `line', relative to `prev-line' position. - `prev-line' can be #f, meaning that `line' is the first line." - (if (not prev-line) - ;; first line on page - (first-line-position line layout) - ;; not the first line on page - (max (line-minimum-distance prev-line line layout ignore-padding) - (line-ideal-distance prev-line line layout ignore-padding)))) - -(define (line-minimum-relative-position line prev-line layout ignore-padding) - "Return position of `line', relative to `prev-line' position. - `prev-line' can be #f, meaning that `line' is the first line." - (if (not prev-line) - ;; first line on page - (first-line-position line layout) - ;; not the first line on page - (line-minimum-distance prev-line line layout ignore-padding))) - -(define (line-position-on-page line prev-line prev-position page relative-positionning-fn) - "If `line' fits on `page' after `prev-line', which position on page is - `prev-position', then return the line's postion on page, otherwise #f. - `prev-line' can be #f, meaning that `line' is the first line." - (let* ((layout (ly:paper-book-paper (page-property page 'paper-book))) - (position (+ (relative-positionning-fn line prev-line layout #f) - (if prev-line prev-position 0.0))) - (bottom-position (- position - (interval-start (line-extent line))))) - position)) - -(define (page-maximum-space-to-fill page lines paper) - "Return the space between the first line top position and the last line - bottom position. This constitutes the maximum space to fill on `page' - with `lines'." - (let ((last-line (car (last-pair lines)))) - (- (page-printable-height page) - (first-line-position (first lines) paper) - (ly:prob-property last-line - 'bottom-space 0.0) - (- (interval-start (line-extent last-line)))))) - -(define (page-space-left page relative-positionning-fn) - (let ((paper (ly:paper-book-paper (page-property page 'paper-book)))) - (let bottom-position ((lines (page-property page 'lines)) - (prev-line #f) - (prev-position #f)) - (if (null? lines) - (page-printable-height page) - (let* ((line (first lines)) - (position (line-position-on-page - line prev-line prev-position page relative-positionning-fn))) - (if (null? (cdr lines)) - (max 0 - (- (page-printable-height page) - (- position - (interval-start (line-extent line))))) - (bottom-position (cdr lines) line position))))))) - -(define (page-maximum-space-left page) - (page-space-left page line-minimum-relative-position)) - -(define (page-ideal-space-left page) - (page-space-left page line-ideal-relative-position)) - -;;; -;;; Utilities for distributing systems on a page -;;; - -(define (space-systems space-to-fill lines ragged paper ignore-padding) - "Compute lines positions on page: return force and line positions as a pair. - force is #f if lines do not fit on page." - (let* ((empty-stencil (ly:make-stencil '() '(0 . 0) '(0 . 0))) - (empty-prob (ly:make-prob 'paper-system (list `(stencil . ,empty-stencil)))) - (cdr-lines (append (cdr lines) - (if (<= (length lines) 1) - (list empty-prob) - '()))) - (springs (map (lambda (prev-line line) - (list (line-ideal-distance prev-line line paper ignore-padding) - (line-next-space prev-line line paper))) - lines - cdr-lines)) - (rods (map (let ((i -1)) - (lambda (prev-line line) - (set! i (1+ i)) - (list i (1+ i) - (line-minimum-distance prev-line line paper ignore-padding)))) - lines - cdr-lines)) - (space-result - (ly:solve-spring-rod-problem springs rods space-to-fill ragged))) - (cons (car space-result) - (map (let ((topskip (first-line-position (first lines) paper))) - (lambda (y) - (+ y topskip))) - (cdr space-result))))) - - -;;; -;;; Page breaking function -;;; - -;; Optimal distribution of -;; lines over pages; line breaks are a given. - -;; TODO: -;; -;; - density scoring -;; - separate function for word-wrap style breaking? -;; - ragged-bottom? ragged-last-bottom? - -(define (get-path node done) - "Follow NODE.PREV, and return as an ascending list of pages. DONE -is what have collected so far, and has ascending page numbers." - (if (page? node) - (get-path (page-prev node) (cons node done)) - done)) - -(define (combine-penalties force user best-paths - inter-system-space force-equalization-factor) - (let* ((prev-force (if (null? best-paths) - 0.0 - (page-force (car best-paths)))) - (prev-penalty (if (null? best-paths) - 0.0 - (page-penalty (car best-paths)))) - (relative-force (/ force inter-system-space)) - (abs-relative-force (abs relative-force))) - (+ (* abs-relative-force (+ abs-relative-force 1)) - prev-penalty - (* force-equalization-factor (/ (abs (- prev-force force)) - inter-system-space)) - user))) - -(define (walk-paths done-lines best-paths current-lines is-last-bookpart - is-bookpart-last-page current-best paper-book page-alist) - "Return the best optimal-page-break-node that contains -CURRENT-LINES. DONE-LINES.reversed ++ CURRENT-LINES is a consecutive -ascending range of lines, and BEST-PATHS contains the optimal breaks -corresponding to DONE-LINES. - -CURRENT-BEST is the best result sofar, or #f." - (let* ((paper (ly:paper-book-paper paper-book)) - (this-page (make-page - paper-book - 'is-last-bookpart is-last-bookpart - 'is-bookpart-last-page is-bookpart-last-page - 'page-number (if (null? best-paths) - (ly:output-def-lookup paper 'first-page-number) - (1+ (page-page-number (first best-paths)))))) - (ragged-all (eq? #t (ly:output-def-lookup paper 'ragged-bottom))) - (ragged-last (eq? #t (ly:output-def-lookup paper 'ragged-last-bottom))) - (ragged (or ragged-all (and ragged-last is-bookpart-last-page))) - (space-to-fill (page-maximum-space-to-fill this-page current-lines paper)) - (vertical-spacing (space-systems space-to-fill current-lines ragged paper #f)) - (satisfied-constraints (car vertical-spacing)) - (force (if satisfied-constraints - (if (and is-bookpart-last-page ragged-last) - 0.0 - satisfied-constraints) - 10000)) - (positions (cdr vertical-spacing)) - (get-break-penalty (lambda (sys) - (ly:prob-property sys 'penalty 0.0))) - (user-nobreak-penalties (- (apply + (filter negative? - (map get-break-penalty - (cdr current-lines)))))) - (user-penalty (+ (max (get-break-penalty (car current-lines)) 0.0) - user-nobreak-penalties)) - (total-penalty (combine-penalties - force user-penalty best-paths - (ly:output-def-lookup paper 'between-system-space) - (ly:output-def-lookup paper 'verticalequalizationfactor 0.3))) - (new-best (if (or (not current-best) - (and satisfied-constraints - (< total-penalty (page-penalty current-best)))) - (begin - (map (lambda (x) - (page-set-property! this-page - (car x) - (cdr x))) - (list (cons 'prev (if (null? best-paths) - #f - (car best-paths))) - (cons 'lines current-lines) - (cons 'force force) - (cons 'configuration positions) - (cons 'penalty total-penalty))) - this-page) - current-best))) - (if #f ;; debug - (display - (list - "\nuser pen " user-penalty - "\nsatisfied-constraints" satisfied-constraints - "\nlast? " is-bookpart-last-page "ragged?" ragged - "\nis-better " is-better " total-penalty " total-penalty "\n" - "\nconfig " positions - "\nforce " force - "\nlines: " current-lines "\n"))) - (if #f ; debug - (display (list "\nnew-best is " (page-lines new-best) - "\ncontinuation of " - (if (null? best-paths) - "start" - (page-lines (car best-paths)))))) - (if (and (pair? done-lines) - ;; if this page is too full, adding another line won't help - satisfied-constraints) - (walk-paths (cdr done-lines) (cdr best-paths) - (cons (car done-lines) current-lines) - is-last-bookpart is-bookpart-last-page new-best - paper-book page-alist) - new-best))) - -(define (walk-lines done best-paths todo paper-book page-alist is-last-bookpart) - "Return the best page breaking as a single -page node for optimally breaking TODO ++ -DONE.reversed. BEST-PATHS is a list of break nodes corresponding to -DONE." - (if (null? todo) - (car best-paths) - (let* ((this-line (car todo)) - (is-bookpart-last-page (null? (cdr todo))) - (next (walk-paths done best-paths (list this-line) is-last-bookpart - is-bookpart-last-page #f paper-book page-alist))) - (walk-lines (cons this-line done) - (cons next best-paths) - (cdr todo) - paper-book - page-alist - is-last-bookpart)))) - -(define-public (optimal-page-breaks paper-book) - "Return pages as a list starting with 1st page. Each page is a 'page Prob." - (let* ((paper (ly:paper-book-paper paper-book)) - (lines (ly:paper-book-systems paper-book)) - (page-alist (layout->page-init paper)) - (force-equalization-factor (ly:output-def-lookup - paper 'verticalequalizationfactor 0.3)) - (is-last-bookpart (ly:output-def-lookup paper 'is-last-bookpart))) - (ly:message (_ "Calculating page breaks...")) - (let* ((best-break-node (walk-lines '() '() lines paper-book page-alist is-last-bookpart)) - (break-nodes (get-path best-break-node '()))) - (if #f; (ly:get-option 'verbose) - (begin - (display (list - "\nbreaks: " (map (lambda (node) - (ly:prob-property (car (page-lines node)) - 'number)) - break-nodes) - "\nsystems " (map page-lines break-nodes) - "\npenalties " (map page-penalty break-nodes) - "\nconfigs " (map page-configuration break-nodes))))) - ;; construct page stencils. - (for-each page-stencil break-nodes) - break-nodes))) diff --git a/scm/layout-slur.scm b/scm/layout-slur.scm index e153c0cf79..b9e8f5d315 100644 --- a/scm/layout-slur.scm +++ b/scm/layout-slur.scm @@ -1,4 +1,4 @@ -;;;; slur.scm -- Slur scheme stuff +;;;; layout-slur.scm -- Slur scheme stuff ;;;; ;;;; source file of the GNU LilyPond music typesetter ;;;; diff --git a/scm/lily-library.scm b/scm/lily-library.scm index 489921abcd..adb2bdfdc8 100644 --- a/scm/lily-library.scm +++ b/scm/lily-library.scm @@ -545,12 +545,27 @@ possibly turned off." (reverse matches)) ;;;;;;;;;;;;;;;; -; other +;; other + (define (sign x) (if (= x 0) 0 (if (< x 0) -1 1))) +(define-public (binary-search start end getter target-val) + (_i "Find the index between @var{start} and @var{end} (an integer) +which will produce the closest match to @var{target-val} when +applied to function @var{getter}.") + (if (<= end start) + start + (let* ((compare (quotient (+ start end) 2)) + (get-val (getter compare))) + (cond + ((< target-val get-val) + (set! end (1- compare))) + ((< get-val target-val) + (set! start (1+ compare)))) + (binary-search start end getter target-val)))) (define-public (car< a b) (< (car a) (car b))) @@ -593,17 +608,19 @@ possibly turned off." ;;; FONT may be font smob, or pango font string... (define-public (font-name-style font) - ;; FIXME: ughr, (ly:font-name) sometimes also has Style appended. + ;; FIXME: ughr, barf: feta-alphabet is actually emmentaler + (if (and (string? font) + (string-prefix? "feta-alphabet" font)) + (string-append "emmentaler" + "-" + (substring font + (string-length "feta-alphabet") + (string-length font))) (let* ((font-name (ly:font-name font)) - (full-name (if font-name font-name (ly:font-file-name font))) - (name-style (string-split full-name #\-))) - ;; FIXME: ughr, barf: feta-alphabet is actually emmentaler - (if (string-prefix? "feta-alphabet" full-name) - (list "emmentaler" - (substring full-name (string-length "feta-alphabet"))) - (if (not (null? (cdr name-style))) - name-style - (append name-style '("Regular")))))) + (full-name (if font-name font-name (ly:font-file-name font)))) + (if (string-prefix? "Aybabtu" full-name) + "aybabtu" + (string-downcase full-name))))) (define-public (modified-font-metric-font-scaling font) (let* ((designsize (ly:font-design-size font)) diff --git a/scm/lily-sort.scm b/scm/lily-sort.scm new file mode 100644 index 0000000000..96e83b7191 --- /dev/null +++ b/scm/lily-sort.scm @@ -0,0 +1,116 @@ +;;;; lily-sort.scm -- improved sorting of symbols, strings, and alists. +;;;; +;;;; source file of the GNU LilyPond music typesetter +;;;; +;;;; Copyright 2009 Mark Polesky + + +;; This file implements a LilyPond-specific character-sorting algorithm +;; that can be used to sort lists, alists, etc. consistently and +;; predictably throughout the source code. The primary advantage of this +;; algorithm is that lists are sorted in a more intuitive way, which may +;; allow users to find items faster in the documentation. +;; +;; As an example, a user, looking in the documentation to see if there's +;; a function called "ly:grob?", might assume that there isn't one, +;; since it doesn't appear before "ly:grob-alist-chain" (using the +;; default sort). +;; +;; This happens because "-" comes before "?" in the default sort order. +;; But since "?" is more likely to come at the end of a scheme symbol, a +;; more intuitive sort can be achieved by reversing that order. +;; +;; Similarly, non-alphanumeric characters can be ranked in terms of how +;; likely one will be found closer to the end of a symbol. For example, +;; ":" is stronger separator than "-", as can be seen here: +;; +;; "ly:staff-symbol::print" +;; "ly:staff-symbol-referencer::callback" +;; +;; Intuitively, "staff-symbol-referencer" ought to come after +;; "staff-symbol", but since "-" comes before ":" in the default sort +;; order, these symbols are by default listed in the opposite order. +;; +;; Thus the algorithm implemented here ranks the following nine +;; characters (starting with the space character) in order from +;; most-to-least likely to terminate a symbol: " !?<=>:-_". These nine +;; characters are in effect "extracted" from the default order and then +;; "prepended" to it so that they now come first. This is achieved with +;; the function "ly:char-generic-list " !?<=>:-_")) + (mem-a (member a init-list)) + (mem-b (member b init-list))) + (cond ((and mem-a mem-b) (< (length mem-b) (length mem-a))) + (mem-a #t) + (mem-b #f) + (else ((if ci char-cilist str0)) (b (string->list str1))) + (cond ((and (null? a) (null? b)) #f) + ((null? a) (cons #f (car b))) + ((null? b) (cons (car a) #f)) + ((not ((if ci char-ci=? char=?) (car a) (car b))) + (cons (car a) (car b))) + (else (find-mismatch (cdr a) (cdr b)))))) + +(define (ly:string-generic-string a) + (symbol->string b))) + +(define (ly:symbol-cistring a) + (symbol->string b))) + +(define (ly:aliststring (car a)) + (symbol->string (car b)))) + +(define (ly:alist-cistring (car a)) + (symbol->string (car b)))) diff --git a/scm/lily.scm b/scm/lily.scm index 270ed42e1c..783679ca04 100644 --- a/scm/lily.scm +++ b/scm/lily.scm @@ -40,7 +40,7 @@ and scale down result to prevent jaggies in PNG images.") (backend ps "Select backend. Possible values: 'eps, 'null, -'ps, 'scm, 'svg.") +'ps, 'scm, 'socket, 'svg.") (check-internal-types #f "Check every property assignment for types.") (clip-systems #f @@ -65,7 +65,7 @@ configurations.") "Debug cyclic callback chains.") (debug-skylines #f "Debug skylines.") - (delete-intermediate-files #f + (delete-intermediate-files #t "Delete unusable, intermediate PostScript files.") (dump-profile #f "Dump memory and time information for each file.") @@ -152,6 +152,9 @@ second. Dump results to `FILE.stacks' and "List available font names.") (verbose ,(ly:command-line-verbose?) "Value of the --verbose flag (read-only).") + (warning-as-error #f +"Change all warning and programming_error +messages into errors.") )) ;; Need to do this in the beginning. Other parts of the Scheme @@ -226,6 +229,11 @@ second. Dump results to `FILE.stacks' and (if (ly:get-option 'trace-scheme-coverage) (coverage:enable)) +(if (ly:get-option 'warning-as-error) + (begin + (set! ly:warning ly:error) + (set! ly:programming-error ly:error))) + (define-public parser #f) @@ -303,16 +311,6 @@ Print a message at LOCATION if any predicate failed." (recursion-helper (cdr signature) (cdr arguments) (1+ count))))) (recursion-helper signature arguments 1)) -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; output - -;; (define-public (output-framework) (write "hello\n")) - -(define output-ps-module - (make-module 1021 (list (resolve-interface '(scm output-ps))))) - -(define-public (ps-output-expression expr port) - (display (eval expr output-ps-module) port)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Safe definitions utility @@ -368,6 +366,7 @@ LilyPond safe mode. The syntax is the same as `define*-public'." "part-combiner.scm" "autochange.scm" "define-music-properties.scm" + "beam-settings.scm" "auto-beam.scm" "chord-name.scm" @@ -398,6 +397,7 @@ LilyPond safe mode. The syntax is the same as `define*-public'." "paper.scm" "backend-library.scm" "x11-color.scm" + "tablature.scm" ;; must be after everything has been defined "safe-lily.scm")) diff --git a/scm/ly-syntax-constructors.scm b/scm/ly-syntax-constructors.scm index ee79823361..8eefe63b71 100644 --- a/scm/ly-syntax-constructors.scm +++ b/scm/ly-syntax-constructors.scm @@ -1,4 +1,4 @@ -;;;; define-syntax.scm -- Defines functions for syntax expressions +;;;; ly-syntax-constructors.scm -- Defines functions for syntax expressions ;;;; ;;;; source file of the GNU LilyPond music typesetter ;;;; diff --git a/scm/memory-trace.scm b/scm/memory-trace.scm index 39bedc1804..9da1c30eda 100644 --- a/scm/memory-trace.scm +++ b/scm/memory-trace.scm @@ -1,3 +1,5 @@ +;;;; memory-trace.scm + (define-module (scm memory-trace)) (use-modules (lily) (ice-9 format)) diff --git a/scm/music-functions.scm b/scm/music-functions.scm index c51a9667ad..1372a15a52 100644 --- a/scm/music-functions.scm +++ b/scm/music-functions.scm @@ -1,11 +1,11 @@ ;;;; music-functions.scm -- ;;;; ;;;; source file of the GNU LilyPond music typesetter -;;;; +;;;; ;;;; (c) 1998--2009 Jan Nieuwenhuizen ;;;; Han-Wen Nienhuys -;; (use-modules (ice-9 optargs)) +;; (use-modules (ice-9 optargs)) ;;; ly:music-property with setter ;;; (ly:music-property my-music 'elements) @@ -36,7 +36,7 @@ First it recurses over the children, then the function is applied to MUSIC. " (let ((es (ly:music-property music 'elements)) (e (ly:music-property music 'element))) - (set! (ly:music-property music 'elements) + (set! (ly:music-property music 'elements) (map (lambda (y) (music-map function y)) es)) (if (ly:music? e) (set! (ly:music-property music 'element) @@ -45,7 +45,7 @@ First it recurses over the children, then the function is applied to MUSIC. (define-public (music-filter pred? music) "Filter out music expressions that do not satisfy PRED." - + (define (inner-music-filter pred? music) "Recursive function." (let* ((es (ly:music-property music 'elements)) @@ -76,7 +76,7 @@ First it recurses over the children, then the function is applied to MUSIC. "Display music, not done with music-map for clarity of presentation." (display music) - (display ": { ") + (display ": { ") (let ((es (ly:music-property music 'elements)) (e (ly:music-property music 'element))) (display (ly:music-mutable-properties music)) @@ -96,7 +96,7 @@ First it recurses over the children, then the function is applied to MUSIC. ;;; (define (markup-expression->make-markup markup-expression) "Transform `markup-expression' into an equivalent, hopefuly readable, scheme expression. -For instance, +For instance, \\markup \\bold \\italic hello ==> (markup #:line (#:bold (#:italic (#:simple \"hello\"))))" @@ -131,7 +131,7 @@ that is, for a music expression, a (make-music ...) form." (markup-expression->make-markup obj)) (;; music expression (ly:music? obj) - `(make-music + `(make-music ',(ly:music-property obj 'name) ,@(apply append (map (lambda (prop) `(',(car prop) @@ -170,7 +170,7 @@ that is, for a music expression, a (make-music ...) form." `(list ,@(map music->make-music obj))) (;; a pair (pair? obj) - `(cons ,(music->make-music (car obj)) + `(cons ,(music->make-music (car obj)) ,(music->make-music (cdr obj)))) (else obj))) @@ -204,8 +204,8 @@ Returns `obj'. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define-public (shift-one-duration-log music shift dot) - " add SHIFT to duration-log of 'duration in music and optionally - a dot to any note encountered. This scales the music up by a factor + " add SHIFT to duration-log of 'duration in music and optionally + a dot to any note encountered. This scales the music up by a factor 2^shift * (2 - (1/2)^dot)" (let ((d (ly:music-property music 'duration))) (if (ly:duration? d) @@ -316,15 +316,15 @@ This function replaces all repeats with unfold repeats. " (if (= 0 -1) (set! count (* 2 (quotient count 3)))) - + (shift-duration-log music (+ (if seq-arg? 1 0) (ly:intlog2 count)) dot-shift) - + (if seq-arg? (ly:music-compress e (ly:make-moment (length (ly:music-property e 'elements)) 1))))))) - - + + (if (pair? es) (set! (ly:music-property music 'elements) (map unfold-repeats es))) @@ -384,6 +384,7 @@ i.e. this is not an override" ;; TODO: take this from voicedGraceSettings or similar. '((Voice Stem font-size -3) (Voice NoteHead font-size -3) + (Voice TabNoteHead font-size -4) (Voice Dots font-size -3) (Voice Stem length-fraction 0.8) (Voice Stem no-stem-extend #t) @@ -394,9 +395,9 @@ i.e. this is not an override" (Voice Script font-size -3) (Voice Fingering font-size -8) (Voice StringNumber font-size -8))) - + (make-grob-property-set 'NoteColumn 'horizontal-shift (quotient n 2)) - (make-grob-property-set 'MultiMeasureRest 'staff-position (if (odd? n) -4 4)))))) + (make-grob-property-set 'MultiMeasureRest 'staff-position (if (odd? n) -4 4)))))) (define-safe-public (make-voice-props-revert) (make-sequential-music @@ -473,7 +474,7 @@ i.e. this is not an override" (define (ottava-modify context) "Either reset middleCPosition to the stored original, or remember old middleCPosition, add OCTAVATION to middleCPosition, and set -OTTAVATION to `8va', or whatever appropriate." +OTTAVATION to `8va', or whatever appropriate." (if (number? (ly:context-property context 'middleCOffset)) (let ((where (ly:context-property-where-defined context 'middleCOffset))) (ly:context-unset-property where 'middleCOffset) @@ -494,52 +495,50 @@ OTTAVATION to `8va', or whatever appropriate." (define-public (set-octavation ottavation) (ly:export (make-ottava-set ottavation))) -(define-public (make-time-signature-set num den . rest) - "Set properties for time signature NUM/DEN. Rest can contain a list -of beat groupings " - - (define (standard-beat-grouping num den) +;;; Need to keep this definition for \time calls from parser +(define-public (make-time-signature-set num den) + "Set properties for time signature NUM/DEN." + (make-beam-rule-time-signature-set num den '())) - "Some standard subdivisions for time signatures." - (let* - ((key (cons num den)) - (entry (assoc key '( - ; Simple time signatures - (( 3 . 8) . (3)) - (( 4 . 8) . (2 2)) - ; Compound time signatures - (( 6 . 4) . (3 3)) - (( 6 . 8) . (3 3)) - (( 6 . 16) . (3 3)) - (( 9 . 4) . (3 3 3)) - (( 9 . 8) . (3 3 3)) - (( 9 . 16) . (3 3 3)) - ((12 . 4) . (3 3 3 3)) - ((12 . 8) . (3 3 3 3)) - ((12 . 16) . (3 3 3 3)) - ; Some common irregular time signatures - (( 5 . 8) . (3 2)) - (( 8 . 8) . (3 3 2)) - )))) - - (if entry - (cdr entry) - '()))) +;;; Used for calls that include beat-grouping setting +(define-public (set-time-signature num den . rest) + "Set properties for time signature @var{num/den}. +If @var{rest} is present, it is used to make a default +@code{beamSetting} rule." + (ly:export (apply make-beam-rule-time-signature-set + (list num den rest)))) + +(define-public (make-beam-rule-time-signature-set num den rest) + "Implement settings for new time signature. Can be +called from either make-time-signature-set (used by \time +in parser) or set-time-signature (called from scheme code +included in .ly file." + + (define (make-default-beaming-rule context) + (override-property-setting + context + 'beamSettings + (list (cons num den) 'end) + (list (cons '* (car rest))))) (let* ((set1 (make-property-set 'timeSignatureFraction (cons num den))) (beat (ly:make-moment 1 den)) (len (ly:make-moment num den)) (set2 (make-property-set 'beatLength beat)) (set3 (make-property-set 'measureLength len)) - (set4 (make-property-set 'beatGrouping (if (pair? rest) - (car rest) - (standard-beat-grouping num den)))) - (basic (list set1 set2 set3 set4))) + (beaming-rule + (if (null? rest) + '() + (list (make-apply-context make-default-beaming-rule)))) + (output (cons* set1 set2 set3 beaming-rule))) (descend-to-context - (context-spec-music (make-sequential-music basic) 'Timing) 'Score))) + (context-spec-music + (make-sequential-music output) + 'Timing) + 'Score))) (define-public (make-mark-set label) - "Make the music for the \\mark command." + "Make the music for the \\mark command." (let* ((set (if (integer? label) (context-spec-music (make-property-set 'rehearsalMark label) 'Score) @@ -552,9 +551,6 @@ of beat groupings " (set! (ly:music-property ev 'label) label) ch)))) -(define-public (set-time-signature num den . rest) - (ly:export (apply make-time-signature-set `(,num ,den . ,rest)))) - (define-safe-public (make-articulation name) (make-music 'ArticulationEvent 'articulation-type name)) @@ -569,7 +565,7 @@ of beat groupings " 'span-direction span-dir)) (define-public (set-mus-properties! m alist) - "Set all of ALIST as properties of M." + "Set all of ALIST as properties of M." (if (pair? alist) (begin (set! (ly:music-property m (caar alist)) (cdar alist)) @@ -624,11 +620,9 @@ of beat groupings " (define-public (empty-music) (ly:export (make-music 'Music))) -;; Make a function that checks score element for being of a specific type. +;; Make a function that checks score element for being of a specific type. (define-public (make-type-checker symbol) (lambda (elt) - ;;(display symbol) - ;;(eq? #t (ly:grob-property elt symbol)) (not (eq? #f (memq symbol (ly:grob-property elt 'interfaces)))))) (define-public ((outputproperty-compatibility func sym val) grob g-context ao-context) @@ -649,7 +643,7 @@ of beat groupings " ;; (define-public (smart-bar-check n) - "Make a bar check that checks for a specific bar number. + "Make a bar check that checks for a specific bar number. " (let ((m (make-music 'ApplyContext))) (define (checker tr) @@ -744,11 +738,11 @@ SkipEvent. Useful for extracting parts from crowded scores" (define (delete-prop context) (let* ((where (ly:context-property-where-defined context 'graceSettings)) (current (ly:context-property where 'graceSettings)) - (prop-settings (filter + (prop-settings (filter (lambda(x) (sym-grob-context? x sym grob context-name)) - current)) + current)) (new-settings current)) - (for-each (lambda(x) + (for-each (lambda(x) (set! new-settings (delete x new-settings))) prop-settings) (ly:context-set-property! where 'graceSettings new-settings))) @@ -791,7 +785,7 @@ Syntax: (define-public (cue-substitute quote-music) "Must happen after quote-substitute." - + (if (vector? (ly:music-property quote-music 'quoted-events)) (let* ((dir (ly:music-property quote-music 'quoted-voice-direction)) (main-voice (if (eq? 1 dir) 1 0)) @@ -800,7 +794,7 @@ Syntax: (return-value quote-music)) (if (or (eq? 1 dir) (eq? -1 dir)) - + ;; if we have stem dirs, change both quoted and main music ;; to have opposite stems. (begin @@ -830,7 +824,7 @@ Syntax: (hash-ref quote-tab quoted-name #f) #f))) - + (if (string? quoted-name) (if (vector? quoted-vector) (begin @@ -857,7 +851,7 @@ Syntax: (if (and (ly:music? m) (eq? (ly:music-property m 'error-found) #t)) (set! found #t))) - + (for-each signal (ly:music-property music 'elements)) (signal (ly:music-property music 'element)) @@ -967,10 +961,10 @@ Syntax: (lambda (music parser) (music-map (quote-substitute (ly:parser-lookup parser 'musicQuotes)) music)) - + ;; switch-on-debugging (lambda (x parser) (music-map cue-substitute x)) - + (lambda (x parser) (skip-as-needed x parser) ))) @@ -989,14 +983,14 @@ Syntax: ;;;;;;;;;;;;;;;;; ;; lyrics -(define (apply-durations lyric-music durations) +(define (apply-durations lyric-music durations) (define (apply-duration music) (if (and (not (equal? (ly:music-length music) ZERO-MOMENT)) (ly:duration? (ly:music-property music 'duration))) (begin (set! (ly:music-property music 'duration) (car durations)) (set! durations (cdr durations))))) - + (music-map apply-duration lyric-music)) @@ -1319,14 +1313,14 @@ use GrandStaff as a context. " pcontext)) ;; same as modern, but cautionary accidentals are printed for all sharp or flat - ;; tones specified by the key signature. + ;; tones specified by the key signature. ((equal? style 'teaching) (set-accidentals-properties #f `(Staff ,(make-accidental-rule 'same-octave 0)) `(Staff ,(make-accidental-rule 'same-octave 1) ,teaching-accidental-rule) context)) - + ;; do not set localKeySignature when a note alterated differently from ;; localKeySignature is found. ;; Causes accidentals to be printed at every note instead of @@ -1363,7 +1357,7 @@ use GrandStaff as a context. " (define-public (mmrest-of-length mus) "Create a mmrest of exactly the same length as MUS." - + (let* ((skip (make-multi-measure-rest (ly:make-duration 0 0) '()))) @@ -1379,7 +1373,7 @@ use GrandStaff as a context. " (if (pair? evs) (ly:music-property (car evs) 'pitch) #f))) - + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define-public (extract-named-music music music-name) @@ -1395,7 +1389,7 @@ from @code{music}." (extract-named-music elt music-name) (if (null? elts) '() - (map (lambda(x) + (map (lambda(x) (extract-named-music x music-name )) elts))))) '()))) diff --git a/scm/output-lib.scm b/scm/output-lib.scm index f9b920f37d..db1181f740 100644 --- a/scm/output-lib.scm +++ b/scm/output-lib.scm @@ -89,22 +89,6 @@ )) -; default tunings for common string instruments -(define-public guitar-tuning '(4 -1 -5 -10 -15 -20)) -(define-public guitar-open-g-tuning '(2 -1 -5 -10 -17 -22)) -(define-public bass-tuning '(-17 -22 -27 -32)) -(define-public mandolin-tuning '(16 9 2 -5)) - -;; tunings for 5-string banjo -(define-public banjo-open-g-tuning '(2 -1 -5 -10 7)) -(define-public banjo-c-tuning '(2 -1 -5 -12 7)) -(define-public banjo-modal-tuning '(2 0 -5 -10 7)) -(define-public banjo-open-d-tuning '(2 -3 -6 -10 9)) -(define-public banjo-open-dm-tuning '(2 -3 -6 -10 9)) -;; convert 5-string banjo tuning to 4-string by removing the 5th string -(define-public (four-string-banjo tuning) - (reverse (cdr (reverse tuning)))) - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; note heads diff --git a/scm/output-ps.scm b/scm/output-ps.scm index b2c047a651..ee1da5308e 100644 --- a/scm/output-ps.scm +++ b/scm/output-ps.scm @@ -14,34 +14,7 @@ ;;;; * document output-interface (define-module (scm output-ps) - #:re-export (quote) - - ;; JUNK this -- see lily.scm: ly:all-output-backend-commands - #:export (unknown - bezier-sandwich - char - circle - comment - dashed-line - dashed-slur - dot - draw-line - ellipse - embedded-ps - named-glyph - no-origin - oval - placebox - polygon - repeat-slash - resetcolor - resetrotation - round-filled-box - setcolor - setrotation - text - )) - + #:re-export (quote)) (use-modules (guile) (ice-9 regex) @@ -208,9 +181,9 @@ x-radius y-radius thick)) (define (placebox x y s) - (ly:format -"~4f ~4f moveto -~a\n" x y s)) + (if (not (string-null? s)) + (ly:format "~4f ~4f moveto ~a\n" x y s) + "")) (define (polygon points blot-diameter filled?) (ly:format "~a ~4l ~a ~4f draw_polygon" @@ -290,9 +263,6 @@ (cdr y) url)) -(define (utf-8-string pango-font-description string) - (ly:warning (_ "utf-8-string encountered in PS backend"))) - (define (path thickness exps) (define (convert-path-exps exps) (if (pair? exps) @@ -303,6 +273,7 @@ (cond ((memq head '(rmoveto rlineto lineto moveto)) 2) ((memq head '(rcurveto curveto)) 6) + ((eq? head 'closepath) 0) (else 1))) (args (take rest arity)) ) @@ -317,7 +288,7 @@ (ly:format - "1 setlinecap ~a setlinewidth\n~l stroke" + "gsave currentpoint translate 1 setlinecap ~a setlinewidth\n~l stroke grestore" thickness - (convert-path-exps exps) )) + (convert-path-exps exps))) diff --git a/scm/output-socket.scm b/scm/output-socket.scm index 083d5a081b..5534c2816c 100644 --- a/scm/output-socket.scm +++ b/scm/output-socket.scm @@ -1,124 +1,106 @@ +;;;; output-socket.scm +;;;; +;;;; implement network-based output (socket) in Scheme (define-module (scm output-socket) - #:re-export (quote) - ) + #:re-export (quote)) (use-modules (guile) (srfi srfi-1) (srfi srfi-13) (lily)) -(define (dummy . rest) - "") -(display (ly:all-stencil-expressions)) -(for-each - (lambda (x) - (module-define! (current-module) - x - dummy)) - - (ly:all-stencil-expressions)) - - -(define-public (draw-line thick x1 y1 x2 y2) - (format "drawline ~a ~a ~a ~a ~a" - thick x1 y2 x2 y2)) - -(define-public (polygon xy-coords blot do-fill) - (format "polygon ~a ~a ~a" - blot - (if do-fill "True" "False") - (string-join - (map number->string xy-coords)) - )) - -(define-public (named-glyph font glyph) - (format "glyphshow ~a \"~a\" ~a \"~a\"" - (ly:font-glyph-name-to-charcode font glyph) - (ly:font-name font) - (modified-font-metric-font-scaling font) - glyph - )) - -(define-public (placebox x y s) - (format "at ~a ~a ~a\n" x y s)) - -(define-public (round-filled-box breapth width depth height blot-diameter) - (format "draw_round_box ~a ~a ~a ~a ~a" - breapth width depth height blot-diameter - )) +(define format ergonomic-simple-format) (define (event-cause grob) (let* - ((cause (ly:grob-property grob 'cause))) + ((cause (ly:grob-property grob 'cause))) - (cond - ((ly:stream-event? cause) cause) - (else - #f)))) + (if (ly:stream-event? cause) + cause + #f))) (define (grob-bbox grob offset) (let* - ((x-ext (ly:grob-extent grob grob X)) - (y-ext (ly:grob-extent grob grob Y)) - (x (car offset)) - (y (cdr offset))) + ((x-ext (ly:grob-extent grob grob X)) + (y-ext (ly:grob-extent grob grob Y)) + (x (car offset)) + (y (cdr offset))) (if (interval-empty? x-ext) (set! x-ext '(0 . 0))) (if (interval-empty? y-ext) (set! y-ext '(0 . 0))) - + (list (+ x (car x-ext)) (+ y (car y-ext)) (+ x (cdr x-ext)) - (+ y (cdr y-ext)) - ))) + (+ y (cdr y-ext))))) -(define-public (no-origin) - "nocause\n") +(define (escape-string str) + (string-regexp-substitute + " " "\\040" + (string-regexp-substitute "\"" "\\\"" str))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; stencil commands +;;; -(define-public (grob-cause offset grob) +(define (bezier-sandwich lst thick) + (format "bezier_sandwich ~a [~a]" + thick + (string-append + (string-join (map + (lambda (x) + (format "(~a,~a)" (car x) (cdr x))) + lst) + ",")))) + +(define (draw-line thick x1 y1 x2 y2) + (format "drawline ~a ~a ~a ~a ~a" + thick x1 y2 x2 y2)) + +(define (grob-cause offset grob) (let* - ((cause (event-cause grob)) - (tag (if (and cause (integer? (ly:event-property cause 'input-tag))) - (ly:event-property cause 'input-tag) - -1)) - (name (cdr (assoc 'name (ly:grob-property grob 'meta)))) - ) - + ((cause (event-cause grob)) + (tag (if (and cause (integer? (ly:event-property cause 'input-tag))) + (ly:event-property cause 'input-tag) + -1)) + (name (cdr (assoc 'name (ly:grob-property grob 'meta))))) + (apply format - (append (list "cause ~a \"~a\" ~a ~a ~a ~a\n" - tag name) - - (grob-bbox grob offset)) - ))) + (append (list "cause ~a \"~a\" ~a ~a ~a ~a\n" tag name) + (grob-bbox grob offset))))) +(define (named-glyph font glyph) + (format "glyphshow ~a \"~a\" ~a \"~a\"" + (ly:font-glyph-name-to-charcode font glyph) + (ly:font-name font) + (modified-font-metric-font-scaling font) + glyph)) -(define (escape-string str) - (string-regexp-substitute - " " "\\040" - (string-regexp-substitute "\"" "\\\"" str))) - -(define-public (utf-8-string - descr - string) - - (format "utf-8 \"~a\" \"~a\"" - (escape-string descr) +(define (no-origin) + "nocause\n") - ;; don't want unescaped spaces. - (escape-string string) - )) +(define (placebox x y s) + (if (not (string-null? s)) + (format "at ~a ~a ~a\n" x y s) + "")) +(define (polygon xy-coords blot do-fill) + (format "polygon ~a ~a ~a" + blot + (if do-fill "True" "False") + (string-join (map number->string xy-coords)))) -(define (bezier-sandwich lst thick) - (format - #f - "bezier_sandwich ~a [~a]" - thick - (string-append - (string-join (map (lambda (x) (format "(~a,~a)" (car x) (cdr x))) - lst) ",")))) +(define (round-filled-box breapth width depth height blot-diameter) + (format "draw_round_box ~a ~a ~a ~a ~a" + breapth width depth height blot-diameter)) + +(define (utf-8-string descr string) + (format "utf-8 \"~a\" \"~a\"" + (escape-string descr) + ;; don't want unescaped spaces. + (escape-string string))) diff --git a/scm/output-svg.scm b/scm/output-svg.scm index 80199a1f95..c916067bdf 100644 --- a/scm/output-svg.scm +++ b/scm/output-svg.scm @@ -1,43 +1,38 @@ -;;;; output-svg.scm -- implement Scheme output routines for SVG1 +;;;; output-svg.scm -- implement Scheme output routines for SVG ;;;; ;;;; source file of the GNU LilyPond music typesetter ;;;; ;;;; (c) 2002--2009 Jan Nieuwenhuizen +;;;; Patrick McCarty -;;;; http://www.w3.org/TR/SVG11 -;;;; http://www.w3.org/TR/SVG12/ -- page, pageSet in draft +;;;; Recommendations: +;;;; http://www.w3.org/TR/SVG11/ +;;;; http://www.w3.org/TR/SVGTiny12/ +;;;; http://www.w3.org/TR/SVGPrint/ -- page, pageSet in draft ;;;; TODO: -;;;; * .cff MUST NOT be in fc's fontpath. -;;;; - workaround: remove mf/out from ~/.fonts.conf, -;;;; instead add ~/.fonts and symlink all /mf/out/*otf there. -;;;; - bug in fontconfig/freetype/pango? - ;;;; * inkscape page/pageSet support -;;;; * inkscape SVG-font support -;;;; - use fontconfig/fc-cache for now, see output-gnome.scm (define-module (scm output-svg)) (define this-module (current-module)) (use-modules - (guile) - (ice-9 regex) - (ice-9 format) - (lily) - (srfi srfi-1) - (srfi srfi-13)) + (guile) + (ice-9 regex) + (ice-9 format) + (lily) + (srfi srfi-1) + (srfi srfi-13)) (define fancy-format format) (define format ergonomic-simple-format) -(define lily-unit-length 1.75) +(define lily-unit-length 1.7573) (define (dispatch expr) (let ((keyword (car expr))) (cond ((eq? keyword 'some-func) "") - ;;((eq? keyword 'placebox) (dispatch (cadddr expr))) (else (if (module-defined? this-module keyword) (apply (eval keyword this-module) (cdr expr)) @@ -48,7 +43,12 @@ ;; Helper functions (define-public (attributes attributes-alist) (apply string-append - (map (lambda (x) (format " ~s=\"~a\"" (car x) (cdr x))) + (map (lambda (x) + (let ((attr (car x)) + (value (cdr x))) + (if (number? value) + (set! value (ly:format "~4f" value))) + (format " ~s=\"~a\"" attr value))) attributes-alist))) (define-public (eo entity . attributes-alist) @@ -63,36 +63,36 @@ "c = close" (format "\n" entity)) - +(define-public (comment s) + (string-append "\n")) (define-public (entity entity string . attributes-alist) (if (equal? string "") (apply eoc entity attributes-alist) (string-append - (apply eo (cons entity attributes-alist)) string (ec entity)))) + (apply eo (cons entity attributes-alist)) string (ec entity)))) (define (offset->point o) - (format " ~S,~S" (car o) (- (cdr o)))) + (ly:format "~4f ~4f" (car o) (- (cdr o)))) (define (number-list->point lst) (define (helper lst) (if (null? lst) '() - (cons (format "~S,~S" (car lst) (cadr lst)) + (cons (format "~S ~S" (car lst) (- (cadr lst))) (helper (cddr lst))))) - (string-join (helper lst) " ")) + (string-join (helper lst) " ")) (define (svg-bezier lst close) (let* ((c0 (car (list-tail lst 3))) (c123 (list-head lst 3))) (string-append - (if (not close) "M " "L ") - (offset->point c0) - "C " (apply string-append (map offset->point c123)) - (if (not close) "" (string-append - "L " (offset->point close)))))) + (if (not close) "M" "L") + (offset->point c0) + "C" (string-join (map offset->point c123) " ") + (if (not close) "" "z")))) (define (sqr x) (* x x)) @@ -108,104 +108,198 @@ (map (lambda (x) (char->entity x)) (string->list string)))) (define svg-element-regexp - (make-regexp "^(<[a-z]+) (.*>)")) + (make-regexp "^(<[a-z]+) ?(.*>)")) + +(define scaled-element-regexp + (make-regexp "^(<[a-z]+ transform=\")(scale.[-0-9. ]+,[-0-9. ]+.\" .*>)")) (define pango-description-regexp-comma - (make-regexp "([^,]+), ?([-a-zA-Z_]*) ([0-9.]+)$")) + (make-regexp ",( Bold)?( Italic)?( Small-Caps)? ([0-9.]+)$")) (define pango-description-regexp-nocomma - (make-regexp "([^ ]+) ([-a-zA-Z_]*) ?([0-9.]+)$")) + (make-regexp "( Bold)?( Italic)?( Small-Caps)? ([0-9.]+)$")) -(define (pango-description-to-svg-font str) +(define (pango-description-to-text str expr) + (define alist '()) + (define (set-attribute attr val) + (set! alist (assoc-set! alist attr val))) (let* - ((size 4.0) - (family "Helvetica") - (style #f) - (match-1 (regexp-exec pango-description-regexp-comma str)) - (match-2 (regexp-exec pango-description-regexp-nocomma str)) - (match (if match-1 - match-1 - match-2))) + ((match-1 (regexp-exec pango-description-regexp-comma str)) + (match-2 (regexp-exec pango-description-regexp-nocomma str)) + (match (if match-1 + match-1 + match-2))) (if (regexp-match? match) (begin - (set! family (match:substring match 1)) - (if (< 0 (string-length (match:substring match 2))) - (set! style (match:substring match 2))) - (set! size - (string->number (match:substring match 3)))) - + (set-attribute 'font-family (match:prefix match)) + (if (string? (match:substring match 1)) + (set-attribute 'font-weight "bold")) + (if (string? (match:substring match 2)) + (set-attribute 'font-style "italic")) + (if (string? (match:substring match 3)) + (set-attribute 'font-variant "small-caps")) + (set-attribute 'font-size + (/ (string->number (match:substring match 4)) + lily-unit-length)) + (set-attribute 'text-anchor "start") + (set-attribute 'fill "currentColor")) (ly:warning (_ "cannot decypher Pango description: ~a") str)) - (set! style - (if (string? style) - (format "font-style:~a;" style) - "")) - - (format "font-family:~a;~afont-size:~a;text-anchor:west" - family - style - (/ size lily-unit-length)) - )) - -;;; FONT may be font smob, or pango font string -(define (svg-font font) - (if (string? font) - (pango-description-to-svg-font font) - (let ((name-style (font-name-style font)) - (size (modified-font-metric-font-scaling font)) - (anchor "west")) + (apply entity 'text expr (reverse! alist)))) + +(define (dump-path path scale . rest) + (define alist '()) + (define (set-attribute attr val) + (set! alist (assoc-set! alist attr val))) + (if (not (null? rest)) + (let* ((dx (car rest)) + (dy (cadr rest)) + (total-x (+ dx next-horiz-adv))) + (if (or (not (zero? total-x)) + (not (zero? dy))) + (let ((x (ly:format "~4f" total-x)) + (y (ly:format "~4f" dy))) + (set-attribute 'transform + (string-append + "translate(" x ", " y ") " + "scale(" scale ", -" scale ")"))) + (set-attribute 'transform + (string-append + "scale(" scale ", -" scale ")")))) + (set-attribute 'transform (string-append + "scale(" scale ", -" scale ")"))) + + (set-attribute 'd path) + (set-attribute 'fill "currentColor") + (apply entity 'path "" (reverse alist))) + + +;; A global variable for keeping track of the *cumulative* +;; horizontal advance for glyph strings, but only if there +;; is more than one glyph. +(define next-horiz-adv 0.0) + +;; Matches the required "unicode" attribute from +(define glyph-unicode-value-regexp + (make-regexp "unicode=\"([^\"]+)\"")) + +;; Matches the optional path data from +(define glyph-path-regexp + (make-regexp "d=\"([-MmZzLlHhVvCcSsQqTt0-9.\n ]*)\"")) + +;; Matches a complete element with the glyph-name +;; attribute value of NAME. For example: +;; +;; +;; +;; TODO: it would be better to use an XML library to extract +;; the glyphs instead, and store them in a hash table. --pmccarty +;; +(define (glyph-element-regexp name) + (make-regexp (string-append ""))) + +(define (extract-glyph all-glyphs name size . rest) + (let* ((new-name (regexp-quote name)) + (regexp (regexp-exec (glyph-element-regexp new-name) all-glyphs)) + (glyph (match:substring regexp)) + (unicode-attr (regexp-exec glyph-unicode-value-regexp glyph)) + (unicode-attr-value (match:substring unicode-attr 1)) + (unicode-attr? (regexp-match? unicode-attr)) + (d-attr (regexp-exec glyph-path-regexp glyph)) + (d-attr-value "") + (d-attr? (regexp-match? d-attr)) + ;; TODO: not urgent, but do not hardcode this value + (units-per-em 1000) + (font-scale (ly:format "~4f" (/ size units-per-em))) + (path "")) + + (if (and unicode-attr? (not unicode-attr-value)) + (ly:warning (_ "Glyph must have a unicode value"))) + + (if d-attr? (set! d-attr-value (match:substring d-attr 1))) + + (cond ( + ;; Glyph-strings with path data + (and d-attr? (not (null? rest))) + (begin + (set! path (apply dump-path d-attr-value + font-scale + (list (cadr rest) (caddr rest)))) + (set! next-horiz-adv (+ next-horiz-adv + (car rest))) + path)) + ;; Glyph-strings without path data ("space") + ((and (not d-attr?) (not (null? rest))) + (begin + (set! next-horiz-adv (+ next-horiz-adv + (car rest))) + "")) + ;; Font smobs with path data + ((and d-attr? (null? rest)) + (set! path (dump-path d-attr-value font-scale)) + path) + ;; Font smobs without path data ("space") + (else + "")))) + +(define (extract-glyph-info all-glyphs glyph size) + (let* ((offsets (list-head glyph 3)) + (glyph-name (car (reverse glyph)))) + (apply extract-glyph all-glyphs glyph-name size offsets))) + +(define (svg-defs svg-font) + (let ((start (string-contains svg-font "")) + (end (string-contains svg-font ""))) + (substring svg-font (+ start 7) (- end 1)))) + +(define (cache-font svg-font size glyph) + (let ((all-glyphs (svg-defs (cached-file-contents svg-font)))) + (if (list? glyph) + (extract-glyph-info all-glyphs glyph size) + (extract-glyph all-glyphs glyph size)))) + + +(define (feta-alphabet-to-path font size glyph) + (let* ((name-style (font-name-style font)) + (scaled-size (/ size lily-unit-length)) + (font-file (ly:find-file (string-append name-style ".svg")))) + + (if font-file + (cache-font font-file scaled-size glyph) + (ly:warning (_ "cannot find SVG font ~S") font-file)))) + + +(define (font-smob-to-path font glyph) + (let* ((name-style (font-name-style font)) + (scaled-size (modified-font-metric-font-scaling font)) + (font-file (ly:find-file (string-append name-style ".svg")))) + + (if font-file + (cache-font font-file scaled-size glyph) + (ly:warning (_ "cannot find SVG font ~S") font-file)))) - (format "font-family:~a;font-style:~a;font-size:~a;text-anchor:~a;" - (car name-style) (cadr name-style) - size anchor)))) (define (fontify font expr) - (entity 'text expr - `(style . ,(svg-font font)) - '(fill . "currentColor") - )) + (if (string? font) + (pango-description-to-text font expr) + (font-smob-to-path font expr))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; stencil outputters ;;; -;;; catch-all for missing stuff -;;; comment this out to see find out what functions you miss :-) - -(if #f - (begin - (define (dummy . foo) "") - (map (lambda (x) (module-define! this-module x dummy)) - (append - (ly:all-stencil-expressions) - (ly:all-output-backend-commands))) - )) - -(define (url-link url x y) - (string-append - (eo 'a `(xlink:href . ,url)) - (eoc 'rect - `(x . ,(car x)) - `(y . ,(car y)) - `(width . ,(- (cdr x) (car x))) - `(height . ,(- (cdr y) (car y))) - '(fill . "none") - '(stroke . "none") - '(stroke-width . "0.0")) - (ec 'a))) - -(define (grob-cause offset grob) - "") - -(define (no-origin) - "") - - - (define (bezier-sandwich lst thick) (let* ((first (list-tail lst 4)) - (first-c0 (car (list-tail first 3))) (second (list-head lst 4))) (entity 'path "" '(stroke-linejoin . "round") @@ -214,53 +308,27 @@ '(fill . "currentColor") `(stroke-width . ,thick) `(d . ,(string-append (svg-bezier first #f) - (svg-bezier second first-c0))) - ))) + (svg-bezier second #t)))))) -(define (path thick commands) - (define (convert-path-exps exps) - (if (pair? exps) - (let* - ((head (car exps)) - (rest (cdr exps)) - (arity - (cond - ((memq head '(rmoveto rlineto lineto moveto)) 2) - ((memq head '(rcurveto curveto)) 6) - (else 1))) - (args (take rest arity)) - (svg-head (assoc-get head '((rmoveto . m) - (rcurveto . c) - (curveto . C) - (moveto . M) - (lineto . L) - (rlineto . l)) - "")) - ) - - (cons (format "~a~a " - svg-head (number-list->point args) - ) - (convert-path-exps (drop rest arity)))) - '())) - - (entity 'path "" - `(stroke-width . ,thick) - '(stroke-linejoin . "round") - '(stroke-linecap . "round") - '(stroke . "currentColor") - '(fill . "none") - `(d . ,(string-join (convert-path-exps commands) " ")))) - (define (char font i) (dispatch `(fontify ,font ,(entity 'tspan (char->entity (integer->char i)))))) -(define-public (comment s) - (string-append "\n")) +(define (circle radius thick is-filled) + (entity + 'circle "" + '(stroke-linejoin . "round") + '(stroke-linecap . "round") + `(fill . ,(if is-filled "currentColor" "none")) + `(stroke . "currentColor") + `(stroke-width . ,thick) + `(r . ,radius))) + +(define (dashed-line thick on off dx dy phase) + (draw-line thick 0 0 dx dy + `(stroke-dasharray . ,(format "~a,~a" on off)))) (define (draw-line thick x1 y1 x2 y2 . alist) - (apply entity 'line "" (append `((stroke-linejoin . "round") @@ -273,28 +341,121 @@ (y2 . ,(- y2))) alist))) -(define (dashed-line thick on off dx dy phase) - (draw-line thick 0 0 dx dy `(style . ,(format "stroke-dasharray:~a,~a;" on off)))) +(define (ellipse x-radius y-radius thick is-filled) + (entity + 'ellipse "" + '(stroke-linejoin . "round") + '(stroke-linecap . "round") + `(fill . ,(if is-filled "currentColor" "none")) + `(stroke . "currentColor") + `(stroke-width . ,thick) + `(rx . ,x-radius) + `(ry . ,y-radius))) + +(define (embedded-svg string) + string) + +(define (glyph-string font size cid glyphs) + (define path "") + (if (= 1 (length glyphs)) + (set! path (feta-alphabet-to-path font size (car glyphs))) + (begin + (set! path + (string-append (eo 'g) + (string-join + (map (lambda (x) + (feta-alphabet-to-path font size x)) + glyphs) + "\n") + (ec 'g))))) + (set! next-horiz-adv 0.0) + path) + +(define (grob-cause offset grob) + "") (define (named-glyph font name) - (dispatch - `(fontify ,font ,(entity 'tspan - (integer->entity - (ly:font-glyph-name-to-charcode font name)))))) + (dispatch `(fontify ,font ,name))) + +(define (no-origin) + "") + +(define (oval x-radius y-radius thick is-filled) + (let ((x-max x-radius) + (x-min (- x-radius)) + (y-max y-radius) + (y-min (- y-radius))) + (entity + 'path "" + '(stroke-linejoin . "round") + '(stroke-linecap . "round") + `(fill . ,(if is-filled "currentColor" "none")) + `(stroke . "currentColor") + `(stroke-width . ,thick) + `(d . ,(ly:format "M~4f ~4fC~4f ~4f ~4f ~4f ~4f ~4fS~4f ~4f ~4f ~4fz" + x-max 0 + x-max y-max + x-min y-max + x-min 0 + x-max y-min + x-max 0))))) + +(define (path thick commands) + (define (convert-path-exps exps) + (if (pair? exps) + (let* + ((head (car exps)) + (rest (cdr exps)) + (arity + (cond ((memq head '(rmoveto rlineto lineto moveto)) 2) + ((memq head '(rcurveto curveto)) 6) + ((eq? head 'closepath) 0) + (else 1))) + (args (take rest arity)) + (svg-head (assoc-get head + '((rmoveto . m) + (rcurveto . c) + (curveto . C) + (moveto . M) + (lineto . L) + (rlineto . l) + (closepath . z)) + ""))) + + (cons (format "~a~a" + svg-head (number-list->point args)) + (convert-path-exps (drop rest arity)))) + '())) + + (entity 'path "" + `(stroke-width . ,thick) + '(stroke-linejoin . "round") + '(stroke-linecap . "round") + '(stroke . "currentColor") + '(fill . "none") + `(d . ,(apply string-append (convert-path-exps commands))))) (define (placebox x y expr) - (let* - ((match (regexp-exec svg-element-regexp expr)) - (tagname (match:substring match 1)) - (attributes (match:substring match 2))) - - (string-append tagname - ;; FIXME: Not using GNU coding standards - ;; [translate ()] here to work around a - ;; bug in Microsoft Internet Explorer 6.0 - (ly:format " transform=\"translate(~f, ~f)\" " x (- y)) - attributes - "\n"))) + (if (string-null? expr) + "" + (let* + ((normal-element (regexp-exec svg-element-regexp expr)) + (scaled-element (regexp-exec scaled-element-regexp expr)) + (scaled? (if scaled-element #t #f)) + (match (if scaled? scaled-element normal-element)) + (string1 (match:substring match 1)) + (string2 (match:substring match 2))) + + (if scaled? + (string-append string1 + (ly:format "translate(~4f, ~4f) " x (- y)) + string2 + "\n") + (string-append string1 + (ly:format " transform=\"translate(~4f, ~4f)\" " + x (- y)) + string2 + "\n"))))) (define (polygon coords blot-diameter is-filled) (entity @@ -305,15 +466,21 @@ `(fill . ,(if is-filled "currentColor" "none")) '(stroke . "currentColor") `(points . ,(string-join - (map offset->point (ly:list->offsets '() coords)))) - )) + (map offset->point (ly:list->offsets '() coords)))))) -;; rotate around given point -(define (setrotation ang x y) - (format "\n" - (number->string (* -1 ang)) - (number->string x) - (number->string (* -1 y)))) +(define (repeat-slash width slope thickness) + (define (euclidean-length x y) + (sqrt (+ (* x x) (* y y)))) + (let* ((x-width (euclidean-length thickness (/ thickness slope))) + (height (* width slope))) + (entity + 'path "" + '(fill . "currentColor") + `(d . ,(ly:format "M0 0l~4f 0 ~4f ~4f ~4f 0z" + x-width width (- height) (- x-width)))))) + +(define (resetcolor) + "\n") (define (resetrotation ang x y) "\n") @@ -333,61 +500,32 @@ `(width . ,(+ breapth width)) `(height . ,(+ depth height)) `(ry . ,(/ blot-diameter 2)) - )) - -(define (circle radius thick is-filled) - (entity - 'circle "" - '(stroke-linejoin . "round") - '(stroke-linecap . "round") - `(fill . ,(if is-filled "currentColor" "none")) - `(stroke . "currentColor") - `(stroke-width . ,thick) - `(r . ,radius))) + '(fill . "currentColor"))) -(define (ellipse x-radius y-radius thick is-filled) - (entity - 'ellipse "" - '(stroke-linejoin . "round") - '(stroke-linecap . "round") - `(fill . ,(if is-filled "currentColor" "none")) - `(stroke . "currentColor") - `(stroke-width . ,thick) - `(rx . ,x-radius) - `(ry . ,y-radius))) +(define (setcolor r g b) + (format "\n" + (* 100 r) (* 100 g) (* 100 b))) -(define (oval x-radius y-radius thick is-filled) - (let ((x-max x-radius) - (x-min (- x-radius)) - (y-max y-radius) - (y-min (- y-radius))) - (entity - 'path "" - '(stroke-linejoin . "round") - '(stroke-linecap . "round") - `(fill . ,(if is-filled "currentColor" "none")) - `(stroke . "currentColor") - `(stroke-width . ,thick) - `(d . ,(ly:format "M~4f,~4f C~4f,~4f ~4f,~4f ~4f,~4f S~4f,~4f ~4f,~4f" - x-max 0 - x-max y-max - x-min y-max - x-min 0 - x-max y-min - x-max 0))))) +;; rotate around given point +(define (setrotation ang x y) + (ly:format "\n" + (- ang) x (- y))) (define (text font string) (dispatch `(fontify ,font ,(entity 'tspan (string->entities string))))) +(define (url-link url x y) + (string-append + (eo 'a `(xlink:href . ,url)) + (eoc 'rect + `(x . ,(car x)) + `(y . ,(car y)) + `(width . ,(- (cdr x) (car x))) + `(height . ,(- (cdr y) (car y))) + '(fill . "none") + '(stroke . "none") + '(stroke-width . "0.0")) + (ec 'a))) + (define (utf-8-string pango-font-description string) (dispatch `(fontify ,pango-font-description ,(entity 'tspan string)))) - - - -(define (setcolor r g b) - (format "\n" - (* 100 r) (* 100 g) (* 100 b) - )) - -(define (resetcolor) - "\n") diff --git a/scm/page.scm b/scm/page.scm index a486219801..3d897c1465 100644 --- a/scm/page.scm +++ b/scm/page.scm @@ -85,6 +85,27 @@ (zip (page-property page 'lines) (page-property page 'configuration)))) +(define (annotate-top-space first-system layout header-stencil stencil) + (let* ((top-margin (ly:output-def-lookup layout 'top-margin)) + (sym (if (paper-system-title? first-system) + 'first-system-title-spacing + 'first-system-spacing)) + (spacing-spec (ly:output-def-lookup layout sym)) + (X-offset (ly:prob-property first-system 'X-offset 5)) + (header-extent (ly:stencil-extent header-stencil Y))) + + (set! stencil + (ly:stencil-add stencil + (ly:stencil-translate-axis + (annotate-spacing-spec layout + spacing-spec + (- top-margin) + (car header-extent) + #:base-color red) + X-offset X))) + stencil)) + + (define (annotate-page layout stencil) (let ((top-margin (ly:output-def-lookup layout 'top-margin)) (paper-height (ly:output-def-lookup layout 'paper-height)) @@ -133,63 +154,6 @@ arrow)) - - - -(define (page-headfoot layout scopes number sym separation-symbol dir - is-last-bookpart is-bookpart-last-page) - - "Create a stencil including separating space." - - (let* ((header-proc (ly:output-def-lookup layout sym)) - (sep (ly:output-def-lookup layout separation-symbol)) - (stencil (ly:make-stencil "" '(0 . 0) '(0 . 0))) - (head-stencil - (if (procedure? header-proc) - (header-proc layout scopes number is-last-bookpart is-bookpart-last-page) - #f))) - - (if (and (number? sep) - (ly:stencil? head-stencil) - (not (ly:stencil-empty? head-stencil))) - - (begin - (set! head-stencil - (ly:stencil-combine-at-edge - stencil Y dir head-stencil - sep)) - - - ;; add arrow markers - (if (or (annotate? layout) - (ly:output-def-lookup layout 'annotate-headers #f)) - (set! head-stencil - (ly:stencil-add - (ly:stencil-translate-axis - (annotate-y-interval layout - (symbol->string separation-symbol) - (cons (min 0 (* dir sep)) - (max 0 (* dir sep))) - #t) - (/ (ly:output-def-lookup layout 'line-width) 2) - X) - (if (= dir UP) - (ly:stencil-translate-axis - (annotate-y-interval layout - "page-top-space" - (cons - (- (min 0 (* dir sep)) - (ly:output-def-lookup layout 'page-top-space)) - (min 0 (* dir sep))) - #t) - (+ 7 (interval-center (ly:stencil-extent head-stencil X))) X) - empty-stencil - ) - head-stencil - )) - ))) - - head-stencil)) (define (page-header-or-footer page dir) (let* @@ -198,16 +162,16 @@ (scopes (ly:paper-book-scopes paper-book)) (number (page-page-number page)) (is-last-bookpart (page-property page 'is-last-bookpart)) - (is-bookpart-last-page (page-property page 'is-bookpart-last-page))) - - (page-headfoot layout scopes number - (if (= dir UP) - 'make-header - 'make-footer) - (if (= dir UP) - 'head-separation - 'foot-separation) - dir is-last-bookpart is-bookpart-last-page))) + (is-bookpart-last-page (page-property page 'is-bookpart-last-page)) + (sym (if (= dir UP) + 'make-header + 'make-footer)) + (header-proc (ly:output-def-lookup layout sym))) + + (if (procedure? header-proc) + (header-proc layout scopes number is-last-bookpart is-bookpart-last-page) + #f))) + (define (page-header page) (page-header-or-footer page UP)) @@ -274,7 +238,7 @@ (ly:stencil-translate stencil (cons (+ system-xoffset x) - (- 0 head-height y (prop 'top-margin))) + (- 0 y (prop 'top-margin))) ))))) (add-system @@ -304,25 +268,26 @@ ) (if (and - (or (annotate? layout) - (ly:output-def-lookup layout 'annotate-systems #f)) + (ly:stencil? head) + (not (ly:stencil-empty? head))) + (begin + (set! head (ly:stencil-translate-axis head + (- 0 head-height (prop 'top-margin)) Y)) + (set! page-stencil (ly:stencil-add page-stencil head)))) + + (if (and + (annotate? layout) (pair? lines)) (begin + (set! page-stencil (annotate-top-space (car lines) layout head page-stencil)) + (for-each (lambda (sys next-sys) (paper-system-annotate sys next-sys layout)) lines (append (cdr lines) (list #f))) (paper-system-annotate-last (car (last-pair lines)) layout))) - (if (and - (ly:stencil? head) - (not (ly:stencil-empty? head))) - - (set! page-stencil (ly:stencil-add page-stencil - (ly:stencil-translate-axis head - (- 0 head-height (prop 'top-margin)) Y)))) - (map add-system lines) @@ -356,11 +321,9 @@ (ly:stencil-translate page-stencil (cons (prop 'left-margin) 0))) ;; annotation. - (if (or (annotate? layout) - (ly:output-def-lookup layout 'annotate-page #f)) + (if (annotate? layout) (set! page-stencil (annotate-page layout page-stencil))) - page-stencil)) diff --git a/scm/paper-system.scm b/scm/paper-system.scm index 6a391a3a0f..d7436a224f 100644 --- a/scm/paper-system.scm +++ b/scm/paper-system.scm @@ -56,63 +56,11 @@ (set! (ly:prob-property system 'stencil) stencil) )) - + +; TODO: annotate the spacing for every spaceable staff within the system. (define-public (paper-system-annotate system next-system layout) "Add arrows and texts to indicate which lengths are set." (let* ((annotations (list)) - (annotate-extent-and-space - (lambda (extent-accessor next-space - extent-name next-space-name after-space-name) - (let* ((extent-annotations (list)) - (this-extent (extent-accessor system)) - (next-extent (and next-system (extent-accessor next-system))) - (push-annotation (lambda (stil) - (set! extent-annotations - (cons stil extent-annotations)))) - (color (if (paper-system-title? system) darkblue blue)) - (space-color (if (paper-system-title? system) darkred red))) - (if (and (number-pair? this-extent) - (not (= (interval-start this-extent) - (interval-end this-extent)))) - (push-annotation (annotate-y-interval - layout extent-name this-extent #f - #:color color))) - (if next-system - (push-annotation (annotate-y-interval - layout next-space-name - (interval-translate (cons (- next-space) 0) - (if (number-pair? this-extent) - (interval-start this-extent) - 0)) - #t - #:color color))) - (if (and next-system - (number-pair? this-extent) - (number-pair? next-extent)) - (let ((space-after - (- (+ (ly:prob-property next-system 'Y-offset) - (interval-start this-extent)) - (ly:prob-property system 'Y-offset) - (interval-end next-extent) - next-space))) - (if (> space-after 0.01) - (push-annotation (annotate-y-interval - layout - after-space-name - (interval-translate - (cons (- space-after) 0) - (- (interval-start this-extent) - next-space)) - #t - #:color space-color))))) - (if (not (null? extent-annotations)) - (set! annotations - (stack-stencils X RIGHT 0.5 - (list annotations - (ly:make-stencil '() (cons 0 1) (cons 0 0)) - (apply ly:stencil-add - extent-annotations)))))))) - (grob (ly:prob-property system 'system-grob)) (estimate-extent (if (ly:grob? grob) (annotate-y-interval layout @@ -120,30 +68,21 @@ (ly:grob-property grob 'pure-Y-extent) #f) #f))) - (let ((next-space (ly:prob-property - system 'next-space - (cond ((and next-system - (paper-system-title? system) - (paper-system-title? next-system)) - (ly:output-def-lookup layout 'between-title-space)) - ((paper-system-title? system) - (ly:output-def-lookup layout 'after-title-space)) - ((and next-system - (paper-system-title? next-system)) - (ly:output-def-lookup layout 'before-title-space)) - (else - (ly:output-def-lookup layout 'between-system-space))))) - (next-padding (ly:prob-property - system 'next-padding - (ly:output-def-lookup layout 'between-system-padding)))) - (annotate-extent-and-space (lambda (sys) - (paper-system-extent sys Y)) - next-padding - "Y-extent" "next-padding" "space after next-padding") - (annotate-extent-and-space paper-system-staff-extents - (+ next-space next-padding) - "staff-refpoint-extent" "next-space+padding" - "space after next-space+padding")) + (let* ((spacing-spec (cond ((and next-system + (paper-system-title? system) + (paper-system-title? next-system)) + (ly:output-def-lookup layout 'between-title-spacing)) + ((paper-system-title? system) + (ly:output-def-lookup layout 'after-title-spacing)) + ((and next-system + (paper-system-title? next-system)) + (ly:output-def-lookup layout 'before-title-spacing)) + (else + (ly:output-def-lookup layout 'between-system-spacing)))) + (last-staff-Y (car (paper-system-staff-extents system)))) + + (set! annotations + (annotate-spacing-spec layout spacing-spec last-staff-Y (car (paper-system-extent system Y))))) (if estimate-extent (set! annotations (stack-stencils X RIGHT 0.5 diff --git a/scm/paper.scm b/scm/paper.scm index d3e299ddd8..48f4a46cb1 100644 --- a/scm/paper.scm +++ b/scm/paper.scm @@ -6,12 +6,7 @@ (define-public (set-paper-dimension-variables mod) (module-define! mod 'dimension-variables - '(after-title-space - before-title-space - between-system-padding - between-system-space - between-title-space - blot-diameter + '(blot-diameter bottom-margin cm foot-separation @@ -24,7 +19,6 @@ line-thickness line-width mm - page-top-space paper-height paper-width pt diff --git a/scm/parser-clef.scm b/scm/parser-clef.scm index b3de9fc405..a6d178eaef 100644 --- a/scm/parser-clef.scm +++ b/scm/parser-clef.scm @@ -1,4 +1,4 @@ -;;;; clef.scm -- Clef settings +;;;; parser-clef.scm -- Clef settings ;;;; ;;;; source file of the GNU LilyPond music typesetter ;;;; @@ -132,3 +132,10 @@ (sort (map car supported-clefs) stringstencil axis size file-name) (let* ((contents (ly:gulp-file file-name)) diff --git a/scm/tablature.scm b/scm/tablature.scm new file mode 100644 index 0000000000..3d92e76d65 --- /dev/null +++ b/scm/tablature.scm @@ -0,0 +1,178 @@ +;;;; tablature.scm +;;;; +;;;; source file of the GNU LilyPond music typesetter +;;;; +;;;; (c) 2009 Marc Hohl + +;; default tunings for common string instruments +;; guitar tunings +(define-public guitar-tuning '(4 -1 -5 -10 -15 -20)) +(define-public guitar-seven-string-tuning '(4 -1 -5 -10 -15 -20 -25)) +(define-public guitar-drop-d-tuning '(4 -1 -5 -10 -15 -22)) +(define-public guitar-open-g-tuning '(2 -1 -5 -10 -17 -22)) +;; bass tunings +(define-public bass-tuning '(-17 -22 -27 -32)) +(define-public bass-four-string-tuning '(-17 -22 -27 -32)) +(define-public bass-drop-d-tuning '(-17 -22 -27 -34)) +(define-public bass-five-string-tuning '(-17 -22 -27 -32 -37)) +(define-public bass-six-string-tuning '(-12 -17 -22 -27 -32 -37)) +;; mandolin +(define-public mandolin-tuning '(16 9 2 -5)) +;; tunings for 5-string banjo +(define-public banjo-open-g-tuning '(2 -1 -5 -10 7)) +(define-public banjo-c-tuning '(2 -1 -5 -12 7)) +(define-public banjo-modal-tuning '(2 0 -5 -10 7)) +(define-public banjo-open-d-tuning '(2 -3 -6 -10 9)) +(define-public banjo-open-dm-tuning '(2 -3 -6 -10 9)) +;; convert 5-string banjo tuning to 4-string by removing the 5th string +(define-public (four-string-banjo tuning) + (reverse (cdr (reverse tuning)))) + +;; for more control over glyph-name calculations, +;; we use a custom callback for tab noteheads +;; which will ignore 'style = 'do +(define-public (tab-note-head::calc-glyph-name grob) + (let ((style (ly:grob-property grob 'style))) + (case style + ((cross) "2cross")))) + +;; ensure we only call notehead callback when +;; 'style = 'cross +(define-public (tab-note-head::whiteout-if-style-set grob) + (let ((style (ly:grob-property grob 'style))) + (if (and (symbol? style) + (eq? style 'cross)) + (stencil-whiteout (ly:note-head::print grob)) + (ly:text-interface::print grob)))) + +;; definitions for the "moderntab" clef: +;; the "moderntab" clef will be added to the list of known clefs, +;; so it can be used as any other clef: \clef "moderntab" +(add-new-clef "moderntab" "markup.moderntab" 0 0 0) + +;; define sans serif-style tab-Clefs as a markup: +(define-builtin-markup-command (customTabClef layout props num-strings staff-space) + (integer? number?) + music + () + "Draw a tab clef sans-serif style." + (define (square x) (* x x)) + (let* ((scale-factor (/ staff-space 1.5)) + (font-size (- (* num-strings 1.5 scale-factor) 7)) + (base-skip (* (square (+ (* num-strings 0.195) 0.4)) scale-factor))) + + (interpret-markup layout props + (markup #:vcenter #:bold + #:override (cons 'font-family 'sans) + #:fontsize font-size + #:override (cons 'baseline-skip base-skip) + #:left-align #:center-column ("T" "A" "B"))))) + +;; this function decides which clef to take +(define-public (clef::print-modern-tab-if-set grob) + (let ((glyph (ly:grob-property grob 'glyph))) + ;; which clef is wanted? + (if (string=? glyph "markup.moderntab") + ;; if it is "moderntab", we'll draw it + (let* ((staff-symbol (ly:grob-object grob 'staff-symbol)) + (line-count (ly:grob-property staff-symbol 'line-count)) + (staff-space (ly:grob-property staff-symbol 'staff-space 1))) + (grob-interpret-markup grob (make-customTabClef-markup line-count staff-space))) + ;; otherwise, we simply use the default printing routine + (ly:clef::print grob)))) + +;; if stems are drawn, it is nice to have a double stem for +;; (dotted) half notes to distinguish them from quarter notes: +(define-public (tabvoice::draw-double-stem-for-half-notes grob) + (let ((stem (ly:stem::print grob))) + + ;; is the note a (dotted) half note? + (if (= 1 (ly:grob-property grob 'duration-log)) + ;; yes -> draw double stem + (ly:stencil-combine-at-edge stem X RIGHT stem 0.5) + ;; no -> draw simple stem + stem))) + +;; as default, the glissando line between fret numbers goes +;; upwards, here we have a function to correct this behavior: +(define-public (glissando::calc-tab-extra-dy grob) + (let* ((original (ly:grob-original grob)) + (left-bound (ly:spanner-bound original LEFT)) + (right-bound (ly:spanner-bound original RIGHT)) + (left-pitch (ly:event-property (event-cause left-bound) 'pitch)) + (right-pitch (ly:event-property (event-cause right-bound) 'pitch))) + + (if (< (ly:pitch-semitones right-pitch) (ly:pitch-semitones left-pitch)) + -0.75 + 0.75))) + +;; for ties in tablature, fret numbers that are tied to should be invisible, +;; except for 'tied to' numbers after a line break;; these will be +;; parenthesized (thanks to Neil for his solution): +(define-public (parenthesize-tab-note-head grob) + ;; Helper function to parenthesize tab noteheads, + ;; since we can't use ParenthesesItem at this stage + ;; This is basically the same as the C++ function + ;; in accidental.cc, converted to Scheme + (let* ((font (ly:grob-default-font grob)) + (open (stencil-whiteout + (ly:font-get-glyph font "accidentals.leftparen"))) + (close (stencil-whiteout + (ly:font-get-glyph font "accidentals.rightparen"))) + (me (ly:text-interface::print grob))) + (ly:stencil-combine-at-edge + (ly:stencil-combine-at-edge + me + X + LEFT + open) + X + RIGHT + close))) + +;; ParenthesesItem doesn't work very well for TabNoteHead, since +;; the parentheses are too small and clash with the staff-lines +;; Define a callback for the 'stencils property which will tweak +;; the parentheses' appearance for TabNoteHead +(define-public (parentheses-item::calc-tabstaff-parenthesis-stencils grob) + ;; the grob we want to parenthesize + (let ((victim (ly:grob-array-ref (ly:grob-object grob 'elements) 0))) + ;; check whether it's a notehead + (if (grob::has-interface victim 'note-head-interface) + (begin + ;; tweak appearance before retrieving + ;; list of stencils '(left-paren right-paren) + ;; get the font-size from victim (=TabNoteHead) to handle + ;; grace notes properly + (ly:grob-set-property! grob 'font-size + (ly:grob-property victim 'font-size)) + (ly:grob-set-property! grob 'padding 0) + ;; apply whiteout to each element of the list + (map stencil-whiteout + (parentheses-item::calc-parenthesis-stencils grob))) + (parentheses-item::calc-parenthesis-stencils grob)))) + +;; the handler for ties in tablature;; split ties yield in a parenthesized +;; fret number, otherwise the fret number will be invisible. +(define-public (tie::handle-tab-tie grob) + (let* ((original (ly:grob-original grob)) + (tied-tab-note-head (ly:spanner-bound grob RIGHT)) + (siblings (if (ly:grob? original) + (ly:spanner-broken-into original) '()))) + + (if (and (>= (length siblings) 2) + (eq? (car (last-pair siblings)) grob)) + ;; tie is split -> parenthesize + (ly:grob-set-property! tied-tab-note-head 'stencil + (lambda (grob) (parenthesize-tab-note-head grob))) + + ;; tie is not split -> make fret number invisible + (ly:grob-set-property! tied-tab-note-head 'transparent #t)))) + +;; repeat ties occur within alternatives in a repeat construct; +;; the correspondig fret numbers are shown in parentheses: +(define-public (repeat-tie::parenthesize-tab-note-head grob) + (let ((tied-tab-note-head (ly:grob-object grob 'note-head))) + + (ly:grob-set-property! tied-tab-note-head 'stencil + (lambda (grob) (parenthesize-tab-note-head grob))))) \ No newline at end of file diff --git a/scripts/auxiliar/check_translation.py b/scripts/auxiliar/check_translation.py index ef2decd0d7..cee68dcbcb 100755 --- a/scripts/auxiliar/check_translation.py +++ b/scripts/auxiliar/check_translation.py @@ -19,14 +19,8 @@ def dir_lang (file, lang, lang_dir_index): path_components[lang_dir_index] = lang return os.path.join (*path_components) -vc_last_revision = 'git log --pretty=format:%%H %(file_name)s | head -1' -vc_last_texidoc_revision = 'git log -Stexidoc%(preferred_language)s --pretty=format:%%H %(file_name)s | head -1' - -s = 'Translation of GIT [Cc]ommittish' -texidoc_chunk_re = re.compile (r'^((?:%+\s*' + s + \ - r'.+)?\s*(?:texidoc|doctitle)([a-zA-Z]{2,4})\s+=(?:.|\n)*?)(?=%+\s*' + \ - s + r'|\s*(?:texidoc|doctitle)(?:[a-zA-Z]{2,4})\s+=|$(?!.|\n))', re.M) - +# ugh, this is complicated; where has the good old 'git rev-parse' gone? +vc_revision_parse = 'git log -1 --pretty=format:%%H %s' def do_file (file_name, lang_codes): if verbose: @@ -42,46 +36,28 @@ def do_file (file_name, lang_codes): else: check_lang = lang if check_lang == C: - if not os.path.splitext (file_name)[1] == '.texidoc': - raise Exception ('cannot determine language for ' + file_name) - translated_contents = open (file_name).read () - if 'ISOLANG' in os.environ: - preferred_language = os.environ['ISOLANG'] - else: - raise Exception ('cannot determine language for ' + file_name) - for m in texidoc_chunk_re.finditer (translated_contents): - if m.group (2) == preferred_language: - full_translated_contents = translated_contents - translated_contents = m.group (1) - translated_contents_start = m.start () - translated_contents_end = m.end () - break - else: - return - original = file_name.replace ('texidocs' + os.path.sep, 'lsr' + os.path.sep, 1) - original = original.replace ('.texidoc', '.ly', 1) - - # URG dirty .texidoc files manipulation in a dirty way - if touch_committishes and buildlib.check_translated_doc (original, - file_name, - translated_contents, - color=use_colors and not update_mode)[1]: - (estimated_revision, error) = buildlib.read_pipe (vc_last_texidoc_revision % vars ()) - if error: - sys.stderr.write ('warning: %s: %s' % (file_name, error)) - estimated_revision = estimated_revision.strip () - translated_contents = re.sub (r'(?m)^%+\s*Translation of GIT committish:.*\n', '', translated_contents) - f = open (file_name, 'w') - f.write (full_translated_contents[:translated_contents_start]) - f.write ('%% Translation of GIT committish: ' + estimated_revision + '\n') - f.write (translated_contents) - f.write (full_translated_contents[translated_contents_end:]) - return - + raise Exception ('cannot determine language for ' + file_name) else: - original = dir_lang (file_name, '', lang_dir_index) + if os.path.splitext (file_name)[1] == '.texidoc': + original = file_name.replace (os.path.join (check_lang, 'texidocs'), 'snippets', 1) + original = original.replace ('.texidoc', '.ly', 1) + else: + original = dir_lang (file_name, '', lang_dir_index) translated_contents = open (file_name).read () + ## experimental feature + if not touch_committishes in (current_revision, 'HEAD'): + (changes_in_original, error) = \ + buildlib.check_translated_doc (original, + file_name, + translated_contents, + upper_revision=touch_committishes) + if not error and not changes_in_original in ('', '\n'): + translated_contents = \ + buildlib.revision_re.sub ('GIT committish: ' + current_revision, + translated_contents, 1) + f = open (file_name, 'w').write (translated_contents) + return (diff_string, error) \ = buildlib.check_translated_doc (original, file_name, @@ -107,7 +83,7 @@ def do_file (file_name, lang_codes): def usage (): sys.stdout.write (r''' Usage: -check-translation [--language=LANG] [--verbose] [--update] FILE... +check-translation [--language=LANG] [--verbose] [--update] [-t COMMIT] FILE... This script is licensed under the GNU GPL. ''') @@ -115,12 +91,15 @@ This script is licensed under the GNU GPL. def do_options (): global lang, verbose, update_mode, touch_committishes, use_colors - p = optparse.OptionParser (usage="check-translation [--language=LANG] [--verbose] FILE...", + p = optparse.OptionParser (usage=\ +"check-translation [--language=LANG] [--verbose] [--update] [-t COMMIT] FILE...", description="This script is licensed under the GNU GPL.") p.add_option ("--language", action='store', default=C, - dest="language") + dest="language", + metavar='LL', + help="assume document language ISO 639 code LL by default") p.add_option ("--no-color", action='store_false', default=True, @@ -132,10 +111,12 @@ def do_options (): dest="verbose", help="print details, including executed shell commands") p.add_option ('-t', - action='store_true', - default=False, + action='store', + default='HEAD', dest="touch_committishes", - help=optparse.SUPPRESS_HELP) + metavar='COMMIT', + help='[EXPERIMENTAL] update committishes of all files that were up to \ +date at commit COMMIT') p.add_option ('-u', "--update", action='store_true', default=False, @@ -152,15 +133,20 @@ def do_options (): return files def main (): - global update_mode, text_editor + global update_mode, text_editor, touch_committishes, current_revision files = do_options () if 'EDITOR' in os.environ: text_editor = os.environ['EDITOR'] else: update_mode = False - buildlib.verbose = verbose + (parsed_revision, error) = buildlib.read_pipe (vc_revision_parse % touch_committishes) + if error: + sys.stderr.write ('warning: %s' % error) + else: + touch_committishes = parsed_revision.strip () + current_revision = buildlib.read_pipe (vc_revision_parse % 'HEAD')[0] for i in files: do_file (i, langdefs.LANGDICT.keys ()) diff --git a/scripts/auxiliar/makelsr.py b/scripts/auxiliar/makelsr.py index 80628cbf16..593925b3bf 100755 --- a/scripts/auxiliar/makelsr.py +++ b/scripts/auxiliar/makelsr.py @@ -5,23 +5,31 @@ import os import glob import re +sys.path.append ('python') +import langdefs + +DEST = os.path.join ('Documentation', 'snippets') +NEW_LYS = os.path.join ('Documentation', 'snippets', 'new') +TEXIDOCS = [os.path.join ('Documentation', language_code, 'texidocs') + for language_code in langdefs.LANGDICT] + USAGE = ''' Usage: makelsr.py [LSR_SNIPPETS_DIR] This script must be run from top of the source tree; -it updates snippets input/lsr with snippets in input/new or LSR_SNIPPETS_DIR. -If a snippet is present in both directories, the one from input/new is preferred. -''' - -LY_HEADER_LSR = '''%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +it updates snippets %(DEST)s with snippets +from %(NEW_LYS)s or LSR_SNIPPETS_DIR. +If a snippet is present in both directories, the one +from %(NEW_LYS)s is preferred. +''' % vars () + +LY_HEADER_LSR = '''%% Do not edit this file; it is automatically +%% generated from LSR http://lsr.dsi.unimi.it %% This file is in the public domain. ''' -LY_HEADER_NEW = '''%% Do not edit this file; it is auto-generated from input/new +LY_HEADER_NEW = '''%% Do not edit this file; it is automatically +%% generated from %s %% This file is in the public domain. -''' - -DEST = os.path.join ('input', 'lsr') -NEW_LYS = os.path.join ('input', 'new') -TEXIDOCS = os.path.join ('input', 'texidocs') +''' % NEW_LYS TAGS = [] # NR 1 @@ -63,18 +71,34 @@ def mark_verbatim_section (ly_code): # '% LSR' comments are to be stripped lsr_comment_re = re.compile (r'\s*%+\s*LSR.*') - begin_header_re = re.compile (r'\\header\s*{', re.M) - ly_new_version_re = re.compile (r'\\version\s*"(.+?)"') # add tags to ly files from LSR def add_tags (ly_code, tags): - return begin_header_re.sub ('\\g<0>\n lsrtags = "' + tags + '"\n', ly_code, 1) + return begin_header_re.sub ('\\g<0>\n lsrtags = "' + tags + '"\n', + ly_code, 1) # for snippets from input/new, add message for earliest working version def add_version (ly_code): - return '''%% Note: this file works from version ''' + ly_new_version_re.search (ly_code).group (1) + '\n' + return '''%% Note: this file works from version ''' + \ + ly_new_version_re.search (ly_code).group (1) + '\n' + +s = 'Translation of GIT [Cc]ommittish' +texidoc_chunk_re = re.compile (r'^(?:%+\s*' + s + \ + r'.+)?\s*(?:texidoc|doctitle)([a-zA-Z]{2,4})\s+=(?:.|\n)*?(?=%+\s*' + \ + s + r'|\n\} % begin verbatim|\n (?:doctitle|texidoc|lsrtags) |$(?!.|\n))', re.M) + +def update_translated_texidoc (m, snippet_path, visited_languages): + base = os.path.splitext (os.path.basename (snippet_path))[0] + language_code = m.group (1) + visited_languages.append (language_code) + texidoc_path = os.path.join ('Documentation', language_code, + 'texidocs', base + '.texidoc') + if os.path.isfile (texidoc_path): + return open (texidoc_path).read () + else: + return m.group (0) def copy_ly (srcdir, name, tags): global unsafe @@ -83,15 +107,16 @@ def copy_ly (srcdir, name, tags): tags = ', '.join (tags) s = open (os.path.join (srcdir, name)).read () - texidoc_translations_path = os.path.join (TEXIDOCS, - os.path.splitext (name)[0] + '.texidoc') - if os.path.exists (texidoc_translations_path): - texidoc_translations = open (texidoc_translations_path).read () - # Since we want to insert the translations verbatim using a - # regexp, \\ is understood as ONE escaped backslash. So we have - # to escape those backslashes once more... - texidoc_translations = texidoc_translations.replace ('\\', '\\\\') - s = begin_header_re.sub ('\\g<0>\n' + texidoc_translations, s, 1) + for path in TEXIDOCS: + texidoc_translation_path = \ + os.path.join (path, os.path.splitext (name)[0] + '.texidoc') + if os.path.exists (texidoc_translation_path): + texidoc_translation = open (texidoc_translation_path).read () + # Since we want to insert the translations verbatim using a + # regexp, \\ is understood as ONE escaped backslash. So we have + # to escape those backslashes once more... + texidoc_translation = texidoc_translation.replace ('\\', '\\\\') + s = begin_header_re.sub ('\\g<0>\n' + texidoc_translation, s, 1) if in_dir and in_dir in srcdir: s = LY_HEADER_LSR + add_tags (s, tags) @@ -156,6 +181,25 @@ def dump_file_list (file, file_list, update=False): f = open (file, 'w') f.write ('\n'.join (sorted (new_list)) + '\n') +def update_ly_in_place (snippet_path): + visited_languages = [] + contents = open (snippet_path).read () + contents = texidoc_chunk_re.sub \ + (lambda m: update_translated_texidoc (m, + snippet_path, + visited_languages), + contents) + for language_code in langdefs.LANGDICT: + if not language_code in visited_languages: + base = os.path.splitext (os.path.basename (snippet_path))[0] + texidoc_path = os.path.join ('Documentation', language_code, + 'texidocs', base + '.texidoc') + if os.path.isfile (texidoc_path): + texidoc_translation = open (texidoc_path).read () + texidoc_translation = texidoc_translation.replace ('\\', '\\\\') + contents = begin_header_re.sub ('\\g<0>\n' + texidoc_translation, contents, 1) + open (snippet_path, 'w').write (contents) + if in_dir: ## clean out existing lys and generated files map (os.remove, glob.glob (os.path.join (DEST, '*.ly')) + @@ -171,6 +215,10 @@ if in_dir: tag_lists[t].update (l[t]) else: snippets, tag_lists = read_source (NEW_LYS) + ## update texidocs of snippets that don't come from NEW_LYS + for snippet_path in glob.glob (os.path.join (DEST, '*.ly')): + if not os.path.basename (snippet_path) in snippets: + update_ly_in_place (snippet_path) for (name, (srcdir, tags)) in snippets.items (): copy_ly (srcdir, name, tags) @@ -188,7 +236,7 @@ if unsafe: sys.stderr.write (''' Unsafe files printed in lsr-unsafe.txt: CHECK MANUALLY! - git add input/lsr/*.ly + git add %s/*.ly xargs git diff HEAD < lsr-unsafe.txt -''') +''' % DEST) diff --git a/scripts/auxiliar/split-texidocs.py b/scripts/auxiliar/split-texidocs.py new file mode 100644 index 0000000000..161448087b --- /dev/null +++ b/scripts/auxiliar/split-texidocs.py @@ -0,0 +1,20 @@ +import os +import sys +import re +import glob + +source_files = glob.glob (os.path.join ('input', 'texidocs', '*.texidoc')) +dest_path = os.path.join ('Documentation', '%s', 'texidocs', '%s') + +s = 'Translation of GIT [Cc]ommittish' +texidoc_chunk_re = re.compile (r'^(?:%+\s*' + s + \ + r'.+)?\s*(?:texidoc|doctitle)([a-zA-Z]{2,4})\s+=(?:.|\n)*?(?=%+\s*' + \ + s + r'|$(?!.|\n))', re.M) + +for file_name in source_files: + base_name = os.path.basename (file_name) + contents = open (file_name).read () + for match in texidoc_chunk_re.finditer (contents): + language_code = match.group (1) + print language_code + open (dest_path % (language_code, base_name), 'w').write (match.group (0)) diff --git a/scripts/auxiliar/tely-gettext.py b/scripts/auxiliar/tely-gettext.py index 341816a7db..b2729489bb 100755 --- a/scripts/auxiliar/tely-gettext.py +++ b/scripts/auxiliar/tely-gettext.py @@ -4,34 +4,30 @@ # Temporary script that helps translated docs sources conversion # for texi2html processing -# USAGE: tely-gettext.py PYTHON-DIR LOCALEDIR LANG FILES +# USAGE: tely-gettext.py LANG FILES print "tely-gettext.py" import sys import re import os -import gettext -if len (sys.argv) > 3: - buildscript_dir, localedir, lang = sys.argv[1:4] -else: - print """USAGE: tely-gettext.py PYTHON-DIR LOCALEDIR LANG FILES - For example scripts/auxiliar/tely-gettext.py python/out Documentation/po/out-www de Documentation/de/user/*.tely""" - sys.exit (1) - -sys.path.append (buildscript_dir) import langdefs +lang = sys.argv[1] +files = sys.argv[2:] + double_punct_char_separator = langdefs.LANGDICT[lang].double_punct_char_sep -t = gettext.translation('lilypond-doc', localedir, [lang]) -_doc = t.gettext +_doc = langdefs.translation[lang] include_re = re.compile (r'@include (.*?)$', re.M) whitespaces = re.compile (r'\s+') ref_re = re.compile (r'(?ms)@(ruser|rprogram|ref|rlearning)\{(.*?)\}') node_section_re = re.compile (r'@node (.*?)\n@((?:unnumbered|appendix)(?:(?:sub){0,2}sec)?|top|chapter|(?:sub){0,2}section|(?:major|chap|(?:sub){0,2})heading) (.*?)\n') +section_only_re = re.compile (r'@((?:unnumbered|appendix)(?:(?:sub){0,2}sec)?|top|chapter|(?:sub){0,2}section|(?:major|chap|(?:sub){0,2})heading) (.*?)\n') menu_entry_re = re.compile (r'\* (.*?)::') +untranslated_node_re = re.compile (r'(@node\s+.*\n@.*\n.*)(\s+@untranslated(.|\n)+?)(?=@node|@subheading|@menu|$)') + def ref_gettext (m): r = whitespaces.sub (' ', m.group (2)) @@ -40,32 +36,42 @@ def ref_gettext (m): def node_gettext (m): return '@node ' + _doc (m.group (1)) + '\n@' + \ m.group (2) + ' ' + _doc (m.group (3)) + \ - '\n@translationof ' + m.group (1) + '\n' + '\n@translationof ' + m.group (1) + '\n' + +def section_gettext (m): + return '@' + m.group (1) + ' ' + _doc (m.group (2)) + '\n' def menu_entry_gettext (m): return '* ' + _doc (m.group (1)) + '::' -def process_file (filename): +def process_file (filename, master_file_dir='.', included=False): print "Processing %s" % filename f = open (filename, 'r') page = f.read () f.close() - page = node_section_re.sub (node_gettext, page) page = ref_re.sub (ref_gettext, page) + page = node_section_re.sub (node_gettext, page) + page = section_only_re.sub (section_gettext, page) page = menu_entry_re.sub (menu_entry_gettext, page) - page = page.replace ("""-- SKELETON FILE -- -When you actually translate this file, please remove these lines as -well as all `UNTRANSLATED NODE: IGNORE ME' lines.""", """@c -- SKELETON FILE --""") - page = page.replace ('UNTRANSLATED NODE: IGNORE ME', "@c UNTRANSLATED NODE: IGNORE ME") - includes = [whitespaces.sub ('', f) for f in include_re.findall (page)] + page = page.replace ("""@c -- SKELETON FILE -- +""", '') + page = page.replace ('UNTRANSLATED NODE: IGNORE ME', '@untranslated') + page = untranslated_node_re.sub ('\\1 @c external\\2', page) + includes = include_re.findall (page) f = open (filename, 'w') f.write (page) f.close () dir = os.path.dirname (filename) + if not included: + master_file_dir = dir for file in includes: p = os.path.join (dir, file) if os.path.exists (p): - process_file (p) + process_file (p, master_file_dir, included=True) + else: + p = os.path.join (master_file_dir, file) + if os.path.exists (p): + process_file (p, master_file_dir, included=True) -for filename in sys.argv[4:]: +for filename in files: process_file (filename) diff --git a/scripts/build/extract_texi_filenames.py b/scripts/build/extract_texi_filenames.py index 8848b40511..36adb50ea2 100644 --- a/scripts/build/extract_texi_filenames.py +++ b/scripts/build/extract_texi_filenames.py @@ -26,8 +26,10 @@ import re import os import getopt -options_list, files = getopt.getopt (sys.argv[1:],'o:s:hI:', - ['output=', 'split=', 'help', 'include=']) +options_list, files = getopt.getopt (sys.argv[1:],'o:s:hI:m:', + ['output=', 'split=', + 'help', 'include=', + 'master-map-file=']) help_text = r"""Usage: %(program_name)s [OPTIONS]... TEXIFILE... Extract files names for texinfo (sub)sections from the texinfo files. @@ -35,6 +37,7 @@ Extract files names for texinfo (sub)sections from the texinfo files. Options: -h, --help print this help -I, --include=DIRECTORY append DIRECTORY to include search path + -m, --master-map-file=FILE use FILE as master map file -o, --output=DIRECTORY write .xref-map files to DIRECTORY -s, --split=MODE split manual according to MODE. Possible values are section and custom (default) @@ -47,6 +50,8 @@ def help (text): outdir = '.' split = "custom" include_path = [] +master_map_file = '' +initial_map = {} for opt in options_list: o = opt[0] a = opt[1] @@ -59,6 +64,9 @@ for opt in options_list: outdir = a elif o == '-s' or o == '--split': split = a + elif o == '-m' or o == '--master-map-file': + if os.path.isfile (a): + master_map_file = a else: raise Exception ('unknown option: ' + o) @@ -72,7 +80,9 @@ include_re = re.compile (r'@include ((?!../lily-).*?\.i?texi)$', re.M) whitespaces = re.compile (r'\s+') section_translation_re = re.compile ('^@(node|(?:unnumbered|appendix)\ (?:(?:sub){0,2}sec)?|top|chapter|(?:sub){0,2}section|\ -(?:major|chap|(?:sub){0,2})heading|translationof|lydoctitle) (.*?)\\s*$', re.MULTILINE) +(?:major|chap|(?:sub){0,2})heading|lydoctitle|translationof) \ +(.+)$', re.MULTILINE) +external_node_re = re.compile (r'\s+@c\s+external.*') def expand_includes (m, filename): filepath = os.path.join (os.path.dirname (filename), m.group(1)) @@ -106,8 +116,8 @@ def extract_sections (filename): result += "@" + sec[0] + " " + sec[1] + "\n" return (lang_suffix, result) -# Convert a given node name to its proper file name (normalization as explained -# in the texinfo manual: +# Convert a given node name to its proper file name (normalization as +# explained in the texinfo manual: # http://www.gnu.org/software/texinfo/manual/texinfo/html_node/HTML-Xref-Node-Name-Expansion.html def texinfo_file_name(title): # exception: The top node is always mapped to index.html @@ -180,24 +190,38 @@ def process_sections (filename, lang_suffix, page): had_section = False for sec in sections: if sec[0] == "node": - # Write out the cached values to the file and start a new section: + # Write out the cached values to the file and start a new + # section: if this_title and this_title != 'Top': f.write (this_title + "\t" + this_filename + "\t" + this_anchor + "\n") had_section = False this_title = remove_texinfo (sec[1]) this_anchor = create_texinfo_anchor (sec[1]) + # delete entry from master map file + if this_title in initial_map: + del initial_map[this_title] elif sec[0] == "translationof": + (original_node, external_node) = external_node_re.subn ('', sec[1]) + original_node = remove_texinfo (original_node) + # The following binds the translator to use the + # translated node name in cross-references in case + # it exists + if external_node and original_node in initial_map: + del initial_map[original_node] anchor = create_texinfo_anchor (sec[1]) - # If @translationof is used, it gives the original node name, which - # we use for the anchor and the file name (if it is a numbered node) + # If @translationof is used, it gives the original + # node name, which we use for the anchor and the file + # name (if it is a numbered node) this_anchor = anchor if not this_unnumbered: this_filename = anchor + elif original_node in initial_map: + this_filename = initial_map[original_node][2] else: - # Some pages might not use a node for every section, so treat this - # case here, too: If we already had a section and encounter another - # one before the next @node, we write out the old one and start - # with the new values + # Some pages might not use a node for every section, so + # treat this case here, too: If we already had a section + # and encounter another one before the next @node, we + # write out the old one and start with the new values if had_section and this_title: f.write (this_title + "\t" + this_filename + "\t" + this_anchor + "\n") this_title = remove_texinfo (sec[1]) @@ -205,9 +229,9 @@ def process_sections (filename, lang_suffix, page): had_section = True if split == 'custom': - # unnumbered nodes use the previously used file name, only numbered - # nodes get their own filename! However, top-level @unnumbered - # still get their own file. + # unnumbered nodes use the previously used file name, + # only numbered nodes get their own filename! However, + # top-level @unnumbered still get their own file. this_unnumbered = unnumbered_re.match (sec[0]) if not this_unnumbered: this_filename = this_anchor @@ -220,8 +244,17 @@ def process_sections (filename, lang_suffix, page): if this_title and this_title != 'Top': f.write (this_title + "\t" + this_filename + "\t" + this_anchor + "\n") + + for node in initial_map: + f.write ("\t".join (initial_map[node]) + "\n") f.close () +xref_map_line_re = re.compile (r'(.*?)\t(.*?)\t(.*?)$') +if master_map_file: + for line in open (master_map_file): + m = xref_map_line_re.match (line) + if m: + initial_map[m.group (1)] = (m.group (1), m.group (2), m.group (3)) for filename in files: print "extract_texi_filenames.py: Processing %s" % filename diff --git a/scripts/build/html-gettext.py b/scripts/build/html-gettext.py deleted file mode 100644 index ccfe6937c0..0000000000 --- a/scripts/build/html-gettext.py +++ /dev/null @@ -1,126 +0,0 @@ -#!@PYTHON@ -# html-gettext.py - -# USAGE: html-gettext.py [-o OUTDIR] LANG FILES -# -# -o OUTDIR specifies that output files should be written in OUTDIR -# rather than be overwritten -# - -import sys -import re -import os -import getopt - -import langdefs - -optlist, args = getopt.getopt(sys.argv[1:],'o:') -lang = args[0] -files = args [1:] - -outdir = '.' -for x in optlist: - if x[0] == '-o': - outdir = x[1] - -double_punct_char_separator = langdefs.LANGDICT[lang].double_punct_char_sep -my_gettext = langdefs.translation[lang] - -html_codes = ((' -- ', ' – '), - (' --- ', ' — '), - ("'", '’')) -texi_html_conversion = { - 'command': { - 'html2texi': - (re.compile (r'(?:|)(.*?)(?:|)'), - r'@command{\1}'), - 'texi2html': - (re.compile (r'@command{(.*?)}'), - r'\1'), - }, - 'code': { - 'html2texi': - (re.compile (r'(.*?)'), - r'@code{\1}'), - 'texi2html': - (re.compile (r'@code{(.*?)}'), - r'\1'), - }, - } - -whitespaces = re.compile (r'\s+') - - -def _ (s): - if not s: - return '' - str = whitespaces.sub (' ', s) - for c in html_codes: - str = str.replace (c[1], c[0]) - for command in texi_html_conversion: - d = texi_html_conversion[command] - str = d['html2texi'][0].sub (d['html2texi'][1], str) - str = my_gettext (str) - str = d['texi2html'][0].sub (d['texi2html'][1], str) - for c in html_codes: - str = str.replace (c[0], c[1]) - return str - -link_re = re.compile (r'') - -def link_gettext (m): - return '' - -makeinfo_title_re = re.compile (r'([^<]*?) - ([^<]*?)') - -def makeinfo_title_gettext (m): - return '' + _ (m.group (1)) + ' - ' + m.group (2) + '' - -texi2html_title_re = re.compile (r'(.+): ([A-Z\d.]+ |)(.+?)') - -def texi2html_title_gettext (m): - return '' + _ (m.group (1)) + double_punct_char_separator + ': ' \ - + m.group (2) + _ (m.group (3)) + '' - -a_href_re = re.compile ('(?s)[^>]*?href="[\\w.#-_]+"[^>]*?>)(?P)?\ -(?PAppendix )?(?P[A-Z0-9.]+ | (?:<){1,2} | [^>:]+?: | |)\ -(?P(?:|||[^>])+?)(?P(?(code)|))\ -(?P (?:>){1,2} | |):?') - -def a_href_gettext (m): - s = '' - if m.group(0)[-1] == ':': - s = double_punct_char_separator + ':' - t = '' - if m.group ('appendix'): - t = _ (m.group ('appendix')) - return '' + s - -h_re = re.compile (r'\s*(Appendix |)([A-Z\d.]+ |)(.+?)\s*') - -def h_gettext (m): - if m.group (3): - s = _ (m.group (3)) - else: - s= '' - return '' + s +\ - m.group (4) + _ (m.group (5)) + '' - -for filename in files: - f = open (filename, 'r') - page = f.read () - f.close () - page = link_re.sub (link_gettext, page) - page = makeinfo_title_re.sub (makeinfo_title_gettext, page) - page = texi2html_title_re.sub (texi2html_title_gettext, page) - page = a_href_re.sub (a_href_gettext, page) - page = h_re.sub (h_gettext, page) - for w in ('Next:', 'Previous:', 'Up:'): - page = page.replace (w, _ (w)) - page = langdefs.LANGDICT[lang].html_filter (page) - f = open (os.path.join (outdir, filename), 'w') - f.write (page) - f.close () diff --git a/scripts/build/lys-to-tely.py b/scripts/build/lys-to-tely.py index c9d698f92c..0eb12047e6 100644 --- a/scripts/build/lys-to-tely.py +++ b/scripts/build/lys-to-tely.py @@ -107,7 +107,7 @@ def name2line (n): if files: dir = os.path.dirname (name) or "." -# don't strip .tely extension, input/lsr uses .itely +# don't strip .tely extension, Documentation/snippets uses .itely name = os.path.basename (name) template = template % vars () diff --git a/scripts/build/texi-gettext.py b/scripts/build/texi-gettext.py deleted file mode 100644 index 546819b155..0000000000 --- a/scripts/build/texi-gettext.py +++ /dev/null @@ -1,77 +0,0 @@ -#!@PYTHON@ -# -*- coding: utf-8 -*- -# texi-gettext.py - -# USAGE: texi-gettext.py [-o OUTDIR] LANG FILES -# -# -o OUTDIR specifies that output files should rather be written in OUTDIR -# - -print "texi_gettext.py" - -import sys -import re -import os -import getopt - -import langdefs - -optlist, args = getopt.getopt (sys.argv[1:],'o:') -lang = args[0] -files = args[1:] - -outdir = '.' -for x in optlist: - if x[0] == '-o': - outdir = x[1] - -double_punct_char_separator = langdefs.LANGDICT[lang].double_punct_char_sep -_doc = langdefs.translation[lang] - -include_re = re.compile (r'@include ((?!../lily-).*?)\.texi$', re.M) -whitespaces = re.compile (r'\s+') -ref_re = re.compile (r'(?ms)@(rglos|ruser|rprogram|ref)(\{)(.*?)(\})') -node_section_re = re.compile (r'@(node|(?:unnumbered|appendix)(?:(?:sub){0,2}sec)?|top|chapter|(?:sub){0,2}section|(?:major|chap|(?:sub){0,2})heading)( )(.*?)(\n)') -menu_entry_re = re.compile (r'\* (.*?)::') - -def title_gettext (m): - if m.group (2) == '{': - r = whitespaces.sub (' ', m.group (3)) - else: - r = m.group (3) - return '@' + m.group (1) + m.group (2) + _doc (r) + m.group (4) - -def menu_entry_gettext (m): - return '* ' + _doc (m.group (1)) + '::' - -def include_replace (m, filename): - if os.path.exists (os.path.join (os.path.dirname (filename), m.group(1)) + '.texi'): - return '@include ' + m.group(1) + '.pdftexi' - return m.group(0) - -def process_file (filename): - print "Processing %s" % filename - f = open (filename, 'r') - page = f.read () - f.close() - page = node_section_re.sub (title_gettext, page) - page = ref_re.sub (title_gettext, page) - page = menu_entry_re.sub (menu_entry_gettext, page) - page = page.replace ("""-- SKELETON FILE -- -When you actually translate this file, please remove these lines as -well as all `UNTRANSLATED NODE: IGNORE ME' lines.""", '') - page = page.replace ('UNTRANSLATED NODE: IGNORE ME', _doc ("This section has not been translated yet; please refer to the manual in English.")) - includes = include_re.findall (page) - page = include_re.sub (lambda m: include_replace (m, filename), page) - p = os.path.join (outdir, filename) [:-4] + 'pdftexi' - f = open (p, 'w') - f.write (page) - f.close () - dir = os.path.dirname (filename) - for file in includes: - p = os.path.join (dir, file) + '.texi' - if os.path.exists (p): - process_file (p) - -for filename in files: - process_file (filename) diff --git a/scripts/build/www_post.py b/scripts/build/www_post.py index c80e0f52f9..b329390a5d 100644 --- a/scripts/build/www_post.py +++ b/scripts/build/www_post.py @@ -29,24 +29,12 @@ static_files = { Redirecting to the documentation index...\n''', os.path.join (outdir, 'VERSION'): package_version + '\n', - os.path.join ('input', 'lsr', outdir, 'index.html'): - ''' -Redirecting to the documentation index...\n''' } -for l in langdefs.LANGUAGES: - static_files[os.path.join ( - 'Documentation', - 'user', - outdir, - l.file_name ('index', '.html'))] = \ - '\nRedirecting to the documentation index...\n' - for f, contents in static_files.items (): open (f, 'w').write (contents) -sys.stderr.write ("Mirrorring...\n") +sys.stderr.write ("Mirroring...\n") dirs, symlinks, files = mirrortree.walk_tree ( tree_roots = doc_dirs, process_dirs = outdir, @@ -85,9 +73,6 @@ for t in targets: if not os.path.exists (dest): os.symlink (p, dest) - ## ad-hoc renaming to make xrefs between PDFs work - os.rename (os.path.join (out_root, 'input/lsr/lilypond-snippets.pdf'), - os.path.join (out_root, 'Documentation/user/lilypond-snippets.pdf')) # need this for content negotiation with documentation index if 'online' in targets: diff --git a/scripts/lilypond-book.py b/scripts/lilypond-book.py index e851a40662..dc035b4b5c 100644 --- a/scripts/lilypond-book.py +++ b/scripts/lilypond-book.py @@ -29,7 +29,6 @@ TODO: ''' import glob -import md5 import os import re import stat @@ -273,7 +272,6 @@ TEXIDOC = 'texidoc' TEXINFO = 'texinfo' VERBATIM = 'verbatim' VERSION = 'lilypondversion' -FONTLOAD = 'fontload' FILENAME = 'filename' ALT = 'alt' @@ -601,7 +599,6 @@ simple_options = [ TEXIDOC, LANG, VERBATIM, - FONTLOAD, FILENAME, ALT, ADDVERSION @@ -831,8 +828,6 @@ PREAMBLE_LY = '''%%%% Generated by %(program_name)s %(preamble_string)s \paper { - #(define dump-extents #t) - %(font_dump_setting)s %(paper_string)s force-assignment = #"" line-width = #(- line-width (* mm %(padding_mm)f)) @@ -1037,10 +1032,12 @@ class LilypondSnippet (Snippet): self.do_options (os, self.type) def verb_ly (self): - if NOGETTEXT in self.option_dict: - return self.substring ('code') - else: - return verb_ly_gettext (self.substring ('code')) + verb_text = self.substring ('code') + if not NOGETTEXT in self.option_dict: + verb_text = verb_ly_gettext (verb_text) + if not verb_text.endswith ('\n'): + verb_text += '\n' + return verb_text def ly (self): contents = self.substring ('code') @@ -1225,9 +1222,6 @@ class LilypondSnippet (Snippet): notes_string = '\n '.join (compose_dict[NOTES]) % vars () preamble_string = '\n '.join (compose_dict[PREAMBLE]) % override padding_mm = global_options.padding_mm - font_dump_setting = '' - if FONTLOAD in self.option_dict: - font_dump_setting = '#(define-public force-eps-font-include #t)\n' d = globals().copy() d.update (locals()) @@ -1235,7 +1229,13 @@ class LilypondSnippet (Snippet): def get_checksum (self): if not self.checksum: - hash = md5.md5 (self.relevant_contents (self.full_ly ())) + # Work-around for md5 module deprecation warning in python 2.5+: + try: + from hashlib import md5 + except ImportError: + from md5 import md5 + + hash = md5 (self.relevant_contents (self.full_ly ())) ## let's not create too long names. self.checksum = hash.hexdigest ()[:10] @@ -1523,7 +1523,11 @@ class LilypondFileSnippet (LilypondSnippet): s = self.contents s = re_begin_verbatim.split (s)[-1] s = re_end_verbatim.split (s)[0] - return verb_ly_gettext (s) + if not NOGETTEXT in self.option_dict: + s = verb_ly_gettext (s) + if not s.endswith ('\n'): + s += '\n' + return s def ly (self): name = self.substring ('filename') diff --git a/stepmake/aclocal.m4 b/stepmake/aclocal.m4 index 27dfb0b511..37bf7fe34f 100644 --- a/stepmake/aclocal.m4 +++ b/stepmake/aclocal.m4 @@ -401,6 +401,7 @@ EOF print 'depth=' + ('../' * ( $d-1 ) ) print 'include \$(depth)/config\$(if \$(conf),-\$(conf),).make' print 'include \$(configure-srcdir)/$mf' +print 'MODULE_INCLUDES += \$(src-dir)/\$(outbase)' EOF done for mf in `cd $srcdir ; find -maxdepth $d -mindepth $d -name '*.make' | grep -v config.make `; do diff --git a/stepmake/stepmake/documentation-vars.make b/stepmake/stepmake/documentation-vars.make index 9f6b5148a1..502a0a99d6 100644 --- a/stepmake/stepmake/documentation-vars.make +++ b/stepmake/stepmake/documentation-vars.make @@ -1,5 +1,4 @@ at-dir = $(doc-dir)/ at-ext = .in -CSS_FILES := $(call src-wildcard,*.css) -EXTRA_DIST_FILES += $(CSS_FILES) +EXTRA_DIST_FILES += $(call src-wildcard, *.css) diff --git a/stepmake/stepmake/generic-rules.make b/stepmake/stepmake/generic-rules.make index 2500d80d41..0b04186db4 100644 --- a/stepmake/stepmake/generic-rules.make +++ b/stepmake/stepmake/generic-rules.make @@ -4,3 +4,5 @@ $(outdir)/%: %.m4 %.gz: % gzip -c9 $< > $@ +$(outdir)/%.css: $(CSS_DIRECTORY)/%.css + ln -f $< $@ diff --git a/stepmake/stepmake/generic-targets.make b/stepmake/stepmake/generic-targets.make index a36faaeb23..b98eb8c8c3 100644 --- a/stepmake/stepmake/generic-targets.make +++ b/stepmake/stepmake/generic-targets.make @@ -190,6 +190,11 @@ doc: doc-stage-1 $(MAKE) out=www WWW-2 $(MAKE) out=www WWW-post +local-doc: + $(MAKE) out=www local-WWW-1 + $(MAKE) out=www local-WWW-2 + $(MAKE) out=www WWW-post + doc-stage-1: $(MAKE) -C $(depth)/scripts/build out= $(MAKE) out=www WWW-1 diff --git a/stepmake/stepmake/generic-vars.make b/stepmake/stepmake/generic-vars.make index f4c8436494..6a8729df5f 100644 --- a/stepmake/stepmake/generic-vars.make +++ b/stepmake/stepmake/generic-vars.make @@ -65,12 +65,12 @@ TOPLEVEL_VERSION=$(TOPLEVEL_MAJOR_VERSION).$(TOPLEVEL_MINOR_VERSION).$(TOPLEVEL_ endif -# no local settings in the build process. +# no locale settings in the build process. LANG= export LANG -INFO_DIRECTORIES = Documentation/user input/lsr +INFO_DIRECTORIES = Documentation # clean file lists: # @@ -103,6 +103,11 @@ SOURCE_FILES += $(IN_FILES) # Preprocessed .in documentation _FILES: OUTIN_FILES = $(addprefix $(outdir)/, $(IN_FILES:%.in=%)) +# CSS source files are in a unique directory +CSS_DIRECTORY = $(top-src-dir)/Documentation/css +CSS_FILES := $(shell ls $(CSS_DIRECTORY)/*.css) +OUT_CSS_FILES = $(CSS_FILES:$(CSS_DIRECTORY)/%.css=$(outdir)/%.css) + ALL_SOURCES = $(SOURCE_FILES) ifeq (cygwin,$(findstring cygwin,$(HOST_ARCH))) diff --git a/stepmake/stepmake/omf-targets.make b/stepmake/stepmake/omf-targets.make index 2a51b1bd58..49325215e6 100644 --- a/stepmake/stepmake/omf-targets.make +++ b/stepmake/stepmake/omf-targets.make @@ -1,14 +1,14 @@ omf: $(OMF_FILES) -local-install: omf-local-install - omf-local-install: $(OMF_FILES) -$(INSTALLPY) -d $(DESTDIR)$(local_package_omfdir) $(foreach a, $(OMF_FILES), $(INSTALLPY) -m 644 $(a) $(DESTDIR)$(local_package_omfdir)/$(notdir $(a)) && ) true @echo "Run scrollkeeper-update to register newly installed OMF files." +ifeq ($(out),www) local-uninstall: omf-local-uninstall +endif omf-local-uninstall: rm -f $(foreach i, $(OMF_FILES), $(DESTDIR)$(local_package_omfdir)/$(notdir $(i))) diff --git a/stepmake/stepmake/texinfo-rules.make b/stepmake/stepmake/texinfo-rules.make index 351a1cc2d8..97256f4c62 100644 --- a/stepmake/stepmake/texinfo-rules.make +++ b/stepmake/stepmake/texinfo-rules.make @@ -13,7 +13,7 @@ # prerequisite, otherwise %.info are always outdated (because older # than $(outdir)), hence this .dep file -$(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep: $(INFO_DOCS:%=$(outdir)/%.texi) +$(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep: $(OUT_TEXI_FILES) ifneq ($(INFO_IMAGES_DIR),) rm -f $(INFO_IMAGES_DIR) ln -s $(outdir) $(INFO_IMAGES_DIR) @@ -26,18 +26,22 @@ endif $(outdir)/%.info: $(outdir)/%.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ $< +$(outdir)/lilypond-%.info: $(outdir)/%.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi + $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ $< + +$(outdir)/lilypond.info: general.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi + $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ $< + $(outdir)/%-big-page.html: $(outdir)/%.texi $(XREF_MAPS_DIR)/%.xref-map $(outdir)/version.itexi $(TEXI2HTML) --I=$(src-dir) --I=$(outdir) -D bigpage --output=$@ $(TEXI2HTML_INIT) $< - cp $(top-src-dir)/Documentation/lilypond*.css $(dir $@) $(outdir)/%.html: $(outdir)/%.texi $(XREF_MAPS_DIR)/%.xref-map $(outdir)/version.itexi $(TEXI2HTML) --I=$(src-dir) --I=$(outdir) --output=$@ $(TEXI2HTML_INIT) $< - cp $(top-src-dir)/Documentation/lilypond*.css $(dir $@) $(outdir)/%/index.html: $(outdir)/%.texi $(XREF_MAPS_DIR)/%.xref-map $(outdir)/version.itexi $(outdir)/%.html.omf mkdir -p $(dir $@) $(TEXI2HTML) --I=$(src-dir) --I=$(outdir) --output=$(dir $@) --prefix=index --split=section $(TEXI2HTML_INIT) $< - cp $(top-src-dir)/Documentation/lilypond*.css $(dir $@) + cp $(top-src-dir)/Documentation/css/*.css $(dir $@) $(outdir)/%.html.omf: %.texi diff --git a/stepmake/stepmake/texinfo-targets.make b/stepmake/stepmake/texinfo-targets.make index ede79d46e1..36a2e92da5 100644 --- a/stepmake/stepmake/texinfo-targets.make +++ b/stepmake/stepmake/texinfo-targets.make @@ -4,9 +4,11 @@ default: $(INFO_FILES) ifeq ($(out),www) local-WWW-1: $(XREF_MAPS_FILES) + +local-WWW-2: $(OUT_CSS_FILES) endif -local-doc: $(OUTTXT_FILES) +local-txt-doc: $(OUTTXT_FILES) check-info: texinfo-all-menus-update diff --git a/stepmake/stepmake/texinfo-vars.make b/stepmake/stepmake/texinfo-vars.make index d3d237843c..1db4b06ef5 100644 --- a/stepmake/stepmake/texinfo-vars.make +++ b/stepmake/stepmake/texinfo-vars.make @@ -1,29 +1,33 @@ TEXI_FILES = $(call src-wildcard,*.texi) - ALL_SOURCES += $(TEXI_FILES) - TEXINFO_SOURCES = $(TEXI_FILES) OUTTXT_FILES += $(addprefix $(outdir)/,$(TEXI_FILES:.texi=.txt)) -GENERATE_OMF = $(buildscript-dir)/texi2omf --format $(1) --location $(webdir)/$(tree-dir)/out-www/$(notdir $(basename $@)) --version $(TOPLEVEL_VERSION) $< > $@ +OMF_FILES += $(foreach format, html pdf, $(foreach f, $(TEXI_FILES), $(outdir)/$(f:.texi=.$(format)).omf)) + +GENERATE_OMF = $(buildscript-dir)/texi2omf --format $(1) --location $(webdir)$(tree-dir)/$(notdir $(basename $@)) --version $(TOPLEVEL_VERSION) $< > $@ TEXINFO_PAPERSIZE_OPTION= $(if $(findstring $(PAPERSIZE),a4),,-t @afourpaper) +DOCUMENTATION_INCLUDES += -I $(top-src-dir)/Documentation + MAKEINFO_FLAGS += --enable-encoding $(DOCUMENTATION_INCLUDES) MAKEINFO = LANG= $(MAKEINFO_PROGRAM) $(MAKEINFO_FLAGS) # texi2html xref map files -XREF_MAPS_DIR=$(top-build-dir)/out/xref-maps -XREF_MAPS_FILES=$(INFO_DOCS:%=$(XREF_MAPS_DIR)/%.xref-map) +XREF_MAPS_DIR = $(top-build-dir)/out/xref-maps +XREF_MAPS_FILES += $(TEXI_FILES:%.texi=$(XREF_MAPS_DIR)/%.xref-map) \ + $(TELY_FILES:%.tely=$(XREF_MAPS_DIR)/%.xref-map) +XREF_MAP_FLAGS += -I $(outdir) # texi2html flags ifneq ($(ISOLANG),) TEXI2HTML_LANG = --lang=$(ISOLANG) endif TEXI2HTML_FLAGS += $(DOCUMENTATION_INCLUDES) --I=$(XREF_MAPS_DIR) -TEXI2HTML_INIT = --init-file=$(top-src-dir)/lilypond-texi2html.init -TEXI2HTML = $(TEXI2HTML_PROGRAM) $(TEXI2HTML_FLAGS) $(TEXI2HTML_LANG) +TEXI2HTML_INIT = --init-file=$(top-src-dir)/Documentation/lilypond-texi2html.init +TEXI2HTML = PERL_UNICODE=SD $(TEXI2HTML_PROGRAM) $(TEXI2HTML_FLAGS) $(TEXI2HTML_LANG) TEXI2PDF_FLAGS += $(DOCUMENTATION_INCLUDES) @@ -33,7 +37,7 @@ endif # info stuff INFO_INSTALL_FILES = $(wildcard $(addsuffix *, $(INFO_FILES))) -INFO_INSTALL_COMMAND =$(if $(INFO_INSTALL_FILES),\ +INFO_INSTALL_COMMAND = $(if $(INFO_INSTALL_FILES),\ $(INSTALLPY) -d $(DESTDIR)$(infodir) ; \ $(MAKE) INSTALLATION_OUT_DIR=$(infodir) \ depth=$(depth) INSTALLATION_OUT_FILES="$(INFO_INSTALL_FILES)" \ diff --git a/stepmake/stepmake/topdocs-targets.make b/stepmake/stepmake/topdocs-targets.make index acacbb3c69..f884cadb9a 100644 --- a/stepmake/stepmake/topdocs-targets.make +++ b/stepmake/stepmake/topdocs-targets.make @@ -1,5 +1,5 @@ -default: local-doc +default: local-txt-doc ifeq ($(out),www) local-WWW-1: $(PDF_FILES) diff --git a/stepmake/stepmake/topdocs-vars.make b/stepmake/stepmake/topdocs-vars.make index 89786ea768..24731bf46b 100644 --- a/stepmake/stepmake/topdocs-vars.make +++ b/stepmake/stepmake/topdocs-vars.make @@ -1,3 +1,4 @@ TO_TOP_FILES=$(addprefix $(outdir)/, $(addsuffix .txt, $(README_TOP_FILES))) -DOCUMENTATION_INCLUDES = -I $(top-src-dir)/Documentation/user +DOCUMENTATION_INCLUDES += -I $(top-src-dir)/Documentation/application \ + $(top-src-dir)/Documentation/contributor diff --git a/stepmake/stepmake/toplevel-targets.make b/stepmake/stepmake/toplevel-targets.make index 94f9e234f3..17f0c59245 100644 --- a/stepmake/stepmake/toplevel-targets.make +++ b/stepmake/stepmake/toplevel-targets.make @@ -27,7 +27,7 @@ endif $(package-icon): - $(MAKE) -C Documentation/pictures icon + $(MAKE) -C Documentation/logo icon top-doc: