§
    ƒØjQ'  ã                  ó  — d dl mZ d dlmZ d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d d	lmZ  ej        d
¦  «        Z G d„ d¦  «        Zdd„Z G d„ dej        ¦  «        Zedk    rd dlZ ej        e¦  «         dS dS )é    )Úannotations)ÚOrderedDictN)Úclef)Údynamics)Úenvironment)Úexpressions)Úbasic)Úsymbolszbraille/noteGrouping.pyc            
      ó  — e Zd ZdZdd„Zd„ Zed„ ¦   «         Zej        d„ ¦   «         Zed„ ¦   «         Z	e	j        d„ ¦   «         Z	dd	„Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z edefdefdefdefdefdefdefg¦  «        Zd„ Zdd„ZdS )ÚNoteGroupingTranscriberz4
    Object that can transcribe note groupings.
    Nc                óv   — d| _         || _        d | _        d | _        d | _        d | _        g | _        d | _        d S ©NT)ÚshowLeadingOctaveÚbrailleElementGroupingÚ_upperFirstInFingeringÚ_showClefSignsÚpreviousNoteÚpreviousElementÚtransÚ	transText)Úselfr   s     ú‘/Users/tedpeters/Documents/Projects/Claude Projects/Misc Tools/notename-sheets/.venv/lib/python3.11/site-packages/music21/braille/noteGrouping.pyÚ__init__z NoteGroupingTranscriber.__init__   sF   € Ø!%ˆÔØ&<ˆÔ#Ø&*ˆÔ#Ø"ˆÔð !ˆÔØ#ˆÔØˆŒ
ØˆŒˆˆó    c                ó>   — d | _         d | _        g | _        d | _        d S ©N)r   r   r   r   ©r   s    r   ÚresetzNoteGroupingTranscriber.reset)   s$   € Ø ˆÔØ#ˆÔØˆŒ
ØˆŒˆˆr   c                óH   — | j         �| j         S | j        �| j        j        S dS )aÉ  
        Generally, in Braille, clef signs are not used.  However, they
        can be shown for pedagogical purposes or to make a facsimile
        transcription of the sighted text.

        If not set but self.brailleElementGrouping.showClefSigns
        is set, uses that instead.

        >>> ngt = braille.noteGrouping.NoteGroupingTranscriber()
        >>> ngt.showClefSigns
        False
        >>> beg = braille.segment.BrailleElementGrouping()
        >>> ngt.brailleElementGrouping = beg
        >>> ngt.showClefSigns
        False
        >>> beg.showClefSigns = True
        >>> ngt.showClefSigns
        True
        >>> ngt.showClefSigns = False
        >>> ngt.showClefSigns
        False
        NF)r   r   ÚshowClefSignsr   s    r   r    z%NoteGroupingTranscriber.showClefSigns/   s0   € ð0 ÔÐ*ØÔ&Ð&ØÔ(Ð4ØÔ.Ô<Ð<à�5r   c                ó   — || _         d S r   )r   ©r   Únews     r   r    z%NoteGroupingTranscriber.showClefSignsN   s   € à!ˆÔÐÐr   c                óH   — | j         �| j         S | j        �| j        j        S dS )a  
        When there are multiple fingering patterns listed at the same time,
        should the highest be listed first (default True) or last?

        If not set but self.brailleElementGrouping.upperFirstInNoteFingering
        is set, uses that instead. (note the slight difference in names: NoteFingering)

        >>> ngt = braille.noteGrouping.NoteGroupingTranscriber()
        >>> ngt.upperFirstInFingering
        True
        >>> beg = braille.segment.BrailleElementGrouping()
        >>> ngt.brailleElementGrouping = beg
        >>> ngt.upperFirstInFingering
        True
        >>> beg.upperFirstInNoteFingering = False
        >>> ngt.upperFirstInFingering
        False
        >>> ngt.upperFirstInFingering = True
        >>> ngt.upperFirstInFingering
        True
        NT)r   r   ÚupperFirstInNoteFingeringr   s    r   ÚupperFirstInFingeringz-NoteGroupingTranscriber.upperFirstInFingeringR   s0   € ð. Ô&Ð2ØÔ.Ð.ØÔ(Ð4ØÔ.ÔHÐHà�4r   c                ó   — || _         d S r   )r   r"   s     r   r&   z-NoteGroupingTranscriber.upperFirstInFingeringp   s   € à&)ˆÔ#Ð#Ð#r   c                ó  — |                       ¦   «          |�|| _        | j        D ]}|                      |¦  «         Œ|j        r%| j                             t          d         ¦  «         d                     | j        ¦  «        S )z¡
        transcribe a group of notes, possibly excluding certain attributes.

        Returns a (unicode) string of brailleElementGrouping transcribed.

        NÚmusic_hyphenÚ )r   r   ÚtranscribeOneElementÚ
withHyphenr   Úappendr
   Újoin)r   r   ÚbrailleElements      r   ÚtranscribeGroupz'NoteGroupingTranscriber.transcribeGroupt   s‚   € ð 	�
