]> git.donarmstrong.com Git - lilypond.git/commitdiff
release: 1.3.53 release/1.3.53
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Mon, 22 May 2000 11:12:04 +0000 (13:12 +0200)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Mon, 22 May 2000 11:12:04 +0000 (13:12 +0200)
======
* 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

69 files changed:
CHANGES
Documentation/regression-test.tely
VERSION
buildscripts/make-cygwin-cross-tar.sh [deleted file]
buildscripts/make-cygwin-cross.sh [deleted file]
flower/dstream.cc
flower/include/dictionary.hh
input/bugs/addlyrics.ly [new file with mode: 0644]
input/bugs/cross-staff-tuplet.ly [new file with mode: 0644]
input/bugs/repeat-line-break.ly [new file with mode: 0644]
input/bugs/weird-x-staff-tuplet.ly [new file with mode: 0644]
input/test/incipit.ly
input/test/orchestscore.ly
input/test/repeat-line-break.ly [new file with mode: 0644]
input/trip.ly
lily/afm.cc
lily/align-interface.cc
lily/axis-group-interface.cc
lily/break-algorithm.cc
lily/chord-name.cc
lily/column-x-positions.cc
lily/crescendo.cc
lily/dots.cc
lily/gourlay-breaking.cc
lily/grace-align-item.cc
lily/idealspacing.cc
lily/include/bow.hh [deleted file]
lily/include/break-algorithm.hh
lily/include/column-x-positions.hh
lily/include/dimension-cache.hh
lily/include/gourlay-breaking.hh
lily/include/idealspacing.hh
lily/include/lily-guile.hh
lily/include/line-of-score.hh
lily/include/molecule.hh
lily/include/paper-column.hh
lily/include/paper-outputter.hh
lily/include/rod.hh
lily/include/score-element.hh
lily/include/simple-spacer.hh
lily/include/spring.hh
lily/key-item.cc
lily/lily-guile.cc
lily/line-of-score.cc
lily/lookup.cc
lily/molecule.cc
lily/music-output-def.cc
lily/note-head.cc
lily/paper-column.cc
lily/paper-outputter.cc
lily/paper-score.cc
lily/rod.cc
lily/score-element.cc
lily/separating-group-spanner.cc
lily/simple-spacer.cc
lily/spacing-spanner.cc
lily/spanner.cc
lily/spring.cc
lily/stem-tremolo.cc
lily/stem.cc
lily/system-start-delimiter.cc
lily/text-item.cc
lily/translator-ctors.cc
lily/tuplet-spanner.cc
lily/volta-spanner.cc
make/out/lilypond.lsm
make/out/lilypond.spec
po/ru.po [new file with mode: 0644]
scm/lily.scm

diff --git a/CHANGES b/CHANGES
index 5948934b2711acda38eca310cb807f85f497995f..5e4b8ca693b763b2dfcabb6845e39376c715bb37 100644 (file)
--- 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.
 
index d2b24987f6b9bcfdaf32656d37d606bcb298d2c3..0b12f68e14006d1e4bef130f70082a9e99f6a556 100644 (file)
@@ -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 44743cb935b2195d319aa245b0a78ae21e2b8454..991333178404ff3a0001a184043fca337f0ed68c 100644 (file)
--- 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 (file)
index e69de29..0000000
diff --git a/buildscripts/make-cygwin-cross.sh b/buildscripts/make-cygwin-cross.sh
deleted file mode 100644 (file)
index e69de29..0000000
index 72b3d248db2c408648c87b4b1d8c6852353c0597..46394bf4d53d581657ab7e221cc5bf189935b88f 100644 (file)
@@ -201,9 +201,10 @@ Dstream::~Dstream()
 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;
     }
 }
 
index 9134b80afcb5c1283e847b00a5f89d44f80270fb..ab756d99308fa3bcaadf8c4e067083f3c3308316 100644 (file)
@@ -13,6 +13,8 @@
 #include "string.hh"
 #include "array.hh"
 
+#include <map>
+
 #include "hash-table.hh"
 
 
