setenv TFMFONTS "$datadir/tfm:"
endif
+if ($?TEXPSHEADERS) then
+ setenv TFMFONTS "$datadir/pfa:$TEXPSHEADERS"
+else
+ setenv TFMFONTS "$datadir/pfa:"
+endif
+if ($?TEXCONFIG) then
+ setenv TEXCONFIG "$datadir/pfa:$TEXPSHEADERS"
+else
+ setenv TEXCONFIG "$datadir/pfa:"
+endif
+
MFINPUTS="$datadir/mf:"${MFINPUTS:=":"}
TEXINPUTS="$datadir/tex:$datadir/ps:"${TEXINPUTS:=":"}
TFMFONTS="$datadir/tfm:"${TFMFONTS:=":"}
+TEXPSHEADERS="$datadir/pfa/:"${TEXPSHEADERS:=":"}
+TEXCONFIG="$datadir/pfa/:"${TEXCONFIG:=":"}
+
+
# LILYPONDPREFIX="$datadir"
# export LILYPONDPREFIX
-export MFINPUTS TEXINPUTS TFMFONTS GS_LIB GS_FONTPATH
+export MFINPUTS TEXINPUTS TFMFONTS GS_LIB GS_FONTPATH
+export TEXPSHEADERS TEXCONFIG
def name2line (n):
# UGR
if string.find (n, '+') >= 0:
- s = "@lilypondfile{%s}" % n
+ s = "@lilypondfile[printfilename]{%s}" % n
else:
s = "@lilypondfile[printfilename,verbatim]{%s}" % n
return s
--prefix=/usr --enable-optimise \
--infodir='$${prefix}/share/info' \
--mandir='$${prefix}/share/man'
- $(MAKE)
+ $(MAKE) MAKE_PFA_FILES=1
touch build-stamp
# Add here commands to install the package into debian/tmp.
dh_installdirs
- $(MAKE) prefix=$(PWD)/$(r)/usr install
+ $(MAKE) prefix=$(PWD)/$(r)/usr MAKE_PFA_FILES=1 install
# Change from an absolute symlink to a relative symlink (Lintian)
if [ -L $(r)/usr/share/lilypond/cmtfm ]; then \
--- /dev/null
+\header {
+
+texidoc = "Grace notes do tricky things with timing. If a measure
+starts with a grace note, the measure does not start at 0, but
+earlier. Nevertheless, lily should not get confused. For example, line
+breaks should be possible at grace notes, and the bar number should be
+printed correctly.
+"
+}
+
+\score { \notes\relative c''' { c1 \break
+\grace c8
+c1 }}
<e! g >
<f8 ais >
\figures {
- r
+ r8
<1 3 5>4 <3- 5+ 6!> <5>
}
}
--- /dev/null
+
+#(define (voicify-list lst number)
+ "Make a list of Musics.
+
+ voicify-list :: [ [Music ] ] -> number -> [Music]
+ LST is a list music-lists.
+"
+
+ (if (null? lst) '()
+ (cons (context-spec-music
+ (make-sequential-music
+ (list
+ (make-voice-props-set number)
+ (make-simultaneous-music (car lst))))
+
+ "Voice" (number->string number))
+ (voicify-list (cdr lst) (+ number 1))
+ ))
+ )
+
+#(define (voicify-chord ch)
+ "Split the parts of a chord into different Voices using separator"
+ (let* ((es (ly-get-mus-property ch 'elements)))
+
+
+ (ly-set-mus-property ch 'elements
+ (voicify-list (split-list es music-separator?) 0))
+ ch
+ ))
+
+#(define (voicify-music m)
+ "Recursively split chords that are separated with \\ "
+
+ (if (not (music? m))
+ (begin (display m)
+ (error "not music!"))
+ )
+ (let*
+ ((es (ly-get-mus-property m 'elements))
+ (e (ly-get-mus-property m 'element))
+ )
+
+ (if
+ (and (equal? (ly-music-name m) "Simultaneous_music")
+ (reduce (lambda (x y ) (or x y)) (map music-separator? es)))
+ (voicify-chord m)
+ (begin
+ (if (pair? es)
+ (ly-set-mus-property m 'elements (map voicify-music es)))
+ (if (music? e)
+ (ly-set-mus-property m 'element (voicify-music e)))
+
+ m)
+
+ )
+ ))
+
+\score { \notes \context Staff \relative c''
+\apply #voicify-music {
+ c4 <g' \\ c, \\ f \\ d > f g < c \\ d> a
+}
+}
+
+
{
protected:
Item* text_p_;
-
protected:
virtual void stop_translation_timestep ();
virtual void acknowledge_grob (Grob_info);
- virtual void create_grobs ();
+ virtual void process_music ();
void create_items ();
TRANSLATOR_DECLARATIONS( Bar_number_engraver );
};
every 5 measures? */
void
-Bar_number_engraver::create_grobs ()
+Bar_number_engraver::process_music ()
{
// todo include (&&!time->cadenza_b_)
- SCM bn = get_property ("currentBarNumber");
- SCM smp = get_property ("measurePosition");
- Moment mp = (unsmob_moment (smp)) ? *unsmob_moment (smp) : Moment (0);
+
+ SCM wb = get_property ("whichBar");
- if (gh_number_p (bn) &&
- !mp.to_bool () && now_mom () > Moment (0))
+ if (gh_string_p (wb))
{
- create_items ();
-
- // guh.
- text_p_->set_grob_property ("text",
- ly_str02scm (to_str (gh_scm2int (bn)).ch_C ()));
+ SCM bn = get_property ("currentBarNumber");
+ SCM smp = get_property ("measurePosition");
+ int ibn = gh_number_p (bn) ? gh_scm2int(bn) : 1;
+
+ Moment mp = (unsmob_moment (smp)) ? *unsmob_moment (smp) : Moment (0);
+ if (mp.main_part_ == Rational (0)
+ && ibn != 1)
+ {
+ create_items ();
+
+ // guh.
+ text_p_->set_grob_property ("text",
+ ly_str02scm (to_str (gh_scm2int (bn)).ch_C ()));
+ }
}
+
}
}
figures_.clear ();
+ rest_req_ = 0;
}
bool
return E_CLOSE;
case '~':
return E_TILDE;
+ case '\\':
+ return E_BACKSLASH;
default:
return E_CHAR;
}
{
return gh_symbol2scm ((char*)x);
}
+
+
+bool
+type_check_assignment (SCM val, SCM sym, SCM type_symbol)
+{
+ bool ok = true;
+ SCM type_p = SCM_EOL;
+
+ if (gh_symbol_p (sym))
+ type_p = scm_object_property (sym, type_symbol);
+
+ if (type_p != SCM_EOL && !gh_procedure_p (type_p))
+ {
+ warning (_f ("Can't find property type-check for `%s'. Perhaps you made a typing error? Doing assignment anyway.",
+ ly_symbol2string (sym).ch_C ()));
+ }
+ else
+ {
+ if (val != SCM_EOL
+ && gh_procedure_p (type_p)
+ && gh_call1 (type_p, val) == SCM_BOOL_F)
+ {
+ SCM errport = scm_current_error_port ();
+ ok = false;
+ SCM typefunc = scm_primitive_eval (ly_symbol2scm ("type-name"));
+ SCM type_name = gh_call1 (typefunc, type_p);
+
+ String realval = ly_scm2string (ly_write2scm (val));
+ if (realval.length_i () > 200)
+ realval = realval.left_str (100) + "\n :\n :\n" + realval.right_str (100);
+
+
+ scm_puts (_f ("Type check for `%s' failed; value `%s' must be of type `%s'",
+ ly_symbol2string (sym).ch_C (),
+ realval.ch_C (),
+ ly_scm2string (type_name).ch_C ()).ch_C (),
+ errport);
+ scm_puts ("\n", errport);
+ }
+ }
+ return ok;
+}
Music*
get_music (String s)
{
- return (*get_music_ctor (s)) ();
+ return (*get_music_ctor (s)) () ;
}
Pitch last = p;
for (SCM s = music_list (); gh_pair_p (s); s = ly_cdr (s))
{
- last = unsmob_music (ly_car (s))->to_relative_octave (last);
- if (!count ++)
- retval = last;
+ Music *m = unsmob_music (ly_car (s));
+ if (!m)
+ {
+ programming_error ("Music_sequence should only contain music!");
+ }
+ else
+ {
+ last = m->to_relative_octave (last);
+ if (!count ++)
+ retval = last;
+ }
}
if (!ret_first)
return (s == SCM_BOOL_F) ? SCM_EOL : ly_cdr (s);
}
-#if 0
-/*
- Remove the value associated with KEY, and return it. The result is
- that a next call will yield SCM_EOL (and not the underlying
- `basic' property.
-*/
-SCM
-Music::remove_mus_property (const char* key)
-{
- SCM val = get_mus_property (key);
- if (val != SCM_EOL)
- set_mus_property (key, SCM_EOL);
- return val;
-}
-
-SCM
-Music::get_mus_property (const char *nm) const
-{
- SCM sym = ly_symbol2scm (nm);
- return get_mus_property (sym);
-}
-
-void
-Music::set_mus_property (const char* k, SCM v)
-{
- SCM s = ly_symbol2scm (k);
- set_mus_property (s, v);
-}
-
-void
-Music::set_immutable_mus_property (SCM s, SCM v)
-{
- immutable_property_alist_ = gh_cons (gh_cons (s,v), mutable_property_alist_);
- mutable_property_alist_ = scm_assq_remove_x (mutable_property_alist_, s);
-}
-#endif
void
Music::internal_set_mus_property (SCM s, SCM v)
return SCM_UNSPECIFIED;
}
- if (sc)
+ if (!sc)
{
- sc->internal_set_mus_property (sym, val);
- }
- else
- {
- warning (_ ("ly_set_mus_property (): not of type Music"));
+ warning (_ ("ly_set_mus_property (): not of type Music: "));
scm_write (mus, scm_current_error_port ());
+ return SCM_UNSPECIFIED;
}
+
+ bool ok = type_check_assignment (val, sym, ly_symbol2scm ("music-type?"));
+ if (ok)
+ {
+ sc->internal_set_mus_property (sym, val);
+ }
+
return SCM_UNSPECIFIED;
}
}
else
{
- SCM s = get_music (ly_scm2string (type))->self_scm ();
+ SCM s = get_music (ly_scm2string (type))->self_scm ();
scm_gc_unprotect_object (s);
+
return s;
}
}
return ly_str02scm (nm);
}
+SCM
+ly_music_list_p (SCM l)
+{
+ if (scm_list_p (l) != SCM_BOOL_T)
+ return SCM_BOOL_F;
+
+ while (gh_pair_p (l))
+ {
+ if (!unsmob_music (gh_car (l)))
+ return SCM_BOOL_F;
+ l =gh_cdr (l);
+ }
+ return SCM_BOOL_T;
+}
+
static void
init_functions ()
{
+ scm_c_define_gsubr ("music-list?", 1, 0, 0, (Scheme_function_unknown)ly_music_list_p);
scm_c_define_gsubr ("ly-get-mus-property", 2, 0, 0, (Scheme_function_unknown)ly_get_mus_property);
scm_c_define_gsubr ("ly-set-mus-property", 3, 0, 0, (Scheme_function_unknown)ly_set_mus_property);
scm_c_define_gsubr ("ly-make-music", 1, 0, 0, (Scheme_function_unknown)ly_make_music);
/* escaped */
%token E_CHAR E_EXCLAMATION E_SMALLER E_BIGGER E_OPEN E_CLOSE E_TILDE
+%token E_BACKSLASH
%token CHORD_BASS CHORD_COLON CHORD_MINUS CHORD_CARET
%type <i> exclamations questions dots
$$-> set_spot (THIS->here_input ());
$1-> set_spot (THIS->here_input ());
}
+ | E_BACKSLASH {
+ $$ = new Music (gh_list (gh_cons (ly_symbol2scm ("name"), ly_symbol2scm ("separator")), SCM_UNDEFINED));
+ $$->set_spot (THIS->here_input ());
+ }
| '|' {
+
extern Music * get_barcheck();
$$ = get_barcheck ();
$$->set_spot (THIS->here_input ());
return list;
}
-void
-Translator_group::add_fresh_simple_translator (Translator*t)
-{
- simple_trans_list_ = add_translator (simple_trans_list_, t);
- t->initialize ();
-}
void
Translator_group::add_used_group_translator (Translator *t)
}
-bool
-type_check_assignment (SCM val, SCM sym, SCM type_symbol)
-{
- bool ok = true;
- SCM type_p = SCM_EOL;
-
- if (gh_symbol_p (sym))
- type_p = scm_object_property (sym, type_symbol);
-
- if (type_p != SCM_EOL && !gh_procedure_p (type_p))
- {
- warning (_f ("Can't find property type-check for `%s'. Perhaps you made a typing error? Doing assignment anyway.",
- ly_symbol2string (sym).ch_C ()));
- }
- else
- {
- if (val != SCM_EOL
- && gh_procedure_p (type_p)
- && gh_call1 (type_p, val) == SCM_BOOL_F)
- {
- SCM errport = scm_current_error_port ();
- ok = false;
- SCM typefunc = scm_primitive_eval (ly_symbol2scm ("type-name"));
- SCM type_name = gh_call1 (typefunc, type_p);
-
- scm_puts (_f ("Type check for `%s' failed; value `%s' must be of type `%s'",
- ly_symbol2string (sym).ch_C (),
- ly_scm2string (ly_write2scm (val)).ch_C (),
- ly_scm2string (type_name).ch_C ()).ch_C (),
- errport);
- scm_puts ("\n", errport);
- }
- }
- return ok;
-}
-
SCM
ly_get_trans_property (SCM context, SCM name)
{
}
% dynamic dir? text script, articulation script dir?
-oneVoice = {
- \stemBoth
- \slurBoth
- \tieBoth
- \shiftOff
-}
-
-voiceOne = {
- \stemUp
- \slurUp
- \tieUp
- \dotsUp
-}
-
-voiceTwo = {
- \stemDown
- \slurDown
- \tieDown
- \dotsDown
-}
-
-voiceThree = {
- \stemUp
- \slurUp
- \tieUp
- \shiftOn
- \dotsUp
-}
-
-voiceFour = {
- \stemDown
- \slurDown
- \tieDown
- \shiftOn
- \dotsDown
-}
+oneVoice = #(context-spec-music (make-voice-props-revert) "Voice")
+voiceOne = #(context-spec-music (make-voice-props-set 0) "Voice")
+voiceTwo = #(context-spec-music (make-voice-props-set 1) "Voice")
+voiceThree =#(context-spec-music (make-voice-props-set 2) "Voice")
+voiceFour = #(context-spec-music (make-voice-props-set 3) "Voice")
% There's also dash, but setting dash period/length should be fixed.
slurDotted = \property Voice.Slur \override #'dashed = #1
AF_FILES = $(wildcard *.af)
-EXTRA_DIST_FILES += README feta.tex
+EXTRA_DIST_FILES += README feta.tex lilypond.map
# don't try to make fonts from test files
TEST_FILES = $(wildcard *test*.mf)
PFA_FILES = $(addprefix $(outdir)/, $(FONT_FILES:.mf=.pfa))
ALL_GEN_FILES += $(PFA_FILES)
INSTALLATION_OUT_DIR4=$(datadir)/pfa
-INSTALLATION_OUT_FILES4=$(PFA_FILES)
+INSTALLATION_OUT_FILES4=$(PFA_FILES) lilypond.map
pfa: $(PFA_FILES)
endif
% part of LilyPond's pretty-but-neat music font
design_size:=10; % feta20 = 20pt
-
+% mode := smoke;
input feta-nummer;
end.
--- /dev/null
+%vvv UniqueID=4455667
+feta11 TeX-feta11 <feta11.pfa
+feta13 TeX-feta13 <feta13.pfa
+feta16 TeX-feta16 <feta16.pfa
+feta19 TeX-feta19 <feta19.pfa
+feta20 TeX-feta20 <feta20.pfa
+feta23 TeX-feta23 <feta23.pfa
+feta26 TeX-feta26 <feta26.pfa
+feta-din4 TeX-feta-din4 <feta-din4.pfa
+feta-din5 TeX-feta-din5 <feta-din5.pfa
+feta-din6 TeX-feta-din6 <feta-din6.pfa
+feta-din7 TeX-feta-din7 <feta-din7.pfa
+feta-din8 TeX-feta-din8 <feta-din8.pfa
+feta-din9 TeX-feta-din9 <feta-din9.pfa
+feta-din10 TeX-feta-din10 <feta-din10.pfa
+feta-din11 TeX-feta-din11 <feta-din11.pfa
+feta-din12 TeX-feta-din12 <feta-din12.pfa
+feta-din13 TeX-feta-din13 <feta-din13.pfa
+feta-din14 TeX-feta-din14 <feta-din14.pfa
+feta-din17 TeX-feta-din17 <feta-din17.pfa
+feta-din19 TeX-feta-din19 <feta-din19.pfa
+feta-braces0 TeX-feta-braces0 <feta-braces0.pfa
+feta-braces1 TeX-feta-braces1 <feta-braces1.pfa
+feta-braces2 TeX-feta-braces2 <feta-braces2.pfa
+feta-braces3 TeX-feta-braces3 <feta-braces3.pfa
+feta-braces4 TeX-feta-braces4 <feta-braces4.pfa
+feta-braces5 TeX-feta-braces5 <feta-braces5.pfa
+feta-braces6 TeX-feta-braces6 <feta-braces6.pfa
+feta-braces7 TeX-feta-braces7 <feta-braces7.pfa
+feta-braces8 TeX-feta-braces8 <feta-braces8.pfa
+feta-nummer4 TeX-feta-nummer4 <feta-nummer4.pfa
+feta-nummer5 TeX-feta-nummer5 <feta-nummer5.pfa
+feta-nummer6 TeX-feta-nummer6 <feta-nummer6.pfa
+feta-nummer7 TeX-feta-nummer7 <feta-nummer7.pfa
+feta-nummer8 TeX-feta-nummer8 <feta-nummer8.pfa
+feta-nummer10 TeX-feta-nummer10 <feta-nummer10.pfa
+feta-nummer11 TeX-feta-nummer11 <feta-nummer11.pfa
+feta-nummer13 TeX-feta-nummer13 <feta-nummer13.pfa
(,boolean? . "boolean")
(,moment? . "moment")
(,ly-input-location? . "input location")
+ (,music-list? . "list of music")
(,music? . "music")
(,number? . "number")
(,char? . "char")
(cons (f (car x)) (f (cdr x))))
;; used where?
-;;(define (reduce operator list)
-;; (if (null? (cdr list)) (car list)
-;; (operator (car list) (reduce operator (cdr list)))))
+(define (reduce operator list)
+ "reduce OP [A, B, C, D, ... ] =
+ A op (B op (C ... ))
+"
+ (if (null? (cdr list)) (car list)
+ (operator (car list) (reduce operator (cdr list)))))
;;;; changed eval to primitive-eval for guile 1.4/1.4.1 compatibility --jcn
-(define (seq-music-list elts)
- (let* ( (ml (ly-make-music "Sequential_music")) )
- (ly-set-mus-property ml 'elements elts)
- ml
-))
-
-(define (make-art-script x)
+(define (make-articulation-script x)
(let* ( (m (ly-make-music "Articulation_req"))
)
(ly-set-mus-property m 'articulation-type x)
)
;; adds the articulation script x to m if x is not #f.
-(define (add-art-script m x)
+(define (add-articulation-script m x)
(if x
(if (and x (equal? (ly-music-name m) "Request_chord"))
(ly-set-mus-property m 'elements
- (cons (make-art-script x) (ly-get-mus-property m 'elements))
+ (cons (make-articulation-script x) (ly-get-mus-property m 'elements))
)
(let* ( (es (ly-get-mus-property m 'elements))
(e (ly-get-mus-property m 'element)) )
- (map (lambda (y) (add-art-script y x)) es)
+ (map (lambda (y) (add-articulation-script y x)) es)
(if (music? e)
- (add-art-script e x))
+ (add-articulation-script e x))
)
)
)
(script (cadr pap))
(pitch (caddr pap))
(ht (make-head-type style))
- (seq (seq-music-list (list ht req-ch)))
+ (seq (make-sequential-music (list ht req-ch)))
)
- (add-art-script req-ch script)
+ (add-articulation-script req-ch script)
(ly-set-mus-property fe 'pitch pitch)
(set! req-ch (make-thread-context style seq))
req-ch
(pitchify-scripts e)))
music))
+
+
+;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;
+
+
+(define (make-grob-property-set grobs gprop val)
+ "Make a M-exp that sets GPROP to VAL in GROBS. Does a pop first, i.e.
+this is not an override
+"
+
+ (let* ((m (ly-make-music "Music")))
+ (ly-set-mus-property m 'iterator-ctor Push_property_iterator::constructor)
+ (ly-set-mus-property m 'symbols grobs)
+ (ly-set-mus-property m 'grob-property gprop)
+ (ly-set-mus-property m 'grob-value val)
+ (ly-set-mus-property m 'pop-first #t)
+
+ m
+
+ ))
+
+(define (make-grob-property-revert grobs gprop)
+ (let* ((m (ly-make-music "Music")))
+ (ly-set-mus-property m 'iterator-ctor Pop_property_iterator::constructor)
+ (ly-set-mus-property m 'symbols grobs)
+ (ly-set-mus-property m 'grob-property gprop)
+
+ m
+
+ ))
+
+(define (make-voice-props-set n)
+ (make-sequential-music
+ (list
+ (make-grob-property-set '(Tie Slur Stem Dots) 'direction
+ (if (odd? n) -1 1))
+ (make-grob-property-set '(NoteColumn) 'horizontal-shift (quotient n 2))
+ )
+ ))
+
+(define (make-voice-props-revert)
+ (make-sequential-music
+ (list
+ (make-grob-property-revert '(Tie Slur Stem Dots) 'direction)
+ (make-grob-property-revert '(NoteColumn) 'horizontal-shift)
+ ))
+ )
+
+(define (context-spec-music m context . rest)
+ "Add \context CONTEXT = foo to M. "
+
+ (let* ((cm (ly-make-music "Context_specced_music")))
+ (ly-set-mus-property cm 'element m)
+ (ly-set-mus-property cm 'context-type context)
+ (if (and (pair? rest) (string? (car rest)))
+ (ly-set-mus-property cm 'context-id (car rest))
+ )
+ cm
+ ))
+
+(define (make-sequential-music elts)
+ (let* ((m (ly-make-music "Sequential_music")))
+ (ly-set-mus-property m 'elements elts)
+ m
+ ))
+(define (make-simultaneous-music elts)
+ (let* ((m (ly-make-music "Simultaneous_music")))
+ (ly-set-mus-property m 'elements elts)
+ m
+ ))
+(define (music-separator? m)
+ "Is M a separator."
+ (let* ((n (ly-get-mus-property m 'name )))
+ (and (symbol? n) (equal? 'separator n))
+ ))
+
+(define (split-one sep? l acc)
+ "Split off the first parts before separator and return both parts.
+
+"
+ (if (null? l)
+ (cons acc '())
+ (if (sep? (car l))
+ (cons acc (cdr l))
+ (split-one sep? (cdr l) (cons (car l) acc))
+ )
+ ))
+
+(define (split-list l sep?)
+ (if (null? l)
+ '()
+ (let* ((c (split-one sep? l '())))
+ (cons (reverse! (car c) '()) (split-list (cdr c) sep?))
+ )
+ )
+ )
+
+;; test code
+; (display (split-list '(a b c / d e f / g) (lambda (x) (equal? x '/))) )
+
+
+;;; splitting chords into voices.
+
+(define (voicify-list lst number)
+ "Make a list of Musics.
+
+ voicify-list :: [ [Music ] ] -> number -> [Music]
+ LST is a list music-lists.
+"
+
+ (if (null? lst) '()
+ (cons (context-spec-music
+ (make-sequential-music
+ (list
+ (make-voice-props-set number)
+ (make-simultaneous-music (car lst))))
+
+ "Voice" (number->string number))
+ (voicify-list (cdr lst) (+ number 1))
+ ))
+ )
+
+(define (voicify-chord ch)
+ "Split the parts of a chord into different Voices using separator"
+ (let* ((es (ly-get-mus-property ch 'elements)))
+
+
+ (ly-set-mus-property ch 'elements
+ (voicify-list (split-list es music-separator?) 0))
+ ch
+ ))
+
+(define (voicify-music m)
+ "Recursively split chords that are separated with \\ "
+
+ (if (not (music? m))
+ (begin (display m)
+ (error "not music!"))
+ )
+ (let*
+ ((es (ly-get-mus-property m 'elements))
+ (e (ly-get-mus-property m 'element))
+ )
+
+ (if
+ (and (equal? (ly-music-name m) "Simultaneous_music")
+ (reduce (lambda (x y ) (or x y)) (map music-separator? es)))
+ (voicify-chord m)
+ (begin
+ (if (pair? es)
+ (ly-set-mus-property m 'elements (map voicify-music es)))
+ (if (music? e)
+ (ly-set-mus-property m 'element (voicify-music e)))
+
+ m)
+
+ )
+ ))
+
+;;;
(music-property-description 'direction dir? "Print this up or down?")
(music-property-description 'text-type symbol? "Particular type of text script (eg. finger, dynamic).")
(music-property-description 'element music? "The single child of a Music_wrapper music object, or the body of a repeat.")
-(music-property-description 'elements list? "A list of elements for sequential of simultaneous music, or the alternatives of repeated music. ")
+(music-property-description 'elements music-list? "A list of elements for sequential of simultaneous music, or the alternatives of repeated music. ")
(music-property-description 'force-accidental boolean? "If set, a cautionary accidental should always be printed on this note")
(music-property-description 'grob-property symbol? "The symbol of the grob property to set. ")
(music-property-description 'grob-value scheme? "The value of the grob property to set")
(music-property-description 'penalty number? "Penalty for break hint.")
(music-property-description 'pitch pitch? "the pitch of this note")
(music-property-description 'pitch-alist list? "list of pitches jointly forming the scale of a key signature")
+(music-property-description 'pop-first boolean? "Do a revert before we try to do a override on some grob property.")
+
(music-property-description 'predicate procedure? "the predicate of a \outputproperty")
(music-property-description 'type symbol? "The type of this music object. Determines iteration in some cases.")
(music-property-description 'repeat-count integer? "do a @code{\repeat} how ofen?")
" { /"
(car name-mag)
" findfont "
- "12 " (ly-number->string (cdr name-mag)) " mul "
+ "20 " (ly-number->string (cdr name-mag)) " mul "
"lilypondpaperoutputscale div scalefont setfont } bind def "
"\n"))