po-update:
make -C po po-update
+all-translations-update: po-update
+ $(foreach lang, $(LANGS), make ISOLANG=$(lang) skeleton-update snippet-update &&) true
+
ifneq ($(ISOLANG),)
new-lang:
@if (( $$(file -b $(ISOLANG)) == directory )) 2>/dev/null; \
skeleton-update:
$(PYTHON) $(buildscript-dir)/texi-langutils.py -d $(outdir) -b "UNTRANSLATED NODE: IGNORE ME" -l $(ISOLANG) --skeleton ../user/lilypond.tely
$(PYTHON) $(buildscript-dir)/texi-skeleton-update.py $(ISOLANG)/user $(outdir)
+
+snippet-update:
+ $(PYTHON) $(buildscript-dir)/update-snippets.py user $(ISOLANG)/user '*.itely'
endif
As a notable exception, the second argument 'Bar baz' of
@ref{Foo,'Bar baz',,info-file} should be translated.
+@uref's names are to be translated.
+
In any section which looks like
@menu
the node names (nodeN) are NOT to be translated, whereas extra title
information (thingN) is.
-
Every node name or section title must from now on be translated
separately in a .po file (just as well as LilyPond output messages).
This .po file should be in Documentation/po.
-Make sure to keep *verbatim* copies of music snippets (in @lilypond blocs).
-@example blocs do not have to be verbatim copies, e.g. variable names,
+
+Please keep verbatim copies of music snippets (in @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 @lilypond block,
+beginning with
+
+@c KEEP LY
+
+Otherwise the music snippet would be reset to the same contents as the
+English version at next 'make snippet-update' run (see UPDATING A
+TRANSLATION below).
+
+
+@example blocs need not be verbatim copies, e.g. variable names,
file names and comments should be translated.
Index entries (@cindex and so on) should be translated.
Texinfo skeleton files, i.e. .itely files not yet translated,
containing only the Texinfo structure can be updated automatically:
-whenever 'make check-translation' shows that such files shouldbe
+whenever 'make check-translation' shows that such files should be
updated, run from Documentation
make ISOLANG=<MY_LANGUAGE> skeleton-update
make po-update
+Updating music snippets can quickly become cumbersome, as most
+snippets should be identical in all languages. Fortunately, there is
+a script than can do this odd job for you (run from Documentation):
+
+ make ISOLANG=<MY_LANGUAGE> snippet-update
+
+This script overwrites music snippets in <MY_LANGUAGE>/user/every.itely
+with music snippets from user/every.itely. It ignores skeleton files,
+and keeps intact music snippets preceded with a line starting with '@c
+KEEP LY'; it reports an error for each .itely that has not the same
+music snippet count in both languages.
+
+Finally, a command runs the three update processes above for all
+enabled languages (from Documentation):
+
+ make all-translations-update
+
+This command is mainly intended to be used by the Translation meister.
TECHNICAL BACKGROUND
before calling texi2pdf
* mass-link.py -- link or symlink files between English documentation
and documentation in other languages
+* update-snippets.py -- synchronize ly snippets with those from
+English docs
Anfangsklammern können tief einander verschachtelt werden.
@lilypond[quote,ragged-right,verbatim]
-\new StaffGroup
+\new StaffGroup
\relative <<
\set StaffGroup.systemStartDelimiterHierarchy
= #'(SystemStartSquare (SystemStartBracket a (SystemStartSquare b)) d)
@tab más pentagramas
@tab
@lilypond[fragment]
-<< \new Staff { c'1 }
- \new Staff { c'1 } >>
+<< \new Staff {
+ \set Staff.implicitTimeSignatureVisibility = #all-invisible
+ c'1
+ }
+ \new Staff {
+ \set Staff.implicitTimeSignatureVisibility = #all-invisible
+ c'1
+ } >>
@end lilypond
@tab
@lilypond[fragment,relative=2]
\set Staff.implicitTimeSignatureVisibility = #all-invisible
-c\mf c\sfz
+c2\mf c\sfz
@end lilypond
@tab acorde
@tab
@lilypond[fragment,relative=2]
+\set Staff.implicitTimeSignatureVisibility = #all-invisible
<c e>
@end lilypond
@tab tresillos
@tab
@lilypond[relative=1,fragment]
+\set Staff.implicitTimeSignatureVisibility = #all-invisible
\times 2/3 { f8 g a }
@end lilypond
@tab mordentes
@tab
@lilypond[relative=2,fragment]
+\set Staff.implicitTimeSignatureVisibility = #all-invisible
\context Voice { \grace b16 c4 }
@end lilypond
@tab separador de sÃlabas
@tab
@lilypond[fragment,relative=2]
+\set Staff.implicitTimeSignatureVisibility = #all-invisible
<<
{ g'1 g }
\new Lyrics \lyricsto "" { twin -- kle }
@tab acordes
@tab
@lilypond[fragment,relative=2]
+\set Staff.implicitTimeSignatureVisibility = #all-invisible
\chordmode { c:dim f:maj7 }
@end lilypond
@tab polifonÃa
@tab
@lilypond[fragment,relative=2]
+\set Staff.implicitTimeSignatureVisibility = #all-invisible
\context Staff <<{e f} \\ {c d}>>
@end lilypond
@lilypond[quote,ragged-right,fragment,relative=2,verbatim]
\new Voice << {
- c8 c4.
- \override Staff.NoteCollision
- #'merge-differently-headed = ##t
-c8 c4. } \\ { c2 c2 } >>
+ c8 c4.
+ \override Staff.NoteCollision
+ #'merge-differently-headed = ##t
+c8 c4. } \\ { c2 c2 } >>
@end lilypond
LilyPond empile aussi les silences à l'opposé des
@seealso
-
Pour les barres de mesure au début de chaque système, voir
@internalsref{SystemStartBar}, @internalsref{SystemStartBrace}, et
@internalsref{SystemStartBracket}. Dans chaque contexte, seul l'un de
ces styles est utilisé, et c'est la propriété
@internalsref{systemStartDelimiter} qui détermine lequel.
+@commonprop
+
+Les accolades et crochets délimitant les systèmes peuvent être imbriqués
+en profondeur,
+
+@lilypond[quote,ragged-right,verbatim]
+\new StaffGroup
+\relative <<
+ \set StaffGroup.systemStartDelimiterHierarchy
+ = #'(SystemStartSquare (SystemStartBracket a (SystemStartSquare b)) d)
+ \new Staff { c1 }
+ \new Staff { c1 }
+ \new Staff { c1 }
+ \new Staff { c1 }
+ \new Staff { c1 }
+>>
+@end lilypond
+
@node Staff symbol
@subsection Staff symbol
>>
@end lilypond
+Ceci fonctionne bien avec la musique pour piano :
+
+@lilypond[quote,verbatim]
+music = {
+ \key c \major
+ \time 4/4
+ \parallelMusic #'(voiceA voiceB voiceC voiceD) {
+ % Bar 1
+ r8 g'16[ c''] e''[ g' c'' e''] r8 g'16[ c''] e''[ g' c''
+e''] |
+ c'2 c'2 |
+ r8 a16[ d'] f'[ a d' f'] r8 a16[ d'] f'[ a d' f'] |
+ c2 c2 |
+
+ % Bar 2
+ a'8 b' c'' d'' e'' f'' g'' a'' |
+ d'4 d' d' d' |
+ c16 d e f d e f g e f g a f g a b |
+ a,4 a,4 a,4 a,4 |
+
+ % Bar 3 ...
+ }
+}
+
+\score {
+ \new PianoStaff <<
+ \music
+ \new Staff <<
+ \voiceA \\
+ \voiceB
+ >>
+ \new Staff {
+ \clef bass
+ <<
+ \voiceC \\
+ \voiceD
+ >>
+ }
+ >>
+}
+@end lilypond
@node Connecting notes
@commonprop
-Les liaisons de tenues servent parfois à rendre un accord arpégé. Dans
+Les liaisons de tenue servent parfois à rendre un accord arpégé. Dans
ce cas, les notes liées ne sont pas toutes l'une contre l'autre. Il
faut alors définir comme vraie (@q{t} pour @q{true}) la propriété
@code{tieWaitForNote}. Cette même méthode peut servir, par exemple, Ã
e8~ c~ a~ f~ <e' c a f>2
@end lilypond
+Il est possible de graver manuellement les liaisons de tenue, en
+changeant la propriété @code{tie-configuration}. Pour chaque paire, le
+premier nombre indique la distance à la portée, en espaces de portée, et
+le deuxième nombre indique la direction --- 1 pour haut, @minus{}1 pour
+bas.
-@refcommands
+@lilypond[fragment,verbatim,relative=1,ragged-right,quote]
+<c e g>2~ <c e g> |
+\override TieColumn #'tie-configuration =
+ #'((0.0 . 1) (-2.0 . 1) (-4.0 . 1))
+<c e g>~ <c e g> |
+@end lilypond
+@refcommands
+
@funindex \tieUp
@code{\tieUp},
@funindex \tieDown
Référence du programme : @internalsref{Tie}.
-
@refbugs
-
Un changement de portée, lorsqu'une liaison de tenue est active, ne
peut produire une liaison oblique.
@lilypond[quote,ragged-right,fragment,verbatim,relative=2]
\new Staff {
- \partial 4
- \repeat volta 4 { e | c2 d2 | e2 f2 | }
- \alternative { { g4 g g } { a | a a a a | b2. } }
+ \partial 4 e |
+ \repeat volta 4 { c2 d2 | e2 f2 | }
+ \alternative { { g4 g g e } { a a a a | b2. } }
}
@end lilypond
@lilypond[quote,verbatim,ragged-right]
hornNotes = \relative c'' { c4 b dis c }
\score {
- {
- \hornNotes
- }
+ {
+ \hornNotes
+ }
}
@end lilypond
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-06-28 14:13+0200\n"
+"POT-Creation-Date: 2007-07-04 00:04+0200\n"
"PO-Revision-Date: 2007-05-12 18:41+0200\n"
"Last-Translator: Till Rettig <till.rettig@gmx.de>\n"
"Language-Team: de <LL@li.org>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: add_html_footer.py:46
+#: add_html_footer.py:44
#, python-format
msgid "This page is for %(package_name)s-%(package_version)s (%(branch_str)s)."
msgstr ""
"Diese Seite ist für %(package_name)s-%(package_version)s (%(branch_str)s)."
-#: add_html_footer.py:47
+#: add_html_footer.py:45
#, python-format
msgid "Report errors to <a href=\"%(mail_address_url)s\">%(mail_address)s</a>."
msgstr ""
"Fehler bitte an <a href=\"%(mail_address_url)s\">%(mail_address)s</a> melden."
+#: add_html_footer.py:46
+#, python-format
+msgid ""
+"Your <a href=\"%(suggest_s_url)s\">suggestions for the documentation</a> are "
+"welcome."
+msgstr ""
+
#: add_html_footer.py:54
#, python-format
msgid "Other languages: %s."
msgid "About <A HREF=\"%s\">automatic language selection</A>."
msgstr "Ãœber die <A HREF=\"%s\">automatische Sprachauswahl</A>."
-#: add_html_footer.py:238
+#: add_html_footer.py:251
msgid "stable-branch"
msgstr "stabiler Zweig"
-#: add_html_footer.py:240
+#: add_html_footer.py:253
msgid "development-branch"
msgstr "Entwicklungszweig"
msgstr "Noten in LaTeX integrieren"
#. @section in ../../../Documentation/user/lilypond-book.itely
-msgid "Integrating La@TeX{} and music"
+#, fuzzy
+msgid "Integrating @LaTeX{} and music"
msgstr "Noten in La@TeX{} integrieren"
#. @node in ../../../Documentation/user/lilypond-book.itely
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-06-28 14:13+0200\n"
+"POT-Creation-Date: 2007-07-04 00:04+0200\n"
"PO-Revision-Date: 2007-03-28 10:29+0200\n"
"Last-Translator: Francisco Vila <francisco.vila@hispalinux.es>\n"
"Language-Team: spanish <es@li.org>\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: add_html_footer.py:46
+#: add_html_footer.py:44
#, python-format
msgid "This page is for %(package_name)s-%(package_version)s (%(branch_str)s)."
msgstr ""
"Esta página corresponde a %(package_name)s-%(package_version)s (%(branch_str)"
"s)."
-#: add_html_footer.py:47
+#: add_html_footer.py:45
#, python-format
msgid "Report errors to <a href=\"%(mail_address_url)s\">%(mail_address)s</a>."
msgstr ""
"Informe de los fallos a <a href=\"%(mail_address_url)s\">%(mail_address)s</"
"a>."
+#: add_html_footer.py:46
+#, python-format
+msgid ""
+"Your <a href=\"%(suggest_s_url)s\">suggestions for the documentation</a> are "
+"welcome."
+msgstr ""
+
#: add_html_footer.py:54
#, python-format
msgid "Other languages: %s."
msgid "About <A HREF=\"%s\">automatic language selection</A>."
msgstr "Acerca de la <A HREF=\"%s\">selección automática del idioma</A>."
-#: add_html_footer.py:238
+#: add_html_footer.py:251
msgid "stable-branch"
msgstr "rama estable"
-#: add_html_footer.py:240
+#: add_html_footer.py:253
msgid "development-branch"
msgstr "rama de desarrollo"
msgstr "Integración de LaTeX y música"
#. @section in ../../../Documentation/user/lilypond-book.itely
-msgid "Integrating La@TeX{} and music"
+#, fuzzy
+msgid "Integrating @LaTeX{} and music"
msgstr "Integración de La@TeX{} y música"
#. @node in ../../../Documentation/user/lilypond-book.itely
msgstr ""
"Project-Id-Version: fr\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-06-28 14:13+0200\n"
+"POT-Creation-Date: 2007-07-04 00:04+0200\n"
"PO-Revision-Date: 2007-06-30 14:29+0200\n"
"Last-Translator: John Mandereau <john.mandereau@free.fr>\n"
"Language-Team: Français <lilypond-user-fr@gnu.org>\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.4\n"
-#: add_html_footer.py:46
+#: add_html_footer.py:44
#, python-format
msgid "This page is for %(package_name)s-%(package_version)s (%(branch_str)s)."
msgstr ""
"Cette page documente %(package_name)s-%(package_version)s (%(branch_str)s)."
-#: add_html_footer.py:47
+#: add_html_footer.py:45
#, python-format
msgid "Report errors to <a href=\"%(mail_address_url)s\">%(mail_address)s</a>."
msgstr ""
"org\">lilypond-user-fr@gnu.org</a> ou en anglais à <a href=\"%"
"(mail_address_url)s\">%(mail_address)s</a>"
+#: add_html_footer.py:46
+#, python-format
+msgid ""
+"Your <a href=\"%(suggest_s_url)s\">suggestions for the documentation</a> are "
+"welcome."
+msgstr ""
+
#: add_html_footer.py:54
#, python-format
msgid "Other languages: %s."
msgid "About <A HREF=\"%s\">automatic language selection</A>."
msgstr "À propos de la <A HREF=\"%s\">sélection automatique de la langue</A>."
-#: add_html_footer.py:238
+#: add_html_footer.py:251
msgid "stable-branch"
msgstr "branche stable"
-#: add_html_footer.py:240
+#: add_html_footer.py:253
msgid "development-branch"
msgstr "branche de développement"
msgstr "Intégrer de la musique dans LaTeX"
#. @section in ../../../Documentation/user/lilypond-book.itely
-msgid "Integrating La@TeX{} and music"
+#, fuzzy
+msgid "Integrating @LaTeX{} and music"
msgstr "Intégrer de la musique dans @LaTeX{}"
#. @node in ../../../Documentation/user/lilypond-book.itely
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-06-28 14:13+0200\n"
+"POT-Creation-Date: 2007-07-04 00:04+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: add_html_footer.py:46
+#: add_html_footer.py:44
#, python-format
msgid "This page is for %(package_name)s-%(package_version)s (%(branch_str)s)."
msgstr ""
-#: add_html_footer.py:47
+#: add_html_footer.py:45
#, python-format
msgid "Report errors to <a href=\"%(mail_address_url)s\">%(mail_address)s</a>."
msgstr ""
+#: add_html_footer.py:46
+#, python-format
+msgid ""
+"Your <a href=\"%(suggest_s_url)s\">suggestions for the documentation</a> are "
+"welcome."
+msgstr ""
+
#: add_html_footer.py:54
#, python-format
msgid "Other languages: %s."
msgid "About <A HREF=\"%s\">automatic language selection</A>."
msgstr ""
-#: add_html_footer.py:238
+#: add_html_footer.py:251
msgid "stable-branch"
msgstr ""
-#: add_html_footer.py:240
+#: add_html_footer.py:253
msgid "development-branch"
msgstr ""
msgstr ""
#. @section in ../../../Documentation/user/lilypond-book.itely
-msgid "Integrating La@TeX{} and music"
+msgid "Integrating @LaTeX{} and music"
msgstr ""
#. @node in ../../../Documentation/user/lilypond-book.itely
System start delimiters may be deeply nested,
@lilypond[quote,ragged-right,verbatim]
-\new StaffGroup
+\new StaffGroup
\relative <<
\set StaffGroup.systemStartDelimiterHierarchy
= #'(SystemStartSquare (SystemStartBracket a (SystemStartSquare b)) d)
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 La@TeX{} or HTML document.
+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
substituted for the music. The line width and font size definitions for
the music are adjusted to match the layout of your document.
-This procedure may be applied to La@TeX{}, HTML, Texinfo or DocBook documents.
+This procedure may be applied to @LaTeX{}, HTML, Texinfo or DocBook documents.
@menu
* An example of a musicological document::
@section An example of a musicological document
@cindex musicology
-@cindex La@TeX{}, music in
+@cindex @LaTeX{}, music in
@cindex HTML, music in
@cindex Texinfo, music in
@cindex DocBook, music in
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, La@TeX{}, Texinfo and DocBook documents.
+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 La@TeX{}. The example also contains explanatory
+example for use with @LaTeX{}. The example also contains explanatory
text, so we will not comment on it further.
@quotation
Running dvips will produce many warnings about fonts. They are not
harmful; please ignore them.
-Finally the result of the La@TeX{} example shown above.@footnote{This
+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.
@node Integrating LaTeX and music
-@section Integrating La@TeX{} and music
+@section Integrating @LaTeX{} and music
-La@TeX{} is the de-facto standard for publishing layouts in the exact
+@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 La@TeX{}}} for an overview on how
-to use La@TeX{}.
+@emph{The Not So Short Introduction to @LaTeX{}}} for an overview on how
+to use @LaTeX{}.
Music is entered using
@end example
Running @command{lilypond-book} yields a file that can be further
-processed with La@TeX{}.
+processed with @LaTeX{}.
We show some examples here. The lilypond environment
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 La@TeX{} to find out how wide the text is. The line width for
+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
-@funindex \header in La@TeX{} documents
+@funindex \header in @LaTeX{} documents
Each snippet will call the following macros if they have been defined by
the user:
@cindex dvips
@cindex invoking dvips
-For printing the La@TeX{} document you need a DVI to PostScript
+For printing the @LaTeX{} document you need a DVI to PostScript
translator like @command{dvips}. To use @command{dvips} to produce
a PostScript file, add the following options to the @command{dvips}
command line:
breaking the staff and suppressing inclusion of the rest of the lilypond
output.
-In La@TeX{}, define @code{\betweenLilyPondSystem} in such a way that
+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 @b{after} the first system, including only the first system
@end example
Remember that the definition of @code{\betweenLilyPondSystem} is
-effective until @TeX{} quits the current group (such as the La@TeX{}
+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
@lilypond[fragment,staffsize=11]{<c' e' g'>}
-Contrary to La@TeX{}, @code{@@lilypond@{...@}} does not generate an
+Contrary to @LaTeX{}, @code{@@lilypond@{...@}} does not generate an
in-line image. It always gets a paragraph of its own.
When using the Texinfo output format, @command{lilypond-book} also
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 La@TeX{} syntax.
+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.
@refbugs
The Texinfo command @code{@@pagesizes} is not interpreted. Similarly,
-La@TeX{} commands that change margins and line widths after the preamble
+@LaTeX{} commands that change margins and line widths after the preamble
are ignored.
Only the first @code{\score} of a LilyPond block is processed.
@item
@item @file{.html} @tab HTML
@item @file{.itely} @tab Texinfo
-@item @file{.latex} @tab La@TeX{}
-@item @file{.lytex} @tab La@TeX{}
+@item @file{.latex} @tab @LaTeX{}
+@item @file{.lytex} @tab @LaTeX{}
@item @file{.lyxml} @tab DocBook
@item @file{.tely} @tab Texinfo
-@item @file{.tex} @tab La@TeX{}
+@item @file{.tex} @tab @LaTeX{}
@item @file{.texi} @tab Texinfo
@item @file{.texinfo} @tab Texinfo
@item @file{.xml} @tab HTML
<font size="-1">
%(footer_name_version)s
<br>
+<address>
+%(footer_report_errors)s </address>
+<br>
+%(footer_suggest_docs)s
</font>
-<address><font size="-1">
-%(footer_report_errors)s </font></address>
</p>
</div>
'''
footer_name_version = _doc ('This page is for %(package_name)s-%(package_version)s (%(branch_str)s).')
footer_report_errors = _doc ('Report errors to <a href="%(mail_address_url)s">%(mail_address)s</a>.')
+footer_suggest_docs = _doc ('Your <a href="%(suggest_docs_url)s">suggestions for the documentation</a> are welcome.')
mail_address = 'http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs'
+suggest_docs_url = 'http://lilypond.org/web/devel/participating/documentation-adding'
header_tag = '<!-- header_tag -->'
footer_tag = '<!-- footer_tag -->'
subst[name] = translation[page_flavors[k][0]] (subst[name])
subst['footer_name_version'] = subst['footer_name_version'] % subst
subst['footer_report_errors'] = subst['footer_report_errors'] % subst
+ subst['footer_suggest_docs'] = subst['footer_suggest_docs'] % subst
page_flavors[k][1] = page_flavors[k][1] % subst
out_f = open (name_filter (k), 'w')
out_f.write (page_flavors[k][1])
import os.path
import shutil
-dirs = ['ancient','chords','connecting','contemporary','expressive','education','guitar','parts','pitch','repeats','scheme','spacing','staff','text','vocal','other','non-music','engravers','instrument-specific']
+dirs = ['ancient','chords','connecting','contemporary','expressive','education','guitar','parts','pitch','repeats','scheme','spacing','staff','text','vocal','other','nonmusic','engravers','instrument']
notsafe=[]
try:
--- /dev/null
+#!@PYTHON@
+# update-snippets.py
+
+# USAGE: update-snippets.py REFERENCE-DIR TARGET-DIR FILES
+#
+# update ly snippets in TARGET-DIR/FILES with snippets from REFERENCE-DIR/FILES
+#
+# More precisely, each existing FILE in TARGET-DIR is matched to the FILE in
+# REFERENCE-DIR (it the latter does not exist, a warning is given).
+#
+# Shell wildcards expansion is performed on FILES.
+# This script currently supports Texinfo format.
+# Ly snippets preceded with a line containing '@c KEEP LY' in TARGET-DIR/FILES
+# will not be updated.
+# An error occurs if REFERENCE-DIR/FILE and TARGET-DIR/FILE do not have the
+# same snippets count.
+
+import sys
+import os
+import glob
+import re
+
+print "update-snippets.py"
+
+comment_re = re.compile (r'(?<!@)(@c(?:omment)? .*?\n|^@ignore\n.*?\n@end ignore\n)', re.M | re.S)
+snippet_re = re.compile (r'(@lilypond(?:file)?(?:\[.*?\])?(?:\{.+?\}|(?:.|\n)+?@end lilypond))', re.M)
+
+
+def snippet_split (l):
+ r = []
+ for s in [s for s in l if s]:
+ if s.startswith ('@c ') or s.startswith ('@ignore\n') or s.startswith ('@comment '):
+ r.append(s)
+ else:
+ r += [t for t in snippet_re.split (s) if t]
+ return r
+
+def count_snippet (l):
+ k = 0
+ for s in l:
+ if s.startswith ('@lilypond'):
+ k += 1
+ return k
+
+def find_next_snippet (l, k):
+ while not l[k].startswith ('@lilypond'):
+ k += 1
+ return k
+
+exit_code = 0
+
+def update_exit_code (code):
+ global exit_code
+ exit_code = max (code, exit_code)
+
+ref_dir, target_dir = sys.argv [1:3]
+file_patterns = sys.argv[3:]
+
+total_snippet_count = 0
+changed_snippets_count = 0
+
+for pattern in file_patterns:
+ files = glob.glob (os.path.join (target_dir, pattern))
+ for file in files:
+ ref_file = os.path.join (ref_dir, os.path.basename (file))
+ if not os.path.isfile (ref_file):
+ sys.stderr.write ("Warning: %s: no such file.\nReference file for %s not found.\n" % (ref_file, file))
+ continue
+ f = open (file, 'r')
+ target_source = comment_re.split (f.read ())
+ f.close ()
+ if reduce (lambda x, y: x or y, ['-- SKELETON FILE --' in s for s in target_source]):
+ sys.stderr.write ("Skipping skeleton file %s\n" % file)
+ continue
+ g = open (ref_file, 'r')
+ ref_source = comment_re.split (g.read ())
+ target_source = snippet_split (target_source)
+ ref_source = snippet_split (ref_source)
+ if '' in target_source or '' in ref_source:
+ raise "AAAAARGH: unuseful empty string"
+ snippet_count = count_snippet (target_source)
+ if not snippet_count == count_snippet (ref_source):
+ update_exit_code (1)
+ sys.stderr.write ("Error: %s and %s have different snippet counts.\n\
+Update translation by at least adding a @lilypond block where necessary, then rerun this script.\n" % (ref_file, file))
+ continue
+ total_snippet_count += snippet_count
+ c = 0
+ k = -1
+ for j in range (len (target_source)):
+ if target_source[j].startswith ('@lilypond'):
+ k = find_next_snippet (ref_source, k+1)
+ if j > 0 and (not target_source[j-1].startswith ('@c KEEP LY')) and target_source[j] != ref_source[k]:
+ target_source[j] = ref_source[k]
+ c += 1
+ changed_snippets_count += 1
+ f = open (file, 'w')
+ f.write (''.join (target_source))
+ sys.stderr.write ('%s: %d/%d snippets updated\n' % (file, c, snippet_count))
+
+sys.stderr.write ('\nTotal: %d snippets, %d updated snippets.\n' % (total_snippet_count, changed_snippets_count))
+sys.exit (exit_code)
SUBDIRS = ancient chords connecting contemporary education expressive
SUBDIRS += guitar parts pitch repeats spacing staff text vocal scheme other
-SUBDIRS += engravers non-music instrument-specific
+SUBDIRS += engravers nonmusic instrument
STEPMAKE_TEMPLATES=documentation texinfo tex
LOCALSTEPMAKE_TEMPLATES=lilypond ly lysdoc
@strong{@uref{vocal/collated-files.html,Vocal music}}
-@strong{@uref{non-music/collated-files.html,Non-musical}}
+@strong{@uref{nonmusic/collated-files.html,Non-musical}}
-@strong{@uref{instrument-specific/collated-files.html,Instrument-specific}}
+@strong{@uref{instrument/collated-files.html,Instrument-specific}}
@strong{@uref{engravers/collated-files.html,Engravers}}
--- /dev/null
+%% Do not edit this file; it is auto-generated from LSR!
+\version "2.11.23"
+
+\header { texidoc = "
+The notation problem, creating a certain symbol, is handled by plugins.
+Each plugin is called an Engraver. In this example, engravers are
+switched on one by one, in the following order:
+
+- note heads
+
+
+- staff symbol,
+
+
+- clef,
+
+
+- stem,
+
+
+- beams, slurs, accents,
+
+
+- accidentals, bar lines, time signature, and key signature.
+
+
+
+Engravers are grouped. For example, note heads, slurs, beams etc. form
+a Voice context. Engravers for key, accidental, bar, etc. form a Staff
+context.
+
+
+You may only see the first example in this document; please download
+this snippet and run it from your own computer.
+" }
+
+%% sample music
+topVoice = \relative c' {
+ \key d\major
+ es8([ g] a[ fis])
+ b4
+ b16[-. b-. b-. cis-.]
+ d4->
+}
+
+botVoice = \relative c' {
+ \key d\major
+ c8[( f] b[ a)]
+ es4
+ es16[-. es-. es-. fis-.]
+ b4->
+}
+
+hoom = \relative c {
+ \key d \major
+ \clef bass
+ g8-. r
+ r4
+ fis8-.
+ r8
+ r4
+ b'4->
+}
+
+pah = \relative c' {
+ r8 b-.
+ r4
+ r8 g8-.
+ r16 g-. r8
+ \clef treble
+ fis'4->
+}
+
+%
+% setup for Request->Element conversion. Guru-only
+%
+
+MyStaff =\context {
+ \type "Engraver_group"
+ \name Staff
+
+ \description "Handles clefs, bar lines, keys, accidentals. It can contain
+@code{Voice} contexts."
+
+
+ \consists "Output_property_engraver"
+
+ \consists "Font_size_engraver"
+
+ \consists "Volta_engraver"
+ \consists "Separating_line_group_engraver"
+ \consists "Dot_column_engraver"
+
+ \consists "Ottava_spanner_engraver"
+ \consists "Rest_collision_engraver"
+ \consists "Piano_pedal_engraver"
+ \consists "Piano_pedal_align_engraver"
+ \consists "Instrument_name_engraver"
+ \consists "Grob_pq_engraver"
+ \consists "Forbid_line_break_engraver"
+ \consists "Axis_group_engraver"
+
+ \consists "Pitch_squash_engraver"
+
+ \override VerticalAxisGroup #'minimum-Y-extent = #'(-6 . 6)
+ extraVerticalExtent = ##f
+ verticalExtent = ##f
+ localKeySignature = #'()
+
+ % explicitly set instrument, so we don't get
+ % weird effects when doing instrument names for
+ % piano staves
+
+ instrumentName = #'()
+ shortInstrumentName = #'()
+
+ \accepts "Voice"
+}
+
+
+MyVoice = \context {
+ \type "Engraver_group"
+ \name Voice
+
+ \description "
+ Corresponds to a voice on a staff. This context handles the
+ conversion of dynamic signs, stems, beams, super- and subscripts,
+ slurs, ties, and rests.
+
+ You have to instantiate this explicitly if you want to have
+ multiple voices on the same staff."
+
+ localKeySignature = #'()
+ \consists "Font_size_engraver"
+
+ % must come before all
+ \consists "Output_property_engraver"
+ \consists "Arpeggio_engraver"
+ \consists "Multi_measure_rest_engraver"
+ \consists "Text_spanner_engraver"
+ \consists "Grob_pq_engraver"
+ \consists "Note_head_line_engraver"
+ \consists "Glissando_engraver"
+ \consists "Ligature_bracket_engraver"
+ \consists "Breathing_sign_engraver"
+ % \consists "Rest_engraver"
+ \consists "Grace_beam_engraver"
+ \consists "New_fingering_engraver"
+ \consists "Chord_tremolo_engraver"
+ \consists "Percent_repeat_engraver"
+ \consists "Slash_repeat_engraver"
+
+%{
+ Must come before text_engraver, but after note_column engraver.
+
+%}
+ \consists "Text_engraver"
+ \consists "Dynamic_engraver"
+ \consists "Fingering_engraver"
+
+ \consists "Script_column_engraver"
+ \consists "Rhythmic_column_engraver"
+ \consists "Cluster_spanner_engraver"
+ \consists "Tie_engraver"
+ \consists "Tie_engraver"
+ \consists "Tuplet_engraver"
+ \consists "Note_heads_engraver"
+ \consists "Rest_engraver"
+
+ \consists "Skip_event_swallow_translator"
+}
+
+
+\score {
+ \topVoice
+ \layout {
+ \context { \MyStaff }
+ \context { \MyVoice }
+ }
+}
+
+
+MyStaff = \context {
+ \MyStaff
+ \consists "Staff_symbol_engraver"
+}
+
+\score {
+ \topVoice
+ \layout {
+ \context { \MyStaff }
+ \context { \MyVoice }
+ }
+}
+
+MyStaff = \context {
+ \MyStaff
+ \consists "Clef_engraver"
+ \remove "Pitch_squash_engraver"
+}
+
+\score {
+ \topVoice
+ \layout {
+ \context { \MyStaff }
+ \context { \MyVoice }
+ }
+}
+
+MyVoice = \context {
+ \MyVoice
+ \consists "Stem_engraver"
+}
+
+\score {
+ \topVoice
+ \layout {
+ \context { \MyStaff }
+ \context { \MyVoice }
+ }
+}
+
+MyVoice = \context {
+ \MyVoice
+ \consists "Beam_engraver"
+}
+
+\score {
+ \topVoice
+ \layout {
+ \context { \MyStaff }
+ \context { \MyVoice }
+ }
+}
+
+MyVoice= \context {
+ \MyVoice
+ \consists "Phrasing_slur_engraver"
+ \consists "Slur_engraver"
+ \consists "Script_engraver"
+}
+
+
+\score {
+ \topVoice
+ \layout {
+ \context { \MyStaff }
+ \context { \MyVoice }
+ }
+}
+
+MyStaff = \context {
+ \MyStaff
+ \consists "Bar_engraver"
+ \consists "Time_signature_engraver"
+}
+
+\score {
+ \topVoice
+ \layout {
+ \context { \MyStaff }
+ \context { \MyVoice }
+ }
+}
+
+MyStaff = \context {
+ \MyStaff
+ \consists "Accidental_engraver"
+ \consists "Key_engraver"
+}
+\score {
+ \topVoice
+ \layout {
+ \context { \MyStaff }
+ \context { \MyVoice }
+ }
+}
+
--- /dev/null
+%% Do not edit this file; it is auto-generated from LSR!
+\version "2.11.23"
+
+\header { texidoc = "
+Engravers can be removed one by one. Here, the time signature and bar
+lines have been removed.
+
+
+" }
+
+\score {
+ \relative c'' {
+ a b c d
+ d c b a
+ }
+ \layout {
+ raggedright = ##t
+ \context {
+ \Staff
+ whichBar = #""
+ \remove "Time_signature_engraver"
+ }
+ }
+}
+
+
+
--- /dev/null
+%% Do not edit this file; it is auto-generated from LSR!
+\version "2.11.23"
+
+\header { texidoc = "
+If you've read the manual, you already know that an arpeggio can be
+drawn across to staves in PianoStaff context, if you set the
+connectArpeggios property.
+
+However, printing an arpeggio between two simultaneous chords inside a
+same staff (with more than one voice), is a bit more tricky. As the
+Span_arpeggio_engraver, which is in charge when arpeggios have to be
+connected, is not included by default in the Staff context, you have to
+add it by yourself using the \consists command.
+" }
+
+\layout {
+ \context {
+ \Staff
+ \consists Span_arpeggio_engraver
+ }
+}
+
+\new Staff
+ {
+ \set Staff.connectArpeggios = ##t
+ <<
+ {<e'' g''>4\arpeggio <d'' f''>4 <d'' f''>2 }
+ \\
+ {<d' f' >2\arpeggio <g' b'>2 }
+ >>
+
+}
+++ /dev/null
-%% Do not edit this file; it is auto-generated from LSR!
-\version "2.11.23"
-
-\header{
-texidoc = "
-@unnumbered Introduction
-
-This document shows examples from the
-@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository}.
-
-In the web version of this document, you can click on the file name
-or figure for each example to see the corresponding input file."
-}
-
-% make sure .png is generated.
-\markup{ "This document is for LilyPond version" #(ly:export(lilypond-version)) }
-
+++ /dev/null
-
-depth = ../../../
-
-STEPMAKE_TEMPLATES=documentation texinfo tex
-LOCALSTEPMAKE_TEMPLATES=lilypond ly lysdoc
-
-## Hmm, would this work? No -- if we really want examples, move
-## to other dir (input/) comes to mind.
-## examples = font20 ancient-font
-## LOCALSTEPMAKE_TEMPLATES += ly mutopia
-
-EXTRA_DIST_FILES=
-
-include $(depth)/make/stepmake.make
-
-TITLE=Advanced snippets
+++ /dev/null
-# -*-python-*-
-
-Import ('env', 'collate')
-collate (title = 'Advanced snippets')
--- /dev/null
+%% Do not edit this file; it is auto-generated from LSR!
+\version "2.11.23"
+
+\header{
+texidoc = "
+@unnumbered Introduction
+
+This document shows examples from the
+@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository}.
+
+In the web version of this document, you can click on the file name
+or figure for each example to see the corresponding input file."
+}
+
+% make sure .png is generated.
+\markup{ "This document is for LilyPond version" #(ly:export(lilypond-version)) }
+
--- /dev/null
+
+depth = ../../../
+
+STEPMAKE_TEMPLATES=documentation texinfo tex
+LOCALSTEPMAKE_TEMPLATES=lilypond ly lysdoc
+
+## Hmm, would this work? No -- if we really want examples, move
+## to other dir (input/) comes to mind.
+## examples = font20 ancient-font
+## LOCALSTEPMAKE_TEMPLATES += ly mutopia
+
+EXTRA_DIST_FILES=
+
+include $(depth)/make/stepmake.make
+
+TITLE=Advanced snippets
--- /dev/null
+# -*-python-*-
+
+Import ('env', 'collate')
+collate (title = 'Advanced snippets')
--- /dev/null
+%% Do not edit this file; it is auto-generated from LSR!
+\version "2.11.23"
+
+\header { texidoc = "
+LilyPond makes drums input quite easy, with powerful pre-configured
+tools such as the \drummode function and the DrumStaff context: drums
+are placed to their own staff positions (with a special clef symbol)
+and have note heads according to the drum. You can easily attach an
+extra symbol to the drum, and restrict the number of lines.
+" }
+
+drh = \drummode { cymc4.^"crash" hhc16^"h.h." hh \repeat "unfold" 5 {hhc8 hho hhc8 hh16 hh} hhc4 r4 r2 }
+drl = \drummode {\repeat "unfold" 3 {bd4 sn8 bd bd4 << bd ss >> } bd8 tommh tommh bd toml toml bd tomfh16 tomfh }
+timb = \drummode { \repeat "unfold" 2 {timh4 ssh timl8 ssh r timh r4 ssh8 timl r4 cb8 cb} }
+
+\score {
+ \repeat "volta" 2 {
+ <<
+ \new DrumStaff \with {
+ drumStyleTable = #timbales-style
+ \override StaffSymbol #'line-count = #2
+ \override BarLine #'bar-size = #2
+ } <<
+ \set Staff.instrumentName = "timbales"
+ \timb
+ >>
+ \new DrumStaff <<
+ \set Staff.instrumentName = "drums"
+ \new DrumVoice {\stemUp \drh }
+ \new DrumVoice {\stemDown \drl }
+ >>
+ >>
+ }
+ \layout {}
+
+ \midi {
+ \context {
+ \Score
+ tempoWholesPerMinute = #(ly:make-moment 120 4)
+ }
+ }
+
+
+}
+
+++ /dev/null
-%% Do not edit this file; it is auto-generated from LSR!
-\version "2.11.23"
-
-\header{
-texidoc = "
-@unnumbered Introduction
-
-This document shows examples from the
-@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository}.
-
-In the web version of this document, you can click on the file name
-or figure for each example to see the corresponding input file."
-}
-
-% make sure .png is generated.
-\markup{ "This document is for LilyPond version" #(ly:export(lilypond-version)) }
-
+++ /dev/null
-
-depth = ../../../
-
-STEPMAKE_TEMPLATES=documentation texinfo tex
-LOCALSTEPMAKE_TEMPLATES=lilypond ly lysdoc
-
-## Hmm, would this work? No -- if we really want examples, move
-## to other dir (input/) comes to mind.
-## examples = font20 ancient-font
-## LOCALSTEPMAKE_TEMPLATES += ly mutopia
-
-EXTRA_DIST_FILES=
-
-include $(depth)/make/stepmake.make
-
-TITLE=Advanced snippets
+++ /dev/null
-# -*-python-*-
-
-Import ('env', 'collate')
-collate (title = 'Advanced snippets')
+++ /dev/null
-%% Do not edit this file; it is auto-generated from LSR!
-\header {
- texidoc = "Clipping snippets from a finished score
-
-Notes:
-
-@itemize @bullet
-@item If system starts and ends are included, they include extents of the System grob, eg. instrument names.
-@item Grace notes at the end point of the region are not included
-@item Regions can span multiple systems. In this case, multiple EPS files are generated.
-@end itemize
-
-This file needs to be run separately with @code{-dclip-systems}; the
-collated-files.html of the regression test does not adequately show
-the results.
-
-The result will be files named
-@file{@var{base}-from-@var{start}-to-@var{end}[-@var{count}].eps}.
-"
-
-}
-
-\version "2.11.23"
-
-#(ly:set-option 'clip-systems)
-
-#(set! output-count 1)
-
-origScore = \score{
- \relative {
- \set Staff.instrumentName = #"bla"
- c1
- d
- \grace c16
- e1
- \key d\major
-
- f
- \break \clef bass
- g,
- fis
- }
-}
-
-\book {
- \score {
- \origScore
- \layout {
-
- %% each clip-region is a (START . END) pair
- %% where both are rhythmic-locations.
-
- %% (make-rhythmic-locations BAR-NUMBER NUM DEN)
- %% means NUM/DEN whole-notes into bar numbered BAR-NUMBER
-
- clip-regions
- = #(list
- (cons
- (make-rhythmic-location 2 0 1)
- (make-rhythmic-location 4 0 1))
-
- (cons
- (make-rhythmic-location 0 0 1)
- (make-rhythmic-location 4 0 1))
-
- (cons
- (make-rhythmic-location 0 0 1)
- (make-rhythmic-location 6 0 1))
- )
- }
- }
-}
-
-#(set! output-count 0)
-#(ly:set-option 'clip-systems #f)
-
-\book {
- \score { \origScore }
- \markup { \bold \fontsize #6 clips }
- \score {
- \lyrics {
- \markup { from-2.0.1-to-4.0.1-clip.eps }
- \markup { \epsfile #X #30.0 #(format #f "~a-1-from-2.0.1-to-4.0.1-clip.eps" (ly:parser-output-name parser)) }
- }
- }
-}
+++ /dev/null
-%% Do not edit this file; it is auto-generated from LSR!
-\version "2.11.26"
-
-\header {
- texidoc = "A table of contents is included using
-@code{\\markuplines \\table-of-contents}. The toc items are added with
-the @code{\\tocItem} command."
-}
-
-#(set-default-paper-size "a6")
-
-\book {
- \markuplines \table-of-contents
- \pageBreak
-
- \tocItem \markup "The first score"
- \score {
- {
- c'1 \pageBreak
- \mark "A" \tocItem \markup "Mark A"
- d'
- }
- }
- \pageBreak
- \tocItem \markup "The second score"
- \score {
- { e' }
- \header { piece = "Second score" }
- }
-}
\ No newline at end of file
--- /dev/null
+%% Do not edit this file; it is auto-generated from LSR!
+\version "2.11.23"
+
+\header{
+texidoc = "
+@unnumbered Introduction
+
+This document shows examples from the
+@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository}.
+
+In the web version of this document, you can click on the file name
+or figure for each example to see the corresponding input file."
+}
+
+% make sure .png is generated.
+\markup{ "This document is for LilyPond version" #(ly:export(lilypond-version)) }
+
--- /dev/null
+
+depth = ../../../
+
+STEPMAKE_TEMPLATES=documentation texinfo tex
+LOCALSTEPMAKE_TEMPLATES=lilypond ly lysdoc
+
+## Hmm, would this work? No -- if we really want examples, move
+## to other dir (input/) comes to mind.
+## examples = font20 ancient-font
+## LOCALSTEPMAKE_TEMPLATES += ly mutopia
+
+EXTRA_DIST_FILES=
+
+include $(depth)/make/stepmake.make
+
+TITLE=Advanced snippets
--- /dev/null
+# -*-python-*-
+
+Import ('env', 'collate')
+collate (title = 'Advanced snippets')
--- /dev/null
+%% Do not edit this file; it is auto-generated from LSR!
+\version "2.11.23"
+
+\header { texidoc = "
+A demonstration of all headers.
+" }
+
+\header {
+copyright = "copyright"
+title = "title"
+subtitle = "subtitle"
+composer = "composer"
+arranger = "arranger"
+instrument = "instrument"
+metre = "metre"
+opus = "opus"
+piece = "piece"
+poet = "poet"
+texidoc = "All header fields with special meanings."
+ copyright = "public domain"
+ enteredby = "jcn"
+ source = "urtext"
+
+}
+
+
+\score {
+ \relative c'' { c1 c1 c1 c1 }
+}
+
+\score {
+ \relative c'' { c1 c1 c1 c1 }
+
+ \header {
+
+ title = "localtitle"
+ subtitle = "localsubtitle"
+ composer = "localcomposer"
+ arranger = "localarranger"
+ instrument = "localinstrument"
+ metre = "localmetre"
+ opus = "localopus"
+ piece = "localpiece"
+ poet = "localpoet"
+ copyright = "localcopyright"
+ }
+}
+
--- /dev/null
+%% Do not edit this file; it is auto-generated from LSR!
+\header {
+ texidoc = "Clipping snippets from a finished score
+
+Notes:
+
+@itemize @bullet
+@item If system starts and ends are included, they include extents of the System grob, eg. instrument names.
+@item Grace notes at the end point of the region are not included
+@item Regions can span multiple systems. In this case, multiple EPS files are generated.
+@end itemize
+
+This file needs to be run separately with @code{-dclip-systems}; the
+collated-files.html of the regression test does not adequately show
+the results.
+
+The result will be files named
+@file{@var{base}-from-@var{start}-to-@var{end}[-@var{count}].eps}.
+"
+
+}
+
+\version "2.11.23"
+
+#(ly:set-option 'clip-systems)
+
+#(set! output-count 1)
+
+origScore = \score{
+ \relative {
+ \set Staff.instrumentName = #"bla"
+ c1
+ d
+ \grace c16
+ e1
+ \key d\major
+
+ f
+ \break \clef bass
+ g,
+ fis
+ }
+}
+
+\book {
+ \score {
+ \origScore
+ \layout {
+
+ %% each clip-region is a (START . END) pair
+ %% where both are rhythmic-locations.
+
+ %% (make-rhythmic-locations BAR-NUMBER NUM DEN)
+ %% means NUM/DEN whole-notes into bar numbered BAR-NUMBER
+
+ clip-regions
+ = #(list
+ (cons
+ (make-rhythmic-location 2 0 1)
+ (make-rhythmic-location 4 0 1))
+
+ (cons
+ (make-rhythmic-location 0 0 1)
+ (make-rhythmic-location 4 0 1))
+
+ (cons
+ (make-rhythmic-location 0 0 1)
+ (make-rhythmic-location 6 0 1))
+ )
+ }
+ }
+}
+
+#(set! output-count 0)
+#(ly:set-option 'clip-systems #f)
+
+\book {
+ \score { \origScore }
+ \markup { \bold \fontsize #6 clips }
+ \score {
+ \lyrics {
+ \markup { from-2.0.1-to-4.0.1-clip.eps }
+ \markup { \epsfile #X #30.0 #(format #f "~a-1-from-2.0.1-to-4.0.1-clip.eps" (ly:parser-output-name parser)) }
+ }
+ }
+}
--- /dev/null
+%% Do not edit this file; it is auto-generated from LSR!
+\version "2.11.26"
+
+\header {
+ texidoc = "A table of contents is included using
+@code{\\markuplines \\table-of-contents}. The toc items are added with
+the @code{\\tocItem} command."
+}
+
+#(set-default-paper-size "a6")
+
+\book {
+ \markuplines \table-of-contents
+ \pageBreak
+
+ \tocItem \markup "The first score"
+ \score {
+ {
+ c'1 \pageBreak
+ \mark "A" \tocItem \markup "Mark A"
+ d'
+ }
+ }
+ \pageBreak
+ \tocItem \markup "The second score"
+ \score {
+ { e' }
+ \header { piece = "Second score" }
+ }
+}
\ No newline at end of file
+++ /dev/null
-%% Do not edit this file; it is auto-generated from LSR!
-\version "2.11.23"
-
-\header { texidoc = "
-LilyPond makes drums input quite easy, with powerful pre-configured
-tools such as the \drummode function and the DrumStaff context: drums
-are placed to their own staff positions (with a special clef symbol)
-and have note heads according to the drum. You can easily attach an
-extra symbol to the drum, and restrict the number of lines.
-" }
-
-drh = \drummode { cymc4.^"crash" hhc16^"h.h." hh \repeat "unfold" 5 {hhc8 hho hhc8 hh16 hh} hhc4 r4 r2 }
-drl = \drummode {\repeat "unfold" 3 {bd4 sn8 bd bd4 << bd ss >> } bd8 tommh tommh bd toml toml bd tomfh16 tomfh }
-timb = \drummode { \repeat "unfold" 2 {timh4 ssh timl8 ssh r timh r4 ssh8 timl r4 cb8 cb} }
-
-\score {
- \repeat "volta" 2 {
- <<
- \new DrumStaff \with {
- drumStyleTable = #timbales-style
- \override StaffSymbol #'line-count = #2
- \override BarLine #'bar-size = #2
- } <<
- \set Staff.instrumentName = "timbales"
- \timb
- >>
- \new DrumStaff <<
- \set Staff.instrumentName = "drums"
- \new DrumVoice {\stemUp \drh }
- \new DrumVoice {\stemDown \drl }
- >>
- >>
- }
- \layout {}
-
- \midi {
- \context {
- \Score
- tempoWholesPerMinute = #(ly:make-moment 120 4)
- }
- }
-
-
-}
-
+++ /dev/null
-%% Do not edit this file; it is auto-generated from LSR!
-\version "2.11.23"
-
-\header { texidoc = "
-A demonstration of all headers.
-" }
-
-\header {
-copyright = "copyright"
-title = "title"
-subtitle = "subtitle"
-composer = "composer"
-arranger = "arranger"
-instrument = "instrument"
-metre = "metre"
-opus = "opus"
-piece = "piece"
-poet = "poet"
-texidoc = "All header fields with special meanings."
- copyright = "public domain"
- enteredby = "jcn"
- source = "urtext"
-
-}
-
-
-\score {
- \relative c'' { c1 c1 c1 c1 }
-}
-
-\score {
- \relative c'' { c1 c1 c1 c1 }
-
- \header {
-
- title = "localtitle"
- subtitle = "localsubtitle"
- composer = "localcomposer"
- arranger = "localarranger"
- instrument = "localinstrument"
- metre = "localmetre"
- opus = "localopus"
- piece = "localpiece"
- poet = "localpoet"
- copyright = "localcopyright"
- }
-}
-
+++ /dev/null
-%% Do not edit this file; it is auto-generated from LSR!
-\version "2.11.23"
-
-\header { texidoc = "
-The notation problem, creating a certain symbol, is handled by plugins.
-Each plugin is called an Engraver. In this example, engravers are
-switched on one by one, in the following order:
-
-- note heads
-
-
-- staff symbol,
-
-
-- clef,
-
-
-- stem,
-
-
-- beams, slurs, accents,
-
-
-- accidentals, bar lines, time signature, and key signature.
-
-
-
-Engravers are grouped. For example, note heads, slurs, beams etc. form
-a Voice context. Engravers for key, accidental, bar, etc. form a Staff
-context.
-
-
-You may only see the first example in this document; please download
-this snippet and run it from your own computer.
-" }
-
-%% sample music
-topVoice = \relative c' {
- \key d\major
- es8([ g] a[ fis])
- b4
- b16[-. b-. b-. cis-.]
- d4->
-}
-
-botVoice = \relative c' {
- \key d\major
- c8[( f] b[ a)]
- es4
- es16[-. es-. es-. fis-.]
- b4->
-}
-
-hoom = \relative c {
- \key d \major
- \clef bass
- g8-. r
- r4
- fis8-.
- r8
- r4
- b'4->
-}
-
-pah = \relative c' {
- r8 b-.
- r4
- r8 g8-.
- r16 g-. r8
- \clef treble
- fis'4->
-}
-
-%
-% setup for Request->Element conversion. Guru-only
-%
-
-MyStaff =\context {
- \type "Engraver_group"
- \name Staff
-
- \description "Handles clefs, bar lines, keys, accidentals. It can contain
-@code{Voice} contexts."
-
-
- \consists "Output_property_engraver"
-
- \consists "Font_size_engraver"
-
- \consists "Volta_engraver"
- \consists "Separating_line_group_engraver"
- \consists "Dot_column_engraver"
-
- \consists "Ottava_spanner_engraver"
- \consists "Rest_collision_engraver"
- \consists "Piano_pedal_engraver"
- \consists "Piano_pedal_align_engraver"
- \consists "Instrument_name_engraver"
- \consists "Grob_pq_engraver"
- \consists "Forbid_line_break_engraver"
- \consists "Axis_group_engraver"
-
- \consists "Pitch_squash_engraver"
-
- \override VerticalAxisGroup #'minimum-Y-extent = #'(-6 . 6)
- extraVerticalExtent = ##f
- verticalExtent = ##f
- localKeySignature = #'()
-
- % explicitly set instrument, so we don't get
- % weird effects when doing instrument names for
- % piano staves
-
- instrumentName = #'()
- shortInstrumentName = #'()
-
- \accepts "Voice"
-}
-
-
-MyVoice = \context {
- \type "Engraver_group"
- \name Voice
-
- \description "
- Corresponds to a voice on a staff. This context handles the
- conversion of dynamic signs, stems, beams, super- and subscripts,
- slurs, ties, and rests.
-
- You have to instantiate this explicitly if you want to have
- multiple voices on the same staff."
-
- localKeySignature = #'()
- \consists "Font_size_engraver"
-
- % must come before all
- \consists "Output_property_engraver"
- \consists "Arpeggio_engraver"
- \consists "Multi_measure_rest_engraver"
- \consists "Text_spanner_engraver"
- \consists "Grob_pq_engraver"
- \consists "Note_head_line_engraver"
- \consists "Glissando_engraver"
- \consists "Ligature_bracket_engraver"
- \consists "Breathing_sign_engraver"
- % \consists "Rest_engraver"
- \consists "Grace_beam_engraver"
- \consists "New_fingering_engraver"
- \consists "Chord_tremolo_engraver"
- \consists "Percent_repeat_engraver"
- \consists "Slash_repeat_engraver"
-
-%{
- Must come before text_engraver, but after note_column engraver.
-
-%}
- \consists "Text_engraver"
- \consists "Dynamic_engraver"
- \consists "Fingering_engraver"
-
- \consists "Script_column_engraver"
- \consists "Rhythmic_column_engraver"
- \consists "Cluster_spanner_engraver"
- \consists "Tie_engraver"
- \consists "Tie_engraver"
- \consists "Tuplet_engraver"
- \consists "Note_heads_engraver"
- \consists "Rest_engraver"
-
- \consists "Skip_event_swallow_translator"
-}
-
-
-\score {
- \topVoice
- \layout {
- \context { \MyStaff }
- \context { \MyVoice }
- }
-}
-
-
-MyStaff = \context {
- \MyStaff
- \consists "Staff_symbol_engraver"
-}
-
-\score {
- \topVoice
- \layout {
- \context { \MyStaff }
- \context { \MyVoice }
- }
-}
-
-MyStaff = \context {
- \MyStaff
- \consists "Clef_engraver"
- \remove "Pitch_squash_engraver"
-}
-
-\score {
- \topVoice
- \layout {
- \context { \MyStaff }
- \context { \MyVoice }
- }
-}
-
-MyVoice = \context {
- \MyVoice
- \consists "Stem_engraver"
-}
-
-\score {
- \topVoice
- \layout {
- \context { \MyStaff }
- \context { \MyVoice }
- }
-}
-
-MyVoice = \context {
- \MyVoice
- \consists "Beam_engraver"
-}
-
-\score {
- \topVoice
- \layout {
- \context { \MyStaff }
- \context { \MyVoice }
- }
-}
-
-MyVoice= \context {
- \MyVoice
- \consists "Phrasing_slur_engraver"
- \consists "Slur_engraver"
- \consists "Script_engraver"
-}
-
-
-\score {
- \topVoice
- \layout {
- \context { \MyStaff }
- \context { \MyVoice }
- }
-}
-
-MyStaff = \context {
- \MyStaff
- \consists "Bar_engraver"
- \consists "Time_signature_engraver"
-}
-
-\score {
- \topVoice
- \layout {
- \context { \MyStaff }
- \context { \MyVoice }
- }
-}
-
-MyStaff = \context {
- \MyStaff
- \consists "Accidental_engraver"
- \consists "Key_engraver"
-}
-\score {
- \topVoice
- \layout {
- \context { \MyStaff }
- \context { \MyVoice }
- }
-}
-
+++ /dev/null
-%% Do not edit this file; it is auto-generated from LSR!
-\version "2.11.23"
-
-\header { texidoc = "
-Engravers can be removed one by one. Here, the time signature and bar
-lines have been removed.
-
-
-" }
-
-\score {
- \relative c'' {
- a b c d
- d c b a
- }
- \layout {
- raggedright = ##t
- \context {
- \Staff
- whichBar = #""
- \remove "Time_signature_engraver"
- }
- }
-}
-
-
-
--- /dev/null
+%% Do not edit this file; it is auto-generated from LSR!
+\version "2.11.23"
+
+\header { texidoc = "
+The part combiner tool ( \partcombine command ) allows you to combine
+different parts on a same Staff. You can choose whether you want or
+don't want to add texts such as \"solo\" or \"a2\", by defining the
+printPartCombineTexts property.
+
+For vocal scores (hymns), there is no need to add solo/a2 texts, so
+they should be switched off. However, you'd better not use it if there
+are any solos, as they won't be indicated. In such cases, you may
+simply wan't to use standard LilyPond polyphony.
+
+This snippet presents the three ways two parts can be printed on a same
+staff : standard polyphony, \partcombine whitout texts, and
+\partcombine with texts.
+
+
+" }
+
+musicUp = { \time 4/4
+ \relative c'' {
+ a4 c4.(g8) a4 |
+ g4 e' g,( a8 b) |
+ c b a2.
+ }
+}
+
+musicDown = {
+ \relative c'' {
+ g4 e4.(d8) c4 |
+ r2 g'4( f8 e) |
+ d2 a
+ }
+}
+\score{
+ \new Staff {
+ \set Staff.instrumentName = "Standard polyphony "
+ << \musicUp \\ \musicDown >>
+ }
+ \layout{
+ indent = 6.0\cm
+ }
+}
+
+\score{
+ \context Staff {
+ \set Staff.instrumentName = "PartCombine without texts "
+ \partcombine \musicUp \musicDown
+ }
+ \layout{
+ indent = 6.0\cm
+ \context {
+ \Voice
+ printPartCombineTexts = ##f
+ }
+ }
+}
+
+\score{
+ \context Staff {
+ \set Staff.instrumentName = "PartCombine with texts "
+ \partcombine \musicUp \musicDown
+ }
+ \layout{
+ indent = 6.0\cm
+ \context {
+ \Voice
+ printPartCombineTexts = ##t
+ }
+ }
+}
+
--- /dev/null
+%% Do not edit this file; it is auto-generated from LSR!
+\version "2.11.23"
+
+\header { texidoc = "
+ Normally accidentals are printed automatically, but you may also print
+them manually. A reminder accidental can be forced by adding an
+exclamation mark ! after the pitch. A cautionary accidental (i.e., an
+accidental within parentheses) can be obtained by adding the question
+mark `?' after the pitch.
+
+
+
+Cautionary accidentals may be made smaller, or placed inside
+parentheses
+" }
+
+{
+cis' cis' cis'! cis'?
+
+ c''4
+ cis''?4
+ \once \override Staff.AccidentalCautionary #'font-size = #-2
+ cis''?4
+ \once \override Staff.AccidentalCautionary #'parenthesized = ##t
+ cis''?4
+}
--- /dev/null
+%% Do not edit this file; it is auto-generated from LSR!
+\version "2.11.23"
+
+\header { texidoc = "
+Extending stems to the center line may be prevented using
+@code{no-stem-extend}.
+
+
+" }
+
+\score {
+ \context Voice \relative c {
+ \context Staff <<
+ \new Voice {
+ f2 f8 g a b
+ \override Stem #'no-stem-extend = ##t
+ f2 f8 g a b
+ }
+ \new Voice {
+ c''2 c8 b a g
+ \override Stem #'no-stem-extend = ##t
+ c2 c8 b a g
+ }
+ >>
+
+ }
+
+}
+
+
--- /dev/null
+%% Do not edit this file; it is auto-generated from LSR!
+\version "2.11.23"
+
+\header { texidoc = "
+Rests may be used in various styles.
+
+
+
+" }
+
+\layout {
+ indent = 0.0
+ raggedright = ##t
+}
+
+\context Staff \relative c {
+ \set Score.timing = ##f
+ \override Staff.Rest #'style = #'mensural
+ r\maxima^\markup \typewriter { mensural }
+ r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 r128
+ \bar ""
+
+ \override Staff.Rest #'style = #'neomensural
+ r\maxima^\markup \typewriter { neomensural }
+ r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 r128
+ \bar ""
+
+ \override Staff.Rest #'style = #'classical
+ r\maxima^\markup \typewriter { classical }
+ r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 r128
+ \bar ""
+
+ \override Staff.Rest #'style = #'default
+ r\maxima^\markup \typewriter { default }
+ r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 r128
+
+}
+
+
depth = ../../
-SUBDIRS = ancient chords connecting contemporary guitar parts repeats spacing staff text vocal expressive scheme other education pitch
+SUBDIRS = ancient chords connecting contemporary education expressive
+SUBDIRS += guitar parts pitch repeats spacing staff text vocal scheme other
+SUBDIRS += engravers nonmusic instrument
+
STEPMAKE_TEMPLATES=documentation texinfo tex
LOCALSTEPMAKE_TEMPLATES=lilypond ly lysdoc
+++ /dev/null
-\version "2.10.0"
-
-\header{
-texidoc = "
-@unnumbered Introduction
-
-This document shows examples from the
-@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository}.
-
-In the web version of this document, you can click on the file name
-or figure for each example to see the corresponding input file."
-}
-
-% make sure .png is generated.
-\markup{ "This document is for LilyPond version" #(ly:export(lilypond-version)) }
-
+++ /dev/null
-
-depth = ../../../
-
-STEPMAKE_TEMPLATES=documentation texinfo tex
-LOCALSTEPMAKE_TEMPLATES=lilypond ly lysdoc
-
-## Hmm, would this work? No -- if we really want examples, move
-## to other dir (input/) comes to mind.
-## examples = font20 ancient-font
-## LOCALSTEPMAKE_TEMPLATES += ly mutopia
-
-EXTRA_DIST_FILES=
-
-include $(depth)/make/stepmake.make
-
-TITLE=Advanced snippets
+++ /dev/null
-# -*-python-*-
-
-Import ('env', 'collate')
-collate (title = 'Advanced snippets')
--- /dev/null
+\version "2.10.0"
+
+\header{
+texidoc = "
+@unnumbered Introduction
+
+This document shows examples from the
+@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository}.
+
+In the web version of this document, you can click on the file name
+or figure for each example to see the corresponding input file."
+}
+
+% make sure .png is generated.
+\markup{ "This document is for LilyPond version" #(ly:export(lilypond-version)) }
+
--- /dev/null
+
+depth = ../../../
+
+STEPMAKE_TEMPLATES=documentation texinfo tex
+LOCALSTEPMAKE_TEMPLATES=lilypond ly lysdoc
+
+## Hmm, would this work? No -- if we really want examples, move
+## to other dir (input/) comes to mind.
+## examples = font20 ancient-font
+## LOCALSTEPMAKE_TEMPLATES += ly mutopia
+
+EXTRA_DIST_FILES=
+
+include $(depth)/make/stepmake.make
+
+TITLE=Advanced snippets
--- /dev/null
+# -*-python-*-
+
+Import ('env', 'collate')
+collate (title = 'Advanced snippets')
+++ /dev/null
-\version "2.10.0"
-
-\header{
-texidoc = "
-@unnumbered Introduction
-
-This document shows examples from the
-@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository}.
-
-In the web version of this document, you can click on the file name
-or figure for each example to see the corresponding input file."
-}
-
-% make sure .png is generated.
-\markup{ "This document is for LilyPond version" #(ly:export(lilypond-version)) }
-
+++ /dev/null
-
-depth = ../../../
-
-STEPMAKE_TEMPLATES=documentation texinfo tex
-LOCALSTEPMAKE_TEMPLATES=lilypond ly lysdoc
-
-## Hmm, would this work? No -- if we really want examples, move
-## to other dir (input/) comes to mind.
-## examples = font20 ancient-font
-## LOCALSTEPMAKE_TEMPLATES += ly mutopia
-
-EXTRA_DIST_FILES=
-
-include $(depth)/make/stepmake.make
-
-TITLE=Advanced snippets
+++ /dev/null
-# -*-python-*-
-
-Import ('env', 'collate')
-collate (title = 'Advanced snippets')
+++ /dev/null
-\header {
- texidoc = "Clipping snippets from a finished score
-
-Notes:
-
-@itemize @bullet
-@item If system starts and ends are included, they include extents of the System grob, eg. instrument names.
-@item Grace notes at the end point of the region are not included
-@item Regions can span multiple systems. In this case, multiple EPS files are generated.
-@end itemize
-
-This file needs to be run separately with @code{-dclip-systems}; the
-collated-files.html of the regression test does not adequately show
-the results.
-
-The result will be files named
-@file{@var{base}-from-@var{start}-to-@var{end}[-@var{count}].eps}.
-"
-
-}
-
-\version "2.10.0"
-
-#(ly:set-option 'clip-systems)
-
-#(set! output-count 1)
-
-origScore = \score{
- \relative {
- \set Staff.instrumentName = #"bla"
- c1
- d
- \grace c16
- e1
- \key d\major
-
- f
- \break \clef bass
- g,
- fis
- }
-}
-
-\book {
- \score {
- \origScore
- \layout {
-
- %% each clip-region is a (START . END) pair
- %% where both are rhythmic-locations.
-
- %% (make-rhythmic-locations BAR-NUMBER NUM DEN)
- %% means NUM/DEN whole-notes into bar numbered BAR-NUMBER
-
- clip-regions
- = #(list
- (cons
- (make-rhythmic-location 2 0 1)
- (make-rhythmic-location 4 0 1))
-
- (cons
- (make-rhythmic-location 0 0 1)
- (make-rhythmic-location 4 0 1))
-
- (cons
- (make-rhythmic-location 0 0 1)
- (make-rhythmic-location 6 0 1))
- )
- }
- }
-}
-
-#(set! output-count 0)
-#(ly:set-option 'clip-systems #f)
-
-\book {
- \score { \origScore }
- \markup { \bold \fontsize #6 clips }
- \score {
- \lyrics {
- \markup { from-2.0.1-to-4.0.1-clip.eps }
- \markup { \epsfile #X #30.0 #(format #f "~a-1-from-2.0.1-to-4.0.1-clip.eps" (ly:parser-output-name parser)) }
- }
- }
-}
+++ /dev/null
-\version "2.11.26"
-
-\header {
- texidoc = "A table of contents is included using
-@code{\\markuplines \\table-of-contents}. The toc items are added with
-the @code{\\tocItem} command."
-}
-
-#(set-default-paper-size "a6")
-
-\book {
- \markuplines \table-of-contents
- \pageBreak
-
- \tocItem \markup "The first score"
- \score {
- {
- c'1 \pageBreak
- \mark "A" \tocItem \markup "Mark A"
- d'
- }
- }
- \pageBreak
- \tocItem \markup "The second score"
- \score {
- { e' }
- \header { piece = "Second score" }
- }
-}
\ No newline at end of file
--- /dev/null
+\version "2.10.0"
+
+\header{
+texidoc = "
+@unnumbered Introduction
+
+This document shows examples from the
+@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository}.
+
+In the web version of this document, you can click on the file name
+or figure for each example to see the corresponding input file."
+}
+
+% make sure .png is generated.
+\markup{ "This document is for LilyPond version" #(ly:export(lilypond-version)) }
+
--- /dev/null
+
+depth = ../../../
+
+STEPMAKE_TEMPLATES=documentation texinfo tex
+LOCALSTEPMAKE_TEMPLATES=lilypond ly lysdoc
+
+## Hmm, would this work? No -- if we really want examples, move
+## to other dir (input/) comes to mind.
+## examples = font20 ancient-font
+## LOCALSTEPMAKE_TEMPLATES += ly mutopia
+
+EXTRA_DIST_FILES=
+
+include $(depth)/make/stepmake.make
+
+TITLE=Advanced snippets
--- /dev/null
+# -*-python-*-
+
+Import ('env', 'collate')
+collate (title = 'Advanced snippets')
--- /dev/null
+\header {
+ texidoc = "Clipping snippets from a finished score
+
+Notes:
+
+@itemize @bullet
+@item If system starts and ends are included, they include extents of the System grob, eg. instrument names.
+@item Grace notes at the end point of the region are not included
+@item Regions can span multiple systems. In this case, multiple EPS files are generated.
+@end itemize
+
+This file needs to be run separately with @code{-dclip-systems}; the
+collated-files.html of the regression test does not adequately show
+the results.
+
+The result will be files named
+@file{@var{base}-from-@var{start}-to-@var{end}[-@var{count}].eps}.
+"
+
+}
+
+\version "2.10.0"
+
+#(ly:set-option 'clip-systems)
+
+#(set! output-count 1)
+
+origScore = \score{
+ \relative {
+ \set Staff.instrumentName = #"bla"
+ c1
+ d
+ \grace c16
+ e1
+ \key d\major
+
+ f
+ \break \clef bass
+ g,
+ fis
+ }
+}
+
+\book {
+ \score {
+ \origScore
+ \layout {
+
+ %% each clip-region is a (START . END) pair
+ %% where both are rhythmic-locations.
+
+ %% (make-rhythmic-locations BAR-NUMBER NUM DEN)
+ %% means NUM/DEN whole-notes into bar numbered BAR-NUMBER
+
+ clip-regions
+ = #(list
+ (cons
+ (make-rhythmic-location 2 0 1)
+ (make-rhythmic-location 4 0 1))
+
+ (cons
+ (make-rhythmic-location 0 0 1)
+ (make-rhythmic-location 4 0 1))
+
+ (cons
+ (make-rhythmic-location 0 0 1)
+ (make-rhythmic-location 6 0 1))
+ )
+ }
+ }
+}
+
+#(set! output-count 0)
+#(ly:set-option 'clip-systems #f)
+
+\book {
+ \score { \origScore }
+ \markup { \bold \fontsize #6 clips }
+ \score {
+ \lyrics {
+ \markup { from-2.0.1-to-4.0.1-clip.eps }
+ \markup { \epsfile #X #30.0 #(format #f "~a-1-from-2.0.1-to-4.0.1-clip.eps" (ly:parser-output-name parser)) }
+ }
+ }
+}
--- /dev/null
+\version "2.11.26"
+
+\header {
+ texidoc = "A table of contents is included using
+@code{\\markuplines \\table-of-contents}. The toc items are added with
+the @code{\\tocItem} command."
+}
+
+#(set-default-paper-size "a6")
+
+\book {
+ \markuplines \table-of-contents
+ \pageBreak
+
+ \tocItem \markup "The first score"
+ \score {
+ {
+ c'1 \pageBreak
+ \mark "A" \tocItem \markup "Mark A"
+ d'
+ }
+ }
+ \pageBreak
+ \tocItem \markup "The second score"
+ \score {
+ { e' }
+ \header { piece = "Second score" }
+ }
+}
\ No newline at end of file
local-WWW: $(outdir)/lilypond.pdf $(outdir)/lilypond/index.html
cd $(outdir); find -name '*.html' | xargs grep -L --label="" 'UNTRANSLATED NODE: IGNORE ME' | xargs $(PYTHON) ../$(buildscript-dir)/mass-link.py --prepend-suffix .$(ISOLANG) hard . $(top-build-dir)/Documentation/user/$(outdir) lilypond.pdf
+ cd $(outdir); find \( -name 'lily-??????????.png' -o -name 'lily-??????????.ly' \) -a -not -type l | xargs $(PYTHON) ../$(buildscript-dir)/mass-link.py hard . $(top-build-dir)/Documentation/user/$(outdir)
+# FIXME
# ugh, this is not enough to avoid wasting build time, $(outdir)/user-ln should be touched for all languages
touch -mr $(top-build-dir)/Documentation/user/$(outdir) $(outdir)/user-ln