Š
‰ŒˆØ!Ð-Ø*@ˆDÔ'à"Ô9ð 	6ð 	6ˆNØ×%Ò% nÑ5Ô5Ð5Ð5à!Ô,ð 	7ØŒJ×Ò�g nÔ5Ñ6Ô6Ð6à�wŠw�t”zÑ"Ô"Ð"r   c                óž   — | j         €| j        }nt          j        | j         |¦  «        }t          j        ||| j        ¬¦  «        }|| _         |S )N)Ú
showOctaver&   )r   r   r	   ÚshowOctaveWithNoteÚnoteToBrailler&   )r   ÚcurrentNoteÚdoShowOctaveÚbrailleNotes       r   ÚtranslateNotez%NoteGroupingTranscriber.translateNote‡   s_   € ØÔÐ$ØÔ1ˆLˆLå Ô3°DÔ4EÀ{ÑSÔSˆLÝÔ)¨+Ø5AØ@DÔ@Zð\ñ \ô \ˆð (ˆÔØÐr   c                ó*   — t          j        |¦  «        S r   )r	   ÚrestToBraille)r   ÚcurrentRests     r   ÚtranslateRestz%NoteGroupingTranscriber.translateRest’   s   € ÝÔ" ;Ñ/Ô/Ð/r   c                ó  — t          |j        d„ ¬¦  «        }| j        j        r	|d         }n|d         }| j        €| j        }nt          j        | j        |¦  «        }| j        j        }t          j        |||¬¦  «        }|| _        |S )Nc                ó   — | j         S r   )Úpitch)Úns    r   ú<lambda>z8NoteGroupingTranscriber.translateChord.<locals>.<lambda>–   s   € ¸A¼G€ r   )Úkeyéÿÿÿÿr   )Ú
descendingr2   )	ÚsortedÚnotesr   ÚdescendingChordsr   r   r	   r3   ÚchordToBraille)r   ÚcurrentChordÚallNotesr5   r6   rG   ÚbrailleChords          r   ÚtranslateChordz&NoteGroupingTranscriber.translateChord•   s£   € Ý˜,Ô,Ð2CÐ2CÐDÑDÔDˆàÔ&Ô7ð 	&Ø" 2œ,ˆKˆKà" 1œ+ˆKØÔÐ$ØÔ1ˆLˆLå Ô3°DÔ4EÀ{ÑSÔSˆLàÔ6ÔGÐÝÔ+¨LØ7GØ7CðEñ Eô Eˆð (ˆÔØÐr   c                óJ   — t          j        |¦  «        }d | _        d| _        |S r   )r	   ÚdynamicToBrailler   r   )r   ÚcurrentDynamicÚbrailleDynamics      r   ÚtranslateDynamicz(NoteGroupingTranscriber.translateDynamic¨   s(   € ÝÔ/°Ñ?Ô?ˆØ ˆÔØ!%ˆÔØÐr   c                óJ   — t          j        |¦  «        }d | _        d| _        |S r   )r	   ÚtextExpressionToBrailler   r   )r   ÚcurrentExpressionÚbrailleExpressions      r   ÚtranslateTextExpressionz/NoteGroupingTranscriber.translateTextExpression®   s*   € Ý!Ô9Ð:KÑLÔLÐØ ˆÔØ!%ˆÔØ Ð r   c                ó*   — t          j        |¦  «        S r   )r	   ÚbarlineToBraille)r   ÚcurrentBarlines     r   ÚtranslateBarlinez(NoteGroupingTranscriber.translateBarline´   s   € ÝÔ% nÑ5Ô5Ð5r   c                ó\   — | j         r$t          j        |¦  «        }d| _        d| _        |S dS )zJ
        translate Clefs to braille IF self.showClefSigns is True
        NT)r    r	   ÚclefToBrailler   r   )r   ÚcurrentClefÚbrailleClefs      r   ÚtranslateClefz%NoteGroupingTranscriber.translateClef·   s?   € ð Ôð 	ÝÔ-¨kÑ:Ô:ˆKØ $ˆDÔØ%)ˆDÔ"ØÐð		ð 	r   ÚNoteÚRestÚChordÚDynamicÚTextExpressionÚBarlineÚClefc                ó   — |j         }| j                             ¦   «         D ]3\  }}||v r* || |¦  «        }|�| j                             |¦  «          nŒ4t
                               |› d�¦  «         |                      |¦  «         || _        dS )us  
        Transcribe a single element and add it to self.trans, setting self.previousElement
        along the way.

        >>> ngt = braille.noteGrouping.NoteGroupingTranscriber()
        >>> n = note.Note('C4')
        >>> ngt.transcribeOneElement(n)
        >>> ''.join(ngt.trans)
        'â �â ¹'
        >>> ngt.previousElement
        <music21.note.Note C>
        Nz not transcribed to braille.)	ÚclassesÚtranslateDictÚitemsr   r-   ÚenvironRulesÚwarnÚoptionallyAddDotToPreviousr   )r   ÚelÚ	elClassesÚ	classNameÚclassMethodÚ
