]> git.donarmstrong.com Git - lilypond.git/commitdiff
Imported Upstream version 2.19.49
authorDr. Tobias Quathamer <toddy@debian.org>
Fri, 28 Oct 2016 15:31:49 +0000 (17:31 +0200)
committerDr. Tobias Quathamer <toddy@debian.org>
Fri, 28 Oct 2016 15:31:49 +0000 (17:31 +0200)
78 files changed:
.gitfilelist
Documentation/ca/macros.itexi
Documentation/ca/web/community.itexi
Documentation/changes.tely
Documentation/cs/macros.itexi
Documentation/cs/web.texi
Documentation/cs/web/community.itexi
Documentation/css/lilypond-website.css
Documentation/de/macros.itexi
Documentation/de/web/community.itexi
Documentation/es/macros.itexi
Documentation/es/web/community.itexi
Documentation/fr/extending/scheme-tutorial.itely
Documentation/fr/macros.itexi
Documentation/fr/notation/editorial.itely
Documentation/fr/notation/expressive.itely
Documentation/fr/notation/input.itely
Documentation/fr/notation/pitches.itely
Documentation/fr/notation/simultaneous.itely
Documentation/fr/notation/spacing.itely
Documentation/fr/notation/text.itely
Documentation/fr/web.texi
Documentation/fr/web/community.itexi
Documentation/fr/web/introduction.itexi
Documentation/hu/macros.itexi
Documentation/included/compile.itexi
Documentation/it/macros.itexi
Documentation/it/web.texi
Documentation/it/web/community.itexi
Documentation/it/web/introduction.itexi
Documentation/it/web/news-headlines.itexi [new file with mode: 0644]
Documentation/ja/macros.itexi
Documentation/ja/web.texi
Documentation/ja/web/community.itexi
Documentation/ja/web/introduction.itexi
Documentation/macros.itexi
Documentation/nl/macros.itexi
Documentation/nl/web.texi
Documentation/notation/input.itely
Documentation/pictures/bwv861-lilypond-large.ly [new file with mode: 0644]
Documentation/pictures/bwv861-lilypond-large.png [new file with mode: 0644]
Documentation/pictures/bwv861-lilypond.png [new file with mode: 0644]
Documentation/snippets/midi-intro.itely
Documentation/web.texi
Documentation/web/community.itexi
Documentation/web/introduction.itexi
Documentation/web/news-front.itexi
Documentation/web/news-headlines.itexi [new file with mode: 0644]
Documentation/web/news.itexi
Documentation/web/server/lilypond.org.htaccess
Documentation/zh/macros.itexi
Documentation/zh/web/community.itexi
INSTALL.txt
NEWS.txt
VERSION
input/regression/id.ly
input/regression/ledger-lines-non-merging.ly [new file with mode: 0644]
input/regression/output-attributes.ly [new file with mode: 0644]
lily/grob.cc
lily/ledger-line-spanner.cc
lily/stencil-integral.cc
lily/stencil-interpret.cc
ly/Welcome-to-LilyPond-MacOS.ly
ly/Welcome_to_LilyPond.ly
out/ChangeLog
out/RELEASE-COMMIT
po/eo.po
po/lilypond.pot
python/convertrules.py
scm/define-grob-properties.scm
scm/define-stencil-commands.scm
scm/define-woodwind-diagrams.scm
scm/lily-library.scm
scm/music-functions.scm
scm/output-ps.scm
scm/output-svg.scm
scm/stencil.scm
tex/texinfo.tex

index abcb24f56ad3880bb54beb4fd1fb2ef7e317761e..74878617158e623052e7272f613a70cdeb4368be 100644 (file)
@@ -1304,6 +1304,7 @@ Documentation/it/web/community.itexi
 Documentation/it/web/download.itexi
 Documentation/it/web/introduction.itexi
 Documentation/it/web/manuals.itexi
+Documentation/it/web/news-headlines.itexi
 Documentation/ja/GNUmakefile
 Documentation/ja/dedication.itely
 Documentation/ja/included/generating-output.itexi
@@ -1535,6 +1536,9 @@ Documentation/pictures/bwv861-breitkopf.png
 Documentation/pictures/bwv861-finale2008a.png
 Documentation/pictures/bwv861-gessellschaft-small.png
 Documentation/pictures/bwv861-gessellschaft.png
+Documentation/pictures/bwv861-lilypond-large.ly
+Documentation/pictures/bwv861-lilypond-large.png
+Documentation/pictures/bwv861-lilypond.png
 Documentation/pictures/bwv861mm28-29.png
 Documentation/pictures/bwv861mm33-34-annotate.png
 Documentation/pictures/bwv861mm33-34-annotate.svg
@@ -2230,6 +2234,7 @@ Documentation/web/download.itexi
 Documentation/web/introduction.itexi
 Documentation/web/manuals.itexi
 Documentation/web/news-front.itexi
+Documentation/web/news-headlines.itexi
 Documentation/web/news.itexi
 Documentation/web/others-did.bib
 Documentation/web/server/favicon.ico
@@ -2852,6 +2857,7 @@ input/regression/ledger-extra.ly
 input/regression/ledger-line-minimum.ly
 input/regression/ledger-line-shorten.ly
 input/regression/ledger-lines-dynamics.ly
+input/regression/ledger-lines-non-merging.ly
 input/regression/ledger-lines-varying-staves.ly
 input/regression/ledger-positions-customization.ly
 input/regression/les-nereides.ly
@@ -3318,6 +3324,7 @@ input/regression/optional-args.ly
 input/regression/ottava-broken.ly
 input/regression/ottava-edge.ly
 input/regression/ottava.ly
+input/regression/output-attributes.ly
 input/regression/outside-staff-placement-directive.ly
 input/regression/override-nest-scheme.ly
 input/regression/override-nest.ly
index 6e14cb3b0b84998e0191ff1e2bb116540136a002..2fe43ab603d58d0ce26fc7015e89021aff37be12 100644 (file)
@@ -747,7 +747,7 @@ Per a la versió del LilyPond @version{}
 
 @macro exampleImage{IMAGE-FILE}
 @html
-<div class="float-center">
+<div class="float-center example-image-wrapper">
   <a class="clickable" href="ly-examples/\IMAGE-FILE\.png">
     <img src="ly-examples/\IMAGE-FILE\-small.png" alt="\IMAGE-FILE\">
   </a>
index c8eba165de0035dc2483376631c2510a8a37300c..43507271a514aca662e277d753ecec22310a7d86 100644 (file)
@@ -1196,7 +1196,7 @@ que introduís més advertiments dels que hi ha actualment.
 
 @node Notícies antigues
 @unnumberedsec Notícies antigues
-@translationof Old news
+@translationof News
 
 @divClass{heading-center}
 @warning{Hi ha molts anuncis i registres de canvi antics a les
index c9315d59da68d24aa633bbc5c0e0fa2c70039d3c..64707801d2c6cf9913948c66efe1b8c34956074d 100644 (file)
@@ -61,6 +61,14 @@ which scares away people.
 
 @end ignore
 
+@item
+A new @code{output-attributes} grob property is now used for svg output
+instead of the @code{id} grob property.  It allows multiple attributes
+to be defined as an association list.  For example, @code{#'((id . 123)
+(class . foo) (data-whatever . @qq{bar}))} will produce the following
+group tag in an SVG file: @code{<g id=@qq{123} class=@qq{foo}
+data-whatever=@qq{bar}> @dots{} </g>}.
+
 @item
 Slurs and phrasing slurs may now be started from individual notes
 in a chord.  Several simultanous slurs per @code{Voice} need to be
index 14c7dd9770ff18c3c94cd7f50776bf971da41976..85be1a1404e8eb14897eee3edc2d3b55b4234006 100644 (file)
@@ -707,7 +707,7 @@ Pro LilyPond ve verzi @version{}
 
 @macro exampleImage{IMAGE-FILE}
 @html
-<div class="float-center">
+<div class="float-center example-image-wrapper">
   <a class="clickable" href="ly-examples/\IMAGE-FILE\.png">
     <img src="ly-examples/\IMAGE-FILE\-small.png" alt="\IMAGE-FILE\">
   </a>
index 255ade40320740d81dc37c70f32b24f0e5273305..1c3680ff1310967f03954077ed3afc54c6457f32 100644 (file)
@@ -138,7 +138,7 @@ Více se dočtete v @ref{Úvod,,úvodu}!
 @include web/news-front.itexi
 
 @divClass{float-right}
-(@ref{Old news,,,,Starší novinky})
+(@ref{News,,,,Starší novinky})
 @divEnd
 
 @divEnd
index cdf319690a2cc69a0ea7316263adde98b08b3e72..55829684f157bae6d3f0a270b2873f2ff8156a3e 100644 (file)
@@ -848,7 +848,7 @@ příručky se nacházejí na @url{http://lilypond.org}.}
 
 @node Starší novinky
 @unnumberedsec Starší novinky
-@translationof Old news
+@translationof News
 
 @include web/news-front.itexi
 
index 46723fa47f48969c8b60e45cc2b1d683ba4e9b44..e018b49774186c5467fccb989b8f7df228e31c90 100644 (file)
@@ -340,11 +340,23 @@ div#quickSummary {
   margin: 0;
 }
 
-div#news {
+#homepage-main {
   padding: 0;
   margin: 0 14em 1em 0;
 }
 
+#homepage-example-image-wrapper {
+  padding: 3em 0em 1.5em;
+}
+
+.example-image-wrapper {
+  padding: 2em 0em 0.5em;
+}
+
+.example-image-wrapper img {
+  padding: 0em 0em 1em;
+}
+
 /* .news-item is styled below with columns */
 
 .testimonial-item {
@@ -367,35 +379,31 @@ div#news {
   padding: 0 0.5em;
 }
 
-div#homePageSideBar {
+#homepage-sidebar {
   position: absolute;
   top: 0;
   right: 0;
   width: 12em;
   text-align: left;
+  /* negate the top-margin of the first .subheading */
+  margin-top: -0.5em;
 }
 
-#homePageSideBar .subheading {
+#homepage-sidebar .subheading {
   font-size: 15.2px;
   background: #5b7f64;
   color: #fff;
-  padding: 0.2em 0.5em 0em 0.7em;
-  margin: 0;
+  padding: 0.2em 0.5em 0.1em 0.7em;
+  margin: 0.5em 0 0.7em;
   border-radius: 5px;
 }
 
-#homePageSideBar p,
+#homepage-sidebar p,
 #pondingsText {
-  padding: 0.7em 0.5em;
+  padding: 0em 0.5em 0.5em;
   margin: 0;
 }
 
-/* for better spacing between "download" and "manuals" links */
-#homePageSideBar p:nth-of-type(2n) {
-  padding-top: 0;
-  margin-top: -3px;
-}
-
 div#footer {
   clear: both;
   width: 100%;
@@ -512,12 +520,15 @@ img.float-right {
 }
 
 div.float-left a.clickable,
-div.float-center a.clickable,
 div.float-right a.clickable {
   text-decoration: overline;
   margin-left: 1em;
 }
 
+div.float-center a.clickable {
+  text-decoration: overline;
+}
+
 .clear-both {
   clear: both;
 }
index 1a41265bd47625be465e22e9a4cd5318da099c47..df1a8c3f1c42074cd36daeee08cb7da3197474d3 100644 (file)
@@ -740,7 +740,7 @@ Für LilyPond Version @version{}
 
 @macro exampleImage{IMAGE-FILE}
 @html
-<div class="float-center">
+<div class="float-center example-image-wrapper">
   <a class="clickable" href="ly-examples/\IMAGE-FILE\.png">
     <img src="ly-examples/\IMAGE-FILE\-small.png" alt="\IMAGE-FILE\">
   </a>
index de6578eec86abfb082532a160e104ba0de2dbc4f..9b3c480191fef0362b3fa49a3231ce75a3cdd6cd 100644 (file)
@@ -1203,7 +1203,7 @@ automatisiert Patches, die zusätzliche Warnungen erzeugen, abzulehnen.
 
 @node Ältere Neuigkeiten
 @unnumberedsec Ältere Neuigkeiten
-@translationof Old news
+@translationof News
 
 @divClass{heading-center}
 @warning{Viele alte Ankündigungen und Listen der Änderungen finden sich in der
index 58c40c19b84adcfdb64b09454cd58636ce27d8a4..eeba20876c565c8133921edddbf5ff4bd098d97f 100644 (file)
@@ -746,7 +746,7 @@ Para la versión de LilyPond @version{}
 
 @macro exampleImage{IMAGE-FILE}
 @html
-<div class="float-center">
+<div class="float-center example-image-wrapper">
   <a class="clickable" href="ly-examples/\IMAGE-FILE\.png">
     <img src="ly-examples/\IMAGE-FILE\-small.png" alt="\IMAGE-FILE\">
   </a>
index cdbf9c870dfb1973e884fa8fee694c7139338fa2..173b0790973b3853b7c29c218ac9386674e17f95 100644 (file)
@@ -1312,7 +1312,7 @@ ellos disponible para el GSoC 2016)
 
 @node Noticias antiguas
 @unnumberedsec Noticias antiguas
