The Bug Meister is omitted from the daily schedule.
@example
-Sunday: Valentin
+Sunday: Colin
Monday: Dmytro
Tuesday: James Bailey
Wednesday: Ralph
@end example
@item
-If the issue requires multi-page output, then generate a
-@file{bug.pdf} file with the normal:
+If the issue requires one or two pages of output, then generate a
+@file{bug.png} file with the normal:
@example
lilypond --png bug.ly
@end example
+@item
+If the issue cannot be shown with less than three pages, then
+generate a @file{bug.pdf} file with:
+
+@example
+lilypond --pdf bug.ly
+@end example
+
+Note that this is likely to be extremely rare; most bugs should fit
+into the first two categories above.
+
+
@end itemize
@item
output data. Delete everything from the beginning of the file
up to but not including the first occurrence of @code{digraph}.
+Also, delete the final liypond message about successs from the end
+of the file.
+
@item Process the logfile with @code{dot}
The directed graph is created from the log file with the program
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: 4039f52de2f225ee2bd94840324d0192fbac37b3
+ Translation of GIT committish: 61fed596442d47e96c10ac3c9c0c696e5dfd22cf
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c used for news about the upcoming release; see CG 10.2
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.13.40! @emph{21 de noviembre de 2010}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.13.40. Esta
+versión contiene el conjunto habitual de correcciones de fallos. Sin
+embargo, aún quedan algunos problemas críticos, por lo que esta
+versión está orientada solamente a los desarrolladores.
+
+Tenga en cuenta que ésta @strong{no} es la segunda versión de pruebas
+beta. A causa de la aparición de algunos cambios en nuestro proceso
+de construcción del programa que no se han probado, no podemos estar
+completamente seguros de la calidad de esta versión.
+
+@newsEnd
+
+
@newsItem
@subsubheading Primera versión de pruebas Beta de 2.14: ¡Lanzado LilyPond 2.13.39! @emph{15 de noviembre de 2010}
Learning Manual:
@rlearning{Contexts and engravers}.
-Installed files:
+Installed Files:
@file{ly/engraver-init.ly},
@file{ly/performer-init.ly}.
@seealso
-Installed files:
+Installed Files:
@file{scm/beam-settings.scm}.
Snippets:
when unset. If @code{line-width} is set, and both
@code{left-margin} and @code{right-margin} are unset, then the
margins will be updated to center the systems on the page
-automatically. Also see @code{check-consistency}.
+automatically. Also see @code{check-consistency}. This variable
+can also be set in a @code{\layout} block.
@item left-margin
@funindex left-margin
@ref{Optimal page turning},
@ref{Minimal page breaking}.
-Installed files:
+Installed Files:
@file{ly/paper-defaults-init.ly}.
@seealso
-Installed files:
+Installed Files:
@file{ly/titling-init.ly}.
Snippets:
variables that can appear in a @code{\layout} block are:
@itemize
+@item @code{line-width}
@item @code{ragged-right}
@item @code{ragged-last}
@item @code{indent}
@end table
@seealso
-Installed files:
+Installed Files:
@file{ly/engraver-init.ly},
@file{scm/define-grobs.scm}.
Snippets:
@rlsr{Text}.
-Installed files:
+Installed Files:
@file{scm/markup.scm}.
Internals Reference:
@rinternals{TextScript}.
-Installed files:
+Installed Files:
@file{scm/define-markup-commands.scm}.
Internals Reference:
@rinternals{TextScript}.
-Installed files:
+Installed Files:
@file{scm/define-markup-commands.scm}.
Internals Reference:
@rinternals{TextScript}.
-Installed files:
+Installed Files:
@file{scm/define-markup-commands.scm},
@file{scm/stencil.scm}.
Internals Reference:
@rinternals{TextScript}.
-Installed files:
+Installed Files:
@file{scm/define-markup-commands.scm},
@file{scm/fret-diagrams.scm},
@file{scm/harp-pedals.scm}.
Internals Reference:
@rinternals{TextScript}.
-Installed files:
+Installed Files:
@file{scm/define-markup-commands.scm}.
@rlsr{Text}.
@c A source file gets never installed...
-@c Installed files:
+@c Installed Files:
@c @file{lily/font-config-scheme.cc}.
;; Use Command on Region even for inactive mark (region).
(if (string-match "XEmacs\\|Lucid" emacs-version)
- (setq zmacs-regions nil)
+ (progn
+ (setq zmacs-regions nil)
+ (make-local-hook 'post-command-hook)) ; XEmacs requires
(setq mark-even-if-inactive t))
;; Context dependent syntax tables in LilyPond-mode
- (make-local-hook 'post-command-hook) ; XEmacs requires
(add-hook 'post-command-hook 'LilyPond-mode-context-set-syntax-table nil t)
;; Turn on paren-mode buffer-locally, i.e., in LilyPond-mode
\test "" ##[ \mark \default #] % MarkEvent
\test "" ##[ \mark "Allegro" #]
\test "" ##[ \tempo 4 = 120 #] % MetronomeChangeEvent
+\test "" ##[ \tempo 4 = 108 ~ 116 #]
+\test "" ##[ \tempo "Allegro" 4 = 132 #]
+\test "" ##[ \tempo "Andante" #]
%% key, time, clef, bar
\test "" ##[ \key \default #] % KeyChangeEvent
--- /dev/null
+\version "2.13.41"
+
+\header {
+ texidoc = "
+Tempo ranges are supported. By default, numbers are
+printed with an en-dash character, separated by thin-spaces.
+"
+}
+
+\relative c'' {
+ \tempo 4 = 66 ~ 72
+ c1 c
+ \set Score.tempoUnitCount = #(cons 124 132)
+ c1 c
+}
--- /dev/null
+\version "2.13.41"
+
+\header {
+ texidoc = "
+Layouts that overflow a page will be compressed in order to fit on
+the page, even if it causes collisions. In this example, the
+tagline should not collide with the bottom staff.
+"
+}
+
+\paper {
+ paper-height= 8\cm
+}
+
+\book {
+ \repeat unfold 3 { g'''1\mark \markup "Long Text" g'''1\break}
+}
"
}
+#(define (assert-single-page layout props arg)
+ (if (and (= (chain-assoc-get 'page:page-number props -1)
+ (ly:output-def-lookup layout 'first-page-number))
+ (chain-assoc-get 'page:last? props -1))
+ (interpret-markup layout props arg)
+ (ly:error "failed to fit test on single page")))
+
\paper {
#(set-paper-size "a6")
tagline = ##f
- system-system-spacing #'padding = #1.20
+ system-system-spacing = #'((padding . 1.2))
+ oddHeaderMarkup = \markup \on-the-fly #assert-single-page \null
}
-\new Voice {
- \voiceTwo
- \override Staff.Stem #'length = #0
- \repeat unfold 144 a
+\book {
+ \score {
+ \new Voice {
+ \voiceTwo
+ \override Stem #'length = #0
+ \repeat unfold 144 a4
+ }
+ \layout {
+ \context {
+ \Score
+ \remove "Bar_number_engraver"
+ }
+ }
+ }
}
SCM duration = get_property ("tempoUnitDuration");
SCM text = get_property ("tempoText");
- if ( ( (unsmob_duration (duration) && scm_is_number (count))
+ if ( ( (unsmob_duration (duration) && scm_is_true (count))
|| Text_interface::is_markup (text) )
&& !(ly_is_equal (count, last_count_)
&& ly_is_equal (duration, last_duration_)
solution_ = spacer.spring_positions ();
if (!spacer.fits ())
- warning (_f ("couldn't fit music on page: overflow is %f",
- spacer.configuration_length(spacer.force()) - page_height_));
+ {
+ Real overflow = spacer.configuration_length (spacer.force ()) - page_height_;
+ vsize space_count = solution_.size ();
+ for (vsize i = 0; i < space_count; i++)
+ solution_[i] -= (i + 1) * overflow / space_count;
+ warning (_f ("couldn't fit music on page: overflow is %f",
+ overflow));
+ warning (_ ("compressing music to fit"));
+ }
}
// The solution_ vector stores the position of every live VerticalAxisGroup
%type <scm> step_number
%type <scm> step_numbers
%type <scm> string
+%type <scm> tempo_range
%type <score> score_block
%type <score> score_body
;
tempo_event:
- TEMPO steno_duration '=' bare_unsigned {
- $$ = MAKE_SYNTAX ("tempo", @$, SCM_BOOL_F, $2, scm_from_int ($4));
+ TEMPO steno_duration '=' tempo_range {
+ $$ = MAKE_SYNTAX ("tempo", @$, SCM_BOOL_F, $2, $4);
}
- | TEMPO string steno_duration '=' bare_unsigned {
- $$ = MAKE_SYNTAX ("tempo", @$, make_simple_markup($2), $3, scm_from_int ($5));
+ | TEMPO string steno_duration '=' tempo_range {
+ $$ = MAKE_SYNTAX ("tempo", @$, make_simple_markup($2), $3, $5);
}
- | TEMPO full_markup steno_duration '=' bare_unsigned {
- $$ = MAKE_SYNTAX ("tempo", @$, $2, $3, scm_from_int ($5));
+ | TEMPO full_markup steno_duration '=' tempo_range {
+ $$ = MAKE_SYNTAX ("tempo", @$, $2, $3, $5);
}
| TEMPO string {
$$ = MAKE_SYNTAX ("tempoText", @$, make_simple_markup($2) );
}
;
+tempo_range:
+ bare_unsigned {
+ $$ = scm_from_int ($1);
+ }
+ | bare_unsigned '~' bare_unsigned {
+ $$ = scm_cons (scm_from_int ($1), scm_from_int ($3));
+ }
+ ;
+
/*
UTILITIES
}
;
-
exclamations:
{ $$ = 0; }
| exclamations '!' { $$ ++; }
#include "translator.icc"
/**
- Manufacture ties. Acknowledge noteheads, and put them into a
+ Manufacture ties. Acknowledge note heads, and put them into a
priority queue. If we have a TieEvent, connect the notes that finish
just at this time, and note that start at this time.
// Prevent all other tied notes ending at the same moment (assume
// implicitly the notes have also started at the same moment!)
- // from triggering an "unterminated tie" warning. Neede e.g. for
+ // from triggering an "unterminated tie" warning. Needed e.g. for
// <c e g>~ g
for (vsize j = heads_to_tie_.size (); j--;)
{
if (heads_to_tie_[j].end_moment_ == end)
- heads_to_tie_[i].tie_from_chord_created = true;
+ heads_to_tie_[j].tie_from_chord_created = true;
}
}
}
if (!left_ev)
{
- // may happen for ambituses
+ // may happen for ambitus
continue;
}
(define-public (string-or-pair? x)
(or (string? x) (pair? x)))
+(define-public (number-or-pair? x)
+ (or (number? x) (pair? x)))
+
(define-public (cheap-list? x)
(or (pair? x) (null? x)))
the context and the string.")
(tempoHideNote ,boolean? "Hide the note=count in tempo marks.")
(tempoText ,markup? "Text for tempo marks.")
- (tempoUnitCount ,number? "Count for specifying tempo.")
+ (tempoUnitCount ,number-or-pair? "Count for specifying tempo.")
(tempoUnitDuration ,ly:duration? "Unit for specifying tempo.")
(tempoWholesPerMinute ,ly:moment? "The tempo in whole notes per
minute.")
(format #f "\\tempo ~a ~a = ~a"
(scheme-expr->lily-string ?unit-text)
(duration->lily-string ?unit-duration #:force-duration #t)
- ?unit-count))
+ (if (number-pair? ?unit-count)
+ (format #f "~a ~~ ~a"
+ (car ?unit-count)
+ (cdr ?unit-count))
+ ?unit-count)))
(with-music-match (expr (music 'ContextSpeccedMusic
element (music 'SequentialMusic
elements ((music 'PropertyUnset
symbol 'tempoUnitCount)))))
(format #f "\\tempo ~a = ~a"
(duration->lily-string ?unit-duration #:force-duration #t)
- ?unit-count))
+ (if (number-pair? ?unit-count)
+ (format #f "~a ~~ ~a"
+ (car ?unit-count)
+ (cdr ?unit-count))
+ ?unit-count)))
(with-music-match (expr (music 'ContextSpeccedMusic
element (music 'SequentialMusic
elements ((music 'PropertySet
(,markup-list? . "markup list")
(,moment-pair? . "pair of moment objects")
(,number-or-grob? . "number or grob")
+ (,number-or-pair? . "number or pair")
(,number-or-string? . "number or string")
(,number-pair? . "pair of numbers")
(,rhythmic-location? . "rhythmic location")
'element (ly:music-transpose music pitch)))
(define-ly-syntax-simple (tempo text duration tempo)
- (let ((props (list
- (make-property-set 'tempoWholesPerMinute
- (ly:moment-mul (ly:make-moment tempo 1)
- (ly:duration-length duration)))
- (make-property-set 'tempoUnitDuration duration)
- (make-property-set 'tempoUnitCount tempo))))
- (set! props (cons
- (if text (make-property-set 'tempoText text)
- (make-property-unset 'tempoText))
- props))
+ (let* ((range-tempo? (pair? tempo))
+ (tempo-count (if range-tempo?
+ (round (/ (+ (car tempo) (cdr tempo)) 2))
+ tempo))
+ (props (list
+ (make-property-set 'tempoWholesPerMinute
+ (ly:moment-mul (ly:make-moment tempo-count 1)
+ (ly:duration-length duration)))
+ (make-property-set 'tempoUnitDuration duration)
+ (make-property-set 'tempoUnitCount tempo))))
+ (set! props (cons
+ (if text (make-property-set 'tempoText text)
+ (make-property-unset 'tempoText))
+ props))
(context-spec-music
- (make-sequential-music props)
- 'Score)))
+ (make-sequential-music props)
+ 'Score)))
(define-ly-syntax-simple (tempoText text)
(context-spec-music
(duration->number (ly:music-property tempo-spec 'tempo-unit))))
((music-name? tempo-spec 'SequentialMusic)
(* (property-value
- (find-child tempo-spec (lambda (elt) (music-property? elt 'tempoUnitCount))))
+ (find-child tempo-spec (lambda (elt)
+ (let ((tempo (music-property? elt 'tempoUnitCount)))
+ (if (pair? tempo)
+ (round (/ (+ (car tempo) (cdr tempo)) 2))
+ tempo)))))
(duration->number
(property-value
(find-child tempo-spec (lambda (elt) (music-property? elt 'tempoUnitDuration)))))))
(ly:duration-dot-count dur)
1))
#f))
- (note-markup (if (and (not hide-note) (number? count) (> count 0) )
+ (count-markup (cond ((number? count)
+ (if (> count 0)
+ (make-simple-markup (number->string count))
+ #f))
+ ((pair? count)
+ (make-concat-markup
+ (list
+ (make-simple-markup (number->string (car count)))
+ (make-simple-markup " ")
+ (make-simple-markup "–")
+ (make-simple-markup " ")
+ (make-simple-markup (number->string (cdr count))))))
+ (else #f)))
+ (note-markup (if (and (not hide-note) count-markup)
(make-concat-markup
(list
(make-general-align-markup Y DOWN note-mark)
(make-simple-markup " ")
(make-simple-markup "=")
(make-simple-markup " ")
- (make-simple-markup (number->string count))))
+ count-markup))
#f))
(text-markup (if (not (null? text))
(make-bold-markup text)
s = ''
- s = tag + '\n\\version "2.7.18"\n\n'
+ s = tag + '\n\\version "2.7.38"\n\n'
for i in range (len (tracks)):
s = s + dump_track (tracks[i], i)