+2002-03-14 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ * mf/feta-eindelijk.mf: new 8th rest.
+
+ * mf/feta-toevallig.mf: small fixes for the sharp symbol. Don't
+ stick out of staffline
+
+ * scripts/lilypond-book.py: fixes for texi regular expressions.
+
2002-03-14 Jan Nieuwenhuizen <janneke@gnu.org>
* lily/include/new-beam.hh:
Note that this is fixed in Debian/unstable for flex >= 2.5.4a-13.
-@unnumberedsubsec Python-2.1[.1]
-
-Regular expressions are broken in Python 2.1.[.1], either upgrade or
-downgrade python.
-
@unnumberedsubsec Linux-2.4.0, Guile-1.4 --with-threads
There's a bug in certain kernels around version 2.4.0, that is
+
@c Note:
@c
@c A menu is needed before every deeper *section nesting of @node's; run
\context Voice { \repeat "percent" 4 { c'4 }
\repeat "percent" 2 { c'2 es'2 f'4 fis'4 g'4 c''4 }
}
-@end lilypond
+@end lilypond
The signs are represented by these grobs: @internalsref{RepeatSlash} and
@internalsref{PercentRepeat} and @internalsref{DoublePercentRepeat}.
MacOS X
Problems
FLex-2.5.4a and gcc-3.0
- Python-2.1[.1]
Linux-2.4.0, Guile-1.4 -with-threads
NetBSD
Solaris:
fink install tetex
+ For more information about `apt-get' and `fink', see
+fink.sourceforge.net (http://fink.sf.net).
+
Then, configure, patch, make and install LilyPond using these
commands:
CC="cc -I/sw/include" CXX="c++ -I/sw/include" LDFLAGS="-L/sw/lib" \
./configure --prefix=/sw
- make -C lily out/parser.hh out/parser.cc
+ make -C lily out/parser.hh out/parser.cc out/config.h
patch -p0 < darwin.patch
make -C lily out/parser.o
- make all
+ make DEPENDENCIES_OUTPUT=/dev/null all
make install
For installing, you must be root, of course.
Note that this is fixed in Debian/unstable for flex >= 2.5.4a-13.
-Python-2.1[.1]
---------------
-
- Regular expressions are broken in Python 2.1.[.1], either upgrade or
-downgrade python.
-
Linux-2.4.0, Guile-1.4 -with-threads
------------------------------------
PACKAGE_NAME=LilyPond
MAJOR_VERSION=1
MINOR_VERSION=5
-PATCH_LEVEL=39
-MY_PATCH_LEVEL=jcn4
+PATCH_LEVEL=40
+MY_PATCH_LEVEL=
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
# released version.
#
# Red Hat-like systems should install this in /etc/profile.d/
+# If run by hand or from you .login, run as follows
+# source lilypond-profile
+
+
+
# strange shell, this C
set datadir="@datadir@"
# Red Hat-like systems should install this in /etc/profile.d/
+# If run by hand or from you .profile, run as follows
+# . lilypond-profile
+
# This is a bit of a kludge. Ideally, lilypond's tex, afm, pfa, ps
# directories should be installed into their location in the texmf/gs
# trees, rather than messing around with environment variables (eg,
\time 6/8
[c8. c16 c16 c16]
}
+\paper { linewidth = -1. }
}
r4 fis }
>
c4
-}}}
+}}
+\paper { linewidth = -1. }
+}
// needed for bison.simple's malloc () and free ()
+
#include <malloc.h>
+#include <stdlib.h>
+
#ifndef NDEBUG
#define YYDEBUG 1
%}
+/* We use SCMs to do strings, because it saves us the trouble of
+deleting them. Let's hope that a stack overflow doesnt trigger a move
+of the parse stack onto the heap. */
+
%union {
Request * request;
- /* We use SCMs to do strings, because it saves us the trouble of
-deleting them. Let's hope that a stack overflow doesnt trigger a move
-of the parse stack onto the heap. */
-
SCM scm;
Tempo_req *tempo;
Begin3
Title: LilyPond
-Version: 1.5.39
-Entered-date: 13MRT02
+Version: 1.5.40
+Entered-date: 15MRT02
Description: @BLURB@
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.5.39.tar.gz
+ 1000k lilypond-1.5.40.tar.gz
Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
- 1000k lilypond-1.5.39.tar.gz
+ 1000k lilypond-1.5.40.tar.gz
Copying-policy: GPL
End
%define name lilypond
-%define version 1.5.39
+%define version 1.5.40
%define release 1mdk
Name: %{name}
%define info yes
Name: lilypond
-Version: 1.5.39
+Version: 1.5.40
Release: 1
License: GPL
Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.39.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.40.tar.gz
Summary: Create and print music notation
URL: http://www.lilypond.org/
BuildRoot: /tmp/lilypond-install
Distribution: SuSE Linux 7.0 (i386)
Name: lilypond
-Version: 1.5.39
+Version: 1.5.40
Release: 2
Copyright: GPL
Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.39.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.40.tar.gz
# music notation software for.. ?
Summary: A program for printing sheet music.
URL: http://www.lilypond.org/
enddef;
%
-% TODO: calc intersectpoint
+% TODO: calc intersectpoint (see TeX book, p. 137)
% TODO: calc incision_depth
%
+
def add_flag(expr yoff, flare, hip_wid_multiplier,
hip_dep_multiplier,
intersectpoint, hip_thickness, foot_thickness) =
hip_depth_ratio, foot_width_ratio, hip_thickness, foot_thickness);
pickup pencircle scaled stemthickness;
- draw (0, 0) .. (0,-2 staff_space);
+ draw (0, 0) .. (0,-1 staff_space);
fet_endchar;
fet_beginchar("16th Flag (up)", "u4", "sixteenthflag")
endgroup;
%%% Editable values:
-slope := 1.7; % slope of slash. From scm/grob-description.scm. How to auto-copy?
+
+slash_slope := 1.7; % slope of slash. From scm/grob-description.scm. How to auto-copy?
slt# := 2/3*0.48staff_space#; % thickness of lines. quarter notes get 1.5slt width.
slh# := 2staff_space#; % height of char.
%%% Calculated values:
sxa# := 0; % how much the char exceeds the boundingbox horizontally:
-slxt# := sqrt(slt#*slt#+(slt#/slope)*(slt#/slope)); % Width of hor. pen - with thanks to Pythagoras
-slw# := slh#/slope; % width of sloping part of slash:
+
+ % Width of hor. pen - with thanks to Pythagoras
+slxt# := sqrt(slt#*slt#+(slt#/slash_slope)*(slt#/slash_slope));
+slw# := slh#/slash_slope; % width of sloping part of slash:
define_pixels(slt,slh,sxa,slxt,slw);
+
+%
+%
+% UUGGGH! FIXME -- get rid of those sharp corners.
+%
+%
+%
+
+
def draw_slash(expr hwid_hash) =
wid# := slw#+2slxt#+hwid_hash;
set_char_box(0,wid#-2sxa#,slh#/2,slh#/2);
balled_crook(a, w, ball_crook_balldiam, ball_crook_stem)
enddef;
+%
+%
+% todo: document rest.
+%
+
+
def draw_eighth_rest =
-% draw_staff (-2, 2, 0.0);
- save yshift, ballcorrection;
- ballcorrection = 0.005 staff_space;
+ save width, bulb_diam, thin, thick;
+ save ycenter, crook_thick;
+ save crook_dir;
+ pair crook_dir;
- yshift# := -1.0 staff_space#;
- define_pixels(yshift);
+ width# := 1.0 staff_space#;
+ bulb_diam# := 0.6 staff_space#;
+ thin# := 1.0 stafflinethickness#;
+ thick# := 2.0 stafflinethickness#;
+ crook_thick# := 1.6 stafflinethickness#;
- set_char_box(0, 4/3staff_space#, -yshift#, yshift# +
- 5/3staff_space#+7/4stafflinethickness#);
+ ycenter := 0.5 staff_space;
- %
- % The curve is like a valley causing less space between
- % the curve and the lower staff line. Correct for this.
- %
- save x,y;
+ define_pixels (width, bulb_diam, thin, thick, crook_thick);
+ set_char_box (0, width#,
+ 1.0 staff_space# + 0.5 stafflinethickness#, 0.5 staff_space# + bulb_diam#/2);
- x1=w-stem/6;
+ penpos1 (thick, 0);
+ penpos2 (thin, 0);
- y1 = yshift + 1.5 staff_space + flare/4 + ballcorrection;
- rest_crook (z1,w-stem/6);
- z2-z1=whatever*dir70;
- y2= yshift + stem/2;
- brush(z1,2/3stem,z2,stem);
-enddef;
+ y1 = ycenter + - 1.5 staff_space ;
+ y2 = y5 - 2.0 stafflinethickness;
+ x2r = width;
+
+ y3 - y2l = 0.25 staff_space;
+ x2r - x1 = 0.5 staff_space;
+
+ x3 = x1l ;
+ y3 := ycenter +floor (- bulb_diam/2);
+
+ x4 = 1.02 bulb_diam ;
+ y4 = ycenter - stafflinethickness;
+
+ x5 = 0.5 bulb_diam;
+ y5 = ycenter +bulb_diam/2;
+
+ crook_dir = (z2l - z4) / length(z2l - z4);
+
+ z6 = whatever [z1l, z2l];
+ z6 = whatever [z2l, z4] + crook_thick * (crook_dir rotated -90);
+
+ z7 = (bulb_diam/2,ycenter) + 0.26 staff_space * dir ( 35);
+ z8 = (0, ycenter);
+
+ z9 = z2 + 0.46 stafflinethickness * dir (angle(z2 - z1)- 10);
+
+ penlabels (1, 2);
+ labels(3, 4, 5, 6, 7, 8, 9);
+
+ fill z2r -- z2l -- simple_serif (z1l, z1r, 40) -- cycle;
+ fill z2r{z2r-z1r} .. z9 .. z2l{dir(232)} .. tension 2
+ .. z4{left} .. z7{dir(90 + 25)}
+ .. z5{left} .. z8 .. z3{right}
+ .. {curl 0.2}z6 -- cycle;
+
+
+ enddef;
fet_beginchar("8th rest","3","eighthrest");
draw_eighth_rest;
+ fet_endchar;
+fet_beginchar("Classical quarter rest","2classical","clasquartrest");
+ draw_eighth_rest;
+ currentpicture := currentpicture xscaled -1 shifted (w,0);
fet_endchar;
+
fet_beginchar("16th rest","4","sixteenthrest");
% draw_staff (-2, 2, 0.0);
save yshift, ballcorrection;
fet_endchar;
-fet_beginchar("Classical quarter rest","2classical","clasquartrest");
- draw_eighth_rest;
- currentpicture := currentpicture xscaled -1 shifted (w,0);
- fet_endchar;
endgroup;
input feta-solfa;
else:
-% input feta-bolletjes;
-% input feta-banier;
-% input feta-eindelijk;
- input feta-klef;
+ input feta-bolletjes;
+ input feta-banier;
+ input feta-eindelijk;
+% input feta-klef;
input feta-toevallig;
% input feta-schrift;
% input feta-haak;
% input feta-timesig;
% input feta-pendaal;
% input feta-accordion;
- input feta-solfa;
+% input feta-solfa;
fi
+%
+% draw an axis aligned block making sure that edges are on pixels.
+%
+
def draw_rounded_block (expr bottom_left, top_right, roundness) =
save round;
round = floor min(roundness,xpart (top_right-bottom_left),
1.5 staff_space#);
save interbeam, interstem, beamheight, beamwidth,
- stemwidth;
+ stemwidth, beamslope;
interbeam := 1.05 staff_space;
interstem := 7/16 ;
beamheight := 4 stafflinethickness;
beamwidth := w;
- stemwidth := 1.3 stafflinethickness;
- roundness := 2blot_diameter;
+ stemwidth := 1.5 stafflinethickness;
+ roundness := 2 blot_diameter;
+
pair center;
center := (.5 w, 0);
pickup pencircle scaled stemwidth;
x3 = x4 = xpart center;
- bot y3 = -1.5 staff_space + ypart center;
- top y4 = 1.5 staff_space + ypart center;
numeric xs;
xs := interstem* beamwidth / 2;
+
+ (bot y3) + -xs * beamslope = -1.5 staff_space + ypart center;
+ top y4 + xs * beamslope = 1.5 staff_space + ypart center;
+
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);
+
+
+% to check that it doesn't overshoot staffline.
+%
+% pickup pencircle scaled stafflinethickness;
+% draw (0, 1.5 staff_space ) .. (1 staff_space, 1.5 staff_space);
+
fet_endchar;
pickup penrazor scaled beamheight rotated 90;
top y2 = staff_space - 3/2 stafflinethickness ;
- slope = stafflinethickness / interstem;
+ slope = stafflinethickness / interstem;
draw z1 .. z2;
draw (xpart z1, -y2) .. (xpart z2, -y1);
},
- # why do we have distinction between @mbinclude and @include?
+ # why do we have distinction between @mbinclude and @include?
+
+
'texi': {
'include': '(?m)^[^%\n]*?(?P<match>@mbinclude[ \n\t]+(?P<filename>[^\t \n]*))',
'input': no_match,
'landscape': no_match,
'verbatim': r"""(?s)(?P<code>@example\s.*?@end example\s)""",
'verb': r"""(?P<code>@code{.*?})""",
- '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))""",
-
-# 1.5.2 barfs on this.
-# 'lilypond-block': r"""(?m)^(?!@c)(?P<match>@lilypond(\[(?P<options>.*?)\])?\s(?P<code>.*?)@end lilypond\s)""",
+ 'lilypond-file': '(?m)^(?P<match>@lilypondfile(\[(?P<options>[^]]*)\])?{(?P<filename>[^}]+)})',
+ 'lilypond' : '(?m)^(?P<match>@lilypond(\[(?P<options>[^]]*)\])?{(?P<code>.*?)})',
+ 'lilypond-block': r"""(?ms)^(?P<match>@lilypond(\[(?P<options>[^]]*)\])?\s(?P<code>.*?)@end lilypond)\s""",
'option-sep' : ',\s*',
'intertext': r',?\s*intertext=\".*?\"',
'multiline-comment': r"(?sm)^\s*(?!@c\s+)(?P<code>@ignore\s.*?@end ignore)\s",
olddict = re_dict[r]
newdict = {}
for k in olddict.keys ():
- newdict[k] = re.compile (olddict[k])
+ try:
+ newdict[k] = re.compile (olddict[k])
+ except:
+ print 'invalid regexp: %s' % olddict[k]
+
+ # we'd like to catch and reraise a more detailed error, but
+ # alas, the exceptions changed across the 1.5/2.1 boundary.
+ raise "Invalid re"
re_dict[r] = newdict
ALL_C_SOURCES += $(H_FILES) $(C_FILES) $(Y_FILES) $(L_FILES)
-CFLAGS = $(ICFLAGS) $(CPPFLAGS) $(DEFINES) $(addprefix -I,$(INCLUDES)) $(USER_CFLAGS) $(EXTRA_CFLAGS) $(MODULE_CFLAGS)
+CFLAGS = $(ICFLAGS) $(DEFINES) $(addprefix -I,$(INCLUDES)) $(USER_CFLAGS) $(EXTRA_CFLAGS) $(MODULE_CFLAGS)
LDFLAGS = $(ILDFLAGS) $(EXTRA_LDFLAGS) $($(PACKAGE)_LDFLAGS) $(MODULE_LDFLAGS) $(USER_LDFLAGS)
PIC_FLAGS = -fpic -fPIC
-SHARED_FLAGS = -shared -flat_namespace -undefined suppress
+SHARED_FLAGS = -shared
o-dep-out = $(outdir)/$(subst .o,.dep,$(notdir $@))#
DO_O_DEP = rm -f $(o-dep-out); DEPENDENCIES_OUTPUT="$(o-dep-out) $(outdir)/$(notdir $@)"