gifs: $(addprefix $(outdir)/, $(giffiles))
-EXTRA_DISTFILES = $(XPMS) $(DOCFILES) $(wildcard Vocab*)
+EXTRA_DISTFILES = $(XPMS) $(DOCFILES) vocabulary-data vocabulary-forms.el
# don't do DVI files. They can only be made if lily is installed
do-doc: $(TEXTFILES)
--- /dev/null
+Francais:US English:Deutsch:UK English:Nederlands:Italiaans
+accentuation:accentuation:::accent:
+accolade:brace::::
+accord:chord:::akkoord:
+accord de neuvième dominante:chord of the dominant ninth:::dominant akkoord:
+accord de septième dominante:chord of the dominant seventh:::septiem akkoord:
+accord parfait majeur:perfect major chord::::
+accord parfait mineur:perfect minor chord::::
+alto:alto:::alt:
+altération accidentelle:accident; accidental alteration:::toevallig teken:
+altération essentielle:essential alteration::::
+appogiature:appoggiatura::::
+appogiature brève:short appoggiatura::::
+appogiature double:double appoggiatura::::
+appogiature longue:long appoggiatura::::
+appogiature simple:simple appoggiatura::::
+armature [de la clé]:key signature:::toonsoort (voortekens):
+armure [de la clé]:key signature::::
+arpège:arpeggio::::
+augmenté (intervalle):augmented (interval)::::
+bariton:baritone::::
+barre de mesure:bar line::::
+barre de reprise:repeat::::
+basse:bass::::
+blanche:half note::::
+bâton de pause:(arbitrary number of bars' rest)::::
+bâton de pause:four-bar rest::::
+bâton de pause:two-bar rest::::
+bécarre:natural sign:::herstellingsteken:
+bémol:flat:::mol:
+cadence:cadence::::
+cadence harmonique:harmonic cadence::::
+cadence mélodique:melodic cadence::::
+caractère:character::::
+chaîne de trilles:chain of trills::::
+chevron:chevron::::
+chiffrage (chiffres indicateurs):time signature:::maatsoort:
+chiffre inférieur:lower number::::
+chiffre supérieur:upper number::::
+clé:clef:::sleutel:
+clé d'octave:octave line::::
+clé d'ut:middle C clef:::C sleutel:
+clé de fa:bass clef::::
+clé de sol:treble clef::::
+comma:comma::::
+comma enharmonique::::
+comma pythagoricien::::
+comma syntonique::::
+consonance:consonant interval; consonance:::consonant:
+contralto:contralto::::
+contre-temps:contro-time::::
+contre-temps irrégulier:irregular contro-time::::
+contre-temps régulier:regular contro-time::::
+coulé:slur:::binding, bindingsboog:
+courbe rythmique:rythmic curve::::
+cresendo:opening angular bracket::::
+croche:eighth note::::
+decrescendo:closing angular bracket::::
+degré [de la gamme]:degree [of the scale]::::
+demi-pause:half rest::::
+demi-soupir:eighth rest::::
+demi-ton:semitone::::
+demi-ton chromatique:chromatic semitone::::
+demi-ton diatonique:diatonic semitone::::
+diapason:pitch pipe; tuning fork::::
+diminué (intervalle):diminished (interval)::::
+dissonance:dissonant interval; dissonance::::
+dièse:sharp::::
+do:C::::
+do central:middle C:::::
+doigté:::::
+doigté de pédale:::::
+dominante:dominant::::
+double barre:double bar line::::
+double bémol:double flat::::
+double croche:sixteenth note::::
+double dièse:double sharp::::
+double triolet:double triplet::::
+duolet:duplet::::
+durée:duration::::
+échelle d'octave:octave line::::
+échelle musicale:Musical Ladder::::
+enharmonie:enharmony::::
+espace:space::::
+extension d'intervalle:extension of interval::::
+fa:F::::
+figure de note:kind of note::::
+figure de silence:kind of rest::::
+fioriture:cadenza::::
+forme du mode mineur ancien:ancient form (diatonic minor scale)::::
+forme harmonique:harmonic form (diatonic minor scale)::::
+forme mélodique:melodic form (diatonic minor scale)::::
+gamme:scale::::
+gamme chromatique:chromatic scale::::
+gamme diatonique majeure:diatonic major scale::::
+gamme diatonique mineure:diatonic minor scale::::
+gammes enharmoniques:enharmonic scales::::
+gammes relatives:relative scales::::
+genre chromatique:chromatic type::::
+genre diatonique:diatonic type::::
+genre enharmonique:enharmonic type::::
+groupe irrégulier:irregular group::::
+grupetto:turn; gruppetto::::
+hauteur:pitch::::
+huitième de soupir:thirty-second rest::::
+incise:motive::::
+indication de pédale::::
+indication métronomique:metronomic indication::::
+intervalle:interval::::
+intervalle ascendant:ascending interval::::
+intervalle composé:compound interval::::
+intervalle descendant:descending interval::::
+intervalle harmonique:harmonic interval::::
+intervalle simple:simple interval::::
+intervalles enharmoniques:enharmonic intervals::::
+juste (intervalle):perfect (interval)::::
+la:A::::
+liaison:tie::::
+liaison rythmique:legato curve::::
+ligne:line::::
+ligne supplémentaire:ledger line::::
+majeur (intervalle):major (interval)::::
+membre de phrase:phrase member::::
+mesure:bar; measure:::maat, maatstreep:
+mesure artificielle:artificial measure::::
+mesure composée:compound measure::::
+mesure incomplète:incomplete measure::::
+mesure irrégulière:irregular measure::::
+mesure simple:simple measure::::
+mezzo-soprano:mezzo-soprano::::
+mi:E::::
+mineur (intervalle):minor (interval)::::
+mode:mode::::
+mode ecclésiastique::::
+mode majeur:major mode::::
+mode mineur:minor mode::::
+modulation:modulation::::
+mordant:mordent::::
+mouvement:tempo; movement::::
+mouvement conjoint:conjunct movement::::
+mouvement disjoint:disjunct movement::::
+mouvement lent:slow tempo::::
+mouvement modéré:moderate tempo::::
+mouvement rapide:fast tempo::::
+médiante:mediant::::
+métronome:metronome::::
+noire:quarter note::::
+note:note::::
+note doublement pointée:double dotted note::::
+note modale:modal note::::
+note pointée:dotted note::::
+note tonale:tonal note::::
+notes enharmoniques:enharmonic notes::::
+nuance:shading::::
+octave:octave::::
+ornement:embellishment; accessory::::
+partition:score::::
+pause:whole rest::::
+phrase:phrase::::
+phrasé:phrasing::::
+pizzicato:dash over/below::::
+point:dot::::
+point d'orgue:pause::::
+point et liaison combinés:dot and curved line combined::::
+pointillés::::
+portamento:underline over/below::::
+portée:staff::::
+portées:staves::::
+quadruple croche:sixty-fourth note::::
+quart de soupir:sixteenth rest::::
+quarte:fourth::::
+quartolet:quadruplet::::
+quinte:fifth::::
+registre:register::::
+renversement d'intervalle:inversion of interval::::
+renvoi:return sign::::
+respiration:artificial rest::::
+:double whole note::breve:brevis:breve
+ronde:whole note::::
+rythme:rythm::::
+ré:D::::
+seconde:second::::
+seizième de soupir:sixty-fourth rest::::
+sensible:leading note::::
+septième:seventh::::
+sextolet:sextuplet::::
+si:B::::
+signes indicateurs de nuance:shading signs::::
+silence:rest::::
+sixain:sextuplet::::
+sixte:sixth::::
+sol:G::::
+soprano:soprano::::
+soupir:quarter rest::::
+sous-dominante:subdominant::::
+sous-tonique:subtonic::::
+staccato:dot over/below::::
+sus-dominante:superdominant::::
+sus-tonique:supertonic::::
+syncope:syncopation; upbeat::::
+syncope irrégulière:irregular syncopation::::
+syncope régulière:regular syncopation::::
+temps:beat::::
+temps binaire:binary beat::::
+temps faible:weak beat::::
+temps fort:strong beat::::
+temps ternaire:ternary beat::::
+tempérament mésotonique:meantone tuning::::
+tempérament égal:tempered tuning::::
+tierce:third::::
+ton:tone::::
+tonalité:tonality::::
+tonique:tonic::::
+tons relatifs:relative scales::::
+tons voisins:adjacent keys::::
+transposition:transposition::::
+transposition chromatique:chromatic transposition::::
+transposition enharmonique:enharmonic transposition::::
+trille:trill; shake::::
+trille double:double trill::::
+triolet:triplet::::
+triple croche:thirty-second note::::
+triton:tritone::::
+ténor:tenor::::
+tétracorde:tetrachord::::
+unisson:unison::::
+unité de mesure:unit of measure::::
+unité de temps:unit of beat::::
+ut:C::::
+voix:voice::::
+:quarter note::crotchet::
+:quarter rest::crotchet rest::
+:thirty-second note::demisemiquaver::
+:thirty-second rest::demisemiquaver rest::
+:sixty-fourth note::hemidemisemiquaver::
+:sixty-fourth rest::hemidemisemiquaver rest::
+:half note::minim::
+:half rest::minim rest::
+:eighth note::quaver::
+:eighth rest::quaver rest::
+:whole note::semibreve::
+:whole rest::semibreve rest::
+:sixteenth note::semiquaver::
+:sixteenth rest::semiquaver rest::
--- /dev/null
+; Musical vocabularies are Copyright (C) 1993 Free Software Foundation, Inc.
+; Francois Pinard <pinard@iro.umontreal.ca>,
+; Neil Jerram <nj104@cus.cam.ac.uk>.
+; Forms by Han-Wen Nienhuys
+
+(setq forms-file "vocabulary-data")
+(setq forms-number-of-fields 6)
+(setq forms-read-only nil) ; to make sure
+(setq forms-field-sep ":")
+(setq forms-multi-line nil)
+
+(setq forms-format-list
+ (list
+ "*** Musical vocabulary ***\n"
+ "\nItalian: " 6
+ "\nFrench: " 1
+ "\nUS English: " 2
+ "\nGerman: " 3
+ "\nBritish English: " 4
+ "\nDutch: " 5
+ ))
Most of the items are marked in the code as well, with full explanation.
grep for TODO and ugh/ugr
+ * check out egcs
+
+ * give Items/Spanners access to unbroken originals
+
3RD PARTY BUGS:
* ICE: spring-spacer::calcideal()
- have make dist produce tarball in out/ directory.
- Use Automake
- shared lib on Solaris too.
- - check libtool, automake
+ - check libtool
- generate stuff in out/default, out/sun5-irix etc iso out/
and out-sun5/
+ * Add mudela-output to Rosegarden.
- * Add mudela to Rosegarden.
-
- * a musical dictionary. See Documentation/Vocab*
- - other languages
- - emacs forms mode for editing it.
-
+ * a musical dictionary. See Documentation/vocabulary-*, other
+languages:
+ - italian
+ - german
+ - dutch
+ - swedish
+ .. ?
* chords
- guitar chords
- MIDI output?
- typesetting
- * integrate midi-elts from mi2mu and lily
+ * integrate midi-elts from mi2mu and lily?
* Debug logs:
- derive lily_stream, Dstream, texstream from ostream?
- adapt for multiple font sizes.
- make separate class for Grace_*_engravers
(which is at Voice_gravs level)
- - move stem, beam, slur into baseclass to adapt for (fixed
- size) grace notes.
+ - make encapsulated spacing problems.
* accidentals per Voice_group
- NIFF ?
- Common Music Notation
- PostScript output (esp. Beams, Slurs, etc)
- - Move PScore, Items, Spanners etc. into libmutype.a
+ - Move all Score_elems, into libmutype.a
* Documentation
- rewrite : make a metafont iso font
* Font support:
- - update 20 pt table
- mixed fontsizes
* lines:
- redo Notehead to allow digits as heads
- add a \tablature {} lexer mode for easy entering
-
* should adjust stemlength for flag number.
* breaking:
* Rhythmic staff.
+ * Baroque superstaff
+
SEVERELY LACKING:
* SPEED!
* lyric in staff (sharpsharp in staff, text below)
- * replace Score_elem member access by get()/set() methods, to enable
- future embedded code.
-
* write Dynamic_line (to group dynamics horizontally)
* write Rest_collision
- String hash
- Pointer hash
-
* binsearch/hash for identifiers
* stafftypes: voice names/ instrument names.
* textspanner: center position
-
* Brackets
- * Scricts:
+ * Scripts:
- stack scripts in chords:
% fingering: footing:
< a-4 c-2 g-1 > < c-\ltoe e-\lheel >
% --|--- --|---
(where "to" is a tiny bow)
-DOC
- * all errors
-
- * hacking-HOWTO
-
-FUTURE
-
* auxilliary file for caching info.
* Text_crescendo
* volta
+DOC
+ * all errors
+
+ * hacking-HOWTO
+
IDEAS
* scoping in Lexer: do general id- assignments in mudela.
* move towards incremental algorithms.
- * design meta-language like TeX and Metafont
+ * far fetched language ideas
+ - design meta-language like TeX and Metafont
+ - programming/macros input
* Global type registration.
if ( t <= get_type( q ))
..
-
- * virtualise PCols to make encapsulated spacing problems
-
- * don't count bars which are not on first beat.
-
* naming of Voice_group/Voice
* benchmark band_matrices.
* lyrics in chords still fuck up.
- * rewire acknowledge_element() logic with a process_acknowledged()
-
+ *
+ - rewire acknowledge_element() logic with a process_acknowledged()
+ - construct Stem upon receiving Notehead. Junk Stem_req
+
+
* pushgroup/popgroup
* whole head on ledger line
struct Stem_info {
Real x;
- int dir_i_;
+ int dir_;
Real idealy_f_;
Real miny_f_;
int beams_i_;
Stem_info::Stem_info (Stem const *s)
{
x = s->hpos_f();
- dir_i_ = s->dir_i_;
- beams_i_ = intlog2( s->flag_i_) - 2;
+ dir_ = s->dir_;
+ beams_i_ = intlog2(s->flag_i_) - 2;
/*
- [todo]
- * get algorithm
- * runtime
-
- Breitkopf + H\"artel:
- miny_f_ = interline + #beams * interbeam
- ideal8 = 2 * interline + interbeam
- ideal16,32,64,128 = 1.5 * interline + #beams * interbeam
-
- * B\"arenreiter:
- miny_f_ = interline + #beams * interbeam
- ideal8,16 = 2 interline + #beams * interbeam
- ideal32,64,128 = 1.5 interline + #beams * interbeam
+ [todo]
+ * get algorithm
+ * runtime
+
+ Breitkopf + H\"artel:
+ miny_f_ = interline + #beams * interbeam
+ ideal8 = 2 * interline + interbeam
+ ideal16,32,64,128 = 1.5 * interline + #beams * interbeam
+
+ * B\"arenreiter:
+ miny_f_ = interline + #beams * interbeam
+ ideal8,16 = 2 interline + #beams * interbeam
+ ideal32,64,128 = 1.5 interline + #beams * interbeam
- */
+ */
Real notehead_y = s->paper()->interline_f ();
// huh? why do i need the / 2
-// Real interbeam_f = s->paper()->interbeam_f ();
+ // Real interbeam_f = s->paper()->interbeam_f ();
Real interbeam_f = s->paper()->interbeam_f () / 2;
/* well eh, huh?
- idealy_f_ = dir_i_ * s->stem_start_f() + beams_i_ * interbeam_f;
- if ( beams_i_ < 3)
- idealy_f_ += 2 * interline_f;
- else
- idealy_f_ += 1.5 * interline_f;
- */
+ idealy_f_ = dir_ * s->stem_start_f() + beams_i_ * interbeam_f;
+ if (beams_i_ < 3)
+ idealy_f_ += 2 * interline_f;
+ else
+ idealy_f_ += 1.5 * interline_f;
+ */
- idealy_f_ = dir_i_ * s->stem_end_f();
+ idealy_f_ = dir_ * s->stem_end_f();
- miny_f_ = dir_i_ * s->stem_start_f() + notehead_y + beams_i_ * interbeam_f;
+ miny_f_ = dir_ * s->stem_start_f() + notehead_y + beams_i_ * interbeam_f;
idealy_f_ = miny_f_ >? idealy_f_;
-// assert (miny_f_ <= idealy_f_);
+ // assert (miny_f_ <= idealy_f_);
}
Offset
-Beam::center()const
+Beam::center() const
{
Real w=(paper()->note_width () + width ().length ())/2.0;
return Offset (w, (left_pos + w* slope)*paper()->internote_f ());
stems.push (s);
s->add_dependency (this);
s->print_flag_b_ = false;
+
+ if (!spanned_drul_[LEFT])
+ set_bounds(LEFT,s);
+ set_bounds(RIGHT,s);
}
void
for (int i=0; i <stems.size(); i++)
{
- Stem *sl = stems[i];
- int cur_down = sl->get_center_distance_from_top();
- int cur_up = sl->get_center_distance_from_bottom();
- if (cur_down)
- {
- down += cur_down;
- down_count++;
- }
- if (cur_up)
- {
- up += cur_up;
- up_count++;
- }
+ Stem *sl = stems[i];
+ int cur_down = sl->get_center_distance_from_top();
+ int cur_up = sl->get_center_distance_from_bottom();
+ if (cur_down)
+ {
+ down += cur_down;
+ down_count++;
+ }
+ if (cur_up)
+ {
+ up += cur_up;
+ up_count++;
+ }
}
if (!down)
- down_count = 1;
+ down_count = 1;
if (!up)
- up_count = 1;
+ up_count = 1;
// the following relation is equal to
// up / up_count > down / down_count
- dir_i_ = (up * down_count > down * up_count) ? 1 : -1;
+ dir_ = (up * down_count > down * up_count) ? UP : DOWN;
- for (int i=0; i <stems.size(); i++)
- {
- Stem *sl = stems[i];
- sl->dir_i_ = dir_i_;
- }
+ for (int i=0; i <stems.size(); i++)
+ {
+ Stem *sl = stems[i];
+ sl->dir_ = dir_;
+ }
}
/*
Array<Stem_info> sinfo;
for (int j=0; j <stems.size(); j++)
{
- Stem *i = stems[j];
+ Stem *i = stems[j];
- i->set_default_extents();
- if (i->invisible_b())
- continue;
+ i->set_default_extents();
+ if (i->invisible_b())
+ continue;
- Stem_info info (i);
- sinfo.push (info);
+ Stem_info info (i);
+ sinfo.push (info);
}
if (! sinfo.size())
- slope = left_pos = 0;
+ slope = left_pos = 0;
else if (sinfo.size() == 1)
{
- slope = 0;
- left_pos = sinfo[0].idealy_f_;
+ slope = 0;
+ left_pos = sinfo[0].idealy_f_;
}
else
{
- Real leftx = sinfo[0].x;
- Least_squares l;
- for (int i=0; i < sinfo.size(); i++)
- {
- sinfo[i].x -= leftx;
- l.input.push (Offset (sinfo[i].x, sinfo[i].idealy_f_));
- }
-
- l.minimise (slope, left_pos);
+ Real leftx = sinfo[0].x;
+ Least_squares l;
+ for (int i=0; i < sinfo.size(); i++)
+ {
+ sinfo[i].x -= leftx;
+ l.input.push (Offset (sinfo[i].x, sinfo[i].idealy_f_));
+ }
+
+ l.minimise (slope, left_pos);
}
Real dy = 0.0;
for (int i=0; i < sinfo.size(); i++)
{
- Real y = sinfo[i].x * slope + left_pos;
- Real my = sinfo[i].miny_f_;
+ Real y = sinfo[i].x * slope + left_pos;
+ Real my = sinfo[i].miny_f_;
- if (my - y > dy)
- dy = my -y;
+ if (my - y > dy)
+ dy = my -y;
}
left_pos += dy;
- left_pos *= dir_i_;
+ left_pos *= dir_;
- slope *= dir_i_;
+ slope *= dir_;
/*
This neat trick is by Werner Lemberg, damped = tanh (slope) corresponds
with some tables in [Wanske]
- */
+ */
slope = 0.6 * tanh (slope);
- // ugh
+ // ugh
Real sl = slope*paper()->internote_f ();
paper()->lookup_l ()->beam (sl, 20 PT);
slope = sl /paper()->internote_f ();
Real x0 = stems[0]->hpos_f();
for (int j=0; j <stems.size(); j++)
{
- Stem *s = stems[j];
+ Stem *s = stems[j];
- Real x = s->hpos_f()-x0;
- s->set_stemend (left_pos + slope * x);
+ Real x = s->hpos_f()-x0;
+ s->set_stemend (left_pos + slope * x);
}
}
void
Beam::do_post_processing()
{
- if ( stems.size() < 2)
+ if (stems.size() < 2)
{
- warning ("Beam with less than 2 stems");
- transparent_b_ = true;
- return ;
+ warning ("Beam with less than 2 stems");
+ transparent_b_ = true;
+ return ;
}
solve_slope();
set_stemlens();
Array<int> b;
{
- Array<int> flags;
- for (int j=0; j <stems.size(); j++)
- {
- Stem *s = stems[j];
-
- int f = intlog2(abs (s->flag_i_))-2;
- assert (f>0);
- flags.push (f);
- }
- int fi =0;
- b= cur.generate_beams (flags, fi);
- b.insert (0,0);
- b.push (0);
- assert (stems.size() == b.size ()/2);
- }
+ Array<int> flags;
+ for (int j=0; j <stems.size(); j++)
+ {
+ Stem *s = stems[j];
+
+ int f = intlog2(abs (s->flag_i_))-2;
+ assert (f>0);
+ flags.push (f);
+ }
+ int fi =0;
+ b= cur.generate_beams (flags, fi);
+ b.insert (0,0);
+ b.push (0);
+ assert (stems.size() == b.size ()/2);
+ }
for (int j=0, i=0; i < b.size() && j <stems.size (); i+= 2, j++)
{
- Stem *s = stems[j];
- s->beams_left_i_ = b[i];
- s->beams_right_i_ = b[i+1];
+ Stem *s = stems[j];
+ s->beams_left_i_ = b[i];
+ s->beams_right_i_ = b[i+1];
}
}
void
Beam::do_pre_processing()
{
- if (!dir_i_)
- set_default_dir();
+ if (!dir_)
+ set_default_dir();
}
Beam::do_width() const
{
return Interval (stems[0]->hpos_f(),
- stems.top()->hpos_f ());
+ stems.top()->hpos_f ());
}
/*
beams to go with one stem.
*/
Molecule
-Beam::stem_beams (Stem *here, Stem *next, Stem *prev)const
+Beam::stem_beams (Stem *here, Stem *next, Stem *prev) const
{
- assert (!next || next->hpos_f() > here->hpos_f () );
- assert (!prev || prev->hpos_f() < here->hpos_f () );
-// Real dy=paper()->internote_f ()*2;
+ assert (!next || next->hpos_f() > here->hpos_f ());
+ assert (!prev || prev->hpos_f() < here->hpos_f ());
+ // Real dy=paper()->internote_f ()*2;
Real dy = paper()->interbeam_f ();
Real stemdx = paper()->rule_thickness ();
Real sl = slope*paper()->internote_f ();
/* half beams extending to the left. */
if (prev)
{
- int lhalfs= lhalfs = here->beams_left_i_ - prev->beams_right_i_ ;
- int lwholebeams= here->beams_left_i_ <? prev->beams_right_i_ ;
- Real w = (here->hpos_f() - prev->hpos_f ())/4;
- Symbol dummy;
- Atom a (dummy);
- if (lhalfs) // generates warnings if not
- a = paper()->lookup_l ()->beam (sl, w);
- a.translate (Offset (-w, -w * sl));
- for (int j = 0; j < lhalfs; j++)
- {
- Atom b (a);
- b.translate (-dir_i_ * dy * (lwholebeams+j), Y_AXIS);
- leftbeams.add (b);
- }
+ int lhalfs= lhalfs = here->beams_left_i_ - prev->beams_right_i_ ;
+ int lwholebeams= here->beams_left_i_ <? prev->beams_right_i_ ;
+ Real w = (here->hpos_f() - prev->hpos_f ())/4;
+ Symbol dummy;
+ Atom a (dummy);
+ if (lhalfs) // generates warnings if not
+ a = paper()->lookup_l ()->beam (sl, w);
+ a.translate (Offset (-w, -w * sl));
+ for (int j = 0; j < lhalfs; j++)
+ {
+ Atom b (a);
+ b.translate (-dir_ * dy * (lwholebeams+j), Y_AXIS);
+ leftbeams.add (b);
+ }
}
if (next)
{
- int rhalfs = here->beams_right_i_ - next->beams_left_i_;
- int rwholebeams = here->beams_right_i_ <? next->beams_left_i_;
+ int rhalfs = here->beams_right_i_ - next->beams_left_i_;
+ int rwholebeams = here->beams_right_i_ <? next->beams_left_i_;
- Real w = next->hpos_f() - here->hpos_f ();
- Atom a = paper()->lookup_l ()->beam (sl, w + stemdx);
+ Real w = next->hpos_f() - here->hpos_f ();
+ Atom a = paper()->lookup_l ()->beam (sl, w + stemdx);
- int j = 0;
- for (; j < rwholebeams; j++)
- {
- Atom b (a);
- b.translate (-dir_i_ * dy * j, Y_AXIS);
- rightbeams.add (b);
- }
-
- w /= 4;
- if (rhalfs)
- a = paper()->lookup_l ()->beam (sl, w);
+ int j = 0;
+ for (; j < rwholebeams; j++)
+ {
+ Atom b (a);
+ b.translate (-dir_ * dy * j, Y_AXIS);
+ rightbeams.add (b);
+ }
+
+ w /= 4;
+ if (rhalfs)
+ a = paper()->lookup_l ()->beam (sl, w);
- for (; j < rwholebeams + rhalfs; j++)
- {
- Atom b (a);
- b.translate (-dir_i_ * dy * j, Y_AXIS);
- rightbeams.add (b);
- }
+ for (; j < rwholebeams + rhalfs; j++)
+ {
+ Atom b (a);
+ b.translate (-dir_ * dy * j, Y_AXIS);
+ rightbeams.add (b);
+ }
}
leftbeams.add (rightbeams);
Molecule *mol_p = new Molecule;
// huh? inter-what
-// Real inter_f = paper()->interbeam_f ();
+ // Real inter_f = paper()->interbeam_f ();
Real inter_f = paper()->internote_f ();
Real x0 = stems[0]->hpos_f();
for (int j=0; j <stems.size(); j++)
{
- Stem *i = stems[j];
- Stem * prev = (j > 0)? stems[j-1] : 0;
- Stem * next = (j < stems.size()-1) ? stems[j+1] :0;
-
- Molecule sb = stem_beams (i, next, prev);
- Real x = i->hpos_f()-x0;
- sb.translate (Offset (x, (x * slope + left_pos)* inter_f));
- mol_p->add (sb);
+ Stem *i = stems[j];
+ Stem * prev = (j > 0)? stems[j-1] : 0;
+ Stem * next = (j < stems.size()-1) ? stems[j+1] :0;
+
+ Molecule sb = stem_beams (i, next, prev);
+ Real x = i->hpos_f()-x0;
+ sb.translate (Offset (x, (x * slope + left_pos)* inter_f));
+ mol_p->add (sb);
}
- mol_p->translate (x0 - left_col_l_->hpos_f_, X_AXIS);
+ mol_p->translate (x0 - spanned_drul_[LEFT]->absolute_coordinate(X_AXIS), X_AXIS);
return mol_p;
}
IMPLEMENT_IS_TYPE_B1(Beam, Spanner);
void
-Beam::do_print()const
+Beam::do_print() const
{
#ifndef NPRINT
DOUT << "slope " <<slope << "left ypos " << left_pos;
{
if (o->is_type_b (Stem::static_name()))
{
- stems.substitute ((Stem*)o->item(), n?(Stem*) n->item ():0);
+ stems.substitute ((Stem*)o->item(), n?(Stem*) n->item ():0);
}
}
Crescendo::Crescendo()
{
- grow_dir_i_ =0;
- dir_i_ = -1 ;
- left_dyn_b_ = right_dyn_b_ =false;
+ grow_dir_ =0;
+ dir_ = DOWN ;
+ dyn_b_drul_[LEFT] = dyn_b_drul_[RIGHT] =false;
inside_staff_b_ = false;
}
Interval
-Crescendo::symbol_height()const
+Crescendo::symbol_height() const
{
return get_symbol().dim[Y_AXIS];
}
static Real absdyn_dim = 10 PT; // ugh
Symbol
-Crescendo::get_symbol()const
+Crescendo::get_symbol() const
{
Real w_dim = width().length ();
- if ( left_dyn_b_)
+ if (dyn_b_drul_[LEFT])
{
- w_dim -= absdyn_dim;
+ w_dim -= absdyn_dim;
}
- if ( right_dyn_b_)
+ if (dyn_b_drul_[RIGHT])
{
- w_dim -= absdyn_dim;
+ w_dim -= absdyn_dim;
}
if (w_dim < 0)
{
- warning ("Crescendo too small");
- w_dim = 0;
+ warning ("Crescendo too small");
+ w_dim = 0;
}
- return Symbol (paper()->lookup_l ()->hairpin (w_dim, grow_dir_i_ < 0));
+ return Symbol (paper()->lookup_l ()->hairpin (w_dim, grow_dir_ < 0));
}
Molecule*
{
Molecule* m_p =0;
Real x_off_dim=0.0;
- if ( left_dyn_b_)
- x_off_dim += absdyn_dim;
+ if (dyn_b_drul_[LEFT])
+ x_off_dim += absdyn_dim;
m_p = new Molecule;
Symbol s (get_symbol());
void
Directional_spanner::set_default_dir()
{
- dir_i_ = -1;
+ dir_ = DOWN;
}
void
Directional_spanner::do_pre_processing()
{
- if (!dir_i_)
+ if (!dir_)
set_default_dir();
}
Directional_spanner::Directional_spanner()
{
- dir_i_ = 0;
+ dir_ = CENTER;
}
class Musical_req : public virtual Request {
public:
- virtual Lyric_req* lreq_l() { return 0; }
- virtual Note_req *note() { return 0;}
- virtual Stem_req *stem() { return 0;}
- virtual Melodic_req *melodic() { return 0; }
- virtual Slur_req *slur() { return 0 ; }
- virtual Beam_req *beam() { return 0 ; }
- virtual Rhythmic_req*rhythmic() { return 0; }
- virtual Musical_script_req*musicalscript() { return 0; }
- virtual Text_req*text() { return 0; }
- virtual Rest_req *rest() { return 0; }
- virtual Skip_req* skip() { return 0; }
- virtual Dynamic_req* dynamic() { return 0; }
- virtual Absolute_dynamic_req * absdynamic() { return 0; }
- virtual Tie_req * tie() { return 0; }
- virtual Span_dynamic_req * span_dynamic() { return 0; }
- REQUESTMETHODS(Musical_req, musical);
+ virtual Lyric_req* lreq_l() { return 0; }
+ virtual Note_req *note() { return 0;}
+ virtual Stem_req *stem() { return 0;}
+ virtual Melodic_req *melodic() { return 0; }
+ virtual Slur_req *slur() { return 0 ; }
+ virtual Beam_req *beam() { return 0 ; }
+ virtual Rhythmic_req*rhythmic() { return 0; }
+ virtual Musical_script_req*musicalscript() { return 0; }
+ virtual Text_req*text() { return 0; }
+ virtual Rest_req *rest() { return 0; }
+ virtual Skip_req* skip() { return 0; }
+ virtual Dynamic_req* dynamic() { return 0; }
+ virtual Absolute_dynamic_req * absdynamic() { return 0; }
+ virtual Tie_req * tie() { return 0; }
+ virtual Span_dynamic_req * span_dynamic() { return 0; }
+ REQUESTMETHODS(Musical_req, musical);
};
*/
class Rhythmic_req : public virtual Musical_req {
public:
- Duration duration_;
+ Duration duration_;
- /* *************** */
- void set_duration (Duration);
- bool do_equal_b (Request*)const;
- virtual Moment duration() const;
- Rhythmic_req();
- static int compare (Rhythmic_req const&,Rhythmic_req const&);
- REQUESTMETHODS(Rhythmic_req, rhythmic);
+ /* *************** */
+ void set_duration (Duration);
+ bool do_equal_b (Request*) const;
+ virtual Moment duration() const;
+ Rhythmic_req();
+ static int compare (Rhythmic_req const&,Rhythmic_req const&);
+ REQUESTMETHODS(Rhythmic_req, rhythmic);
};
class Skip_req : public Rhythmic_req {
public:
- REQUESTMETHODS(Skip_req, skip);
+ REQUESTMETHODS(Skip_req, skip);
};
struct Spacing_req :virtual Request {
- Moment next;
- Real distance;
- Real strength;
- /* *************** */
- Spacing_req();
- REQUESTMETHODS(Spacing_req, spacing);
+ Moment next;
+ Real distance;
+ Real strength;
+ /* *************** */
+ Spacing_req();
+ REQUESTMETHODS(Spacing_req, spacing);
};
class Blank_req : public Spacing_req, Rhythmic_req {
public:
- REQUESTMETHODS(Spacing_req, spacing);
+ REQUESTMETHODS(Spacing_req, spacing);
};
/// Put a text above or below (?) this staff.
class Text_req : public virtual Musical_req {
public:
- /// preferred position (above/below)
- int dir_i_;
- /// the characteristics of the text
- Text_def *tdef_p_;
+ /// preferred position (above/below)
+ Direction dir_;
+ /// the characteristics of the text
+ Text_def *tdef_p_;
- /* *************** */
- Text_req (int d, Text_def*);
- ~Text_req();
- Text_req (Text_req const&);
+ /* *************** */
+ Text_req (int d, Text_def*);
+ ~Text_req();
+ Text_req (Text_req const&);
- REQUESTMETHODS(Text_req,text);
+ REQUESTMETHODS(Text_req,text);
};
/** Put a text in lyric_staff
*/
class Lyric_req : public Rhythmic_req, public Text_req {
public:
- Lyric_req (Text_def* t_p);
- REQUESTMETHODS(Lyric_req, lreq_l);
+ Lyric_req (Text_def* t_p);
+ REQUESTMETHODS(Lyric_req, lreq_l);
};
/// request which has some kind of pitch
struct Melodic_req :virtual Musical_req
{
- /// 0 is c, 6 is b
- int notename_i_;
- /// 0 is central c
- int octave_i_;
+ /// 0 is c, 6 is b
+ int notename_i_;
+ /// 0 is central c
+ int octave_i_;
/// 0 natural, 1 sharp, etc
- int accidental_i_;
+ int accidental_i_;
- /// return height from central c (in halflines)
- int height()const;
+ /// return height from central c (in halflines)
+ int height() const;
- /// transpose. #delta# is relative to central c.
- void transpose (Melodic_req const &delta);
- /// return pitch from central c (in halfnotes)
- int pitch()const;
- Melodic_req();
- bool do_equal_b (Request*)const;
- static int compare (Melodic_req const&,Melodic_req const&);
- REQUESTMETHODS(Melodic_req,melodic);
+ /// transpose. #delta# is relative to central c.
+ void transpose (Melodic_req const &delta);
+ /// return pitch from central c (in halfnotes)
+ int pitch() const;
+ Melodic_req();
+ bool do_equal_b (Request*) const;
+ static int compare (Melodic_req const&,Melodic_req const&);
+ REQUESTMETHODS(Melodic_req,melodic);
};
/// Put a note of specified type, height, and with accidental on the staff.
class Note_req : public Rhythmic_req, virtual public Melodic_req {
public:
- /// force/supress printing of accidental.
- bool forceacc_b_;
- Note_req();
- bool do_equal_b (Request*)const;
- Rhythmic_req* rhythmic() { return Rhythmic_req::rhythmic (); }
- REQUESTMETHODS(Note_req, note);
- };
+ /// force/supress printing of accidental.
+ bool forceacc_b_;
+ Note_req();
+ bool do_equal_b (Request*) const;
+ Rhythmic_req* rhythmic() { return Rhythmic_req::rhythmic (); }
+ REQUESTMETHODS(Note_req, note);
+};
/**
Put a rest on the staff. Why a request? It might be a good idea to not typeset the rest, if the paper is too crowded.
*/
class Rest_req : public Rhythmic_req {
public:
- REQUESTMETHODS(Rest_req,rest);
+ REQUESTMETHODS(Rest_req,rest);
};
-/**
- attach a stem to the noteball.
- Rhythmic_req parent needed to determine if it will fit inside a beam.
- */
-class Stem_req : public Rhythmic_req {
-public:
- /// preferred direction for the stem
- int dir_i_;
- Stem_req();
- REQUESTMETHODS(Stem_req,stem);
-};
+
/**
Requests to start or stop something.
*/
class Span_req : public virtual Musical_req {
public:
- /// should the spanner start or stop, or is it unwanted?
- enum {
- NOSPAN, START, STOP
- } spantype ;
- bool do_equal_b (Request*)const;
- REQUESTMETHODS(Span_req,span);
+ /// should the spanner start or stop, or is it unwanted?
+ enum {
+ NOSPAN, START, STOP
+ } spantype ;
+ bool do_equal_b (Request*) const;
+ REQUESTMETHODS(Span_req,span);
- Span_req();
+ Span_req();
};
will try to put an appropriate number over the beam */
class Beam_req : public Span_req {
public:
- int nplet;
+ int nplet;
- /* *************** */
- REQUESTMETHODS(Beam_req,beam);
+ /* *************** */
+ REQUESTMETHODS(Beam_req,beam);
- Beam_req();
+ Beam_req();
};
/**
*/
class Tie_req : public Musical_req {
public:
- REQUESTMETHODS(Tie_req, tie);
+ REQUESTMETHODS(Tie_req, tie);
};
/// a slur
class Slur_req : public Span_req {
public:
- REQUESTMETHODS(Slur_req,slur);
+ REQUESTMETHODS(Slur_req,slur);
};
class Musical_script_req : public Musical_req, public Script_req {
public:
- REQUESTMETHODS(Musical_script_req, musicalscript);
+ REQUESTMETHODS(Musical_script_req, musicalscript);
};
class Dynamic_req : public virtual Musical_req {
public:
- /// for absolute dynamics
- enum Loudness {
- FFF, FF, F, MF, MP, P, PP, PPP
- };
- static String loudness_str (Loudness);
- REQUESTMETHODS(Dynamic_req, dynamic);
+ /// for absolute dynamics
+ enum Loudness {
+ FFF, FF, F, MF, MP, P, PP, PPP
+ };
+ static String loudness_str (Loudness);
+ REQUESTMETHODS(Dynamic_req, dynamic);
};
class Absolute_dynamic_req : public Dynamic_req {
public:
- Loudness loudness_;
- Absolute_dynamic_req();
- REQUESTMETHODS(Absolute_dynamic_req, absdynamic);
+ Loudness loudness_;
+ Absolute_dynamic_req();
+ REQUESTMETHODS(Absolute_dynamic_req, absdynamic);
};
class Span_dynamic_req : public Dynamic_req, public Span_req {
public:
- /// Grow or shrink the volume: 1=cresc, -1 = decresc
- int dynamic_dir_i_;
- Span_dynamic_req();
- REQUESTMETHODS(Span_dynamic_req, span_dynamic);
+ /// Grow or shrink the volume: 1=cresc, -1 = decresc
+ Direction dynamic_dir_;
+ Span_dynamic_req();
+ REQUESTMETHODS(Span_dynamic_req, span_dynamic);
};
#endif // MUSICALREQUESTS_HH
int dots_i_;
int balltype_i_;
int dot_delta_y_i_;
- int x_dir_i_;
+ Direction x_dir_;
/* *************** */
void set_dots();
static int compare (Note_head * const &a, Note_head *const &b) ;
protected:
- virtual void do_print()const;
+ virtual void do_print() const;
virtual void do_pre_processing();
- virtual Molecule* brew_molecule_p()const;
+ virtual Molecule* brew_molecule_p() const;
};
#endif // NOTEHEAD_HH
/** The characteristics of a certain kind of accent. It is not the
accent itself. */
class Script_def : public General_script_def {
- /// invert if below staff?
- bool invertsym_b_;
- String symidx_str_;
+ /// invert if below staff?
+ bool invertsym_b_;
+ String symidx_str_;
- /// on the other side of the stem?
- int rel_stem_dir_i_;
+ /// on the other side of the stem?
+ Direction rel_stem_dir_;
- /// below or above staff?
- int staff_dir_i_;
+ /// below or above staff?
+ Direction staff_dir_;
- /// how close to the note do we want to be?
- int priority_i_;
+ /// how close to the note do we want to be?
+ int priority_i_;
- /// follow the ball inside staff?
- bool inside_staff_b_;
+ /// follow the ball inside staff?
+ bool inside_staff_b_;
public:
- virtual int staff_dir_i()const;
- virtual int rel_stem_dir_i()const;
- virtual int priority_i()const;
- virtual bool inside_b()const;
- virtual Atom get_atom (Paper_def* p, int dir_i_)const;
- DECLARE_MY_RUNTIME_TYPEINFO;
-
- virtual bool do_equal_b (General_script_def const *)const;
- virtual void do_print() const;
- Script_def();
- void set_from_input (String, bool, int, int ,bool,int);
+ virtual Direction staff_dir() const;
+ virtual Direction rel_stem_dir() const;
+ virtual int priority_i() const;
+ virtual bool inside_b() const;
+ virtual Atom get_atom (Paper_def* p, Direction dir_) const;
+ DECLARE_MY_RUNTIME_TYPEINFO;
+
+ virtual bool do_equal_b (General_script_def const *) const;
+ virtual void do_print() const;
+ Script_def();
+ void set_from_input (String, bool, int, int ,bool,int);
protected:
- VIRTUAL_COPY_CONS(Script_def,General_script_def);
+ VIRTUAL_COPY_CONS(Script_def,General_script_def);
};
void
Lyric_engraver::do_process_requests()
{
- if ( lreq_l_)
+ if (lreq_l_)
{
lyric_item_p_ = new Text_item (lreq_l_->tdef_p_);
lyric_item_p_->translate (paper()->note_width ()/2 , X_AXIS);
- lyric_item_p_->dir_i_ = -1;
+ lyric_item_p_->dir_ = DOWN;
lyric_item_p_->fat_b_ = true;
announce_element (Score_elem_info (lyric_item_p_, lreq_l_));
}
void
Lyric_engraver::do_pre_move_processing()
{
- if ( lyric_item_p_)
+ if (lyric_item_p_)
{
typeset_element (lyric_item_p_);
lyric_item_p_ =0;
#include "rest-column.hh"
bool
-Note_column_engraver::acceptable_elem_b (Score_elem const*elem_C)const
+Note_column_engraver::acceptable_elem_b (Score_elem const*elem_C) const
{
char const*nC = elem_C->name();
return (nC == Script::static_name() || nC == Note_head::static_name ()
- || nC == Stem::static_name());
+ || nC == Stem::static_name());
}
Note_column*
Note_column_engraver::note_col_l()
{
if (!ncol_p_)
{
- ncol_p_ = new Note_column;
- announce_element (Score_elem_info (ncol_p_, 0));
+ ncol_p_ = new Note_column;
+ announce_element (Score_elem_info (ncol_p_, 0));
}
return ncol_p_;
}
{
if (!restcol_p_)
{
- restcol_p_ = new Rest_column;
- announce_element (Score_elem_info (restcol_p_,0));
+ restcol_p_ = new Rest_column;
+ announce_element (Score_elem_info (restcol_p_,0));
}
return restcol_p_;
}
Note_column_engraver::acknowledge_element (Score_elem_info i)
{
if (!acceptable_elem_b (i.elem_l_))
- return;
+ return;
char const*nC = i.elem_l_->name();
if (nC == Script::static_name() && i.req_l_ && i.req_l_->musical ())
{
- script_l_arr_.push ((Script*)i.elem_l_->item());
+ script_l_arr_.push ((Script*)i.elem_l_->item());
}
else if (nC == Note_head::static_name())
{
- Note_head * h_l = (Note_head*)i.elem_l_->item();
- if (h_l->rest_b_)
- rest_col_l()->add (h_l);
- else
- note_col_l()->add (h_l);
+ Note_head * h_l = (Note_head*)i.elem_l_->item();
+ if (h_l->rest_b_)
+ rest_col_l()->add (h_l);
+ else
+ note_col_l()->add (h_l);
}
else if (nC == Stem::static_name())
{
- stem_l_ = (Stem*)i.elem_l_->item();
+ stem_l_ = (Stem*)i.elem_l_->item();
}
- if ( ncol_p_ || restcol_p_)
+ if (ncol_p_ || restcol_p_)
{
- if ( stem_l_)
- {
- if (restcol_p_&& !restcol_p_->stem_l_)
- restcol_p_->set (stem_l_);
- if (ncol_p_ && !ncol_p_->stem_l_)
- ncol_p_->set (stem_l_);
- }
+ if (stem_l_)
+ {
+ if (restcol_p_&& !restcol_p_->stem_l_)
+ restcol_p_->set (stem_l_);
+ if (ncol_p_ && !ncol_p_->stem_l_)
+ ncol_p_->set (stem_l_);
+ }
- for (int i=0; i < script_l_arr_.size(); i++)
- {
- if (restcol_p_)
- restcol_p_->add (script_l_arr_[i]);
- if ( ncol_p_)
- ncol_p_->add (script_l_arr_[i]);
- }
+ for (int i=0; i < script_l_arr_.size(); i++)
+ {
+ if (restcol_p_)
+ restcol_p_->add (script_l_arr_[i]);
+ if (ncol_p_)
+ ncol_p_->add (script_l_arr_[i]);
+ }
- script_l_arr_.clear();
+ script_l_arr_.clear();
}
}
{
if (ncol_p_)
{
- if (! ncol_p_->h_shift_b_)
- ncol_p_->h_shift_b_ = h_shift_b_;
- if (! ncol_p_->dir_i_)
- ncol_p_->dir_i_ = dir_i_;
+ if (! ncol_p_->h_shift_b_)
+ ncol_p_->h_shift_b_ = h_shift_b_;
+ if (! ncol_p_->dir_)
+ ncol_p_->dir_ = dir_;
- typeset_element (ncol_p_);
- ncol_p_ =0;
+ typeset_element (ncol_p_);
+ ncol_p_ =0;
}
if (restcol_p_)
{
- if (! restcol_p_->dir_i_)
- restcol_p_->dir_i_ = dir_i_;
+ if (! restcol_p_->dir_)
+ restcol_p_->dir_ = dir_;
- typeset_element (restcol_p_);
- restcol_p_ =0;
+ typeset_element (restcol_p_);
+ restcol_p_ =0;
}
}
void
Note_column_engraver::set_feature (Feature i)
{
- if (i.type_ == "vdir")
- dir_i_ = i.value_;
- if (i.type_ == "hshift")
- h_shift_b_ = (bool)(int)i.value_;
+ if (i.type_ == "vdir")
+ dir_ = (Direction) int(i.value_);
+ if (i.type_ == "hshift")
+ h_shift_b_ = (bool)(int)i.value_;
}
Note_column_engraver::Note_column_engraver()
{
- dir_i_ =0;
+ dir_ =CENTER;
h_shift_b_ = false;
ncol_p_=0;
IMPLEMENT_IS_TYPE_B1(Note_column,Head_column);
-void
-Note_column::set (Stem*s)
-{
- stem_l_ = s;
- add_support (s);
-}
-
Note_column::Note_column()
{
h_shift_b_ =false;
}
Interval_t<int>
-Note_column::head_positions_interval()const
+Note_column::head_positions_interval() const
{
((Note_column*)this)->sort();
- return Interval_t<int> ( head_l_arr_[0]->position_i_,
+ return Interval_t<int> (head_l_arr_[0]->position_i_,
head_l_arr_.top()->position_i_);
}
void
Note_column::do_pre_processing()
{
- if (!dir_i_&& !stem_l_)
+ if (!dir_&& !stem_l_)
{
- dir_i_ = (head_positions_interval().center () >= 5) ? -1 : 1;
+ dir_ = (head_positions_interval().center () >= 5) ? DOWN:UP;
}
Head_column::do_pre_processing();
}
Note_head::Note_head (int ss)
{
- x_dir_i_ = 0;
+ x_dir_ = CENTER;
staff_size_i_=ss;
position_i_ = 0;
balltype_i_ = 0;
{
// 8 ball looks the same as 4 ball:
if (balltype_i_ > 2 && !rest_b_)
- balltype_i_ = 2;
+ balltype_i_ = 2;
if (rest_b_)
{
- if (balltype_i_ == 0)
- position_i_ += 6;
- else if (balltype_i_ == 0)
- position_i_ += 4;
+ if (balltype_i_ == 0)
+ position_i_ += 6;
+ else if (balltype_i_ == 0)
+ position_i_ += 4;
}
}
IMPLEMENT_IS_TYPE_B1(Note_head,Item);
void
-Note_head::do_print()const
+Note_head::do_print() const
{
#ifndef NPRINT
if (rest_b_)
- DOUT << "REST! ";
+ DOUT << "REST! ";
DOUT << "balltype_i_ "<< balltype_i_ << ", position_i_ = "<< position_i_
- << "dots_i_ " << dots_i_;
+ << "dots_i_ " << dots_i_;
#endif
}
Note_head::set_dots()
{
if (!(position_i_ %2) && rest_b_ && balltype_i_ == 0)
- dot_delta_y_i_ = -1;
+ dot_delta_y_i_ = -1;
else if (!(position_i_ %2))
- dot_delta_y_i_ = 1;
+ dot_delta_y_i_ = 1;
}
/*
bool streepjes_b = (position_i_<-1) || (position_i_ > staff_size_i_+1);
if (!rest_b_)
- s = p->lookup_l()->ball (balltype_i_);
+ s = p->lookup_l()->ball (balltype_i_);
else
{
- s = p->lookup_l()->rest (balltype_i_, streepjes_b);
+ s = p->lookup_l()->rest (balltype_i_, streepjes_b);
}
out = new Molecule (Atom (s));
- out->translate (x_dir_i_ * s.dim.x().length () , X_AXIS);
+ out->translate (x_dir_ * s.dim.x().length () , X_AXIS);
if (dots_i_)
{
- Symbol d = p->lookup_l()->dots (dots_i_);
- Molecule dm;
- dm.add (Atom (d));
- dm.translate (inter_f * dot_delta_y_i_ , Y_AXIS);
- out->add_right (dm);
+ Symbol d = p->lookup_l()->dots (dots_i_);
+ Molecule dm;
+ dm.add (Atom (d));
+ dm.translate (inter_f * dot_delta_y_i_ , Y_AXIS);
+ out->add_right (dm);
}
if (rest_b_)
{
- streepjes_b = false;
+ streepjes_b = false;
}
if (streepjes_b)
{
- int dir = sign (position_i_);
- int s =(position_i_<-1) ? -((-position_i_)/2): (position_i_-staff_size_i_)/2;
+ int dir = sign (position_i_);
+ int s =(position_i_<-1) ? -((-position_i_)/2): (position_i_-staff_size_i_)/2;
- Symbol str = p->lookup_l()->streepjes (s);
- Molecule sm;
- sm.add (Atom (str));
- if (position_i_ % 2)
- sm.translate (-inter_f* dir, Y_AXIS);
- out->add (sm);
+ Symbol str = p->lookup_l()->streepjes (s);
+ Molecule sm;
+ sm.add (Atom (str));
+ if (position_i_ % 2)
+ sm.translate (-inter_f* dir, Y_AXIS);
+ out->add (sm);
}
out->translate (inter_f*position_i_, Y_AXIS);
Staff_side::do_substitute_dependency (o,n);
if (o == stem_l_)
{
- stem_l_ = n ? (Stem*)n->item() : 0;
+ stem_l_ = n ? (Stem*)n->item() : 0;
}
}
specs_l_ = 0;
inside_staff_b_ = false;
stem_l_ = 0;
- dir_i_ = 0;
+ dir_ = CENTER;
}
void
Script::set_default_dir()
{
- int s_i=specs_l_->rel_stem_dir_i();
+ int s_i=specs_l_->rel_stem_dir();
if (s_i)
{
- if (stem_l_)
- dir_i_ = stem_l_->dir_i_ * s_i;
- else
- {
- specs_l_->warning ("Script needs stem direction");
- dir_i_ = -1;
- }
+ if (stem_l_)
+ dir_ = stem_l_->dir_ * s_i;
+ else
+ {
+ specs_l_->warning ("Script needs stem direction");
+ dir_ = DOWN;
+ }
}
else
{
- dir_i_ =specs_l_->staff_dir_i();
+ dir_ =specs_l_->staff_dir();
}
- assert (dir_i_);
+ assert (dir_);
}
Interval
Script::do_width() const
{
- return specs_l_->get_atom (paper(), dir_i_).extent ().x ();
+ return specs_l_->get_atom (paper(), dir_).extent ().x ();
}
void
{
if (breakable_b_ && break_status_i() != 1)
{
- transparent_b_ = empty_b_ = true;
+ transparent_b_ = empty_b_ = true;
}
- if (!dir_i_)
- set_default_dir();
+ if (!dir_)
+ set_default_dir();
inside_staff_b_ = specs_l_->inside_b();
}
Interval
-Script::symbol_height()const
+Script::symbol_height() const
{
- return specs_l_->get_atom (paper(), dir_i_).extent ().y ();
+ return specs_l_->get_atom (paper(), dir_).extent ().y ();
}
Molecule*
{
Real dy = paper()->internote_f ();
- Molecule*out = new Molecule (specs_l_->get_atom (paper(), dir_i_));
+ Molecule*out = new Molecule (specs_l_->get_atom (paper(), dir_));
out->translate (dy * pos_i_, Y_AXIS);
return out;
}
{
Musical_req *mus_l = req_l->musical();
if (!mus_l || !mus_l->slur())
- return false;
+ return false;
new_slur_req_l_arr_.push (mus_l->slur());
return true;
{
if (info.elem_l_->name() == Note_column::static_name ())
{
- Note_column *col_l =(Note_column*) info.elem_l_->item() ;// ugh
- for (int i = 0; i < slur_l_stack_.size(); i++)
- slur_l_stack_[i]->add (col_l);
- for (int i = 0; i < end_slur_l_arr_.size(); i++)
- end_slur_l_arr_[i]->add (col_l);
+ Note_column *col_l =(Note_column*) info.elem_l_->item() ;// ugh
+ for (int i = 0; i < slur_l_stack_.size(); i++)
+ slur_l_stack_[i]->add (col_l);
+ for (int i = 0; i < end_slur_l_arr_.size(); i++)
+ end_slur_l_arr_[i]->add (col_l);
}
}
Slur_engraver::set_feature (Feature f)
{
if (f.type_ == "vdir")
- dir_i_ = f.value_ ;
+ dir_ = (Direction)int(f.value_);
}
/*
*/
Slur_engraver::Slur_engraver()
{
- dir_i_ =0;
+ dir_ =CENTER;
}
void
Slur_engraver::do_process_requests()
Array<Slur*> start_slur_l_arr_;
for (int i=0; i< new_slur_req_l_arr_.size(); i++)
{
- Slur_req* slur_req_l = new_slur_req_l_arr_[i];
- // end slur: move the slur to other array
- if (slur_req_l->spantype == Span_req::STOP)
- {
- if (slur_l_stack_.empty())
+ Slur_req* slur_req_l = new_slur_req_l_arr_[i];
+ // end slur: move the slur to other array
+ if (slur_req_l->spantype == Span_req::STOP)
+ {
+ if (slur_l_stack_.empty())
- slur_req_l->warning ("can't find slur to end");
- else
- {
- end_slur_l_arr_.push (slur_l_stack_.pop());
- requests_arr_.pop();
- }
- }
- else if (slur_req_l->spantype == Span_req::START)
- {
- // push a new slur onto stack.
- //(use temp. array to wait for all slur STOPs)
- Slur * s_p =new Slur;
- requests_arr_.push (slur_req_l);
- start_slur_l_arr_.push (s_p);
- announce_element (Score_elem_info (s_p, slur_req_l));
- }
+ slur_req_l->warning ("can't find slur to end");
+ else
+ {
+ end_slur_l_arr_.push (slur_l_stack_.pop());
+ requests_arr_.pop();
+ }
+ }
+ else if (slur_req_l->spantype == Span_req::START)
+ {
+ // push a new slur onto stack.
+ //(use temp. array to wait for all slur STOPs)
+ Slur * s_p =new Slur;
+ requests_arr_.push (slur_req_l);
+ start_slur_l_arr_.push (s_p);
+ announce_element (Score_elem_info (s_p, slur_req_l));
+ }
}
for (int i=0; i < start_slur_l_arr_.size(); i++)
- slur_l_stack_.push (start_slur_l_arr_[i]);
+ slur_l_stack_.push (start_slur_l_arr_[i]);
}
void
{
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]);
+ if (dir_)
+ end_slur_l_arr_[i]->dir_ = dir_;
+ typeset_element (end_slur_l_arr_[i]);
}
end_slur_l_arr_.clear();
}
{
for (int i=0; i < requests_arr_.size(); i++)
{
- requests_arr_[i]->warning ("unterminated slur");
+ requests_arr_[i]->warning ("unterminated slur");
}
}
*/
/*
-
TODO:
think about crossing stems.
Begin and end should be treated as a Script.
-
*/
#include "slur.hh"
#include "scalar.hh"
void
Slur::set_default_dir()
{
- dir_i_ = -1;
+ dir_ = DOWN;
for (int i=0; i < encompass_arr_.size(); i ++)
{
- if (encompass_arr_[i]->dir_i_ < 0)
- {
- dir_i_ =1;
- break;
- }
+ if (encompass_arr_[i]->dir_ < 0)
+ {
+ dir_ =UP;
+ break;
+ }
}
}
void
Slur::do_pre_processing()
{
- right_col_l_ = encompass_arr_.top()->pcol_l_;
- left_col_l_ = encompass_arr_[0]->pcol_l_;
+ set_bounds(LEFT, encompass_arr_[0]);
+ set_bounds(RIGHT, encompass_arr_.top());
}
int i;
while ((i = encompass_arr_.find_i ((Note_column*)o->item())) >=0)
{
- if (n)
- encompass_arr_[i] = (Note_column*)n->item();
- else
- encompass_arr_.del (i);
+ if (n)
+ encompass_arr_[i] = (Note_column*)n->item();
+ else
+ encompass_arr_.del (i);
}
}
static int
Note_column_compare (Note_column *const&n1 , Note_column* const&n2)
{
- return n1->pcol_l_->rank_i() - n2->pcol_l_->rank_i ();
+ return Item::left_right_compare(n1, n2);
}
void
Slur::do_post_processing()
{
encompass_arr_.sort (Note_column_compare);
- if (!dir_i_)
- set_default_dir();
+ if (!dir_)
+ set_default_dir();
Real inter_f = paper()->internote_f ();
- if (encompass_arr_[0]->stem_l_)
- left_pos_i_ = rint (encompass_arr_[0]->stem_l_->height()[dir_i_]/inter_f);
- else
- left_pos_i_ = rint ( encompass_arr_[0]->head_positions_interval()[dir_i_]);
-
- if (encompass_arr_.top()->stem_l_)
- right_pos_i_ = rint (encompass_arr_.top()->stem_l_->height ()[dir_i_]/inter_f);
- else
- right_pos_i_ = rint (encompass_arr_.top()->head_positions_interval ()[dir_i_]);
+ Drul_array<Note_column*> extrema;
+ extrema[LEFT] = encompass_arr_[0];
+ extrema[RIGHT] = encompass_arr_.top();
- left_pos_i_ += dir_i_;
- right_pos_i_ += dir_i_;
+ Direction d=LEFT;
+ do
+ {
+ if (extrema[d]->stem_l_ && !extrema[d]->stem_l_->transparent_b_)
+ pos_i_drul_[d] = (int)rint (extrema[d]->stem_l_->height()[dir_]/inter_f);
+ else
+ pos_i_drul_[d] = (int)rint (extrema[d]->head_positions_interval()[dir_]);
+ pos_i_drul_[d] += dir_;
+ }
+ while ((d *= -1) != LEFT);
}
IMPLEMENT_IS_TYPE_B1(Slur,Spanner);