-10/Oct/97 LilyPond 0.1.22 1
+10/Oct/97 LilyPond 0.1.23 1
to read all bugreports, you should subscribe to this list. To
subscribe: send mail with subject "subscribe" to
bug-gnu-music-request@vuse.vanderbilt.edu
-
+
=item gnu-music-discuss@vuse.vanderbilt.edu,
For discussions concerning the GNU Music project, to subscribe: send
-8/Oct/97 LilyPond 0.1.22 1
+8/Oct/97 LilyPond 0.1.23 1
-8/Oct/97 LilyPond 0.1.22 2
+8/Oct/97 LilyPond 0.1.23 2
-8/Oct/97 LilyPond 0.1.22 3
+8/Oct/97 LilyPond 0.1.23 3
-8/Oct/97 LilyPond 0.1.22 4
+8/Oct/97 LilyPond 0.1.23 4
-8/Oct/97 LilyPond 0.1.22 5
+8/Oct/97 LilyPond 0.1.23 5
-8/Oct/97 LilyPond 0.1.22 6
+8/Oct/97 LilyPond 0.1.23 6
-pl 22.jcn1
- - redo of quarter rest
- - fixes of 8-128 rests
+pl 23
+ - feta changes: 1/4 rest, flat, bf 8-128 rest
+ - bf: cadenza
+ - bf: scripts
+ - bf: rest-collision
+ - bf: meter placement
+ - junked cpgento.sh
+*********
pl 22
- bf: lyric 's- Zondags
- moved staff to centerline == 0;
********
+
pl 21
- shrinking uses more energy than stretching
- check IO error on writing (disk full?)
Most of the items are marked in the code as well, with full explanation.
grep for TODO and ugh/ugr
- * todo key-sig placement.
-
- * put errorlevel in Input
+ * LILYSOURCEDIR
+
+ * spurious "Junk beam" warnings
+
+ * standchen: warning: Excentric column (Meter dims?)
+
+
+ * optimal pagebreaking.
+
+ * put errorlevel in Input class
* AFM for font input?
* Spring_spacer:
- write a faster Spring_spacer ( without matrices if possible )
+ - use straight QP to find minimal "fitting force"
- relate energybound to linelen unitspace fontsize etc.
- used fixed point fp
TOPLEVEL_MAJOR_VERSION = 0
TOPLEVEL_MINOR_VERSION = 1
-TOPLEVEL_PATCH_LEVEL = 22
-TOPLEVEL_MY_PATCH_LEVEL = .jcn1
+TOPLEVEL_PATCH_LEVEL = 23
+TOPLEVEL_MY_PATCH_LEVEL =
# use the above to send patches, always empty for released version:
+++ /dev/null
-#!/bin/sh
-# cpgento
-#
-
-if test $# -ne 1
-then
- echo "Usage: "
- echo " cpgento LOCATION, e.g.:";
- echo
- echo " cpgento /mnt/aix/usr/src/lily"
- echo " CP=rcp cpgento fred@pcnov095.win.tue.nl:music/lily"
- exit 1
-fi
-
-MAKE=${MAKE:-make}
-CP=${CP:-cp}
-
-genlily="out/parser.hh out/parser.cc out/lexer.cc"
-echo generating $genlily ...
-$MAKE -C lily $genlily
-
-genmi2mu="out/midi-parser.hh out/midi-parser.cc out/midi-lexer.cc"
-echo generating $genmi2mu ...
-$MAKE -C mi2mu $genmi2mu
-
-lilydir=`pwd | sed "s/.*\///"`
-todir=$1/$lilydir
-echo "copying $lilydir -> $todir"
-
-cpto() {
- name=$1
- tostuff=$todir/$name/out
- genstuff="$2"
- if [ "$CP" = "cp" -a \! -d $tostuff ]
- then
- echo mkdir -p $tostuff
- mkdir -p $tostuff
- fi
- echo $CP $genstuff $tostuff
- (cd $name; $CP $genstuff $tostuff)
-}
-
-cpto lily "$genlily"
-cpto mi2mu "$genmi2mu"
-
-# if you cannot gen the above, you-ll probably want:
-flexlexerh=/usr/include/FlexLexer.h
-cpto lib $flexlexerh
-
--- /dev/null
+#!@PYTHON@
+
+#
+# lily-python.py -- implement general LilyPond-wide python stuff
+#
+# source file of the GNU LilyPond music typesetter
+#
+# (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+#
+
+import posix
+import pwd
+import regex
+import regsub
+import string
+import sys
+import os
+import getopt
+
+
+
+
+
+make_assign_re = regex.compile('^\([A-Z_]*\) *= *\(.*\)$')
+
+def version_str_tuple(file):
+ lines = file.readlines()
+
+ mi = pa = mp = mj = ''
+
+ for l in lines:
+ if make_assign_re.search(l) <> -1:
+ nm = make_assign_re.group(1)
+ val = make_assign_re.group(2)
+ if nm == 'TOPLEVEL_MAJOR_VERSION':
+ mj = val
+ elif nm == 'TOPLEVEL_MINOR_VERSION':
+ mi = val
+ elif nm == 'TOPLEVEL_PATCH_LEVEL':
+ pa = val
+ elif nm == 'TOPLEVEL_MY_PATCH_LEVEL':
+ mp = val
+ return (mj,mi,pa,mp)
+
+class Lilydirs:
+ def __init__(self):
+ try:
+ self.topdir = os.environ['LILYPOND_SOURCEDIR'] + '/'
+ except IndexError:
+ self.topdir = os.environ['HOME'] + 'musix/current'
+
+ self.release_dir = self.topdir + '../releases/'
+ self.patch_dir = self.topdir + '../patches/'
+
+ def version_str_tuple(self):
+ f = open (self.topdir + 'VERSION')
+ v = version_str_tuple(f)
+ f.close ()
+ return v
+
+lilydirs = Lilydirs()
+
+print lilydirs.version_str_tuple()
#!/bin/sh
-
-p1=`find ./ -name '*.hh' |egrep -v out/`
-p2=`find ./ -name '*.cc' |egrep -v out/`
+if [ x$LILYTOP = x ];
+then
+ LILYTOP = .
+fi
+p1=`find $LILYTOP -name '*.hh' |egrep -v out/`
+p2=`find $LILYTOP -name '*.cc' |egrep -v out/`
doc++ -d out/ -S -k -p $p1 $p2
$ban =~ s!index.html!../index.html!g;
print BANNER $ban;
close BANNER;
- my_system "BANNEROPT=\"-B /tmp/lilybanner.html\" $depth/bin/out/make-docxx";
+ my_system("BANNEROPT=\"-B /tmp/lilybanner.html\" $depth/bin/out/make-docxx");
}
sub do_tar
chdir ("out");
$ENV{"TEXINPUTS"} .= ":$depth/input/:";
$ENV{"LILYINCLUDE"} = "$depth/input/";
-
+ $ENV{"LILYTOP"} = $depth;
gen_html;
copy_files;
% generated automatically by mf-to-table.py version 0.4
-% on Fri Oct 10 21:22:38 1997
+% on Tue Oct 14 23:56:57 1997
% Do not edit
% input from out/font-en-tja16.log
% name=\symboltables {
"1" "\\halfrest" -0.00\pt 6.00\pt -0.00\pt 2.50\pt
"0o" "\\outsidewholerest" -2.50\pt 8.50\pt 1.50\pt 4.00\pt
"1o" "\\outsidehalfrest" -2.50\pt 8.50\pt -0.00\pt 2.50\pt
- "2" "\\quartrest" -0.00\pt 4.00\pt 3.00\pt 14.00\pt
+ "2" "\\quartrest" -0.00\pt 4.32\pt 3.00\pt 14.40\pt
"3" "\\eighthrest" -0.00\pt 5.33\pt 4.00\pt 11.47\pt
- "4" "\\sixteenthrest" -0.00\pt 5.33\pt -0.00\pt 11.47\pt
- "5" "\\thirtysecondrest" -0.00\pt 5.33\pt -0.00\pt 15.47\pt
- "6" "\\sixtyfourthrest" -0.00\pt 5.33\pt -0.00\pt 19.47\pt
- "7" "\\hundredtwentyeighthrest" -0.00\pt 5.33\pt -0.00\pt 23.47\pt
+ "4" "\\sixteenthrest" -0.00\pt 6.23\pt -0.00\pt 11.47\pt
+ "5" "\\thirtysecondrest" -0.00\pt 7.03\pt -0.00\pt 15.47\pt
+ "6" "\\sixtyfourthrest" -0.00\pt 7.53\pt -0.00\pt 19.47\pt
+ "7" "\\hundredtwentyeighthrest" -0.00\pt 8.38\pt -0.00\pt 23.47\pt
}
"accidentals" = \table {
"1" "\\sharp" -0.00\pt 4.40\pt -6.00\pt 6.00\pt
"0" "\\natural" -0.00\pt 2.67\pt -6.00\pt 6.00\pt
- "-1" "\\flat" -0.00\pt 3.00\pt -2.00\pt 8.00\pt
- "-2" "\\flatflat" -0.00\pt 6.00\pt -2.00\pt 8.00\pt
+ "-1" "\\flat" -0.48\pt 3.20\pt -2.00\pt 8.00\pt
+ "-2" "\\flatflat" -0.48\pt 5.80\pt -2.00\pt 8.00\pt
"2" "\\sharpsharp" -0.00\pt 4.00\pt -2.00\pt 2.00\pt
}
"dots" = \table {
}
"scripts" = \table {
"ufermata" "\\ufermata" -5.30\pt 5.30\pt -0.30\pt 5.80\pt
- "dfermata" "\\dfermata" -5.30\pt 5.30\pt -5.80\pt 0.00\pt
+ "dfermata" "\\dfermata" -5.30\pt 5.30\pt -5.80\pt 0.30\pt
"sforzato" "\\sforzatoaccent" -3.60\pt 3.60\pt -2.00\pt 2.00\pt
"staccato" "\\staccato" -0.60\pt 0.60\pt -0.60\pt 0.60\pt
"ustaccatissimo" "\\ustaccatissimo" -0.80\pt 0.80\pt -0.20\pt 4.00\pt
"pedaltoe" "\\pedaltoe" -2.00\pt 2.00\pt -0.00\pt 6.00\pt
}
"floogbars" = \table {
- "3u" "\\eighthflag" -0.20\pt 4.10\pt -12.77\pt 0.20\pt
- "3d" "\\deighthflag" -0.20\pt 4.10\pt -0.20\pt 12.77\pt
+ "3u" "\\eighthflag" -0.20\pt 4.18\pt -12.77\pt 0.20\pt
+ "3d" "\\deighthflag" -0.20\pt 4.18\pt -0.20\pt 12.77\pt
}
% } % $name
% generated automatically by mf-to-table.py version 0.4
-% on Fri Oct 10 21:22:44 1997
+% on Tue Oct 14 23:57:04 1997
% Do not edit
% input from out/font-en-tja20.log
% name=\symboltables {
"1" "\\halfrest" -0.00\pt 7.50\pt -0.00\pt 3.13\pt
"0o" "\\outsidewholerest" -3.13\pt 10.62\pt 1.88\pt 5.00\pt
"1o" "\\outsidehalfrest" -3.13\pt 10.62\pt -0.00\pt 3.13\pt
- "2" "\\quartrest" -0.00\pt 5.00\pt 3.75\pt 17.50\pt
+ "2" "\\quartrest" -0.00\pt 5.40\pt 3.75\pt 18.00\pt
"3" "\\eighthrest" -0.00\pt 6.67\pt 5.00\pt 14.33\pt
- "4" "\\sixteenthrest" -0.00\pt 6.67\pt -0.00\pt 14.33\pt
- "5" "\\thirtysecondrest" -0.00\pt 6.67\pt -0.00\pt 19.33\pt
- "6" "\\sixtyfourthrest" -0.00\pt 6.67\pt -0.00\pt 24.33\pt
- "7" "\\hundredtwentyeighthrest" -0.00\pt 6.67\pt -0.00\pt 29.33\pt
+ "4" "\\sixteenthrest" -0.00\pt 7.79\pt -0.00\pt 14.33\pt
+ "5" "\\thirtysecondrest" -0.00\pt 8.78\pt -0.00\pt 19.33\pt
+ "6" "\\sixtyfourthrest" -0.00\pt 9.41\pt -0.00\pt 24.33\pt
+ "7" "\\hundredtwentyeighthrest" -0.00\pt 10.47\pt -0.00\pt 29.33\pt
}
"accidentals" = \table {
"1" "\\sharp" -0.00\pt 5.50\pt -7.50\pt 7.50\pt
"0" "\\natural" -0.00\pt 3.33\pt -7.50\pt 7.50\pt
- "-1" "\\flat" -0.00\pt 3.75\pt -2.50\pt 10.00\pt
- "-2" "\\flatflat" -0.00\pt 7.50\pt -2.50\pt 10.00\pt
+ "-1" "\\flat" -0.60\pt 4.00\pt -2.50\pt 10.00\pt
+ "-2" "\\flatflat" -0.60\pt 7.25\pt -2.50\pt 10.00\pt
"2" "\\sharpsharp" -0.00\pt 5.00\pt -2.50\pt 2.50\pt
}
"dots" = \table {
}
"scripts" = \table {
"ufermata" "\\ufermata" -6.63\pt 6.63\pt -0.38\pt 7.25\pt
- "dfermata" "\\dfermata" -6.63\pt 6.63\pt -7.25\pt 0.00\pt
+ "dfermata" "\\dfermata" -6.63\pt 6.63\pt -7.25\pt 0.38\pt
"sforzato" "\\sforzatoaccent" -4.50\pt 4.50\pt -2.50\pt 2.50\pt
"staccato" "\\staccato" -0.75\pt 0.75\pt -0.75\pt 0.75\pt
"ustaccatissimo" "\\ustaccatissimo" -1.00\pt 1.00\pt -0.20\pt 5.00\pt
"pedaltoe" "\\pedaltoe" -2.50\pt 2.50\pt -0.00\pt 7.50\pt
}
"floogbars" = \table {
- "3u" "\\eighthflag" -0.25\pt 5.13\pt -15.91\pt 0.25\pt
- "3d" "\\deighthflag" -0.25\pt 5.13\pt -0.25\pt 15.91\pt
+ "3u" "\\eighthflag" -0.25\pt 5.23\pt -15.91\pt 0.25\pt
+ "3d" "\\deighthflag" -0.25\pt 5.23\pt -0.25\pt 15.91\pt
}
% } % $name
\bar "empty";
c [c_"rubato" e g c']
\octave c'';
- e4. e [g ~ f_"rit" e d]
+ e4. e [g () f_"rit" e d]
\duration 16;
- dis4~ e4
+ dis4() e4
\bar "" ;
r8 [c d] [e f g gis]
\duration 4;
- a-> 'f~ 'e g
- f-> 'd~ 'cis e
+ a-> 'f() 'e g
+ f-> 'd() 'cis e
\duration 8;
d4^\fermata
\bar "" ;
r8 'a ['b cis]
\duration 16; [d cis d e]
- f4~ [f e d c]
+ f4() [f e d c]
'b4-\turn
\octave c'; [2/3 d'8 c'8 a8]1/1
g2
\bar "" ;
[g c e g] [c' e g c']\octave c'';
- [e 'g c e] g4^\fermata %~ % BUG!
+ [e 'g c e] g4^\fermata
\bar "" ;
[g8.(_"a tempo" e g8. )e]
a4. g8 [f8 e8 d8 c8]
MAJOR_VERSION = 0
MINOR_VERSION = 1
-PATCH_LEVEL = 22
+PATCH_LEVEL = 23
# use to send patches, always empty for released version:
# include separator: ".postfix", "-pl" makes rpm barf
void
Bar::do_print() const
{
+#ifndef NPRINT
DOUT << type_str_;
+#endif
}
Molecule*
Atom
Lookup::meter (Array<Scalar> a) const
{
- Atom s;
- s.dim_.x() = Interval (0 PT, 10 PT);
- s.dim_.y() = Interval (0, 20 PT); // todo
- String src = (*symtables_)("param")->lookup ("meter").tex_;
- s.tex_ = substitute_args (src,a);
+ Atom s((*symtables_)("param")->lookup ("meter"));
+ s.tex_ = substitute_args (s.tex_,a);
return s;
}
// meisjes met jongetjes
else
{
-#if 0 // breendet: rests go always under
- // geen gemug, trug op je rug
- int dir_i = -1;
- rest_l_arr_[0]->translate_rests (dir_i * 3);
-#else
// int dir_i = - ncol_l_arr_[0]->dir_;
int dir_i = rest_l_arr_[0]->dir_;
// hope it's 4: if it works->doco
- int midpos = 4;
+ int midpos = 0;
// minimum move
int minpos = 4;
(ncol_l_arr_[i]->head_l_arr_[j]->position_i_ -midpos) + sep_i;
}
rest_l_arr_[0]->translate_rests (dir_i * minpos);
-#endif
}
}
Real inter_f = paper()-> internote_f ();
if (!inside_staff_b_)
{
- y = (staff_sym_l_) ? dir_ * (staff_sym_l_->steps_i() + 2) : -2;
+ y = (staff_sym_l_) ? dir_ * (staff_sym_l_->steps_i()/2 + 2) : -2;
y *=inter_f;
Interval v= support_height();
Begin3
Titel: LilyPond
-Versie: 0.1.22.jcn1
-Inschrijf datum: 13OCT97
+Versie: 0.1.23
+Inschrijf datum: 15OCT97
Beschrijving: LilyPond is de muziek typesetter van het GNU Project.
Het programma genereert muziek in zichtbare of
hoorbare vorm uit uit een muzikale definitie file:
jan@digicash.com (Jan Nieuwenhuizen)
Onderhouden door: hanwen@stack.nl (Han-Wen Nienhuys)
Voornaamste plek: sunsite.unc.edu /pub/Linux/apps
- 395k lilypond-0.1.22.jcn1.tar.gz
+ 395k lilypond-0.1.23.tar.gz
Oorspronkelijke plek: pcnov095.win.tue.nl /pub/lilypond/
- 395k lilypond-0.1.22.jcn1.tar.gz
+ 395k lilypond-0.1.23.tar.gz
Copi"eer politie: GPL
End
Begin3
Title: LilyPond
-Version: 0.1.22
-Entered-date: 10OCT97
+Version: 0.1.23
+Entered-date: 15OCT97
Description: LilyPond is the GNU Project music typesetter. The program
generates visual or auditive output from a music
definition file: it can typeset formatted sheet music
jan@digicash.com (Jan Nieuwenhuizen)
Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
Primary-site: sunsite.unc.edu /pub/Linux/apps
- 395k lilypond-0.1.22.tar.gz
+ 395k lilypond-0.1.23.tar.gz
Original-site: pcnov095.win.tue.nl /pub/lilypond/
- 395k lilypond-0.1.22.tar.gz
+ 395k lilypond-0.1.23.tar.gz
Copying-policy: GPL
End
Name: lilypond
-Version: 0.1.22
+Version: 0.1.23
Release: 1
Copyright: GPL
Group: Applications/Publishing
-Source0: pcnov095.win.tue.nl:/pub/lilypond/lilypond-0.1.22.tar.gz
+Source0: pcnov095.win.tue.nl:/pub/lilypond/lilypond-0.1.23.tar.gz
Summary: A preprocessor to make TeX typeset music.
URL: http://www.stack.nl/~hanwen/lilypond
Packager: Han-Wen Nienhuys <hanwen@stack.nl>
Buildroot: /tmp/lilypond-install
%description
-LilyPond is the GNU Project music typesetter. This program converts
-music definition files into visual or auditive output: it can typeset
-formatted sheet music to a TeX file and and (mechanical) performances
-to MIDI files. Features include multiple staffs, meters, clefs, keys,
-lyrics, versatile input-language, cadenzas beams, slurs, triplets.
+LilyPond is the GNU Project music typesetter. The program
+generates visual or auditive output from a music
+definition file: it can typeset formatted sheet music
+to a TeX file and play (mechanical) performances to a
+MIDI file. Features include multiple staffs, meters,
+clefs, keys, lyrics, versatile input-language,
+cadenzas, beams, slurs, triplets.
%prep
%setup
- design macro for penstroke with rounded endings
- y-refpoint for rests should be the 4th staffline (gclef: b')
- more symbols
+ * ledgerlines
+ * stem-notehead attachments.
* flags
* clefs
* some scripts:
- - piano pedals,
+ * piano pedals,
* braces.
* trills
* maxima notehead
- include important spacing dims in fetalog
- lilyrules.mf for different rules (lines) ?
- - check out Adobe Sonata/Petrucci font layout. They are the
-standard for Music fonts
- hack up GS or the mf-gray font to do round pixels
iso. square pixels. (Printers don't do square pixels.)
\font\slurs=xslhd16
\font\specfont=musixspx
\font\egler=opus16
-%\def\thefont{\egler}
+\def\thefont{\egler}
%\def\thefont{\specfont}
-\def\thefont{\fet}
\def\mb#1{{\thefont\char#1}}
hip_width# = 7/8 interline# + hip_thickness# /2 + stemthickness#/2;
foot_depth# = flare# + 15/7 interline#;
-foot_width# = .885 hip_width#;
+foot_width# = .8 hip_width#;
define_pixels(flare,
% most beautiful noteheads are pronounced, not circular,
% and not even symmetric.
-% These examples are inspired by [Wanske] [see literature list]
+% These examples are inspired by [Wanske], see literature list
fet_begingroup("balls");
def draw_brevis =
save beamheight, head_width;
save holeheight, stem_width;
- save serif_size;
+ save serif_size, serif_protrude;
head_width# = 2 interline#;
holeheight = 3 stafflinethickness;
2 beamheight + holeheight = noteheight;
serif_size = (holeheight - stafflinethickness)/2;
-
+ serif_protrude = 1.5 serif_size;
penpos1(stem_width, 0);
penpos2(stem_width, 0);
penpos3(beamheight, 90);
z3r = z2r + serif_size *(1,-1);
y4r = y3r;
x4r = head_width/2;
- z5l = z3l + serif_size * (-1,-1);
+ z5l = z3l + (-serif_size, -serif_protrude);
penlabels(1,2,3,4, 5);
fill z1r -- z1l -- z5r{down} .. z5l{up} .. z3l{right}
% drawing
%
+def simple_serif(expr p,q, a)=
+ p{dir(angle(q-p) -a)} .. q{ - dir(angle(p -q) + a)}
+enddef;
+%
+
% a: x diameter
% b: y diameter
% err_x: drift of y axis at top
stafflinethickness#:=0.1 interline#;
stemthickness# := stafflinethickness#;
-ledgerlinethickness# := 1.5 stafflinethickness#;
+ledgerlinethickness# := 2 stafflinethickness#;
define_pixels(interline, stemthickness);
define_pixels(stafflinethickness,ledgerlinethickness);
%
% this is not a meta variable: it is related to absolute sizes.
%
+% According to [Wanske], only outside corners should be round
+%
numeric blot_diameter;
blot_diameter# = .4pt#;
define_pixels(blot_diameter);
fet_beginchar("fermata down", "dfermata", "dfermata")
draw_fermata;
- currentpicture:=currentpicture yscaled -1 ;
- set_char_box(w#, w#, h#, 0);
-
+ y_mirror_char;
fet_endchar;
save thickness, diminish;
thickness = 2 stafflinethickness;
+ pickup pencircle scaled thickness;
% prevent blobs at crossing lines
diminish = .75;
- y1 + thickness/2 = h;
- x1 = -b;
- x2 = w;
+ top y1 = h;
+ lft x1 = -b;
+ rt x2 = w;
y2 = .25 thickness* diminish;
- z4 = (w,0);
+ rt z4 = (w,0);
x3 =0;
z3 = whatever [z1, z4];
penpos1(thickness, 90);
penpos3(thickness, 90);
- penstroke z1e .. z3e .. z2e;
- penstroke (z1e .. z3e .. z2e) yscaled -1;
+ draw z1 .. z3;
+ draw (z1 .. z3) yscaled -1;
+ draw z4;
+ penstroke z3e .. z2e;
+ penstroke (z3e .. z2e) yscaled -1;
penlabels(1,2,3);
+ labels(4);
fet_endchar;
fet_beginchar("staccato dot", "staccato", "staccato")
radius# = 2 stafflinethickness#;
define_pixels(radius, height);
- draw_brush((0,0), blot_diameter, (0, height),2 radius);
+ draw_brush((0,0), stafflinethickness, (0, height),2 radius);
set_char_box(radius#,radius#, blot_diameter#/2, height# + radius#);
enddef;
def draw_marcato =
- save fatness, thinness;
+ save fat_factor, thinness;
set_char_box(interline#/2, interline#/2, 0, 1.1 interline#);
- fatness = 3 stafflinethickness;
- thinness = .8 stafflinethickness;
- x2 - x1 + blot_diameter = fatness;
- x2 + thinness/2 = w;
-
- y1 = y2;
- y1 = thinness/2;
- z2 - z3 = whatever * (charwd, -charht);
- z1 - z4 = whatever * (charwd, -charht);
- z3 - z4 = whatever * (charwd, charht);
- y3 + thinness/2 = h;
- draw_rounded_path(z1 -- z2 -- z3 -- z4 -- cycle, thinness);
+ fat_factor = .3;
+ thinness = stafflinethickness;
pickup pencircle scaled thinness;
- z3 - z5 = whatever* (z3 - z4);
+ rt x2 = w;
+ lft x5 = -b;
bot y5 = 0;
+ top y3 = h;
+ y1 = y2 = y5;
+
+ x3 =0;
+ z1 - z4 = whatever * (charwd, -charht);
+ z4 = fat_factor [z3, z5];
+
+ filldraw z1 -- z2 -- z3 -- z4 -- cycle;
draw z3 .. z5;
enddef;
%
% The down marcato char (not very much used).
% Contrary to what some MF/TeX `gurus' believe
-% it is *point*-symmetric with the "up" version; (at least [Chlapik]
-% agrees with us)
+% it is *point*-symmetric with the "up" version; (at least [Chlapik] and
+% and [Wanske] agree with us)
%
fet_beginchar("marcato down", "dmarcato", "dmarcato")
draw_marcato;
fet_endchar;
%
-% Inspired by a computer-set version of auf dem Strom by Baerenreiter.
+% Inspired by a computer-set version of Auf dem Strom by Baerenreiter.
%
fet_beginchar("Turn","turn","turn")
save thin, thick, ball_diam, darkness;
kerning# = .75 ex#;
define_pixels(ex, ascender_extra, ascender, kerning);
+
t_overshoot = 0.03 ex;
fatness = 12/40 ex;
t_fatness = 8/10 fatness;
uitschieter = 21/40 ex;
hair_thick = blot_diameter;
bulb_size = 0.47;
- slant = .15;
+ slant = .2;
local_copy(transform)(currenttransform);
currenttransform := currenttransform slanted slant;
%
% Accidentals from various sources, notably
%
-% Baerenreiter edition of Schuberts `Auf dem Strom' (sharp, natural, flat)
-% F Hofmeister edition of Muellers `Etueden fuer Horn' (double sharp)
+% Baerenreiter edition of Schuberts `Auf dem Strom' (sharp, natural)
+% F Hofmeister edition of Muellers `Etueden fuer Horn' (double sharp, flat)
%
save interbeam, interstem, beamheight, beamwidth,
stemwidth;
- interbeam := 1.1 interline;
+ interbeam := 1.05 interline;
interstem := 7/16 ;
beamheight := 4 stafflinethickness;
beamwidth := w;
labels(1,2,3,4);
fet_endchar;
+
%
% Dedicated to my mom. (3/10/97)
%
% -- HW
%
-%
-% FIXME more metaness
-% FIXME distribution of the crooks' thickness
-%
-% FIXME probably doesn't look quite right.
-%
+% TODO: remove crook_fatness
+def draw_meta_flat(expr xcenter, w, crook_fatness) =
+ clearxy;
+ save crook_thinness;
+ save top_stem_thick, bottom_stem_thick, hair;
+ save center;
+ pair center;
+ center = (xcenter, 0);
-def flat_meta_symbol(expr w, d, h,
- stemwidth, crook_fatness, crook_thinness,
- bottom_stem_thick, top_stem_thick)=
+ crook_thinness = 1.25 stafflinethickness;
+ top_stem_thick = 2 stafflinethickness;
+ bottom_stem_thick = 1.2 stafflinethickness;
+
+
+ z1 = (0, 2 interline) + center;
+ z2 = (0, - 1/2 interline)+ center;
+
+ penpos1(top_stem_thick, 0);
+ penpos2(bottom_stem_thick, 0);
+
+ fill simple_serif(z1r, z1l, 30) -- z2l -- z2r -- cycle;
+
+
+ y3l = (interline - stafflinethickness)/2 + ypart center;
+ z3l = whatever [z2r,z1r];
+
+ z3r = .26 [z2r, z1r];
- z1 = (0, h);
- z2 = (0, -d);
- brush(z1, top_stem_thick , z2, bottom_stem_thick);
-
- z3 = (0, 7/16 interline);
- z4 = z3 + whatever * (dir 30);
- y4 = 1/2 interline ;
- y5 = 4/16 interline;
- x5 + crook_fatness/2 = w;
- z6 = z2 + (0,-1) * (bottom_stem_thick - crook_thinness);
-
- penpos3(crook_thinness, 90);
- penpos4(crook_thinness, 90);
- penpos5(crook_fatness, 0);
- penpos6(crook_thinness, -90);
- labels(1,2,3,4,5,6);
- penstroke z3e{dir 32} .. z4e{dir 30} .. z5e{down} .. {dir 220}z6e;
- enddef;
-
-def flat_symbol (expr w, d, h)=
- save stemwidth, bottom_stem_thick, top_stem_thick,
- crook_thinness, crook_fatness;
- stemwidth = stafflinethickness;
- crook_fatness = 1/4 interline;
- crook_thinness = stemwidth;
- bottom_stem_thick = 5/4 stemwidth;
- top_stem_thick = 2 stemwidth;
- flat_meta_symbol(w,d,h, stemwidth, crook_fatness, crook_thinness,
- bottom_stem_thick, top_stem_thick);
- enddef;
+ z4 = (3/8 interline, interline/2) + center;
+ penpos4(whatever, 53);
+ y4l - y4r = 2 crook_thinness ;
+% y4l - y4r = 6/20[crook_thinness, crook_fatness] ;
+
+ y5r = 1/4 interline + ypart center;
+ x5l = w + xpart center;
+ penpos5(crook_fatness, -175);
+
+ z8 = (0, - interline/2 - stafflinethickness/2) + center;
+
+ z9 = (x5,0);
+
+ save ne_angle;
+ ne_angle = angle(z9 - z8);
+
+ z7 = 8/33 [z8,z9];
+ z6l = 18/33 [z8,z9] + .5 crook_thinness *dir(ne_angle -90);
+
+ penpos7(crook_thinness, ne_angle + 90);
+
+ z6r = .3 (z9-z8) + z7r;
+
+% penpos7(crook_thinness, angle(dir(z8-center) -180);
+
+ penpos8(whatever, ne_angle + 90);
+ x8r = xpart center - bottom_stem_thick/2;
+ penlabels(range 0 thru 10);
+
+ z10 = (bottom_stem_thick/2, -1/5 interline) + center;
+
+ unfill z3r{up} .. z4r{right} .. tension .9
+ .. z6r ---
+ z7r{left}
+ .. z10 {up} -- cycle;
+ fill z8r{down}
+ .. tension 0.8 ..z8l{(z9-z8)}
+ .. z7l
+ .. z6l
+ .. z5l{up}
+ .. z4l{left} .. z3l -- cycle;
+
+ labels(10);
+enddef;
+
+
%
% unfortunately, 600dpi is not enough to show the brush of the stem.
%
fet_beginchar("Flat", "-1", "flat")
- set_char_box(0, 9/12 interline#, .5 interline#, 2 interline#);
- flat_symbol (w, d, h);
+ set_char_box(1.2 stafflinethickness#, .8 interline#, .5 interline#, 2 interline#);
+ draw_meta_flat(0, w, 1/3 interline);
fet_endchar;
+
fet_beginchar("Double flat", "-2", "flatflat")
- set_char_box(0, 18/12 interline#, .5 interline#, 2 interline#);
- flat_symbol(w/2, d, h);
- addto currentpicture also currentpicture
- shifted (w/2 - stafflinethickness/2,0);
+ save left_wid, overlap, right_wid;
+ left_wid = .7;
+ right_wid = .8;
+ overlap = .05;
+ set_char_box(1.2 stafflinethickness#, (left_wid + right_wid -overlap) *interline#, .5 interline#, 2 interline#);
+ draw_meta_flat(0, left_wid* interline, 1/3 interline);
+ draw_meta_flat((left_wid - overlap) *interline,
+ right_wid *interline, 1/3 interline);
fet_endchar;
-
fet_beginchar("Double sharp", "2", "sharpsharp")
set_char_box(0, interline#, .5 interline#, .5 interline#);
--- /dev/null
+
+def simple_serif(expr p,q, a)=
+ p{dir(angle(q-p) -a)} .. q{ - dir(angle(p -q) + a)}
+enddef;
+%
+% Accidentals from various sources, notably
+%
+% Baerenreiter edition of Schuberts `Auf dem Strom' (sharp, natural, flat)
+% F Hofmeister edition of Muellers `Etueden fuer Horn' (double sharp)
+%
+
+
+%tracingall;
+%proofing := 2;
+%\tracingequations:= tracingonline := 1;
+
+fet_begingroup("accidentals");
+
+
+
+fet_endgroup("accidentals");
+
% generated automatically by mf-to-table.py version 0.4
-% on Fri Oct 10 21:22:38 1997
+% on Tue Oct 14 23:56:57 1997
% Do not edit
% input from out/font-en-tja16.log
% name
% generated automatically by mf-to-table.py version 0.4
-% on Fri Oct 10 21:22:44 1997
+% on Tue Oct 14 23:57:04 1997
% Do not edit
% input from out/font-en-tja20.log
% name
% We know better
\staffrulethickness=0.1\interlinedist
\stemthickness=\staffrulethickness
- \ledgerlinethickness=1.5\staffrulethickness
+ \ledgerlinethickness=2\staffrulethickness
}
\def\hslurcharu#1{{\hslurufont\char#1}}
\def\hslurchard#1{{\hslurdfont\char#1}}
% stacked numbers
-\def\generalmeter#1#2{\botalign{\vbox to0.5\balkheight{\vss \meterfont#1}%
- \nointerlineskip
- \vbox to 0.5\balkheight{\vss\meterfont #2}}}
+\def\generalmeter#1#2{\vbox to 0pt{\vss\hbox{\meterfont
+ #1}\nointerlineskip
+ \hbox{\meterfont #2}\vss}}
% stacked horizontal lines
\def\lines#1#2#3{%