def test_LilyPondParser__spanners__Glissando_01():

    target = abjad.Container([abjad.Note(0, 1), abjad.Note(0, 1)])
    abjad.glissando(target[:])
    parser = abjad.parser.LilyPondParser()
    result = parser(abjad.lilypond(target))
    assert abjad.lilypond(target) == abjad.lilypond(result) and target is not result
Ejemplo n.º 2
0
 def attach_glissandi(nucleus_voice):
     selections = [[]]
     leaves = abjad.iterate(nucleus_voice).leaves()
     for leaf_index, leaf in enumerate(leaves):
         if 641 <= leaf_index:
             leaf_index += 2
         string = letter_maker.nuclei[leaf_index]
         if string == 0:
             glissando = False
         else:
             result = letter_maker.get_body_pitch_shape_glissando(string)
             pitch, shape, glissando = result
         if glissando:
             assert isinstance(leaf, abjad.Note), repr(leaf)
             selections[-1].append(leaf)
         elif not selections[-1] == []:
             selections.append([])
     if selections[-1] == []:
         selections.pop()
     selections = [abjad.select(_) for _ in selections]
     for selection in selections:
         next_leaf = abjad.inspect(selection[-1]).leaf(1)
         if next_leaf is not None:
             selection = selection + [next_leaf]
         abjad.glissando(selection, allow_repeats=True)
         triples = abjad.sequence(selection).nwise(n=3)
         for left_note, middle_note, right_note in triples:
             if not (left_note.written_pitch ==
                 middle_note.written_pitch ==
                 right_note.written_pitch):
                 continue
             abjad.override(middle_note).note_head.transparent = True
             grob_proxy = abjad.override(middle_note).glissando
             grob_proxy.bound_details__left__padding = -1.2
Ejemplo n.º 3
0
def test_Container___delitem___08():
    """
    Deletes leaf from nested container.
    """

    voice = abjad.Voice("c'8 [ { d'8 e'8 } f'8 ]")
    leaves = abjad.select(voice).leaves()
    abjad.glissando(leaves)

    assert format(voice) == abjad.String.normalize(
        r"""
        \new Voice
        {
            c'8
            [
            \glissando
            {
                d'8
                \glissando
                e'8
                \glissando
            }
            f'8
            ]
        }
        """
    )

    leaf = leaves[1]
    del voice[1][0]

    assert format(voice) == abjad.String.normalize(
        r"""
        \new Voice
        {
            c'8
            [
            \glissando
            {
                e'8
                \glissando
            }
            f'8
            ]
        }
        """
    )

    assert abjad.inspect(voice).wellformed()
    assert abjad.inspect(leaf).wellformed()
Ejemplo n.º 4
0
def test_Container___delitem___08():
    """
    Deletes leaf from nested container.
    """

    voice = abjad.Voice("c'8 [ { d'8 e'8 } f'8 ]")
    leaves = abjad.select(voice).leaves()
    abjad.glissando(leaves)

    string = abjad.lilypond(voice)
    assert string == abjad.String.normalize(r"""
        \new Voice
        {
            c'8
            [
            \glissando
            {
                d'8
                \glissando
                e'8
                \glissando
            }
            f'8
            ]
        }
        """), print(string)

    leaf = leaves[1]
    del voice[1][0]

    string = abjad.lilypond(voice)
    assert string == abjad.String.normalize(r"""
        \new Voice
        {
            c'8
            [
            \glissando
            {
                e'8
                \glissando
            }
            f'8
            ]
        }
        """), print(string)

    assert abjad.wf.wellformed(voice)
    assert abjad.wf.wellformed(leaf)
