From: Han-Wen Nienhuys Date: Mon, 22 May 2000 11:12:04 +0000 (+0200) Subject: release: 1.3.53 X-Git-Tag: release/1.3.53 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=refs%2Ftags%2Frelease%2F1.3.53;p=lilypond.git release: 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 * Fixed lily.scm to handle incipits (thanks, Mats) 1.3 --- diff --git a/CHANGES b/CHANGES index 5948934b27..5e4b8ca693 100644 --- a/CHANGES +++ b/CHANGES @@ -1,18 +1,37 @@ -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. diff --git a/Documentation/regression-test.tely b/Documentation/regression-test.tely index d2b24987f6..0b12f68e14 100644 --- a/Documentation/regression-test.tely +++ b/Documentation/regression-test.tely @@ -222,6 +222,12 @@ Folded. This doesn't make sense without alternatives, but it works. @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 diff --git a/VERSION b/VERSION index 44743cb935..9913331784 100644 --- a/VERSION +++ b/VERSION @@ -1,8 +1,8 @@ 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. diff --git a/buildscripts/make-cygwin-cross-tar.sh b/buildscripts/make-cygwin-cross-tar.sh deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/buildscripts/make-cygwin-cross.sh b/buildscripts/make-cygwin-cross.sh deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/flower/dstream.cc b/flower/dstream.cc index 72b3d248db..46394bf4d5 100644 --- a/flower/dstream.cc +++ b/flower/dstream.cc @@ -201,9 +201,10 @@ Dstream::~Dstream() void Dstream::clear_silence() { - for (Dictionary_iter i (*silent_dict_p_); i.ok(); i++) + for (map::iterator ki(silent_dict_p_->begin ()); + silent_dict_p_->end () != ki; ki++) { - i.val_ref() = false; + (*ki).second = false; } } diff --git a/flower/include/dictionary.hh b/flower/include/dictionary.hh index 9134b80afc..ab756d9930 100644 --- a/flower/include/dictionary.hh +++ b/flower/include/dictionary.hh @@ -13,6 +13,8 @@ #include "string.hh" #include "array.hh" +#include + #include "hash-table.hh" @@ -28,25 +30,28 @@ struct Dict_initialiser /* - DEPRECATED. Use either SCM (preferred) or STL + interface to STL function. */ template -class Dictionary : public Hash_table +class Dictionary : public map { public: Dictionary () { - hash_func_ = string_hash; } Dictionary (Dict_initialiser *p) { hash_func_ = string_hash; for (Dict_initialiser *q = p; q->key_; q++) - elem (q->key_) = q->value_; + (*this) [q->key_] = q->value_; } - - friend class Dictionary_iter; + bool elem_b (String s) + { + map::const_iterator ki (find (s)); + return ki != end (); + } + }; diff --git a/input/bugs/addlyrics.ly b/input/bugs/addlyrics.ly new file mode 100644 index 0000000000..b278d881cb --- /dev/null +++ b/input/bugs/addlyrics.ly @@ -0,0 +1,47 @@ +% 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 + > + + > +} + + diff --git a/input/bugs/cross-staff-tuplet.ly b/input/bugs/cross-staff-tuplet.ly new file mode 100644 index 0000000000..10f689b469 --- /dev/null +++ b/input/bugs/cross-staff-tuplet.ly @@ -0,0 +1,10 @@ + +\score { \context PianoStaff \notes < +\context Staff = up <{ c4 } + \times 2/3 { [c8 c\translator Staff = down c] }> + \context Staff = down c4 + + > + + } + diff --git a/input/bugs/repeat-line-break.ly b/input/bugs/repeat-line-break.ly new file mode 100644 index 0000000000..06ff02cd31 --- /dev/null +++ b/input/bugs/repeat-line-break.ly @@ -0,0 +1,10 @@ + +\score { +\notes +\context Staff\relative c'' { + \repeat "volta" 2 { c1 \break } \alternative { d e } + c1 + \repeat "volta" 2 { c1 } \alternative { { d \break} e } + +} +} diff --git a/input/bugs/weird-x-staff-tuplet.ly b/input/bugs/weird-x-staff-tuplet.ly new file mode 100644 index 0000000000..51d57cc733 --- /dev/null +++ b/input/bugs/weird-x-staff-tuplet.ly @@ -0,0 +1,10 @@ + +\score { \context PianoStaff \notes < + +{ \times 2/3 { [c8 c\translator Staff = down c] }} + \context Staff = down c4 + + > + + } + diff --git a/input/test/incipit.ly b/input/test/incipit.ly index d0f5b7f030..08a8794003 100644 --- a/input/test/incipit.ly +++ b/input/test/incipit.ly @@ -12,6 +12,10 @@ incipit = \notes\relative c'{ } +emptyincipit = \notes{ + s1 +} + violin = \notes\relative c''{ \specialkey \keysignature f' fis'' g' gis''; \time 2/2; @@ -33,17 +37,18 @@ BC = \notes\relative c{ } \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"; diff --git a/input/test/orchestscore.ly b/input/test/orchestscore.ly index ccf4d926e1..34078216c7 100644 --- a/input/test/orchestscore.ly +++ b/input/test/orchestscore.ly @@ -50,7 +50,7 @@ c1 | c2 c | c c | c c | \break c c | c c | c c | c c | \context StaffGroup = percussion <\context Staff = timpani < \property Staff.instrument = "Timpani" \property Staff.instr = "Timp." - \m + \notes{c''1 R1*8} > > \context StaffGroup = strings < @@ -93,7 +93,7 @@ c1 | c2 c | c c | c c | \break c c | c c | c c | c c | minVerticalAlign = 2.2*\staffheight; } - \translator { \StaffContext + \translator { \HaraKiriStaffContext \consists "Instrument_name_engraver"; marginScriptPadding = 15.0; } diff --git a/input/test/repeat-line-break.ly b/input/test/repeat-line-break.ly new file mode 100644 index 0000000000..06ff02cd31 --- /dev/null +++ b/input/test/repeat-line-break.ly @@ -0,0 +1,10 @@ + +\score { +\notes +\context Staff\relative c'' { + \repeat "volta" 2 { c1 \break } \alternative { d e } + c1 + \repeat "volta" 2 { c1 } \alternative { { d \break} e } + +} +} diff --git a/input/trip.ly b/input/trip.ly index 4ea9a9beae..1e4cbcb2b4 100644 --- a/input/trip.ly +++ b/input/trip.ly @@ -1,11 +1,23 @@ \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; @@ -41,12 +53,14 @@ praeludiumLeft = \notes \relative c { \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 | diff --git a/lily/afm.cc b/lily/afm.cc index 791311adb8..1f1d22f1db 100644 --- a/lily/afm.cc +++ b/lily/afm.cc @@ -48,7 +48,9 @@ Adobe_font_metric::find_ascii_metric (int a , bool warn) const AFM_CharMetricInfo const * Adobe_font_metric::find_char_metric (String nm, bool warn) const { - if (!name_to_metric_dict_.elem_b (nm)) + map::const_iterator ai = name_to_metric_dict_.find (nm); + + if (ai == name_to_metric_dict_.end ()) { if (warn) { @@ -57,7 +59,7 @@ Adobe_font_metric::find_char_metric (String nm, bool warn) const return 0; } else - return font_inf_->cmi + name_to_metric_dict_ [nm]; + return font_inf_->cmi + (*ai).second; } diff --git a/lily/align-interface.cc b/lily/align-interface.cc index 9d5a00abf5..30e9fda247 100644 --- a/lily/align-interface.cc +++ b/lily/align-interface.cc @@ -179,9 +179,10 @@ Align_interface::set_axis (Axis a) 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; } diff --git a/lily/axis-group-interface.cc b/lily/axis-group-interface.cc index a9d868a3a9..e7dcde019b 100644 --- a/lily/axis-group-interface.cc +++ b/lily/axis-group-interface.cc @@ -137,10 +137,11 @@ Axis_group_interface::get_children () 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; } diff --git a/lily/break-algorithm.cc b/lily/break-algorithm.cc index 3337bff317..7c679d76fb 100644 --- a/lily/break-algorithm.cc +++ b/lily/break-algorithm.cc @@ -63,7 +63,6 @@ Break_algorithm::generate_spacing_problem (Link_array curline, Int { 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]; diff --git a/lily/chord-name.cc b/lily/chord-name.cc index 7a05a08844..0e8e1d0942 100644 --- a/lily/chord-name.cc +++ b/lily/chord-name.cc @@ -32,7 +32,14 @@ Molecule Chord_name::ly_word2molecule (SCM word) const { - Dictionary option_dict; // junkme + /* + junkme. + + Using the dict doesn't save code, since you have to compare + dict entries by hand later on anyway. + + */ + Dictionary option_dict; if (gh_pair_p (word)) { SCM options = gh_cdr (word); @@ -40,8 +47,7 @@ Chord_name::ly_word2molecule (SCM word) const 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); @@ -57,8 +63,11 @@ Chord_name::ly_word2molecule (SCM word) const 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); @@ -77,7 +86,7 @@ Chord_name::ly_word2molecule (SCM word) const && 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; diff --git a/lily/column-x-positions.cc b/lily/column-x-positions.cc index 080c178ce0..3a56d61cce 100644 --- a/lily/column-x-positions.cc +++ b/lily/column-x-positions.cc @@ -12,7 +12,6 @@ Column_x_positions::Column_x_positions() { - energy_f_ = infinity_f; satisfies_constraints_b_ = false; force_f_ = 0; } diff --git a/lily/crescendo.cc b/lily/crescendo.cc index ffe11eaefb..236fbfb53c 100644 --- a/lily/crescendo.cc +++ b/lily/crescendo.cc @@ -91,7 +91,7 @@ Crescendo::do_brew_molecule () const 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; } diff --git a/lily/dots.cc b/lily/dots.cc index 6f098e6110..2487268c2b 100644 --- a/lily/dots.cc +++ b/lily/dots.cc @@ -44,10 +44,10 @@ Molecule 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); diff --git a/lily/gourlay-breaking.cc b/lily/gourlay-breaking.cc index 696a0d88a6..3f9662a99a 100644 --- a/lily/gourlay-breaking.cc +++ b/lily/gourlay-breaking.cc @@ -62,7 +62,6 @@ Gourlay_breaking::do_solve () const 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; @@ -166,7 +165,6 @@ Gourlay_breaking::do_solve () const Gourlay_breaking::Gourlay_breaking () { - energy_bound_f_ = infinity_f; } diff --git a/lily/grace-align-item.cc b/lily/grace-align-item.cc index b2830a2050..73ef013c07 100644 --- a/lily/grace-align-item.cc +++ b/lily/grace-align-item.cc @@ -26,7 +26,7 @@ Grace_align_item::Grace_align_item () 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", diff --git a/lily/idealspacing.cc b/lily/idealspacing.cc index d7379218f1..90cfa1dbae 100644 --- a/lily/idealspacing.cc +++ b/lily/idealspacing.cc @@ -11,15 +11,6 @@ #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() { @@ -27,21 +18,3 @@ 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; -} diff --git a/lily/include/bow.hh b/lily/include/bow.hh deleted file mode 100644 index 8b13789179..0000000000 --- a/lily/include/bow.hh +++ /dev/null @@ -1 +0,0 @@ - diff --git a/lily/include/break-algorithm.hh b/lily/include/break-algorithm.hh index 00da3940ce..b01487e171 100644 --- a/lily/include/break-algorithm.hh +++ b/lily/include/break-algorithm.hh @@ -34,9 +34,6 @@ protected: /// 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) const; diff --git a/lily/include/column-x-positions.hh b/lily/include/column-x-positions.hh index dd5c323755..23bea78d2e 100644 --- a/lily/include/column-x-positions.hh +++ b/lily/include/column-x-positions.hh @@ -15,9 +15,7 @@ struct Column_x_positions { Link_array cols_; Array config_; - Real force_f_; - Real energy_f_; bool satisfies_constraints_b_; Column_x_positions(); diff --git a/lily/include/dimension-cache.hh b/lily/include/dimension-cache.hh index f40337564c..a5033b7914 100644 --- a/lily/include/dimension-cache.hh +++ b/lily/include/dimension-cache.hh @@ -62,7 +62,7 @@ public: */ Real relative_coordinate (Dimension_cache *d) const; Dimension_cache*common_refpoint (Dimension_cache const* s) const; - Dimension_cache*common_refpoint (Link_array caches) const; + void set_empty (bool); void translate (Real); diff --git a/lily/include/gourlay-breaking.hh b/lily/include/gourlay-breaking.hh index 6baa4780d7..68361114b1 100644 --- a/lily/include/gourlay-breaking.hh +++ b/lily/include/gourlay-breaking.hh @@ -17,8 +17,6 @@ */ struct Gourlay_breaking : public Break_algorithm { - Real energy_bound_f_ ; - Array do_solve() const; Gourlay_breaking(); Real combine_demerits (Column_x_positions const&,Column_x_positions const&) const; diff --git a/lily/include/idealspacing.hh b/lily/include/idealspacing.hh index 6b8d2a44ba..3e9585d145 100644 --- a/lily/include/idealspacing.hh +++ b/lily/include/idealspacing.hh @@ -21,9 +21,6 @@ struct Idealspacing { /// the two columns Drul_array cols_drul_; - Real energy_f (Real x) const; - void print() const; - void OK() const ; Idealspacing(); }; diff --git a/lily/include/lily-guile.hh b/lily/include/lily-guile.hh index cb0fb40491..ffe7c21c53 100644 --- a/lily/include/lily-guile.hh +++ b/lily/include/lily-guile.hh @@ -27,6 +27,9 @@ String ly_symbol2string (SCM); 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); diff --git a/lily/include/line-of-score.hh b/lily/include/line-of-score.hh index 1e81b087f9..2a0af1ab1f 100644 --- a/lily/include/line-of-score.hh +++ b/lily/include/line-of-score.hh @@ -11,25 +11,30 @@ #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_; @@ -38,12 +43,9 @@ public: /// 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 const&); - - SCM output_lines (); - + void output_lines (); Link_array broken_col_range (Item const*, Item const*) const; Link_array column_l_arr () const; diff --git a/lily/include/molecule.hh b/lily/include/molecule.hh index ec5ed0e409..d9cd2bb11a 100644 --- a/lily/include/molecule.hh +++ b/lily/include/molecule.hh @@ -42,9 +42,12 @@ 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(); @@ -66,16 +69,9 @@ public: */ 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); diff --git a/lily/include/paper-column.hh b/lily/include/paper-column.hh index 796781a2b2..8bf231d3f4 100644 --- a/lily/include/paper-column.hh +++ b/lily/include/paper-column.hh @@ -34,10 +34,16 @@ public: /* ugh. + + TODO: + + * junk these after spacing is done. + + * Put these in Scheme. */ - Drul_array > minimal_dists_arr_drul_; - Drul_array > spring_arr_drul_; + Array minimal_dists_; + Array springs_; /// set a minimum distance void add_rod (Paper_column * to, Real distance); @@ -58,7 +64,6 @@ public: bool musical_b () const; void set_rank (int); - virtual void do_print() const; private: /** diff --git a/lily/include/paper-outputter.hh b/lily/include/paper-outputter.hh index 73ad6aecf0..8758535ea8 100644 --- a/lily/include/paper-outputter.hh +++ b/lily/include/paper-outputter.hh @@ -21,12 +21,22 @@ */ 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); diff --git a/lily/include/rod.hh b/lily/include/rod.hh index 4374f3c4ef..4edf21b1cd 100644 --- a/lily/include/rod.hh +++ b/lily/include/rod.hh @@ -20,7 +20,6 @@ struct Column_rod Column_rod (); static int compare (const Column_rod &r1, const Column_rod &r2); - void print () const; }; @@ -28,6 +27,12 @@ struct Rod { Drul_array item_l_drul_; Real distance_f_; + + /** + translate the rod so as to refer to Paper_columns + */ + void columnize (); + void add_to_cols (); Rod (); diff --git a/lily/include/score-element.hh b/lily/include/score-element.hh index 8bc4761cf1..8c4b9aa3a0 100644 --- a/lily/include/score-element.hh +++ b/lily/include/score-element.hh @@ -75,11 +75,17 @@ public: 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 (); @@ -154,8 +160,9 @@ public: 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*); @@ -192,15 +199,6 @@ public: 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; @@ -215,8 +213,7 @@ public: 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 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); diff --git a/lily/include/simple-spacer.hh b/lily/include/simple-spacer.hh index 5a1501347a..0cc519fdbb 100644 --- a/lily/include/simple-spacer.hh +++ b/lily/include/simple-spacer.hh @@ -24,7 +24,7 @@ struct Spring_description Real length (Real force) const; Spring_description (); - Real energy_f (Real) const; + bool sane_b () const; }; @@ -68,7 +68,7 @@ struct Simple_spacer Real indent_f_; Real line_len_f_; Real default_space_f_; - Real compression_energy_factor_f_; + Simple_spacer (); @@ -83,8 +83,6 @@ struct Simple_spacer Real active_blocking_force ()const; Real configuration_length ()const; void set_active_states (); - Real energy_f () const; - bool active_b () const; }; diff --git a/lily/include/spring.hh b/lily/include/spring.hh index 739df44dd2..3e88aadf38 100644 --- a/lily/include/spring.hh +++ b/lily/include/spring.hh @@ -20,7 +20,6 @@ struct Column_spring { Column_spring (); static int compare (const Column_spring &r1, const Column_spring &r2); - void print () const; }; struct Spring{ diff --git a/lily/key-item.cc b/lily/key-item.cc index 72380e7311..143d7da103 100644 --- a/lily/key-item.cc +++ b/lily/key-item.cc @@ -87,8 +87,6 @@ Key_item::calculate_position(SCM pair) const TODO - space the `natural' signs wider - - */ Molecule diff --git a/lily/lily-guile.cc b/lily/lily-guile.cc index 9d030b8e86..ebe2ff5b69 100644 --- a/lily/lily-guile.cc +++ b/lily/lily-guile.cc @@ -21,6 +21,7 @@ #include "debug.hh" #include "direction.hh" #include "offset.hh" +#include "interval.hh" SCM ly_str02scm (char const*c) @@ -263,7 +264,19 @@ to_dir (SCM s) 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 diff --git a/lily/line-of-score.cc b/lily/line-of-score.cc index 5ca3685dee..06b20f4e44 100644 --- a/lily/line-of-score.cc +++ b/lily/line-of-score.cc @@ -17,6 +17,8 @@ #include "string.hh" #include "warn.hh" #include "dimensions.hh" +#include "molecule.hh" +#include "all-font-metrics.hh" Line_of_score::Line_of_score() { @@ -30,7 +32,6 @@ Line_of_score::Line_of_score() /* Ugh. this is grossly hairy. */ - void Line_of_score::typeset_element (Score_element * elem_p) { @@ -39,7 +40,7 @@ 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"); @@ -49,8 +50,8 @@ Line_of_score::output_lines () } /* - 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]; @@ -87,14 +88,6 @@ Line_of_score::output_lines () 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 (broken_into_l_arr_[i]); - list = gh_cons (gh_cdr (l->output_), list); - } - return list; } // const? @@ -146,18 +139,19 @@ enter: } 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 @@ -177,18 +171,27 @@ Line_of_score::add_column (Paper_column*p) Link_array 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 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) { @@ -251,21 +254,54 @@ Line_of_score::post_processing () 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 Line_of_score::broken_col_range (Item const*l, Item const*r) const { diff --git a/lily/lookup.cc b/lily/lookup.cc index 166af27043..85b9a02bd6 100644 --- a/lily/lookup.cc +++ b/lily/lookup.cc @@ -127,9 +127,7 @@ Lookup::dashed_slur (Bezier b, Real thick, Real dash) Molecule Lookup::blank (Box b) { - Molecule m; - m.dim_ = b; - return m; + return Molecule (b, SCM_EOL); } diff --git a/lily/molecule.cc b/lily/molecule.cc index db6472b9e5..538edc4f9b 100644 --- a/lily/molecule.cc +++ b/lily/molecule.cc @@ -6,11 +6,6 @@ (c) 1997--2000 Han-Wen Nienhuys */ -/* - ugh. Rewrite not finished yet. Still must copy atom lists. - */ - - #include #include "font-metric.hh" @@ -18,17 +13,9 @@ #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 { @@ -38,7 +25,7 @@ Molecule::extent(Axis a) const Molecule::Molecule (Box b, SCM func) { expr_ = func; - dim_ = b ; + dim_ = b; } Molecule::Molecule() @@ -113,12 +100,11 @@ Molecule::align_to (Axis a, Direction d) 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."); @@ -135,10 +121,15 @@ Molecule::empty_b () const 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_; +} diff --git a/lily/music-output-def.cc b/lily/music-output-def.cc index 4330d1733a..a673d9fcb9 100644 --- a/lily/music-output-def.cc +++ b/lily/music-output-def.cc @@ -69,8 +69,11 @@ Music_output_def::find_translator_l (String name) const 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::const_iterator ki + =global_translator_dict_p->find (name); + + if (ki != global_translator_dict_p->end ()) + return (*ki).second ; return 0; } diff --git a/lily/note-head.cc b/lily/note-head.cc index 91dbeec61d..027f736c54 100644 --- a/lily/note-head.cc +++ b/lily/note-head.cc @@ -29,13 +29,13 @@ Note_head::ledger_line (Interval xwid) const 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); @@ -96,17 +96,16 @@ Note_head::do_brew_molecule() const 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++) @@ -117,8 +116,6 @@ Note_head::do_brew_molecule() const out.add_molecule (s); } } - - out.dim_ = ledgerless; return out; } diff --git a/lily/paper-column.cc b/lily/paper-column.cc index 2f225d0718..d81fc89911 100644 --- a/lily/paper-column.cc +++ b/lily/paper-column.cc @@ -16,15 +16,15 @@ Paper_column::add_rod (Paper_column * p, Real d) { 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; @@ -36,7 +36,7 @@ Paper_column::add_rod (Paper_column * p, Real d) cr.distance_f_ = d; cr.other_l_ = p; - minimal_dists_arr_drul_[dir].push (cr); + minimal_dists_.push (cr); } void @@ -44,15 +44,15 @@ Paper_column::add_spring (Paper_column * p, Real d, Real s) { 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; @@ -65,7 +65,7 @@ Paper_column::add_spring (Paper_column * p, Real d, Real s) cr.strength_f_ = s; cr.other_l_ = p; - spring_arr_drul_[dir].push (cr); + springs_.push (cr); } int @@ -80,28 +80,7 @@ Paper_column::set_rank (int i) 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 diff --git a/lily/paper-outputter.cc b/lily/paper-outputter.cc index 1d5ee856a1..3e2bcaa7d2 100644 --- a/lily/paper-outputter.cc +++ b/lily/paper-outputter.cc @@ -32,10 +32,40 @@ 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_; } @@ -94,89 +124,47 @@ Paper_outputter::output_comment (String str) 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 (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) { @@ -238,8 +226,6 @@ Paper_outputter::output_Real_def (String k, Real v) ly_str02scm (to_str(v).ch_l ()), SCM_UNDEFINED); output_scheme (scm); - - // gh_define (k.ch_l (), gh_double2scm (v)); } void @@ -251,8 +237,6 @@ Paper_outputter::output_String_def (String k, String v) ly_str02scm (v.ch_l ()), SCM_UNDEFINED); output_scheme (scm); - - // gh_define (k.ch_l (), ly_str02scm (v.ch_l ())); } void @@ -263,8 +247,6 @@ Paper_outputter::output_int_def (String k, int v) ly_str02scm (to_str (v).ch_l ()), SCM_UNDEFINED); output_scheme (scm); - - // gh_define (k.ch_l (), gh_int2scm (v)); } diff --git a/lily/paper-score.cc b/lily/paper-score.cc index 941cfe71ab..a398ccac79 100644 --- a/lily/paper-score.cc +++ b/lily/paper-score.cc @@ -82,9 +82,9 @@ Paper_score::process () Array 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(); @@ -108,24 +108,14 @@ Paper_score::process () 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; } diff --git a/lily/rod.cc b/lily/rod.cc index 0db3c85885..90af9edf1b 100644 --- a/lily/rod.cc +++ b/lily/rod.cc @@ -19,14 +19,6 @@ Rod::Rod () 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 () { @@ -40,22 +32,25 @@ Column_rod::compare (const Column_rod &r1, const Column_rod &r2) return r1.other_l_->rank_i() - r2.other_l_->rank_i(); } + void -Rod::add_to_cols () +Rod::columnize () { Direction d = LEFT; - Drul_array 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 (item_l_drul_[LEFT])-> + add_rod(dynamic_cast(item_l_drul_[RIGHT]), distance_f_ ); } diff --git a/lily/score-element.cc b/lily/score-element.cc index 654469111f..86ef757802 100644 --- a/lily/score-element.cc +++ b/lily/score-element.cc @@ -82,9 +82,6 @@ Score_element::Score_element (Score_element const&s) Score_element::~Score_element() { - assert (status_i_ >=0); - status_i_ = -1; - delete dim_cache_[X_AXIS]; delete dim_cache_[Y_AXIS]; } @@ -139,7 +136,7 @@ Score_element::molecule_extent (Dimension_cache const *c) { Score_element *s = dynamic_cast(c->element_l()); Molecule m = s->do_brew_molecule(); - return m.extent()[c->axis ()]; + return m.extent(c->axis ()); } Interval @@ -240,26 +237,16 @@ Score_element::calculate_dependencies (int final, int busy, 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 @@ -358,20 +345,26 @@ Score_element::handle_broken_smobs (SCM src, SCM criterion) } else { - Line_of_score * line = dynamic_cast (unsmob_element ( criterion)); - Line_of_score * dep_line = sc->line_l (); - if (dep_line != line) + Line_of_score * line + = dynamic_cast (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)) @@ -434,22 +427,39 @@ Score_element::handle_broken_dependencies() = handle_broken_smobs (element_property_alist_, line ? line->self_scm_ : SCM_UNDEFINED); } - else if (!dynamic_cast (this)) + else if (dynamic_cast (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() { @@ -485,13 +495,6 @@ Score_element::relative_coordinate (Score_element const*e, Axis a) const 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 { @@ -540,16 +543,26 @@ Score_element::parent_l (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 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 * diff --git a/lily/separating-group-spanner.cc b/lily/separating-group-spanner.cc index 43e7d0d8c0..295bef4824 100644 --- a/lily/separating-group-spanner.cc +++ b/lily/separating-group-spanner.cc @@ -17,17 +17,19 @@ static Rod 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; } @@ -75,7 +77,23 @@ Separating_group_spanner::get_rods () const 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(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; } diff --git a/lily/simple-spacer.cc b/lily/simple-spacer.cc index 85ec848123..905158ae1f 100644 --- a/lily/simple-spacer.cc +++ b/lily/simple-spacer.cc @@ -7,8 +7,6 @@ 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. */ @@ -27,7 +25,6 @@ Simple_spacer::Simple_spacer () force_f_ = 0.; indent_f_ =0.0; default_space_f_ = 20 PT; - compression_energy_factor_f_ = 3.0; } void @@ -172,9 +169,9 @@ Simple_spacer::add_columns (Link_array cols) { 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; @@ -195,8 +192,9 @@ Simple_spacer::add_columns (Link_array cols) 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 @@ -205,7 +203,7 @@ Simple_spacer::add_columns (Link_array cols) for (int i=0; i < cols.size () - 1; i++) { - Array * rods = &cols [i]->minimal_dists_arr_drul_[RIGHT]; + Array * rods = &cols [i]->minimal_dists_; for (int j =0; j < rods->size( ); j++) { int oi = cols.find_i (rods->elem (j).other_l_ ); @@ -216,6 +214,9 @@ Simple_spacer::add_columns (Link_array cols) } } + /* + TODO: should support natural length on only the last line. + */ if (line_len_f_ < 0) my_solve_natural_len (); else @@ -225,7 +226,6 @@ Simple_spacer::add_columns (Link_array cols) 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_); @@ -247,13 +247,6 @@ Spring_description::Spring_description( ) 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 @@ -262,18 +255,3 @@ Spring_description::sane_b () const } -Real -Simple_spacer::energy_f () const -{ - Real e =0.; - - for (int i=0; i cols) const 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) { /* @@ -313,22 +315,27 @@ Array Spacing_spanner::get_springs () const { Array springs; - - SCM last_col = pscore_l_->line_l_->get_elt_property ("columns"); - Link_array measure; - for (SCM s = last_col; gh_pair_p (s); s = gh_cdr (s)) + + Link_array 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 (elt); - measure.push (sc); + Paper_column* sc = dynamic_cast (all[i]); if (sc->breakable_b ()) { - measure.reverse (); + Link_array 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; } diff --git a/lily/spanner.cc b/lily/spanner.cc index d3623668e1..c384224889 100644 --- a/lily/spanner.cc +++ b/lily/spanner.cc @@ -25,6 +25,9 @@ Spanner::do_break_processing () //break_into_pieces Item * left = spanned_drul_[LEFT]; Item * right = spanned_drul_[RIGHT]; + + if (!left || !right) + return; if (left == right) { @@ -92,14 +95,17 @@ Spanner::do_break_processing () 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(clone ()); span_p->set_bound(LEFT,bounds[LEFT]); span_p->set_bound(RIGHT,bounds[RIGHT]); @@ -159,8 +165,8 @@ Spanner::set_bound(Direction d, Item*i) } /** - 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 (this)) { set_parent (i, X_AXIS); diff --git a/lily/spring.cc b/lily/spring.cc index b061067833..ae5f33da74 100644 --- a/lily/spring.cc +++ b/lily/spring.cc @@ -22,14 +22,7 @@ Spring::Spring () 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_); } @@ -47,12 +40,3 @@ Column_spring::compare (Column_spring const & r1, Column_spring const &r2) 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 -} diff --git a/lily/stem-tremolo.cc b/lily/stem-tremolo.cc index 855aa46d03..1bc5041b29 100644 --- a/lily/stem-tremolo.cc +++ b/lily/stem-tremolo.cc @@ -91,7 +91,7 @@ Stem_tremolo::do_brew_molecule () const 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; @@ -109,7 +109,7 @@ Stem_tremolo::do_brew_molecule () const 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 diff --git a/lily/stem.cc b/lily/stem.cc index 22344c6099..ce5103d7df 100644 --- a/lily/stem.cc +++ b/lily/stem.cc @@ -447,7 +447,7 @@ Stem::dim_callback (Dimension_cache const* c) ; // TODO! else { - r = s->flag ().dim_.x (); + r = s->flag ().extent (X_AXIS); } return r; } diff --git a/lily/system-start-delimiter.cc b/lily/system-start-delimiter.cc index be44c6c6e2..b851480961 100644 --- a/lily/system-start-delimiter.cc +++ b/lily/system-start-delimiter.cc @@ -34,8 +34,7 @@ System_start_delimiter::staff_bracket (Real height) const 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; } diff --git a/lily/text-item.cc b/lily/text-item.cc index 0b0845e143..9eb3047356 100644 --- a/lily/text-item.cc +++ b/lily/text-item.cc @@ -26,9 +26,12 @@ Text_item::do_brew_molecule () const 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; } diff --git a/lily/translator-ctors.cc b/lily/translator-ctors.cc index 8c72758890..53dee7207d 100644 --- a/lily/translator-ctors.cc +++ b/lily/translator-ctors.cc @@ -26,7 +26,7 @@ add_translator (Translator *t) if (!global_translator_dict_p) global_translator_dict_p = new Dictionary; - global_translator_dict_p->elem (classname (t)) = t; + (*global_translator_dict_p)[classname (t)] = t; } Translator* diff --git a/lily/tuplet-spanner.cc b/lily/tuplet-spanner.cc index f68d175a0b..6c690bb8e7 100644 --- a/lily/tuplet-spanner.cc +++ b/lily/tuplet-spanner.cc @@ -135,7 +135,9 @@ Tuplet_spanner::calc_position_and_height (Real *offset, Real * dy) const Link_array 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 (); /* @@ -151,8 +153,8 @@ Tuplet_spanner::calc_position_and_height (Real *offset, Real * dy) const 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; @@ -167,7 +169,9 @@ Tuplet_spanner::calc_position_and_height (Real *offset, Real * dy) const 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; diff --git a/lily/volta-spanner.cc b/lily/volta-spanner.cc index f3cc65b459..ad7f9aa301 100644 --- a/lily/volta-spanner.cc +++ b/lily/volta-spanner.cc @@ -36,7 +36,9 @@ Volta_spanner::Volta_spanner () -- - 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 @@ -66,7 +68,9 @@ 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"); @@ -77,7 +81,7 @@ Volta_spanner::do_brew_molecule () const 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); diff --git a/make/out/lilypond.lsm b/make/out/lilypond.lsm index 0520379e97..eea162f829 100644 --- a/make/out/lilypond.lsm +++ b/make/out/lilypond.lsm @@ -1,15 +1,15 @@ 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 diff --git a/make/out/lilypond.spec b/make/out/lilypond.spec index c7e4e53490..a8c7eb39c7 100644 --- a/make/out/lilypond.spec +++ b/make/out/lilypond.spec @@ -1,9 +1,9 @@ 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 diff --git a/po/ru.po b/po/ru.po new file mode 100644 index 0000000000..ed776a61e2 --- /dev/null +++ b/po/ru.po @@ -0,0 +1,1071 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Free Software Foundation, Inc. +# FIRST AUTHOR , 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 \n" +"Language-Team: Russian \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 "" +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 "% ÉÚ ×ÈÏÄÎÏÇÏ ÆÁÊÌÁ: " diff --git a/scm/lily.scm b/scm/lily.scm index 2f237ac73a..ec316ecff8 100644 --- a/scm/lily.scm +++ b/scm/lily.scm @@ -105,6 +105,7 @@ ((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)) @@ -951,6 +952,7 @@ ("|s" . (nil . "|")) ("|:" . ("|" . "|:")) ("|." . ("|." . nil)) + (".|" . (nil . ".|")) (":|" . (":|" . nil)) ("||" . ("||" . nil)) (".|." . (".|." . nil))