@@ -28,25 +30,28 @@ struct Dict_initialiser
 
 
 /*
-  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 ();
+  }
+  
 };
 
 
diff --git a/input/bugs/addlyrics.ly b/input/bugs/addlyrics.ly
new file mode 100644 (file)
index 0000000..b278d88
--- /dev/null
@@ -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 (file)
index 0000000..10f689b
--- /dev/null
@@ -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 (file)
index 0000000..06ff02c
--- /dev/null
@@ -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 (file)
index 0000000..51d57cc
--- /dev/null
@@ -0,0 +1,10 @@
+
+\score { \context PianoStaff \notes <
+
+{ \times 2/3 { [c8 c\translator Staff = down c]  }}
+        \context Staff = down c4
+        
+        >
+
+        }
+        
index d0f5b7f030fa9cf213cb9d69e8d159118f494dd0..08a8794003100a218dca63cf364a7c9470849c62 100644 (file)
@@ -12,6 +12,10 @@ incipit = \notes\relative c'{
   <b1 fis' b d>
 }
 
+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";
index ccf4d926e1c532e9670bb39d33b3b0cdfdc79a60..34078216c73fcb2755d329bfa84d1705697e6a6c 100644 (file)
@@ -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 (file)
index 0000000..06ff02c
--- /dev/null
@@ -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 }
+
+}
+}
index 4ea9a9beae08dd5ef21ea6066cec3b9ff33d9795..1e4cbcb2b4abc2fbe41560b9c6330f8891165a68 100644 (file)
@@ -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 |
index 791311adb8a241aeeed70013f3f9e6b350659e02..1f1d22f1dbfde2f059603aeaffbc7c3e463f36f5 100644 (file)
@@ -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<String,int>::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;
 }
 
 
index 9d5a00abf52c975cbc657d7299738e7f361fd8ac..30e9fda247d358d28d0ba88cc0374151d3c66807 100644 (file)
@@ -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;
 }
 
index a9d868a3a94e9f11f05d40e7331d46d131866ceb..e7dcde019b882596ab22ffc871982726216d6b62 100644 (file)
@@ -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;
 }
 
 
index 3337bff317a95f570e15a14b6314022e3f34377f..7c679d76fb42b0e22589e291d5494fbd55c41896 100644 (file)
@@ -63,7 +63,6 @@ Break_algorithm::generate_spacing_problem (Link_array<Paper_column> 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];
index 7a05a08844b7eec3958193e9a7ba8ea44a08bc27..0e8e1d094295bda6e27cc120283ccb73013aa861 100644 (file)
 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);
@@ -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;
index 080c178ce027c32257b483e0fbae9f48aacc4f4b..3a56d61cce272f67bb0cc0c015ff82206b493665 100644 (file)
@@ -12,7 +12,6 @@
 
 Column_x_positions::Column_x_positions()
 {
-  energy_f_ = infinity_f;
   satisfies_constraints_b_ = false;
   force_f_ = 0;
 }
index ffe11eaefb9becbee5967236e7dbab864e46d4dc..236fbfb53c1f8db0514477757cee862c55f2669b 100644 (file)
@@ -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;
     }
index 6f098e611052b0585f801ff1ca8ed0d1119eae76..2487268c2b532971e5c54ed037296d13d3e7f754 100644 (file)
@@ -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);
 
 
index 696a0d88a66fb0d9657f87061a27372ba3408125..3f9662a99a95b07f3600de8c3ca6b327ed74839c 100644 (file)
@@ -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;
 }
 
 
index b2830a2050dcc6d3aab1acf0b9be18dae41f0781..73ef013c07ff941277beb69c888f305ad2d33817 100644 (file)
@@ -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",
index d7379218f162c57b43c29b8d84ecd083d8bb2198..90cfa1dbae38da7848f33a3eccc5bd50e20525fd 100644 (file)
 #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 (file)
index 8b13789..0000000
+++ /dev/null
@@ -1 +0,0 @@
-
index 00da3940ce7a0df67eb45a3007e8fde4723e0b86..b01487e171d8309bb4c90809b1b9bb94a3642443 100644 (file)
@@ -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<Paper_column>) const;
     
index dd5c323755ea55b0a2bf7c86bbb7ecb34b6ab068..23bea78d2ed195f37faeba5ef99c228df454e9ff 100644 (file)
@@ -15,9 +15,7 @@ struct Column_x_positions
 {
   Link_array<Paper_column> cols_;
   Array<Real> config_;
-  
   Real force_f_;
-  Real energy_f_;
   bool satisfies_constraints_b_;
 
   Column_x_positions();
index f40337564c2c44c830f1b4c2c15fdf150a1d183d..a5033b7914a57b621fbbad995107fd2a6ed9dd72 100644 (file)
@@ -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<Dimension_cache> caches) const;
+
   void set_empty (bool);
   void translate (Real);
 
index 6baa4780d7f9c214c46fe8c7a17b245ea62308c1..68361114b1feb5ddf12e45ae6f386ac1f9981506 100644 (file)
@@ -17,8 +17,6 @@
  */
 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;