Ejemplo n.º 5
0
def test_Container___delitem___08():
    """
    Deletes leaf from nested container.
    """

    voice = abjad.Voice("c'8 [ { d'8 e'8 } f'8 ]")
    leaves = abjad.select(voice).leaves()
    abjad.glissando(leaves)

    assert format(voice) == abjad.String.normalize(r"""
        \new Voice
        {
            c'8
            [
            \glissando %! abjad.glissando(7)
            {
                d'8
                \glissando %! abjad.glissando(7)
                e'8
                \glissando %! abjad.glissando(7)
            }
            f'8
            ]
        }
        """), abjad.f(voice)

    leaf = leaves[1]
    del voice[1][0]

    assert format(voice) == abjad.String.normalize(r"""
        \new Voice
        {
            c'8
            [
            \glissando %! abjad.glissando(7)
            {
                e'8
                \glissando %! abjad.glissando(7)
            }
            f'8
            ]
        }
        """), abjad.f(voice)

    assert abjad.inspect(voice).wellformed()
    assert abjad.inspect(leaf).wellformed()
Ejemplo n.º 6
0
def test_Mutation_extract_02():
    """
    Extracts multiple notes.
    """

    voice = abjad.Voice("c'8 d'8 e'8 f'8")
    abjad.beam(voice[:])
    abjad.glissando(voice[:])

    assert format(voice) == abjad.String.normalize(
        r"""
        \new Voice
        {
            c'8
            [
            \glissando
            d'8
            \glissando
            e'8
            \glissando
            f'8
            ]
        }
        """
    ), print(format(voice))

    notes = voice[:2]
    for note in notes:
        abjad.mutate(note).extract()

    assert format(voice) == abjad.String.normalize(
        r"""
        \new Voice
        {
            e'8
            \glissando
            f'8
            ]
        }
        """
    ), print(format(voice))

    for note in notes:
        assert abjad.inspect(note).wellformed()

    assert abjad.inspect(voice).wellformed()
Ejemplo n.º 7
0
def test_Mutation_extract_02():
    """
    Extracts multiple notes.
    """

    voice = abjad.Voice("c'8 d'8 e'8 f'8")
    abjad.beam(voice[:])
    abjad.glissando(voice[:])

    assert format(voice) == abjad.String.normalize(r"""
        \new Voice
        {
            c'8
            [
            \glissando %! abjad.glissando(7)
            d'8
            \glissando %! abjad.glissando(7)
            e'8
            \glissando %! abjad.glissando(7)
            f'8
            ]
        }
        """), print(format(voice))

    notes = voice[:2]
    for note in notes:
        abjad.mutate(note).extract()

    assert format(voice) == abjad.String.normalize(r"""
        \new Voice
        {
            e'8
            \glissando %! abjad.glissando(7)
            f'8
            ]
        }
        """), print(format(voice))

    for note in notes:
        assert abjad.inspect(note).wellformed()

    assert abjad.inspect(voice).wellformed()
Ejemplo n.º 8
0
def test_Mutation_extract_01():
    """
    Extracts note.
    """

    voice = abjad.Voice("c'8 d'8 e'8 f'8")
    abjad.beam(voice[:])
    abjad.glissando(voice[:])

    assert format(voice) == abjad.String.normalize(r"""
        \new Voice
        {
            c'8
            [
            \glissando
            d'8
            \glissando
            e'8
            \glissando
            f'8
            ]
        }
        """), print(format(voice))

    note = voice[1]
    abjad.mutate(note).extract()

    assert format(voice) == abjad.String.normalize(r"""
        \new Voice
        {
            c'8
            [
            \glissando
            e'8
            \glissando
            f'8
            ]
        }
        """), print(format(voice))

    assert abjad.inspect(note).wellformed()
    assert abjad.inspect(voice).wellformed()
