From: John Mandereau Date: Sat, 25 Jul 2009 13:44:39 +0000 (+0200) Subject: Docs: reorganize documentation directory structure X-Git-Tag: release/2.13.4-1~302 X-Git-Url: https://git.donarmstrong.com/?p=lilypond.git;a=commitdiff_plain;h=69f0ec479a6ade46d0a227755bb02562112c6743 Docs: reorganize documentation directory structure * rename manuals by stripping "lilypond-" prefix from all source file names and HTML and PDF output (it is kept in Info output, where it is necessary), * move manuals in Documentation/user one directory higher, in addition rename lilypond-program to application, and put .itely files in subdirectories, * move Documentation/topdocs/NEWS.tely to Documentation, * move Documentation/devel/contrib-guide.texi to Documentation/contributor.texi, * move input/lsr/lilypond-snippets.tely to Documentation/, move the rest input/lsr to Documentation/snippets, * move input/new to Documentation/snippets/new, * move input/texidocs contents to Documentation//texidocs, splitting texidocs by language, * do the same changes in all translations when applicable, * move Documentation/devel/index.html.in back to Documentation/deve.html.in. 'make all', 'make doc' and 'make dist' have been tested, although tons of broken HTML and PDF links and Info cross-references are expected. Maintenance makefiles (Documentation/GNUmakefile) and scripts (scripts/auxiliar) are known to be broken, they will be updated in a future commit. TODO: Documentation/GNUmakefile is still a bit of a mess. --- diff --git a/.gitignore b/.gitignore index d2ab2e64f5..be455e3b63 100644 --- a/.gitignore +++ b/.gitignore @@ -75,6 +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 12f25fefc9..eddd02822c 100644 --- a/Documentation/GNUmakefile +++ b/Documentation/GNUmakefile @@ -2,19 +2,81 @@ depth = .. 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)"' +SUBDIRS = application contributor learning notation snippets\ + bibliography 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 -EXTRA_DIST_FILES = lilypond-texi2html.init +LATEX_FILES =$(call src-wildcard,*.latex) +IMAGES=$(call src-wildcard,*.png) +EPS_ILLUSTRATIONS=context-example.eps -include $(depth)/make/stepmake.make +IN_ITELY_FILES = $(call src-wildcard,snippets/*-intro.itely) +SNIPPET_LY_FILES = $(call src-wildcard,snippets/*.ly) + + +### Extra out files + +# Dependencies +GENERATED_ITELY_FILES = $(IN_ITELY_FILES:snippets/%-intro.itely=$(outdir)/%.itely) + +OUT_PDF_IMAGES = $(IMAGES:%.png=$(outdir)/%.pdf) +OUT_PDF_IMAGES += $(EPS_ILLUSTRATIONS:%.eps=$(outdir)/%.pdf) +OUT_PNG_IMAGES = $(OUT_PDF_IMAGES:%.pdf=%.png) + +XREF_MAPS_FILES += $(XREF_MAPS_DIR)/internals.xref-map +OMF_FILES += $(outdir)/internals.html.omf $(outdir)/internals.pdf.omf + +# Main manuals + +OUT_MASTER_TEXI_FILES = $(outdir)/internals.texi +#OUT_TEXI_FILES=$(ITEXI_FILES:%.itexi=$(outdir)/%.texi)\ +# $(ITELY_FILES:%.itely=$(outdir)/%.texi) + +HTML_FILES = \ +$(TELY_FILES:%.tely=$(outdir)/%-big-page.html)\ + $(TEXI_FILES:%.texi=$(outdir)/%-big-page.html)\ + $(outdir)/internals-big-page.html -HTML_PAGE_NAMES= index translations +PDF_FILES = \ +$(TELY_FILES:%.tely=$(outdir)/%.pdf)\ + $(TELY_FILES:%.texi=$(outdir)/%.pdf)\ + $(outdir)/internals.pdf + + +HTML_PAGE_NAMES= index translations devel OUT_HTML_FILES= $(HTML_PAGE_NAMES:%=$(outdir)/%.html) OUT_CSS_FILES= $(CSS_FILES:%.css=$(outdir)/%.css) +MAIN_INFO_DOC = lilypond-notation +INFO_DOCS = lilypond-application lilypond-changes lilypond-contributor lilypond-internals \ + lilypond-learning lilypond-notation music-glossary +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 + + default: local-doc ifeq ($(out),www) @@ -38,9 +100,149 @@ $(OUT_HTML_FILES): $(OUT_CSS_FILES) $(outdir)/%.css: %.css ln -f $< $@ +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" + +##################################### +# Texinfo + +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) + + +# +# Split manuals in HTML +# +$(outdir)/learning/index.html: $(OUT_PNG_IMAGES) $(OUT_EPS_IMAGES) +$(outdir)/notation/index.html: $(OUT_PNG_IMAGES) $(OUT_EPS_IMAGES) + + +# +# Manuals in one big HTML page +# +$(outdir)/learning-big-page.html: $(OUT_PNG_IMAGES) +$(outdir)/notation-big-page.html: $(OUT_PNG_IMAGES) + +# 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, application contributor learning notation,\ +$(eval $(outdir)/(i).texi: $(call src-wildcard,$(i)/*.ite??))) + +$(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 $< + + +### Splitted HTML manuals + +DEEP_HTML_FILES =\ + $(outdir)/application/index.html\ + $(outdir)/internals/index.html\ + $(outdir)/learning/index.html\ + $(outdir)/notation/index.html\ + $(outdir)/music-glossary/index.html\ + $(outdir)/snippets/index.html + +# Symlinks to refer to external source documents from split and non-split HTML +source-links = $(outdir)/source $(outdir)/notation/source $(outdir)/music-glossary/source \ + $(outdir)/application/source $(outdir)/learning/source $(outdir)/internals/source \ + $(outdir)/snippets/source + +$(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) + +############### +### Web targets + +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)/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 + +.SECONDARY: -### Translations maintenance targets +##################################### +# Translations maintenance targets # +##################################### po-update: make -C po po-update @@ -61,7 +263,7 @@ new-lang: 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 + $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) -o doc.pot --skeleton --gettext ../learning.tely mv $(outdir)/*.*tely $(ISOLANG)/user msgmerge -U po/lilypond-doc.pot $(outdir)/doc.pot cp po/lilypond-doc.pot po/$(ISOLANG).po @@ -111,23 +313,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..21d9ec334f --- /dev/null +++ b/Documentation/application.tely @@ -0,0 +1,149 @@ +\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 @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 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 + +@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..b3cafb8eac --- /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 @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..ffe7797f16 --- /dev/null +++ b/Documentation/application/install.itely @@ -0,0 +1,85 @@ +@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:: +* 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 contributor/compile.itexi diff --git a/Documentation/application/lilypond-book.itely b/Documentation/application/lilypond-book.itely new file mode 100644 index 0000000000..436f017012 --- /dev/null +++ b/Documentation/application/lilypond-book.itely @@ -0,0 +1,1046 @@ +@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 @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/application/running.itely b/Documentation/application/running.itely new file mode 100644 index 0000000000..affb541b8a --- /dev/null +++ b/Documentation/application/running.itely @@ -0,0 +1,690 @@ +@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 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 creates a single SVG file containing the entire music + output, with embedded fonts. You need an SVG viewer that + supports embedded fonts, or an SVG viewer that can 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. + +@menu +* Invoking convert-ly:: +* Command line options for convert-ly:: +* Problems with convert-ly:: +@end menu + +@node Invoking convert-ly +@subsection 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 +@subsection 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 +@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 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 + + +@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/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/baer-flat-bw.png b/Documentation/baer-flat-bw.png new file mode 100644 index 0000000000..bb25bd1903 Binary files /dev/null and b/Documentation/baer-flat-bw.png differ diff --git a/Documentation/baer-flat-gray.png b/Documentation/baer-flat-gray.png new file mode 100644 index 0000000000..08cd338380 Binary files /dev/null and b/Documentation/baer-flat-gray.png differ diff --git a/Documentation/changes.tely b/Documentation/changes.tely new file mode 100644 index 0000000000..8ce75ea5dc --- /dev/null +++ b/Documentation/changes.tely @@ -0,0 +1,148 @@ +\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 Intermediate .ps files which are created by LilyPond +during compilation are now deleted by default. To keep them, +add the line +@example +#(ly:set-option 'delete-intermediate-files #f) +@end example +to your input files. + +@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/common-macros.itexi b/Documentation/common-macros.itexi index a971723ab7..599d4f3e7c 100644 --- a/Documentation/common-macros.itexi +++ b/Documentation/common-macros.itexi @@ -66,10 +66,11 @@ @c ***** Headers ***** +@ifclear snippets-sections @macro lydoctitle {TEXT} @emph{\TEXT\} @end macro - +@end ifclear @c ***** Indexing ***** diff --git a/Documentation/context-example.eps b/Documentation/context-example.eps new file mode 100644 index 0000000000..869417a8aa --- /dev/null +++ b/Documentation/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/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/compile.itexi b/Documentation/contributor/compile.itexi new file mode 100644 index 0000000000..c6a54e35f7 --- /dev/null +++ b/Documentation/contributor/compile.itexi @@ -0,0 +1,532 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + + +@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/contributor/compiling.itexi b/Documentation/contributor/compiling.itexi new file mode 100644 index 0000000000..1d0dfd8bc0 --- /dev/null +++ b/Documentation/contributor/compiling.itexi @@ -0,0 +1,167 @@ +@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 + +TODO (see AU 1 for now) +@c currently broken; will fix after 2.14 +@c @include compile.itely + + +@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..1da5186c27 --- /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 user/lilypond-learning.tely +6368 user/tutorial.itely +23 user/dedication.itely +432 user/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 user/preface.itely +3866 user/introduction.itely +407 user/lilypond-program.tely +193 user/install.itely (partial translation) +1149 user/setup.itely +3023 user/running.itely +9049 total + +-3- Learning manual +10323 user/fundamental.itely -- Fundamental concepts +14834 user/tweaks.itely -- Tweaking output +5033 user/working.itely -- Working on LilyPond files +498 user/templates.itely -- Templates +30688 total + +-4- Notation reference +724 user/lilypond.tely +91 user/notation.itely -- Musical notation +3155 user/pitches.itely +4757 user/rhythms.itely +1392 user/expressive.itely +555 user/repeats.itely +1456 user/simultaneous.itely +1689 user/staff.itely +919 user/editorial.itely +2412 user/text.itely +76 user/specialist.itely -- Specialist notation +2725 user/vocal.itely +1516 user/chords.itely +702 user/piano.itely +810 user/percussion.itely +826 user/guitar.itely +66 user/strings.itely +242 user/bagpipes.itely +4487 user/ancient.itely +6170 user/input.itely -- Input syntax +2164 user/non-music.itely -- Non-musical notation +8663 user/spacing.itely -- Spacing issues +11800 user/changing-defaults.itely -- Changing defaults +5187 user/programming-interface.itely -- Interfaces for programmers +611 user/notation-appendices.itely -- Notation manual tables +252 user/cheatsheet.itely -- Cheat sheet +63447 total + +-5- Application usage +3248 user/lilypond-book.itely -- LilyPond-book +1171 user/converters.itely -- Converting from other formats +4419 total + +-6- Appendices whose translation is optional +310 user/literature.itely +1222 user/scheme-tutorial.itely (needs to 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..6c91e7129d --- /dev/null +++ b/Documentation/contributor/doc-work.itexi @@ -0,0 +1,1676 @@ +@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 + +The user manuals lives in @file{Documentation/user/}. In +particular, the files @file{lilypond-learning.ly} (LM), +@file{lilypond.itely} (NR), @file{music-glossary.tely} (MG), 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); +see the @qq{main} file for each manual to determine the filename +of the specific chapter you wish to modify. + +Developer manuals live in @file{Documentation/devel}. Currently +there is only one; @file{contrib-guide.texi}. + +Although snippets are part of documentation, they are not +(directly) part of the manuals. For information about how to +modify them, 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 + + +@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 @{ + #(define dump-extents #t) + 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 "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... 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 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:: +* Translation status:: +@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. +@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 user manual and program usage -- Texinfo source, PDF and HTML +output; Info output might be added if there is enough demand for it; +@item the News document. +@end itemize + +The following pieces of documentation should be added soon, by +descending order of priority: + +@itemize +@item automatically generated documentation: markup commands, +predefined music functions; +@item the Snippets List; +@item the examples page; +@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 + +Any title which comes with one of the following commands must not be +translated directly in the Texinfo source + +@example +@@node @@majorheading +@@chapter @@unnumbered @@appendix @@chapheading +@@section @@unnumberedsec @@appendixsec @@heading +@@subsection @@unnumberedsubsec @@appendixsubsec @@subheading +@@subsubsection @@unnumberedsubsubsec @@appendixsubsubsec @@subsubheading +@@ref @@rglos @@ruser @@rlearning @@rprogram @@rlsr +@end example + +The same applies to first argument of @code{@@r@var{manual}named} +commands; however, the second argument @var{Bar baz} of +@code{@@ref@{@var{Foo},@var{Bar baz},,@var{info-file}@}} and +@code{@@r@var{manual}named@{@var{Foo},@var{Bar baz}@}} should be +translated. + +@code{@@uref}'s names are to be translated. + +In any section which looks like + +@example +@@menu +* @var{node1}:: @var{thing1} +* @var{node2}:: @var{thing2} +... +@@end menu +@end example + +@noindent +the node names @var{nodeN} are @emph{not} to be translated, whereas +extra title information @var{thingN} is. + +Every node name or section title must from now on be translated +separately in a @file{.po} file (just as well as 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{user/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{input/lsr/@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{input/texidocs/@var{filename}.texidoc} -- please keep possibly +existing translations in other languages! 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{input/texidocs/@var{filename}.texidoc} may contain + +@example +doctitlees = "Spanish title baz" +texidoces = " +Spanish translation blah +" +doctitlede = "German title bar" +texidocde = "German translation foo +" +@end example + +@code{@@example} blocs need not be verbatim copies, e.g. variable +names, file names and comments should be translated. + +Index entries (@code{@@cindex} and so on) 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{user/lilypond.tely} (or @file{user/lilypond-program.tely}, +respectively) into @file{@var{MY-LANGUAGE}/user}, 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/user/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 + +or to update a single file + +@example +make CHECKED_FILES=@var{MY_LANGUAGE/user/foo.itely} update-translation +@end example + +For each file to be udpated, 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/user/every.itely}} with music snippets from +@file{@var{user/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. + +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. + +@seealso + +@ref{Maintaining without updating translations}. + + +@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, transloators may be (and that) involved in these porjects too. + +it is possible -- and even recommended -- to +perform some maintaining that keeps translated documentation usable +and eases future translation updating. The rationale below the tasks +list motivates this plan. 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 *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 *Occur* contents into *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 *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} ("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{html-gettext.py} -- translate node names, section titles and cross +references in HTML files generated by @command{makeinfo}, +@item @file{texi-gettext.py} -- gettext node names, section titles and references +before calling @command{texi2pdf}, +@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 + + +@node Translation status +@subsection Translation status + + 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..b3d4996344 --- /dev/null +++ b/Documentation/contributor/lsr-work.itexi @@ -0,0 +1,260 @@ +@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{input/new} and +a reference should be added to the manual. + +Snippets created or updated in @file{input/new} should be copied to +@file{input/lsr} by invoking at top of the source tree + +@example +scripts/auxiliar/makelsr.py +@end example + +Be sure that @command{make doc} runs successfully before submitting a +patch, to prevent breaking compilation. + +@subheading Formatting snippets in @file{input/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{input/new} and the +other from LSR with the same file name, the one from @file{input/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{input/lsr} cause 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{input/lsr/@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 input/lsr/@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{input/new}, then run @command{makelsr.py}. + +@item +@strong{In case the snippet comes from} @file{input/new}, apply in +@file{input/new/@var{foo}.ly} the same fix you did in +@file{input/lsr/@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{input/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{input/new/} were +included, then delete those snippets from @file{input/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..1170949402 --- /dev/null +++ b/Documentation/contributor/programming-work.itexi @@ -0,0 +1,840 @@ +@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. + +@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 +input/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/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..9373d9b2cf --- /dev/null +++ b/Documentation/de/application.tely @@ -0,0 +1,202 @@ +\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 +@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{About the documentation}. + +@cindex Internetseite +@cindex URL + +@uref{http://@/www@/.lilypond@/.org/}. Auf der Internetseite +finden sich Kopien dieser und anderer Dokumentationsdateien. + +@menu +* Install:: Wie das Programm installiert oder kompiliert wird. +* Setup:: Wie LilyPond mit anderen Programmen benutzt werden kann. +* Running LilyPond:: Betrieb des Programms. +* LilyPond-book:: Kombination von Text und Noten. +* Converting from other formats:: 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 + +@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..40a31d8a59 --- /dev/null +++ b/Documentation/de/application/converters.itely @@ -0,0 +1,378 @@ +@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 Converting from other formats +@chapter 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{Command-line usage} 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{Setup for 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 +* Invoking midi2ly:: Import von MIDI. +* Invoking musicxml2ly:: Import von MusicXML. +* Invoking abc2ly:: Import von ABC. +* Invoking etf2ly:: Import von (alten) Finale-Dateien. +* Generating LilyPond files:: Grafische Benutzeroberflächen, +Musikübersetzer und Programme zur algorithmischen Komposition. +@end menu + +@node Invoking midi2ly +@section Invoking @command{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{Converting from other formats}. + +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 Invoking musicxml2ly +@section Invoking @code{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{Converting from other formats}. + +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 Invoking abc2ly +@section Invoking @code{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{Converting from other formats}. + +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 Invoking etf2ly +@section Invoking @command{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{Converting from other formats}. + +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 Generating LilyPond files +@section 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..fe6da9f8dc --- /dev/null +++ b/Documentation/de/application/install.itely @@ -0,0 +1,87 @@ +@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 Install +@chapter 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 +* Precompiled binaries:: +* Compiling from source:: +@end menu + +@node Precompiled binaries +@section Precompiled binaries + +@unnumberedsubsec Downloading + + +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 Compiling from source +@section 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..5b48ed72ae --- /dev/null +++ b/Documentation/de/application/lilypond-book.itely @@ -0,0 +1,1109 @@ +@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}: Integrating text and music + +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{Command-line usage}. Wenn Sie MacOS 10.3 +oder 10.4 benutzen und Probleme mit @code{lilypond-book} haben, lesen +Sie @ref{Setup for 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 +* 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 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 Input + +@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 Processing + +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 Output + +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 Integrating music and text +@section 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{} + + +@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{Invoking lilypond-book}. + + + + +@node Texinfo +@subsection 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 + +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 + + +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 Common conventions + +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 Including a LilyPond file + +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 Including LilyPond code + +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 Processing the DocBook document + +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 Music fragment options +@section 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. + +@item fontload +Diese Option inkludiert die Schriftarten in allen EPS-Dateien, die von +diesem Fragment erzeugt werden. Dies ist nötig, wenn das Fragment +Schriftarten benutzt, die @LaTeX{} nicht selbst findet. + +@end table + + +@node Invoking lilypond-book +@section Invoking @command{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 Format-specific instructions + +@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 Command line options + +@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 Filename extensions +@section 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{Invoking lilypond-book}. +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 Alternate methods of mixing text and music +@section Alternative 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 +* 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 +@subsection 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{Extracting fragments of music}. + + +@node Inserting LilyPond output into OpenOffice.org +@subsection 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 Inserting LilyPond output into other programs +@subsection 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..e712a752b6 --- /dev/null +++ b/Documentation/de/application/running.itely @@ -0,0 +1,694 @@ +@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: Reinhold Kainhofer, Till Rettig + +@node Running LilyPond +@chapter Running LilyPond + +Dieses Kapitel behandelt die technischen Details, wie Lilypond ausgeführt werden kann. + + +@menu +* Normal usage:: +* Command-line usage:: +* Error messages:: +* Updating files with convert-ly:: +* Reporting bugs:: +@end menu + +@node Normal usage +@section Normal usage + +Die meisten Benutzer führen LilyPond von einer graphischen Benutzeroberfläche +aus. Siehe @rlearning{First steps}, falls Sie dies nicht bereits getan haben. + + +@node Command-line usage +@section 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{Setup for 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 +* Invoking lilypond:: +* Command line options for lilypond:: +* Environment variables:: +@end menu + +@node Invoking lilypond +@subsection Invoking @command{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 Command line options for lilypond +@subsection Command line options for @command{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 Environment variables +@subsection 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 Error messages +@section 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 Updating files with convert-ly +@section Updating files with @command{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. +@c MacOS@tie{}X-Benutzer können diesen Befehl im Menu unter +@c @code{Compile > Update syntax} finden. +@c Does it work? TR + +Wenn keine Veränderungen in @code{meineDatei.ly} vorgenommen wurden +und eine Datei @code{meineDatei.ly.NEW} erstellt wird, it +@code{meineDatei.ly} schon aktuell. + + +@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} 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}. + +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 + +Die allgemeine Syntax des Programms lautet: + +@example +convert-ly [@var{option}]@dots{} @var{file}@dots{} +@end example + +Folgende Optionen sind möglich: + +@table @code +@item -e,--edit +Verändere die entsprechende Zeile der Eingabedatei. Überschreibt +@code{--output}. + +@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. + +@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. + +@item -h, --help +Benutzerhilfe ausgeben. +@end table + + +@node Problems with convert-ly +@subsection Problems with @code{convert-ly} + +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 Reporting bugs +@section 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..16a2c514a4 --- /dev/null +++ b/Documentation/de/application/setup.itely @@ -0,0 +1,345 @@ +@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 + +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 for specific Operating Systems:: +* Text editor support:: +* Point and click:: +@end menu + + +@node Setup for specific Operating Systems +@section Setup for specific Operating Systems + +Dieser Abschnitt erklärt zusätzliche Einstellungen für bestimmte Betriebssysteme. + +@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 + +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 on the command line + +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 Text editor support +@section 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 mode:: +* Vim mode:: +* jEdit:: +* TexShop:: +* TextMate:: +* LilyKDE:: +@end menu + +@node Emacs mode +@subsection 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 mode +@subsection 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 + +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 + +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 + +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 + +@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 +@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)