+++ /dev/null
-/*
- barreg.hh -- declare Bar_register
-
- source file of the 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 {
- void split_bar(Bar *& pre, Bar * no, Bar * &post);
-public:
- Bar_req * bar_req_l_;
- Bar * bar_p_;
-
- virtual bool try_request(Request *req_l);
- virtual void process_request();
- virtual void do_pre_move_process();
- virtual void do_post_move_process();
- Bar_register(Complex_walker*);
-};
-
-#endif // BARREG_HH
+++ /dev/null
-
-/*
- clefitem.hh -- declare Clef_item
-
- (c) 1996,97 Han-Wen Nienhuys
-*/
-
-#ifndef CLEFITEM_HH
-#define CLEFITEM_HH
-#include "item.hh"
-
-
-struct Clef_item : Item {
- String type;
- int y_off;
-
- /// is this a change clef (smaller size)?
- bool change;
-
-
- /* *************** */
- const char * name() const;
- Clef_item();
- void read(Clef_register const&);
- void read(String);
- Molecule* brew_molecule_p()const;
-};
-
-#endif // CLEFITEM_HH
-
-
+++ /dev/null
-/*
- clef.hh -- part of 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_;
-public:
- int c0_position_i_;
- String clef_type_str_;
-
- /* ************** */
- virtual void process_request();
- virtual void do_pre_move_process();
- virtual bool try_request(Request*);
- Clef_register(Complex_walker*);
- void read_req(Clef_change_req*);
- bool set_type(String);
-};
-#endif // CLEF_HH
-
+++ /dev/null
-/*
- complexstaff.hh -- declare Complex_staff
-
- (c) 1996,1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#ifndef COMPLEXSTAF_HH
-#define COMPLEXSTAF_HH
-
-
-#include "key.hh"
-#include "staff.hh"
-#include "staffwalker.hh"
-
-///
-struct Complex_staff : Staff {
-
- /* *************** */
-
- virtual void set_output(PScore *);
- virtual Staff_walker *get_walker_p();
-};
-
-#endif // COMPLEXSTAF_HH
-
+++ /dev/null
-/*
- complexwalker.hh -- declare Complex_walker
-
- (c) 1996,97 Han-Wen Nienhuys
-*/
-
-#ifndef COMPLEXWALKER_HH
-#define COMPLEXWALKER_HH
-
-#include "proto.hh"
-#include "assoc.hh"
-#include "staffwalker.hh"
-#include "staffeleminfo.hh"
-#include "plist.hh"
-
-/**
- A staff walker which uses registers to decide what to print
- */
-class Complex_walker: public Staff_walker {
- bool try_command_request(Command_req *req_l);
- void do_change_group( Voice * v, String group_id_str);
- void do_announces();
- void try_request(Request*req);
- int c0_position_i_;
-
- Array<Item*> prebreak_item_p_arr_;
- Array<Item*> nobreak_item_p_arr_;
- Array<Item*> postbreak_item_p_arr_;
-
-public:
-
- IPointerList<Voice_registers *> voice_reg_list_;
- IPointerList<Voice_group_registers*> group_reg_list_;
- Assoc<Voice *, Voice_group_registers *> voice_group_map_;
-
- Array<Staff_elem_info> announce_info_arr_;
- Walker_registers *walk_regs_p_;
-
- /* *************** */
-
- Voice_registers *find_voice_reg(Voice*v_l)const;
- Voice_registers *get_voice_reg(Voice*v_l);
-
- /** search for voice_group containing #v_l#
-
- @return
- pointer if found, 0 if not found.
- */
- Voice_group_registers *find_voice_group(Voice* v_l)const;
-
- /// search. Create if necessary
- Voice_group_registers *get_voice_group(Voice* v_l);
- /** search for voice_group named #id#
-
- @return
- pointer if found, 0 if not found.
- */
- Voice_group_registers *find_voice_group(const char* id)const;
-
- /**
- search for voice_group named #id#, create if necessary
- */
- Voice_group_registers *get_voice_group(const char*);
-
- Array<Voice_registers *> get_voice_regs(Voice_group_registers *) const;
-
- void regs_process_requests();
- void typeset_breakable_item(Item * pre_p ,
- Item * nobreak_p, Item * post_p);
- void typeset_element(Staff_elem *elem_p);
- void announce_element(Staff_elem_info);
- virtual void process_requests();
- virtual void do_post_move();
- virtual void do_pre_move();
- /**
- @return the position of central c.
- */
- int c0_position_i() const;
-
- /**
- set the position of central c.
- @param the new position
- */
- void set_c0_position(int j);
- Complex_walker(Complex_staff*);
- ~Complex_walker();
-
- Complex_staff *staff();
-private:
-};
-
-
-#endif // COMPLEXWALKER_HH
-
-
+++ /dev/null
-/*
- directionalspanner.hh -- part of LilyPond
-
- (c) 1996,97 Han-Wen Nienhuys
-*/
-
-#ifndef DIRECTIONALSPANNER_HH
-#define DIRECTIONALSPANNER_HH
-
-#include "spanner.hh"
-
-/// a spanner which can be pointing "up" or "down"
-struct Directional_spanner : Spanner{
-
- /// -1 below heads, +1 above heads.
- int dir_i_;
-
- /// offset of "center" relative to left-column/0-pos of staff
- virtual Offset center() const=0;
- virtual void set_default_dir()=0;
- Directional_spanner();
-
-};
-
-#endif // DIRECTIONALSPANNER_HH
-
+++ /dev/null
-/*
- inputfile.hh -- declare Input_file
-
- source file of the LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#ifndef INPUT_FILE_HH
-#define INPUT_FILE_HH
-#include <FlexLexer.h>
-#include "proto.hh"
-#include "fproto.hh"
-#include "varray.hh"
-#include "string.hh"
-
-struct Input_file {
- istream* is;
- char const* defined_ch_c_l_;
- Source_file* sourcefile_l_;
- int line;
- String name;
-
- Input_file(String);
- ~Input_file();
-};
-
-#endif // INPUT_FILE_HH
+++ /dev/null
-/*
- inputmusic.hh -- part of LilyPond
-
- (c) 1996,97 Han-Wen Nienhuys
-*/
-
-#ifndef INPUTMUSIC_HH
-#define INPUTMUSIC_HH
-
-#include "plist.hh"
-#include "proto.hh"
-#include "voice.hh"
-#include "moment.hh"
-
-struct Voice_list : public PointerList<Voice*> {
- void translate_time(Moment dt);
-};
-
-/**
-
- A set voices.
- Input_music is anything that can simply be regarded as/converted to
- a set of voices "cooperating" or independant. It has some basic
- characteristics that real music has too:
-
- - it is rhythmic (it has a length, and can be translated horizontally)
- - a pitch (it can be transposed)
-
- */
-struct Input_music {
- virtual Voice_list convert()const=0;
- void check_plet(Voice_element* velt_l);
- virtual Moment length()const=0;
- virtual void translate_time(Moment dt)=0;
- virtual ~Input_music(){}
- virtual void print() const =0;
- virtual void set_default_group(String)=0;
- virtual bool find_plet_start_bo(char c, Moment& moment_r) = 0;
- virtual void set_plet_backwards(Moment& now_moment_r, Moment until_moment, int num_i, int den_i) = 0;
- // virtual void transpose(...) const =0;
-
-
- virtual Input_music *clone() const = 0;
- virtual Simple_music *simple() { return 0; }
-};
-
-/// Simple music consists of one voice
-struct Simple_music : Input_music {
- Voice voice_;
-
- /* *** */
- virtual Simple_music*simple() { return this; }
- void add(Voice_element*);
- virtual void set_default_group(String g) { voice_.set_default_group(g); }
- virtual Moment length()const;
- virtual Voice_list convert()const;
- virtual void translate_time(Moment dt);
- virtual void print() const;
- virtual bool find_plet_start_bo(char c, Moment& moment_r);
- virtual void set_plet_backwards(Moment& now_moment_r, Moment until_moment, int num_i, int den_i);
- virtual Input_music *clone() const {
- return new Simple_music(*this);
- }
-
-};
-
-/// Complex_music consists of multiple voices
-struct Complex_music : Input_music {
- IPointerList<Input_music*> elts;
- /* *************** */
- virtual void set_default_group(String g);
- void add(Input_music*);
- Complex_music();
- Complex_music(Complex_music const &);
- virtual void print() const ;
- void concatenate(Complex_music*);
- virtual bool find_plet_start_bo(char c, Moment& moment_r);
- virtual void set_plet_backwards(Moment& now_moment_r, Moment until_moment, int num_i, int den_i);
-
-};
-
-
-/**
- A voice like list of music.
-
- different music forms which start after each other ( concatenated,
- stacked "horizontally )
-
- */
-
-struct Music_voice : Complex_music {
-
-
- /* *************** */
- Moment length()const;
- virtual void translate_time(Moment dt);
- virtual Voice_list convert()const;
- void add_elt(Voice_element*);
- virtual Input_music *clone() const {
- return new Music_voice(*this);
- }
- virtual void print() const ;
-};
-
-/**
- Multiple musicstuff stacked on top of each other
- chord like :
-
- - different music forms which start at the same time ( stacked "vertically" )
-
- */
-struct Music_general_chord : Complex_music {
-
-
- /* *************** */
-
- virtual Moment length()const;
- virtual Voice_list convert()const;
- virtual void translate_time(Moment dt);
- void add_elt(Voice_element*);
- virtual Input_music *clone() const {
- return new Music_general_chord(*this);
- }
-
- virtual void print() const ;
-};
-
-struct Multi_voice_chord : Music_general_chord {
- void set_default_group(String);
- virtual Input_music *clone() const {
- return new Multi_voice_chord(*this);
- }
-};
-struct Voice_group_chord : Music_general_chord {
-
- virtual Input_music *clone() const {
- return new Voice_group_chord(*this);
- }
-};
-#endif // INPUTMUSIC_HH
+++ /dev/null
-/*
- inputscore.hh -- declare
-
- source file of the LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef INPUTSCORE_HH
-#define INPUTSCORE_HH
-
-#include "varray.hh"
-#include "proto.hh"
-#include "plist.hh"
-#include "string.hh"
-
-
-/// the total music def of one movement
-struct Input_score {
- /// defined where?
- const char* defined_ch_c_l_;
- int errorlevel_i_;
-
- /// paper_, staffs_ and commands_ form the problem definition.
- Paperdef *paper_p_;
- Midi_def* midi_p_;
- IPointerList<Input_staff*> staffs_;
-
- Input_music * score_wide_music_p_;
-
- /* *************************************************************** */
- Input_score();
- Input_score(Input_score const&);
-
- void add(Input_staff*);
- ~Input_score();
- /// construction
- void set(Paperdef*);
- void set(Midi_def* midi_p);
- void print() const;
- Score*parse();
- void set(Input_music*);
-};
-
-#endif
+++ /dev/null
-/*
- inputstaff.hh -- declare Input_staff
-
- (c) 1996,97 Han-Wen Nienhuys
-*/
-
-#ifndef INPUTSTAFF_HH
-#define INPUTSTAFF_HH
-
-#include "string.hh"
-#include "plist.hh"
-#include "varray.hh"
-#include "proto.hh"
-
-struct Input_staff {
-
- const char * defined_ch_c_l_;
- String type;
-
- IPointerList<Input_music*> music_;
- Input_music * score_wide_music_p_;
-
- /* *************** */
- ~Input_staff();
- void add(Input_music*m);
- Input_staff(Input_staff const&);
- Input_staff(String);
- void set_score_wide(Input_music*m);
- Staff* parse(Score*, Input_music *score_wide);
- void print() const;
-};
-
-
-#endif // INPUTSTAFF_HH
-
+++ /dev/null
-/*
- keyitem.hh -- part of LilyPond
-
- (c) 1996,97 Han-Wen Nienhuys
-*/
-
-#ifndef KEYITEM_HH
-#define KEYITEM_HH
-
-#include "item.hh"
-#include "varray.hh"
-
-
-/// An item which places accidentals at the start of the line
-struct Key_item : Item {
- Array<int> pitch;
- Array<int> acc;
- int c_position;
-
-
- /* *************** */
- const char * name() const;
- Key_item(int cposition);
- void add(int pitch, int acc);
- void read(const Key_register&);
- void set_c_position(int);
- void preprocess();
- Molecule* brew_molecule_p()const;
-};
-
-#endif // KEYITEM_HH
+++ /dev/null
-/*
- keyreg.hh -- declare Key_register
-
- source file of the 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_;
-
- virtual bool try_request(Request *req_l);
- virtual void process_request();
- virtual void do_pre_move_process();
- virtual void do_post_move_process();
- virtual void acknowledge_element(Staff_elem_info);
- Key_register(Complex_walker*);
-private:
-
- void read_req(Key_change_req * r);
-};
-
-#endif // KEYREG_HH
+++ /dev/null
-/*
- localkeyitem.hh -- part of LilyPond
-
- (c) 1996,97 Han-Wen Nienhuys
-*/
-
-#ifndef LOCALKEYITEM_HH
-#define LOCALKEYITEM_HH
-#include "item.hh"
-#include "varray.hh"
-
-struct Local_acc {
- int name , acc, octave;
- static int compare(Local_acc&, Local_acc&);
-};
-
-struct Local_key_item : Item {
- const char * name() const;
- Array<Local_acc> accs;
- Array<Item*> support_items_;
- int c0_position;
-
- /* *************** */
-
- Local_key_item(int c0position);
- void add(Item*);
- void add(int oct, int pitch, int acc);
- void add(Melodic_req*);
- void do_pre_processing();
- Molecule* brew_molecule_p()const;
-};
-#endif // LOCALKEYITEM_HH
-
+++ /dev/null
-/*
- localkeyreg.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"
-
-struct Local_key_register : Request_register {
- Local_key local_key_;
- Local_key_item* key_item_p_;
- const Key *key_c_l_;
- /* *************** */
- virtual void process_request();
- virtual void acknowledge_element(Staff_elem_info);
- virtual void do_pre_move_process();
- Local_key_register(Complex_walker*);
-};
-
-#endif // LOCALKEYREG_HH
+++ /dev/null
-//
-// lyricitem.hh -- part of LilyPond
-//
-// copyright 1997 Jan Nieuwenhuizen <jan@digicash.com>
-
-#ifndef LYRIC_ITEM_HH
-#define LYRIC_ITEM_HH
-
-#include "textitem.hh"
-
-struct Lyric_item : Text_item {
- /* *************** */
- Lyric_item(Lyric_req* lreq_l, int voice_count_i);
- virtual void do_pre_processing();
-};
-
-
-#endif // LYRIC_ITEM_HH //
-
+++ /dev/null
-/*
- meterreg.hh -- declare Meter_register
-
- source file of the LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef METERREG_HH
-#define METERREG_HH
-#include "register.hh"
-
-/**
- generate meters.
- */
-class Meter_register : public Request_register {
-public:
- Meter_change_req * meter_req_l_;
- Meter * meter_p_;
-
- virtual bool try_request(Request *req_l);
- virtual void process_request();
- virtual void do_pre_move_process();
- virtual void do_post_move_process();
- Meter_register(Complex_walker*);
-};
-#endif // METERREG_HH
+++ /dev/null
-/*
- mididef.hh -- declare
-
- source file of the LilyPond music typesetter
-
- (c) 1997 Jan Nieuwenhuizen <jan@digicash.com>
-*/
-
-
-#ifndef MIDIDEF_HH
-#define MIDIDEF_HH
-#include "proto.hh"
-#include "real.hh"
-#include "string.hh"
-#include "moment.hh"
-
-
-/**
- */
-struct Midi_def {
- /// output file name
- String outfile_str_;
-
- /// duration of whole note
- Real whole_seconds_f_;
-
- Midi_def();
- Midi_def(Midi_def const& midi_c_r);
- ~Midi_def();
-
- Real duration_to_seconds_f(Moment);
- int get_tempo_i( Moment moment );
- void set_tempo( Moment moment, int count_per_minute_i );
- void print() const;
-};
-
-#endif // MIDIDEF_HH //
-
+++ /dev/null
-//
-// midiitem.hh -- part of LilyPond
-//
-// copyright 1997 Jan Nieuwenhuizen <jan@digicash.com>
-
-#ifndef MIDI_ITEM_HH
-#define MIDI_ITEM_HH
-#include "string.hh"
-#include "proto.hh"
-
-struct Midi_item {
- /* *************** */
- static String i2varint_str( int i );
- virtual void output_midi( Midi_stream& midi_stream_r );
- virtual String str() = 0;
-};
-
-struct Midi_note : public Midi_item {
- /* *************** */
- int const c0_pitch_i_c_ = 60;
- Byte dynamic_byte_;
-
- /**
- Generate a note-event on a channel pitch.
-
- @param #melreq_l# is the pitch.
- */
- Midi_note( Melodic_req* melreq_l, int channel_i, bool on_b );
-
- virtual String str();
-
- int channel_i_;
- int on_b_;
- int pitch_i_;
-};
-
-struct Midi_duration : public Midi_item {
- /* *************** */
- Midi_duration( Real seconds_f );
-
- virtual String str();
-
- Real seconds_f_;
-};
-
-struct Midi_chunk : Midi_item {
- /* *************** */
- Midi_chunk();
-
- void add( String str );
- void set( String header_str, String data_str, String footer_str );
- virtual String str();
-
-private:
- String data_str_;
- String footer_str_;
- String header_str_;
-};
-
-struct Midi_header : Midi_chunk {
- /* *************** */
- Midi_header( int format_i, int tracks_i, int clocks_per_4_i );
-};
-
-struct Midi_tempo : Midi_item {
- /* *************** */
- Midi_tempo( int tempo_i );
-
- virtual String str();
-
- int tempo_i_;
-};
-
-struct Midi_track : Midi_chunk {
- /* *************** */
- int number_i_;
- Midi_track( int number_i );
-
- void add( int delta_time_i, String event );
-// void add( Moment delta_time_moment, Midi_item& mitem_r );
- void add( Moment delta_time_moment, Midi_item* mitem_l );
-};
-
-#endif // MIDI_ITEM_HH //
-
+++ /dev/null
-/*
- midioutput.hh -- declare Midi_output
-
- source file of the LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef MIDIOUTPUT_HH
-#define MIDIOUTPUT_HH
-#include "pscore.hh"
-
-struct Midi_output {
- Midi_stream* midi_stream_l_;
- Midi_output(Score* score_l, Midi_def* );
- void do_staff(Staff*st_l, int count);
-
- Midi_def* midi_l_;
-};
-#endif // MIDIOUTPUT_HH
+++ /dev/null
-//
-// midistream.hh -- part of LilyPond
-//
-// copyright 1997 Jan Nieuwenhuizen <jan@digicash.com>
-
-#ifndef MIDI_STREAM_HH
-#define MIDI_STREAM_HH
-
-#include <iostream.h>
-#include "string.hh"
-
-/// Midi output
-struct Midi_stream {
- ostream* os_p_;
- String filename_str_;
- int clocks_per_4_i_;
- int tracks_i_;
-
- Midi_stream( String filename_str, int tracks_i, int clocks_per_4_i_ );
- ~Midi_stream();
-
- Midi_stream& operator <<( String str );
- Midi_stream& operator <<( Midi_item& mitem_r );
- Midi_stream& operator <<( int i );
-
- void header();
- void open();
-
-//private:
-// Midi_stream(Midi_stream const&);
-};
-#endif // MIDI_STREAM_HH //
+++ /dev/null
-/*
- midiwalker.hh -- declare Midi_walker
-
- (c) 1996,97 Han-Wen Nienhuys, Jan Nieuwenhuizen <jan@digicash.com>
- */
-
-#ifndef MIDIWALKER_HH
-#define MIDIWALKER_HH
-
-#include "proto.hh"
-#include "grouping.hh"
-#include "staffwalker.hh"
-#include "pcursor.hh"
-#include "pqueue.hh"
-
-
-/**
- a simple walker which collects midi stuff, and then outputs.
-
- Should derive from Staff_walker
- */
-class Midi_walker : public PCursor<Staff_column*> {
- Midi_track *track_l_;
- PQueue<Melodic_req*, Moment> stop_notes;
- Moment last_moment_;
-
- /* *************** */
- void do_stop_notes(Moment);
-
- void output_event(Midi_item&, Moment);
-public:
-
- Midi_walker(Staff*, Midi_track*);
- void process_requests();
- ~Midi_walker();
-};
-
-
-#endif // MIDIWALKER_HH
-
-
+++ /dev/null
-/*
- paperdef.hh -- declare
-
- source file of the LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef PAPERDEF_HH
-#define PAPERDEF_HH
-#include "proto.hh"
-#include "real.hh"
-#include "string.hh"
-#include "moment.hh"
-
-
-/** symbols, dimensions and constants
-
- This struct takes care of all kinds of symbols, dimensions and
- constants. Most of them are related to the point-size of the fonts,
- so therefore, the lookup table for symbols is also in here.
-
- see TODO
- */
-struct Paperdef {
- Lookup *lookup_p_;
- String outfile;
-
- Real linewidth;
-
- /// how much space does a whole note take (ideally?)
- Real whole_width;
-
- /// ideal = geometric_ ^ log2(duration)
- Real geometric_;
-
- /* *************** */
- void reinit();
- Paperdef(Lookup*);
- void set(Lookup*);
- ~Paperdef();
- Paperdef(Paperdef const&);
- Real interline()const;
- Real internote()const;
- Real rule_thickness()const;
- Real standard_height()const;
- Real note_width() const;
- void print() const;
- Real duration_to_dist(Moment);
-};
-
-#endif // PAPERDEF_HH
-
+++ /dev/null
-/*
- sccol.hh -- part of LilyPond
-
- (c) 1996,97 Han-Wen Nienhuys
-*/
-
-#ifndef SCCOL_HH
-#define SCCOL_HH
-#include "proto.hh"
-#include "varray.hh"
-#include "moment.hh"
-
-
-/**
-
- When typesetting hasn't started on PScore yet, the columns which
- contain data have a rhythmical position. Score_column is the type
- with a rhythmical time attached to it. The calculation of
- idealspacing is done with data in these columns. (notably: the
- #durations# field)
-
- */
-
-class Score_column {
- friend class Score;
- friend class Score_walker;
-
- bool musical_b_;
- Moment when_;
- void set_breakable();
-public:
- /// indirection to column
- PCol * pcol_l_;
-
- /// length of notes/rests in this column
- Array<Moment> durations;
-
- /* *************** */
-
- Moment when() { return when_; }
- Score_column(Moment when);
- static int compare(Score_column & c1, Score_column &c2);
- void add_duration(Moment );
- void preprocess();
- bool breakable_b();
- bool musical_b() { return musical_b_; }
- bool used_b();
- void print() const;
-
-
-};
-
-instantiate_compare(Score_column&, Score_column::compare);
-
-#endif // SCCOL_HH
-
-
-
-
+++ /dev/null
-/*
- scorewalker.hh -- declare Score_walker
-
- source file of the LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef SCOREWALKER_HH
-#define SCOREWALKER_HH
-#include "pcursor.hh"
-#include "proto.hh"
-#include "varray.hh"
-
-
-/**
- walk through the score_columns, and while doing so, walk all staffs in a score.
- */
-class Score_walker : public PCursor<Score_column *>
-{
- Score* score_l_;
- /// walkers for the individual staves.
- Array<Staff_walker *> walker_p_arr_;
- Array<Staff_walker *> disallow_break_walk_l_arr;
- int disallow_break_count_;
- void reinit();
-public:
- void allow_break(Staff_walker*w);
- Score_walker(Score*);
- ~Score_walker();
- Moment when();
- void operator++(int);
- /// process staff walkers.
- void process();
-};
-#endif // SCOREWALKER_HH
+++ /dev/null
-/*
- scriptdef.hh -- part of LilyPond
-
- (c) 1996,97 Han-Wen Nienhuys
-*/
-
-#ifndef SCRIPTDEF_HH
-#define SCRIPTDEF_HH
-#include "string.hh"
-struct Script_def{
- int stemdir;
- int staffdir;
-
- bool invertsym;
- String symidx;
-
- /* *************** */
- int compare(Script_def const &);
- void print() const;
- Script_def(String, int, int ,bool);
-};
-
-
-#endif // SCRIPTDEF_HH
-
+++ /dev/null
-/*
- scriptreg.hh -- part of LilyPond
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef SCRIPTREG_HH
-#define SCRIPTREG_HH
-
-#include "register.hh"
-
-
-struct Script_register : Request_register {
- Script * script_p_;
- int dir_i_;
- /* *************** */
- void set_dir(int dir_i_);
- Script_register(Complex_walker*);
- virtual bool try_request(Request*);
- virtual void process_request();
- virtual void acknowledge_element(Staff_elem_info);
- virtual void do_pre_move_process();
-};
-
-#endif // SCRIPTREG_HH
+++ /dev/null
-/*
- slurreg.hh -- declare Slur_register
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef SLURREG_HH
-#define SLURREG_HH
-
-#include "register.hh"
-
-struct Slur_register : Request_register {
- Array<Slur_req*> requests_arr_;
- Array<Slur *> slur_l_stack_;
- Array<Slur*> end_slur_l_arr_;
- int dir_i_;
- /* *************** */
- ~Slur_register();
- Slur_register(Complex_walker*);
- virtual bool try_request(Request*);
- virtual void process_request();
- virtual void acknowledge_element(Staff_elem_info);
- virtual void do_pre_move_process();
- virtual void set_dir(int);
-};
-
-#endif // SLURREG_HH
+++ /dev/null
-//
-// sourcefile.hh -- declare Source_file
-//
-// copyright 1997 Jan Nieuwenhuizen <jan@digicash.com>
-
-#ifndef SOURCE_FILE_HH
-#define SOURCE_FILE_HH
-
-/// class for reading and mapping a file.
-class Source_file
-{
-public:
- /**
- @return path to opened file.
- */
- // jcn: ugh! filename gets changed!, why?
- Source_file( String& filename_str );
- virtual ~Source_file();
-
- char const* ch_c_l();
- virtual String error_str( char const* pos_ch_c_l );
- istream* istream_l();
- bool in_b( char const* pos_ch_c_l );
- off_t length_off();
- virtual int line_i( char const* pos_ch_c_l );
- String name_str();
- String file_line_no_str( char const* ch_c_l );
-
-private:
- void close();
- void map();
- void open();
- void unmap();
-
- istream* istream_p_;
- int fildes_i_;
- String name_str_;
- off_t size_off_;
- caddr_t data_caddr_;
-};
-
-#endif // SOURCE_FILE_HH //
+++ /dev/null
-/*
- staffcolumn.hh -- declare Staff_column
-
- (c) 1996,97 Han-Wen Nienhuys
-*/
-
-#ifndef STAFFCOLUMN_HH
-#define STAFFCOLUMN_HH
-#include "proto.hh"
-#include "varray.hh"
-#include "moment.hh"
-
-/// store simultaneous requests
-class Staff_column {
-
- Staff_column(Staff_column const&);
-
-public:
- Array<Request*> musicalreq_l_arr_;
- Array<Request*> commandreq_l_arr_;
- Staff * staff_l_;
-
- /// fields to collect timing data vertically.
- Array<Timing_req*> timing_req_l_arr_;
- Score_column *musical_column_l_, *command_column_l_;
-
- /* *************** */
-
- Staff_column();
-
- Moment when() const;
- void set_cols(Score_column *c1, Score_column *c2);
- void add(Voice_element*ve);
- void OK() const;
- ~Staff_column();
- void typeset_breakable_items(Array<Item *> &pre_p_arr,
- Array<Item *> &nobreak_p_arr,
- Array<Item *> &post_p_arr);
- void typeset_musical_item(Item *i);
-protected:
- void setup_one_request(Request*);
-};
-
-
-
-#endif // STAFFCOLUMN_HH
-
+++ /dev/null
-/*
- staffelem.hh -- part of LilyPond
-
- (c) 1996,97 Han-Wen Nienhuys
-*/
-
-#ifndef STAFFELEM_HH
-#define STAFFELEM_HH
-#include "varray.hh"
-#include "proto.hh"
-#include "offset.hh"
-#include "molecule.hh"
-
-/** Both Spanner and Item are Staff_elem's. Most Staff_elem's depend
- on other Staff_elem's, eg, Beam needs to know and set direction of
- Stem. So the Beam has to be calculated *before* Stem. This is
- accomplished with the dependencies field of struct Staff_elem.
-
- */
-struct Staff_elem {
- enum Status {
- ORPHAN, // not yet added to pstaff
- VIRGIN, // added to pstaff
- PRECALCING,
- PRECALCED, // calcs before spacing done
- POSTCALCING,
- POSTCALCED, // after spacing calcs done
- OUTPUT, // molecule has been output
- } status;
-
- /// the pstaff it is in
- PStaff *pstaff_l_;
-
- /* *************** */
- Staff_elem(Staff_elem const&);
- String TeXstring () const ;
- virtual void print() const;
- virtual Interval width() const;
- virtual Interval height() const;
- Paperdef *paper() const;
- virtual ~Staff_elem();
- Staff_elem();
-
- void translate(Offset);
- void add_processing();
- void pre_processing();
- void post_processing();
- void molecule_processing();
- virtual const char *name() const; // to find out derived classes.
- virtual Spanner* spanner() { return 0; }
- virtual Item * item() { return 0; }
- void add_depedency(Staff_elem* );
- void substitute_dependency(Staff_elem* old, Staff_elem * newdep);
-protected:
-
- /// do printing of derived info.
- virtual void do_print() const=0;
- /// generate the molecule
- virtual Molecule* brew_molecule_p()const=0;
- ///executed directly after the item is added to the PScore
- virtual void do_add_processing();
- /// do calculations before determining horizontal spacing
- virtual void do_pre_processing();
-
- /// do calculations after determining horizontal spacing
- virtual void do_post_processing();
-
- Array<Staff_elem*> dependants;
-
-private:
- /// member: the symbols
- Molecule *output; // should scrap, and use temp var?
-
-
- /**
- This is needed, because #output# may still be
- NULL.
- */
- Offset offset_;
- Array<Staff_elem*> dependencies;
-};
-#define NAME_METHOD(c) const char *c::name()const{ return #c; } struct c
-#endif // STAFFELEM_HH
-
+++ /dev/null
-/*
- staffeleminfo.hh -- declare Staff_elem_info
-
- source file of the LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef STAFFELEMINFO_HH
-#define STAFFELEMINFO_HH
-
-#include "proto.hh"
-
-/// data container.
-struct Staff_elem_info {
- Staff_elem * elem_p_;
- Request*req_l_;
- const Voice * voice_l_;
- Voice_group_registers * group_regs_l_;
- Request_register * origin_reg_l_;
-
- /* *** */
- Staff_elem_info(Staff_elem*, Request*, Request_register*);
- Staff_elem_info();
-};
-
-#endif // STAFFELEMINFO_HH
+++ /dev/null
-/*
- staffwalker.hh -- declare Staff_walker
-
- (c) 1996,97 Han-Wen Nienhuys
-*/
-
-#ifndef STAFFWALKER_HH
-#define STAFFWALKER_HH
-
-#include "proto.hh"
-#include "timedescription.hh"
-#include "pcursor.hh"
-
-/**
- manage run-time info when walking staffcolumns such as: key,
- meter, pending beams & slurs
- */
-struct Staff_walker : public PCursor<Staff_column*> {
- Staff * staff_l_;
- PScore * pscore_l_;
- Score_walker *score_walk_l_;
- Time_description time_;
- Rhythmic_grouping *default_grouping;
-
- /* *************** */
-
- Moment when() const;
- virtual ~Staff_walker();
- Staff_walker(Staff*, PScore*);
- void process() ;
-
- void operator++(int);
- void allow_break();
-
-protected:
- /// every time before ++ is called
- virtual void do_pre_move(){}
- /// every time after ++ is called
- virtual void do_post_move(){}
- virtual void process_requests()=0;
-private:
- void process_timing_reqs();
- Staff_walker(Staff_walker const&);
-};
-
-#endif // STAFFWALKER_HH
-
+++ /dev/null
-/*
- stembeamreg.hh -- part of LilyPond
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef STEMBEAMREG_HH
-#define STEMBEAMREG_HH
-#include "register.hh"
-
-struct Stem_beam_register : 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_;
-
- /* *************** */
- Stem_beam_register(Complex_walker*);
- ~Stem_beam_register();
- void set_dir(int dir_i_);
- virtual bool try_request(Request*);
- virtual void process_request();
- virtual void acknowledge_element(Staff_elem_info);
- virtual void do_pre_move_process();
- virtual void do_post_move_process();
-};
-#endif // STEMBEAMREG_HH
+++ /dev/null
-/*
- textdef.hh -- part of LilyPond
-
- (c) 1996,97 Han-Wen Nienhuys
-*/
-
-#ifndef TEXTDEF_HH
-#define TEXTDEF_HH
-
-#include "string.hh"
-#include "proto.hh"
-
-struct Text_def {
- int align_i_;
- String text_str_;
- String style_str_;
- char const* defined_ch_c_l_;
-
-
- /* ****************/
- virtual ~Text_def() {};
- bool compare(const Text_def&);
- Text_def();
- virtual void print() const;
- virtual Atom create_atom(Paperdef*) const;
-};
-
-#endif // TEXTDEF_HH
-
+++ /dev/null
-/*
- textreg.hh -- part of LilyPond
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef TEXTREG_HH
-#define TEXTREG_HH
-#include "register.hh"
-
-struct Text_register : Request_register{
- Text_item * text_p_;
- int dir_i_;
- /* *************** */
- void set_dir(int dir_i);
- Text_register(Complex_walker*);
- virtual bool try_request(Request*);
- virtual void process_request();
- virtual void do_pre_move_process();
-};
-
-#endif // TEXTREG_HH
+++ /dev/null
-/*
- moment.hh -- part of LilyPond
-
- (c) 1996,97 Han-Wen Nienhuys
-*/
-
-#ifndef tdes_HH
-#define tdes_HH
-
-#include "moment.hh"
-
-/// full info on where we are
-struct Time_description {
- Moment when_;
-
- /// if true, no bars needed, no reduction of whole_in_measure
- bool cadenza_b_;
-
- /// current measure info
- Moment whole_per_measure_;
-
- /// where am i
- Moment whole_in_measure_;
-
- /// how long is one beat?
- Moment one_beat_;
-
- /// idem
- int bars_i_;
-
- /* *************** */
- void set_cadenza(bool);
- void OK() const;
- Time_description();
- void add(Moment dt);
- String str()const;
- void print() const;
- void setpartial(Moment p);
- Moment barleft();
- void set_meter(int,int);
- static int compare (Time_description&, Time_description&);
-};
-
-#include "compare.hh"
-
-
-instantiate_compare(Time_description&,Time_description::compare);
-
-#endif // Time_description_HH
-
+++ /dev/null
-#ifndef TSTREAM__HH
-#define TSTREAM__HH
-
-#include <iostream.h>
-#include "string.hh"
-
-
-/** TeX output.
- Use this class for writing to a TeX file.
- It counts braces to prevent nesting errors, and
- it will add a comment sign before each newline.
- */
-struct Tex_stream {
- bool outputting_comment;
- ostream *os;
- int nest_level;
-
- /// open a file for writing
- Tex_stream(String filename);
- void header();
- /// delegate conversion to string class.
- Tex_stream &operator<<(String);
-
- /// close the file
- ~Tex_stream();
-private:
- Tex_stream(Tex_stream const&);
-};
-#endif
+++ /dev/null
-/*
- voicegroupregs.hh -- declare
-
- source file of the LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef VOICEGROUPREGS_HH
-#define VOICEGROUPREGS_HH
-
-#include "registergroup.hh"
-
-struct Voice_group_registers : Register_group {
- String group_id_str_;
- Complex_walker * walk_l_;
-
- /* *************** */
- void set_dir(int i);
- static bool acceptable_request_b(Request*);
-
- void acknowledge_element(Staff_elem_info info);
- Voice_group_registers(Complex_walker*, String id = "");
- bool try_request(Request*);
-};
-#endif // VOICEGROUPREGS_HH
+++ /dev/null
-/*
- voiceregs.hh -- declare Voice_registers
-
- source file of the LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef VOICEREGS_HH
-#define VOICEREGS_HH
-
-#include "registergroup.hh"
-
-struct Voice_registers : Register_group {
- Voice *voice_l_;
-
- /* *************** */
-
- static bool acceptable_request_b(Request*);
- virtual void acknowledge_element(Staff_elem_info info);
-
- Voice_registers(Complex_walker*,Voice*);
-};
-
-
-#endif // VOICEREGS_HH
+++ /dev/null
-/*
- barreg.cc -- implement Bar_register
-
- source file of the LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "barreg.hh"
-#include "bar.hh"
-#include "commandrequest.hh"
-#include "complexwalker.hh"
-#include "scorecolumn.hh"
-
-
-Bar_register::Bar_register(Complex_walker*w)
- : Request_register(w)
-{
- do_post_move_process();
-}
-
-bool
-Bar_register::try_request(Request*r_l)
-{
- if (!r_l->command()->bar())
- return false;
-
- assert(!bar_req_l_);
- bar_req_l_ = r_l->command()->bar();
-
- return true;
-}
-
-void
-Bar_register::process_request()
-{
-
- if (bar_req_l_ ) {
- bar_p_ = new Bar(bar_req_l_->type_str_);
- } else if (!walk_l_->time_.whole_in_measure_) {
- bar_p_ = new Bar("|");
- }
-
- if (bar_p_){
- walk_l_->allow_break();
- announce_element(Staff_elem_info(bar_p_, bar_req_l_, this) );
- }
-}
-
-void
-Bar_register::split_bar(Bar *& pre, Bar * no, Bar * &post)
-{
- String s= no->type;
- if (s == ":|:") {
- pre = new Bar(":|");
- post = new Bar("|:");
- }else if (s=="|:") {
- post = new Bar(s);
- } else {
- pre = new Bar(*no);
- }
-}
-
-void
-Bar_register::do_pre_move_process()
-{
- if (bar_p_) {
- Bar * post_p =0;
- Bar * pre_p =0;
- split_bar(pre_p, bar_p_, post_p);
-
- typeset_breakable_item(pre_p, bar_p_, post_p);
- bar_p_ =0;
- }
-}
-
-void
-Bar_register::do_post_move_process()
-{
- bar_req_l_ = 0;
- bar_p_ =0;
-}
+++ /dev/null
-/*
- clefitem.cc -- implement Clef_item
-
- source file of the LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "clefitem.hh"
-#include "string.hh"
-#include "molecule.hh"
-#include "paperdef.hh"
-#include "lookup.hh"
-#include "clefreg.hh"
-
-NAME_METHOD(Clef_item);
-
-Clef_item::Clef_item()
-{
- change = true;
- read("violin");
-}
-
-void
-Clef_item::read(String t)
-{
- type = t;
- if (type == "violin")
- y_off = 2;
- if (type == "alto")
- y_off = 4;
- if (type == "tenor")
- y_off = 6;
- if (type == "bass")
- y_off = 6;
-}
-void
-Clef_item::read(Clef_register const &k)
-{
- read(k.clef_type_str_);
-}
-
-Molecule*
-Clef_item::brew_molecule_p()const
-{
- String t = type;
- if (change)
- t += "_change";
- Symbol s = paper()->lookup_p_->clef(t);
- Molecule*output = new Molecule(Atom(s));
- output->translate(Offset(0, paper()->internote() * y_off));
- return output;
-}
-
+++ /dev/null
-/*
- clef.cc -- implement Clef_register
-
- source file of the LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>,
- Mats Bengtsson <matsb@s3.kth.se>
-*/
-
-#include "clefreg.hh"
-#include "clefitem.hh"
-#include "debug.hh"
-#include "commandrequest.hh"
-#include "timedescription.hh"
-#include "complexwalker.hh"
-#include "staffcolumn.hh"
-
-Clef_register::Clef_register(Complex_walker*w)
- : Request_register(w)
-{
- clef_p_ = 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;
- walk_l_->set_c0_position(c0_position_i_);
- return true;
-}
-
-void
-Clef_register::read_req(Clef_change_req*c_l)
-{
- if (!set_type(c_l->clef_str_))
- error("unknown clef type ", c_l->defined_ch_c_l_);
-}
-
-bool
-Clef_register::try_request(Request * r_l)
-{
-
- Command_req* creq_l= r_l->command();
- if (!creq_l || !creq_l->clefchange())
- return false;
-
- accepted_req_arr_.push(creq_l);
- // do it now! Others have to read c0_pos.
- read_req(creq_l->clefchange());
- return true;
-}
-
-void
-Clef_register::process_request()
-{
- const Time_description *time_l = &walk_l_->time_;
- if (!accepted_req_arr_.size() &&
- (!time_l->whole_in_measure_|| !time_l->when_)) {
-
- clef_p_ = new Clef_item;
- clef_p_->change = false;
- } else if (accepted_req_arr_.size()) {
- clef_p_ = new Clef_item;
- clef_p_->change = true;
- }
- if (clef_p_) {
- clef_p_->read(*this);
-// announce_element(Staff_elem_info(clef_p_,
-// accepted_req_arr_[0], this));
- }
-}
-
-void
-Clef_register::do_pre_move_process()
-{
- if (!clef_p_)
- return;
- if (clef_p_->change) {
- typeset_breakable_item(new Clef_item(*clef_p_),
- clef_p_, new Clef_item(*clef_p_) );
- } else {
- typeset_breakable_item(0, 0, clef_p_);
- }
- clef_p_ = 0;
-}
-
+++ /dev/null
-#include "debug.hh"
-#include "complexstaff.hh"
-#include "complexwalker.hh"
-#include "score.hh"
-#include "pscore.hh"
-#include "staffsym.hh"
-#include "pscore.hh"
-#include "bar.hh"
-#include "meter.hh"
-#include "scorecolumn.hh"
-#include "commandrequest.hh"
-
-const NO_LINES = 5;
-
-/** Aside from putting fields right, this generates the staff symbol.
- */
-void
-Complex_staff::set_output(PScore* pscore_l )
-{
- pstaff_l_ = new PStaff(pscore_l);
- pscore_l_ = pscore_l;
- pscore_l_->add(pstaff_l_);
-
- Staff_symbol *span_p = new Staff_symbol(NO_LINES);
-
- Score_column* col_last
- =score_l_->find_col(score_l_->last(), false);
- Score_column* col_first=
- score_l_->find_col(0, false);
-
- span_p->set_extent(col_first->pcol_l_->postbreak_p_,
- col_last->pcol_l_->prebreak_p_);
-
- pscore_l_->typeset_spanner(span_p, pstaff_l_);
-}
-
-
-Staff_walker *
-Complex_staff::get_walker_p()
-{
- return new Complex_walker(this);
-}
+++ /dev/null
-/*
- complexwalker.cc -- implement Complex_walker
-
- source file of the LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "associter.hh"
-#include "script.hh"
-#include "musicalrequest.hh"
-#include "staffcolumn.hh"
-#include "voice.hh"
-#include "pscore.hh"
-#include "complexstaff.hh"
-#include "debug.hh"
-#include "voicegroupregs.hh"
-#include "voiceregs.hh"
-#include "complexwalker.hh"
-#include "misc.hh"
-#include "commandrequest.hh"
-#include "walkregs.hh"
-
-
-void
-Complex_walker::announce_element(Staff_elem_info info)
-{
- info.group_regs_l_ = find_voice_group((Voice*)info.voice_l_);
- announce_info_arr_.push(info);
-}
-
-void
-Complex_walker::do_announces()
-{
- Request dummy_req;
- for (int i = 0; i < announce_info_arr_.size(); i++){
- Staff_elem_info info = announce_info_arr_[i];
-
- if (!info.req_l_)
- info.req_l_ = &dummy_req;
-
- walk_regs_p_->acknowledge_element(info);
- for (iter_top(voice_reg_list_,j); j.ok(); j++) {
- j->acknowledge_element(info);
- }
- for (iter_top ( group_reg_list_, j); j.ok(); j++) {
- j->acknowledge_element(info);
- }
- }
-}
-
-Voice_registers *
-Complex_walker::find_voice_reg(Voice*v_l)const
-{
- for (iter_top(voice_reg_list_, i); i.ok(); i++) {
- if (i->voice_l_ == v_l)
- return i;
- }
- return 0;
-}
-
-Voice_registers*
-Complex_walker::get_voice_reg(Voice*v_l)
-{
- Voice_registers *regs_p=find_voice_reg(v_l);
- if (regs_p)
- return regs_p;
-
- regs_p = new Voice_registers(this,v_l);
- voice_reg_list_.bottom().add (regs_p);
- return regs_p;
-}
-
-Voice_group_registers *
-Complex_walker::find_voice_group(Voice* v_l)const
-{
- if (!voice_group_map_.elt_query(v_l))
- return 0;
- else return voice_group_map_[v_l];
-}
-
-Voice_group_registers *
-Complex_walker::find_voice_group(const char *id)const
-{
- for (iter_top(group_reg_list_, i); i.ok(); i++)
- if (i->group_id_str_ == id)
- return i;
- return 0;
-}
-
-
-Voice_group_registers *
-Complex_walker::get_voice_group(Voice *v_l)
-{
- Voice_group_registers *group_p = find_voice_group(v_l);
- if (group_p)
- return group_p;
-
- group_p = new Voice_group_registers(this);
- group_reg_list_.bottom().add(group_p);
- voice_group_map_[v_l] = group_p;
- return group_p;
-}
-
-
-Voice_group_registers *
-Complex_walker::get_voice_group(const char* id)
-{
- Voice_group_registers *group_p = find_voice_group(id);
- if (group_p)
- return group_p;
- group_p = new Voice_group_registers(this,id);
- group_reg_list_.bottom().add(group_p);
- return group_p;
-}
-
-void
-Complex_walker::do_change_group(Voice * v, String group_id_str)
-{
- voice_group_map_[v] = get_voice_group(group_id_str);
-}
-
-bool
-Complex_walker::try_command_request(Command_req *req_l)
-{
- bool b=false;
- Voice *voice_l = (Voice*)req_l->elt_l_->voice_l_; // ugh
- if (req_l->groupchange()){
- do_change_group(voice_l, req_l->groupchange()->newgroup_str_);
- b|= true;
- } else if(req_l->groupfeature()) {
- Voice_group_registers* reg_l = get_voice_group(voice_l);
- b |= reg_l->try_request(req_l);
- } else {
- b |= walk_regs_p_->try_request(req_l);
- }
- return b;
-}
-
-void
-Complex_walker::try_request(Request*req)
-{
- bool b=false;
- Voice *voice_l = (Voice*)req->elt_l_->voice_l_; // ahh. This sux
-
- if (req->command()) {
- b = try_command_request(req->command());
- } else if (Voice_registers::acceptable_request_b(req)) {
- Voice_registers *vregs_l = get_voice_reg(voice_l);
- b = vregs_l->try_request(req);
- } else if (Voice_group_registers::acceptable_request_b(req)){
- Voice_group_registers* reg_l = get_voice_group(voice_l);
- b = reg_l->try_request(req);
- }
-
- if (!b)
- warning("junking request: " + String(req->name()),
- req->defined_ch_c_l_);
-}
-
-void
-Complex_walker::process_requests()
-{
- Staff_column*c =ptr();
-
- for (int i=0; i < c->commandreq_l_arr_.size(); i++) {
- try_request(c->commandreq_l_arr_[i]);
- }
-
- for (int i=0; i < c->musicalreq_l_arr_.size(); i++) {
- try_request(c->musicalreq_l_arr_[i]);
- }
-
- regs_process_requests();
- do_announces();
-}
-
-void
-Complex_walker::regs_process_requests()
-{
- walk_regs_p_->process_requests();
- for (iter_top(voice_reg_list_, j); j.ok(); j++) {
- j->process_requests();
- }
- for (iter_top(group_reg_list_, j); j.ok(); j++)
- j->process_requests();
-}
-
-void
-Complex_walker::typeset_element(Staff_elem *elem_p)
-{
- if (!elem_p)
- return;
- if (elem_p->spanner())
- pscore_l_->typeset_spanner(elem_p->spanner(), staff()->pstaff_l_);
- else
- ptr()->typeset_musical_item(elem_p->item());
-}
-
-Complex_walker::Complex_walker(Complex_staff*s)
- : Staff_walker(s, s->pstaff_l_->pscore_l_)
-{
- walk_regs_p_ = new Walker_registers(this);
- do_post_move();
-}
-
-
-Complex_walker::~Complex_walker()
-{
-}
-
-int
-Complex_walker::c0_position_i()const
-{
- return c0_position_i_;
-}
-
-void
-Complex_walker::set_c0_position(int p)
-{
- c0_position_i_ =p;
-}
-
-Complex_staff*
-Complex_walker::staff()
-{
- return (Complex_staff*) staff_l_;
-}
-
-
-void
-Complex_walker::do_pre_move()
-{
- walk_regs_p_->pre_move_processing();
- for (iter_top(voice_reg_list_,i); i.ok(); i++) {
- i->pre_move_processing();
- }
- for (iter_top (group_reg_list_, j); j.ok(); j++)
- j->pre_move_processing();
-
- ptr()->typeset_breakable_items(prebreak_item_p_arr_,
- nobreak_item_p_arr_,
- postbreak_item_p_arr_);
-}
-
-void
-Complex_walker::do_post_move()
-{
- walk_regs_p_->post_move_processing();
- for (iter_top(voice_reg_list_,i); i.ok(); i++) {
- i->post_move_processing();
- }
- announce_info_arr_.set_size(0);
- for (iter_top (group_reg_list_, j); j.ok(); j++)
- j->post_move_processing();
-}
-
-Array<Voice_registers*>
-Complex_walker::get_voice_regs(Voice_group_registers* group_regs_l) const
- return l_arr;
-{
- for (Assoc_iter<Voice*,Voice_group_registers*> i(voice_group_map_);
- i.ok(); i++) {
- if (i.val() == group_regs_l)
- l_arr.push(find_voice_reg(i.key()));
- }
-}
-
-void
-Complex_walker::typeset_breakable_item(Item * pre_p , Item * nobreak_p,
- Item * post_p)
-{
- if (pre_p)
- prebreak_item_p_arr_.push(pre_p);
- if (nobreak_p)
- nobreak_item_p_arr_.push(nobreak_p);
- if (post_p)
- postbreak_item_p_arr_.push(post_p);
-}
+++ /dev/null
-#include "directionalspanner.hh"
-
-Directional_spanner::Directional_spanner()
-{
- dir_i_ = 0;
-}
+++ /dev/null
-/*
- inputfile.cc -- implement Input_file
-
- source file of the LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl> Jan Nieuwenhuizen <jan@digicash.com>
-*/
-
-#include <iostream.h>
-#include <strstream.h>
-#include "proto.hh"
-#include "plist.hh"
-#include "inputfile.hh"
-#include "debug.hh"
-#include "sourcefile.hh"
-#include "binary-source-file.hh"
-#include "source.hh"
-
-Input_file::Input_file(String s)
-{
- name = s;
- line = 1;
- String pf(s);
- if ( pf == "" ) {
- is = &cin;
- defined_ch_c_l_ = 0;
- sourcefile_l_ = 0;
- }
- else {
- Source_file* sourcefile_p = 0;
- // ugh, very dirty, need to go away
- if ( ( pf.right_str( 3 ).lower_str() == "mid" ) || ( pf.right_str( 4 ).lower_str() == "midi" ) )
- sourcefile_p = new Binary_source_file( pf );
- else
- sourcefile_p = new Source_file( pf );
- source_l_g->add( sourcefile_p );
- sourcefile_l_ = sourcefile_p;
- is = sourcefile_l_->istream_l();
- defined_ch_c_l_ = sourcefile_l_->ch_c_l();
- }
- cout << "[" << pf << flush;
-}
-
-Input_file::~Input_file()
-{
- cout << "]" << flush;
-}
+++ /dev/null
-#include "debug.hh"
-#include "inputmusic.hh"
-#include "voice.hh"
-#include "musicalrequest.hh"
-
-void
-Input_music::check_plet(Voice_element* velt_l)
-{
- for (iter_top(velt_l->reqs,i); i.ok(); i++)
- if ( i->plet() ) {
- Moment start_moment = 0;
- if ( !find_plet_start_bo( i->plet()->type_c_, start_moment ) ) {
- error( "begin of plet not found", i->defined_ch_c_l_ );
- break;
- }
- Moment moment = 0;
- set_plet_backwards( moment, start_moment, i->plet()->dur_i_, i->plet()->type_i_ );
- i.del();
- break;
- }
-}
-
-void
-Simple_music::add(Voice_element*v)
-{
- voice_.add(v);
-}
-
-Moment
-Simple_music::length()const
-{
- return voice_.last();
-}
-void
-Simple_music::translate_time(Moment t)
-{
- voice_.start += t;
-}
-
-Voice_list
-Simple_music::convert()const
-{
- Voice_list l;
- l.bottom().add(new Voice(voice_));
- return l;
-}
-
-
-void
-Simple_music::print() const
-{
- mtor << "Simple_music {";
- voice_.print();
- mtor << "}\n";
-}
-bool
-Simple_music::find_plet_start_bo(char c, Moment& moment_r)
-{
- return voice_.find_plet_start_bo(c, moment_r);
-}
-void
-Simple_music::set_plet_backwards(Moment& now_moment_r, Moment until_moment, int num_i, int den_i)
-{
- voice_.set_plet_backwards(now_moment_r, until_moment, num_i, den_i);
-}
-
-/* *************** */
-
-void
-Complex_music::add(Input_music*v)
-{
- elts.bottom().add(v);
-}
-
-void
-Complex_music::print() const
-{
- for (iter_top(elts,i); i.ok(); i++)
- i->print();
-}
-
-void
-Complex_music::concatenate(Complex_music*h)
-{
- for (iter_top(h->elts,i); i.ok(); i++)
- add(i->clone());
-}
-
-Complex_music::Complex_music()
-{
-}
-
-Complex_music::Complex_music(Complex_music const&s)
-{
- for (iter_top(s.elts,i); i.ok(); i++)
- add(i->clone());
-}
-void
-Complex_music::set_default_group(String g)
-{
- for (iter_top(elts,i); i.ok(); i++)
- i->set_default_group(g);
-}
-bool
-Complex_music::find_plet_start_bo(char c, Moment& moment_r)
-{
- for (iter_bot(elts,i); i.ok(); i--) {
- if ( i->find_plet_start_bo(c, moment_r) )
- return true;
- }
- return false;
-}
-void
-Complex_music::set_plet_backwards(Moment& now_moment_r, Moment until_moment, int num_i, int den_i)
-{
- for (iter_bot(elts,i); i.ok(); i--) {
- i->set_plet_backwards(now_moment_r, until_moment, num_i, den_i);
- }
-}
-/* *************************************************************** */
-
-void
-Music_voice::print() const
-{
- mtor << "Music_voice {";
- Complex_music::print();
- mtor << "}\n";
-}
-
-void
-Music_voice::add_elt(Voice_element*v)
-{
- PCursor<Input_music*> c(elts.bottom());
- if (!c.ok() || !c->simple()) {
- Simple_music*vs = new Simple_music;
-
- c.add(vs);
- }
-
- c = elts.bottom();
- Simple_music *s = c->simple();
- s->add(v);
-
- check_plet(v);
-}
-
-Moment
-Music_voice::length()const
-{
- Moment l = 0;
-
- for (iter_top(elts,i); i.ok(); i++)
- l += i->length();
- return l;
-}
-
-
-Voice_list
-Music_voice::convert()const
-{
- Voice_list l;
- Moment here = 0;
-
- for (iter_top(elts,i); i.ok(); i++) {
- Moment len = i->length();
- Voice_list k(i->convert());
- k.translate_time(here);
- l.concatenate(k);
- here +=len;
- }
- return l;
-}
-
-void
-Music_voice::translate_time(Moment t)
-{
- elts.bottom()->translate_time(t);
-}
-
-
-
-/* *************** */
-
-void
-Music_general_chord::add_elt(Voice_element*v)
-{
- Simple_music*vs = new Simple_music;
- vs->add(v);
- elts.bottom().add(vs);
-
- check_plet(v);
-}
-
-void
-Music_general_chord::print() const
-{
- mtor << "Music_general_chord {";
- Complex_music::print();
- mtor << "}\n";
-}
-
-void
-Music_general_chord::translate_time(Moment t)
-{
- for (iter_top(elts,i); i.ok(); i++)
- i->translate_time(t);
-}
-
-Moment
-Music_general_chord::length()const
-{
- Moment l =0;
-
- for (iter_top(elts,i); i.ok(); i++)
- l = l >? i->length();
- return l;
-}
-
-Voice_list
-Music_general_chord::convert()const
-{
- Voice_list l;
- for (iter_top(elts,i); i.ok(); i++) {
- Voice_list k(i->convert());
- l.concatenate(k);
- }
- return l;
-}
-
-/* *************** */
-
-void
-Multi_voice_chord::set_default_group(String g)
-{
- int j=0;
- for (iter_top(elts, i); i.ok(); i++) {
- i->set_default_group(g + String(j));
- j++;
- }
-}
-
-
-/* *************** */
-
-void
-Voice_list::translate_time(Moment x)
-{
- for (iter_top(*this,i); i.ok(); i++)
- i->start += x;
-}
-
+++ /dev/null
-/*
- inputscore.cc -- implement Input_score
-
- source file of the LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "debug.hh"
-#include "inputscore.hh"
-#include "inputstaff.hh"
-#include "inputmusic.hh"
-#include "score.hh"
-#include "paperdef.hh"
-#include "mididef.hh"
-#include "staff.hh"
-
-
-void
-Input_score::add(Input_staff*s)
-{
- staffs_.bottom().add(s);
-}
-
-void
-Input_score::set(Paperdef*p)
-{
- delete paper_p_;
- paper_p_ = p;
-}
-
-void
-Input_score::set(Midi_def* midi_p)
-{
- delete midi_p_;
- midi_p_ = midi_p;
-}
-
-Input_score::Input_score(Input_score const&s)
-{
- paper_p_ = (s.paper_p_)? new Paperdef(*s.paper_p_) :0;
- midi_p_ = (s.midi_p_)? new Midi_def(*s.midi_p_) : 0;
- defined_ch_c_l_ = s.defined_ch_c_l_;
- errorlevel_i_ = s.errorlevel_i_;
- score_wide_music_p_ = (s.score_wide_music_p_) ?
- s.score_wide_music_p_->clone():0;
-}
-
-Score*
-Input_score::parse()
-{
- Score *s_p = new Score;
- s_p->defined_ch_c_l_= defined_ch_c_l_;
- s_p->errorlevel_i_ = errorlevel_i_;
- if (midi_p_)
- s_p->set(new Midi_def(*midi_p_));
- if (paper_p_)
- s_p->set( new Paperdef(*paper_p_));
-
- for (iter_top(staffs_,i); i.ok(); i++) {
- Staff* staf_p=i->parse(s_p, score_wide_music_p_);
- s_p->add(staf_p);
- }
-
- return s_p;
-}
-
-void
-Input_score::set(Input_music *m_p)
-{
- delete score_wide_music_p_;
- score_wide_music_p_ =m_p;
-}
-
-
-Input_score::~Input_score()
-{
- delete paper_p_;
- delete score_wide_music_p_;
- delete midi_p_;
-}
-
-Input_score::Input_score()
-{
- score_wide_music_p_ =0;
- defined_ch_c_l_=0;
- paper_p_= 0;
- midi_p_ = 0;
- errorlevel_i_ = 0;
-}
-
-void
-Input_score::print()const
-{
-#ifndef NPRINT
- mtor << "Input_score {\n";
- for (iter_top(staffs_,i); i.ok(); i++) {
- i->print();
- }
- mtor << "}\n";
-#endif
-}
+++ /dev/null
-/*
- inputstaff.cc -- implement Input_staff
-
- source file of the LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "debug.hh"
-#include "score.hh"
-#include "inputmusic.hh"
-#include "inputstaff.hh"
-#include "staff.hh"
-#include "complexstaff.hh"
-#include "lyricstaff.hh"
-
-#include "lexer.hh"
-
-
-Input_staff::Input_staff(String s)
-{
- score_wide_music_p_ =0;
- type= s;
- defined_ch_c_l_ = 0;
-}
-
-void
-Input_staff::add(Input_music*m)
-{
- music_.bottom().add(m);
-}
-
-Staff*
-Input_staff::parse(Score*score_l, Input_music *default_score_wide)
-{
- Staff *p=0;
- if (type == "melodic")
- p = new Complex_staff;
- else if (type == "lyric")
- p = new Lyric_staff;
- else {
- error( "Unknown staff-type `" + type +"\'", defined_ch_c_l_ );
- exit( 1 );
- }
-
- p->score_l_ = score_l;
-
- for (iter_top(music_,i); i.ok(); i++) {
- Voice_list vl = i->convert();
- p->add(vl);
- }
- Voice_list vl = (score_wide_music_p_) ? score_wide_music_p_->convert()
- : default_score_wide->convert();
- p->add(vl);
- return p;
-}
-
-Input_staff::Input_staff(Input_staff const&s)
-{
- for (iter_top(s.music_,i); i.ok(); i++)
- add(i->clone());
- defined_ch_c_l_ = s.defined_ch_c_l_;
- type = s.type;
- score_wide_music_p_ = (s.score_wide_music_p_) ?
- s.score_wide_music_p_->clone() : 0;
-}
-
-void
-Input_staff::print() const
-{
-#ifndef NPRINT
- mtor << "Input_staff {\n";
- for (iter_top(music_,i); i.ok(); i++)
- i->print();
- mtor << "}\n";
-#endif
-}
-void
-Input_staff::set_score_wide(Input_music *m_p)
-{
- delete score_wide_music_p_;
- score_wide_music_p_ = m_p;
-}
-
-Input_staff::~Input_staff()
-{
- delete score_wide_music_p_;
-}
+++ /dev/null
-#include "keyitem.hh"
-#include "key.hh"
-#include "debug.hh"
-#include "molecule.hh"
-#include "paperdef.hh"
-#include "lookup.hh"
-//#include "clefreg.hh"
-#include "keyreg.hh"
-
-const int FLAT_TOP_PITCH=2; /* fes,ges,as and bes typeset in lower octave */
-const int SHARP_TOP_PITCH=4; /* ais and bis typeset in lower octave */
-
-NAME_METHOD(Key_item);
-
-Key_item::Key_item(int c)
-{
- set_c_position(c);
-}
-
-void
-Key_item::read(const Key_register& key_reg_r)
-{
- const Array<int> &idx_arr =key_reg_r.accidental_idx_arr_;
- for (int i = 0 ; i< idx_arr.size(); i++) {
- int note = idx_arr[i];
- int acc = key_reg_r.key_.acc(note);
-
- add(note, acc);
- }
-}
-
-void
-Key_item::set_c_position(int c0)
-{
- int octaves =(abs(c0) / 7) +1 ;
- c_position=(c0 + 7*octaves)%7;
-}
-
-
-void
-Key_item::add(int p, int a)
-{
- if ((a<0 && p>FLAT_TOP_PITCH) ||
- (a>0 && p>SHARP_TOP_PITCH)) {
- p -= 7; /* Typeset below c_position */
- }
- pitch.push(p);
- acc.push(a);
-}
-
-
-Molecule*
-Key_item::brew_molecule_p()const
-{
- Molecule*output = new Molecule;
- Real inter = paper()->internote();
-
- for (int i =0; i < pitch.size(); i++) {
- Symbol s= paper()->lookup_p_->accidental(acc[i]);
- Atom a(s);
- a.translate(Offset(0,(c_position + pitch[i]) * inter));
- Molecule m(a);
- output->add_right(m);
- }
- Molecule m(paper()->lookup_p_->fill(Box(
- Interval(0, paper()->note_width()),
- Interval(0,0))));
- output->add_right(m);
- return output;
-}
+++ /dev/null
-/*
- keyreg.cc -- implement Key_register
-
- source file of the LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-
- todo: key undo
-
- */
-
-#include "keyreg.hh"
-#include "keyitem.hh"
-#include "complexwalker.hh"
-#include "commandrequest.hh"
-#include "staffcolumn.hh"
-#include "localkeyreg.hh"
-#include "musicalrequest.hh"
-
-Key_register::Key_register(Complex_walker*w)
- : Request_register(w)
-{
- do_post_move_process();
-}
-
-
-bool
-Key_register::try_request(Request * req_l)
-{
- if (!req_l->command()->keychange())
- return false;
- assert(!keyreq_l_); // todo
- keyreq_l_ = req_l->command()->keychange();
- read_req(keyreq_l_);
- return true;
-}
-
-void
-Key_register::acknowledge_element(Staff_elem_info info)
-{
- Command_req * r_l = info.req_l_->command() ;
- if (r_l && r_l->clefchange() && !kit_p_) {
- kit_p_ = new Key_item(walk_l_->c0_position_i());
- kit_p_->read(*this);
- announce_element(Staff_elem_info(kit_p_, keyreq_l_, this));
- }
-}
-
-void
-Key_register::process_request()
-{
- Time_description *time_l = &walk_l_->time_;
-
- if (!keyreq_l_ &&
- (!time_l->whole_in_measure_|| !time_l->when_)) {
- default_key_b_ = true;
- }
-
- if ( default_key_b_ || keyreq_l_) {
- kit_p_ = new Key_item(walk_l_->c0_position_i());
- kit_p_->read(*this);
- announce_element(Staff_elem_info(kit_p_, keyreq_l_, this));
- }
-}
-
-void
-Key_register::do_pre_move_process()
-{
- if (kit_p_) {
- if (default_key_b_)
- typeset_breakable_item(0,0,kit_p_);
- else
- typeset_breakable_item(
- new Key_item(*kit_p_), kit_p_, new Key_item(*kit_p_));
- kit_p_ = 0;
- }
-}
-
-
-
-void
-Key_register::read_req(Key_change_req * r)
-{
- accidental_idx_arr_.set_size(0);
- for (int i = 0; i < r->melodic_p_arr_.size(); i ++) {
- int n_i=r->melodic_p_arr_[i]->notename_i_;
- key_.set(n_i, r->melodic_p_arr_[i]->accidental_i_);
- accidental_idx_arr_.push(n_i);
- }
-}
-
-void
-Key_register::do_post_move_process()
-{
- keyreq_l_ = 0;
- default_key_b_ = false;
- kit_p_ = 0;
-}
+++ /dev/null
-#include "localkeyitem.hh"
-#include "molecule.hh"
-#include "scalar.hh"
-#include "lookup.hh"
-#include "paperdef.hh"
-#include "musicalrequest.hh"
-#include "notehead.hh"
-#include "misc.hh"
-
-NAME_METHOD(Local_key_item);
-
-Local_key_item::Local_key_item(int i)
-{
- c0_position = i;
-}
-
-void
-Local_key_item::add(Item*head_l)
-{
- support_items_.push(head_l);
- add_depedency(head_l);
-}
-
-void
-Local_key_item::add(Melodic_req*m_l)
-{
- add(m_l->octave_i_, m_l->notename_i_, m_l->accidental_i_);
-}
-void
-Local_key_item::add (int o, int p , int a)
-{
- Local_acc l;
- l.octave = o;
- l.name = p;
- l.acc = a;
- accs.push(l);
-}
-
-void
-Local_key_item::do_pre_processing()
-{
- accs.sort(Local_acc::compare);
-}
-
-Molecule*
-Local_key_item::brew_molecule_p()const
-{
- Molecule* output = new Molecule;
- Molecule*octmol = 0;
- int lastoct = -100;
- for (int i = 0; i < accs.size(); i++) {
- // do one octave
- if (accs[i].octave != lastoct) {
- if (octmol){
- Real dy =lastoct*7*paper()->internote();
- octmol->translate(Offset(0, dy));
- output->add(*octmol);
- delete octmol;
- }
- octmol= new Molecule;
- }
- lastoct = accs[i].octave;
- Symbol s =paper()->lookup_p_->accidental(accs[i].acc);
- Atom a(s);
- Real dy = (accs[i].name + c0_position) * paper()->internote();
- a.translate(Offset(0,dy));
-
- octmol->add_right(a);
- }
-
- if (octmol){
- Real dy =lastoct*7*paper()->internote();
- octmol->translate(Offset(0, dy));
- output->add(*octmol);
- delete octmol;
- }
-
- Interval head_width=itemlist_width(support_items_);
- output->translate(Offset(-output->extent().x.right + head_width.left ,0));
-
- return output;
-}
-
-int
-Local_acc::compare(Local_acc&a, Local_acc&b)
-{
- if (a.octave - b.octave)
- return a.octave - b.octave;
- if (a.name - b.name)
- return a.name - b.name;
-
- assert(false);
-};
+++ /dev/null
-/*
- localkeyreg.cc -- implement Local_key_register
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-#include "musicalrequest.hh"
-#include "commandrequest.hh"
-#include "localkeyreg.hh"
-#include "localkeyitem.hh"
-#include "complexwalker.hh"
-#include "keyreg.hh"
-#include "debug.hh"
-
-Local_key_register::Local_key_register(Complex_walker*w)
- : Request_register(w)
-{
- key_item_p_ = 0;
- key_c_l_ = 0;
-}
-
-void
-Local_key_register::do_pre_move_process()
-{
- if (key_item_p_) {
- walk_l_->typeset_element(key_item_p_);
- key_item_p_ = 0;
- }
-}
-void
-Local_key_register::acknowledge_element(Staff_elem_info info)
-{
- if (info.req_l_->melodic()) {
- Melodic_req * melodic_l_ = info.req_l_->melodic();
-
- if( melodic_l_->forceacc_b_ ||
- local_key_.oct(melodic_l_->octave_i_).acc(melodic_l_->notename_i_)
- != melodic_l_->accidental_i_) {
- Item * support_l_ = info.elem_p_->item();
-
-
- if (!key_item_p_) {
- key_item_p_ = new Local_key_item(walk_l_->c0_position_i());
- }
-
- key_item_p_->add(melodic_l_);
- key_item_p_->add(support_l_);
- local_key_.oct(melodic_l_->octave_i_)
- .set(melodic_l_->notename_i_, melodic_l_->accidental_i_);
- }
- } else if (info.req_l_->command() &&
- info.req_l_->command()->keychange()) {
- Key_register * key_reg_l = (Key_register*)info.origin_reg_l_;
- key_c_l_ = &key_reg_l->key_;
- local_key_.reset(*key_c_l_);
- }
-}
-
-void
-Local_key_register::process_request()
-{
- if (!walk_l_->time_.whole_in_measure_) {
- if (key_c_l_)
- local_key_.reset(*key_c_l_);
- else if( walk_l_->when() >0)
- warning ("Help me! can't figure current key", 0);
- }
-}
+++ /dev/null
-#include "musicalrequest.hh"
-#include "paperdef.hh"
-#include "lyricitem.hh"
-#include "stem.hh"
-#include "molecule.hh"
-#include "lookup.hh"
-#include "textdef.hh"
-#include "sourcefile.hh"
-#include "source.hh"
-#include "debug.hh"
-#include "main.hh"
-
-Lyric_item::Lyric_item(Lyric_req* lreq_l, int voice_count_i)
- : Text_item(lreq_l,0)
-{
- pos_i_ = -voice_count_i * 4 ; // 4 fontsize dependant. TODO
- dir_i_ = -1;
-}
-
-void
-Lyric_item::do_pre_processing()
-{
- // override Text_item
-
- // test context-error
- if ( tdef_l_->text_str_.index_i( "Gates" ) )// :-)
- warning( "foul word", tdef_l_->defined_ch_c_l_ );
-}
+++ /dev/null
-/*
- meterreg.cc -- implement Meter_register
-
- source file of the LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "meterreg.hh"
-#include "meter.hh"
-#include "commandrequest.hh"
-
-Meter_register::Meter_register(Complex_walker*w)
- : Request_register(w)
-{
- do_post_move_process();
-}
-
-bool
-Meter_register::try_request(Request*r_l)
-{
- if (!r_l->command()->meterchange())
- return false;
-
- assert(!meter_req_l_);
- meter_req_l_ = r_l->command()->meterchange();
-
- return true;
-}
-
-void
-Meter_register::process_request()
-{
- 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(Staff_elem_info(meter_p_, meter_req_l_, this) );
-}
-
-void
-Meter_register::do_pre_move_process()
-{
- if (meter_p_) {
- Meter * post_p =new Meter(*meter_p_);
- Meter * pre_p =new Meter(*meter_p_);
-
- typeset_breakable_item(pre_p, meter_p_, post_p);
- meter_p_ =0;
- }
-}
-
-void
-Meter_register::do_post_move_process()
-{
- meter_req_l_ = 0;
- meter_p_ =0;
-}
+++ /dev/null
-//
-// mididef.cc -- implement midi output
-//
-// source file of the LilyPond music typesetter
-//
-// (c) 1997 Jan Nieuwenhuizen <jan@digicash.com>
-
-#include <math.h>
-#include "misc.hh"
-#include "mididef.hh"
-#include "debug.hh"
-
-// classes, alphasorted
-// statics
-// constructors
-// destructor
-// routines, alphasorted
-
-Midi_def::Midi_def()
-{
- set_tempo( Moment( 1, 4 ), 60 );
- outfile_str_ = "lelie.midi";
-}
-
-Midi_def::Midi_def( Midi_def const& midi_c_r )
-{
- whole_seconds_f_ = midi_c_r.whole_seconds_f_;
- outfile_str_ = midi_c_r.outfile_str_;
-}
-
-Midi_def::~Midi_def()
-{
-}
-
-Real
-Midi_def::duration_to_seconds_f( Moment moment )
-{
- if (!moment)
- return 0;
-
- return whole_seconds_f_ * moment;
-}
-
-int
-Midi_def::get_tempo_i( Moment moment )
-{
- return Moment( whole_seconds_f_ ) * Moment( 60 ) * moment;
-}
-
-void
-Midi_def::print() const
-{
-#ifndef NPRINT
- mtor << "Midi {4/min: " << Real( 60 ) / ( whole_seconds_f_ * 4 );
- mtor << "out: " << outfile_str_;
- mtor << "}\n";
-#endif
-}
-
-void
-Midi_def::set_tempo( Moment moment, int count_per_minute_i )
-{
- whole_seconds_f_ = Moment( count_per_minute_i ) / Moment( 60 ) / moment;
-}
+++ /dev/null
-//
-// midiitem.cc
-//
-// source file of the LilyPond music typesetter
-//
-// (c) 1997 Jan Nieuwenhuizen <jan@digicash.com>
-
-#include <limits.h>
-#include "plist.hh"
-#include "pcol.hh"
-#include "debug.hh"
-#include "misc.hh"
-#include "request.hh"
-#include "musicalrequest.hh"
-#include "voice.hh"
-#include "midiitem.hh"
-#include "midistream.hh"
-
-Midi_chunk::Midi_chunk()
-{
-}
-
-void
-Midi_chunk::add( String str )
-{
- data_str_ += str;
-}
-
-void
-Midi_chunk::set( String header_str, String data_str, String footer_str )
-{
- data_str_ = data_str;
- footer_str_ = footer_str;
- header_str_ = header_str;
-}
-
-String
-Midi_chunk::str()
-{
- String str = header_str_;
- String length_str = String_convert::i2hex_str( data_str_.length_i() + footer_str_.length_i(), 8, '0' );
- length_str = String_convert::hex2bin_str( length_str );
- str += length_str;
- str += data_str_;
- str += footer_str_;
- return str;
-}
-
-Midi_duration::Midi_duration( Real seconds_f )
-{
- seconds_f_ = seconds_f;
-}
-
-String
-Midi_duration::str()
-{
- return String( "<duration: " ) + String( seconds_f_ ) + ">";
-}
-
-Midi_header::Midi_header( int format_i, int tracks_i, int clocks_per_4_i )
-{
- String str;
-
- String format_str = String_convert::i2hex_str( format_i, 4, '0' );
- str += String_convert::hex2bin_str( format_str );
-
- String tracks_str = String_convert::i2hex_str( tracks_i, 4, '0' );
- str += String_convert::hex2bin_str( tracks_str );
-
- String tempo_str = String_convert::i2hex_str( clocks_per_4_i, 4, '0' );
- str += String_convert::hex2bin_str( tempo_str );
-
- set( "MThd", str, "" );
-}
-
-String
-Midi_item::i2varint_str( int i )
-{
- int buffer_i = i & 0x7f;
- while ( (i >>= 7) > 0 ) {
- buffer_i <<= 8;
- buffer_i |= 0x80;
- buffer_i += (i & 0x7f);
- }
-
- String str;
- while ( 1 ) {
- str += (char)buffer_i;
- if ( buffer_i & 0x80 )
- buffer_i >>= 8;
- else
- break;
- }
- return str;
-}
-
-void
-Midi_item::output_midi( Midi_stream& midi_stream_r )
-{
- midi_stream_r << str();
-}
-
-
-Midi_note::Midi_note( Melodic_req* melreq_l, int channel_i, bool on_bo )
-{
- assert(melreq_l);
- pitch_i_ = melreq_l->pitch() + c0_pitch_i_c_;
- channel_i_ = channel_i;
-
- // poor man-s staff dynamics:
- dynamic_byte_ = (melreq_l)? 0x64 - 0x10 * channel_i_:0;
- on_b_ = on_bo;
-}
-
-String
-Midi_note::str()
-{
- if ( pitch_i_ != INT_MAX ) {
- Byte status_byte = ( on_b_ ? 0x90 : 0x80 ) + channel_i_;
- String str = String( (char)status_byte );
- str += (char)pitch_i_;
- // poor man-s staff dynamics:
- str += (char)dynamic_byte_;
- return str;
- }
- return String( "" );
-}
-
-Midi_tempo::Midi_tempo( int tempo_i )
-{
- tempo_i_ = tempo_i;
-}
-
-String
-Midi_tempo::str()
-{
- int useconds_per_4_i = 60 * (int)1e6 / tempo_i_;
- String str = "ff5103";
- str += String_convert::i2hex_str( useconds_per_4_i, 6, '0' );
- return String_convert::hex2bin_str( str );
-}
-
-Midi_track::Midi_track( int number_i )
-{
-// 4D 54 72 6B MTrk
-// 00 00 00 3B chunk length (59)
-// 00 FF 58 04 04 02 18 08 time signature
-// 00 FF 51 03 07 A1 20 tempo
-
-// FF 59 02 sf mi Key Signature
-// sf = -7: 7 flats
-// sf = -1: 1 flat
-// sf = 0: key of C
-// sf = 1: 1 sharp
-// sf = 7: 7 sharps
-// mi = 0: major key
-// mi = 1: minor key
-
- number_i_ = number_i;
-
- char const* data_ch_c_l = "00" "ff58" "0404" "0218" "08"
-// "00" "ff51" "0307" "a120"
-// why a key at all, in midi?
-// key: C
- "00" "ff59" "02" "00" "00"
-// key: F (scsii-menuetto)
-// "00" "ff59" "02" "ff" "00"
- ;
-
- String data_str;
- // only for format 0 (currently using format 1)?
- data_str += String_convert::hex2bin_str( data_ch_c_l );
-
- char const* footer_ch_c_l = "00" "ff2f" "00";
- String footer_str = String_convert::hex2bin_str( footer_ch_c_l );
-
- set( "MTrk", data_str, footer_str );
-}
-
-void
-Midi_track::add( int delta_time_i, String event_str )
-{
- assert(delta_time_i >= 0);
- Midi_chunk::add( i2varint_str( delta_time_i ) + event_str );
-}
-
-void
-Midi_track::add( Moment delta_time_moment, Midi_item* mitem_l )
-{
- // use convention of 384 clocks per 4
- // use Duration_convert
- int delta_time_i = delta_time_moment * Moment( 384 ) / Moment( 1, 4 );
- add( delta_time_i, mitem_l->str() );
-}
-
+++ /dev/null
-/*
- midioutput.cc -- implement Midi_output
-
- source file of the LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>, Jan Nieuwehuizen <jan@digicash.com>
-*/
-
-#include "plist.hh"
-#include "debug.hh"
-#include "score.hh"
-#include "staff.hh"
-#include "midistream.hh"
-#include "mididef.hh"
-#include "midioutput.hh"
-#include "midiwalker.hh"
-#include "midiitem.hh"
-#include "staffcolumn.hh"
-#include "musicalrequest.hh"
-
-
-Midi_output:: Midi_output(Score* score_l, Midi_def* midi_l )
-{
- midi_l_ = midi_l;
-
- Midi_stream midi_stream(midi_l->outfile_str_,
- score_l->staffs_.size(),
- 384 );
-// oeps, not tempo, but clocks per 4 (384 convention)
-// must set tempo in tempo request
-// midi_l->get_tempo_i(Moment(1, 4)));
-
- midi_stream_l_ = &midi_stream;
- int track_i=0;
-
- for (iter_top(score_l->staffs_,i); i.ok(); i++) {
- do_staff(i, track_i++);
- }
-
-}
-
-void
-Midi_output::do_staff(Staff*st_l,int track_i)
-{
- Midi_track midi_track( track_i );
- Midi_tempo midi_tempo( midi_l_->get_tempo_i( Moment( 1, 4 ) ) );
- midi_track.add( Moment( 0.0 ), &midi_tempo );
- for (Midi_walker w (st_l, &midi_track); w.ok(); w++)
- w.process_requests();
-
- *midi_stream_l_ << midi_track;
-}
+++ /dev/null
-//
-// midistream.cc
-//
-// source file of the LilyPond music typesetter
-//
-// (c) 1997 Jan Nieuwenhuizen <jan@digicash.com>
-
-#include <fstream.h>
-#include <time.h>
-#include "main.hh"
-#include "misc.hh"
-#include "midiitem.hh"
-#include "midistream.hh"
-#include "debug.hh"
-
-Midi_stream::Midi_stream( String filename_str, int tracks_i, int clocks_per_4_i )
-{
- filename_str_ = filename_str;
- tracks_i_ = tracks_i;
- clocks_per_4_i_ = clocks_per_4_i;
- os_p_ = 0;
- open();
- header();
-}
-
-Midi_stream::~Midi_stream()
-{
- delete os_p_;
-}
-
-Midi_stream&
-Midi_stream::operator <<( String str )
-{
- // still debugging...
- if ( check_debug )
- str = String_convert::bin2hex_str( str );
- // string now 1.0.26-2 handles binary streaming
- *os_p_ << str;
- return *this;
-}
-
-Midi_stream&
-Midi_stream::operator <<( Midi_item& mitem_r )
-{
- mitem_r.output_midi( *this );
- if ( check_debug )
- *os_p_ << "\n";
- return *this;
-}
-
-Midi_stream&
-Midi_stream::operator <<( int i )
-{
- // output binary string ourselves
- *this << Midi_item::i2varint_str( i );
- return *this;
-}
-
-void
-Midi_stream::header()
-{
-// *os_p_ << "% Creator: " << get_version();
-// *os_p_ << "% Automatically generated, at ";
-// time_t t(time(0));
-// *os_p_ << ctime(&t);
-
-// 4D 54 68 64 MThd
-// String str = "MThd";
-// 00 00 00 06 chunk length
-// 00 01 format 1
-// 00 01 one track
-// 00 60 96 per quarter-note
-
-// char const ch_c_l = "0000" "0006" "0001" "0001" "0060";
-// str += String_convert::hex2bin_str( ch_c_l );
-// *os_p_ << str;
-
-// *this << Midi_header( 1, 1, tempo_i_ );
- *this << Midi_header( 1, tracks_i_, clocks_per_4_i_ );
-}
-
-void
-Midi_stream::open()
-{
- os_p_ = new ofstream( filename_str_ );
- if ( !*os_p_ )
- error ("can't open `" + filename_str_ + "\'" );
-}
+++ /dev/null
-/*
- midiwalker.cc -- implement Midi_walker
-
- source file of the LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>, Jan Nieuwenhuizen <jan@digicash.com>
-*/
-
-#include "musicalrequest.hh"
-#include "pscore.hh"
-#include "staff.hh"
-#include "midiwalker.hh"
-#include "midiitem.hh"
-#include "midistream.hh"
-#include "debug.hh"
-#include "staffcolumn.hh"
-
-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_idx() <= max_moment) {
- Moment stop_moment = stop_notes.front_idx();
- Melodic_req * req_l = stop_notes.get();
-
- Midi_note note(req_l, track_l_->number_i_, false);
- output_event(note, stop_moment);
- }
-}
-/** 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::process_requests()
-{
- do_stop_notes(ptr()->when());
- for ( int i = 0; i < ptr()->musicalreq_l_arr_.size(); i++ ) {
-
- Rhythmic_req *n = ptr()->musicalreq_l_arr_[i]->rhythmic();
- if ( !n)
- continue;
- Note_req * note_l = n->note();
- if (!note_l)
- continue;
-
- Midi_note note(note_l, track_l_->number_i_, true);
- stop_notes.enter(note_l, n->duration() + ptr()->when() );
- output_event(note, ptr()->when());
- }
-}
-
-Midi_walker::~Midi_walker()
-{
- do_stop_notes( last_moment_ + Moment(10,1)); // ugh
-}
+++ /dev/null
-#include <math.h>
-#include "misc.hh"
-#include "paperdef.hh"
-#include "debug.hh"
-#include "lookup.hh"
-#include "dimen.hh"
-
-
-
-// golden ratio
-const Real PHI = (1+sqrt(5))/2;
-
-// see Roelofs, p. 57
-Real
-Paperdef::duration_to_dist(Moment d)
-{
- if (!d)
- return 0;
-
- return whole_width * pow(geometric_, log_2(d));
-}
-
-Real
-Paperdef::rule_thickness()const
-{
- return 0.4 PT;
-}
-
-Paperdef::Paperdef(Lookup *l)
-{
- lookup_p_ = l;
- linewidth = 15 *CM_TO_PT; // in cm for now
- whole_width = 8 * note_width();
- geometric_ = sqrt(2);
- outfile = "lelie.out";
-}
-
-Paperdef::~Paperdef()
-{
- delete lookup_p_;
-}
-Paperdef::Paperdef(Paperdef const&s)
-{
- lookup_p_ = new Lookup(*s.lookup_p_);
- geometric_ = s.geometric_;
- whole_width = s.whole_width;
- outfile = s.outfile;
- linewidth = s.linewidth;
-}
-
-void
-Paperdef::set(Lookup*l)
-{
- assert(l != lookup_p_);
- delete lookup_p_;
- lookup_p_ = l;
-}
-
-Real
-Paperdef::interline() const
-{
- return lookup_p_->ball(4).dim.y.length();
-}
-
-Real
-Paperdef::internote() const
-{
- return lookup_p_->internote();
-}
-Real
-Paperdef::note_width()const
-{
- return lookup_p_->ball(4).dim.x.length( );
-}
-Real
-Paperdef::standard_height() const
-{
- return 20 PT;
-}
-
-void
-Paperdef::print() const
-{
-#ifndef NPRINT
- mtor << "Paper {width: " << print_dimen(linewidth);
- mtor << "whole: " << print_dimen(whole_width);
- mtor << "out: " <<outfile;
- mtor << "}\n";
-#endif
-}
+++ /dev/null
-/*
- scorecolumn.cc -- implement Score_column
-
- source file of the LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "debug.hh"
-#include "pcol.hh"
-#include "scorecolumn.hh"
-
-int
-Score_column::compare(Score_column & c1, Score_column &c2)
-{
- return sign(c1.when_ - c2.when_);
-}
-
-void
-Score_column::set_breakable()
-{
- pcol_l_->set_breakable();
-}
-
-Score_column::Score_column(Moment w)
-{
- when_ = w;
- pcol_l_ = new PCol(0);
- musical_b_ = false;
-}
-
-bool
-Score_column::used_b() {
- return pcol_l_->used_b();
-}
-
-void
-Score_column::print() const
-{
-#ifndef NPRINT
- mtor << "Score_column { mus "<< musical_b_ <<" at " << when_<<'\n';
- mtor << "durations: [";
- for (int i=0; i < durations.size(); i++)
- mtor << durations[i] << " ";
- mtor << "]\n";
- pcol_l_->print();
- mtor << "}\n";
-#endif
-}
-
-int
-Moment_compare(Moment &a , Moment& b)
-{
- return sign(a-b);
-}
-
-void
-Score_column::preprocess()
-{
- durations.sort(Moment_compare);
-}
-void
-Score_column::add_duration(Moment d)
-{
- assert(d);
- for (int i = 0; i< durations.size(); i++) {
- if (d == durations[i])
- return ;
- }
- durations.push(d);
-}
-
-bool
-Score_column::breakable_b()
-{
- return pcol_l_->breakable_b();
-}
+++ /dev/null
-/*
- scorewalker.cc -- implement Score_walker
-
- source file of the LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-#include "debug.hh"
-#include "plist.hh"
-#include "scorewalker.hh"
-#include "score.hh"
-#include "staffwalker.hh"
-#include "staff.hh"
-#include "scorecolumn.hh"
-
-Score_walker::Score_walker(Score *s)
- :PCursor<Score_column *> (s->cols_)
-{
- score_l_ = s;
- for (iter_top(s->staffs_,i); i.ok(); i++) {
- Staff_walker* w_p=i->get_walker_p();
- w_p->score_walk_l_ =this;
- walker_p_arr_.push(w_p);
- }
-
- if(ok()) {
- s->find_col(0, false)->set_breakable();
- s->find_col(s->last(), false)->set_breakable();
- }
- reinit();
-}
-
-
-void
-Score_walker::reinit()
-{
- disallow_break_walk_l_arr = walker_p_arr_;
- disallow_break_count_ = disallow_break_walk_l_arr.size();
-}
-
-
-/** Advance the cursor, and all Staff_walkers contained in this. Reset
- runtime fields */
-void
-Score_walker::operator ++(int )
-{
- Moment last = ptr()->when();
-
- PCursor<Score_column *>::operator++(0);
- if (ok() && ptr()->when() == last)
- PCursor<Score_column *>::operator++(0);
- reinit();
- if (!ok())
- return;
- for (int i=0; i< walker_p_arr_.size(); i++) {
- if (walker_p_arr_[i]->ok() &&
- walker_p_arr_[i]->when() < when()) {
-
- walker_p_arr_[i]->operator++(0);
- }
- }
-}
-
-/** Allow the command_column to be breakable for one staff. If all
- staffs allow, then allow a break here. */
-void
-Score_walker::allow_break(Staff_walker*w)
-{
- for (int i=0; i < disallow_break_walk_l_arr.size(); i++) {
- if (w == disallow_break_walk_l_arr[i]) {
- disallow_break_count_ --;
- disallow_break_walk_l_arr[i] =0;
-
- if (!disallow_break_count_) {
- PCursor<Score_column*> col_cursor = *this;
- if (ptr()->musical_b())
- col_cursor --;
- col_cursor->set_breakable();
- }
- }
- }
-}
-
-Moment
-Score_walker::when()
-{
- return ptr()->when();
-}
-
-void
-Score_walker::process()
-{
- for (int i=0; i < walker_p_arr_.size(); i++) {
- Staff_walker *w = walker_p_arr_[i];
- if ( w->ok() && w->when() == when() ) {
- walker_p_arr_[i]->process();
- }
- }
- if (when().denominator() == 1) {
- *mlog << "." <<flush;
- }
-}
-
-Score_walker::~Score_walker()
-{
- for (int i=0; i < walker_p_arr_.size(); i++)
- delete walker_p_arr_[i];
- assert( !score_l_->find_col(score_l_->last(), true)->used_b());
-}
-
-
+++ /dev/null
-#include "debug.hh"
-#include "scriptdef.hh"
-
-Script_def::Script_def(String idx, int stem, int staff ,bool invert)
-{
- symidx = idx ;
- stemdir =stem;
- staffdir = staff;
- invertsym = invert;
-}
-void
-Script_def::print() const
-{
- mtor << "idx: " << symidx;
- mtor << "direction, stem: " << stemdir << " staff : " << staffdir;
-}
-int
-Script_def::compare(Script_def const & c)
-{
- return !(symidx == c.symidx &&
- stemdir == c.stemdir&&
- staffdir == c.staffdir&&
- invertsym == c.invertsym);
-}
+++ /dev/null
-/*
- scriptreg.cc -- implement Script_register
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "scriptreg.hh"
-#include "script.hh"
-#include "musicalrequest.hh"
-#include "complexwalker.hh"
-
-Script_register::Script_register(Complex_walker*w)
- : Request_register(w)
-{
- script_p_ = 0;
-}
-
-bool
-Script_register::try_request(Request *r_l)
-{
- if (!r_l->script())
- return false ;
-
- if (accepted_req_arr_.size()
- && Script_req::compare(*accepted_req_arr_[0]->script(), *r_l->script()))
-
- return false;
-
- accepted_req_arr_.push(r_l);
-
- return true;
-}
-
-void
-Script_register::process_request()
-{
- if (accepted_req_arr_.size() ) {
- script_p_ = new Script(accepted_req_arr_[0]->script(), 10);
- announce_element(
- Staff_elem_info(script_p_, accepted_req_arr_[0], this));
- }
-}
-
-void
-Script_register::acknowledge_element(Staff_elem_info info)
-{
- if (!script_p_)
- return;
- if (info.elem_p_->name() == String("Stem"))
- script_p_->set_stem((Stem*)info.elem_p_);
- else if (info.req_l_->rhythmic())
- script_p_->set_support(info.elem_p_->item());
-}
-
-void
-Script_register::do_pre_move_process()
-{
- if (script_p_){
- script_p_->dir = dir_i_;
- typeset_element(script_p_);
- script_p_ = 0;
- }
-}
-
-void
-Script_register::set_dir(int i)
-{
- dir_i_ = i;
-}
+++ /dev/null
-/*
- slurreg.cc -- implement Slur_register
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "plist.hh"
-#include "musicalrequest.hh"
-#include "complexwalker.hh"
-#include "slurreg.hh"
-#include "slur.hh"
-#include "debug.hh"
-
-
-void
-Slur_register::set_dir(int i)
-{
- dir_i_ = i;
-}
-
-Slur_register::Slur_register(Complex_walker* w)
- : Request_register(w)
-{
- set_dir(0);
-}
-
-bool
-Slur_register::try_request(Request *req_l)
-{
- if(!req_l->slur())
- return false;
-
- accepted_req_arr_.push(req_l);
- return true;
-}
-
-void
-Slur_register::acknowledge_element(Staff_elem_info info)
-{
- if (info.elem_p_->name() == String("Notehead")) {
- Notehead *head_p =(Notehead*) info.elem_p_ ;// ugh
- for (int i = 0; i < slur_l_stack_.size(); i++)
- slur_l_stack_[i]->add(head_p );
- for (int i = 0; i < end_slur_l_arr_.size(); i++)
- end_slur_l_arr_[i]->add(head_p);
- }
-}
-/*
- abracadabra
- */
-void
-Slur_register::process_request()
-{
- Array<Slur*> start_slur_l_arr_;
- for (int i=0; i< accepted_req_arr_.size(); i++) {
- Slur_req* slur_req_l = accepted_req_arr_[i]->slur();
- // end slur: move the slur to other array
- if (slur_req_l->spantype == Span_req::STOP) {
- if (slur_l_stack_.empty())
- warning("can't find slur to end",
- slur_req_l->defined_ch_c_l_);
- 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(Staff_elem_info(s_p, slur_req_l, this));
- }
- }
- 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_process()
-{
- 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);
-}
-
-Slur_register::~Slur_register()
-{
- for (int i=0; i < requests_arr_.size(); i++) {
- warning("unterminated slur", requests_arr_[i]->defined_ch_c_l_);
- }
-}
+++ /dev/null
-//
-// sourcefile.cc
-//
-
-#include <sys/types.h> // open, mmap
-#include <sys/stat.h> // open
-#include <sys/mman.h> // mmap
-#include <limits.h> // INT_MAX
-#include <fcntl.h> // open
-#include <unistd.h> // close, stat
-#include <stdio.h> // fdopen
-#include <string.h> // strerror
-#include <errno.h> // errno
-#include <assert.h>
-#include <strstream.h>
-
-#include "string.hh"
-#include "proto.hh"
-#include "plist.hh"
-#include "lexer.hh"
-#include "debug.hh"
-#include "parseconstruct.hh"
-#include "main.hh" // find_file
-
-#include "sourcefile.hh"
-
-Source_file::Source_file( String &filename_str )
-{
- data_caddr_ = 0;
- fildes_i_ = 0;
- size_off_ = 0;
- name_str_ = filename_str;
- istream_p_ = 0;
-
- open();
- map();
- // ugh!?, should call name_str() !
- filename_str = name_str_;
-}
-
-Source_file::~Source_file()
-{
- delete istream_p_;
- istream_p_ = 0;
- unmap();
- close();
-}
-
-char const*
-Source_file::ch_c_l()
-{
- assert( this );
- return (char const*)data_caddr_;
-}
-
-void
-Source_file::close()
-{
- if ( fildes_i_ ) {
- ::close( fildes_i_ );
- fildes_i_ = 0;
- }
-}
-
-String
-Source_file::error_str( char const* pos_ch_c_l )
-{
- assert( this );
- if ( !in_b( pos_ch_c_l ) )
- return "";
-
- char const* begin_ch_c_l = pos_ch_c_l;
- char const* data_ch_c_l = ch_c_l();
- while ( begin_ch_c_l > data_ch_c_l )
- if ( *--begin_ch_c_l == '\n' ) {
- begin_ch_c_l++;
- break;
- }
-
- char const* end_ch_c_l = pos_ch_c_l;
- while ( end_ch_c_l < data_ch_c_l + size_off_ )
- if ( *end_ch_c_l++ == '\n' ) {
- break;
- }
- end_ch_c_l--;
-
-#if 1
-// String( char const* p, int length ) is missing!?
- String line_str( (Byte const*)begin_ch_c_l, end_ch_c_l - begin_ch_c_l );
-#else
- int length_i = end_ch_c_l - begin_ch_c_l;
- char* ch_p = new char[ length_i + 1 ];
- strncpy( ch_p, begin_ch_c_l, length_i );
- ch_p[ length_i ] = 0;
- String line_str( ch_p );
- delete ch_p;
-#endif
-
- int error_col_i = 0;
- char const* scan_ch_c_l = begin_ch_c_l;
- while ( scan_ch_c_l < pos_ch_c_l )
- if ( *scan_ch_c_l++ == '\t' )
- error_col_i = ( error_col_i / 8 + 1 ) * 8;
- else
- error_col_i++;
-
- String str = line_str.left_str( pos_ch_c_l - begin_ch_c_l )
- + String( '\n' )
- + String( ' ', error_col_i )
- + line_str.mid_str( pos_ch_c_l - begin_ch_c_l + 1, INT_MAX ); // String::mid should take 0 arg..
- return str;
-}
-
-bool
-Source_file::in_b( char const* pos_ch_c_l )
-{
- return ( pos_ch_c_l && ( pos_ch_c_l >= ch_c_l() ) && ( pos_ch_c_l < ch_c_l() + size_off_ ) );
-}
-
-istream*
-Source_file::istream_l()
-{
- assert( fildes_i_ );
- if ( !istream_p_ ) {
- if ( size_off_ ) // can-t this be done without such a hack?
- istream_p_ = new istrstream( ch_c_l(), size_off_ );
- else {
- istream_p_ = new istrstream( "", 0 );
- istream_p_->set(ios::eofbit);
- }
- }
- return istream_p_;
-}
-
-off_t
-Source_file::length_off()
-{
- return size_off_;
-}
-
-int
-Source_file::line_i( char const* pos_ch_c_l )
-{
- if ( !in_b( pos_ch_c_l ) )
- return 0;
-
- int i = 1;
- char const* scan_ch_c_l = ch_c_l();
- while ( scan_ch_c_l < pos_ch_c_l )
- if ( *scan_ch_c_l++ == '\n' )
- i++;
- return i;
-}
-
-void
-Source_file::map()
-{
- if ( fildes_i_ == -1 )
- return;
-
- data_caddr_ = (caddr_t)mmap( (void*)0, size_off_, PROT_READ, MAP_SHARED, fildes_i_, 0 );
-
- if ( (int)data_caddr_ == -1 )
- // ugh: defined_ch_c_l...
- warning( String( "can't map: " ) + name_str_ + String( ": " ) + strerror( errno ), defined_ch_c_l ); //lexer->here_ch_c_l() );
-}
-
-String
-Source_file::name_str()
-{
- return name_str_;
-}
-
-void
-Source_file::open()
-{
- String name_str = find_file( name_str_ );
- if ( name_str != "" )
- name_str_ = name_str;
-
- fildes_i_ = ::open( name_str_, O_RDONLY );
-
- if ( fildes_i_ == -1 ) {
- warning( String( "can't open: " ) + name_str_ + String( ": " ) + strerror( errno ), defined_ch_c_l ); // lexer->here_ch_c_l() );
- return;
- }
-
- struct stat file_stat;
- fstat( fildes_i_, &file_stat );
- size_off_ = file_stat.st_size;
-}
-
-void
-Source_file::unmap()
-{
- if ( data_caddr_ ) {
- munmap( data_caddr_, size_off_ );
- data_caddr_ = 0;
- size_off_ = 0;
- }
-}
-String
-Source_file::file_line_no_str(char const *ch_c_l )
-{
- return name_str() + ": "
- + String( line_i( ch_c_l ) );
-}
+++ /dev/null
-/*
- staffcolumn.cc -- implement Staff_column
-
- source file of the LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-#include "staff.hh"
-#include "voice.hh"
-#include "timedescription.hh"
-#include "scorecolumn.hh"
-#include "staffcolumn.hh"
-#include "commandrequest.hh"
-#include "musicalrequest.hh"
-#include "interval.hh"
-#include "pscore.hh"
-#include "item.hh"
-#include "pcol.hh"
-
-void
-Staff_column::OK() const
-{
-#ifndef NDEBUG
- assert (command_column_l_->when() == musical_column_l_->when());
-#endif
-}
-
-Moment
-Staff_column::when() const
-{
- return (command_column_l_)?
- command_column_l_->when():
- musical_column_l_->when();
-}
-
-void
-Staff_column::add(Voice_element*ve)
-{
- for (iter_top(ve->reqs,j); j.ok(); j++) {
- if (j->command()) {
- Command_req * c_l = j->command();
- if (c_l->timing()) {
- timing_req_l_arr_.push(j->command()->timing());
- }
- if (!c_l->barcheck() && !c_l->partial() &&
- !c_l->measuregrouping())
- setup_one_request(j); // no need to bother children
- } else {
- if (j->rhythmic()) {
- musical_column_l_->add_duration(j->rhythmic()->duration());
- }
- if (!j->musical()->skip())
- setup_one_request(j);
- }
- }
-}
-
-Staff_column::Staff_column()
-{
- musical_column_l_ = 0;
- command_column_l_ = 0;
- staff_l_ = 0;
-}
-
-
-
-
-Staff_column::~Staff_column()
-{
-}
-
-void
-Staff_column::set_cols(Score_column*c1, Score_column*c2)
-{
- command_column_l_ = c1;
- musical_column_l_ = c2;
-}
-
-void
-Staff_column::setup_one_request(Request * j)
-{
- if (j->command()) // ugh
- commandreq_l_arr_.push(j);
- else if (j->musical())
- musicalreq_l_arr_.push(j);
-}
-
-void
-Staff_column::typeset_musical_item(Item*i)
-{
- assert(i);
- Score_column * scorecolumn_l = musical_column_l_;
- musical_column_l_->pcol_l_->pscore_l_->typeset_item(i, scorecolumn_l->pcol_l_,
- staff_l_->pstaff_l_);
-}
-
-/**
- align items in #item_l_arr#,
-
- @return the width of the items after aligning.
- */
-Interval
-align_items(Array<Item*> item_l_arr)
-{
- Interval wid(0,0);
- for (int i =0; i < item_l_arr.size(); i++) {
- Interval item_width= item_l_arr[i]->width();
- Real dx =wid.right - item_width.left;
- item_width += dx;
- item_l_arr[i]->translate(Offset(dx ,0));
- wid.unite(item_width);
- }
- return wid;
-}
-
-void
-translate_items(Real x, Array<Item*> item_l_arr)
-{
- for (int i =0; i < item_l_arr.size(); i++)
- item_l_arr[i]->translate(Offset(x, 0));
-}
-/*
- UGR
- This still sux
- */
-void
-Staff_column::typeset_breakable_items(Array<Item *> &pre_p_arr,
- Array<Item *> &nobreak_p_arr,
- Array<Item *> &post_p_arr)
-{
- PCol * c= command_column_l_->pcol_l_;
- PScore *ps_l=command_column_l_->pcol_l_->pscore_l_;
-
- if (!c->breakable_b()) {
- for (int i =0; i < pre_p_arr.size(); i++)
- delete pre_p_arr[i];
- pre_p_arr.set_size(0);
- for (int i =0; i < post_p_arr.size(); i++)
- delete post_p_arr[i];
- post_p_arr.set_size(0);
- }
-
-
- for (int i =0; i < pre_p_arr.size(); i++) {
- ps_l->typeset_item(pre_p_arr[i], c, staff_l_->pstaff_l_,0);
- }
- for (int i =0; i < nobreak_p_arr.size(); i++) {
- ps_l->typeset_item(nobreak_p_arr[i], c, staff_l_->pstaff_l_,1);
- }
- for (int i =0; i < post_p_arr.size(); i++) {
- ps_l->typeset_item(post_p_arr[i], c, staff_l_->pstaff_l_,2);
- }
-
- Interval pre_wid= align_items(pre_p_arr);
- translate_items( -pre_wid.right, pre_p_arr);
- align_items(nobreak_p_arr);
- Interval post_wid =align_items(post_p_arr);
- translate_items (-post_wid.left , post_p_arr);
-
- pre_p_arr.set_size(0);
- post_p_arr.set_size(0);
- nobreak_p_arr.set_size(0);
-}
+++ /dev/null
-#include "pscore.hh"
-#include "symbol.hh"
-#include "pstaff.hh"
-#include "molecule.hh"
-#include "staffelem.hh"
-#include "debug.hh"
-
-String
-Staff_elem::TeXstring() const
-{
- Molecule m(*output);
- m.translate(offset_); // ugh?
- return m.TeXstring();
-}
-
-Staff_elem::Staff_elem(Staff_elem const&s)
- : dependants(s.dependants),
- dependencies(s.dependencies)
-{
- status = s.status;
- assert(!s.output);
- output = 0;
- pstaff_l_ = s.pstaff_l_;
- offset_ = Offset(0,0);
-}
-/**
- TODO:
- If deleted, then remove dependants depency!
- */
-Staff_elem::~Staff_elem()
-{
- delete output;
-}
-
-void
-Staff_elem::translate(Offset O)
-{
- offset_ += O;
-}
-Interval
-Staff_elem::width() const
-{
- Interval r;
-
- if (!output){
- Molecule*m = brew_molecule_p();
- r = m->extent().x;
- delete m;
- } else
- r = output->extent().x;
-
- if (!r.empty()) // float exception on DEC Alpha
- r+=offset_.x;
-
- return r;
-}
-Interval
-Staff_elem::height() const
-{
- Interval r;
-
- if (!output){
- Molecule*m = brew_molecule_p();
- r = m->extent().y;
- delete m;
- } else
- r = output->extent().y;
-
- if (!r.empty())
- r+=offset_.y;
-
-
- return r;
-}
-
-void
-Staff_elem::print()const
-{
-#ifndef NPRINT
- mtor << name() << "{\n";
- do_print();
- if (output)
- output->print();
-
- mtor << "}\n";
-#endif
-}
-
-NAME_METHOD(Staff_elem);
-
-Staff_elem::Staff_elem()
-{
- pstaff_l_=0;
- offset_ = Offset(0,0);
- output = 0;
- status = ORPHAN;
-}
-
-
-Paperdef*
-Staff_elem::paper() const
-{
- assert(pstaff_l_);
- return pstaff_l_->pscore_l_->paper_l_;
-}
-
-void
-Staff_elem::add_processing()
-{
- if (status >= VIRGIN)
- return;
- status = VIRGIN;
- do_add_processing();
-}
-
-void
-Staff_elem::pre_processing()
-{
- if (status >= PRECALCED )
- return;
- assert(status != PRECALCING); // cyclic dependency
- status = PRECALCING;
-
- for (int i=0; i < dependencies.size(); i++)
- if (dependencies[i])
- dependencies[i]->pre_processing();
-
-
- do_pre_processing();
- status = PRECALCED;
-}
-void
-Staff_elem::post_processing()
-{
- if (status >= POSTCALCED)
- return;
- assert(status != POSTCALCING);// cyclic dependency
- status=POSTCALCING;
-
- for (int i=0; i < dependencies.size(); i++)
- if (dependencies[i])
- dependencies[i]->post_processing();
- do_post_processing();
- status=POSTCALCED;
-}
-
-void
-Staff_elem::molecule_processing()
-{
- if (status >= OUTPUT)
- return;
- status = OUTPUT; // do it only once.
- for (int i=0; i < dependencies.size(); i++)
- if (dependencies[i])
- dependencies[i]->molecule_processing();
-
- output= brew_molecule_p();
-}
-
-void
-Staff_elem::do_post_processing()
-{
-}
-
-void
-Staff_elem::do_pre_processing()
-{
-}
-
-void
-Staff_elem::do_add_processing()
-{
-}
-
-void
-Staff_elem::substitute_dependency(Staff_elem * old, Staff_elem * newdep)
-{
- bool hebbes_b=false;
- for (int i=0; i < dependencies.size(); i++) {
- if (dependencies[i] == old){
- dependencies[i] = newdep;
- hebbes_b = true;
- } else if (dependencies[i] == newdep) {
- hebbes_b = true;
- }
- }
- if (!hebbes_b)
- dependencies.push(newdep);
-}
-
-void
-Staff_elem::add_depedency(Staff_elem * p)
-{
- for (int i=0; i < dependencies.size(); i ++)
- if (dependencies[i] == p)
- return;
-
- dependencies.push(p);
- p->dependants.push(p);
-}
+++ /dev/null
-/*
- staffeleminfo.cc -- implement Staff_elem_info
-
- source file of the LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "staffeleminfo.hh"
-#include "request.hh"
-#include "voice.hh"
-
-Staff_elem_info::Staff_elem_info(Staff_elem*s_l, Request*r_l,
- Request_register *reg_l)
-{
- elem_p_ = s_l;
- voice_l_ = (r_l)?r_l->elt_l_->voice_l_:0;
- req_l_ = r_l;
- group_regs_l_ = 0;
- origin_reg_l_ = reg_l;
-}
-
-Staff_elem_info::Staff_elem_info()
-{
- elem_p_ = 0;
- voice_l_ = 0;
-
- group_regs_l_ = 0;
- origin_reg_l_ = 0;
- req_l_ = 0;
-}
-
+++ /dev/null
-/*
- staffwalker.cc -- implement Staff_walker
-
- source file of the LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "grouping.hh"
-#include "staff.hh"
-#include "musicalrequest.hh"
-#include "staffwalker.hh"
-#include "staffcolumn.hh"
-#include "scorecolumn.hh"
-#include "debug.hh"
-#include "timedescription.hh"
-#include "commandrequest.hh"
-#include "grouping.hh"
-#include "scorewalker.hh"
-
-Staff_walker::~Staff_walker()
-{
- do_pre_move();
-}
-
-Staff_walker::Staff_walker(Staff_walker const &s)
- :PCursor<Staff_column*> (s)
-{
- assert(false);
-}
-
-Staff_walker::Staff_walker(Staff * s, PScore*ps )
- : PCursor<Staff_column*> (s->cols_)
-{
- staff_l_ = s;
- pscore_l_ = ps;
-
- // should be in tdes. TODO
- default_grouping = new Rhythmic_grouping(MInterval(0, 1), 4);
- score_walk_l_ = 0;
-}
-
-Moment
-Staff_walker::when() const
-{
- return ptr()->when();
-}
-
-
-void
-Staff_walker::process_timing_reqs()
-{
- for (int i=0; i < ptr()->timing_req_l_arr_.size(); i++) {
- Timing_req * tr_l = ptr()->timing_req_l_arr_[i];
- if (tr_l->meterchange()) {
- int b_i=tr_l->meterchange()->beats_i_;
- int o_i = tr_l->meterchange()->one_beat_i_;
- time_.set_meter(b_i, o_i);
-
- *default_grouping = Rhythmic_grouping(
- MInterval(0,Moment(b_i, o_i)), b_i);
- }
- }
-
- for (int i=0; i < ptr()->timing_req_l_arr_.size(); i++) {
- Timing_req * tr_l = ptr()->timing_req_l_arr_[i];
- if (tr_l->partial()) {
- time_.setpartial(tr_l->partial()->duration_);
- } else if (tr_l->barcheck() && time_.whole_in_measure_) {
- warning( "Barcheck failed", tr_l->defined_ch_c_l_ );
- } 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_);
- }
- }
- time_.OK();
-}
-
-void
-Staff_walker::operator++(int i)
-{
- Moment last = when();
-
- do_pre_move();
- PCursor<Staff_column*>::operator++(i);
- if (ok() ) {
- Moment delta_t = when() - last;
- assert(delta_t >0);
- time_.add( delta_t );
- }
- do_post_move();
-}
-
-void
-Staff_walker::process()
-{
- process_timing_reqs();
- process_requests();
-}
-
-void
-Staff_walker::allow_break()
-{
- score_walk_l_->allow_break(this);
-}
-
+++ /dev/null
-/*
- stembeamreg.cc -- part of LilyPond
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "musicalrequest.hh"
-#include "stembeamreg.hh"
-#include "beam.hh"
-#include "stem.hh"
-#include "grouping.hh"
-#include "textspanner.hh"
-#include "complexwalker.hh"
-#include "complexstaff.hh"
-#include "debug.hh"
-#include "grouping.hh"
-Stem_beam_register::Stem_beam_register(Complex_walker*w)
- :Request_register(w)
-{
- do_post_move_process();
- current_grouping = 0;
- beam_p_ = 0;
- set_dir(0);
- start_req_l_ = 0;
-}
-
-bool
-Stem_beam_register::try_request(Request*req_l)
-{
- if ( req_l->beam() ) {
- if (bool(beam_p_ ) == bool(req_l->beam()->spantype == Span_req::START))
- return false;
-
- if (beam_req_l_ && Beam_req::compare(*beam_req_l_ , *req_l->beam()))
- return false;
-
- beam_req_l_ = req_l->beam();
- return true;
- }
-
- if ( req_l->stem() ) {
- if (current_grouping && !current_grouping->child_fit_query(
- walk_l_->time_.whole_in_measure_))
- return false;
-
- if (stem_req_l_ && Stem_req::compare(*stem_req_l_, *req_l->stem()))
- return false;
-
- stem_req_l_ = req_l->stem();
- return true;
- }
- return false;
-}
-
-void
-Stem_beam_register::process_request()
-{
- 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_;
-
- current_grouping = new Rhythmic_grouping;
- if (beam_req_l_->nplet) {
- Text_spanner* t = new Text_spanner();
- t->set_support(beam_p_);
- t->spec.align_i_ = 0;
- t->spec.text_str_ = beam_req_l_->nplet;
- t->spec.style_str_="italic";
- typeset_element(t);
- }
-
- }
- }
-
- if (stem_req_l_) {
- stem_p_ = new Stem(4);
- if (current_grouping)
- current_grouping->add_child(
- walk_l_->time_.whole_in_measure_,
- stem_req_l_->duration());
-
- stem_p_->flag = stem_req_l_->balltype;
-
- if (beam_p_) {
- if (stem_req_l_->balltype<= 4)
- warning( "stem doesn't fit in Beam",
- stem_req_l_->defined_ch_c_l_);
- else
- beam_p_->add(stem_p_);
- stem_p_->print_flag = false;
- } else {
- stem_p_->print_flag = true;
- }
-
- announce_element(Staff_elem_info(stem_p_,
- stem_req_l_, this));
- }
-}
-
-void
-Stem_beam_register::acknowledge_element(Staff_elem_info info)
-{
- if (!stem_p_)
- return;
-
- if (info.elem_p_->name() == String("Notehead") &&
- stem_req_l_->duration() == info.req_l_->rhythmic()->duration())
-
- stem_p_->add((Notehead*)info.elem_p_);
-}
-
-void
-Stem_beam_register::do_pre_move_process()
-{
- if (stem_p_) {
- if (default_dir_i_)
- stem_p_->dir = default_dir_i_;
-
- typeset_element(stem_p_);
- stem_p_ = 0;
- }
- if (beam_p_ && end_beam_b_) {
- walk_l_->default_grouping->extend(current_grouping->interval());
- beam_p_->set_grouping(*walk_l_->default_grouping, *current_grouping);
- typeset_element(beam_p_);
- delete current_grouping;
- current_grouping = 0;
- beam_p_ = 0;
- }
- end_beam_b_ = false;
-}
-void
-Stem_beam_register::do_post_move_process()
-{
- stem_p_ = 0;
- beam_req_l_ = 0;
- stem_req_l_ = 0;
- end_beam_b_ = false;
-}
-
-Stem_beam_register::~Stem_beam_register()
-{
- if (beam_p_)
- warning("unterminated beam", start_req_l_->defined_ch_c_l_);
-}
-
-void
-Stem_beam_register::set_dir(int i)
-{
- default_dir_i_ = i;
-}
+++ /dev/null
-#include "debug.hh"
-#include "lookup.hh"
-#include "paperdef.hh"
-#include "molecule.hh"
-#include "textdef.hh"
-
-Text_def::Text_def()
-{
- align_i_ = 1; // right
- style_str_ = "roman";
- defined_ch_c_l_ = 0;
-}
-bool
-Text_def::compare(const Text_def&def)
-{
- return align_i_ == def.align_i_ && text_str_ == def.text_str_
- && style_str_ == def.style_str_;
-}
-
-Atom
-Text_def::create_atom(Paperdef*p) const
-{
- return p->lookup_p_->text(style_str_, text_str_, -align_i_);
-}
-
-void
-Text_def::print() const
-{
- mtor << "Text `" << text_str_ << "\', style " <<
- style_str_ << "align " << align_i_ << '\n';
-}
+++ /dev/null
-/*
- textreg.cc -- implement Text_register
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "musicalrequest.hh"
-#include "textreg.hh"
-#include "textitem.hh"
-
-Text_register::Text_register(Complex_walker*w)
- : Request_register(w)
-{
- text_p_ = 0;
- set_dir(0);
-}
-
-bool
-Text_register::try_request(Request*req_l)
-{
- if (!req_l->text())
- return false;
- if (accepted_req_arr_.size() &&
- Text_req::compare(*req_l->text(), *accepted_req_arr_[0]->text()))
-
- return false;
-
- accepted_req_arr_.push(req_l);
- return true;
-}
-
-void
-Text_register::process_request()
-{
-
- if (accepted_req_arr_.size()) {
- text_p_ = new Text_item(accepted_req_arr_[0]->text(), 10);
- announce_element(Staff_elem_info(text_p_, accepted_req_arr_[0], this));
- }
-}
-void
-Text_register::do_pre_move_process()
-{
- if (text_p_) {
- text_p_->dir_i_ = dir_i_;
- typeset_element(text_p_);
- text_p_ = 0;
- }
-}
-void
-Text_register::set_dir(int i)
-{
- dir_i_ = i;
-}
+++ /dev/null
-/*
- timedescription.cc -- implement Time_description
-
- source file of the LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "timedescription.hh"
-#include "debug.hh"
-
-String
-Time_description::str()const
-{
- String s( "Time_description { ");
- if (cadenza_b_)
- s+=String( " (cadenza) ");
- s+= "at ";
- s+=when_;
- s+="\nmeter " + String(whole_per_measure_/one_beat_) +":" +
- String(Rational(Rational(1)/one_beat_));
- s+= "\nposition "+String( bars_i_) + ":"+ whole_in_measure_ +"\n}\n";
- return s;
-}
-
-void
-Time_description::print() const
-{
-#ifndef NPRINT
- mtor << str();
-#endif
-}
-void
-Time_description::OK() const
-{
-#ifndef NDEBUG
- if (!cadenza_b_)
- assert(whole_in_measure_ < whole_per_measure_);
- assert(0 <= whole_in_measure_);
- assert(one_beat_);
-#endif
-}
-
-void
-Time_description::set_cadenza(bool b)
-{
- if (cadenza_b_ && !b) {
- if (whole_in_measure_) {
- bars_i_ ++;
- whole_in_measure_ = 0;
- }
- }
- cadenza_b_ = b ;
-}
-
-Time_description::Time_description()
-{
- whole_per_measure_ = 1;
- whole_in_measure_ =0;
- one_beat_ = Moment(1,4);
- when_ = 0;
- bars_i_ = 0;
- cadenza_b_ = false;
-}
-
-void
-Time_description::add(Moment dt)
-{
- assert(dt >= Rational(0));
- when_ += dt;
- whole_in_measure_ += dt;
-
- while ( !cadenza_b_ && whole_in_measure_ >= whole_per_measure_ ) {
- whole_in_measure_ -= whole_per_measure_;
- bars_i_ ++;
- }
-}
-
-void
-Time_description::set_meter(int l, int o)
-{
- assert(o);
- one_beat_ = Rational(1)/Moment(o);
- whole_per_measure_ = Moment(l) * one_beat_;
- if(whole_in_measure_)
- error_t("Meterchange should be at start of measure", *this);
-}
-
-void
-Time_description::setpartial(Moment p)
-{
- if (when_)
- error_t ("Partial measure only allowed at beginning.", *this);
- if (p<Rational(0)||p > whole_per_measure_)
- error_t ("Partial measure has incorrect size", *this);
- whole_in_measure_ = whole_per_measure_ - p;
-}
-
-Moment
-Time_description::barleft()
-{
- assert(!cadenza_b_);
- return whole_per_measure_-whole_in_measure_;
-}
-
-int
-Time_description::compare(Time_description &t1, Time_description&t2)
-{
- int i = sign(t1.when_-t2.when_);
-
- if (!i) {
- assert(t1.bars_i_==t2.bars_i_);
- assert(t1.one_beat_ == t2.one_beat_);
- assert(t1.whole_in_measure_ == t2.whole_in_measure_);
- assert(t1.whole_per_measure_ == t2.whole_per_measure_);
- }
-
- return i;
-}
+++ /dev/null
-#include <fstream.h>
-#include <time.h>
-#include "tex.hh"
-#include "main.hh"
-#include "tstream.hh"
-#include "debug.hh"
-
-Tex_stream::Tex_stream(String filename)
-{
- os = new ofstream(filename);
- if (!*os)
- error("can't open `" + filename+"\'");
- nest_level = 0;
- outputting_comment=false;
- header();
-}
-void
-Tex_stream::header()
-{
- *os << "% Creator: " << get_version();
- *os << "% Automatically generated, at ";
- time_t t(time(0));
- *os << ctime(&t);
-//*os << "% from input file ..\n";
-}
-Tex_stream::~Tex_stream()
-{
- delete os;
- assert(nest_level == 0);
-}
-
-// print string. don't forget indent.
-Tex_stream &
-Tex_stream::operator<<(String s)
-{
-
- for (const char *cp = s; *cp; cp++) {
- if (outputting_comment) {
- *os << *cp;
- if (*cp == '\n') {
- outputting_comment=false;
-
- }
- continue;
- }
- switch(*cp)
- {
- case '%':
- outputting_comment = true;
- *os << *cp;
- break;
- case '{':
- nest_level++;
- *os << *cp;
- break;
- case '}':
- nest_level--;
- *os << *cp;
- assert (nest_level >= 0);
- /* FALTHROUGH */
-
- case '\n':
- *os << "%\n";
- *os << String(' ', nest_level);
- break;
- default:
- *os << *cp;
- break;
- }
- }
- return *this;
-}
-
-
-/* *************************************************************** */
+++ /dev/null
-/*
- voicegroup.cc -- implement Voice_group_registers
-
- source file of the LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "plist.hh"
-#include "musicalrequest.hh"
-#include "voiceregs.hh"
-#include "voicegroupregs.hh"
-#include "register.hh"
-#include "textreg.hh"
-#include "stembeamreg.hh"
-#include "scriptreg.hh"
-#include "complexwalker.hh"
-#include "commandrequest.hh"
-
-static int temp_id_count;
-
-Voice_group_registers::Voice_group_registers(Complex_walker*w_l, String id)
-{
- walk_l_ = w_l;
- add(new Text_register(w_l));
- add(new Stem_beam_register(w_l));
- add(new Script_register(w_l));
-
- if (id=="") // UGH
- id = __FUNCTION__ + String(temp_id_count++);
- group_id_str_ = id;
-}
-
-bool
-Voice_group_registers::try_request(Request*r_l)
-{
- if (r_l->groupfeature()) {
- set_dir(r_l->groupfeature()->stemdir_i_);
- return true;
- }
- return Register_group::try_request(r_l);
-}
-
-void
-Voice_group_registers::acknowledge_element(Staff_elem_info i)
-{
- if (i.group_regs_l_!= this)
- return;
- Register_group::acknowledge_element(i);
-}
-#if 1
-void
-Voice_group_registers::set_dir(int i)
-{
- Register_group::set_dir(i);
-
- // ughh
- Array<Voice_registers*> vr_arr (walk_l_->get_voice_regs(this));
- for (int j=0; j<vr_arr.size(); j++) {
- if (vr_arr[j])
- vr_arr[j]->set_dir(i);
- }
-}
-#endif
-bool
-Voice_group_registers::acceptable_request_b(Request*r)
-{
- return (r->stem() || r->beam() || r->text() || r->script() ||
- r->groupfeature());
-}
+++ /dev/null
-/*
- voiceregs.cc -- implement Voice_registers
-
- source file of the LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "musicalrequest.hh"
-#include "voiceregs.hh"
-#include "register.hh"
-#include "slurreg.hh"
-#include "headreg.hh"
-
-Voice_registers::Voice_registers(Complex_walker*c_l, Voice *v_p)
-{
- voice_l_ = v_p;
- add(new Notehead_register(c_l));
- add(new Slur_register(c_l));
-}
-
-void
-Voice_registers::acknowledge_element(Staff_elem_info i)
-{
- if (i.voice_l_ != voice_l_)
- return;
- Register_group::acknowledge_element(i);
-}
-
-bool
-Voice_registers::acceptable_request_b(Request*r)
-{
- return (r->rest() || r->note() || r->slur());
-}