index 6b8d2a44ba22aed83066061fe8670fc0135214e0..3e9585d145f3a41dc95a58fa0e1657c2a0b98c06 100644 (file)
@@ -21,9 +21,6 @@ struct Idealspacing {
   /// the two columns
   Drul_array<int> cols_drul_;
     
-  Real energy_f (Real x) const;
-  void print() const;
-  void OK() const ;
   Idealspacing();
 };
 
index cb0fb404910faf8d5a7dfbd412c7c601eb00fca3..ffe7c21c53d8173e6bbcbe884584be038c315abd 100644 (file)
@@ -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);
index 1e81b087f96b8384908afcef52e16dcac2d645f7..2a0af1ab1ffa1a3f9f4e80805e89098f9dda8182 100644 (file)
 #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<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;
index ec5ed0e409cb407c884ea4faa7e631e20f1ac93a..d9cd2bb11aecdd26a6adc05ab21a7e163153e3c1 100644 (file)
 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);
index 796781a2b232ac096aad21531d5c092409f90ea3..8bf231d3f49745ccad5ff0b5dcc896004ea3b574 100644 (file)
@@ -34,10 +34,16 @@ public:
 
   /*
     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);
@@ -58,7 +64,6 @@ public:
   bool musical_b () const;
 
   void set_rank (int);
-  virtual void do_print() const;
 private:
     
   /**
index 73ad6aecf0ea1849737b8436a382db2ad2398700..8758535ea8c8fce05ecc676f27d35c249e4bcc15 100644 (file)
  */
 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);
index 4374f3c4eff242cfb0684e7c3a8939fa9536f3da..4edf21b1cd1d3ca15d6d6c8220a2861f9cc00062 100644 (file)
@@ -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*> item_l_drul_;
   Real distance_f_;
+
+  /**
+    translate the rod so as to refer to Paper_columns  
+   */
+  void columnize ();
+  
   void add_to_cols ();
 
   Rod ();
index 8bc4761cf16c1d9ee3642bdc4371f9373152a0a0..8c4b9aa3a02b295c40af0738e08e0c1e412fa079 100644 (file)
@@ -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<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);
index 5a1501347a125b443d21c8b7ea4e86095efbff1e..0cc519fdbb3120a7426c165445c5028bb098b128 100644 (file)
@@ -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;
 };
 
