]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge branch 'lilypond/translation' of ssh://jomand@git.sv.gnu.org/srv/git/lilypond
authorJohn Mandereau <john.mandereau@gmail.com>
Fri, 8 May 2009 10:06:00 +0000 (12:06 +0200)
committerJohn Mandereau <john.mandereau@gmail.com>
Fri, 8 May 2009 10:06:00 +0000 (12:06 +0200)
113 files changed:
input/lsr/adding-the-current-date-to-a-score.ly
input/lsr/aligning-and-centering-instrument-names.ly
input/lsr/aligning-bar-numbers.ly
input/lsr/aligning-marks-with-various-notation-objects.ly
input/lsr/arabic-improvisation.ly
input/lsr/book-parts.ly
input/lsr/broken-crescendo-hairpin.ly
input/lsr/center-text-below-hairpin-dynamics.ly
input/lsr/changing-form-of-multi--measure-rests.ly
input/lsr/changing-properties-for-individual-grobs.ly
input/lsr/changing-text-and-spanner-styles-for-text-dynamics.ly
input/lsr/changing-the-tempo-without-a-metronome-mark.ly
input/lsr/changing-the-time-signature-without-affecting-the-beaming.ly
input/lsr/changing-the-tuplet-number.ly
input/lsr/changing-time-signatures-inside-a-polymetric-section-using-scaledurations.ly
input/lsr/chordchanges-for-fretboards.ly
input/lsr/clip-systems.ly
input/lsr/coloring-notes-depending-on-their-pitch.ly
input/lsr/compound-time-signatures.ly
input/lsr/creating-a-delayed-turn.ly
input/lsr/creating-metronome-marks-in-markup-mode.ly
input/lsr/creating-simultaneous-rehearsal-marks.ly
input/lsr/creating-text-spanners.ly
input/lsr/customizing-fretboard-fret-diagrams.ly
input/lsr/customizing-markup-fret-diagrams.ly
input/lsr/defining-predefined-fretboards-for-other-instruments.ly
input/lsr/display-bracket-with-only-one-staff-in-a-system.ly
input/lsr/dodecaphonic-style-accidentals-for-each-note-including-naturals.ly
input/lsr/dotted-harmonics.ly
input/lsr/drawing-boxes-around-grobs.ly
input/lsr/drawing-circles-around-various-objects.ly
input/lsr/engraving-ties-manually.ly
input/lsr/entering-several-tuplets-using-only-one--times-command.ly
input/lsr/fine-tuning-pedal-brackets.ly
input/lsr/flute-slap-notation.ly
input/lsr/fret-diagrams-explained-and-developed.ly
input/lsr/guitar-strum-rhythms.ly
input/lsr/heavily-customized-polymetric-time-signatures.ly
input/lsr/incipit.ly
input/lsr/inserting-a-caesura.ly
input/lsr/letter-tablature-formatting.ly
input/lsr/line-arrows.ly
input/lsr/makam-example.ly
input/lsr/making-an-object-invisible-with-the-transparent-property.ly
input/lsr/making-slurs-with-complex-dash-structure.ly
input/lsr/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly
input/lsr/markup-lines.ly
input/lsr/modern-tab-text-clef.ly
input/lsr/multi--measure-rest-markup.ly
input/lsr/non-default-tuplet-numbers.ly
input/lsr/non-traditional-key-signatures.ly
input/lsr/orchestra-choir-and-piano-template.ly
input/lsr/ottava-text.ly
input/lsr/outputting-the-version-number.ly
input/lsr/page-label.ly
input/lsr/percent-repeat-count-visibility.ly
input/lsr/permitting-line-breaks-within-beamed-tuplets.ly
input/lsr/piano-template-with-centered-dynamics.ly
input/lsr/positioning-grace-notes-with-floating-space.ly
input/lsr/positioning-multi--measure-rests.ly
input/lsr/printing-bar-numbers-at-regular-intervals.ly
input/lsr/printing-bar-numbers-inside-boxes-or-circles.ly
input/lsr/printing-the-bar-number-for-the-first-measure.ly
input/lsr/quoting-another-voice-with-transposition.ly
input/lsr/quoting-another-voice.ly
input/lsr/redefining-grace-note-global-defaults.ly
input/lsr/removing-bar-numbers-from-a-score.ly
input/lsr/rest-styles.ly
input/lsr/setting-hairpin-behavior-at-bar-lines.ly
input/lsr/snap-pizzicato-markup-bartok-pizzicato.ly
input/lsr/specifying-context-with-beatgrouping.ly
input/lsr/suppressing-warnings-for-clashing-note-columns.ly
input/lsr/table-of-contents.ly
input/lsr/text.snippet-list
input/lsr/tick-bar-lines.ly
input/lsr/titles.snippet-list
input/lsr/transposing-pitches-with-minimum-accidentals-smart-transpose.ly
input/lsr/tweaking-grace-layout-within-music.ly
input/lsr/using-beatlength-and-beatgrouping.ly
input/lsr/using-grace-note-slashes-with-normal-heads.ly
input/lsr/using-the--tweak-command-to-tweak-individual-grobs.ly
input/lsr/using-ties-with-arpeggios.ly
input/lsr/utf-8.ly
input/lsr/volta-below-chords.ly
input/lsr/volta-multi-staff.ly
input/lsr/volta-text-markup-using-repeatcommands.ly
input/new/non-default-tuplet-numbers.ly
input/new/outputting-the-version-number.ly [deleted file]
input/regression/accidental-placement-samepitch.ly [new file with mode: 0644]
input/regression/optimal-page-breaking-hstretch.ly
input/regression/page-breaking-max-systems-per-page.ly
input/regression/spacing-correction-accidentals.ly [new file with mode: 0644]
lily/accidental-placement.cc
lily/all-font-metrics.cc
lily/constrained-breaking.cc
lily/general-scheme.cc
lily/includable-lexer.cc
lily/lily-guile.cc
lily/note-spacing.cc
lily/page-breaking.cc
lily/page-spacing.cc
lily/pfb-scheme.cc
lily/system.cc
lily/text-interface.cc
lily/ttf.cc
ly/music-functions-init.ly
python/convertrules.py
python/musicexp.py
scm/backend-library.scm
scm/define-grobs.scm
scm/lily.scm
scm/markup.scm
scripts/auxiliar/makelsr.py

