* Fixes for chord names, and added jazz style (James Hammons)
-1.3.98.jcn1
-===========
-
* Some font-size fixes.
* Added dynamics font in all staff-sizes.
1.3.98.hwn2
===========
+* Removed all paper vars except linewidth, indent, staffspace and
+stafflinethickness.
+
* Rewrote Scheme side of font-selection.
* Bugfix: deprecate group-center-element thoroughly.
@item
+@item @strong{e-flat} [todo]
+
+@item
+
@item @strong{e} @tab mi @tab mi @tab E @tab e @tab e @tab e @tab e
@item
LilyPond uses a versioning scheme similar to the Linux kernel. In a
version "x.y.z", an even second number 'y' denotes a stable version.
-For development versions 'y' is odd. For using straightforward score
-production, please use the latest stable version. Development versions
-may not produce good or nice scores.
+For development versions 'y' is odd. Sh, in theory, version 1.2 is
+stable, which means that there are no glaring errors in it. In practice
+1.2.x is also unmaintained.
+
+ 1.3.x is in healthy development: lots of problems turn up, but
+they're fixed quickly. Therefore we recommend you try 1.2.x, if you
+have any problem with it, upgrade to the latest 1.3.x release.
Requirements
============
make -C Documentation/user/ dvi
- You need a working LilyPond binary to create the DVI sources .
+ You need a working LilyPond binary to create the DVI and HTML
+ sources.
* use ASCII. Do using
make doc
Please send your e-mail to one of the MAILING LISTS
- and _not_ to us personally. See `Documentation/mail.texi' for more
-info.
+ and _not_ to us personally. We have the following mailing lists:
+
+ * info-gnu-music@gnu.org
+ (http://mail.gnu.org/mailman/listinfo/info-gnu-music) is a
+ low-volume list for information on the GNU Music project.
+ This list is moderated; ask David R. Linn <drl@gnu.org> or
+ Han-Wen <hanwen@cs.uu.nl> to send announcements for this list.
+
+ * help-gnu-music@gnu.org
+ (http://mail.gnu.org/mailman/listinfo/help-gnu-music) For help
+ with using LilyPond.
+
+ * bug-gnu-music@gnu.org
+ (http://mail.gnu.org/mailman/listinfo/bug-gnu-music) If you have
+ bugreports, you should send them to this list.
Windows 32
==========
PACKAGE_NAME=LilyPond
MAJOR_VERSION=1
MINOR_VERSION=3
-PATCH_LEVEL=98
-MY_PATCH_LEVEL=jcn2
+PATCH_LEVEL=99
+MY_PATCH_LEVEL=
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
# released version.
{
Simple_spacer * sp = new Simple_spacer;
Paper_def * d = pscore_l_->paper_l_;
- sp->default_space_f_ = d->get_var ("loose_column_distance");
+ /*
+ this is hardcoded, but this shouldn't happen anyway.
+ used to be g et_var ("loose_column_distance");
+ */
+ sp->default_space_f_ = 1.0;
+
sp->indent_f_ = line[LEFT];
Real hinf, Real r0);
Bezier get_bezier () const;
- void minimise_enclosed_area (Paper_def* paper_l, Real beauty);
+ void minimise_enclosed_area (Paper_def* paper_l, Real beauty, SCM props);
Real fit_factor () const;
void blow_fit ();
Real enclosed_area_f () const;
name = scm_assoc (ly_symbol2scm ("name"), name);
scm_display (gh_cdr(name), errport);
scm_puts(" \\push #'",errport);
- scm_display (elt_prop_sym,errport);
+ scm_write (elt_prop_sym,errport);
scm_puts ( " = #",errport);
- if (gh_string_p (val))
- scm_puts ("\"", errport);
- scm_display (val, scm_current_error_port ());
- if (gh_string_p (val))
- scm_puts ("\"", errport);
+ scm_write (val, scm_current_error_port ());
scm_puts ("\n", errport);
}
else
scm_display (gh_call1 (typefunc, type_p), errport);
scm_puts (", value found: ", errport);
- scm_display (val, errport);
+ scm_write (val, errport);
scm_puts (" type: ", errport);
scm_display (ly_type (val), errport);
scm_puts ("\n", errport);
algorithm, instead of this homebrew.
*/
void
-Slur_bezier_bow::minimise_enclosed_area (Paper_def* paper_l, Real beauty)
+Slur_bezier_bow::minimise_enclosed_area (Paper_def* paper_l, Real beauty,
+ SCM bezier_props)
{
Real length = curve_.control_[3][X_AXIS];
Real beautiful = beauty * length * slur_height (length, h_inf_, r_0_);
if (fit_factor () > 1.0)
blow_fit ();
- Real pct_c0 = paper_l->get_var ("bezier_pct_c0");
- Real pct_c3 = paper_l->get_var ("bezier_pct_c3");
- Real pct_in_max = paper_l->get_var ("bezier_pct_in_max");
- Real pct_out_max = paper_l->get_var ("bezier_pct_out_max");
- Real steps = paper_l->get_var ("bezier_area_steps");
+ Real pct_c0 = gh_scm2double (gh_cdr (scm_assoc (ly_symbol2scm ("bezier-pct-c0"), bezier_props)));
+ Real pct_c3 = gh_scm2double (gh_cdr (scm_assoc (ly_symbol2scm ("bezier-pct-c3"), bezier_props)));
+ Real pct_in_max = gh_scm2double (gh_cdr (scm_assoc (ly_symbol2scm ("bezier-pct-in-max"), bezier_props)));
+ Real pct_out_max = gh_scm2double (gh_cdr (scm_assoc (ly_symbol2scm ("bezier-pct-out-max"), bezier_props)));
+ Real steps = gh_scm2double (gh_cdr (scm_assoc (ly_symbol2scm ("bezier-area-steps"),bezier_props)));
for (int i=0; i < steps; i++)
{
if (gh_number_p (ssb))
sb = gh_scm2double (ssb);
- bb.minimise_enclosed_area (me->paper_l(), sb);
+ bb.minimise_enclosed_area (me->paper_l(), sb, details);
SCM sbf = scm_assq (ly_symbol2scm ("force-blowfit"), details);
Real bff = 1.0;
if (gh_pair_p (sbf) && gh_number_p (gh_cdr (sbf)))
}
mean_shortest /= n;
- Real non_musical_space_strength = me->paper_l ()->get_var ("breakable_column_space_strength");
+
for (int i= 0; i < cols.size () - 1; i++)
{
Item * l = dynamic_cast<Item*> (cols[i]);
*/
SCM sfac =lc->get_elt_property ("space-factor");
if (Item::breakable_b (lc) || lc->original_l_)
- s.strength_f_ = non_musical_space_strength;
+ {
+ s.strength_f_ =
+ gh_scm2double (lc->get_elt_property ("column-space-strength"));
+ }
else if (gh_number_p (sfac))
left_distance *= gh_scm2double (sfac);
if (rc->musical_b ())
{
if (to_boolean (rc->get_elt_property ("contains-grace")))
- right_dist *= me->paper_l ()->get_var ("before_grace_spacing_factor"); // fixme.
+ right_dist *= gh_scm2double (rc->get_elt_property ("before-grace-spacing-factor")); // fixme.
else
right_dist *= gh_scm2double (lc->get_elt_property ("before-musical-spacing-factor"));
}
Spacing_spanner::get_duration_space (Score_element*me, Moment d, Moment shortest)
{
Real log = log_2 (shortest);
- Real k= me->paper_l ()->get_var ("arithmetic_basicspace")
+ Real k = gh_scm2double (me->get_elt_property ("arithmetic-basicspace"))
- log;
- return (log_2 (d) + k) * me->paper_l ()->get_var ("arithmetic_multiplier");
+ return (log_2 (d) + k) * gh_scm2double (me->get_elt_property ("arithmetic-multiplier")) * me->paper_l ()->get_var ("staffspace");
}
Real correction = 0.0;
- Real ssc = me->paper_l ()->get_var("stemSpacingCorrection");
+ Real ssc = gh_scm2double (me->get_elt_property("stem-spacing-correction"));
+ ssc *= me->paper_l ()->get_var ("staffspace");
if (d1 && d2 && d1 * d2 == -1)
{
-
-
/*
maximum-duration-for-spacing
From: bf250@freenet.carleton.ca (John Sankey)
return trans_l;
}
-#if 0
-/*
- should not use, instead: use properties to communicate between engravers.
- */
-Translator*
-Translator_group::get_simple_translator (String type) const
-{
- for (SCM p = simple_trans_list_; gh_pair_p (p); p =gh_cdr (p))
- {
- if (classname (unsmob_translator (gh_car (p))) == type)
- return unsmob_translator (gh_car (p));
- }
- if (daddy_trans_l_)
- return daddy_trans_l_->get_simple_translator (type);
- return 0;
-}
-#endif
-
bool
Translator_group::is_bottom_translator_b () const
{
SCM meta = scm_assoc (ly_symbol2scm ("meta"), prev);
SCM props = scm_assoc (ly_symbol2scm ("properties"), gh_cdr (meta));
- SCM propdesc = scm_assoc (eltprop, gh_cdr (props));
- if (!gh_pair_p (propdesc))
+ SCM type_p = scm_assoc (eltprop, gh_cdr (props));
+ if (!gh_pair_p (type_p))
{
scm_puts (_("Couldn't find property description for #'").ch_C(),errport);
scm_display (eltprop, errport);
}
else
{
-
- SCM predicate = gh_cadr (propdesc);
- if (gh_call1 (predicate, val) == SCM_BOOL_F)
+ type_p = gh_cdr (type_p);
+ if (gh_call1 (type_p, val) == SCM_BOOL_F)
{
ok = false;
scm_puts (_("Failed typecheck for #'").ch_C (),errport);
scm_display (eltprop,errport);
scm_puts ( _(", value ").ch_C (), errport);
- scm_display (val, errport);
+ scm_write (val, errport);
scm_puts (_(" must be of type ").ch_C (), errport);
SCM typefunc = scm_eval2 (ly_symbol2scm ("type-name"), SCM_EOL);
-
- scm_display (gh_call1 (typefunc, predicate), errport);
+ scm_display (gh_call1 (typefunc, type_p), errport);
scm_puts ("\n", errport);
}
}
Begin3
Title: LilyPond
-Version: 1.3.98
-Entered-date: 22OCT00
+Version: 1.3.99
+Entered-date: 25OCT00
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.98.tar.gz
+ 1000k lilypond-1.3.99.tar.gz
Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
- 1000k lilypond-1.3.98.tar.gz
+ 1000k lilypond-1.3.99.tar.gz
Copying-policy: GPL
End
Name: lilypond
-Version: 1.3.98
+Version: 1.3.99
Release: 1
License: GPL
Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.98.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.99.tar.gz
Summary: A program for printing sheet music.
URL: http://www.cs.uu.nl/~hanwen/lilypond
# Icon: lilypond-icon.gif
(break-align-symbol . Left_edge_item)
(X-offset-callbacks . (,Break_align_interface::alignment_callback))
(breakable . #t)
-m (meta . ,(element-description "LeftEdge" break-aligned-interface))
+ (meta . ,(element-description "LeftEdge" break-aligned-interface))
))
(Fingering . (
(PaperColumn . (
(axes 0)
+ (before-grace-spacing-factor . 1.2)
(before-musical-spacing-factor . 0.4)
(meta . ,(element-description "PaperColumn" paper-column-interface axis-group-interface spaceable-element-interface))
))
(NonMusicalPaperColumn . (
(axes 0)
(before-musical-spacing-factor . 1.0)
+ (column-space-strength . 2.0)
(meta . ,(element-description "NonMusicalPaperColumn" paper-column-interface axis-group-interface spaceable-element-interface))
))
(Slur . ,default-basic-slur-properties)
(SpacingSpanner . (
(spacing-procedure . ,Spacing_spanner::set_springs)
-
+ (stem-spacing-correction . 0.5)
+ (arithmetic-basicspace . 2.0)
+ (arithmetic-multiplier . ,(* 0.9 1.32))
;; assume that notes at least this long are present.
(maximum-duration-for-spacing . ,(make-moment 1 8))
(meta . ,(element-description "SpacingSpanner" spacing-spanner-interface))
;;; (c) 2000 Jan Nieuwenhuizen <janneke@gnu.org>
;;;
-
-
-
(define style-to-font-alist
`(
(finger . ((font-family . number) (font-relative-size . -3)))
(large . ((font-family . roman) (font-relative-size . 1)))
(Large . ((font-series . bold) (font-family . roman) (font-relative-size . 2)))
(dynamic . ((font-series . bold) (font-family . dynamic) (font-relative-size . 0)))
-
))
(define (font-field name font-descr)
((eq? name 'font-point-size-size) 5)
)
))
-
;; return that part of LIST for which PRED is true.
(define (filter-list pred? list)
)
)
-;; return those descriptions from FONT-DESCR-LIST whose FIELD-NAME matches VALUE
-
;;;;;;;;; TODO TODO . (should not use filtering?)
;; this is bad, since we generate garbage every font-lookup.
;; otoh, if the qualifiers is narrow enough , we don't generate much garbage.
-;;o
-
-
-;;; kut kut, het lukt gewoon niet, vandaag:
-
-;;;couldn't find font satisfying ((font-family . roman) (font-shape . upright) (font-relative-size . -3))
+;; return those descriptions from FONT-DESCR-LIST whose FIELD-NAME matches VALUE
(define (filter-field field-name value font-descr-alist)
- (if (string? value)
- (let ((err (current-error-port)))
- (display "\nignoring string qualifier: " err)
- (display value err)
- (display "\n" err)
- font-descr-alist)
(filter-list
(lambda (x) (eq? value (font-field field-name (car x))))
font-descr-alist)
- ))
+ )
(define paper20-style-sheet-alist
'(
q-order))
(qualifiers (filter-list pair? rawqualifiers))
- (fontnm (qualifiers-to-fontname qualifiers fonts))
+ (fontnm (qualifiers-to-fontname qualifiers fonts))
(err (current-error-port))
)
(if (eq? fontnm "")
(begin
(display "\ncouldn't find font satisfying " err)
- (display qualifiers err)
+ (write qualifiers err)
(display "\n" err)
"cmr10"
)
;
; generate HTML, return filename.
;
-(define (document-element description)
+(define (document-element iname description)
+ (display (string-append "Processing " iname " ... ") (current-error-port))
(let* ((metah (assoc 'meta description))
+
(meta (if (pair? metah)
(cdr metah)
'((properties . ()) (name . "huh?"))
)
(define (document-elements elts)
- (let* ((files (map (lambda (x) (document-element (cdr x)))
+ (let* ((files (map (lambda (x) (document-element (car x) (cdr x)))
elts))
(outname (string-append "backend.html"))
(out (open-output-file outname))
))
; (display (document-interface stem-interface '()))
-; (define b (cdr (assoc 'Beam all-element-descriptions)))
+; (define b (cdr (assoc 'Dyna all-element-descriptions)))
;(display b)
;(document-element b)
)
-(define (merge-interfaces ifs)
- (list
- (apply append (map car ifs))
- (apply append (map cadr ifs))
- (apply append (map caddr ifs))
- ))
-
(define (uniqued-alist alist acc)
(if (null? alist) acc
(if (assoc (caar alist) acc)
(define (element-description name . interfaces)
(let* ((ifs (cons general-element-interface interfaces))
(props (map caddr ifs))
+ (prop-typep-pairs (map (lambda (x) (cons (car x) (cadr x)))
+ (apply append props)))
(syms (map car ifs))
)
(list (cons 'separator "\n\n\n") ;easy printing.
(cons 'interface-descriptions ifs)
; (cons 'interface-descriptions (cadr merged))
;; description of the element itself?
- (cons 'properties (apply append props))
+ (cons 'properties prop-typep-pairs)
)))
(property-description 'font-name symbol? "partial font definition: base name of font file FIXME: should override other partials")
(property-description 'font-point-size number? "partial font definition: exact font size in points FIXME: should override font-relative-size")
(property-description 'font-relative-size number? "partial font definition: the relative size, 0 is style-sheet's normal size, -1 is smaller, +1 is bigger")
+
+ ;; Should move this somewhere else?
(property-description 'align number? "the alignment of the text, 0 is horizontal, 1 is vertical")
(property-description 'lookup symbol? "lookup method: 'value for plain text, 'name for character-name")
(property-description 'raise number? "height for text to be raised (a negative value lowers the text")
(property-description 'magnify number? "the magnification factor. FIXME: doesn't work for feta fonts")
)))
-
(define dot-column-interface
(lily-interface
'dot-column-interface
'paper-column-interface
""
(list
+ (property-description 'column-space-strength number? "relative strength of space following breakable columns (eg. prefatory matter)")
+ (property-description 'before-musical-spacing-factor number?
+"space before musical columns (eg. taken by accidentals) get this much
+stretched when they follow a musical column, in absence of grace
+notes. 0.0 means no extra space (accidentals are ignored)")
+ (property-description 'stem-spacing-correction number? "optical correction amount.")
+ (property-description 'before-grace-spacing-factor number? " stretch space this much if there are grace notes before the column")
(property-description 'when moment? "when does this column happen?")
(property-description 'bounded-by-me list? "list of spanners that have this
column as start/begin point. Only columns that have elements or act as bounds are spaced.")
""
(list
(property-description 'maximum-duration-for-spacing moment? "space as if a duration of this type is available in this measure.")
+ (property-description 'arithmetic-basicspace number? "The space taken by a note is determined by the formula
+
+ SPACE = arithmetic_multiplier * ( C + log2 (TIME) ))
+
+where TIME is the amount of time a note occupies. The value of C is
+chosen such that the smallest space within a measure is
+arithmetic_basicspace:
+
+ C = arithmetic_basicspace - log2 (mininum (SHORTEST, 1/8))
+
+The smallest space is the one following the shortest note in the
+measure, or the space following a hypothetical 1/8 note. Typically
+arithmetic_basicspace is set to a value so that the shortest note
+takes about two noteheads of space (ie, is followed by a notehead of
+space):
+
+ 2*quartwidth = arithmetic_multiplier * ( C + log2 (SHORTEST) ))
+
+ { using: C = arithmetic_basicspace - log2 (mininum (SHORTEST, 1/8)) }
+ { assuming: SHORTEST <= 1/8 }
+
+ = arithmetic_multiplier *
+ ( arithmetic_basicspace - log2 (SHORTEST) + log2 (SHORTEST) )
+
+ = arithmetic_multiplier * arithmetic_basicspace
+
+ { choose: arithmetic_multiplier = 1.0*quartwidth (why?)}
+
+ = quartwidth * arithmetic_basicspace
+
+ =>
+
+ arithmetic_basicspace = 2/1 = 2
+
+If you want to space your music wider, use something like:
+
+ arithmetic_basicspace = 4.;
+
+")
+ (property-description 'arithmetic-multiplier number? "see arithmetic-basicspace")
+
)))
(define staff-symbol-interface
(extremity-rules . ,default-slur-extremity-rules)
(extremity-offset-alist . ,default-slur-extremity-offset-alist)
(de-uglify-parameters . ( 1.5 0.8 -2.0))
- (details . ((height-limit . 2.0) (ratio . 0.333) (force-blowfit . 0.5)))
+ (details . ((height-limit . 2.0) (ratio . 0.333) (force-blowfit . 0.5)
+ (bezier-pct-c0 . -0.2) (bezier-pct-c3 . 0.000006)
+ (bezier-pct-out-max . 0.8) (bezier-pct-in-max . 1.2)
+ (bezier-area-steps . 1.0)))
(beautiful . 0.5)
(y-free . 0.75)
(attachment-offset . ((0 . 0) . (0 . 0)))