+++ /dev/null
-%
-% setup for Request->Element conversion. Guru-only
-%
-
-\requestregister {
- "Score_register"
- \alias "Score";
-% \consists "Score_bar_register";
- \consists "Bar_align_register";
- \consists "Clef_align_register";
- \consists "Key_align_register";
- \consists "Meter_align_register";
- \consists "Score_horizontal_align_register";
-
- \contains\requestregister {
- "Staff_registers"
- \alias "Staff";
- \consists "Bar_register";
- \consists "Clef_register";
- \consists "Key_register";
- \consists "Meter_register";
- \consists "Local_key_register";
- \consists "Staff_sym_register";
- \consists "Collision_register";
- \consists "Rest_collision_register";
- \contains \requestregister {
- "Voice_group_registers"
- \alias "Voice_group";
- \consists "Dynamic_register";
- \consists "Stem_beam_register";
- \consists "Script_register";
- \consists "Note_column_register";
- \consists "Slur_register";
- \contains \requestregister {
- "Voice_registers"
- \alias "Voice";
- \consists "Note_head_register" ;
- \consists "Tie_register";
- }
- }
- }
-
- \contains\requestregister {
- "Staff_registers"
- \alias "Lyric";
- \contains\requestregister{
- "Voice_group_registers"
- \alias "Voice_group";
- \contains\requestregister{
- "Voice_registers"
- \consists "Lyric_register";
- \consists "Swallow_register";
- }
- }
- }
-}
-
-
-
+++ /dev/null
-%
-% spacing info for LilyPond. Do not edit this if you're not a guru.
-% It has a lot of hard-wired stringconstants
-%
-
-
-table_sixteen=
-\symboltables {
-
- \texid "\input lilyponddefs \musixsixteendefs"
-
- % index TeXstring, xmin xmax ymin ymax
-
- "scripts" = \table {
- "fermata" "\fermata" 0.0\pt 0.0\pt 0.0\pt 6.0\pt
- "-fermata" "\ifermata" 0.0\pt 0.0\pt -6.0\pt 0.0\pt
- "portato" "\portato" 0.0\pt 4.0\pt 0.0\pt 2.0\pt
- "-portato" "\iportato" 0.0\pt 4.0\pt -2.0\pt 0.0\pt
- "tenuto" "\tenuto" 0.0\pt 4.0\pt -1.0\pt 1.0\pt
- "-tenuto" "\itenuto" 0.0\pt 4.0\pt -1.0\pt 1.0\pt
- "sforzato" "\sforzato" -0.8\pt 4.0\pt -1.92\pt 1.92\pt
- "marcato" "\marcato" 0.0\pt 4.0\pt 0.0\pt 4.0\pt
- "-marcato" "\imarcato" 0.0\pt 4.0\pt -4.0\pt 0.0\pt
- "staccato" "\staccato" 0.0\pt 0.0\pt -1.1\pt 1.1\pt
- "staccatissimo" "\staccatissimo" 0.0\pt 0.0\pt 0.0\pt 1.0\pt
- "-staccatissimo" "\istaccatissimo" 0.0\pt 0.0\pt 0.0\pt 1.0\pt
- "upbow" "\upbow" -1.0\pt 6.0\pt 0.0\pt 5.0\pt
- "downbow" "\downbow" 0.0\pt 5.0\pt 0.0\pt 7.5\pt
- "back" "\backorfront" 0.0\pt 6.0\pt 0.0\pt 3.0\pt
- "-front" "\backorfront" 0.0\pt 6.0\pt 0.0\pt 3.0\pt
- "heel" "\heel" 0.0\pt 6.0\pt -1.0\pt 5.0\pt
- "toe" "\toe" 0.0\pt 6.0\pt -1.0\pt 5.0\pt
- "bheel" "\bheel" 0.0\pt 6.0\pt -1.0\pt 5.0\pt
- "btoe" "\btoe" 0.0\pt 6.0\pt -1.0\pt 5.0\pt
- "fheel" "\fheel" 0.0\pt 6.0\pt -1.0\pt 5.0\pt
- "ftoe" "\ftoe" 0.0\pt 6.0\pt -1.0\pt 5.0\pt
- "-back" "\backorfront" 0.0\pt 6.0\pt 0.0\pt 3.0\pt
- "front" "\backorfront" 0.0\pt 6.0\pt 0.0\pt 3.0\pt
- }
-
- "style" = \table {
- "roman" "\settext{%}" 0.0\pt 5.0\pt 0.0\pt 8.0\pt
- "italic" "\setitalic{%}" 0.0\pt 0.0\pt 0.0\pt 8.0\pt
- "dynamic" "\setdynamic{%}" 0.0\pt 0.0\pt 0.0\pt 8.0\pt
- }
- "dynamics" = \table {
-
- "mf" "\dynmf"
- "fff" "\dynfff"
- "ff" "\dynff"
- "f" "\dynf"
- "mp" "\dynmp"
- "p" "\dynp"
- "pp" "\dynpp"
- "ppp" "\dynppp"
-
- }
- "align" = \table {
- "-1" "\leftalign{%}"
- "0" "\centeralign{%}"
- "1" "\rightalign{%}"
- }
-
- "clefs" = \table {
- "violin" "\violinclef" 0.0\pt 12.8\pt -10.0\pt 18.0\pt
- "bass" "\bassclef" 0.0\pt 12.8\pt 0.0\pt 16.0\pt
- "alto" "\altoclef" 0.0\pt 12.8\pt 0.0\pt 16.0\pt
- "tenor" "\altoclef" 0.0\pt 12.8\pt 0.0\pt 16.0\pt
- "violin_change" "\cviolinclef" 0.0\pt 11.2\pt -12.0\pt 12.0\pt
- "bass_change" "\cbassclef" 0.0\pt 11.2\pt 0.0\pt 16.0\pt
- "alto_change" "\caltoclef" 0.0\pt 11.2\pt 0.0\pt 16.0\pt
- "tenor_change" "\caltoclef" 0.0\pt 11.2\pt 0.0\pt 16.0\pt
- }
-
- "balls" = \table {
- "1" "\wholeball" 0.0\pt 6.0\pt -2.0\pt 2.0\pt
- "2" "\halfball" 0.0\pt 5.0\pt -2.0\pt 2.0\pt
- "4" "\quartball" 0.0\pt 5.0\pt -2.0\pt 2.0\pt
- }
-
- "slur" = \table {
- "whole" "\slurchar%{%}"
- "half" "\hslurchar%{%}"
- }
- "accidentals" = \table {
- "-2" "\flatflat" 0.0\pt 8.16\pt -2.5\pt 7.5\pt
- "-1" "\flat" 0.0\pt 4.8\pt -2.5\pt 7.5\pt
- "0" "\natural" 0.0\pt 4.8\pt -7.5\pt 7.5\pt
- "1" "\sharp" 0.0\pt 3.6\pt -7.5\pt 7.5\pt
- "2" "\sharpsharp" 0.0\pt 4.8\pt -2.5\pt 7.5\pt
- }
-
- "streepjes" = \table {
- "toplines" "\toplines{%}" -1.0\pt 7.0\pt 0.0\pt 0.0\pt
- "botlines" "\botlines{%}" -1.0\pt 7.0\pt 0.0\pt 0.0\pt
- }
-
- "bars" = \table {
- "empty" "\emptybar"
- "|" "\maatstreep" 0.0\pt 0.64\pt -8.0\pt 8.0\pt
- "||" "\doublebar" 0.0\pt 4.0\pt -8.0\pt 8.0\pt
- "|." "\finishbar" -4.0\pt 0.0\pt -8.0\pt 8.0\pt
- ":|" "\repeatbar" -4.0\pt 0.0\pt -8.0\pt 8.0\pt
- "|:" "\startrepeat" 0.0\pt 4.0\pt -8.0\pt 8.0\pt
- ":|:" "\repeatbarstartrepeat" 0.0\pt 16.0\pt -8.0\pt 8.0\pt
-
- }
-
- "rests" = \table {
- "1o" "\outsidewholerest" 0.0\pt 6.0\pt 0.0\pt 2.0\pt
- "1" "\wholerest" 0.0\pt 6.0\pt 0.0\pt 2.0\pt
- "2" "\halfrest" 0.0\pt 6.0\pt -2.0\pt 0.0\pt
- "2o" "\outsidehalfrest" 0.0\pt 6.0\pt -2.0\pt 0.0\pt
- "4" "\quartrest" -5.0\pt 2.0\pt -5.0\pt 5.0\pt
- "8" "\eighthrest" 0.0\pt 5.0\pt 0.0\pt 8.0\pt
- "16" "\sixteenthrest" 0.0\pt 6.0\pt 0.0\pt 12.0\pt
- "32" "\thirtysecondrest" 0.0\pt 6.0\pt 0.0\pt 16.0\pt
- "64" "\sixtyfourthrest" 0.0\pt 6.0\pt 0.0\pt 16.0\pt
- "128" "\hundredtwentyeighthrest" 0.0\pt 6.0\pt 0.0\pt 16.0\pt
- }
-
- "meters" = \table {
- "C" "\fourfourmeter" 0.0\pt 10.0\pt -5.0\pt 5.0\pt
- "C2" "\allabreve" 0.0\pt 10.0\pt -5.0\pt 5.0\pt
- }
-
- % dims ignored for this table
- "param" = \table {
- "meter" "\generalmeter{%}{%}" 0.0\pt 10.0\pt -5.0\pt 5.0\pt
- "linestaf" "\linestafsym{%}{%}"
- "stem" "\stem{%}{%}"
- "fill" "\hbox{}"
- % ugh. 8pt
- "crescendosym" "\crescendosym{%}" 0.0\pt 0.0\pt -3.0\pt 3.0\pt
- "decrescendosym" "\decrescendosym{%}" 0.0\pt 0.0\pt -3.0\pt 3.0\pt
- }
-
- "dots" = \table {
- "1" "\lsingledot" 0.0\pt 2.0\pt -1.0\pt 1.0\pt
- "2" "\ldoubledot" 0.0\pt 5.0\pt -1.0\pt 1.0\pt
- "3" "\ltripledot" 0.0\pt 8.0\pt -1.0\pt 1.0\pt
- }
-
- "flags" = \table {
- "8" "\eighthflag" 0.0\pt 4.0\pt 0.0\pt 0.0\pt
- "16" "\sixteenthflag" 0.0\pt 4.0\pt 0.0\pt 0.0\pt
- "32" "\thirtysecondflag" 0.0\pt 4.0\pt 0.0\pt 0.0\pt
- "64" "\sixtyfourthflag" 0.0\pt 4.0\pt 0.0\pt 0.0\pt
- "128" "\hundredtwentyeighthflag" 0.0\pt 4.0\pt 0.0\pt 0.0\pt
- "-8" "\deighthflag" 0.0\pt 4.0\pt 0.0\pt 0.0\pt
- "-16" "\dsixteenthflag" 0.0\pt 4.0\pt 0.0\pt 0.0\pt
- "-32" "\dthirtysecondflag" 0.0\pt 4.0\pt 0.0\pt 0.0\pt
- "-64" "\dsixtyfourthflag" 0.0\pt 4.0\pt 0.0\pt 0.0\pt
- "-128" "\dhundredtwentyeighthflag" 0.0\pt 4.0\pt 0.0\pt 0.0\pt
- }
-
- "beamslopes" = \table {
- "slope" "\beamslope{%}{%}"
- "horizontal" "\rulesym{%}{%}"
- }
-
-}
-default_table = \symboltables { table_sixteen }
+++ /dev/null
-/*
- acceptor.cc -- implement Acceptor
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "acceptor.hh"
-Acceptor::Acceptor()
-{
- iterator_count_ = 0;
-}
-
-IMPLEMENT_STATIC_NAME(Acceptor);
-IMPLEMENT_IS_TYPE_B(Acceptor);
+++ /dev/null
-/*
- bar-reg.cc -- implement Bar_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "bar-reg.hh"
-#include "bar.hh"
-#include "command-request.hh"
-#include "time-description.hh"
-
-Bar_register::Bar_register()
-{
- do_post_move_processing();
-}
-
-bool
-Bar_register::do_try_request(Request*r_l)
-{
- Command_req* c_l = r_l->command();
- if (!c_l|| !c_l->bar())
- return false;
- Bar_req * b= c_l->bar();
- if (bar_req_l_ && bar_req_l_->compare(*b))
- return false;
-
- bar_req_l_ = b;
-
- return true;
-}
-
-void
-Bar_register::do_process_requests()
-{
- if (bar_req_l_ ) {
- bar_p_ = new Bar;
- bar_p_->type_str_=bar_req_l_->type_str_;
- } else if (!get_staff_info().time_C_->whole_in_measure_) {
- bar_p_ = new Bar;
- }
-
- if (bar_p_){
- announce_element(Score_elem_info(bar_p_, bar_req_l_) );
- }
-}
-
-
-void
-Bar_register::do_pre_move_processing()
-{
- if (bar_p_) {
- typeset_breakable_item(bar_p_);
- bar_p_ =0;
- }
-}
-
-void
-Bar_register::do_post_move_processing()
-{
- bar_req_l_ = 0;
- bar_p_ =0;
-}
-
-IMPLEMENT_STATIC_NAME(Bar_register);
-IMPLEMENT_IS_TYPE_B1(Bar_register,Request_register);
-ADD_THIS_REGISTER(Bar_register);
-
-
+++ /dev/null
-/*
- clef.cc -- implement Clef_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>,
- Mats Bengtsson <matsb@s3.kth.se>
-*/
-
-#include "bar.hh"
-#include "clef-reg.hh"
-#include "clef-item.hh"
-#include "debug.hh"
-#include "command-request.hh"
-#include "time-description.hh"
-
-Clef_register::Clef_register()
-{
- clef_p_ = 0;
- clef_req_l_ =0;
-
- set_type("violin");
-}
-
-bool
-Clef_register::set_type(String s)
-{
- clef_type_str_ = s;
- if (clef_type_str_ == "violin") {
- c0_position_i_= -2;
- } else if (clef_type_str_ == "alto") {
- c0_position_i_= 4;
- } else if (clef_type_str_ == "tenor") {
- c0_position_i_= 6;
- } else if (clef_type_str_ == "bass") {
- c0_position_i_= 10;
- } else
- return false;
-
- return true;
-}
-
-void
-Clef_register::fill_staff_info(Staff_info &i)
-{
- i.c0_position_i_l_ = &c0_position_i_;
-}
-
-void
-Clef_register::read_req(Clef_change_req*c_l)
-{
- if (!set_type(c_l->clef_str_))
- c_l->error("unknown clef type ");
-}
-void
-Clef_register::acknowledge_element(Score_elem_info info)
-{
- if (info.elem_l_->name() == Bar::static_name() ) {
- create_clef();
- if ( !clef_req_l_ )
- clef_p_->default_b_ = true;
- }
-}
-
-void
-Clef_register::do_creation_processing()
-{
- create_clef();
- clef_p_->default_b_ = false;
-}
-
-bool
-Clef_register::do_try_request(Request * r_l)
-{
- Command_req* creq_l= r_l->command();
- if (!creq_l || !creq_l->clefchange())
- return false;
-
- clef_req_l_ = creq_l->clefchange();
-
- read_req(clef_req_l_);
- return true;
-}
-
-void
-Clef_register::create_clef()
-{
- if (!clef_p_) {
- clef_p_ = new Clef_item;
- announce_element(Score_elem_info(clef_p_,clef_req_l_));
- }
- clef_p_->read(*this);
-}
-
-void
-Clef_register::do_process_requests()
-{
- if (clef_req_l_) {
- create_clef();
- clef_p_->default_b_ = false;
- }
-}
-
-void
-Clef_register::do_pre_move_processing()
-{
- if (!clef_p_)
- return;
- typeset_breakable_item(clef_p_);
- clef_p_ = 0;
-}
-
-void
-Clef_register::do_post_move_processing()
-{
- clef_req_l_ = 0;
-}
-
-void
-Clef_register::do_removal_processing()
-{
- delete clef_p_;
- clef_p_ =0;
-}
-
-IMPLEMENT_STATIC_NAME(Clef_register);
-IMPLEMENT_IS_TYPE_B1(Clef_register,Request_register);
-ADD_THIS_REGISTER(Clef_register);
+++ /dev/null
-/*
- collision-reg.cc -- implement Collision_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "note-column.hh"
-#include "collision-reg.hh"
-#include "collision.hh"
-
-void
-Collision_register::acknowledge_element(Score_elem_info i)
-{
- if (!(i.elem_l_->name() == Note_column::static_name()))
- return;
-
- if (!col_p_)
- col_p_ = new Collision;
-
- col_p_->add((Note_column*)i.elem_l_->item());
-}
-
-void
-Collision_register::do_pre_move_processing()
-{
- if (col_p_) {
- typeset_element(col_p_);
- col_p_ =0;
- }
-}
-Collision_register::Collision_register()
-{
- col_p_ =0;
-}
-
-IMPLEMENT_STATIC_NAME(Collision_register);
-IMPLEMENT_IS_TYPE_B1(Collision_register,Request_register);
-ADD_THIS_REGISTER(Collision_register);
+++ /dev/null
-/*
- dynamic-reg.cc -- implement Dynamic_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-#include "debug.hh"
-#include "crescendo.hh"
-#include "dynamic-reg.hh"
-#include "musical-request.hh"
-#include "text-item.hh"
-#include "lookup.hh"
-#include "paper-def.hh"
-#include "score-column.hh"
-#include "staff-sym.hh"
-#include "note-column.hh"
-
-Dynamic_register::Dynamic_register()
-{
- dir_i_ =0;
- do_post_move_processing();
- dynamic_p_ =0;
- to_end_cresc_p_ = cresc_p_ = 0;
- cresc_req_l_ = 0;
-}
-
-void
-Dynamic_register::do_post_move_processing()
-{
- dynamic_req_l_arr_.set_size(0);
-}
-
-bool
-Dynamic_register::do_try_request(Request * r)
-{
- Musical_req * m = r->musical();
- if (!m || !m->dynamic())
- return false;
- dynamic_req_l_arr_.push(m->dynamic());
- return true;
-}
-void
-Dynamic_register::do_process_requests()
-{
- Crescendo* new_cresc_p=0;
- for (int i=0; i < dynamic_req_l_arr_.size(); i++) {
- Dynamic_req *dreq_l = dynamic_req_l_arr_[i];
- if (dreq_l->absdynamic()) {
- Text_def * td_p = new Text_def;
- td_p->align_i_ = 0;
- String loud =Dynamic_req::loudness_str(
- dreq_l->absdynamic()->loudness_);
-
- td_p->text_str_ = paper()->lookup_l()->dynamic(loud).tex;
- td_p->style_str_ = "dynamic";
-
- assert (!dynamic_p_) ; // TODO
-
- dynamic_p_ = new Text_item(td_p);
- announce_element(Score_elem_info(dynamic_p_, dreq_l));
- } else if (dreq_l->span_dynamic()) {
-
- Span_dynamic_req* span_l = dreq_l->span_dynamic();
- if (span_l->spantype == Span_req::STOP) {
- if (!cresc_p_) {
- span_l->warning("Can't find cresc to end " );
- } else {
- assert(!to_end_cresc_p_);
- to_end_cresc_p_ =cresc_p_;
- cresc_p_ = 0;
- }
- } else if (span_l->spantype == Span_req::START) {
- cresc_req_l_ = span_l;
- assert(!new_cresc_p);
- new_cresc_p = new Crescendo;
- new_cresc_p->grow_dir_i_ = span_l->dynamic_dir_i_;
- announce_element(Score_elem_info(new_cresc_p, span_l));
- }
- }
- }
-
- if ( new_cresc_p ) {
- cresc_p_ = new_cresc_p;
- cresc_p_->left_col_l_ = get_staff_info().musical_l()->pcol_l_;
- if (dynamic_p_) {
- cresc_p_->left_dyn_b_ = true;
- }
- }
-}
-
-void
-Dynamic_register::do_pre_move_processing()
-{
- Staff_symbol* s_l = get_staff_info().staff_sym_l_;
- if (dynamic_p_) {
- dynamic_p_->set_staffsym(s_l);
- typeset_element(dynamic_p_);
- dynamic_p_ = 0;
- }
- if ( to_end_cresc_p_) {
- if (dynamic_p_)
- to_end_cresc_p_->right_dyn_b_=true;
-
- to_end_cresc_p_->right_col_l_ = get_staff_info().musical_l()->pcol_l_;
- to_end_cresc_p_->set_staffsym(s_l);
- typeset_element(to_end_cresc_p_);
- to_end_cresc_p_ = 0;
- }
-}
-
-void
-Dynamic_register::set_feature(Feature i)
-{
- if (i.type_ == "vdir")
- dir_i_ = i.value_;
-}
-
-IMPLEMENT_STATIC_NAME(Dynamic_register);
-IMPLEMENT_IS_TYPE_B1(Dynamic_register,Request_register);
-ADD_THIS_REGISTER(Dynamic_register);
-
-Dynamic_register::~Dynamic_register()
-{
- delete dynamic_p_;
- delete to_end_cresc_p_;
- if (cresc_p_) {
- cresc_req_l_->warning("unended crescendo");
- }
- delete cresc_p_;
-}
-void
-Dynamic_register::acknowledge_element(Score_elem_info i)
-{
- if (i.elem_l_->name() == Note_column::static_name()) {
- if (dynamic_p_) dynamic_p_->add_support(i.elem_l_);
- if (to_end_cresc_p_)
- to_end_cresc_p_->add_support(i.elem_l_);
- if (cresc_p_)
- cresc_p_->add_support(i.elem_l_);
- }
-}
+++ /dev/null
-/*
- global-acceptor.cc -- implement
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "music.hh"
-#include "global-acceptor.hh"
-#include "score.hh"
-#include "score-column.hh"
-
-Global_acceptor::Global_acceptor()
-{
- score_l_ = 0;
- last_mom_ = 0;
-}
-
-Acceptor*
-Global_acceptor::ancestor_l(int)
-{
- return this;
-}
-
-void
-Global_acceptor::add_moment_to_process(Moment m)
-{
- if (m > last_mom_)
- return;
-
- for (int i=0; i < extra_mom_pq_.size(); i++)
- if (extra_mom_pq_[i] == m)
- return;
- extra_mom_pq_.insert(m);
-}
-
-int
-Global_acceptor::depth_i()const
-{
- return 0;
-}
-
-void
-Global_acceptor::set_score(Score *s)
-{
- score_l_ = s;
- last_mom_ = score_l_->music_p_->time_int().max();
-}
-
-void
-Global_acceptor::modify_next(Moment &w)
-{
- while (extra_mom_pq_.size() &&
- extra_mom_pq_.front() <= w)
-
- w =extra_mom_pq_.get();
-}
-
-int
-Global_acceptor::moments_left_i()const
-{
- return extra_mom_pq_.size();
-}
-
-void
-Global_acceptor::prepare(Moment)
-{
-}
+++ /dev/null
-/*
- global-regs.cc -- implement
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "proto.hh"
-#include "plist.hh"
-#include "input-register.hh"
-#include "debug.hh"
-#include "register.hh"
-
-struct Request_register_table_entry {
- String name_str_;
- Reg_ctor ctor_l_;
- Request_register_table_entry(String s, Reg_ctor f) {
- name_str_ =s;
- ctor_l_ = f;
- }
- Request_register_table_entry()
- {
- ctor_l_ =0;
- }
-};
-
-static Array<Request_register_table_entry> *reg_table=0;
-
-void
-add_request_register(String s, Reg_ctor f)
-{
- if (!reg_table)
- reg_table = new Array<Request_register_table_entry>;
-
- reg_table->push(Request_register_table_entry(s, f));
-}
-
-
-Request_register*
-get_register_p(String s)
-{
- for (int i=0; i < reg_table->size(); i++) {
- if ((*reg_table)[i].name_str_ == s)
- return (*(*reg_table)[i].ctor_l_)();
- }
- error("Unknown register `" + s +"\'");
- return 0;
-}
+++ /dev/null
-/*
- headreg.cc -- part of GNU LilyPond
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "note-head.hh"
-#include "head-reg.hh"
-#include "paper-def.hh"
-#include "musical-request.hh"
-
-Note_head_register::Note_head_register()
-{
- note_p_ = 0;
- do_post_move_processing();
-}
-
-bool
-Note_head_register::do_try_request(Request *req_l)
-{
- if (note_req_l_)
- return false;
-
- if (req_l->musical() && (req_l->musical()->note() || req_l->musical()->rest()))
- note_req_l_=req_l->musical()->rhythmic();
- else
- return false;
-
- return true;
-}
-
-void
-Note_head_register::do_process_requests()
-{
- if (!note_req_l_)
- return;
-
- Note_head*n_p = new Note_head(8); // ugh
- note_p_ = n_p;
- n_p->set_rhythmic(note_req_l_->rhythmic());
-
- if (note_req_l_->note()) {
- n_p->position_i_ = note_req_l_->note()->height() +
- *get_staff_info().c0_position_i_l_;
- } else if (note_req_l_->rest()) {
- n_p->rest_b_ = true;
- }
-
- Score_elem_info itinf(note_p_,note_req_l_);
- announce_element(itinf);
-}
-
-void
-Note_head_register::do_pre_move_processing()
-{
- if (note_p_) {
- typeset_element(note_p_);
- note_p_ = 0;
- }
-}
-void
-Note_head_register::do_post_move_processing()
-{
- note_req_l_ = 0;
-}
-
-IMPLEMENT_STATIC_NAME(Note_head_register);
-IMPLEMENT_IS_TYPE_B1(Note_head_register,Request_register);
-ADD_THIS_REGISTER(Note_head_register);
+++ /dev/null
-/*
- bar-align-reg.hh -- declare
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef BAR_ALIGN_REG_HH
-#define BAR_ALIGN_REG_HH
-
-#endif // BAR_ALIGN_REG_HH
+++ /dev/null
-/*
- bar-reg.hh -- declare Bar_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef BARREG_HH
-#define BARREG_HH
-#include "register.hh"
-
-/**
- generate bars. Either user ("|:"), or default (new measure)
- */
-class Bar_register : public Request_register {
- Bar_req * bar_req_l_;
- Bar * bar_p_;
-public:
- Bar_register();
- NAME_MEMBERS();
-
-
-protected:
- virtual bool do_try_request(Request *req_l);
- virtual void do_process_requests();
- virtual void do_pre_move_processing();
- virtual void do_post_move_processing();
-};
-
-#endif // BARREG_HH
+++ /dev/null
-/*
- clef.hh -- part of GNU LilyPond
-
- (c) 1996,97 Han-Wen Nienhuys
-*/
-
-#ifndef CLEF_HH
-#define CLEF_HH
-
-#include "scalar.hh"
-#include "varray.hh"
-#include "register.hh"
-
-/// where is c-0 in the staff?
-class Clef_register : public Request_register {
- Clef_item *clef_p_;
- Clef_change_req * clef_req_l_;
- void create_clef();
- void read_req(Clef_change_req*);
- bool set_type(String);
-protected:
- virtual void do_process_requests();
- virtual void fill_staff_info(Staff_info&);
- virtual void do_pre_move_processing();
- virtual void do_removal_processing();
- virtual void do_creation_processing();
- virtual void do_post_move_processing();
- virtual bool do_try_request(Request*);
- virtual void acknowledge_element(Score_elem_info);
-public:
- int c0_position_i_;
- String clef_type_str_;
-
- /* ************** */
-
- Clef_register();
- NAME_MEMBERS();
-
-};
-#endif // CLEF_HH
-
+++ /dev/null
-/*
- collision-reg.hh -- declare Collision_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef COLLISION_REG_HH
-#define COLLISION_REG_HH
-
-#include "register.hh"
-
-class Collision_register : public Request_register {
- Collision* col_p_;
-
-protected:
- virtual void acknowledge_element(Score_elem_info);
- virtual void do_pre_move_processing();
-public:
- Collision_register();
- NAME_MEMBERS();
-};
-#endif // COLLISION_REG_HH
+++ /dev/null
-/*
- dynamic-reg.hh -- declare Dynamic_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef DYNAMIC_REG_HH
-#define DYNAMIC_REG_HH
-
-#include "register.hh"
-
-class Dynamic_register : public Request_register {
- int dir_i_;
- Text_item * dynamic_p_;
- Crescendo * to_end_cresc_p_;
- Crescendo * cresc_p_;
- Span_dynamic_req * cresc_req_l_;
- Array<Dynamic_req*> dynamic_req_l_arr_;
- /* ************** */
-public:
- Dynamic_register();
- ~Dynamic_register();
- NAME_MEMBERS();
-protected:
- virtual void acknowledge_element(Score_elem_info);
- virtual bool do_try_request(Request *req_l);
- virtual void do_process_requests();
- virtual void do_pre_move_processing();
- virtual void do_post_move_processing();
- virtual void set_feature(Feature);
-};
-
-#endif // DYNAMIC_REG_HH
+++ /dev/null
-/*
- global-acceptor.hh -- declare Global_acceptor
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef GLOBAL_ACCEPTOR_HH
-#define GLOBAL_ACCEPTOR_HH
-
-#include "acceptor.hh"
-#include "pqueue.hh"
-
-class Global_acceptor : public virtual Acceptor {
- PQueue<Moment> extra_mom_pq_;
- Moment last_mom_;
-public:
- Score *score_l_;
- Global_acceptor();
- int moments_left_i()const;
- void modify_next(Moment&);
- void add_moment_to_process(Moment);
-
- virtual void set_score(Score*);
- virtual void prepare(Moment);
- virtual void process() {}
- virtual void finish() {}
-
-protected:
- virtual int depth_i() const;
- virtual Acceptor *ancestor_l(int);
-};
-
-
-
-#endif // GLOBAL_ACCEPTOR_HH
+++ /dev/null
-/*
- headreg.hh -- part of GNU LilyPond
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef HEADREG_HH
-#define HEADREG_HH
-#include "register.hh"
-
-struct Note_head_register : Request_register {
- Note_head* note_p_;
- Rhythmic_req * note_req_l_;
-
- /* *************** */
- Note_head_register();
- virtual bool do_try_request(Request *req_l) ;
- virtual void do_process_requests();
- virtual void do_pre_move_processing();
- virtual void do_post_move_processing();
- NAME_MEMBERS();
-};
-
-
-#endif // HEADREG_HH
+++ /dev/null
-/*
- input-register.hh -- declare Input_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef INPUT_REGISTER_HH
-#define INPUT_REGISTER_HH
-
-#include "plist.hh"
-#include "string.hh"
-#include "lily-proto.hh"
-#include "input.hh"
-#include "string.hh"
-#include "varray.hh"
-
-struct Input_register : Input {
- Pointer_list<Input_register*> contains_ireg_p_list_;
- Array<String> consists_str_arr_;
- Array<String> alias_str_arr_;
- String name_str_;
-
- void add(Input_register *);
- bool is_name_b(String);
- bool accept_req_b();
- bool accepts_b(String);
- void print() const;
- Register_group_register * get_group_register_p();
- Input_register * get_default_ireg_l();
- Input_register * recursive_find(String nm);
- Input_register * find_ireg_l(String nm);
-};
-
-
-void add_global_input_register(Input_register* ireg_p);
-Input_register*lookup_reg(String);
-Request_register*get_register_p(String s);
-
-#endif // INPUT_REGISTER_HH
+++ /dev/null
-/*
- interpretor.hh -- declare
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef Interpreter_HH
-#define Interpreter_HH
-
-class Interpreter {
-public:
- /// link to my definition
- Input_register * ireg_l_;
- void interpret_request(Request *);
- NAME_MEMBERS();
- ~Interpreter();
- /** typeset any items/spanners. Default: do nothing
- */
- virtual void do_pre_move_processing(){}
-};
-
-class Paper_interpreter : Interpreter {
-
-};
-
-class Midi_interpreter : Interpreter {
-};
-
-#endif // Interpreter_HH
+++ /dev/null
-/*
- key-reg.hh -- declare Key_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef KEYREG_HH
-#define KEYREG_HH
-
-#include "register.hh"
-#include "key.hh"
-
-struct Key_register : Request_register {
- Key key_;
- Key_change_req * keyreq_l_;
- Key_item * kit_p_;
- Array<int> accidental_idx_arr_;
- bool default_key_b_;
- bool change_key_b_;
-
- virtual bool do_try_request(Request *req_l);
- virtual void do_process_requests();
- virtual void do_pre_move_processing();
- virtual void do_post_move_processing();
- virtual void acknowledge_element(Score_elem_info);
- Key_register();
- NAME_MEMBERS();
-private:
- void create_key();
-
- void read_req(Key_change_req * r);
-};
-
-#endif // KEYREG_HH
+++ /dev/null
-/*
- local-key-reg.hh -- declare Local_key_register
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef LOCALKEYREG_HH
-#define LOCALKEYREG_HH
-
-#include "register.hh"
-#include "key.hh"
-#include "parray.hh"
-
-struct Local_key_register : Request_register {
- Key local_key_;
- Key const *key_C_;
- Array<Note_req* > mel_l_arr_;
- Array<Item* > support_l_arr_;
- Link_array<Item > forced_l_arr_;
- Link_array<Item > tied_l_arr_;
- /* *************** */
- virtual void do_process_requests();
- virtual void acknowledge_element(Score_elem_info);
- virtual void do_pre_move_processing();
- Local_key_register();
- NAME_MEMBERS();
-};
-
-#endif // LOCALKEYREG_HH
+++ /dev/null
-/*
- lyric-register.hh -- declare Lyric_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef LYRIC_REGISTER_HH
-#define LYRIC_REGISTER_HH
-#include "register.hh"
-#include "varray.hh"
-
-#include "lily-proto.hh"
-
-class Lyric_register : public Request_register {
- Array<Lyric_req*> lreq_arr_;
- virtual bool do_try_request(Request*);
- virtual void do_process_requests();
- virtual void do_post_move_processing();
-public:
- NAME_MEMBERS();
- Lyric_register();
-};
-#endif // LYRIC_REGISTER_HH
+++ /dev/null
-/*
- meter-reg.hh -- declare Meter_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef METERREG_HH
-#define METERREG_HH
-#include "register.hh"
-#include "time-description.hh"
-#include "grouping.hh"
-
-/**
- generate meters.
- */
-class Meter_register : public Request_register {
-public:
- Time_description time_;
- Rhythmic_grouping default_grouping_;
-
- Meter_change_req * meter_req_l_;
- Meter * meter_p_;
-
- virtual void fill_staff_info(Staff_info&);
- virtual bool do_try_request(Request *req_l);
- virtual void do_process_requests();
- virtual void do_pre_move_processing();
- virtual void do_creation_processing();
- virtual void do_post_move_processing();
- Meter_register();
- NAME_MEMBERS();
-};
-#endif // METERREG_HH
+++ /dev/null
-/*
- note-column-reg.hh -- declare Note_column_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef NOTE_COLUMN_REG_HH
-#define NOTE_COLUMN_REG_HH
-
-#include "register.hh"
-
-class Note_column_register :public Request_register {
- Rest_column * rest_col_l();
- Note_column * note_col_l();
-
- Array< Script * > script_l_arr_;
- Stem * stem_l_;
- Note_column *ncol_p_;
- Rest_column *restcol_p_;
- bool h_shift_b_;
- int dir_i_;
-
- /* *************** */
- bool acceptable_elem_b(Score_elem const*)const;
-protected:
- virtual void set_feature(Feature);
- virtual void acknowledge_element(Score_elem_info);
- virtual void do_pre_move_processing();
- virtual void do_post_move_processing();
-public:
- Note_column_register();
- NAME_MEMBERS();
-};
-#endif // NOTE_COLUMN_REG_HH
+++ /dev/null
-/*
- registergroup.hh -- declare Register_group_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef REGISTERGROUP_HH
-#define REGISTERGROUP_HH
-
-#include "parray.hh"
-#include "plist.hh"
-#include "score-elem-info.hh"
-#include "register.hh"
-#include "acceptor.hh"
-
-
-/**
- Group a number of registers. Usually delegates everything to its contents.
- Postfix: group
- */
-class Register_group_register : public Request_register, public virtual Acceptor {
-protected:
-
- Pointer_list<Request_register*> reg_list_;
- Link_array<Register_group_register> group_l_arr_;
- Link_array<Request_register> nongroup_l_arr_;
-
- Array<Score_elem_info> announce_info_arr_;
-
- virtual void do_print()const;
-
- virtual bool removable_b()const;
-
-public:
- Input_register * ireg_l_;
- void check_removal();
- Register_group_register();
- ~Register_group_register();
-
-
-
- /**
- Junk #reg_l#.
- Pre:
- #reg_l# is in #reg_list_#
- */
- virtual void terminate_register(Request_register * reg_l);
-
- NAME_MEMBERS();
-
- /**
- Remove #reg_l# from the list, and return it.
- */
- virtual Request_register * remove_register_p(Request_register*reg_l);
- virtual void set_feature(Feature i);
- virtual void sync_features() ;
- virtual void do_pre_move_processing();
- virtual void do_post_move_processing();
-
- virtual void do_removal_processing();
- virtual bool do_try_request(Request*);
- virtual void do_process_requests();
-
- virtual Staff_info get_staff_info()const;
-
- virtual Register_group_register * find_register_l(String name,String id);
- virtual void do_announces();
- virtual void announce_element(Score_elem_info);
-
-
- virtual void add(Request_register* reg_p);
-
- virtual bool contains_b(Request_register*)const;
-
- virtual Acceptor* find_get_acceptor_l(String name, String id);
- virtual Acceptor * get_default_interpreter();
- /**
- Go up in the tree. default: choose next parent
- */
- Acceptor * ancestor_l(int l=1);
- int depth_i() const;
-
-};
-
-#endif // REGISTERGROUP_HH
-
-
+++ /dev/null
-/*
- register.hh -- declare Request_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1996, 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef REGISTER_HH
-#define REGISTER_HH
-
-#include "lily-proto.hh"
-#include "varray.hh"
-#include "request.hh"
-#include "score-elem-info.hh"
-#include "staff-info.hh"
-
-
-
-
-/**
- a struct which processes requests, and creates the #Score_elem#s.
- It may use derived classes. Hungarian postfix: register
- */
-class Request_register {
- friend class Register_group_register;
- /**
- You cannot copy a Request_register
- */
- Request_register(const Request_register&){}
-
- enum {
- VIRGIN,
- CREATION_INITED,
- MOVE_INITED,
- ACCEPTED_REQS,
- PROCESSED_REQS,
- ACKED_REQS,
- MOVE_DONE
- } status;
-
-protected:
-
-
- /// utility
- virtual Paper_def * paper() const;
-
-
- /// make items/spanners with the requests you got
- virtual void do_process_requests(){}
-
- /** typeset any items/spanners. Default: do nothing
- */
- virtual void do_pre_move_processing(){}
- /** reset any appropriate data. Default: do nothing
- */
- virtual void do_post_move_processing(){}
-
-
- virtual void do_creation_processing () {}
- virtual void do_removal_processing() {}
-
- /**
- typeset a "command" item. Default: pass on to daddy.
- If the column is not breakable, #pre_p# and #post_p# are junked
- */
- virtual void typeset_breakable_item(Item * nobreak_p);
- /**
- Invoke walker method to typeset element. Default: pass on to daddy.
- */
- virtual void typeset_element(Score_elem*elem_p);
-
- /**
- take note of item/spanner
- put item in spanner. Adjust local key; etc.
-
- Default: ignore the info
- */
- virtual void acknowledge_element(Score_elem_info) {}
- /**
- Announce element. Default: pass on to daddy. Utility
- */
- virtual void announce_element(Score_elem_info);
- /**
- Set Feature of the register(s). Default: ignore Feature.
- */
- virtual void set_feature(Feature){}
- /**
- ask daddy for a feature
- */
- virtual Scalar get_feature(String type_str);
- /**
- Does this equal or contain a certain register?
- */
-
- virtual void sync_features() {}
-
- virtual bool contains_b(Request_register*reg_l)const;
- /**
- Get information on the staff. Default: ask daddy.
- */
- virtual Staff_info get_staff_info()const;
- virtual void fill_staff_info(Staff_info&);
-
-
- virtual void do_print()const;
- /*
- @see{try_request}
- Default: always return false
- */
- virtual bool do_try_request(Request *req_l);
-public:
- void pre_move_processing();
- void process_requests();
- /**
- try to fit the request in this register
-
- @return
- false: not noted, not taken.
-
- true: request swallowed. Don't try to put the request elsewhere.
-
- */
- bool try_request(Request*);
-
- void post_move_processing();
-
- Register_group_register * daddy_reg_l_;
-
- Request_register();
- virtual ~Request_register(){}
- NAME_MEMBERS();
- void print() const;
-};
-
-/**
- A macro to automate administration of registers.
- */
-#define ADD_THIS_REGISTER(c) \
-struct c ## init { \
- static Request_register * globalctor (){ \
- return new c; \
- } \
- c ## init () { \
- add_request_register(c::static_name(), globalctor); \
- \
- } \
-} _ ## c ## init;
-
-typedef Request_register*(*Reg_ctor)(void);
-void add_request_register(String s, Reg_ctor f);
-
-#endif // REGISTER_HH
-
+++ /dev/null
-/*
- rest-collision-reg.hh -- declare Rest_collision_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef REST_COLLISION_REG_HH
-#define REST_COLLISION_REG_HH
-
-#include "varray.hh"
-#include "register.hh"
-
-class Rest_collision_register : public Request_register {
- Rest_collision* rest_collision_p_;
- Array< Collision *> collision_l_arr_;
-protected:
- virtual void acknowledge_element(Score_elem_info);
- virtual void do_print() const;
- virtual void do_pre_move_processing();
-public:
- Rest_collision_register();
- NAME_MEMBERS();
-};
-#endif // REST_COLLISION_REG_HH
+++ /dev/null
-/*
- score-align-reg.hh -- declare Score_align_reg
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef SCORE_ALIGN_REG_HH
-#define SCORE_ALIGN_REG_HH
-
-#include "register.hh"
-
-class Score_align_register: public Request_register
-{
- Horizontal_group_item * align_p_;
-public:
-
- const char* type_ch_C_;
- int priority_i_;
- Score_align_register();
- NAME_MEMBERS();
-protected:
- virtual void acknowledge_element(Score_elem_info);
- virtual void do_pre_move_processing();
-};
-#endif // SCORE_ALIGN_REG_HH
+++ /dev/null
-/*
- score-halign-reg.hh -- declare Score_horizontal_align_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef SCORE_HALIGN_REG_HH
-#define SCORE_HALIGN_REG_HH
-#include "register.hh"
-class Score_horizontal_align_register : public Request_register {
-
- Break_align_item * halign_p_;
-public:
- NAME_MEMBERS();
- Score_horizontal_align_register();
-protected:
- virtual void acknowledge_element(Score_elem_info);
- virtual void do_pre_move_processing();
-};
-#endif // SCORE_HALIGN_REG_HH
+++ /dev/null
-/*
- score-reg.hh -- declare Score_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef SCORE_REG_HH
-#define SCORE_REG_HH
-
-#include "register-group.hh"
-#include "global-acceptor.hh"
-
-class Score_register : public Register_group_register, public Global_acceptor {
- Line_of_score * scoreline_l_;
-
-
- Array<Item*> nobreak_item_p_arr_;
- Link_array<Score_elem> musical_item_p_arr_;
-
- Score_column* command_column_l_;
- Score_column* musical_column_l_;
-
- friend class Score;
- void set_cols(Score_column*,Score_column*);
- void typeset_all();
-
-public:
- NAME_MEMBERS();
-
- Score_register();
-
-protected:
- /* Global_acceptor interface */
- virtual void set_score(Score * score_l);
- virtual void prepare(Moment);
- virtual void finish();
- virtual void process();
- virtual int depth_i() const { return Global_acceptor::depth_i();}
- virtual Acceptor* ancestor_l(int l) { return Global_acceptor::ancestor_l(l);}
-
-protected:
- /* Register_group_register interface */
- virtual Staff_info get_staff_info()const;
- virtual bool do_try_request(Request*);
- virtual void do_creation_processing();
- virtual void do_removal_processing();
- virtual void announce_element(Score_elem_info);
- virtual void typeset_breakable_item(Item * nobreak_p);
- virtual void do_announces();
- virtual void typeset_element(Score_elem*elem_p);
- virtual Paper_def * paper() const;
- virtual void do_pre_move_processing();
-};
-
-#endif // SCORE_REG_HH
+++ /dev/null
-/*
- script-reg.hh -- part of GNU LilyPond
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef SCRIPTREG_HH
-#define SCRIPTREG_HH
-
-#include "register.hh"
-
-
-class Script_register : public Request_register {
- Array<Script *> script_p_arr_;
- Array<Script_req *> script_req_l_arr_;
-
- /* *************** */
- bool acceptable_elem_b(Score_elem*);
-public:
- NAME_MEMBERS();
- Script_register();
-protected:
- virtual bool do_try_request(Request*);
- virtual void do_process_requests();
- virtual void acknowledge_element(Score_elem_info);
- virtual void do_pre_move_processing();
- virtual void do_post_move_processing();
-
-};
-
-#endif // SCRIPTREG_HH
+++ /dev/null
-/*
- slur-reg.hh -- declare Slur_register
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef SLURREG_HH
-#define SLURREG_HH
-
-#include "register.hh"
-
-class Slur_register :public Request_register {
- Array<Slur_req*> requests_arr_;
- Array<Slur_req*> new_slur_req_l_arr_;
- Array<Slur *> slur_l_stack_;
- Array<Slur*> end_slur_l_arr_;
- int dir_i_;
- /* *************** */
-protected:
- virtual ~Slur_register();
- virtual bool do_try_request(Request*);
- virtual void set_feature(Feature);
- virtual void do_process_requests();
- virtual void acknowledge_element(Score_elem_info);
- virtual void do_pre_move_processing();
- virtual void do_post_move_processing();
-public:
- Slur_reg();
- NAME_MEMBERS();
-};
-
-#endif // SLURREG_HH
+++ /dev/null
-/*
- staff-regs.hh -- declare Staff_registers
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef STAFF_REGS_HH
-#define STAFF_REGS_HH
-
-#include "register-group.hh"
-
-/**
- Registers which manage a Staff (one 5-line linestaff)
-
- */
-class Staff_registers : public Register_group_register {
- Line_of_staff *staffline_p_;
- Link_array<Score_elem> staff_elem_l_arr_;
-
- void group_staff_elems();
-protected:
- virtual void do_pre_move_processing();
- virtual void do_creation_processing();
- virtual void do_removal_processing();
- virtual void typeset_element(Score_elem*);
- virtual void typeset_breakable_item( Item * it_p);
-
-public:
-
- NAME_MEMBERS();
- Staff_registers();
-};
-
-#endif // STAFF_REGS_HH
+++ /dev/null
-/*
- staff-sym-reg.hh -- declare
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef STAFF_SYM_REG_HH
-#define STAFF_SYM_REG_HH
-#include "register.hh"
-#include "moment.hh"
-
-/**
- Manage the staff symbol.
- */
-class Staff_sym_register : public Request_register {
- Staff_symbol *span_p_;
-public:
- Staff_sym_register();
- NAME_MEMBERS();
-protected:
- virtual void do_process_requests();
- virtual void fill_staff_info(Staff_info&);
- virtual void do_removal_processing();
- virtual void do_creation_processing();
-
-};
-#endif // STAFF_SYM_REG_HH
+++ /dev/null
-/*
- stem-beam-reg.hh -- part of GNU LilyPond
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef STEMBEAMREG_HH
-#define STEMBEAMREG_HH
-#include "register.hh"
-
-/**
- TODO:
- override default_grouping if setting a n-plet
-
- */
-class Stem_beam_register : public Request_register {
- Stem * stem_p_;
- Beam * beam_p_;
- Beam_req * beam_req_l_;
- Stem_req * stem_req_l_;
- Beam_req * start_req_l_;
- bool end_beam_b_;
- Rhythmic_grouping *current_grouping;
- int default_dir_i_;
-public:
- /* *************** */
- NAME_MEMBERS();
- Stem_beam_register();
-
-protected:
- ~Stem_beam_register();
- virtual void set_feature(Feature dir_i_);
- virtual bool do_try_request(Request*);
- virtual void do_process_requests();
- virtual void acknowledge_element(Score_elem_info);
- virtual void do_pre_move_processing();
- virtual void do_post_move_processing();
-};
-#endif // STEMBEAMREG_HH
+++ /dev/null
-/*
- swallow-reg.hh -- declare Swallow_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef SWALLOW_REG_HH
-#define SWALLOW_REG_HH
-
-#include "register.hh"
-
-/**
- This register swallows everything given to it silently. The purpose of
- this is to prevent spurious "request junked" warnings.
- */
-class Swallow_register : public Request_register {
-protected:
- bool acceptable_request_b(Request*) const;
- bool do_try_request(Request*) ;
-public:
- NAME_MEMBERS();
-};
-#endif // SWALLOW_REG_HH
+++ /dev/null
-/*
- text-reg.hh -- part of GNU LilyPond
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef TEXTREG_HH
-#define TEXTREG_HH
-#include "register.hh"
-
-class Text_register : public Request_register{
- Text_item * text_p_;
- Text_req * text_req_l_;
- int dir_i_;
- /* *************** */
-protected:
- virtual void set_feature(Feature );
- virtual bool do_try_request(Request*);
- virtual void do_process_requests();
- virtual void do_pre_move_processing();
- virtual void do_post_move_processing();
- virtual void acknowledge_element(Score_elem_info);
-public:
- Text_register();
- NAME_MEMBERS();
-};
-
-#endif // TEXTREG_HH
+++ /dev/null
-/*
- tie-reg.hh -- declare Tie_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef TIE_REG_HH
-#define TIE_REG_HH
-
-#include "register.hh"
-
-class Tie_register : public Request_register {
- Tie * end_tie_p_;
- Tie * tie_p_;
- Moment end_mom_;
- Tie_req * req_l_;
- int dir_i_;
- Tie_req *end_req_l_;
- Melodic_req * end_melodic_req_l_;
- Melodic_req * melodic_req_l_;
-
-protected:
- virtual ~Tie_register();
- virtual void acknowledge_element(Score_elem_info);
- virtual bool do_try_request(Request*);
- virtual bool acceptable_request_b(Request*);
- virtual void sync_features();
- virtual void do_process_requests();
- virtual void do_post_move_processing();
- virtual void do_pre_move_processing();
- virtual void set_feature(Feature);
-public:
- Tie_register();
- NAME_MEMBERS();
-};
-
-#endif // TIE_REG_HH
+++ /dev/null
-/*
- voice-group-regs.hh -- declare Voice_group_registers
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef VOICEGROUPREGS_HH
-#define VOICEGROUPREGS_HH
-
-#include "register-group.hh"
-
-/**
- A group of voices which share certain characteristics (such as beams. ).
- */
-class Voice_group_registers : public Register_group_register {
- Moment termination_mom_;
- int dir_i_;
-
-protected:
- virtual void do_print() const;
- virtual Scalar get_feature(String);
- virtual bool do_try_request(Request*);
-public:
-
-
- NAME_MEMBERS();
- static bool static_acceptable_request_b(Request*);
- Voice_group_registers();
-};
-#endif // VOICEGROUPREGS_HH
+++ /dev/null
-/*
- voice-regs.hh -- declare Voice_registers
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef VOICEREGS_HH
-#define VOICEREGS_HH
-
-#include "register-group.hh"
-#include "interpreter.hh"
-
-class Voice_registers : public Interpreter, public Register_group_register {
-public:
- NAME_MEMBERS();
-
-protected:
- virtual bool interpret_request_b(Request*);
- virtual Interpreter* interpreter_l() { return this; }
-};
-
-
-#endif // VOICEREGS_HH
+++ /dev/null
-/*
- input-register.cc -- implement Input_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "debug.hh"
-#include "register.hh"
-#include "input-register.hh"
-#include "parray.hh"
-#include "input-register.hh"
-#include "register-group.hh"
-
-bool
-Input_register::is_name_b(String n)
-{
- bool b = (n == name_str_);
- for (int i=0; !b && i < alias_str_arr_.size(); i++)
- b = b || (alias_str_arr_[i] == n);
- return b;
-}
-
-void
-Input_register::print() const
-{
-#ifndef NPRINT
- mtor << "name " << name_str_;
- mtor << "Consists of ";
- for (int i=0; i< consists_str_arr_.size(); i++)
- mtor << consists_str_arr_[i] << ',';
- mtor << "contains " ;
- for (iter(contains_ireg_p_list_.top(), i); i.ok(); i++)
- i->print();
-#endif
-}
-
-/*
- UGH. Global.
- */
-Link_array<Input_register> iregs_p_arr;
-
-void
-add_global_input_register(Input_register *reg_p)
-{
- iregs_p_arr.push(reg_p);
-}
-
-Input_register *
-lookup_reg(String nm)
-{
- for (int i=0; i < iregs_p_arr.size(); i++)
- if (iregs_p_arr[i]->is_name_b(nm))
- return iregs_p_arr[i];
-
- error("can't find reg `" + nm + "'");
-}
-
-
-
-Input_register *
-Input_register::recursive_find(String nm)
-{
- if ( is_name_b( nm) )
- return this;
-
- Input_register * r =0;
- for (iter(contains_ireg_p_list_.top(), i); !r &&i.ok(); i++)
- r = i->recursive_find(nm);
-
- return r;
-}
-Input_register *
-Input_register::find_ireg_l(String nm)
-{
- for (iter(contains_ireg_p_list_.top(), i); i.ok(); i++)
- if (i->is_name_b( nm))
- return i;
-
- return 0;
-}
-
-
-Register_group_register *
-Input_register::get_group_register_p()
-{
- Register_group_register * reg_p = (Register_group_register*)
- get_register_p(name_str_);
-
-
-
- for (int i=0; i < consists_str_arr_.size(); i++) {
- reg_p->add( get_register_p( consists_str_arr_[i]) );
- }
- reg_p -> ireg_l_ = this;
- return reg_p;
-}
-
-
-bool
-Input_register::accept_req_b()
-{
- return ! contains_ireg_p_list_.size();
-}
-
-void
-Input_register::add(Input_register *ip)
-{
- contains_ireg_p_list_.bottom().add(ip);
-}
-
-Input_register*
-Input_register::get_default_ireg_l()
-{
- return contains_ireg_p_list_.top();
-}
+++ /dev/null
-/*
- key-reg.cc -- implement Key_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-
-
- Todo: key undo, special keys.
-
- */
-#include "key-reg.hh"
-#include "key-item.hh"
-#include "command-request.hh"
-#include "local-key-reg.hh"
-#include "musical-request.hh"
-#include "local-key-item.hh"
-#include "bar.hh"
-#include "time-description.hh"
-
-Key_register::Key_register()
-{
- kit_p_ = 0;
- do_post_move_processing();
-}
-
-void
-Key_register::create_key()
-{
- if (!kit_p_) {
- int c0_i= *get_staff_info().c0_position_i_l_;
-
- kit_p_ = new Key_item(c0_i);
- announce_element(Score_elem_info(kit_p_,keyreq_l_));
- kit_p_->read(*this);
- }
-}
-
-bool
-Key_register::do_try_request(Request * req_l)
-{
- Command_req* creq_l= req_l->command();
- if (!creq_l|| !creq_l->keychange())
- return false;
-
- if (keyreq_l_)
- return false; // TODO
- keyreq_l_ = creq_l->keychange();
- read_req(keyreq_l_);
- return true;
-}
-
-void
-Key_register::acknowledge_element(Score_elem_info info)
-{
- Command_req * r_l = info.req_l_->command() ;
- if (r_l && r_l->clefchange()) {
- create_key();
- } else if (info.elem_l_->name() == Bar::static_name()) {
- if ( !keyreq_l_)
- default_key_b_ = true;
- create_key();
- }
-
-}
-
-void
-Key_register::do_process_requests()
-{
- if (key_.multi_octave_b_)
- assert(false); // TODO .
- else if (keyreq_l_) {
- create_key();
- }
-}
-
-void
-Key_register::do_pre_move_processing()
-{
- if (kit_p_) {
- kit_p_->default_b_ = default_key_b_;
- typeset_breakable_item( kit_p_);
- kit_p_ = 0;
- }
-}
-
-
-
-void
-Key_register::read_req(Key_change_req * r)
-{
- key_.multi_octave_b_ = r->multi_octave_b_;
- accidental_idx_arr_.set_size(0);
- for (int i = 0; i < r->melodic_p_arr_.size(); i ++) {
- Melodic_req * m_l =r->melodic_p_arr_[i];
- int n_i =m_l->notename_i_;
- int a_i = m_l->accidental_i_;
- int o_i = m_l->octave_i_;
- if (r->multi_octave_b_)
- key_.set(o_i, n_i, a_i);
- else
- key_.set(n_i, a_i);
- accidental_idx_arr_.push(n_i);
- }
-}
-
-void
-Key_register::do_post_move_processing()
-{
- keyreq_l_ = 0;
- default_key_b_ = false;
-}
-
-IMPLEMENT_STATIC_NAME(Key_register);
-IMPLEMENT_IS_TYPE_B1(Key_register,Request_register);
-ADD_THIS_REGISTER(Key_register);
+++ /dev/null
-/*
- local-key-reg.cc -- implement Local_key_register
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "musical-request.hh"
-#include "command-request.hh"
-#include "local-key-reg.hh"
-#include "local-key-item.hh"
-#include "key-reg.hh"
-#include "debug.hh"
-#include "key-item.hh"
-#include "tie.hh"
-#include "note-head.hh"
-#include "time-description.hh"
-
-Local_key_register::Local_key_register()
-{
- key_C_ = 0;
-}
-
-void
-Local_key_register::do_pre_move_processing()
-{
- Local_key_item *key_item_p = 0;
- if (mel_l_arr_.size()) {
- for (int i=0; i < mel_l_arr_.size(); i++) {
- Item * support_l = support_l_arr_[i];
- Note_req * note_l = mel_l_arr_[i];
-
- if (tied_l_arr_.find_l(support_l) &&
- !note_l->forceacc_b_)
- continue;
-
- if( !note_l->forceacc_b_ &&
- local_key_.oct(note_l->octave_i_).acc(note_l->notename_i_)
- == note_l->accidental_i_)
- continue;
-
-
-
- if (!key_item_p)
- key_item_p = new Local_key_item(*get_staff_info().c0_position_i_l_);
- key_item_p->add(note_l);
- key_item_p->add_support(support_l);
- local_key_.oct(note_l->octave_i_)
- .set(note_l->notename_i_, note_l->accidental_i_);
- }
-
- }
- if (key_item_p) {
- for(int i=0; i < support_l_arr_.size(); i++)
- key_item_p->add_support(support_l_arr_[i]);
-
- typeset_element(key_item_p);
- }
-
- mel_l_arr_.set_size(0);
- tied_l_arr_.set_size(0);
- support_l_arr_.set_size(0);
- forced_l_arr_.set_size(0);
-}
-
-void
-Local_key_register::acknowledge_element(Score_elem_info info)
-{
- Score_elem * elem_l = info.elem_l_;
- if (info.req_l_->musical() && info.req_l_->musical()->note()) {
- Note_req * note_l = info.req_l_->musical()->note();
- Item * item_l = info.elem_l_->item();
-
- mel_l_arr_.push(note_l );
- support_l_arr_.push(item_l);
-
- } else if (info.req_l_->command()
- && info.req_l_->command()->keychange()) {
- Key_register * key_reg_l =
- (Key_register*)info.origin_reg_l_arr_[0];
- key_C_ = &key_reg_l->key_;
- local_key_ = *key_C_;
- } else if (elem_l->name() == Key_item::static_name()) {
- Key_register * key_reg_l =
- (Key_register*)info.origin_reg_l_arr_[0];
- key_C_ = &key_reg_l->key_;
- } else if (elem_l->name() == Tie::static_name()) {
- Tie * tie_l = (Tie*)elem_l->spanner();
- if (tie_l->same_pitch_b_)
- tied_l_arr_.push(tie_l-> right_head_l_ );
- }
-}
-
-void
-Local_key_register::do_process_requests()
-{
- Time_description const * time_C_ = get_staff_info().time_C_;
- if (! time_C_->whole_in_measure_){
- if (key_C_)
- local_key_= *key_C_;
- else if(0&& time_C_->when_ >Moment(0))
- warning ("Help me! can't figure out current key");
- }
-}
-
-IMPLEMENT_STATIC_NAME(Local_key_register);
-IMPLEMENT_IS_TYPE_B1(Local_key_register,Request_register);
-ADD_THIS_REGISTER(Local_key_register);
+++ /dev/null
-/*
- lyric-register.cc -- implement Lyric_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "lyric-register.hh"
-#include "musical-request.hh"
-#include "text-item.hh"
-#include "paper-def.hh"
-#include "lookup.hh"
-
-Lyric_register::Lyric_register()
-{
-}
-
-bool
-Lyric_register::do_try_request(Request*r)
-{
- Musical_req * m =r->musical();
- if (!m || ! m->lreq_l())
- return false;
- lreq_arr_.push(m->lreq_l());
-
- return true;
-}
-
-void
-Lyric_register::do_process_requests()
-{
- Text_item * last_item_l =0;
- for (int i=0; i < lreq_arr_.size(); i++) {
- Text_item *lp = new Text_item(lreq_arr_[i]->tdef_p_ );
- lp->dir_i_ = -1;
- lp->fat_b_ = true;
- if (last_item_l)
- lp->add_support(last_item_l);
- last_item_l = lp;
- typeset_element(lp);
- }
-}
-
-void
-Lyric_register::do_post_move_processing()
-{
- lreq_arr_.set_size(0);
-}
-
-
-IMPLEMENT_STATIC_NAME(Lyric_register);
-IMPLEMENT_IS_TYPE_B1(Lyric_register,Request_register);
-ADD_THIS_REGISTER(Lyric_register);
+++ /dev/null
-/*
- meter-reg.cc -- implement Meter_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "meter-reg.hh"
-#include "meter.hh"
-#include "command-request.hh"
-#include "score-reg.hh"
-
-Meter_register::Meter_register()
-{
- meter_req_l_ = 0;
- meter_p_ =0;
- default_grouping_ = Rhythmic_grouping(MInterval(0,4),4); // ugh
-}
-
-void
-Meter_register::fill_staff_info(Staff_info&inf)
-{
- inf.time_C_ = &time_;
- inf.rhythmic_C_ = &default_grouping_;
-}
-
-bool
-Meter_register::do_try_request(Request*r)
-{
- bool gotcha = false;
-
- if (r->command() && r->command()->timing()) {
- gotcha = true;
- Timing_req * tr_l = r->command()->timing();
- Meter_change_req *m_l = tr_l->meterchange();
- if (m_l) {
- meter_req_l_ = m_l;
-
- int b_i= m_l->beats_i_;
- int o_i = m_l->one_beat_i_;
- if (! time_.allow_meter_change_b() )
- tr_l->warning("Meter change not allowed here");
- else{
- time_.set_meter(b_i, o_i);
- default_grouping_ =
- Rhythmic_grouping(MInterval(0,Moment(b_i, o_i)), b_i);
- }
- } else if (tr_l->partial()) {
- Moment m = tr_l->partial()->duration_;
- String error = time_.try_set_partial_str(m);
- if (error != "") {
- tr_l->warning(error);
- } else
- time_.setpartial(m);
- } else if (tr_l->barcheck()) {
- if (time_.whole_in_measure_) {
- tr_l ->warning( "Barcheck failed");
-
- time_.whole_in_measure_ = 0; // resync
- time_.error_b_ = true;
- }
-
- } else if (tr_l->cadenza()) {
- time_.set_cadenza(tr_l->cadenza()->on_b_);
-
- } else if (tr_l->measuregrouping()) {
- default_grouping_ = parse_grouping(
- tr_l->measuregrouping()->beat_i_arr_,
- tr_l->measuregrouping()->elt_length_arr_);
-
- }
- }
-
- return gotcha;
-}
-
-void
-Meter_register::do_creation_processing()
-{
- time_.when_ = get_staff_info().when();
-}
-
-void
-Meter_register::do_process_requests()
-{
- if (meter_req_l_ ) {
- Array<Scalar> args;
- args.push(meter_req_l_->beats_i_);
- args.push(meter_req_l_->one_beat_i_);
-
- meter_p_ = new Meter(args);
- }
-
- if (meter_p_)
- announce_element(Score_elem_info(meter_p_, meter_req_l_) );
-}
-
-void
-Meter_register::do_pre_move_processing()
-{
- if (meter_p_) {
- typeset_breakable_item(meter_p_);
- meter_p_ =0;
- meter_req_l_ = 0;
- }
-
- Register_group_register * reg_l = daddy_reg_l_;
- while (reg_l->daddy_reg_l_) {
- reg_l = reg_l->daddy_reg_l_;
- }
-
- assert( reg_l->name() == Score_register::static_name());
- if (!time_.cadenza_b_)
- ((Score_register*)reg_l)->add_moment_to_process( time_.next_bar_moment());
-}
-
-void
-Meter_register::do_post_move_processing()
-{
- time_.add( get_staff_info().when() - time_.when_ );
-}
-
-IMPLEMENT_STATIC_NAME(Meter_register);
-ADD_THIS_REGISTER(Meter_register);
-IMPLEMENT_IS_TYPE_B1(Meter_register,Request_register);
+++ /dev/null
-/*
- midi-walker.cc -- implement Midi_walker
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>, Jan Nieuwenhuizen <jan@digicash.com>
-
- TODO
-
- Ideally this should also use a register system, to process slurs,
- dynamics, etc.
-
-*/
-
-#include "command-request.hh"
-#include "musical-request.hh"
-#include "p-score.hh"
-#include "midi-walker.hh"
-#include "midi-item.hh"
-#include "midi-stream.hh"
-#include "debug.hh"
-#if 0
-Midi_walker::Midi_walker(Staff *st_l, Midi_track* track_l)
- : PCursor<Staff_column*>(st_l->cols_)
-{
- track_l_ = track_l;
- last_moment_= 0;
-}
-
-/**
- output notestop events for all notes which end before #max_moment#
- */
-void
-Midi_walker::do_stop_notes(Moment max_moment)
-{
- while (stop_notes.size() && stop_notes.front().key <= max_moment) {
- Note_event ent=stop_notes.get();
- if (ent.ignore_b_)
- continue;
-
- Moment stop_moment = ent.key;
- Melodic_req * req_l = ent.val;
-
- Midi_note note(req_l, track_l_->number_i_, false);
- output_event(note, stop_moment);
- }
-}
-/**
- Find out if start_note event is needed, and do it if needed.
- */
-void
-Midi_walker::do_start_note(Note_req*note_l)
-{
- Moment stop = note_l->duration() + ptr()->when();
- for(int i=0; i < stop_notes.size(); i++) {
- if (stop_notes[i].val->melodic()->pitch() ==
- note_l->pitch()) {
- if ( stop_notes[i].key < stop){
- stop_notes[i].ignore_b_=true;
- }
- else
- return; // skip the stop note
- }
- }
- Note_event e;
- e.val = note_l;
- e.key = stop;
-
- stop_notes.insert(e);
-
- Midi_note note(note_l, track_l_->number_i_, true);
- output_event(note, ptr()->when());
-}
-
-
-/** advance the track to #now#, output the item, and adjust current
- "moment". */
-void
-Midi_walker::output_event(Midi_item &i, Moment now)
-{
- Moment delta_t = now - last_moment_ ;
- last_moment_ += delta_t;
- track_l_->add(delta_t, &i );
-}
-
-void
-Midi_walker::do_process_requests()
-{
- do_stop_notes(ptr()->when());
-
- for ( int i = 0; i < ptr()->commandreq_l_arr_.size(); i++ ) {
- Command_req *c_l = ptr()->commandreq_l_arr_[i]->command();
- Meter_change_req* meter_l = c_l->meterchange();
- if ( meter_l )
- output_event( Midi_time( meter_l->beats_i_, meter_l->one_beat_i_, 18 ), ptr()->when() );
- Key_change_req* key_l = c_l->keychange();
- if ( key_l ) {
- int sharps_i = key_l->sharps_i();
- int flats_i = key_l->flats_i();
- // midi cannot handle non-conventional keys
- if ( !( flats_i && sharps_i ) )
- output_event( Midi_key( sharps_i - flats_i, key_l->minor_b() ), ptr()->when() );
- }
- }
-
- for ( int i = 0; i < ptr()->musicalreq_l_arr_.size(); i++ ) {
- Musical_req *m = ptr()->musicalreq_l_arr_[i]->musical();
- if (!m)
- return;
- Rhythmic_req *n = m->rhythmic();
- if ( !n)
- continue;
- Note_req * note_l = n->note();
- if (!note_l)
- continue;
- do_start_note(note_l);
- }
-}
-
-Midi_walker::~Midi_walker()
-{
- do_stop_notes( last_moment_ + Moment(10,1)); // ugh
-}
-
-
-int
-compare(Note_event const&e1, Note_event const&e2)
-{
- return sign(e1.key - e2.key);
-}
-#endif
+++ /dev/null
-/*
- note-column-reg.cc -- implement Note_column_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "note-column-reg.hh"
-#include "note-head.hh"
-#include "stem.hh"
-#include "note-column.hh"
-#include "script.hh"
-#include "rest-column.hh"
-
-bool
-Note_column_register::acceptable_elem_b(Score_elem const*elem_C)const
-{
- char const*nC = elem_C->name();
- return (nC == Script::static_name() || nC == Note_head::static_name()
- || nC == Stem::static_name());
-}
-Note_column*
-Note_column_register::note_col_l()
-{
- if (!ncol_p_){
- ncol_p_ = new Note_column;
- announce_element(Score_elem_info(ncol_p_, 0));
- }
- return ncol_p_;
-}
-
-Rest_column *
-Note_column_register::rest_col_l()
-{
- if (!restcol_p_) {
- restcol_p_ = new Rest_column;
- announce_element(Score_elem_info(restcol_p_,0));
- }
- return restcol_p_;
-}
-
-void
-Note_column_register::acknowledge_element(Score_elem_info i)
-{
- if (!acceptable_elem_b(i.elem_l_))
- return;
-
-
- char const*nC = i.elem_l_->name();
-
- if (nC == Script::static_name()) {
- script_l_arr_.push((Script*)i.elem_l_->item());
- } else if (nC == Note_head::static_name()) {
- Note_head * h_l = (Note_head*)i.elem_l_->item();
- if (h_l->rest_b_)
- rest_col_l()->add(h_l);
- else
- note_col_l()->add(h_l);
- }
- else if (nC == Stem::static_name()){
- stem_l_ = (Stem*)i.elem_l_->item();
- }
-}
-
-void
-Note_column_register::do_pre_move_processing()
-{
- Script_column *col_l = ( ncol_p_ ) ? ncol_p_ : restcol_p_;
- if (!col_l)
- return;
-
- for (int i=0; i < script_l_arr_.size(); i++)
- col_l->add(script_l_arr_[i]);
-
- if (stem_l_) {
- if (ncol_p_)
- ncol_p_->add(stem_l_);
- if (restcol_p_)
- restcol_p_->add(stem_l_);
- }
- if (restcol_p_) {
- if (! restcol_p_ -> dir_i_)
- restcol_p_->dir_i_ = dir_i_;
- typeset_element(restcol_p_);
- restcol_p_ =0;
- }
- if (ncol_p_) {
- if (! ncol_p_->dir_i_ )
- ncol_p_->dir_i_ = dir_i_;
- if (! ncol_p_->h_shift_b_)
- ncol_p_->h_shift_b_ = h_shift_b_;
- typeset_element(ncol_p_);
- ncol_p_ =0;
- }
-}
-
-void
-Note_column_register::do_post_move_processing()
-{
- script_l_arr_.set_size(0);
- stem_l_ =0;
-}
-
-void
-Note_column_register::set_feature(Feature i)
-{
- if (i.type_ == "vdir")
- dir_i_ = i.value_;
- if (i.type_ == "hshift")
- h_shift_b_ = (bool)(int)i.value_;
-}
-
-Note_column_register::Note_column_register()
-{
- dir_i_ =0;
- h_shift_b_ = false;
-
- ncol_p_=0;
- restcol_p_ =0;
- do_post_move_processing();
-}
-IMPLEMENT_STATIC_NAME(Note_column_register);
-IMPLEMENT_IS_TYPE_B1(Note_column_register,Request_register);
-ADD_THIS_REGISTER(Note_column_register);
+++ /dev/null
-/*
- registergroup.cc -- implement Register_group_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "proto.hh"
-#include "plist.hh"
-#include "register-group.hh"
-#include "register.hh"
-#include "debug.hh"
-#include "p-score.hh"
-#include "score-elem.hh"
-#include "input-register.hh"
-
-Register_group_register::~Register_group_register()
-{
- assert(removable_b());
-}
-
-void
-Register_group_register::check_removal()
-{
- for (int i =0; i < group_l_arr_.size(); ) {
- group_l_arr_[i]->check_removal();
- if (group_l_arr_[i]->removable_b())
- terminate_register(group_l_arr_[i]);
- else
- i++;
- }
-
-}
-
-bool
-Register_group_register::removable_b()const
-{
- return !iterator_count_&& !group_l_arr_.size() ;
-}
-
-Register_group_register::Register_group_register()
-{
- ireg_l_ =0;
-}
-
-void
-Register_group_register::set_feature(Feature d)
-{
- iter_top(reg_list_, i);
- while (i.ok()) {
- // this construction to ensure clean deletion
- Request_register *reg_l = i++;
- reg_l->set_feature(d);
- }
-}
-
-void
-Register_group_register::sync_features()
-{
- iter_top(reg_list_, i);
- while (i.ok()) {
-
- Request_register *reg_l = i++;
- reg_l->sync_features();
- }
-}
-
-void
-Register_group_register::do_pre_move_processing()
-{
- iter_top(reg_list_, i);
- while (i.ok()) {
-
- Request_register *reg_l = i++;
- reg_l->pre_move_processing();
- }
-}
-
-void
-Register_group_register::do_process_requests()
-{
- iter_top(reg_list_, i);
- while (i.ok()) {
-
- Request_register *reg_l = i++;
- reg_l->process_requests();
- }
-}
-
-
-void
-Register_group_register::do_post_move_processing()
-{
- iter_top(reg_list_, i);
- while (i.ok()) {
- // this construction to ensure clean deletion
- Request_register *reg_l = i++;
- reg_l->post_move_processing();
- }
-}
-
-
-bool
-Register_group_register::contains_b(Request_register* reg_l)const
-{
- bool parent_b = Request_register::contains_b(reg_l);
-
- if (parent_b)
- return true;
- for (iter_top(reg_list_, j); j.ok(); j++)
- if (j->contains_b(reg_l))
- return true;
- return false;
-}
-
-
-
-bool
-Register_group_register::do_try_request(Request*req_l)
-{
- bool hebbes_b =false;
- for (int i =0; !hebbes_b && i < nongroup_l_arr_.size() ; i++)
- hebbes_b =nongroup_l_arr_[i]->try_request(req_l);
- if (!hebbes_b)
- hebbes_b = daddy_reg_l_->try_request(req_l);
- return hebbes_b ;
-}
-
-void
-Register_group_register::add(Request_register *reg_p)
-{
- reg_list_.bottom().add(reg_p);
- reg_p->daddy_reg_l_ = this;
-
- if (reg_p->is_type_b(Register_group_register::static_name())) {
- group_l_arr_.push((Register_group_register*)reg_p);
- } else {
- nongroup_l_arr_ .push(reg_p);
- }
-}
-
-
-Request_register *
-Register_group_register::remove_register_p(Request_register*reg_l)
-{
- group_l_arr_.substitute((Register_group_register*)reg_l,0);
- nongroup_l_arr_.substitute(reg_l,0);
- iterator(reg_list_) reg_cur= reg_list_.find(reg_l);
-
- return reg_cur.remove_p();
-}
-
-void
-Register_group_register::terminate_register(Request_register*r_l)
-{
- mtor << "Removing " << r_l->name() << " at " << get_staff_info().when() << "\n";
- r_l->do_removal_processing();
- Request_register * reg_p =remove_register_p(r_l);
-
- delete reg_p;
-}
-
-IMPLEMENT_IS_TYPE_B2(Register_group_register,Request_register, Acceptor);
-IMPLEMENT_STATIC_NAME(Register_group_register);
-ADD_THIS_REGISTER(Register_group_register);
-
-void
-Register_group_register::do_print()const
-{
-#ifndef NPRINT
- mtor << "ID: " << id_str_ << "\n";
- for (iter_top(reg_list_, i); i.ok(); i++)
- i->print();
-#endif
-}
-
-
-Register_group_register*
-Register_group_register::find_register_l(String n, String id)
-{
- if (name() == n && id_str_ == id)
- return this;
- Register_group_register * r = 0;
- for (int i =0; !r && i< group_l_arr_.size(); i++) {
- r = group_l_arr_[i]->find_register_l(n,id);
- }
-
- return r;
-}
-
-Acceptor*
-Register_group_register::find_get_acceptor_l(String n,String id)
-{
- Acceptor * ret=0;
- Input_register * ireg_l= ireg_l_-> recursive_find ( n );
- if (ireg_l ) {
- ret = find_register_l(n,id);
- if (!ret) {
- Register_group_register * group =
- ireg_l-> get_group_register_p();
-
- add(group);
- ret = group;
-
- if (group->ireg_l_->is_name_b( n ) )
- ret ->id_str_ = id;
- else
- return ret->find_get_acceptor_l(n,id);
-
- }
- } else if (daddy_reg_l_)
- ret =daddy_reg_l_->find_get_acceptor_l(n,id);
- else {
- warning("Can't find or create `" + n + "' called `" + id + "'\n");
- ret =0;
- }
- return ret;
-}
-
-int
-Register_group_register::depth_i()const
-{
- return daddy_reg_l_->depth_i() + 1;
-}
-
-Acceptor*
-Register_group_register::ancestor_l(int l)
-{
- if (!l || !daddy_reg_l_)
- return this;
-
- return daddy_reg_l_->ancestor_l(l-1);
-}
-
-void
-Register_group_register::announce_element(Score_elem_info info)
-{
- announce_info_arr_.push(info);
- Request_register::announce_element(info);
-}
-
-void
-Register_group_register::do_announces()
-{
- for (int i=0; i < group_l_arr_.size(); i++) {
- group_l_arr_[i]->do_announces();
- }
-
- Request dummy_req;
-
- for (int j =0; j < announce_info_arr_.size(); j++){
- Score_elem_info info = announce_info_arr_[j];
-
- if (!info.req_l_)
- info.req_l_ = &dummy_req;
- for (int i=0; i < nongroup_l_arr_.size(); i++) {
- if (nongroup_l_arr_[i] != info.origin_reg_l_arr_[0])
- nongroup_l_arr_[i]->acknowledge_element(info);
- }
- }
- announce_info_arr_.set_size(0);
-}
-
-
-void
-Register_group_register::do_removal_processing()
-{
- for (iter( reg_list_.top(), i); i.ok(); i++)
- i->do_removal_processing();
-}
-
-Staff_info
-Register_group_register::get_staff_info()const
-{
- Staff_info inf = Request_register::get_staff_info();
-
- for (int i=0; i < nongroup_l_arr_.size(); i++)
- nongroup_l_arr_[i]->fill_staff_info(inf);
-
- return inf;
-}
-
-Acceptor*
-Register_group_register::get_default_interpreter()
-{
- if ( interpreter_l() )
- return daddy_reg_l_->get_default_interpreter();
-
- Register_group_register *reg_p= ireg_l_->
- get_default_ireg_l()->get_group_register_p();
- add(reg_p );
- if (reg_p->interpreter_l())
- return reg_p;
- else
- return reg_p->get_default_interpreter();
-}
+++ /dev/null
-/*
- register.cc -- implement Request_register
-
- Sourcefile of GNU LilyPond musictypesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "music-list.hh"
-#include "musical-request.hh"
-#include "register.hh"
-#include "register-group.hh"
-#include "debug.hh"
-
-void
-Request_register::post_move_processing()
-{
-
- if (status < CREATION_INITED) {
- do_creation_processing();
- status = CREATION_INITED;
- }
- if (status >= MOVE_INITED)
- return;
-
- do_post_move_processing();
- status = MOVE_INITED;
-}
-
-bool
-Request_register::try_request(Request * r)
-{
- if (status < MOVE_INITED)
- post_move_processing();
-
- return do_try_request(r);
-}
-
-void
-Request_register::process_requests()
-{
- if (status < PROCESSED_REQS)
- post_move_processing();
- else if (status >= PROCESSED_REQS)
- return;
-
- status = PROCESSED_REQS;
- do_process_requests();
-}
-
-void
-Request_register::pre_move_processing()
-{
- do_pre_move_processing();
- status = CREATION_INITED;
-}
-
-void
-Request_register::fill_staff_info(Staff_info&)
-{
-
-}
-
-Scalar
-Request_register::get_feature(String t)
-{
- return daddy_reg_l_->get_feature(t);
-}
-
-bool
-Request_register::do_try_request(Request*)
-{
- return false;
-}
-
-Request_register::Request_register()
-{
- status = VIRGIN;
- daddy_reg_l_ = 0;
-}
-
-void
-Request_register::announce_element(Score_elem_info i)
-{
- i.origin_reg_l_arr_.push(this);
- daddy_reg_l_->announce_element(i);
-}
-
-void
-Request_register::typeset_element(Score_elem*p)
-{
- daddy_reg_l_->typeset_element(p);
-}
-
-Paper_def*
-Request_register::paper()const
-{
- return daddy_reg_l_->paper();
-}
-
-void
-Request_register::typeset_breakable_item(Item * nobreak_p)
-{
- daddy_reg_l_->typeset_breakable_item(nobreak_p);
-}
-
-bool
-Request_register::contains_b(Request_register *reg_l)const
-{
- return this == reg_l;
-}
-
-Staff_info
-Request_register::get_staff_info() const
-{
- return daddy_reg_l_->get_staff_info();
-}
-
-void
-Request_register::print() const
-{
-#ifndef NPRINT
- mtor << "\n" << name() << " {";
- do_print();
- mtor << "}";
-#endif
-}
-
-IMPLEMENT_STATIC_NAME(Request_register);
-IMPLEMENT_IS_TYPE_B(Request_register);
-
-void
-Request_register::do_print()const
-{
-}
-
-
+++ /dev/null
-/*
- rest-collision-reg.cc -- implement Rest_collision_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "debug.hh"
-#include "rest-collision.hh"
-#include "rest-collision-reg.hh"
-#include "collision.hh"
-#include "rest-column.hh"
-#include "note-column.hh"
-
-IMPLEMENT_STATIC_NAME(Rest_collision_register);
-IMPLEMENT_IS_TYPE_B1(Rest_collision_register, Request_register);
-ADD_THIS_REGISTER(Rest_collision_register);
-
-Rest_collision_register::Rest_collision_register()
-{
- rest_collision_p_ =0;
-}
-
-void
-Rest_collision_register::acknowledge_element(Score_elem_info i)
-{
- char const * nC = i.elem_l_->name();
- if (nC == Collision::static_name()) {
- collision_l_arr_.push((Collision*)i.elem_l_->item());
- }
- else if (nC == Note_column::static_name()) {
- // what should i do, what should _register do?
- if (!rest_collision_p_)
- rest_collision_p_ = new Rest_collision;
- rest_collision_p_->add((Note_column*)i.elem_l_->item());
- }
- else if (nC == Rest_column::static_name()) {
- if (!rest_collision_p_)
- rest_collision_p_ = new Rest_collision;
- rest_collision_p_->add((Rest_column*)i.elem_l_->item());
- }
-}
-
-void
-Rest_collision_register::do_pre_move_processing()
-{
- if (rest_collision_p_) {
- typeset_element(rest_collision_p_);
- rest_collision_p_ = 0;
- }
-}
-
-void
-Rest_collision_register::do_print() const
-{
-#ifndef NPRINT
- mtor << "collisions: " << collision_l_arr_.size();
- if ( rest_collision_p_ )
- rest_collision_p_->print();
-#endif
-}
+++ /dev/null
-/*
- score-align-reg.cc -- implement Score_align_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#include "elem-group-item.hh"
-#include "score-align-reg.hh"
-#include "item.hh"
-
-Score_align_register::Score_align_register()
-{
- type_ch_C_ = 0;
- priority_i_ =0;
- align_p_=0;
-}
-
-void
-Score_align_register::do_pre_move_processing()
-{
- if (align_p_) {
- typeset_breakable_item( align_p_);
- align_p_ =0;
- }
-}
-
-void
-Score_align_register::acknowledge_element(Score_elem_info inf)
-{
- if (inf.elem_l_->name() == type_ch_C_ ) {
-
- if (! align_p_ ) {
- align_p_ = new Horizontal_group_item;
- announce_element(Score_elem_info(align_p_,0));
- }
-
- align_p_->add_element(inf.elem_l_);
- }
-}
-
-IMPLEMENT_STATIC_NAME(Score_align_register)
-IMPLEMENT_IS_TYPE_B1(Score_align_register,Request_register);
+++ /dev/null
-/*
- score-align-regs.cc -- implement different alignment registers.
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "key-item.hh"
-#include "clef-item.hh"
-#include "meter.hh"
-#include "bar.hh"
-#include "score-align-reg.hh"
-
-#define IMPLEMENT_ALIGN_REG(C,T,p)\
-class C ## _align_register : public Score_align_register \
-{ \
-public: \
- NAME_MEMBERS(); \
- C ## _align_register() : Score_align_register() \
- { type_ch_C_ = T::static_name();\
- priority_i_ = p;} \
-}; \
-IMPLEMENT_STATIC_NAME(C ## _align_register) ; \
-ADD_THIS_REGISTER(C ## _align_register); \
-IMPLEMENT_IS_TYPE_B1(C ## _align_register, Score_align_register) ;
-
-
-IMPLEMENT_ALIGN_REG(Key,Key_item,3);
-IMPLEMENT_ALIGN_REG(Clef,Clef_item,2);
-IMPLEMENT_ALIGN_REG(Meter,Meter,4);
-IMPLEMENT_ALIGN_REG(Bar, Bar,0);
-
+++ /dev/null
-/*
- score-halign-reg.cc -- implement Score_horizontal_align_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "bar.hh"
-#include "break-align-item.hh"
-#include "score-halign-reg.hh"
-#include "score-align-reg.hh"
-
-Score_horizontal_align_register::Score_horizontal_align_register()
-{
- halign_p_ =0;
-}
-
-void
-Score_horizontal_align_register::do_pre_move_processing()
-{
- if (halign_p_) {
- typeset_breakable_item(halign_p_);
- halign_p_ =0;
- }
-
-}
-
-void
-Score_horizontal_align_register::acknowledge_element(Score_elem_info i)
-{
- Request_register* reg = i.origin_reg_l_arr_[0];
- if (reg->is_type_b(
- Score_align_register::static_name()) )
- {
- Score_align_register * align_reg_l = (Score_align_register*) reg;
- if (!halign_p_) {
- halign_p_ = new Break_align_item;
- announce_element(Score_elem_info(halign_p_,0));
- }
- Item * it = i.elem_l_->item();
- if (align_reg_l->type_ch_C_ == Bar::static_name())
- halign_p_->center_l_ = it;
-
- halign_p_->add(it, align_reg_l->priority_i_);
- }
-}
-IMPLEMENT_STATIC_NAME(Score_horizontal_align_register);
-IMPLEMENT_IS_TYPE_B1(Score_horizontal_align_register,Request_register);
-ADD_THIS_REGISTER(Score_horizontal_align_register);
+++ /dev/null
-/*
- score-reg.cc -- implement Score_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-#include "super-elem.hh"
-#include "scoreline.hh"
-#include "debug.hh"
-#include "score-elem.hh"
-#include "bar.hh" // needed for Bar::static_name
-#include "staffline.hh"
-#include "score-reg.hh"
-#include "p-col.hh"
-#include "p-score.hh"
-#include "score.hh"
-#include "musical-request.hh"
-#include "score-column.hh"
-
-
-void
-Score_register::set_score(Score *s)
-{
- Global_acceptor::set_score(s);
- scoreline_l_ = s->pscore_p_->super_elem_l_->line_of_score_l_;
-}
-
-Score_register::Score_register()
-{
- scoreline_l_ =0;
- command_column_l_ =0;
- musical_column_l_ =0;
-}
-
-
-void
-Score_register::prepare(Moment w)
-{
- Score_column* c1 = new Score_column(w);
- Score_column* c2 = new Score_column(w);
-
- c1->musical_b_ = false;
- c2->musical_b_ = true;
-
- score_l_->cols_.bottom().add(c1);
- score_l_->cols_.bottom().add(c2);
- set_cols(c1,c2);
-
-
- post_move_processing();
-}
-void
-Score_register::finish()
-{
- check_removal();
- do_removal_processing();
-}
-
-void
-Score_register::do_creation_processing()
-{
- scoreline_l_->left_col_l_ = get_staff_info().command_pcol_l();
- scoreline_l_->left_col_l_ ->set_breakable();
- Register_group_register::do_creation_processing();
-}
-
-void
-Score_register::set_cols(Score_column*c1,Score_column*c2)
-{
- command_column_l_ = c1;
- musical_column_l_ = c2;
-}
-
-void
-Score_register::do_removal_processing()
-{
- Register_group_register::do_removal_processing();
- scoreline_l_->right_col_l_ = get_staff_info().command_pcol_l();
- scoreline_l_->right_col_l_ ->set_breakable();
- typeset_all();
-}
-
-void
-Score_register::process()
-{
- process_requests();
- do_announces();
- pre_move_processing();
- check_removal();
-}
-
-void
-Score_register::announce_element(Score_elem_info info)
-{
- info.origin_reg_l_arr_.push(this);
- if (info.elem_l_->name() == Bar::static_name()) {
- get_staff_info().command_pcol_l()->set_breakable();
- } else if ( info.elem_l_->is_type_b( Line_of_staff::static_name() ) &&
- !scoreline_l_->contains_b( info.elem_l_) )
-
- scoreline_l_->add(info.elem_l_);
-
- announce_info_arr_.push(info);
-}
-void
-Score_register::do_announces()
-{
- /* All elements are propagated to the top upon announcement. If
- something was created during one run of
- Register_group_register::do_announces, then
- announce_info_arr_.size() will be nonzero again
-
- */
- while (announce_info_arr_.size()) {
- for (int i=0; i <announce_info_arr_.size(); i++)
- /*
- TODO
-
- More subtle spacing
- */
- if (announce_info_arr_[i].req_l_) {
- Musical_req *m = announce_info_arr_[i].req_l_->musical();
- if (m&&m->rhythmic()) {
- musical_column_l_->add_duration( m->duration());
- }
- }
- Register_group_register::do_announces();
- }
-}
-
-
-void
-Score_register::typeset_element(Score_elem *elem_p)
-{
- musical_item_p_arr_.push(elem_p);
-}
-
-void
-Score_register::typeset_breakable_item(Item * nobreak_p)
-{
- if (nobreak_p) {
- nobreak_item_p_arr_.push(nobreak_p);
- }
-}
-
-void
-Score_register::typeset_all()
-{
- PCol * c= get_staff_info().command_pcol_l();
- PScore *ps_l = score_l_->pscore_p_;
-
- for (int i =0; i < nobreak_item_p_arr_.size(); i++) {
- ps_l->typeset_item(nobreak_item_p_arr_[i], c, 0);
- scoreline_l_->add(nobreak_item_p_arr_[i]);
- }
- nobreak_item_p_arr_.set_size(0);
-
- for (int i=0; i < musical_item_p_arr_.size(); i++) {
- PCol* m = get_staff_info().musical_pcol_l();
- Score_elem *elem_p = musical_item_p_arr_[i];
-
- scoreline_l_->add(elem_p);
- if (elem_p->spanner()) {
- ps_l->typeset_unbroken_spanner(elem_p->spanner());
- } else if (elem_p->item()) {
- ps_l->typeset_item(elem_p->item(), m, 0);
- } else
- assert(false);
- }
- musical_item_p_arr_.set_size(0);
-}
-
-
-void
-Score_register::do_pre_move_processing()
-{
- // this generates all items.
- Register_group_register::do_pre_move_processing();
-
- typeset_all();
-}
-
-
-Staff_info
-Score_register::get_staff_info()const
-{
- Staff_info inf;
-
- inf.command_l_ = command_column_l_;
- inf.musical_l_ = musical_column_l_;
- return inf;
-}
-
-Paper_def*
-Score_register::paper()const
-{
- return score_l_->paper_p_;
-}
-
-
-
-bool
-Score_register::do_try_request(Request*r)
-{
- bool gotcha = false;
- for (int i =0; !gotcha && i < nongroup_l_arr_.size() ; i++)
- gotcha = nongroup_l_arr_[i]->try_request(r);
-
- return gotcha;
-}
-
-IMPLEMENT_IS_TYPE_B1(Score_register,Register_group_register);
-IMPLEMENT_STATIC_NAME(Score_register);
-ADD_THIS_REGISTER(Score_register);
-
+++ /dev/null
-/*
- script-reg.cc -- implement Script_register
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "script-reg.hh"
-#include "script.hh"
-#include "musical-request.hh"
-#include "stem.hh"
-#include "staff-sym.hh"
-
-Script_register::Script_register()
-{
- do_post_move_processing();
-}
-
-bool
-Script_register::do_try_request(Request *r_l)
-{
- if (!r_l->musical() || ! r_l->musical()->musicalscript())
- return false ;
-
- for (int i=0; i < script_req_l_arr_.size(); i++)
- if ( !Script_req::compare(*script_req_l_arr_[i], *r_l->script())) {
- return true;
- }
-
- script_req_l_arr_.push( r_l->script());
-
- return true;
-}
-
-void
-Script_register::do_process_requests()
-{
- for (int i=0; i < script_req_l_arr_.size(); i++){
- Script_req* l=script_req_l_arr_[i];
- Script *p =new Script;
- p->dir_i_ = l->dir_i_;
- p->specs_l_ = l->scriptdef_p_;
- script_p_arr_.push(p);
- announce_element(Score_elem_info(p, l));
- }
-}
-
-bool
-Script_register::acceptable_elem_b(Score_elem*s_l)
-{
- char const *nC = s_l->name();
- return (nC == Stem::static_name());
-}
-
-void
-Script_register::acknowledge_element(Score_elem_info info)
-{
- Score_elem *elem_l = info.elem_l_;
- if (!acceptable_elem_b(elem_l))
- return;
-
- for (int i=0; i < script_p_arr_.size(); i++) {
- Script*script_l = script_p_arr_[i];
- if (elem_l->name() == Stem::static_name())
- script_l->set_stem((Stem*)elem_l->item());
- }
-}
-
-void
-Script_register::do_pre_move_processing()
-{
- Staff_symbol* s_l = get_staff_info().staff_sym_l_;
- for (int i=0; i < script_p_arr_.size(); i++) {
-
- Script*script_p = script_p_arr_[i];
- script_p->set_staffsym( s_l);
- typeset_element(script_p);
- }
- script_p_arr_.set_size(0);
-}
-
-void
-Script_register::do_post_move_processing()
-{
- script_req_l_arr_.set_size(0);
-}
-
-IMPLEMENT_STATIC_NAME(Script_register);
-IMPLEMENT_IS_TYPE_B1(Script_register,Request_register);
-ADD_THIS_REGISTER(Script_register);
+++ /dev/null
-/*
- slur-reg.cc -- implement Slur_register
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "proto.hh"
-#include "plist.hh"
-#include "musical-request.hh"
-#include "slur-reg.hh"
-#include "slur.hh"
-#include "debug.hh"
-#include "note-column.hh"
-
-bool
-Slur_register::do_try_request(Request *req_l)
-{
- Musical_req *mus_l = req_l->musical();
- if(!mus_l || !mus_l->slur())
- return false;
-
- new_slur_req_l_arr_.push(mus_l->slur());
- return true;
-}
-
-void
-Slur_register::acknowledge_element(Score_elem_info info)
-{
- if (info.elem_l_->name() == Note_column::static_name()) {
- Note_column *col_l =(Note_column*) info.elem_l_->item() ;// ugh
- for (int i = 0; i < slur_l_stack_.size(); i++)
- slur_l_stack_[i]->add(col_l );
- for (int i = 0; i < end_slur_l_arr_.size(); i++)
- end_slur_l_arr_[i]->add(col_l);
- }
-}
-
-void
-Slur_register::set_feature(Feature f)
-{
- if (f.type_ == "vdir")
- dir_i_ = f.value_ ;
-}
-
-/*
- abracadabra
- */
-Slur_register::Slur_register()
-{
- dir_i_ =0;
-}
-void
-Slur_register::do_process_requests()
-{
- Array<Slur*> start_slur_l_arr_;
- for (int i=0; i< new_slur_req_l_arr_.size(); i++) {
- Slur_req* slur_req_l = new_slur_req_l_arr_[i];
- // end slur: move the slur to other array
- if (slur_req_l->spantype == Span_req::STOP) {
- if (slur_l_stack_.empty())
-
- slur_req_l->warning("can't find slur to end");
- else {
- end_slur_l_arr_.push(slur_l_stack_.pop());
- requests_arr_.pop();
- }
- } else if (slur_req_l->spantype == Span_req::START) {
- // push a new slur onto stack.
- //(use temp. array to wait for all slur STOPs)
- Slur * s_p =new Slur;
- requests_arr_.push(slur_req_l);
- start_slur_l_arr_.push(s_p);
- announce_element(Score_elem_info(s_p, slur_req_l));
- }
- }
- for (int i=0; i < start_slur_l_arr_.size(); i++)
- slur_l_stack_.push(start_slur_l_arr_[i]);
-}
-
-void
-Slur_register::do_pre_move_processing()
-{
- for (int i = 0; i < end_slur_l_arr_.size(); i++) {
- if (dir_i_)
- end_slur_l_arr_[i]->dir_i_ = dir_i_;
- typeset_element(end_slur_l_arr_[i]);
- }
- end_slur_l_arr_.set_size(0);
-}
-
-void
-Slur_register::do_post_move_processing()
-{
- new_slur_req_l_arr_.set_size(0);
-}
-Slur_register::~Slur_register()
-{
- for (int i=0; i < requests_arr_.size(); i++) {
- requests_arr_[i]->warning("unterminated slur");
- }
-}
-IMPLEMENT_STATIC_NAME(Slur_register);
-IMPLEMENT_IS_TYPE_B1(Slur_register,Request_register);
-ADD_THIS_REGISTER(Slur_register);
+++ /dev/null
-/*
- staff-regs.cc -- implement Staff_registers
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "staff-sym.hh"
-#include "voice-group-regs.hh"
-#include "voice-regs.hh"
-#include "staff-regs.hh"
-#include "command-request.hh"
-#include "bar.hh"
-#include "debug.hh"
-#include "input-register.hh"
-#include "meter-reg.hh"
-#include "staffline.hh"
-
-
-Staff_registers::Staff_registers()
-{
- staffline_p_ =0;
-}
-
-void
-Staff_registers::typeset_element(Score_elem *elem_p)
-{
- staff_elem_l_arr_.push(elem_p);
- Register_group_register::typeset_element(elem_p);
-}
-
-void
-Staff_registers::typeset_breakable_item( Item * nobreak_p)
-{
- staff_elem_l_arr_.push(nobreak_p);
- Register_group_register::typeset_breakable_item(nobreak_p);
-}
-
-void
-Staff_registers::do_pre_move_processing()
-{
- Register_group_register::do_pre_move_processing();
- group_staff_elems();
-}
-
-void
-Staff_registers::group_staff_elems()
-{
- for (int i=0; i <staff_elem_l_arr_.size(); i++)
- staffline_p_->add_element(staff_elem_l_arr_[i]);
- staff_elem_l_arr_.set_size(0);
-}
-
-void
-Staff_registers::do_removal_processing()
-{
- /* this is a "destructor type function", first do children, then self. */
- Register_group_register::do_removal_processing();
- group_staff_elems();
-
- staffline_p_->right_col_l_ = get_staff_info().command_pcol_l();
- Request_register::typeset_element(staffline_p_);
- staffline_p_ = 0;
-}
-
-void
-Staff_registers::do_creation_processing()
-{
- staffline_p_ = new Line_of_staff;
- staffline_p_->left_col_l_ = get_staff_info().command_pcol_l();
-
- // don't broadcast to self.
- Request_register::announce_element(Score_elem_info(staffline_p_,0));
- Register_group_register::do_creation_processing();
-}
-
-
-IMPLEMENT_STATIC_NAME(Staff_registers);
-IMPLEMENT_IS_TYPE_B1(Staff_registers,Register_group_register);
-ADD_THIS_REGISTER(Staff_registers);
-
+++ /dev/null
-/*
- staff-sym-reg.cc -- implement Staff_sym_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "staff-sym-reg.hh"
-#include "staff-sym.hh"
-#include "score.hh"
-#include "p-col.hh"
-
-const NO_LINES = 5;
-void
-Staff_sym_register::fill_staff_info(Staff_info&i)
-{
- i.staff_sym_l_ = span_p_;
-}
-
-Staff_sym_register::Staff_sym_register()
-{
- span_p_ = 0;
-}
-
-void
-Staff_sym_register::do_creation_processing()
-{
- span_p_ = new Staff_symbol(NO_LINES);
- span_p_->left_col_l_ = get_staff_info().command_pcol_l(); // ugh
-}
-
-void
-Staff_sym_register::do_removal_processing()
-{
- span_p_->right_col_l_ = get_staff_info().command_pcol_l();
- typeset_element(span_p_);
- span_p_ =0;
-}
-
-void
-Staff_sym_register::do_process_requests()
-{
- announce_element(Score_elem_info(span_p_, 0));
-}
-
-
-IMPLEMENT_STATIC_NAME(Staff_sym_register);
-IMPLEMENT_IS_TYPE_B1(Staff_sym_register,Request_register);
-ADD_THIS_REGISTER(Staff_sym_register);
+++ /dev/null
-/*
- stem-beam-reg.cc -- part of GNU LilyPond
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "musical-request.hh"
-#include "stem-beam-reg.hh"
-#include "beam.hh"
-#include "stem.hh"
-#include "grouping.hh"
-#include "text-spanner.hh"
-#include "debug.hh"
-#include "grouping.hh"
-#include "note-head.hh"
-#include "time-description.hh"
-
-Stem_beam_register::Stem_beam_register()
-{
- do_post_move_processing();
-
- current_grouping = 0;
- beam_p_ = 0;
- default_dir_i_ =0;
- start_req_l_ = 0;
-}
-
-bool
-Stem_beam_register::do_try_request(Request*req_l)
-{
-
- Musical_req* mus_l = req_l->musical();
- /* Debiele puntkomma's. Laat je er eentje per ongeluk achter een
- if(..) staan, lijkt het net op een luis in gcc.
-
- (ofwel Python rules)
- */
- if (!mus_l)
- return false;
-
-
- if ( mus_l->beam() ) {
- if (bool(beam_p_ ) == bool(mus_l->beam()->spantype == Span_req::START))
- return false;
-
- if (beam_req_l_ && Beam_req::compare(*beam_req_l_ , *mus_l->beam()))
- return false;
-
- beam_req_l_ = mus_l->beam();
- return true;
- }
-
- if ( mus_l->stem() ) {
- if (current_grouping && !current_grouping->child_fit_b(
- get_staff_info().time_C_->whole_in_measure_))
- return false;
-
- if (stem_req_l_ && Stem_req::compare(*stem_req_l_, *mus_l->stem()))
- return false;
-
- stem_req_l_ = mus_l->stem();
- return true;
- }
- return false;
-}
-
-void
-Stem_beam_register::do_process_requests()
-{
- if (beam_req_l_) {
- if (beam_req_l_->spantype == Span_req::STOP) {
- end_beam_b_ = true;
- start_req_l_ = 0;
- } else {
- beam_p_ = new Beam;
- start_req_l_ = beam_req_l_;
- beam_p_->left_col_l_ = get_staff_info().musical_pcol_l();
- current_grouping = new Rhythmic_grouping;
- if (beam_req_l_->nplet) {
- Text_spanner* t = new Text_spanner();
- Text_def *defp = new Text_def;
- t->set_support(beam_p_);
- defp->align_i_ = 0;
- defp->text_str_ = beam_req_l_->nplet;
- defp->style_str_="italic";
- t->spec_p_ = defp;
- typeset_element(t);
- }
-
- }
- }
-
- if (stem_req_l_) {
- stem_p_ = new Stem(8);
- if (current_grouping)
- current_grouping->add_child(
- get_staff_info().time_C_->whole_in_measure_,
- stem_req_l_->duration());
-
- stem_p_->flag_i_ = stem_req_l_->duration_.type_i_;
-
- if (beam_p_) {
- if (stem_req_l_->duration_.type_i_<= 4)
- stem_req_l_->warning( "stem doesn't fit in Beam");
- else
- beam_p_->add(stem_p_);
- stem_p_->print_flag_b_ = false;
- } else {
- stem_p_->print_flag_b_ = true;
- }
-
- announce_element(Score_elem_info(stem_p_, stem_req_l_));
- }
-}
-
-void
-Stem_beam_register::acknowledge_element(Score_elem_info info)
-{
- if (!stem_p_)
- return;
-
- if (info.elem_l_->name() == Note_head::static_name() &&
- stem_req_l_->duration()
- == info.req_l_->musical()->rhythmic()->duration()){
- Note_head * n_l= (Note_head*)info.elem_l_->item();
- stem_p_->add(n_l);
- }
-}
-void
-Stem_beam_register::do_pre_move_processing()
-{
- if (stem_p_) {
- if (default_dir_i_)
- stem_p_->dir_i_ = default_dir_i_;
-
- typeset_element(stem_p_);
- stem_p_ = 0;
- }
- if (beam_p_ && end_beam_b_) {
- Rhythmic_grouping const * rg_C = get_staff_info().rhythmic_C_;
- rg_C->extend(current_grouping->interval());
- beam_p_->set_grouping(*rg_C, *current_grouping);
- beam_p_->right_col_l_ = get_staff_info().musical_pcol_l();
- typeset_element(beam_p_);
- delete current_grouping;
- current_grouping = 0;
- beam_p_ = 0;
- }
- end_beam_b_ = false;
-}
-void
-Stem_beam_register::do_post_move_processing()
-{
- stem_p_ = 0;
- beam_req_l_ = 0;
- stem_req_l_ = 0;
- end_beam_b_ = false;
-}
-
-Stem_beam_register::~Stem_beam_register()
-{
- if (beam_p_)
- start_req_l_->warning("unterminated beam");
-}
-
-void
-Stem_beam_register::set_feature(Feature i)
-{
- if (i.type_ == "vdir")
- default_dir_i_ = i.value_;
-}
-
-IMPLEMENT_STATIC_NAME(Stem_beam_register);
-IMPLEMENT_IS_TYPE_B1(Stem_beam_register,Request_register);
-ADD_THIS_REGISTER(Stem_beam_register);
+++ /dev/null
-/*
- swallow-reg.cc -- implement Swallow_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-#include "swallow-reg.hh"
-
-IMPLEMENT_STATIC_NAME(Swallow_register);
-IMPLEMENT_IS_TYPE_B1(Swallow_register,Request_register);
-ADD_THIS_REGISTER(Swallow_register);
-
-
-bool
-Swallow_register::do_try_request(Request*)
-{
- return true;
-}
+++ /dev/null
-/*
- text-reg.cc -- implement Text_register
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-
- Obsolete.
-*/
-#include "note-column.hh"
-#include "musical-request.hh"
-#include "text-reg.hh"
-#include "text-item.hh"
-
-Text_register::Text_register()
-{
- text_p_ = 0;
- dir_i_ =0;
- do_post_move_processing();
-}
-
-bool
-Text_register::do_try_request(Request*req_l)
-{
- Musical_req *m = req_l->musical();
- if (!m || ! m->text())
- return false;
- if (text_req_l_ &&
- Text_req::compare(*m->text(), *text_req_l_))
-
- return false;
-
- text_req_l_ = m->text();
- return true;
-}
-void
-Text_register::acknowledge_element(Score_elem_info i)
-{
- if (text_p_ && i.elem_l_->name() == Note_column::static_name()) {
- text_p_->add_support(i.elem_l_);
- }
-}
-void
-Text_register::do_process_requests()
-{
- if (text_req_l_) {
- text_p_ = new Text_item(text_req_l_->tdef_p_, text_req_l_->dir_i_); // ugh
- announce_element(Score_elem_info(text_p_, text_req_l_));
- }
-}
-void
-Text_register::do_pre_move_processing()
-{
- if (text_p_) {
- if (dir_i_ && !text_p_->dir_i_)
- text_p_->dir_i_ = dir_i_;
- Staff_symbol* s_l = get_staff_info().staff_sym_l_;
- text_p_->set_staffsym(s_l);
- typeset_element(text_p_);
-
- text_p_ = 0;
- }
-}
-void
-Text_register::set_feature(Feature i)
-{
- if (i.type_ == "vdir")
- dir_i_ = i.value_;
-}
-void
-Text_register::do_post_move_processing()
-{
- text_req_l_ = 0;
-}
-IMPLEMENT_STATIC_NAME(Text_register);
-IMPLEMENT_IS_TYPE_B1(Text_register,Request_register);
-ADD_THIS_REGISTER(Text_register);
+++ /dev/null
-/*
- tie-reg.cc -- implement Tie_register
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "tie-reg.hh"
-#include "tie.hh"
-#include "note-head.hh"
-#include "musical-request.hh"
-#include "music-list.hh"
-
-Tie_register::Tie_register()
-{
- end_tie_p_ = 0;
- tie_p_ = 0;
- req_l_ =0;
- end_req_l_ =0;
- end_mom_ = -1;
- melodic_req_l_ = 0;
- end_melodic_req_l_ =0;
- dir_i_ = 0;
-}
-
-void
-Tie_register::sync_features()
-{
- dir_i_ = get_feature("vdir");
-}
-
-
-void
-Tie_register::do_post_move_processing()
-{
- if (tie_p_ && get_staff_info().when() == end_mom_) {
- end_tie_p_ = tie_p_;
- end_req_l_ = req_l_;
- end_melodic_req_l_ = melodic_req_l_;
- tie_p_ =0;
- req_l_ =0;
- end_mom_ = -1;
- }
-}
-
-bool
-Tie_register::acceptable_request_b(Request*r)
-{
- return r->musical() && r->musical()->tie();
-}
-
-bool
-Tie_register::do_try_request(Request*r)
-{
- if(!acceptable_request_b(r))
- return false;
- if (req_l_ ) {
- return false;
- }
- req_l_ = r->musical()->tie();
- end_mom_ = r->parent_music_l_->time_int().length()
- + get_staff_info().when();
- return true;
-}
-
-void
-Tie_register::do_process_requests()
-{
- if (req_l_ && ! tie_p_) {
- tie_p_ = new Tie;
- }
-}
-
-void
-Tie_register::acknowledge_element(Score_elem_info i)
-{
- if (i.elem_l_->name() == Note_head::static_name()) {
- if (tie_p_) {
- tie_p_->set_head(-1, (Note_head*)i.elem_l_->item());
- melodic_req_l_ = i.req_l_->musical()->melodic();
- }
-
- if (end_tie_p_) {
- end_tie_p_->set_head(1, (Note_head*)i.elem_l_->item());
- if (!Melodic_req::compare ( *end_melodic_req_l_, *melodic_req_l_))
- end_tie_p_->same_pitch_b_ = true;
- announce_element(Score_elem_info(end_tie_p_,end_req_l_));
- }
- }
-}
-
-void
-Tie_register::do_pre_move_processing()
-{
- if (end_tie_p_) {
- if (dir_i_)
- end_tie_p_->dir_i_ = dir_i_;
-
- typeset_element(end_tie_p_);
- end_tie_p_ =0;
- end_req_l_ =0;
- }
-
-}
-
-Tie_register::~Tie_register()
-{
- if (tie_p_) {
- req_l_->warning("unended Tie");
- delete tie_p_;
- }
-}
-
-void
-Tie_register::set_feature(Feature f)
-{
- if (f.type_ == "vdir")
- dir_i_ = f.value_;
-}
-
-IMPLEMENT_STATIC_NAME(Tie_register);
-IMPLEMENT_IS_TYPE_B1(Tie_register,Request_register);
-ADD_THIS_REGISTER(Tie_register);
+++ /dev/null
-/*
- voicegroup.cc -- implement Voice_group_registers
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-#include "music-list.hh"
-#include "proto.hh"
-#include "plist.hh"
-#include "musical-request.hh"
-#include "voice-regs.hh"
-#include "voice-group-regs.hh"
-#include "register.hh"
-#include "command-request.hh"
-#include "debug.hh"
-#include "input-register.hh"
-#include "time-description.hh"
-
-
-Voice_group_registers::Voice_group_registers()
-{
- dir_i_ =0;
-}
-
-bool
-Voice_group_registers::do_try_request(Request*r_l)
-{
- Command_req* c_l = r_l->command();
- if (c_l&& c_l->groupfeature()) {
- Feature f;
- f.type_ = c_l->groupfeature()->type_str_;
- f.value_ = c_l->groupfeature()->value_str_;
- set_feature(f);
- return true;
- }
- return Register_group_register::do_try_request(r_l);
-}
-
-
-IMPLEMENT_STATIC_NAME(Voice_group_registers);
-IMPLEMENT_IS_TYPE_B1(Voice_group_registers,Register_group_register);
-
-void
-Voice_group_registers::do_print() const
-{
-#ifndef NPRINT
- Register_group_register::do_print();
-#endif
-}
-
-
-
-Scalar
-Voice_group_registers::get_feature(String f)
-{
- if (f == "vdir")
- return dir_i_;
- Register_group_register::get_feature(f);
-}
-
-ADD_THIS_REGISTER(Voice_group_registers);
+++ /dev/null
-/*
- voice-regs.cc -- implement Voice_registers
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "proto.hh"
-#include "plist.hh"
-#include "command-request.hh"
-#include "musical-request.hh"
-#include "voice-regs.hh"
-#include "register.hh"
-#include "debug.hh"
-
-
-ADD_THIS_REGISTER(Voice_registers);
-IMPLEMENT_IS_TYPE_B1(Voice_registers, Register_group_register);
-IMPLEMENT_STATIC_NAME(Voice_registers);
-
-bool
-Voice_registers::interpret_request_b(Request*r)
-{
- return try_request(r);
-}
-