* Fixed missing menus and cross references.
-1.3.126.jcn1
-============
-
* Coriolan fixes and updates.
* Bugfix: a2-engraver and *devnull_engraver recognise alternative
* Slur attachment fix (thanks, Han-Wen)
+1.3.126.hwn1
+============
+
+* Bugfix in Global_translator::run_iterator_on_me (): only run
+iterator::process if iterator::ok() is true.
+
+* Bugfix: when iterating empty sequential-music, start out with an
+invalid iterator.
+
+* Bugfix: length calculation for volta repeat music with too few
+alternatives.
+
+* Bugfix: print different string for first printed alternative in
+volta repeat music with too few alternatives, eg. 1.-4.
+
+* Cleaned up bugs/ directory
+
+* Be less intelligent about default font backup, just load cmr10
+
+* Generated documentation: sort and uniq Grob lists of contexts.
+
1.3.126
=======
* Doco:
PACKAGE_NAME=LilyPond
MAJOR_VERSION=1
MINOR_VERSION=3
-PATCH_LEVEL=126
-MY_PATCH_LEVEL=jcn3
+PATCH_LEVEL=127
+MY_PATCH_LEVEL=
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
# released version.
--- /dev/null
+
+\score { \context Staff \notes \repeat volta 3 c1 \alternative { d1 e1 }}
--- /dev/null
+
+% the \stopped collides with the
+%beam.
+
+
+\score { \notes {
+\clef "G"; \stemUp [a''8^\stopped a''8^\stopped]
+}}
--- /dev/null
+
+ % separate staff-size is clumsy with \override.
+
+\score {
+ \notes \relative c' < \context Voice {
+ \property Staff.staffSpace = #10
+ \property Staff.fontSize = #-1
+ \property Voice.fontSize = #-1
+
+ \property Voice . dynamicDirection = \up \stemDown
+%\key gis \major;
+ c8 d [e f g a] b c \ff
+ }
+
+\context Staff = VB { \property Voice . dynamicDirection = \down c,,4 \ff c c c }
+
+>
+\paper { linewidth = -1.; }
+}
+\version "1.3.117";
filename = "gammes_chromatiques.ly";
}
+%{
+ - At bar 3 of 2nd score, stems are too big (or the beams are
+ badly positionned)
+%}
+
linebreak = \penalty -1000;
$ex8 = \notes \relative c' {
--- /dev/null
+\score { \notes \context Voice {
+ \repeat volta 3 c1
+ \alternative { d f } e4 } }
#include "scm-hash.hh"
#include "kpath.hh"
-const char * default_font_sz_ = "cmr10";
+static const char * default_font_sz_ = "cmr10";
All_font_metrics::All_font_metrics (String path)
{
warning (_ ("Loading default font"));
String def_name = default_font_sz_;
- SCM l = scm_assoc (ly_str02scm ("default"),
- scm_eval2 (ly_symbol2scm ("cmr-alist"), SCM_EOL));
-
- if (l != SCM_BOOL_F)
- def_name = ly_scm2string (gh_cdr (l));
+ /*
+ we're in emergency recovery mode here anyway, so don't try to do
+ anything smart that runs the risk of failing. */
f= find_afm (def_name);
if (f)
return f;
w = sneaky_insert_extra_moment (w);
prepare (w);
- iter->process (w);
+ if (iter->ok ())
+ iter->process (w);
one_time_step ();
}
Moment body_length_mom () const;
Moment alternatives_length_mom (bool fold) const;
+ Moment alternatives_volta_length_mom () const;
DECLARE_SCHEME_CALLBACK(unfolded_music_length, (SCM));
DECLARE_SCHEME_CALLBACK(volta_music_length, (SCM));
struct Spring{
Drul_array<Item*> item_l_drul_;
Real distance_f_;
+
+ /*
+ TODO: make 2 strengths: one for stretching, and one for shrinking.
+ */
Real strength_f_;
void add_to_cols ();
Spring ();
-/*
- unfolded-repeat-iterator.hh -- declare Unfolded_repeat_iterator
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1999--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-
- */
-#ifndef UNFOLDED_REPEAT_ITERATOR_HH
-#define UNFOLDED_REPEAT_ITERATOR_HH
-
-#include "music-iterator.hh"
-
-/**
- Iterate repeats. First do body, then alternatives one by one,
- optionally interspersed by the body.
- */
-class Unfolded_repeat_iterator : public Music_iterator
-{
- void add_repeat_command (SCM);
-
-public:
- VIRTUAL_COPY_CONS (Music_iterator);
- /**
- How often have we done the body (assuming bodies are interspersed.)?
- */
- int done_count_;
- static SCM constructor_cxx_function;
-
- /*
- are we now busy doing the body?
-
- */
- bool do_main_b_;
-
- /*
- are we doing volta's?
- */
- bool volta_b_;
-
- /** How far have we progressed into the repeat.
- This excludes the elt currently being iterated.
- */
- Moment here_mom_;
- int alternative_count_i_;
- Music_iterator * current_iter_p_;
-
- /// pointer to the alternative that will be processed next.
- SCM alternative_cons_;
- ~Unfolded_repeat_iterator();
- Unfolded_repeat_iterator ();
- Unfolded_repeat_iterator (Unfolded_repeat_iterator const &);
-protected:
- virtual void construct_children ();
- virtual Moment pending_moment () const;
- virtual void process (Moment);
- virtual Music_iterator *try_music_in_children (Music *) const;
- virtual void skip (Moment);
- virtual SCM get_music (Moment) const;
-
- virtual bool ok () const;
- virtual void next_element (bool side_effect);
-};
-
-class Volta_repeat_iterator : public Unfolded_repeat_iterator
-{
-public:
- Volta_repeat_iterator ();
- static SCM constructor_cxx_function;
- VIRTUAL_COPY_CONS(Music_iterator);
-};
-
-
-#endif /* UNFOLDED_REPEAT_ITERATOR_HH */
+#error
return m;
}
+/*
+ Sum all duration of all available alternatives. This is for the case
+ of volta repeats, where the alternatives are iterated just as they
+ were entered. */
+Moment
+Repeated_music::alternatives_volta_length_mom () const
+{
+ SCM p = alternatives ()->music_list ();
+ Moment m;
+ while (gh_pair_p (p))
+ {
+ m = m + unsmob_music (gh_car (p))->length_mom ();
+ p = gh_cdr (p);
+ }
+ return m;
+}
+
Moment
Repeated_music::body_length_mom () const
{
Repeated_music::volta_music_length (SCM m)
{
Repeated_music* r = dynamic_cast<Repeated_music*> (unsmob_music (m));
- Moment l = r->body_length_mom () + r->alternatives_length_mom (false);
+ Moment l = r->body_length_mom () + r->alternatives_volta_length_mom ();
return l.smobbed_copy ();
}
Sequential_music_iterator::descend_to_child ()
{
Translator_group * child_report = child_report = iter_p_->report_to_l ();
+ Translator_group * me_report = report_to_l ();
+
if (dynamic_cast<Grace_iterator*> (iter_p_))
child_report = child_report->daddy_trans_l_;
-
- if (report_to_l()->depth_i () < child_report->depth_i ())
+
+ Translator_group * c = child_report;
+ while (c && c != me_report)
+ {
+ c= c->daddy_trans_l_;
+ }
+
+ if (c == me_report)
set_translator (child_report);
}
*/
-
+/*
+ This is too hairy. Maybe split into subclasses for volta and full
+ unfold?
+
+ */
+#include "music-iterator.hh"
#include "repeated-music.hh"
#include "music-list.hh"
-#include "unfolded-repeat-iterator.hh"
#include "debug.hh"
#include "translator-group.hh"
+/**
+ Iterate repeats. First do body, then alternatives one by one,
+ optionally interspersed by the body.
+ */
+class Unfolded_repeat_iterator : public Music_iterator
+{
+ void add_repeat_command (SCM);
+
+public:
+ VIRTUAL_COPY_CONS (Music_iterator);
+ /**
+ How often have we done the body (assuming bodies are interspersed.)?
+
+ In volta: the number to print in the bracket.
+ */
+ int done_count_;
+ static SCM constructor_cxx_function;
+
+ /*
+ are we now busy doing the body?
+
+ */
+ bool do_main_b_;
+
+ /*
+ are we doing volta's?
+ */
+ bool volta_b_;
+
+ /** How far have we progressed into the repeat.
+ This excludes the elt currently being iterated.
+ */
+ Moment here_mom_;
+ int alternative_count_i_;
+ Music_iterator * current_iter_p_;
+
+ /// pointer to the alternative that will be processed next.
+ SCM alternative_cons_;
+ ~Unfolded_repeat_iterator();
+ Unfolded_repeat_iterator ();
+ Unfolded_repeat_iterator (Unfolded_repeat_iterator const &);
+protected:
+ virtual void construct_children ();
+ virtual Moment pending_moment () const;
+ virtual void process (Moment);
+ virtual Music_iterator *try_music_in_children (Music *) const;
+ virtual void skip (Moment);
+ virtual SCM get_music (Moment) const;
+
+ virtual bool ok () const;
+ virtual void next_element (bool side_effect);
+};
+
+class Volta_repeat_iterator : public Unfolded_repeat_iterator
+{
+public:
+ Volta_repeat_iterator ();
+ static SCM constructor_cxx_function;
+ VIRTUAL_COPY_CONS(Music_iterator);
+};
+
+
+
Unfolded_repeat_iterator::~Unfolded_repeat_iterator ()
{
delete current_iter_p_;
if (volta_b_)
{
- String repstr = to_str (done_count_ + 1);
+ String repstr = to_str (done_count_ + 1) + ".";
+
+ /*
+ we're coming in from main, so we're always on the first repeat.
+ */
+ assert (done_count_ == 0);
+
+ if (done_count_ == 0
+ && alternative_count_i_ < repmus->repeat_count ())
+ {
+ done_count_ += repmus->repeat_count () - alternative_count_i_;
+ repstr = "1.--" + to_str (done_count_ + 1) + ".";
+ }
+
if (do_repcommands)
add_repeat_command (gh_list (ly_symbol2scm ("volta"),
ly_str02scm (repstr.ch_C()), SCM_UNDEFINED));
{
if (do_repcommands)
{
- String repstr = to_str (done_count_ + 1);
+ String repstr = to_str (done_count_ + 1) + ".";
add_repeat_command (gh_list (ly_symbol2scm ("volta"),
ly_str02scm (repstr.ch_C()), SCM_UNDEFINED));
add_repeat_command (ly_symbol2scm ("end-repeat"));
bool
Unfolded_repeat_iterator::ok () const
{
- return current_iter_p_ ;
+ return current_iter_p_;
}
Moment
current_iter_p_ = get_iterator_p (unsmob_music (gh_car (alternative_cons_)));
do_main_b_ = false;
}
+
+ while (current_iter_p_ && !current_iter_p_-> ok())
+ {
+ next_element(true);
+ }
}
/*
Begin3
Title: LilyPond
-Version: 1.3.126
-Entered-date: 28JAN01
+Version: 1.3.127
+Entered-date: 31JAN01
Description:
Keywords: music notation typesetting midi fonts engraving
Author: hanwen@cs.uu.nl (Han-Wen Nienhuys)
janneke@gnu.org (Jan Nieuwenhuizen)
Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert
- 1000k lilypond-1.3.126.tar.gz
+ 1000k lilypond-1.3.127.tar.gz
Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
- 1000k lilypond-1.3.126.tar.gz
+ 1000k lilypond-1.3.127.tar.gz
Copying-policy: GPL
End
%define info yes
Name: lilypond
-Version: 1.3.126
+Version: 1.3.127
Release: 1
License: GPL
Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.126.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.127.tar.gz
Summary: A program for printing sheet music.
URL: http://www.cs.uu.nl/~hanwen/lilypond
# Icon: lilypond-icon.gif
-%
+i%
% feta-generic.mf -- implement generic stuff: include lots of files, but don't
% set dims.
%
;; documentme: difference between extra-space and minimum-space
+;; documentme: difference between extra-space and minimum-space
+
;; (Measured in staff space)
(define default-break-align-space-alist
'(
(uniqued-alist (cdr alist) (cons (car alist) acc)
))))
+(define (uniq-list list)
+ (if (null? list) '()
+ (if (null? (cdr list))
+ list
+ (if (equal? (car list) (cadr list))
+ (uniq-list (cdr list))
+ (cons (car list) (uniq-list (cdr list)))
+
+ ))))
(define (alist<? x y)
(string<? (symbol->string (car x))
(string-append "@ref{" x "}"))
(define (human-listify l)
+ "Produce a textual enumeration from L, a list of strings"
+
(cond
((null? l) "none")
((null? (cdr l)) (car l))
""
(string-append
"This engraver creates the following grobs: \n "
- (human-listify (map ref-ify objs))
+ (human-listify (map ref-ify (uniq-list (sort objs string<? ))))
".")
)
(string-append
desc
"\n\nThis context creates the following grobs: \n\n"
- (apply string-append (map (lambda (x) (string-append " " x " ")) grob-refs))
+ (human-listify (uniq-list (sort grob-refs string<? )))
"."
(if (null? accepts)
((-4 medium upright number feta-nummer 5) . "feta-nummer5")
((-5 medium upright number feta-nummer 4) . "feta-nummer4")
- ((4 medium upright roman cmr 20) . "cmr20")
- ((3 medium upright roman cmr 16) . "cmr16")
- ((2 medium upright roman cmr 14) . "cmr14")
+ ((4 medium upright roman cmr 17) . "cmr17")
+ ((3 medium upright roman cmr 17) . "cmr17")
+ ((2 medium upright roman cmr 12) . "cmr12")
((1 medium upright roman cmr 12) . "cmr12")
((0 medium upright roman cmr 10) . "cmr10")
((-1 medium upright roman cmr 8) . "cmr8" )
((-2 medium upright roman cmr 7) . "cmr7" )
((-3 medium upright roman cmr 6) . "cmr6" )
((-4 medium upright roman cmr 5) . "cmr5" )
- ((-5 medium upright roman cmr 4) . "cmr4" )
+ ((-5 medium upright roman cmr 5) . "cmr5" )
- ((3 medium italic roman cmti 16) . "cmti16")
- ((2 medium italic roman cmti 14) . "cmti14")
+ ((3 medium italic roman cmti 12) . "cmti12")
+ ((2 medium italic roman cmti 12) . "cmti12")
((1 medium italic roman cmti 12) . "cmti12")
((0 medium italic roman cmti 10) . "cmti10")
((-1 medium italic roman cmti 8) . "cmti8")
((-2 medium italic roman cmti 7) . "cmti7")
- ((-3 medium italic roman cmti 6) . "cmti6")
+ ((-3 medium italic roman cmti 7) . "cmti7")
- ((2 bold upright roman cmbx 14) . "cmbx14")
+ ((2 bold upright roman cmbx 12) . "cmbx12")
((1 bold upright roman cmbx 12) . "cmbx12")
((0 bold upright roman cmbx 10) . "cmbx10")
((-1 bold upright roman cmbx 8) . "cmbx8")
((-2 bold upright roman cmbx 7) . "cmbx7")
- ((4 medium upright typewriter cmtt 20) . "cmtt20")
- ((3 medium upright typewriter cmtt 16) . "cmtt16")
- ((2 medium upright typewriter cmtt 14) . "cmtt14")
+ ((4 medium upright typewriter cmtt 17) . "cmtt17")
+ ((3 medium upright typewriter cmtt 17) . "cmtt17")
+ ((2 medium upright typewriter cmtt 12) . "cmtt12")
((1 medium upright typewriter cmtt 12) . "cmtt12")
((0 medium upright typewriter cmtt 10) . "cmtt10")
((-1 medium upright typewriter cmtt 8) . "cmtt8" )
((-2 medium upright typewriter cmtt 7) . "cmtt7" )
((-3 medium upright typewriter cmtt 6) . "cmtt6" )
((-4 medium upright typewriter cmtt 5) . "cmtt5" )
- ((-5 medium upright typewriter cmtt 4) . "cmtt4" )
+ ((-5 medium upright typewriter cmtt 5) . "cmtt5" )
;; should use the same brace font every where and fix C++ code.
((2 * * braces feta-braces 26) . "feta-braces26")
(lily-interface
'system-start-delimiter-interface
"#'style can be bar-line, bracket or brace"
- '(bar-line-collapse-height brace-collapse-height bracket-collapse-height
- thickness arch-height arch-angle arch-thick
- arch-width bracket-thick glyph )))
+ '(thickness arch-height arch-angle arch-thick
+ arch-width bracket-thick glyph )))
(define text-spanner-interface
(lily-interface
"Catch Note_req's, Tonic_reqs, Inversion_reqs, Bass_req
and generate the appropriate chordname."
'(ChordName)
- '(
- chordChanges
- )))
+ '(chordChanges)))
(cons
Staff.defaultBarType will have no effect.
")
-(translator-property-description 'drarnChords boolean? "")
+(translator-property-description 'chordChanges boolean? "Only generate chords
+if they change.
+")
(translator-property-description 'explicitClefVisibility procedure? "visibility-lambda function for clef changes.")
(translator-property-description 'explicitKeySignatureVisibility procedure? "visibility-lambda function for explicit Key changes.")
(translator-property-description 'followThread boolean?