---- ../lilypond-1.3.72.mb1/CHANGES Thu Jul 13 18:50:24 2000
-++ b/CHANGES Fri Jul 14 16:33:48 2000
-@@ -1,3 +1,9 @@
-1.3.72.mb2
-======
* Removed \interscoreline after the last line, prevents some
- empty pages.
+empty pages. (patch by Mats Bengtsson)
+
+* Smobified Music, junked associated identifiers. Use Scheme list to
+store Music_sequence. Removed const declarations from
+Music_iterators. Added a mutable and immutable property list to
+Music. Use music property for all Scheme values in Music. Created
+and fixed a load of Garbage Collection bugs.
+
+* Changed number font to allow automatic .mf creation.
+
+* Output place of definition as \special{src:LOCATION}. See FAQ for
+explanation how to use.
+
+* Schemified Local_key_item and fixed minor bug with accidentals.
+
+* new Japanese .po file.
+
+* Bugfix for broken tie direction
+
+* Bugfix for bar at beginning of line break
+
+1.3.72
+======
- 1.3.72.mb1
- ======
- * Robustness fix for minimise_least_squares ()
+* Robustness fix for minimise_least_squares ()
* cleanups of Slur_bezier_bow, removed Bezier_bow.
@setfilename faq.info
@settitle FAQ - GNU LilyPond FAQs
-@node Top, , Windows32, (dir)
+@node Top, , , (dir)
@top
@menu
-* FAQ - GNU LilyPond FAQs:: FAQ - GNU LilyPond FAQs
-@end menu
-
-
-
-@node FAQ - GNU LilyPond FAQs, Miscellaneous, , Top
-@menu
* Miscellaneous:: Miscellaneous
* Installing:: Installing
* Documentation:: Documentation
@chapter FAQ - GNU LilyPond FAQs
-@node Miscellaneous, Installing, FAQ - GNU LilyPond FAQs, FAQ - GNU LilyPond FAQs
+@node Miscellaneous, ,,top
@section Miscellaneous
@subsubsection HELP! I'm stuck!
Note: relative paths are meant to be relative to the source directory
-@node Installing, Documentation, Miscellaneous, FAQ - GNU LilyPond FAQs
+@node Installing,, ,top
@section Installing
your local TeX guru. The supplied @file{.afm} files are intended to
be used by LilyPond, not by any other programs.
-@node Documentation, Language- mudela, Installing, FAQ - GNU LilyPond FAQs
+@node Documentation,, ,top
@section Documentation
@subsubsection What a sober website/manual you have there!
-LilyPond development is moving quite fast, documentation will often lag
-a bit behind. But don't hesitate to point out inaccuracies. Whip up
-your mail reader and write to the mailing list.
+LilyPond development is moving fast, so the documentation will often be out
+of date. But don't hesitate to point out inaccuracies. Whip up your
+mail reader and write to the mailing list.
@subsubsection Please take me off your mailing list, I get so much mail!
Don't ask Han-wen, don't ask David. Instead, read about
@uref{../../index.html#mailing-lists, the mailing lists} here.
-@node Language- mudela, Do you support -, Documentation, FAQ - GNU LilyPond FAQs
+
+
+@node Language- mudela,, ,top
@section Language: mudela
@subsubsection Why do I have to type the accidentals to the note if I
the symbol string. You can access the symbol string easily for some
symbols (notably lyrics and @code{^"text"} commands).
-@node Do you support -, How do I -, Language- mudela, FAQ - GNU LilyPond FAQs
+@node Do you support -,, ,top
@section Do you support ...
@subsubsection Do you support pop songs (chords, single staff, lyrics)?
Yes. See @file{input/test/grace.ly}.
-@node How do I -, Development, Do you support -, FAQ - GNU LilyPond FAQs
+@node How do I -,, ,top
@section How do I ....
@subsubsection How do I change the TeX layout?
@end example
-@node Development, Running, How do I -, FAQ - GNU LilyPond FAQs
+@node Development,, ,top
@section Development
@subsubsection Could you implement feature XXXX? It is really easy, just extend the syntax to allow YYYY!
Upgrade/downgrade to 4.17.
-@node Running, Copyright, Development, FAQ - GNU LilyPond FAQs
+@node Running,, ,top
@section Running
+@subsubsection Correcting errors is so tedious. Is there a better way?
+
+As of 1.3.73, lilypond provides support for the xdvi @code{src:}
+special. This can be used with Xdvik (22.16 or better) and xdvi (22.28
+or better) to go to the place in the input that corresponds to a symbol
+in the output.
+
+lilypond:
+
+Decide if you want column positioning, and edit @file{lily.scm}
+according to the comments at the function @code{define-origin}.
+
+emacs:
+
+Put this in @file{~/.emacs}:
+@example
+(server-start)
+@end example
+
+For column positioning, apply @uref{this
+patch,http://www.cs.uu.nl/~hanwen/software/emacsclient-column} to
+@code{emacsclient.c} and @code{server.el}. Stick the compiled
+emacsclient into a bin directory, and put @code{server.el} into a elisp
+directory (eg. @file{~/usr/share/emacs/}). Add the following to your
+@file{.emacs} init file, before invoking server-start.
+@example
+(setq load-path (cons (concat (getenv "HOME") "/usr/share/emacs")
+ load-path))
+@end example
+
+Xdvik:
+
+Warning: @uref{Xdvik,ftp://ftp.cs.uu.nl/pub/tex-archive/dviware/xdvik/},
+which is shipped with most TeX distributions, doesn't work very well for
+src specials. You're better off using plain xdvi.
+@example
+ xdvi -srcmode -srcvisibility output.dvi
+@end example
+
+Click control-mouse button 2 for making emacs jump to the appropriate place.
+
+For column positioning you must install this @uref{patch,
+http://www.cs.uu.nl/~hanwen/software/xdvik-src} to make Xdvik emit
+column numbers. Add the command line option @code{-srceditorcommand
+"emacsclient --no-wait +%l:%c %f"}
+
+Xdvi
+
+@uref{Xdvi,ftp://ftp.math.berkeley.edu/pub/Software/TeX/xdvi.tar.gz} has
+better support for src specials. Apply @uref{this patch,
+http://www.cs.uu.nl/~hanwen/software/xdvi-src}. When viewing,
+control-mousebutton 1 will take you to the correct line/column.
+
+
@subsubsection I use dvilj4, and there are lots of warning messages for the printing
You should use dvips and ghostscript to print the @code{dvi} output: the
done, and as a method of proof"reading" the input. The MIDI support
is by no means finished. Patches appreciated.
-@node Copyright, Windows32, Running, FAQ - GNU LilyPond FAQs
+@node Copyright,, ,top
@section Copyright
@subsubsection What is Urtext? Critical Edition?
expert forum for such subsubsections.
-@node Windows32, Top, Copyright, FAQ - GNU LilyPond FAQs
+@node Windows32,, ,top
@section Windows32
@subsubsection I downloaded the windows32 port, and it doesn't match the website!
same value. Clef changes also get extra space, but not as much as
barlines.
-
Even if a line is very tightly spaced, there will still be room
between prefatory matter and the following notes. The space after the
prefatory is very rigid. In contrast, the space before the barline
@mudelafile{keys.ly}
+
+
+
@ignore
@c the input file is too long and does not test for specific bugs
PACKAGE_NAME=LilyPond
MAJOR_VERSION=1
MINOR_VERSION=3
-PATCH_LEVEL=72
-MY_PATCH_LEVEL=mb2
+PATCH_LEVEL=73
+MY_PATCH_LEVEL=
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
# released version.
Input spot () const;
String location_str () const;
String line_number_str () const;
+
+
+ String file_str ()const;
+ int line_number ()const;
+ int column_number ()const;
+
+
Input (Source_file*, char const*);
Input ();
};
// only used in binary-source-file, currently
-protected:
+public:
Slice line_slice (char const* pos_ch_C) const;
String line_str (char const* pos_ch_C) const;
int column_i (char const* pos_ch_C) const;
}
/*
- Produce almost GNU-compliant error message. Lily used to be rather
- GNU-compliant in this too, but correcting mudela is such a breeze if
- you('re edidor) know(s) the error column too (there's no GNU standard
- on columns, is there?).
-
+ Produce GNU-compliant error message. Correcting mudela is such a
+ breeze if you('re edidor) know(s) the error column too
+
Format:
[file:line:column:][warning:]message
else
return "?";
}
+
+String
+Input::file_str () const
+{
+ if (source_file_l_)
+ return source_file_l_->name_str ();
+ else
+ return "";
+}
+
+
+int
+Input::line_number () const
+{
+ if (source_file_l_)
+ return source_file_l_->line_i (defined_ch_C_);
+ else
+ return 0;
+
+}
+
+int
+Input::column_number () const
+{
+ if (source_file_l_)
+ return source_file_l_->column_i (defined_ch_C_);
+ else
+ return 0;
+
+}
+++ /dev/null
-
-\score {
-\notes
-\context Staff\relative c'' {
- \repeat "volta" 2 { c1 \break } \alternative { d e }
- c1
- \repeat "volta" 2 { c1 } \alternative { { d \break} e }
-
-}
-}
--- /dev/null
+
+
+\score{ \sequential {\clef bass ; }
+\paper { \translator { \type Score_engraver ; \name "Score"; }
+ linewidth =1.5\cm;
+
+}
+
+}
\context Staff <
\context Voice = two { r4 }
\context Voice = one { \stemup s4 dis' cis cis ~ |
- % BUG -> (insane springs.)
\times 4/5
{ [cis8 ( cis
Side_position::set_direction (align_item_p_, LEFT);
// needed for setting font size.
- announce_element (Score_element_info (align_item_p_, 0));
+ announce_element (align_item_p_, 0);
}
void
Beam::add_stem (beam_p,(*stem_l_arr_p_)[i]);
}
- announce_element (Score_element_info (beam_p, 0));
+ announce_element (beam_p, 0);
return beam_p;
}
(c) 1999--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
-#include "axis-group-engraver.hh"
#include "spanner.hh"
#include "paper-column.hh"
#include "axis-group-interface.hh"
-
+#include "engraver.hh"
#include "engraver-group-engraver.hh"
+/**
+ Put stuff in a Spanner with an Axis_group_interface.
+ Use as last element of a context.
+ */
+class Axis_group_engraver : public Engraver
+{
+protected:
+ Spanner *staffline_p_;
+ Link_array<Score_element> elts_;
+ virtual void do_creation_processing();
+ virtual void do_removal_processing();
+ virtual void acknowledge_element (Score_element_info);
+ virtual void process_acknowledged ();
+ virtual Spanner* get_spanner_p () const;
+public:
+ VIRTUAL_COPY_CONS(Translator);
+ Axis_group_engraver ();
+};
+
+ADD_THIS_TRANSLATOR(Axis_group_engraver);
+
Axis_group_engraver::Axis_group_engraver ()
{
staffline_p_ = 0;
Pointer_group_interface (it, "bounded-by-me").add_element (staffline_p_);
staffline_p_->set_bound(LEFT,it);
- announce_element (Score_element_info (staffline_p_, 0));
+ announce_element (staffline_p_, 0);
}
Spanner*
elts_.clear ();
}
-ADD_THIS_TRANSLATOR(Axis_group_engraver);
+
+////////////////////////////////////////////////////////
+
+// maybenot sucsh a good idea after all.
+
+#include "hara-kiri-group-spanner.hh"
+#include "rhythmic-head.hh"
+
+class Hara_kiri_engraver : public Axis_group_engraver
+{
+protected:
+ virtual Spanner*get_spanner_p ()const;
+ virtual void acknowledge_element (Score_element_info);
+public:
+ VIRTUAL_COPY_CONS(Translator);
+};
+
+Spanner*
+Hara_kiri_engraver::get_spanner_p () const
+{
+ Spanner * sp = new Spanner (get_property ("basicHaraKiriVerticalGroupspannerProperties"));
+ Hara_kiri_group_spanner::set_interface (sp);
+ return sp;
+}
+
+void
+Hara_kiri_engraver::acknowledge_element (Score_element_info i)
+{
+ Axis_group_engraver::acknowledge_element (i);
+ if (Rhythmic_head::has_interface (i.elem_l_))
+ {
+ Hara_kiri_group_spanner::add_interesting_item (staffline_p_, i.elem_l_);
+ }
+}
+ADD_THIS_TRANSLATOR(Hara_kiri_engraver);
{
me->set_interface (ly_symbol2scm ("axis-group-interface"));
}
- me->set_elt_property ("elements", SCM_EOL);
}
bar_p_->set_elt_property ("glyph", default_type); // ugh
}
- announce_element (Score_element_info (bar_p_, 0));
+ announce_element (bar_p_, 0);
}
}
Protected_scm staffs_;
protected:
- virtual void do_creation_processing ();
virtual void do_pre_move_processing ();
virtual void acknowledge_element (Score_element_info);
void create_items();
staffs_ = SCM_EOL;
}
-void
-Bar_number_engraver::do_creation_processing ()
-{
-}
}
- announce_element (Score_element_info (text_p_, 0));
+ announce_element (text_p_, 0);
}
if (d == STOP && !beam_p_)
{
- m->warning (_ ("can't find start of beam"));
+ m->origin ()->warning (_ ("can't find start of beam"));
return false;
}
reqs_drul_[d ] = c;
if (reqs_drul_[STOP])
{
if (!beam_p_)
- reqs_drul_[STOP]->warning (_("can't find start of beam"));
+ reqs_drul_[STOP]->origin ()->warning (_("can't find start of beam"));
prev_start_req_ =0;
finished_beam_p_ = beam_p_;
finished_beam_info_p_ = beam_info_p_;
{
if (beam_p_)
{
- reqs_drul_[START]->warning (_ ("already have a beam"));
+ reqs_drul_[START]->origin ()->warning (_ ("already have a beam"));
return;
}
/* urg, must copy to Auto_beam_engraver too */
- announce_element (Score_element_info (beam_p_, reqs_drul_[START]));
+ announce_element (beam_p_, reqs_drul_[START]);
}
}
typeset_beam ();
if (beam_p_)
{
- prev_start_req_->warning (_ ("unterminated beam"));
+ prev_start_req_->origin ()->warning (_ ("unterminated beam"));
finished_beam_p_ = beam_p_;
finished_beam_info_p_ = beam_info_p_;
typeset_beam ();
{
String s = _ ("stem must have Rhythmic structure");
if (info.req_l_)
- info.req_l_->warning (s);
+ info.req_l_->origin ()->warning (s);
else
::warning (s);
if (rhythmic_req->duration_.durlog_i_<= 2)
{
- rhythmic_req->warning (_ ("stem doesn't fit in beam"));
- prev_start_req_->warning (_ ("beam was started here"));
+ rhythmic_req->origin ()->warning (_ ("stem doesn't fit in beam"));
+ prev_start_req_->origin ()->warning (_ ("beam was started here"));
/*
don't return, since
{
align_l_ = new Item (get_property ("basicBreakAlignProperties"));
Break_align_item::set_interface (align_l_);
- announce_element (Score_element_info (align_l_,0));
+ announce_element (align_l_,0);
SCM edge_sym = ly_symbol2scm ("Left_edge_item");
Item * edge = new Item (get_property ("leftEdgeBasicProperties"));
align_l_->set_elt_property ("group-center-element", edge->self_scm_);
- announce_element (Score_element_info(edge, 0));
+ announce_element (edge, 0);
column_alist_ = scm_assoc_set_x (column_alist_, edge_sym, edge->self_scm_);
}
group->set_elt_property ("break-align-symbol", align_name);
group->set_parent (align_l_, Y_AXIS);
- announce_element (Score_element_info (group, 0));
+ announce_element (group, 0);
column_alist_ = scm_assoc_set_x (column_alist_, align_name, group->self_scm_);
}
Axis_group_interface::add_element (group, item_l);
#include "musical-request.hh"
#include "command-request.hh"
#include "engraver-group-engraver.hh"
-#include "local-key-item.hh"
+#include "item.hh"
#include "engraver.hh"
#include "command-request.hh"
Breathing_sign::set_interface (breathing_sign_p_);
- announce_element (Score_element_info (breathing_sign_p_, breathing_sign_req_l_));
+ announce_element (breathing_sign_p_, breathing_sign_req_l_);
}
}
+ report_to_l ()->type_str_ + " = `"
+ report_to_l ()->id_str_ + "': ";
warning (warn2);
- t->warning (warn1);
+ t->origin ()->warning (warn1);
}
/*
if (chord.bass_b_)
chord_name_p_->set_elt_property ("bass", chord.bass_pitch_.to_scm ());
- announce_element (Score_element_info (chord_name_p_, 0));
+ announce_element (chord_name_p_, 0);
}
void
SCM smp = get_property ("measurePosition");
Moment mp = (unsmob_moment (smp)) ? *unsmob_moment (smp) : Moment (0);
beam_start_location_ = mp;
- announce_element (Score_element_info (beam_p_, repeat_));
+ announce_element (beam_p_, repeat_);
}
}
typeset_beam ();
if (beam_p_)
{
- repeat_->warning (_ ("unterminated chord tremolo"));
+ repeat_->origin ()->warning (_ ("unterminated chord tremolo"));
finished_beam_p_ = beam_p_;
typeset_beam ();
}
{
String s = _ ("stem must have Rhythmic structure");
if (info.req_l_)
- info.req_l_->warning (s);
+ info.req_l_->origin ()->warning (s);
else
::warning (s);
}
this is culled from various other iterators, but sharing code by subclassing proved to be too difficult.
*/
+#include "input.hh"
#include "chord-tremolo-iterator.hh"
#include "repeated-music.hh"
void
Chord_tremolo_iterator::construct_children ()
{
- Repeated_music const* rep = dynamic_cast<Repeated_music const*> (music_l_);
+ Repeated_music * rep = dynamic_cast<Repeated_music*> (music_l_);
factor_ = Moment (1, rep->repeats_i_);
- child_iter_p_ = get_iterator_p (rep->repeat_body_p_);
+ child_iter_p_ = get_iterator_p (rep->body ());
}
Chord_tremolo_iterator::Chord_tremolo_iterator()
if (yeah)
set_translator (yeah->report_to_l ());
else
- music_l_->warning ( _("no one to print a tremolos"));
+ music_l_->origin ()->warning ( _("no one to print a tremolos"));
}
child_iter_p_->process_and_next (factor_ * m);
}
Music_iterator*
-Chord_tremolo_iterator::try_music_in_children (Music const *m) const
+Chord_tremolo_iterator::try_music_in_children (Music *m) const
{
return child_iter_p_->try_music (m);
}
{
clef_req_l_ = cl;
if (!set_type (cl->clef_str_))
- cl->error (_ ("unknown clef type"));
+ cl->origin ()->warning (_ ("unknown clef type"));
return true;
}
if (!clef_p_)
{
Item *c= new Item ( current_settings_);
- announce_element (Score_element_info (c, clef_req_l_));
+ announce_element (c, clef_req_l_);
Staff_symbol_referencer::set_interface (c);
g->add_offset_callback (Side_position::centered_on_parent, X_AXIS);
g->set_elt_property ("direction", gh_int2scm (octave_dir_));
octavate_p_ = g;
- announce_element (Score_element_info (octavate_p_, clef_req_l_));
+ announce_element (octavate_p_, clef_req_l_);
}
}
Axis_group_interface::set_interface (col_p_);
Axis_group_interface::set_axes (col_p_, X_AXIS, Y_AXIS);
- announce_element (Score_element_info (col_p_,0));
+ announce_element (col_p_,0);
}
for (int i=0; i< note_column_l_arr_.size (); i++)
Key_change_req::do_equal_b (Request const * req) const
{
Key_change_req const * k = dynamic_cast<Key_change_req const*> (req);
- return k && scm_equal_p (pitch_alist_, k->pitch_alist_);
+ return k && scm_equal_p (get_mus_property ("pitch-alist"), k->get_mus_property ("pitch-alist"));
}
-
void
Key_change_req::transpose (Musical_pitch p)
{
SCM newlist = SCM_EOL;
- for (SCM s = pitch_alist_; gh_pair_p (s); s = gh_cdr (s))
+ SCM pa = get_mus_property ("pitch-alist");
+ for (SCM s = pa; gh_pair_p (s); s = gh_cdr (s))
{
SCM k = gh_caar (s);
}
}
- pitch_alist_ = newlist;
+ set_mus_property ("pitch-alist", newlist);
}
Break_req::Break_req ()
}
-
bool
Mark_req::do_equal_b (Request const * r) const
{
Mark_req const * other = dynamic_cast<Mark_req const*> (r);
- return other && scm_equal_p (other->mark_label_, mark_label_);
+ return other && scm_equal_p (other->get_mus_property ("mark-label"),
+ get_mus_property ("mark-label"));
}
/*
debug.cc -- implement debugging routines
-
+
source file of the GNU LilyPond music typesetter
(c) 1996--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
Dot_column::set_interface (dotcol_p_);
Side_position::set_axis (dotcol_p_, X_AXIS);
Side_position::set_direction (dotcol_p_, RIGHT);
- announce_element (Score_element_info (dotcol_p_, 0));
+ announce_element (dotcol_p_, 0);
}
Dot_column::add_head (dotcol_p_, info.elem_l_);
Side_position::set_axis (line_spanner_, Y_AXIS);
Axis_group_interface::set_interface (line_spanner_);
Axis_group_interface::set_axes (line_spanner_, Y_AXIS, Y_AXIS);
- announce_element (Score_element_info
- (line_spanner_,
- text_req_l_ ? text_req_l_ : accepted_spanreqs_drul_[START]));
+ announce_element (line_spanner_,
+ text_req_l_ ? text_req_l_ : accepted_spanreqs_drul_[START]);
}
}
text_p_->add_offset_callback (Side_position::aligned_on_self,
Y_AXIS);
- announce_element (Score_element_info (text_p_, text_req_l_));
+ announce_element (text_p_, text_req_l_);
}
if (accepted_spanreqs_drul_[STOP])
{
if (!cresc_p_)
{
- accepted_spanreqs_drul_[STOP]->warning
+ accepted_spanreqs_drul_[STOP]->origin ()->warning
(_ ("can't find start of (de)crescendo"));
}
else
{
if (current_cresc_req_)
{
- accepted_spanreqs_drul_[START]->warning
+ accepted_spanreqs_drul_[START]->origin ()->warning
(current_cresc_req_->span_dir_ == 1
?
_ ("already have a crescendo")
cresc_p_->set_elt_property ("self-alignment-Y", gh_int2scm (0));
cresc_p_->add_offset_callback
(Side_position::aligned_on_self, Y_AXIS);
- announce_element (Score_element_info (cresc_p_, accepted_spanreqs_drul_[START]));
+ announce_element (cresc_p_, accepted_spanreqs_drul_[START]);
}
}
}
{
typeset_element (cresc_p_ );
finished_cresc_p_ = cresc_p_;
- current_cresc_req_->warning (_ ("unterminated (de)crescendo"));
+ current_cresc_req_->origin ()->warning (_ ("unterminated (de)crescendo"));
}
if (line_spanner_)
{
Engraver::announce_element (info);
}
+
void
Engraver_group_engraver::do_announces()
{
trg->do_announces ();
}
- Request dummy_req;
-
while (announce_info_arr_.size ())
{
for (int j =0; j < announce_info_arr_.size(); j++)
{
Score_element_info info = announce_info_arr_[j];
- if (!info.req_l_)
- info.req_l_ = &dummy_req;
-
for (Cons<Translator> *p = trans_p_list_.head_; p; p = p->next_)
{
if (!dynamic_cast <Engraver_group_engraver *> (p->car_))
void
-Engraver::announce_element (Score_element_info i)
+Engraver::announce_element (Score_element_info inf)
{
- Score_element * e = i.elem_l_;
+ daddy_grav_l()->announce_element (inf);
+}
+void
+Engraver::announce_element (Score_element* e, Music *m)
+{
if (e->get_elt_property ("interfaces") == SCM_EOL)
Group_interface (e, "interfaces").add_thing (ly_symbol2scm (e->name()));
+
+ if (m && m->origin ()->location_str ().length_i ())
+ {
+ e->set_elt_property ("origin", m->get_mus_property ("origin"));
+ }
+ Score_element_info i (e, m);
if (!i.origin_trans_l_)
i.origin_trans_l_ = this;
daddy_grav_l()->announce_element (i);
}
+
+
void
Engraver::typeset_element (Score_element*p)
{
if (extender_p_)
{
- req_l_->warning (_ ("unterminated extender"));
+ req_l_->origin ()->warning (_ ("unterminated extender"));
extender_p_->set_bound(RIGHT, unsmob_element (get_property ("currentCommandColumn")));
}
}
{
if (!last_lyric_l_)
{
- req_l_->warning (_ ("Nothing to connect extender to on the left. Ignoring extender request."));
+ req_l_->origin ()->warning (_ ("Nothing to connect extender to on the left. Ignoring extender request."));
return;
}
extender_p_->set_extent_callback (Score_element::point_dimension_callback, Y_AXIS);
Lyric_extender (extender_p_).set_textitem (LEFT, last_lyric_l_);
- announce_element (Score_element_info (extender_p_, req_l_));
+ announce_element (extender_p_, req_l_);
}
}
void
Folded_repeat_iterator::construct_children ()
{
- Repeated_music const * mus = dynamic_cast<Repeated_music const*> (music_l_);
- main_iter_p_ = get_iterator_p (mus->repeat_body_p_);
+ Repeated_music * mus = dynamic_cast<Repeated_music*> (music_l_);
+ main_iter_p_ = get_iterator_p (mus->body ());
if (!main_iter_p_->ok())
{
leave_body ();
{
bool success = try_music (music_l_);
if (!success)
- music_l_->warning ( _("no one to print a repeat brace"));
+ music_l_->origin ()->warning ( _("no one to print a repeat brace"));
}
if (main_iter_p_)
void
Folded_repeat_iterator::leave_body ()
{
- Repeated_music const * mus = dynamic_cast<Repeated_music const*> (music_l_);
+ Repeated_music * mus = dynamic_cast<Repeated_music *> (music_l_);
delete main_iter_p_;
main_iter_p_ = 0;
- main_length_mom_ += mus->repeat_body_p_->length_mom ();
+ main_length_mom_ += mus->body ()->length_mom ();
}
void
Folded_repeat_iterator::enter_alternative ()
{
- Repeated_music const * mus = dynamic_cast<Repeated_music const*> (music_l_);
- if (mus->alternatives_p_)
+ Repeated_music * mus = dynamic_cast<Repeated_music *> (music_l_);
+ if (mus->alternatives ())
{
Simultaneous_music_iterator * s = new Simultaneous_music_iterator;
s->separate_contexts_b_ = true;
- s->init_translator (mus->alternatives_p_, report_to_l ());
+ s->init_translator (mus->alternatives (), report_to_l ());
alternative_iter_p_ = s;
alternative_iter_p_->construct_children ();
}
}
-void
-Folded_repeat_iterator::do_print () const
-{
-#ifndef NPRINT
-#endif
-}
Music_iterator*
-Folded_repeat_iterator::try_music_in_children (Music const* m) const
+Folded_repeat_iterator::try_music_in_children (Music * m) const
{
if (main_iter_p_)
{
/* do the last one */
if (break_idx % HAPPY_DOTS_I)
- progress_indication (String ("[") + to_str (break_idx) + "]");
+ progress_indication (String ("[") + to_str (break_idx) + "]");
progress_indication ("\n");
+++ /dev/null
-/*
- hara-kiri-engraver.cc -- implement Hara_kiri_engraver
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1999--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-
- */
-#include "hara-kiri-group-spanner.hh"
-#include "hara-kiri-engraver.hh"
-#include "rhythmic-head.hh"
-#include "spanner.hh"
-
-Spanner*
-Hara_kiri_engraver::get_spanner_p () const
-{
- Spanner * sp = new Spanner (get_property ("basicHaraKiriVerticalGroupspannerProperties"));
- Hara_kiri_group_spanner::set_interface (sp);
- return sp;
-}
-
-void
-Hara_kiri_engraver::acknowledge_element (Score_element_info i)
-{
- Axis_group_engraver::acknowledge_element (i);
- if (Rhythmic_head::has_interface (i.elem_l_))
- {
- Hara_kiri_group_spanner::add_interesting_item (staffline_p_, i.elem_l_);
- }
-}
-ADD_THIS_TRANSLATOR(Hara_kiri_engraver);
{
if (hyphen_p_)
{
- req_l_->warning (_ ("unterminated hyphen"));
+ req_l_->origin ()->warning (_ ("unterminated hyphen"));
hyphen_p_->set_bound(RIGHT, unsmob_element (get_property ("currentCommandColumn")));
}
}
{
if (!last_lyric_l_)
{
- req_l_->warning (_ ("Nothing to connect hyphen to on the left. Ignoring hyphen request."));
+ req_l_->origin ()->warning (_ ("Nothing to connect hyphen to on the left. Ignoring hyphen request."));
return;
}
hyphen_p_ = new Spanner (get_property ("basicHyphenSpannerProperties"));
hyphen_p_->set_extent_callback (Score_element::point_dimension_callback,Y_AXIS);
Hyphen_spanner (hyphen_p_).set_textitem (LEFT, last_lyric_l_);
- announce_element (Score_element_info (hyphen_p_, req_l_));
+ announce_element (hyphen_p_, req_l_);
}
}
#include "identifier.hh"
#include "my-lily-lexer.hh"
#include "debug.hh"
-#include "request.hh"
#include "translator-group.hh"
#include "ly-smobs.icc"
DEFAULT_PRINT(Translator_group);
-DEFAULT_PRINT(Music);
-DEFAULT_PRINT(Request);
DEFAULT_PRINT(Score);
DEFAULT_PRINT(Music_output_def);
DUMMY_STR(Translator_group);
-DUMMY_STR(Music);
-DUMMY_STR(Request);
DUMMY_STR(Score);
DUMMY_STR(Music_output_def);
DUMMY_STR(Duration);
IMPLEMENT_ID_CLASS(Duration);
IMPLEMENT_ID_CLASS(Translator_group);
-IMPLEMENT_ID_CLASS(Music);
IMPLEMENT_ID_CLASS(Score);
-IMPLEMENT_ID_CLASS(Request);
IMPLEMENT_ID_CLASS(Music_output_def);
-VIRTUAL_ACCESSOR(Music);
-VIRTUAL_ACCESSOR(Request);
VIRTUAL_ACCESSOR(Translator_group);
VIRTUAL_ACCESSOR(Music_output_def);
DEFAULT_ACCESSOR(Duration);
+++ /dev/null
-/*
- axis-group-engraver.hh -- declare Axis_group_engraver
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1999--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-
- */
-
-#ifndef AXIS_GROUP_ENGRAVER_HH
-#define AXIS_GROUP_ENGRAVER_HH
-
-
-#include "engraver.hh"
-
-/**
- Put stuff in a Spanner with an Axis_group_interface.
- Use as last element of a context.
- */
-class Axis_group_engraver : public Engraver
-{
-protected:
- Spanner *staffline_p_;
- Link_array<Score_element> elts_;
-
- virtual void do_creation_processing();
- virtual void do_removal_processing();
- virtual void acknowledge_element (Score_element_info);
- virtual void process_acknowledged ();
- virtual Spanner* get_spanner_p () const;
-public:
- VIRTUAL_COPY_CONS(Translator);
-
- Axis_group_engraver ();
-};
-
-#endif /* AXIS_GROUP_ENGRAVER_HH */
-
virtual bool ok () const;
virtual void do_print () const;
virtual void do_process_and_next (Moment) ;
- virtual Music_iterator *try_music_in_children (Music const *) const;
+ virtual Music_iterator *try_music_in_children (Music *) const;
};
class Mark_req : public Request {
public:
- Protected_scm mark_label_;
-protected:
+ SCM mark_label ();
+
+
virtual bool do_equal_b (Request const*) const;
VIRTUAL_COPY_CONS(Music);
};
class Key_change_req : public Request
{
public:
- Protected_scm pitch_alist_;
-
+ SCM pitch_alist ();
+
protected:
VIRTUAL_COPY_CONS(Music);
void transpose (Musical_pitch d);
class Engraver : public virtual Translator {
friend class Engraver_group_engraver;
-
protected:
-
-
/// utility
Paper_def * paper_l() const;
/**
Invoke walker method to typeset element. Default: pass on to daddy.
*/
virtual void typeset_element (Score_element*elem_p);
-
-
/**
take note of item/spanner
put item in spanner. Adjust local key; etc.
/**
Announce element. Default: pass on to daddy. Utility
*/
- virtual void announce_element (Score_element_info);
+ virtual void announce_element (Score_element*, Music*);
+ virtual void announce_element (Score_element_info);
public:
VIRTUAL_COPY_CONS(Translator);
Engraver_group_engraver * daddy_grav_l() const;
override other ctor
*/
Engraver () {}
-
-
};
void enter_alternative ();
void leave_body ();
- virtual void do_print () const;
virtual void do_process_and_next (Moment);
- virtual Music_iterator *try_music_in_children (Music const *) const;
+ virtual Music_iterator *try_music_in_children (Music *) const;
};
#endif /* FOLDED_REPEAT_ITERATOR_HH */
+++ /dev/null
-/*
- font-size-engraver.hh -- declare Font_size_engraver
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1998--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-
- */
-
-#ifndef FONT_SIZE_GRAV_HH
-#define FONT_SIZE_GRAV_HH
-
-#include "engraver.hh"
-#include "protected-scm.hh"
-/**
- Set font size on elements that do not have a fontsize set yet.
-
- Reads context property fontSize.
-
- Writes element property fontsize
- */
-class Font_size_engraver : public Engraver {
- Protected_scm size_;
-protected:
- virtual void acknowledge_element (Score_element_info);
- virtual void do_process_music ();
-public:
- Font_size_engraver ();
-
- VIRTUAL_COPY_CONS (Translator);
-};
-
-#endif /* FONT_SIZE_GRAV_HH */
-
#include "axis-group-engraver.hh"
-class Hara_kiri_engraver : public Axis_group_engraver
-{
-protected:
- virtual Spanner*get_spanner_p ()const;
- virtual void acknowledge_element (Score_element_info);
-public:
- VIRTUAL_COPY_CONS(Translator);
-};
-
#endif /* HARA_KIRI_ENGRAVER_HH */
class Translator_group_identifier;
-class Music_identifier;
class Output_def_identifier;
-class Request_identifier;
class Score_identifier;
class Duration_identifier;
void error (String) const;
String str () const;
IDACCESSOR(Translator_group)
- IDACCESSOR(Music)
IDACCESSOR(Music_output_def)
- IDACCESSOR(Request)
IDACCESSOR(Score)
IDACCESSOR(Duration)
VIRTUAL_COPY_CONS(Identifier);
DECLARE_ID_CLASS(Translator_group);
DECLARE_ID_CLASS(Duration);
-DECLARE_ID_CLASS(Music);
DECLARE_ID_CLASS(Score);
-DECLARE_ID_CLASS(Request);
DECLARE_ID_CLASS(Music_output_def);
Identifier * unsmob_identifier (SCM);
--- /dev/null
+/*
+ input-smob.hh -- declare input smob
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ */
+
+#ifndef INPUT_SMOB_HH
+#define INPUT_SMOB_HH
+
+#include "input.hh"
+#include "lily-guile.hh"
+
+SCM make_input (Input spot);
+Input *unsmob_input (SCM);
+
+extern Input dummy_input_global;
+
+#endif /* INPUT_SMOB_HH */
+
protected:
virtual void discretionary_processing ();
void copy_breakable_items();
+ virtual SCM do_derived_mark ();
};
#define MAKE_SCHEME_CALLBACK(TYPE, FUNC) \
-static SCM TYPE ## _ ## FUNC ## _scm;\
+static SCM TYPE ## _ ## FUNC ## _proc;\
void \
TYPE ## _ ## FUNC ## _init_functions () \
{ \
- TYPE ## _ ## FUNC ## _scm = gh_new_procedure1_0 (#TYPE "::" #FUNC, \
+ TYPE ## _ ## FUNC ## _proc = gh_new_procedure1_0 (#TYPE "::" #FUNC, \
(SCM(*)(...))TYPE :: FUNC); \
} \
\
int rank_i_;
void post_processing(bool);
- Protected_scm output_;
Line_of_score(SCM);
-
/// is #c# contained in #*this#?
bool contains_b (Paper_column const *c) const;
int element_count () const;
#define LOCALKEYITEM_HH
-#include "item.hh"
#include "array.hh"
#include "musical-pitch.hh"
-
-
-struct Local_key_cautionary_tuple
-{
- Musical_pitch pitch_;
- bool cautionary_b_;
- bool natural_b_;
-
- Local_key_cautionary_tuple ()
- {
- cautionary_b_ = false;
- natural_b_ = false;
- }
- static int compare (Local_key_cautionary_tuple const&s1, Local_key_cautionary_tuple const&s2)
- {
- return Musical_pitch::compare (s1.pitch_, s2.pitch_);
- }
-};
-
-/**
- Accidentals which can be different for each octave.
-
- TODO: schemify me!
- */
-class Local_key_item : public Item
+class Local_key_item
{
- Array<Local_key_cautionary_tuple> accidental_arr_;
-
- static Molecule accidental (Score_element*me, int,bool,bool) ;
+ static Molecule parenthesize (Score_element*me, Molecule) ;
public:
- Local_key_item (SCM );
- static SCM brew_molecule (SCM);
-
- void add_pitch (Musical_pitch, bool cautionary, bool natural);
-
- static SCM before_line_breaking (SCM);
+ static SCM brew_molecule (SCM);
+ static void add_pitch (Score_element*me, Musical_pitch, bool cautionary, bool natural);
static bool has_interface (Score_element*);
+ static void set_interface (Score_element*);
};
#ifndef LY_SMOBS_ICC
#define LY_SMOBS_ICC
+#include "smobs.hh"
#define IMPLEMENT_UNSMOB(CL, name) \
virtual void construct_children ();
virtual Moment next_moment () const;
virtual void do_process_and_next (Moment);
- virtual Music_iterator *try_music_in_children (Music const*) const;
+ virtual Music_iterator *try_music_in_children (Music *) const;
virtual bool ok () const;
virtual void do_print () const;
class Lyric_combine_music : public Music
{
- Music * music_p_;
- Music * lyrics_p_;
public:
Music * music_l () const;
Music * lyrics_l () const;
Lyric_combine_music (Music*, Music*);
-
virtual void transpose (Musical_pitch);
virtual void do_print () const;
-
VIRTUAL_COPY_CONS(Music);
- Lyric_combine_music (Lyric_combine_music const&);
virtual Moment length_mom () const;
- virtual ~Lyric_combine_music ();
virtual Musical_pitch to_relative_octave (Musical_pitch);
virtual void compress (Moment);
};
Empty molecules have empty dimensions. If add_at_edge is used to
init the molecule, we assume that
DIMENSIONS = (Interval(0,0),Interval(0,0)
+
+ TODO: go full smob with Molecule.
*/
class Molecule {
Interpretation_context_handle handle_;
protected:
- Music const * music_l_;
+ Music * music_l_;
/// ugh. JUNKME
bool first_b_;
/**
Get an iterator for MUS, inheriting the translation unit from THIS.
*/
- Music_iterator* get_iterator_p (Music const*mus) const;
+ Music_iterator* get_iterator_p (Music *mus) const;
/** Do the actual move. This should be overriden in derived
classes. It is called by #process_and_next#, the public interface
virtual void do_process_and_next (Moment until);
- virtual Music_iterator* try_music_in_children (Music const *) const;
+ virtual Music_iterator* try_music_in_children (Music *) const;
public:
Do the reporting. Will try MUSIC_L_ in its own translator first,
then its children. Returns the iterator that succeeded
*/
- Music_iterator * try_music (Music const *) const;
+ Music_iterator * try_music (Music *) const;
/**
The translation unit that we this iterator is reporting to now.
/** Get an iterator matching the type of MUS, and use TRANS to find
an accompanying translation unit
*/
- static Music_iterator* static_get_iterator_p (Music const* mus);
- void init_translator (Music const *, Translator_group *);
+ static Music_iterator* static_get_iterator_p (Music * mus);
+ void init_translator (Music *, Translator_group *);
Music_iterator();
#ifndef Music_sequence_HH
#define Music_sequence_HH
-#include "music.hh"
-#include "cons.hh"
-
-
-class Music_list : public Cons_list<Music> , public Input
-{
-public:
- Musical_pitch do_relative_octave (Musical_pitch, bool);
- void add_music (Music*);
- Music_list (Music_list const&);
- Music_list ();
-};
-
-
-/**
- Music can be a list of other "Music" elements
- */
-class Music_sequence : public Music
-{
-public:
- Music_list * music_p_list_p_;
-
- Music_sequence (Music_sequence const&);
- Music_sequence (Music_list *l_p);
-
- VIRTUAL_COPY_CONS(Music);
-
- Musical_pitch do_relative_octave (Musical_pitch p, bool b);
- virtual void transpose (Musical_pitch );
- virtual void compress (Moment);
- void add_music (Music *music_p);
- int length_i () const;
- Moment cumulative_length () const;
- Moment maximum_length () const;
- virtual ~Music_sequence ();
-
-protected:
- virtual Musical_pitch to_relative_octave (Musical_pitch);
- virtual void do_print() const;
-};
+#include "music-sequence.hh"
/**
Simultaneous_music is a list of music-elements which happen simultaneously
class Simultaneous_music : public Music_sequence
{
public:
-
VIRTUAL_COPY_CONS(Music);
-
- Simultaneous_music(Music_list *);
+ Simultaneous_music(SCM);
virtual Musical_pitch to_relative_octave (Musical_pitch);
virtual Moment length_mom () const;
};
-
/**
The request is a collection of Requests. A note that you enter in mudela is
one Request_chord, one syllable of lyrics is one Request_chord
{
public:
VIRTUAL_COPY_CONS(Music);
-
virtual Musical_pitch to_relative_octave (Musical_pitch);
- Request_chord();
+ Request_chord(SCM list);
};
-
/**
Sequential_music is a list of music-elements which are placed behind each other.
*/
{
public:
VIRTUAL_COPY_CONS(Music);
-
- Sequential_music(Music_list*);
+ Sequential_music(SCM);
virtual Moment length_mom () const;
};
+
#endif // Music_sequence_HH
--- /dev/null
+
+
+/*
+ music-sequence.hh -- declare
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ */
+
+#ifndef MUSIC_SEQUENCE_HH
+#define MUSIC_SEQUENCE_HH
+#include "music.hh"
+/**
+ Music can be a list of other "Music" elements
+ */
+class Music_sequence : public Music
+{
+public:
+ Music_sequence (SCM h);
+
+ SCM music_list () const;
+ void append_music (Music *);
+ VIRTUAL_COPY_CONS(Music);
+
+ Musical_pitch do_relative_octave (Musical_pitch p, bool b);
+ virtual void transpose (Musical_pitch );
+ void truncate (int k);
+ virtual void compress (Moment);
+ int length_i () const;
+ Moment cumulative_length () const;
+ Moment maximum_length () const;
+
+protected:
+ virtual Musical_pitch to_relative_octave (Musical_pitch);
+ virtual void do_print() const;
+
+};
+#endif
protected:
virtual void do_print () const;
virtual void do_process_and_next (Moment) ;
- virtual Music_iterator *try_music_in_children (Music const *) const;
+ virtual Music_iterator *try_music_in_children (Music *) const;
Music_iterator *child_iter_p_;
};
*/
class Music_wrapper : public Music
{
- Music * element_p_;
public:
Music_wrapper (Music*);
- Music * element_l () const;
+ Music * element () const;
virtual void transpose (Musical_pitch);
virtual void do_print () const;
VIRTUAL_COPY_CONS(Music);
- Music_wrapper (Music_wrapper const&);
virtual Moment length_mom () const;
- virtual ~Music_wrapper ();
virtual Musical_pitch to_relative_octave (Musical_pitch);
virtual void compress (Moment);
};
#define MUSIC_HH
#include "virtual-methods.hh"
-#include "input.hh"
#include "minterval.hh"
#include "lily-proto.hh"
#include "string.hh"
+#include "smobs.hh"
/** Music is anything that has duration and supports both time compression and
transposition.
@see Music_sequence
*/
-class Music:public Input {
+class Music {
public:
+ DECLARE_SMOBS;
+ SCM immutable_property_alist_;
+ SCM mutable_property_alist_;
+
+ Input *origin () const;
+ void set_spot (Input);
+
+ SCM get_mus_property (const char*) const;
+ SCM get_mus_property (SCM) const;
+ void set_mus_property (const char * , SCM val);
+ void set_immutable_mus_property (const char * , SCM val);
+ void set_immutable_mus_property (SCM key, SCM val);
+ void set_mus_property (SCM , SCM val);
+ void set_mus_pointer (const char*, SCM val);
+ SCM remove_mus_property (const char* nm);
+
+ virtual SCM do_derived_mark ();
virtual Musical_pitch to_relative_octave (Musical_pitch);
/// The duration of this piece of music
virtual Moment length_mom () const;
- virtual ~Music(){}
+ virtual ~Music();
void print() const;
/// Transpose, with the interval central C to #p#
virtual void transpose (Musical_pitch p);
/// Scale the music in time by #factor#.
virtual void compress (Moment factor);
VIRTUAL_COPY_CONS(Music);
-
+ Music (Music const &m);
Music();
protected:
virtual void do_print() const;
};
+
+Music * unsmob_music (SCM);
#endif // MUSIC_HH
#include "music.hh"
#include "protected-scm.hh"
+
+/*
+
+props:
+
+ relevant stuff: the predicate, the symbol, the value
+
+ */
class Output_property : public Music
{
public:
Output_property(SCM, SCM, SCM);
-
- /**
- relevant stuff: the predicate, the symbol, the value
- */
- Protected_scm pred_sym_val_list_;
};
#endif /* OUTPUT_PROPERTY_HH */
*/
class Paper_outputter
{
-#if 0
- Protected_scm molecules_;
- SCM last_cons_;
-#endif
-
bool verbatim_scheme_b_;
Paper_stream * stream_p_;
public:
int find_col_idx (Paper_column const *) const;
Link_array<Item> broken_col_range (Item const*,Item const*) const;
-
-
void typeset_line (Line_of_score*);
protected:
*/
class Repeated_music : public Music
{
+ Music * repeat_body_p_;
+ Music_sequence * alternatives_p_;
public:
+
+ Music * body () const;
+ Music_sequence * alternatives () const;
String type_;
bool fold_b_;
/// how often do we repeat?
int repeats_i_;
-
- Music * repeat_body_p_;
- Music_sequence * alternatives_p_;
-
virtual Musical_pitch to_relative_octave (Musical_pitch);
/// The duration of this piece of music
Repeated_music (Music*, int , Music_sequence*);
Repeated_music (Repeated_music const&);
- ~Repeated_music ();
protected:
virtual void do_print() const;
};
*/
Moment elt_length_mom_;
bool last_b_;
- Cons<Music>* cursor_;
public:
Request_chord_iterator ();
+++ /dev/null
-/*
- request-chord.hh -- declare Request_chord
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1998--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-
- */
-
-#ifndef REQUEST_CHORD_HH
-#define REQUEST_CHORD_HH
-
-
-#endif /* REQUEST_CHORD_HH */
-
virtual void do_break_processing ();
virtual Score_element *find_broken_piece (Line_of_score*) const;
virtual void discretionary_processing ();
- virtual void do_derived_mark ();
+ virtual SCM do_derived_mark ();
Molecule get_molecule () const;
void suicide ();
#include "input.hh"
#include "lily-proto.hh"
+#include "protected-scm.hh"
#include "parray.hh"
/// the total music def of one movement
public:
/// paper_, staffs_ and commands_ form the problem definition.
Link_array<Music_output_def> def_p_arr_;
- Music * music_p_;
+ Protected_scm music_;
Scope * header_p_;
int errorlevel_i_;
protected:
virtual void do_print() const;
virtual void do_process_and_next (Moment);
- virtual Music_iterator *try_music_in_children (Music const*) const;
+ virtual Music_iterator *try_music_in_children (Music *) const;
private:
Moment here_mom_;
- Cons<Music> *cursor_;
+ SCM cursor_;
Music_iterator * iter_p_;
/*
protected:
virtual void do_print () const;
virtual void do_process_and_next (Moment);
- virtual Music_iterator *try_music_in_children (Music const*) const;
+ virtual Music_iterator *try_music_in_children (Music *) const;
private:
public:
Link_array<Spanner> broken_into_l_arr_;
+
+ // todo: move to somewhere else.
Real get_broken_left_end_align () const;
+
// TODO: make virtual and do this for Items as well.
Interval_t<int> spanned_rank_iv ();
void set_bound (Direction d, Score_element*);
static int compare (Spanner * const &,Spanner * const &);
virtual Score_element* find_broken_piece (Line_of_score*) const;
- virtual void do_derived_mark ();
+ virtual SCM do_derived_mark ();
protected:
void set_my_columns ();
VIRTUAL_COPY_CONS(Score_element);
#define TRANSLATION_PROPERTY_HH
#include "music.hh"
-#include "protected-scm.hh"
/**
- Set a property of Translator
- */
+ Set a property of Translator
+
+ value -- the value to set
+ symbol -- the symbol to set.
+
+*/
class Translation_property : public Music
{
public:
- String var_str_;
- Protected_scm value_;
-
VIRTUAL_COPY_CONS(Music);
-
-protected:
- virtual void do_print () const;
};
#endif // PROPERTY_HH
public:
SCM get_property (SCM name_sym) const;
void set_property (String var_name, SCM value);
+ void set_property (SCM var_sym, SCM value);
Translator_group *where_defined (SCM name_sym) const;
String id_str_;
Music_iterator * current_iter_p_;
/// pointer to the alternative that will be processed next.
- Cons<Music> *alternative_cons_l_;
+ SCM alternative_cons_;
~Unfolded_repeat_iterator();
Unfolded_repeat_iterator ();
virtual void construct_children ();
virtual Moment next_moment () const;
virtual void do_process_and_next (Moment);
- virtual Music_iterator *try_music_in_children (Music const*) const;
+ virtual Music_iterator *try_music_in_children (Music *) const;
virtual bool ok () const;
virtual void next_element ();
--- /dev/null
+/*
+ input-smob.cc -- implement Input smob
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ */
+
+#include "input.hh"
+#include "input-smob.hh"
+#include "string.hh"
+#include "ly-smobs.icc"
+
+static long input_tag;
+
+
+static
+SCM mark_smob (SCM)
+{
+ return SCM_EOL;
+}
+
+static int
+print_smob (SCM s, SCM port, scm_print_state *)
+{
+ String str = "#<location" + unsmob_input (s)->location_str () + ">";
+ scm_puts (str.ch_C(), port);
+ return 1;
+}
+
+static
+scm_sizet free_smob (SCM s)
+{
+ delete unsmob_input (s);
+ return 0;
+}
+
+static
+void start_input_smobs()
+{
+ input_tag
+ = scm_make_smob_type_mfpe ("input", 0,
+ mark_smob, free_smob,
+ print_smob, 0);
+}
+
+SCM
+make_input (Input ip)
+{
+ Input * nip = new Input (ip);
+ SCM z;
+
+ SCM_NEWCELL(z);
+ SCM_SETCAR (z, (SCM)input_tag);
+ SCM_SETCDR (z, (SCM)nip);
+ // fixme: done_malloc
+ return z;
+}
+
+Input *
+unsmob_input (SCM s)
+{
+ if (SCM_IMP (s))
+ return 0;
+ if ((long)SCM_CAR(s) == input_tag) // ugh.
+ return (Input*) SCM_CDR(s);
+ else
+ return 0;
+}
+
+
+ADD_SCM_INIT_FUNC(input, start_input_smobs);
+
+
+Input dummy_input_global;
if (delim_)
text_->set_parent (delim_, Y_AXIS);
- announce_element (Score_element_info (text_,0));
+ announce_element (text_,0);
}
}
/*
Can't do this earlier, because try_visibility_lambda () might set
the elt property transparent, which would then be copied.
+
+ TODO:
+
+ handle visibility-lambda the item itself iso. breakstatusdir, so
+ the function can do more complicated things.
+
*/
SCM vis = get_elt_property ("visibility-lambda");
if (gh_procedure_p (vis))
}
}
+SCM
+Item::do_derived_mark ()
+{
+ if (broken_to_drul_[LEFT])
+ scm_gc_mark (broken_to_drul_[LEFT]->self_scm_);
+ if (broken_to_drul_[RIGHT])
+ scm_gc_mark (broken_to_drul_[RIGHT]->self_scm_);
+ return SCM_EOL;
+}
#include "key-item.hh"
#include "command-request.hh"
#include "musical-request.hh"
-#include "local-key-item.hh"
+#include "item.hh"
#include "bar.hh"
#include "timing-translator.hh"
#include "staff-symbol-referencer.hh"
item_p_->set_elt_property ("new-accidentals", get_property ("keySignature"));
Staff_symbol_referencer::set_interface (item_p_);
+ Key_item::set_interface (item_p_);
SCM prop = get_property ("keyOctaviation");
bool multi = to_boolean (prop);
if (multi)
item_p_->set_elt_property ("multi-octave", gh_bool2scm (multi));
- announce_element (Score_element_info (item_p_,keyreq_l_));
+ announce_element (item_p_,keyreq_l_);
}
if (!def)
void
Key_engraver::read_req (Key_change_req const * r)
{
- if (r->pitch_alist_ == SCM_UNDEFINED)
+ SCM p = r->get_mus_property ("pitch-alist");
+ if (p == SCM_UNDEFINED)
return;
- SCM n = scm_list_copy (r->pitch_alist_);
+ SCM n = scm_list_copy (p);
SCM accs = SCM_EOL;
for (SCM s = get_property ("keyAccidentalOrder");
gh_pair_p (s); s = gh_cdr (s))
void
Key_performer::do_process_music ()
{
- if (key_req_l_ && key_req_l_->pitch_alist_ != SCM_UNDEFINED)
+ if (key_req_l_ && key_req_l_->get_mus_property ("pitch-alist") != SCM_UNDEFINED)
{
audio_p_ = new Audio_key (); // *key_req_l_->key_);
Audio_element_info info (audio_p_, key_req_l_);
String s (YYText ()+1);
s = s.left_str (s.index_last_i ('"'));
DEBUG_OUT << "#version `" << s << "'\n";
+ yy_pop_state ();
if (!valid_version_b (s))
return INVALID;
- yy_pop_state ();
}
<version>. {
LexerError ("No quoted string found after \\version");
} else if (gh_number_p (sid)) {
yylval.scm = sid;
return NUMBER_IDENTIFIER;
+ } else if (Music * mus =unsmob_music (sid)) {
+ yylval.scm = sid;
+
+ return dynamic_cast<Request*> (mus) ? REQUEST_IDENTIFIER : MUSIC_IDENTIFIER;
}
+
Identifier * id = unsmob_identifier (sid);
if (id) {
yylval.id = id;
staffline_p_->set_bound(LEFT,it);
Pointer_group_interface (it, "bounded-by-me").add_element (staffline_p_);
- Engraver::announce_element (Score_element_info (staffline_p_,0));
+ Engraver::announce_element (staffline_p_,0);
}
void
text_item_p_->set_parent (interesting_[0].elem_l_, Y_AXIS);
- announce_element (Score_element_info (text_item_p_, 0));
+ announce_element (text_item_p_, 0);
}
}
void
Line_number_engraver::acknowledge_element (Score_element_info inf)
{
- if (Note_head::has_interface (inf.elem_l_))
+ if (!inf.req_l_)
+ return ;
+
+ if ( Note_head::has_interface (inf.elem_l_))
{
interesting_.push (inf);
support_.push (inf.elem_l_);
if (i)
s += ",";
- s += interesting_[i].req_l_->line_number_str ();
+ s += interesting_[i].req_l_->origin ()->line_number_str ();
}
(c) 1996--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
+#include "input-smob.hh"
#include "axis-group-interface.hh"
#include "debug.hh"
#include "line-of-score.hh"
: Spanner (s)
{
rank_i_ = 0;
- set_elt_property ("columns", SCM_EOL);
- set_elt_property ("all-elements", SCM_EOL);
Axis_group_interface::set_interface (this);
Axis_group_interface::set_axes (this, Y_AXIS,X_AXIS);
}
+#define GLOBAL_SYMBOL(cname, name) \
+SCM cname ; \
+void \
+cname ## _init_func () \
+{ \
+ cname = ly_symbol2scm (name); \
+ scm_permanent_object (cname); \
+} \
+ADD_SCM_INIT_FUNC(cname,cname ## _init_func);\
+
+
+GLOBAL_SYMBOL( offset_sym , "translate-molecule");
+GLOBAL_SYMBOL( placebox_sym , "placebox");
+GLOBAL_SYMBOL( combine_sym , "combine-molecule");
+GLOBAL_SYMBOL( no_origin_sym , "no-origin");
+GLOBAL_SYMBOL( define_origin_sym , "define-origin");
+
+
+
void
Line_of_score::output_molecule (SCM expr, Offset o)
{
- SCM offset_sym = ly_symbol2scm ("translate-molecule");
- SCM combine_sym = ly_symbol2scm ("combine-molecule");
-enter:
- if (!gh_pair_p (expr))
- return;
-
- SCM head =gh_car (expr);
- if (head == offset_sym)
+ while (1)
{
- o += ly_scm2offset (gh_cadr (expr));
- expr = gh_caddr (expr);
- goto enter;
- }
- else if (head == combine_sym)
- {
- output_molecule (gh_cadr (expr), o);
- expr = gh_caddr (expr);
- goto enter; // tail recursion
- }
- else
- {
- pscore_l_->outputter_l_->
- output_scheme (gh_list (ly_symbol2scm ("placebox"),
- gh_double2scm (o[X_AXIS]),
- gh_double2scm (o[Y_AXIS]),
- expr,
- SCM_UNDEFINED));
+ if (!gh_pair_p (expr))
+ return;
+
+ SCM head =gh_car (expr);
+ if (unsmob_input (head))
+ {
+ Input * ip = unsmob_input (head);
+
+
+ pscore_l_->outputter_l_->output_scheme (gh_list (define_origin_sym,
+ ly_str02scm (ip->file_str ().ch_C()),
+ gh_int2scm (ip->line_number ()),
+ gh_int2scm (ip->column_number ()),
+ SCM_UNDEFINED));
+ expr = gh_cadr (expr);
+ }
+ else if (head == no_origin_sym)
+ {
+ pscore_l_->outputter_l_->output_scheme (gh_list (no_origin_sym, SCM_UNDEFINED));
+ expr = gh_cadr (expr);
+ }
+ else if (head == offset_sym)
+ {
+ o += ly_scm2offset (gh_cadr (expr));
+ expr = gh_caddr (expr);
+ }
+ else if (head == combine_sym)
+ {
+ output_molecule (gh_cadr (expr), o);
+ expr = gh_caddr (expr);
+ }
+ else
+ {
+ pscore_l_->outputter_l_->
+ output_scheme (gh_list (placebox_sym,
+ gh_double2scm (o[X_AXIS]),
+ gh_double2scm (o[Y_AXIS]),
+ expr,
+ SCM_UNDEFINED));
+
+ return;
+ }
}
}
}
return acs;
}
+
#include "musical-request.hh"
#include "command-request.hh"
#include "local-key-item.hh"
-#include "key-item.hh"
+#include "item.hh"
#include "tie.hh"
#include "rhythmic-head.hh"
#include "timing-translator.hh"
(FIXME).
*/
struct Local_key_engraver : Engraver {
- Local_key_item *key_item_p_;
+ Item *key_item_p_;
protected:
VIRTUAL_COPY_CONS(Translator);
virtual void do_process_music();
{
if (!key_item_p_)
{
- key_item_p_ = new Local_key_item (get_property ("basicLocalKeyProperties"));
+ key_item_p_ = new Item(get_property ("basicLocalKeyProperties"));
+ Local_key_item::set_interface (key_item_p_);
Side_position::set_axis (key_item_p_, X_AXIS);
Side_position::set_direction (key_item_p_, LEFT);
Staff_symbol_referencer::set_interface (key_item_p_);
- announce_element (Score_element_info (key_item_p_, 0));
+ announce_element (key_item_p_, 0);
}
sign (prev_acc) * (prev_acc - a) == 1
&& abs(prev_acc) == 2;
- key_item_p_->add_pitch (note_l->pitch_,
- note_l->cautionary_b_,
- extra_natural);
+ Local_key_item::add_pitch (key_item_p_, note_l->pitch_,
+ note_l->cautionary_b_,
+ extra_natural);
Side_position::add_support (key_item_p_,support_l);
}
if (!forget)
{
+ /*
+ not really really correct if there are more than one
+ noteheads with the same notename.
+ */
localsig = scm_assoc_set_x (localsig, gh_cons (gh_int2scm (o),
gh_int2scm (n)),
gh_int2scm (a));
- daddy_trans_l_->set_property ("localKeySignature", localsig);
+ daddy_trans_l_->set_property ("localKeySignature", localsig);
}
- /*
- */
if (key_item_p_ && grace_align_l_)
{
Moment mp = (unsmob_moment (smp)) ? *unsmob_moment (smp) : Moment (0);
SCM sig = get_property ("keySignature");
- if (!mp)
- {
- if (!to_boolean (get_property ("noResetKey")))
- daddy_trans_l_->set_property ("localKeySignature", ly_deep_copy (sig));
- }
- else if (last_keysig_ != sig)
+
+ /*
+ Detect key sig changes. If we haven't found any, check if at start
+ of measure, and set localKeySignature anyhow. */
+ if (last_keysig_ != sig)
{
daddy_trans_l_->set_property ("localKeySignature", ly_deep_copy (sig));
last_keysig_ = sig;
}
+ else if (!mp)
+ {
+ if (!to_boolean (get_property ("noResetKey")))
+ daddy_trans_l_->set_property ("localKeySignature", ly_deep_copy (sig));
+ }
}
#include "rhythmic-head.hh"
#include "misc.hh"
+SCM
+pitch_less (SCM p1, SCM p2)
+{
+ for (int i = 3; i--; p1 = gh_cdr (p1), p2 = gh_cdr (p2))
+ {
+ if (scm_less_p (gh_car (p1), gh_car (p2)))
+ return SCM_BOOL_T;
+ if (gh_car (p1) != gh_car (p2))
+ return SCM_BOOL_F;
+ }
+ return SCM_BOOL_T;
+}
+
+SCM pitch_less_proc;
+
+
void
-Local_key_item::add_pitch (Musical_pitch p, bool cautionary, bool natural)
+init_pitch_funcs ()
{
- for (int i=0; i< accidental_arr_.size(); i++)
- if (!Musical_pitch::compare (p, accidental_arr_[i].pitch_))
- return;
- /* maybe natural (and cautionary) should be modif. nonetheless? */
-
- Local_key_cautionary_tuple t;
- t.pitch_ = p;
- t.cautionary_b_ = cautionary;
- t.natural_b_ = natural;
- accidental_arr_.push (t);
+ pitch_less_proc = gh_new_procedure2_0 ("pitch-less", &pitch_less);
}
-MAKE_SCHEME_CALLBACK(Local_key_item,before_line_breaking);
+ADD_SCM_INIT_FUNC(pitch,init_pitch_funcs);
-SCM
-Local_key_item::before_line_breaking (SCM smob)
+
+void
+Local_key_item::add_pitch (Score_element*me, Musical_pitch p, bool cautionary, bool natural)
{
- Local_key_item* me = dynamic_cast<Local_key_item*>(unsmob_element (smob));
- me->accidental_arr_.sort (Local_key_cautionary_tuple::compare);
- return SCM_UNSPECIFIED;
+ SCM acs = me->get_elt_property ("accidentals");
+ SCM pitch = p.to_scm ();
+ SCM opts = SCM_EOL;
+ if (cautionary)
+ opts = gh_cons (ly_symbol2scm ("cautionary"), opts);
+ if (natural)
+ opts = gh_cons (ly_symbol2scm ("natural"), opts);
+
+ pitch = gh_append2 (pitch, opts);
+ acs = scm_merge_x (acs, gh_cons (pitch, SCM_EOL), pitch_less_proc);
+
+ me->set_elt_property ("accidentals", acs);
}
Molecule
-Local_key_item::accidental (Score_element*me, int j, bool cautionary, bool natural)
+Local_key_item::parenthesize (Score_element*me, Molecule m)
{
- Molecule m (me->lookup_l ()->afm_find (String ("accidentals-") + to_str (j)));
- if (natural)
- {
- Molecule prefix = me->lookup_l ()->afm_find (String ("accidentals-0"));
- m.add_at_edge(X_AXIS, LEFT, Molecule(prefix), 0);
- }
- if (cautionary)
- {
- Molecule open = me->lookup_l ()->afm_find (String ("accidentals-("));
- Molecule close = me->lookup_l ()->afm_find (String ("accidentals-)"));
- m.add_at_edge(X_AXIS, LEFT, Molecule(open), 0);
- m.add_at_edge(X_AXIS, RIGHT, Molecule(close), 0);
- }
-
+ Molecule open = me->lookup_l ()->afm_find (String ("accidentals-("));
+ Molecule close = me->lookup_l ()->afm_find (String ("accidentals-)"));
+ m.add_at_edge(X_AXIS, LEFT, Molecule(open), 0);
+ m.add_at_edge(X_AXIS, RIGHT, Molecule(close), 0);
+
return m;
}
/*
- UGH. clean me up
+ UGH. clean me, revise placement routine (See Ross & Wanske;
+ accidental placement is more complicated than this.
*/
MAKE_SCHEME_CALLBACK(Local_key_item,brew_molecule);
SCM
Local_key_item::brew_molecule (SCM smob)
{
- Local_key_item* lki = dynamic_cast<Local_key_item*>(unsmob_element (smob));
- Score_element* me = lki;
+ Score_element* me = unsmob_element (smob);
Molecule mol;
Molecule octave_mol;
bool oct_b = false;
int lastoct = -100;
-
- for (int i = 0; i < lki->accidental_arr_.size(); i++)
+
+ SCM accs = me->get_elt_property ("accidentals");
+ for (SCM s = accs;
+ gh_pair_p (s); s = gh_cdr (s))
{
- Musical_pitch p (lki->accidental_arr_[i].pitch_);
+ Musical_pitch p (gh_car (s));
+
// do one octave
if (p.octave_i_ != lastoct)
{
Real dy = (gh_number_p (c0) ? gh_scm2int (c0) : 0 + p.notename_i_)
* note_distance;
- Molecule m (accidental (me,p.accidental_i_,
- lki->accidental_arr_[i].cautionary_b_,
- lki->accidental_arr_[i].natural_b_));
+ Molecule acc (me->lookup_l ()->afm_find (String ("accidentals-")
+ + to_str (p.accidental_i_)));
+
+ if (scm_memq (ly_symbol2scm ("natural"), gh_car (s)) != SCM_BOOL_F)
+ {
+ Molecule prefix = me->lookup_l ()->afm_find (String ("accidentals-0"));
+ acc.add_at_edge(X_AXIS, LEFT, Molecule(prefix), 0);
+ }
+
+ if (scm_memq (ly_symbol2scm ("cautionary"), gh_car (s)) != SCM_BOOL_F)
+ acc = parenthesize (me, acc);
- m.translate_axis (dy, Y_AXIS);
- octave_mol.add_at_edge (X_AXIS, RIGHT, m, 0);
+ acc.translate_axis (dy, Y_AXIS);
+ octave_mol.add_at_edge (X_AXIS, RIGHT, acc, 0);
}
if (oct_b)
octave_mol = Molecule ();
}
- if (lki->accidental_arr_.size())
+ if (gh_pair_p (accs))
{
Drul_array<SCM> pads;
return mol.create_scheme();
}
-Local_key_item::Local_key_item (SCM s)
- : Item (s)
-{
-
-}
bool
Local_key_item::has_interface (Score_element*m)
{
return m && m->has_interface (ly_symbol2scm ("accidentals-interface"));
}
+void
+Local_key_item::set_interface (Score_element*m)
+{
+ m->set_interface (ly_symbol2scm ("accidentals-interface"));
+}
#include "lyric-combine-music.hh"
#include "musical-request.hh"
-Busy_playing_req busy_req;
-Melisma_req melisma_start_req;
-Melisma_req melisma_stop_req;
-Melisma_playing_req melisma_playing_req;
-
+/*
+ Ugh, why static?
+ */
+Busy_playing_req *busy_req;
+Melisma_req *melisma_start_req;
+Melisma_req *melisma_stop_req;
+Melisma_playing_req * melisma_playing_req;
Lyric_combine_music_iterator::Lyric_combine_music_iterator ()
{
- melisma_start_req.span_dir_ = START;
- melisma_stop_req.span_dir_ = STOP;
+ if (!busy_req)
+ {
+ busy_req = new Busy_playing_req;
+ melisma_playing_req = new Melisma_playing_req;
+ melisma_stop_req = new Melisma_req;
+ melisma_start_req = new Melisma_req;
+ }
+ melisma_start_req->span_dir_ = START;
+ melisma_stop_req->span_dir_ = STOP;
music_iter_p_ =0;
lyric_iter_p_ =0;
music_iter_p_->process_and_next (m);
- bool busy = try_music (&busy_req);
+ bool busy = try_music (busy_req);
if (busy)
{
- bool melisma_b = try_music (&melisma_playing_req);
+ bool melisma_b = try_music (melisma_playing_req);
if (!melisma_b)
{
if (lyric_iter_p_->ok ())
{
+ // FIXME
#if 0 // devise a new way for this
if (melisma_b && !melisma_started_b_)
- lyric_iter_p_->try_music (&melisma_start_req);
+ lyric_iter_p_->try_music (melisma_start_req);
else if (melisma_started_b_)
- lyric_iter_p_->try_music (&melisma_stop_req);
+ lyric_iter_p_->try_music (melisma_stop_req);
#endif
Moment m= lyric_iter_p_->next_moment ();
}
}
-
-
Music_iterator::do_process_and_next (m);
}
}
Music_iterator*
-Lyric_combine_music_iterator::try_music_in_children (Music const *m) const
+Lyric_combine_music_iterator::try_music_in_children (Music *m) const
{
Music_iterator * i = music_iter_p_->try_music (m);
if (i)
Lyric_combine_music::Lyric_combine_music (Music * m, Music * l)
{
- music_p_ = m;
- lyrics_p_ = l;
+ set_mus_property ("music", m->self_scm_);
+ set_mus_property ("lyrics", l->self_scm_);
}
-Lyric_combine_music::~Lyric_combine_music ()
-{
- delete music_p_;
- delete lyrics_p_;
-}
-
-Lyric_combine_music::Lyric_combine_music (Lyric_combine_music const&s)
- : Music (s)
-{
- music_p_ = s.music_p_ ? s.music_p_->clone ():0;
- lyrics_p_ = s.lyrics_p_ ? s.lyrics_p_->clone ():0;
-}
void
Lyric_combine_music::transpose (Musical_pitch p)
{
- music_p_->transpose (p);
- lyrics_p_->transpose (p);
+ music_l ()->transpose (p);
+ lyrics_l () ->transpose (p);
}
void
Lyric_combine_music::do_print () const
{
- music_p_->print();
- lyrics_p_->print ();
+ music_l ()->print();
+ lyrics_l () ->print ();
}
Moment
Lyric_combine_music::length_mom () const
{
- return music_p_->length_mom ();
+ return music_l ()->length_mom ();
}
Musical_pitch
Lyric_combine_music::to_relative_octave ( Musical_pitch p )
{
- p = music_p_->to_relative_octave (p);
- return lyrics_p_->to_relative_octave (p);
+ p = music_l ()->to_relative_octave (p);
+ return lyrics_l () ->to_relative_octave (p);
}
void
Lyric_combine_music::compress (Moment m)
{
- music_p_->compress (m);
+ music_l ()->compress (m);
}
Music*
Lyric_combine_music::music_l () const
{
- return music_p_;
+ return unsmob_music (get_mus_property ("music"));
}
Music*
Lyric_combine_music::lyrics_l () const
{
- return lyrics_p_;
+ return unsmob_music (get_mus_property ("lyrics"));
}
*/
text_p_->translate_axis (paper_l()->get_var ("quartwidth")/2, X_AXIS);
- announce_element (Score_element_info (text_p_, req_l_));
+ announce_element (text_p_, req_l_);
}
}
}
- announce_element (Score_element_info (text_p_, rq));
+ announce_element (text_p_, rq);
}
/*
automatic marks.
*/
- SCM m = (mark_req_l_->mark_label_ == SCM_UNDEFINED)
- ? get_property ("rehearsalMark")
- : SCM(mark_req_l_->mark_label_);
+
+ SCM m = mark_req_l_->get_mus_property ("label");
+ if (gh_string_p (m))
+ m = get_property ("rehearsalMark");
+;
if (gh_number_p (m))
{
Multi_measure_rest::set_interface (mmrest_p_);
Staff_symbol_referencer::set_interface (mmrest_p_);
- announce_element (Score_element_info (mmrest_p_, busy_span_req_l_));
+ announce_element (mmrest_p_, busy_span_req_l_);
start_measure_i_
= gh_scm2int (get_property ("currentBarNumber"));
}
}
Music_iterator*
-Music_iterator::static_get_iterator_p (Music const *m)
+Music_iterator::static_get_iterator_p (Music *m)
{
Music_iterator * p =0;
/* It would be nice to do this decentrally, but the order of this is
significant. */
- if (dynamic_cast<Request_chord const *> (m))
+ if (dynamic_cast<Request_chord *> (m))
p = new Request_chord_iterator;
- else if (dynamic_cast<Lyric_combine_music const*> (m))
+ else if (dynamic_cast<Lyric_combine_music *> (m))
p = new Lyric_combine_music_iterator;
- else if (dynamic_cast<Simultaneous_music const *> (m))
+ else if (dynamic_cast<Simultaneous_music *> (m))
p = new Simultaneous_music_iterator;
- else if (dynamic_cast<Sequential_music const *> (m))
+ else if (dynamic_cast<Sequential_music *> (m))
p = new Sequential_music_iterator;
- else if (dynamic_cast<Translation_property const *> (m))
+ else if (dynamic_cast<Translation_property *> (m))
p = new Property_iterator;
- else if (dynamic_cast<Change_translator const *> (m))
+ else if (dynamic_cast<Change_translator *> (m))
p = new Change_iterator;
- else if (dynamic_cast<Time_scaled_music const *> (m))
+ else if (dynamic_cast<Time_scaled_music *> (m))
p = new Time_scaled_music_iterator;
- else if (dynamic_cast<Grace_music const*> (m))
+ else if (dynamic_cast<Grace_music *> (m))
p = new Grace_iterator;
- else if (dynamic_cast<Auto_change_music const*> (m))
+ else if (dynamic_cast<Auto_change_music *> (m))
p = new Auto_change_iterator;
- else if (dynamic_cast<Music_wrapper const *> (m))
+ else if (dynamic_cast<Music_wrapper *> (m))
p = new Music_wrapper_iterator;
- else if (Repeated_music const * n = dynamic_cast<Repeated_music const *> (m))
+ else if (Repeated_music * n = dynamic_cast<Repeated_music *> (m))
{
if (n->type_ == "tremolo")
p = new Chord_tremolo_iterator;
}
void
-Music_iterator::init_translator (Music const *m, Translator_group *report_l)
+Music_iterator::init_translator (Music *m, Translator_group *report_l)
{
music_l_ = m;
- if (Context_specced_music const * csm =dynamic_cast<Context_specced_music const*>(m))
+ if (Context_specced_music * csm =dynamic_cast<Context_specced_music *>(m))
{
Translator_group* a =report_l->
find_create_translator_l (csm->translator_type_str_, csm->translator_id_str_);
Music_iterator*
-Music_iterator::get_iterator_p (Music const*m) const
+Music_iterator::get_iterator_p (Music *m) const
{
Music_iterator*p = static_get_iterator_p (m);
p->init_translator (m, report_to_l());
}
Music_iterator*
-Music_iterator::try_music (Music const *m) const
+Music_iterator::try_music (Music *m) const
{
bool b = report_to_l ()->try_music ((Music*)m); // ugh
Music_iterator * it = b ? (Music_iterator*) this : 0; // ugh
}
Music_iterator*
-Music_iterator::try_music_in_children (Music const * ) const
+Music_iterator::try_music_in_children (Music * ) const
{
return 0;
}
return maximum_length ();
}
-
-void
-Music_sequence::compress (Moment m)
-{
- for (Cons<Music> *i = music_p_list_p_->head_; i; i = i->next_)
- i->car_->compress (m);
-}
-
-Simultaneous_music::Simultaneous_music(Music_list *p)
- : Music_sequence (p)
+Simultaneous_music::Simultaneous_music(SCM head)
+ : Music_sequence (head)
{
}
-Sequential_music::Sequential_music(Music_list *p)
- : Music_sequence (p)
+Sequential_music::Sequential_music(SCM head)
+ : Music_sequence (head)
{
}
+
Moment
Sequential_music::length_mom () const
{
return do_relative_octave (p, true);
}
-
-
-
-Musical_pitch
-Music_list::do_relative_octave (Musical_pitch last, bool ret_first)
-{
- Musical_pitch retval;
- int count=0;
- for (Cons<Music> *i = head_; i ; i = i->next_)
- {
- last = i->car_->to_relative_octave (last);
- if (!count ++ )
- retval = last;
- }
-
- if (!ret_first)
- retval = last;
-
- return retval;
-}
-
-
-Music_list::Music_list (Music_list const &s)
- : Cons_list<Music> (s), Input (s)
+Request_chord::Request_chord(SCM s)
+ : Simultaneous_music (s)
{
- Cons_list<Music>::init ();
- clone_killing_cons_list (*this, s.head_);
}
-
-void
-Music_list::add_music (Music*m_p)
-{
- if (!m_p)
- return;
-
- append (new Killing_cons<Music> (m_p, 0));
-}
-
-Request_chord::Request_chord()
- : Simultaneous_music (new Music_list)
-{
-}
-
-
Musical_pitch
Request_chord::to_relative_octave (Musical_pitch last)
{
- for (Cons<Music> *i = music_p_list_p_->head_; i ; i = i->next_)
- {
- if (Melodic_req *m= dynamic_cast <Melodic_req *> (i->car_))
+ for (SCM s = music_list (); gh_pair_p (s); s = gh_cdr (s))
+ {
+ Music * mus = unsmob_music (gh_car (s));
+ if (Melodic_req *m= dynamic_cast <Melodic_req *> (mus))
{
Musical_pitch &pit = m->pitch_;
pit.to_relative_octave (last);
}
-Music_list::Music_list ()
-{
-}
-Music_sequence::~Music_sequence ()
-{
- delete music_p_list_p_;
-}
#include "debug.hh"
#include "musical-pitch.hh"
-Music_sequence::Music_sequence (Music_sequence const&s)
- : Music (s)
+
+void
+Music_sequence::truncate (int k)
{
- music_p_list_p_ = new Music_list (*s.music_p_list_p_);
-}
+ SCM l = get_mus_property ("list");
+ if (k == 0)
+ {
+ l = SCM_EOL;
+ }
+ else
+ {
+ SCM s = l;
+ k--;
+ for (; gh_pair_p (s) && k--; s = gh_cdr (s))
+ ;
+ if (gh_pair_p (s))
+ {
+ gh_set_cdr_x (s, SCM_EOL);
+ }
+ }
+ set_mus_property ("list", l);
+}
+SCM
+Music_sequence::music_list ()const
+{
+ return get_mus_property ("list");
+}
-Music_sequence::Music_sequence(Music_list *mlist_p)
+/*
+ Ugh this sucks. Linear. do not use.
+ */
+void
+Music_sequence::append_music (Music *m)
+{
+ set_mus_property ("list",
+ gh_append2( music_list(), gh_cons (m->self_scm_, SCM_EOL)));
+}
+Music_sequence::Music_sequence(SCM h)
{
- music_p_list_p_ = mlist_p;
+ set_mus_property ("list", h);
}
void
Music_sequence::transpose (Musical_pitch rq)
{
- for (Cons<Music> *i = music_p_list_p_->head_; i; i = i->next_)
- i->car_->transpose (rq);
+ for (SCM s = music_list (); gh_pair_p (s); s = gh_cdr (s))
+ unsmob_music (gh_car (s))->transpose (rq);
}
void
Music_sequence::do_print() const
{
#ifndef NPRINT
- for (Cons<Music> *i = music_p_list_p_->head_; i; i = i->next_)
- i->car_->print();
+ for (SCM s = music_list (); gh_pair_p (s); s = gh_cdr (s))
+ unsmob_music (gh_car (s))->print();
#endif
}
-void
-Music_sequence::add_music (Music *m_p)
-{
- music_p_list_p_->add_music (m_p);
-}
Moment
Music_sequence::cumulative_length () const
{
Moment last=0;
- for (Cons<Music> *i = music_p_list_p_->head_; i; i = i->next_)
- {
- last += i->car_->length_mom ();
- }
+ for (SCM s = music_list (); gh_pair_p (s); s = gh_cdr (s))
+ last += unsmob_music (gh_car (s))->length_mom ();
return last;
}
Music_sequence::maximum_length () const
{
Moment dur = 0;
- for (Cons<Music> *i = music_p_list_p_->head_; i; i = i->next_)
- dur = dur >? i->car_->length_mom ();
+ for (SCM s = music_list (); gh_pair_p (s); s = gh_cdr (s))
+ dur = dur >? unsmob_music (gh_car (s))->length_mom ();
return dur;
}
int
Music_sequence::length_i () const
{
- return cons_list_size_i (music_p_list_p_->head_);
+ return scm_ilength (music_list ());
}
Musical_pitch
-Music_sequence::do_relative_octave (Musical_pitch p, bool b)
+Music_sequence::do_relative_octave (Musical_pitch p, bool ret_first)
+{
+ Musical_pitch retval;
+ int count=0;
+
+ Musical_pitch last = p;
+ for (SCM s = music_list (); gh_pair_p (s); s = gh_cdr (s))
+ {
+ last = unsmob_music (gh_car (s))->to_relative_octave (last);
+ if (!count ++ )
+ retval = last;
+ }
+
+ if (!ret_first)
+ retval = last;
+
+ return retval;
+}
+
+void
+Music_sequence::compress (Moment m)
{
- return music_p_list_p_->do_relative_octave (p, b);
+ for (SCM s = music_list (); gh_pair_p (s); s = gh_cdr (s))
+ unsmob_music (gh_car (s))->compress (m);
}
Music_wrapper_iterator::construct_children ()
{
child_iter_p_ =
- get_iterator_p (dynamic_cast<Music_wrapper const*> (music_l_)->element_l ());
+ get_iterator_p (dynamic_cast<Music_wrapper const*> (music_l_)->element ());
}
Music_wrapper_iterator::~Music_wrapper_iterator ()
Music_iterator*
-Music_wrapper_iterator::try_music_in_children (Music const *m) const
+Music_wrapper_iterator::try_music_in_children (Music *m) const
{
return child_iter_p_->try_music (m);
}
#include "music-wrapper.hh"
-Music_wrapper::~Music_wrapper ()
-{
- delete element_p_;
-}
-
-Music_wrapper::Music_wrapper (Music_wrapper const&s)
- : Music (s)
-{
- element_p_ = (s.element_p_)?s.element_p_->clone ():0;
-}
-
void
Music_wrapper::do_print () const
{
- element_p_->print ();
+ element ()->print ();
}
-
void
Music_wrapper::transpose (Musical_pitch p)
{
- if (element_p_)
- element_p_-> transpose (p);
+ if (element ())
+ element ()-> transpose (p);
}
Music_wrapper::Music_wrapper(Music*p)
{
- element_p_ = p;
+ set_mus_property ("element", p->self_scm_);
}
-
-
Moment
Music_wrapper::length_mom () const
{
- return element_p_->length_mom ();
+ return element ()->length_mom ();
}
Musical_pitch
Music_wrapper::to_relative_octave (Musical_pitch p)
{
- return element_p_->to_relative_octave (p);
+ return element ()->to_relative_octave (p);
}
Music*
-Music_wrapper::element_l () const
+Music_wrapper::element () const
{
- return element_p_;
+ return unsmob_music (get_mus_property ("element"));
}
void
Music_wrapper::compress (Moment m)
{
- element_l ()->compress (m);
+ element ()->compress (m);
}
(c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
+#include "input-smob.hh"
#include "music.hh"
#include "music-list.hh"
#include "debug.hh"
#include "musical-pitch.hh"
+#include "ly-smobs.icc"
+
+SCM
+ly_deep_mus_copy (SCM m)
+{
+ if (unsmob_music (m))
+ {
+ return unsmob_music (m)->clone ()->self_scm_;
+ }
+ else if (gh_pair_p (m))
+ {
+ return gh_cons (ly_deep_copy (gh_car (m)), ly_deep_copy (gh_cdr (m)));
+ }
+ else
+ return m;
+}
+
+
+Music::Music (Music const &m)
+{
+ self_scm_ = SCM_EOL;
+ immutable_property_alist_ = m.immutable_property_alist_;
+ SCM c =ly_deep_mus_copy (m.mutable_property_alist_);
+ mutable_property_alist_ = c;
+
+ smobify_self ();
+
+ set_spot (*m.origin ());
+}
+
Music::Music()
{
+ self_scm_ = SCM_EOL;
+ immutable_property_alist_ = SCM_EOL;
+ mutable_property_alist_ = SCM_EOL;
+ smobify_self ();
+}
+
+SCM
+Music::mark_smob (SCM m)
+{
+ Music * mus = SMOB_TO_TYPE (Music, m);
+ scm_gc_mark (mus->immutable_property_alist_);
+ scm_gc_mark (mus->mutable_property_alist_);
+ return mus->do_derived_mark ();
}
void
return 0;
}
-void
-Music::print() const
+int
+Music::print_smob(SCM s, SCM p, scm_print_state*)
{
-#ifndef NPRINT
- if (! flower_dstream)
- return ;
- DEBUG_OUT << classname(this) << "{";
-
- do_print();
- DEBUG_OUT << "}\n";
-#endif
+ scm_puts ("#<Music ", p);
+ scm_puts (classname(unsmob_music (s)),p);
+ scm_puts (">",p);
+ return 1;
}
Musical_pitch
{
}
+
+IMPLEMENT_UNSMOB(Music,music);
+IMPLEMENT_SMOBS(Music);
+
+/****************************/
+
+SCM
+Music::get_mus_property (const char *nm) const
+{
+ SCM sym = ly_symbol2scm (nm);
+ return get_mus_property (sym);
+}
+
+SCM
+Music::get_mus_property (SCM sym) const
+{
+ SCM s = scm_sloppy_assq(sym, mutable_property_alist_);
+ if (s != SCM_BOOL_F)
+ return gh_cdr (s);
+
+ s = scm_sloppy_assq (sym, immutable_property_alist_);
+ return (s == SCM_BOOL_F) ? SCM_EOL : gh_cdr (s);
+}
+
+/*
+ Remove the value associated with KEY, and return it. The result is
+ that a next call will yield SCM_EOL (and not the underlying
+ `basic' property.
+*/
+SCM
+Music::remove_mus_property (const char* key)
+{
+ SCM val = get_mus_property (key);
+ if (val != SCM_EOL)
+ set_mus_property (key, SCM_EOL);
+ return val;
+}
+
+void
+Music::set_mus_property (const char* k, SCM v)
+{
+ SCM s = ly_symbol2scm (k);
+ set_mus_property (s, v);
+}
+
+void
+Music::set_immutable_mus_property (const char*k, SCM v)
+{
+ SCM s = ly_symbol2scm (k);
+ set_immutable_mus_property (s, v);
+}
+
+void
+Music::set_immutable_mus_property (SCM s, SCM v)
+{
+ immutable_property_alist_ = gh_cons (gh_cons (s,v), mutable_property_alist_);
+ mutable_property_alist_ = scm_assq_remove_x (mutable_property_alist_, s);
+}
+void
+Music::set_mus_property (SCM s, SCM v)
+{
+ mutable_property_alist_ = scm_assq_set_x (mutable_property_alist_, s, v);
+}
+
+void
+Music::set_spot (Input ip)
+{
+ set_mus_property ("origin", make_input (ip));
+}
+
+
+
+Input*
+Music::origin () const
+{
+ Input *ip = unsmob_input (get_mus_property ("origin"));
+ return ip ? ip : & dummy_input_global;
+}
+
+SCM
+Music::do_derived_mark ()
+{
+ return SCM_EOL;
+}
+
+void
+Music::print ()const
+{
+}
+
+void
+Music::do_smobify_self ()
+{
+}
+
+Music::~Music ()
+{
+
+}
Musical_pitch* bass_p,
Duration d)
{
- Simultaneous_music*v = new Request_chord;
- v->set_spot (here_input ());
/*
UARGAUGRAGRUAUGRUINAGRAUGIRNA
Tonic_req* t = new Tonic_req;
t->pitch_ = tonic;
- v->add_music (t);
+ SCM l = SCM_EOL;
//urg
if (chord.inversion_b_
&& Chord::find_notename_i (&chord.pitch_arr_, chord.inversion_pitch_) > 0)
{
Inversion_req* i = new Inversion_req;
i->pitch_ = chord.inversion_pitch_;
- v->add_music (i);
+ l = gh_cons (i->self_scm_, l);
}
if (chord.bass_b_)
{
Bass_req* b = new Bass_req;
b->pitch_ = chord.bass_pitch_;
- v->add_music (b);
+ l = gh_cons (b->self_scm_, l);
}
Array<Musical_pitch> pitch_arr = chord.to_pitch_arr ();
Note_req* n = new Note_req;
n->pitch_ = p;
n->duration_ = d;
- v->add_music (n);
+ l = gh_cons (n->self_scm_, l);
}
+ Simultaneous_music*v = new Request_chord (l);
+ v->set_spot (here_input ());
+
return v;
}
d->set_parent (note_p, Y_AXIS);
d->add_offset_callback (Dots::quantised_position_callback, Y_AXIS);
- announce_element (Score_element_info (d,0));
+ announce_element (d,0);
dot_p_arr_.push (d);
}
note_p->set_elt_property("staff-position", gh_int2scm (note_req_l->pitch_.steps ()));
- Score_element_info itinf (note_p,note_req_l);
- announce_element (itinf);
+ announce_element (note_p,note_req_l);
note_p_arr_.push (note_p);
}
}
{
Item * t = new Item (get_property ("basicNoteNameProperties"));
t->set_elt_property ("text", ly_str02scm ( s.ch_C()));
- announce_element (Score_element_info (t, req_l_arr_[0]));
+ announce_element (t, req_l_arr_[0]);
texts_.push (t);
}
}
for (int i=props_.size (); i--; )
{
Output_property * o = props_[i];
- SCM pred = gh_car (o->pred_sym_val_list_);
+ SCM pred = o->get_mus_property ("predicate");
/*
should typecheck pred.
gh_list (inf.elem_l_->self_scm_, SCM_UNDEFINED));
if (to_boolean (result))
{
- inf.elem_l_->set_elt_property (gh_cadr (o->pred_sym_val_list_),
- gh_caddr (o->pred_sym_val_list_));
+ SCM sym = o->get_mus_property ("symbol");
+ SCM val = o->get_mus_property ("value");
+ inf.elem_l_->set_elt_property (sym, val);
}
}
}
Output_property::Output_property(SCM pred, SCM sym, SCM val)
{
- pred_sym_val_list_ = gh_list (pred, sym, val, SCM_UNDEFINED);
+ set_mus_property ("predicate", pred);
+ set_mus_property ("symbol", sym);
+ set_mus_property ("value", val);
}
}
else
{
- non_fatal_error (_("not a real variable"));
+ programming_error ("not a real variable");
return 0.0;
}
}
}
+/*
+ UGH.
+
+ Should probably change interface to do less eval ( symbol ), and more
+ apply (procedure, args)
+ */
void
Paper_outputter::dump_scheme (SCM s)
{
}
main_smob_ = gh_cons (l->self_scm_, main_smob_);
l->pscore_l_ = this;
+
+ /*
+ We don't unprotect l->self_scm_, we haven't got any place else to
+ protect it from collection. */
+
}
Paper_score::Paper_score (Paper_score const &s)
#include "music-list.hh"
#include "change-translator.hh"
#include "file-results.hh"
+#include "input.hh"
#include "scope.hh"
#include "relative-music.hh"
#include "lyric-combine-music.hh"
Identifier *id;
String * string;
Music *music;
- Music_list *music_list;
Score *score;
Scope *scope;
Interval *interval;
%token <pitch> CHORDMODIFIER_PITCH
%token <id> DURATION_IDENTIFIER
%token <id> IDENTIFIER
-%token <id> MUSIC_IDENTIFIER
-%token <id> REQUEST_IDENTIFIER
%token <id> TRANS_IDENTIFIER
-%token <scm> NUMBER_IDENTIFIER
%token <id> SCORE_IDENTIFIER
%token <id> MUSIC_OUTPUT_DEF_IDENTIFIER
+%token <scm> NUMBER_IDENTIFIER
+%token <scm> REQUEST_IDENTIFIER
+%token <scm> MUSIC_IDENTIFIER
%token <scm> STRING_IDENTIFIER SCM_IDENTIFIER
%token <scm> DURATION RESTNAME
%token <scm> STRING
%type <music> Music Sequential_music Simultaneous_music Music_sequence
%type <music> relative_music re_rhythmed_music
%type <music> property_def translator_change
-%type <music_list> Music_list
+%type <scm> Music_list
%type <outputdef> music_output_def_body
%type <request> shorthand_command_req
%type <request> post_request
$$ = smobify (new Translator_group_identifier ($1, TRANS_IDENTIFIER));
}
| Music {
- $$ = smobify (new Music_identifier ($1, MUSIC_IDENTIFIER));
+ $$ = $1->self_scm_;
+ scm_unprotect_object ($$);
}
-
| post_request {
- $$ = smobify (new Request_identifier ($1, REQUEST_IDENTIFIER));
+ $$ = $1->self_scm_;
+ scm_unprotect_object ($$);
}
| explicit_duration {
$$ = smobify (new Duration_identifier ($1, DURATION_IDENTIFIER));
score_body:
Music {
$$ = new Score;
+
$$->set_spot (THIS->here_input ());
- $$->music_p_ = $1;
+ SCM m = $1->self_scm_;
+ scm_unprotect_object (m);
+ $$->music_ = m;
}
| SCORE_IDENTIFIER {
$$ = $1->access_content_Score (true);
music.
*/
dynamic_cast<Midi_def*> ($$)->set_tempo ($2->dur_.length_mom (), $2->metronome_i_);
- delete $2;
}
| music_output_def_body bare_int '=' FONT STRING { // ugh, what a syntax
Lookup * l =unsmob_lookup (Lookup::make_lookup());
;
Music_list: /* empty */ {
- $$ = new Music_list;
- $$->set_spot (THIS->here_input ());
+ $$ = gh_cons (SCM_EOL, SCM_EOL);
}
| Music_list Music {
- $$->add_music ($2);
+ SCM s = $$;
+ SCM c = gh_cons ($2->self_scm_, SCM_EOL);
+ scm_unprotect_object ($2->self_scm_); /* UGH */
+
+
+ if (gh_pair_p (gh_cdr (s)))
+ gh_set_cdr_x (gh_cdr (s), c); /* append */
+ else
+ gh_set_car_x (s, c); /* set first cons */
+ gh_set_cdr_x (s, c) ; /* remember last cell */
}
| Music_list error {
}
{
Music_sequence* m = dynamic_cast <Music_sequence*> ($5);
if (m && $3 < m->length_i ())
- $5->warning (_ ("More alternatives than repeats. Junking excess alternatives."));
+ $5->origin ()->warning (_ ("More alternatives than repeats. Junking excess alternatives."));
Repeated_music * r = new Repeated_music ($4, $3 >? 1, m);
$$ = r;
r->type_ = ly_scm2string ($2);
r->fold_b_ = (r->type_ == "fold");
r->volta_fold_b_ = (r->type_ == "volta");
- r->set_spot ($4->spot ());
+ r->set_spot (*$4->origin ());
}
;
Music_sequence: '{' Music_list '}' {
- $$ = new Music_sequence ($2);
- $$->set_spot ($2->spot ());
+ $$ = new Music_sequence (gh_car ($2));
}
;
Sequential_music:
SEQUENTIAL '{' Music_list '}' {
- $$ = new Sequential_music ($3);
- $$->set_spot ($3->spot ());
+ $$ = new Sequential_music (gh_car ($3));
}
| '{' Music_list '}' {
- $$ = new Sequential_music ($2);
- $$->set_spot ($2->spot ());
+ $$ = new Sequential_music (gh_car ($2));
}
;
Simultaneous_music:
SIMULTANEOUS '{' Music_list '}'{
- $$ = new Simultaneous_music ($3);
- $$->set_spot ($3->spot ());
+ $$ = new Simultaneous_music (gh_car ($3));
}
| '<' Music_list '>' {
- $$ = new Simultaneous_music ($2);
- $$->set_spot ($2->spot ());
+ $$ = new Simultaneous_music (gh_car ($2));
}
;
$$ = new Output_property (pred,$3, $5);
}
- | MUSIC_IDENTIFIER { $$ = $1->access_content_Music (true); }
+ | MUSIC_IDENTIFIER { $$ = unsmob_music ($1)->clone (); }
| property_def
| translator_change
| Simple_music '*' bare_unsigned '/' bare_unsigned {
Auto_change_music * chm = new Auto_change_music (ly_scm2string ($2), $3);
$$ = chm;
- chm->set_spot ($3->spot ());
+ chm->set_spot (*$3->origin ());
}
| GRACE Music {
$$ = new Grace_music ($2);
| Sequential_music { $$ = $1; }
| TRANSPOSE musical_pitch Music {
$$ = new Transposed_music ($3, *$2);
- delete $2;
+ delete $2; // ugh
}
| TRANSPOSE steno_tonic_pitch Music {
$$ = new Transposed_music ($3, *$2);
- delete $2;
+ delete $2; // ugh
}
| NOTES
{ THIS->lexer_p_->push_note_state (); }
relative_music:
RELATIVE absolute_musical_pitch Music {
$$ = new Relative_octave_music ($3, *$2);
- delete $2;
+ delete $2; // ugh
}
;
PROPERTY STRING '.' STRING '=' scalar {
Translation_property *t = new Translation_property;
- t->var_str_ = ly_scm2string ($4);
- t->value_ = $6;
+ t->set_mus_property ("symbol", scm_string_to_symbol ($4));
+ t->set_mus_property ("value", $6);
Context_specced_music *csm = new Context_specced_music (t);
$$ = csm;
Music_sequence *l = dynamic_cast<Music_sequence*>($2);
if (l) {
for (int i=0; i < $1->size(); i++)
- l->add_music ($1->elem(i));
+ l->append_music ($1->elem(i));
for (int i=0; i < $3->size(); i++)
- l->add_music ($3->elem(i));
+ l->append_music ($3->elem(i));
}
else
programming_error ("Need Sequence to add music to");
command_element:
command_req {
- $$ = new Request_chord;
+ $$ = new Request_chord (gh_cons ($1->self_scm_, SCM_EOL));
$$-> set_spot (THIS->here_input ());
$1-> set_spot (THIS->here_input ());
- ((Simultaneous_music*)$$) ->add_music ($1);//ugh
}
| PARTIAL duration_length ';' {
Translation_property * p = new Translation_property;
- p->var_str_ = "measurePosition";
- p->value_ = (new Moment (-$2->length_mom ()))->smobify_self ();
- delete $2;
+ p->set_mus_property ("symbol", ly_symbol2scm ( "measurePosition"));
+ p->set_mus_property ("value", (new Moment (-$2->length_mom ()))->smobify_self ());
+ delete $2; // ugh
Context_specced_music * sp = new Context_specced_music (p);
$$ =sp ;
sp-> translator_type_str_ = "Score";
}
| MARK STRING {
Mark_req *m = new Mark_req;
- m->mark_label_ = $2;
+ m->set_mus_property ("label", $2);
$$ = m;
}
| MARK bare_unsigned {
Mark_req *m = new Mark_req;
- m->mark_label_ = gh_int2scm ($2);
+ m->set_mus_property ("label", gh_int2scm ($2));
$$ = m;
}
| SKIP duration_length {
Skip_req * skip_p = new Skip_req;
skip_p->duration_ = *$2;
- delete $2;
+ delete $2; // ugh
$$ = skip_p;
}
| tempo_request {
| KEY NOTENAME_PITCH SCM_IDENTIFIER {
Key_change_req *key_p= new Key_change_req;
- key_p->pitch_alist_ = $3;
+ key_p->set_mus_property ("pitch-alist", $3);
((Music* )key_p)->transpose (* $2);
$$ = key_p;
}
if (Script_req * gs = dynamic_cast<Script_req*> ($2))
gs->dir_ = Direction ($1);
else if ($1)
- $2->warning (_ ("Can't specify direction for this request"));
+ $2->origin ()->warning (_ ("Can't specify direction for this request"));
$$ = $2;
}
;
verbose_request:
REQUEST_IDENTIFIER {
- $$ = (Request*)$1->access_content_Request (true);
+ $$ = dynamic_cast<Request*> (unsmob_music ($1)->clone ());
$$->set_spot (THIS->here_input ());
}
| TEXTSCRIPT STRING STRING {
n->cautionary_b_ = $3 % 2;
n->forceacc_b_ = $2 % 2 || n->cautionary_b_;
- Simultaneous_music*v = new Request_chord;
+
+ Simultaneous_music*v = new Request_chord (gh_list (n->self_scm_, SCM_UNDEFINED));
v->set_spot ($1->spot ());
n->set_spot ($1->spot ());
-
- v->add_music (n);
-
$$ = v;
delete $1;
delete $4;
}
| RESTNAME optional_notemode_duration {
- Simultaneous_music* velt_p = new Request_chord;
- velt_p->set_spot (THIS->here_input());
+ SCM e = SCM_UNDEFINED;
if (ly_scm2string ($1) =="s")
{ /* Space */
Skip_req * skip_p = new Skip_req;
skip_p->duration_ = *$2;
skip_p->set_spot (THIS->here_input());
- velt_p->add_music (skip_p);
+ e = skip_p->self_scm_;
}
else
{
Rest_req * rest_req_p = new Rest_req;
rest_req_p->duration_ = *$2;
rest_req_p->set_spot (THIS->here_input());
-
- velt_p->add_music (rest_req_p);
+ e = rest_req_p->self_scm_;
}
+ Simultaneous_music* velt_p = new Request_chord (gh_list (e,SCM_UNDEFINED));
+ velt_p->set_spot (THIS->here_input());
- delete $2;
+ delete $2; // ugh
$$ = velt_p;
}
| MEASURES optional_notemode_duration {
Skip_req * sk = new Skip_req;
sk->duration_ = *$2;
- Music_list * ms = new Music_list;
- Request_chord * rqc1 = new Request_chord;
- Request_chord * rqc2 = new Request_chord;
- Request_chord * rqc3 = new Request_chord;
+
Span_req *sp1 = new Span_req;
Span_req *sp2 = new Span_req;
sp1-> span_dir_ = START;
sp2-> span_dir_ = STOP;
sp1->span_type_str_ = sp2->span_type_str_ = "rest";
- rqc1->add_music (sp1);
- rqc2->add_music (sk);
- rqc3->add_music (sp2);
-
- ms->add_music (rqc1);
- ms->add_music (rqc2);
- ms->add_music (rqc3);
+
+ Request_chord * rqc1 = new Request_chord (gh_list (sp1->self_scm_, SCM_UNDEFINED));
+ Request_chord * rqc2 = new Request_chord (gh_list (sk->self_scm_, SCM_UNDEFINED));;
+ Request_chord * rqc3 = new Request_chord(gh_list (sp2->self_scm_, SCM_UNDEFINED));;
+
+ SCM ms = gh_list (rqc1->self_scm_, rqc2->self_scm_, rqc3->self_scm_, SCM_UNDEFINED);
$$ = new Sequential_music (ms);
}
| STRING optional_notemode_duration {
if (!THIS->lexer_p_->lyric_state_b ())
THIS->parser_error (_ ("Have to be in Lyric mode for lyrics"));
- Simultaneous_music* velt_p = new Request_chord;
-
Lyric_req* lreq_p = new Lyric_req;
lreq_p ->text_str_ = ly_scm2string ($1);
lreq_p->duration_ = *$2;
lreq_p->set_spot (THIS->here_input());
+ Simultaneous_music* velt_p = new Request_chord (gh_list (lreq_p->self_scm_, SCM_UNDEFINED));
- velt_p->add_music (lreq_p);
-
- delete $2;
+ delete $2; // ugh
$$= velt_p;
}
}
- Request dummy_req;
+
while (announce_info_arr_.size ())
{
for (int j =0; j < announce_info_arr_.size(); j++)
{
Audio_element_info info = announce_info_arr_[j];
-
- if (!info.req_l_)
- info.req_l_ = &dummy_req;
-
for (Cons<Translator> *p = trans_p_list_.head_; p; p = p->next_)
{
if (!dynamic_cast <Performer_group_performer *> (p->car_))
{
if (!p->start_req_l_)
{
- p->req_l_drul_[STOP]->warning (_f ("can't find start of piano pedal: %s", p->name_ ));
+ p->req_l_drul_[STOP]->origin ()->warning (_f ("can't find start of piano pedal: %s", p->name_ ));
}
else
{
{
if (!p->start_req_l_)
{
- p->req_l_drul_[STOP]->warning (_f ("can't find start of piano pedal: %s", p->name_ ));
+ p->req_l_drul_[STOP]->origin ()->warning (_f ("can't find start of piano pedal: %s", p->name_ ));
}
else
{
// todo: init with basic props.
p->item_p_->add_offset_callback (Side_position::aligned_on_self, X_AXIS);
p->item_p_->add_offset_callback (Side_position::centered_on_parent, X_AXIS);
- announce_element (Score_element_info (p->item_p_,
+ announce_element (p->item_p_,
p->req_l_drul_[START]
? p->req_l_drul_[START]
- : p->req_l_drul_[STOP]));
+ : p->req_l_drul_[STOP]);
}
}
}
{
if (!p->start_req_l_)
{
- p->req_l_drul_[STOP]->warning (_f ("can't find start of piano pedal: %s", String (p->name_)));
+ p->req_l_drul_[STOP]->origin ()->warning (_f ("can't find start of piano pedal: %s", String (p->name_)));
}
else
{
void
Property_iterator::do_process_and_next (Moment m)
{
- Translation_property const * prop = dynamic_cast<Translation_property const*> (music_l_);
- if (prop->var_str_.length_i ())
- report_to_l ()->set_property (prop->var_str_, prop->value_);
+ Translation_property * prop = dynamic_cast<Translation_property *> (music_l_);
+ SCM sym = prop->get_mus_property ("symbol");
+ if (gh_symbol_p(sym))
+ report_to_l ()->set_property (sym, prop->get_mus_property ("value"));
Music_iterator::do_process_and_next (m);
}
Relative_octave_music::Relative_octave_music(Music*p,Musical_pitch def)
: Music_wrapper (p)
{
- last_pitch_ = element_l ()->to_relative_octave (def);
+ last_pitch_ = element ()->to_relative_octave (def);
}
void
void
Repeat_engraver::queue_events ()
{
- Music_sequence* alt = repeated_music_l_->alternatives_p_;
- Moment walk_mom = now_mom () + repeated_music_l_->repeat_body_p_->length_mom ();
+ Music_sequence* alt = repeated_music_l_->alternatives ();
+ Moment walk_mom = now_mom () + repeated_music_l_->body ()->length_mom ();
SCM novolta = get_property ("noVoltaBraces");
bool create_volta = !to_boolean (novolta);
appropriate timestamps. The volta spanner event (a number string)
happens at the begin of the alt. The :| bar event at the ending.
*/
- for (Cons<Music> *i = alt->music_p_list_p_->head_; i; i = i->next_)
- {
+
+ for (SCM s = repeated_music_l_->alternatives ()->music_list ();
+ gh_pair_p (s); s = gh_cdr (s))
+ {
+ Music *mus =unsmob_music (gh_car (s));
/*
some idiot might typeset a repeat not starting on a
Bar_create_event * c = new Bar_create_event (walk_mom, last_number+ 1,
volta_number);
- if (!i->next_)
+ if (!gh_pair_p (gh_cdr (s)))
c->last_b_ = true;
becel.append (c);
last_number = volta_number;
volta_number ++;
SCM l (get_property ("voltaSpannerDuration"));
- if (SMOB_IS_TYPE_B (Moment, l))
+ if (unsmob_moment(l))
{
- Moment vSD_mom = *SMOB_TO_TYPE (Moment,l);
- if ( vSD_mom < i->car_->length_mom() ) // terminate volta early ?
+ Moment vSD_mom = *unsmob_moment (l);
+ if ( vSD_mom < mus->length_mom() ) // terminate volta early ?
{
vSD_mom += walk_mom;
c->last_b_ = true;
}
}
}
- walk_mom += i->car_->length_mom();
+ walk_mom += mus->length_mom();
- if (i->next_)
+ if (gh_pair_p (gh_cdr (s)))
becel.append (new Bar_create_event (walk_mom, ":|"));
else
becel.append (new Bar_create_event (walk_mom, "stop"));
assert (!volta_span_p_);
volta_span_p_ = new Spanner (get_property ("basicVoltaSpannerProperties"));
Volta_spanner::set_interface (volta_span_p_);
- announce_element (Score_element_info (volta_span_p_,0));
+ announce_element (volta_span_p_,0);
volta_span_p_->set_elt_property ("text",
ly_str02scm (t.ch_C()));
volta_span_p_->set_elt_property ("last-volta",
#include "musical-pitch.hh"
#include "debug.hh"
+Music *
+Repeated_music::body ()const
+{
+ return unsmob_music (get_mus_property ("body"));
+}
+
+Music_sequence*
+Repeated_music::alternatives ()const
+{
+ return dynamic_cast<Music_sequence*> (unsmob_music (get_mus_property ("alternatives")));
+}
+
Repeated_music::Repeated_music(Music *beg, int times, Music_sequence * alts)
{
- repeat_body_p_ = beg;
+ set_mus_property ("body", beg->self_scm_);
fold_b_ = false;
repeats_i_ = times;
- alternatives_p_ = alts;
volta_fold_b_ = true;
if (alts)
- alts->music_p_list_p_->truncate (times);
+ {
+ alts->truncate (times);
+ set_mus_property ("alternatives", alts->self_scm_);
+ }
}
Repeated_music::Repeated_music (Repeated_music const &s)
fold_b_ = s.fold_b_;
volta_fold_b_ = s.volta_fold_b_;
type_ = s.type_;
- repeat_body_p_ = s.repeat_body_p_ ? s.repeat_body_p_->clone () : 0;
- alternatives_p_ = s.alternatives_p_
- ? dynamic_cast<Music_sequence*> (s.alternatives_p_->clone ()):0;
}
-Repeated_music::~Repeated_music ()
-{
- delete repeat_body_p_;
- delete alternatives_p_;
-}
void
Repeated_music::do_print () const
#ifndef NPRINT
DEBUG_OUT << "Fold = " << fold_b_ << " reps: " << repeats_i_;
- if (repeat_body_p_)
- repeat_body_p_->print();
+ if (body ())
+ body ()->print();
- if (alternatives_p_)
- alternatives_p_->print();
+ if (alternatives ())
+ alternatives ()->print();
#endif
}
Musical_pitch
Repeated_music::to_relative_octave (Musical_pitch p)
{
- if (repeat_body_p_)
- p = repeat_body_p_->to_relative_octave (p);
+ if (body ())
+ p = body ()->to_relative_octave (p);
Musical_pitch last = p ;
- if (alternatives_p_)
- for (Cons<Music> *i = alternatives_p_->music_p_list_p_->head_; i ; i = i->next_)
- {
- last = i->car_->to_relative_octave (p);
- }
+ if (alternatives ())
+ for (SCM s = alternatives ()->music_list (); gh_pair_p (s); s = gh_cdr (s))
+ unsmob_music (gh_car (s))->to_relative_octave (p);
+
return last;
}
-
-
void
Repeated_music::transpose (Musical_pitch p)
{
- if (repeat_body_p_)
- repeat_body_p_->transpose (p);
+ if (body ())
+ body ()->transpose (p);
- if (alternatives_p_)
- alternatives_p_->transpose (p);
+ if (alternatives ())
+ alternatives ()->transpose (p);
}
void
Repeated_music::compress (Moment p)
{
- if (repeat_body_p_)
- repeat_body_p_->compress (p);
+ if (body ())
+ body ()->compress (p);
- if (alternatives_p_)
- alternatives_p_->compress (p);
+ if (alternatives ())
+ alternatives ()->compress (p);
}
Moment
Repeated_music::alternatives_length_mom () const
{
- if (!alternatives_p_ )
+ if (!alternatives () )
return 0;
if (fold_b_)
- return alternatives_p_->maximum_length ();
+ return alternatives ()->maximum_length ();
Moment m =0;
int done =0;
- Cons<Music> *p = alternatives_p_->music_p_list_p_->head_;
- while (p && done < repeats_i_)
+
+ SCM p = alternatives ()->music_list ();
+ while (gh_pair_p (p) && done < repeats_i_)
{
- m = m + p->car_->length_mom ();
+ m = m + unsmob_music (gh_car (p))->length_mom ();
done ++;
if (volta_fold_b_
- || repeats_i_ - done < alternatives_p_->length_i ())
- p = p->next_;
+ || repeats_i_ - done < alternatives ()->length_i ())
+ p = gh_cdr (p);
}
return m;
}
Repeated_music::body_length_mom () const
{
Moment m = 0;
- if (repeat_body_p_)
+ if (body ())
{
- m = repeat_body_p_->length_mom ();
+ m = body ()->length_mom ();
if (!fold_b_ && !volta_fold_b_)
m *= Rational (repeats_i_);
}
Request_chord_iterator::Request_chord_iterator ()
{
last_b_ = false;
- cursor_ = 0;
}
{
if (first_b_)
{
- for (Cons<Music> *i = elt_l ()->music_p_list_p_->head_; i; i = i->next_)
+ for (SCM s = dynamic_cast<Music_sequence *> (music_l_)->music_list (); gh_pair_p (s); s = gh_cdr (s))
{
- if (Request * req_l = dynamic_cast<Request*> (i->car_))
+ Music *mus = unsmob_music (gh_car (s));
+ if (Request * req_l = dynamic_cast<Request*> (mus))
{
bool gotcha = try_music (req_l);
if (!gotcha)
- req_l->warning (_f ("Junking request: `%s'", classname( req_l)));
+ req_l->origin ()->warning (_f ("Junking request: `%s'", classname( req_l)));
}
else
- i->car_->warning (_f ("Huh? Not a Request: `%s'",
- classname (i->car_)));
- }
+ mus->origin ()->warning (_f ("Huh? Not a Request: `%s'",
+ classname (mus)));
+ }
first_b_ = false;
}
*/
#include "request-iterator.hh"
#include "music.hh"
-
+#include "input.hh"
void
Simple_music_iterator::do_process_and_next (Moment m)
{
bool g= try_music (music_l_);
if (!g)
- music_l_->warning (_f ("Junking music: `%s'", classname(music_l_)));
+ music_l_->origin ()->warning (_f ("Junking music: `%s'", classname(music_l_)));
first_b_ = false;
}
rest_collision_p_ = new Item (get_property ("basicRestCollisionProperties"));
Rest_collision::set_interface (rest_collision_p_);
- announce_element (Score_element_info (rest_collision_p_, 0));
+ announce_element (rest_collision_p_, 0);
for (int i=0; i< note_column_l_arr_.size (); i++)
Rest_collision::add_column ( rest_collision_p_,note_column_l_arr_[i]);
}
dot_p_->add_offset_callback (Dots::quantised_position_callback, Y_AXIS);
dot_p_->set_elt_property ("dot-count",
gh_int2scm (rest_req_l_->duration_.dots_i_));
- announce_element (Score_element_info (dot_p_,0));
+ announce_element (dot_p_,0);
}
- announce_element (Score_element_info (rest_p_, rest_req_l_));
+ announce_element (rest_p_, rest_req_l_);
}
}
{
ncol_p_ = new Item (get_property("basicNoteColumnProperties"));
Note_column::set_interface (ncol_p_);
- announce_element (Score_element_info (ncol_p_, 0));
+ announce_element (ncol_p_, 0);
}
for (int i=0; i < rhead_l_arr_.size (); i++)
#include <string.h>
#include <math.h>
+#include "input-smob.hh"
#include "libc-extension.hh"
#include "group-interface.hh"
#include "misc.hh"
Score_element::~Score_element()
{
- // this goes awry when score-elements are copied...
-
/*
- Kijk goed naar hoe smobify en unsmobify werken. unsmobify_self
- is te gebruiken wanneer C++ geheugen beheer weer overneemt van
- GUILE. --hwn */
+ do nothing scm-ish and no unprotecting here.
+ */
}
Score_element::get_molecule () const
{
SCM proc = get_elt_property ("molecule-callback");
+
+ SCM mol = SCM_EOL;
if (gh_procedure_p (proc))
- return create_molecule (gh_apply (proc, gh_list (this->self_scm_, SCM_UNDEFINED)));
+ mol = gh_apply (proc, gh_list (this->self_scm_, SCM_UNDEFINED));
+
- return Molecule ();
+ SCM origin =get_elt_property ("origin");
+ if (!unsmob_input (origin))
+ origin =ly_symbol2scm ("no-origin");
+
+ if (gh_pair_p (mol))
+ {
+ // ugr.
+ mol = gh_cons (gh_list (origin, gh_car (mol), SCM_UNDEFINED), gh_cdr (mol));
+ }
+
+
+ return create_molecule (mol);
}
programming_error ("SMOB marking gone awry");
return SCM_EOL;
}
- scm_gc_mark ( s->immutable_property_alist_);
-
- s->do_derived_mark ();
+ scm_gc_mark (s->immutable_property_alist_);
+ scm_gc_mark (s->mutable_property_alist_);
+
if (s->parent_l (Y_AXIS))
scm_gc_mark (s->parent_l (Y_AXIS)->self_scm_);
if (s->parent_l (X_AXIS))
scm_gc_mark (s->parent_l (X_AXIS)->self_scm_);
- return s->mutable_property_alist_;
+ if (s->original_l_)
+ scm_gc_mark (s->original_l_->self_scm_);
+ return s->do_derived_mark ();
}
int
return 1;
}
-void
+SCM
Score_element::do_derived_mark ()
{
+ return SCM_EOL;
}
void
pscore_p_ = new Paper_score;
pscore_p_->paper_l_ = dynamic_cast<Paper_def*>(output_def_l_);
- pscore_p_->typeset_line (new Line_of_score (get_property(ly_symbol2scm ("basicLineOfScoreProperties"))));
+ SCM props = get_property(ly_symbol2scm ("basicLineOfScoreProperties"));
+
+ pscore_p_->typeset_line (new Line_of_score (props));
}
: Input()
{
header_p_ = 0;
- music_p_ = 0;
+ music_ = SCM_EOL;
errorlevel_i_ = 0;
}
Score::Score (Score const &s)
: Input (s)
{
- music_p_ = (s.music_p_) ? s.music_p_->clone() : 0;
+ Music * m =unsmob_music (s.music_);
+ music_ = m?m->clone()->self_scm_ : SCM_EOL;
for (int i=0; i < s.def_p_arr_.size (); i++)
def_p_arr_.push(s.def_p_arr_[i]->clone());
errorlevel_i_ = s.errorlevel_i_;
{
delete header_p_;
junk_pointer_array (def_p_arr_);
- delete music_p_;
}
void
Global_translator * trans_p = odef_l->get_global_translator_p();
if (!trans_p)
{
- non_fatal_error (_("no toplevel translator"));
+ programming_error ("no toplevel translator");
return ;
}
progress_indication ("\n" + _("Interpreting music..."));
- trans_p->final_mom_ = music_p_->length_mom ();
+ Music * music = unsmob_music (music_);
+
+ trans_p->final_mom_ = music->length_mom ();
- Music_iterator * iter = Music_iterator::static_get_iterator_p (music_p_);
- iter->init_translator(music_p_, trans_p);
+ Music_iterator * iter = Music_iterator::static_get_iterator_p (music);
+ iter->init_translator(music, trans_p);
iter->construct_children();
void
Score::process()
{
- if (!music_p_)
+ if (!unsmob_music (music_))
return;
print();
{
#ifndef NPRINT
DEBUG_OUT << "score {\n";
- music_p_ -> print ();
+ // music_p_ -> print ();
for (int i=0; i < def_p_arr_.size (); i++)
def_p_arr_[i]->print();
DEBUG_OUT << "}\n";
scol_p_ = new Item (get_property ("basicScriptColumnProperties"));
scol_p_->set_elt_property ("scripts", SCM_EOL);
- announce_element (Score_element_info (scol_p_, 0));
+ announce_element (scol_p_, 0);
}
if (scol_p_)
if (list == SCM_BOOL_F)
{
- l->warning (_f ("Don't know how to interpret articulation `%s'",
+ l->origin ()->warning (_f ("Don't know how to interpret articulation `%s'",
l->articulation_str_.ch_C ()));
continue;
}
script_p_arr_.push (p);
- announce_element (Score_element_info (p, l));
+ announce_element (p, l);
}
}
{
sep_span_p_ = new Spanner (get_property ("basicSeparatingGroupSpannerProperties"));
Separating_group_spanner::set_interface (sep_span_p_);
- announce_element (Score_element_info (sep_span_p_, 0));
+ announce_element (sep_span_p_, 0);
sep_span_p_->set_bound (LEFT, unsmob_element (get_property ("currentCommandColumn")));
}
if (ib)
p_ref_->set_elt_property ("breakable", SCM_BOOL_T);
- announce_element (Score_element_info (p_ref_, 0));
+ announce_element (p_ref_, 0);
}
Separation_item::add_item (p_ref_,it);
}
void
Sequential_music_iterator::construct_children()
{
- cursor_ = dynamic_cast<Music_sequence const*> (music_l_)->music_p_list_p_->head_;
+ cursor_ = dynamic_cast<Music_sequence const*> (music_l_)->music_list ();
- while (cursor_)
+ while (gh_pair_p (cursor_ ))
{
start_next_element();
if (!iter_p_->ok())
{
delete iter_p_;
iter_p_ =0;
- Moment elt_time = cursor_->car_->length_mom ();
+ Moment elt_time = unsmob_music (gh_car (cursor_))->length_mom ();
here_mom_ += elt_time;
- cursor_ =cursor_->next_;
+ cursor_ =gh_cdr (cursor_);
}
void
Sequential_music_iterator::start_next_element()
{
assert (!iter_p_);
- iter_p_ = get_iterator_p (cursor_->car_);
+ iter_p_ = get_iterator_p (unsmob_music (gh_car (cursor_)));
}
void
if (iter_p_)
{
if (iter_p_->ok ())
- music_l_->warning (_ ("Must stop before this music ends"));
+ music_l_->origin ()->warning (_ ("Must stop before this music ends"));
delete iter_p_;
iter_p_ = 0;
}
}
-
-
-
void
Sequential_music_iterator::do_process_and_next (Moment until)
{
set_sequential_music_translator();
leave_element();
- if (cursor_)
+ if (gh_pair_p (cursor_))
start_next_element();
else
goto loopexit;
}
Music_iterator*
-Sequential_music_iterator::try_music_in_children (Music const *m) const
+Sequential_music_iterator::try_music_in_children (Music *m) const
{
return iter_p_ ? iter_p_->try_music (m) : 0;
}
int j = 0;
Music_sequence const *sim = dynamic_cast<Music_sequence const*> (music_l_);
- Cons<Music> *i = (sim->music_p_list_p_) ? sim->music_p_list_p_->head_ : 0;
- for (; i; i = i->next_, j++)
+ SCM i = sim->music_list ();
+ for (; gh_pair_p(i); i = gh_cdr(i), j++)
{
- Music_iterator * mi = static_get_iterator_p (i->car_);
+ Music *mus = unsmob_music (gh_car (i));
+ Music_iterator * mi = static_get_iterator_p (mus);
/* if separate_contexts_b_ is set, create a new context with the
number number as name */
if (!t)
t = report_to_l ();
- mi->init_translator (i->car_, t);
+ mi->init_translator (mus, t);
mi->construct_children ();
if (mi->ok())
}
Music_iterator*
-Simultaneous_music_iterator::try_music_in_children (Music const*m) const
+Simultaneous_music_iterator::try_music_in_children (Music *m) const
{
Music_iterator * b=0;
for (Cons<Music_iterator> *p = children_p_list_.head_; !b && p; p = p->next_)
if (!wgb)
for (int i=0; i < requests_arr_.size (); i++)
{
- requests_arr_[i]->warning (_ ("unterminated slur"));
+ requests_arr_[i]->origin ()->warning (_ ("unterminated slur"));
}
}
{
if (slur_l_stack_.empty ())
- slur_req_l->warning (_f ("can't find both ends of %s", _ ("slur")));
+ slur_req_l->origin ()->warning (_f ("can't find both ends of %s", _ ("slur")));
else
{
Score_element* slur = slur_l_stack_.pop ();
}
start_slur_l_arr_.push (slur);
requests_arr_.push (slur_req_l);
- announce_element (Score_element_info (slur, slur_req_l));
+ announce_element (slur, slur_req_l);
}
}
for (int i=0; i < start_slur_l_arr_.size (); i++)
spacing_p_ =new Spanner (get_property ("basicSpacingSpannerProperties"));
Spacing_spanner::set_interface (spacing_p_);
spacing_p_->set_bound (LEFT, unsmob_element (get_property ("currentCommandColumn")));
- announce_element (Score_element_info (spacing_p_, 0));
+ announce_element (spacing_p_, 0);
}
void
{
Moment shortest;
Moment mean_shortest;
+
+ /*
+ space as if this duration is present.
+ */
+ Moment base_shortest_duration = *unsmob_moment (me->get_elt_property ("maximum-duration-for-spacing"));
shortest.set_infinite (1);
int n = 0;
// 2nd condition should be (i+1 < col_count()), ie. not the last column in score. FIXME
else if (!lc->musical_b() && i+1 < cols.size ())
{
- left_distance= default_bar_spacing (me,lc,rc,shortest);
+ left_distance= default_bar_spacing (me,lc,rc,shortest <? base_shortest_duration);
}
else if (lc->musical_b())
{
- left_distance = note_spacing (me,lc, rc, shortest);
+ left_distance = note_spacing (me,lc, rc, shortest <? base_shortest_duration);
}
s.distance_f_ = left_distance;
Real
Spacing_spanner::get_duration_space (Score_element*me, Moment d, Moment shortest)
{
- Real log = log_2 (Moment (1,8) <? shortest);
+ Real log = log_2 (shortest);
Real k= me->paper_l ()->get_var ("arithmetic_basicspace")
- log;
Real
-Spacing_spanner::note_spacing (Score_element*me, Score_element *lc, Score_element *rc, Moment shortest)
+Spacing_spanner::note_spacing (Score_element*me, Score_element *lc, Score_element *rc,
+ Moment shortest)
{
Moment shortest_playing_len = 0;
SCM s = lc->get_elt_property ("shortest-playing-duration");
spanbar_p_->set_parent (bar_l_arr_[0], Y_AXIS);
spanbar_p_->set_parent (bar_l_arr_[0], X_AXIS);
- announce_element (Score_element_info (spanbar_p_,0));
+ announce_element (spanbar_p_,0);
}
}
}
{
if (!span_start_req_l_)
{
- span_req_l_drul_[STOP]->warning (_ ("can't find start of (de)crescendo"));
+ span_req_l_drul_[STOP]->origin ()->warning (_ ("can't find start of (de)crescendo"));
}
else
{
return 0.0;
}
-void
+SCM
Spanner::do_derived_mark ()
{
+ /*
+ We'd be fucked if this is called before spanned_drul_[] is inited. */
+ if (status_i_ == ORPHAN)
+ return SCM_EOL;
+
Direction d = LEFT;
do
if (spanned_drul_[d])
for (int i= broken_into_l_arr_.size () ; i--;)
scm_gc_mark (broken_into_l_arr_[i]->self_scm_);
+
+ return SCM_EOL;
}
void
span_p_->set_bound(LEFT, unsmob_element (get_property ("currentCommandColumn")));
- announce_element (Score_element_info (span_p_, 0));
+ announce_element (span_p_, 0);
}
void
tremolo_p_ = new Item (get_property ("basicStemTremoloProperties"));
Stem_tremolo::set_interface (tremolo_p_);
- announce_element (Score_element_info (tremolo_p_, tremolo_req_l_));
+ announce_element (tremolo_p_, tremolo_req_l_);
/*
The number of tremolo flags is the number of flags of
the tremolo-type minus the number of flags of the note
gh_int2scm (tremolo_flags));
}
}
- announce_element (Score_element_info (stem_p_, r));
+ announce_element (stem_p_, r);
}
if (Stem::flag_i (stem_p_) != duration_log)
{
- r->warning (_f ("Adding note head to incompatible stem (type = %d)", 1 << Stem::flag_i (stem_p_)));
+ r->origin ()->warning (_f ("Adding note head to incompatible stem (type = %d)", 1 << Stem::flag_i (stem_p_)));
}
Stem::add_head (stem_p_,h);
delim_->set_elt_property ("glyph", s);
}
- announce_element (Score_element_info (delim_,0));
+ announce_element (delim_,0);
}
void
text->set_elt_property ("no-spacing-rods" , SCM_BOOL_F);
text->set_extent_callback (0, X_AXIS);
}
- announce_element (Score_element_info (text, r));
+ announce_element (text, r);
texts_.push (text);
}
}
Tie::set_head (p,RIGHT, dynamic_cast<Item*> (unsmob_element (gh_cdr (pair))));
tie_p_arr_.push (p);
- announce_element (Score_element_info (p, req_l_));
+ announce_element (p, req_l_);
}
else for (SCM s = head_list; gh_pair_p (s); s = gh_cdr (s))
{
Tie::set_head (p, RIGHT, dynamic_cast<Item*> (unsmob_element (gh_cdar (s))));
tie_p_arr_.push (p);
- announce_element (Score_element_info (p, req_l_));
+ announce_element (p, req_l_);
}
if (!tie_p_arr_.size ())
{
- req_l_->warning (_ ("No ties were created!"));
+ req_l_->origin ()->warning (_ ("No ties were created!"));
}
else if (tie_p_arr_.size () > 1 && !tie_column_p_)
{
Tie_column::set_interface (tie_column_p_);
for (int i = tie_p_arr_.size (); i--; )
Tie_column::add_tie (tie_column_p_,tie_p_arr_ [i]);
- announce_element (Score_element_info (tie_column_p_, 0));
+ announce_element (tie_column_p_, 0);
}
}
}
if (!tie_p_arr_.size ())
{
- req_l_->warning (_("No ties were created!"));
+ req_l_->origin ()->warning (_("No ties were created!"));
}
}
Item * sl = head(me,LEFT) ? Rhythmic_head::stem_l (head (me,LEFT)) :0;
Item * sr = head(me,RIGHT) ? Rhythmic_head::stem_l (head (me,RIGHT)) :0;
- if (sl && Directional_element_interface (sl).get () == UP
- && sr && Directional_element_interface (sr).get () == UP)
- return DOWN;
- else
- return UP;
+
+ if (sl && sr)
+ {
+ if (Directional_element_interface (sl).get () == UP
+ && Directional_element_interface (sr).get () == UP)
+ return DOWN;
+ }
+ else if (sl || sr)
+ {
+ Item *s = sl ? sl : sr;
+ return - Directional_element_interface (s). get ();
+ }
+
+
+ return UP;
}
if (yeah)
set_translator (yeah->report_to_l ());
else
- music_l_->warning ( _("no one to print a tuplet start bracket"));
+ music_l_->origin ()->warning ( _("no one to print a tuplet start bracket"));
}
Music_wrapper_iterator::do_process_and_next (m);
if (time_signature_p_)
- announce_element (Score_element_info (time_signature_p_, req));
+ announce_element (time_signature_p_, req);
}
void
return true;
if (String (classname (timing_req_l_arr_[i])) == classname (r))
{
- r->warning (_ ("conflicting timing request"));
- timing_req_l_arr_[i]->warning (_("This is the other timing request"));
+ r->origin ()->warning (_ ("conflicting timing request"));
+ timing_req_l_arr_[i]->origin ()->warning (_("This is the other timing request"));
return false;
}
}
{
if (measure_position ())
{
- tr_l ->warning (_f ("barcheck failed at: %s",
+ tr_l ->origin ()->warning (_f ("barcheck failed at: %s",
measure_position ().str ()));
// resync
daddy_trans_l_->set_property("measurePosition",
#include "translation-property.hh"
#include "debug.hh"
-void
-Translation_property::do_print () const
-{
-#ifndef NPRINT
- DEBUG_OUT << "." << var_str_ << " = " ;
- if (flower_dstream && !flower_dstream->silent_b ("Translation_property"))
- ly_display_scm (value_);
-#endif
-}
+
+
void
Translator_group::set_property (String id, SCM val)
{
- properties_dict_->set (ly_symbol2scm (id.ch_C()), val);
+ set_property (ly_symbol2scm (id.ch_C()), val);
}
+void
+Translator_group::set_property (SCM sym, SCM val)
+{
+ properties_dict_->set (sym, val);
+}
+
+
{
if (Time_scaled_music * c = dynamic_cast<Time_scaled_music *> (r))
{
- Music *el = c->element_l ();
+ Music *el = c->element ();
if (!dynamic_cast<Request_chord*> (el))
{
time_scaled_music_arr_.push (c);
glep->set_elt_property ("text",
ly_str02scm (to_str (time_scaled_music_arr_[i]->den_i_).ch_C()));
- announce_element (Score_element_info (glep, time_scaled_music_arr_ [i]));
+ announce_element (glep, time_scaled_music_arr_ [i]);
}
}
void
Unfolded_repeat_iterator::next_element ()
{
- Repeated_music const* mus =dynamic_cast<Repeated_music const*> (music_l_);
+ Repeated_music * mus =dynamic_cast<Repeated_music *> (music_l_);
delete current_iter_p_;
current_iter_p_ =0;
if (do_main_b_)
{
- done_mom_ += mus->repeat_body_p_->length_mom ();
+ done_mom_ += mus->body ()->length_mom ();
if (!mus->volta_fold_b_)
done_count_ ++;
- if (alternative_cons_l_)
+ if (gh_pair_p (alternative_cons_))
{
- current_iter_p_ = get_iterator_p (alternative_cons_l_->car_);
+ current_iter_p_ = get_iterator_p (unsmob_music (gh_car (alternative_cons_)));
do_main_b_ = false;
}
else if (done_count_ < mus->repeats_i_ && !mus->volta_fold_b_)
{
- current_iter_p_ = get_iterator_p (mus->repeat_body_p_);
+ current_iter_p_ = get_iterator_p (mus->body ());
do_main_b_ = true;
}
}
we're not in the main part. So we're either in an alternative, or
we just finished.
*/
- if (alternative_cons_l_)
+ if (alternative_cons_)
{
- done_mom_ += alternative_cons_l_->car_->length_mom ();
+ done_mom_ += unsmob_music (gh_car (alternative_cons_))->length_mom ();
if (mus->volta_fold_b_ ||
mus->repeats_i_ - done_count_ < alternative_count_i_)
- alternative_cons_l_ = alternative_cons_l_->next_;
+ alternative_cons_ = gh_cdr (alternative_cons_);
/*
we've done the main body as well, but didn't go over the other
done_count_ ++;
}
- if (done_count_ < mus->repeats_i_ && alternative_cons_l_)
+ if (done_count_ < mus->repeats_i_ && gh_pair_p (alternative_cons_))
{
if (mus->volta_fold_b_)
- current_iter_p_ = get_iterator_p (alternative_cons_l_->car_);
+ current_iter_p_ = get_iterator_p (unsmob_music (gh_car (alternative_cons_)));
else
{
- current_iter_p_ = get_iterator_p (mus->repeat_body_p_);
+ current_iter_p_ = get_iterator_p (mus->body ());
do_main_b_ = true;
}
}
void
Unfolded_repeat_iterator::construct_children ()
{
- Repeated_music const* mus =dynamic_cast<Repeated_music const*> (music_l_);
- alternative_cons_l_ = (mus->alternatives_p_)
- ? mus->alternatives_p_->music_p_list_p_->head_
- : 0;
+ Repeated_music * mus =dynamic_cast<Repeated_music *> (music_l_);
+
+ alternative_cons_ = (mus->alternatives ())
+ ? mus->alternatives ()->music_list ()
+ : SCM_EOL;
- for (Cons<Music> *p = alternative_cons_l_; p; p = p->next_)
+ for (SCM p = alternative_cons_; gh_pair_p (p); p = gh_cdr (p))
alternative_count_i_ ++;
- if (mus->repeat_body_p_)
+ if (mus->body ())
{
- current_iter_p_ = get_iterator_p (mus->repeat_body_p_);
+ current_iter_p_ = get_iterator_p (mus->body ());
do_main_b_ = true;
}
- else if (alternative_cons_l_)
+ else if (gh_pair_p (alternative_cons_))
{
- current_iter_p_ = get_iterator_p (alternative_cons_l_->car_);
+ current_iter_p_ = get_iterator_p (unsmob_music (gh_car (alternative_cons_)));
do_main_b_ = false;
}
}
if (yeah)
set_translator (yeah->report_to_l ());
else
- music_l_->warning ( _("no one to print a volta bracket"));
+ music_l_->origin ()->warning ( _("no one to print a volta bracket"));
}
while (1)
{
}
Music_iterator*
-Unfolded_repeat_iterator::try_music_in_children (Music const * m) const
+Unfolded_repeat_iterator::try_music_in_children (Music * m) const
{
return current_iter_p_->try_music (m);
}
(c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
#include "translator-group.hh"
-#include "axis-group-engraver.hh"
#include "paper-column.hh"
#include "align-interface.hh"
#include "span-bar.hh"
bool qualifies_b (Score_element_info) const;
public:
VIRTUAL_COPY_CONS(Translator);
-
Vertical_align_engraver();
protected:
-
virtual void acknowledge_element (Score_element_info);
virtual void do_creation_processing();
virtual void do_removal_processing();
gh_int2scm (DOWN));
valign_p_->set_bound(LEFT,unsmob_element (get_property ("currentCommandColumn")));
- announce_element (Score_element_info (valign_p_ , 0));
+ announce_element (valign_p_ , 0);
}
void
LyricsVoiceContext= \translator{
\type "Engraver_group_engraver";
\consistsend "Axis_group_engraver";
+ LyricVoiceMinimumVerticalExtent = #(cons -2.5 2.5)
\name LyricVoice ;
\consists "Separating_line_group_engraver";
(break-align-symbol . Staff_bar)
(barsize-procedure . ,Bar::get_staff_bar_size)
(molecule-callback . ,Bar::brew_molecule)
- (visibility-lambda . ,begin-of-line-invisible)
+ (visibility-lambda . ,all-visible)
(breakable . #t)
(before-line-breaking-callback . ,Bar::before_line_breaking)
;;
(molecule-callback . ,Local_key_item::brew_molecule)
(left-padding . 0.2)
(right-padding . 0.4)
- (interfaces . (accidentals-interface ))
+ (interfaces . (accidentals-interface))
)
basicLineOfScoreProperties = #`(
(axes . (0 1))
)
basicSpacingSpannerProperties =#`(
(spacing-procedure . ,Spacing_spanner::set_springs)
+
+ ;; assume that notes at least this long are present.
+ (maximum-duration-for-spacing . ,(make-moment 1 8))
)
basicSpanBarProperties = #`(
(break-align-symbol . Staff_bar)
% Toplevel initialisation file.
-foo = \tempo 4 = 100 ;
-
\version "1.3.59";
-
\include "declarations.ly";
\maininput
% Toplevel initialisation file.
-\version "1.3.42";
+\version "1.3.68";
\include "declarations.ly"
Begin3
Title: LilyPond
-Version: 1.3.72
-Entered-date: 09JUL00
+Version: 1.3.73
+Entered-date: 17JUL00
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.72.tar.gz
+ 1000k lilypond-1.3.73.tar.gz
Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
- 1000k lilypond-1.3.72.tar.gz
+ 1000k lilypond-1.3.73.tar.gz
Copying-policy: GPL
End
Name: lilypond
-Version: 1.3.72
+Version: 1.3.73
Release: 1
Copyright: GPL
Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.72.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.73.tar.gz
Summary: A program for printing sheet music.
URL: http://www.cs.uu.nl/~hanwen/lilypond
# Icon: lilypond-icon.gif
% input feta-bolletjes;
% input feta-banier;
% input feta-eindelijk;
-% input feta-klef;
+ input feta-klef;
% input feta-toevallig;
% input feta-schrift;
% input feta-haak;
% input feta-timesig;
- input feta-pendaal;
+% input feta-pendaal;
% input feta-accordion;
fi
fet_beginchar ("C clef", "C", "altoclef")
if test = 1:
- draw_staff (-2,2);
+ draw_staff (-2,2, 0.0);
fi;
draw_c_clef (1.0);
fet_endchar;
fet_beginchar ("C clef", "C_change", "caltoclef")
if test = 1:
- draw_staff (-2,2);
+ draw_staff (-2,2, 0.0);
fi;
draw_c_clef (.8);
fet_endchar;
set_char_box(left_space# +
- xpart exact_center,
right_space# +
- xpart exact_center + ball_to_right#,
+ xpart exact_center + ball_to_right# + 7/12 reduced_il#,
- ypart exact_center + 2.5 reduced_il#,
ypart exact_center +reduced_il#);
fet_beginchar("F clef ", "F", "bassclef")
if test = 1:
- draw_staff(-3,1);
+ draw_staff(-3,1, 0.0);
fi;
draw_bass_clef((.5 staff_space#, 0), 1.0);
fet_endchar;
fet_beginchar("G clef", "G", "trebleclef")
if test = 1:
- draw_staff(-1,3);
+ draw_staff(-1,3, 0.0);
fi;
draw_gclef((1.7 staff_space#,0), 1.0);
fet_endchar;
+
% feta-nummer10.mf
% part of LilyPond's pretty-but-neat music font
-size:=10;
+design_size:=10;
-input feta-nummer-generic;
+input feta-nummer;
end.
% feta-nummer10.mf
% part of LilyPond's pretty-but-neat music font
-size:=12;
+design_size:=12;
-input feta-nummer-generic;
+input feta-nummer;
end.
--- /dev/null
+design_size := 14.4;
+input feta-nummer;
% part of LilyPond's pretty-but-neat music font
% size:=4;
-size:=16*3/15;
+design_size:=16*3/15;
-input feta-nummer-generic.mf;
+input feta-nummer.mf;
end.
% part of LilyPond's pretty-but-neat music font
% size:=4;
-size:=16*4/15;
+design_size:=16*4/15;
-input feta-nummer-generic.mf;
+input feta-nummer.mf;
end.
% part of LilyPond's pretty-but-neat music font
% size:=5;
-size:=20*4/15;
+design_size:=20*4/15;
-input feta-nummer-generic.mf;
+input feta-nummer.mf;
end.
% part of LilyPond's pretty-but-neat music font
% size:=5;
-size:=20*6/15;
+design_size:=20*6/15;
-input feta-nummer-generic.mf;
+input feta-nummer.mf;
end.
% part of LilyPond's pretty-but-neat music font
% size:=5;
-size:=26*4/15;
+design_size:=26*4/15;
-input feta-nummer-generic.mf;
+input feta-nummer.mf;
end.
% feta-nummer8.mf
% part of LilyPond's pretty-but-neat music font
-size:=8;
+design_size:=8;
-input feta-nummer-generic.mf;
-
-end.
+input feta-nummer.mf;
msgid ""
msgstr ""
"Project-Id-Version: lilypond 1.2.17\n"
-"POT-Creation-Date: 2000-06-09 02:01+0200\n"
+"POT-Creation-Date: 1999-09-16 20:29+0200\n"
"PO-Revision-Date: 2000-03-29 20:50+0900\n"
"Last-Translator: Daisuke Yamashita <yamad@mb.infoweb.ne.jp>\n"
"Language-Team: Japanese <ja@li.org>\n"
msgid "EOF in a string"
msgstr "รยธยปรบรรณรรฆยคร EOF ยคยฌยคยขยครชยครยคยน"
-#: data-file.cc:116 input.cc:87 midi-parser.cc:100 warn.cc:22
+#: data-file.cc:116 input.cc:86 midi-parser.cc:100 warn.cc:21
msgid "warning: "
msgstr "ยทรยนรฐ: "
-#: dstream.cc:184
+#: dstream.cc:158
msgid "not enough fields in Dstream init"
msgstr "Dstream ยฝรฉยดรผยฒยฝยปรพยครยฅรยฅยฃยกยผยฅรซยฅรยคยฌรรยฝยฝรยฌ"
-#: getopt-long.cc:143
-#, fuzzy, c-format
-msgid "option `%s' requires an argument"
+#: flower-debug.cc:17
+msgid "Debug output disabled. Compiled with NPRINT."
+msgstr "ยฅรยฅรยฅรยฅยฐยฝรรรยคยฌรยตยธรบยครยคยตยครฌยครยคยคยครยคยนยกยฃNPRINT ยครยคยญยครยฅยณยฅรณยฅรยฅยคยฅรซยคยตยครฌยครยคยทยคยฟยกยฃ"
+
+#: getopt-long.cc:141
+#, c-format
+msgid "Option `%s' requires an argument"
msgstr "ยฅยชยฅรยฅยทยฅรงยฅรณ `%s' ยครยครยฐรบยฟรดยคยฌรยฌรรยครยคยน"
-#: getopt-long.cc:147
-#, fuzzy, c-format
-msgid "option `%s' doesn't allow an argument"
+#: getopt-long.cc:145
+#, c-format
+msgid "Option `%s' doesn't allow an argument"
msgstr "ยฅยชยฅรยฅยทยฅรงยฅรณ `%s' ยครยฐรบยฟรดยครฒยตรถยฒรยคยทยครยคยปยครณ"
-#: getopt-long.cc:151
+#: getopt-long.cc:149
#, c-format
msgid "unrecognized option: `%s'"
msgstr "รยงยผยฑยครยคยญยครยคยคยฅยชยฅรยฅยทยฅรงยฅรณ: `%s'"
-#: getopt-long.cc:158
+#: getopt-long.cc:156
#, c-format
msgid "invalid argument `%s' to option `%s'"
msgstr "ยฅยชยฅรยฅยทยฅรงยฅรณ `%2$s' ยครรรยคยนยครซรยตยธรบยครยฐรบยฟรด `%1$s'"
-#: input.cc:92 warn.cc:8 warn.cc:16
+#: text-stream.cc:8
+msgid "<stdin>"
+msgstr "<stdin>"
+
+#: mapped-file-storage.cc:87 midi-stream.cc:77 mudela-stream.cc:104
+#: paper-stream.cc:25 scores.cc:38 simple-file-storage.cc:44 text-stream.cc:21
+#, c-format
+msgid "Can't open file: `%s'"
+msgstr "ยฅรยฅยกยฅยคยฅรซยครฒยณยซยคยฑยครยคยปยครณ: `%s'"
+
+#: input.cc:91 warn.cc:7 warn.cc:15
msgid "error: "
msgstr "ยฅยจยฅรฉยกยผ: "
-#: input.cc:98
-#, fuzzy
-msgid "non fatal error: "
+#: input.cc:97
+msgid "Non fatal error: "
msgstr "รยณยนรยฒรรยฝยครยฅยจยฅรฉยกยผ: "
-#: input.cc:106 source-file.cc:62 source-file.cc:155
+#: input.cc:105 source-file.cc:63 source-file.cc:156
msgid "position unknown"
msgstr "ยฐรรรยคยฌรยฝยครชยครยคยปยครณ"
#: mapped-file-storage.cc:74
-#, fuzzy
-msgid "can't map file"
+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
-#, fuzzy, 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 "ยครยกยฉ %2$d รยธยปรบยคยขยครซยครยคยบยครยครยคร %1$d รยธยปรบยคยทยคยซยครยคยค"
-#: text-stream.cc:9
-msgid "<stdin>"
-msgstr "<stdin>"
-
-#: warn.cc:35
+#: warn.cc:34
msgid "programming error: "
msgstr "ยฅรยฅรญยฅยฐยฅรฉยฅร ยพรฅยครยฅยจยฅรฉยกยผ: "
-#: warn.cc:35
+#: warn.cc:34
msgid " (Continuing; cross thumbs)"
msgstr " (รยณยคยฑยครยคยน -- cross thumbs)"
-#: afm.cc:42
-#, fuzzy, c-format
-msgid "can't find character number: %d"
-msgstr "รยธยปรบรรยนรฆยคยฌยธยซยครยคยซยครชยครยคยปยครณ: %d"
+#: warn.cc:40
+msgid "programming warning: "
+msgstr "ยฅรยฅรญยฅยฐยฅรฉยฅร ยพรฅยครยทรยนรฐ: "
-#: afm.cc:57
-#, fuzzy, c-format
-msgid "can't find character called: `%s'"
+#: afm.cc:129
+#, c-format
+msgid "Can't find character called: `%s'"
msgstr "ยธรยครยฝรยคยตยครฌยคยฟรยธยปรบยคยฌยธยซยครยคยซยครชยครยคยปยครณ: `%s'"
-#: afm.cc:87
-msgid "Error parsing AFM file"
-msgstr ""
+#: afm.cc:154
+#, c-format
+msgid "Can't find character number: %d"
+msgstr "รยธยปรบรรยนรฆยคยฌยธยซยครยคยซยครชยครยคยปยครณ: %d"
-#: all-font-metrics.cc:104 lookup.cc:56
-#, fuzzy, c-format
-msgid "can't find font: `%s'"
+#: all-font-metrics.cc:69 lookup.cc:103
+#, c-format
+msgid "Can't find font: `%s'"
msgstr "ยฅรยฅยฉยฅรณยฅรยคยฌยธยซยครยคยซยครชยครยคยปยครณ: `%s'"
-#: all-font-metrics.cc:105
+#: all-font-metrics.cc:70
msgid "Loading default font"
msgstr "ยฅรยฅรยฅยฉยฅรซยฅรยฅรยฅยฉยฅรณยฅรยครฒยฅรญยกยผยฅรยคยทยครยคยน"
-#: all-font-metrics.cc:122
-#, fuzzy, c-format
-msgid "can't find default font: `%s'"
+#: all-font-metrics.cc:75
+#, c-format
+msgid "Can't find default font: `%s'"
msgstr "ยฅรยฅรยฅยฉยฅรซยฅรยฅรยฅยฉยฅรณยฅรยคยฌยธยซยครยคยซยครชยครยคยปยครณ: `%s'"
-#: all-font-metrics.cc:123 includable-lexer.cc:49 lookup.cc:57 scores.cc:109
+#: all-font-metrics.cc:76
#, c-format
-msgid "(search path: `%s')"
+msgid "(search path: `%s)'"
msgstr "(ยธยกยบรทยฅรยฅยน: `%s')"
-#: all-font-metrics.cc:124
+#: all-font-metrics.cc:77
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:40 beam-engraver.cc:56
-msgid "can't find start of beam"
-msgstr ""
+#: beam-engraver.cc:42 beam-engraver.cc:58
+msgid "no beam to end"
+msgstr "รรถรรธยครยครยณรยคยฌยคยขยครชยครยคยปยครณ"
-#: beam-engraver.cc:85
-#, fuzzy
-msgid "already have a beam"
+#: beam-engraver.cc:87
+msgid "Already have a Beam"
msgstr "ยดรปยครยณรยคยฌยคยขยครชยครยคยน"
-#: beam-engraver.cc:141
-#, fuzzy
-msgid "unterminated beam"
-msgstr "ยฝยชรยผยครยครยคยคยฅรยฅยคยฅรยฅรณ"
+#: beam-engraver.cc:149
+msgid "unfinished beam"
+msgstr "ยฝยชรยปยคยตยครฌยครยคยคยครยคยคยณร"
-#: beam-engraver.cc:169 chord-tremolo-engraver.cc:167
-#, fuzzy
-msgid "stem must have Rhythmic structure"
+#: beam-engraver.cc:174
+msgid "Stem must have Rhythmic structure"
msgstr "รรครรธยครยฅรชยฅยบยฅร ยนยฝรยคยครฒยปรฝยคยฟยครยครยครยครชยครยคยปยครณ"
-#: beam-engraver.cc:180
-#, fuzzy
-msgid "stem doesn't fit in beam"
+#: beam-engraver.cc:185
+msgid "Stem doesn't fit in beam"
msgstr "รรครรธยคยฌยณรยครรรฆยครยคยชยคยตยครยครชยครยคยปยครณ"
-#: beam-engraver.cc:181
-#, fuzzy
-msgid "beam was started here"
+#: beam-engraver.cc:186
+msgid "Beam was started here"
msgstr "ยณรยครยคยณยคยณยคยซยครฉยณยซยปรยคยตยครฌยครยคยทยคยฟ"
-#: beam.cc:90
-#, fuzzy
-msgid "beam has less than two stems"
+#: beam.cc:147
+msgid "beam with less than two stems"
msgstr "ยณรยคยฌรรณยครรยครรพยครรรครรธยครยครยครขยครยปรยครฏยครฌยครยคยทยคยฟ"
-#: beam.cc:483
+#: beam.cc:312
msgid "weird beam vertical offset"
msgstr "ยฟรขรยพรรฝยธรพยครยฐรรรยครยคยทยครยคยชยคยซยคยทยครยณร"
-#: break-align-item.cc:87
-#, fuzzy, c-format
-msgid "unknown spacing pair `%s', `%s'"
-msgstr "รยฝยครฉยครยคยคยฅรยฅรฉยฅรณยฅยนยฅรฌยกยผยฅยฟ: `%s'"
+#: break-algorithm.cc:28
+msgid "0 lines"
+msgstr "0 ยนร"
+
+#: break-algorithm.cc:30
+#, c-format
+msgid "1 line (of %.0f columns)"
+msgstr "1 ยนร (%.0f ยฅยซยฅรฉยฅร )"
+
+#: break-algorithm.cc:32
+#, c-format
+msgid "%d lines (with an average of %.1f columns)"
+msgstr "%d ยนร (รยฟยถร %.1f ยฅยซยฅรฉยฅร )"
+
+#: break-algorithm.cc:155
+msgid "Score does not have any columns"
+msgstr "รรจรรยครยฅยซยฅรฉยฅร ยคยฌยคยขยครชยครยคยปยครณ"
+
+#: break-algorithm.cc:172
+#, c-format
+msgid "approximated %s"
+msgstr "ยคยชยคยชยครจยคยฝ %s"
+
+#: break-algorithm.cc:174
+#, c-format
+msgid "calculated %s exactly"
+msgstr "รยตยณรยครยทรยปยปยคยตยครฌยคยฟ %s"
+
+#: break-algorithm.cc:175
+#, c-format
+msgid "elapsed time %.2f seconds"
+msgstr "%.2f รรยทรยฒรก"
#: change-iterator.cc:22
-#, fuzzy, c-format
-msgid "can't change `%s' to `%s'"
+#, c-format
+msgid "Can't change `%s' to `%s'"
msgstr "`%s' ยคยซยครฉ `%s' ยครรรยนยนยครยคยญยครยคยปยครณ"
+#: change-iterator.cc:57
+msgid "Can't switch translators, I'm there already"
+msgstr "ยฅรยฅรฉยฅรณยฅยนยฅรฌยกยผยฅยฟยครฒรรยครชรรยคยจยครฉยครฌยครยคยปยครณยกยฃยดรปยครยคยฝยคยฆยครยครยครยคยคยครยคยน"
+
#.
#. 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
+#: change-iterator.cc:76
msgid "I'm one myself"
msgstr "ยฅรยฅรฉยฅรณยฅยนยฅรฌยกยผยฅยฟยคยฝยครยครขยครยครยคยน"
-#: change-iterator.cc:82
+#: change-iterator.cc:79
msgid "none of these in my family"
msgstr "ยฅรยฅยกยฅรยฅรชยครรรฆยครยคยขยครชยครยคยปยครณ"
-#: chord-tremolo-engraver.cc:111
-#, fuzzy
-msgid "unterminated chord tremolo"
-msgstr "ยฝยชรยผยครยครยคยคยฅรยฅยคยฅรยฅรณ"
+#: chord-tremolo-engraver.cc:41 chord-tremolo-engraver.cc:58
+msgid "no tremolo beam to end"
+msgstr "รรถรรธยครยครยฅรยฅรฌยฅรขยฅรญยตยญยนรฆยคยฌยคยขยครชยครยคยปยครณ"
-#: chord-tremolo-iterator.cc:41
-#, fuzzy
-msgid "no one to print a tremolos"
-msgstr "รยฟรรผยตยญยนรฆยครฒรยฝยผยจยคยนยครซยครขยครยคยฌยคยขยครชยครยคยปยครณ"
+#: chord-tremolo-engraver.cc:83
+msgid "Already have a tremolo beam"
+msgstr "ยคยนยครยครยฅรยฅรฌยฅรขยฅรญยตยญยนรฆยคยฌยคยขยครชยครยคยน"
-#: chord.cc:151
+#: chord-tremolo-engraver.cc:124
+msgid "unfinished tremolo beam"
+msgstr "ยฝยชยครฏยครยครยคยคยครยคยคยฅรยฅรฌยฅรขยฅรญยตยญยนรฆ"
+
+#: chord.cc:231
#, c-format
msgid "invalid subtraction: not part of chord: %s"
msgstr "รยตยธรบยครยฐรบยคยญยปยป: ยฅยณยกยผยฅรยครยฐรฌรรดยครยครยคยขยครชยครยคยปยครณ: %s"
-#: chord.cc:375
+#: chord.cc:245
#, c-format
msgid "invalid inversion pitch: not part of chord: %s"
msgstr "รยตยธรบยครร
ยพยฒรณยฅรยฅรยฅร: ยฅยณยกยผยฅรยครยฐรฌรรดยครยครยคยขยครชยครยคยปยครณ: %s"
-#: clef-engraver.cc:166
+#: clef-engraver.cc:178
msgid "unknown clef type"
msgstr "รรรรยครยฒยปรรดยตยญยนรฆ(Clef)"
-#: collision.cc:111
+#: collision.cc:95
msgid "Too many clashing notecolumns. Ignoring them."
msgstr "รร ยครชยนรงยครฏยครยคยคยฒยปรรคยคยฌรยฟยคยนยคยฎยครยคยนยกยฃยคยฝยครฌยครฉยครฒรยตยปรซยคยทยครยคยนยกยฃ"
-#: crescendo.cc:69
+#: crescendo.cc:42
msgid "crescendo"
msgstr "ยฅยฏยฅรฌยฅรยฅยทยฅยงยฅรณยฅร"
-#: crescendo.cc:69
+#: crescendo.cc:42
msgid "too small"
msgstr "ยพยฎยคยตยคยนยคยฎยครยคยน"
-#: cross-staff.cc:19
-#, fuzzy
-msgid ""
-"minVerticalAlign != maxVerticalAlign: cross staff spanners may be broken"
-msgstr ""
-"minVerticalAlign != maxVerticalAlign: รรขรรดร
ยชยคร beams/slurs ยคยฌยฒรตยครฌยครยคยทยคยฟ"
-
-#: debug.cc:26
+#: debug.cc:56
msgid "floating point exception"
msgstr "รรขรยฐยพยฎยฟรดร
รรรฃยณยฐ"
-#: debug.cc:50
-#, fuzzy
-msgid "can't set mem-checking!"
+#: debug.cc:139
+msgid "Can't set mem-checking!"
msgstr "ยฅรกยฅรขยฅรชยฅรยฅยงยฅรยฅยฏยครฒรรรรชยครยคยญยครยคยปยครณ"
#: dimensions.cc:13
msgid "NaN"
msgstr "NaN"
-#: dynamic-engraver.cc:281 span-dynamic-performer.cc:87
-#, fuzzy
-msgid "can't find start of (de)crescendo"
-msgstr "รรถรรธยครยคร(ยฅร)ยฅยฏยฅรฌยฅรยฅยทยฅยงยฅรณยฅรยคยฌยธยซยครยคยซยครชยครยคยปยครณ"
+#: dynamic-engraver.cc:109
+msgid "Got a dynamic already. Continuing dazed and confused."
+msgstr "ยดรปยครรยฐร
ยชยครยครยครยครยคยคยครยคยนยกยฃยบยฎรรฐยคยทยคยฟยครยครรยณยคยฑยครยคยนยกยฃ"
-#: dynamic-engraver.cc:300
-#, fuzzy
-msgid "already have a crescendo"
-msgstr "ยดรปยครยณรยคยฌยคยขยครชยครยคยน"
+#: dynamic-engraver.cc:162
+msgid "Can't find (de)crescendo to end"
+msgstr "รรถรรธยครยคร(ยฅร)ยฅยฏยฅรฌยฅรยฅยทยฅยงยฅรณยฅรยคยฌยธยซยครยคยซยครชยครยคยปยครณ"
-#: dynamic-engraver.cc:301
-#, fuzzy
-msgid "already have a decrescendo"
-msgstr "ยดรปยครยณรยคยฌยคยขยครชยครยคยน"
+#: dynamic-engraver.cc:216
+msgid "Too many crescendi here"
+msgstr "ยคยณยคยณยครยฅยฏยฅรฌยฅรยฅยทยฅยงยฅรณยฅรยคยฌรยฟยคยนยคยฎยครยคยน"
-#: dynamic-engraver.cc:381
-#, fuzzy
-msgid "unterminated (de)crescendo"
+#: dynamic-engraver.cc:254
+msgid "unended crescendo"
msgstr "ยฝยชรยปยคยทยครยคยคยครยคยคยฅยฏยฅรฌยฅรยฅยทยฅยงยฅรณยฅร"
-#: extender-engraver.cc:96
+#: encompass-info.cc:32
+msgid "Slur over rest?"
+msgstr "ยฅยนยฅรฉยกยผยคยฌยตรรรคยครฒยครยคยฟยคยคยครยคยคยครซ?"
+
+#: encompass-info.cc:67 stem-info.cc:140
+msgid "minVerticalAlign != maxVerticalAlign: interstaff beams/slurs may be broken"
+msgstr "minVerticalAlign != maxVerticalAlign: รรขรรดร
ยชยคร beams/slurs ยคยฌยฒรตยครฌยครยคยทยคยฟ"
+
+#: extender-engraver.cc:62
msgid "unterminated extender"
msgstr "ยฝยชรยผยครยครยคยคยฅยจยฅยฏยฅยนยฅรยฅรณยฅร"
-#: extender-engraver.cc:108
+#: extender-engraver.cc:74
msgid "Nothing to connect extender to on the left. Ignoring extender request."
msgstr "ยฅยจยฅยฏยฅยนยฅรยฅรณยฅรยคยฌยบยธรยฆยครยครยครยคยฌยครชยครยคยปยครณยกยฃยฅยจยฅยฏยฅยนยฅรยฅรณยฅรรรยตรกยครฒรยตยปรซยคยทยครยคยนยกยฃ"
msgid "no one to print a repeat brace"
msgstr "รยฟรรผยตยญยนรฆยครฒรยฝยผยจยคยนยครซยครขยครยคยฌยคยขยครชยครยคยปยครณ"
-#: gourlay-breaking.cc:157
-msgid "No feasible line breaking found"
-msgstr ""
-
#: grace-iterator.cc:43
msgid "no Grace context available"
msgstr "รรตยพรพยฅยณยฅรณยฅรยฅยญยฅยนยฅรยคยฌยคยขยครชยครยคยปยครณ"
-#: grace-position-engraver.cc:93
+#: grace-position-engraver.cc:89
msgid "Unattached grace notes. Attaching to last musical column."
msgstr "รรตยพรพยฒยปรรคยคยฌยครยคยฑยครฉยครฌยครยคยปยครณยครยคยทยคยฟยกยฃรยพรยฐยครยฅยซยฅรฉยฅร ยครยครยคยฑยครยคยน"
-#: hyphen-engraver.cc:59
+#: hyphen-engraver.cc:60
msgid "unterminated hyphen"
msgstr "ยฝยชรยผยครยครยคยคยฅรยฅยคยฅรยฅรณ"
-#: hyphen-engraver.cc:71
+#: hyphen-engraver.cc:72
msgid "Nothing to connect hyphen to on the left. Ignoring hyphen request."
msgstr "ยบยธรยฆยครยทรยคยฒยครซยฅรยฅยคยฅรยฅรณยคยฌยคยขยครชยครยคยปยครณยกยฃยฅรยฅยคยฅรยฅรณยครรรยตรกยครฒรยตยปรซยคยทยครยคยน"
-#: identifier.cc:44
+#: identifier.cc:46
#, c-format
msgid "wrong identifier type, expected: `%s'"
msgstr "ยดรยฐรฃยครยคยฟยผยฑรรยปรยทยฟยกยขยคยณยคยณยครรรจยครซยครยคยญยครขยครยคร: `%s'"
-#: includable-lexer.cc:47 lily-guile.cc:121 lily-guile.cc:144
+#: includable-lexer.cc:47 lily-guile.cc:82 lily-guile.cc:105
#: midi-score-parser.cc:24 scores.cc:108 scores.cc:114
-#, fuzzy, c-format
-msgid "can't find file: `%s'"
+#, c-format
+msgid "Can't find file: `%s'"
msgstr "ยฅรยฅยกยฅยคยฅรซยคยฌยธยซยครยคยซยครชยครยคยปยครณ: `%s'"
+#: includable-lexer.cc:49 lookup.cc:104 scores.cc:109
+#, c-format
+msgid "(search path: `%s')"
+msgstr "(ยธยกยบรทยฅรยฅยน: `%s')"
+
+#: ineq-constrained-qp.cc:169
+#, c-format
+msgid "Ineq_constrained_qp::solve (): Constraint off by %f"
+msgstr "Ineq_constrained_qp::solve (): รยฉยธรยครฒ %f ยครยฒรฒยฝรผ"
+
+#: ineq-constrained-qp.cc:233
+msgid "Didn't converge!"
+msgstr "ยผรฝรยซยคยทยครยคยปยครณยครยคยทยคยฟ!"
+
+#: ineq-constrained-qp.cc:235
+msgid "too much degeneracy"
+msgstr "ยพยฎยคยตยคยนยคยฎยครยคยน"
+
#: key-def.cc:31
msgid "No key name, assuming `C'"
msgstr "ยฅยญยกยผรยพยคยฌยคยขยครชยครยคยปยครณยกยข`C' ยครฒยปรฎยครยครยคยน"
msgid "Don't know how handle empty keys"
msgstr "ยถรตยครยฅยญยกยผยครยฐยทยคยครรฝยคยฌรยฝยครชยครยคยปยครณ"
-#: key-engraver.cc:74 key-performer.cc:65
+#: key-engraver.cc:70 key-performer.cc:65
msgid "FIXME: key change merge"
msgstr "FIXME: ยฅยญยกยผรรยนยนยครยฅรยกยผยฅยธ"
-#: lily-guile.cc:123 lily-guile.cc:146
+#: key.cc:54 key.cc:59
#, c-format
-msgid "(load path: `%s')"
-msgstr "(รรยนรพยฅรยฅยน: `%s')"
+msgid "Don't have that many octaves (%s)"
+msgstr "ยคยฝยครณยครยครรรดยปยณยครยฅยชยฅยฏยฅยฟยกยผยฅร (%s) ยครฒยปรยครฏยครยคยคยครยคยฏยครยคยตยคยค"
-#: line-of-score.cc:90
+#: key.cc:77
#, c-format
-msgid "Element count %d."
-msgstr ""
+msgid "underdone accidentals (%s)"
+msgstr "ยฅรยฅรฉยฅรยฅรยคยฌรยฟยคยนยคยฎยครยคยน (%s)"
-#: line-of-score.cc:207 paper-score.cc:70
+#: key.cc:82
#, c-format
-msgid "Element count %d "
-msgstr ""
+msgid "overdone accidentals (%s)"
+msgstr "ยฅยทยฅรฃยกยผยฅรยคยฌรยฟยคยนยคยฎยครยคยน (%s)"
-#: line-of-score.cc:221
-msgid "Calculating column positions..."
-msgstr "ยฅยซยฅรฉยฅร ยฐรรรยครฒยทรยปยปรรฆ..."
+#: lily-guile.cc:84 lily-guile.cc:107
+#, c-format
+msgid "(load path: `%s')"
+msgstr "(รรยนรพยฅรยฅยน: `%s')"
+
+#: line-of-score.cc:91
+msgid "Huh? Empty Line_of_score?"
+msgstr "ยคร? รรจรรยครยนรยคยฌยถรต?"
-#: local-key-engraver.cc:82
+#: local-key-engraver.cc:42
msgid "out of tune:"
msgstr "รรยฐรยณยฐยครรยด:"
-#: local-key-engraver.cc:83 time-signature-engraver.cc:29
-#: translator-group.cc:416 translator-group.cc:425
-#, fuzzy, c-format
-msgid "can't find: `%s'"
+#: local-key-engraver.cc:43 time-signature-engraver.cc:29
+#: translator-group.cc:437 translator-group.cc:446
+#, c-format
+msgid "Can't find: `%s'"
msgstr "ยธยซยครยคยซยครชยครยคยปยครณ: `%s'"
-#: lookup.cc:58
+#: lookup.cc:105
msgid "Aborting"
msgstr "ยฝยชรยปยคยทยครยคยน"
-#: lookup.cc:198
+#: lookup.cc:436
#, c-format
msgid "Non-matching braces in text `%s', adding braces"
msgstr "ยฅรยฅยญยฅยนยฅร `%s' รรฆยครยฐรฌรรยคยนยครซยฅรยฅรฌยกยผยฅยนยคยฌยคยขยครชยครยคยปยครณยกยฃยฅรยฅรฌยกยผยฅยนยครฒรรยฒรยคยทยครยคยน"
-#: main.cc:71 main.cc:92
+#: main.cc:71 main.cc:91
msgid "enable debugging output"
msgstr "ยฅรยฅรยฅรยฅยฐยฝรรรยครฒรยญยธรบ"
msgstr "EXT"
#: main.cc:72
-#, fuzzy
-msgid "use output format EXT (scm, ps, tex or as)"
+msgid "use output format EXT"
msgstr "ยฝรรรยฅรยฅยฉยกยผยฅรยฅรยฅร EXT ยครฒยปรยคยฆ"
-#: main.cc:73 main.cc:93
+#: main.cc:73 main.cc:92
msgid "this help"
msgstr "ยคยณยครยฅรยฅรซยฅร"
msgid "add DIR to search path"
msgstr "DIR ยครฒยธยกยบรทยฅรยฅยนยครรรยฒร"
-#: main.cc:75 main.cc:96
+#: main.cc:75 main.cc:95
msgid "FILE"
msgstr "FILE"
msgid "inhibit file output naming and exporting"
msgstr "รยพรยฐรรยคยฑยครยฅยจยฅยฏยฅยนยฅรยกยผยฅรยครยฝรรรยฅรยฅยกยฅยคยฅรซยครฒรรรยฉยคยนยครซ"
-#: main.cc:81 main.cc:100
+#: main.cc:81 main.cc:99
msgid "don't timestamp the output"
msgstr "ยฝรรรยครยฅยฟยฅยคยฅร ยฅยนยฅยฟยฅรณยฅรยครฒยครยคยฑยครยคยค"
msgid "ignore mudela version"
msgstr "mudela ยครยฅรยกยผยฅยธยฅรงยฅรณยครฒรยตยปรซยคยนยครซ"
-#: main.cc:84 main.cc:101
+#: main.cc:84 main.cc:100
msgid "print version number"
msgstr "ยฅรยกยผยฅยธยฅรงยฅรณรรยนรฆยครฒรยฝยผยจ"
-#: main.cc:85 main.cc:103
+#: main.cc:85 main.cc:102
msgid "show warranty and copyright"
msgstr "รรยพรยครรรธยบรฎยธยขยครยครยคยคยครรยฝยผยจยคยนยครซ"
-#: main.cc:100
+#: main.cc:92
#, c-format
msgid "Usage: %s [OPTION]... [FILE]..."
msgstr "ยปรยคยครรฝ: %s [ยฅยชยฅรยฅยทยฅรงยฅรณ]... [ยฅรยฅยกยฅยคยฅรซ]..."
-#: main.cc:102
+#: main.cc:94
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 ยคร GNU "
-"ยฅรยฅรญยฅยธยฅยงยฅยฏยฅรยครยฐรฌรรดยครยคยนยกยฃ\n"
-
-#: main.cc:112 main.cc:116
+#: main.cc:100 main.cc:115
msgid "Options:"
msgstr "ยฅยชยฅรยฅยทยฅรงยฅรณ:"
-#: main.cc:116
+#: main.cc:104
msgid "This binary was compiled with the following options:"
msgstr "ยคยณยครยฅรยฅยคยฅรยฅรชยครยฐรยฒยผยครยฅยชยฅรยฅยทยฅรงยฅรณรรยคยญยครยฅยณยฅรณยฅรยฅยคยฅรซยคยตยครฌยครยคยทยคยฟ"
-#: main.cc:120 main.cc:135
+#: main.cc:119 main.cc:123
#, c-format
msgid "Report bugs to %s"
msgstr "ยฅรยฅยฐยฅรฌยฅรยกยผยฅรยคร %s ยคร"
-#: main.cc:53 main.cc:143
+#: main.cc:52 main.cc:137
#, c-format
msgid ""
"This is free software. It is covered by the GNU General Public License,\n"
"ยคยณยครฌยครฒยฒรพรรยคยทยคยฟยครชยกยขรยฃรยฝยครฒรรรรยคยทยคยฟยครชยคยนยครซยปรถยครยดยฟยทรยคยตยครฌยครยคยนยกยฃ\n"
"`--warranty' ยฅยชยฅรยฅยทยฅรงยฅรณรรยคยญยครยตยฏรยฐยคยนยครซยครยกยขยครจยครชยพรยบรยครยพรฐรรณยคยฌรรยครฉยครฌยครยคยนยกยฃ\n"
-#: main.cc:60 main.cc:150 main.cc:162
+#: main.cc:59 main.cc:144 main.cc:156
#, c-format
msgid "Copyright (c) %s by"
msgstr "Copyright (c) %s by"
#. GNU GNU?
-#: main.cc:160
+#: main.cc:154
msgid "GNU LilyPond -- The GNU Project music typesetter"
msgstr "GNU LilyPond -- The GNU Project music typesetter"
-#: main.cc:69 main.cc:168
+#: main.cc:68 main.cc:162
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"
"USA.\n"
"\n"
"-- ยปยฒยนรรรต\n"
-" ยคยณยครยฅรยฅรญยฅยฐยฅรฉยฅร ยครยกยขยฅรยฅรชยกยผยฅยฝยฅรยฅรยฅยฆยฅยงยฅยขยครยคยนยกยฃยคยขยครยคยฟยคร Free Software "
-"Foundation\n"
-"ยคยฌยธรธรยฝยคยทยคยฟ GNU ยฐรฌรรยธรธรยญยปรรรยตรถรรบยครยฅรยกยผยฅยธยฅรงยฅรณ 2 "
-"ยครยพรฒยนร ยครยดรฐยคร
ยคยคยครยกยขยคยณยครยฅรยฅรญยฅยฐยฅรฉ\n"
+" ยคยณยครยฅรยฅรญยฅยฐยฅรฉยฅร ยครยกยขยฅรยฅรชยกยผยฅยฝยฅรยฅรยฅยฆยฅยงยฅยขยครยคยนยกยฃยคยขยครยคยฟยคร Free Software Foundation\n"
+"ยคยฌยธรธรยฝยคยทยคยฟ GNU ยฐรฌรรยธรธรยญยปรรรยตรถรรบยครยฅรยกยผยฅยธยฅรงยฅรณ 2 ยครยพรฒยนร ยครยดรฐยคร
ยคยคยครยกยขยคยณยครยฅรยฅรญยฅยฐยฅรฉ\n"
"ยฅร ยครฒยบรรรรรยครยคยฟยครรรยนยนยคยนยครซยคยณยครยคยฌยครยคยญยครยคยนยกยฃ\n"
"\n"
-"ยคยณยครยฅรยฅรญยฅยฐยฅรฉยฅร ยครรยญรรยครยครยปรยคยคยครยคยนยคยฌยกยขรรรรยครร
รถยคยฟยครยครยครยกยขยปรยพรฌรยญยตรยครรรรรชรรร
ยชร
ยฌยนรง"
-"\n"
-"รยญยครยครยคยคยครยครยฐร
รรยครรรยพรยครขยดรยครกยครยกยขยคยคยคยซยครยครซรรยพรยครขยนรยครยคยคยครยคยปยครณยกยฃยพรยบรยครยครยคยคยครยครยกยข"
-"\n"
+"ยคยณยครยฅรยฅรญยฅยฐยฅรฉยฅร ยครรยญรรยครยครยปรยคยคยครยคยนยคยฌยกยขรรรรยครร
รถยคยฟยครยครยครยกยขยปรยพรฌรยญยตรยครรรรรชรรร
ยชร
ยฌยนรง\n"
+"รยญยครยครยคยคยครยครยฐร
รรยครรรยพรยครขยดรยครกยครยกยขยคยคยคยซยครยครซรรยพรยครขยนรยครยคยคยครยคยปยครณยกยฃยพรยบรยครยครยคยคยครยครยกยข\n"
"GNU ยฐรฌรรยธรธรยญยปรรรยตรถรรบยฝรฑยครฒยคยชรรยครยฒยผยคยตยคยคยกยฃ\n"
"\n"
"ยคยขยครยคยฟยครยกยขยคยณยครยฅรยฅรญยฅยฐยฅรฉยฅร ยครยฐรฌยฝรฏยคร GNU ยฐรฌรรยธรธรยญยปรรรยตรถรรบยฝรฑยครฒยผรตยคยฑยผรจยครยครยคยคยครซยครยคยบ\n"
"ยครยคยน(COPYING ยฅรยฅยกยฅยคยฅรซยครฒยปยฒยพร)ยกยฃยคยฝยคยฆยครยครยคยคยพรฌยนรงยครยกยขFree Software Foundation,\n"
"Inc., 675 Mass Ave, Cambridge, MA 02139, USA ยครยผรชยปรฆยครฒยฝรฑยคยคยครยคยฏยครยคยตยคยคยกยฃ\n"
-#: midi-item.cc:311
+#: midi-item.cc:303
#, c-format
msgid "no such instrument: `%s'"
msgstr "ยคยฝยครรรยครยณรยดรฏยครยคยขยครชยครยคยปยครณ: `%s'"
-#: midi-item.cc:365
+#: midi-item.cc:357
#, c-format
msgid "unconventional key: flats: %d, sharps: %d"
msgstr "ยดยทยฝยฌยครยนรงยครฏยครยคยคยฅยญยกยผยครยคยน: ยฅรยฅรฉยฅรยฅร: %d ยธร, ยฅยทยฅรฃยกยผยฅร %d ยธร"
-#: midi-item.cc:410
+#: midi-item.cc:402
msgid "silly duration"
msgstr "รรยผยฏยคยฒยคยฟยฒยปรยน"
-#: midi-item.cc:423
+#: midi-item.cc:415
msgid "silly pitch"
msgstr "รรยผยฏยคยฒยคยฟยฅรยฅรยฅร"
msgid "Error syncing file (disk full?)"
msgstr "ยฅรยฅยกยฅยคยฅรซยครรยฑรยดยฅยจยฅรฉยกยผ (ยฅรยฅยฃยฅยนยฅยฏยคยฌยฐรฌรร?)"
-#: music-output-def.cc:57
+#: music-output-def.cc:56
msgid "Interpretation context with empty type"
msgstr "ยถรตยฅยฟยฅยคยฅรยครยฒรฒยผรกยฅยณยฅรณยฅรยฅยญยฅยนยฅร"
-#: music-output-def.cc:87
-#, fuzzy, c-format
-msgid "can't find `%s' context"
+#: music-output-def.cc:83
+#, c-format
+msgid "Can't find `%s' context"
msgstr "`%s' ยฅยณยฅรณยฅรยฅยญยฅยนยฅรยคยฌยธยซยครยคยซยครชยครยคยปยครณ"
#: musical-request.cc:42
msgid "Transposition by %s makes accidental larger than two"
msgstr "%s ยครรรรยดยครยครจยครยครยกยขรรณยครยครฒรยถยคยจยครซรรรยธยฒยปยคยฌยบรฎยครฉยครฌยครยคยทยคยฟ"
-#: my-lily-lexer.cc:129
+#: my-lily-lexer.cc:137
+#, c-format
+msgid "redeclaration of `\\%s'"
+msgstr "`\\%s' ยครยบรรรซยธร"
+
+#: my-lily-lexer.cc:143
#, c-format
msgid "Identifier name is a keyword: `%s'"
msgstr "ยผยฑรรยปรรยพยครยฅยญยกยผยฅรฏยกยผยฅรยครยคยน: `%s'"
-#: my-lily-lexer.cc:148
+#: my-lily-lexer.cc:172
#, c-format
msgid "error at EOF: %s"
msgstr "EOF ยครยครยคยณยครญยครยฅยจยฅรฉยกยผ: %s"
-#: midi-score-parser.cc:94 my-lily-parser.cc:56
+#: midi-score-parser.cc:94 my-lily-parser.cc:60
msgid "Parsing..."
msgstr "ยนยฝรยธยฒรฒรรรรฆ..."
-#: my-lily-parser.cc:64
+#: my-lily-parser.cc:69
msgid "Braces don't match"
msgstr "ยฅรยฅรฌยกยผยฅยนยคยฌยฐรฌรรยคยทยครยคยปยครณ"
-#: paper-def.cc:70
+#: p-col.cc:48
+msgid "Must set spring between differing columns"
+msgstr "ยฐรยครยครซยฅยซยฅรฉยฅร ยครยดรยคร spring ยครฒยฅยปยฅรยฅรยคยทยครยคยฑยครฌยครยครยครชยครยคยปยครณ"
+
+#: paper-def.cc:95
#, c-format
msgid "unknown paper variable: `%s'"
msgstr "paper รรยฟรดยครรรยคยฌรยฝยครชยครยคยปยครณ: `%s'"
-#: paper-def.cc:74
+#: paper-def.cc:99
msgid "not a real variable"
msgstr "รรยคยฌยผรยฟรดยครยครยคยขยครชยครยคยปยครณ"
-#: paper-def.cc:165
+#. for now; breaks -fscm output
+#: paper-def.cc:251
+msgid "Outputting Score, defined at: "
+msgstr "รรจรรยครฒยฝรรรยคยทยครยคยนยกยฃยคยณยคยณยครรรชยตร: "
+
+#: paper-def.cc:280
#, c-format
msgid "paper output to %s..."
msgstr "%s ยคร paper ยฝรรร..."
-#: mudela-stream.cc:93 paper-outputter.cc:92 performance.cc:95
+#: mudela-stream.cc:86 paper-outputter.cc:76 performance.cc:97
msgid ", at "
msgstr ", at "
-#: paper-score.cc:72
+#: paper-outputter.cc:130
+#, c-format
+msgid "improbable offset for object type: `%s'"
+msgstr "ยฅยชยฅรยฅยธยฅยงยฅยฏยฅรยทยฟยครยครยครยครยคยขยครชยคยฝยคยฆยครยครยคยคยฅยชยฅรยฅยปยฅรยฅร: `%s'"
+
+#: paper-score.cc:131
+msgid "Can't solve this casting problem exactly; reverting to Word_wrap"
+msgstr "รยตยณรยครยฅยญยฅรฃยฅยนยฅรยครฒยฒรฒยทรจยครยคยญยครยคยปยครณ -- Word_wrap ยครรรผยตยขยคยทยครยคยน"
+
+#: paper-score.cc:156
msgid "Preprocessing elements..."
msgstr "รรรรยครฒรยฐยฝรจรรฝรรฆ..."
-#: paper-score.cc:97
-msgid "Outputting Score, defined at: "
-msgstr "รรจรรยครฒยฝรรรยคยทยครยคยนยกยฃยคยณยคยณยครรรชยตร: "
+#: paper-score.cc:160
+msgid "Calculating column positions..."
+msgstr "ยฅยซยฅรฉยฅร ยฐรรรยครฒยทรยปยปรรฆ..."
+
+#: paper-score.cc:179
+#, c-format
+msgid "%s elements"
+msgstr "%s ยธรยครรรรร"
+
+#: paper-score.cc:182
+msgid "Line ... "
+msgstr "ยนร ..."
#: performance.cc:50
msgid "Track ... "
msgstr "ยฅรยฅรฉยฅรยฅยฏ ..."
#. perhaps multiple text events?
-#: performance.cc:75
+#: performance.cc:77
msgid "Creator: "
msgstr "ยบรฎยถรยผร: "
-#: performance.cc:90
+#: performance.cc:92
msgid "Automatically generated"
msgstr "ยผยซรยฐรยธรยฎยคยตยครฌยคยฟ"
-#: performance.cc:104
+#: performance.cc:106
#, c-format
msgid "from musical definition: %s"
msgstr "ยฒยปยณรร
ยชรรชยตรยครจยครช: %s"
-#: performance.cc:172
+#: performance.cc:174
#, c-format
msgid "MIDI output to %s..."
msgstr "%s ยครยคร MIDI ยฝรรร"
-#: piano-pedal-engraver.cc:158 piano-pedal-engraver.cc:170
-#: piano-pedal-performer.cc:87
-#, fuzzy, c-format
-msgid "can't find start of piano pedal: %s"
-msgstr "ยธรยครยฝรยคยตยครฌยคยฟรยธยปรบยคยฌยธยซยครยคยซยครชยครยคยปยครณ: `%s'"
-
-#: property-engraver.cc:106
-#, fuzzy
-msgid "Wrong type for property"
-msgstr "รยฐรยญรรยครยครยฅยฟยฅยคยฅรยคยฌยดรยฐรฃยครยครยคยคยครยคยน"
+#: qlpsolve.cc:88 qlpsolve.cc:139
+msgid "degenerate constraints"
+msgstr "รยฉยธรยครฒยดรรร"
-#: repeat-engraver.cc:196
+#: repeat-engraver.cc:177
msgid "No bar engraver found. Ignoring repeats."
msgstr "ยพยฎรรกยคยฌยธยซยครยคยซยครชยครยคยปยครณยกยฃรยฟรรผยครฒรยตยปรซยคยทยครยคยนยกยฃ"
-#: request-chord-iterator.cc:72
+#: request-chord-iterator.cc:73
#, c-format
msgid "Junking request: `%s'"
msgstr "รรยตรกยครฒยผรยครยครยคยน: `%s'"
-#: request-chord-iterator.cc:75
+#: request-chord-iterator.cc:76
#, c-format
msgid "Huh? Not a Request: `%s'"
msgstr "ยคร? รรยตรกยครยครยครยคยค: `%s'"
-#: request-iterator.cc:20
-#, fuzzy, c-format
-msgid "Junking music: `%s'"
-msgstr "รรยตรกยครฒยผรยครยครยคยน: `%s'"
-
-#: rest-collision.cc:135
+#: rest-collision.cc:64
msgid "too many colliding rests"
msgstr "ยตรรรคยครยพรรรยคยฌรยฟยคยนยคยฎยครยคยน"
-#: rest-collision.cc:139
+#: rest-collision.cc:68
msgid "too many notes for rest collision"
msgstr "ยตรรรคยครยพรรรยครรรยคยทยครยฒยปรรคยคยฌรยฟยคยนยคยฎยครยคยน"
-#: score-engraver.cc:139
+#: score-engraver.cc:149
#, c-format
msgid "unbound spanner `%s'"
msgstr "รรยคยธยครยคยคยครยคยคยฅยนยฅรยฅร `%s'"
-#: score.cc:64
+#: score.cc:56
msgid "no toplevel translator"
msgstr "ยบรยพรฅยฐรยครยฅรยฅรฉยฅรณยฅยนยฅรฌยกยผยฅยฟยคยฌยคยขยครชยครยคยปยครณ"
-#: score.cc:67
+#: score.cc:59
msgid "Interpreting music..."
msgstr "ยณรยถรยครยฒรฒยผรกรรฆ..."
-#: score.cc:79
+#: score.cc:70
msgid "Need music in a score"
msgstr "ยณรรรจยครยครยณรยถรยคยฌรยฌรรยครยคยน"
#. should we? hampers debugging.
-#: score.cc:92
+#: score.cc:83
msgid "Errors found/*, not processing score*/"
msgstr "ยฅยจยฅรฉยกยผยครฒรยฏยธยซ/*, ยณรรรจยครฒยฝรจรรฝยคยทยครยคยปยครณ*/"
-#: score.cc:97
+#: score.cc:88
#, c-format
msgid "elapsed time: %.2f seconds"
msgstr "ยทรยฒรกยปรพยดร: %.2f รร"
msgid "Score contains errors; will not process it"
msgstr "ยณรรรจยครยฅยจยฅรฉยกยผยคยฌยดรยครยครฌยครยคยคยครยคยน -- ยฝรจรรฝยคยทยครยคยปยครณ"
-#: script-engraver.cc:68
+#: script-engraver.cc:49
#, c-format
msgid "Don't know how to interpret articulation `%s'"
msgstr "ยฒยปรรก `%s' ยครยฒรฒยผรกรรฝรยกยคยฌรยฝยครชยครยคยปยครณ"
-#: sequential-music-iterator.cc:83
+#: sequential-music-iterator.cc:82
msgid "Must stop before this music ends"
msgstr "ยคยณยครยณรยถรยครยฝยชยครฏยครชยครยครยครยปรยครกยครยคยฑยครฌยครยครยครชยครยคยปยครณ"
#. this shouldn't happen, but let's continue anyway.
-#: single-malt-grouping-item.cc:51
+#: single-malt-grouping-item.cc:43
msgid "Single_malt_grouping_item: I've been drinking too much"
msgstr "Single_malt_grouping_item: ยฐรปยครยคยนยคยฎยครยครฃยครยคยฟ"
-#: slur-engraver.cc:82
+#: slur-engraver.cc:64
msgid "unterminated slur"
msgstr "ยฝยชรยผยคยตยครฌยครยคยคยครยคยคยฅยนยฅรฉยกยผ"
-#: slur-engraver.cc:98
-#, fuzzy, c-format
-msgid "can't find both ends of %s"
+#: slur-engraver.cc:80
+#, c-format
+msgid "Can't find both ends of %s"
msgstr "%s ยครรยพรยผยคยฌยธยซยครยคยซยครชยครยคยปยครณ"
-#: slur-engraver.cc:98
+#: slur-engraver.cc:80
msgid "slur"
msgstr "ยฅยนยฅรฉยกยผ"
-#: slur.cc:231
+#: slur.cc:38
msgid "Putting slur over rest. Ignoring."
msgstr "ยตรรรคยครฒยครยคยฟยคยคยครยฅยนยฅรฉยกยผยคยฌยคยขยครชยครยคยนยกยฃรยตยปรซยคยทยครยคยนยกยฃ"
-#: slur.cc:312
-msgid "Slur over rest?"
-msgstr "ยฅยนยฅรฉยกยผยคยฌยตรรรคยครฒยครยคยฟยคยคยครยคยคยครซ?"
+#: spanner.cc:41
+msgid "Left spanpoint is right spanpoint"
+msgstr "รรยฐรยครยบยธรยฆยคยฌยกยขยฑยฆรยฆยครยคยขยครชยครยคยน"
-#: spanner.cc:35 spanner.cc:174
+#: spanner.cc:111
#, c-format
msgid "Spanner `%s' has equal left and right spanpoints"
msgstr "รรยฐรยปรรรชยปร `%s' ยครยบยธยฑยฆยครร
รยคยฌรยฑยคยธยครยคยน"
-#: stem-engraver.cc:124
+#: spanner.cc:143
+msgid "spanner with negative length"
+msgstr "รรยฐรยปรรรชยปรยคยฌรรฉยครรยนยคยตยครยคยน"
+
+#: spring-spacer.cc:134
+msgid "I'm too fat; call Oprah"
+msgstr "รรยคยนยคยฎยครยคยน -- Oprah ยครฒยธรยครณยคร"
+
+#: spring-spacer.cc:299
+msgid "Solution doesn't satisfy constraints"
+msgstr "ยคยฝยครยฒรฒยทรจยครรยฉยธรยครฒรรพยคยฟยคยทยครยคยปยครณ"
+
+#: spring-spacer.cc:400
+#, c-format
+msgid "Improbable distance: %f point, setting to 10 mm"
+msgstr "ยคยขยครชยคยฝยคยฆยครยครยคยคยตรทรยฅ: %f ยฅรยฅยคยฅรณยฅร, 10 mm ยครรรรรชยคยทยครยคยน"
+
+#: spring-spacer.cc:405
+msgid "Negative distance, setting to 10 mm"
+msgstr "รรฉยครรรยครยครยครซยตรทรยฅ, 10 mm ยครรรรรชยคยทยครยคยน"
+
+#: stem-engraver.cc:80
#, c-format
msgid "Adding note head to incompatible stem (type = %d)"
msgstr "รยทยฝรขยคยทยคยฟรรครรธยครรรครยฌยครฒรรยฒรยคยทยครยคยน (ยฅยฟยฅยคยฅร = %d)"
-#: stem.cc:118
+#: stem.cc:26
+msgid "stem direction set already!"
+msgstr "รรครรธยครรรฝยธรพยครยดรปยครยฅยปยฅรยฅรยคยตยครฌยครยคยคยครยคยน!"
+
+#: stem.cc:106
msgid "Weird stem size; check for narrow beams"
msgstr "รรยครรรครรธยครยฅยตยฅยคยฅยบ -- ยบรยคยคยณรยครยฅรยฅยงยฅรยฅยฏยครฒยคยทยครยฒยผยคยตยคยค"
-#: tfm-reader.cc:115
+#: tfm-reader.cc:108
#, c-format
msgid "TFM header of `%s' has only %u word(s)"
msgstr "`%s' ยคร TFM ยฅรยฅรยฅรยคร %u ยธรฌยคยทยคยซยคยขยครชยครยคยปยครณ"
-#: tfm-reader.cc:153
+#: tfm-reader.cc:146
#, c-format
msgid "%s: TFM file has %u parameters, which is more than the %u I can handle"
msgstr "%s: TFM ยฅรยฅยกยฅยคยฅรซยคร %u ยธรยครยฅรยฅรฉยฅรกยฅยฟยคยฌยคยขยครชยครยคยนยคยฌยกยข%u ยฐรยพรฅยครยฐยทยคยจยครยคยปยครณ"
-#: tfm.cc:70
-#, fuzzy, c-format
-msgid "can't find ascii character: `%d'"
+#: tfm.cc:64
+#, c-format
+msgid "Can't find ascii character: `%d'"
msgstr "ascii รยธยปรบยคยฌยธยซยครยคยซยครชยครยคยปยครณ: `%d'"
-#: tie-engraver.cc:195 tie-performer.cc:109
+#: tie-engraver.cc:91
+msgid "unequal number of note heads for tie"
+msgstr "ยฅยฟยฅยคยครรรยฑรพยคยนยครซรรครยฌยครยฟรดยคยฌยถรร
รนยครยครยคยขยครชยครยคยปยครณ"
+
+#: tie-engraver.cc:155 tie-performer.cc:106
msgid "No ties were created!"
msgstr "ยบรฎยครฉยครฌยคยฟยฅยฟยฅยคยคยฌยคยขยครชยครยคยปยครณ!"
-#: tie.cc:80
+#: tie.cc:55
msgid "lonely tie"
msgstr "ยฐรฌยครยครยคยฑยครยฅยฟยฅยค"
+#: time-description.cc:17
+msgid "cadenza"
+msgstr "cadenza"
+
+#: time-description.cc:106
+msgid "Partial measure must be non-negative"
+msgstr "ยพยฎรรกรรดยครรรณรรฉยครยครยคยฏยครยครยครยครชยครยคยปยครณ"
+
+#: time-description.cc:108
+msgid "partial measure too large"
+msgstr "ยพยฎรรกรรดยคยฌรรงยคยญยคยนยคยฎยครยคยน"
+
#: time-scaled-music-iterator.cc:25
msgid "no one to print a tuplet start bracket"
msgstr "ยฅยฟยฅรยฅรฌยฅรยฅรยณยซยปรยฅรยฅรฉยฅยฑยฅรยฅรยครฒรยฝยผยจยคยนยครซยครขยครยคยฌยคยขยครชยครยคยปยครณ"
msgid "lost in time:"
msgstr "รรฏยปรยครรรยคยคยครยคยทยคยฟ:"
-#: timing-translator.cc:36
+#: timing-translator.cc:26
msgid "conflicting timing request"
msgstr "รรฏยปรยครรรยตรกยคยฌยถยฅยนรงยคยทยครยคยน"
-#: timing-translator.cc:37
-msgid "This is the other timing request"
-msgstr ""
+#: timing-translator.cc:62
+msgid "time signature change not allowed here"
+msgstr "ยคยณยคยณยครยครรรฏยปรยตยญยนรฆยครฒรรยนยนยครยคยญยครยคยปยครณ"
-#: timing-translator.cc:78
+#: timing-translator.cc:83
#, c-format
msgid "barcheck failed at: %s"
msgstr "ยพยฎรรกยฅรยฅยงยฅรยฅยฏยคยฌยผยบรร: %s"
-#: translator-ctors.cc:42
+#: translator-ctors.cc:39
#, c-format
msgid "unknown translator: `%s'"
msgstr "รยฝยครฉยครยคยคยฅรยฅรฉยฅรณยฅยนยฅรฌยกยผยฅยฟ: `%s'"
-#: translator-group.cc:81 translator-group.cc:94
+#: translator-group.cc:78 translator-group.cc:91
msgid "Program has no such type"
msgstr "ยฅรยฅรญยฅยฐยฅรฉยฅร ยครยครยคยฝยครรรยครยฅยฟยฅยคยฅรยคยฌยคยขยครชยครยคยปยครณ"
-#: translator-group.cc:85 translator-group.cc:100
+#: translator-group.cc:82 translator-group.cc:97
#, c-format
msgid "Already contains: `%s'"
msgstr "ยดรปยครยดรยครณยครยคยคยครยคยน: `%s'"
-#: translator-group.cc:210
-#, fuzzy, c-format
-msgid "can't find or create `%s' called `%s'"
+#: translator-group.cc:207
+#, c-format
+msgid "Can't find or create `%s' called `%s'"
msgstr "`%2$s' ยครยธรยครยครฌยคยฟ `%1$s' ยคยฌยธยซยครยคยซยครฉยครยคยคยคยซยบรฎยครฌยครยคยปยครณ"
-#: translator-group.cc:322
-#, fuzzy, c-format
-msgid "can't find or create: `%s'"
+#: translator-group.cc:341
+#, c-format
+msgid "Can't find or create: `%s'"
msgstr "ยธยซยครยคยซยครฉยครยคยคยคยซยบรฎยครฌยครยคยปยครณ: `%s'"
+#: transposed-music.cc:31
+msgid "Will ignore \\relative for transposed music"
+msgstr "ร
ยพรยดยคยตยครฌยคยฟยณรยถรยคร \\relative ยครฒรยตยปรซยคยทยครยคยน"
+
#: unfolded-repeat-iterator.cc:145
msgid "no one to print a volta bracket"
msgstr "volta ยฅรยฅรฉยฅยฑยฅรยฅรยครฒรยฝยผยจยคยนยครซยครขยครยคยฌยคยขยครชยครยคยปยครณ"
-#: parser.yy:58
+#: word-wrap.cc:75
+#, c-format
+msgid "Ugh, this measure is too long, breakpoint: %d"
+msgstr "ยคยฆยคยฐยครยกยขยคยณยครยพยฎรรกยครรยนยคยนยคยฎยครยคยนยกยฃยคยญยครซยพรฌยฝรช: %d"
+
+#: word-wrap.cc:77
+msgid "Generating stupido solution"
+msgstr "รรยผยฏยคยฒยคยฟยฒรฒยทรจยครฒรยธรยฎรรฆ"
+
+#: word-wrap.cc:95
+msgid "I don't fit; put me on Montignac"
+msgstr "ยพรฅยผรชยคยฏยครยครยครชยครยคยปยครณ -- Montignac ยครยครยคยณยครญยครรรยคยคยครยคยฏยครยคยตยคยค"
+
+#: parser.yy:55
#, c-format
msgid "Oldest supported input version: %s"
msgstr "ยฐรฌรรยธร
ยคยครรพรรยฒรรยฝยฅรยกยผยฅยธยฅรงยฅรณ: %s"
-#: parser.yy:427
+#: parser.yy:313
+msgid "Can't evaluate Scheme in safe mode"
+msgstr "ยฐรรยดยฅรขยกยผยฅรยครยคร Scheme ยครรยพยฒรยครฒยครยคยญยครยคยปยครณ"
+
+#: parser.yy:433 parser.yy:441 parser.yy:465
msgid "Need a translator group for a context"
msgstr "ยฅยณยฅรณยฅรยฅยญยฅยนยฅรยครยครยฅรยฅรฉยฅรณยฅยนยฅรฌยกยผยฅยฟยฅยฐยฅรซยกยผยฅรยคยฌรยฌรรยครยคยน"
-#: parser.yy:448
+#: parser.yy:459
msgid "Wrong type for property value"
msgstr "รยฐรยญรรยครยครยฅยฟยฅยคยฅรยคยฌยดรยฐรฃยครยครยคยคยครยคยน"
-#: parser.yy:694
+#: parser.yy:515
+msgid "More than one music block"
+msgstr "รยฃยฟรดยครยณรยถรยฅรยฅรญยฅรยฅยฏ"
+
+#: parser.yy:575
+msgid "Need even number of args for shape array"
+msgstr "shape รรรรณยครยครยฐรบยฟรดยครยถรถยฟรดยครยครยคยฑยครฌยครยครยครชยครยคยปยครณ"
+
+#: parser.yy:723
msgid "More alternatives than repeats. Junking excess alternatives."
msgstr "ยทยซยครชรรยคยทยครจยครชยครขรยชรรฒยปรจยคยฌรยฟยคยคยกยฃรยถยฒรกรยฌยครฒยผรยครยครยคยนยกยฃ"
-#: parser.yy:739
-msgid "Second argument must be a symbol"
-msgstr ""
+#: parser.yy:946 parser.yy:1360 parser.yy:1380
+#, c-format
+msgid "not a duration: %d"
+msgstr "ยฒยปรยนยครยครยคยขยครชยครยคยปยครณ: %d"
-#: parser.yy:744
-msgid "First argument must be a procedure taking 1 argument"
-msgstr ""
+#: parser.yy:948 parser.yy:1382
+msgid "Can't abbreviate"
+msgstr "ยพรรยฌยครยคยญยครยคยปยครณ"
-#: parser.yy:1069
+#: parser.yy:1076
msgid "Can't specify direction for this request"
msgstr "ยคยณยครรรยตรกยครรรยคยนยครซรรฝยธรพยครฒยปรรรชยคยนยครซยคยณยครยครยครยคยญยครยคยปยครณ"
-#: parser.yy:1170
-#, c-format
-msgid "Expecting %d arguments"
-msgstr ""
-
-#: parser.yy:1193 parser.yy:1201 parser.yy:1443
+#: parser.yy:1211 parser.yy:1219 parser.yy:1444
msgid "Have to be in Lyric mode for lyrics"
msgstr "ยฒรยปรฌยคร Lyric ยฅรขยกยผยฅรรรขยครยฝรฑยคยคยครยคยฏยครยคยตยคยค"
-#: parser.yy:1342 parser.yy:1362
-#, c-format
-msgid "not a duration: %d"
-msgstr "ยฒยปรยนยครยครยคยขยครชยครยคยปยครณ: %d"
-
-#: parser.yy:1371
+#: parser.yy:1391
msgid "Have to be in Note mode for notes"
msgstr "ยฒยปรรคยคร Note ยฅรขยกยผยฅรรรขยครยฝรฑยคยคยครยคยฏยครยคยตยคยค"
-#: parser.yy:1459
+#: parser.yy:1403
+msgid "Can't abbreviate tuplet"
+msgstr "ยฅยฟยฅรยฅรฌยฅรยฅรยครฒยพรรยฌยครยคยญยครยคยปยครณ"
+
+#: parser.yy:1450
msgid "Have to be in Chord mode for chords"
msgstr "ยฅยณยกยผยฅรยคร Chord ยฅรขยกยผยฅรรรขยครยฝรฑยคยคยครยคยฏยครยคยตยคยค"
-#: lexer.ll:158
+#: lexer.ll:155
msgid "EOF found inside a comment"
msgstr "ยฅยณยฅรกยฅรณยฅรรรขยคร EOF ยคยฌยธยซยครยคยซยครชยครยคยทยคยฟ"
-#: lexer.ll:172
+#: lexer.ll:169
msgid "\\maininput disallowed outside init files"
msgstr "ยฝรฉยดรผยฒยฝยฅรยฅยกยฅยคยฅรซยครยณยฐยครยคร \\maininput ยครฒยตยญยฝรยครยคยญยครยคยปยครณ"
-#: lexer.ll:202
+#: lexer.ll:199
#, c-format
msgid "undefined identifier: `%s'"
msgstr "รยครรชยตรยครยผยฑรรยปร: `%s'"
#. backup rule
-#: lexer.ll:207
+#: lexer.ll:204
msgid "Missing end quote"
msgstr "ยฝยชรยปยฅยฏยฅยชยกยผยฅรยคยฌยคยขยครชยครยคยปยครณ"
#. backup rule
-#: lexer.ll:229 lexer.ll:233
+#: lexer.ll:227 lexer.ll:231
msgid "white expected"
msgstr "ยถรตรรฒยคยฌรยฌรรยครยคยน"
-#: lexer.ll:241
-msgid "Can't evaluate Scheme in safe mode"
-msgstr "ยฐรรยดยฅรขยกยผยฅรยครยคร Scheme ยครรยพยฒรยครฒยครยคยญยครยคยปยครณ"
-
-#: lexer.ll:436
+#: lexer.ll:401
#, c-format
msgid "invalid character: `%c'"
msgstr "รยตยธรบยครรยธยปรบ: `%c'"
-#: lexer.ll:494
+#: lexer.ll:457
#, c-format
msgid "unknown escaped string: `\\%s'"
msgstr "รยครรยครยฅยจยฅยนยฅยฑยกยผยฅรรยธยปรบรรณ: `\\%s'"
-#: lexer.ll:580
+#: lexer.ll:543
#, c-format
msgid "incorrect mudela version: %s (%s, %s)"
msgstr "ยดรยฐรฃยครยคยฟ mudela ยฅรยกยผยฅยธยฅรงยฅรณ: %s (%s, %s)"
-#: main.cc:91
+#: out/BLURB.hh:2
+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 ยคร GNU ยฅรยฅรญยฅยธยฅยงยฅยฏยฅรยครยฐรฌรรดยครยคยนยกยฃ\n"
+
+#: main.cc:90
msgid "write exact durations, e.g.: a4*385/384"
msgstr "รยตยณรยครยฒยปรยนยครฒยฝรฑยคยคยครยคยฏยครยคยตยคยคยกยฃรรฃ: a4*385/384"
-#: main.cc:94
+#: main.cc:93
msgid "ACC[:MINOR]"
msgstr "ACC[:MINOR]"
-#: main.cc:94
+#: main.cc:93
msgid "set key: ACC +sharps/-flats; :1 minor"
msgstr "รยดยครฒรรรรช: ACC +ยฅยทยฅรฃยกยผยฅร/-ยฅรยฅรฉยฅรยฅร :1 รยปรยด"
-#: main.cc:95
-#, fuzzy
-msgid "don't output tuplets or double dots, smallest is 32"
+#: main.cc:94
+msgid "assume no tuplets or double dots, smallest is 32"
msgstr "รรคร
รยครครยฃรรคร
รยครฒยครยคยฏยคยนยครจยคยฆยปรฎยครยครยคยนยกยขยบรยพยฎยคร 32"
-#: main.cc:96
+#: main.cc:95
msgid "set FILE as default output"
msgstr "ยฅรยฅรยฅยฉยฅรซยฅรยฝรรรยครยคยทยคร FILE ยครฒรรรรชยคยนยครซ"
-#: main.cc:97
-msgid "don't output tuplets"
-msgstr ""
+#: main.cc:96
+msgid "assume no tuplets"
+msgstr "รรคร
รยครฒรยตยคยฏยคยนยครจยคยฆยปรฎยครยครยคยน"
-#: main.cc:98
+#: main.cc:97
msgid "be quiet"
msgstr "รร
ยคยซยครยคยทยครยคยน"
-#: main.cc:99
+#: main.cc:98
msgid "DUR"
msgstr "DUR"
-#: main.cc:99
+#: main.cc:98
msgid "set smallest duration"
msgstr "ยฒยปรยนยครฒยบรยพยฎยครรรรรชยคยทยครยคยน"
-#: main.cc:102
+#: main.cc:101
msgid "be verbose"
msgstr "ยพรยบรยครยพรฐรรณยครฒรยฝยผยจยคยทยครยคยน"
-#: main.cc:104
+#: main.cc:103
msgid "assume no double dotted notes"
msgstr "รยฃรรคร
รยฒยปรรคยครฒรยตยคยฏยคยนยครจยคยฆยปรฎยครยครยคยน"
-#: main.cc:111
+#: main.cc:110
#, c-format
msgid "Usage: %s [OPTION]... [FILE]"
msgstr "ยปรยคยครรฝ: %s [ยฅยชยฅรยฅยทยฅรงยฅรณ]... [ยฅรยฅยกยฅยคยฅรซ]"
-#: main.cc:113
+#: main.cc:112
msgid "Translate MIDI-file to mudela"
msgstr "MIDI ยฅรยฅยกยฅยคยฅรซยครฒ mudela ยครรรยดยนยคยทยครยคยน"
msgstr "รยตยธรบยครยฅรยฅรฉยฅรยฅยฏยฟรด"
#: midi-score-parser.cc:58
-#, fuzzy
-msgid "can't handle non-metrical time"
+msgid "Can't handle non-metrical time"
msgstr "ยฑยครยงยครยครยครฉยครยคยครรฏยปรยครยฐยทยคยจยครยคยปยครณ"
#: midi-track-parser.cc:68
msgid "Settling columns..."
msgstr "ยฅยซยฅรฉยฅร ยครฒยทรจรรชยคยทยครยคยน..."
-#: mudela-staff.cc:178
+#: mudela-staff.cc:177
msgid "% MIDI copyright:"
msgstr "% MIDI copyright:"
-#: mudela-staff.cc:179
+#: mudela-staff.cc:178
msgid "% MIDI instrument:"
msgstr "% MIDI instrument:"
msgstr "lily indent level: %d"
#. Maybe better not to translate these?
-#: mudela-stream.cc:83
+#: mudela-stream.cc:76
msgid "% Creator: "
msgstr "%s Creator: "
-#: mudela-stream.cc:88
+#: mudela-stream.cc:81
msgid "% Automatically generated"
msgstr "% Automatically generated"
-#: mudela-stream.cc:97
+#: mudela-stream.cc:90
#, c-format
msgid "% from input file: "
msgstr "% from input file: "
-
-#~ msgid "Debug output disabled. Compiled with NPRINT."
-#~ msgstr ""
-#~ "ยฅรยฅรยฅรยฅยฐยฝรรรยคยฌรยตยธรบยครยคยตยครฌยครยคยคยครยคยนยกยฃNPRINT ยครยคยญยครยฅยณยฅรณยฅรยฅยคยฅรซยคยตยครฌยครยคยทยคยฟยกยฃ"
-
-#~ msgid "programming warning: "
-#~ msgstr "ยฅรยฅรญยฅยฐยฅรฉยฅร ยพรฅยครยทรยนรฐ: "
-
-#~ msgid "(search path: `%s)'"
-#~ msgstr "(ยธยกยบรทยฅรยฅยน: `%s')"
-
-#~ msgid "no beam to end"
-#~ msgstr "รรถรรธยครยครยณรยคยฌยคยขยครชยครยคยปยครณ"
-
-#~ msgid "unfinished beam"
-#~ msgstr "ยฝยชรยปยคยตยครฌยครยคยคยครยคยคยณร"
-
-#~ msgid "0 lines"
-#~ msgstr "0 ยนร"
-
-#~ msgid "1 line (of %.0f columns)"
-#~ msgstr "1 ยนร (%.0f ยฅยซยฅรฉยฅร )"
-
-#~ msgid "%d lines (with an average of %.1f columns)"
-#~ msgstr "%d ยนร (รยฟยถร %.1f ยฅยซยฅรฉยฅร )"
-
-#~ msgid "Score does not have any columns"
-#~ msgstr "รรจรรยครยฅยซยฅรฉยฅร ยคยฌยคยขยครชยครยคยปยครณ"
-
-#~ msgid "approximated %s"
-#~ msgstr "ยคยชยคยชยครจยคยฝ %s"
-
-#~ msgid "calculated %s exactly"
-#~ msgstr "รยตยณรยครยทรยปยปยคยตยครฌยคยฟ %s"
-
-#~ msgid "elapsed time %.2f seconds"
-#~ msgstr "%.2f รรยทรยฒรก"
-
-#~ msgid "no tremolo beam to end"
-#~ msgstr "รรถรรธยครยครยฅรยฅรฌยฅรขยฅรญยตยญยนรฆยคยฌยคยขยครชยครยคยปยครณ"
-
-#~ msgid "Already have a tremolo beam"
-#~ msgstr "ยคยนยครยครยฅรยฅรฌยฅรขยฅรญยตยญยนรฆยคยฌยคยขยครชยครยคยน"
-
-#~ msgid "unfinished tremolo beam"
-#~ msgstr "ยฝยชยครฏยครยครยคยคยครยคยคยฅรยฅรฌยฅรขยฅรญยตยญยนรฆ"
-
-#~ msgid "Got a dynamic already. Continuing dazed and confused."
-#~ msgstr "ยดรปยครรยฐร
ยชยครยครยครยครยคยคยครยคยนยกยฃยบยฎรรฐยคยทยคยฟยครยครรยณยคยฑยครยคยนยกยฃ"
-
-#~ msgid "Too many crescendi here"
-#~ msgstr "ยคยณยคยณยครยฅยฏยฅรฌยฅรยฅยทยฅยงยฅรณยฅรยคยฌรยฟยคยนยคยฎยครยคยน"
-
-#~ msgid "Ineq_constrained_qp::solve (): Constraint off by %f"
-#~ msgstr "Ineq_constrained_qp::solve (): รยฉยธรยครฒ %f ยครยฒรฒยฝรผ"
-
-#~ msgid "Didn't converge!"
-#~ msgstr "ยผรฝรยซยคยทยครยคยปยครณยครยคยทยคยฟ!"
-
-#~ msgid "too much degeneracy"
-#~ msgstr "ยพยฎยคยตยคยนยคยฎยครยคยน"
-
-#~ msgid "Don't have that many octaves (%s)"
-#~ msgstr "ยคยฝยครณยครยครรรดยปยณยครยฅยชยฅยฏยฅยฟยกยผยฅร (%s) ยครฒยปรยครฏยครยคยคยครยคยฏยครยคยตยคยค"
-
-#~ msgid "underdone accidentals (%s)"
-#~ msgstr "ยฅรยฅรฉยฅรยฅรยคยฌรยฟยคยนยคยฎยครยคยน (%s)"
-
-#~ msgid "overdone accidentals (%s)"
-#~ msgstr "ยฅยทยฅรฃยกยผยฅรยคยฌรยฟยคยนยคยฎยครยคยน (%s)"
-
-#~ msgid "Huh? Empty Line_of_score?"
-#~ msgstr "ยคร? รรจรรยครยนรยคยฌยถรต?"
-
-#~ msgid "redeclaration of `\\%s'"
-#~ msgstr "`\\%s' ยครยบรรรซยธร"
-
-#~ msgid "Must set spring between differing columns"
-#~ msgstr "ยฐรยครยครซยฅยซยฅรฉยฅร ยครยดรยคร spring ยครฒยฅยปยฅรยฅรยคยทยครยคยฑยครฌยครยครยครชยครยคยปยครณ"
-
-#~ msgid "improbable offset for object type: `%s'"
-#~ msgstr "ยฅยชยฅรยฅยธยฅยงยฅยฏยฅรยทยฟยครยครยครยครยคยขยครชยคยฝยคยฆยครยครยคยคยฅยชยฅรยฅยปยฅรยฅร: `%s'"
-
-#~ msgid "Can't solve this casting problem exactly; reverting to Word_wrap"
-#~ msgstr "รยตยณรยครยฅยญยฅรฃยฅยนยฅรยครฒยฒรฒยทรจยครยคยญยครยคยปยครณ -- Word_wrap ยครรรผยตยขยคยทยครยคยน"
-
-#~ msgid "%s elements"
-#~ msgstr "%s ยธรยครรรรร"
-
-#~ msgid "Line ... "
-#~ msgstr "ยนร ..."
-
-#~ msgid "degenerate constraints"
-#~ msgstr "รยฉยธรยครฒยดรรร"
-
-#~ msgid "Left spanpoint is right spanpoint"
-#~ msgstr "รรยฐรยครยบยธรยฆยคยฌยกยขยฑยฆรยฆยครยคยขยครชยครยคยน"
-
-#~ msgid "spanner with negative length"
-#~ msgstr "รรยฐรยปรรรชยปรยคยฌรรฉยครรยนยคยตยครยคยน"
-
-#~ msgid "I'm too fat; call Oprah"
-#~ msgstr "รรยคยนยคยฎยครยคยน -- Oprah ยครฒยธรยครณยคร"
-
-#~ msgid "Solution doesn't satisfy constraints"
-#~ msgstr "ยคยฝยครยฒรฒยทรจยครรยฉยธรยครฒรรพยคยฟยคยทยครยคยปยครณ"
-
-#~ msgid "Improbable distance: %f point, setting to 10 mm"
-#~ msgstr "ยคยขยครชยคยฝยคยฆยครยครยคยคยตรทรยฅ: %f ยฅรยฅยคยฅรณยฅร, 10 mm ยครรรรรชยคยทยครยคยน"
-
-#~ msgid "Negative distance, setting to 10 mm"
-#~ msgstr "รรฉยครรรยครยครยครซยตรทรยฅ, 10 mm ยครรรรรชยคยทยครยคยน"
-
-#~ msgid "stem direction set already!"
-#~ msgstr "รรครรธยครรรฝยธรพยครยดรปยครยฅยปยฅรยฅรยคยตยครฌยครยคยคยครยคยน!"
-
-#~ msgid "unequal number of note heads for tie"
-#~ msgstr "ยฅยฟยฅยคยครรรยฑรพยคยนยครซรรครยฌยครยฟรดยคยฌยถรร
รนยครยครยคยขยครชยครยคยปยครณ"
-
-#~ msgid "cadenza"
-#~ msgstr "cadenza"
-
-#~ msgid "Partial measure must be non-negative"
-#~ msgstr "ยพยฎรรกรรดยครรรณรรฉยครยครยคยฏยครยครยครยครชยครยคยปยครณ"
-
-#~ msgid "partial measure too large"
-#~ msgstr "ยพยฎรรกรรดยคยฌรรงยคยญยคยนยคยฎยครยคยน"
-
-#~ msgid "time signature change not allowed here"
-#~ msgstr "ยคยณยคยณยครยครรรฏยปรยตยญยนรฆยครฒรรยนยนยครยคยญยครยคยปยครณ"
-
-#~ msgid "Will ignore \\relative for transposed music"
-#~ msgstr "ร
ยพรยดยคยตยครฌยคยฟยณรยถรยคร \\relative ยครฒรยตยปรซยคยทยครยคยน"
-
-#~ msgid "Ugh, this measure is too long, breakpoint: %d"
-#~ msgstr "ยคยฆยคยฐยครยกยขยคยณยครยพยฎรรกยครรยนยคยนยคยฎยครยคยนยกยฃยคยญยครซยพรฌยฝรช: %d"
-
-#~ msgid "Generating stupido solution"
-#~ msgstr "รรยผยฏยคยฒยคยฟยฒรฒยทรจยครฒรยธรยฎรรฆ"
-
-#~ msgid "I don't fit; put me on Montignac"
-#~ msgstr "ยพรฅยผรชยคยฏยครยครยครชยครยคยปยครณ -- Montignac ยครยครยคยณยครญยครรรยคยคยครยคยฏยครยคยตยคยค"
-
-#~ msgid "More than one music block"
-#~ msgstr "รยฃยฟรดยครยณรยถรยฅรยฅรญยฅรยฅยฏ"
-
-#~ msgid "Need even number of args for shape array"
-#~ msgstr "shape รรรรณยครยครยฐรบยฟรดยครยถรถยฟรดยครยครยคยฑยครฌยครยครยครชยครยคยปยครณ"
-
-#~ msgid "Can't abbreviate"
-#~ msgstr "ยพรรยฌยครยคยญยครยคยปยครณ"
-
-#~ msgid "Can't abbreviate tuplet"
-#~ msgstr "ยฅยฟยฅรยฅรฌยฅรยฅรยครฒยพรรยฌยครยคยญยครยคยปยครณ"
-
-#~ msgid "assume no tuplets"
-#~ msgstr "รรคร
รยครฒรยตยคยฏยคยนยครจยคยฆยปรฎยครยครยคยน"
(define (volta h w thick vert_start vert_end)
(embedded-ps ((ps-scm 'volta) h w thick vert_start vert_end)))
+ (define (define-origin file line col)
+ ; use this for column positions
+ (string-append "\\special{src:" (number->string line) ":"
+ (number->string col) " " file "}")
+
+ ; line numbers only:
+ ;(string-append "\\special{src:" (number->string line) " " file "}")
+)
+ ; no-origin not yet supported by Xdvi
+ (define (no-origin) "")
+
;; TeX
;; The procedures listed below form the public interface of TeX-scm.
;; (should merge the 2 lists)
(define text ,text)
(define tuplet ,tuplet)
(define volta ,volta)
+ (define define-origin ,define-origin)
+ (define no-origin ,no-origin)
))
((eq? action-name 'beam) beam)
"\n unknown\n")
+ (define (define-origin a b c ) "")
+ (define (no-origin) "")
+
;; PS
(cond ((eq? action-name 'all-definitions)
`(begin
(define stop-line ,stop-line)
(define stop-last-line ,stop-line)
(define text ,text)
+ (define no-origin ,no-origin)
+ (define define-origin ,define-origin)
))
((eq? action-name 'tuplet) tuplet)
((eq? action-name 'beam) beam)
%%\headheight9pt
%%\headsep0pt
%% Maybe this is too drastic, but let us give it a try.
-\geometry{width=%spt, height=%spt,headheight=2mm,headsep=0pt,footskip=2mm}
+\geometry{width=%spt, textheight=%spt,headheight=2mm,headsep=0pt,footskip=2mm}
\input{lilyponddefs}
\input{titledefs}
%s