addBrailles         r   r+   z,NoteGroupingTranscriber.transcribeOneElementË   s³   € ð ”Jˆ	Ø&*Ô&8×&>Ò&>Ñ&@Ô&@ð 	Cð 	CÑ"ˆI�{Ø˜IÐ%Ð%Ø(˜[¨¨rÑ2Ô2�
ØÐ)Ø”J×%Ò% jÑ1Ô1Ð1Ø�ð	 &õ ×Ò ÐAÐAÐAÑBÔBÐBà×'Ò'¨Ñ+Ô+Ð+Ø!ˆÔÐÐr   c                ó@  — | j         }|€dS | j        sdS |�t          |t          j        ¦  «        rdS |�t          |t
          j        ¦  «        rdS t          |t          j        ¦  «        sLt          |t          j        ¦  «        r| j	        s+t          |t
          j        ¦  «        rx|j
        d         dk    rgt          j        | j        d         d         ¦  «        D ]A}| j                             d|¦  «         |j        j                             d|› �¦  «          dS dS )a=  
        if el is None or not a Dynamic or TextExpression, add a dot-3 Dot
        before the current transcription
        under certain circumstances:

        1. self.previousElement exists
        2. the last character in the current transcription (self.trans) fits the criteria for
           basic.yieldDots()
        3. one of these three.  PreviousElement was:
            a. a Dynamic.
            b. a Clef and clef signs are being transcribed
            c. a TextExpression not ending in "."

        Returns True if a dot as added, or False otherwise.
        NFrC   ú.r   zDot 3 T)r   r   Ú
isinstancer   rc   r   rd   r   rf   r    Úcontentr	   Ú	yieldDotsÚinsertÚ	editorialÚbrailleEnglishr-   )r   rn   ÚprevÚdots       r   rm   z2NoteGroupingTranscriber.optionallyAddDotToPreviouså   s!  € ð  Ô#ˆØˆ<Ø�5ØŒzð 	Ø�5àˆ>�j¨­XÔ-=Ñ>Ô>ˆ>Ø�5Øˆ>�j¨­[Ô-GÑHÔHˆ>Ø�5å�t�XÔ-Ñ.Ô.ð 		Ý˜4¥¤Ñ+Ô+ð		àÔ&ð		õ ˜4¥Ô!;Ñ<Ô<ð		ð
 ”L Ô$¨Ò+Ð+Ý” t¤z°"¤~°aÔ'8Ñ9Ô9ð ð �Ø”
×!Ò! " cÑ*Ô*Ð*Ø”Ô-×4Ò4°^¸c°^°^ÑDÔDÐDØ�t�tàˆur   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Úpropertyr    Úsetterr&   r0   r8   r<   rL   rQ   rV   rZ   r_   r   ri   r+   rm   © r   r   r   r      s¨  € € € € € ðð ð
ð 
ð 
ð 
ðð ð ð ðð ñ „Xðð< Ôð"ð "ñ Ôð"ð ðð ñ „Xðð: Ô!ð*ð *ñ "Ô!ð*ð#ð #ð #ð #ð&	ð 	ð 	ð0ð 0ð 0ðð ð ð&ð ð ð!ð !ð !ð6ð 6ð 6ðð ð ð  �KØ	�ÐØ	�ÐØ	�.Ð!Ø	Ð$Ð%Ø	Ð2Ð3Ø	Ð$Ð%Ø	�Ðð!ñ ô €Mð"ð "ð "ð4&ð &ð &ð &ð &ð &r   r   Tc                óV   — t          ¦   «         }||_        |                     | ¦  «        S )zŽ
    transcribe a group of notes, possibly excluding certain attributes.

    To be DEPRECATED -- called only by BrailleGrandSegment now.
    )r   r   r0   )r   r   Úngts      r   ÚtranscribeNoteGroupingr†     s,   € õ "Ñ
#Ô
#€CØ-€CÔØ×ÒÐ5Ñ6Ô6Ð6r   c                  ó   — e Zd ZdS )ÚTestN)r}   r~   r   rƒ   r   r   rˆ   rˆ     s   € € € € € Ø€Dr   rˆ   Ú__main__)T)Ú
__future__r   Úcollectionsr   ÚunittestÚmusic21r   r   r   r   Úmusic21.brailler	   Úmusic21.braille.lookupr
   ÚEnvironmentrk   r   r†   ÚTestCaserˆ   r}   ÚmainTestrƒ   r   r   ú<module>r“      s\  ðð #Ð "Ð "Ð "Ð "Ð "à #Ð #Ð #Ð #Ð #Ð #Ø €€€à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø *Ð *Ð *Ð *Ð *Ð *à&ˆ{Ô&Ð'@ÑAÔA€ðrð rð rð rð rñ rô rð rðj7ð 7ð 7ð 7ð	ð 	ð 	ð 	ð 	ˆ8Ôñ 	ô 	ð 	ð ˆzÒÐØ€N€N€NØ€GÔ�TÑÔÐÐÐð Ðr   