+2002-02-07 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ * stepmake/aclocal.m4: fixed bison version check to be more
+ robust.
+
+ * lily/stem.cc (position_noteheads): fix for cluster chords.
+
+ * mf/*.mf: many blotting/pixel rounding fixes by Rune Zedeler
+
+ * python 2.2 support.
+
2002-02-04 Han-Wen <hanwen@cs.uu.nl>
* VERSION: 1.5.30 released
You need the following packages to compile Lilypond.
@itemize
-@item A reasonably new C++ compiler: EGCS 1.1, GCC 2.95.2 or
+@item A reasonably new version of the GNU C++ compiler: EGCS 1.1, GCC 2.95.2 or
newer. Check out @uref{ftp://ftp.gnu.org/gnu/gcc/, the gcc site}.
@item Python (version 1.5 or newer; not 2.1.x)
@cindex @code{papersize}
To change the paper size, you must first set the
-@code{papersize} variable at top level. Set it to
+@code{papersize} paper variable variable. Set it to
the strings @code{a4}, @code{letter}, or @code{legal}. After this
specification, you must set the font as described above. If you want
the default font, then use the 20 point font.
@example
- papersize = "a4"
+ \paper{papersize = "a4"}
\include "paper16.ly"
@end example
The file @code{paper16.ly} will now include a file named @file{a4.ly}, which
will set the paper variables @code{hsize} and @code{vsize} (used by
-@code{ly2dvi})
+Lilypond and @code{ly2dvi})
@c . {Line break}
@node Line break
MAJOR_VERSION=1
MINOR_VERSION=5
PATCH_LEVEL=30
-MY_PATCH_LEVEL=
+MY_PATCH_LEVEL=uu1
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
# released version.
AC_CHECK_SEARCH_RESULT($BISON, bison, Please install Bison, 1.25 or newer)
AC_CHECK_SEARCH_RESULT($FLEX, flex, Please install Flex, 2.5 or newer)
+
+## Urg. We should fix this configure test. -- so clumsy
if test $BISON != "error"; then
- bison_version=`$BISON --version | sed 's/^.*version 1.//g'`
- if test `echo $bison_version | sed 's/\..*$//g'` -lt 25; then
- AC_STEPMAKE_WARN(Your bison is a bit old (1.$bison_version). You might have to install 1.25)
+ bison_version=`$BISON --version | head -1 | sed 's/^.* 1\.//g'`
+ if test $bison_version -lt 25; then
+ AC_STEPMAKE_WARN(The bison installed might be too old (1.$bison_version). You might have to install 1.25)
fi
fi
/* define if you have kpse_find_tfm */
#define HAVE_KPSE_FIND_TFM 0
+/* define if you have python2.2/Python.h header */
+#define HAVE_PYTHON2_2_PYTHON_H 0
+
/* define if you have python2.1/Python.h header */
#define HAVE_PYTHON2_1_PYTHON_H 0
AC_PATH_PROG(PERL, perl, error)
-AC_HAVE_HEADERS(python2.1/Python.h python2.0/Python.h python2/Python.h python/Python.h python1.5/Python.h Python.h)
+AC_HAVE_HEADERS(python2.2/Python.h python2.1/Python.h python2.0/Python.h python2/Python.h python/Python.h python1.5/Python.h Python.h)
AC_STEPMAKE_END
< \context Voice = two { \stemDown es4 \breathe bes es }
\context Voice = one { \stemUp g4 as g }
> |
- es8 d es f g4 \breathe |
+% Change to wedge:
+ \property Voice.BreathingSign \override #'text = #"scripts-upbow"
+ es8 d es f g8 \breathe f |
+% Revert to old layout:
+ \property Voice.BreathingSign \override #'molecule-callback = #Breathing_sign::brew_molecule
es8 d \breathe es f g f |
es2 r4 \bar "||"
}
"
}
\score { \notes {
-\property Voice.TextScript \override #'no-spacing-rods = ##f
-c4_"very wide and long text" c4
+c2_"very wide and long text" c | \break
+\fatText % short for \property Voice.textNonEmpty = ##t
+c_"very wide and long text" c
}
\paper {
- linewidth = -1.0
+ linewidth = 3.\cm
}
}
< \context LyricsVoice \lyrics {
\property LyricsVoice . stanza = "first"
-\property LyricsVoice . stz = "2nd"
+\property LyricsVoice . stz = #'("2" (super "nd"))
Foo1 Bar1 }
\notes { c''1 \break c''1 }>}
}
dynamics = \notes {
- \outputproperty #(make-type-checker 'dynamic-interface)
- #'extra-offset = #'(0 . 2.5)
s2\fff\> s4
- \outputproperty #(make-type-checker 'dynamic-interface)
- #'extra-offset = #'(0 . 2.5)
\!s\pp
}
TextScript \override #'font-relative-size = #1
TextScript \override #'font-shape = #'italic
+ DynamicText \override #'extra-offset = #'(0 . 2.5)
+ Hairpin \override #'extra-offset = #'(0 . 2.5)
\consists "Skip_req_swallow_translator"
d-#'(lines "Violoncello" " e" "Contrabasso")
e-#'((lines (baselineskip . 0) (kern . 1.5)) "Violoncello" " e" "Contrabasso")
e-#'(((baselineskip . 0) (kern . 1.5) lines) "Violoncello" " e" "Contrabasso")
+ g-"ÅÖÄÜÇÕ"
}
\paper{
linewidth = -1.\mm
- \translator{
+ fontenc = "T1"
+ \translator{
\ScoreContext
TextScript \override #'font-family = #'roman
TextScript \override #'font-shape = #'upright
TextScript \revert #'no-spacing-rods
TextScript \override #'direction = #1
- }
+ TextScript \override #'font-encoding = #'T1
+ }
}
}
checksum_ = 0;
font_inf_ = fi;
- for (int i= 256; i--;)
+ for (int i= 256 >? fi->numOfChars; i--;)
ascii_to_metric_idx_.push (-1);
for (int i=0; i < fi->numOfChars; i++)
Music * rq = accepted_spanreqs_drul_[START];
if (script_req_l_)
rq = script_req_l_ ;
- announce_grob(line_spanner_, rq->self_scm());
+ announce_grob(line_spanner_, rq ? rq->self_scm(): SCM_EOL);
}
#define popen REALLYUGLYKLUDGE
#define pclose ANOTHERREALLYUGLYKLUDGE
+#define getopt YAKLUDGE
#if HAVE_KPATHSEA_KPATHSEA_H
extern "C" {
{
if (parity)
{
- Real l = heads[i]->extent (heads[i], X_AXIS).length ();
+ Real l = Note_head::head_extent (heads[i], X_AXIS).length ();
+
heads[i]->translate_axis (l * get_direction (me), X_AXIS);
}
parity = !parity;
text->set_grob_property ("text", r->get_mus_property ("text"));
SCM nonempty = get_property ("textNonEmpty");
- if (to_boolean (nonempty))
- /*
- empty text: signal that no rods should be applied.
- */
- text->set_grob_property ("no-spacing-rods" , SCM_BOOL_F);
-
+
+ if (gh_boolean_p (nonempty))
+ if (gh_scm2bool (nonempty))
+ /*
+ empty text: signal that no rods should be applied.
+ Default nowadays.
+ */
+ text->set_grob_property ("no-spacing-rods" , SCM_BOOL_F);
+ else
+ text->set_grob_property ("no-spacing-rods" , SCM_BOOL_T);
+
announce_grob (text, r->self_scm ());
texts_.push (text);
}
;;"LilyPond"
LilyPond-command-default))
(t LilyPond-command-default)))
+
+ (completion-ignore-case t)
(answer (or LilyPond-command-force
(completing-read
\consists "Extender_engraver"
\consists "Hyphen_engraver"
\consists "Stanza_number_engraver"
+ \consists "Skip_req_swallow_translator"
phrasingPunctuation = #".,:!?\""
}
y4 = y2;
y3 = y1;
- draw z1 -- z2;
- draw z3 -- z4;
+ draw_gridline(z1,z2,stemthick);
+ draw_gridline(z3,z4,stemthick);
fet_endchar;
% whole note
fet_beginchar("Ledger ending", "ledgerending", "ledgerending")
set_char_box (5/2 ledgerlinethickness#, 5/2 ledgerlinethickness#,
ledgerlinethickness#/2,ledgerlinethickness#/2);
- pickup pencircle scaled 1.3 blot_diameter;
-
- rt x2 = w;
- lft x1 = -b;
- x3 = x2;
- bot y1 = -d;
- y2 = y1;
-
- top y3 = h;
- y4 = y3;
- x4 = x1;
-
- filldraw z1 --- z2 --- z3 --- z4 --- cycle ;
+ draw_rounded_block((-b,-d),(w,h),1.3 blot_diameter);
fet_endchar;
y5 = y6 = 0;
lft x5 = - b - block_rest_y;
rt x6 = w + block_rest_y;
- draw z5 .. z6;
+ draw_gridline(z5,z6,ledgerlinethickness);
fet_endchar;
fet_beginchar("half rest (outside staff)", "1o", "outsidehalfrest");
y5 = y6 = 0;
lft x5 = - b - block_rest_y ;
rt x6 = w + block_rest_y;
- draw z5 .. z6;
+ draw_gridline (z5,z6,ledgerlinethickness);
fet_endchar;
penlabels(1,2,3,4);
save dot_diam;
- 2 dot_diam = reduction* (staff_space - stafflinethickness);
+ 2 dot_diam = round reduction* (staff_space - stafflinethickness);
pickup pencircle scaled dot_diam;
- draw z5;
- draw z5 yscaled -1;
+ drawdot z5;
+ drawdot z5 yscaled -1;
enddef;
superellipse((a,err_x),(-err_y,b),(-a,-err_x),(err_y,-b),super);
enddef;
-% stolen from feta-eindelijk, but still
-% FIXME: too high
-def draw_block (expr bottom_left, top_right) =
- pickup pencircle scaled blot_diameter;
- begingroup;
- save x,y;
- bot y1 = ypart bottom_left;
- top y2 = ypart top_right;
- y3 = y2;
- y4 = y1;
- rt x1 = xpart top_right;
- x2 = x1;
- lft x3 = xpart bottom_left;
- x4 = x3;
-
- filldraw z1--z2--z3--z4--cycle;
- endgroup;
- enddef;
+def draw_rounded_block (expr bottom_left, top_right, roundness) =
+ save round;
+ round = floor min(roundness,xpart (top_right-bottom_left),
+ ypart (top_right-bottom_left));
+
+
+ pickup pencircle scaled round;
+
+ begingroup;
+ save x,y;
+ z2+(round/2,round/2) = top_right;
+ z4-(round/2,round/2) = bottom_left;
+ y3 = y2;
+ y4 = y1;
+ x2 = x1;
+ x4 = x3;
+ fill bot z1 .. rt z1 --- rt z2 .. top z2 ---
+ top z3 .. lft z3 --- lft z4 .. bot z4 --- cycle;
+ endgroup;
+ enddef;
+
+
+
+ def draw_block (expr bottom_left, top_right) =
+ draw_rounded_block (bottom_left, top_right, blot_diameter);
+ enddef;
+
+ def draw_gridline (expr bottom_left,top_right,thickness) =
+ draw_rounded_block (bottom_left-(thickness/2,thickness/2),
+ top_right+(thickness/2,thickness/2),
+ thickness);
+ enddef;
+
def draw_brush(expr a,w,b,v) =
save x,y;
% FIXME: According to [Wanske], only outside corners should be round
% I don't think we do this anywhere -- jcn
numeric blot_diameter;
-blot_diameter# = .4pt#;
+blot_diameter# = .45pt#;
if (blot_diameter# * hppp) < 1:
blot_diameter# := 1/hppp;
fi
fet_begingroup("dots");
-save dot_diam;
-2 dot_diam# = staff_space# - stafflinethickness#;
-define_pixels(dot_diam);
+save dot_radius;
+4 dot_radius# = staff_space# - stafflinethickness#;
+define_whole_blacker_pixels(dot_radius);
fet_beginchar("duration dot","dot", "dot")
- pickup pencircle scaled dot_diam;
- drawdot (dot_diam/2,0);
- set_char_box(0, dot_diam#, dot_diam#/2, dot_diam#/2);
+ pickup pencircle scaled dot_radius;
+ drawdot (dot_radius,0);
+ set_char_box(0, 2*dot_radius#, dot_radius#, dot_radius#);
fet_endchar;
fet_endgroup("dots");
fet_begingroup("scripts")
def draw_fermata =
- save alpha, radius, crook_thinness, crook_fatness, dot_diam;
+ save alpha, radius, crook_thinness, crook_fatness, dot_radius;
% [Wanske] and some Baerenreiter editions
% suggest ca 80 degrees iso half-circle
set_char_box(w#, w#, crook_thinness#/2, h#);
define_pixels(radius, crook_thinness, crook_fatness);
- dot_diam = 4/3 crook_fatness;
+ dot_radius = round (4/6 crook_fatness);
penpos1(crook_thinness, 0);
addto currentpicture also
currentpicture xscaled -1;
- pickup pencircle scaled dot_diam;
+ pickup pencircle scaled 2dot_radius;
x4 =0;
bot y4 = - crook_thinness/2;
- draw z4;
+ drawdot z4;
enddef;
fet_beginchar("fermata up", "ufermata", "ufermata")
fet_beginchar("staccato dot", "staccato", "staccato")
save radius;
radius# = 1.4 stafflinethickness#;
- define_pixels(radius);
+ define_whole_pixels(radius);
pickup pencircle scaled 2 radius;
- draw (0,0);
+ drawdot (0,0);
set_char_box(radius#, radius#, radius#, radius#);
fet_endchar;
save radius, height;
height# = .8 staff_space#;
radius# = 2 stafflinethickness#;
- define_pixels(radius, height);
+ define_whole_pixels(radius);
+ define_pixels(height);
draw_brush((0,0), stafflinethickness, (0, height),2 radius);
set_char_box(radius#,radius#, blot_diameter#/2, height# + radius#);
fet_beginchar("portato/single tenuto", "tenuto", "tenuto")
save thick;
thick# = 1.4 stafflinethickness#;
- define_pixels(thick);
+ define_whole_pixels(thick);
set_char_box(.6 staff_space#, .6 staff_space#, thick#/2,thick#/2);
pickup pencircle scaled thick;
- lft x1 = -b;
- rt x2 = w;
- y1 = y2 = 0;
- draw z1 .. z2;
+ draw_rounded_block((-b,-thick/2),(w,thick/2),thick);
fet_endchar;
def draw_portato =
save thick, radius;
thick# = 1.4 stafflinethickness#;
- define_pixels(thick);
radius# = 1.4 stafflinethickness#;
- define_pixels(radius);
+ define_whole_pixels(thick,radius);
set_char_box(.6 staff_space#, .6 staff_space#, thick#/2,.5 staff_space#+ radius#);
- pickup pencircle scaled thick;
- lft x1 = -b;
- rt x2 = w;
- y1 = y2 = 0;
- draw z1 .. z2;
+ draw_rounded_block((-b,-thick/2),(w,thick/2),thick);
pickup pencircle scaled 2 radius;
- draw (0,h);
+ drawdot (0,h);
enddef;
size# = 1.1 staff_space#;
set_char_box(size#/2, size#/2, size#/2, size#/2);
- pickup pencircle scaled thick;
-
- rt x1 = w;
- y1 = 0;
- z2 = -z1;
-
- draw z1 .. z2;
- draw (z1 .. z2) rotated 90;
+ draw_rounded_block((-b,-thick/2),(w,thick/2),thick);
+ addto currentpicture also currentpicture rotated 90;
fet_endchar;
%
fet_beginchar("Downbow", "downbow", "downbow")
save stemthick, beamheight;
- save wd;
+ save wd,round;
define_pixels(wd)
wd# = 1.5 staff_space#;
stemthick = 1.2 stafflinethickness;
-
set_char_box(wd#/2, wd#/2, 0, 4/3 staff_space#);
beamheight = 4/10 h;
-
- pickup pencircle scaled blot_diameter;
- top y2 - bot y1 = beamheight;
- top y2 = h;
- rt x1 = w;
- x1 = x2;
- y2 = y3;
- y1 = y4;
- x3 = 0;
- x4 = x3;
- save p;
- path p;
- filldraw z1 -- z2 -- z3 -- z4 --cycle;
-
- pickup pencircle scaled stemthick;
-
- bot y5 =0;
- rt x5 = rt x6 = w;
- y6 = h - beamheight;
- draw z6 -- z5;
- labels(1, 2,3,4,5,6);
+ draw_rounded_block((-b,h-beamheight),(w,h),blot_diameter);
+ draw_rounded_block((-b,-d),(-b+stemthick,h-stemthick),stemthick);
addto currentpicture also currentpicture xscaled -1;
fet_endchar;
fill halfcoda;
fill (halfcoda scaled -1);
- pickup pencircle scaled thin;
- draw (0,-h) -- (0,h);
- draw (-w,0) -- (w,0);
+ draw_gridline((0,-h),(0,h),thin);
+ draw_gridline((-w,0),(w,0),thin);
fet_endchar;
pickup pencircle scaled roundness;
filldraw (beam shifted (0,-interbeam/2));
- filldraw (beam shifted (0,interbeam/2));
pickup pencircle scaled stemwidth;
x3 = x4 = xpart center;
bot y3 = -1.5 staff_space + ypart center;
top y4 = 1.5 staff_space + ypart center;
- path stem;
- stem := z3 .. z4;
numeric xs;
xs := interstem* beamwidth / 2;
- draw stem shifted (- xs, - xs* beamslope);
- draw stem shifted (xs , xs *beamslope);
+ draw_gridline (z3-(xs,xs* beamslope),z4-(xs,xs*beamslope),stemwidth);
+ addto currentpicture also currentpicture rotated 180 shifted (w,0);
labels(1,2,3,4);
fet_endchar;
top y3 = 1.5 staff_space;
top y4 = beamtop;
- draw (xpart z1, -y4) .. z3;
- draw (xpart z2, -y3) .. z4;
+ draw_gridline((xpart z1, -y4),z3,stemwidth);
+ draw_gridline((xpart z2, -y3),z4,stemwidth);
labels(1,2,3,4);
fet_endchar;
/* urg */
#if HAVE_PYTHON2_PYTHON_H
#include <python2/Python.h>
+#elif HAVE_PYTHON2_2_PYTHON_H
+#include <python2.2/Python.h>
#elif HAVE_PYTHON2_1_PYTHON_H
#include <python2.1/Python.h>
#elif HAVE_PYTHON2_0_PYTHON_H
(BreathingSign . (
(break-align-symbol . Breathing_sign)
(breakable . #t )
- (molecule-callback . ,Breathing_sign::brew_molecule)
+ (molecule-callback . ,Text_item::brew_molecule)
+ (lookup . name)
+ (font-family . music)
+ (text . "scripts-rcomma")
(Y-offset-callbacks . (,Breathing_sign::offset_callback))
(visibility-lambda . ,begin-of-line-invisible)
- (meta . ,(grob-description break-aligned-interface))
+ (meta . ,(grob-description break-aligned-interface text-interface font-interface))
))
(Clef . (
'lilypond-file': '(?m)^(?!@c)(?P<match>@lilypondfile(\[(?P<options>.*?)\])?{(?P<filename>[^}]+)})',
'lilypond' : '(?m)^(?!@c)(?P<match>@lilypond(\[(?P<options>.*?)\])?{(?P<code>.*?)})',
# pyton2.2b2 barfs on this
- 'lilypond-block': r"""(?m)^(?!@c)(?P<match>(?s)(?P<match>@lilypond(\[(?P<options>.*?)\])?\s(?P<code>.*?)@end lilypond\s))""",
+ 'lilypond-block': r"""(?m)^(?!@c)(?P<match1>(?s)(?P<match>@lilypond(\[(?P<options>.*?)\])?\s(?P<code>.*?)@end lilypond\s))""",
# 1.5.2 barfs on this.
# 'lilypond-block': r"""(?m)^(?!@c)(?P<match>@lilypond(\[(?P<options>.*?)\])?\s(?P<code>.*?)@end lilypond\s)""",
AC_CHECK_SEARCH_RESULT($BISON, bison, Please install Bison, 1.25 or newer)
AC_CHECK_SEARCH_RESULT($FLEX, flex, Please install Flex, 2.5 or newer)
+
+## Urg. We should fix this configure test. -- so clumsy
if test $BISON != "error"; then
- bison_version=`$BISON --version | sed 's/^.*version 1.//g'`
- if test `echo $bison_version | sed 's/\..*$//g'` -lt 25; then
- AC_STEPMAKE_WARN(Your bison is a bit old (1.$bison_version). You might have to install 1.25)
+ bison_version=`$BISON --version | head -1 | sed 's/^.* 1\.//g'`
+ if test $bison_version -lt 25; then
+ AC_STEPMAKE_WARN(The bison installed might be too old (1.$bison_version). You might have to install 1.25)
fi
fi