TEST_FIXTURE(MxlCompilerTestFixture, MxlCompilerFromFile_100) { //100 - compile raw xml file format Document doc(m_libraryScope); MxlCompiler compiler(m_libraryScope, &doc); string path = m_scores_path + "50000-hello-world.xml"; ImoObj* pRoot = compiler.compile_file(path); CHECK( compiler.get_file_locator() == path ); ImoDocument* pDoc = dynamic_cast<ImoDocument*>(pRoot); CHECK( pDoc && pDoc->get_version() == "0.0" ); CHECK( pDoc && pDoc->get_num_content_items() == 1 ); ImoScore* pScore = dynamic_cast<ImoScore*>( pDoc->get_content_item(0) ); CHECK( pScore != nullptr ); CHECK( pScore && pScore->get_num_instruments() == 1 ); CHECK( pScore && pScore->get_staffobjs_table() != nullptr ); ImoInstrument* pInstr = pScore->get_instrument(0); CHECK( pInstr != nullptr ); CHECK( pInstr && pInstr->get_num_staves() == 1 ); ImoMusicData* pMD = pInstr->get_musicdata(); CHECK( pMD != nullptr ); CHECK( pMD && pMD->get_num_items() == 5 ); ImoObj* pImo = pMD->get_first_child(); CHECK( pImo && pImo->is_clef() == true ); // cout << "Test: MxlCompilerFromFile_100" << endl; // cout << doc.to_string() << endl; if (pRoot && !pRoot->is_document()) delete pRoot; }
//======================================================================================= // SelectionValidator implementation //======================================================================================= bool SelectionValidator::is_valid_to_add_tie(SelectionSet* pSelection, ImoNote** ppStartNote, ImoNote** ppEndNote) { //Returns TRUE if current selection is valid for adding a tie. //If valid, returns pointers to start and end notes, if not NULL parameters received //Conditions to be valid: // 1. The first note found can be tied to next one // 2. If condition 1 is true, the next note must also be in the selection bool fValid = false; ImoNote* pStart = NULL; ImoNote* pEnd = NULL; ColStaffObjs* pCollection = pSelection->get_staffobjs_collection(); if (pCollection == NULL) return false; ColStaffObjsIterator it; for (it = pCollection->begin(); it != pCollection->end(); ++it) { ImoObj* pImo = (*it)->imo_object(); if (pImo->is_note()) { if (!pStart) { //first note found. Verify if it can be tied to next pStart = static_cast<ImoNote*>(pImo); if (!pStart->is_tied_next()) { ImoScore* pScore = pStart->get_score(); ColStaffObjs* pCol = pScore->get_staffobjs_table(); pEnd = ScoreAlgorithms::find_possible_end_of_tie(pCol, pStart); } } else { //Start note processed. verify if end note is also in the selection if (pEnd && pEnd->get_id() == pImo->get_id()) { fValid = true; //ok. End note is in the selection break; } } } } if (fValid) { if (ppStartNote) *ppStartNote = pStart; if (ppEndNote) *ppEndNote = pEnd; return true; } else return false; }
TEST_FIXTURE(MxlCompilerTestFixture, MxlCompilerFromString_001) { //001 - compile from string Document doc(m_libraryScope); MxlCompiler compiler(m_libraryScope, &doc); string src = "<score-partwise version='3.0'><part-list>" "<score-part id='P1'><part-name>Music</part-name></score-part>" "</part-list><part id='P1'>" "<measure number='1'>" "<attributes>" "<divisions>1</divisions><key><fifths>0</fifths></key>" "<time><beats>4</beats><beat-type>4</beat-type></time>" "<clef><sign>G</sign><line>2</line></clef>" "</attributes>" "<note><pitch><step>C</step><octave>4</octave></pitch><duration>4</duration><type>whole</type></note>" "</measure>" "</part></score-partwise>"; ImoObj* pRoot = compiler.compile_string(src); CHECK( compiler.get_file_locator() == "string:" ); ImoDocument* pDoc = dynamic_cast<ImoDocument*>(pRoot); CHECK( pDoc && pDoc->get_version() == "0.0" ); CHECK( pDoc && pDoc->get_num_content_items() == 1 ); ImoScore* pScore = dynamic_cast<ImoScore*>( pDoc->get_content_item(0) ); CHECK( pScore != nullptr ); CHECK( pScore && pScore->get_num_instruments() == 1 ); CHECK( pScore && pScore->get_staffobjs_table() != nullptr ); if (pRoot && !pRoot->is_document()) delete pRoot; }
//--------------------------------------------------------------------------------------- void SelectionSet::add_staffobj_to_collection(ImoStaffObj* pSO) { //add it to staffobjs internal collection if (!m_pMasterCollection) { ImoScore* pScore = pSO->get_score(); m_pMasterCollection = pScore->get_staffobjs_table(); } //find entry in master collection ColStaffObjsIterator it = m_pMasterCollection->find(pSO); if (it == m_pMasterCollection->end()) { //(impossible) error! not found! LOMSE_LOG_ERROR("Impossible error: staffobj not found when added to SelectionSet"); return; } ColStaffObjsEntry* pEntry = *it; //add to local collection if (!m_pCollection) m_pCollection = LOMSE_NEW ColStaffObjs(); m_pCollection->add_entry(pEntry->measure(), pEntry->num_instrument(), pEntry->line(), pEntry->staff(), pEntry->imo_object() ); }
//--------------------------------------------------------------------------------------- ImoObj* Linker::add_option(ImoOptionInfo* pOpt) { if (m_pParent && m_pParent->is_score()) { ImoScore* pScore = static_cast<ImoScore*>( m_pParent ); pScore->add_or_replace_option(pOpt); return NULL; } return pOpt; }
//--------------------------------------------------------------------------------------- ImoObj* Linker::add_instruments_group(ImoInstrGroup* pGrp) { if (m_pParent && m_pParent->is_score()) { ImoScore* pScore = static_cast<ImoScore*>(m_pParent); pScore->add_instruments_group(pGrp); set_barline_layout_in_instruments(pGrp); } return pGrp; }
//--------------------------------------------------------------------------------------- ImoObj* Linker::add_system_info(ImoSystemInfo* pSI) { if (m_pParent && m_pParent->is_score()) { ImoScore* pScore = static_cast<ImoScore*>(m_pParent); pScore->add_sytem_info(pSI); delete pSI; return NULL; } return pSI; }
//--------------------------------------------------------------------------------------- list<ImoStaffObj*> ImoTreeAlgoritms::insert_staffobjs(ImoInstrument* pInstr, ImoStaffObj* pAt, const string& ldpsource) { ImoScore* pScore = pInstr->get_score(); stringstream errormsg; list<ImoStaffObj*> objects = pInstr->insert_staff_objects_at(pAt, ldpsource, errormsg); if (objects.size() > 0) pScore->close(); //update ColStaffObjs table return objects; }
//--------------------------------------------------------------------------------------- ImoObj* Linker::add_title(ImoScoreTitle* pTitle) { if (m_pParent && m_pParent->is_score()) { ImoScore* pScore = static_cast<ImoScore*>(m_pParent); pScore->add_title(pTitle); //if language not set, use document language if (!pTitle->has_language()) pTitle->set_language( m_pDoc->get_language() ); } return pTitle; }
TEST_FIXTURE(DocContentCursorTestFixture, direct_positioning_by_ptr_2) { //013 point to, by ptr: if not top level, go to end create_document_1(); MyDocContentCursor cursor(m_pDoc); ImoScore* pScore = static_cast<ImoScore*>( *cursor ); ImoObj* pClef = pScore->get_instrument(0)->get_musicdata()->get_child(0); CHECK( pClef->is_clef() == true ); cursor.point_to(pClef); //to end CHECK( *cursor == NULL ); CHECK( cursor.get_pointee_id() == k_cursor_at_end ); CHECK( cursor.get_prev_id() == 28L ); }
//--------------------------------------------------------------------------------------- ImoObj* Linker::add_style(ImoStyle* pStyle) { if (m_pParent && m_pParent->is_score()) { ImoScore* pScore = static_cast<ImoScore*>(m_pParent); pScore->add_style(pStyle); return NULL; } else if (m_pParent && m_pParent->is_styles()) { ImoStyles* pStyles = static_cast<ImoStyles*>(m_pParent); pStyles->add_style(pStyle); return NULL; } return pStyle; }
//--------------------------------------------------------------------------------------- ImoObj* Linker::add_instrument(ImoInstrument* pInstrument) { if (m_pParent) { if (m_pParent->is_instr_group()) { ImoInstrGroup* pGrp = static_cast<ImoInstrGroup*>( m_pParent ); pGrp->add_instrument(pInstrument); } else if (m_pParent->is_score()) { ImoScore* pScore = static_cast<ImoScore*>( m_pParent ); pScore->add_instrument(pInstrument); } } return pInstrument; }
//--------------------------------------------------------------------------------------- ImoObj* Linker::add_page_info(ImoPageInfo* pPI) { if (m_pParent && m_pParent->is_score()) { ImoScore* pScore = static_cast<ImoScore*>(m_pParent); pScore->add_page_info(pPI); delete pPI; return NULL; } else if (m_pParent && m_pParent->is_document()) { ImoDocument* pDoc = static_cast<ImoDocument*>(m_pParent); pDoc->add_page_info(pPI); delete pPI; return NULL; } return pPI; }
TEST_FIXTURE(LmdCompilerTestFixture, LmdCompilerFromString) { Document doc(m_libraryScope); LmdCompiler compiler(m_libraryScope, &doc); string src = "<lenmusdoc vers='0.0'>" "<content>" "<ldpmusic>" "(score (vers 1.6)(instrument (musicData (clef G)(n c4 q.))))" "</ldpmusic>" "</content>" "</lenmusdoc>"; InternalModel* pIModel = compiler.compile_string(src); CHECK( compiler.get_file_locator() == "string:" ); ImoDocument* pDoc = dynamic_cast<ImoDocument*>(pIModel->get_root()); CHECK( pDoc->get_version() == "0.0" ); CHECK( pDoc->get_num_content_items() == 1 ); ImoScore* pScore = dynamic_cast<ImoScore*>( pDoc->get_content_item(0) ); CHECK( pScore != NULL ); CHECK( pScore->get_num_instruments() == 1 ); CHECK( pScore->get_staffobjs_table() != NULL ); CHECK( pScore->get_version_string() == "1.6" ); delete pIModel; }