Ejemplo n.º 9
0
def test_mutate_extract_02():
    """
    Extracts multiple notes.
    """

    voice = abjad.Voice("c'8 d'8 e'8 f'8")
    abjad.beam(voice[:])
    abjad.glissando(voice[:])

    assert abjad.lilypond(voice) == abjad.String.normalize(r"""
        \new Voice
        {
            c'8
            [
            \glissando %! abjad.glissando(7)
            d'8
            \glissando %! abjad.glissando(7)
            e'8
            \glissando %! abjad.glissando(7)
            f'8
            ]
        }
        """), print(abjad.lilypond(voice))

    notes = voice[:2]
    for note in notes:
        abjad.mutate.extract(note)

    assert abjad.lilypond(voice) == abjad.String.normalize(r"""
        \new Voice
        {
            e'8
            \glissando %! abjad.glissando(7)
            f'8
            ]
        }
        """), print(abjad.lilypond(voice))

    for note in notes:
        assert abjad.wf.wellformed(note)

    assert abjad.wf.wellformed(voice)
Ejemplo n.º 10
0
def test_mutate_extract_01():
    """
    Extracts note.
    """

    voice = abjad.Voice("c'8 d'8 e'8 f'8")
    abjad.beam(voice[:])
    abjad.glissando(voice[:])

    assert abjad.lilypond(voice) == abjad.String.normalize(r"""
        \new Voice
        {
            c'8
            [
            \glissando
            d'8
            \glissando
            e'8
            \glissando
            f'8
            ]
        }
        """), print(abjad.lilypond(voice))

    note = voice[1]
    abjad.mutate.extract(note)

    assert abjad.lilypond(voice) == abjad.String.normalize(r"""
        \new Voice
        {
            c'8
            [
            \glissando
            e'8
            \glissando
            f'8
            ]
        }
        """), print(abjad.lilypond(voice))

    assert abjad.wf.wellformed(note)
    assert abjad.wf.wellformed(voice)
Ejemplo n.º 11
0
def test_Mutation_extract_04():
    """
    Extracts multiple containers.
    """

    voice = abjad.Voice()
    voice.append(abjad.Container("c'8 d'8"))
    voice.append(abjad.Container("e'8 f'8"))
    voice.append(abjad.Container("g'8 a'8"))
    leaves = abjad.select(voice).leaves()
    abjad.beam(leaves)
    abjad.glissando(leaves)

    assert format(voice) == abjad.String.normalize(r"""
        \new Voice
        {
            {
                c'8
                [
                \glissando %! abjad.glissando(7)
                d'8
                \glissando %! abjad.glissando(7)
            }
            {
                e'8
                \glissando %! abjad.glissando(7)
                f'8
                \glissando %! abjad.glissando(7)
            }
            {
                g'8
                \glissando %! abjad.glissando(7)
                a'8
                ]
            }
        }
        """), print(format(voice))

    containers = voice[:2]
    for container in containers:
        abjad.mutate(container).extract()

    assert format(voice) == abjad.String.normalize(r"""
        \new Voice
        {
            c'8
            [
            \glissando %! abjad.glissando(7)
            d'8
            \glissando %! abjad.glissando(7)
            e'8
            \glissando %! abjad.glissando(7)
            f'8
            \glissando %! abjad.glissando(7)
            {
                g'8
                \glissando %! abjad.glissando(7)
                a'8
                ]
            }
        }
        """), print(format(voice))

    for container in containers:
        assert not container

    assert abjad.inspect(voice).wellformed()
Ejemplo n.º 12
0
def make_gliss(selections):
    abjad.glissando(selections[:])
Ejemplo n.º 13
0
def test_Mutation_extract_04():
    """
    Extracts multiple containers.
    """

    voice = abjad.Voice()
    voice.append(abjad.Container("c'8 d'8"))
    voice.append(abjad.Container("e'8 f'8"))
    voice.append(abjad.Container("g'8 a'8"))
    leaves = abjad.select(voice).leaves()
    abjad.beam(leaves)
    abjad.glissando(leaves)

    assert format(voice) == abjad.String.normalize(
        r"""
        \new Voice
        {
            {
                c'8
                [
                \glissando
                d'8
                \glissando
            }
            {
                e'8
                \glissando
                f'8
                \glissando
            }
            {
                g'8
                \glissando
                a'8
                ]
            }
        }
        """
    ), print(format(voice))

    containers = voice[:2]
    for container in containers:
        abjad.mutate(container).extract()

    assert format(voice) == abjad.String.normalize(
        r"""
        \new Voice
        {
            c'8
            [
            \glissando
            d'8
            \glissando
            e'8
            \glissando
            f'8
            \glissando
            {
                g'8
                \glissando
                a'8
                ]
            }
        }
        """
    ), print(format(voice))

    for container in containers:
        assert not container

    assert abjad.inspect(voice).wellformed()