index c385ec502a2c35b5600f037e893791e776a657a8..c73bb109051d28c06b700e5442d833e375ccf7a0 100644 (file)
@@ -3,7 +3,7 @@
 \version "2.13.1"
 
 \header {
-  lsrtags = "titles"
+  lsrtags = "text, titles"
 
   texidoces = "
 Con algo de código de Scheme, se puede añadir fácilmente la fecha
index 71861f771d6de70a3f81b15171fd37c073ebaa60..9b4b87db7b9e6188ff576e9d8a5ba61513737369 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 
 \header {
index f79ecc2c7771461ec12a7556f9e52b40720cd913..fada042a5362c008edb2f6bc2552f402ff7262da 100644 (file)
@@ -5,6 +5,19 @@
 \header {
   lsrtags = "rhythms"
 
+  texidoces = "
+
+Los números de compás se alinean de forma predeterminada por la
+derecha con su objeto padre. Ã‰ste es por lo general el borde
+izquierdo de una línea o, si los números se imprimen dentro de la
+línea, el lado isquierdo de una línea divisoria.  Los números
+también se pueden situar directamente sobre la barra de compás o
+alineados por la izquierda con ella.
+
+"
+
+  doctitlees = "Alineación de los números de compás"
+
   texidoc = "
 Bar numbers by default are right-aligned to their parent object. This
 is usually the left edge of a line or, if numbers are printed within a
index bc4c78430b285b726b208bcc7cc0ad8832f7bb38..02afb34a588d74d6abc32fd230cdc1174c9c229a 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 
 \header {
index ca0a6462a72350b5dd1bc2c250953d2409ae0d4d..d3e7fa8229498cb78cb915da0c766cd71fdb092c 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 
 \header {
index 195b4d5ebac128c0327b699f68bf6be88c4f60fd..c6e4031c3bd25034b29cda46b012ca75b2c7d312 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 
 \header {
index 83e2571be1f812752d4f10ec2a1d4ea5e4b618bd..b3c5643fe3142da482e0900b64b8ffb3c72a8986 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 
 \header {
index 7682a70718ecae93bea2f0d59442340b73ba7ced..c07d410462bd90e9f046b687abff231f33b216ab 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 
 \header {
index 03b631a75135703706a947dad143ccb6d8ea3f84..1b2e3744d1751eb27ffc09653d47c76230af1da4 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 \header {
  doctitlees = "Cambiar la forma de los silencios multicompás"
index b0d36448ff2daa348685e0113dee277d104af21e..6e46bfd59afd52dcb3c7d362acb857f4b3d9d028 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 
 \header {
index 7d201580d4916a50af6514bb70c6eea07f829e37..8604ab302dd05dd8e95737ae5080a8c4982ae857 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 \header {
   texidoces = "
index 7013b3e9519042d98132940b7c70c176441a589e..3a62797d128669f759ccab635e78945165629ade 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 
 \header {
index a2288714d2639fce1ba0a2061aa97003401af939..0b3a8bb3e1061807f3c4d4c662cc6b258d6823ce 100644 (file)
@@ -30,6 +30,19 @@ Taktart ausgegeben, ohne die anderen Eigenschaften zu beeinflussen:
   doctitlede = "Die Taktart verändern ohne die Bebalkung zu beeinflussen"
 
 
+%% Translation of GIT committish :<e71f19ad847d3e94ac89750f34de8b6bb28611df>  
+  texidocfr = "
+La commande @code{\time} gère les propriétés
+@code{timeSignatureFraction}, @code{beatLength}, @code{beatGrouping}
+et @code{measureLength} dans le contexte @code{Timing}, normallement
+rattaché Ã  @code{Score}.  Le fait de modifier la valeur de
+@code{timeSignatureFraction} aura pour effet de changer l'apparence du
+symbole affiché sans pour autant affecter les autres propriétés de la
+métrique :
+
+"
+  doctitlefr = "Changement de métrique sans affecter les règles de ligature"
+
   texidoc = "
 The @code{\\time} command sets the properties
 @code{timeSignatureFraction}, @code{beatLength}, @code{beatGrouping}
index 7686cf66ef6c3b24a47864d24a1dc5966fad5ec5..955839bd5d522478b3d623f9aa98d35c9c46fa8a 100644 (file)
@@ -26,6 +26,18 @@ vollständig unterdrücken.
 "
   doctitlede = "Die Zahl der N-tole verändern"
 
+
+%% Translation of GIT committish :<e71f19ad847d3e94ac89750f34de8b6bb28611df>
+  texidocfr = "
+L'apparence du chiffre est déterminée par la propriété @code{text} dans
+@code{TupletNumber}.  La valeur par défaut imprime seulement le
+dénominateur, mais si elle est définie par la fonction
+@code{tuplet-number::calc-fraction-text}, la fraction entière
+@var{num}:@var{den} sera imprimée Ã  la place.
+
+"
+  doctitlefr = "Modifier l'apparence du chiffre de nolet"
+
   texidoc = "
 By default, only the numerator of the tuplet number is printed over the
 tuplet bracket, i.e., the denominator of the argument to the
index 0e99ea4bf592086cf928b53731c5f77214a7d146..f7b373207876e57859dc3a2ba1ceb1f97ce4b2dc 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 \header {
   texidoces = "
index d5b1164f86e6d526211eac8602a6c4428f523e77..d48642e9dda29a8b04af4359ad67bb7f05bd2a02 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.13.0
 \version "2.13.1"
 
 \header {
index dab68f2c7cf16e3898dba46407388d12db93e796..2f539eda9b8a10594803b8f98c2ba5920edd9559 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 \header {
   lsrtags = "paper-and-layout"  % a new tag like "Mixing text and music" or
index 086021210a5ffea882bdbf7ca99022d51cfa6244..96608ab8f87d2ab2a545188cc4055cbfb2f01df6 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 \header {
   lsrtags = "pitches,editorial-annotations,really-cool"
index aa6238c771d4e383ef67845527d2c09bfda3a8e6..0d368e29e3449c21337576c947c7284268826c22 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 
 \header {
index f15880baa1a57906c7d1999465e9e9fb6dcffd05..2b502ea51134f829f0c00c70b15a30b263dc269b 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 
 \header {
index 286ee5c61c571e86c5b294ed165612e109a58a91..4083df655c75a2b941f596c9f46469c4f60d4e6f 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 
 \header {
index 593d3ae24ed1601948e6919a3fd36fefbf07ab21..d59e34e249c0282a7d6ecc332a38278f2894da03 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 \header {
   texidoces = "
index cd224e623e2024642c47127b6078bd276d442ebc..9c9ef0796807fac2c748b6243396aa5207997e88 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 
 \header {
index 7be4d0e528119d494a318832c2b0d4c032d7e74d..98dbcdcfa64086b668c7f765bca07a33b3a7240d 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 
 \header {
index b915b7cb23d6526e844a632837bf9cbfeae34d0c..d61e2b5d60b84ed3a1b36e7ecc9ad5bbfdce61f1 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 
 \header {
index 7ba273451c99ab5694e8758de25fc436ad109af5..b1edcf9f11fb70af9505891f072eee01ad8d6474 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 \header {
   texidoces = "
index e25f8057600dd89dfc63ee5669664707609e5ec8..de83ed076640e47ddf301450276e5af4bc45d330 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 \header {
   texidoces = "
index 9ebe9f7d3e19eaf43f620184b524e144fe995c40..f146956390057e99ca4d94ba1de24ea50d8f76d5 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 
 \header {
index 84ad867fbc10b53f8d35597006b07c389f329e45..99d3ee34d5116136c435b7f2d2935deb9c5f32a4 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 
 \header {
index 8afcc59327fc1039542e188724be89df1ad091ae..77256f5beccd9a51f6c827060a11f3a53c0d4e1d 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 \header {
   lsrtags = "tweaks-and-overrides"
index cc7b7b9113b1954c37c4ded766632294b5a18b7a..c0473914a869492b37a1b3e114854ac595e9d814 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 \header {
   lsrtags = "tweaks-and-overrides"
index 932114a1226b5ad14304d9cf1d6d62fbfc8294be..40a73dd484b690d3fc4ebb3eb4c9ee463516dcf4 100644 (file)
@@ -26,6 +26,17 @@ Notensystemabständen an, die zweite Zahl zeigt die Richtung an (1 = nach oben,
 "
   doctitlede = "Bindebögen manuell setzen"
 
+
+%% Translation of GIT committish :<e71f19ad847d3e94ac89750f34de8b6bb28611df>
+  texidocfr = "
+Il est possible de graver manuellement les liaisons de tenue, en
+modifiant la propriété @code{tie-configuration}.  Pour chaque paire, le
+premier nombre indique la distance Ã  la portée, en espaces de portée, et
+le second la direction (1 pour haut, @minus{}1 pour bas).
+
+"
+  doctitlefr = "Dessin Ã  main levée de liaisons de tenue"
+
   texidoc = "
 Ties may be engraved manually by changing the @code{tie-configuration}
 property of the @code{TieColumn} object. The first number indicates the
index 235792efdde0e6c557b34188ac06f8ec4a43db5e..5c6e9e344810de9b1ec73a284e4aa27d5a797127 100644 (file)
@@ -37,6 +37,21 @@ Mehr Information Ã¼ber @code{make-moment} gibt es in \"Verwaltung der Zeiteinhei
 "
   doctitlede = "Mehrere Triolen notieren, aber nur einmal \\times benutzen"
 
+
+%% Translation of GIT committish :<e71f19ad847d3e94ac89750f34de8b6bb28611df>
+  texidocfr = "
+La propriété @code{tupletSpannerDuration} spécifie la longueur voulue de
+chaque crochet.  Avec elle, vous pouvez faire plusieurs nolets en ne
+tapant @code{\times} qu'une fois, ce qui Ã©vite une longue saisie.  
+
+Dans l'exemple suivant, deux triolets sont imprimés avec une seule fonction
+@code{\times}.
+
+Pour plus d'information sur @code{make-moment}, voir @ref{Time administration}.
+
+"
+  doctitlefr = "Plusieurs triolets avec une seule commande \\times"
+
   texidoc = "
 The property @code{tupletSpannerDuration} sets how long each of the
 tuplets contained within the brackets after @code{\\times} should last.
index 69122191babb9a037efecebd7a361d9e35f4ea99..ef55883ce6006013c7c0510a4e88aa8ca0f50a9a 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 
 \header {
index c3ad7c15cdd9c4f0c9ade514bc88e717a23113ba..cd85064aa332b56123d1b1eb4fcc6c52d5d07968 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 
 \header {
index 900a5bfcd5f6740038620a9e773e98095b32a8e1..f9818ae0dca4addaa62f1ddf831222dd20e1de42 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 
 \header {
index 2e2f60b9008c57cff65b1b6e970e39cb9dd3864d..c4f1c225d888627519e684f2ae5ba2a722d1c080 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 
 \header {
@@ -19,7 +20,8 @@ Bunddiagrammen auch der Schlagrhythmus angegeben werden.
   doctitlede = "Schlagrhythmus für Guitarren"
 
   lsrtags = "rhythms,fretted-strings"
-  texidoc = "For guitar music, it is possible to show strum rhythms, along
+  texidoc = "
+For guitar music, it is possible to show strum rhythms, along
 with melody notes, chord names, and fret diagrams.
 "
   doctitle = "Guitar strum rhythms"
index 52ee88f5721e815ae016b2f3799f0203d7fcff0a..fb9e179fac72566b36fb2138877c7b105e259143 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 
 \header {
index dec402f177595bffe7ee1ac31c401a240258f632..623b12ea618c644bfc6f1782f1709a484b7f518d 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 \header {
   texidoces = "
index 08cbaf43f009cbf96a9b1784b55dc9ef85c78988..e6893b710f12b029387dd2894b1078c5e61d35d2 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 \header {
   texidoces = "
index 39a8797847b8f96e64dcbf954f96dde57d113adb..0f7eac274074c7501ad1e5f9e6b51afd7b77331b 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 
 \header {
index 962b3bd7d066852c58edb92703a3e6555cb0e862..aeb09f695760cb00c5c655bee5281df7e61fafa4 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 \header {
   texidoces = "
index 27d2c15d2e9e8f6c0c3ab4692c81560bf23db6d9..5fcf30217cf851ab4d7fb421b87ace45d4ec46ee 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 \header {
   texidoces = "
index e767e8b771f9d29dd7909df7287cfe5108811353..b1e0cb3c4010e31a85aaede5255935c0124fc8fb 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 \header {
   lsrtags = "rhythms,tweaks-and-overrides"
index cb5155d3e514a4f76d94b6fa84ce48a04274f8d5..e0f5c8316cf860d182f4de3b24ea49d784fabe95 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.13.1
 \version "2.13.1"
 
 \header {
index a16389693d3418b9137210b7a0e66b84a05dfaab..8331189ec49c2afaf037f3681121b30350ca634e 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 
 \header {
index 8cc51065ff4931acd38f6b945ec009d06ec234e0..7b547d51b912b67dcdf0856ebba211257508e4d8 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 
 \header {
index 1e49132c566c68970e4a23f4134bbddba7036ceb..580e5df17279e1ec632a57d3e332a381cdb70d78 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 
 \header {
index ef1e4a6eca22d2d0f3b7bf18e034abcc2871ed0b..81ca609056e6c157473ef898a7c92995db2a1731 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 
 \header {
index 13c623ba1adb559f01a3a324c86e6e77824e426b..40f81ee6445ee9fe06310a380c4194d63de77f26 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.13.1
 \version "2.13.1"
 
 \header {
index 3075255dbbffdfc940563be46a5c2b71432ce43a..fa37eb1a1b5e4ca6e33ba0ffb78f6115430396c8 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.13.0
 \version "2.13.1"
 
 \header {
index a5459d9899b0913152e31d4d16f90ba24c6abca8..23b9a19a7d1c16e6fdaeca92b15a7f84ce2d1890 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 \header {
   texidoces = "
index bfa20047706f4ef10b074eee13834ab7503b7ecb..07c7d5a7cdbad2a59c3ae0138c9122a0b0f20d34 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 
 \header {
index 155408b3266303ac9e422542c2f5df0054c3269e..8804e3d002103a2784d0565703352ca415d4de00 100644 (file)
@@ -1,23 +1,27 @@
-%% Do not edit this file; it is auto-generated from input/new
+%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it
 %% This file is in the public domain.
 \version "2.13.1"
 
 \header {
-  lsrtags = "text"
+  lsrtags = "text, titles"
+
   texidoc = "
-By putting the output of @code{lilypond-version} into lyrics or a
-text markup, it is possible to print the version number of LilyPond in
-a score, or in a document generated with @code{lilypond-book}.
+By putting the output of
+    @code{lilypond-version} into a lyric, it is possible to print the 
+    version number of LilyPond in a score, or in a document generated
+    with @code{lilypond-book}.  Another possibility is to append the 
+    version number to the doc-string, in this manner: 
+
 "
   doctitle = "Outputting the version number"
 } % begin verbatim
 
-
 \score {
   \new Lyrics {
     \override Score.RehearsalMark #'self-alignment-X = #LEFT
-    \mark #(ly:export (string-append "Processed with LilyPond version "
-                       (lilypond-version)))
+    \mark #(string-append "Processed with LilyPond version " (lilypond-version))
     s2
   }
 }
+
+
index 635931df741545f6bb1be1ae5c9addf34e956251..f1e6df43f86477829dedb84cbf8e1c3b4c4180c1 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 \header {
   lsrtags = "spacing"
index 9c01daf27d79e4862d05c01d246e2e99885cec60..95938a080408515abaa5410015783e0c73917a98 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 \header {
   texidoces = "
index 0c0355846d4d3e20726cdc224cc6fe54dd9150eb..d2d2fb2b83bdc44808aa29ca34293bc053aa4cfb 100644 (file)
@@ -24,6 +24,16 @@ gesetzt werden.
 "
   doctitlede = "Zeilenumbrüche bei N-tolen mit Balken erlauben"
 
+
+%% Translation of GIT committish :<e71f19ad847d3e94ac89750f34de8b6bb28611df>
+  texidocfr = "
+Cet exemple peu académique démontre comment il est possible d'insérer un saut 
+de ligne dans un nolet portant une ligature.  Ces ligatures doivent toutefois
+être explicites.
+
+"
+  doctitlefr = "Saut de ligne au milieu d'un nolet avec ligature"
+
   texidoc = "
 This artificial example shows how both manual and automatic line breaks
 may be permitted to within a beamed tuplet. Note that such off-beat
index 28ce906fc9476906d61108d333a23488c5a5a4c9..70dac91803c5a155a1e974615e8017a557fe4c76 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 
 \header {
index 0b38eadef490203f1c78ee0d3e5a3d64dfbe0820..fbea008d6dae2945ce7f5f311a85fac00a2fdae2 100644 (file)
@@ -5,6 +5,19 @@
 \header {
   lsrtags = "rhythms"
 
+  texidoces = "
+
+Al establecer la propiedad @code{'strict-grace-spacing} hacemos
+que las columnas musicales para las notas de adorno sean
+'flotantes', es decir, desacopladas de las notas que no son de
+adorno: primero se aplica el espaciado de las notas normales, y
+luego se ponen las columnas musicales de las notas de adorno a la
+izquierda de las columnas musicales de las notas principales.
+
+"
+
+  doctitlees = "Posicionamiento de las notas de adorno con espacio flotante"
+
   texidoc = "
 Setting the property @code{'strict-grace-spacing} makes the musical
 columns for grace notes 'floating', i.e., decoupled from the non-grace
index d9ec182d99c3d31497adc03e3ce6106861b487e8..45d909ec522a61754ea841d652f79add30043951 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 \header {
  doctitlees = "Posicionar los silencios multicompás"
index 1041ca6bcedc49e17a312baf1cddcf80f7a72267..76d1560066ddf81b6c5991a6fd4c9ff962e93886 100644 (file)
@@ -5,6 +5,17 @@
 \header {
   lsrtags = "rhythms"
 
+  texidoces = "
+
+Se pueden imprimir los números de compás a intervalos regulares
+mediante el establecimiento de la propiedad
+@code{barNumberVisibility}.  Aquí los números de compás se
+imprimen a cada dos compases excepto al final de la línea.
+
+"
+
+  doctitlees = "Imprimir números de compás a intervalos regulares"
+
   texidoc = "
 Bar numbers can be printed at regular intervals by setting the property
 @code{barNumberVisibility}. Here the bar numbers are printed every two
index 24dafb8010b8886f14647e7e2f3aa08df52c7656..bae5eb1cf81bd5e5ad684b9fa2254af5be7c6224 100644 (file)
@@ -5,6 +5,13 @@
 \header {
   lsrtags = "rhythms, tweaks-and-overrides"
 
+  texidoces = "
+
+Los números de compás también se pueden imprimir dentro de rectángulos o de circunferencias.
+
+"
+  doctitlees = "Imprimir números de compás dentro de rectángulos o circunferencias"
+
   texidoc = "
 Bar numbers can also be printed inside boxes or circles.
 
index a5fc7676c046773d7876ac579e99e7c1fd410e47..4ed6320d5611395c032ec7a8a0e904f014fbca8d 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.1
 \version "2.13.1"
 
 \header {
index b1ccee38ca871d1177ef5e1e51559f3e0e2ddc35..d45e36dec0d38ffe9f90ec5a3fe5bb3d5646dcea 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 \header {
   texidoces = "
index 08a4d575ce4c2b0ef0e5ba664cd50fad05935497..9919451e6ae74a95765493cd1060210e8ce028b5 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 \header {
   texidoces = "
index c0c63378f8be05105707be014434d6cde4c29507..4ab887913be5a6976f3bad107045698af3c5cfd1 100644 (file)
@@ -5,6 +5,20 @@
 \header {
   lsrtags = "rhythms"
 
+  texidoces = "
+
+Los valores predeterminados para las notas de adorno están
+almacenados en los identificadores @code{startGraceMusic},
+@code{stopGraceMusic}, @code{startAcciaccaturaMusic},
+@code{stopAcciaccaturaMusic}, @code{startAppoggiaturaMusic} y
+@code{stopAppoggiaturaMusic}, que están definidos en el archivo
+@code{ly/grace-init.ly}.  Redefiniéndolos se pueden obtener otros
+efectos.
+
+"
+
+  doctitlees = "Redefinición de los valores globales predeterminados para notas de adorno"
+
   texidoc = "
 The global defaults for grace notes are stored in the identifiers
 @code{startGraceMusic}, @code{stopGraceMusic},
index e3c8fdc6a018eb170f8a86bba503bc45c6066aeb..ae563628b3a4e87ac7dc0d8a89def9548b0f17e9 100644 (file)
@@ -5,6 +5,15 @@
 \header {
   lsrtags = "rhythms, contexts-and-engravers"
 
+  texidoces = "
+
+Se pueden eliminar completamente los números de compás quitando el
+grabador @code{Bar_number_engraver} del contexto de @code{Score}.
+
+"
+
+  doctitlees = "Suprimir los números de compás de toda la partitura"
+
   texidoc = "
 Bar numbers can be removed entirely by removing the
 @code{Bar_number_engraver} from the @code{Score} context.
index 4514bdd975fd73cce1d08d539e6083d6e34c9804..253619f33c259a79e7f1b0de458fe94f6f91e600 100644 (file)
@@ -15,6 +15,14 @@ Los silencios se pueden imprimir en distintos estilos.
 Pausen können in verschiedenen Stilen dargestellt werden.
 "
 
+
+%% Translation of GIT committish :<e71f19ad847d3e94ac89750f34de8b6bb28611df>
+  texidocfr = "
+Les silences peuvent Ãªtre gravés selon différents styles.
+
+"
+  doctitlefr = "Styles de silences"
+
   texidoc = "
 Rests may be used in various styles.
 
index c24bfc8e24e63ca6099cbc2a8a26bed3fc2312b3..91a91f7f9de948836bcb57ecc8b1cb6865b9302f 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 \header {
   texidoces = "
index b8206ea79fb92b1a42455681ed2ee677131ff0cd..0677b990816db6d6a07ba42644da3765e56340dd 100644 (file)
@@ -11,7 +11,7 @@ El pizzicato de chasquido (también llamado @q{Pizzicato de Bartók}) es un
 @q{pizzicato fuerte en que la cuerda se pulsa verticalmente produciendo un
 chasquido y rebotando en el diapasón del instrumento} (Wikipedia).  Se
 denota mediante una circunferencia con una línea vertical corta que parte
-del centro de aquélla hacia fuera.  Aunque Lilypond no tiene ninguna
+del centro de aquélla hacia fuera.  Aunque LilyPond no tiene ninguna
 instrucción predefinida para crear esta marca, es fácil hacer la definición
 y colocarla directamente en el archivo de lilypond.
 "
index fec705bddf7f05867bbe49e9e89b013182462d17..46c4e8b8a6fed38068ae13ea73a7855842e2b6cc 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 
 \header {
index 1c3a82a8420c237db612fd555c5417f8dc6b0cdd..b8a0ea53891551be9077395c7e9235e81e0630a1 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 \header {
   lsrtags = "simultaneous-notes,tweaks-and-overrides"
index 7893eeb6b27fcc47351bd8d1123aac2a910b3860..624bb8d55e12e19dcc88499922693237223bcc5d 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 \header {
   lsrtags = "paper-and-layout"
index ed78f498756c0d36705a04a67a8ac23e96e873c3..d27ac6cba39817c6ebccf1bf0d1f8c7d930e22d7 100644 (file)
@@ -1,3 +1,4 @@
+adding-the-current-date-to-a-score.ly
 adjusting-lyrics-vertical-spacing.ly
 aligning-and-centering-instrument-names.ly
 aligning-marks-with-various-notation-objects.ly
index d392e7b0d8a676045292e821efa9c06c518c93de..aeb8106750010d5af2edfebc4d631b4cf25ce042 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 \header {
   lsrtags = "staff-notation"
index a21553f1614d56282d9e9aeff916b460e544c938..0b2c5c162fcbb3e5ef400308ca89127488466d21 100644 (file)
@@ -1,3 +1,4 @@
 adding-the-current-date-to-a-score.ly
 aligning-and-centering-instrument-names.ly
 demonstrating-all-headers.ly
+outputting-the-version-number.ly
index 2f715181b7d84fd52cbe0480c3dbe340d877544d..9570e38e4c003dd6036e0a2aba3ebf815f11f3a3 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 \header {
 doctitlees = "Transportar música con el menor número de alteraciones"
index 315e12fa0855cc7cdbc76ef9bdcbf2257a5e07fc..70bd7924019be2e5128906515f04a8553ea2771e 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 
 \header {
index 75eadd219b180d8d8a5352e39694e6b54560440f..c47260d4e79b1daff7388bfefed193cf2aa550bb 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 
 \header {
index c0dd8956a3cd992434a9a1e56c4154bb67e0ec34..a3102e7f62c6f0a9e7fa4dd9576e87eb2e15522b 100644 (file)
@@ -5,6 +5,15 @@
 \header {
   lsrtags = "rhythms"
 
+  texidoces = "
+
+Es posible aplicar la barrita que cruza la barra de las
+acciaccaturas, en otras situaciones.
+
+"
+
+  doctitlees = "Utilizar la barra que tacha las notas de adorno con notas normales"
+
   texidoc = "
 The slash through the stem found in acciaccaturas can be applied in
 other situations.
index ad86a57629572e2b79914a0230e154fefaa727b1..ac09b8c267fbb014ed59042c94790cc067a93051 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 \header {
   lsrtags = "tweaks-and-overrides"
index 59c404e8ec84ed53b6433ef17e55b0495c121335..76e35bd1fb25fde7c22bd5317865d599fc2df2d4 100644 (file)
@@ -28,6 +28,17 @@ für normale Ãœberbindungen eingesetzt werden
 "
   doctitlede = "Ãœberbingungen für Arpeggio genutzen"
 
+
+%% Translation of GIT committish :<e71f19ad847d3e94ac89750f34de8b6bb28611df>
+  texidocfr = "
+Les liaisons de tenue servent parfois Ã  rendre un accord arpégé. Dans
+ce cas, les notes liées ne sont pas toutes consécutives. Il faut alors
+assigner Ã  la propriété @code{tieWaitForNote} la valeur @code{#t}
+(@emph{true} pour @qq{vrai}).  Cette même méthode peut servir, par
+exemple, Ã  lier un trémolo Ã  un accord.
+"
+  doctitlefr = "Liaison de tenue et arpège"
+
   texidoc = "
 Ties are sometimes used to write out arpeggios.  In this case, two tied
 notes need not be consecutive.  This can be achieved by setting the
index e6ff9179e71f03abb0136be667496a1adb1d4443..ee9e28b4da26f0f5f1f9df84f03a3c6d23f439a7 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 
 %% Edit this file using a Unicode aware editor, such as GVIM, GEDIT, Emacs
index 8e8ea42cb65d8f967e20290db19109967ae6379b..8031a997794aadc553827cac9e01f9916ae4abe9 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 \header {
   texidoces = "
index 0865c2eb0495207fc0d636b66c1c0d77d7a32f9d..ce3b79a213daeadc69b0ffff3d14e752f6784921 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 \header {
   lsrtags = "repeats,staff-notation"
index d491a9a9e765ce6579693772bf03388b6759d40e..e46f35edc57e7b44a3c9f945fea39d562201e687 100644 (file)
@@ -1,5 +1,6 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
+%% Note: this file works from version 2.12.0
 \version "2.13.1"
 
 \header {
index 74f54f6877628a0f39e03378c2a98128fb42a7eb..29b109c3104e1428ef3d45eeadc586d30c6bba4a 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.12.3"
+\version "2.13.1"
 
 \header {
   lsrtags = "rhythms"
diff --git a/input/new/outputting-the-version-number.ly b/input/new/outputting-the-version-number.ly
deleted file mode 100644 (file)
index e573ade..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-\version "2.12.0"
-
-\header {
-  lsrtags = "text"
-  texidoc = "
-By putting the output of @code{lilypond-version} into lyrics or a
-text markup, it is possible to print the version number of LilyPond in
-a score, or in a document generated with @code{lilypond-book}.
-"
-  doctitle = "Outputting the version number"
-}
-
-\score {
-  \new Lyrics {
-    \override Score.RehearsalMark #'self-alignment-X = #LEFT
-    \mark #(ly:export (string-append "Processed with LilyPond version "
-                       (lilypond-version)))
-    s2
-  }
-}
diff --git a/input/regression/accidental-placement-samepitch.ly b/input/regression/accidental-placement-samepitch.ly
new file mode 100644 (file)
index 0000000..a4cff7f
--- /dev/null
@@ -0,0 +1,14 @@
+\version "2.11.37"
+
+\header {
+  texidoc = "When two (or more) accidentals modify the same pitch,
+they are printed adjacent to one another unless they represent the same
+alteration, in which case they are printed in exactly the same position
+as one another. In either case, collisions with accidentals of different
+pitches are correctly computed."
+}
+
+\relative c''
+{<< <dis aeses as a! a! ais aisis a,! aeh cis'> \\ <ais aih> >> }
+
+\paper {ragged-right = ##t}
index 3205a976d5b65de086ede256f97b1904a102c311..6e18922dc3084ecc4c5c638921cdc8aabd5e9470 100644 (file)
@@ -1,5 +1,9 @@
 \version "2.12.0"
 
+#(set-default-paper-size "a6")
+
+\book {
+
 \header{
     texidoc="The optimal page breaker will stretch the
 systems horizontally so that the vertical spacing will be
@@ -21,4 +25,4 @@ first page should be horizontally stretched.
   \repeat unfold 5 {a b c d}
 }
 
-
+}
\ No newline at end of file
index 18f420a5323151f9d05d62e83c1afd1590dd878e..490965f82d19d5ccb2ea57df40ffa8b9d94dfec5 100644 (file)
@@ -3,7 +3,7 @@
 \header {
   texidoc = "The max-systems-per-page variable prevents more
 than a given number of systems from being on a page. Titles
-are not counted as systems. \noPageBreak can override
+are not counted as systems. \\noPageBreak can override
 max-systems-per-page in unusual situations."
   title = "Title"
 }
diff --git a/input/regression/spacing-correction-accidentals.ly b/input/regression/spacing-correction-accidentals.ly
new file mode 100644 (file)
index 0000000..73e4160
--- /dev/null
@@ -0,0 +1,13 @@
+\version "2.13.1"
+
+\header {
+  texidoc = "If right hand stems have accidentals, optical spacing
+correction is still applied, but only if the stem directions are
+different."
+}
+
+\relative c' {
+  \time 2/4
+  c8 cis''
+  cis8 cis,,
+}
index f383a3ecc718c1b958c23ddbb4e47ea0fd59fbae..02f0a2a6094c00d30bd2148d624dd82f5da137ff 100644 (file)
 #include "stream-event.hh"
 #include "warn.hh"
 
-
-void
-Accidental_placement::add_accidental (Grob *me, Grob *a)
+static Pitch*
+accidental_pitch (Grob *acc)
 {
-  a->set_parent (me, X_AXIS);
-  a->set_property ("X-offset", Grob::x_parent_positioning_proc);
-  SCM cause = a->get_parent (Y_AXIS)->get_property ("cause");
+  SCM cause = acc->get_parent (Y_AXIS)->get_property ("cause");
 
   Stream_event *mcause = unsmob_stream_event (cause);
   if (!mcause)
     {
       programming_error ("note head has no event cause");
-      return;
+      return 0;
     }
 
-  Pitch *p = unsmob_pitch (mcause->get_property ("pitch"));
+  return unsmob_pitch (mcause->get_property ("pitch"));
+}
+
+void
+Accidental_placement::add_accidental (Grob *me, Grob *a)
+{
+  Pitch *p = accidental_pitch (a);
+  if (!p)
+    return;
 
+  a->set_parent (me, X_AXIS);
+  a->set_property ("X-offset", Grob::x_parent_positioning_proc);
   int n = p->get_notename ();
 
   SCM accs = me->get_object ("accidental-grobs");
@@ -103,37 +110,52 @@ struct Accidental_placement_entry
   Interval vertical_extent_;
   vector<Box> extents_;
   vector<Grob*> grobs_;
-  Real offset_;
-  int notename_;
-  Accidental_placement_entry ()
-  {
-    offset_ = 0.0;
-    notename_ = -1;
-  }
 };
 
-static Interval all_accidental_vertical_extent;
 Real ape_priority (Accidental_placement_entry const *a)
 {
   return a->vertical_extent_[UP];
 }
 
-int ape_compare (Accidental_placement_entry *const &a,
-                Accidental_placement_entry *const &b)
-{
-  return sign (ape_priority (a) - ape_priority (b));
-}
-
 bool ape_less (Accidental_placement_entry *const &a,
               Accidental_placement_entry *const &b)
 {
   return ape_priority (a) < ape_priority (b);
 }
 
-int ape_rcompare (Accidental_placement_entry *const &a,
-                 Accidental_placement_entry *const &b)
+/*
+  This function provides a method for sorting accidentals that belong to the
+  same note. The accidentals that this function considers to be "smallest"
+  will be placed to the left of the "larger" accidentals.
+
+  Naturals are the largest (so that they don't get confused with cancellation
+  naturals); apart from that, we order according to the alteration (so
+  double-flats are the smallest).
+
+  Precondition: the accidentals are attached to NoteHeads of the same note
+  name -- the octaves, however, may be different.
+*/
+static bool
+acc_less (Grob *const &a, Grob *const &b)
 {
-  return -sign (ape_priority (a) - ape_priority (b));
+  Pitch *p = accidental_pitch (a);
+  Pitch *q = accidental_pitch (b);
+
+  if (!p || !q)
+    {
+      programming_error ("these accidentals do not have a pitch");
+      return false;
+    }
+
+  if (p->get_octave () != q->get_octave ())
+    return p->get_octave () < q->get_octave ();
+
+  if (p->get_alteration () == Rational (0))
+    return false;
+  if (q->get_alteration () == Rational (0))
+    return true;
+
+  return p->get_alteration () < q->get_alteration ();
 }
 
 /*
@@ -172,70 +194,13 @@ stagger_apes (vector<Accidental_placement_entry*> *apes)
   reverse (*apes);
 }
 
-/*
-  This routine computes placements of accidentals. During
-  add_accidental (), accidentals are already grouped by note, so that
-  octaves are placed above each other; they form columns. Then the
-  columns are sorted: the biggest columns go closest to the note.
-  Then the columns are spaced as closely as possible (using skyline
-  spacing).
-
-
-  TODO: more advanced placement. Typically, the accs should be placed
-  to form a C shape, like this
-
-
-  ##
-  b b
-  # #
-  b
-  b b
-
-  The naturals should be left of the C as well; they should
-  be separate accs.
-
-  Note that this placement problem looks NP hard, so we just use a
-  simple strategy, not an optimal choice.
-*/
-
-/*
-  TODO: there should be more space in the following situation
-
-
-  Natural + downstem
-
-  *
-  *  |_
-  *  | |    X
-  *  |_|   |
-  *    |   |
-  *
-
-*/
-
-MAKE_SCHEME_CALLBACK (Accidental_placement, calc_positioning_done, 1);
-SCM
-Accidental_placement::calc_positioning_done (SCM smob)
+static vector<Accidental_placement_entry*>
+build_apes (SCM accs)
 {
-  Grob *me = unsmob_grob (smob);
-  if (!me->is_live ())
-    return SCM_BOOL_T;
-
-  me->set_property ("positioning-done", SCM_BOOL_T);
-  
-  SCM accs = me->get_object ("accidental-grobs");
-  if (!scm_is_pair (accs))
-    return SCM_BOOL_T;
-
-  /*
-    TODO: there is a bug in this code. If two accs are on the same
-    Y-position, they share an Ape, and will be printed in overstrike.
-  */
   vector<Accidental_placement_entry*> apes;
   for (SCM s = accs; scm_is_pair (s); s = scm_cdr (s))
     {
       Accidental_placement_entry *ape = new Accidental_placement_entry;
-      ape->notename_ = scm_to_int (scm_caar (s));
 
       for (SCM t = scm_cdar (s); scm_is_pair (t); t = scm_cdr (t))
        ape->grobs_.push_back (unsmob_grob (scm_car (t)));
@@ -243,181 +208,267 @@ Accidental_placement::calc_positioning_done (SCM smob)
       apes.push_back (ape);
     }
 
-  Grob *common[] = {me, 0};
+  return apes;
+}
 
-  /*
-    First we must extract *all* pointers. We can only determine
-    extents if we're sure that we've found the right common refpoint
-  */
-  vector<Grob*> note_cols, heads;
-  for (vsize i = apes.size (); i--;)
+static void
+set_ape_skylines (Accidental_placement_entry *ape,
+                 Grob **common)
+{
+  vector<Grob*> accs (ape->grobs_);
+  vector_sort (accs, &acc_less);
+
+  /* We know that each accidental has the same note name and we assume that
+     accidentals in different octaves won't collide. If two or more
+     accidentals are in the same octave:
+     1) if they are the same accidental, print them in overstrike
+     2) otherwise, shift one to the left so they don't overlap. */
+  int last_octave = 0;
+  Real offset = 0;
+  Real last_offset = 0;
+  Rational last_alteration (0);
+  for (vsize i = accs.size (); i--;)
     {
-      Accidental_placement_entry *ape = apes[i];
-      for (vsize j = ape->grobs_.size (); j--;)
+      Grob *a = accs[i];
+      Pitch *p = accidental_pitch (a);
+
+      if (!p)
+       continue;
+
+      if (i == accs.size () - 1 || p->get_octave () != last_octave)
        {
-         Grob *a = ape->grobs_[j];
+         last_offset = 0;
+         offset = a->extent (a, X_AXIS)[LEFT] - 0.2;
+       }
+      else if (p->get_alteration () == last_alteration)
+       a->translate_axis (last_offset, X_AXIS);
+      else /* Our alteration is different from the last one */
+       {
+         Real this_offset = offset - a->extent (a, X_AXIS)[RIGHT];
+         a->translate_axis (this_offset, X_AXIS);
 
-         if (common[Y_AXIS])
-           common[Y_AXIS] = common[Y_AXIS]->common_refpoint (a, Y_AXIS);
-         else
-           common[Y_AXIS] = a;
+         /* FIXME: read the padding from the AccidentalPlacement grob */
+         last_offset = this_offset;
+         offset -= a->extent (a, X_AXIS).length () + 0.2;
+       }
 
-         Grob *head = a->get_parent (Y_AXIS);
+      vector<Box> boxes = Accidental_interface::accurate_boxes (a, common);
+      ape->extents_.insert (ape->extents_.end (), boxes.begin (), boxes.end ());
 
+      for (vsize j = boxes.size (); j--;)
+       ape->vertical_extent_.unite (boxes[j][Y_AXIS]);
+
+      last_octave = p->get_octave ();
+      last_alteration = p->get_alteration ();
+    }
+  ape->left_skyline_ = Skyline (ape->extents_, 0, Y_AXIS, LEFT);
+  ape->right_skyline_ = Skyline (ape->extents_, 0, Y_AXIS, RIGHT);
+}
+
+static vector<Grob*>
+extract_heads_and_stems (vector<Accidental_placement_entry*> const &apes)
+{
+  vector<Grob*> note_cols;
+  vector<Grob*> ret;
+
+  for (vsize i = apes.size (); i--;)
+    {
+      Accidental_placement_entry *ape = apes[i];
+      for (vsize j = ape->grobs_.size (); j--;)
+       {
+         Grob *acc = ape->grobs_[j];
+         Grob *head = acc->get_parent (Y_AXIS);
          Grob *col = head->get_parent (X_AXIS);
+
          if (Note_column::has_interface (col))
            note_cols.push_back (col);
          else
-           heads.push_back (head);
+           ret.push_back (head);
        }
     }
 
   /*
-    This is a little kludgy: to get all notes, we look if there are
-    collisions as well.
+    This is a little kludgy: in case there are note columns without
+    accidentals, we get them from the Note_collision objects.
   */
   for (vsize i = note_cols.size (); i--;)
     {
       Grob *c = note_cols[i]->get_parent (X_AXIS);
       if (Note_collision_interface::has_interface (c))
        {
-         extract_grob_set (c, "elements", gs);
-
-         concat (note_cols, gs);
+         extract_grob_set (c, "elements", columns);
+         concat (note_cols, columns);
        }
     }
 
+  /* Now that we have all of the columns, grab all of the note-heads */
   for (vsize i = note_cols.size (); i--;)
-    concat (heads, extract_grob_array (note_cols[i], "note-heads"));
-
-  vector_sort (heads, less<Grob*> ());
-  uniq (heads);
-
-  vector<Grob *> stems;
-  for (vsize i = 0; i < heads.size  (); i++)
-    {
-      if (Grob *s = Rhythmic_head::get_stem (heads[i]))
-       stems.push_back (s);
-    }
-  
-  vector_sort (stems, less<Grob*> ());
-  uniq (stems);
-
-  common[Y_AXIS] = common_refpoint_of_array (heads, common[Y_AXIS], Y_AXIS);
-  common[Y_AXIS] = common_refpoint_of_array (stems, common[Y_AXIS], Y_AXIS);
-
-  for (vsize i = 0; i < heads.size  (); i++)
-    {
-      if (Grob *s = Rhythmic_head::get_stem (heads[i]))
-       {
-         stems.push_back (s);
-         common[Y_AXIS] = s->common_refpoint (common[Y_AXIS], Y_AXIS);
-       }
-    }
+    concat (ret, extract_grob_array (note_cols[i], "note-heads"));
 
-  vector_sort (stems, less<Grob*> ());
-  uniq (stems);
-  
+  /* Now that we have all of the heads, grab all of the stems */
+  for (vsize i = ret.size (); i--;)
+    if (Grob *s = Rhythmic_head::get_stem (ret[i]))
+      ret.push_back (s);
 
-  for (vsize i = apes.size (); i--;)
-    {
-      Accidental_placement_entry *ape = apes[i];
 
-      for (vsize j = apes[i]->grobs_.size (); j--;)
-       {
-         Grob *a = apes[i]->grobs_[j];
-         vector<Box> boxes = Accidental_interface::accurate_boxes (a, common);
+  vector_sort (ret, less<Grob*> ());
+  uniq (ret);
+  return ret;
+}
 
-         ape->extents_.insert (ape->extents_.end (), boxes.begin (), boxes.end ());
-       }
-      ape->left_skyline_ = Skyline (ape->extents_, 0, Y_AXIS, LEFT);
-      ape->right_skyline_ = Skyline (ape->extents_, 0, Y_AXIS, RIGHT);
-    }
+static Grob*
+common_refpoint_of_accidentals (vector<Accidental_placement_entry*> const &apes, Axis a)
+{
+  Grob *ret = 0;
 
-  Interval total;
   for (vsize i = apes.size (); i--;)
-    {
-      Interval y;
+    for (vsize j = apes[i]->grobs_.size (); j--;)
+      {
+       if (!ret)
+         ret = apes[i]->grobs_[j];
+       else
+         ret = ret->common_refpoint (apes[i]->grobs_[j], a);
+      }
 
-      for (vsize j = apes[i]->extents_.size (); j--;)
-       y.unite (apes[i]->extents_[j][Y_AXIS]);
-      apes[i]->vertical_extent_ = y;
-      total.unite (y);
-    }
-  all_accidental_vertical_extent = total;
-  stagger_apes (&apes);
+  return ret;
+}
 
-  Accidental_placement_entry *head_ape = new Accidental_placement_entry;
-  common[X_AXIS] = common_refpoint_of_array (heads, common[X_AXIS], X_AXIS);
-  
+static Skyline
+build_heads_skyline (vector<Grob*> const &heads_and_stems,
+                    Grob **common)
+{
   vector<Box> head_extents;
-  for (vsize i = heads.size (); i--;)
-    head_extents.push_back (Box (heads[i]->extent (common[X_AXIS], X_AXIS),
-                                heads[i]->extent (common[Y_AXIS], Y_AXIS)));
+  for (vsize i = heads_and_stems.size (); i--;)
+    head_extents.push_back (Box (heads_and_stems[i]->extent (common[X_AXIS], X_AXIS),
+                                heads_and_stems[i]->pure_height (common[Y_AXIS], 0, INT_MAX)));
 
-  for (vsize i = 0; i < stems.size (); i ++)
-    {
-      int very_large = INT_MAX;
-      
-      head_extents.push_back (Box (stems[i]->extent (common[X_AXIS], X_AXIS),
-                                  stems[i]->pure_height (common[Y_AXIS], 0, very_large)));
-    }
-
-  head_ape->left_skyline_ = Skyline (head_extents, 0, Y_AXIS, LEFT);
-  head_ape->offset_ = 0.0;
+  return Skyline (head_extents, 0, Y_AXIS, LEFT);
+}
 
+/*
+  Position the apes, starting from the right, so that they don't collide.
+  Return the total width.
+*/
+static Interval
+position_apes (Grob *me,
+              vector<Accidental_placement_entry*> const &apes,
+              Skyline const &heads_skyline)
+{
   Real padding = robust_scm2double (me->get_property ("padding"), 0.2);
-
-  Skyline left_skyline = head_ape->left_skyline_;
+  Skyline left_skyline = heads_skyline;
   left_skyline.raise (-robust_scm2double (me->get_property ("right-padding"), 0));
   
   /*
     Add accs entries right-to-left.
   */
+  Interval width;
+  Real last_offset = 0.0;
   for (vsize i = apes.size (); i-- > 0;)
     {
-      Real offset = -apes[i]->right_skyline_.distance (left_skyline);
+      Accidental_placement_entry *ape = apes[i];
+
+      Real offset = -ape->right_skyline_.distance (left_skyline);
       if (isinf (offset))
-       offset = (i + 1 < apes.size ()) ? apes[i + 1]->offset_ : 0.0;
+       offset = last_offset;
       else
        offset -= padding;
 
-      apes[i]->offset_ = offset;
-
-      Skyline new_left_skyline = apes[i]->left_skyline_;
-      new_left_skyline.raise (apes[i]->offset_);
+      Skyline new_left_skyline = ape->left_skyline_;
+      new_left_skyline.raise (offset);
       new_left_skyline.merge (left_skyline);
       left_skyline = new_left_skyline;
-    }
 
-  for (vsize i = apes.size (); i--;)
-    {
-      Accidental_placement_entry *ape = apes[i];
+      /* Shift all of the accidentals in this ape */
       for (vsize j = ape->grobs_.size (); j--;)
-       ape->grobs_[j]->translate_axis (ape->offset_, X_AXIS);
+       ape->grobs_[j]->translate_axis (offset, X_AXIS);
+
+      for (vsize j = ape->extents_.size (); j--;)
+       width.unite (offset + ape->extents_[j][X_AXIS]);
+
+      last_offset = offset;
     }
 
-  Interval left_extent, right_extent;
-  Accidental_placement_entry *ape = apes[0];
+  return width;
+}
 
-  for (vsize i = ape->extents_.size (); i--;)
-    left_extent.unite (ape->offset_ + ape->extents_[i][X_AXIS]);
 
-  ape = apes.back ();
-  for (vsize i = ape->extents_.size (); i--;)
-    right_extent.unite (ape->offset_ + ape->extents_[i][X_AXIS]);
+/*
+  This routine computes placements of accidentals. During
+  add_accidental (), accidentals are already grouped by note, so that
+  octaves are placed above each other; they form columns. Then the
+  columns are sorted: the biggest columns go closest to the note.
+  Then the columns are spaced as closely as possible (using skyline
+  spacing).
 
-  left_extent[LEFT] -= robust_scm2double (me->get_property ("left-padding"), 0);
-  Interval width (left_extent[LEFT], right_extent[RIGHT]);
 
-  SCM scm_width = ly_interval2scm (width);
+  TODO: more advanced placement. Typically, the accs should be placed
+  to form a C shape, like this
+
+
+  ##
+  b b
+  # #
+  b
+  b b
+
+  The naturals should be left of the C as well; they should
+  be separate accs.
+
+  Note that this placement problem looks NP hard, so we just use a
+  simple strategy, not an optimal choice.
+*/
+
+/*
+  TODO: there should be more space in the following situation
+
+
+  Natural + downstem
+
+  *
+  *  |_
+  *  | |    X
+  *  |_|   |
+  *    |   |
+  *
+
+*/
+
+MAKE_SCHEME_CALLBACK (Accidental_placement, calc_positioning_done, 1);
+SCM
+Accidental_placement::calc_positioning_done (SCM smob)
+{
+  Grob *me = unsmob_grob (smob);
+  if (!me->is_live ())
+    return SCM_BOOL_T;
+
+  me->set_property ("positioning-done", SCM_BOOL_T);
+  
+  SCM accs = me->get_object ("accidental-grobs");
+  if (!scm_is_pair (accs))
+    return SCM_BOOL_T;
+
+  vector<Accidental_placement_entry*> apes = build_apes (accs);
+
+  Grob *common[] = {me, 0};
+
+  vector<Grob*> heads_and_stems = extract_heads_and_stems (apes);
+
+  common[Y_AXIS] = common_refpoint_of_accidentals (apes, Y_AXIS);
+  common[Y_AXIS] = common_refpoint_of_array (heads_and_stems, common[Y_AXIS], Y_AXIS);
+  common[X_AXIS] = common_refpoint_of_array (heads_and_stems, me, X_AXIS);
+
+  for (vsize i = apes.size (); i--;)
+    set_ape_skylines (apes[i], common);
+  Skyline heads_skyline = build_heads_skyline (heads_and_stems, common);
+
+  stagger_apes (&apes);
+  Interval width = position_apes (me, apes, heads_skyline);
+
   me->flush_extent_cache (X_AXIS);
-  me->set_property ("X-extent", scm_width);
+  me->set_property ("X-extent", ly_interval2scm (width));
 
   junk_pointers (apes);
 
-  delete head_ape;
-  
   return SCM_BOOL_T;
 }
 
index 9721f8e8093af98b239f1e99c148c03fd7081950..344d3a3e7548023c9b7a16b52f187f9fc61674d6 100644 (file)
@@ -80,7 +80,7 @@ All_font_metrics::find_pango_font (PangoFontDescription const *description,
   if (!pango_dict_->try_retrieve (key, &val))
     {
       if (be_verbose_global)
-       progress_indication ("[" + string (pango_fn));
+       progress_indication ("\n[" + string (pango_fn));
 
       Pango_font *pf = new Pango_font (pango_ft2_fontmap_,
                                       description,
@@ -119,7 +119,7 @@ All_font_metrics::find_otf (string name)
        return 0;
 
       if (be_verbose_global)
-       progress_indication ("[" + file_name);
+       progress_indication ("\n[" + file_name);
 
       val = Open_type_font::make_otf (file_name);
 
index 3a56aa47541190b7bd2f6e2669d5292f7e4d1fac..f7f832b57b0cadc4261c85f5e1e97cab15f6e7ee 100644 (file)
@@ -21,7 +21,7 @@
 /*
   We use the following optimal substructure. Let W (A) be our weight function.
 
-  Let A_{k, n} = (a_{k, n,1}, ... a_{k, n, k}) be the optimal set of line breaks
+  Let A_{k, n} = (a_{k, n, 1}, ... a_{k, n, k}) be the optimal set of line breaks
   for k systems and n potential breakpoints. a_{k, n, k} = n (it is the end of
   the piece)
 
index e0a21527b0510fa66a463a68300496d7ef78a678..8b5766387e0de808afe9c81d567c5cd9dfc16844 100644 (file)
@@ -88,8 +88,6 @@ LY_DEFINE (ly_error, "ly:error",
           "  The error is formatted with @code{format} and @var{rest}.")
 {
   LY_ASSERT_TYPE (scm_is_string, str, 1);
-  if (scm_is_pair(scm_car(rest)))
-    rest=scm_car(rest);
   str = scm_simple_format (SCM_BOOL_F, str, rest);
   error (ly_scm2string (str));
   return SCM_UNSPECIFIED;
index 7d506373f32788674bf3c3fd8bc4f02720cdf33e..2eb5df5cb3deaea4a8f29e110d2bff9b67d59e4b 100644 (file)
@@ -71,7 +71,12 @@ Includable_lexer::new_input (string name, Sources *sources)
     state_stack_.push_back (yy_current_buffer);
 
   if (be_verbose_global)
-    progress_indication (string ("[") + file->name_string ());
+    {
+      string spaces = "";
+      for (size_t i = 0; i < state_stack_.size (); i++)
+       spaces += " ";
+      progress_indication (string ("\n") + spaces + string ("[") + file->name_string ());
+    }
 
   include_stack_.push_back (file);
 
@@ -94,7 +99,12 @@ Includable_lexer::new_input (string name, string data, Sources *sources)
     state_stack_.push_back (yy_current_buffer);
 
   if (be_verbose_global)
-    progress_indication (string ("[") + name);
+    {
+      string spaces = "";
+      for (size_t i = 0; i < state_stack_.size (); i++)
+       spaces += " ";
+      progress_indication (string ("\n") + spaces + string ("[") + name);
+    }
   include_stack_.push_back (file);
 
   yy_switch_to_buffer (yy_create_buffer (file->get_istream (), YY_BUF_SIZE));
index 3753a77795f236312f3827da724352451c0da389..d81eec8982bbfce592599489a475985f97b6d981 100644 (file)
@@ -89,7 +89,7 @@ gulp_file_to_string (string fn, bool must_exist, int size)
   string result (&chars[0], chars.size ());
 
   if (be_verbose_global)
-    progress_indication ("]");
+    progress_indication ("]\n");
 
   return result;
 }
index 24e79cd313b8c190fc72b911f705a76190b49e37..bd796a71354f5d2376164781befe70a7f852a5cd 100644 (file)
@@ -191,7 +191,7 @@ same_direction_correction (Grob *note_spacing, Drul_array<Interval> head_posns)
 }
 
 
-/**
+/*
    Correct for optical illusions. See [Wanske] p. 138. The combination
    up-stem + down-stem should get extra space, the combination
    down-stem + up-stem less.
@@ -219,6 +219,8 @@ Note_spacing::stem_dir_correction (Grob *me, Item *rcolumn,
 
   Direction d = LEFT;
 
+  bool acc_right = false;
+
   Grob *bar = Spacing_interface::extremal_break_aligned_grob (me, RIGHT,
                                                              rcolumn->break_status_dir (),
                                                              &bar_xextent);
@@ -235,10 +237,10 @@ Note_spacing::stem_dir_correction (Grob *me, Item *rcolumn,
            continue;
 
          /*
-           don't correct if accidentals are sticking out of the right side.
+           Find accidentals which are sticking out of the right side.
          */
-         if (d == RIGHT && Note_column::accidentals (it))
-           return;
+        if (d == RIGHT)
+            acc_right = acc_right || Note_column::accidentals (it);
 
          Grob *stem = Note_column::get_stem (it);
 
@@ -306,7 +308,12 @@ Note_spacing::stem_dir_correction (Grob *me, Item *rcolumn,
            correction *= 0.5;
        }
     }
-  else if (stem_dirs[LEFT] * stem_dirs[RIGHT] == 1)
+  /*
+    Only apply same direction correction if there are no
+    accidentals sticking out of the right hand side.
+  */
+  else if (stem_dirs[LEFT] * stem_dirs[RIGHT] == 1
+          && !acc_right)
     correction = same_direction_correction (me, head_posns);
 
   *space += correction;
index f19079ce35fa049de26470daf4f4d3c5fac79c6b..4f096d8178e1a692e1097d9a28c13d0f40b52d61 100644 (file)
@@ -7,6 +7,62 @@
   (c) 2006--2009 Joe Neeman <joeneeman@gmail.com>
 */
 
+/*
+  This is a utility class for page-breaking algorithms. There are some complex
+  parts of this class, some of which are useful to understand if you intend
+  to write a page breaking algorithm (ie. a subclass of Page_breaking). Most
+  of these complexities were introduced in order to break the problem of
+  page-breaking into simpler subproblems and to hide some of the bookkeeping
+  complexities of page breaking from the page breaking algorithms.
+
+  COMPRESSED LINES
+  There are several functions that actually distribute systems across pages
+  (for example, the space_systems_XXX and pack_systems_XXX functions). If
+  each of these functions had to handle \noPageBreak, it would be a mess.
+  Therefore, we handle \noPageBreak by "compressing" the list of systems
+  before doing any layout: we concatenate any two systems separated by a
+  \noPageBreak into a single system. The page-breaking functions can do their
+  magic without encountering a \noPageBreak; we then "uncompress" the systems
+  at the end. We almost always work with cached_line_details_, which are
+  "compressed."
+
+  CHUNKS
+  The basic operation of a page breaking algorithm is to repeatedly request
+  some systems from the line-breaker and place those systems on some pages.
+  With each repetition, the page breaking algorithm asks the line-breaker for
+  some systems that it thinks will help it achieve a better layout. The
+  Page_breaking class provides functionality to facilitate this in the case
+  that the page breaking algorithm only cares about the number of systems.
+
+  Even if a page breaking algorithm only cares number of systems, there may
+  be many ways to satisfy its request. For example, in a piece with 2 scores
+  and a request for 10 systems, we could return 5 systems from each score or
+  4 from the first and 6 from the second. Even within a score, we might
+  want to try several different line breaking configurations with a fixed
+  system count; if there is a forced \pageBreak, for example, we might wish
+  to tweak the number of systems on both sides of the \pageBreak independently.
+
+  The Page_breaking class takes care of finding these configurations. It
+  divides the piece into "chunks" and sets up the line-breaker in such a way
+  that the number of systems in each chunk can be modified independently.
+  Chunks never cross score boundaries; each title and markup is its own chunk.
+  When a page breaking algorithm requests a number of systems, the Page_breaker
+  stores an array of potential configurations, which the page breaking
+  algorithm can iterate over using current_configuration(vsize).
+
+  LINE_DIVISION
+  A Line_division is simply a way of storing the exact way in which the
+  total number of systems is distributed among chunks. Note that a
+  Line_division may not (in fact, usually will not) describe all of the chunks
+  in the entire book. Rather, it will describe the subset of chunks that lie
+  between some fixed starting and ending point. This subset of chunks changes
+  whenever a page breaking algorithm asks to consider a different pair of
+  starting and ending breakpoints. In particular, a Line_division should be
+  discarded after a call to set_current_breakpoints, since that Line_division
+  refers to a subset of chunks which might be different from the current
+  subset of chunks under consideration.
+*/
+
 #include "page-breaking.hh"
 
 #include "international.hh"
index c60f0d88b1d171d3df4608169575ea7cf6331cfa..3eb7c8f4a067345e836ba562bea90d2486b8bf87 100644 (file)
@@ -185,6 +185,12 @@ Page_spacer::resize (vsize page_count)
   max_page_count_ = page_count;
 }
 
+// Carries out one step in the dynamic programming algorithm for putting systems
+// on a fixed number of pages. One call to this routine calculates the best
+// configuration for putting lines 0 through LINE-1 on PAGE+1 pages, provided that
+// we have previously called calc_subproblem(page-1, k) for every k < LINE.
+//
+// This algorithm is similar to the constrained-breaking algorithm.
 bool
 Page_spacer::calc_subproblem (vsize page, vsize line)
 {
@@ -213,6 +219,9 @@ Page_spacer::calc_subproblem (vsize page, vsize line)
       line_count += lines_[page_start].compressed_nontitle_lines_count_;
       if (page > 0 || page_start == 0)
        {
+         // If the last page is ragged, set its force to zero. This way, we will leave
+         // the last page half-empty rather than trying to balance things out
+         // (which only makes sense in non-ragged situations).
          if (line == lines_.size () - 1 && ragged && last && space.force_ > 0)
            space.force_ = 0;
 
index 6713c1b08f70bd235022e1114e46350c8a3d8004..730442ef05bf781b130ed7d6b0397f5c16a2ef8f 100644 (file)
@@ -15,7 +15,7 @@ LY_DEFINE (ly_pfb_2_pfa, "ly:pfb->pfa",
   string file_name = ly_scm2string (pfb_file_name);
 
   if (be_verbose_global)
-    progress_indication ("[" + file_name);
+    progress_indication ("\n[" + file_name);
   
   vector<char> pfb_string = gulp_file (file_name, 0);
   char *pfa = pfb2pfa ((Byte *) &pfb_string[0], pfb_string.size ());
@@ -38,7 +38,7 @@ LY_DEFINE (ly_otf_2_cff, "ly:otf->cff",
 
   string file_name = ly_scm2string (otf_file_name);
   if (be_verbose_global)
-    progress_indication ("[" + file_name);
+    progress_indication ("\n[" + file_name);
 
   FT_Face face = open_ft_face (file_name, 0 /* index */);
   string table = get_otf_table (face, "CFF ");
index 9054988dabf75304d4445de9e2094586cd041706..6f363970ff75af4d78a6baecc347970830d9bb12 100644 (file)
@@ -175,7 +175,7 @@ System::do_break_substitution_and_fixup_refpoints ()
     }
 
   if (be_verbose_global)
-    message (_f ("Element count %d.", count + element_count ()));
+    message (_f ("Element count %d", count + element_count ()) + "\n");
 }
 
 SCM
index 9b28228dab5217e06b8c75b7f8bd1e364029de9a..8b55618521af2ae9bc9bc5df032a1a6cfec1459b 100644 (file)
@@ -74,7 +74,7 @@ MAKE_SCHEME_CALLBACK_WITH_OPTARGS (Text_interface, interpret_markup, 3, 0,
 "@var{layout} is a @code{\\layout} block; it may be obtained from a grob with"
 " @code{ly:grob-layout}.  @var{props} is an alist chain, i.e. a list of"
 "  alists.  This is typically obtained with"
-" @code{(ly:grob-alist-chain (ly:layout-lookup layout 'text-font-defaults))}."
+" @code{(ly:grob-alist-chain grob (ly:output-def-lookup layout 'text-font-defaults))}."
 "  @var{markup} is the markup text to be processed.");
 SCM
 Text_interface::interpret_markup (SCM layout_smob, SCM props, SCM markup)
index 62c6d4695e1cba7e5af289a116a05f9fc0d2e54a..d8e2b56f4549340bf9ef44f192a2d0759b9a6d4c 100644 (file)
@@ -504,7 +504,7 @@ LY_DEFINE (ly_ttf_ps_name, "ly:ttf-ps-name",
 
   string file_name = ly_scm2string (ttf_file_name);
   if (be_verbose_global)
-    progress_indication ("[" + file_name);
+    progress_indication ("\n[" + file_name);
 
   FT_Face face;
 
@@ -556,7 +556,7 @@ LY_DEFINE (ly_ttf_2_pfa, "ly:ttf->pfa",
 
   string file_name = ly_scm2string (ttf_file_name);
   if (be_verbose_global)
-    progress_indication ("[" + file_name);
+    progress_indication ("\n[" + file_name);
 
   Memory_out_stream stream;
 
index f14f54300180a79caebf68c9d95c36ac085785bf..2dded22e3d77acd2b2dbcab500d6a01a5f893be9 100644 (file)
@@ -701,7 +701,8 @@ scoreTweak =
        (make-music 'SequentialMusic)))
 
 
-tag = #(define-music-function (parser location tag arg)
+tag =
+#(define-music-function (parser location tag arg)
    (symbol? ly:music?)
 
    (_i "Add @var{tag} to the @code{tags} property of @var{arg}.")
@@ -745,16 +746,20 @@ transposition =
                       (ly:pitch-negate (pitch-of-note pitch-note)))
         'Staff))
 
-tweak = #(define-music-function (parser location sym val arg)
-          (symbol? scheme? ly:music?)
+tweak =
+#(define-music-function (parser location sym val arg)
+   (symbol? scheme? ly:music?)
+   (_i "Add @code{sym . val} to the @code{tweaks} property of @var{arg}.")
 
-          (_i "Add @code{sym . val} to the @code{tweaks} property of @var{arg}.")
-
-          (set!
-           (ly:music-property arg 'tweaks)
-           (acons sym val
-                  (ly:music-property arg 'tweaks)))
-          arg)
+   (if (equal? (object-property sym 'backend-type?) #f)
+       (begin
+        (ly:warning (_ "cannot find property type-check for ~a") sym)
+        (ly:warning (_ "doing assignment anyway"))))
+   (set!
+    (ly:music-property arg 'tweaks)
+    (acons sym val
+          (ly:music-property arg 'tweaks)))
+   arg)
 
 
 
index 7d97a417da9f38cc3d759f50436594c0b5dac420..c9a8394a1e0536151c3786573997d5ed800e5eae 100644 (file)
@@ -2771,7 +2771,7 @@ def conv (str):
 \\sustainUp -> \\sustainOff, \\sustainDown -> \\sustainOn\n\
 \\sostenutoDown -> \\sostenutoOn, \\sostenutoUp -> \\sostenutoOff")
 def conv (str):
-    str = re.sub (r"\\octave", r"\\octaveCheck", str)
+    str = re.sub (r"\\octave(?![a-zA-Z])", r"\\octaveCheck", str)
     str = re.sub (r"arpeggioUp", r"arpeggioArrowUp", str)
     str = re.sub (r"arpeggioDown", r"arpeggioArrowDown", str)
     str = re.sub (r"arpeggioNeutral", r"arpeggioNormal", str)
index 61598f28e51e7c58258cc5532c163ce84e45bcb3..2d6421ffab169b41df77b81bc289ce340b892816 100644 (file)
@@ -1539,6 +1539,8 @@ class ClefChange (Music):
                 ('F', 4): "bass",
                 ('F', 5): "subbass",
                 ("percussion", 2): "percussion",
+                # Workaround: MuseScore uses PERC instead of percussion
+                ("PERC", 2): "percussion",
                 ("TAB", 5): "tab"}.get ((self.type, self.position), None)
     def ly_expression (self):
         return '\\clef "%s%s"' % (self.clef_name (), self.octave_modifier ())
index 6be7b13e937c0bd5d7028b8777c2dd2430a7e48c..301868cb84d66baf54838e71738b45ec19a3ddbf 100644 (file)
@@ -16,7 +16,9 @@
                       command
                       (format #f "~a > ~a 2>&1 " command dev-null))))
     (if (ly:get-option 'verbose)
-       (ly:message (_ "Invoking `~a'...") command))
+       (begin
+         (ly:message (_ "Invoking `~a'...") command))
+         (ly:progress "\n"))
 
     (set! status
          (if (pair? rest)
                    ".pdf"))
         (is-eps (string-match "\\.eps$" name))
         (paper-size-string (if is-eps
-                               " -dEPSCrop "
-                               (ly:format "-dDEVICEWIDTHPOINTS=~$ \
--dDEVICEHEIGHTPOINTS=~$ "
-                                       paper-width paper-height )))
+                               "-dEPSCrop"
+                               (ly:format "-dDEVICEWIDTHPOINTS=~$\
+ -dDEVICEHEIGHTPOINTS=~$"
+                                       paper-width paper-height)))
 
         (cmd (simple-format #f
                      "~a\
  ~a\
  ~a\
  ~a\
- -dCompatibilityLevel=1.4 \
+ -dCompatibilityLevel=1.4\
  -dNOPAUSE\
  -dBATCH\
- -r1200 \
+ -r1200\
  -sDEVICE=pdfwrite\
  -sOutputFile=~S\
  -c .setpdfwrite\
                      (if (ly:get-option 'verbose) "" "-q")
                      (if (or (ly:get-option 'gs-load-fonts)
                              (ly:get-option 'gs-load-lily-fonts))
-                             
-                         " -dNOSAFER "
-                         " -dSAFER ")
+                         "-dNOSAFER"
+                         "-dSAFER")
                      paper-size-string
                      pdf-name
                      name)))
index f8945f99ba98044186fc35b39763304f3df4fe89..58a6440264b8dafdb5cb12ce290bd9fce3eb60f4 100644 (file)
    ly:arpeggio::print
    ly:arpeggio::brew-chord-bracket
    ly:bar-line::print
+   ly:mensural-ligature::brew-ligature-primitive
    ly:note-head::print
    ly:dots::print
    ly:clef::print
index c39b243648613d4a0f475f8e40aca3a0b8dfa17c..d62c70bb0ff471637ce3aabe05f7c01fc40e1295 100644 (file)
@@ -242,7 +242,7 @@ second.  Dump results to `FILE.stacks' and
        (ly:error (_ "cannot find: ~A") x))
     (primitive-load file-name)
     (if (ly:get-option 'verbose)
-       (ly:progress "]"))))
+       (ly:progress "]\n"))))
 
 (define-public DOS
   (let ((platform (string-tokenize
@@ -688,7 +688,7 @@ PIDs or the number of the process."
         (if separate-logs
             (ly:stderr-redirect (format "~a.log" base) "w"))
         (if ping-log
-            (format ping-log "Procesing ~a\n" base))
+            (format ping-log "Processing ~a\n" base))
         (if (ly:get-option 'trace-memory-frequency)
             (mtrace:start-trace  (ly:get-option 'trace-memory-frequency)))
         (lilypond-file handler x)
@@ -750,6 +750,6 @@ PIDs or the number of the process."
         ;; FIXME: soft-code, localize
         (welcome-ly (string-append ly "Welcome_to_LilyPond.ly"))
         (cmd (get-editor-command welcome-ly 0 0 0)))
-    (ly:message (_ "Invoking `~a'...") cmd)
+    (ly:message (_ "Invoking `~a'...\n") cmd)
     (system cmd)
     (exit 1)))
index b0680ead52868bcbdf8ec5e4ec9b512ab341917c..ceb6a86a245332109bf5b9af71f50fb54915be76 100644 (file)
@@ -208,7 +208,7 @@ against SIGNATURE, reporting MAKE-NAME as the user-invoked function.
         (string-append
          make-name ": "
          (_ "Invalid argument in position ~A.  Expect: ~A, found: ~S."))
-         error-msg)
+         (car error-msg) (cadr error-msg)(caddr error-msg))
        (cons markup-function args))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;
index 97791055bf30569e347a44778a2a90fbeca27923..80628cbf164e82a629227a9ea10bbdcd37cc6433 100755 (executable)
@@ -66,10 +66,16 @@ lsr_comment_re = re.compile (r'\s*%+\s*LSR.*')
 
 begin_header_re = re.compile (r'\\header\s*{', re.M)
 
+ly_new_version_re = re.compile (r'\\version\s*"(.+?)"')
+
 # add tags to ly files from LSR
 def add_tags (ly_code, tags):
     return begin_header_re.sub ('\\g<0>\n  lsrtags = "' + tags + '"\n', ly_code, 1)
 
+# for snippets from input/new, add message for earliest working version
+def add_version (ly_code):
+    return '''%% Note: this file works from version ''' + ly_new_version_re.search (ly_code).group (1) + '\n'
+
 def copy_ly (srcdir, name, tags):
     global unsafe
     global unconverted
@@ -90,7 +96,7 @@ def copy_ly (srcdir, name, tags):
     if in_dir and in_dir in srcdir:
         s = LY_HEADER_LSR + add_tags (s, tags)
     else:
-        s = LY_HEADER_NEW + s
+        s = LY_HEADER_NEW + add_version (s) + s
 
     s = mark_verbatim_section (s)
     s = lsr_comment_re.sub ('', s)