* lily/stem-engraver.cc (make_stem): take duration log from event.
* lily/chord-tremolo-engraver.cc: don't ack note-head-interface.
+2005-07-09 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+ * lily/include/music.hh (class Music): remove Music::duration_log()
+
+ * lily/stem-engraver.cc (make_stem): take duration log from event.
+
+ * lily/chord-tremolo-engraver.cc: don't ack note-head-interface.
+
2005-07-08 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ * scm/lily.scm (ly:load): load autochange.scm
+
* Documentation/user/tutorial.itely (Running LilyPond for the
first time): remove reference to DVI/TeX
Trills that should be executed on an explicitly specified pitch can be
typeset with the command @code{pitchedTrill},
-@lilypond[raggedright,verbatim]
+@lilypond[raggedright,verbatim,fragment]
\pitchedTrill c'4\startTrillSpan fis
f'\stopTrillSpan
@end lilypond
|| !ly_c_equal_p (info.grob ()->get_property ("style"),
ly_symbol2scm ("harmonic")))
{
-
Accidental_entry entry;
entry.head_ = info.grob ();
entry.origin_trans_ = dynamic_cast<Engraver *> (info.origin_translator ());
#include "engraver-group-engraver.hh"
#include "warn.hh"
#include "misc.hh"
-#include "note-head.hh"
#include "spanner.hh"
#include "item.hh"
#include "chord-tremolo-iterator.hh"
}
}
else if (repeat_
- && flags_ && !body_is_sequential_ && Stem::has_interface (info.grob ()))
+ && flags_
+ && !body_is_sequential_
+ && Stem::has_interface (info.grob ()))
{
stem_tremolo_ = make_item ("StemTremolo", repeat_->self_scm ());
stem_tremolo_->set_property ("flag-count",
/* descr */ "Generates beams for tremolo repeats.",
/* creats*/ "Beam",
/* accepts */ "repeated-music",
- /* acks */ "stem-interface note-head-interface",
+ /* acks */ "stem-interface",
/* reads */ "",
/* write */ "");
void internal_set_property (SCM, SCM val);
SCM get_property_alist (bool mutble) const;
bool internal_is_music_type (SCM) const;
- int duration_log () const;
DECLARE_SCHEME_CALLBACK (relative_callback, (SCM, SCM));
Pitch to_relative_octave (Pitch);
return ip ? ip : &dummy_input_global;
}
-int
-Music::duration_log () const
-{
- if (is_mus_type ("rhythmic-event"))
- return unsmob_duration (get_property ("duration"))->duration_log ();
- return 0;
-}
Music *
make_music_by_name (SCM sym)
stem_ = make_item ("Stem", gi.music_cause ()->self_scm ());
/*
- docme: why do we take duration-log from request, not from note
- head?
+ we take the duration log from the Event, since the duration-log
+ for a note head is always <= 2.
*/
- int duration_log = gi.music_cause ()->duration_log ();
- stem_->set_property ("duration-log", scm_int2num (duration_log));
+ Music *music = gi.music_cause ();
+ Duration *dur = unsmob_duration (music->get_property ("duration"));
+
+ stem_->set_property ("duration-log", dur ? scm_int2num (dur->duration_log ()) : 0);
if (tremolo_ev_)
{
context ()->set_property ("tremoloFlags", scm_int2num (requested_type));
int tremolo_flags = intlog2 (requested_type) - 2
- - (duration_log > 2 ? duration_log - 2 : 0);
+ - (dur->duration_log () > 2 ? dur->duration_log () - 2 : 0);
if (tremolo_flags <= 0)
{
tremolo_ev_->origin ()->warning (_ ("tremolo duration is too long"));
Music *cause = gi.music_cause ();
if (!cause)
return;
-
+ Duration *d = unsmob_duration (cause->get_property ("duration"));
+ if (!d)
+ return ;
+
if (!stem_)
make_stem (gi);
-
- int duration_log = cause->duration_log ();
- if (Stem::duration_log (stem_) != duration_log)
+
+ if (Stem::duration_log (stem_) != d->duration_log ())
{
// FIXME:
- gi.music_cause ()->origin ()->warning (_f ("adding note head to incompatible stem (type = %d)", 1 << Stem::duration_log (stem_)));
+ gi.music_cause ()->origin ()->warning (_f ("adding note head to incompatible stem (type = %d)",
+ 1 << Stem::duration_log (stem_)));
gi.music_cause ()->origin ()->warning (_f ("maybe input should specify polyphonic voices"));
}
--- /dev/null
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; autochange - fairly related to part combining.
+
+(define-public (make-autochange-music music)
+ (define (generate-split-list change-moment event-list acc)
+ (if (null? event-list)
+ acc
+ (let* ((now-tun (caar event-list))
+ (evs (map car (cdar event-list)))
+ (now (car now-tun))
+ (notes (filter (lambda (x)
+ (equal? (ly:music-property x 'name) 'NoteEvent))
+ evs))
+ (pitch (if (pair? notes)
+ (ly:music-property (car notes) 'pitch)
+ #f)))
+ ;; tail recursive.
+ (if (and pitch (not (= (ly:pitch-steps pitch) 0)))
+ (generate-split-list #f
+ (cdr event-list)
+ (cons (cons
+
+ (if change-moment
+ change-moment
+ now)
+ (sign (ly:pitch-steps pitch))) acc))
+ (generate-split-list
+ (if pitch #f now)
+ (cdr event-list) acc)))))
+
+ (set! noticed '())
+ (let* ((m (make-music 'AutoChangeMusic))
+ (context (ly:run-translator (make-non-relative-music music) part-combine-listener))
+ (evs (last-pair noticed))
+ (split (reverse! (generate-split-list
+ #f
+ (if (pair? evs)
+ (reverse! (cdar evs) '()) '())
+ '())
+ '())))
+ (set! (ly:music-property m 'element) music)
+ (set! (ly:music-property m 'split-list) split)
+ (set! noticed '())
+ m))
(TimeSignature
. (
(print-function . ,Time_signature::print)
-; (print-function . ,Text_interface::print)
(break-align-symbol . time-signature)
(break-visibility . ,all-visible)
(space-alist . (
))
(breakable . #t)
(style . C)
-; (text . (,time-signature-glue-markup))
(meta . ((interfaces . (time-signature-interface break-aligned-interface font-interface item-interface ))))
))
(direction . ,LEFT)
(font-size . -4)
(print-function . ,Accidental_interface::print)
- (meta . ((interfaces . (item-interface side-position-interface font-interface))))
+ (meta . ((interfaces . (item-interface
+ accidental-interface
+ side-position-interface font-interface))))
))
(TrillPitchGroup
(direction . ,RIGHT)
(padding . 0.3)
(meta . ((interfaces . (side-position-interface
+ note-head-interface rhythmic-head-interface
font-interface accidental-interface
item-interface axis-group-interface))))
))
(Y-offset-callbacks . (,Staff_symbol_referencer::callback))
(font-size . -4)
(meta . ((interfaces . (item-interface
+ rhythmic-head-interface
font-interface pitched-trill-interface
ledgered-interface staff-symbol-referencer-interface))))
))
-
(TupletBracket
. (
(padding . 1.1)
(after-line-breaking-callback . ,Tuplet_bracket::after_line_breaking)
(print-function . ,Tuplet_bracket::print)
(font-shape . italic)
-; (font-series . bold)
(font-size . -2)
(meta . ((interfaces . (text-interface line-interface
"bass-figure.scm"
"music-functions.scm"
"part-combiner.scm"
+ "autochange.scm"
"define-music-properties.scm"
"auto-beam.scm"
"chord-name.scm"
(display result))
result))
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; autochange - fairly related to part combining.
-
-(define-public (make-autochange-music music)
- (define (generate-split-list change-moment event-list acc)
- (if (null? event-list)
- acc
- (let* ((now-tun (caar event-list))
- (evs (map car (cdar event-list)))
- (now (car now-tun))
- (notes (filter (lambda (x)
- (equal? (ly:music-property x 'name) 'NoteEvent))
- evs))
- (pitch (if (pair? notes)
- (ly:music-property (car notes) 'pitch)
- #f)))
- ;; tail recursive.
- (if (and pitch (not (= (ly:pitch-steps pitch) 0)))
- (generate-split-list #f
- (cdr event-list)
- (cons (cons
-
- (if change-moment
- change-moment
- now)
- (sign (ly:pitch-steps pitch))) acc))
- (generate-split-list
- (if pitch #f now)
- (cdr event-list) acc)))))
-
- (set! noticed '())
- (let* ((m (make-music 'AutoChangeMusic))
- (context (ly:run-translator (make-non-relative-music music) part-combine-listener))
- (evs (last-pair noticed))
- (split (reverse! (generate-split-list
- #f
- (if (pair? evs)
- (reverse! (cdar evs) '()) '())
- '())
- '())))
- (set! (ly:music-property m 'element) music)
- (set! (ly:music-property m 'split-list) split)
- (set! noticed '())
- m))
-
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;