コード例 #1
0
    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;
    }
コード例 #2
0
ファイル: lomse_selections.cpp プロジェクト: lenmus/lomse
//=======================================================================================
// 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;
}
コード例 #3
0
 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;
 }
コード例 #4
0
ファイル: lomse_selections.cpp プロジェクト: lenmus/lomse
//---------------------------------------------------------------------------------------
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() );
}
コード例 #5
0
ファイル: lomse_linker.cpp プロジェクト: lenmus/lomse
//---------------------------------------------------------------------------------------
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;
}
コード例 #6
0
ファイル: lomse_linker.cpp プロジェクト: lenmus/lomse
//---------------------------------------------------------------------------------------
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;
}
コード例 #7
0
ファイル: lomse_linker.cpp プロジェクト: lenmus/lomse
//---------------------------------------------------------------------------------------
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;
}
コード例 #8
0
ファイル: lomse_im_algorithms.cpp プロジェクト: lenmus/lomse
//---------------------------------------------------------------------------------------
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;
}
コード例 #9
0
ファイル: lomse_linker.cpp プロジェクト: lenmus/lomse
//---------------------------------------------------------------------------------------
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;
}
コード例 #10
0
    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 );
    }
コード例 #11
0
ファイル: lomse_linker.cpp プロジェクト: lenmus/lomse
//---------------------------------------------------------------------------------------
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;
}
コード例 #12
0
ファイル: lomse_linker.cpp プロジェクト: lenmus/lomse
//---------------------------------------------------------------------------------------
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;
}
コード例 #13
0
ファイル: lomse_linker.cpp プロジェクト: lenmus/lomse
//---------------------------------------------------------------------------------------
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;
}
コード例 #14
0
 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;
 }