-@translationof Old news
+@translationof News
 
 @divClass{heading-center}
 @warning{Hay muchos anuncios y registros de cambio antiguos en el
index 4664a82cc2f4614ece383123dfce21da28c0287d..991bd391087054d50a9d3095a8a905317d5c401c 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-   Translation of GIT committish: 934175b31d43c95e341b098f12c2e833522a5d45
+   Translation of GIT committish: 39912f861693f1c24b8833e6e9e6ba82eb3e6746
 
    When revising a translation, copy the HEAD committish of the
    version that you are working on.  For details, see the Contributors'
@@ -862,18 +862,28 @@ vingtQuatre = #(* 2 douze)
 @end example
 
 @noindent
-ce qui aurait pour conséquence que le nombre 24 sera stocké dans la
-variable LilyPond (et Scheme) @code{vingtQuatre}.
-
-La façon habituelle de faire référence à une variable LilyPond consiste
-à la rappeler à l'aide d'une oblique inverse -- autrement dit saisir
-@code{\vingtQuatre}.  Dans la mesure où ceci, pour la plupart des types
-internes de LilyPond y compris les expressions musicales, aura pour
-effet d'en recopier la valeur, les fonctions musicales n'ont pas pour
-habitude de créer une copie du matériau qu'elles vont modifier.  De
-fait, une expression musicale introduite par @code{#} ne devrait pas
-contenir de matériau inexistant auparavant ou bien littéralement
-recopié, mais plutôt une référence explicite.
+ce qui aurait pour conséquence que le nombre @emph{24} sera stocké dans
+la variable LilyPond (et Scheme) @code{vingtQuatre}.
+
+Scheme autorise la modification d'expressions complexes au fil de l'eau,
+ce que réalise LilyPond dans le cadre des fonctions musicales.
+Toutefois, lorsqu'une expression musicale est stockée dans une variable,
+plutôt que saisie au fur et à mesure, on s'attend, alors qu'elle est
+passée à une fonction musicale, à ce que sa valeur originale ne soit en
+rien modifiée.  C'est la raison pour laquelle faire référence à une
+variable à l'aide d'une oblique inverse -- autrement dit saisir
+@code{\vingtQuatre} -- aura pour effet que LilyPond créera une copie de
+la valeur musicale de cette variable aux fins de l'utiliser au sein de
+l'expression musicale au lieu d'utiliser directement la valeur de cette
+variable.
+
+Par voie de conséquence, une expression musicale introduite par @code{#}
+ne devrait pas contenir de matériau inexistant auparavant ou bien
+littéralement recopié, mais plutôt une référence explicite.
+
+@seealso
+Manuel d'extension :
+@ref{Syntaxe Scheme dans LilyPond}.
 
 
 @node Saisie de variables et Scheme
index 698fe2084526d9d3bf9cdd04e7c83fe3ac6e5069..31bb17fe03190cfe4128373c6256e64af4255539 100644 (file)
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8; mode: texinfo; -*-
 @ignore
-    Translation of GIT committish: e389a98ed32c929cb091453d9ec2856350cfb300
+    Translation of GIT committish: 0628cc44250b21d422b21890a7f266cd4b5ca584
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -218,16 +218,20 @@ Pour LilyPond version @version{}
 @c it doesn't matter, but a future implementation will probably
 @c add some code which needs this restriction.
 
+@c @raggedright can be enabled as soon as texinfo 5.x or larger
+@c is in use for Gub and LilyDev 3.
+
 @macro predefined
 @noindent
 @subsubheading Commandes prédéfinies
+@c @raggedright
 @end macro
 
 @c Due to a bug in texi2html (texi2html.pl CVS versions <= 1.245)
 @c the macro must not be empty.
 
 @macro endpredefined
-@c
+@c @end @raggedright
 @end macro
 
 
@@ -770,7 +774,7 @@ Pour LilyPond version @version{}
 
 @macro exampleImage{IMAGE-FILE}
 @html
-<div class="float-center">
+<div class="float-center example-image-wrapper">
   <a class="clickable" href="ly-examples/\IMAGE-FILE\.png">
     <img src="ly-examples/\IMAGE-FILE\-small.png" alt="\IMAGE-FILE\">
   </a>
@@ -843,4 +847,3 @@ cette page de Wikimedia Commons}.
 Cette section n'est pas encore encore traduite, veuillez
 vous reporter à la documentation correspondante en anglais.
 @end macro
-
index b403636bb1d3be44b73998a503c06a5a09bca6b6..24ecee56f5a788a2506483787434946de7e85253 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-   Translation of GIT committish: 97f856e8c577fdf301ac2a15b336eae8729e53f7
+   Translation of GIT committish: 39912f861693f1c24b8833e6e9e6ba82eb3e6746
 
    When revising a translation, copy the HEAD committish of the
    version that you are working on.  For details, see the Contributors'
index bb1ce12cfa45bfe77b86d83ce258da0c1c320218..9972b47c1790348fdd34f7b39c9df92c087f2532 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-   Translation of GIT committish: 97f856e8c577fdf301ac2a15b336eae8729e53f7
+   Translation of GIT committish: 39912f861693f1c24b8833e6e9e6ba82eb3e6746
 
    When revising a translation, copy the HEAD committish of the
    version that you are working on.  For details, see the Contributors'
@@ -306,7 +306,8 @@ la tête de note à laquelle il est attaché.  Dans le cas où il se termine
 par l'intervention d'un autre soufflet (contraire ou non), il prendra
 fin au milieu de la tête de note affublée d'un @code{\<} ou d'un
 @code{\>}, et le nouveau soufflet débutera à l'extrémité droite de cette
-même tête de note.
+même tête de note.  Un soufflet se terminant sur le premier temps d'une
+mesure s'arrêtera à la barre de mesure.
 
 @lilypond[verbatim,quote]
 \relative {
@@ -450,6 +451,8 @@ avec ou sans extenseur, ainsi que les indications de pédale.
 
 @snippets
 
+@cindex soufflet et barre de mesure
+
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {setting-hairpin-behavior-at-bar-lines.ly}
 
@@ -703,7 +706,7 @@ liaison externe indique un phrasé, et un phrasé peut recouvrir plusieurs
 liaisons d'articulation -- voir @ref{Liaisons de phrasé}.  Dans le cas
 où plusieurs liaisons d'articulation interviennent au sein d'un même
 contexte @code{Voice}, leurs début et fin doivent être labellisés par un
-@code{\=} suivi d'un identifiant (numérique ou chaîne).
+@code{\=} suivi d'un identifiant (symbole ou entier positif).
 
 @lilypond[verbatim,quote]
 \fixed c' {
index 38a58ffdf3378990849e4a6c9aa36c342f856996..2db032abc0e7cb05f4d05a5a5e671ffb220cd4a6 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-   Translation of GIT committish: 97f856e8c577fdf301ac2a15b336eae8729e53f7
+   Translation of GIT committish: 3f80e0ae5eb8cea0a7a6a72fac289ea5d71d63c8
 
    When revising a translation, copy the HEAD committish of the
    version that you are working on.  For details, see the Contributors'
@@ -395,7 +395,8 @@ avec les autres partitions se trouvant au même niveau pour composer le
 @code{\book}.  Vous pouvez modifier ce comportement à l'aide de la
 variable @code{toplevel-score-handler} placée en tête.  Le gestionnaire
 par défaut est défini dans le fichier d'initialisation
-@file{../scm/lily.scm}.
+@file{../scm/lily.scm}, et les réglages par défaut dans le fichier
+@file{../ly/declarations-init.ly}.
 
 @item
 Un bloc @code{\book} permet de regrouper naturellement plusieurs
@@ -1200,10 +1201,12 @@ LilyPond dispose d'ores et déjà d'un certain nombre de procédures :
 @item create-page-number-stencil    @tab  print-page-numbers est vrai.
 @item print-all-headers             @tab  print-all-headers est vrai.
 @item first-page                    @tab  c'est la première page du @emph{book}.
+@item not-first-page                @tab  ce n'est pas la première page du @emph{book}.
 @item (on-page nombre)              @tab  numéro de page = nombre
 @item last-page                     @tab  c'est la dernière page du @emph{book}.
 @item not-first-page                @tab  ce n'est la première page du @emph{book}.
 @item part-first-page               @tab  c'est la première page de la partie.
+@item not-part-first-page           @tab  ce n'est pas la première page de la partie.
 @item part-last-page                @tab  c'est la dernière page de la partie.
 @item not-single-page               @tab  cette partie fait plus d'une page.
 
index ed8e133c811d46672f598f20c5bc36517ebaee62..80975c0dedebdc10db9ef9b5e17cdc4bb9ae99f4 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-   Translation of GIT committish: 97f856e8c577fdf301ac2a15b336eae8729e53f7
+   Translation of GIT committish: 39912f861693f1c24b8833e6e9e6ba82eb3e6746
 
    When revising a translation, copy the HEAD committish of the
    version that you are working on.  For details, see the Contributors'
@@ -905,10 +905,15 @@ music = \relative { c'8. ees16( fis8. a16 b8.) gis16 f8. d16 }
 @end lilypond
 
 @knownissues
-Une liaison de prolongation à l'intérieur d'un bloc @code{\retrograde}
-sera de fait rompue, ce qui générera un message d'avertissement.
-Des liaisons de prolongation seront toutefois générées automatiquement
-dès lors qu'est activé le @ref{Découpage automatique des notes}.
+La fonction @code{\retrograde} est un outil plutôt simpliste.  Dans la
+mesure où de nombreux événements se reflètent au lieu d'être échangés,
+les ajustements et indicateurs de positionnement à l'entame d'un objet
+étendu devront être répétés à leur terminaison : @code{^(} devra se
+terminer par @code{^)}, tout @code{\<} ou @code{\cresc} devra se
+terminer par un @code{\!} ou un @code{\endecresc} et tout @code{\>} ou
+@code{\decr} devra se terminer par un @code{\enddecr}.  Les dérogations
+ou commandes modifiant les propriétés sur la durée peuvent avoir des
+effets surprenants.
 
 @seealso
 Manuel de notation :
index bd89ab955cdecb76ca051049fcc5e0ab0604de6b..1ef48714bde7c05dd24484971407ab126e486dde 100644 (file)
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 @ignore
-   Translation of GIT committish: 97f856e8c577fdf301ac2a15b336eae8729e53f7
+   Translation of GIT committish: 39912f861693f1c24b8833e6e9e6ba82eb3e6746
 
    When revising a translation, copy the HEAD committish of the
    version that you are working on.  For details, see the Contributors'
@@ -602,7 +602,7 @@ vont vers le haut, celles des voix paires vers le bas :
 >>
 @end lilypond
 
-@warning{Paroles et objets étendus (liaisons, soufflets etc.) ne peuvent
+@warning{Paroles et objets étendus (liaisons, soufflets, etc.) ne peuvent
 passer d'une voix à l'autre.}
 
 @subsubsubheading Identité rythmique
index 339c9d448e242650b5eb084f285d5d79a9768eb1..8c0e61fd50710c520852965ea8cb6d159196cf12 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-   Translation of GIT committish: 97f856e8c577fdf301ac2a15b336eae8729e53f7
+   Translation of GIT committish: 137af1bb9546d8845cbd7f9ecc0936fb4a0914e3
 
    When revising a translation, copy the HEAD committish of the
    version that you are working on.  For details, see the Contributors'
@@ -124,7 +124,7 @@ Un bloc @code{\paper} ne doit donc en aucun cas prendre place au sein
 d'un bloc @code{\score}.
 
 Les valeurs des différents champs seront filtrées en respectant cette
-hiérarchie ; les valeuers définies le plus haut persisteront à moins
+hiérarchie ; les valeurs définies le plus haut persisteront à moins
 d'être remplacées à un niveau hiérarchique inférieur.
 
 Plusieurs blocs @code{\paper} peuvent cohabiter à un même niveau,
index 3b5ad353511ee91dca90b77886f33383daf96fc3..87bb956de3c25edb010740f003950f82d9529b71 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-   Translation of GIT committish: a1267e20afa61258ce3031f07d916e0e66ac6582
+   Translation of GIT committish: 39912f861693f1c24b8833e6e9e6ba82eb3e6746
 
    When revising a translation, copy the HEAD committish of the
    version that you are working on.  For details, see the Contributors'
@@ -536,7 +536,8 @@ Morceaux choisis :
 @rlsrnamed{Text,Texte}.
 
 @knownissues
-Les erreurs de syntaxe en mode @emph{markup} sont peu explicites.
+Les messages d'erreur de syntaxe en mode @emph{markup} sont peu
+explicites.
 
 
 @node Sélection de la fonte et de la taille
index 6268bd6e899c856ca52c873927c145e422687b7f..4f1083f2023909b9455006a9d82e2522f4ecfc18 100644 (file)
@@ -1,6 +1,6 @@
 \input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 @ignore
-    Translation of GIT committish: 9dca368f5d0b7b0e0f28656f29de4fd24de7d934
+    Translation of GIT committish: 472ecfdd548d8f700d71ec1a403b7a5bdce7d5ba
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -137,24 +137,74 @@ Plus sur LilyPond dans notre @ref{Introduction} !
 @divEnd
 
 
-@divId{news}
+@divId{homepage-main}
 
-@c TODO: generate this automatically, including RSS feed.
-@include web/news-front.itexi
+@divClass{column-center-top}
+
+@subheading La beauté par l'exemple
+
+@c This example image is the image from the website version of the essay
+@c manual, downloaded to the pictures directory for use on the home page.
+@c Large version is generated manually from ly file in pictures directory.
+@divId{homepage-example-image-wrapper}
+@imageClickable{bwv861-lilypond,png,,bwv861-lilypond-large,png,center}
+@divEnd
+
+@ifclear web_version
+  @c no anchor links, just text
+
+LilyPond est un outil à la fois puissant et flexible qui se charge de
+graver toutes sortes de partitions, qu'il s'agisse de musique classique
+(comme cet exemple de by J.S. Bach), notation complexe, musique
+ancienne, musique moderne, tablature, musique vocale, feuille de chant,
+applications pédagogiques, grands projets, sortie personnalisée ainsi
+que des diagrammes de Schenker.
+
+@end ifclear
+@ifset web_version
+  @c anchor links, link to individual examples by their <a> tag
+
+LilyPond est un outil à la fois puissant et flexible qui se charge de
+graver toutes sortes de partitions, qu'il s'agisse de
+@uref{examples.html#Musique-classique, musique classique}
+(comme cet exemple de by J.S. Bach),
+@uref{examples.html#Notation-complexe, notation complexe},
+@uref{examples.html#Musique-ancienne, musique ancienne},
+@uref{examples.html#Musique-moderne, musique moderne},
+@uref{examples.html#Tablature, tablature},
+@uref{examples.html#Musique-vocale, musique vocale},
+@uref{examples.html#Feuille-de-chant, feuille de chant},
+@uref{examples.html#Applications-pedagogiques, applications pédagogiques},
+@uref{examples.html#Grands-projets, grands projets},
+@uref{examples.html#Sortie-personnalisee, sortie personnalisée},
+ainsi que des
+@uref{examples.html#Diagrammes-de-Schenker, diagrammes de Schenker}.
+
+@end ifset
+
+Venez puiser l'inspiration dans notre galerie
+@ref{Exemples, d'exemples !}
 
-@divClass{float-right}
-(@ref{Archives}) @c (@ref{Old news,,,,Actualités passées})
 @divEnd
 
+@divClass{column-center-middle-color2}
+@subheading Actualités
+
+@c TODO: generate this automatically, including RSS feed.
+@include web/news-headlines.itexi
+
+@ref{Actualités, Actualités suivantes…}
+
 @divEnd
 
+@divEnd
 
 @ifclear web_version
   @c do nothing
 @end ifclear
 @ifset web_version
   @c make the sidebar:
-@divId{homePageSideBar}
+@divId{homepage-sidebar}
 
 @subheading Branche stable
 
index 4ad3c3db92ded85586a5e0ba57ac39c0791adb08..c3871201ff935bf1f80f46e341a6262893b16f56 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage : fr -*-
 @c This file is part of web.texi
 @ignore
-   Translation of GIT committish: 8c1840ca28a05b3dad8d595e04d03779ba0a286a
+   Translation of GIT committish: 0628cc44250b21d422b21890a7f266cd4b5ca584
 
    When revising a translation, copy the HEAD committish of the
    version that you are working on.  For details, see the Contributors'
@@ -81,7 +81,7 @@ aujourd'hui.
 nous.
 
 @item
-@ref{Archives} : archives des dépêches.
+@ref{Actualités} : archives des dépêches.
 
 @item
 @ref{Grenier} : annonces et recensement des modifications intervenues
@@ -104,7 +104,7 @@ aux cours des versions précédentes.
 * Auteurs::
 * Remerciements::
 * Publications::
-* Archives::
+* Actualités::
 * Grenier::
 @end menu
 @divEnd
@@ -1346,9 +1346,9 @@ indisponibles pour le GSoc 2016)
 @contactUsAbout{publications universitaires}
 
 
-@node Archives
-@unnumberedsec Archives
-@translationof Old news
+@node Actualités
+@unnumberedsec Actualités
+@translationof News
 
 @divClass{heading-center}
 @warning{Les vieilles annonces et informations de version sont rangées au
index ceedcaededf2047ef45361caf22b322d01185f36..e11e8234c28fc26f4a24e4ed75fe67d509ceb9c5 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 @c This file is part of web.texi
 @ignore
-   Translation of GIT committish: 8c1840ca28a05b3dad8d595e04d03779ba0a286a
+   Translation of GIT committish: 0628cc44250b21d422b21890a7f266cd4b5ca584
 
    When revising a translation, copy the HEAD committish of the
    version that you are working on.  For details, see the Contributors'
@@ -478,12 +478,12 @@ pédagogiques.  Voici par exemple un exercice de contrepoint.
 @divEnd
 
 @divClass{column-center-middle-color2}
-@subheading Musique pop
+@subheading Feuille de chant
 
-Il est facile de créer des partitions de chansons pop avec la mélodie,
-les paroles, les chiffrages d'accords et les diagrammes de frettes.
-Vous pouvez voir des exemples de tels diagrammes qui sont prédéfinis,
-mais il est possible de les personnaliser dans presque tous les cas.
+Il est facile de créer des feuilles de chant avec la mélodie, les
+paroles, les chiffrages d'accords et les diagrammes de frettes.  Vous
+pouvez voir des exemples de tels diagrammes qui sont prédéfinis, mais il
+est possible de les personnaliser dans presque tous les cas.
 
 @exampleImage{chart}
 @divEnd
index 78cf9a3fa70f6c53292483e79982112dc74d889f..44c61911bd9f09351f2cceb84530e8a2fed928e5 100644 (file)
@@ -697,7 +697,7 @@ A LilyPond @version{} verziójához
 
 @macro exampleImage{IMAGE-FILE}
 @html
-<div class="float-center">
+<div class="float-center example-image-wrapper">
   <a class="clickable" href="ly-examples/\IMAGE-FILE\.png">
     <img src="ly-examples/\IMAGE-FILE\-small.png" alt="\IMAGE-FILE\">
   </a>
index b198e40c6eca7786c91f39b6d54d0726d5ddc4a1..5568fb5daebd5392e680a29c667791be986be745 100644 (file)
@@ -214,7 +214,7 @@ it is recommended that you also need to install @code{git}.
 sudo dnf install git
 @end example
 
-Also see @ruser{Starting with Git}.
+Also see @rcontrib{Starting with Git}.
 
 @item
 To use the @code{lily-git.tcl} GUI;
@@ -223,7 +223,7 @@ To use the @code{lily-git.tcl} GUI;
 sudo dnf install tk
 @end example
 
-See @ruser{lily-git}.
+See @rcontrib{lily-git}.
 
 @end itemize
 
@@ -297,7 +297,7 @@ it is recommended that you also need to install @code{git}.
 sudo apt-get install git
 @end example
 
-Also see @ruser{Starting with Git}.
+Also see @rcontrib{Starting with Git}.
 
 @item
 To use the @code{lily-git.tcl} GUI;
@@ -306,7 +306,7 @@ To use the @code{lily-git.tcl} GUI;
 sudo apt-get install tk
 @end example
 
-Also see @ruser{lily-git}.
+Also see @rcontrib{lily-git}.
 
 @end itemize
 
@@ -365,7 +365,7 @@ it is recommended that you also need to install @code{git}.
 sudo zypper install git
 @end example
 
-Also see @ruser{Starting with Git}.
+Also see @rcontrib{Starting with Git}.
 
 @item
 To use the @code{lily-git.tcl} GUI;
@@ -374,7 +374,7 @@ To use the @code{lily-git.tcl} GUI;
 sudo zypper install tk
 @end example
 
-Also see @ruser{lily-git}.
+Also see @rcontrib{lily-git}.
 
 @end itemize
 
@@ -424,7 +424,7 @@ it is recommended that you also need to install @code{git}.
 sudo apt-get install git
 @end example
 
-Also see @ruser{Starting with Git}.
+Also see @rcontrib{Starting with Git}.
 
 @item
 To use the @code{lily-git.tcl} GUI;
@@ -433,7 +433,7 @@ To use the @code{lily-git.tcl} GUI;
 sudo apt-get install tk
 @end example
 
-Also see @ruser{lily-git}.
+Also see @rcontrib{lily-git}.
 
 @end itemize
 
index 5847b695e2191150f301042e89cfb4eefd49da88..437872235059a2f7fb0eeb1a06232b78ac02e690 100644 (file)
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8; mode: texinfo; -*-
 @ignore
-    Translation of GIT committish: 13d24779fd6b71e8130f785063dd112bfd9f8511
+    Translation of GIT committish: 136e94ea422fc94ef2587c588d516a03e01275e1
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -203,16 +203,20 @@ Per la versione di LilyPond @version{}
 @c it doesn't matter, but a future implementation will probably
 @c add some code which needs this restriction.
 
+@c @raggedright can be enabled as soon as texinfo 5.x or larger
+@c is in use for Gub and LilyDev 3.
+
 @macro predefined
 @noindent
 @subsubheading Comandi predefiniti
+@c @raggedright
 @end macro
 
 @c Due to a bug in texi2html (texi2html.pl CVS versions <= 1.245)
 @c the next macro must not be empty.
 
 @macro endpredefined
-@c
+@c @end raggedright
 @end macro
 
 
@@ -746,7 +750,7 @@ Per la versione di LilyPond @version{}
 
 @macro exampleImage{IMAGE-FILE}
 @html
-<div class="float-center">
+<div class="float-center example-image-wrapper">
   <a class="clickable" href="ly-examples/\IMAGE-FILE\.png">
     <img src="ly-examples/\IMAGE-FILE\-small.png" alt="\IMAGE-FILE\">
   </a>
index 82551ac9286359cd801f7f764b6da90e74901f99..96d864cbf60fbfe7e2dc2c6731d2b3c812304f11 100644 (file)
@@ -1,6 +1,6 @@
 \input texinfo @c -*- coding: utf-8; mode: texinfo; -*-
 @ignore
-    Translation of GIT committish: 1244656c3b2d852f29bd75007469e1b1ed0b616f
+    Translation of GIT committish: 472ecfdd548d8f700d71ec1a403b7a5bdce7d5ba
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -102,13 +102,63 @@ Maggiori informazioni nella nostra @ref{Introduzione}!
 
 
 
-@divId{news}
+@divId{homepage-main}
+
+@divClass{column-center-top}
+
+@c traduzione libera, altrimenti il titolo perde efficacia - fb
+@subheading Musica bella per gli occhi
+
+@c This example image is the image from the website version of the essay
+@c manual, downloaded to the pictures directory for use on the home page.
+@c Large version is generated manually from ly file in pictures directory.
+@divId{homepage-example-image-wrapper}
+@imageClickable{bwv861-lilypond,png,,bwv861-lilypond-large,png,center}
+@divEnd
+
+@ifclear web_version
+  @c no anchor links, just text
+
+LilyPond è uno strumento potente e flessibile, adatto a ogni genere di
+spartito, per esempio musica classica (come nell'esempio precedente di J.S.
+Bach), notazione complessa, musica antica, musica moderna, tablatura,
+musica vocale, spartiti semplificati, materiali didattici, grandi
+progetti orchestrali, output personalizzato e perfino grafici Schenker.
+
+@end ifclear
+@ifset web_version
+  @c anchor links, link to individual examples by their <a> tag
+
+LilyPond è uno strumento potente e flessibile, adatto a ogni genere di
+spartito, per esempio
+@uref{examples.html#Musica-Classica, musica classica}
+(come nell'esempio precedente di J.S. Bach),
+@uref{examples.html#Notazione-Complessa, notazione complessa},
+@uref{examples.html#Musica-Antica, musica antica},
+@uref{examples.html#Musica-Moderna, musica moderna},
+@uref{examples.html#Intavolatura, tablatura},
+@uref{examples.html#Musica-Vocale, musica vocale},
+@uref{examples.html#Spartiti-Semplificati, spartiti semplificati},
+@uref{examples.html#Materiali-didattici, materiali didattici},
+@uref{examples.html#Grandi-Progetti, grandi progetti orhestrali},
+@uref{examples.html#Output-personalizzato, output personalizzato},
+e perfino
+@uref{examples.html#Grafici-Schenker, grafici Schenker}.
+
+@end ifset
+
+Guarda la galleria di @ref{Esempi} e lasciati ispirare!
+
+@divEnd
+
+@divClass{column-center-middle-color2}
+@subheading Notizie
+
 
 @c TODO: generate this automatically, including RSS feed.
-@include web/news-front.itexi
+@include web/news-headlines.itexi
 
-@divClass{float-right}
-(@ref{Notizie vecchie})
+(@ref{Notizie, Altre notizie...})
 @divEnd
 
 @divEnd
@@ -117,7 +167,7 @@ Maggiori informazioni nella nostra @ref{Introduzione}!
   @c do nothing
 @end ifclear
 @ifset web_version
-@divId{homePageSideBar}
+@divId{homepage-sidebar}
 @subheading Stabile
 
 @ref{Download, Download @versionStable}
index a7d974919a333f8f18aa65a8111b82ce1e221e37..e6a915b358848a54026dbbf05de0416a6eb4e1ca 100644 (file)
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
 @ignore
-    Translation of GIT committish: 58d22c26c9ed6f1845ebb5a7f36bdba8edf1b03b
+    Translation of GIT committish: 136e94ea422fc94ef2587c588d516a03e01275e1
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -70,7 +70,7 @@ quando si discute di LilyPond.
 @ref{Pubblicazioni}: cosa abbiamo scritto, e cosa è stato scritto su di noi.
 
 @item
-@ref{Notizie vecchie}: un archivio.
+@ref{Notizie}: notizie sul progetto LilyPond.
 
 @item
 @ref{Attic}: annunci e changelog delle versioni precedenti.
@@ -92,7 +92,7 @@ quando si discute di LilyPond.
 * Autori::
 * Riconoscimenti::
 * Pubblicazioni::
-* Notizie vecchie::
+* Notizie::
 * Soffitta::
 @end menu
 @divEnd
@@ -1272,9 +1272,9 @@ per GSoC 2016)
 
 @contactUsAbout{articoli accademici}
 
-@node Notizie vecchie
-@unnumberedsec Notizie vecchie
-@translationof Old news
+@node Notizie
+@unnumberedsec Notizie
+@translationof News
 
 @divClass{heading-center}
 @warning{Molti dei vecchi annunci e changelog si possono trovare
index f61466cbf1c6204c81e79ca81889a021263f6668..0e00e01a2205530aaa32564aa93eabd4349198b3 100644 (file)
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
 @ignore
-    Translation of GIT committish: d4756c74976a991bd80cf757f774e5525d0830cb
+    Translation of GIT committish: 136e94ea422fc94ef2587c588d516a03e01275e1
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -418,18 +418,18 @@ e le parentesi quadre sulle sezioni legate.
 @divEnd
 
 @divClass{column-center-middle-color2}
-@subheading Applicazioni didattiche
+@subheading Materiali didattici
 
-LilyPond è molto indicato anche per applicazioni didattiche.
+LilyPond è molto indicato anche per creare materiali didattici.
 Ecco un esempio di un semplice esercizio di contrappunto.
 
 @exampleImage{theory}
 @divEnd
 
 @divClass{column-center-middle-color2}
-@subheading Musica Popolare
+@subheading Spartiti semplificati
 
-È semplice creare spartiti semplificati pop con melodia, testo,
+È semplice creare spartiti semplificati con melodia, testo,
 nomi degli accordi, e tastiere.  In questo esempio puoi vedere alcuni
 dei diagrammi di tastiera predefiniti, ma questi possono essere ampiamente
 personalizzati per adattarsi a quasi ogni situazione.
diff --git a/Documentation/it/web/news-headlines.itexi b/Documentation/it/web/news-headlines.itexi
new file mode 100644 (file)
index 0000000..c41665a
--- /dev/null
@@ -0,0 +1,46 @@
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
+@c This file is used in the web.texi file.
+
+@ignore
+    Translation of GIT committish: 36e230cf09bf2755528d2252ee256f88f330e66d
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  For details, see the Contributors'
+    Guide, node Updating translation committishes..
+@end ignore
+
+@c when you add a new item, consider removing the lowest item(s)
+
+@c used for news about the upcoming release; see CG on Release Work
+
+@c We use @uref for the actual website to link to individual news items
+@c by their <a> tags.  We use @ref for other output formats.
+
+@ifclear web_version
+  @c no anchor links, just link to News page
+
+@ref{News, Rilasciato LilyPond 2.19.48 - @emph{13 Settembre 2016}}
+
+@ref{News, Due progetti LilyPond nel Google Summer of Code 2016 - @emph{23 Aprile 2016}}
+
+@ref{News, Rilasciato LilyPond 2.18.2 - @emph{23 Marzo 2014}}
+
+@ref{News, Rilasciato LilyPond 2.18.0 - @emph{29 Dicembre 2013}}
+
+@end ifclear
+@ifset web_version
+  @c anchor links, link to individual news items by their <a> tag
+
+@uref{news.it.html#LilyPond-2_002e19_002e48-released-September-13_002c-2016,
+  Rilasciato LilyPond 2.19.48 - @emph{13 Settembre 2016}}
+
+@uref{news.it.html#Two-LilyPond-projects-in-Google-Summer-of-Code-2016-April-23_002c-2016,
+  Two LilyPond projects in Google Summer of Code 2016 - @emph{23 Aprile 2016}}
+
+@uref{news.it.html#LilyPond-2_002e18_002e2-released_0021-March-23_002c-2014,
+  Rilasciato LilyPond 2.18.2 - @emph{23 Marzo 2014}}
+
+@uref{news.it.html#LilyPond-2_002e18_002e0-released_0021-December-29_002c-2013,
+  Rilasciato LilyPond 2.18.0 - @emph{29 Dicembre 2013}}
+
+@end ifset
index 2530ab362a328c6f5a617166182d7ffe2387b952..4f11299db59ea0212aa482b3279955e2f6a6fbe3 100644 (file)
@@ -722,7 +722,7 @@ LilyPond バージョン @version{} 用
 
 @macro exampleImage{IMAGE-FILE}
 @html
-<div class="float-center">
+<div class="float-center example-image-wrapper">
   <a class="clickable" href="ly-examples/\IMAGE-FILE\.png">
     <img src="ly-examples/\IMAGE-FILE\-small.png" alt="\IMAGE-FILE\">
   </a>
index 38db614f76c1dc5a099828603731be3bc0047f37..8e407d4527a09972d425bf2253a56da122a8157a 100644 (file)
@@ -1,6 +1,6 @@
 \input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
 @ignore
-    Translation of GIT committish: 7215236a0a49dd112348d2620fa132f7e5f12aff
+    Translation of GIT committish: 472ecfdd548d8f700d71ec1a403b7a5bdce7d5ba
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -139,13 +139,65 @@ LilyPond はフリーソフトウェアであり、@uref{http://gnu.org,GNU プ
 @divEnd
 
 
-@divId{news}
+@divId{homepage-main}
+
+@divClass{column-center-top}
+
+@subheading 美しい楽譜
+
+@c This example image is the image from the website version of the essay
+@c manual, downloaded to the pictures directory for use on the home page.
+@c Large version is generated manually from ly file in pictures directory.
+@divId{homepage-example-image-wrapper}
+@imageClickable{bwv861-lilypond,png,,bwv861-lilypond-large,png,center}
+@divEnd
+
+@ifclear web_version
+  @c no anchor links, just text
+
+LilyPond は、いかなる種類の譜刻にも対応できる、@c
+強力で、自由度の高いツールです。@c
+例えば、クラシック音楽(J. S. Bach 作の上の例のように)、@c
+複雑な楽譜、古楽、現代音楽、タブ譜、声楽、リード譜、教材、@c
+大きなオーケストラプロジェクト、カスタマイズされた出力、@c
+さらに Schenker graphs にも使えます。
+
+@end ifclear
+@ifset web_version
+  @c anchor links, link to individual examples by their <a> tag
+
+LilyPond は、いかなる種類の譜刻にも対応できる、@c
+強力で、自由度の高いツールです。@c
+例えば、
+@uref{examples.html#g_t_30af_30e9_30b7_30c3_30af_97f3_697d, クラシック音楽}
+(J. S. Bach 作の上の例のように)、
+@uref{examples.html#g_t_8907_96d1_306a_697d_8b5c, 複雑な楽譜}、
+@uref{examples.html#g_t_53e4_697d, 古楽}、
+@uref{examples.html#g_t_73fe_4ee3_97f3_697d, 現代音楽}、
+@uref{examples.html#g_t_30bf_30d6_8b5c, タブ譜}、
+@uref{examples.html#g_t_58f0_697d, 声楽}、
+@uref{examples.html#g_t_30ea_30fc_30c9_8b5c, リード譜}、
+@uref{examples.html#g_t_6559_80b2, 教材}、
+@uref{examples.html#g_t_5927_304d_306a_30d7_30ed_30b8_30a7_30af_30c8, 大きなオーケストラプロジェクト}、
+@uref{examples.html#g_t_30ab_30b9_30bf_30de_30a4_30ba, カスタマイズされた出力}、
+さらに
+@uref{examples.html#Schenker-Graphs, Schenker graphs}
+にも使えます。
+
+@end ifset
+
+楽譜の @ref{例} を見て、刺激を受けてください!
+
+@divEnd
+
+@divClass{column-center-middle-color2}
+@subheading ニュース
 
 @c TODO: generate this automatically, including RSS feed.
-@include web/news-front.itexi
+@include web/news-headlines.itexi
+
+@ref{News, その他のニュース...}
 
-@divClass{float-right}
-(@ref{古いニュース})
 @divEnd
 
 @divEnd
@@ -156,7 +208,7 @@ LilyPond はフリーソフトウェアであり、@uref{http://gnu.org,GNU プ
 @end ifclear
 @ifset web_version
   @c make the side bar:
-@divId{homePageSideBar}
+@divId{homepage-sidebar}
 @subheading 安定版
 
 @c TODO: javascript to detect OS and suggest download?
index 8be2657353efa65c9e4f7781e702c3eb6e625f59..6c7d7deca16a92fabd43b0c34a094838e95e2905 100644 (file)
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
 @ignore
-    Translation of GIT committish: 7215236a0a49dd112348d2620fa132f7e5f12aff
+    Translation of GIT committish: 36e230cf09bf2755528d2252ee256f88f330e66d
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -72,7 +72,7 @@
 @ref{出版物}: 我々が書いたもの、我々についてかかれたもの。
 
 @item
-@ref{古いニュース}: アーカイブ
+@ref{ニュース}: LilyPond プロジェクトからのニュース
 
 @item
 @ref{物置}: アナウンスと過去のバージョンからの変更ログ。
@@ -94,7 +94,7 @@
 * 著者::
 * 謝辞::
 * 出版物::
-* 古いニュース::
+* ニュース::
 * 物置::
 @end menu
 @divEnd
@@ -1267,9 +1267,9 @@ GSoC 2016)
 @contactUsAbout{academic papers}
 
 
-@node 古いニュース
-@unnumberedsec 古いニュース
-@translationof Old news
+@node ニュース
+@unnumberedsec ニュース
+@translationof News
 
 @divClass{heading-center}
 @warning{多くの古いアナウンスと変更履歴が @ref{物置} で見つかります。}
index ba880085f023229cba8a9b42c1bd4b36c4313fc5..ed4924cb4fb584e80fdba783077c8184a8d44071 100644 (file)
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
 @ignore
-    Translation of GIT committish: 7215236a0a49dd112348d2620fa132f7e5f12aff
+    Translation of GIT committish: 36e230cf09bf2755528d2252ee256f88f330e66d
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -341,7 +341,7 @@ LilyPond を試してみる決心がついたのなら、@c
 @divClass{column-center-top}
 
 @subheading 美しい例
-@c Beautiful examples
+@c Beautiful Examples
 
 LilyPond は、いかなる種類の譜刻にも対応できる、@c
 強力で、自由度の高いツールです。@c
@@ -470,11 +470,11 @@ LilyPond は教育を目的とした使用にも適しています。@c
 @divEnd
 
 @divClass{column-center-middle-color2}
-@subheading ã\83\9dã\83\94ã\83¥ã\83©ã\83¼é\9f³æ¥½
-@c Popular Music
+@subheading ã\83ªã\83¼ã\83\89è­\9c
+@c Lead Sheets
 
 メロディー、歌詞、コード名、フレットボードを持つ@c
\83\9dã\83\94ã\83¥ã\83©ã\83¼é\9f³æ¥½ã\81®ã\83ªã\83¼ã\83\89è­\9cã\82\92ç°¡å\8d\98ã\81«ä½\9cã\82\8cã\81¾ã\81\99ã\80\82@c
+リード譜を簡単に作れます。@c
 以下の例ではあらかじめ定義されているフレットボード ダイアグラムを@c
 使用していますが、@c
 状況に合わせて様々なカスタマイズを行うことができます。
index cc09619dccbfdc4f3fe6a3838c5fb3f639e8df98..3558d0c811f82dc0e1539b15ac3e190b4b42916d 100644 (file)
@@ -733,7 +733,7 @@ For LilyPond version @version{}
 
 @macro exampleImage{IMAGE-FILE}
 @html
-<div class="float-center">
+<div class="float-center example-image-wrapper">
   <a class="clickable" href="ly-examples/\IMAGE-FILE\.png">
     <img src="ly-examples/\IMAGE-FILE\-small.png" alt="\IMAGE-FILE\">
   </a>
index 2f82070f2ccf878460793425420a9a0cdc2eabf1..4de99bb1d4cadf514ce7d67f9a67d68e74973cbe 100644 (file)
@@ -754,7 +754,7 @@ Voor LilyPond versie @version{}
 
 @macro exampleImage{IMAGE-FILE}
 @html
-<div class="float-center">
+<div class="float-center example-image-wrapper">
   <a class="clickable" href="ly-examples/\IMAGE-FILE\.png">
     <img src="ly-examples/\IMAGE-FILE\-small.png" alt="\IMAGE-FILE\">
   </a>
index e977208b102677555fc1ce7915373ac102188993..783e26a3484a260bd86f23dd2bb379af1ca50938 100644 (file)
@@ -140,7 +140,7 @@ Lees meer in onze @ref{Inleiding}!
 @include web/news-front.itexi
 
 @divClass{float-right}
-(@ref{Old news}) @c (@ref{Old news,,,,Oud nieuws})
+(@ref{News}) @c (@ref{News,,,,Oud nieuws})
 @divEnd
 
 @divEnd
index f131cd6012e59806cd0e31205b903492f48741d4..2c8df57890e245772a2abb30b41dd2e3fdd891fa 100644 (file)
@@ -374,8 +374,9 @@ books within the file (see @ref{Titles explained}).
 A @code{\score} block.  This score will be collected with other
 toplevel scores, and combined as a single @code{\book}.
 This behavior can be changed by setting the variable
-@code{toplevel-score-handler} at toplevel.  The default handler is
-defined in the init file @file{../scm/lily.scm}.
+@code{toplevel-score-handler} at toplevel.  (The default handler is
+defined in the file @file{../scm/lily-library.scm} and set in the file
+@file{../ly/declarations-init.ly}.)
 
 @item
 A @code{\book} block logically combines multiple movements
@@ -1143,10 +1144,11 @@ provided:
 @item create-page-number-stencil    @tab  print-page-numbers true?
 @item print-all-headers             @tab  print-all-headers true?
 @item first-page                    @tab  first page in the book?
+@item not-first-page                @tab  not first page in the book?
 @item (on-page nmbr)                @tab  page number = nmbr?
 @item last-page                     @tab  last page in the book?
-@item not-first-page                @tab  not first page in the book?
 @item part-first-page               @tab  first page in the book part?
+@item not-part-first-page           @tab  not first page in the book part?
 @item part-last-page                @tab  last page in the book part?
 @item not-single-page               @tab  pages in book part > 1?
 
diff --git a/Documentation/pictures/bwv861-lilypond-large.ly b/Documentation/pictures/bwv861-lilypond-large.ly
new file mode 100644 (file)
index 0000000..b14f093
--- /dev/null
@@ -0,0 +1,105 @@
+\version "2.19.48"
+
+% Engrave to png with these options to create
+% the large version of image for home page:
+% -dno-point-and-click --png -dresolution=300
+
+% The small version you see on the home page
+% itself is simply the image from the essay manual,
+% downloaded from the website version of the
+% essay manual.
+
+\layout {
+  line-width = 15.9 \cm
+}
+
+\paper {
+  indent = 0
+  paper-height = 8 \cm
+  paper-width = 18 \cm
+}
+
+\header {
+  tagline = ##f
+}
+
+#(set-global-staff-size 14.3)
+
+
+global = { \key g \minor }
+
+partI = \relative {
+  \voiceOne
+  fis'8 d' ees g, fis4 g
+  r8 a16 bes c8 bes16 a d8 r r4
+  r2 r8 d16 ees f8 ees16 d
+  ees4 ~ 16 d c bes a4 r8 ees'16 d
+  c8 d16 ees d8 e16 fis g8 fis16 g a4 ~
+  8 d, g f ees d c bes
+  a2 g \fermata \bar "|."
+}
+
+partII = \relative {
+  \voiceTwo
+  d'4 r4 r8 d'16 c bes8 c16 d
+  ees8 d c ees a, r r4
+  r8 fis16 g a8 g16 fis g2 ~
+  2 r8 d' ees g,
+  fis4 g r8 a16 bes c8 bes16 a
+  bes4. <g b>8 <a c> r <d, g> r
+  <ees g>4 <d fis> d2
+}
+
+partIII = \relative {
+  \voiceOne
+  r2 r8 d' ees g, fis4 g r8 a16 bes c8 bes16 a
+  bes2 ~ 8 b16 a g8 a16 b
+  c4 r r2
+  R1
+  r8 d ees g, fis4 g
+  r8 a16 bes c8 bes16 a b2
+}
+
+partIV = \relative {
+  \voiceTwo
+  d4 r r2
+  r8 d ees g, fis4 a
+  d,8 d'16 c bes8 c16 d ees2 ~
+  8 ees16 d c8 d16 ees fis,8 a16 g fis8 g16 a
+  d,8 d'16 c bes8 c16 d ees8 c a fis'
+  g f ees d c bes a g
+  c a d d, g2 \fermata
+}
+
+\score {
+  <<
+    % \set Score.barNumberVisibility = #all-bar-numbers-visible
+    % required in 2.13
+    \set Score.currentBarNumber = #28
+    \bar ""
+    \new PianoStaff <<
+      \new Staff = "RH" <<
+        \global
+        \new Voice = "voiceI" { \partI }
+        \new Voice = "voiceII" { \partII }
+      >>
+
+      \new Staff = "LH" <<
+        \clef "bass"
+        \global
+        \new Voice = "voiceIII" { \partIII }
+        \new Voice = "voiceIV" { \partIV }
+      >>
+    >>
+  >>
+  \layout {
+    \context {
+      \Staff
+      \remove "Time_signature_engraver"
+    }
+    \context {
+      \PianoStaff
+      \override StaffGrouper.staff-staff-spacing.padding = #1
+    }
+  }
+}
diff --git a/Documentation/pictures/bwv861-lilypond-large.png b/Documentation/pictures/bwv861-lilypond-large.png
new file mode 100644 (file)
index 0000000..099fe3d
Binary files /dev/null and b/Documentation/pictures/bwv861-lilypond-large.png differ
diff --git a/Documentation/pictures/bwv861-lilypond.png b/Documentation/pictures/bwv861-lilypond.png
new file mode 100644 (file)
index 0000000..b3a7e31
Binary files /dev/null and b/Documentation/pictures/bwv861-lilypond.png differ
index 3302e03eab81fbd45bbd9ce3371af945117cd9de..4a1104fe634b60d2fb33036de71136aa808ec01e 100644 (file)
@@ -2,7 +2,6 @@
 @unnumbered MIDI
 @nodeprefix MIDI
 
-@ruser{MIDI output}
+@ruser{Creating MIDI output}
 
 @lysnippets
-
index 935f8e8b78f61045e74586cee8ff791653e5b229..3081e4d3c8c01606492c1abd3a3bed374f991a8d 100644 (file)
@@ -133,13 +133,65 @@ Read more in our @ref{Introduction}!
 @divEnd
 
 
-@divId{news}
+@divId{homepage-main}
+
+@divClass{column-center-top}
+
+@subheading Beautiful Sheet Music
+
+@c This example image is the image from the website version of the essay
+@c manual, downloaded to the pictures directory for use on the home page.
+@c Large version is generated manually from ly file in pictures directory.
+@divId{homepage-example-image-wrapper}
+@imageClickable{bwv861-lilypond,png,,bwv861-lilypond-large,png,center}
+@divEnd
+
+@ifclear web_version
+  @c no anchor links, just text
+
+LilyPond is a powerful and flexible tool for engraving tasks of
+all kinds, for example classical music (like the example above by J.S.
+Bach), complex notation, early music, modern music, tablature,
+vocal music, lead sheets, educational materials, large
+orchestral projects, customized output, and even Schenker graphs.
+
+@end ifclear
+@ifset web_version
+  @c anchor links, link to individual examples by their <a> tag
+  @c Translators should use the localized anchor name
+  @c (e.g. examples.html#Musica-Antica)
+  @c to be found in out-www/web/examples.LL.html
+
+LilyPond is a powerful and flexible tool for engraving tasks of
+all kinds, for example
+@uref{examples.html#Classical-Music, classical music}
+(like the example above by J.S. Bach),
+@uref{examples.html#Complex-Notation, complex notation},
+@uref{examples.html#Early-Music, early music},
+@uref{examples.html#Modern-Music, modern music},
+@uref{examples.html#Tablature, tablature},
+@uref{examples.html#Vocal-Music, vocal music},
+@uref{examples.html#Lead-Sheets, lead sheets},
+@uref{examples.html#Educational-Applications, educational materials},
+@uref{examples.html#Large-Projects, large orchestral projects},
+@uref{examples.html#Customized-Output, customized output},
+and even
+@uref{examples.html#Schenker-Graphs, Schenker graphs}.
+
+@end ifset
+
+Browse our gallery of @ref{Examples} and be inspired!
+
+@divEnd
+
+@divClass{column-center-middle-color2}
+@subheading News
 
 @c TODO: generate this automatically, including RSS feed.
-@include web/news-front.itexi
+@include web/news-headlines.itexi
+
+@ref{News, More news...}
 
-@divClass{float-right}
-(@ref{Old news})
 @divEnd
 
 @divEnd
@@ -150,7 +202,7 @@ Read more in our @ref{Introduction}!
 @end ifclear
 @ifset web_version
   @c make the side bar:
-@divId{homePageSideBar}
+@divId{homepage-sidebar}
 @subheading Stable Release
 
 @c TODO: javascript to detect OS and suggest download?
index 31b400fa893909c31ff9e907bce19cc34c8f651a..0cad92d7155fb12fe885442a45d2ff46303c5f47 100644 (file)
@@ -69,7 +69,7 @@ discussing LilyPond.
 @ref{Publications}: what we wrote, and have had written about us.
 
 @item
-@ref{Old news}: an archive.
+@ref{News}: news from the LilyPond project.
 
 @item
 @ref{Attic}: announcements and changelogs from past versions.
@@ -91,7 +91,7 @@ discussing LilyPond.
 * Authors::
 * Acknowledgements::
 * Publications::
-* Old news::
+* News::
 * Attic::
 @end menu
 @divEnd
@@ -1253,8 +1253,8 @@ GSoC 2016)
 @contactUsAbout{academic papers}
 
 
-@node Old news
-@unnumberedsec Old news
+@node News
+@unnumberedsec News
 
 @divClass{heading-center}
 @warning{Many old announcements and changelogs can be found in
index 2ea2085ab9ef85d467223b315269e601b9bd0063..a3bde1bf941c20acda44a2edf049ab14c27f001b 100644 (file)
@@ -303,7 +303,7 @@ already decided to try LilyPond, first read about our
 
 @divClass{column-center-top}
 
-@subheading Beautiful examples
+@subheading Beautiful Examples
 
 LilyPond is a powerful and flexible tool for engraving tasks of
 all kinds.  Please browse our gallery of examples and be inspired!
@@ -420,9 +420,9 @@ Here is an example of a simple counterpoint exercise.
 @divEnd
 
 @divClass{column-center-middle-color2}
-@subheading Popular Music
+@subheading Lead Sheets
 
-It is simple to create pop lead sheets with melody, lyrics,
+It is simple to create lead sheets with melody, lyrics,
 chord names, and fretboards.  In this example you see some of the
 predefined fretboard diagrams, but these can be heavily customized
 to suit nearly any situation.
index d9a715518bac1898db74ce6cad20bbf566a486ec..645364afe8790cffc79bb441fac5dc25d63d45b6 100644 (file)
@@ -1,18 +1,18 @@
 @c -*- coding: utf-8; mode: texinfo; -*-
-@c This file is part of lilypond-web.texi and community.itexi
+@c This file is part of community.itexi
 
 @c when you add a new item, consider moving the lowest item(s)
 @c into news.itexi.
 
 @c keep two blank lines between news entries
 
-@c used for news about the upcoming release; see CG 10.2
+@c used for news about the upcoming release; see CG on Release Work
 
 @newsItem
-@subheading LilyPond 2.19.48 released  @emph{September 13, 2016}
+@subheading LilyPond 2.19.49 released  @emph{October 16, 2016}
 
 We are happy to announce the release of LilyPond
-2.19.48.  This release includes a number of enhancements, and contains some
+2.19.49.  This release includes a number of enhancements, and contains some
 work in progress.  You will have access to the very latest features, but
 some may be incomplete, and you may encounter bugs and crashes.  If you
 require a stable version of LilyPond, we recommend using the 2.18
diff --git a/Documentation/web/news-headlines.itexi b/Documentation/web/news-headlines.itexi
new file mode 100644 (file)
index 0000000..469eda1
--- /dev/null
@@ -0,0 +1,38 @@
+@c -*- coding: utf-8; mode: texinfo; -*-
+@c This file is used in the web.texi file.
+
+@c when you add a new item, consider removing the lowest item(s)
+
+@c used for news about the upcoming release; see CG on Release Work
+
+@c We use @uref for the actual website to link to individual news items
+@c by their <a> tags.  We use @ref for other output formats.
+
+@ifclear web_version
+  @c no anchor links, just link to News page
+
+@ref{News, LilyPond 2.19.49 released - @emph{October 16, 2016}}
+
+@ref{News, Two LilyPond projects in Google Summer of Code 2016 - @emph{April 23, 2016}}
+
+@ref{News, LilyPond 2.18.2 released! - @emph{March 23, 2014}}
+
+@ref{News, LilyPond 2.18.0 released! - @emph{December 29, 2013}}
+
+@end ifclear
+@ifset web_version
+  @c anchor links, link to individual news items by their <a> tag
+
+@uref{news.html#LilyPond-2_002e19_002e49-released-October-16_002c-2016,
+  LilyPond 2.19.49 released - @emph{October 16, 2016}}
+
+@uref{news.html#Two-LilyPond-projects-in-Google-Summer-of-Code-2016-April-23_002c-2016,
+  Two LilyPond projects in Google Summer of Code 2016 - @emph{April 23, 2016}}
+
+@uref{news.html#LilyPond-2_002e18_002e2-released_0021-March-23_002c-2014,
+  LilyPond 2.18.2 released! - @emph{March 23, 2014}}
+
+@uref{news.html#LilyPond-2_002e18_002e0-released_0021-December-29_002c-2013,
+  LilyPond 2.18.0 released! - @emph{December 29, 2013}}
+
+@end ifset
index 990d92ceaa87d5f905d15fa7435a245528693fbb..655c04f9ca7bd71d7de0d7e12b3b7c2335e2e657 100644 (file)
@@ -26,6 +26,18 @@ NOTE:
   * don't duplicate entries from news-front.itexi
 @end ignore
 
+@newsItem
+@subheading LilyPond 2.19.48 released  @emph{September 13, 2016}
+
+We are happy to announce the release of LilyPond
+2.19.48.  This release includes a number of enhancements, and contains some
+work in progress.  You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes.  If you
+require a stable version of LilyPond, we recommend using the 2.18
+version.
+
+@newsEnd
+
 @newsItem
 @subheading LilyPond 2.19.47 released  @emph{August 31, 2016}
 
index d6bc37fb5936ebfd6ffefd80f5b8027664e26d09..9a11bb1859595db06dcf5d5ee3979fd065a1168d 100644 (file)
@@ -43,8 +43,6 @@ RedirectMatch ^/bugs  /bug-reports
 #RedirectMatch ^/bugs  http://code.google.com/p/lilypond/issues/list
 # the new website already has an /authors
 #RedirectMatch ^/authors /doc/Documentation/topdocs/AUTHORS
-# the new website has news on the main page
-RedirectMatch ^/news    /
 RedirectMatch ^/stable    /doc/stable
 # the new website has a dedicated page for development.
 #RedirectMatch ^/development    /doc/development
index 5289304b1380a291c213c59fba7c1bd657db6493..69fc85ec77c346f1ca6fb5c142333fa08e2b3f47 100644 (file)
@@ -732,7 +732,7 @@ LilyPond 版本 @version{}
 
 @macro exampleImage{IMAGE-FILE}
 @html
-<div class="float-center">
+<div class="float-center example-image-wrapper">
   <a class="clickable" href="ly-examples/\IMAGE-FILE\.png">
     <img src="ly-examples/\IMAGE-FILE\-small.png" alt="\IMAGE-FILE\">
   </a>
index 5e3efa38cab44aa5dc1e06db618bf49d6bf1bfc3..78208bae211ae7bd7ea645f269b8bae3c96209cf 100644 (file)
@@ -68,7 +68,7 @@ discussing LilyPond.
 @ref{Publications}: what we wrote, and have had written about us.
 
 @item
-@ref{Old news}: an archive.
+@ref{News}: an archive.
 
 @item
 @ref{Attic}: announcements and changelogs from past versions.
@@ -1152,7 +1152,7 @@ any patch which introduced extra warnings.
 
 @node 旧闻
 @unnumberedsec 旧闻
-@translationof Old news
+@translationof News
 
 @divClass{heading-center}
 @warning{Many old announcements and changelogs can be found in
index b285145bd22e5346c7c4e4c73e1eaa5fe09be8d6..3b8dda69a876a800b6a607ce0577a0a5c728ef98 100644 (file)
@@ -176,13 +176,13 @@ build the documentation.
 
           sudo dnf install git
 
-     Also see *note (lilypond-notation)Starting with Git::.
+     Also see *note (lilypond-contributor)Starting with Git::.
 
    • To use the ‘lily-git.tcl’ GUI;
 
           sudo dnf install tk
 
-     See *note (lilypond-notation)lily-git::.
+     See *note (lilypond-contributor)lily-git::.
 
           Note: By default, when building LilyPond’s documentation,
           ‘pdfTeX’ is be used.  However ligatures (fi, fl, ff etc.)  may
@@ -232,13 +232,13 @@ LilyPond and build the documentation..
 
           sudo apt-get install git
 
-     Also see *note (lilypond-notation)Starting with Git::.
+     Also see *note (lilypond-contributor)Starting with Git::.
 
    • To use the ‘lily-git.tcl’ GUI;
 
           sudo apt-get install tk
 
-     Also see *note (lilypond-notation)lily-git::.
+     Also see *note (lilypond-contributor)lily-git::.
 
           Note: By default, when building LilyPond’s documentation,
           ‘pdfTeX’ is be used.  However ligatures (fi, fl, ff etc.)  may
@@ -280,13 +280,13 @@ the documentation.
 
           sudo zypper install git
 
-     Also see *note (lilypond-notation)Starting with Git::.
+     Also see *note (lilypond-contributor)Starting with Git::.
 
    • To use the ‘lily-git.tcl’ GUI;
 
           sudo zypper install tk
 
-     Also see *note (lilypond-notation)lily-git::.
+     Also see *note (lilypond-contributor)lily-git::.
 
           Note: By default, when building LilyPond’s documentation,
           ‘pdfTeX’ is be used.  However ligatures (fi, fl, ff etc.)  may
@@ -323,13 +323,13 @@ compile LilyPond and build the documentation.
 
           sudo apt-get install git
 
-     Also see *note (lilypond-notation)Starting with Git::.
+     Also see *note (lilypond-contributor)Starting with Git::.
 
    • To use the ‘lily-git.tcl’ GUI;
 
           sudo apt-get install tk
 
-     Also see *note (lilypond-notation)lily-git::.
+     Also see *note (lilypond-contributor)lily-git::.
 
           Note: By default, when building LilyPond’s documentation,
           ‘pdfTeX’ is be used.  However ligatures (fi, fl, ff etc.)  may
index 0aac6fc370a468f1bca907d369cd908027c986c9..ac7ad1d469bac66018b7a3c410c2ef93358bdbc7 100644 (file)
--- a/NEWS.txt
+++ b/NEWS.txt
@@ -1,6 +1,13 @@
 New features in 2.20 since 2.18
 *******************************
 
+   • A new ‘output-attributes’ grob property is now used for svg output
+     instead of the ‘id’ grob property.  It allows multiple attributes
+     to be defined as an association list.  For example, ‘#'((id . 123)
+     (class . foo) (data-whatever . “bar”))’ will produce the following
+     group tag in an SVG file: ‘<g id=“123” class=“foo”
+     data-whatever=“bar”> ... </g>’.
+
    • Slurs and phrasing slurs may now be started from individual notes
      in a chord.  Several simultanous slurs per ‘Voice’ need to be
      distinguished by ‘spanner-id’ setting.
diff --git a/VERSION b/VERSION
index 5a26a8bd8e090f722f335c92a82819190a9573e7..ae4cbbca6468f19b2a05ee3bdcdd1a0ecb1a94d5 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,7 +1,7 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=2
 MINOR_VERSION=19
-PATCH_LEVEL=48
+PATCH_LEVEL=49
 MY_PATCH_LEVEL=
 VERSION_STABLE=2.18.2
-VERSION_DEVEL=2.19.48
+VERSION_DEVEL=2.19.49
index 7595621102681f613dd1181ab397beb47e229be9..c7a34dea6dbcf42488897aac55410cbe18c84edb 100644 (file)
@@ -1,8 +1,8 @@
-\version "2.17.6"
+\version "2.19.49"
 
 \header {
   texidoc = "Shows the id property of a grob being set.  This should have
-no effect in the PS backend.
+no effect.
 "
 }
 
diff --git a/input/regression/ledger-lines-non-merging.ly b/input/regression/ledger-lines-non-merging.ly
new file mode 100644 (file)
index 0000000..ac3bbed
--- /dev/null
@@ -0,0 +1,32 @@
+\version "2.19.49"
+
+\header {
+  texidoc = "In some rare cases like these the
+extents of two ledger lines at the same vertical
+position in the same note column do not overlap
+horizontally, and they should not be merged into
+a single ledger line.
+See LSR 505: Displaying complex chords
+http://lsr.di.unimi.it/LSR/Item?id=505
+"
+}
+
+fixA = {
+  \once \override Stem.length = #11
+}
+
+fixB = {
+  \once \override NoteHead.X-offset = #1.7
+  \once \override Stem.length = #7
+  \once \override Stem.rotation = #'(45 0 0)
+  \once \override Stem.extra-offset = #'(-0.1 . -0.2)
+  \once \override Flag.style = #'no-flag
+  \once \override Accidental.extra-offset = #'(4 . -.1)
+}
+
+\relative c' {
+  % case 1
+  \pitchedTrill a'' \startTrillSpan a
+  % case 2
+  << { \fixA <b,,, d!>8 } \\ { \voiceThree \fixB dis } >> s
+}
diff --git a/input/regression/output-attributes.ly b/input/regression/output-attributes.ly
new file mode 100644 (file)
index 0000000..4068294
--- /dev/null
@@ -0,0 +1,15 @@
+\version "2.17.6"
+
+\header {
+  texidoc = "Shows the output-attributes property of a grob being set.
+This should have no effect in the Postscript backend.  In the SVG
+backend these settings should produce this group tag:
+@code{<g id=\"123\" class=\"foo\" data-whatever=\"bar\"> @dots{} </g>}
+"
+}
+
+{
+  \override NoteHead.output-attributes =
+  #'((id . 123) (class . foo) (data-whatever . "bar"))
+  c
+}
index 23a1cafae48730885fb7068346750e1f114ec35a..924c80e500221b2d7bcfc2a8fab0102fea2a7c3c 100644 (file)
@@ -189,11 +189,11 @@ Grob::get_print_stencil () const
           retval = Stencil (retval.extent_box (), expr);
         }
 
-      SCM id = get_property ("id");
-      if (scm_is_string (id))
+      SCM attributes = get_property ("output-attributes");
+      if (scm_is_pair (attributes))
         {
-          SCM expr = scm_list_3 (ly_symbol2scm ("id"),
-                                 id,
+          SCM expr = scm_list_3 (ly_symbol2scm ("output-attributes"),
+                                 attributes,
                                  retval.expr ());
 
           retval = Stencil (retval.extent_box (), expr);
@@ -816,16 +816,17 @@ ADD_INTERFACE (Grob,
                "cause "
                "color "
                "cross-staff "
-               "id "
                "extra-offset "
                "footnote-music "
                "forced-spacing "
                "horizontal-skylines "
+               "id "
                "interfaces "
                "layer "
                "meta "
                "minimum-X-extent "
                "minimum-Y-extent "
+               "output-attributes "
                "parenthesis-friends "
                "pure-Y-offset-in-progress "
                "rotation "
index 2fe2d7d9c3896e0b627dccc8f78ab51444007006..8aeb71aab2004dc661f4cac41278c2993299fb2d 100644 (file)
@@ -161,7 +161,9 @@ struct Ledger_request
   Interval max_head_extent_;
   int max_position_;
   vector <Head_data> heads_;
-  map <Real, Interval> ledger_extents_;
+  // The map's keys are vertical ledger line positions. The values are
+  // vectors of the x-extents of ledger lines.
+  map <Real, vector <Interval> > ledger_extents_;
   Ledger_request ()
   {
     max_ledger_extent_.set_empty ();
@@ -294,9 +296,7 @@ Ledger_line_spanner::print (SCM smob)
 
   // Iterate through ledger requests and the data they have about each
   // note head to generate the final extents for all ledger lines.
-  // Note heads that are different widths produce different ledger
-  // extents and these are merged so the widest extent prevails
-  // (the union of the intervals) for each ledger line.
+  // Note heads of different widths produce different ledger extents.
   for (Ledger_requests::iterator i (reqs.begin ());
        i != reqs.end (); i++)
     {
@@ -337,10 +337,25 @@ Ledger_line_spanner::print (SCM smob)
                         natural + downstem.
                       */
                     }
+                  // When the extents of two ledgers at the same
+                  // vertical position overlap horizontally, we merge
+                  // them together to produce a single stencil.  In rare
+                  // cases they do not overlap and we do not merge them.
+
                   if (lr.ledger_extents_.find (lpos) == lr.ledger_extents_.end ())
-                    lr.ledger_extents_[lpos] = x_extent;
+                    // Found nothing for this lpos.
+                    lr.ledger_extents_[lpos].push_back(x_extent);
                   else
-                    lr.ledger_extents_[lpos].unite (x_extent);
+                    {
+                      vector<Interval> &extents = lr.ledger_extents_.find (lpos)->second;
+                      for (vsize e = 0; e < extents.size (); e++)
+                        {
+                          if (intersection (extents[e], x_extent).is_empty ())
+                            extents.push_back (x_extent);
+                          else
+                            extents[e].unite (x_extent);
+                        }
+                    }
                 }
             }
         }
@@ -349,36 +364,34 @@ Ledger_line_spanner::print (SCM smob)
   // Create the stencil for the ledger line spanner by iterating
   // through the ledger requests and their data on ledger extents.
   Stencil ledgers;
-  Real ledgerlinethickness
-    = Staff_symbol::get_ledger_line_thickness (staff);
+  Real thickness = Staff_symbol::get_ledger_line_thickness (staff);
+  Real half_thickness = thickness * 0.5;
+  Interval y_extent = Interval (-half_thickness, half_thickness);
 
-  for (Ledger_requests::iterator i (reqs.begin ());
-       i != reqs.end (); i++)
+  for (Ledger_requests::iterator i (reqs.begin ()); i != reqs.end (); i++)
     {
       for (DOWN_and_UP (d))
         {
-          map<Real, Interval> &lex = i->second[d].ledger_extents_;
-          for (map<Real, Interval>::iterator k = lex.begin ();
+          map<Real, vector<Interval> > &lex = i->second[d].ledger_extents_;
+          for (map<Real, vector<Interval> >::iterator k = lex.begin ();
                k != lex.end (); k++)
             {
-              Real blotdiameter = ledgerlinethickness;
               Real lpos = k->first;
-              Interval x_extent = k->second;
-              Interval y_extent
-                = Interval (-0.5 * (ledgerlinethickness),
-                            +0.5 * (ledgerlinethickness));
-              Stencil ledger_line
-                = Lookup::round_filled_box (Box (x_extent, y_extent), blotdiameter);
-
-              ledger_line.translate_axis ( lpos * halfspace, Y_AXIS);
-              ledgers.add_stencil (ledger_line);
+              vector<Interval> &x_extents = k->second;
+
+              for (vsize n = 0; n < x_extents.size (); n++)
+                {
+                  // thickness (ledger line thickness) is the blot diameter
+                  Stencil line = Lookup::round_filled_box (Box (x_extents[n], y_extent),
+                                                           thickness);
+
+                  line.translate_axis (lpos * halfspace, Y_AXIS);
+                  ledgers.add_stencil (line);
+                }
             }
         }
     }
-
-  ledgers.translate_axis (-me->relative_coordinate (common_x, X_AXIS),
-                          X_AXIS);
-
+  ledgers.translate_axis (-me->relative_coordinate (common_x, X_AXIS), X_AXIS);
   return ledgers.smobbed_copy ();
 }
 
index ee12c53f3668a951fbf4160b86f30fcf5e74f047..1b9aa5181b4e2426c915e7db3106e52052b003c5 100644 (file)
@@ -944,7 +944,7 @@ stencil_traverser (PangoMatrix trans, SCM expr)
     return stencil_traverser (trans, scm_caddr (expr));
   else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("transparent-stencil")))
     return stencil_traverser (trans, scm_cadr (expr));
-  else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("id")))
+  else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("output-attributes")))
     return stencil_traverser (trans, scm_caddr (expr));
   else
     {
index 87e6496de778e2f3bfe3ed03fdfacd6a094ed47a..25fad0d8429ef6c327ac2a08b57f959789015827 100644 (file)
@@ -78,13 +78,14 @@ interpret_stencil_expression (SCM expr,
 
           return;
         }
-      else if (scm_is_eq (head, ly_symbol2scm ("id")))
+      else if (scm_is_eq (head, ly_symbol2scm ("output-attributes")))
         {
-          SCM id = scm_cadr (expr);
+          SCM attributes = scm_cadr (expr);
 
-          (*func) (func_arg, scm_list_2 (ly_symbol2scm ("start-enclosing-id-node"), id));
+          (*func) (func_arg, scm_list_2 (ly_symbol2scm ("start-group-node"),
+                                         ly_quote_scm (attributes)));
           interpret_stencil_expression (scm_caddr (expr), func, func_arg, o);
-          (*func) (func_arg, scm_list_1 (ly_symbol2scm ("end-enclosing-id-node")));
+          (*func) (func_arg, scm_list_1 (ly_symbol2scm ("end-group-node")));
 
           return;
         }
index 6424d756e5df23de2536f1474577d27864071615..2b11d39d38b937a0c954a281db4e147d3083111a 100644 (file)
@@ -23,7 +23,7 @@ That's it.  For more information, visit http://lilypond.org .
 
 %}
 
-\version "2.19.48"  % necessary for upgrading to future LilyPond versions.
+\version "2.19.49"  % necessary for upgrading to future LilyPond versions.
 
 \header{
   title = "A scale in LilyPond"
index 77503b4ff8c65bae67b8afb428767a2cd4803179..176075cd5c4423f8239b9ae99d00c249a533e6ed 100644 (file)
@@ -32,7 +32,7 @@ Good luck with LilyPond!  Happy engraving.
 
 %}
 
-\version "2.19.48"  % necessary for upgrading to future LilyPond versions.
+\version "2.19.49"  % necessary for upgrading to future LilyPond versions.
 
 \header{
   title = "A scale in LilyPond"
index 404ab880432de8b9dd17e044e2b6a86f36e89976..a9afe7b51f4bebc3561a3204d03f3f84eda2450d 100644 (file)
@@ -1 +1 @@
-See http://git.savannah.gnu.org/gitweb/?p=lilypond.git;a=log;h=refs/tags/release/2.19.48-1
+See http://git.savannah.gnu.org/gitweb/?p=lilypond.git;a=log;h=refs/tags/release/2.19.49-1
index 3f56d350509a774884f5ce9060a970186c2bac88..2a30437392a493b699e940b9b5c899617a73af4e 100644 (file)
@@ -1,32 +1,32 @@
-commit fd22d6c4d857718d0046dc2b8b802b9ddff13cb5
+commit d9b80e6ee9187ab71ffc2778c9b18c435f3ef73f
 Author: Phil Holmes <mail@philholmes.net>
-Date:   Tue Sep 13 11:09:38 2016 +0100
+Date:   Sun Oct 16 12:16:18 2016 +0100
 
     Release: bump Welcome versions.
 
 diff --git a/ly/Welcome-to-LilyPond-MacOS.ly b/ly/Welcome-to-LilyPond-MacOS.ly
-index 5768d8b..6424d75 100644
+index 6424d75..2b11d39 100644
 --- a/ly/Welcome-to-LilyPond-MacOS.ly
 +++ b/ly/Welcome-to-LilyPond-MacOS.ly
 @@ -23,7 +23,7 @@ That's it.  For more information, visit http://lilypond.org .
  
  %}
  
--\version "2.19.47"  % necessary for upgrading to future LilyPond versions.
-+\version "2.19.48"  % necessary for upgrading to future LilyPond versions.
+-\version "2.19.48"  % necessary for upgrading to future LilyPond versions.
++\version "2.19.49"  % necessary for upgrading to future LilyPond versions.
  
  \header{
    title = "A scale in LilyPond"
 diff --git a/ly/Welcome_to_LilyPond.ly b/ly/Welcome_to_LilyPond.ly
-index 0dae0bf..77503b4 100644
+index 77503b4..176075c 100644
 --- a/ly/Welcome_to_LilyPond.ly
 +++ b/ly/Welcome_to_LilyPond.ly
 @@ -32,7 +32,7 @@ Good luck with LilyPond!  Happy engraving.
  
  %}
  
--\version "2.19.47"  % necessary for upgrading to future LilyPond versions.
-+\version "2.19.48"  % necessary for upgrading to future LilyPond versions.
+-\version "2.19.48"  % necessary for upgrading to future LilyPond versions.
++\version "2.19.49"  % necessary for upgrading to future LilyPond versions.
  
  \header{
    title = "A scale in LilyPond"
index bb416b100e0b542cb4cbfb307abfb45b6c17183b..c49268baa236c6ad0bc5b40ca4255c673718e6b9 100644 (file)
--- a/po/eo.po
+++ b/po/eo.po
@@ -1,22 +1,23 @@
 # Esperanto translation of LilyPond.
-# Copyright (C) 2015 Free Software Foundation, Inc.
+# Copyright (C) 2015, 2016 Free Software Foundation, Inc.
 # This file is distributed under the same license as the lilypond package.
-# Felipe Castro <fefcas@gmail.com>, 2012, 2013, 2015
+# Felipe Castro <fefcas@gmail.com>, 2012, 2013, 2015, 2016.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: lilypond 2.19.16\n"
+"Project-Id-Version: lilypond 2.19.26\n"
 "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n"
-"POT-Creation-Date: 2015-02-28 14:31+0000\n"
-"PO-Revision-Date: 2015-03-03 10:33-0300\n"
+"POT-Creation-Date: 2015-08-27 10:48+0100\n"
+"PO-Revision-Date: 2016-10-12 22:17-0300\n"
 "Last-Translator: Felipe Castro <fefcas@gmail.com>\n"
 "Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
 "Language: eo\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Poedit 1.6.10\n"
+"X-Generator: Poedit 1.5.4\n"
 
 #: book_base.py:26
 #, python-format
@@ -167,7 +168,7 @@ msgstr "evitinda \\textstyle, nova sintakso \\key"
 
 #: convertrules.py:82 convertrules.py:1856 convertrules.py:2032
 #: convertrules.py:2175 convertrules.py:2506 convertrules.py:2801
-#: convertrules.py:3151 convertrules.py:3385 convertrules.py:3697
+#: convertrules.py:3151 convertrules.py:3388 convertrules.py:3700
 msgid "bump version for release"
 msgstr "aktualigi la version por eldono"
 
@@ -587,10 +588,10 @@ msgstr "Forigi oldaddlyrics"
 #: convertrules.py:2820
 msgid ""
 "oldaddlyrics is no longer supported. \n"
-"         Use addlyrics or lyrsicsto instead.\n"
+"         Use addlyrics or lyricsto instead.\n"
 msgstr ""
 "oldaddlyrics ne plu estas subtenata. \n"
-"        Uzu addlyrics aŭ lyricsto anstataŭe.\n"
+"         Uzu addlyrics aŭ lyricsto anstataŭe.\n"
 
 #: convertrules.py:2826
 msgid ""
@@ -830,15 +831,15 @@ msgstr "Nun 'consistent-broken-slope' estas traktata per la voko 'positions'.\n"
 msgid "input/regression/beam-broken-classic.ly shows how broken beams are now handled.\n"
 msgstr "input/regression/beam-broken-classic.ly montras kiel rompitaj vostligoj estas traktataj nun.\n"
 
-#: convertrules.py:3369
+#: convertrules.py:3372
 msgid "beamExceptions controls whole-measure beaming."
 msgstr "beamExceptions regas tut-mezuran vostligadon."
 
-#: convertrules.py:3606
+#: convertrules.py:3609
 msgid "Flag.transparent and Flag.color inherit from Stem"
 msgstr "Flag.transparent kaj Flag.color heredas el Stem"
 
-#: convertrules.py:3672
+#: convertrules.py:3675
 msgid "Staff-padding now controls the distance to the baseline, not the nearest point."
 msgstr "Liniaro-ŝovo nun regas la distancon al la bazlinio, ne al la plej proksima punkto."
 
@@ -944,12 +945,12 @@ msgstr "Antaŭsigna aliiga okto aperas por neekzistanta aliigo n-ro %s, disponeb
 msgid "Unable to find instrument for ID=%s\n"
 msgstr "Ne eblas trovi instrumenton por ID=%s\n"
 
-#: abc2ly.py:1386 convert-ly.py:85 lilypond-book.py:122 midi2ly.py:1044
+#: abc2ly.py:1389 convert-ly.py:85 lilypond-book.py:122 midi2ly.py:1044
 #, python-format
 msgid "%s [OPTION]... FILE"
 msgstr "%s [MODIFILO]... DOSIERO"
 
-#: abc2ly.py:1387
+#: abc2ly.py:1390
 #, python-format
 msgid ""
 "abc2ly converts ABC music files (see\n"
@@ -958,29 +959,29 @@ msgstr ""
 "abc2ly konvertas muzikajn dosierojn ABC (vidu\n"
 "%s) al LilyPond-kodumaro.\n"
 
-#: abc2ly.py:1395 convert-ly.py:92 etf2ly.py:1208 lilypond-book.py:231
-#: midi2ly.py:1095 musicxml2ly.py:2590 main.cc:183
+#: abc2ly.py:1398 convert-ly.py:92 etf2ly.py:1208 lilypond-book.py:231
+#: midi2ly.py:1095 musicxml2ly.py:2590 main.cc:184
 msgid "show version number and exit"
 msgstr "montri versi-numeron kaj eliri"
 
-#: abc2ly.py:1398 convert-ly.py:96 etf2ly.py:1204 lilypond-book.py:140
-#: midi2ly.py:1062 musicxml2ly.py:2572 main.cc:162
+#: abc2ly.py:1401 convert-ly.py:96 etf2ly.py:1204 lilypond-book.py:140
+#: midi2ly.py:1062 musicxml2ly.py:2572 main.cc:163
 msgid "show this help and exit"
 msgstr "montri tiun ĉi helpon kaj eliri"
 
-#: abc2ly.py:1401 etf2ly.py:1209 midi2ly.py:1071
+#: abc2ly.py:1404 etf2ly.py:1209 midi2ly.py:1071
 msgid "write output to FILE"
 msgstr "skribi eligon al DOSIERO"
 
-#: abc2ly.py:1404
+#: abc2ly.py:1407
 msgid "be strict about success"
 msgstr "esti severa pri sukceso"
 
-#: abc2ly.py:1407
+#: abc2ly.py:1410
 msgid "preserve ABC's notion of beams"
 msgstr "konservi la nocion de vostligoj de ABC"
 
-#: abc2ly.py:1410
+#: abc2ly.py:1413
 msgid "suppress progress messages"
 msgstr "formeti mesaĝojn pri progreso"
 
@@ -988,8 +989,8 @@ msgstr "formeti mesaĝojn pri progreso"
 #. "Report bugs in English via %s",
 #. or if there is a LilyPond users list or forum in your language
 #. "Report bugs in English via %s or in YOUR_LANG via URI"
-#: abc2ly.py:1413 convert-ly.py:157 etf2ly.py:1218 lilypond-book.py:258
-#: midi2ly.py:1107 musicxml2ly.py:2674 main.cc:317
+#: abc2ly.py:1416 convert-ly.py:157 etf2ly.py:1218 lilypond-book.py:258
+#: midi2ly.py:1107 musicxml2ly.py:2674 main.cc:318
 #, c-format, python-format
 msgid "Report bugs via %s"
 msgstr "Raportu program-misojn per %s (angle)"
@@ -1040,7 +1041,7 @@ msgid "Print log messages according to LOGLEVEL (NONE, ERROR, WARNING, PROGRESS
 msgstr "Montri protokolajn mesaĝojn laŭ PROTOKOLNIVELO (NONE, ERROR, WARNING, PROGRESS (apriore), DEBUG)"
 
 #: convert-ly.py:111 lilypond-book.py:163 lilypond-book.py:181
-#: musicxml2ly.py:2629 main.cc:176
+#: musicxml2ly.py:2629 main.cc:177
 msgid "LOGLEVEL"
 msgstr "PROTOKOLNIVELO"
 
@@ -1072,7 +1073,7 @@ msgid "make a numbered backup [default: filename.ext~]"
 msgstr "fari numeritan savkopion [aprioras: dosiernomo.suf~]"
 
 #: convert-ly.py:152 etf2ly.py:1212 lilypond-book.py:234 midi2ly.py:1096
-#: main.cc:185
+#: main.cc:186
 msgid "show warranty and copyright"
 msgstr "montri garantion kaj kopirajton"
 
@@ -1093,17 +1094,17 @@ msgstr "Ĉeso ĉe lasta sukcesa regulo"
 msgid "Processing `%s'... "
 msgstr "Procezado de '%s'... "
 
-#: convert-ly.py:368
+#: convert-ly.py:366
 #, python-format
 msgid "%s: Unable to open file"
 msgstr "%s: Ne eblas malfermi dosieron"
 
-#: convert-ly.py:374
+#: convert-ly.py:372
 #, python-format
 msgid "%s: Unable to determine version.  Skipping"
 msgstr "%s: ne eblas determini version.  Preterpase"
 
-#: convert-ly.py:380
+#: convert-ly.py:378
 #, python-format
 msgid ""
 "%s: Invalid version string `%s' \n"
@@ -1112,7 +1113,7 @@ msgstr ""
 "%s: Malvalida versi-ĉeno '%s' \n"
 "Validaj versi-ĉenoj konsistas el tri numeroj, apartitaj per punktoj, t.e. '2.8.12'"
 
-#: convert-ly.py:386
+#: convert-ly.py:384
 #, python-format
 msgid "There was %d error."
 msgid_plural "There were %d errors."
@@ -1133,7 +1134,7 @@ msgstr ""
 "Coda Music Technology.  etf2ly konvertas subaron de ETF al tujuzebla dosiero LilyPond.\n"
 
 #: etf2ly.py:1210 midi2ly.py:1067 midi2ly.py:1072 musicxml2ly.py:2659
-#: main.cc:168 main.cc:180
+#: main.cc:169 main.cc:181
 msgid "FILE"
 msgstr "DOSIERO"
 
@@ -1171,7 +1172,7 @@ msgid "add DIR to include path"
 msgstr "aldoni UJOn al la inkluziva vojo"
 
 #: lilypond-book.py:143 lilypond-book.py:150 lilypond-book.py:169
-#: lilypond-book.py:187 lilypond-book.py:208 lilypond-book.py:214 main.cc:167
+#: lilypond-book.py:187 lilypond-book.py:208 lilypond-book.py:214 main.cc:168
 msgid "DIR"
 msgstr "UJO"
 
@@ -1184,7 +1185,7 @@ msgid "PAD"
 msgstr "ŜOVO"
 
 #: lilypond-book.py:157
-msgid "pad left side of music to align music inspite of uneven bar numbers (in mm)"
+msgid "pad left side of music to align music in spite of uneven bar numbers (in mm)"
 msgstr "ŝovi maldekstran flankon de muziko por rektigi ĝin malgraŭ la ne egalaj mezur-numeroj (en mm)"
 
 #: lilypond-book.py:162
@@ -1721,7 +1722,7 @@ msgstr "formetita averto: %s"
 msgid "accidental typesetting list must begin with context-name: %s"
 msgstr "kromsigna kompostada listo devas komenci per kuntekst-nomo': %s"
 
-#: accidental-engraver.cc:210
+#: accidental-engraver.cc:207
 #, c-format
 msgid "procedure or context-name expected for accidental rule, found %s"
 msgstr "proceduro aŭ kuntekst-nomo estis atendata por kromsigna regulo, trovite %s"
@@ -1735,7 +1736,7 @@ msgstr "Ne eblis trovi 'glyph-name' por aliigo %s"
 msgid "natural alteration glyph not found"
 msgstr "signobildo de natura aliigo ne estis trovata"
 
-#: all-font-metrics.cc:149
+#: all-font-metrics.cc:159
 #, c-format
 msgid "cannot find font: `%s'"
 msgstr "ne eblas trovi tiparon: '%s'"
@@ -1748,11 +1749,6 @@ msgstr "argumento de \\applycontext ne estas proceduro"
 msgid "no heads for arpeggio found?"
 msgstr "ĉu neniu kapo por arpeĝo trovite?"
 
-#: auto-change-iterator.cc:74 change-iterator.cc:72
-#, c-format
-msgid "cannot change, already in translator: %s"
-msgstr "ne eblas ŝanĝi, jam estas en tradukilo: %s"
-
 #: axis-group-engraver.cc:149
 msgid "Axis_group_engraver: vertical group already has a parent"
 msgstr "Axis_group_engraver: vertikala grupo jam havas praulon"
@@ -1765,12 +1761,12 @@ msgstr "ĉu estas du 'Axis_group_engraver'?"
 msgid "removing this vertical group"
 msgstr "forigado de tiu ĉi vertikala grupo"
 
-#: axis-group-interface.cc:714
+#: axis-group-interface.cc:716
 #, c-format
 msgid "\"%s\" is not a valid outside-staff-placement-directive"
 msgstr "\"%s\" ne estas valida 'outside-staff-placement-directive'"
 
-#: axis-group-interface.cc:786
+#: axis-group-interface.cc:788
 msgid "an outside-staff object should have a direction, defaulting to up"
 msgstr "objekto 'outside-staff' devas havi direkton, ni aprioras supren"
 
@@ -1800,11 +1796,11 @@ msgid "beam was started here"
 msgstr "vostligo estis ekigata ĉi tie"
 
 #. We are completely screwed.
-#: beam-quanting.cc:839
+#: beam-quanting.cc:850
 msgid "no viable initial configuration found: may not find good beam slope"
 msgstr "neniu realigebla ek-agordado estis trovata: eble ne estos trovata bona vostliga inklino"
 
-#: beam.cc:181
+#: beam.cc:183
 msgid "removing beam with no stems"
 msgstr "ni forigas vostligon sen stangoj"
 
@@ -1814,22 +1810,24 @@ msgid "cannot change `%s' to `%s'"
 msgstr "ne eblas ŝanĝi '%s' al '%s'"
 
 #. FIXME: constant error message.
-#: change-iterator.cc:93
+#: change-iterator.cc:67
 msgid "cannot find context to switch to"
 msgstr "ne eblas trovi kuntekston por alternative uzi"
 
+#. No enclosing context was found because the iterator's immediate
+#. context is the kind that was sought.
 #. We could change the current translator's id, but that would make
 #. errors hard to catch.
 #.
 #. last->translator_id_string () = get_change
 #. ()->change_to_id_string ();
-#: change-iterator.cc:102
+#: change-iterator.cc:78
 #, c-format
 msgid "not changing to same context type: %s"
 msgstr "ni ne ŝanĝas al sama kunteksta tipo: %s"
 
-#. FIXME: uncomprehensable message
-#: change-iterator.cc:106
+#. FIXME: incomprehensible message
+#: change-iterator.cc:82
 msgid "none of these in my family"
 msgstr "neniu el tiuj ĉi en mia familio"
 
@@ -1868,22 +1866,22 @@ msgstr "ne eblas trovi lini-salton kiu kontentigas limigojn"
 msgid "need symbol arguments for \\override and \\revert"
 msgstr "necesas simbol-argumentoj por \\override kaj \\revert"
 
-#: context.cc:143
+#: context.cc:144
 #, c-format
 msgid "cannot find or create new `%s'"
 msgstr "ne eblas trovi aŭ krei novan '%s'"
 
-#: context.cc:222
+#: context.cc:223
 #, c-format
 msgid "cannot find or create `%s' called `%s'"
 msgstr "ne eblas trovi aŭ krei '%s' nomata '%s'"
 
-#: context.cc:419
+#: context.cc:416
 #, c-format
 msgid "cannot find or create: `%s'"
 msgstr "ne eblas trovi aŭ krei: '%s'"
 
-#: context.cc:433
+#: context.cc:430
 #, c-format
 msgid "cannot find or create new Bottom = \"%s\""
 msgstr "ne eblas trovi aŭ krei novan Bottom = \"%s\""
@@ -1893,20 +1891,20 @@ msgstr "ne eblas trovi aŭ krei novan Bottom = \"%s\""
 msgid "custos `%s' not found"
 msgstr "custos '%s' ne estis trovata"
 
-#: dispatcher.cc:83
+#: dispatcher.cc:82
 msgid "Event class should be a list"
 msgstr "Event-klaso devas esti listo"
 
-#: dispatcher.cc:166
+#: dispatcher.cc:165
 #, c-format
 msgid "Junking event: %s"
 msgstr "Rubaĵa evento: %s"
 
-#: dispatcher.cc:271
+#: dispatcher.cc:279
 msgid "Attempting to remove nonexisting listener."
 msgstr "Provo forigi neekzistantan aŭdanton."
 
-#: dispatcher.cc:297
+#: dispatcher.cc:305
 msgid "Already listening to dispatcher, ignoring request"
 msgstr "Jam aŭdadas la disdonilon, ni preteratentas la peton"
 
@@ -1915,7 +1913,7 @@ msgstr "Jam aŭdadas la disdonilon, ni preteratentas la peton"
 msgid "dot `%s' not found"
 msgstr "punkto '%s' ne estis trovata"
 
-#: dynamic-engraver.cc:168
+#: dynamic-engraver.cc:169
 #, c-format
 msgid ""
 "unknown crescendo style: %s\n"
@@ -1924,7 +1922,7 @@ msgstr ""
 "nekonata tipo de 'crescendo': %s\n"
 "ni uzas apriore pinĉil-forman."
 
-#: dynamic-engraver.cc:233 slur-proto-engraver.cc:119
+#: dynamic-engraver.cc:234 slur-proto-engraver.cc:119
 #, c-format
 msgid "unterminated %s"
 msgstr "nefinita %s"
@@ -1952,22 +1950,22 @@ msgstr "nefinigita episemo"
 msgid "unterminated extender"
 msgstr "nefinigita etendigilo"
 
-#: flag.cc:134
+#: flag.cc:133
 #, c-format
 msgid "flag `%s' not found"
 msgstr "flago '%s' ne estis trovata"
 
-#: flag.cc:154
+#: flag.cc:153
 #, c-format
 msgid "flag stroke `%s' not found"
 msgstr "flag-streko '%s' ne estis trovata"
 
-#: font-config-scheme.cc:151 font-config.cc:53
+#: font-config-scheme.cc:151 font-config.cc:82
 #, c-format
 msgid "failed adding font directory: %s"
 msgstr "malsukceso dum aldonado de tipara dosierujo: %s"
 
-#: font-config-scheme.cc:153 font-config.cc:55
+#: font-config-scheme.cc:153 font-config.cc:84
 #, c-format
 msgid "Adding font directory: %s"
 msgstr "Aldonado de tipara dosierujo: %s"
@@ -1986,7 +1984,17 @@ msgstr "Aldonado de tipar-dosiero: %s"
 msgid "Initializing FontConfig..."
 msgstr "Ekigo de FontConfig..."
 
-#: font-config.cc:58
+#: font-config.cc:70
+#, c-format
+msgid "failed to add fontconfig configuration file `%s'"
+msgstr "malsukceso dum aldonado de tipar-agorda dosiero (fontconfig) '%s'"
+
+#: font-config.cc:73
+#, c-format
+msgid "Adding fontconfig configuration file: %s"
+msgstr "Aldonado de tipar-agorda dosiero (fontconfig): %s"
+
+#: font-config.cc:86
 msgid "Building font database..."
 msgstr "Konstruado de tipara datumbazo..."
 
@@ -2050,12 +2058,12 @@ msgstr "Nekonata interfaco '%s'"
 msgid "Grob `%s' has no interface for property `%s'"
 msgstr "La grob '%s' havas neniun interfacon por la atributo '%s'"
 
-#: grob-property.cc:35
+#: grob-property.cc:33
 #, c-format
 msgid "%d: %s"
 msgstr "%d: %s"
 
-#: grob.cc:481
+#: grob.cc:492
 #, c-format
 msgid "ignored infinite %s-offset"
 msgstr "preteratentis senliman %s-deŝovon"
@@ -2084,7 +2092,7 @@ msgstr "forigo de nefinigita streketo"
 msgid "unterminated hyphen; removing"
 msgstr "nefinigita streketo; ni forigas"
 
-#: includable-lexer.cc:71 lily-guile.cc:91 lily-parser-scheme.cc:108
+#: includable-lexer.cc:71 lily-guile.cc:92 lily-parser-scheme.cc:108
 #, c-format
 msgid "cannot find file: `%s'"
 msgstr "ne eblas trovi la dosieron: '%s'"
@@ -2094,11 +2102,11 @@ msgstr "ne eblas trovi la dosieron: '%s'"
 msgid "(search path: `%s')"
 msgstr "(serĉvojo: '%s')"
 
-#: input.cc:138 source-file.cc:177 source-file.cc:192
+#: input.cc:138 source-file.cc:180 source-file.cc:195
 msgid "position unknown"
 msgstr "nekonata pozicio"
 
-#: key-engraver.cc:198
+#: key-engraver.cc:197
 msgid "Incomplete keyAlterationOrder for key signature"
 msgstr "Nekompleta keyAlterationOrder por antaŭsigno"
 
@@ -2139,21 +2147,21 @@ msgstr "ni preteratentas paŭzon: kantligaturo ne povas enhavi paŭzon"
 msgid "ligature was started here"
 msgstr "kantligaturo estis komencata ĉi tie"
 
-#: lily-guile.cc:93
+#: lily-guile.cc:94
 #, c-format
 msgid "(load path: `%s')"
 msgstr "(ŝarg-vojo: '%s')"
 
-#: lily-guile.cc:412
+#: lily-guile.cc:413
 #, c-format
 msgid "cannot find property type-check for `%s' (%s)."
 msgstr "ne eblas trovi la econ 'type-check' por '%s' (%s)."
 
-#: lily-guile.cc:415
+#: lily-guile.cc:416
 msgid "perhaps a typing error?"
 msgstr "eble tajperaro?"
 
-#: lily-guile.cc:422
+#: lily-guile.cc:423
 msgid "skipping assignment"
 msgstr "ni preterpasas asignon"
 
@@ -2162,20 +2170,33 @@ msgstr "ni preterpasas asignon"
 msgid "type check for `%s' failed; value `%s' must be of type `%s'"
 msgstr "kontrolo pri tipo por '%s' fiaskis; valoro '%s' devas esti el tipo '%s'"
 
-#: lily-lexer.cc:249
+#. Uh oh.  unsmob<T> delivered 0, yet
+#. unsmob<T> delivers true.  This means that unsmob<T> is a
+#. matching check from a base class of T, but var is of an
+#. incompatible derived type.
+#: lily-guile.cc:462
+msgid "Wrong kind of "
+msgstr "Malkorekta tipo de"
+
+#: lily-lexer.cc:251
 msgid "include files are not allowed in safe mode"
 msgstr "inkluziv-dosieroj ne estas permesataj en sekura reĝimo"
 
-#: lily-lexer.cc:276
+#: lily-lexer.cc:278
 #, c-format
 msgid "identifier name is a keyword: `%s'"
 msgstr "identigila nomo estas ŝlosilvorto: '%s'"
 
-#: lily-lexer.cc:297 lily-lexer.cc:310
+#: lily-lexer.cc:299 lily-lexer.cc:312
 #, c-format
 msgid "%s:EOF"
 msgstr "%s:EOF"
 
+#: lily-modules.cc:81
+#, c-format
+msgid "Uninitialized variable `%s' in module (%s)"
+msgstr "Ne-ekigita variablo '%s' en modulo (%s)"
+
 #: lily-parser-scheme.cc:80
 #, c-format
 msgid "Changing working directory to: `%s'"
@@ -2196,19 +2217,19 @@ msgstr "ne eblas trovi dosieron init: '%s'"
 msgid "Processing `%s'"
 msgstr "Procezado de '%s'"
 
-#: lily-parser-scheme.cc:209
+#: lily-parser-scheme.cc:210
 msgid "ly:parser-parse-string is only valid with a new parser.  Use ly:parser-include-string instead."
 msgstr "ly:parser-parse-string nur estas valida kun nova analizilo.  Uzu ly:parser-include-string anstataŭe."
 
-#: lily-parser-scheme.cc:240
+#: lily-parser-scheme.cc:241
 msgid "ly:parse-string-expression is only valid with a new parser.  Use ly:parser-include-string instead."
 msgstr "ly:parser-string-expression nur estas valida kun nova analizilo.  Uzu ly:parser-include-string anstataŭe."
 
-#: lily-parser.cc:107
+#: lily-parser.cc:106
 msgid "Parsing..."
 msgstr "Analizado..."
 
-#: lookup.cc:181
+#: lookup.cc:178
 #, c-format
 msgid "Not drawing a box with negative dimension, %.2f by %.2f."
 msgstr "Ni ne desegnas skatolon kun negativan dimension, %.2f oble %.2f."
@@ -2217,12 +2238,12 @@ msgstr "Ni ne desegnas skatolon kun negativan dimension, %.2f oble %.2f."
 msgid "argument of \\lyricsto should contain Lyrics context"
 msgstr "argumento de \\lyricsto devas enhavi kuntekston Lyrics"
 
-#: lyric-combine-music-iterator.cc:349
+#: lyric-combine-music-iterator.cc:344
 #, c-format
 msgid "cannot find %s `%s'"
 msgstr "ne eblas trovi %s '%s'"
 
-#: main.cc:105
+#: main.cc:106
 #, c-format
 msgid ""
 "This program is free software.  It is covered by the GNU General Public\n"
@@ -2234,7 +2255,7 @@ msgstr ""
 "Publika Permeso kaj vi estas bonvena ŝanĝi ĝin kaj/aŭ re-disdoni kopiojn de ĝi\n"
 "laŭ iaj kondiĉoj.  Lanĉu kiel '%s --warranty' por pli da informo.\n"
 
-#: main.cc:111
+#: main.cc:112
 msgid ""
 "    This program is free software; you can redistribute it and/or\n"
 "modify it under the terms of the GNU General Public License as \n"
@@ -2266,11 +2287,11 @@ msgstr ""
 "Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
 "Boston, MA 02111-1307, USA.\n"
 
-#: main.cc:149
+#: main.cc:150
 msgid "SYM[=VAL]"
 msgstr "SIM[=VAL]"
 
-#: main.cc:150
+#: main.cc:151
 msgid ""
 "set Scheme option SYM to VAL (default: #t).\n"
 "Use -dhelp for help."
@@ -2278,45 +2299,45 @@ msgstr ""
 "difini modifilon Scheme SIM al VAL (apriore: *t).\n"
 "Uzu -dhelp por ricevi helpon."
 
-#: main.cc:154
+#: main.cc:155
 msgid "EXPR"
 msgstr "ESPR"
 
-#: main.cc:154
+#: main.cc:155
 msgid "evaluate scheme code"
 msgstr "analizi kodumaron de scheme"
 
 #. Bug in option parser: --output =foe is taken as an abbreviation
 #. for --output-format.
-#: main.cc:157
+#: main.cc:158
 msgid "FORMATs"
 msgstr "FORMOj"
 
-#: main.cc:157
+#: main.cc:158
 msgid "dump FORMAT,...  Also as separate options:"
 msgstr "ŝuti FORMOn,...  Ankaŭ kiel apartaj modifiloj:"
 
-#: main.cc:158
+#: main.cc:159
 msgid "generate PDF (default)"
 msgstr "generi PDF (apriore)"
 
-#: main.cc:159
+#: main.cc:160
 msgid "generate PNG"
 msgstr "generi PNG"
 
-#: main.cc:160
+#: main.cc:161
 msgid "generate PostScript"
 msgstr "generi PostScript"
 
-#: main.cc:161
+#: main.cc:162
 msgid "generate big PDF files"
 msgstr "generi grandajn PDF-dosierojn"
 
-#: main.cc:164
+#: main.cc:165
 msgid "FIELD"
 msgstr "KAMPO"
 
-#: main.cc:164
+#: main.cc:165
 msgid ""
 "dump header field FIELD to file\n"
 "named BASENAME.FIELD"
@@ -2324,19 +2345,19 @@ msgstr ""
 "ŝuti kap-kampo KAMPO al dosiero\n"
 "nomata BAZNOMO.KAMPO"
 
-#: main.cc:167
+#: main.cc:168
 msgid "add DIR to search path"
 msgstr "aldoni UJOn al la serĉvojo"
 
-#: main.cc:168
+#: main.cc:169
 msgid "use FILE as init file"
 msgstr "uzi DOSIEROn kiel ekig-dosieron"
 
-#: main.cc:171
+#: main.cc:172
 msgid "USER, GROUP, JAIL, DIR"
 msgstr "UZANTO, GRUPO, KAĜO, UJO"
 
-#: main.cc:171
+#: main.cc:172
 msgid ""
 "chroot to JAIL, become USER:GROUP\n"
 "and cd into DIR"
@@ -2344,7 +2365,7 @@ msgstr ""
 "chroot al KAĜO, fariĝi UZANTO:GRUPO\n"
 "kaj cd en UJOn"
 
-#: main.cc:176
+#: main.cc:177
 msgid ""
 "print log messages according to LOGLEVEL.  Possible values are:\n"
 "NONE, ERROR, WARNING, BASIC, PROGRESS, INFO (default) and DEBUG."
@@ -2352,24 +2373,24 @@ msgstr ""
 "printi protokol-mesaĝojn laŭ PROTOKOLNIVELO.  Eblaj valoroj estas:\n"
 "NONE, ERROR, WARNING, BASIC, PROGRESS, INFO (apriore) kaj DEBUG."
 
-#: main.cc:180
+#: main.cc:181
 msgid "write output to FILE (suffix will be added)"
 msgstr "skribi eligon al DOSIERO (sufikso estos aldonata)"
 
-#: main.cc:181
+#: main.cc:182
 msgid "relocate using directory of lilypond program"
 msgstr "relokigi uzante dosierujon de la programo lilypond"
 
-#: main.cc:182
+#: main.cc:183
 msgid "no progress, only error messages (equivalent to loglevel=ERROR)"
 msgstr "sen progreso, nur eraraj mesaĝoj (egale al loglevel=ERROR)"
 
-#: main.cc:184
+#: main.cc:185
 msgid "be verbose (equivalent to loglevel=DEBUG)"
 msgstr "esti detalema (egale al loglevel=DEBUG)"
 
 #. Do not update the copyright years here, run `make grand-replace'
-#: main.cc:263
+#: main.cc:264
 #, c-format
 msgid ""
 "Copyright (c) %s by\n"
@@ -2379,84 +2400,84 @@ msgstr ""
 "%s  kaj aliaj."
 
 #. No version number or newline here.  It confuses help2man.
-#: main.cc:301
+#: main.cc:302
 #, c-format
 msgid "Usage: %s [OPTION]... FILE..."
 msgstr "Uzado: %s [MODIFILO]... DOSIERO..."
 
-#: main.cc:303
+#: main.cc:304
 msgid "Typeset music and/or produce MIDI from FILE."
 msgstr "Kompostado de muziko kaj/aŭ produktado de MIDI el DOSIERO."
 
-#: main.cc:305
+#: main.cc:306
 msgid "LilyPond produces beautiful music notation."
 msgstr "LilyPond produktas belan muzikan notadon."
 
-#: main.cc:307
+#: main.cc:308
 #, c-format
 msgid "For more information, see %s"
 msgstr "Por pli da informo, vidu %s"
 
-#: main.cc:309
+#: main.cc:310
 msgid "Options:"
 msgstr "Modifiloj:"
 
-#: main.cc:376
+#: main.cc:377
 #, c-format
 msgid "expected %d arguments with jail, found: %u"
 msgstr "estis atendataj %d argumentoj kun kaĝo, estis trovataj: %u"
 
-#: main.cc:390
+#: main.cc:391
 #, c-format
 msgid "no such user: %s"
 msgstr "neniu tia uzanto: %s"
 
-#: main.cc:392
+#: main.cc:393
 #, c-format
 msgid "cannot get user id from user name: %s: %s"
 msgstr "ne eblas preni uzanto-id el uzant-nomo: %s: %s"
 
-#: main.cc:407
+#: main.cc:408
 #, c-format
 msgid "no such group: %s"
 msgstr "neniu tia grupo: %s"
 
-#: main.cc:409
+#: main.cc:410
 #, c-format
 msgid "cannot get group id from group name: %s: %s"
 msgstr "ne eblas preni grupo-id el grup-nomo: %s: %s"
 
-#: main.cc:417
+#: main.cc:418
 #, c-format
 msgid "cannot chroot to: %s: %s"
 msgstr "ne eblas apliki 'chroot' al: %s: %s"
 
-#: main.cc:424
+#: main.cc:425
 #, c-format
 msgid "cannot change group id to: %d: %s"
 msgstr "ne eblas ŝanĝi grupo-id al: %d: %s"
 
-#: main.cc:430
+#: main.cc:431
 #, c-format
 msgid "cannot change user id to: %d: %s"
 msgstr "ne eblas ŝanĝi uzant-id al: %d: %s"
 
-#: main.cc:436
+#: main.cc:437
 #, c-format
 msgid "cannot change working directory to: %s: %s"
 msgstr "ne eblas ŝanĝi aktualan dosierujon al: %s: %s"
 
-#: main.cc:825
+#: main.cc:826
 #, c-format
 msgid "exception caught: %s"
 msgstr "kaptita krom-okazo: %s"
 
 #. FIXME: constant error message.
-#: mark-engraver.cc:156
+#: mark-engraver.cc:150
 msgid "rehearsalMark must have integer value"
 msgstr "'rehearsalMark' devas havis entjeran valoron"
 
-#: mark-engraver.cc:162
+#: mark-engraver.cc:156
 msgid "mark label must be a markup object"
 msgstr "mark-etikedo devas estis markada objekto"
 
@@ -2508,7 +2529,7 @@ msgstr ""
 msgid "unexpected case fall-through"
 msgstr "fiasko pro neatendita okazo"
 
-#: midi-control-function-performer.cc:109 staff-performer.cc:152
+#: midi-control-function-performer.cc:107 staff-performer.cc:153
 #, c-format
 msgid "ignoring out-of-range value change for MIDI property `%s'"
 msgstr "ni preteratentas valorajn ŝanĝojn for de intervalo por la atributo de MIDI '%s'"
@@ -2544,7 +2565,7 @@ msgstr "Kalkulado de paĝsaltoj..."
 msgid "usable-duration-logs must be a non-empty list.  Falling back to whole rests."
 msgstr "'usable-duration-logs' devas esti ne-malplena listo.  Ni revenas al plenaj paŭzoj."
 
-#: music.cc:149
+#: music.cc:150
 #, c-format
 msgid "octave check failed; expected \"%s\", found: \"%s\""
 msgstr "kontrolo de okto fiaskis; atendite \"%s\", trovite: \"%s\""
@@ -2578,37 +2599,37 @@ msgstr "neniu el notkapoj '%s' aŭ '%s' estis trovataj"
 msgid "NoteEvent without pitch"
 msgstr "NoteEvent sen tonalto"
 
-#: open-type-font.cc:46
+#: open-type-font.cc:45
 #, c-format
 msgid "cannot allocate %lu bytes"
 msgstr "ne eblas rezervi %lu bajtojn"
 
-#: open-type-font.cc:50
+#: open-type-font.cc:49
 #, c-format
 msgid "cannot load font table: %s"
 msgstr "ne eblas ŝargi je tipara tabelo: %s"
 
-#: open-type-font.cc:55
+#: open-type-font.cc:54
 #, c-format
 msgid "FreeType error: %s"
 msgstr "Eraro de FreeType: %s"
 
-#: open-type-font.cc:112
+#: open-type-font.cc:115
 #, c-format
 msgid "unsupported font format: %s"
 msgstr "ne subtenata formo de tiparo: %s"
 
-#: open-type-font.cc:114
+#: open-type-font.cc:117
 #, c-format
 msgid "error reading font file %s: %s"
 msgstr "eraro dum legado de tipara dosiero %s: %s"
 
-#: open-type-font.cc:189
+#: open-type-font.cc:192
 #, c-format
 msgid "FT_Get_Glyph_Name () Freetype error: %s"
 msgstr "Eraro de FT_Get_Glyph_Name () en Freetype: %s"
 
-#: open-type-font.cc:337 pango-font.cc:257
+#: open-type-font.cc:340 pango-font.cc:258
 #, c-format
 msgid "FT_Get_Glyph_Name () error: %s"
 msgstr "Eraro de FT_Get_Glyph_Name (): %s"
@@ -2646,16 +2667,16 @@ msgstr "provado de %d sistemoj"
 msgid "best score for this sys-count: %f"
 msgstr "plej bona poento por tiu ĉi 'sys-count': %f"
 
-#: optimal-page-breaking.cc:216 page-turn-page-breaking.cc:248
+#: optimal-page-breaking.cc:216 page-turn-page-breaking.cc:249
 #: paper-score.cc:156
 msgid "Drawing systems..."
 msgstr "Desegnado de sistemoj..."
 
-#: output-def.cc:230
+#: output-def.cc:229
 msgid "margins do not fit with line-width, setting default values"
 msgstr "marĝenoj ne akordas kun lini-larĝo, ni uzas apriorajn valorojn"
 
-#: output-def.cc:237
+#: output-def.cc:236
 msgid "systems run off the page due to improper paper settings, setting default values"
 msgstr "sistemoj iras preter la paĝo pro malĝustaj paperaj agordoj, ni uzas apriorajn valorojn"
 
@@ -2672,68 +2693,68 @@ msgstr "'min-systems-per-page' estas pli granda ol 'max-systems-per-page', ni pr
 msgid "page %d has been compressed"
 msgstr "la paĝo %d estas densigita"
 
-#: page-layout-problem.cc:402
+#: page-layout-problem.cc:400
 msgid "A page layout problem has been initiated that cannot accommodate footnotes."
 msgstr "Paĝ-aranĝa problemo estis ekigata, kaj ĝi ne povas enteni piednotojn."
 
-#: page-layout-problem.cc:731
+#: page-layout-problem.cc:729
 msgid "ragged-bottom was specified, but page must be compressed"
 msgstr "'ragged-bottom' estis indikata, sed paĝo devas esti densigita"
 
-#: page-layout-problem.cc:734
+#: page-layout-problem.cc:732
 #, c-format
 msgid "compressing over-full page by %.1f staff-spaces"
 msgstr "ni densigas tra tuta paĝo per %.1f liniar-spacoj"
 
-#: page-layout-problem.cc:1199
+#: page-layout-problem.cc:1197
 msgid "staff-affinities should only decrease"
 msgstr "'staff-affinities' devus nur malpliiĝi"
 
-#: page-turn-page-breaking.cc:168
+#: page-turn-page-breaking.cc:169
 #, c-format
 msgid "page-turn-page-breaking: breaking from %d to %d"
 msgstr "'page-turn-page-breaking': saltado de %d al %d"
 
-#: page-turn-page-breaking.cc:217
+#: page-turn-page-breaking.cc:218
 msgid "cannot fit the first page turn onto a single page.  Consider setting first-page-number to an even number."
 msgstr "ne eblas adapti la unuan paĝsalto sur unuopan paĝon.  Konsideru difino de 'first-page-number' al para numero."
 
-#: page-turn-page-breaking.cc:230
+#: page-turn-page-breaking.cc:231
 #, c-format
 msgid "Calculating page and line breaks (%d possible page breaks)..."
 msgstr "Kalkulado de paĝa kaj liniaj saltoj (%d eblaj paĝsaltoj)..."
 
-#: page-turn-page-breaking.cc:300
+#: page-turn-page-breaking.cc:301
 #, c-format
 msgid "break starting at page %d"
 msgstr "salto komencanta je paĝo %d"
 
-#: page-turn-page-breaking.cc:301
+#: page-turn-page-breaking.cc:302
 #, c-format
 msgid "\tdemerits: %f"
 msgstr "\t:poentaro %f"
 
-#: page-turn-page-breaking.cc:302
+#: page-turn-page-breaking.cc:303
 #, c-format
 msgid "\tsystem count: %d"
 msgstr "\tnombro da sistemoj: %d"
 
-#: page-turn-page-breaking.cc:303
+#: page-turn-page-breaking.cc:304
 #, c-format
 msgid "\tpage count: %d"
 msgstr "\tnombro da paĝoj: %d"
 
-#: page-turn-page-breaking.cc:304
+#: page-turn-page-breaking.cc:305
 #, c-format
 msgid "\tprevious break: %d"
 msgstr "\tantaŭa salto: %d"
 
-#: pango-font.cc:246
+#: pango-font.cc:247
 #, c-format
 msgid "no glyph for character U+%0X in font `%s'"
 msgstr "ne estas signobildo por la signo U+%0X en la tiparo '%s'"
 
-#: pango-font.cc:273
+#: pango-font.cc:274
 #, c-format
 msgid ""
 "Glyph has no name, but font supports glyph naming.\n"
@@ -2742,21 +2763,21 @@ msgstr ""
 "Signobildo ne havas nomon, sed la tiparo subtenas nomigon de signobildoj.\n"
 "Ni preterpasas signobildon U+%0X, dosiero %s"
 
-#: pango-font.cc:323
+#: pango-font.cc:324
 #, c-format
 msgid "no PostScript font name for font `%s'"
 msgstr "neniu tiparnomo PostScript por la tiparo '%s'"
 
-#: pango-font.cc:373
+#: pango-font.cc:374
 msgid "FreeType face has no PostScript font name"
 msgstr "Tiparo FreeType ne havas tiparnomon PostScript"
 
-#: paper-book.cc:201
+#: paper-book.cc:200
 #, c-format
 msgid "program option -dprint-pages not supported by backend `%s'"
 msgstr "programa modifilo -dprint-pages ne estas subtenata de la intern-interfaco '%s'"
 
-#: paper-book.cc:220
+#: paper-book.cc:219
 #, c-format
 msgid "program option -dpreview not supported by backend `%s'"
 msgstr "programa modifilo -dpreview ne estas subtenata de la intern-interfaco '%s'"
@@ -2779,7 +2800,7 @@ msgstr "Nombro da elementoj: %d (etendigiloj %d) "
 msgid "Preprocessing graphical objects..."
 msgstr "Antaŭprocezado de grafikaj objektoj..."
 
-#: parse-scm.cc:128
+#: parse-scm.cc:124
 msgid "GUILE signaled an error for the expression beginning here"
 msgstr "GUILE signalis eraron por la esprimo komenciĝanta ĉi tie"
 
@@ -2792,11 +2813,11 @@ msgstr "Konvertado de ĉeno '%s' al UTF-16be fiaskis: %s"
 msgid "unterminated percent repeat"
 msgstr "nefinigita elcenta ripeto"
 
-#: performance.cc:55
+#: performance.cc:76
 msgid "Track..."
 msgstr "Sekvado..."
 
-#: performance.cc:90
+#: performance.cc:126
 #, c-format
 msgid "MIDI output to `%s'..."
 msgstr "MIDI-eligo al '%s'..."
@@ -2831,25 +2852,25 @@ msgstr "ne estas 'grob'-nomo, '%s'"
 msgid "Failed octave check, got: "
 msgstr "Malsukcesis kontrolo de okto, oni havis: "
 
-#: relocate.cc:52
+#: relocate.cc:56
 #, c-format
 msgid "Setting %s to %s"
 msgstr "Akomodado de %s al %s"
 
 #. this warning should only be printed in debug mode!
-#: relocate.cc:73
+#: relocate.cc:77
 #, c-format
 msgid "no such file: %s for %s"
 msgstr "ne tia dosiero: %s por %s"
 
 #. this warning should only be printed in debug mode!
 #. this warning should only be printed in debug mode
-#: relocate.cc:84 relocate.cc:102
+#: relocate.cc:88 relocate.cc:106
 #, c-format
 msgid "no such directory: %s for %s"
 msgstr "ne tia dosierujo: %s por %s"
 
-#: relocate.cc:93
+#: relocate.cc:97
 #, c-format
 msgid "%s=%s (prepend)\n"
 msgstr "%s=%s (antaŭmeti)\n"
@@ -2879,7 +2900,7 @@ msgstr "Relokigo: estas absoluta: argv0=%s\n"
 msgid "Relocation : from cwd: argv0=%s\n"
 msgstr "Relokigo : de cwd: argv0=%s\n"
 
-#: relocate.cc:194
+#: relocate.cc:196
 #, c-format
 msgid ""
 "Relocation: from PATH=%s\n"
@@ -2888,30 +2909,30 @@ msgstr ""
 "Relokigo: de VOJO=%s\n"
 "argv0=%s\n"
 
-#: relocate.cc:220
+#: relocate.cc:222
 msgid "LILYPONDPREFIX is obsolete, use LILYPOND_DATADIR"
 msgstr "LILYPONDPREFIX estas malaktuala, uzu LILYPOND_DATADIR"
 
-#: relocate.cc:345
+#: relocate.cc:347
 #, c-format
 msgid "Relocation file: %s"
 msgstr "Relokiga dosiero: %s"
 
-#: relocate.cc:349 source-file.cc:65
+#: relocate.cc:351 source-file.cc:65
 #, c-format
 msgid "cannot open file: `%s'"
 msgstr "ne eblas malfermi dosieron: '%s'"
 
-#: relocate.cc:379
+#: relocate.cc:381
 #, c-format
 msgid "Unknown relocation command %s"
 msgstr "Nekonata relokiga komando %s"
 
-#: rest-collision.cc:153
+#: rest-collision.cc:154
 msgid "cannot resolve rest collision: rest direction not set"
 msgstr "ne eblas solvi paŭzan kolizion: la paŭz-direkto ne estis difinata"
 
-#: rest-collision.cc:164 rest-collision.cc:273
+#: rest-collision.cc:165 rest-collision.cc:274
 msgid "too many colliding rests"
 msgstr "tro multe da koliziantaj paŭzoj"
 
@@ -2920,33 +2941,33 @@ msgstr "tro multe da koliziantaj paŭzoj"
 msgid "rest `%s' not found"
 msgstr "paŭzo '%s' ne estis trovata"
 
-#: score-engraver.cc:79
+#: score-engraver.cc:77
 #, c-format
 msgid "cannot find `%s'"
 msgstr "ne eblas trovi '%s'"
 
-#: score-engraver.cc:81
+#: score-engraver.cc:79
 msgid "Music font has not been installed properly."
 msgstr "Muzika tiparo ne estas instalita ĝuste."
 
-#: score-engraver.cc:83
+#: score-engraver.cc:81
 #, c-format
 msgid "Search path `%s'"
 msgstr "Serĉvojo '%s'"
 
-#: score-engraver.cc:85
+#: score-engraver.cc:83
 msgid "Aborting"
 msgstr "Ni ĉesas"
 
-#: score.cc:160
+#: score.cc:161
 msgid "already have music in score"
 msgstr "jam estas muziko en la partituro"
 
-#: score.cc:161
+#: score.cc:163
 msgid "this is the previous music"
 msgstr "tio ĉi estas la antaŭa muziko"
 
-#: score.cc:166
+#: score.cc:169
 msgid "errors found, ignoring music expression"
 msgstr "eraroj trovitaj, ni preterpasas la muzikan esprimon"
 
@@ -2985,7 +3006,7 @@ msgstr "%s sen kaŭzo"
 msgid "cannot end %s"
 msgstr "ne eblas finigi %s"
 
-#: slur.cc:434
+#: slur.cc:436
 #, c-format
 msgid "Ignoring grob for slur: %s.  avoid-slur not set?"
 msgstr "Preteratento de 'grob' por ligarko: %s. Ĉu 'avoid-slur' ne estas difinita?"
@@ -3020,18 +3041,18 @@ msgstr "eble la enigo devus indiki polifoniajn voĉojn"
 msgid "weird stem size, check for narrow beams"
 msgstr "stranga grando de stango, kontrolu mallarĝajn vostligojn"
 
-#: system.cc:201
+#: system.cc:202
 #, c-format
 msgid "Element count %d"
 msgstr "Nombro da elementoj: %d"
 
-#: system.cc:512
+#: system.cc:513
 #, c-format
 msgid "Grob count %d"
 msgstr "Nombro da 'grob': %d"
 
 #. TODO: Also print the arguments of the markup!
-#: text-interface.cc:138
+#: text-interface.cc:139
 #, c-format
 msgid "Markup depth exceeds maximal value of %d; Markup: %s"
 msgstr "Markada profundo superas maksimuman valoron %d; Markado: %s"
@@ -3052,7 +3073,7 @@ msgstr "nefinigita tekst-etendigilo"
 msgid "unterminated tie"
 msgstr "nefinigita ligaturo"
 
-#: tie-engraver.cc:373
+#: tie-engraver.cc:377
 msgid "lonely tie"
 msgstr "sola ligaturo"
 
@@ -3066,7 +3087,7 @@ msgstr "sola ligaturo"
 msgid "strange time signature found: %d/%d"
 msgstr "stranga takt-indiko estis trovata: %d/%d"
 
-#: translator-ctors.cc:65
+#: translator-ctors.cc:68
 #, c-format
 msgid "unknown translator: `%s'"
 msgstr "nekonata tradukilo: '%s'"
@@ -3076,17 +3097,17 @@ msgstr "nekonata tradukilo: '%s'"
 msgid "fatal error.  Couldn't find type: %s"
 msgstr "fatala eraro. Ne eblis trovi tipon: %s"
 
-#: translator-group.cc:188
+#: translator-group.cc:187
 #, c-format
 msgid "cannot find: `%s'"
 msgstr "ne eblas trovi: '%s'"
 
-#: translator.cc:320
+#: translator.cc:310
 #, c-format
 msgid "Two simultaneous %s events, junking this one"
 msgstr "Du samtempaj eventoj %s, ni forĵetas tiun ĉi"
 
-#: translator.cc:321
+#: translator.cc:311
 #, c-format
 msgid "Previous %s event here"
 msgstr "Antaŭa evento %s ĉi tie"
@@ -3151,206 +3172,206 @@ msgstr "ankaŭ jam ekzistas finigita etendigilo"
 msgid "giving up"
 msgstr "ni rezignas"
 
-#: parser.yy:463 parser.yy:847 parser.yy:928 parser.yy:1150
+#: parser.yy:476 parser.yy:947 parser.yy:1028 parser.yy:1248
 msgid "bad expression type"
 msgstr "malĝusta esprim-tipo"
 
-#: parser.yy:759 parser.yy:1361 parser.yy:1406
+#: parser.yy:859 parser.yy:1458 parser.yy:1503
 msgid "not a context mod"
 msgstr "ne estas kunteksta 'mod'"
 
-#: parser.yy:954
+#: parser.yy:1054
 msgid "Missing music in \\score"
 msgstr "Mankas muziko en \\score"
 
-#: parser.yy:991
+#: parser.yy:1091
 msgid "\\paper cannot be used in \\score, use \\layout instead"
 msgstr "\\paper ne povas esti uzata en \\score, uzu \\layout anstataŭe"
 
-#: parser.yy:1027
+#: parser.yy:1126
 msgid "Spurious expression in \\score"
 msgstr "Hazarda esprimo en \\score"
 
-#: parser.yy:1057
+#: parser.yy:1156
 msgid "need \\paper for paper block"
 msgstr "necesas \\paper por papera bloko"
 
-#: parser.yy:1234
+#: parser.yy:1331
 msgid "music expected"
 msgstr "estis atendata muziko"
 
-#: parser.yy:1244 parser.yy:1278
+#: parser.yy:1341 parser.yy:1375
 msgid "unexpected post-event"
 msgstr "malatendita post-evento"
 
-#: parser.yy:1286
+#: parser.yy:1383
 msgid "Ignoring non-music expression"
 msgstr "Ni preterpasas ne-muzikan esprimon"
 
-#: parser.yy:1587
+#: parser.yy:1691
 msgid "not a symbol"
 msgstr "ne estas simbolo"
 
-#: parser.yy:2337 parser.yy:2451 parser.yy:2464 parser.yy:2473
+#: parser.yy:2491 parser.yy:2605 parser.yy:2618 parser.yy:2627
 msgid "bad grob property path"
 msgstr "malĝusta vojo de eco de 'grob'"
 
-#: parser.yy:2431
+#: parser.yy:2585
 msgid "only \\consists and \\remove take non-string argument."
 msgstr "nur \\consists kaj \\remove prenas ne-ĉenan argumenton."
 
-#: parser.yy:2492
+#: parser.yy:2646
 msgid "bad context property path"
 msgstr "malĝusta vojo de eco de kunteksto"
 
-#: parser.yy:2593
+#: parser.yy:2733
 msgid "simple string expected"
 msgstr "estis atendata simpla ĉeno"
 
-#: parser.yy:2611
+#: parser.yy:2750
 msgid "symbol expected"
 msgstr "simbolo estis atendata"
 
-#: parser.yy:2747
+#: parser.yy:2886
 msgid "not a rhythmic event"
 msgstr "ne estas ritma evento"
 
-#: parser.yy:2797
+#: parser.yy:2936
 msgid "post-event expected"
 msgstr "post-evento estis atendata"
 
-#: parser.yy:2806 parser.yy:2811
+#: parser.yy:2945 parser.yy:2950
 msgid "have to be in Lyric mode for lyrics"
 msgstr "devas esti en reĝimo Lyric por tekstoj"
 
-#: parser.yy:2887
+#: parser.yy:3026
 msgid "expecting string or post-event as script definition"
 msgstr "ni atendas ĉenon aŭ post-eventon kiel difinon de skripto"
 
-#: parser.yy:2991
+#: parser.yy:3130
 msgid "not an articulation"
 msgstr "ne estas artikulacio"
 
-#: parser.yy:3063 parser.yy:3106
+#: parser.yy:3202 parser.yy:3245
 msgid "not a duration"
 msgstr "ne estas daŭro"
 
-#: parser.yy:3127
+#: parser.yy:3266
 msgid "bass number expected"
 msgstr "estis atendata bas-simbolo"
 
-#: parser.yy:3219
+#: parser.yy:3358
 msgid "have to be in Note mode for notes"
 msgstr "devas esti en reĝimo Note por notoj"
 
-#: parser.yy:3258
+#: parser.yy:3397
 msgid "have to be in Chord mode for chords"
 msgstr "devas esti en reĝimo Chord por akordoj"
 
-#: parser.yy:3301
+#: parser.yy:3440
 msgid "markup outside of text script or \\lyricmode"
 msgstr "markado for de teksta skripto aŭ \\lyricmode"
 
-#: parser.yy:3306
+#: parser.yy:3445
 msgid "unrecognized string, not in text script or \\lyricmode"
 msgstr "nerekonita ĉeno, ne estas en teksta skripto aŭ \\lyricmode"
 
-#: parser.yy:3458 parser.yy:3467
+#: parser.yy:3597 parser.yy:3606
 msgid "not an unsigned integer"
 msgstr "ne estas sensigna entjero"
 
-#: parser.yy:3541
+#: parser.yy:3693
 msgid "not a markup"
 msgstr "ne estas markado"
 
-#: lexer.ll:192
+#: lexer.ll:193
 msgid "stray UTF-8 BOM encountered"
 msgstr "perdita UTF-8 BOM aperis"
 
-#: lexer.ll:195
+#: lexer.ll:196
 msgid "Skipping UTF-8 BOM"
 msgstr "Preterpasado de UTF-8 BOM"
 
-#: lexer.ll:247
+#: lexer.ll:248
 #, c-format
 msgid "Renaming input to: `%s'"
 msgstr "Renomigo de la enigo al: '%s'"
 
-#: lexer.ll:264
+#: lexer.ll:265
 msgid "quoted string expected after \\version"
 msgstr "citita ĉeno estas atendata post \\version"
 
-#: lexer.ll:268
+#: lexer.ll:269
 msgid "quoted string expected after \\sourcefilename"
 msgstr "citita ĉeno estas atendata post \\sourcefilename"
 
-#: lexer.ll:272
+#: lexer.ll:273
 msgid "integer expected after \\sourcefileline"
 msgstr "entjero estas atendata post \\sourcefileline"
 
-#: lexer.ll:299
+#: lexer.ll:300
 msgid "\\maininput not allowed outside init files"
 msgstr "\\maininput ne estas permesata ekstere de dosieroj 'init'"
 
-#: lexer.ll:323
+#: lexer.ll:324
 #, c-format
 msgid "wrong or undefined identifier: `%s'"
 msgstr "malĝusta aŭ nedifinita identigilo: '%s'"
 
-#: lexer.ll:348
+#: lexer.ll:349
 msgid "string expected after \\include"
 msgstr "ĉeno estas atendata post \\include"
 
-#: lexer.ll:358
+#: lexer.ll:359
 msgid "end quote missing"
 msgstr "fina citilo mankas"
 
-#: lexer.ll:713
+#: lexer.ll:714
 msgid "EOF found inside a comment"
 msgstr "EOF estis trovata interne de komento"
 
-#: lexer.ll:718
+#: lexer.ll:719
 msgid "EOF found inside string"
 msgstr "EOF estis trovata ene de ĉeno"
 
-#: lexer.ll:733
+#: lexer.ll:734
 msgid "Unfinished main input"
 msgstr "Nefinigita ĉefenigo"
 
-#: lexer.ll:804
+#: lexer.ll:805
 #, c-format
 msgid "invalid character: `%s'"
 msgstr "malvalida signo: '%s'"
 
-#: lexer.ll:924
+#: lexer.ll:925
 #, c-format
 msgid "unknown escaped string: `\\%s'"
 msgstr "nekonata eskapita ĉeno: '\\%s'"
 
-#: lexer.ll:944
+#: lexer.ll:945
 #, c-format
 msgid "undefined character or shorthand: %s"
 msgstr "nedifinita signo aŭ mallongigo: %s"
 
-#: lexer.ll:1235
+#: lexer.ll:1236
 msgid "non-UTF-8 input"
 msgstr "ne-unikoda enigo"
 
-#: lexer.ll:1279
+#: lexer.ll:1280
 #, c-format
 msgid "Invalid version string \"%s\""
 msgstr "Malvalida versio-ĉeno \"%s\""
 
-#: lexer.ll:1284
+#: lexer.ll:1285
 #, c-format
 msgid "file too old: %s (oldest supported: %s)"
 msgstr "dosiero tro malnova: %s (pli malnova subtenata: %s)"
 
-#: lexer.ll:1285
+#: lexer.ll:1286
 msgid "consider updating the input with the convert-ly script"
 msgstr "konsideru ĝisdatigi la enigon per la skripto 'convert-ly'"
 
-#: lexer.ll:1291
+#: lexer.ll:1292
 #, c-format
 msgid "program too old: %s (file requires: %s)"
 msgstr "programo tro malnova: %s (la dosiero postulas: %s)"
@@ -3369,24 +3390,34 @@ msgstr "Alvokado de '~a'..."
 msgid "`~a' failed (~a)\n"
 msgstr "'~a' fiaskis (~a)\n"
 
-#: backend-library.scm:94
+#: backend-library.scm:108
 #, scheme-format
 msgid "Converting to `~a'...\n"
 msgstr "Konvertado al '~a'...\n"
 
 #. Do not try to guess the name of the png file,
 #. GS produces PNG files like BASE-page%d.png.
-#: backend-library.scm:103
+#: backend-library.scm:118
 #, scheme-format
 msgid "Converting to ~a..."
 msgstr "Konvertado al ~a..."
 
-#: backend-library.scm:141
+#: backend-library.scm:134
+#, scheme-format
+msgid "Copying to `~a'...\n"
+msgstr "Kopiado al '~a'...\n"
+
+#: backend-library.scm:200
+#, scheme-format
+msgid "Deleting `~a'...\n"
+msgstr "Forigado de '~a'...\n"
+
+#: backend-library.scm:219
 #, scheme-format
 msgid "Writing header field `~a' to `~a'..."
 msgstr "Skribado de kapa kampo '~a' al '~a'..."
 
-#: backend-library.scm:190
+#: backend-library.scm:268
 #, scheme-format
 msgid "missing stencil expression `~S'"
 msgstr "mankas esprimo de 'stencil' '~S'"
@@ -3442,60 +3473,60 @@ msgstr "ne eblas redifini event-klason '~S'"
 msgid "Undefined parent event class `~S'"
 msgstr "nekonata patra event-klaso '~S'"
 
-#: define-markup-commands.scm:1062
+#: define-markup-commands.scm:1098
 msgid "no systems found in \\score markup, does it have a \\layout block?"
 msgstr "neniu sistemo estis trovata en markado \\score, ĉu ĝi havas blokon \\layout?"
 
-#: define-markup-commands.scm:2886
+#: define-markup-commands.scm:2922
 #, scheme-format
 msgid "Cannot find glyph ~a"
 msgstr "Ne eblas trovi signobildon ~a"
 
-#: define-markup-commands.scm:3362
+#: define-markup-commands.scm:3398
 #, scheme-format
 msgid "no brace found for point size ~S "
 msgstr "neniu kurbkrampo estis trovata por la punkta grando ~S "
 
-#: define-markup-commands.scm:3363
+#: define-markup-commands.scm:3399
 #, scheme-format
 msgid "defaulting to ~S pt"
 msgstr "apriore al ~S pt"
 
-#: define-markup-commands.scm:3615
+#: define-markup-commands.scm:3643
 #, scheme-format
 msgid "not a valid duration string: ~a"
 msgstr "ne estas valida daŭro-ĉeno: ~a"
 
-#: define-markup-commands.scm:3826
+#: define-markup-commands.scm:3854
 #, scheme-format
 msgid "not a valid duration string: ~a - ignoring"
 msgstr "ne estas valida daŭro-ĉeno: ~a - ni preteratentas"
 
-#: define-music-types.scm:797
+#: define-music-types.scm:803
 #, scheme-format
 msgid "symbol expected: ~S"
 msgstr "atendata simbolo: ~S"
 
-#: define-music-types.scm:800
+#: define-music-types.scm:806
 #, scheme-format
 msgid "cannot find music object: ~S"
 msgstr "ne eblas trovi muzik-objekton: ~S"
 
-#: define-music-types.scm:820
+#: define-music-types.scm:826
 #, scheme-format
 msgid "bad make-music argument: ~S"
 msgstr "malĝusta argumento make-music: ~S"
 
-#: define-note-names.scm:972
+#: define-note-names.scm:1000
 msgid "Select note names language."
 msgstr "Elekti lingvon de not-nomoj."
 
-#: define-note-names.scm:978
+#: define-note-names.scm:1006
 #, scheme-format
 msgid "Using `~a' note names..."
 msgstr "Aplikado de not-nomoj '~a'..."
 
-#: define-note-names.scm:981
+#: define-note-names.scm:1009
 #, scheme-format
 msgid "Could not find language `~a'.  Ignoring."
 msgstr "Ne eblis trovi la lingvon '~a'.  Preterpaso."
@@ -3535,12 +3566,12 @@ msgstr "ne eblas trovi priskribon por la atributo '~S' (~S)"
 msgid "cannot find description for property ~S (~S)"
 msgstr "ne eblas trovi priskribon por la atributo ~S (~S)"
 
-#: flag-styles.scm:162
+#: flag-styles.scm:155
 #, scheme-format
 msgid "flag stroke `~a' or `~a' not found"
 msgstr "flag-streko '~a' aŭ '~a' ne estis trovata"
 
-#: framework-eps.scm:108
+#: framework-eps.scm:112
 #, scheme-format
 msgid "Writing ~a..."
 msgstr "Skribado de ~a..."
@@ -3565,7 +3596,7 @@ msgstr "ni ne scias kiel enkorpigi ~S=~S"
 msgid "do not know how to embed font ~s ~s ~s"
 msgstr "ni ne scias kiel enkorpigi la tiparon ~s ~s ~s"
 
-#: framework-ps.scm:729
+#: framework-ps.scm:723
 msgid ""
 "\n"
 "The PostScript backend does not support the\n"
@@ -3613,20 +3644,20 @@ msgstr "Eraro en kalkulado de vostligo.  Atendante (~S,~S), trovis ~S."
 msgid "Error in beam quanting.  Expected ~S 0, found ~S."
 msgstr "Eraro en kalkulado de vostligo.  Atendante ~S 0, trovis ~S."
 
-#: lily-library.scm:350
+#: lily-library.scm:333
 msgid "Music unsuitable for context-mod"
 msgstr "La muziko ne taŭgas por 'context-mod'"
 
-#: lily-library.scm:405
+#: lily-library.scm:388
 #, scheme-format
 msgid "Cannot find context-def \\~a"
 msgstr "Ne eblas trovi context-def \\~a"
 
-#: lily-library.scm:421
+#: lily-library.scm:404
 msgid "Music unsuitable for output-def"
 msgstr "La muziko ne taŭgas por output-def"
 
-#: lily-library.scm:921
+#: lily-library.scm:904
 msgid ""
 "Find the index between @var{start} and @var{end} (an integer)\n"
 "which produces the closest match to @var{target-val} if\n"
@@ -3636,51 +3667,51 @@ msgstr ""
 "kiu produktas plej bonan kongruon al @var{target-val} se\n"
 "aplikata al la funkcio @var{getter}."
 
-#: lily-library.scm:1015
+#: lily-library.scm:998
 #, scheme-format
 msgid "unknown unit: ~S"
 msgstr "nekonata unuo: ~S"
 
-#: lily-library.scm:1040
+#: lily-library.scm:1023
 #, scheme-format
 msgid "no \\version statement found, please add~afor future compatibility"
 msgstr "neniu komando \\version estis trovata, bonvolu aldoni ~a por estonta kongrueco"
 
-#: lily.scm:75
+#: lily.scm:93
 msgid "call-after-session used after session start"
 msgstr "call-after-session estis uzata post komenco de seanco"
 
-#: lily.scm:93
+#: lily.scm:111
 msgid "define-session used after session start"
 msgstr "define-session estis uzata post komenco de seanco"
 
-#: lily.scm:399
+#: lily.scm:417
 msgid "Using (ice-9 curried-definitions) module\n"
 msgstr "Ni uzas la modulon (ice-9 curried-definitions)\n"
 
-#: lily.scm:402
+#: lily.scm:420
 msgid "Guile 1.8\n"
 msgstr "Guile 1.8\n"
 
-#: lily.scm:459
+#: lily.scm:477
 #, scheme-format
 msgid "cannot find: ~A"
 msgstr "ne eblas trovi: ~A"
 
-#: lily.scm:886
+#: lily.scm:903
 msgid "Success: compilation successfully completed"
 msgstr "Sukceso: la kompilado sukcese plenumiĝis"
 
-#: lily.scm:887
+#: lily.scm:904
 msgid "Compilation completed with warnings or errors"
 msgstr "La kompilado plenumiĝis kun avertoj aŭ eraroj"
 
-#: lily.scm:948
+#: lily.scm:965
 #, scheme-format
 msgid "job ~a terminated with signal: ~a"
 msgstr "la laboro ~a finis kun signalo: ~a"
 
-#: lily.scm:951
+#: lily.scm:968
 #, scheme-format
 msgid ""
 "logfile ~a (exit ~a):\n"
@@ -3689,36 +3720,31 @@ msgstr ""
 "protokol-dosiero ~a (eliro ~a):\n"
 "~a"
 
-#: lily.scm:973 lily.scm:1062
+#: lily.scm:990 lily.scm:1079
 #, scheme-format
 msgid "failed files: ~S"
 msgstr "fiaskintajn dosieroj: ~S"
 
-#: lily.scm:1053
+#: lily.scm:1070
 #, scheme-format
 msgid "Redirecting output to ~a..."
 msgstr "Redirektigo de eligo al ~a..."
 
-#: lily.scm:1072 ps-to-png.scm:66
+#: lily.scm:1089
 #, scheme-format
 msgid "Invoking `~a'...\n"
 msgstr "Alvokado de '~a'...\n"
 
-#: ly-syntax-constructors.scm:66
+#: ly-syntax-constructors.scm:27
 #, scheme-format
 msgid "~a function cannot return ~a"
 msgstr "funkcio ~a ne povas liveri ~a"
 
-#: ly-syntax-constructors.scm:76
+#: ly-syntax-constructors.scm:60
 #, scheme-format
 msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
 msgstr "malĝusta tipo por argumento ~a.  Atendate ~a, trovite ~s"
 
-#: ly-syntax-constructors.scm:200
-#, scheme-format
-msgid "Invalid property operation ~a"
-msgstr "Malvalida atribut-operacio ~a"
-
 #: markup-macros.scm:331
 #, scheme-format
 msgid "Wrong number of arguments.  Expect: ~A, found ~A: ~S"
@@ -3758,67 +3784,77 @@ msgstr "la inversigota tonalto ne estas en skalo; preterpaso"
 msgid "negative replication count; ignoring"
 msgstr "negativa nombro da rekopiado; preterpaso"
 
-#: music-functions.scm:311
+#: music-functions.scm:319
 #, scheme-format
 msgid "invalid tremolo repeat count: ~a"
 msgstr "malvalida tremson-ripeta nombro: ~a"
 
-#: music-functions.scm:340
+#: music-functions.scm:348
 #, scheme-format
 msgid "unknown repeat type `~S': must be volta, unfold, percent, or tremolo"
 msgstr "nekonata ripeto-tipo '~S': devas esti volta, unfold, percent, aŭ tremolo"
 
-#: music-functions.scm:344
+#: music-functions.scm:352
 msgid "More alternatives than repeats.  Junking excess alternatives"
 msgstr "Pli da alternativoj ol ripetoj.  Forĵeto de kromaj alternativoj"
 
-#: music-functions.scm:480
+#: music-functions.scm:487
 #, scheme-format
 msgid "bad grob property path ~a"
 msgstr "malĝusta vojo de eco de 'grob' ~a"
 
-#: music-functions.scm:779
+#: music-functions.scm:511
+#, scheme-format
+msgid "bad context property ~a"
+msgstr "malĝusta eco de kunteksto ~a"
+
+#: music-functions.scm:534
+#, scheme-format
+msgid "bad music property ~a"
+msgstr "malĝusta eco de muziko ~a"
+
+#: music-functions.scm:840
 msgid "Bad chord repetition"
 msgstr "Malĝusta ripeto de akordo"
 
-#: music-functions.scm:884
+#: music-functions.scm:945
 #, scheme-format
 msgid "music expected: ~S"
 msgstr "atendita muziko: ~S"
 
-#: music-functions.scm:1226
+#: music-functions.scm:1295
 #, scheme-format
 msgid "cannot find quoted music: `~S'"
 msgstr "ne eblas trovi la cititan muzikon: '~S'"
 
-#: music-functions.scm:1366
+#: music-functions.scm:1432
 msgid "Add @var{octave-shift} to the octave of @var{pitch}."
 msgstr "Aldoni @var{octave-shift} al la okto de @var{pitch}."
 
-#: music-functions.scm:1429
+#: music-functions.scm:1495
 #, scheme-format
 msgid "Unknown octaveness type: ~S "
 msgstr "Nekonata okteca tipo: ~S "
 
-#: music-functions.scm:1430
+#: music-functions.scm:1496
 msgid "Defaulting to 'any-octave."
 msgstr "Apriore al 'any-octave."
 
-#: music-functions.scm:1822
+#: music-functions.scm:1888
 #, scheme-format
 msgid "unknown accidental style: ~S"
 msgstr "nekonata stilo de aliigo: ~S"
 
-#: music-functions.scm:2040
+#: music-functions.scm:2098
 msgid "Missing duration"
 msgstr "Mankas daŭro"
 
-#: music-functions.scm:2549
+#: music-functions.scm:2626
 #, scheme-format
 msgid "not a symbol list: ~a"
 msgstr "ne estas simbolo-listo: ~a"
 
-#: music-functions.scm:2552
+#: music-functions.scm:2629
 #, scheme-format
 msgid "conflicting tag group ~a"
 msgstr "konfliktanta mark-grupo ~a"
@@ -3847,23 +3883,23 @@ msgstr "Signobildo devas havi unikodan valoron"
 msgid "cannot find SVG font ~S"
 msgstr "ne eblas trovi SVG-tiparon ~S"
 
-#: paper.scm:122
+#: paper.scm:121
 msgid "set-global-staff-size: not in toplevel scope"
 msgstr "set-global-staff-size: ne en supernivela rango"
 
-#: paper.scm:322
+#: paper.scm:321
 #, scheme-format
 msgid "This is not a \\layout {} object, ~S"
 msgstr "Tio ĉi ne estas objekto \\layout {}, ~S"
 
-#: paper.scm:330
+#: paper.scm:329
 #, scheme-format
 msgid "Unknown paper size: ~a"
 msgstr "Nekonata paper-grando: ~a"
 
 #. TODO: should raise (generic) exception with throw, and catch
 #. that in parse-scm.cc
-#: paper.scm:349
+#: paper.scm:348
 msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
 msgstr "Uzendas #(set-paper-size .. ) interne de \\paper { ... }"
 
@@ -3877,19 +3913,24 @@ msgstr "nekonata kleftipo '~a'"
 msgid "supported clefs: ~a"
 msgstr "subtenataj klefoj: ~a"
 
-#: parser-ly-from-scheme.scm:74
+#: parser-ly-from-scheme.scm:73
 msgid "error in #{ ... #}"
 msgstr "eraro en #{ ... #}"
 
-#: part-combiner.scm:748
+#: part-combiner.scm:894
 #, scheme-format
 msgid "quoted music `~a' is empty"
 msgstr "la citita muziko '~a' estas malplena"
 
-#: ps-to-png.scm:70
+#: ps-to-png.scm:72 ps-to-png.scm:75
+#, scheme-format
+msgid "Copying `~a' to `~a'..."
+msgstr "Kopiado de '~a' al '~a'..."
+
+#: ps-to-png.scm:77 ps-to-png.scm:79
 #, scheme-format
-msgid "~a exited with status: ~S"
-msgstr "~a finis kun stato: ~S"
+msgid "Deleting `~a'..."
+msgstr "Forigado de '~a'..."
 
 #: to-xml.scm:190
 #, scheme-format
@@ -3938,6 +3979,15 @@ msgstr ""
 "Neniu etikedo por freto ~a (sur kordo ~a);\n"
 "nur ~a fret-etikedoj estis provizataj"
 
+#~ msgid "cannot change, already in translator: %s"
+#~ msgstr "ne eblas ŝanĝi, jam estas en tradukilo: %s"
+
+#~ msgid "Invalid property operation ~a"
+#~ msgstr "Malvalida atribut-operacio ~a"
+
+#~ msgid "~a exited with status: ~S"
+#~ msgstr "~a finis kun stato: ~S"
+
 #~ msgid "cannot find Voice `%s'"
 #~ msgstr "ne eblas trovi Voĉon '%s'"
 
index c51faefffdb8b0127e163f3302a60c1b704a8411..33764d1f88d9ba0365249bdd1f4c729973ed70db 100644 (file)
@@ -6,10 +6,10 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: lilypond 2.19.48\n"
+"Project-Id-Version: lilypond 2.19.49\n"
 "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu."
 "lilypond.bugs\n"
-"POT-Creation-Date: 2016-09-13 11:07+0100\n"
+"POT-Creation-Date: 2016-10-16 11:55+0100\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"
@@ -787,6 +787,14 @@ msgid ""
 "point."
 msgstr ""
 
+#: convertrules.py:3918
+msgid "Previously the \"id\" grob property (string) was used for SVG output."
+msgstr ""
+
+#: convertrules.py:3919
+msgid "Now \"output-attributes\" (association list) is used instead."
+msgstr ""
+
 #: fontextract.py:25
 #, python-format
 msgid "Scanning %s"
@@ -3784,19 +3792,19 @@ msgstr ""
 msgid "Music unsuitable for output-def"
 msgstr ""
 
-#: lily-library.scm:914
+#: lily-library.scm:900
 msgid ""
 "Find the index between @var{start} and @var{end} (an integer)\n"
 "which produces the closest match to @var{target-val} if\n"
 "applied to function @var{getter}."
 msgstr ""
 
-#: lily-library.scm:1008
+#: lily-library.scm:994
 #, scheme-format
 msgid "unknown unit: ~S"
 msgstr ""
 
-#: lily-library.scm:1033
+#: lily-library.scm:1019
 #, scheme-format
 msgid "no \\version statement found, please add~afor future compatibility"
 msgstr ""
@@ -3910,101 +3918,101 @@ msgstr ""
 msgid "Dangling tie in \\retrograde"
 msgstr ""
 
-#: music-functions.scm:319
+#: music-functions.scm:321
 #, scheme-format
 msgid "invalid tremolo repeat count: ~a"
 msgstr ""
 
-#: music-functions.scm:348
+#: music-functions.scm:350
 #, scheme-format
 msgid "unknown repeat type `~S': must be volta, unfold, percent, or tremolo"
 msgstr ""
 
-#: music-functions.scm:352
+#: music-functions.scm:354
 msgid "More alternatives than repeats.  Junking excess alternatives"
 msgstr ""
 
-#: music-functions.scm:487
+#: music-functions.scm:489
 #, scheme-format
 msgid "bad grob property path ~a"
 msgstr ""
 
-#: music-functions.scm:511
+#: music-functions.scm:513
 #, scheme-format
 msgid "bad context property ~a"
 msgstr ""
 
-#: music-functions.scm:534
+#: music-functions.scm:536
 #, scheme-format
 msgid "bad music property ~a"
 msgstr ""
 
-#: music-functions.scm:842
+#: music-functions.scm:844
 msgid "Bad chord repetition"
 msgstr ""
 
-#: music-functions.scm:947
+#: music-functions.scm:949
 #, scheme-format
 msgid "music expected: ~S"
 msgstr ""
 
-#: music-functions.scm:1297
+#: music-functions.scm:1299
 #, scheme-format
 msgid "cannot find quoted music: `~S'"
 msgstr ""
 
-#: music-functions.scm:1434
+#: music-functions.scm:1436
 msgid "Add @var{octave-shift} to the octave of @var{pitch}."
 msgstr ""
 
-#: music-functions.scm:1497
+#: music-functions.scm:1499
 #, scheme-format
 msgid "Unknown octaveness type: ~S "
 msgstr ""
 
-#: music-functions.scm:1498
+#: music-functions.scm:1500
 msgid "Defaulting to 'any-octave."
 msgstr ""
 
-#: music-functions.scm:1872
+#: music-functions.scm:1874
 #, scheme-format
 msgid "unknown accidental style: ~S"
 msgstr ""
 
-#: music-functions.scm:2097
+#: music-functions.scm:2099
 msgid "Missing duration"
 msgstr ""
 
-#: music-functions.scm:2633
+#: music-functions.scm:2635
 #, scheme-format
 msgid "not a symbol list: ~a"
 msgstr ""
 
-#: music-functions.scm:2636
+#: music-functions.scm:2638
 #, scheme-format
 msgid "conflicting tag group ~a"
 msgstr ""
 
-#: output-ps.scm:271 output-svg.scm:539
+#: output-ps.scm:271 output-svg.scm:544
 #, scheme-format
 msgid "unknown line-cap-style: ~S"
 msgstr ""
 
-#: output-ps.scm:276 output-svg.scm:545
+#: output-ps.scm:276 output-svg.scm:550
 #, scheme-format
 msgid "unknown line-join-style: ~S"
 msgstr ""
 
-#: output-svg.scm:148
+#: output-svg.scm:153
 #, scheme-format
 msgid "cannot decypher Pango description: ~a"
 msgstr ""
 
-#: output-svg.scm:228
+#: output-svg.scm:233
 msgid "Glyph must have a unicode value"
 msgstr ""
 
-#: output-svg.scm:280 output-svg.scm:290
+#: output-svg.scm:285 output-svg.scm:295
 #, scheme-format
 msgid "cannot find SVG font ~S"
 msgstr ""
index f64312a839ce01d3f32d56711502926f172eb442..b3000400da3848a799ce35aec09116dcca2efba8 100644 (file)
@@ -3903,6 +3903,29 @@ def conv (str):
                   '', str)
     return str
 
+@rule ((2, 19, 49), r"""id -> output-attributes.id or output-attributes
+for \tweak, \override, \overrideProperty, and \revert""")
+def conv (str):
+    # path cannot start with '-' or '_' and matches zero or more path
+    # units that each end in a dot
+    path = r"(?:[a-zA-Z\200-\377](?:[-_]?[a-zA-Z\200-\377])*(?:\s*\.\s*))*"
+
+    # Manual editing is needed when id is set to #(...) or \xxx
+    manual_edits = r"(\\(?:tweak|override|overrideProperty)\s+" + path + r")id(\s*=?\s*(?:\\|#\s*\())"
+    automatic = r"(\\(?:tweak|override|overrideProperty|revert)\s+" + path + r")id"
+    if re.search (manual_edits, str):
+        stderr_write (NOT_SMART % "\"output-attributes\"")
+        stderr_write (_ ("Previously the \"id\" grob property (string) was used for SVG output.") + "\n")
+        stderr_write (_ ("Now \"output-attributes\" (association list) is used instead.") + "\n")
+        stderr_write (UPDATE_MANUALLY)
+
+    # First, for manual editing cases we convert 'id' to 'output-attributes'
+    # because Grob.output-attributes.id = #(lambda ... ) will not work.
+    # Then for the rest we convert 'id' to 'output-attributes.id'
+    str = re.sub (manual_edits, r"\1output-attributes\2", str)
+    str = re.sub (automatic, r"\1output-attributes.id", str)
+    return str
+
 # Guidelines to write rules (please keep this at the end of this file)
 #
 # - keep at most one rule per version; if several conversions should be done,
index d55ab4c8c788449af838d45b2afd55b9b1e8247c..06358986b077bad2934e73eeac7fac2c4850c4af 100644 (file)
@@ -524,13 +524,7 @@ left and one to the right of this grob.")
 ;;;
 ;;; i
 ;;;
-     (id ,string? "An id string for the grob.  Depending on the typestting
-backend being used, this id will be assigned to a group containing all of
-the stencils that comprise a given grob.  For example, in the svg backend,
-the string will be assigned to the @code{id} attribute of a group (<g>)
-that encloses the stencils that comprise the grob.  In the Postscript
-backend, as there is no way to group items, the setting of the id property
-will have no effect.")
+     (id ,string? "An id string for the grob.")
      (ignore-ambitus ,boolean? "If set, don't consider this notehead
 for ambitus calculation.")
      (ignore-collision ,boolean? "If set, don't do note collision
@@ -720,6 +714,14 @@ different voices. Default value@tie{}1.")
 ;;;
 ;;; o
 ;;;
+     (output-attributes ,list? "An alist of attributes for the grob, to
+be included in output files.  When the SVG typesetting backend is used,
+the attributes are assigned to a group (<g>) containing all of the
+stencils that comprise a given grob.  For example,
+@code{'((id . 123) (class . foo) (data-whatever . @qq{bar}))} will produce
+@code{<g id=@qq{123} class=@qq{foo} data-whatever=@qq{bar}> @dots{} </g>}.
+In the Postscript backend, where there is no way to group items, the
+setting of the output-attributes property will have no effect.")
      (outside-staff-horizontal-padding ,number? "By default, an
 outside-staff-object can be placed so that is it very close to another
 grob horizontally.  If this property is set, the outside-staff-object
index 7eb31a9600432afd6f8bec6dc8b19e8a3cdff5d4..23c17abb9be42fabe29f8ef9584ced97dd2440d5 100644 (file)
@@ -29,7 +29,7 @@ defined in the output modules (@file{output-*.scm})."
     ellipse
     embedded-ps
     embedded-svg
-    end-enclosing-id-node
+    end-group-node
     glyph-string
     grob-cause
     named-glyph
@@ -46,7 +46,7 @@ defined in the output modules (@file{output-*.scm})."
     setcolor
     setrotation
     setscale
-    start-enclosing-id-node
+    start-group-node
     text
     unknown
     url-link
@@ -63,7 +63,7 @@ are used internally in @file{lily/@/stencil-interpret.cc}."
     combine-stencil
     delay-stencil-evaluation
     footnote
-    id
+    output-attributes
     rotate-stencil
     scale-stencil
     translate-stencil
index 48aaf68239a164bef2a8ed9e299e19c3e2216a15..409090b7a515b09e5842c22c4633ca9828bab310 100644 (file)
@@ -632,7 +632,7 @@ returns @samp{1/3}."
                   (flatten-list
                    (map (lambda (x)
                           (coord-translate
-                           (coord-rotate x (atan (/ y (* 2 0.25))))
+                           (coord-rotated x (cons y (* 2 0.25)))
                            '(1.0 . 0)))
                         l)))
                 `(((0 . ,y) (,x . ,y) (,x . 0))
@@ -644,7 +644,7 @@ returns @samp{1/3}."
          (map (lambda (l)
                 (flatten-list
                  (map (lambda (x)
-                        (coord-rotate x (atan (/ y (* 2 0.25)))))
+                        (coord-rotated x (cons y (* 2 0.25))))
                       l)))
               `(,(list-tail up-part 1)
                 ,(list-head down-part 1)
@@ -938,16 +938,27 @@ returns @samp{1/3}."
 
 (define saxophone-rh-high-fis-key-stencil
   (standard-path-stencil
-   (append
-    '((0.0 1.0) (0.0 1.4 0.6 1.4 0.6 1.0) (0.6 0.0))
-    (map (lambda (l)
-           (flatten-list
-            (map (lambda (x)
-                   (coord-rotate x (atan (* -1 (/ PI 6)))))
-                 l)))
-         '(((0.6 . -1.0))
-           ((0.6 . -1.4) (0.0 . -1.4) (0.0 . -1.0))
-           ((0.0 . 0.0)))))
+   (let* ((angle -30)
+          (dir2 (ly:directed (* -0.5 angle)))
+          ;; This comparatively awful expression calculates how far
+          ;; along the tangents opened by 'angle' with a radius of 0.6
+          ;; the control points need to move in order to have the
+          ;; middle of the bezier curve exactly on radius.
+          (out (* 0.6 (coord-y dir2) (- 4/3 (* 1/3 (coord-x dir2))))))
+     (append
+      '((0.0 1.0) (0.0 1.4 0.6 1.4 0.6 1.0) (0.6 0.0))
+      `((0.6 ,(- out)
+             ,@(flatten-list (map (lambda (x) (coord-rotated x angle))
+                                  `((0.6 . ,out)
+                                    (0.6 . 0.0))))))
+      (map (lambda (l)
+             (flatten-list
+              (map (lambda (x)
+                     (coord-rotated x angle))
+                   l)))
+           '(((0.6 . -1.0))
+             ((0.6 . -1.4) (0.0 . -1.4) (0.0 . -1.0))
+             ((0.0 . 0.0))))))
    0.75
    0.75))
 
index bbbe3cc53acebcd12ad2406cf9fde2a50b07a8e1..214c095cf2c720c0429cb8dfc6b753acc1304b77 100644 (file)
@@ -708,29 +708,15 @@ right (@var{dir}=+1)."
   (coord-operation * amount coordinate))
 
 (define-public (coord-rotate coordinate angle-in-radians)
-  ;; getting around (sin PI) not being exactly zero by switching to cos at
-  ;; appropiate angles and/or taking the negative value (vice versa for cos)
-  (let* ((quadrant (inexact->exact (round (/ angle-in-radians (/ PI 2)))))
-         (moved-angle (- angle-in-radians (* quadrant (/ PI 2))))
-         (s (sin moved-angle))
-         (c (cos moved-angle))
-         (x (coord-x coordinate))
-         (y (coord-y coordinate)))
-    (case (modulo quadrant 4)
-      ((0) ;; -45 .. 45
-       (cons (- (* c x) (* s y))
-             (+ (* s x) (* c y))))
-      ((1) ;; 45 .. 135
-       (cons (- (* (- s) x) (* c y))
-             (+ (* c x) (* (- s) y))))
-      ((2) ;; 135 .. 225
-       (cons (- (* (- c) x) (* (- s) y))
-             (+ (* (- s) x) (* (- c) y))))
-      ((3) ;; 225 .. 315
-       (cons (- (* s x) (* (- c) y))
-             (+ (* (- c) x) (* s y))))
-      ;; for other angles (modulo quadrant 4) returns one of the above cases
-       )))
+  (coord-rotated coordinate (/ angle-in-radians PI-OVER-180)))
+
+(define-public (coord-rotated coordinate direction)
+  ;; Same, in degrees or with a given direction
+  (let ((dir (ly:directed direction)))
+    (cons (- (* (car dir) (car coordinate))
+             (* (cdr dir) (cdr coordinate)))
+          (+ (* (car dir) (cdr coordinate))
+             (* (cdr dir) (car coordinate))))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; trig
index 9c36ceaf4d4c51d3097797256c9e195c157ad330..e7728ec8893fa6e128b71d9be9d9b2be01b3f990 100644 (file)
@@ -82,31 +82,33 @@ First it recurses over the children, then the function is applied to
 (define-public (music-filter pred? music)
   "Filter out music expressions that do not satisfy @var{pred?}."
 
-  (define (inner-music-filter pred? music)
+  (define (inner-music-filter music)
     "Recursive function."
     (let* ((es (ly:music-property music 'elements))
            (e (ly:music-property music 'element))
            (as (ly:music-property music 'articulations))
-           (filtered-as (filter ly:music? (map (lambda (y) (inner-music-filter pred? y)) as)))
+           (filtered-as (filter ly:music? (map inner-music-filter as)))
            (filtered-e (if (ly:music? e)
-                           (inner-music-filter pred? e)
+                           (inner-music-filter e)
                            e))
-           (filtered-es (filter ly:music? (map (lambda (y) (inner-music-filter pred? y)) es))))
+           (filtered-es (filter ly:music? (map inner-music-filter es))))
       (if (not (null? e))
           (set! (ly:music-property music 'element) filtered-e))
       (if (not (null? es))
           (set! (ly:music-property music 'elements) filtered-es))
       (if (not (null? as))
           (set! (ly:music-property music 'articulations) filtered-as))
-      ;; if filtering emptied the expression, we remove it completely.
+      ;; if filtering invalidated 'element, we remove the music unless
+      ;; there are remaining 'elements in which case we just hope and
+      ;; pray.
       (if (or (not (pred? music))
-              (and (eq? filtered-es '()) (not (ly:music? e))
-                   (or (not (eq? es '()))
-                       (ly:music? e))))
+              (and (null? filtered-es)
+                   (not (ly:music? filtered-e))
+                   (ly:music? e)))
           (set! music '()))
       music))
 
-  (set! music (inner-music-filter pred? music))
+  (set! music (inner-music-filter music))
   (if (ly:music? music)
       music
       (make-music 'Music)))       ;must return music.
index 6d3ab63c2fcf30dd78370cd7cb97e9b458abbe0e..97909da80cf6b8537ba39fcbc384825156361978 100644 (file)
        "false")
    radius thick))
 
-(define (start-enclosing-id-node s)
+(define (start-group-node attributes)
   "")
 
-(define (end-enclosing-id-node)
+(define (end-group-node)
   "")
 
 (define (dashed-line thick on off dx dy phase)
index 78bda3c35b8c88f376fadc6f9d471597ca1ba482..653664122cd5d20befb84ed84fa4147ec6690840 100644 (file)
   "c = close"
   (format #f "</~S>\n" entity))
 
-(define (start-enclosing-id-node s)
-  (string-append "<g id=\"" s "\">\n"))
-
-(define (end-enclosing-id-node)
+(define (start-group-node attributes)
+  (define attributes-string
+    (string-concatenate
+     (map (lambda (item)
+            (ly:format " ~a=\"~a\"" (car item) (cdr item)))
+       attributes)))
+  (string-append "<g" attributes-string ">\n"))
+
+(define (end-group-node)
   "</g>\n")
 
 (define-public (comment s)
index bda7e29a8f204aeb3d4fc3bce2670b1a4c90917a..17f5f9084f69c9364e39d703de9dc17b182d848e 100644 (file)
@@ -751,21 +751,18 @@ of the white stencil we make between 0 and 2*pi."
       (begin
        (ly:warning "Both angle-increments and radial-increments must be positive numbers.")
        stil)
-      (let* ((2pi 6.283185307)
-             (angle-inc (/ 2pi angle-increments))
+      (let* ((angle-inc (/ 360 angle-increments))
              (radial-inc (/ thickness radial-increments)))
 
         (define (circle-plot ang dec radius original-stil new-stil)
-          ;; ang (angle) and dec (decrement) are in radians, not degrees
+          ;; ang (angle) and dec (decrement) are in degrees, not radians
           (if (<= ang 0)
               new-stil
               (circle-plot (- ang dec) dec radius original-stil
                 (ly:stencil-add
                  new-stil
                  (ly:stencil-translate original-stil
-                   (cons
-                    (* radius (cos ang))
-                    (* radius (sin ang))))))))
+                   (ly:directed ang radius))))))
 
         (define (radial-plot radius original-stil new-stil)
           (if (<= radius 0)
@@ -774,7 +771,7 @@ of the white stencil we make between 0 and 2*pi."
                 (radial-plot
                  (- radius radial-inc)
                  original-stil
-                 (circle-plot 2pi angle-inc
+                 (circle-plot 360 angle-inc
                    radius original-stil empty-stencil)))))
 
         (let ((whiteout-expr
index 79bc925655d9deefe09158674f6a9affac10cc0d..fad2bc4dc3457a917b4c023d5cdf63efc1ee7811 100644 (file)
@@ -3,7 +3,7 @@
 % Load plain if necessary, i.e., if running under initex.
 \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
 %
-\def\texinfoversion{2016-07-20.14}
+\def\texinfoversion{2016-09-17.16}
 %
 % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
 % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
@@ -862,36 +862,6 @@ where each line of input produces a line of output.}
   \temp
 }
 
-% @| inserts a changebar to the left of the current line.  It should
-% surround any changed text.  This approach does *not* work if the
-% change spans more than two lines of output.  To handle that, we would
-% have adopt a much more difficult approach (putting marks into the main
-% vertical list for the beginning and end of each change).  This command
-% is not documented, not supported, and doesn't work.
-%
-\def\|{%
-  % \vadjust can only be used in horizontal mode.
-  \leavevmode
-  %
-  % Append this vertical mode material after the current line in the output.
-  \vadjust{%
-    % We want to insert a rule with the height and depth of the current
-    % leading; that is exactly what \strutbox is supposed to record.
-    \vskip-\baselineskip
-    %
-    % \vadjust-items are inserted at the left edge of the type.  So
-    % the \llap here moves out into the left-hand margin.
-    \llap{%
-      %
-      % For a thicker or thinner bar, change the `1pt'.
-      \vrule height\baselineskip width1pt
-      %
-      % This is the space between the bar and the text.
-      \hskip 12pt
-    }%
-  }%
-}
-
 % @include FILE -- \input text of FILE.
 %
 \def\include{\parseargusing\filenamecatcodes\includezzz}
@@ -1108,9 +1078,14 @@ where each line of input produces a line of output.}
 % For LuaTeX
 %
 
+\newif\iftxiuseunicodedestname
+\txiuseunicodedestnamefalse % For pdfTeX etc.
+
 \ifx\luatexversion\thisisundefined
 \else
-  % Escape PDF strings UTF-8 to UTF-16
+  % Use Unicode destination names
+  \txiuseunicodedestnametrue
+  % Escape PDF strings with converting UTF-16 from UTF-8
   \begingroup
     \catcode`\%=12
     \directlua{
@@ -1138,7 +1113,24 @@ where each line of input produces a line of output.}
       end
     }
   \endgroup
-  \def\pdfescapestring#1{\directlua{UTF16oct('\luaescapestring{#1}')}}
+  \def\pdfescapestrutfsixteen#1{\directlua{UTF16oct('\luaescapestring{#1}')}}
+  % Escape PDF strings without converting
+  \begingroup
+    \directlua{
+      function PDFescstr(str)
+        for c in string.bytes(str) do
+          if c <= 0x20 or c >= 0x80 or c == 0x28 or c == 0x29 or c == 0x5c then
+            tex.sprint(
+              string.format(string.char(0x5c) .. string.char(0x25) .. '03o',
+                            c))
+          else
+            tex.sprint(string.char(c))
+          end
+        end
+      end
+    }
+  \endgroup
+  \def\pdfescapestring#1{\directlua{PDFescstr('\luaescapestring{#1}')}}
   \ifnum\luatexversion>84
     % For LuaTeX >= 0.85
     \def\pdfdest{\pdfextension dest}
@@ -1199,6 +1191,14 @@ where each line of input produces a line of output.}
     \xdef#1{\pdfescapestring{#1}}%
   \fi
 }
+\def\txiescapepdfutfsixteen#1{%
+  \ifx\pdfescapestrutfsixteen\thisisundefined
+    % No UTF-16 converting macro available.
+    \txiescapepdf{#1}%
+  \else
+    \xdef#1{\pdfescapestrutfsixteen{#1}}%
+  \fi
+}
 
 \newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images
 with PDF output, and none of those formats could be found.  (.eps cannot
@@ -1308,19 +1308,77 @@ output) for that.)}
       \pdfrefximage \pdflastximage
     \fi}
   %
-  \def\pdfmkdest#1{{%
+  \def\setpdfdestname#1{{%
     % We have to set dummies so commands such as @code, and characters
     % such as \, aren't expanded when present in a section title.
     \indexnofonts
     \makevalueexpandable
     \turnoffactive
-    % Use ASCII approximations in destination names.
-    \passthroughcharsfalse
+    \iftxiuseunicodedestname
+      \ifx \declaredencoding \latone
+        % Pass through Latin-1 characters.
+        % LuaTeX with byte wise I/O converts Latin-1 characters to Unicode.
+      \else
+        \ifx \declaredencoding \utfeight
+          % Pass through Unicode characters.
+        \else
+          % Use ASCII approximations in destination names.
+          \passthroughcharsfalse
+        \fi
+      \fi
+    \else
+      % Use ASCII approximations in destination names.
+      \passthroughcharsfalse
+    \fi
     \def\pdfdestname{#1}%
     \txiescapepdf\pdfdestname
-    \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
   }}
   %
+  \def\setpdfoutlinetext#1{{%
+    \indexnofonts
+    \makevalueexpandable
+    \turnoffactive
+    \ifx \declaredencoding \latone
+      % The PDF format can use an extended form of Latin-1 in bookmark
+      % strings.  See Appendix D of the PDF Reference, Sixth Edition, for
+      % the "PDFDocEncoding".
+      \passthroughcharstrue
+      % Pass through Latin-1 characters.
+      %   LuaTeX: Convert to Unicode
+      %   pdfTeX: Use Latin-1 as PDFDocEncoding
+      \def\pdfoutlinetext{#1}%
+    \else
+      \ifx \declaredencoding \utfeight
+        \ifx\luatexversion\thisisundefined
+          % For pdfTeX  with UTF-8.
+          % TODO: the PDF format can use UTF-16 in bookmark strings,
+          % but the code for this isn't done yet.
+          % Use ASCII approximations.
+          \passthroughcharsfalse
+          \def\pdfoutlinetext{#1}%
+        \else
+          % For LuaTeX with UTF-8.
+          % Pass through Unicode characters for title texts.
+          \passthroughcharstrue
+          \def\pdfoutlinetext{#1}%
+        \fi
+      \else
+        % For non-Latin-1 or non-UTF-8 encodings.
+        % Use ASCII approximations.
+        \passthroughcharsfalse
+        \def\pdfoutlinetext{#1}%
+      \fi
+    \fi
+    % LuaTeX: Convert to UTF-16
+    % pdfTeX: Use Latin-1 as PDFDocEncoding
+    \txiescapepdfutfsixteen\pdfoutlinetext
+  }}
+  %
+  \def\pdfmkdest#1{%
+    \setpdfdestname{#1}%
+    \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
+  }
+  %
   % used to mark target names; must be expandable.
   \def\pdfmkpgn#1{#1}
   %
@@ -1348,36 +1406,13 @@ output) for that.)}
     % page number.  We could generate a destination for the section
     % text in the case where a section has no node, but it doesn't
     % seem worth the trouble, since most documents are normally structured.
-    {
-      \ifx\luatexversion\thisisundefined \else
-        \turnoffactive % LuaTeX can use Unicode strings for PDF
-      \fi
-      \edef\pdfoutlinedest{#3}%
-      \ifx\pdfoutlinedest\empty
-        \def\pdfoutlinedest{#4}%
-      \else
-        \txiescapepdf\pdfoutlinedest
-      \fi
-      %
-      % Also escape PDF chars in the display string.
-      \bgroup
-        \ifx \declaredencoding \latone
-          % The PDF format can use an extended form of Latin-1 in bookmark
-          % strings.  See Appendix D of the PDF Reference, Sixth Edition, for
-          % the "PDFDocEncoding".
-          \passthroughcharstrue
-        \fi
-        \ifx \declaredencoding \utfeight
-          % TODO: the PDF format can use UTF-16 in bookmark strings, but the
-          % code for this isn't done yet.
-        \fi
-        \globaldefs=1
-        \edef\pdfoutlinetext{#1}%
-        \txiescapepdf\pdfoutlinetext
-      \egroup
-      %
-      \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}%
-    }
+    \setpdfoutlinetext{#1}
+    \setpdfdestname{#3}
+    \ifx\pdfdestname\empty
+      \def\pdfdestname{#4}%
+    \fi
+    %
+    \pdfoutline goto name{\pdfmkpgn{\pdfdestname}}#2{\pdfoutlinetext}%
   }
   %
   \def\pdfmakeoutlines{%
@@ -1535,7 +1570,6 @@ output) for that.)}
 %
 % For XeTeX
 %
-\newif\iftxiuseunicodedestname
 \ifx\XeTeXrevision\thisisundefined
 \else
   %
@@ -1543,73 +1577,125 @@ output) for that.)}
   %
   \ifnum\strcmp{\the\XeTeXversion\XeTeXrevision}{0.99996}>-1
     % TeX Live 2016 contains XeTeX 0.99996 and xdvipdfmx 20160307.
-    % It can be used `dvipdfmx:config' special (from TeX Live SVN r40941).
-    % For avoiding PDF destination name replacement, we use the special
-    % instead of xdvipdfmx commandline option `-C 0x0010'.
+    % It can use the `dvipdfmx:config' special (from TeX Live SVN r40941).
+    % For avoiding PDF destination name replacement, we use this special
+    % instead of xdvipdfmx's command line option `-C 0x0010'.
     \special{dvipdfmx:config C 0x0010}
-    % XeTeX 0.99995+ contains xdvipdfmx 20160307+.
-    % It can handle Unicode destination name for PDF.
+    % XeTeX 0.99995+ comes with xdvipdfmx 20160307+.
+    % It can handle Unicode destination names for PDF.
     \txiuseunicodedestnametrue
   \else
-    % XeTeX < 0.99996 (TeX Live < 2016) cannot be used
+    % XeTeX < 0.99996 (TeX Live < 2016) cannot use the
     % `dvipdfmx:config' special.
     % So for avoiding PDF destination name replacement,
-    % xdvipdfmx commandline option `-C 0x0010' is necessary.
+    % xdvipdfmx's command line option `-C 0x0010' is necessary.
     %
-    % XeTeX < 0.99995 can not handle Unicode destination name for PDF
-    % because xdvipdfmx 20150315 has UTF-16 convert issue.
-    % It fixed by xdvipdfmx 20160106 (TeX Live SVN r39753).
+    % XeTeX < 0.99995 can not handle Unicode destination names for PDF
+    % because xdvipdfmx 20150315 has a UTF-16 conversion issue.
+    % It is fixed by xdvipdfmx 20160106 (TeX Live SVN r39753).
     \txiuseunicodedestnamefalse
   \fi
   %
+  % Color support
+  %
+  \def\rgbDarkRed{0.50 0.09 0.12}
+  \def\rgbBlack{0 0 0}
+  %
+  \def\pdfsetcolor#1{\special{pdf:scolor [#1]}}
+  %
+  % Set color, and create a mark which defines \thiscolor accordingly,
+  % so that \makeheadline knows which color to restore.
+  \def\setcolor#1{%
+    \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}%
+    \domark
+    \pdfsetcolor{#1}%
+  }
+  %
+  \def\maincolor{\rgbBlack}
+  \pdfsetcolor{\maincolor}
+  \edef\thiscolor{\maincolor}
+  \def\lastcolordefs{}
+  %
+  \def\makefootline{%
+    \baselineskip24pt
+    \line{\pdfsetcolor{\maincolor}\the\footline}%
+  }
+  %
+  \def\makeheadline{%
+    \vbox to 0pt{%
+      \vskip-22.5pt
+      \line{%
+        \vbox to8.5pt{}%
+        % Extract \thiscolor definition from the marks.
+        \getcolormarks
+        % Typeset the headline with \maincolor, then restore the color.
+        \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}%
+      }%
+      \vss
+    }%
+    \nointerlineskip
+  }
+  %
   % PDF outline support
   %
-  % Emulate the primitive of pdfTeX
+  % Emulate pdfTeX primitive
   \def\pdfdest name#1 xyz{%
-    \special{pdf:dest (name#1) [@thispage /XYZ @xpos @ypos null]}%
+    \special{pdf:dest (#1) [@thispage /XYZ @xpos @ypos null]}%
   }
-  \def\pdfmkdest#1{{%
+  %
+  \def\setpdfdestname#1{{%
     % We have to set dummies so commands such as @code, and characters
     % such as \, aren't expanded when present in a section title.
     \indexnofonts
+    \makevalueexpandable
+    \turnoffactive
     \iftxiuseunicodedestname
-      \def\pdfdestname{#1}% Pass through Unicode characters.
+      % Pass through Unicode characters.
     \else
-      \edef\pdfdestname{#1}% Replace Unicode characters to ASCII.
+      % Use ASCII approximations in destination names.
+      \passthroughcharsfalse
     \fi
-    \turnoffactive
-    \makevalueexpandable
+    \def\pdfdestname{#1}%
     \txiescapepdf\pdfdestname
-    \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
   }}
   %
+  \def\setpdfoutlinetext#1{{%
+    \turnoffactive
+    % Always use Unicode characters in title texts.
+    \def\pdfoutlinetext{#1}%
+    % For XeTeX, xdvipdfmx converts to UTF-16.
+    % So we do not convert.
+    \txiescapepdf\pdfoutlinetext
+  }}
+  %
+  \def\pdfmkdest#1{%
+    \setpdfdestname{#1}%
+    \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
+  }
+  %
+  % by default, use black for everything.
+  \def\urlcolor{\rgbBlack}
+  \def\linkcolor{\rgbBlack}
+  \def\endlink{\setcolor{\maincolor}\pdfendlink}
+  %
   \def\dopdfoutline#1#2#3#4{%
-    \iftxiuseunicodedestname
-      \def\pdfoutlinedest{#3}% Pass through Unicode characters.
-    \else
-      \edef\pdfoutlinedest{#3}% Replace Unicode characters to ASCII.
+    \setpdfoutlinetext{#1}
+    \setpdfdestname{#3}
+    \ifx\pdfdestname\empty
+      \def\pdfdestname{#4}%
     \fi
-    \ifx\pdfoutlinedest\empty
-      \def\pdfoutlinedest{#4}%
-    \fi
-    {
-      \turnoffactive
-      \txiescapepdf\pdfoutlinedest
-      \edef\pdfoutlinetext{#1}%
-      \txiescapepdf\pdfoutlinetext
-      %
-      \special{pdf:out [-] #2 << /Title (\pdfoutlinetext) /A
-        << /S /GoTo /D (name\pdfoutlinedest) >> >> }%
-    }
+    %
+    \special{pdf:out [-] #2 << /Title (\pdfoutlinetext) /A
+      << /S /GoTo /D (\pdfdestname) >> >> }%
   }
   %
   \def\pdfmakeoutlines{%
     \begingroup
       %
-      % In the case of XeTeX, counts of subentries is not necesary.
-      % Therefore, read toc only once.
+      % For XeTeX, counts of subentries are not necessary.
+      % Therefore, we read toc only once.
       %
-      % We use the node names as the destinations.
+      % We use node names as destinations.
       \def\partentry##1##2##3##4{}% ignore parts in the outlines
       \def\numchapentry##1##2##3##4{%
         \dopdfoutline{##1}{1}{##3}{##4}}%
@@ -1629,7 +1715,7 @@ output) for that.)}
       \let\unnsubsecentry\numsubsecentry%
       \let\unnsubsubsecentry\numsubsubsecentry%
       %
-      % In the case of XeTeX, xdvipdfmx converts strings to UTF-16.
+      % For XeTeX, xdvipdfmx converts strings to UTF-16.
       % Therefore, the encoding and the language may not be considered.
       %
       \indexnofonts
@@ -1651,9 +1737,9 @@ output) for that.)}
   \special{pdf:docview << /PageMode /UseOutlines >> }
   % ``\special{pdf:tounicode ...}'' is not necessary
   % because xdvipdfmx converts strings from UTF-8 to UTF-16 without it.
-  % However, due to UTF-16 convert issue of xdvipdfmx 20150315,
-  % ``\special{pdf:dest ...}'' can not handle non-ASCII strings.
-  % It fixed by xdvipdfmx 20160106 (TeX Live SVN r39753).
+  % However, due to a UTF-16 conversion issue of xdvipdfmx 20150315,
+  % ``\special{pdf:dest ...}'' cannot handle non-ASCII strings.
+  % It is fixed by xdvipdfmx 20160106 (TeX Live SVN r39753).
 %
   \def\skipspaces#1{\def\PP{#1}\def\D{|}%
     \ifx\PP\D\let\nextsp\relax
@@ -1713,7 +1799,7 @@ output) for that.)}
     {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
   \def\pdflink#1{%
     \special{pdf:bann << /Border [0 0 0]
-      /Type /Annot /Subtype /Link /A << /S /GoTo /D (name#1) >> >>}%
+      /Type /Annot /Subtype /Link /A << /S /GoTo /D (#1) >> >>}%
     \setcolor{\linkcolor}#1\endlink}
   \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
 %
@@ -1725,7 +1811,7 @@ output) for that.)}
     \def\xeteximagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
     \def\xeteximageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
     %
-    % XeTeX (and the PDF format) support .pdf, .png, .jpg (among
+    % XeTeX (and the PDF format) supports .pdf, .png, .jpg (among
     % others).  Let's try in that order, PDF first since if
     % someone has a scalable image, presumably better to use that than a
     % bitmap.
@@ -1769,40 +1855,9 @@ output) for that.)}
   }
 \fi
 
-\message{fonts,}
-
-% Change the current font style to #1, remembering it in \curfontstyle.
-% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in
-% italics, not bold italics.
-%
-\def\setfontstyle#1{%
-  \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd.
-  \csname ten#1\endcsname  % change the current font
-}
 
-% Select #1 fonts with the current style.
 %
-\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname}
-
-\def\rm{\fam=0 \setfontstyle{rm}}
-\def\it{\fam=\itfam \setfontstyle{it}}
-\def\sl{\fam=\slfam \setfontstyle{sl}}
-\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf}
-\def\tt{\fam=\ttfam \setfontstyle{tt}}
-
-% Unfortunately, we have to override this for titles and the like, since
-% in those cases "rm" is bold.  Sigh.
-\def\rmisbold{\rm\def\curfontstyle{bf}}
-
-% Texinfo sort of supports the sans serif font style, which plain TeX does not.
-% So we set up a \sf.
-\newfam\sffam
-\def\sf{\fam=\sffam \setfontstyle{sf}}
-\let\li = \sf % Sometimes we call it \li, not \sf.
-
-% We don't need math for this font style.
-\def\ttsl{\setfontstyle{ttsl}}
-
+\message{fonts,}
 
 % Set the baselineskip to #1, and the lineskip and strut size
 % correspondingly.  There is no deep meaning behind these magic numbers
@@ -2153,8 +2208,8 @@ end
 \setfont\deftt\ttshape{10}{\magstep1}{OT1TT}
 \setfont\defsl\slshape{10}{\magstep1}{OT1TT}
 \setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT}
-\def\df{\let\tentt=\deftt \let\tenbf = \defbf
-\let\tenttsl=\defttsl \let\tensl=\defsl \bf}
+\def\df{\let\ttfont=\deftt \let\bffont = \defbf
+\let\ttfontsl=\defttsl \let\slfont=\defsl \bf}
 
 % Fonts for indices, footnotes, small examples (9pt).
 \def\smallnominalsize{9pt}
@@ -2287,8 +2342,8 @@ end
 \setfont\deftt\ttshape{10}{\magstephalf}{OT1TT}
 \setfont\defsl\slshape{10}{\magstephalf}{OT1TT}
 \setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT}
-\def\df{\let\tentt=\deftt \let\tenbf = \defbf
-\let\tensl=\defsl \let\tenttsl=\defttsl \bf}
+\def\df{\let\ttfont=\deftt \let\bffont = \defbf
+\let\slfont=\defsl \let\ttfontsl=\defttsl \bf}
 
 % Fonts for indices, footnotes, small examples (9pt).
 \def\smallnominalsize{9pt}
@@ -2394,6 +2449,12 @@ end
 \rm
 } % end of 10pt text font size definitions, \definetextfontsizex
 
+% Fonts for short table of contents.
+\setfont\shortcontrm\rmshape{12}{1000}{OT1}
+\setfont\shortcontbf\bfshape{10}{\magstep1}{OT1}  % no cmb12
+\setfont\shortcontsl\slshape{12}{1000}{OT1}
+\setfont\shortconttt\ttshape{12}{1000}{OT1TT}
+
 
 % We provide the user-level command
 %   @fonttextsize 10
@@ -2420,20 +2481,55 @@ end
  \endgroup
 }
 
+%
+% Change the current font style to #1, remembering it in \curfontstyle.
+% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in
+% italics, not bold italics.
+%
+\def\setfontstyle#1{%
+  \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd.
+  \csname #1font\endcsname  % change the current font
+}
+
+\def\rm{\fam=0 \setfontstyle{rm}}
+\def\it{\fam=\itfam \setfontstyle{it}}
+\def\sl{\fam=\slfam \setfontstyle{sl}}
+\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf}
+\def\tt{\fam=\ttfam \setfontstyle{tt}}
+
+% Unfortunately, we have to override this for titles and the like, since
+% in those cases "rm" is bold.  Sigh.
+\def\rmisbold{\rm\def\curfontstyle{bf}}
+
+% Texinfo sort of supports the sans serif font style, which plain TeX does not.
+% So we set up a \sf.
+\newfam\sffam
+\def\sf{\fam=\sffam \setfontstyle{sf}}
+
+% We don't need math for this font style.
+\def\ttsl{\setfontstyle{ttsl}}
+
+
 % In order for the font changes to affect most math symbols and letters,
 % we have to define the \textfont of the standard families.  We don't
 % bother to reset \scriptfont and \scriptscriptfont; awaiting user need.
 %
 \def\resetmathfonts{%
-  \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy
-  \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf
-  \textfont\ttfam=\tentt \textfont\sffam=\tensf
+  \textfont0=\rmfont \textfont1=\ifont \textfont2=\syfont
+  \textfont\itfam=\itfont \textfont\slfam=\slfont \textfont\bffam=\bffont
+  \textfont\ttfam=\ttfont \textfont\sffam=\sffont
 }
 
-% The font-changing commands redefine the meanings of \tenSTYLE, instead
+% Select #1 fonts with the current style.  Used to change font size
+% in, e.g., the LaTeX logo and acronyms.
+%
+\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname}
+
+% The font-changing commands (all called \...fonts) redefine the meanings of 
+% \STYLEfont, instead
 % of just \STYLE.  We do this because \STYLE needs to also set the
 % current \fam for math mode.  Our \STYLE (e.g., \rm) commands hardwire
-% \tenSTYLE to set the current font.
+% \STYLEfont to set the current font.
 %
 % Each font-changing command also sets the names \lsize (one size lower)
 % and \lllsize (three sizes lower).  These relative commands are used
@@ -2442,78 +2538,72 @@ end
 % This all needs generalizing, badly.
 %
 \def\textfonts{%
-  \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
-  \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
-  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy
-  \let\tenttsl=\textttsl
+  \let\rmfont=\textrm \let\itfont=\textit \let\slfont=\textsl
+  \let\bffont=\textbf \let\ttfont=\texttt \let\smallcaps=\textsc
+  \let\sffont=\textsf \let\ifont=\texti \let\syfont=\textsy
+  \let\ttfontsl=\textttsl
   \def\curfontsize{text}%
   \def\lsize{reduced}\def\lllsize{smaller}%
   \resetmathfonts \setleading{\textleading}}
 \def\titlefonts{%
-  \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
-  \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
-  \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
-  \let\tenttsl=\titlettsl
+  \let\rmfont=\titlerm \let\itfont=\titleit \let\slfont=\titlesl
+  \let\bffont=\titlebf \let\ttfont=\titlett \let\smallcaps=\titlesc
+  \let\sffont=\titlesf \let\ifont=\titlei \let\syfont=\titlesy
+  \let\ttfontsl=\titlettsl
   \def\curfontsize{title}%
   \def\lsize{chap}\def\lllsize{subsec}%
   \resetmathfonts \setleading{27pt}}
 \def\titlefont#1{{\titlefonts\rmisbold #1}}
 \def\chapfonts{%
-  \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
-  \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
-  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy
-  \let\tenttsl=\chapttsl
+  \let\rmfont=\chaprm \let\itfont=\chapit \let\slfont=\chapsl
+  \let\bffont=\chapbf \let\ttfont=\chaptt \let\smallcaps=\chapsc
+  \let\sffont=\chapsf \let\ifont=\chapi \let\syfont=\chapsy
+  \let\ttfontsl=\chapttsl
   \def\curfontsize{chap}%
   \def\lsize{sec}\def\lllsize{text}%
   \resetmathfonts \setleading{19pt}}
 \def\secfonts{%
-  \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
-  \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
-  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy
-  \let\tenttsl=\secttsl
+  \let\rmfont=\secrm \let\itfont=\secit \let\slfont=\secsl
+  \let\bffont=\secbf \let\ttfont=\sectt \let\smallcaps=\secsc
+  \let\sffont=\secsf \let\ifont=\seci \let\syfont=\secsy
+  \let\ttfontsl=\secttsl
   \def\curfontsize{sec}%
   \def\lsize{subsec}\def\lllsize{reduced}%
   \resetmathfonts \setleading{17pt}}
 \def\subsecfonts{%
-  \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
-  \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
-  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy
-  \let\tenttsl=\ssecttsl
+  \let\rmfont=\ssecrm \let\itfont=\ssecit \let\slfont=\ssecsl
+  \let\bffont=\ssecbf \let\ttfont=\ssectt \let\smallcaps=\ssecsc
+  \let\sffont=\ssecsf \let\ifont=\sseci \let\syfont=\ssecsy
+  \let\ttfontsl=\ssecttsl
   \def\curfontsize{ssec}%
   \def\lsize{text}\def\lllsize{small}%
   \resetmathfonts \setleading{15pt}}
 \let\subsubsecfonts = \subsecfonts
 \def\reducedfonts{%
-  \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl
-  \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc
-  \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy
-  \let\tenttsl=\reducedttsl
+  \let\rmfont=\reducedrm \let\itfont=\reducedit \let\slfont=\reducedsl
+  \let\bffont=\reducedbf \let\ttfont=\reducedtt \let\reducedcaps=\reducedsc
+  \let\sffont=\reducedsf \let\ifont=\reducedi \let\syfont=\reducedsy
+  \let\ttfontsl=\reducedttsl
   \def\curfontsize{reduced}%
   \def\lsize{small}\def\lllsize{smaller}%
   \resetmathfonts \setleading{10.5pt}}
 \def\smallfonts{%
-  \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl
-  \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
-  \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
-  \let\tenttsl=\smallttsl
+  \let\rmfont=\smallrm \let\itfont=\smallit \let\slfont=\smallsl
+  \let\bffont=\smallbf \let\ttfont=\smalltt \let\smallcaps=\smallsc
+  \let\sffont=\smallsf \let\ifont=\smalli \let\syfont=\smallsy
+  \let\ttfontsl=\smallttsl
   \def\curfontsize{small}%
   \def\lsize{smaller}\def\lllsize{smaller}%
   \resetmathfonts \setleading{10.5pt}}
 \def\smallerfonts{%
-  \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl
-  \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc
-  \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy
-  \let\tenttsl=\smallerttsl
+  \let\rmfont=\smallerrm \let\itfont=\smallerit \let\slfont=\smallersl
+  \let\bffont=\smallerbf \let\ttfont=\smallertt \let\smallcaps=\smallersc
+  \let\sffont=\smallersf \let\ifont=\smalleri \let\syfont=\smallersy
+  \let\ttfontsl=\smallerttsl
   \def\curfontsize{smaller}%
   \def\lsize{smaller}\def\lllsize{smaller}%
   \resetmathfonts \setleading{9.5pt}}
 
-% Fonts for short table of contents.
-\setfont\shortcontrm\rmshape{12}{1000}{OT1}
-\setfont\shortcontbf\bfshape{10}{\magstep1}{OT1}  % no cmb12
-\setfont\shortcontsl\slshape{12}{1000}{OT1}
-\setfont\shortconttt\ttshape{12}{1000}{OT1TT}
-
 % Define these just so they can be easily changed for other fonts.
 \def\angleleft{$\langle$}
 \def\angleright{$\rangle$}
@@ -3297,23 +3387,10 @@ end
 \let\atchar=\@
 
 % @{ @} @lbracechar{} @rbracechar{} all generate brace characters.
-% Unless we're in typewriter, use \ecfont because the CM text fonts do
-% not have braces, and we don't want to switch into math.
-\def\mylbrace{{\ifmonospace\char123\else\ensuremath\lbrace\fi}}
-\def\myrbrace{{\ifmonospace\char125\else\ensuremath\rbrace\fi}}
-\let\{=\mylbrace \let\lbracechar=\{
-\let\}=\myrbrace \let\rbracechar=\}
-\begingroup
-  % Definitions to produce \{ and \} commands for indices,
-  % and @{ and @} for the aux/toc files.
-  \catcode`\{ = \other \catcode`\} = \other
-  \catcode`\[ = 1 \catcode`\] = 2
-  \catcode`\! = 0 \catcode`\\ = \other
-  !gdef!lbracecmd[\{]%
-  !gdef!rbracecmd[\}]%
-  !gdef!lbraceatcmd[@{]%
-  !gdef!rbraceatcmd[@}]%
-!endgroup
+\def\lbracechar{{\ifmonospace\char123\else\ensuremath\lbrace\fi}}
+\def\rbracechar{{\ifmonospace\char125\else\ensuremath\rbrace\fi}}
+\let\{=\lbracechar
+\let\}=\rbracechar
 
 % @comma{} to avoid , parsing problems.
 \let\comma = ,
@@ -3432,7 +3509,7 @@ end
 %
 \newbox\errorbox
 %
-{\tentt \global\dimen0 = 3em}% Width of the box.
+{\ttfont \global\dimen0 = 3em}% Width of the box.
 \dimen2 = .55pt % Thickness of rules
 % The text. (`r' is open on the right, `e' somewhat less so on the left.)
 \setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt}
@@ -3691,7 +3768,7 @@ end
 
 % Macros to be used within @titlepage:
 
-\let\subtitlerm=\tenrm
+\let\subtitlerm=\rmfont
 \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}
 
 \parseargdef\title{%
@@ -3896,7 +3973,7 @@ end
 
 
 \message{tables,}
-% Tables -- @table, @ftable, @ktable, @vtable, @item(x).
+% Tables -- @table, @ftable, @vtable, @item(x).
 
 % default indentation of table text
 \newdimen\tableindent \tableindent=.8in
@@ -3908,7 +3985,7 @@ end
 % used internally for \itemindent minus \itemmargin
 \newdimen\itemmax
 
-% Note @table, @ftable, @ktable and @vtable define @item, @itemx, etc., with
+% Note @table, @ftable, and @vtable define @item, @itemx, etc., with
 % these defs.
 % They also define \itemindex
 % to index the item name in whatever manner is desired (perhaps none).
@@ -3976,7 +4053,7 @@ end
 \def\item{\errmessage{@item while not in a list environment}}
 \def\itemx{\errmessage{@itemx while not in a list environment}}
 
-% @table, @ftable, @ktable, @vtable.
+% @table, @ftable, @vtable.
 \envdef\table{%
   \let\itemindex\gobble
   \tablecheck{table}%
@@ -3985,10 +4062,6 @@ end
   \def\itemindex ##1{\doind {fn}{\code{##1}}}%
   \tablecheck{ftable}%
 }
-\envdef\ktable{%
-  \def\itemindex ##1{\doind {ky}{\code{##1}}}%
-  \tablecheck{ktable}%
-}
 \envdef\vtable{%
   \def\itemindex ##1{\doind {vr}{\code{##1}}}%
   \tablecheck{vtable}%
@@ -4032,7 +4105,6 @@ end
 }
 \def\Etable{\endgraf\afterenvbreak}
 \let\Eftable\Etable
-\let\Ektable\Etable
 \let\Evtable\Etable
 \let\Eitemize\Etable
 \let\Eenumerate\Etable
@@ -4786,14 +4858,7 @@ end
 % #1 is \doindex or \docodeindex, #2 the index getting redefined (foo),
 % #3 the target index (bar).
 \def\dosynindex#1#2#3{%
-  % Only do \closeout if we haven't already done it, else we'll end up
-  % closing the target index.
-  \expandafter \ifx\csname donesynindex#2\endcsname \relax
-    % The \closeout helps reduce unnecessary open files; the limit on the
-    % Acorn RISC OS is a mere 16 files.
-    \expandafter\closeout\csname#2indfile\endcsname
-    \expandafter\let\csname donesynindex#2\endcsname = 1
-  \fi
+  \requireopenindexfile{#3}%
   % redefine \fooindfile:
   \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
   \expandafter\let\csname#2indfile\endcsname=\temp
@@ -4818,17 +4883,12 @@ end
 %
 \def\indexdummies{%
   \escapechar = `\\     % use backslash in output files.
-  \def\@{@}% change to @@ when we switch to @ as escape char in index files.
-  \def\ {\realbackslash\space }%
-  %
-  % Need these unexpandable (because we define \tt as a dummy)
-  % definitions when @{ or @} appear in index entry text.  Also, more
-  % complicated, when \tex is in effect and \{ is a \delimiter again.
-  % We can't use \lbracecmd and \rbracecmd because texindex assumes
-  % braces and backslashes are used only as delimiters.  Perhaps we
-  % should use @lbracechar and @rbracechar?
-  \def\{{{\tt\char123}}%
-  \def\}{{\tt\char125}}%
+  \definedummyletter\@%
+  \definedummyletter\ %
+  %
+  % For texindex which always views { and } as separators.
+  \def\{{\lbracechar{}}%
+  \def\}{\rbracechar{}}%
   %
   % Do the redefinitions.
   \definedummies
@@ -4836,16 +4896,11 @@ end
 
 % Used for the aux and toc files, where @ is the escape character.
 %
-% For the aux and toc files, @ is the escape character.  So we want to
-% redefine everything using @ as the escape character (instead of
-% \realbackslash, still used for index files).  When everything uses @,
-% this will be simpler.
-%
 \def\atdummies{%
-  \def\@{@@}%
-  \def\ {@ }%
-  \let\{ = \lbraceatcmd
-  \let\} = \rbraceatcmd
+  \definedummyletter\@%
+  \definedummyletter\ %
+  \definedummyletter\{%
+  \definedummyletter\}%
   %
   % Do the redefinitions.
   \definedummies
@@ -4917,6 +4972,7 @@ end
   \definedummyword\TeX
   %
   % Assorted special characters.
+  \definedummyword\atchar
   \definedummyword\arrow
   \definedummyword\bullet
   \definedummyword\comma
@@ -5133,37 +5189,40 @@ end
   \def\LaTeX{LaTeX}%
   \def\TeX{TeX}%
   %
-  % Assorted special characters.
-  % (The following {} will end up in the sort string, but that's ok.)
-  \def\arrow{->}%
-  \def\bullet{bullet}%
-  \def\comma{,}%
-  \def\copyright{copyright}%
-  \def\dots{...}%
-  \def\enddots{...}%
-  \def\equiv{==}%
-  \def\error{error}%
-  \def\euro{euro}%
-  \def\expansion{==>}%
-  \def\geq{>=}%
-  \def\guillemetleft{<<}%
-  \def\guillemetright{>>}%
-  \def\guilsinglleft{<}%
-  \def\guilsinglright{>}%
-  \def\leq{<=}%
-  \def\minus{-}%
-  \def\point{.}%
-  \def\pounds{pounds}%
-  \def\print{-|}%
-  \def\quotedblbase{"}%
-  \def\quotedblleft{"}%
-  \def\quotedblright{"}%
-  \def\quoteleft{`}%
-  \def\quoteright{'}%
-  \def\quotesinglbase{,}%
-  \def\registeredsymbol{R}%
-  \def\result{=>}%
-  \def\textdegree{o}%
+  % Assorted special characters.  \defglyph gives the control sequence a
+  % definition that removes the {} that follows its use.
+  \defglyph\atchar{@}%
+  \defglyph\arrow{->}%
+  \defglyph\bullet{bullet}%
+  \defglyph\comma{,}%
+  \defglyph\copyright{copyright}%
+  \defglyph\dots{...}%
+  \defglyph\enddots{...}%
+  \defglyph\equiv{==}%
+  \defglyph\error{error}%
+  \defglyph\euro{euro}%
+  \defglyph\expansion{==>}%
+  \defglyph\geq{>=}%
+  \defglyph\guillemetleft{<<}%
+  \defglyph\guillemetright{>>}%
+  \defglyph\guilsinglleft{<}%
+  \defglyph\guilsinglright{>}%
+  \defglyph\leq{<=}%
+  \defglyph\lbracechar{\{}%
+  \defglyph\minus{-}%
+  \defglyph\point{.}%
+  \defglyph\pounds{pounds}%
+  \defglyph\print{-|}%
+  \defglyph\quotedblbase{"}%
+  \defglyph\quotedblleft{"}%
+  \defglyph\quotedblright{"}%
+  \defglyph\quoteleft{`}%
+  \defglyph\quoteright{'}%
+  \defglyph\quotesinglbase{,}%
+  \defglyph\rbracechar{\}}%
+  \defglyph\registeredsymbol{R}%
+  \defglyph\result{=>}%
+  \defglyph\textdegree{o}%
   %
   % We need to get rid of all macros, leaving only the arguments (if present).
   % Of course this is not nearly correct, but it is the best we can do for now.
@@ -5178,6 +5237,7 @@ end
   \macrolist
   \let\value\indexnofontsvalue
 }
+\def\defglyph#1#2{\def#1##1{#2}} % see above
 
 \f
 
@@ -5427,7 +5487,7 @@ end
   % \initial {@}
   % as its first line, TeX doesn't complain about mismatched braces
   % (because it thinks @} is a control sequence).
-  \catcode`\@ = 11
+  \catcode`\@ = 12
   % See comment in \requireopenindexfile.
   \def\indexname{#1}\ifx\indexname\indexisfl\def\indexname{f1}\fi
   \openin 1 \jobname.\indexname s
@@ -5455,7 +5515,7 @@ end
       \let\indexlbrace\{   % Likewise, set these sequences for braces
       \let\indexrbrace\}   % used in the sort key.
       \begindoublecolumns
-      \let\entryorphanpenalty=\indexorphanpenalty
+      \let\entrywidowpenalty=\indexwidowpenalty
       %
       % Read input from the index file line by line.
       \loopdo
@@ -5555,6 +5615,12 @@ end
 %
 \def\entry{%
   \begingroup
+    %
+    % For pdfTeX and XeTeX.
+    % The redefinition of \domark stops marks being added in \pdflink to 
+    % preserve coloured links across page boundaries.  Otherwise the marks
+    % would get in the way of \lastbox in \insertindexentrybox.
+    \let\domark\relax
     %
     % Start a new paragraph if necessary, so our assignments below can't
     % affect previous text.
@@ -5569,10 +5635,6 @@ end
     \def\*{\unskip\space\ignorespaces}%
     \def\entrybreak{\hfil\break}% An undocumented command
     %
-    % A bit of stretch before each entry for the benefit of balancing
-    % columns.
-    \vskip 0pt plus0.5pt
-    %
     % Swallow the left brace of the text (first parameter):
     \afterassignment\doentry
     \let\temp =
@@ -5606,20 +5668,13 @@ end
       %
       \ifpdf
         \pdfgettoks#1.%
-        \bgroup\let\domark\relax
-          \hskip\skip\thinshrinkable\the\toksA
-        \egroup
-        % The redefinion of \domark stops marks being added in \pdflink to 
-        % preserve coloured links across page boundaries.  Otherwise the marks
-        % would get in the way of \lastbox in \insertindexentrybox.
+        \hskip\skip\thinshrinkable\the\toksA
       \else
         \ifx\XeTeXrevision\thisisundefined
           \hskip\skip\thinshrinkable #1%
         \else
           \pdfgettoks#1.%
-          \bgroup\let\domark\relax
-            \hskip\skip\thinshrinkable\the\toksA
-          \egroup
+          \hskip\skip\thinshrinkable\the\toksA
         \fi
       \fi
     \fi
@@ -5628,11 +5683,10 @@ end
       \global\setbox\entryindexbox=\vbox{\unhbox\boxA}%
     \else
     \global\setbox\entryindexbox=\vbox\bgroup
-      \prevdepth=\entrylinedepth
-      \noindent
       % We want the text of the entries to be aligned to the left, and the
       % page numbers to be aligned to the right.
       %
+      \parindent = 0pt
       \advance\leftskip by 0pt plus 1fil
       \advance\leftskip by 0pt plus -1fill
       \rightskip = 0pt plus -1fil
@@ -5641,8 +5695,6 @@ end
       % if the list of page numbers is long, to be aligned to the right.
       \parfillskip=0pt plus -1fill
       %
-      \hangindent=1em
-      %
       \advance\rightskip by \entryrightmargin
       % Determine how far we can stretch into the margin.
       % This allows, e.g., "Appendix H  GNU Free Documentation License" to
@@ -5662,17 +5714,21 @@ end
       \ifdim\dimen@ > 0.8\dimen@ii   % due to long index text
         \dimen@ = 0.7\dimen@ % Try to split the text roughly evenly
         \dimen@ii = \hsize
-        \advance \dimen@ii by -1em
         \ifnum\dimen@>\dimen@ii
           % If the entry is too long, use the whole line
           \dimen@ = \dimen@ii
         \fi
         \advance\leftskip by 0pt plus 1fill % ragged right
         \advance \dimen@ by 1\rightskip
-        \parshape = 2 0pt \dimen@ 1em \dimen@ii
-        % Ideally we'd add a finite glue at the end of the first line only, but
-        % TeX doesn't seem to provide a way to do such a thing.
+        \parshape = 2 0pt \dimen@ 0em \dimen@ii
+        % Ideally we'd add a finite glue at the end of the first line only,
+        % instead of using \parshape with explicit line lengths, but TeX
+        % doesn't seem to provide a way to do such a thing.
+        %
+        \leftskip = 1em
+        \parindent = -1em
       \fi\fi
+      \indent % start paragraph
       \unhbox\boxA
       %
       % Do not prefer a separate line ending with a hyphen to fewer lines.
@@ -5690,7 +5746,7 @@ end
   \endgroup
   % delay text of entry until after penalty
   \bgroup\aftergroup\insertindexentrybox
-  \entryorphanpenalty
+  \entrywidowpenalty
 }}
 
 \newskip\thinshrinkable
@@ -5698,40 +5754,43 @@ end
 
 \newbox\entryindexbox
 \def\insertindexentrybox{%
-  \copy\entryindexbox
-  % The following gets the depth of the last box.  This is for even
-  % line spacing when entries span several lines.
-  \setbox\dummybox\vbox{%
-    \unvbox\entryindexbox
-    \nointerlineskip
-    \lastbox
-    \global\entrylinedepth=\prevdepth
+  \ourunvbox\entryindexbox
+}
+
+% Use \lastbox to take apart vbox box by box, and add each sub-box
+% to the current vertical list.
+\def\ourunvbox#1{%
+\bgroup % for local binding of \delayedbox
+  % Remove the last box from box #1
+  \global\setbox#1=\vbox{%
+    \unvbox#1%
+    \unskip % remove any glue
+    \unpenalty
+    \global\setbox\interbox=\lastbox
   }%
-  % Note that we couldn't simply \unvbox\entryindexbox followed by 
-  % \nointerlineskip\lastbox to remove the last box and then reinstate it, 
-  % because this resets how far the box has been \moveleft'ed to 0.  \unvbox
-  % doesn't affect \prevdepth either.
+  \setbox\delayedbox=\box\interbox
+  \ifdim\ht#1=0pt\else
+    \ourunvbox#1 % Repeat on what's left of the box
+    \nobreak
+  \fi
+  \box\delayedbox
+\egroup
 }
-\newdimen\entrylinedepth
+\newbox\delayedbox
+\newbox\interbox
 
 % Default is no penalty
-\let\entryorphanpenalty\egroup
+\let\entrywidowpenalty\egroup
 
 % Used from \printindex.  \firsttoken should be the first token
 % after the \entry.  If it's not another \entry, we are at the last
 % line of a group of index entries, so insert a penalty to discourage
-% orphaned index entries.
-\long\def\indexorphanpenalty{%
+% widowed index entries.
+\long\def\indexwidowpenalty{%
   \def\isentry{\entry}%
   \ifx\firsttoken\isentry
   \else
-    \unskip\penalty 9000
-    % The \unskip here stops breaking before the glue.  It relies on the
-    % \vskip above being there, otherwise there is an error
-    % "You can't use `\unskip' in vertical mode".  There has to be glue
-    % in the current vertical list that hasn't been added to the
-    % "current page".  See Chapter 24 of the TeXbook.  This contradicts
-    % Section 8.3.7 in "TeX by Topic," though.
+    \penalty 9000
   \fi
   \egroup % now comes the box added with \aftergroup
 }
@@ -5771,8 +5830,6 @@ end
 
 \newbox\partialpage
 \newdimen\doublecolumnhsize
-\newdimen\doublecolumntopgap
-\doublecolumntopgap = 0pt
 
 % Use inside an output routine to save \topmark and \firstmark
 \def\savemarks{%
@@ -5855,12 +5912,10 @@ end
   %
   % Double the \vsize as well.  (We don't need a separate register here,
   % since nobody clobbers \vsize.)
-  \global\doublecolumntopgap = \topskip
-  \global\advance\doublecolumntopgap by -1\baselineskip
-  \advance\vsize by -1\doublecolumntopgap
   \vsize = 2\vsize
-  \topskip=0pt
-  \global\entrylinedepth=0pt\relax
+  %
+  % For the benefit of balancing columns
+  \advance\baselineskip by 0pt plus 0.5pt
 }
 
 % The double-column output routine for all double-column pages except
@@ -5890,9 +5945,7 @@ end
   %
   \hsize = \doublecolumnhsize
   \wd0=\hsize \wd2=\hsize
-  \vbox{%
-    \vskip\doublecolumntopgap
-    \hbox to\txipagewidth{\box0\hfil\box2}}%
+  \hbox to\txipagewidth{\box0\hfil\box2}%
 }
 
 
@@ -5959,51 +6012,44 @@ end
   \dimen@ = \ht0
   \advance\dimen@ by \topskip
   \advance\dimen@ by-\baselineskip
-  \ifdim\dimen@<14\baselineskip
+  \ifdim\dimen@<5\baselineskip
     % Don't split a short final column in two.
     \setbox2=\vbox{}%
   \else
     \divide\dimen@ by 2 % target to split to
     \dimen@ii = \dimen@
     \splittopskip = \topskip
-    % Loop until the second column is no higher than the first
+    % Loop until left column is at least as high as the right column.
     {%
       \vbadness = 10000
       \loop
         \global\setbox3 = \copy0
         \global\setbox1 = \vsplit3 to \dimen@
-        % Remove glue from bottom of first column to
-        % make sure it is higher than the second.
-        \global\setbox1 = \vbox{\unvbox1\unpenalty\unskip}%
-      \ifdim\ht3>\ht1
+      \ifdim\ht1<\ht3
         \global\advance\dimen@ by 1pt
       \repeat
     }%
+    % Now the left column is in box 1, and the right column in box 3.
+    % Check whether the left column has come out higher than the page itself.  
+    % (Note that we have doubled \vsize for the double columns, so
+    % the actual height of the page is 0.5\vsize).
     \ifdim2\ht1>\vsize
-      % The left column has come out longer than the page itself.  (Note
-      % that we have doubled \vsize for the double columns, so
-      % the actual height of the page is 0.5\vsize).  Just split the last
-      % of the double column material roughly in half.
+      % Just split the last of the double column material roughly in half.
       \setbox2=\box0
       \setbox0 = \vsplit2 to \dimen@ii
-      \setbox0=\vbox to\dimen@ii{\unvbox0}%
-      \setbox2=\vbox to\dimen@ii{\unvbox2}%
+      \setbox0=\vbox to \dimen@ii {\unvbox0\vfill}%
+      \setbox2=\vbox to \dimen@ii {\unvbox2\vfill}%
     \else
-      \multiply\dimen@ii by 5
-      \divide\dimen@ii by 4
-      \global\setbox3 = \copy0
-      \global\setbox1 = \vsplit3 to \dimen@ii
-      \global\setbox\balancedcolumns=\vbox{\pagesofar}%
-      \ifdim\ht3<\dimen@ii
+      % Compare the heights of the two columns.
+      \ifdim4\ht1>5\ht3
         % Column heights are too different, so don't make their bottoms
-        % flush with each other.  The glue at the end of the second column
-        % allows a second column to stretch, reducing the difference in
-        % height between the two.
-        \setbox0=\vbox to\dimen@{\unvbox1\vfill}%
-        \setbox2=\vbox to\dimen@{\unvbox3\vskip 0pt plus 0.3\ht0}%
+        % flush with each other.
+        \setbox2=\vbox to \ht1 {\unvbox3\vfill}%
+        \setbox0=\vbox to \ht1 {\unvbox1\vfill}%
       \else
-        \setbox0=\vbox to\dimen@{\unvbox1}%
-        \setbox2=\vbox to\dimen@{\unvbox3}%
+        % Make column bottoms flush with each other.
+        \setbox2=\vbox to\ht1{\unvbox3\unskip}%
+        \setbox0=\vbox to\ht1{\unvbox1\unskip}%
       \fi
     \fi
   \fi
@@ -7874,7 +7920,7 @@ end
     \fi           % no return type
     #3% output function name
   }%
-  {\rm\enskip}% hskip 0.5 em of \tenrm
+  {\rm\enskip}% hskip 0.5 em of \rmfont
   %
   \boldbrax
   % arguments will be output next, if any.
@@ -8838,8 +8884,8 @@ end
   \ifpdf
     % For pdfTeX and LuaTeX
     {\indexnofonts
-     \turnoffactive
      \makevalueexpandable
+     \turnoffactive
      % This expands tokens, so do it after making catcode changes, so _
      % etc. don't get their TeX definitions.  This ignores all spaces in
      % #4, including (wrongly) those in the middle of the filename.
@@ -8847,19 +8893,18 @@ end
      %
      % This (wrongly) does not take account of leading or trailing
      % spaces in #1, which should be ignored.
-     \edef\pdfxrefdest{#1}%
-     \ifx\pdfxrefdest\empty
-       \def\pdfxrefdest{Top}% no empty targets
-     \else
-       \txiescapepdf\pdfxrefdest  % escape PDF special chars
+     \setpdfdestname{#1}%
+     %
+     \ifx\pdfdestname\empty
+       \def\pdfdestname{Top}% no empty targets
      \fi
      %
      \leavevmode
      \startlink attr{/Border [0 0 0]}%
      \ifnum\filenamelength>0
-       goto file{\the\filename.pdf} name{\pdfxrefdest}%
+       goto file{\the\filename.pdf} name{\pdfdestname}%
      \else
-       goto name{\pdfmkpgn{\pdfxrefdest}}%
+       goto name{\pdfmkpgn{\pdfdestname}}%
      \fi
     }%
     \setcolor{\linkcolor}%
@@ -8868,8 +8913,8 @@ end
     \else
       % For XeTeX
       {\indexnofonts
-       \turnoffactive
        \makevalueexpandable
+       \turnoffactive
        % This expands tokens, so do it after making catcode changes, so _
        % etc. don't get their TeX definitions.  This ignores all spaces in
        % #4, including (wrongly) those in the middle of the filename.
@@ -8877,32 +8922,27 @@ end
        %
        % This (wrongly) does not take account of leading or trailing
        % spaces in #1, which should be ignored.
-       \iftxiuseunicodedestname
-         \def\pdfxrefdest{#1}% Pass through Unicode characters.
-       \else
-         \edef\pdfxrefdest{#1}% Replace Unicode characters to ASCII.
-       \fi
-       \ifx\pdfxrefdest\empty
-         \def\pdfxrefdest{Top}% no empty targets
-       \else
-         \txiescapepdf\pdfxrefdest  % escape PDF special chars
+       \setpdfdestname{#1}%
+       %
+       \ifx\pdfdestname\empty
+         \def\pdfdestname{Top}% no empty targets
        \fi
        %
        \leavevmode
        \ifnum\filenamelength>0
-         % By the default settings,
+         % With default settings,
          % XeTeX (xdvipdfmx) replaces link destination names with integers.
          % In this case, the replaced destination names of
-         % remote PDF cannot be known. In order to avoid replacement,
-         % you can use commandline option `-C 0x0010' for xdvipdfmx.
+         % remote PDFs are no longer known.  In order to avoid a replacement,
+         % you can use xdvipdfmx's command line option `-C 0x0010'.
          % If you use XeTeX 0.99996+ (TeX Live 2016+),
-         % the commandline option is not neccesary
-         % because we can use `dvipdfmx:config' special.
+         % this command line option is no longer necessary
+         % because we can use the `dvipdfmx:config' special.
          \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A
-           << /S /GoToR /F (\the\filename.pdf) /D (name\pdfxrefdest) >> >>}%
+           << /S /GoToR /F (\the\filename.pdf) /D (\pdfdestname) >> >>}%
        \else
          \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A
-           << /S /GoTo /D (name\pdfxrefdest) >> >>}%
+           << /S /GoTo /D (\pdfdestname) >> >>}%
        \fi
       }%
       \setcolor{\linkcolor}%
@@ -9809,9 +9849,9 @@ directory should work if nowhere else does.}
   \global\righthyphenmin = #3\relax
 }
 
-% XeTeX and LuaTeX can handle native Unicode.
-% Their default I/O is UTF-8 sequence instead of byte-wise.
-% Other TeX engine (pdfTeX etc.) I/O is byte-wise.
+% XeTeX and LuaTeX can handle Unicode natively.
+% Their default I/O uses UTF-8 sequences instead of a byte-wise operation.
+% Other TeX engines' I/O (pdfTeX, etc.) is byte-wise.
 %
 \newif\iftxinativeunicodecapable
 \newif\iftxiusebytewiseio
@@ -9935,14 +9975,15 @@ directory should work if nowhere else does.}
   %
   \else \ifx \declaredencoding \utfeight
      \iftxinativeunicodecapable
-       % For native Unicode (XeTeX and LuaTeX)
+       % For native Unicode handling (XeTeX and LuaTeX)
        \nativeunicodechardefs
      \else
-       % For UTF-8 byte sequence (TeX, eTeX and pdfTeX)
+       % For treating UTF-8 as byte sequences (TeX, eTeX and pdfTeX)
        \setnonasciicharscatcode\active
        % since we already invoked \utfeightchardefs at the top level
-       % (below), do not re-invoke it, then our check for duplicated
-       % definitions triggers.  Making non-ascii chars active is enough.
+       % (below), do not re-invoke it, otherwise our check for duplicated
+       % definitions gets triggered.  Making non-ascii chars active is
+       % sufficient.
      \fi
   %
   \else
@@ -9953,6 +9994,18 @@ directory should work if nowhere else does.}
   \fi % latone
   \fi % lattwo
   \fi % ascii
+  %
+  \ifx\XeTeXrevision\thisisundefined
+  \else
+    \ifx \declaredencoding \utfeight
+    \else
+      \ifx \declaredencoding \ascii
+      \else
+        \message{Warning: XeTeX with non-UTF-8 encodings cannot handle %
+        non-ASCII characters in auxiliary files.}%
+      \fi
+    \fi
+  \fi
 }
 
 % emacs-page
@@ -9984,18 +10037,18 @@ directory should work if nowhere else does.}
   \gdefchar^^a0{\tie}
   \gdefchar^^a1{\exclamdown}
   \gdefchar^^a2{{\tcfont \char162}} % cent
-  \gdefchar^^a3{\pounds}
+  \gdefchar^^a3{\pounds{}}
   \gdefchar^^a4{{\tcfont \char164}} % currency
   \gdefchar^^a5{{\tcfont \char165}} % yen
   \gdefchar^^a6{{\tcfont \char166}} % broken bar
   \gdefchar^^a7{\S}
   \gdefchar^^a8{\"{}}
-  \gdefchar^^a9{\copyright}
+  \gdefchar^^a9{\copyright{}}
   \gdefchar^^aa{\ordf}
-  \gdefchar^^ab{\guillemetleft}
+  \gdefchar^^ab{\guillemetleft{}}
   \gdefchar^^ac{\ensuremath\lnot}
   \gdefchar^^ad{\-}
-  \gdefchar^^ae{\registeredsymbol}
+  \gdefchar^^ae{\registeredsymbol{}}
   \gdefchar^^af{\={}}
   %
   \gdefchar^^b0{\textdegree}
@@ -10009,7 +10062,7 @@ directory should work if nowhere else does.}
   \gdefchar^^b8{\cedilla\ }
   \gdefchar^^b9{$^1$}
   \gdefchar^^ba{\ordm}
-  \gdefchar^^bb{\guillemetright}
+  \gdefchar^^bb{\guillemetright{}}
   \gdefchar^^bc{$1\over4$}
   \gdefchar^^bd{$1\over2$}
   \gdefchar^^be{$3\over4$}
@@ -10089,7 +10142,7 @@ directory should work if nowhere else does.}
   % Encoding is almost identical to Latin1.
   \latonechardefs
   %
-  \gdefchar^^a4{\euro}
+  \gdefchar^^a4{\euro{}}
   \gdefchar^^a6{\v S}
   \gdefchar^^a8{\v s}
   \gdefchar^^b4{\v Z}
@@ -10118,7 +10171,7 @@ directory should work if nowhere else does.}
   \gdefchar^^ae{\v Z}
   \gdefchar^^af{\dotaccent Z}
   %
-  \gdefchar^^b0{\textdegree}
+  \gdefchar^^b0{\textdegree{}}
   \gdefchar^^b1{\ogonek{a}}
   \gdefchar^^b2{\ogonek{ }}
   \gdefchar^^b3{\l}
@@ -10290,8 +10343,9 @@ directory should work if nowhere else does.}
 \def\U#1{%
   \expandafter\ifx\csname uni:#1\endcsname \relax
     \iftxinativeunicodecapable
-      % Any Unicode characters can be used by native Unicode.
-      % However, if the font does not have the glyph, the letter will miss.
+      % All Unicode characters can be used if native Unicode handling is
+      % active.  However, if the font does not have the glyph,
+      % letters are missing.
       \begingroup
         \uccode`\.="#1\relax
         \uppercase{.}
@@ -10314,9 +10368,9 @@ directory should work if nowhere else does.}
 \def\UTFviiiFourOctetsName#1#2#3#4{%
   \csname u8:#1\string #2\string #3\string #4\endcsname}%
 
-% For UTF-8 byte sequence (TeX, e-TeX and pdfTeX)
-% Definition macro to replace the Unicode character
-% Definition macro that is used by @U command
+% For UTF-8 byte sequences (TeX, e-TeX and pdfTeX),
+% provide a definition macro to replace a Unicode character;
+% this gets used by the @U command
 %
 \begingroup
   \catcode`\"=12
@@ -10404,8 +10458,8 @@ directory should work if nowhere else does.}
     \uppercase{\gdef\UTFviiiTmp{#2#3#4}}}
 \endgroup
 
-% For native Unicode (XeTeX and LuaTeX)
-% Definition macro that is set catcode other non global
+% For native Unicode handling (XeTeX and LuaTeX),
+% provide a definition macro that sets a catcode to `other' non-globally
 %
 \def\DeclareUnicodeCharacterNativeOther#1#2{%
   \catcode"#1=\other
@@ -10429,18 +10483,18 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{00A0}{\tie}%
   \DeclareUnicodeCharacter{00A1}{\exclamdown}%
   \DeclareUnicodeCharacter{00A2}{{\tcfont \char162}}% 0242=cent
-  \DeclareUnicodeCharacter{00A3}{\pounds}%
+  \DeclareUnicodeCharacter{00A3}{\pounds{}}%
   \DeclareUnicodeCharacter{00A4}{{\tcfont \char164}}% 0244=currency
   \DeclareUnicodeCharacter{00A5}{{\tcfont \char165}}% 0245=yen
   \DeclareUnicodeCharacter{00A6}{{\tcfont \char166}}% 0246=brokenbar
   \DeclareUnicodeCharacter{00A7}{\S}%
   \DeclareUnicodeCharacter{00A8}{\"{ }}%
-  \DeclareUnicodeCharacter{00A9}{\copyright}%
+  \DeclareUnicodeCharacter{00A9}{\copyright{}}%
   \DeclareUnicodeCharacter{00AA}{\ordf}%
-  \DeclareUnicodeCharacter{00AB}{\guillemetleft}%
+  \DeclareUnicodeCharacter{00AB}{\guillemetleft{}}%
   \DeclareUnicodeCharacter{00AC}{\ensuremath\lnot}%
   \DeclareUnicodeCharacter{00AD}{\-}%
-  \DeclareUnicodeCharacter{00AE}{\registeredsymbol}%
+  \DeclareUnicodeCharacter{00AE}{\registeredsymbol{}}%
   \DeclareUnicodeCharacter{00AF}{\={ }}%
   %
   \DeclareUnicodeCharacter{00B0}{\ringaccent{ }}%
@@ -10454,7 +10508,7 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{00B8}{\cedilla{ }}%
   \DeclareUnicodeCharacter{00B9}{$^1$}%
   \DeclareUnicodeCharacter{00BA}{\ordm}%
-  \DeclareUnicodeCharacter{00BB}{\guillemetright}%
+  \DeclareUnicodeCharacter{00BB}{\guillemetright{}}%
   \DeclareUnicodeCharacter{00BC}{$1\over4$}%
   \DeclareUnicodeCharacter{00BD}{$1\over2$}%
   \DeclareUnicodeCharacter{00BE}{$3\over4$}%
@@ -10926,36 +10980,36 @@ directory should work if nowhere else does.}
   % Punctuation
   \DeclareUnicodeCharacter{2013}{--}%
   \DeclareUnicodeCharacter{2014}{---}%
-  \DeclareUnicodeCharacter{2018}{\quoteleft}%
-  \DeclareUnicodeCharacter{2019}{\quoteright}%
-  \DeclareUnicodeCharacter{201A}{\quotesinglbase}%
-  \DeclareUnicodeCharacter{201C}{\quotedblleft}%
-  \DeclareUnicodeCharacter{201D}{\quotedblright}%
-  \DeclareUnicodeCharacter{201E}{\quotedblbase}%
+  \DeclareUnicodeCharacter{2018}{\quoteleft{}}%
+  \DeclareUnicodeCharacter{2019}{\quoteright{}}%
+  \DeclareUnicodeCharacter{201A}{\quotesinglbase{}}%
+  \DeclareUnicodeCharacter{201C}{\quotedblleft{}}%
+  \DeclareUnicodeCharacter{201D}{\quotedblright{}}%
+  \DeclareUnicodeCharacter{201E}{\quotedblbase{}}%
   \DeclareUnicodeCharacter{2020}{\ensuremath\dagger}%
   \DeclareUnicodeCharacter{2021}{\ensuremath\ddagger}%
-  \DeclareUnicodeCharacter{2022}{\bullet}%
+  \DeclareUnicodeCharacter{2022}{\bullet{}}%
   \DeclareUnicodeCharacter{202F}{\thinspace}%
-  \DeclareUnicodeCharacter{2026}{\dots}%
-  \DeclareUnicodeCharacter{2039}{\guilsinglleft}%
-  \DeclareUnicodeCharacter{203A}{\guilsinglright}%
+  \DeclareUnicodeCharacter{2026}{\dots{}}%
+  \DeclareUnicodeCharacter{2039}{\guilsinglleft{}}%
+  \DeclareUnicodeCharacter{203A}{\guilsinglright{}}%
   %
-  \DeclareUnicodeCharacter{20AC}{\euro}%
+  \DeclareUnicodeCharacter{20AC}{\euro{}}%
   %
-  \DeclareUnicodeCharacter{2192}{\expansion}%
-  \DeclareUnicodeCharacter{21D2}{\result}%
+  \DeclareUnicodeCharacter{2192}{\expansion{}}%
+  \DeclareUnicodeCharacter{21D2}{\result{}}%
   %
   % Mathematical symbols
   \DeclareUnicodeCharacter{2200}{\ensuremath\forall}%
   \DeclareUnicodeCharacter{2203}{\ensuremath\exists}%
   \DeclareUnicodeCharacter{2208}{\ensuremath\in}%
-  \DeclareUnicodeCharacter{2212}{\minus}%
+  \DeclareUnicodeCharacter{2212}{\minus{}}%
   \DeclareUnicodeCharacter{2217}{\ast}%
   \DeclareUnicodeCharacter{221E}{\ensuremath\infty}%
   \DeclareUnicodeCharacter{2225}{\ensuremath\parallel}%
   \DeclareUnicodeCharacter{2227}{\ensuremath\wedge}%
   \DeclareUnicodeCharacter{2229}{\ensuremath\cap}%
-  \DeclareUnicodeCharacter{2261}{\equiv}%
+  \DeclareUnicodeCharacter{2261}{\equiv{}}%
   \DeclareUnicodeCharacter{2264}{\ensuremath\leq}%
   \DeclareUnicodeCharacter{2265}{\ensuremath\geq}%
   \DeclareUnicodeCharacter{2282}{\ensuremath\subset}%
@@ -11111,8 +11165,8 @@ directory should work if nowhere else does.}
 \newif\ifpassthroughchars
 \passthroughcharsfalse
 
-% For native Unicode (XeTeX and LuaTeX)
-% Definition macro to replace / pass-through the Unicode character
+% For native Unicode handling (XeTeX and LuaTeX),
+% provide a definition macro to replace/pass-through a Unicode character
 %
 \def\DeclareUnicodeCharacterNative#1#2{%
   \catcode"#1=\active
@@ -11135,21 +11189,22 @@ directory should work if nowhere else does.}
   \endgroup
 }
 
-% Native Unicode (XeTeX and LuaTeX) character replacing definitions
-% It makes the setting that replace the Unicode characters.
+% Native Unicode handling (XeTeX and LuaTeX) character replacing definition.
+% It activates the setting that replaces Unicode characters.
 \def\nativeunicodechardefs{%
   \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNative
   \unicodechardefs
 }
 
-% For native Unicode (XeTeX and LuaTeX).  Make the character token expand
+% For native Unicode handling (XeTeX and LuaTeX),
+% make the character token expand
 % to the sequences given in \unicodechardefs for printing.
 \def\DeclareUnicodeCharacterNativeAtU#1#2{%
   \def\UTFAtUTmp{#2}
   \expandafter\globallet\csname uni:#1\endcsname \UTFAtUTmp
 }
 
-% Native Unicode (XeTeX and LuaTeX) @U command definitions
+% @U command definitions for native Unicode handling (XeTeX and LuaTeX).
 \def\nativeunicodechardefsatu{%
   \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNativeAtU
   \unicodechardefs
@@ -11160,7 +11215,7 @@ directory should work if nowhere else does.}
    \relax
 }
 
-% define all the unicode characters we know about, for the sake of @U.
+% define all Unicode characters we know about, for the sake of @U.
 \iftxinativeunicodecapable
   \nativeunicodechardefsatu
 \else
@@ -11636,7 +11691,4 @@ directory should work if nowhere else does.}
 
 @c vim:sw=2:
 
-@ignore
-   arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115
-@end ignore
 @enablebackslashhack