-1.3.52.jcn1
-===========
+1.3.53
+======
+* Small cleanups in Molecule interface
+
+* Spacing related elements perform suicide after calculating
+distances. This saves a some memory, approximately 2 to 5 % ?
+
+* Small cleanups in line breaking: Paper_column stores springs and
+rods in only one place now. All fields relating to energy have been
+removed
+
+* Don't generate all output Scheme in memory, but evaluate to output
+file immediately. This will reduce memory usage a little.
+
+* Use STL's map for Dictionary template
+
+* Substitute pointers on element properties of the root Line_of_score
+as well.
* Added toplevel doc target, to support building doc with --srcdir
* Removed cygwin build stuff; updated versions at:
- http://appel.dyndns.org/lilypond/gnu-windows/cross
+ http://appel.dyndns.org/lilypond/gnu-windows/cross
+
+* Fixed lily.scm to handle incipits (thanks, Mats)
+
1.3.52
======
-* Bugfix in smob handling. Delete the C-part of freed smobs. Be
-honest about amount of allocation and deletion, so GUILE doesn't
-overestimate the amount of memory.
+* Made bugfix in smob handling: delete the C-part of freed smobs and
+be honest about amount of allocation and deletion, so that GUILE
+doesn't overestimate the amount of memory available.
* Faq update: nicer blank note paper, courtesy Mats Bengtsson.
@mudelafile{repeat-fold.ly}
+Across linebreaks, first and second bracket should be equal
+
+@mudelafile{repeat-line-break.ly}
+
+
+
@section Lyrics
Lyrics can be set to a melody automatically. Excess lyrics will be
PACKAGE_NAME=LilyPond
MAJOR_VERSION=1
MINOR_VERSION=3
-PATCH_LEVEL=52
-MY_PATCH_LEVEL=jcn1
+PATCH_LEVEL=53
+MY_PATCH_LEVEL=
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
# released version.
void
Dstream::clear_silence()
{
- for (Dictionary_iter<bool> i (*silent_dict_p_); i.ok(); i++)
+ for (map<String,bool>::iterator ki(silent_dict_p_->begin ());
+ silent_dict_p_->end () != ki; ki++)
{
- i.val_ref() = false;
+ (*ki).second = false;
}
}
#include "string.hh"
#include "array.hh"
+#include <map>
+
#include "hash-table.hh"
/*
- DEPRECATED. Use either SCM (preferred) or STL
+ interface to STL function.
*/
template<class V>
-class Dictionary : public Hash_table<String, V>
+class Dictionary : public map<String, V>
{
public:
Dictionary ()
{
- hash_func_ = string_hash;
}
Dictionary (Dict_initialiser<V> *p)
{
hash_func_ = string_hash;
for (Dict_initialiser<V> *q = p; q->key_; q++)
- elem (q->key_) = q->value_;
+ (*this) [q->key_] = q->value_;
}
-
- friend class Dictionary_iter<V>;
+ bool elem_b (String s)
+ {
+ map<String,V>::const_iterator ki (find (s));
+ return ki != end ();
+ }
+
};
--- /dev/null
+% Generated by mudela-book.py; options are nofly
+\include "paper16.ly"
+\paper { linewidth = 390.000000 \pt; }
+
+% copied from file `lyric-combine.ly'
+\header{
+filename = "twinkle-pop.ly";
+%title = "Ah, vous dirais-je, maman ";
+description = "twinkle twinkle in pop-song-settings";
+composer = "traditional";
+enteredby = "HWN, chords by Johan Vromans";
+copyright = "public domain";
+}
+
+\version "1.3.42";
+
+m =\notes \relative c'' {
+ \property Staff.automaticMelismata = ##t
+ \autoBeamOff
+ g4 r8 \times 2/3 { g'8( f )e } r8 \grace { [d16 c b] } e4
+ \emptyText
+ d8.^"melisma" \melisma c16
+ \melismaEnd
+ b }
+
+noisebeat =\notes \relative c'' {g16 g g g }
+noise = { \noisebeat \noisebeat \noisebeat \noisebeat \noisebeat \noisebeat }
+textI = \lyrics { la2 __ la -- la __ la la la la la }
+textII = \lyrics { da -- da __ da -- da da da da da }
+
+\score {
+ \notes < \context Staff = SA \m
+ \context Lyrics = LA { s1 }
+ \context Staff = SB { s1 }
+ \context Lyrics = LB { s1 }
+ \context Staff = SC \noise
+
+ \addlyrics
+ \context Staff = SB \m
+ < \context Lyrics = LA \textI
+ \context Lyrics = LB \textII
+ >
+
+ >
+}
+
+
--- /dev/null
+
+\score { \context PianoStaff \notes <
+\context Staff = up <{ c4 }
+ \times 2/3 { [c8 c\translator Staff = down c] }>
+ \context Staff = down c4
+
+ >
+
+ }
+
--- /dev/null
+
+\score {
+\notes
+\context Staff\relative c'' {
+ \repeat "volta" 2 { c1 \break } \alternative { d e }
+ c1
+ \repeat "volta" 2 { c1 } \alternative { { d \break} e }
+
+}
+}
--- /dev/null
+
+\score { \context PianoStaff \notes <
+
+{ \times 2/3 { [c8 c\translator Staff = down c] }}
+ \context Staff = down c4
+
+ >
+
+ }
+
<b1 fis' b d>
}
+emptyincipit = \notes{
+ s1
+}
+
violin = \notes\relative c''{
\specialkey \keysignature f' fis'' g' gis'';
\time 2/2;
}
\score{
- \notes{
- \context Staff=violin
- \property Staff.clefStyle = "transparent"
- \incipit
- < \context Staff=violin {
- \bar ".|"; \endincipit
- \violin}
- \context Staff=cb { \property Staff.clefStyle = "transparent"
- \bar ".|"; \endincipit
- \BC}>
- }
+ <
+ \context Staff = violin {\notes{
+ \property Staff.clefStyle = "transparent"
+ \incipit \bar ".|"; \endincipit
+ \violin
+ }}
+ \context Staff = BC{\notes{
+ \property Staff.clefStyle = "transparent"
+ \emptyincipit \bar ".|"; \endincipit
+ \BC
+ }}
+ >
\paper{
\translator{\StaffContext
timeSignatureStyle = "C";
\context StaffGroup = percussion <\context Staff = timpani <
\property Staff.instrument = "Timpani"
\property Staff.instr = "Timp."
- \m
+ \notes{c''1 R1*8}
>
>
\context StaffGroup = strings <
minVerticalAlign = 2.2*\staffheight;
}
- \translator { \StaffContext
+ \translator { \HaraKiriStaffContext
\consists "Instrument_name_engraver";
marginScriptPadding = 15.0;
}
--- /dev/null
+
+\score {
+\notes
+\context Staff\relative c'' {
+ \repeat "volta" 2 { c1 \break } \alternative { d e }
+ c1
+ \repeat "volta" 2 { c1 } \alternative { { d \break} e }
+
+}
+}
\header {
title = "Trip";
- enteredby = "JCN";
copyright = "public domain";
}
-% todo: clef ch .
+%{
+
+This file tests as much features of lily as possible. If there are any
+basic faults in , this file will not run correctly.
+
+TODO:
+
+* add tuplets
+
+* repeats.
+
+* tremolo
+
+%}
praeludiumRight = \notes {
\key e;
\context Staff <
\context Voice = two { r4 }
\context Voice = one { \stemup s4 dis' cis cis ~ |
- [cis8
- (
+ % BUG -> (insane springs.)
+ \times 4/5
+ { [cis8 ( cis
+
a \translator Staff = treble \stemdown \shifton d
)
- cis]
+ cis] }
\translator Staff = bass
\shiftoff
[bis gis] cis4 |
AFM_CharMetricInfo const *
Adobe_font_metric::find_char_metric (String nm, bool warn) const
{
- if (!name_to_metric_dict_.elem_b (nm))
+ map<String,int>::const_iterator ai = name_to_metric_dict_.find (nm);
+
+ if (ai == name_to_metric_dict_.end ())
{
if (warn)
{
return 0;
}
else
- return font_inf_->cmi + name_to_metric_dict_ [nm];
+ return font_inf_->cmi + (*ai).second;
}
bool
Align_interface::has_interface_b ()
{
- SCM memq = scm_memq (ly_symbol2scm ("Alignment"),
- elt_l_->get_elt_property ("interfaces"));
+ SCM ifs = elt_l_->get_elt_property ("interfaces");
+ if (!gh_pair_p (ifs))
+ return false;
- return (memq != SCM_BOOL_F);
+ return scm_memq (ly_symbol2scm ("Alignment"), ifs) != SCM_BOOL_F;
}
bool
Axis_group_interface::has_interface_b ()
{
- SCM memq = scm_memq (ly_symbol2scm ("Axis_group"),
- elt_l_->get_elt_property ("interfaces"));
-
- return (memq != SCM_BOOL_F);
+ SCM ifs = elt_l_->get_elt_property ("interfaces");
+
+ if (!gh_pair_p (ifs ))
+ return false;
+ return scm_memq (ly_symbol2scm ("Axis_group"),ifs) != SCM_BOOL_F;
}
{
Simple_spacer * sp = new Simple_spacer;
Paper_def * d = pscore_l_->paper_l_;
- sp->compression_energy_factor_f_ = d->get_var ("compression_energy_factor");
sp->default_space_f_ = d->get_var ("loose_column_distance");
sp->indent_f_ = line[LEFT];
Molecule
Chord_name::ly_word2molecule (SCM word) const
{
- Dictionary<SCM> option_dict; // junkme
+ /*
+ junkme.
+
+ Using the dict doesn't save code, since you have to compare
+ dict entries by hand later on anyway.
+
+ */
+ Dictionary<SCM> option_dict;
if (gh_pair_p (word))
{
SCM options = gh_cdr (word);
while (gh_pair_p (options))
{
SCM option = gh_car (options);
- if (option != SCM_UNDEFINED && option != SCM_BOOL_F
- && gh_pair_p (option))
+ if (gh_pair_p (option))
{
SCM key = gh_car (option);
SCM val = gh_cdr (option);
options = gh_cdr (options);
}
}
- Real ex = lookup_l ()->text ("", "x", paper_l ()).extent
- ()[Y_AXIS].length ();
+
+ /*
+ UGH. Should read from font metric structure.
+ */
+ Real ex = lookup_l ()->text ("", "x", paper_l ()).extent(Y_AXIS).length ();
if (gh_string_p (word))
{
String w = ly_scm2string (word);
&& ly_scm2string (option_dict["type"]) == "super")
{
Real super_y = ex / 2;
- //super_y += -acc.extent ()[Y_AXIS][MIN];
+ //super_y += -acc.extent (Y_AXIS)[MIN];
offset = Offset (0, super_y);
if (!size)
size = -2;
Column_x_positions::Column_x_positions()
{
- energy_f_ = infinity_f;
satisfies_constraints_b_ = false;
force_f_ = 0;
}
pad = paper_l ()->get_var ("interline") / 2;
- width -= start_text.extent ()[X_AXIS].length ();
+ width -= start_text.extent (X_AXIS).length ();
width -= pad;
width = width >? 0;
}
Dots::do_brew_molecule () const
{
Molecule mol (lookup_l ()->blank (Box (Interval (0,0),
- Interval (0,0))));
+ Interval (0,0))));
Molecule d = lookup_l ()->afm_find (String ("dots-dot"));
- Real dw = d.dim_[X_AXIS].length ();
+ Real dw = d.extent (X_AXIS).length ();
d.translate_axis (-dw, X_AXIS);
optimal_paths.set_size (breaks.size ());
Break_node first_node ;
- first_node.line_config_.energy_f_ = 0;
optimal_paths[0] = first_node;
int break_idx=1;
Gourlay_breaking::Gourlay_breaking ()
{
- energy_bound_f_ = infinity_f;
}
void
Grace_align_item::before_line_breaking ()
{
- Real nhw = // lookup_l ()->notehead (2, "").dim_[X_AXIS].length();
+ Real nhw = // lookup_l ()->notehead (2, "")..extent (X_AXIS).length();
paper_l ()->get_var ("quartwidth");
set_elt_property ("threshold",
#include "paper-score.hh"
#include "debug.hh"
-void
-Idealspacing::print() const
-{
-#ifndef NPRINT
- DEBUG_OUT << "idealspacing {" ;
- DEBUG_OUT << "distance " << space_f_ << " strength " << hooke_f_;
- DEBUG_OUT << "left " << cols_drul_[LEFT] << " right " << cols_drul_[RIGHT] << "}\n";
-#endif
-}
Idealspacing::Idealspacing()
{
hooke_f_ = 0.0;
cols_drul_[LEFT] = cols_drul_[RIGHT] = -1;
}
-
-void
-Idealspacing::OK() const
-{
- assert (hooke_f_ >= 0);
-}
-
-Real
-Idealspacing::energy_f(Real x) const
-{
- Real dx = (space_f_ - x);
-
- Real e = sqr(dx);
- if ( dx < 0)
- e *= 4; // ugh.
-
- return hooke_f_ * e;
-}
/// helper: solve for the columns in #curline#.
void solve_line (Column_x_positions*) const;
- /// helper: approximate the energyv
- void approximate_solve_line (Column_x_positions*) const;
-
/// does curline fit on the paper?
bool feasible (Link_array<Paper_column>) const;
{
Link_array<Paper_column> cols_;
Array<Real> config_;
-
Real force_f_;
- Real energy_f_;
bool satisfies_constraints_b_;
Column_x_positions();
*/
Real relative_coordinate (Dimension_cache *d) const;
Dimension_cache*common_refpoint (Dimension_cache const* s) const;
- Dimension_cache*common_refpoint (Link_array<Dimension_cache> caches) const;
+
void set_empty (bool);
void translate (Real);
*/
struct Gourlay_breaking : public Break_algorithm
{
- Real energy_bound_f_ ;
-
Array<Column_x_positions> do_solve() const;
Gourlay_breaking();
Real combine_demerits (Column_x_positions const&,Column_x_positions const&) const;
/// the two columns
Drul_array<int> cols_drul_;
- Real energy_f (Real x) const;
- void print() const;
- void OK() const ;
Idealspacing();
};
SCM ly_offset2scm (Offset);
Offset ly_scm2offset (SCM);
+Interval ly_scm2interval (SCM);
+SCM ly_interval2scm (Interval);
+
SCM ly_parse_scm (char const* s, int* n);
SCM ly_quote_scm (SCM s);
SCM ly_type (SCM);
#include "column-x-positions.hh"
#include "spanner.hh"
-/// the columns of a score that form one line. FIXME: multiple inheritance
+/**
+ The columns of a score that form one line. The toplevel element.
+ Any element has a Line_of_score as both X and Y reference
+ point. The Paper_score contains one element of this type. Control
+ enters the Score_element dependency calculation from this single
+ Line_of_score object.
+
+
+ properties:
+
+ all-elements -- list of all score elements in this line. Needed
+ for protecting elements from GC.
+
+ columns -- list of all paper columns
+
+ */
class Line_of_score : public Spanner
{
public:
-/*
- imported the following from Super_element
-
- The toplevel element. The Paper_score contains this element, and any
- element shoud be a dependency for the super element.
- It is the entry point for the "constraint solver"/ dependency
- tracker. Every XXXX_processing () call traverses the entire
- dependency graph, and calls the appropriate
- Score_element::do_XXX_processing function on each Score_element it encounters.
- */
void post_processing();
- void output_all ();
+ /// -> SCM
int rank_i_;
Protected_scm output_;
/// is #c# contained in #*this#?
bool contains_b (Paper_column const *c) const;
- static int compare (Line_of_score* const &,Line_of_score* const &);
void break_into_pieces (Array<Column_x_positions> const&);
-
- SCM output_lines ();
-
+ void output_lines ();
Link_array<Item> broken_col_range (Item const*, Item const*) const;
Link_array<Paper_column> column_l_arr () const;
class Molecule {
/// can't alloc on heap.
void * operator new (size_t s);
-public:
Box dim_;
SCM expr_;
+
+public:
+
+ SCM get_expr () const;
Molecule (Box, SCM s);
Molecule();
*/
void align_to (Axis a, Direction d);
void translate_axis (Real,Axis);
-
-
- /// how big is #this#?
- Box extent() const;
Interval extent (Axis) const;
bool empty_b() const;
-
-
- /*******/
};
SCM fontify_atom (Font_metric*, SCM atom);
/*
ugh.
+
+ TODO:
+
+ * junk these after spacing is done.
+
+ * Put these in Scheme.
*/
- Drul_array<Array<Column_rod> > minimal_dists_arr_drul_;
- Drul_array<Array<Column_spring> > spring_arr_drul_;
+ Array<Column_rod> minimal_dists_;
+ Array<Column_spring > springs_;
/// set a minimum distance
void add_rod (Paper_column * to, Real distance);
bool musical_b () const;
void set_rank (int);
- virtual void do_print() const;
private:
/**
*/
class Paper_outputter
{
-public:
+#if 0
Protected_scm molecules_;
SCM last_cons_;
- Paper_outputter ();
+#endif
+
+ bool verbatim_scheme_b_;
+ Paper_stream * stream_p_;
+public:
+ /**
+ Assumes responsibility for deletion of P
+ */
+ Paper_outputter (Paper_stream*p);
+ ~Paper_outputter ();
+
+ void dump_scheme (SCM);
- void dump_onto (Paper_stream *);
void output_int_def (String k, int v);
void output_Real_def (String k, Real v);
void output_String_def (String k, String v);
Column_rod ();
static int compare (const Column_rod &r1, const Column_rod &r2);
- void print () const;
};
{
Drul_array <Item*> item_l_drul_;
Real distance_f_;
+
+ /**
+ translate the rod so as to refer to Paper_columns
+ */
+ void columnize ();
+
void add_to_cols ();
Rod ();
Score_element::calcalute_dependencies ()
0 means ORPHAN,
- -1 means deleted
-
*/
- int status_i_;
+ char status_i_;
+ /**
+ Set this if anyone points to me, or if I point to anyone.
+ JUNKME.
+ */
+ bool used_b_;
+
+ char const * name () const;
+
Paper_score *pscore_l_;
Score_element ();
virtual void before_line_breaking ();
/// do calculations after determining horizontal spacing
virtual void after_line_breaking ();
- virtual void output_processing ();
-
+
+ Molecule get_molecule () const;
+ void suicide ();
static Interval preset_extent (Dimension_cache const*);
static Interval molecule_extent (Dimension_cache const*);
public:
Dimension_cache *dim_cache_[NO_AXES];
- /**
- Set this if anyone points to me, or if I point to anyone.
-
- JUNKME.
- */
- bool used_b_;
-
- char const * name () const;
-
bool empty_b (Axis a) const;
Interval extent (Axis) const;
Find the group-element which has both #this# and #s#
*/
Score_element*common_refpoint (Score_element const* s, Axis a) const;
- Score_element*common_refpoint (Link_array<Score_element> elems, Axis a) const;
-
+ Score_element*common_refpoint (SCM elt_list, Axis a) const;
bool has_offset_callback_b (Offset_cache_callback, Axis)const;
void add_offset_callback (Offset_cache_callback, Axis);
Real length (Real force) const;
Spring_description ();
- Real energy_f (Real) const;
+
bool sane_b () const;
};
Real indent_f_;
Real line_len_f_;
Real default_space_f_;
- Real compression_energy_factor_f_;
+
Simple_spacer ();
Real active_blocking_force ()const;
Real configuration_length ()const;
void set_active_states ();
- Real energy_f () const;
-
bool active_b () const;
};
Column_spring ();
static int compare (const Column_spring &r1, const Column_spring &r2);
- void print () const;
};
struct Spring{
TODO
- space the `natural' signs wider
-
-
*/
Molecule
#include "debug.hh"
#include "direction.hh"
#include "offset.hh"
+#include "interval.hh"
SCM
ly_str02scm (char const*c)
return (Direction) gh_scm2int (s);
}
+Interval
+ly_scm2interval (SCM p)
+{
+ return Interval (gh_scm2double (gh_car (p)),
+ gh_scm2double (gh_cdr (p)));
+}
+SCM
+ly_interval2scm (Interval i)
+{
+ return gh_cons (gh_double2scm (i[LEFT]),
+ gh_double2scm (i[RIGHT]));
+}
bool
#include "string.hh"
#include "warn.hh"
#include "dimensions.hh"
+#include "molecule.hh"
+#include "all-font-metrics.hh"
Line_of_score::Line_of_score()
{
/*
Ugh. this is grossly hairy.
*/
-
void
Line_of_score::typeset_element (Score_element * elem_p)
{
scm_unprotect_object (elem_p->self_scm_);
}
-SCM
+void
Line_of_score::output_lines ()
{
for (SCM s = get_elt_property ("all-elements");
}
/*
- fixups must be done in broken line_of_scores, because new elements are put over there.
- */
+ fixups must be done in broken line_of_scores, because new elements
+ are put over there. */
for (int i=0; i < broken_into_l_arr_.size (); i++)
{
Score_element *se = broken_into_l_arr_[i];
progress_indication (to_str (i));
progress_indication ("]");
}
-
- SCM list = SCM_EOL;
- for (int i=broken_into_l_arr_.size (); i--;)
- {
- Line_of_score * l = dynamic_cast<Line_of_score*> (broken_into_l_arr_[i]);
- list = gh_cons (gh_cdr (l->output_), list);
- }
- return list;
}
// const?
}
else
{
- output_scheme (gh_list (ly_symbol2scm ("placebox"),
- gh_double2scm (o[X_AXIS]),
- gh_double2scm (o[Y_AXIS]),
- expr,
- SCM_UNDEFINED));
+ pscore_l_->outputter_l_->
+ output_scheme (gh_list (ly_symbol2scm ("placebox"),
+ gh_double2scm (o[X_AXIS]),
+ gh_double2scm (o[Y_AXIS]),
+ expr,
+ SCM_UNDEFINED));
}
}
void
Line_of_score::output_scheme (SCM s)
{
- gh_set_cdr_x (output_, gh_cons (s, gh_cdr (output_)));
+ pscore_l_->outputter_l_->output_scheme (s);
}
void
Link_array<Paper_column>
Line_of_score::column_l_arr ()const
{
- return Group_interface__extract_elements (this,
- (Paper_column*) 0, "columns");
-
-}
-
-int
-Line_of_score::compare (Line_of_score* const &p1,Line_of_score* const &p2)
-{
- return p1->rank_i_ - p2->rank_i_;
+ Link_array<Paper_column> acs
+ = Group_interface__extract_elements (this, (Paper_column*) 0, "columns");
+ bool bfound = false;
+ for (int i= acs.size (); i -- ; )
+ {
+ bool brb = acs[i]->breakable_b();
+ bfound = bfound || brb;
+
+ /*
+ the last column should be breakable. Weed out any columns that
+ seem empty. We need to retain breakable columns, in case
+ someone forced a breakpoint.
+ */
+ if (!bfound
+ || (acs[i]->get_elt_property ("elements") == SCM_EOL
+ && !brb))
+ acs.del (i);
+ }
+ return acs;
}
-
void
fixup_refpoints (SCM s)
{
height = 50 CM;
}
- output_ = gh_cons (SCM_EOL, SCM_EOL);
- output_scheme (gh_list (ly_symbol2scm ("stop-line"), SCM_UNDEFINED));
+ /*
+ generate all molecules to trigger all font loads.
+
+ (ugh. This is not very memory efficient.) */
for (SCM s = get_elt_property ("all-elements"); gh_pair_p (s); s = gh_cdr (s))
- unsmob_element (gh_car (s))->output_processing ();
+ unsmob_element (gh_car (s))->get_molecule ();
+
+ /*
+ font defs;
+ */
+ SCM font_names = ly_quote_scm (all_fonts_global_p->font_descriptions ());
+ output_scheme (gh_list (ly_symbol2scm ("define-fonts"),
+ font_names,
+ SCM_UNDEFINED));
+
+ /*
+ line preamble.
+ */
output_scheme (gh_list (ly_symbol2scm ("start-line"),
gh_double2scm (height),
SCM_UNDEFINED));
-}
+
+ Real il = paper_l ()->get_var ("interline");
-void
-Line_of_score::output_all ()
-{
- calculate_dependencies (BREWED, BREWING, &Score_element::output_processing);
+ /*
+ all elements.
+ */
+ for (SCM s = get_elt_property ("all-elements"); gh_pair_p (s); s = gh_cdr (s))
+ {
+ Score_element * sc = unsmob_element (gh_car (s));
+ Molecule m = sc->get_molecule ();
+
+ Offset o (sc->relative_coordinate (this, X_AXIS),
+ sc->relative_coordinate (this, Y_AXIS));
+
+ SCM e = sc->get_elt_property ("extra-offset");
+ if (gh_pair_p (e))
+ {
+ o[X_AXIS] += il * gh_scm2double (gh_car (e));
+ o[Y_AXIS] += il * gh_scm2double (gh_cdr (e));
+ }
+
+ output_molecule (m.get_expr (), o);
+ }
+ output_scheme (gh_list (ly_symbol2scm ("stop-line"), SCM_UNDEFINED));
}
+
Link_array<Item>
Line_of_score::broken_col_range (Item const*l, Item const*r) const
{
Molecule
Lookup::blank (Box b)
{
- Molecule m;
- m.dim_ = b;
- return m;
+ return Molecule (b, SCM_EOL);
}
(c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
-/*
- ugh. Rewrite not finished yet. Still must copy atom lists.
- */
-
-
#include <math.h>
#include "font-metric.hh"
#include "interval.hh"
#include "string.hh"
#include "molecule.hh"
-
#include "debug.hh"
#include "killing-cons.tcc"
-
-Box
-Molecule::extent() const
-{
- return dim_;
-}
-
Interval
Molecule::extent(Axis a) const
{
Molecule::Molecule (Box b, SCM func)
{
expr_ = func;
- dim_ = b ;
+ dim_ = b;
}
Molecule::Molecule()
translate_axis (-r, a);
}
-
void
Molecule::add_at_edge (Axis a, Direction d, Molecule const &m, Real padding)
{
Real my_extent= empty_b () ? 0.0 : dim_[a][d];
- Interval i (m.extent ()[a]);
+ Interval i (m.extent (a));
if (i.empty_b ())
programming_error ("Molecule::add_at_edge: adding empty molecule.");
return expr_ == SCM_EOL;
}
-
SCM
fontify_atom(Font_metric * met, SCM f)
{
return gh_list (ly_symbol2scm ("fontify"),
ly_quote_scm (met->description ()), f, SCM_UNDEFINED);
}
+
+SCM
+Molecule::get_expr () const
+{
+ return expr_;
+}
if (translator_p_dict_p_->elem_b (name))
return translator_p_dict_p_->elem (name)->access_content_Translator_group (false);
- if (global_translator_dict_p->elem_b (name))
- return global_translator_dict_p->elem(name);
+ map<String, Translator*>::const_iterator ki
+ =global_translator_dict_p->find (name);
+
+ if (ki != global_translator_dict_p->end ())
+ return (*ki).second ;
return 0;
}
Molecule *e = &endings[LEFT];
endings[RIGHT] = *e;
- Real thick = e->dim_[Y_AXIS].length();
- Real len = e->dim_[X_AXIS].length () - thick;
+ Real thick = e->extent (Y_AXIS).length();
+ Real len = e->extent (X_AXIS).length () - thick;
Molecule total;
Direction d = LEFT;
do {
- endings[d].translate_axis (xwid[d] - endings[d].dim_[X_AXIS][d], X_AXIS);
+ endings[d].translate_axis (xwid[d] - endings[d].extent (X_AXIS)[d], X_AXIS);
total.add_molecule (endings[d]);
} while ((flip(&d)) != LEFT);
ly_quote_scm(style),
SCM_UNDEFINED))));
- Box ledgerless = out.dim_;
-
if (streepjes_i)
{
Direction dir = (Direction)sign (p);
- Interval hd = out.dim_[X_AXIS];
+ Interval hd = out.extent (X_AXIS);
Real hw = hd.length ()/4;
-
Molecule ledger (ledger_line (Interval (hd[LEFT] - hw,
hd[RIGHT] + hw)));
+
+ ledger.set_empty (true);
int parity = abs(int (p)) % 2;
for (int i=0; i < streepjes_i; i++)
out.add_molecule (s);
}
}
-
- out.dim_ = ledgerless;
return out;
}
{
Direction dir = Direction (sign (p->rank_i () - rank_i ()));
- if (!dir)
+ if (dir != RIGHT)
{
- programming_error ("Must set minimum distance between differing columns.");
+ programming_error ("Must set minimum distance LTOR.");
return;
}
- for (int i=0; i < minimal_dists_arr_drul_[dir].size (); i++)
+ for (int i=0; i < minimal_dists_.size (); i++)
{
- Column_rod &rod = minimal_dists_arr_drul_[dir][i];
+ Column_rod &rod = minimal_dists_[i];
if (rod.other_l_ == p)
{
rod.distance_f_ = rod.distance_f_ >? d;
cr.distance_f_ = d;
cr.other_l_ = p;
- minimal_dists_arr_drul_[dir].push (cr);
+ minimal_dists_.push (cr);
}
void
{
Direction dir = Direction (sign (p->rank_i () - rank_i ()));
- if (!dir)
+ if (dir != RIGHT)
{
- warning (_ ("Must set spring between differing columns"));
+ programming_error ("Must set springs LTOR");
return;
}
- for (int i=0; i < spring_arr_drul_[dir].size (); i++)
+ for (int i=0; i < springs_.size (); i++)
{
- Column_spring &spring = spring_arr_drul_[dir][i];
+ Column_spring &spring = springs_[i];
if (spring.other_l_ == p)
{
spring.distance_f_ = spring.distance_f_ >? d;
cr.strength_f_ = s;
cr.other_l_ = p;
- spring_arr_drul_[dir].push (cr);
+ springs_.push (cr);
}
int
rank_i_ = i;
}
-void
-Paper_column::do_print() const
-{
-#ifndef NPRINT
- DEBUG_OUT << "rank: " << rank_i_ << '\n';
- Direction d = LEFT;
- do
- {
- for (int i=0; i < minimal_dists_arr_drul_[d].size (); i++)
- {
- minimal_dists_arr_drul_[d][i].print ();
- }
- for (int i=0; i < spring_arr_drul_[d].size (); i++)
- {
- spring_arr_drul_[d][i].print ();
- }
-
- }
- while ((flip (&d))!=LEFT);
- Item::do_print ();
-#endif
-}
+
Line_of_score*
Paper_column::line_l() const
Ugh, this is messy.
*/
-Paper_outputter::Paper_outputter ()
+Paper_outputter::Paper_outputter (Paper_stream * ps )
{
+#if 0
molecules_ = gh_cons (SCM_EOL, SCM_EOL);
last_cons_ = molecules_;
+#endif
+
+ /*
+ lilypond -f scm x.ly
+ guile -s x.scm
+ */
+ verbatim_scheme_b_ = output_global_ch == String ("scm");
+
+ if (verbatim_scheme_b_)
+ {
+ *ps << ""
+ ";;; Usage: guile -s x.scm > x.tex\n"
+ "(primitive-load-path 'lily.scm)\n"
+ "(scm-tex-output)\n"
+ ";(scm-ps-output)\n"
+ "(map (lambda (x) (display (eval x))) '(\n"
+ ;
+ }
+
+ stream_p_ = ps;
+}
+
+Paper_outputter::~Paper_outputter ()
+{
+ if (verbatim_scheme_b_)
+ {
+ *stream_p_ << "))";
+ }
+ delete stream_p_;
}
void
Paper_outputter::output_scheme (SCM scm)
{
+#if 0
SCM c = gh_cons (scm,gh_cdr (last_cons_));
gh_set_cdr_x(last_cons_, c);
last_cons_ = c;
+#endif
+
+ dump_scheme (scm);
}
+#if 0
void
-Paper_outputter::dump_onto (Paper_stream *ps)
+Paper_outputter::dump ()
{
- if (String (output_global_ch) == "scm")
-#if 1 // both are fine
+
+ for (SCM s = gh_cdr (molecules_); gh_pair_p (s); s = gh_cdr (s))
{
- /*
- default to stdin
- */
- int fd = 1;
- if (ofstream* of = dynamic_cast<ofstream*> (ps->os))
- fd = of->rdbuf ()->fd ();
- SCM port = scm_fdes_to_port (fd, "a", SCM_EOL);
-
- /*
- lilypond -f scm x.ly
- guile -s x.scm
- */
- scm_display (gh_str02scm (
- ";;; Usage: guile -s x.scm > x.tex\n"
- "(primitive-load-path 'lily.scm)\n"
- "(scm-as-output)\n"
- ";(scm-tex-output)\n"
- ";(scm-ps-output)\n"
- "(map (lambda (x) (display (eval x))) '(\n"
- ), port);
-
- SCM newline = gh_str02scm ("\n");
- for (SCM s = gh_cdr (molecules_); gh_pair_p (s); s = gh_cdr (s))
- {
- scm_write (gh_car (s), port);
- scm_display (newline, port);
- scm_flush (port);
- }
- scm_display (gh_str02scm ("))"), port);
- scm_display (newline, port);
- scm_flush (port);
- scm_close_port (port);
+ dump_scheme (gh_car (s));
}
-#else
+}
+#endif
+
+void
+Paper_outputter::dump_scheme (SCM s)
+{
+ if (verbatim_scheme_b_)
{
- /*
- lilypond -f scm x.ly
- guile -s x.scm
- */
- if (output_global_ch == String ("scm"))
- *ps << ""
- ";;; Usage: guile -s x.scm > x.tex\n"
- "(primitive-load-path 'lily.scm)\n"
- "(scm-tex-output)\n"
- ";(scm-ps-output)\n"
- "(map (lambda (x) (display (eval x))) '(\n"
- ;
- for (SCM s = gh_cdr (molecules_); gh_pair_p (s); s = gh_cdr (s))
- {
- SCM result = scm_eval (scm_listify (ly_symbol2scm ("scm->string"),
- ly_quote_scm (gh_car (s)), SCM_UNDEFINED));
+ SCM result = scm_eval (scm_listify (ly_symbol2scm ("scm->string"),
+ ly_quote_scm (gh_car (s)), SCM_UNDEFINED));
- *ps << ly_scm2string (result);
- }
- *ps << "))";
+ *stream_p_ << ly_scm2string (result);
}
-#endif
-
else
{
- for (SCM s = gh_cdr (molecules_); gh_pair_p (s); s = gh_cdr (s))
- {
- SCM result = scm_eval (gh_car (s));
- char *c=gh_scm2newstr (result, NULL);
-
- *ps << c;
- free (c);
- }
- }
+ SCM result = scm_eval (s);
+ char *c=gh_scm2newstr (result, NULL);
+
+ *stream_p_ << c;
+ free (c);
+ }
}
-
void
Paper_outputter::output_scope (Scope *scope, String prefix)
{
ly_str02scm (to_str(v).ch_l ()),
SCM_UNDEFINED);
output_scheme (scm);
-
- // gh_define (k.ch_l (), gh_double2scm (v));
}
void
ly_str02scm (v.ch_l ()),
SCM_UNDEFINED);
output_scheme (scm);
-
- // gh_define (k.ch_l (), ly_str02scm (v.ch_l ()));
}
void
ly_str02scm (to_str (v).ch_l ()),
SCM_UNDEFINED);
output_scheme (scm);
-
- // gh_define (k.ch_l (), gh_int2scm (v));
}
Array<Column_x_positions> breaking = calc_breaking ();
line_l_->break_into_pieces (breaking);
- SCM lines = line_l_->output_lines ();
- outputter_l_ = new Paper_outputter ;
+ outputter_l_ = new Paper_outputter (paper_l_->paper_stream_p ());
+;
outputter_l_->output_header ();
outputter_l_->output_version();
scm = gh_list (ly_symbol2scm ("header-end"), SCM_UNDEFINED);
outputter_l_->output_scheme (scm);
- SCM font_names = ly_quote_scm (all_fonts_global_p->font_descriptions ());
- outputter_l_->output_scheme (gh_list (ly_symbol2scm ("define-fonts"),
- font_names,
- SCM_UNDEFINED));
-
- for (SCM i = lines ; gh_pair_p (i); i = gh_cdr (i))
- for (SCM j = gh_car (i) ; gh_pair_p (j); j = gh_cdr (j))
- outputter_l_->output_scheme (gh_car (j));
+ line_l_->output_lines ();
+
scm = gh_list (ly_symbol2scm ("end-output"), SCM_UNDEFINED);
outputter_l_->output_scheme (scm);
-
- Paper_stream* psp = paper_l_->paper_stream_p ();
- outputter_l_->dump_onto (psp);
// huh?
delete outputter_l_;
outputter_l_ = 0;
- delete psp;
}
item_l_drul_[LEFT] = item_l_drul_[RIGHT] =0;
}
-void
-Column_rod::print () const
-{
-#ifndef NDEBUG
- DEBUG_OUT << "Column_rod { rank = "
- << other_l_->rank_i () << ", dist = " << distance_f_ << "}\n";
-#endif
-}
Column_rod::Column_rod ()
{
return r1.other_l_->rank_i() - r2.other_l_->rank_i();
}
+
void
-Rod::add_to_cols ()
+Rod::columnize ()
{
Direction d = LEFT;
- Drul_array<Paper_column*> cols;
- Real extra_dist = 0.0;
do {
- cols[d] = item_l_drul_[d]->column_l ();
- extra_dist += item_l_drul_[d]->relative_coordinate (cols[d], X_AXIS);
+ Paper_column * pc = item_l_drul_[d]->column_l ();
+ distance_f_ += - d * item_l_drul_[d]->relative_coordinate (pc, X_AXIS);
+ item_l_drul_[d] = pc;
} while ((flip (&d))!=LEFT);
- if (cols[LEFT] != cols[RIGHT])
- do
- {
- cols[-d]->add_rod(cols[d], distance_f_ + extra_dist);
- }
- while ((flip (&d))!=LEFT);
+}
+
+void
+Rod::add_to_cols ()
+{
+ columnize();
+ if (item_l_drul_[LEFT] != item_l_drul_[RIGHT])
+ dynamic_cast<Paper_column*> (item_l_drul_[LEFT])->
+ add_rod(dynamic_cast<Paper_column*>(item_l_drul_[RIGHT]), distance_f_ );
}
Score_element::~Score_element()
{
- assert (status_i_ >=0);
- status_i_ = -1;
-
delete dim_cache_[X_AXIS];
delete dim_cache_[Y_AXIS];
}
{
Score_element *s = dynamic_cast<Score_element*>(c->element_l());
Molecule m = s->do_brew_molecule();
- return m.extent()[c->axis ()];
+ return m.extent(c->axis ());
}
Interval
status_i_= final;
}
-void
-Score_element::output_processing ()
+Molecule
+Score_element::get_molecule () const
{
if (to_boolean (get_elt_property ("transparent")))
- return;
-
- Molecule m (do_brew_molecule ());
- Offset o (relative_coordinate (0, X_AXIS), relative_coordinate (0, Y_AXIS));
+ return Molecule ();
- SCM s = get_elt_property ("extra-offset");
- if (gh_pair_p (s))
- {
- Real il = paper_l ()->get_var ("interline");
- o[X_AXIS] += il * gh_scm2double (gh_car (s));
- o[Y_AXIS] += il * gh_scm2double (gh_cdr (s));
- }
-
- line_l ()->output_molecule (m.expr_, o);
+ return do_brew_molecule ();
}
+
/*
VIRTUAL STUBS
}
else
{
- Line_of_score * line = dynamic_cast<Line_of_score*> (unsmob_element ( criterion));
- Line_of_score * dep_line = sc->line_l ();
- if (dep_line != line)
+ Line_of_score * line
+ = dynamic_cast<Line_of_score*> (unsmob_element (criterion));
+ if (sc->line_l () != line)
{
- Score_element * br = sc->find_broken_piece (line);
- return (br) ? br->self_scm_ : SCM_UNDEFINED;
+ sc = sc->find_broken_piece (line);
+
}
- if (line
- && (!dep_line
- || !sc->common_refpoint (line, X_AXIS)
- || !sc->common_refpoint (line, Y_AXIS)))
+
+ /* now: !sc || (sc && sc->line_l () == line) */
+ if (!sc)
+ return SCM_UNDEFINED;
+
+ /* now: sc && sc->line_l () == line */
+ if (!line
+ || (sc->common_refpoint (line, X_AXIS)
+ && sc->common_refpoint (line, Y_AXIS)))
{
- return SCM_UNDEFINED;
+ return sc->self_scm_;
}
+ return SCM_UNDEFINED;
}
}
else if (gh_pair_p (src))
= handle_broken_smobs (element_property_alist_,
line ? line->self_scm_ : SCM_UNDEFINED);
}
- else if (!dynamic_cast <Line_of_score*> (this))
+ else if (dynamic_cast <Line_of_score*> (this))
+ {
+ element_property_alist_ = handle_broken_smobs (element_property_alist_,
+ SCM_UNDEFINED);
+ }
+ else
{
/*
This element is `invalid'; it has been removed from all
dependencies, so let's junk the element itself.
- do not do this for Line_of_score , since that would free
- up originals of score-elts (a bad thing.)
+ do not do this for Line_of_score, since that would remove
+ references to the originals of score-elts, which get then GC'd
+ (a bad thing.)
*/
-
- element_property_alist_ = SCM_EOL;
- set_extent_callback (0, Y_AXIS);
- set_extent_callback (0, X_AXIS);
+ suicide();
}
}
+/*
+ Note that we still want references to this element to be
+ rearranged, and not silently thrown away, so we keep pointers
+ like {broken_into_{drul,array}, original}
+*/
+void
+Score_element::suicide ()
+{
+ element_property_alist_ = SCM_EOL;
+ set_extent_callback (0, Y_AXIS);
+ set_extent_callback (0, X_AXIS);
+}
+
+
void
Score_element::handle_prebroken_dependencies()
{
return dim_cache_[a]->relative_coordinate (e ? e->dim_cache_[a] : 0);
}
-Score_element *
-Score_element::common_refpoint (Score_element const* s, Axis a) const
-{
- Dimension_cache *dim = dim_cache_[a]->common_refpoint (s->dim_cache_[a]);
- return dim ? dim->element_l () : 0;
-}
-
bool
Score_element::empty_b (Axis a)const
{
return d ? d->elt_l_ : 0;
}
+Score_element *
+Score_element::common_refpoint (Score_element const* s, Axis a) const
+{
+ Dimension_cache *dim = dim_cache_[a]->common_refpoint (s->dim_cache_[a]);
+ return dim ? dim->element_l () : 0;
+}
+
+
Score_element *
-Score_element::common_refpoint (Link_array<Score_element> gs, Axis a) const
+Score_element::common_refpoint (SCM elist, Axis a) const
{
- Dimension_cache * common = dim_cache_[a];
- for (int i=0; i < gs.size (); i++)
+ Score_element * common = (Score_element*) this;
+ for (; gh_pair_p (elist); elist = gh_cdr (elist))
{
- common = common->common_refpoint (gs[i]->dim_cache_[a]);
+ Score_element * s = unsmob_element (gh_car (elist));
+ if (s)
+ common = common->common_refpoint (s, a);
}
- return common->element_l ();
+ return common;
}
char const *
make_rod (Single_malt_grouping_item *l, Single_malt_grouping_item *r)
{
Rod rod;
- rod.item_l_drul_[LEFT] =l;
- rod.item_l_drul_[RIGHT]=r;
Interval li (l->my_width ());
Interval ri (r->my_width ());
-
+
+ rod.item_l_drul_[LEFT] =l;
+ rod.item_l_drul_[RIGHT]=r;
+
if (li.empty_b () || ri.empty_b ())
rod.distance_f_ = 0;
else
rod.distance_f_ = li[RIGHT] - ri[LEFT];
+ rod.columnize ();
return rod;
}
a.push (rod);
}
}
-
+
+ /*
+ We've done our job, so we get lost.
+ */
+ for (SCM s = get_elt_property ("elements"); gh_pair_p (s); s = gh_cdr (s))
+ {
+ Item * it =dynamic_cast<Item*>(unsmob_element (gh_car (s)));
+ if (it && it->broken_b ())
+ {
+ it->find_prebroken_piece (LEFT) ->suicide ();
+ it->find_prebroken_piece (RIGHT)->suicide ();
+ }
+ it->suicide ();
+ }
+
+ ((Separating_group_spanner *)this)->suicide ();
+
return a;
}
TODO:
- add support for different stretch/shrink constants?
- - Use force as a minimizing function, and use it to discourage mixes of
- wide and tight lines.
*/
force_f_ = 0.;
indent_f_ =0.0;
default_space_f_ = 20 PT;
- compression_energy_factor_f_ = 3.0;
}
void
{
Paper_column * c = cols [i];
Column_spring *to_next = 0;
- for (int j =0; !to_next && j < c->spring_arr_drul_[RIGHT].size( ); j++)
+ for (int j =0; !to_next && j < c->springs_.size( ); j++)
{
- Column_spring &sp = c->spring_arr_drul_[RIGHT] [j];
+ Column_spring &sp = c->springs_ [j];
if (sp.other_l_ != cols[i+1])
continue;
if (!desc.sane_b ())
{
- programming_error ("Insane spring.");
- continue;
+ programming_error ("Insane spring found. Setting to unit spring.");
+ desc.hooke_f_ = 1.0;
+ desc.ideal_f_ = 1.0;
}
desc.block_force_f_ = - desc.hooke_f_ * desc.ideal_f_; // block at distance 0
for (int i=0; i < cols.size () - 1; i++)
{
- Array<Column_rod> * rods = &cols [i]->minimal_dists_arr_drul_[RIGHT];
+ Array<Column_rod> * rods = &cols [i]->minimal_dists_;
for (int j =0; j < rods->size( ); j++)
{
int oi = cols.find_i (rods->elem (j).other_l_ );
}
}
+ /*
+ TODO: should support natural length on only the last line.
+ */
if (line_len_f_ < 0)
my_solve_natural_len ();
else
void
Simple_spacer::solve (Column_x_positions *positions) const
{
- positions->energy_f_ = energy_f (); // abs (force_f_);
positions->force_f_ = force_f_;
positions->config_.push (indent_f_);
block_force_f_ = 0.0;
}
-Real
-Spring_description::energy_f (Real force) const
-{
- Real stretch = (force >? block_force_f_) / hooke_f_;
- Real e = 0.5 * stretch * stretch * hooke_f_;
- return e;
-}
bool
Spring_description::sane_b () const
}
-Real
-Simple_spacer::energy_f () const
-{
- Real e =0.;
-
- for (int i=0; i <springs_.size (); i++)
- {
- e += springs_[i].energy_f (force_f_);
- }
-
- if (force_f_ < 0)
- e *= compression_energy_factor_f_;
-
- return e;
-}
stretch_dist += right_dist;
if (s.distance_f_ <0)
- programming_error("negative dist");
-
+ {
+ programming_error("Negative dist, setting to 1.0 PT");
+ s.distance_f_ = 1.0;
+ }
if (stretch_dist == 0.0)
{
/*
Spacing_spanner::get_springs () const
{
Array<Spring> springs;
-
- SCM last_col = pscore_l_->line_l_->get_elt_property ("columns");
- Link_array<Paper_column> measure;
- for (SCM s = last_col; gh_pair_p (s); s = gh_cdr (s))
+
+ Link_array<Paper_column> all (pscore_l_->line_l_->column_l_arr ()) ;
+
+ int j = 0;
+
+ for (int i = 1; i < all.size (); i++)
{
- Score_element * elt = unsmob_element (gh_car (s));
- Paper_column* sc = dynamic_cast<Paper_column*> (elt);
- measure.push (sc);
+ Paper_column* sc = dynamic_cast<Paper_column*> (all[i]);
if (sc->breakable_b ())
{
- measure.reverse ();
+ Link_array<Paper_column> measure (all.slice (j, i+1));
springs.concat (do_measure (measure));
- measure.clear ();
- measure.push (sc);
+ j = i;
}
}
+
+ /*
+ farewell, cruel world
+ */
+ ((Spacing_spanner*)this)->suicide ();
+
return springs;
}
//break_into_pieces
Item * left = spanned_drul_[LEFT];
Item * right = spanned_drul_[RIGHT];
+
+ if (!left || !right)
+ return;
if (left == right)
{
Direction d = LEFT;
do
{
- Item *&pc_l = bounds[d] ;
- if (!pc_l->line_l())
- pc_l = pc_l->find_prebroken_piece(- d);
-
- assert (pc_l);
+ if (!bounds[d]->line_l())
+ bounds[d] = bounds[d]->find_prebroken_piece(- d);
}
while ((flip(&d))!= LEFT);
+ if (!bounds[LEFT] || ! bounds[RIGHT])
+ {
+ programming_error ("bounds of this piece aren't breakable. ");
+ continue;
+ }
+
Spanner *span_p = dynamic_cast<Spanner*>(clone ());
span_p->set_bound(LEFT,bounds[LEFT]);
span_p->set_bound(RIGHT,bounds[RIGHT]);
}
/**
- Prevent the column -> line_of_score -> column -> line_of_score -> etc situation
- */
+ We check for Line_of_score to prevent the column -> line_of_score
+ -> column -> line_of_score -> etc situation */
if (d== LEFT && !dynamic_cast<Line_of_score*> (this))
{
set_parent (i, X_AXIS);
void
Spring::add_to_cols ()
{
- Direction d = LEFT;
- do
- {
- item_l_drul_[-d]->column_l ()->add_spring
- (item_l_drul_[d]->column_l (),
- distance_f_, strength_f_);
- }
- while ((flip (&d))!=LEFT);
+ item_l_drul_[LEFT]->column_l ()->add_spring (item_l_drul_[RIGHT]->column_l (), distance_f_, strength_f_);
}
return r1.other_l_->rank_i() - r2.other_l_->rank_i();
}
-void
-Column_spring::print () const
-{
-#ifndef NPRINT
- DEBUG_OUT << "Column_spring { rank = "
- << other_l_->rank_i () << ", dist = " << distance_f_ << "}\n";
-
-#endif
-}
mol.add_molecule (b);
}
if (tremolo_flags)
- mol.translate_axis (-mol.extent ()[Y_AXIS].center (), Y_AXIS);
+ mol.translate_axis (-mol.extent (Y_AXIS).center (), Y_AXIS);
Real half_space = Staff_symbol_referencer_interface (stem).staff_space ()
/ 2;
Beams should intersect one beamthickness below stem end
*/
Real dy = stem->stem_end_position () * half_space;
- dy -= mol.extent ()[Y_AXIS].length () / 2 * stem->get_direction ();
+ dy -= mol.extent (Y_AXIS).length () / 2 * stem->get_direction ();
/*
uhg. Should use relative coords and placement
; // TODO!
else
{
- r = s->flag ().dim_.x ();
+ r = s->flag ().extent (X_AXIS);
}
return r;
}
Real h = height + 2 * arc_height;
Box b (Interval (0, 1.5 * staff_space), Interval (-h/2, h/2));
Molecule mol (b, at);
-
- mol.translate_axis (- mol.dim_[X_AXIS].length () / 2, X_AXIS);
+ mol.align_to (X_AXIS, CENTER);
return mol;
}
SCM s = get_elt_property ("word-space");
if (gh_number_p (s))
- mol.dim_.interval_a_[X_AXIS][RIGHT] += gh_scm2double (s)
- * staff_symbol_referencer (this).staff_space ();
-
+ {
+ Molecule m;
+ m.set_empty (false);
+ mol.add_at_edge (X_AXIS, RIGHT, m, gh_scm2double (s)*
+ staff_symbol_referencer (this).staff_space ());
+ }
return mol;
}
if (!global_translator_dict_p)
global_translator_dict_p = new Dictionary<Translator*>;
- global_translator_dict_p->elem (classname (t)) = t;
+ (*global_translator_dict_p)[classname (t)] = t;
}
Translator*
Link_array<Note_column> column_arr=
Group_interface__extract_elements (this, (Note_column*)0, "columns");
-
+
+ Score_element * common = common_refpoint (get_elt_property ("columns"), Y_AXIS);
+
Direction d = directional_element (this).get ();
/*
if (l < r)
{
- *dy = column_arr[r]->extent (Y_AXIS) [d]
- - column_arr[l]->extent (Y_AXIS) [d];
+ *dy = column_arr[r]->extent (Y_AXIS) [d] + column_arr[r]->relative_coordinate (common, Y_AXIS)
+ - column_arr[l]->extent (Y_AXIS) [d] - column_arr[l]->relative_coordinate (common, Y_AXIS);
}
else
* dy = 0;
for (int i = 0; i < column_arr.size (); i++)
{
- Real notey = column_arr[i]->extent (Y_AXIS)[d];
+ Real notey = column_arr[i]->extent (Y_AXIS)[d] +
+ column_arr[i]->relative_coordinate (common, Y_AXIS)
+ ;
Real x = column_arr[i]->relative_coordinate (0, X_AXIS) - x0;
Real tuplety = *dy * x * factor;
--
- Should look for system_start_delim to find left edge of staff.
+ * Should look for system_start_delim to find left edge of staff.
+
+
*/
Molecule
Volta_spanner::do_brew_molecule () const
Real staff_space = paper_l ()->get_var ("interline");
Real half_space = staff_space / 2;
- Real w = spanner_length () - get_broken_left_end_align () - half_space;
+ Real w = spanner_length ()
+ - get_broken_left_end_align ()
+ - half_space;
Real h = paper_l()->get_var ("volta_spanner_height");
Real t = paper_l ()->get_var ("volta_thick");
gh_int2scm (no_vertical_start),
gh_int2scm (no_vertical_end),
SCM_UNDEFINED));
- //Box b (Interval (0, w), Interval (- h/2, h/2));
+
Box b (Interval (0, w), Interval (0, h));
Molecule volta (b, at);
mol.add_molecule (volta);
Begin3
Title: LilyPond
-Version: 1.3.52
-Entered-date: 18MAY00
+Version: 1.3.53
+Entered-date: 22MAY00
Description:
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.3.52.tar.gz
+ 1000k lilypond-1.3.53.tar.gz
Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
- 1000k lilypond-1.3.52.tar.gz
+ 1000k lilypond-1.3.53.tar.gz
Copying-policy: GPL
End
Name: lilypond
-Version: 1.3.52
+Version: 1.3.53
Release: 1
Copyright: GPL
Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.52.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.53.tar.gz
Summary: A program for printing sheet music.
URL: http://www.cs.uu.nl/~hanwen/lilypond
# Icon: lilypond-icon.gif
--- /dev/null
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2000-03-21 11:40+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: August S.Sigov <august@infran.ru>\n"
+"Language-Team: Russian <ru@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=koi8-r\n"
+"Content-Transfer-Encoding: ENCODING\n"
+
+#: data-file.cc:52
+msgid "EOF in a string"
+msgstr "EOF × ÓÔÒÏËÅ"
+
+#: data-file.cc:116 input.cc:87 midi-parser.cc:100 warn.cc:22
+msgid "warning: "
+msgstr "ÐÒÅÄÕÐÒÅÖÄÁÀ: "
+
+#: dstream.cc:184
+msgid "not enough fields in Dstream init"
+msgstr "ÎÅ ÄÏÓÔÁÔÏÞÎÏ ÐÏÌÅÊ × Dstream init"
+
+#: getopt-long.cc:143
+#, c-format
+msgid "option `%s' requires an argument"
+msgstr "ÏÐÃÉÑ `%s' ÔÒÅÂÕÅÔ ÁÒÇÕÍÅÎÔ"
+
+#: getopt-long.cc:147
+#, c-format
+msgid "option `%s' doesn't allow an argument"
+msgstr "ÏÐÃÉÑ `%s' ÎÅ ÄÏÐÕÓËÁÅÔ ÉÓÐÏÌØÚÏ×ÁÎÉÅ ÁÒÇÕÍÅÎÔÁ"
+
+#: getopt-long.cc:151
+#, c-format
+msgid "unrecognized option: `%s'"
+msgstr "ÎÅÉÚ×ÅÓÔÎÁÑ ÏÐÃÉÑ: `%s'"
+
+#: getopt-long.cc:158
+#, c-format
+msgid "invalid argument `%s' to option `%s'"
+msgstr "ÎÅ×ÅÒÎÙÊ ÁÒÇÕÍÅÎÔ `%s' ÄÌÑ ÏÐÃÉÉ `%s'"
+
+#: input.cc:92 warn.cc:8 warn.cc:16
+msgid "error: "
+msgstr "ÏÛÉÂËÁ: "
+
+#: input.cc:98
+msgid "non fatal error: "
+msgstr "ÎÅ ÓÍÅÒÔÅÌØÎÁÑ ÏÛÉÂËÁ: "
+
+#: input.cc:106 source-file.cc:62 source-file.cc:155
+msgid "position unknown"
+msgstr "ÐÏÌÏÖÅÎÉÅ ÎÅÉÚ×ÅÓÔÎÏ"
+
+#: mapped-file-storage.cc:74
+msgid "can't map file"
+msgstr "ÎÅ ÍÏÇÕ ÏÔÏÂÒÁÚÉÔØ ÆÁÊÌ × ÐÁÍÑÔØ"
+
+#: mapped-file-storage.cc:87 midi-stream.cc:77 mudela-stream.cc:111
+#: paper-stream.cc:25 scores.cc:38 simple-file-storage.cc:44 text-stream.cc:22
+#, c-format
+msgid "can't open file: `%s'"
+msgstr "ÎÅ ÍÏÇÕ ÏÔËÒÙÔØ ÆÁÊÌ: `%s'"
+
+#: simple-file-storage.cc:56
+#, c-format
+msgid "Huh? Got %d, expected %d characters"
+msgstr "èÍ... ðÏÌÕÞÉÌ %d, Á ÏÖÉÄÁÌ %d ÚÎÁËÏ×"
+
+#: text-stream.cc:9
+msgid "<stdin>"
+msgstr "<ÓÔÁÎÄÁÒÔÎÙÊ ××ÏÄ>"
+
+#: warn.cc:35
+msgid "programming error: "
+msgstr "ÏÛÉÂËÁ ÐÒÏÇÒÁÍÍÉÒÏ×ÁÎÉÑ: "
+
+#: warn.cc:35
+msgid " (Continuing; cross thumbs)"
+msgstr " (ðÒÏÄÏÌÖÁÀ; ÓËÒÅÓÔÉÔÅ ÐÁÌØÃÙ)"
+
+#: afm.cc:42
+#, c-format
+msgid "can't find character number: %d"
+msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÓÉÍ×ÏÌ Ó ÎÏÍÅÒÏÍ: %d"
+
+#: afm.cc:55
+#, c-format
+msgid "can't find character called: `%s'"
+msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÓÉÍ×ÏÌ ÐÏÄ ÎÁÚ×ÁÎÉÅÍ: `%s'"
+
+#: afm.cc:85
+msgid "Error parsing AFM file"
+msgstr "ïÛÉÂËÁ ÐÒÉ ÁÎÁÌÉÚÅ ÆÁÊÌÁ AFM"
+
+#: all-font-metrics.cc:104 lookup.cc:56
+#, c-format
+msgid "can't find font: `%s'"
+msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÛÒÉÆÔ: `%s'"
+
+#: all-font-metrics.cc:105
+msgid "Loading default font"
+msgstr "úÁÇÒÕÖÁÀ ÛÒÉÆÔ ÐÏ ÕÍÏÌÞÁÎÉÀ"
+
+#: all-font-metrics.cc:120
+#, c-format
+msgid "can't find default font: `%s'"
+msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÛÒÉÆÔ ÐÏ ÕÍÏÌÞÁÎÉÀ: `%s'"
+
+#: all-font-metrics.cc:121 includable-lexer.cc:49 lookup.cc:57 scores.cc:109
+#, c-format
+msgid "(search path: `%s')"
+msgstr "(ÐÕÔØ ÐÏÉÓËÁ: `%s')"
+
+#: all-font-metrics.cc:122
+msgid "Giving up"
+msgstr "óÄÁÀÓØ"
+
+#: auto-change-iterator.cc:43 change-iterator.cc:60
+msgid "Can't switch translators, I'm there already"
+msgstr "îÅ ÍÏÇÕ ÐÅÒÅËÌÀÞÉÔØ ÐÅÒÅ×ÏÄÞÉËÏ×, Ñ ÕÖÅ ÔÁÍ"
+
+#: beam-engraver.cc:42 beam-engraver.cc:58
+msgid "can't find start of beam"
+msgstr "ÞÔÏ-ÔÏ ÎÅ ÎÁÊÄÕ ÎÁÞÁÌÏ ÇÒÕÐÐÉÒÏ×ËÉ ÛÔÉÌÅÊ"
+
+#: beam-engraver.cc:87
+msgid "already have a beam"
+msgstr "ÕÖÅ ÉÍÅÅÍ ÇÒÕÐÐÕ ÛÔÉÌÅÊ"
+
+#: beam-engraver.cc:142
+msgid "unterminated beam"
+msgstr "ÎÅÚÁËÏÎÞÅÎÎÁÑ ÇÒÕÐÐÉÒÏ×ËÁ ÛÔÉÌÅÊ"
+
+#: beam-engraver.cc:170 chord-tremolo-engraver.cc:229
+msgid "stem must have Rhythmic structure"
+msgstr "ÛÔÉÌØ ÄÏÌÖÅÎ ÉÍÅÔØ ÒÉÔÍÏ×ÕÀ ÓÔÒÕËÔÕÒÕ"
+
+#: beam-engraver.cc:181
+msgid "stem doesn't fit in beam"
+msgstr "ÛÔÉÌØ ÎÅ ×ÌÅÚÁÅÔ × ÇÒÕÐÐÉÒÏ×ËÕ"
+
+#: beam-engraver.cc:182
+msgid "beam was started here"
+msgstr "ÇÒÕÐÐÉÒÏ×ËÁ ÎÁÞÉÎÁÌÁÓØ ÚÄÅÓØ"
+
+#: beam.cc:87
+msgid "beam has less than two stems"
+msgstr "ÇÒÕÐÐÉÒÏ×ËÁ ÍÅÎÅÅ Ä×ÕÈ ÛÔÉÌÅÊ"
+
+#: beam.cc:475
+msgid "weird beam vertical offset"
+msgstr "ÄÉËÏÅ ×ÅÒÔÉËÁÌØÎÏÅ ÓÍÅÝÅÎÉÅ ÇÒÕÐÐÉÒÏ×ËÉ ÛÔÉÌÅÊ"
+
+#: break-algorithm.cc:106
+msgid "score does not have any columns"
+msgstr "ÆÒÁÇÍÅÎÔ ÎÅ ÓÏÄÅÒÖÉÔ ÓÔÏÌÂÃÏ×"
+
+#: change-iterator.cc:22
+#, c-format
+msgid "can't change `%s' to `%s'"
+msgstr "ÎÅ ÍÏÇÕ ÓÍÅÎÉÔØ `%s' ÎÁ `%s'"
+
+#.
+#. We could change the current translator's id, but that would make
+#. errors hard to catch
+#.
+#. last->translator_id_str_ = change_l ()->change_to_id_str_;
+#.
+#: change-iterator.cc:79
+msgid "I'm one myself"
+msgstr "ñ ÅÄÉÎÓÔ×ÅÎÎÙÊ"
+
+#: change-iterator.cc:82
+msgid "none of these in my family"
+msgstr "ÏÎÉ ÍÎÅ ÎÅ ÒÏÄÓÔ×ÅÎÎÉËÉ"
+
+#: chord-tremolo-engraver.cc:83 chord-tremolo-engraver.cc:100
+msgid "can't find start of chord tremolo"
+msgstr "ÎÅ ÎÁÊÄÕ ÎÁÞÁÌÏ ÔÒÅÍÏÌÏ ÁËËÏÒÄÁ"
+
+#: chord-tremolo-engraver.cc:130
+msgid "already have a chord tremolo"
+msgstr "ÕÖÅ ÉÍÅÅÍ ÔÒÅÍÏÌÏ ÁËËÏÒÄÁ"
+
+#: chord-tremolo-engraver.cc:183
+msgid "unterminated chord tremolo"
+msgstr "ÎÅÚÁËÏÎÞÅÎÎÏÅ ÔÒÅÍÏÌÏ ÁËËÏÒÄÁ"
+
+#: chord.cc:147
+#, c-format
+msgid "invalid subtraction: not part of chord: %s"
+msgstr "ÎÅ×ÅÒÎÏÅ ×ÙÞÉÔÁÎÉÅ: ÎÅ ÞÁÓÔØ ÁËËÏÒÄÁ: %s"
+
+#: chord.cc:365
+#, c-format
+msgid "invalid inversion pitch: not part of chord: %s"
+msgstr ""
+
+#: clef-engraver.cc:151
+msgid "unknown clef type"
+msgstr "ÎÅÉÚ×ÅÓÔÎÙÊ ÔÉÐ ËÌÀÞÁ"
+
+#: collision.cc:102
+msgid "Too many clashing notecolumns. Ignoring them."
+msgstr "óÌÉÛËÏÍ ÍÎÏÇÏ ÐÅÒÅÓÅËÁÀÝÉÈÓÑ ÓÔÏÌÂÃÏ× ÎÏÔ. éÇÎÏÒÉÒÕÀ."
+
+#: crescendo.cc:67
+msgid "crescendo"
+msgstr "ËÒÅÝÅÎÄÏ"
+
+#: crescendo.cc:67
+msgid "too small"
+msgstr "ÓÌÉÛËÏÍ ÍÁÌÏ"
+
+#: cross-staff.cc:19
+msgid ""
+"minVerticalAlign != maxVerticalAlign: cross staff spanners may be broken"
+msgstr "minVerticalAlign != maxVerticalAlign: ÍÅÖÄÕÓÔÒÏÞÎÙÅ ÌÉÇÉ ÍÏÇÕÔ ÂÙÔØ ÎÅ×ÅÒÎÙÍÉ"
+
+#: debug.cc:26
+msgid "floating point exception"
+msgstr "ÉÓËÌÀÞÅÎÉÅ ÁÒÉÆÍÅÔÉËÉ Ó ÐÌÁ×ÁÀÝÅÊ ÚÁÐÑÔÏÊ"
+
+#: debug.cc:50
+msgid "can't set mem-checking!"
+msgstr "ÎÅ ÍÏÇÕ ×ËÌÀÞÉÔØ ÐÒÏ×ÅÒËÕ ÐÁÍÑÔÉ"
+
+#: dimensions.cc:13
+msgid "NaN"
+msgstr "NaN"
+
+#: dynamic-engraver.cc:285 span-dynamic-performer.cc:87
+msgid "can't find start of (de)crescendo"
+msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÎÁÞÁÌÏ (ÄÅ)ËÒÅÝÅÎÄÏ"
+
+#: dynamic-engraver.cc:304
+msgid "already have a crescendo"
+msgstr "ËÒÅÝÅÎÄÏ ÕÖÅ ÅÓÔØ"
+
+#: dynamic-engraver.cc:305
+msgid "already have a decrescendo"
+msgstr "ÄÅËÒÅÝÅÎÄÏ ÕÖÅ ÅÓÔØ"
+
+#: dynamic-engraver.cc:380
+msgid "unterminated (de)crescendo"
+msgstr "ÎÅÚÁËÏÎÞÅÎÎÏÅ (ÄÅ)ËÒÅÝÅÎÄÏ"
+
+#: extender-engraver.cc:62
+msgid "unterminated extender"
+msgstr "ÎÅÚÁ×ÅÒÛÅÎÎÙÊ ÒÁÓÛÉÒÉÔÅÌØ"
+
+#: extender-engraver.cc:74
+msgid "Nothing to connect extender to on the left. Ignoring extender request."
+msgstr "îÅËÕÄÁ ÐÒÉÓÏÅÄÉÎÉÔØ ÒÁÓÛÉÒÉÔÅÌØ ÓÌÅ×Á. éÇÎÏÒÉÒÕÀ ÚÁÐÒÏÓ ÒÁÓÛÉÒÉÔÅÌÑ."
+
+#: folded-repeat-iterator.cc:64
+msgid "no one to print a repeat brace"
+msgstr "ÎÅËÏÍÕ ÒÉÓÏ×ÁÔØ ÓËÏÂÕ ÐÏ×ÔÏÒÁ"
+
+#: gourlay-breaking.cc:154
+msgid "No feasible line breaking found"
+msgstr "îÅ ÎÁÊÄÅÎÏ ÕÄÏ×ÌÅÔ×ÏÒÉÔÅÌØÎÏÇÏ ÒÁÚÒÙ×Á ÓÔÒÏËÉ"
+
+#: grace-iterator.cc:43
+msgid "no Grace context available"
+msgstr "ÎÅÔ ÄÏÓÔÕÐÎÏÇÏ æÏÒÛÌÁÇ-ËÏÎÔÅËÓÔÁ"
+
+#: grace-position-engraver.cc:93
+msgid "Unattached grace notes. Attaching to last musical column."
+msgstr "æÏÒÛÌÁÇ ÂÅÚ ÐÒÉ×ÑÚËÉ. ðÒÉ×ÑÚÙ×ÁÀ Ë ÐÏÓÌÅÄÎÅÍÕ ÍÕÚÙËÁÌØÎÏÍÕ ÓÔÏÌÂÃÕ."
+
+#: hyphen-engraver.cc:60
+msgid "unterminated hyphen"
+msgstr "ÐÅÒÅÎÏÓ ÂÅÚ ÏËÏÎÞÁÎÉÑ"
+
+#: hyphen-engraver.cc:72
+msgid "Nothing to connect hyphen to on the left. Ignoring hyphen request."
+msgstr "îÅ Ë ÞÅÍÕ ÐÒÉÓÏÅÄÉÎÉÔØ ÐÅÒÅÎÏÓ ÓÌÅ×Á. éÇÎÏÒÉÒÕÀ ÚÁÐÒÏÓ ÐÅÒÅÎÏÓÁ."
+
+#: identifier.cc:43
+#, c-format
+msgid "wrong identifier type, expected: `%s'"
+msgstr "ÎÅ×ÅÒÎÙÊ ÔÉÐ ÐÅÒÅÍÅÎÎÏÊ, ÏÖÉÄÁÌÓÑ: `%s'"
+
+#: includable-lexer.cc:47 lily-guile.cc:126 lily-guile.cc:149
+#: midi-score-parser.cc:24 scores.cc:108 scores.cc:114
+#, c-format
+msgid "can't find file: `%s'"
+msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÆÁÊÌ: `%s'"
+
+#: key-def.cc:31
+msgid "No key name, assuming `C'"
+msgstr "îÅÔ ÎÁÚ×ÁÎÉÑ ËÌÀÞÁ, ÐÏÄÒÁÚÕÍÅ×ÁÀ `C'"
+
+#: key-def.cc:92
+msgid "Don't know how handle empty keys"
+msgstr "îÅ ÚÎÁÀ, ÞÔÏ ÄÅÌÁÔØ Ó ÐÕÓÔÙÍÉ ËÌÀÞÁÍÉ"
+
+#: key-engraver.cc:77 key-performer.cc:65
+msgid "FIXME: key change merge"
+msgstr "éóðòá÷øíåîñ: ÓÌÉÑÎÉÅ ÓÍÅÎÙ ËÌÀÞÁ"
+
+#: key.cc:56 key.cc:61
+#, c-format
+msgid "Don't have that many octaves (%s)"
+msgstr "îÅÔ ÔÁËÏÇÏ ËÏÌÉÞÅÓÔ×Á ÏËÔÁ× (%s)"
+
+#: key.cc:79
+#, c-format
+msgid "underdone accidentals (%s)"
+msgstr ""
+
+#: key.cc:84
+#, c-format
+msgid "overdone accidentals (%s)"
+msgstr ""
+
+#: lily-guile.cc:128 lily-guile.cc:151
+#, c-format
+msgid "(load path: `%s')"
+msgstr "(ÐÕÔØ ÚÁÇÒÕÚËÉ: `%s')"
+
+#: local-key-engraver.cc:82
+msgid "out of tune:"
+msgstr "×ÎÅ ÔÏÎÁÌØÎÏÓÔÉ:"
+
+#: local-key-engraver.cc:83 time-signature-engraver.cc:29
+#: translator-group.cc:416 translator-group.cc:425
+#, c-format
+msgid "can't find: `%s'"
+msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ: `%s'"
+
+#: lookup.cc:58
+msgid "Aborting"
+msgstr "óÏ×ÅÒÛÁÀ ÈÁÒÁËÉÒÉ"
+
+#: lookup.cc:200
+#, c-format
+msgid "Non-matching braces in text `%s', adding braces"
+msgstr "æÉÇÕÒÎÙÅ ÓËÏÂËÉ × ÔÅËÓÔÅ `%s' ÎÅ ÓÏ×ÐÁÄÁÀÔ, ÄÏÂÁ×ÌÑÀ ÓËÏÂËÉ"
+
+#: main.cc:71 main.cc:92
+msgid "enable debugging output"
+msgstr "×ËÌÀÞÉÔØ ×Ù×ÏÄ ÏÔÌÁÄÏÞÎÏÊ ÉÎÆÏÒÍÁÃÉÉ"
+
+#: main.cc:72
+msgid "EXT"
+msgstr "òáóû"
+
+#: main.cc:72
+msgid "use output format EXT"
+msgstr "ÉÓÐÏÌØÚÏ×ÁÔØ ×ÙÈÏÄÎÏÊ ÆÏÒÍÁÔ òáóû"
+
+#: main.cc:73 main.cc:93
+msgid "this help"
+msgstr "ÜÔÁ ÓÐÒÁ×ËÁ"
+
+#: main.cc:74
+msgid "DIR"
+msgstr "ëáô"
+
+#: main.cc:74
+msgid "add DIR to search path"
+msgstr "ÄÏÂÁ×ÉÔØ ëáô Ë ÐÕÔÉ ÐÏÉÓËÁ"
+
+#: main.cc:75 main.cc:96
+msgid "FILE"
+msgstr "æáêì"
+
+#: main.cc:75
+msgid "use FILE as init file"
+msgstr "ÉÓÐÏÌØÚÏ×ÁÔØ æáêì ËÁË ÆÁÊÌ ÉÎÉÃÉÁÌÉÚÁÃÉÉ"
+
+#: main.cc:76
+msgid "write Makefile dependencies for every input file"
+msgstr "ÚÁÐÉÓÙ×ÁÔØ ÚÁ×ÉÓÉÍÏÓÔÉ Makefile ÄÌÑ ËÁÖÄÏÇÏ ×ÈÏÄÎÏÇÏ ÆÁÊÌÁ"
+
+#: main.cc:77
+msgid "produce MIDI output only"
+msgstr "ÐÒÏÉÚ×ÏÄÉÔØ ×Ù×ÏÄ ÔÏÌØËÏ MIDI"
+
+#: main.cc:78
+msgid "BASENAME"
+msgstr "ïóîï÷á"
+
+#: main.cc:78
+msgid "write output to BASENAME[-x].extension"
+msgstr "ÚÁÐÉÓÙ×ÁÔØ ×Ù×ÏÄ × ïóîï÷á[-x].ÒÁÓÛÉÒÅÎÉÅ"
+
+#: main.cc:79
+msgid "show all changes in relative syntax"
+msgstr "ÐÏËÁÚÙ×ÁÔØ ×ÓÅ ÉÚÍÅÎÅÎÉÑ × ÏÔÎÏÓÉÔÅÌØÎÏÍ ÓÉÎÔÁËÓÉÓÅ"
+
+#: main.cc:80
+msgid "inhibit file output naming and exporting"
+msgstr "ÓËÒÙÔØ ÉÍÅÎÏ×ÁÎÉÅ É ÜËÓÐÏÒÔ ×Ù×ÏÄÁ × ÆÁÊÌ"
+
+#: main.cc:81 main.cc:100
+msgid "don't timestamp the output"
+msgstr "ÎÅ ÏÔÍÅÞÁÔØ ÄÁÔÕ É ×ÒÅÍÑ ×Ù×ÏÄÁ"
+
+#: main.cc:82
+msgid "switch on experimental features"
+msgstr "×ËÌÀÞÉÔØ ÜËÓÐÅÒÉÍÅÎÔÁÌØÎÙÅ ×ÏÚÍÏÖÎÏÓÔÉ"
+
+#: main.cc:83
+msgid "ignore mudela version"
+msgstr "ÉÇÎÏÒÉÒÏ×ÁÔØ ×ÅÒÓÉÀ mudela"
+
+#: main.cc:84 main.cc:101
+msgid "print version number"
+msgstr "×Ù×ÏÄÉÔØ ÎÏÍÅÒ ×ÅÒÓÉÉ"
+
+#: main.cc:85 main.cc:103
+msgid "show warranty and copyright"
+msgstr "ÐÏËÁÚÁÔØ ÇÁÒÁÎÔÉÀ É copyright"
+
+#: main.cc:100
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]..."
+msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ïðãéñ]... [æáêì]..."
+
+#: main.cc:102
+msgid "Typeset music and or play MIDI from FILE"
+msgstr "îÁÂÉÒÁÔØ ÍÕÚÙËÕ É/ÉÌÉ ÐÒÏÉÇÒÙ×ÁÔØ MIDI ÉÚ æáêìÁ"
+
+#: main.cc:106
+msgid ""
+"LilyPond is a music typesetter. It produces beautiful sheet music\n"
+"using a high level description file as input. LilyPond is part of \n"
+"the GNU Project.\n"
+msgstr ""
+"LilyPond - ÐÒÏÇÒÁÍÍÁ ÎÁÂÏÒÁ ÍÕÚÙËÉ. ïÎÁ ÐÒÏÉÚ×ÏÄÉÔ ÐÒÅËÒÁÓÎÕÀ ÍÕÚÙËÕ\n"
+"ÎÁ ÂÕÍÁÇÅ, ÉÓÐÏÌØÚÕÑ ×ÙÓÏËÏÕÒÏ×ÎÅ×ÙÊ ÆÁÊÌ ÏÐÉÓÁÎÉÑ ÎÁ ××ÏÄÅ. Lilypond\n"
+"Ñ×ÌÑÅÔÓÑ ÞÁÓÔØÀ ðÒÏÅËÔÁ GNU.\n"
+
+#: main.cc:112 main.cc:116
+msgid "Options:"
+msgstr "ïÐÃÉÉ:"
+
+#: main.cc:116
+msgid "This binary was compiled with the following options:"
+msgstr "üÔÏÔ ÉÓÐÏÌÎÑÅÍÙÊ ÆÁÊÌ ÂÙÌ ÓÏÂÒÁÎ ÓÏ ÓÌÅÄÕÀÝÉÍÉ ÏÐÃÉÑÍÉ:"
+
+#: main.cc:120 main.cc:135
+#, c-format
+msgid "Report bugs to %s"
+msgstr "óÏÏÂÝÁÊÔÅ ÏÂ ÏÛÉÂËÁÈ ÐÏ %s"
+
+#: main.cc:53 main.cc:143
+#, c-format
+msgid ""
+"This is free software. It is covered by the GNU General Public License,\n"
+"and you are welcome to change it and/or distribute copies of it under\n"
+"certain conditions. Invoke as `%s --warranty' for more information.\n"
+msgstr ""
+"üÔÏ Ó×ÏÂÏÄÎÏÅ ÐÒÏÇÒÁÍÍÎÏÅ ÏÂÅÓÐÅÞÅÎÉÅ. ïÎÏ ÏÈÒÁÎÑÅÔÓÑ ïÂÝÅÊ ïÔËÒÙÔÏÊ\n"
+"ìÉÃÅÎÚÉÅÊ GNU, É ÷Ù ÍÏÖÅÔÅ ÉÚÍÅÎÑÔØ ÅÇÏ É/ÉÌÉ ÒÁÓÐÒÏÓÔÒÁÎÑÔØ ÅÇÏ ËÏÐÉÉ\n"
+"ÐÒÉ ÓÏÂÌÀÄÅÎÉÉ ÎÅËÏÔÏÒÙÈ ÕÓÌÏ×ÉÊ. ÷ÙÚÙ×ÁÊÔÅ ËÁË `%s --warranty' ÄÌÑ\n"
+"ÐÏÌÕÞÅÎÉÑ ÄÏÐÏÌÎÉÔÅÌØÎÏÊ ÉÎÆÏÒÍÁÃÉÉ.\n"
+
+#: main.cc:60 main.cc:150 main.cc:162
+#, c-format
+msgid "Copyright (c) %s by"
+msgstr "÷ÓÅ ÐÒÁ×Á ÚÁÝÉÝÅÎÙ (c) %s by"
+
+#. GNU GNU?
+#: main.cc:160
+msgid "GNU LilyPond -- The GNU Project music typesetter"
+msgstr "GNU LilyPond -- îÁÂÏÒÝÉË ÍÕÚÙËÉ ðÒÏÅËÔÁ GNU"
+
+#: main.cc:69 main.cc:168
+msgid ""
+" This program is free software; you can redistribute it and/or\n"
+"modify it under the terms of the GNU General Public License version 2\n"
+"as published by the Free Software Foundation.\n"
+"\n"
+" This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n"
+"General Public License for more details.\n"
+"\n"
+" You should have received a copy (refer to the file COPYING) of the\n"
+"GNU General Public License along with this program; if not, write to\n"
+"the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,\n"
+"USA.\n"
+msgstr ""
+
+#: midi-item.cc:309
+#, c-format
+msgid "no such instrument: `%s'"
+msgstr "ÎÅÔ ÔÁËÏÇÏ ÉÎÓÔÒÕÍÅÎÔÁ: `%s'"
+
+#: midi-item.cc:363
+#, c-format
+msgid "unconventional key: flats: %d, sharps: %d"
+msgstr "ÎÅÓÔÁÎÄÁÒÔÎÙÊ ËÌÀÞ: ÂÅÍÏÌÉ: %d, ÄÉÅÚÙ: %d"
+
+#: midi-item.cc:408
+msgid "silly duration"
+msgstr "ÇÌÕÐÁÑ ÐÒÏÄÏÌÖÉÔÅÌØÎÏÓÔØ"
+
+#: midi-item.cc:421
+msgid "silly pitch"
+msgstr "ÇÌÕÐÙÊ ÔÏÎ"
+
+#: midi-stream.cc:29 paper-stream.cc:36
+msgid "Error syncing file (disk full?)"
+msgstr "ïÛÉÂËÁ ÓÉÎÈÒÏÎÉÚÁÃÉÉ ÆÁÊÌÁ (ÄÉÓË ÐÅÒÅÐÏÌÎÅÎ?)"
+
+#: music-output-def.cc:57
+msgid "Interpretation context with empty type"
+msgstr ""
+
+#: music-output-def.cc:84
+#, c-format
+msgid "can't find `%s' context"
+msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ËÏÎÔÅËÓÔ `%s'"
+
+#: musical-request.cc:42
+#, c-format
+msgid "Transposition by %s makes accidental larger than two"
+msgstr ""
+
+#: my-lily-lexer.cc:138
+#, c-format
+msgid "redeclaration of `\\%s'"
+msgstr "ÐÅÒÅÏÐÒÅÄÅÌÅÎÉÅ `\\%s'"
+
+#: my-lily-lexer.cc:144
+#, c-format
+msgid "Identifier name is a keyword: `%s'"
+msgstr "éÍÑ ËÏÍÁÎÄÙ Ñ×ÌÑÅÔÓÑ ËÌÀÞÅ×ÙÍ ÓÌÏ×ÏÍ: `%s'"
+
+#: my-lily-lexer.cc:173
+#, c-format
+msgid "error at EOF: %s"
+msgstr "ÏÛÍÂËÁ × ËÏÎÃÅ ÆÁÊÌÁ: %s"
+
+#: midi-score-parser.cc:94 my-lily-parser.cc:58
+msgid "Parsing..."
+msgstr "òÁÚÂÉÒÁÀ..."
+
+#: my-lily-parser.cc:67
+msgid "Braces don't match"
+msgstr "æÉÇÕÒÎÙÅ ÓËÏÂËÉ ÎÅ ÓÏ×ÐÁÄÁÀÔ"
+
+#: paper-column.cc:49
+msgid "Must set spring between differing columns"
+msgstr ""
+
+#: paper-def.cc:70
+#, c-format
+msgid "unknown paper variable: `%s'"
+msgstr "ÎÅÉÚ×ÅÓÔÎÁÑ ÐÅÒÅÍÅÎÎÁÑ ÂÕÍÁÇÉ: `%s'"
+
+#: paper-def.cc:74
+msgid "not a real variable"
+msgstr "ÎÅ ÎÁÓÔÏÑÝÁÑ ÐÅÒÅÍÅÎÎÁÑ"
+
+#: paper-def.cc:184
+#, c-format
+msgid "paper output to %s..."
+msgstr "\"ÂÕÍÁÖÎÙÊ\" ×Ù×ÏÄ × %s..."
+
+#: mudela-stream.cc:93 paper-outputter.cc:60 performance.cc:95
+msgid ", at "
+msgstr ", ×"
+
+#: paper-score.cc:114
+msgid "Preprocessing elements..."
+msgstr "ðÒÅÄ×ÁÒÉÔÅÌØÎÏ ÏÂÒÁÂÁÔÙ×ÁÀ ÜÌÅÍÅÎÔÙ..."
+
+#: paper-score.cc:119
+msgid "Calculating column positions..."
+msgstr "÷ÙÞÉÓÌÑÀ ÐÏÚÉÃÉÉ ÓÔÏÌÂÃÏ×"
+
+#: paper-score.cc:146
+msgid "Outputting Score, defined at: "
+msgstr ""
+
+#: performance.cc:50
+msgid "Track ... "
+msgstr "äÏÒÏÖËÁ ..."
+
+#. perhaps multiple text events?
+#: performance.cc:75
+msgid "Creator: "
+msgstr "óÏÚÄÁÔÅÌØ: "
+
+#: performance.cc:90
+msgid "Automatically generated"
+msgstr "á×ÔÏÍÁÔÉÞÅÓËÉ ÓÇÅÎÅÒÉÒÏ×ÁÎÏ"
+
+#: performance.cc:104
+#, c-format
+msgid "from musical definition: %s"
+msgstr "ÉÚ ÍÕÚÙËÁÌØÎÏÊ ÎÏÔÁÃÉÉ %s"
+
+#: performance.cc:172
+#, c-format
+msgid "MIDI output to %s..."
+msgstr "×Ù×ÏÄ MIDI × %s..."
+
+#: property-engraver.cc:76
+msgid "Wrong type for property"
+msgstr "îÅ×ÅÒÎÙÊ ÔÉÐ ÄÌÑ Ó×ÏÊÓÔ×Á"
+
+#: repeat-engraver.cc:195
+msgid "No bar engraver found. Ignoring repeats."
+msgstr ""
+
+#: request-chord-iterator.cc:72
+#, c-format
+msgid "Junking request: `%s'"
+msgstr "÷ÙÂÒÁÓÙ×ÁÀ ÚÁÐÒÏÓ: `%s'"
+
+#: request-chord-iterator.cc:75
+#, c-format
+msgid "Huh? Not a Request: `%s'"
+msgstr "á? îå úÁÐÒÏÓ: `%s'"
+
+#: request-iterator.cc:20
+#, c-format
+msgid "Junking music: `%s'"
+msgstr "÷ÙÂÒÁÓÙ×ÁÀ ÍÕÚÙËÕ: `%s'"
+
+#: rest-collision.cc:132
+msgid "too many colliding rests"
+msgstr "ÓÌÉÛËÏÍ ÍÎÏÇÏ ÎÁÌÅÚÁÀÝÉÈ ÐÁÕÚ"
+
+#: rest-collision.cc:136
+msgid "too many notes for rest collision"
+msgstr ""
+
+#: score-engraver.cc:141
+#, c-format
+msgid "unbound spanner `%s'"
+msgstr ""
+
+#: score.cc:60
+msgid "no toplevel translator"
+msgstr ""
+
+#: score.cc:63
+msgid "Interpreting music..."
+msgstr "éÎÔÅÒÐÒÅÔÉÒÕÀ ÍÕÚÙËÕ..."
+
+#: score.cc:75
+msgid "Need music in a score"
+msgstr ""
+
+#. should we? hampers debugging.
+#: score.cc:88
+msgid "Errors found/*, not processing score*/"
+msgstr "îÁÊÄÅÎÙ ÏÛÉÂËÉ/*, ÎÅ ÏÂÒÁÂÁÔÙ×ÁÀ ÎÏÔÙ*/"
+
+#: score.cc:93
+#, c-format
+msgid "elapsed time: %.2f seconds"
+msgstr "ÚÁÔÒÁÞÅÎÎÏÅ ×ÒÅÍÑ: %.2f ÓÅËÕÎÄ"
+
+#: scores.cc:35
+#, c-format
+msgid "Writing dependency file: `%s'..."
+msgstr "úÁÐÉÓÙ×ÁÀ ÆÁÊÌ ÚÁ×ÉÓÉÍÏÓÔÅÊ: `%s'..."
+
+#: scores.cc:79
+msgid "Score contains errors; will not process it"
+msgstr ""
+
+#: script-engraver.cc:67
+#, c-format
+msgid "Don't know how to interpret articulation `%s'"
+msgstr ""
+
+#: sequential-music-iterator.cc:83
+msgid "Must stop before this music ends"
+msgstr ""
+
+#. this shouldn't happen, but let's continue anyway.
+#: single-malt-grouping-item.cc:54
+msgid "Single_malt_grouping_item: I've been drinking too much"
+msgstr "Single_malt_grouping_item: Ñ ÌÉÛËÏÍ ÍÎÏÇÏ ×ÙÐÉÌ"
+
+#: slur-engraver.cc:61
+msgid "unterminated slur"
+msgstr "ÎÅÚÁ×ÅÒÛÅÎÎÁÑ ÌÉÇÁ"
+
+#: slur-engraver.cc:77
+#, c-format
+msgid "can't find both ends of %s"
+msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÏÂÁ ËÏÎÃÁ Õ %s"
+
+#: slur-engraver.cc:77
+msgid "slur"
+msgstr "ÌÉÇÁ"
+
+#: slur.cc:240
+msgid "Putting slur over rest. Ignoring."
+msgstr "ìÉÇÁ ÎÁÄ ÐÁÕÚÏÊ. éÇÎÏÒÉÒÕÀ."
+
+#: slur.cc:322
+msgid "Slur over rest?"
+msgstr "ìÉÇÁ ÎÁÄ ÐÁÕÚÏÊ?"
+
+#: spanner.cc:31 spanner.cc:164
+#, c-format
+msgid "Spanner `%s' has equal left and right spanpoints"
+msgstr ""
+
+#: stem-engraver.cc:124
+#, c-format
+msgid "Adding note head to incompatible stem (type = %d)"
+msgstr "äÏÂÁ×ÌÑÀ ÎÏÔÕ Ë ÎÅÓÏ×ÍÅÓÔÉÍÏÍÕ ÛÔÉÌÀ (ÔÉÐ = %d)"
+
+#: stem.cc:118
+msgid "Weird stem size; check for narrow beams"
+msgstr ""
+
+#: tfm-reader.cc:115
+#, c-format
+msgid "TFM header of `%s' has only %u word(s)"
+msgstr ""
+
+#: tfm-reader.cc:153
+#, c-format
+msgid "%s: TFM file has %u parameters, which is more than the %u I can handle"
+msgstr ""
+
+#: tfm.cc:70
+#, c-format
+msgid "can't find ascii character: `%d'"
+msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÓÉÍ×ÏÌ ASCII: `%d'"
+
+#: tie-engraver.cc:195 tie-performer.cc:109
+msgid "No ties were created!"
+msgstr ""
+
+#: tie.cc:79
+msgid "lonely tie"
+msgstr ""
+
+#: time-scaled-music-iterator.cc:25
+msgid "no one to print a tuplet start bracket"
+msgstr ""
+
+#: time-signature-engraver.cc:28
+msgid "lost in time:"
+msgstr ""
+
+#: timing-translator.cc:31
+msgid "conflicting timing request"
+msgstr ""
+
+#: timing-translator.cc:32
+msgid "This is the other timing request"
+msgstr ""
+
+#: timing-translator.cc:73
+#, c-format
+msgid "barcheck failed at: %s"
+msgstr ""
+
+#: translator-ctors.cc:39
+#, c-format
+msgid "unknown translator: `%s'"
+msgstr ""
+
+#: translator-group.cc:81 translator-group.cc:94
+msgid "Program has no such type"
+msgstr ""
+
+#: translator-group.cc:85 translator-group.cc:100
+#, c-format
+msgid "Already contains: `%s'"
+msgstr "õÖÅ ÓÏÄÅÒÖÉÔ: `%s'"
+
+#: translator-group.cc:210
+#, c-format
+msgid "can't find or create `%s' called `%s'"
+msgstr ""
+
+#: translator-group.cc:322
+#, c-format
+msgid "can't find or create: `%s'"
+msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÉÌÉ ÓÏÚÄÁÔØ: `%s'"
+
+#: transposed-music.cc:31
+msgid "Will ignore \\relative for transposed music"
+msgstr ""
+
+#: unfolded-repeat-iterator.cc:145
+msgid "no one to print a volta bracket"
+msgstr ""
+
+#: parser.yy:61
+#, c-format
+msgid "Oldest supported input version: %s"
+msgstr ""
+
+#: parser.yy:436
+msgid "Need a translator group for a context"
+msgstr ""
+
+#: parser.yy:457
+msgid "Wrong type for property value"
+msgstr ""
+
+#: parser.yy:507
+msgid "More than one music block"
+msgstr "âÏÌÅÅ ÏÄÎÏÇÏ ÍÕÚÙËÁÌØÎÏÇÏ ÂÌÏËÁ"
+
+#: parser.yy:706
+msgid "More alternatives than repeats. Junking excess alternatives."
+msgstr ""
+
+#: parser.yy:750
+msgid "Second argument must be a symbol"
+msgstr "÷ÔÏÒÏÊ ÁÒÇÕÍÅÎÔ ÄÏÌÖÅÎ ÂÙÔØ ÓÉÍ×ÏÌÏÍ"
+
+#: parser.yy:755
+msgid "First argument must be a procedure taking 1 argument"
+msgstr ""
+
+#: parser.yy:954 parser.yy:1386 parser.yy:1406
+#, c-format
+msgid "not a duration: %d"
+msgstr "ÎÅ ÐÒÏÄÏÌÖÉÔÅÌØÎÏÓÔØ: %d"
+
+#: parser.yy:1105
+msgid "Can't specify direction for this request"
+msgstr "îÅ ÍÏÇÕ ÕËÁÚÁÔØ ÎÁÐÒÁ×ÌÅÎÉÅ ÄÌÑ ÜÔÏÇÏ ÚÁÐÒÏÓÁ"
+
+#: parser.yy:1237 parser.yy:1245 parser.yy:1497
+msgid "Have to be in Lyric mode for lyrics"
+msgstr "äÏÌÖÅÎ ÂÙÔØ × ìÉÒÉÞÅÓËÏÍ ÒÅÖÉÍÅ ÄÌÑ ÌÉÒÉËÉ"
+
+#: parser.yy:1415
+msgid "Have to be in Note mode for notes"
+msgstr "äÏÌÖÅÎ ÂÙÔØ × îÏÔÎÏÍ ÒÅÖÉÍÅ ÄÌÑ ÎÏÔ"
+
+#. urg, burp. what nonsense / silly implementation
+#: parser.yy:1429
+msgid "can't put stem tremolo on tuplet"
+msgstr "ÎÅ ÍÏÇÕ ÐÏÍÅÓÔÉÔØ ÛÔÉÌÅ×ÏÅ ÔÒÅÍÏÌÏ ÎÁ ÇÒÕÐÐÉÒÏ×ËÕ"
+
+#: parser.yy:1513
+msgid "Have to be in Chord mode for chords"
+msgstr "äÏÌÖÅÎ ÂÙÔØ × áËËÏÒÄÎÏÍ ÒÅÖÉÍÅ ÄÌÑ ÁËËÏÒÄÏ×"
+
+#: lexer.ll:159
+msgid "EOF found inside a comment"
+msgstr "ëÏÎÅà ÆÁÊÌÁ ×ÎÕÔÒÉ ËÏÍÍÅÎÔÁÒÉÑ"
+
+#: lexer.ll:173
+msgid "\\maininput disallowed outside init files"
+msgstr ""
+
+#: lexer.ll:203
+#, c-format
+msgid "undefined identifier: `%s'"
+msgstr "ÎÅÉÚ×ÅÓÔÎÁÑ ÍÅÔËÁ/ËÏÍÁÎÄÁ: `%s'"
+
+#. backup rule
+#: lexer.ll:208
+msgid "Missing end quote"
+msgstr "ïÔÓÕÔÓ×ÕÅÔ ÚÁËÌÀÞÉÔÅÌØÎÁÑ ËÁ×ÙÞËÁ"
+
+#. backup rule
+#: lexer.ll:230 lexer.ll:234
+msgid "white expected"
+msgstr "× ÔÏ ×ÒÅÍÑ ËÁË ÏÖÉÄÁÌÏÓØ"
+
+#: lexer.ll:242
+msgid "Can't evaluate Scheme in safe mode"
+msgstr "îÅ ÍÏÇÕ ×ÙÐÏÌÎÑÔØ ËÏÄ ÓÈÅÍÙ × ÂÅÚÏÐÁÓÎÏÍ ÒÅÖÉÍÅ"
+
+#: lexer.ll:437
+#, c-format
+msgid "invalid character: `%c'"
+msgstr "ÎÅ×ÅÒÎÙÊ ÓÉÍ×ÏÌ: `%c'"
+
+#: lexer.ll:491
+#, c-format
+msgid "unknown escaped string: `\\%s'"
+msgstr "ÎÅÉÚ×ÅÓÔÎÁÑ escape-ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ: `\\%s'"
+
+#: lexer.ll:575
+#, c-format
+msgid "incorrect mudela version: %s (%s, %s)"
+msgstr "ÎÅ×ÅÒÎÁÑ ×ÅÒÓÉÑ mudela: %s (%s, %s)"
+
+#: main.cc:91
+msgid "write exact durations, e.g.: a4*385/384"
+msgstr ""
+
+#: main.cc:94
+msgid "ACC[:MINOR]"
+msgstr ""
+
+#: main.cc:94
+msgid "set key: ACC +sharps/-flats; :1 minor"
+msgstr ""
+
+#: main.cc:95
+msgid "don't output tuplets or double dots, smallest is 32"
+msgstr ""
+
+#: main.cc:96
+msgid "set FILE as default output"
+msgstr "ÕÓÔÁÎÏ×ÉÔØ æáêì ÄÌÑ ×Ù×ÏÄÁ ÐÏ ÕÍÏÌÞÁÎÉÀ"
+
+#: main.cc:97
+msgid "don't output tuplets"
+msgstr "ÎÅ ×Ù×ÏÄÉÔØ ÓËÏÂÙ ÔÒÉÏÌÅÊ"
+
+#: main.cc:98
+msgid "be quiet"
+msgstr "ÂÙÔØ ÍÏÌÞÁÌÉ×ÙÍ"
+
+#: main.cc:99
+msgid "DUR"
+msgstr "íáöïò"
+
+#: main.cc:99
+msgid "set smallest duration"
+msgstr "ÕÓÔÁÎÏ×ÉÔØ ÎÁÉÍÅÎØÛÕÀ ÐÒÏÄÏÌÖÉÔÅÌØÎÏÓÔØ"
+
+#: main.cc:102
+msgid "be verbose"
+msgstr "ÂÙÔØ ÂÏÌÔÌÉ×ÙÍ"
+
+#: main.cc:104
+msgid "assume no double dotted notes"
+msgstr ""
+
+#: main.cc:111
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]"
+msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ïðãéñ]... [æáêì]"
+
+#: main.cc:113
+msgid "Translate MIDI-file to mudela"
+msgstr "ôÒÁÎÓÌÉÒÏ×ÁÔØ MIDI-ÆÁÊÌ × mudela"
+
+#: midi-parser.cc:64
+msgid "zero length string encountered"
+msgstr "×ÓÔÒÅÔÉÌÁÓØ ÓÔÒÏËÁ ÎÕÌÅ×ÏÊ ÄÌÉÎÙ"
+
+#: midi-score-parser.cc:44
+msgid "MIDI header expected"
+msgstr "ÏÖÉÄÁÌÓÑ ÚÁÇÏÌÏ×ÏË MIDI"
+
+#: midi-score-parser.cc:49
+msgid "invalid header length"
+msgstr "ÎÅ×ÅÒÎÁÑ ÄÌÉÎÁ ÚÁÇÏÌÏ×ËÁ"
+
+#: midi-score-parser.cc:52
+msgid "invalid MIDI format"
+msgstr "ÎÅ×ÅÒÎÙÊ ÆÏÒÍÁÔ MIDI"
+
+#: midi-score-parser.cc:55
+msgid "invalid number of tracks"
+msgstr "ÎÅ×ÅÒÎÏÅ ÞÉÓÌÏ ÄÏÒÏÖÅË"
+
+#: midi-score-parser.cc:58
+msgid "can't handle non-metrical time"
+msgstr ""
+
+#: midi-track-parser.cc:68
+#, c-format
+msgid "Junking note-end event: channel = %d, pitch = %d"
+msgstr ""
+
+#: midi-track-parser.cc:124
+msgid "invalid running status"
+msgstr "ÎÅ×ÅÒÎÙÊ ÓÔÁÔÕÓ ×ÙÐÏÌÎÅÎÉÑ"
+
+#: midi-track-parser.cc:328
+msgid "unimplemented MIDI meta-event"
+msgstr "ÎÅÐÏÄÄÅÒÖÉ×ÁÅÍÏÅ ÍÅÔÁ-ÓÏÂÙÔÉÅ MIDI"
+
+#: midi-track-parser.cc:333
+msgid "invalid MIDI event"
+msgstr "ÎÅ×ÅÒÎÏÅ ÓÏÂÙÔÉÅ MIDI"
+
+#: midi-track-parser.cc:348
+msgid "MIDI track expected"
+msgstr "ÏÖÉÄÁÌÁÓØ MIDI ÄÏÒÏÖËÁ"
+
+#: midi-track-parser.cc:353
+msgid "invalid track length"
+msgstr "ÎÅ×ÅÒÎÁÑ ÄÌÉÎÁ ÄÏÒÏÖËÉ"
+
+#: mudela-item.cc:160
+#, c-format
+msgid "#32 in quarter: %d"
+msgstr "#32 × ÞÅÔ×ÅÒÔÎÏÊ: %d"
+
+#: mudela-score.cc:108
+#, c-format
+msgid "Lily output to %s..."
+msgstr "Lily ×ÙÈÏÄ × %s..."
+
+#: mudela-score.cc:119
+#, c-format
+msgid "track %d:"
+msgstr "ÄÏÒÏÖËÁ %d:"
+
+#: mudela-score.cc:155
+msgid "Processing..."
+msgstr "ïÂÒÁÂÁÔÙ×ÁÀ..."
+
+#: mudela-score.cc:164
+msgid "Creating voices..."
+msgstr "óÏÚÄÁÀ ÇÏÌÏÓÁ..."
+
+#: mudela-score.cc:168
+msgid "track "
+msgstr "ÄÏÒÏÖËÁ"
+
+#: mudela-score.cc:177
+msgid "NOT Filtering tempo..."
+msgstr ""
+
+#: mudela-score.cc:186
+msgid "NOT Quantifying columns..."
+msgstr ""
+
+#: mudela-score.cc:190
+msgid "Quantifying columns..."
+msgstr ""
+
+#: mudela-score.cc:223
+msgid "Settling columns..."
+msgstr ""
+
+#: mudela-staff.cc:178
+msgid "% MIDI copyright:"
+msgstr "% MIDI copyright:"
+
+#: mudela-staff.cc:179
+msgid "% MIDI instrument:"
+msgstr "% MIDI ÉÎÓÔÒÕÍÅÎÔ:"
+
+#: mudela-stream.cc:37
+#, c-format
+msgid "lily indent level: %d"
+msgstr "ÕÒÏ×ÅÎØ ÏÔÓÔÕÐÏ× lily: %d"
+
+#. Maybe better not to translate these?
+#: mudela-stream.cc:83
+msgid "% Creator: "
+msgstr "% óÏÚÄÁÔÅÌØ: "
+
+#: mudela-stream.cc:88
+msgid "% Automatically generated"
+msgstr "% á×ÔÏÍÁÔÉÞÅÓËÉ ÓÇÅÎÅÒÉÒÏ×ÁÎÏ"
+
+#: mudela-stream.cc:97
+#, c-format
+msgid "% from input file: "
+msgstr "% ÉÚ ×ÈÏÄÎÏÇÏ ÆÁÊÌÁ: "
((Instrument_name Left_edge_item) . (extra-space 1.0))
((Left_edge_item Clef_item) . (extra-space 1.0))
((Left_edge_item Key_item) . (extra-space 0.0))
+ ((Left_edge_item begin-of-note) . (extra-space 1.0))
((none Left_edge_item) . (extra-space 0.0))
((Left_edge_item Staff_bar) . (extra-space 0.0))
; ((none Left_edge_item) . (extra-space -15.0))
("|s" . (nil . "|"))
("|:" . ("|" . "|:"))
("|." . ("|." . nil))
+ (".|" . (nil . ".|"))
(":|" . (":|" . nil))
("||" . ("||" . nil))
(".|." . (".|." . nil))