=item B<--enable-tex-dir>
-Set then directory TeX input is in (detected as a subdir of tex-prefix)
+Set then directory TeX input is in (detected as a subdir of
+tex-prefix). This should be a directory that is reachable both for
+tex and latex. On my system the best choice would be
+F</usr/lib/texmf/texmf/tex/generic//>.
=item B<--enable-mf-dir>
-Set the directory mf input is in (idem)
+Set the directory mf input is in (idem). On my system the best
+choice would be F</usr/lib/texmf/texmf/fonts/source/public/>.
=item B<--enable-config>
=head1 REDHAT LINUX
-RedHat Linux users should be able to get a RPM. A spec file is in
-F<make/out/lilypond.spec>. You should be able to create an rpm as a
-normal user. Be sure you have a F<~/.rpmrc>, and edit the RPM-dir in
-F<Variables.make>. (If you create the RPM as a normal user the
-permissions will not be set correctly, unfortunately)
+RedHat Linux users can compile an RPM. A spec file is in
+F<make/out/lilypond.spec>. You should install a gif file called
+F<lelie_icon.gif> along with the sources. You can generate this gif
+file by typing
+
+ make gifs
+
+in the directory F<Documentation>.
+
=head1 DEBIAN GNU/LINUX
=head1 NAME
-The Homepage of LilyPond -- the GNU Project music typesetter
+The Documentation of LilyPond -- the GNU Project music typesetter
=head1 DESCRIPTION
-LilyPond is the GNU Project music typesetter. It 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.
-
-This is not a Fanmail/Hype page. These pages were entirely created from
-the LilyPond package-sources.
-
Note: These pages are created from the latest B<development snapshots>
of LilyPond. You can look at the bottom if you want to know which
version this was.
-=head2 Mirrors
-
-=over 4
-
-=item http://sca.uwaterloo.ca/lilypond/
-
-Eric Praetzel was kind enough to provide a mirror of both the website
-and the ftp site.
-
-=back
-
-=head2 Examples
-
-=over 4
-
-=item *
-<a href=examples_output.html
->
-short examples of what LilyPond can do: MIDI, PS, .gif and input.
-</a
->
-
-=item *
-<a href=mutopiaexamples_output.html
->
-examples of what LilyPond can do
-with real music: MIDI, PS, .gif and input
-</a
->
-
-=back
-
-=head2 NEWS!
-
-This is what the latest version brings:
-
-top_of_NEWS
=head2 Documentation: Introduction
=item *
<a href=../tex/out-www/index.html
>
-PS documents about LilyPond
+TeX documents about LilyPond
</a
>
=item *
<a href=docxx/index.html
>
-The DOC++ documentation of the C++ sources.
+The DOC++ documentation of the C++ sources. [temporarily disabled]
</a
>
>
-=item *
-<a href=sconstat/stats.html
->
-Stats on this page. [temporarily out of order]
-</a
->
=back
--- /dev/null
+=head1 NAME
+
+The Homepage of LilyPond -- the GNU Project music typesetter
+
+=head1 DESCRIPTION
+
+LilyPond is the GNU Project music typesetter. This program can print
+beautiful sheet music from a music definition file. It can also play
+a play (mechanical) performances to a MIDI file. Features include
+multiple staffs, meters, clefs, keys, lyrics, versatile
+input-language, cadenzas, beams, slurs, triplets. It includes a nice
+font of musical symbols.
+
+This is not a Fanmail/Hype page. These pages were entirely created from
+the LilyPond package-sources.
+
+Note: These pages are created from the latest B<development snapshots>
+of LilyPond. You can look at the bottom if you want to know which
+version this was.
+
+=head2 Mirrors
+
+=over 4
+
+=item http://sca.uwaterloo.ca/lilypond/
+
+Eric Praetzel was kind enough to provide a mirror of both the website
+and the ftp site.
+
+=back
+
+=head2 Examples
+
+=over 4
+
+=item *
+<a href=../input/out-www/index.html
+>
+short examples of what LilyPond can do: MIDI, PS, .gif and input.
+</a
+>
+
+=item *
+<a href=../mutopia/out-www/index.html
+>
+examples of what LilyPond can do
+with real music: MIDI, PS, .gif and input
+</a
+>
+
+=back
+
+=head2 NEWS!
+
+This is what the latest version brings:
+
+top_of_NEWS
+
+=head2 Documentation: Introduction
+
+=over 4
+
+=item *
+<a href=../Documentation/out-www/index.html
+>
+All of the LilyPond documentation.
+</a
+>
+
+
+
+=back
+pl 62
+ - no-touch hak.
+ - bfs: multi measure rests
+ - fixed the website.
+ - add extra space after breakable columns.
+
+
+pl 61.jcn8
+ - mudela relative octave feature:
+ * Documentation/relative-octaves.pod
+ * \octave relative;
+ * lilypond -f for automatically finding new relative quote positions
+ (sorry, fully automated convert is too complex)
+ * mutopia/ltor.ly: octave quotes reduced from 511 to 59
+ - better conflily
+ - bf: abbreviation-beam-engraver: set beam::multiple_i_
+ - bf: open_abbrev_parens
+ - dotted/dashed slurs/ties
+ - fixed-up scsii-menuetto; use dotted-slurs
+ - slur_thickness runtime
+ - bf: typo lilyponddefs: elevendefs
+ - moved hard-coded slur parameters to runtime
+ - make-patch -r: diff against latest release
+ - allow semicolons after paper_identifier and \include
+ - params.ly: parameterised some paper vars
+ - bf: beam quantise for slope = 0
+ - interbeam (mult>3) open-up to paper-def to paper!
+ - "implemented" Paper-def::staffheight
+ - simplification + bf bezier clipping
+ - vandale fix
+ - moved doco from paper*ly to fonts.doc
+ - papers with expressions
+ - paper20.ly: rewrote precalculated values as expressions
+ - simple expressions in mudela (paper-body only)
+ - beam_thickness centralised and run-time...
+ - \nobreak
+ - bf: beamquantise: never sit if mult > 1
+ - bf: broken slur y-offset (not!)
+ - pagelength hack in tex/headers
+ - alignment of bracket (in span-score-bar.cc)
+ - boolean *break_b to continue break_penalty_i; maar nu...
+ - removed paper20 includes, \paper_twenty from examples
+ - dropped latex files
+ - renamed standje, standchen.
+ - parser accepts range of mudela-versions
+ - Mudela_version
+ - String_convert::split
+ - bf's: los-toros-oboe
+ - braindead Break_req with penalty; junked Disallow_break_req and
+ Break_force_req
+
+pl 61.ag1
+ - implemented octave-shifted clefs.
+
+********
+
pl 61
- bf: mudela-book error msgs
- don't dist feta-tables.
#include "score-column.hh"
#include "break.hh"
#include "paper-def.hh"
-#include "line-spacer.hh"
+#include "spring-spacer.hh"
#include "debug.hh"
#include "scoreline.hh"
#include "p-score.hh"
#include "p-col.hh"
#include "cpu-timer.hh"
+#include "command-request.hh"
String
-Col_stats::str () const {
+Col_stats::str () const
+{
String s (count_i_);
s += _ (" lines");
if (count_i_)
Line_spacer*
Break_algorithm::generate_spacing_problem (Line_of_cols curline, Interval line) const
{
- Line_spacer * sp= (*get_line_spacer) ();
+ Spring_spacer * sp= (Spring_spacer*) (*get_line_spacer) (); // ugh
sp->paper_l_ = pscore_l_->paper_l_;
sp->add_column (curline[0], true, line.min ());
sp->add_column (curline[i]);
if (line.length () > 0)
- sp->add_column (curline.top (), true, line.max ());
+ {
+ sp->add_column (curline.top (), true, line[RIGHT]);
+ sp->energy_normalisation_f_ = sqr (line.length ());
+ }
else
sp->add_column (curline.top ());
for (int i=0; i < curline.size (); i++)
{
if (i && i < curline.size () -1
- && ((Score_column*)curline[i])->forced_break_b ())
+ && (((Score_column*)curline[i])->break_penalty_i () >= Break_req::FORCE))
return false;
}
return true;
class Spring_spacer : public Line_spacer {
friend class Durations_iter;
+
Pointer_list<Idealspacing *> ideal_p_list_;
Array<Colinfo> cols_;
Real calculate_energy_f (Vector) const;
public:
static Line_spacer *constructor();
-
+ Real energy_normalisation_f_;
+ Spring_spacer ();
virtual void solve (Col_hpositions*) const;
virtual void lower_bound_solution (Col_hpositions*) const;
virtual void add_column (Paper_column *, bool fixed=false, Real fixpos=0.0);
#include "separating-group-spanner.hh"
#include "single-malt-grouping-item.hh"
#include "p-col.hh"
+#include "paper-def.hh"
Array<Rod>
Separating_group_spanner::get_rods () const
bool lb =spacing_unit_l_arr_[i]->column_l ()->breakable_b_;
if (lb)
{
- a.push (Rod ((Single_malt_grouping_item*)
+ Rod r((Single_malt_grouping_item*)
spacing_unit_l_arr_[i]->find_prebroken_piece (RIGHT),
- spacing_unit_l_arr_[i+1]));
+ spacing_unit_l_arr_[i+1]);
+ r.distance_f_ += paper ()->interline_f () *1.5;
+ a.push (r);
}
bool rb=spacing_unit_l_arr_[i+1]->column_l ()->breakable_b_;
if (rb)
}
if (lb && rb)
{
- a.push (Rod ((Single_malt_grouping_item*)
+ Rod r((Single_malt_grouping_item*)
spacing_unit_l_arr_[i]->find_prebroken_piece (RIGHT),
(Single_malt_grouping_item*)
- spacing_unit_l_arr_[i+1]->find_prebroken_piece (LEFT)));
+ spacing_unit_l_arr_[i+1]->find_prebroken_piece (LEFT));
+ r.distance_f_ += paper ()->interline_f () *1.5;
+ a.push (r);
}
}
positions->satisfies_constraints_b_ = check_constraints (solution_vec);
}
+Spring_spacer::Spring_spacer ()
+{
+ energy_normalisation_f_ = 1.0;
+}
+
void
Spring_spacer::solve (Col_hpositions*positions) const
{
WARN << _("solution doesn't satisfy constraints.\n") ;
}
position_loose_cols (solution_vec);
- positions->energy_f_ = calculate_energy_f (solution_vec);
+ positions->energy_f_ = calculate_energy_f (solution_vec) / energy_normalisation_f_;
positions->config = solution_vec;
positions->error_col_l_arr_ = error_pcol_l_arr();
}
mult_i_ = s->mult_i_;
/*
- [todo]
- * get algorithm runtime
+ [TODO]
+ make this runtime
Breitkopf + H\"artel:
miny_f_ = interline + #beams * interbeam
Real internote_f = s->paper ()->internote_f ();
Real interline_f = 2.0 * internote_f;
- Real interbeam_f = s->paper ()->interbeam_f ();
- Real staffline_f = s->paper ()->rule_thickness ();
- Real beam_f = 0.48 * (interline_f - staffline_f);
+ Real interbeam_f = s->paper ()->interbeam_f (mult_i_);
+ Real beam_f = s->paper ()->beam_thickness_f ();
- if (check_debug && !monitor->silent_b ("Stem_info"))
- {
+
+ {
static int i = 1;
- cout << "******" << i++ << "******" << endl;
- cout << "begin_f: " << s->stem_begin_f () * dir_ << endl;
- // urg urg urg
- cout << "chord_f/i: " << s->chord_start_f () * dir_ / internote_f << endl;
- }
+ DOUT << "******" << i++ << "******\n"
+ << "begin_f: " << s->stem_begin_f () * dir_
+ << "\nchord_f/i: " << s->chord_start_f () * dir_ / internote_f << '\n';
+ }
/*
For simplicity, we'll assume dir = UP and correct if
idealy_f_ /= internote_f;
miny_f_ /= internote_f;
- if (check_debug && !monitor->silent_b ("Stem_info"))
- {
- cout << "dir_: " << dir_ << endl;
- cout << "mult_i_: " << mult_i_ << endl;
- cout << "idealy_f_: " << idealy_f_ << endl;
- cout << "miny_f_: " << miny_f_ << endl;
- }
+
+ DOUT << "dir_: " << dir_ << '\n';
+ DOUT << "mult_i_: " << mult_i_ << '\n';
+ DOUT << "idealy_f_: " << idealy_f_ << '\n';
+ DOUT << "miny_f_: " << miny_f_ << '\n';
+
idealy_f_ = miny_f_ >? idealy_f_;
}