Ejemplo n.º 14
0
    def __illustrate__(self):
        r"""
        Illustrates pitch range.

        ..  container:: example

            >>> pitch_range = abjad.PitchRange('[C3, C7]')
            >>> abjad.show(pitch_range) # doctest: +SKIP

            ..  docs::

                >>> lilypond_file = pitch_range.__illustrate__()
                >>> abjad.f(lilypond_file[abjad.Score])
                \new Score
                \with
                {
                    \override BarLine.stencil = ##f
                    \override Glissando.thickness = #2
                    \override SpanBar.stencil = ##f
                    \override TimeSignature.stencil = ##f
                }
                <<
                    \new PianoStaff
                    <<
                        \context Staff = "Treble_Staff"
                        {
                            \clef "treble"
                            s1 * 1/4
                            s1 * 1/4
                        }
                        \context Staff = "Bass_Staff"
                        {
                            \clef "bass"
                            c1 * 1/4
                            \glissando
                            \change Staff = Treble_Staff
                            c''''1 * 1/4
                        }
                    >>
                >>

        Returns LilyPond file.
        """
        import abjad
        start_pitch_clef = abjad.Clef.from_selection(self.start_pitch)
        stop_pitch_clef = abjad.Clef.from_selection(self.stop_pitch)
        start_note = abjad.Note(self.start_pitch, 1)
        stop_note = abjad.Note(self.stop_pitch, 1)
        if start_pitch_clef == stop_pitch_clef:
            if start_pitch_clef == abjad.Clef('bass'):
                bass_staff = abjad.Staff()
                abjad.attach(abjad.Clef('bass'), bass_staff)
                bass_staff.extend([start_note, stop_note])
                bass_leaves = abjad.select(bass_staff).leaves()
                abjad.glissando(bass_leaves)
                score = abjad.Score([bass_staff])
            else:
                treble_staff = abjad.Staff()
                abjad.attach(abjad.Clef('treble'), treble_staff)
                treble_staff.extend([start_note, stop_note])
                treble_leaves = abjad.select(treble_staff).leaves()
                abjad.glissando(treble_leaves)
                score = abjad.Score([treble_staff])
        else:
            result = abjad.Score.make_piano_score()
            score, treble_staff, bass_staff = result
            bass_staff.extend([start_note, stop_note])
            treble_staff.extend(abjad.Skip(1) * 2)
            bass_leaves = abjad.select(bass_staff).leaves()
            abjad.glissando(bass_leaves)
            abjad.attach(abjad.StaffChange(treble_staff), bass_staff[1])
            abjad.attach(abjad.Clef('treble'), treble_staff[0])
            abjad.attach(abjad.Clef('bass'), bass_staff[0])
        for leaf in abjad.iterate(score).leaves():
            leaf.multiplier = (1, 4)
        abjad.override(score).bar_line.stencil = False
        abjad.override(score).span_bar.stencil = False
        abjad.override(score).glissando.thickness = 2
        abjad.override(score).time_signature.stencil = False
        lilypond_file = abjad.LilyPondFile.new(score)
        return lilypond_file