index 739df44dd26cd2d9e70c86da9ec93e32344078e4..3e88aadf38df9f1e56a95db10cf1607c9318b043 100644 (file)
@@ -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{
index 72380e73116a65a26c25e769f05594a1b9ef429c..143d7da10302ac7ba0c0e4eeb66e83e1d3874913 100644 (file)
@@ -87,8 +87,6 @@ Key_item::calculate_position(SCM pair) const
   TODO
   - space the `natural' signs wider
 
-  
-  
  */
 
 Molecule 
index 9d030b8e864b454e7f0c91397f31405a22aa7006..ebe2ff5b697436ce5f778e66220690fc432ccb8e 100644 (file)
@@ -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
index 5ca3685dee659a8643a3728510773252a9dc255d..06b20f4e44d729bac25da45ba194f344355db818 100644 (file)
@@ -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<Line_of_score*> (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<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)
 {
@@ -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<Item> 
 Line_of_score::broken_col_range (Item const*l, Item const*r) const
 {
index 166af27043c12223fa57c58a0d667fe424853e7a..85b9a02bd67c988633c6a514ba5076dd566f836d 100644 (file)
@@ -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);
 }
 
 
index db6472b9e547804ba21e6227505e00a2b6b16505..538edc4f9ba6f4f093ceed124df0c448be3f3407 100644 (file)
@@ -6,11 +6,6 @@
   (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
 {
@@ -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_;
+}
index 4330d1733aa980549403b875624c0b20e4918e09..a673d9fcb9f2d47104b0c9cc842e480250921bd5 100644 (file)
@@ -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<String, Translator*>::const_iterator ki
+    =global_translator_dict_p->find (name);
+
+  if (ki != global_translator_dict_p->end ())
+    return (*ki).second ;
 
   return 0;
 }
index 91dbeec61df487b793d88a762b99b1e2814f3558..027f736c54405a5fb2359b1da6cac0fdd2858f54 100644 (file)
@@ -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;
 }
 
index 2f225d0718d55fb6eba1b11183ec34a274666702..d81fc89911109df902b462e0ec9c185e5a3a5cbf 100644 (file)
@@ -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
index 1d5ee856a146145126139434ce169658dac2ba5f..3e2bcaa7d267ac5c515cddab94dc55a96e9e3f60 100644 (file)
   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<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)
 {
@@ -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));
 }
 
 
index 941cfe71abcbc3d1ee38f12796f1ef98432462f1..a398ccac796bea8699f58ee88cfc25e04594b918 100644 (file)
@@ -82,9 +82,9 @@ Paper_score::process ()
   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();
   
@@ -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;
 }
index 0db3c858857ebb49e9f09e71497c6ef032545dd1..90af9edf1b67c577cdbd9ef2f3be5aa970a116d7 100644 (file)
@@ -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<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_ );
 }
 
index 654469111fbb5e62258d449581356f2c8e1f4da9..86ef757802050d2f44d4107aeb9023e38b4fa33e 100644 (file)
@@ -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<Score_element*>(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<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))
@@ -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 <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()
 {
@@ -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<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 *
index 43e7d0d8c0ffc79e387e6d0ca52ee1af23de7ef3..295bef4824fa866176c26ac6224b0a8dc1add831 100644 (file)
@@ -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<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;
 }
 
index 85ec8481234be6b98c6379917507f3df9d6e4721..905158ae1f70fa099b233d87a8dc4d1d269fc257 100644 (file)
@@ -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<Paper_column> 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<Paper_column> 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<Paper_column> cols)
   
   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_ );
@@ -216,6 +214,9 @@ Simple_spacer::add_columns (Link_array<Paper_column> 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<Paper_column> 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 <springs_.size (); i++)
-    {
-      e += springs_[i].energy_f (force_f_);
-    }
-
-  if (force_f_ < 0)
-    e *= compression_energy_factor_f_;
-
-  return e;
-}
index 6ad6b1a06c6d5e92bc1b5599619755b22f1e1b39..4b413ec6a8cc61d06498e992ef88e0ff93e1dad3 100644 (file)
@@ -156,8 +156,10 @@ Spacing_spanner::do_measure (Link_array<Paper_column> 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<Spring>
 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;
 }
 
index d3623668e1cd876893dbe7ffacd15ce285b40e5f..c384224889c36aa47e621ca2d3c2db55ef11c84e 100644 (file)
@@ -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<Spanner*>(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<Line_of_score*> (this))
     {
       set_parent (i, X_AXIS);
index b061067833e1d9a06b7b5ec4e3529c18b032f98c..ae5f33da74af49aa03598182b5bc9ad6ae1bcf15 100644 (file)
@@ -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
-}
index 855aa46d03f86e0f380ed4c2cac3f3d5a982d38f..1bc5041b296c296706b33cad9002fd05710419b8 100644 (file)
@@ -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
index 22344c6099bad318a42127d60c679cabc8ff9867..ce5103d7df7061f9659ea331d77ad8b52d182765 100644 (file)
@@ -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;
 }
index be44c6c6e210d1bced0afa42507149f65365f59a..b8514809619f2649549be53e040fe08246a4a7e2 100644 (file)
@@ -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;
 }
 
index 0b0845e143987eceb45a9f2efcd535d386fc06b0..9eb30473566fe2bf33bb221055c4a691f58429a2 100644 (file)
@@ -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; 
 }
 
index 8c72758890b4a9be4940736b3e10f799638a91ae..53dee7207dc6a3ab9fbe6acadd68a9db840abc2e 100644 (file)
@@ -26,7 +26,7 @@ add_translator (Translator *t)
   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*
index f68d175a0b88eaed4afc17e445e52233ec5a9204..6c690bb8e7f0022abc4b07a8940e9d205c93aa34 100644 (file)
@@ -135,7 +135,9 @@ Tuplet_spanner::calc_position_and_height (Real *offset, Real * dy) const
   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 ();
 
   /*
@@ -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;
 
index f3cc65b459df303fa4a2dbab1971cef3dfd3cb13..ad7f9aa3014c3c7933a9ea8a099c9335d6cfd571 100644 (file)
@@ -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);
index 0520379e975564de1778b329cdf71b34d178cbec..eea162f829f5cb1437df2c11c4b9925d0d81117c 100644 (file)
@@ -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
index c7e4e534907646a3ec1b523b81deea8720cab39f..a8c7eb39c799034ebe050d511fe8efd57c1b4910 100644 (file)
@@ -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 (file)
index 0000000..ed776a6
--- /dev/null
+++ b/po/ru.po
@@ -0,0 +1,1071 @@
+# 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 "% ÉÚ ×ÈÏÄÎÏÇÏ ÆÁÊÌÁ: "
index 2f237ac73acb0fdb2a335ae6ff7cbc34a24e67d8..ec316ecff81ade53fb0c36f21003ccef7e381b46 100644 (file)
    ((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))