-27/Oct/97 LilyPond 0.1.29 1
+27/Oct/97 LilyPond 0.1.30 1
This history note is probably biased in some way, because I wrote it.
The rest of this document is also entirely mine, and is not meant to
reflect anyone else's opinion.
-
-
-For metacomposing, see New Scientist, aug 9 1997, or
-http://art.ucsc.edu/faculty/cope/home
An enormous collection of music related URLs
+=item http://art.ucsc.edu/faculty/cope/home
+
+See New Scientist, aug 9 1997.
+
=back
=head2 Ftp
=head1 SYNOPSIS
- convert-mudela [options] [file]
+ mudela-book [options] [file]
=head1 DESCRIPTION
-20/Oct/97 LilyPond 0.1.29 1
+20/Oct/97 LilyPond 0.1.30 1
-20/Oct/97 LilyPond 0.1.29 2
+20/Oct/97 LilyPond 0.1.30 2
-20/Oct/97 LilyPond 0.1.29 3
+20/Oct/97 LilyPond 0.1.30 3
-20/Oct/97 LilyPond 0.1.29 4
+20/Oct/97 LilyPond 0.1.30 4
-20/Oct/97 LilyPond 0.1.29 5
+20/Oct/97 LilyPond 0.1.30 5
-20/Oct/97 LilyPond 0.1.29 6
+20/Oct/97 LilyPond 0.1.30 6
+pl 30
+ - feta: G clef.
+ - scripts now do relative coords (fixes lyrics + barnumber bug)
+ - bf: Lyrics lexer mode
+ - bf: bass clef
+********
pl 29
- feta: bass clef, bf: dynamics, bf: 64th flag
This is the toplevel README to LilyPond -*-Text-*-
-GNU LilyPond which converts music definition files into visual or
-audio output: it can typeset formatted sheet music in TeX and
-and (mechanical) perfomances to MIDI files.
+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.
1. VERSIONING
Most of the items are marked in the code as well, with full explanation.
grep for TODO and ugh/ugr
+0.2:
+
* LILYSOURCEDIR
* documentation
* standchen: warning: Excentric column (Meter dims?)
- * optimal pagebreaking.
+ * naming Mozarella, Madeira, Muella?
- * put errorlevel in Input class
+ * versioning for Feta
- * AFM for font input?
+ * bf: abbrevs over whole note
- * naming Mozarella, Madeira, Muella?
+ * Score_bar/Piano_braces, are *not* ordinary bars
- * bf: abbrevs over whole note
+STUFF
+
+ * give Items/Spanners access to unbroken originals
* scoping for properties
- MIDI instrument
- staff title
- * give Items/Spanners access to unbroken originals
+ * optimal pagebreaking.
+
+ * put errorlevel in Input class
+
+ * AFM for font input?
+
- * Score_bar/Piano_braces, are *not* ordinary bars
3RD PARTY BUGS:
* Rational infty(HUGE_VAL) on glibc / w32
- ABC?
- SMDL?
- * placement of bar-numbers
-
-******************
-
- \score { <
- \melodic \type Staff { c'4 g'4 }
- \lyric { \id "Lyric" ""; hello4 bye4 < a chord > }
- \lyric { \id "Lyric" ""; bye4 hello4 }
- \melodic { \id "Staff" ""; c'4 g'4 }
- > }
-
-******************
-
* add to MIDI output:
- tempo change
- repeat
* write Dynamic_line (to group dynamics horizontally)
* use Real for all y positions.
+ - use translate_axis( .. ,Y_AXIS)
* half-sharps, half-flats
* move MIDI stuff (including Quantization) to a ANSI C libmidi library.
- * use an embedded language: Python
+ * use an embedded language: Python, Scheme
for:
- Score_elems
- Engraver
TOPLEVEL_MAJOR_VERSION = 0
TOPLEVEL_MINOR_VERSION = 1
-TOPLEVEL_PATCH_LEVEL = 29
+TOPLEVEL_PATCH_LEVEL = 30
TOPLEVEL_MY_PATCH_LEVEL =
# use the above to send patches, always empty for released version:
% generated automatically by mf-to-table.py version 0.4
-% on Wed Nov 5 23:51:17 1997
+% on Tue Nov 11 13:31:20 1997
% Do not edit
% input from out/feta16.log
% name=\symboltables {
"d6" "\\dsixtyfourthflag" -0.20\pt 4.54\pt -0.20\pt 17.66\pt
}
"klef" = \table {
- "bass" "\\bassclef" -0.00\pt 10.80\pt -10.00\pt 4.00\pt
- "bass_change" "\\cbassclef" -0.00\pt 8.64\pt -8.00\pt 3.20\pt
+ "bass" "\\bassclef" 1.20\pt 12.80\pt -10.00\pt 4.00\pt
+ "bass_change" "\\cbassclef" 0.96\pt 10.24\pt -8.00\pt 3.20\pt
+ "violin" "\\violinclef" 0.11\pt 10.55\pt -12.00\pt 20.00\pt
+ "violin_change" "\\cviolinclef" -0.23\pt 8.12\pt -9.60\pt 16.00\pt
}
% } % $name
% generated automatically by mf-to-table.py version 0.4
-% on Wed Nov 5 23:51:26 1997
+% on Tue Nov 11 13:31:29 1997
% Do not edit
% input from out/feta20.log
% name=\symboltables {
"d6" "\\dsixtyfourthflag" -0.25\pt 5.68\pt -0.25\pt 22.08\pt
}
"klef" = \table {
- "bass" "\\bassclef" -0.00\pt 13.50\pt -12.50\pt 5.00\pt
- "bass_change" "\\cbassclef" -0.00\pt 10.80\pt -10.00\pt 4.00\pt
+ "bass" "\\bassclef" 1.50\pt 16.00\pt -12.50\pt 5.00\pt
+ "bass_change" "\\cbassclef" 1.20\pt 12.80\pt -10.00\pt 4.00\pt
+ "violin" "\\violinclef" 0.14\pt 13.19\pt -15.00\pt 25.00\pt
+ "violin_change" "\\cviolinclef" -0.29\pt 10.15\pt -12.00\pt 20.00\pt
}
% } % $name
"clefs" = \table {
"violin" "\violinclef" 0.0\pt 12.8\pt -10.0\pt 18.0\pt
- "bass" "\bassclef" 0.0\pt 12.8\pt 0.0\pt 16.0\pt
+ "bass" "\bassclef" -1.0\pt 12.8\pt 0.0\pt 16.0\pt
"alto" "\altoclef" 0.0\pt 12.8\pt 0.0\pt 16.0\pt
"tenor" "\altoclef" 0.0\pt 12.8\pt 0.0\pt 16.0\pt
"violin_change" "\cviolinclef" 0.0\pt 11.2\pt -12.0\pt 12.0\pt
%%4
r < [ 'a cis > e < 'a cis > e < 'a cis ] > |
%%5
- [2/3 a~ bes a ]1/1 d'4. a |
+ [2/3 a() bes a ]1/1 d'4. a |
%%6
- [2/3 g~ a g ]1/1 d'4 g r |
+ [2/3 g() a g ]1/1 d'4 g r |
%%7
- a4.^> g [2/3 g~ f e ]1/1 |
+ a4.^> g [2/3 g() f e ]1/1 |
%%8
f2 r4 |
%%9
- < { a'4.~ g' [2/3 g'( f' )e' ]1/1 }
+ < { a'4.() g' [2/3 g'( f' )e' ]1/1 }
{ cis'4. e'_"dolce" \plet 2/3; e' \plet 1/1; } > |
%%10
< f'2. d'2. > |
%%11
- [2/3 a ~ bes a ]1/1 f'4. a |
+ [2/3 a () bes a ]1/1 f'4. a |
%%12
- [2/3 g~ a g ]1/1 e'4. d' |
+ [2/3 g() a g ]1/1 e'4. d' |
%%13
- c'4. bes [2/3 bes~ a g ]1/1 |
+ c'4. bes [2/3 bes() a g ]1/1 |
%%14
a2 r
- < { d'~ c'4. g [2/3 bes a g ]1/1 }
- { f \p ~ e4._"dolce" bes
+ < { d'() c'4. g [2/3 bes a g ]1/1 }
+ { f \p () e4._"dolce" bes
\plet 2/3; g
\plet 1/1;
} > |
[ d'8. a16 ] f4. d |
%%19
%#% c'\grace\stemup
- [2/3 bes ~ a bes ]1/1 d'4. bes |
+ [2/3 bes () a bes ]1/1 d'4. bes |
%%20
a2. |
%%21
%#% a\grace
- [2/3 g~ fis g ]1/1 bes4.^> g |
+ [2/3 g() fis g ]1/1 bes4.^> g |
%%22
f!2. |
%%23
%%24
[ d'8. a16 ] fis4. d |
%%25
- [2/3 b \mf~ ais b ]1/1 d'4. b |
+ [2/3 b \mf() ais b ]1/1 d'4. b |
%%26
< a2. fis2. > |
%%27
- [2/3 e' \f~ dis' e' ]1/1 g'4. cis' |
+ [2/3 e' \f() dis' e' ]1/1 g'4. cis' |
%%28
< d'2. fis2. > |
%#%\volta1
%%29
- < { bes2( [ d'8.~ )bes16 ] }
+ < { bes2( [ d'8.() )bes16 ] }
{ g2 \mf [ bes8. g16 ] } > |
%%30
< { a4. [ a-. a-. a-. ] }
%%32
< a2 fis2 \pp > < a4 fis4 > |
%%33
- < { b2( [ d'8.~ )b16 ] }
+ < { b2( [ d'8.() )b16 ] }
{ g2 [ b8. g16 ] } > |
%%34
< { a4. [ a-. a-. a-. ] }
%%37
[ a8. a16 ] [ cis'8. cis'16 ] [ e'8. e'16 ] |
%%38
- d'4~ cis'4 r4 |
+ d'4() cis'4 r4 |
%%39
%#% > a4. [ cis' e'8. >! d'16 ] |
a4. \> [ cis' e'8. \! d'16 ] |
%%40
cis'2 r4 |
%%41
- < fis'4. \> cis'4. \f > e' [2/3 e'~ d' \! cis' ]1/1 |
+ < fis'4. \> cis'4. \f > e' [2/3 e'() d' \! cis' ]1/1 |
%%42
[ b8. cis'16 ] d'4^> b r |
%%43
%%44
[ b8. \> cis'16 ] d'4^> b \! r |
%%45
- [2/3 b \p ~ ais b ]1/1 d'4. b |
+ [2/3 b \p () ais b ]1/1 d'4. b |
%%46
<a!2. fis2. > |
%%47
- [2/3 e' \f~ dis' e' ]1/1 g'4.^> cis' |
+ [2/3 e' \f() dis' e' ]1/1 g'4.^> cis' |
%%48
\textstyle "italic";
<
- { fis2.~
+ { fis2.(
%\group "+1";
- \stemdown f2. }
- { d'2. ~ \stemup
- d'4 r4_"decresc." d'4 }
+ \stemdown )f2. }
+ { d'2. ( \stemup
+ ) d'4 r4_"decresc." d'4 }
>
\textstyle "roman"; |
%%50
MAJOR_VERSION = 0
MINOR_VERSION = 1
-PATCH_LEVEL = 29
+PATCH_LEVEL = 30
MY_PATCH_LEVEL =
Bar_column_engraver::acknowledge_element (Score_elem_info info)
{
if (info.elem_l_->is_type_b (Script::static_name())
- && info.req_l_->command()
- && info.origin_grav_l_arr_.size() == 1)
- {
- script_l_arr_.push ((Script*)info.elem_l_->item());
+ && info.req_l_->command()
+ && info.origin_grav_l_arr_.size() == 1)
+ {
+ script_l_arr_.push ((Script*)info.elem_l_->item());
}
else
{
- if (info.origin_grav_l_arr_.size() == 1
- && info.elem_l_->is_type_b (Bar::static_name()))
- bar_l_ = (Bar*)info.elem_l_->item();
+ if (info.origin_grav_l_arr_.size() == 1
+ && info.elem_l_->is_type_b (Bar::static_name()))
+ bar_l_ = (Bar*)info.elem_l_->item();
}
if (bar_l_ && !barcol_p_)
{
- barcol_p_ = new Bar_column;
- barcol_p_->breakable_b_ =true;
- barcol_p_->set_bar (bar_l_);
- announce_element (Score_elem_info (barcol_p_, 0));
+ barcol_p_ = new Bar_column;
+ barcol_p_->breakable_b_ =true;
+ barcol_p_->set_bar (bar_l_);
+ announce_element (Score_elem_info (barcol_p_, 0));
}
if (barcol_p_)
{
- for (int i=0; i < script_l_arr_.size(); i++)
- {
- script_l_arr_[i]->breakable_b_ = true;
- barcol_p_->add (script_l_arr_[i]);
- }
- script_l_arr_.clear();
+ for (int i=0; i < script_l_arr_.size(); i++)
+ {
+ script_l_arr_[i]->breakable_b_ = true;
+ barcol_p_->add (script_l_arr_[i]);
+ }
+ script_l_arr_.clear();
}
}
{
if (barcol_p_)
{
- typeset_element (barcol_p_);
- barcol_p_ =0;
+ typeset_element (barcol_p_);
+ barcol_p_ =0;
}
}
grow_dir_ =0;
dir_ = DOWN ;
dyn_b_drul_[LEFT] = dyn_b_drul_[RIGHT] =false;
- inside_staff_b_ = false;
}
Interval
m_p = new Molecule;
Atom s (get_symbol());
m_p->add (Atom (s));
- m_p->translate (Offset (x_off_dim, pos_i_ * paper()->internote_f ()));
+ m_p->translate (Offset (x_off_dim, y_));
return m_p;
}
Staff_symbol* s_l = get_staff_info().staff_sym_l_;
if (dynamic_p_)
{
- dynamic_p_->set_staffsym (s_l);
+
+ dynamic_p_->add_support (s_l);
typeset_element (dynamic_p_);
dynamic_p_ = 0;
}
to_end_cresc_p_->dyn_b_drul_[RIGHT]=true;
to_end_cresc_p_->set_bounds(RIGHT,get_staff_info().musical_l ());
- to_end_cresc_p_->set_staffsym (s_l);
+ to_end_cresc_p_->add_support (s_l);
typeset_element (to_end_cresc_p_);
to_end_cresc_p_ = 0;
}
*/
class Staff_side : virtual Score_elem {
- Link_array<Score_elem> support_l_arr_;
- int staff_size_i_;
- Interval support_height() const;
- Staff_symbol* staff_sym_l_;
- int get_position_i() const;
+ Link_array<Score_elem> support_l_arr_;
+ int staff_size_i_;
+ Interval support_height() const;
+ Staff_symbol* staff_sym_l_;
+ Real get_position_f() const;
- void read_staff_sym();
+ void read_staff_sym();
public:
- /**
- Vertical dir of symbol relative to staff. -1 = below staff?
- */
- Direction dir_;
- Interval sym_int_;
+ /**
+ Vertical dir of symbol relative to staff. -1 = below staff?
+ */
+ Direction dir_;
+ Interval sym_int_;
- /// follow the support inside the staff?
- bool inside_staff_b_;
+ /// follow the support inside the staff?
+ bool inside_staff_b_;
- int pos_i_;
+ Real y_;
- void set_staffsym (Staff_symbol * );
+
+ void set_staffsym (Staff_symbol * );
- Staff_side();
- void add_support (Score_elem*);
- DECLARE_MY_RUNTIME_TYPEINFO;
+ Staff_side();
+ void add_support (Score_elem*);
+ DECLARE_MY_RUNTIME_TYPEINFO;
protected:
- virtual Interval symbol_height() const;
- virtual void do_substitute_dependency (Score_elem *, Score_elem*);
- virtual void do_post_processing();
+ virtual Interval symbol_height() const;
+ virtual void do_substitute_dependency (Score_elem *, Score_elem*);
+ virtual void do_post_processing();
};
#endif // STAFF_SIDE_HH
{
/// this many lines.
int no_lines_i_;
+ Real interline_f_;
public:
DECLARE_MY_RUNTIME_TYPEINFO;
Staff_symbol (int lines);
int steps_i() const;
protected:
SCORE_ELEM_CLONE(Staff_symbol);
+ virtual Interval do_height () const;
virtual Molecule* brew_molecule_p() const;
virtual void do_print() const;
};
AA {A}|_
N [0-9]
AN {AA}|{N}
-PUNCT [?!,.:']
+PUNCT [?!:']
ACCENT \\[`'"^]
NATIONAL [\001-\006\021-\027\031\036\200-\377]
TEX {AA}|-|{PUNCT}|{ACCENT}|{NATIONAL}
#include "musical-request.hh"
#include "stem.hh"
#include "staff-sym.hh"
+#include "general-script-def.hh"
Script_engraver::Script_engraver()
{
for (int i=0; i < script_p_arr_.size(); i++)
{
Script*script_p = script_p_arr_[i];
- script_p->set_staffsym (s_l);
+ if (!script_p->specs_l_->inside_b())
+ script_p->add_support (s_l);
+
typeset_element (script_p);
}
script_p_arr_.clear();
if (!dir_)
set_default_dir();
- inside_staff_b_ = specs_l_->inside_b();
}
Interval
Molecule*
Script::brew_molecule_p() const
{
- Real dy = paper()->internote_f ();
Real dx = paper()->note_width()/2;
Molecule*out = new Molecule (specs_l_->get_atom (paper(), dir_));
- out->translate_axis (dy * pos_i_, Y_AXIS);
+ out->translate_axis (y_, Y_AXIS);
out->translate_axis (dx, X_AXIS); // FIXME! ugh
return out;
}
#include "staff-sym.hh"
#include "debug.hh"
-void
-Staff_side::set_staffsym (Staff_symbol* s_l)
-{
- staff_sym_l_ = s_l;
- add_dependency (s_l);
-}
Staff_side::Staff_side()
{
- pos_i_ =0;
+ y_=0;
sym_int_ = Interval (0,0);
- staff_size_i_ = 0;
- staff_sym_l_ = 0;
dir_ = CENTER;
inside_staff_b_ = false;
}
-void
-Staff_side::read_staff_sym()
-{
- if (! staff_sym_l_)
- return ;
- staff_size_i_ = staff_sym_l_->steps_i();
-}
-
Interval
Staff_side::support_height() const
{
- Interval r;
+ Interval y_int;
+ for (int i=0; i < support_l_arr_.size(); i++)
+ {
+ Axis_group_element *common =
+ common_group (support_l_arr_[i], Y_AXIS);
+
+ Real y = support_l_arr_[i]->relative_coordinate (common, Y_AXIS)
+ -relative_coordinate (common,Y_AXIS);
- for (int i=0; i < support_l_arr_.size(); i++)
- r.unite (support_l_arr_[i]->height());
- if (r.empty_b())
+ y_int.unite (y + support_l_arr_[i]->height());
+ }
+
+
+ if (y_int.empty_b())
{
- r = Interval (0,0);
+ y_int = Interval (0,0);
}
- return r;
+ return y_int;
}
void
add_dependency (i);
}
-int
-Staff_side::get_position_i() const
+Real
+Staff_side::get_position_f() const
{
if (!dir_)
{
Real y=0;
Real inter_f = paper()-> internote_f ();
- if (!inside_staff_b_)
- {
- y = (staff_sym_l_) ? dir_ * (staff_sym_l_->steps_i()/2 + 2) : -2;
- y *=inter_f;
-
- Interval v= support_height();
-
- if (dir_ > 0)
- {
- y = y >? (v.max() + 2*inter_f);
- }
- else if (dir_ < 0)
- {
- y = y <? (v.min() - 2*inter_f);
- }
- }
- else
- {
- Interval v= support_height();
- y = v[dir_] + 2*dir_*inter_f; // ugh
- }
- return int (rint (Real (y)/inter_f)); // should ret a float?
+
+ Interval v= support_height();
+ y = v[dir_] + 2*dir_*inter_f; // ugh
+
+ return y;
}
Interval
Staff_side::do_post_processing()
{
sym_int_ = symbol_height();
- pos_i_ = get_position_i();
+ y_ = get_position_f();
if (dir_)
- pos_i_ += int (rint (- sym_int_[-dir_] / paper()->internote_f ()));
+ y_ += - sym_int_[-dir_];
}
void
Staff_side::do_substitute_dependency (Score_elem*o, Score_elem*n)
{
support_l_arr_.unordered_substitute (o,n);
- if (staff_sym_l_ == o)
- staff_sym_l_ = n ? (Staff_symbol*) n->spanner():0;
}
#include "paper-def.hh"
#include "molecule.hh"
#include "debug.hh"
-
+#include "dimen.hh"
Staff_symbol::Staff_symbol (int l)
{
no_lines_i_ = l;
+ interline_f_ = 0 PT;
}
#endif
}
+Interval
+Staff_symbol::do_height() const
+{
+ int n = no_lines_i_ -1;
+ return 2* inter_note_f () * Interval (-n, n);
+}
+
Molecule*
Staff_symbol::brew_molecule_p() const
{
Paper_def * p = paper();
Atom rule = p->lookup_l ()->rule_symbol (p->get_var ("rule_thickness"),
width ().length ());
- Real inter = p->interline_f ();
- Real height = (no_lines_i_-1) * inter/2;
+ Real height = (no_lines_i_-1) * inter_note_f();
Molecule * m = new Molecule;
for (int i=0; i < no_lines_i_; i++)
{
Atom a (rule);
- a.translate_axis (height - i * inter, Y_AXIS);
+ a.translate_axis (height - i * inter_note_f()*2, Y_AXIS);
m->add (a);
}
Real
Staff_symbol::inter_note_f() const
{
+ if (interline_f_)
+ return interline_f_/2;
+
return paper()->internote_f ();
}
if (dir_<0) // should do something better anyway.
mol_p->translate_axis (-mol_p->extent().y ().left , Y_AXIS);
- mol_p->translate_axis (pos_i_ * paper()->internote_f (), Y_AXIS);
+ mol_p->translate_axis (y_, Y_AXIS);
return mol_p;
}
# Rename this file to "watch" and then you can run the "uscan" command
# to check for upstream updates and more.
# Site Directory Pattern Version Script
-pcnov095.win.tue.nl /pub/lilypond lilypond-*.tar.gz debian uupdate
+pcnov095.win.tue.nl /pub/lilypond/development lilypond-*.tar.gz debian uupdate
Begin3
Titel: LilyPond
-Versie: 0.1.29
-Inschrijf datum: 06NOV97
+Versie: 0.1.30
+Inschrijf datum: 11NOV97
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.29.tar.gz
+ 395k lilypond-0.1.30.tar.gz
Oorspronkelijke plek: pcnov095.win.tue.nl /pub/lilypond/
- 395k lilypond-0.1.29.tar.gz
+ 395k lilypond-0.1.30.tar.gz
Copi"eer politie: GPL
End
Begin3
Title: LilyPond
-Version: 0.1.29
-Entered-date: 06NOV97
+Version: 0.1.30
+Entered-date: 11NOV97
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
Author: hanwen@stack.nl (Han-Wen Nienhuys)
jan@digicash.com (Jan Nieuwenhuizen)
Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
-Primary-site: sunsite.unc.edu /pub/Linux/apps
- 440k lilypond-0.1.29.tar.gz
-Original-site: pcnov095.win.tue.nl /pub/lilypond/
- 440k lilypond-0.1.29.tar.gz
+Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert
+ 440k lilypond-0.1.30.tar.gz
+Original-site: pcnov095.win.tue.nl /pub/lilypond/development/
+ 440k lilypond-0.1.30.tar.gz
Copying-policy: GPL
End
Author: hanwen@stack.nl (Han-Wen Nienhuys)
jan@digicash.com (Jan Nieuwenhuizen)
Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
-Primary-site: sunsite.unc.edu /pub/Linux/apps
+Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert
440k lilypond-@TOPLEVEL_VERSION@.tar.gz
-Original-site: pcnov095.win.tue.nl /pub/lilypond/
+Original-site: pcnov095.win.tue.nl /pub/lilypond/development/
440k lilypond-@TOPLEVEL_VERSION@.tar.gz
Copying-policy: GPL
End
Name: lilypond
-Version: 0.1.29
+Version: 0.1.30
Release: 1
Copyright: GPL
Group: Applications/Publishing
-Source0: alpha.gnu.org:/gnu/lilypond/development/lilypond-0.1.29.tar.gz
+Source0: alpha.gnu.org:/gnu/lilypond/development/lilypond-0.1.30.tar.gz
Summary: A program for typesetting music.
URL: http://www.stack.nl/~hanwen/lilypond
Packager: Han-Wen Nienhuys <hanwen@stack.nl>
message "@{char@:"&charnamestr&"@:"&decimal charcode&"@:"&decimal charbp&"@:"&decimal charwd&"@:"&decimal chardp&"@:"&decimal charht&"@:"&idstr&"@:"&texstr&"@}";
enddef;
+def hround_pixels(expr sharped) = hround(sharped * hppp) enddef;
+def vround_pixels(expr sharped) = vround(sharped * vppp) enddef;
+
+
+
def tand(expr alpha) =
(sind alpha/cosd alpha)
enddef;
-% bolletjes.mf
-% part of LilyPond's pretty-but-neat music font
+%
+% feta-bolletjes.mf -- implement noteheads
+%
+% source file of LilyPond's pretty-but-neat music font
+%
+% (c) 1997 Jan Nieuwenhuizen <jan@digicash.com>
+% & Han-Wen Nienhuys <hanwen@stack.nl>
+%
+
% most beautiful noteheads are pronounced, not circular,
% and not even symmetric.
input feta-banier;
input feta-klef;
else:
- input feta-bolletjes;
- input feta-banier;
+% input feta-bolletjes;
+% input feta-banier;
% input feta-eindelijk;
input feta-klef;
+%
+% feta-klef.mf -- implement Clefs
+%
+% source file of the Feta (Font-En-Tja) music font
+%
+% (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+%
fet_begingroup("klef");
-def draw_bass_clef(expr reduction, center) =
- save thinness, left_shoot, reduced_il;
- save left_fat, right_fat, dot_size, dot_sep;
- save hip_factor;
-
- left_shoot = 0.3;
- left_fat = .3;
- right_fat = .5;
- dot_size = .4;
- dot_sep = 1.2;
- hip_factor = 0.95;
- thinness = stafflinethickness;
-
-
- reduced_il# = interline# * reduction;
- define_pixels(reduced_il);
- set_char_box(left_fat * reduced_il#,
- (1 + hip_factor + right_fat/2)* reduced_il# +
- (dot_sep+ 1) * dot_size *reduced_il#
- , 2.5 reduced_il#, 1.0 reduced_il#)
-
- z2 - z1 = (1.1 reduced_il, reduced_il);
- z3 = (x2 + hip_factor* reduced_il, y1);
- z4 - z1 = (- left_shoot * reduced_il, -2.5 reduced_il);
-
- z1extreme = z1l - ( thinness/2, 0);
- penpos1(left_fat* reduced_il , 0);
- z1r = (center, 0);
- z5 = (x3l + dot_sep * dot_size * interline, .5 interline);
-
-
- penpos3(right_fat * reduced_il, 180);
-
- penlabels(1,3);
- labels(2,4);
+def draw_staff(expr first, last)=
+ pickup pencircle scaled stafflinethickness;
+ for i:= first step 1 until last:
+ draw (- interline, i* interline) .. (4 interline, i* interline);
+ endfor
- pickup pencircle scaled thinness;
- filldraw z1r{up} .. z2{right} .. z3r{down} .. {curl 0} z4 {curl 0}
- .. z3l{up} .. z2{left} .. z1l{down} -- cycle;
-
- draw_bulb(1, z1r, z1extreme, 1.2 , 1.2);
-
- pickup pencircle scaled (dot_size * interline);
- draw z5;
- draw z5 yscaled -1;
+ enddef;
-enddef;
%
-% Inspired by Baerenreiter, Auf dem Strom
+% Inspired by Baerenreiter and Breitkopf
%
% FIXME: dims
% FIXME: right vertical tangent seems to be lower than the F-line
% [Wanske] says that the extreme x point should be exactly between
% the dots, but her picture shows that the extreme is ~ 0.2 ss lower
-def draw_bass_klef(expr reduction) =
+def draw_bass_klef(expr exact_center, reduction) =
save reduced_il, left_tilt, left_thick;
reduced_il# = interline# * reduction;
- left_tilt = 10;
-
+ left_tilt = 5;
define_pixels(reduced_il);
left_thick = .25 reduced_il;
- set_char_box(0, 2.7 reduced_il#, 2.5 reduced_il#, reduced_il#);
+ set_char_box(
+ - xpart exact_center+ .2 reduced_il#,
+ xpart exact_center + 2.7 reduced_il#,
+ - ypart exact_center + 2.5 reduced_il#,
+ ypart exact_center +reduced_il#);
x1r - x1l = left_thick;
- x1l = 0;
- y1l = 0;
+ z1l = (hround_pixels(xpart exact_center),
+ vround_pixels(ypart exact_center));
y2 = reduced_il;
- x3r = x1l + 12/7 reduced_il;
+ x3l - x1l = 2.1 reduced_il;
x2 = .5 [x1,x3];
x3l - x3r = .48 reduced_il;
y3l = -0.05 interline;
draw_bulb(1, z1r, z1l, .45 reduced_il, 1.0);
- fill z1r{up} .. z2r{right} .. tension .9 .. z3r{down} .. {curl 0}
+ fill z1r{up} .. z2r{right} .. tension 1.0 .. z3r{down} .. {curl 0}
simple_serif(z4r, z4l, 90) {curl 0}
- .. z3l{up} .. tension .9 .. z2l{left}
+ .. z3l{up} .. tension 0.9 .. z2l{left}
.. z1l{dir (-90 + left_tilt)} -- cycle;
labels(2,4);
penlabels(1,2,3,4);
- pickup pencircle scaled (1/3 reduced_il);
+ pickup pencircle scaled (.35 reduced_il);
draw z5;
draw z5 yscaled -1;
enddef;
+
+
fet_beginchar("F clef ", "bass", "bassclef")
- draw_bass_klef(1.0);
+ if test = 1:
+ draw_staff(-3,1);
+ fi;
+ draw_bass_klef((.5 interline#, 0), 1.0);
fet_endchar;
fet_beginchar("F clef (reduced)", "bass_change", "cbassclef")
- draw_bass_klef(0.8);
+ draw_bass_klef((.4 interline#, 0),0.8);
fet_endchar;
+
+%
+% Inspired by Baerenreiter
+%
+% FIXME top
+% FIXME bulb should curve (see bass clef)
+% FIXME start (inside) should be little thinner
+% FIXME parametrise.
+% FIXME should be a bit more upright
+%
+def draw_gclef (expr exact_center, reduction)=
+ save reduced_il, downstroke_dir, downstroke_angle, hair, center;
+ save breapth_factor, inner_thick_end, thinness, thickness, thinnib
+, thinness, thinpen;
+ reduced_il# = interline# * reduction;
+ define_pixels(reduced_il);
+ pair downstroke_dir, center;
+
+ center := (hround_pixels(xpart exact_center),
+ vround_pixels(ypart exact_center));
+
+ hair = .3 stafflinethickness;
+ thinness = 1.3 stafflinethickness;
+ downstroke_dir = (14, -75);
+ breapth_factor = 11/7;
+ inner_thick_end = 45;
+ thickness = .4 interline - hair;
+
+ thinnib = thinness - hair;
+ thinpen = thinness;
+ set_char_box(-xpart exact_center + breapth_factor* reduced_il#,
+ xpart exact_center + .66 breapth_factor* reduced_il#,
+ -ypart exact_center + 3 * reduced_il#,
+ ypart exact_center + 5 * reduced_il#);
+
+ pickup pencircle scaled hair;
+
+ downstroke_angle = angle downstroke_dir;
+ z1 = center + whatever * (-1, -2);
+ x1 = xpart center -.28 reduced_il;
+
+ top z2r = center + (0,reduced_il + stafflinethickness/2);
+
+ x4 = xpart center - .1 reduced_il;
+ bot y4r = -(reduced_il + .5 stafflinethickness);
+
+ z3 = (z4 - center) rotated inner_thick_end + center;
+
+ z5r = (- breapth_factor, .37)* reduced_il + center;
+ penpos5(thickness, 135);
+
+ z6 = center + whatever * downstroke_dir;
+ y6 = ypart center + 2 reduced_il;
+
+
+ z7l - z6 = whatever *(z5- z6) ;
+ y7l = 3.5 reduced_il;
+
+
+
+ z8r = .4 [z9r, z7r] + 1.5 stafflinethickness * dir 52;
+
+ x9 = .7 [x10, x7r];
+ top y9l = 5 reduced_il;
+
+ y10 = 3. reduced_il;
+ y11 = -11/7 reduced_il;
+
+ y12 = ypart center - 18.5/7 reduced_il;
+ x12 = x11 - 5 /7 reduced_il;
+
+ z13 = z12 + .6 reduced_il*(-1,1);
+
+ (z10r - z10l) dotprod (unitvector downstroke_dir rotated 90) =
+ thinnib;
+
+ center - z10= whatever * downstroke_dir;
+ center - z11 = whatever * downstroke_dir;
+
+ penpos1(thinnib, angle(-1,-2));
+ penpos2(thickness, 90);
+ penpos3(thinnib, -90 + inner_thick_end);
+ penpos4(thinnib, -90);
+
+
+ penpos7(thickness, 135);
+ penpos8(1.5 thinnib, - 70 + angle downstroke_dir);
+ penpos9(1.5 thickness, -80);
+ penpos10(whatever, downstroke_angle + 10);
+ penpos11(thinnib, downstroke_angle + 90);
+ penpos12(thinnib, -90);
+ penpos13(3 thinnib, 180);
+
+
+ filldraw z2l{right} .. z3l.. z4l{left} .. z5l{up} .. z7l{up}
+ %.. z8l
+ .. z9l & z9l ..
+ {downstroke_dir}z10l --- z11l -- z11r --- z10r{- downstroke_dir}
+ .. tension .8
+ .. z9r & z9r
+ %.. z8r
+ .. z7r{down} .. z5r{down} .. z4r{right}
+ .. z3r .. z2r{left} ..
+ tension .95 ..
+ z1r -- z1l
+ .. tension 0.85 ..cycle;
+
+ filldraw simple_serif(z1r, z1l, 90) -- cycle;
+
+ filldraw z12r{left} .. z13r{up} -- z13l{down} .. z12l{right} .. cycle;
+
+ draw_bulb(-1, z13l, lft z13r, 6/14 reduced_il, 1.0);
+
+ pickup pencircle scaled (thinpen);
+ draw z10 --- z11 .. z12{left};
+
+ penlabels(range 1 thru 15);
+enddef;
+
+
+fet_beginchar("G clef", "violin", "violinclef")
+ if test = 1:
+ draw_staff(-1,3);
+ fi;
+ draw_gclef((1.6 interline#,0), 1.0);
+fet_endchar;
+fet_beginchar("G clef", "violin_change", "cviolinclef")
+ draw_gclef((1.2 interline#,0), .8);
+fet_endchar;
+
fet_endgroup("klef");
-%
-% scripts
-%
+%
+% feta-schrift.mf -- implement scripts
+%
+% source file of the Feta (Font-En-Tja) music font
+%
+% (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+%
fet_begingroup("scripts")
+%
+% feta-toevallig.mf -- implement Accidentals
+%
+% source file of the Feta (Font-En-Tja) music font
+%
+% (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+%
+
+
%
% Accidentals from various sources, notably
%
fet_begingroup("accidentals");
+%
+% The beams of most sharps have horizontal endings (as if drawn with
+% a square pen). [Wanske] does not mention this, so we'll just ignore
+% this fact
+%
fet_beginchar("Sharp" , "1", "sharp");
set_char_box(0, 1.1 interline#, 1.5 interline#,
1.5 interline#);
% generated automatically by mf-to-table.py version 0.4
-% on Wed Nov 5 23:51:17 1997
+% on Tue Nov 11 13:31:20 1997
% Do not edit
% input from out/feta16.log
% name
% klef
\fetdef\bassclef{51}
\fetdef\cbassclef{52}
+\fetdef\violinclef{53}
+\fetdef\cviolinclef{54}
% generated automatically by mf-to-table.py version 0.4
-% on Wed Nov 5 23:51:26 1997
+% on Tue Nov 11 13:31:29 1997
% Do not edit
% input from out/feta20.log
% name
% klef
\fetdef\bassclef{51}
\fetdef\cbassclef{52}
+\fetdef\violinclef{53}
+\fetdef\cviolinclef{54}