Ejemplo n.º 15
0
    def __illustrate__(self):
        r"""
        Illustrates pitch range.

        ..  container:: example

            >>> pitch_range = abjad.PitchRange('[C3, C7]')
            >>> abjad.show(pitch_range) # doctest: +SKIP

            ..  docs::

                >>> lilypond_file = pitch_range.__illustrate__()
                >>> abjad.f(lilypond_file[abjad.Score])
                \new Score
                \with
                {
                    \override BarLine.stencil = ##f
                    \override Glissando.thickness = #2
                    \override SpanBar.stencil = ##f
                    \override TimeSignature.stencil = ##f
                }
                <<
                    \new PianoStaff
                    <<
                        \context Staff = "Treble_Staff"
                        {
                            \clef "treble"
                            s1 * 1/4
                            s1 * 1/4
                        }
                        \context Staff = "Bass_Staff"
                        {
                            \clef "bass"
                            c1 * 1/4
                            \glissando
                            \change Staff = Treble_Staff
                            c''''1 * 1/4
                        }
                    >>
                >>

        Returns LilyPond file.
        """
        import abjad

        start_pitch_clef = abjad.Clef.from_selection(self.start_pitch)
        stop_pitch_clef = abjad.Clef.from_selection(self.stop_pitch)
        start_note = abjad.Note(self.start_pitch, 1)
        stop_note = abjad.Note(self.stop_pitch, 1)
        if start_pitch_clef == stop_pitch_clef:
            if start_pitch_clef == abjad.Clef("bass"):
                bass_staff = abjad.Staff()
                abjad.attach(abjad.Clef("bass"), bass_staff)
                bass_staff.extend([start_note, stop_note])
                bass_leaves = abjad.select(bass_staff).leaves()
                abjad.glissando(bass_leaves)
                score = abjad.Score([bass_staff])
            else:
                treble_staff = abjad.Staff()
                abjad.attach(abjad.Clef("treble"), treble_staff)
                treble_staff.extend([start_note, stop_note])
                treble_leaves = abjad.select(treble_staff).leaves()
                abjad.glissando(treble_leaves)
                score = abjad.Score([treble_staff])
        else:
            result = abjad.Score.make_piano_score()
            score, treble_staff, bass_staff = result
            bass_staff.extend([start_note, stop_note])
            treble_staff.extend(abjad.Skip(1) * 2)
            bass_leaves = abjad.select(bass_staff).leaves()
            abjad.glissando(bass_leaves)
            abjad.attach(abjad.StaffChange(treble_staff), bass_staff[1])
            abjad.attach(abjad.Clef("treble"), treble_staff[0])
            abjad.attach(abjad.Clef("bass"), bass_staff[0])
        for leaf in abjad.iterate(score).leaves():
            leaf.multiplier = (1, 4)
        abjad.override(score).bar_line.stencil = False
        abjad.override(score).span_bar.stencil = False
        abjad.override(score).glissando.thickness = 2
        abjad.override(score).time_signature.stencil = False
        lilypond_file = abjad.LilyPondFile.new(score)
        return lilypond_file
Ejemplo n.º 16
0
def test_mutate_extract_04():
    """
    Extracts multiple containers.
    """

    voice = abjad.Voice()
    voice.append(abjad.Container("c'8 d'8"))
    voice.append(abjad.Container("e'8 f'8"))
    voice.append(abjad.Container("g'8 a'8"))
    leaves = abjad.select(voice).leaves()
    abjad.beam(leaves)
    abjad.glissando(leaves)

    assert abjad.lilypond(voice) == abjad.String.normalize(r"""
        \new Voice
        {
            {
                c'8
                [
                \glissando
                d'8
                \glissando
            }
            {
                e'8
                \glissando
                f'8
                \glissando
            }
            {
                g'8
                \glissando
                a'8
                ]
            }
        }
        """), print(abjad.lilypond(voice))

    containers = voice[:2]
    for container in containers:
        abjad.mutate.extract(container)

    assert abjad.lilypond(voice) == abjad.String.normalize(r"""
        \new Voice
        {
            c'8
            [
            \glissando
            d'8
            \glissando
            e'8
            \glissando
            f'8
            \glissando
            {
                g'8
                \glissando
                a'8
                ]
            }
        }
        """), print(abjad.lilypond(voice))

    for container in containers:
        assert not container

    assert abjad.wf.wellformed(voice)