int Staff::AlignVertically(FunctorParams *functorParams) { AlignVerticallyParams *params = dynamic_cast<AlignVerticallyParams *>(functorParams); assert(params); params->m_staffN = this->GetN(); // this gets (or creates) the measureAligner for the measure StaffAlignment *alignment = params->m_systemAligner->GetStaffAlignment(params->m_staffIdx, this, params->m_doc); assert(alignment); // Set the pointer of the m_alignment m_staffAlignment = alignment; std::vector<Object *>::iterator it; it = std::find_if(m_timeSpanningElements.begin(), m_timeSpanningElements.end(), ObjectComparison(VERSE)); if (it != m_timeSpanningElements.end()) { Verse *v = dynamic_cast<Verse *>(*it); assert(v); alignment->SetVerseCount(v->GetN()); } // for next staff params->m_staffIdx++; return FUNCTOR_CONTINUE; }
int Syl::PrepareLyrics(FunctorParams *functorParams) { PrepareLyricsParams *params = dynamic_cast<PrepareLyricsParams *>(functorParams); assert(params); Verse *verse = dynamic_cast<Verse *>(this->GetFirstParent(VERSE, MAX_NOTE_DEPTH)); if (verse) { m_drawingVerse = std::max(verse->GetN(), 1); } this->SetStart(dynamic_cast<LayerElement *>(this->GetFirstParent(NOTE, MAX_NOTE_DEPTH))); // At this stage currentSyl is actually the previous one that is ending here if (params->m_currentSyl) { // The previous syl was an initial or median -> The note we just parsed is the end if ((params->m_currentSyl->GetWordpos() == sylLog_WORDPOS_i) || (params->m_currentSyl->GetWordpos() == sylLog_WORDPOS_m)) { params->m_currentSyl->SetEnd(params->m_lastNote); } // The previous syl was a underscore -> the previous but one was the end else if (params->m_currentSyl->GetCon() == sylLog_CON_u) { if (params->m_currentSyl->GetStart() == params->m_lastButOneNote) LogWarning("Syllable with underline extender under one single note '%s'", params->m_currentSyl->GetStart()->GetUuid().c_str()); else params->m_currentSyl->SetEnd(params->m_lastButOneNote); } } // Now decide what to do with the starting syl and check if it has a forward connector if ((this->GetWordpos() == sylLog_WORDPOS_i) || (this->GetWordpos() == sylLog_WORDPOS_m)) { params->m_currentSyl = this; return FUNCTOR_CONTINUE; } else if (this->GetCon() == sylLog_CON_u) { params->m_currentSyl = this; return FUNCTOR_CONTINUE; } else { params->m_currentSyl = NULL; } return FUNCTOR_CONTINUE; }