§
    „ØjÜ�  ã                  ó   — d 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
 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 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 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 G d„ de¦  «        Z  G d„ d ej!        ¦  «        Z" G d!„ d"ej!        ¦  «        Z#e$d#k    rddlZ ej%        e"¦  «         dS dS )$zE
Module to translate Noteworthy Composer's NWCTXT format to music21.
é    )ÚannotationsN)Úbar)Úchord)Úclef)Úcommon)Úduration)Údynamics)Úenvironment)Úexpressions)ÚMusic21Exception)Ú
instrument)Úinterval©Úkey)Úmetadata)Úmeter)Únote)Úpitch)Úrepeat)Úspanner)Ústream)Útempo)Útie)Údictionariesznoteworthy.translatec                  óÀ   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z dS ) ÚNoteworthyTranslatorze
    stores all the data about the current parse context (whether we're in a slur, tuplet, etc.)
    c                ó  — d | _         d | _        d| _        d| _        g | _        t          j        ¦   «         | _        d| _        t          j
        d¦  «        | _        d| _        d | _        d| _        d| _        g | _        i | _        d S )Nr   é   ÚTREBLEF)ÚcurrentPartÚcurrentMeasureÚmeasureNumberÚcurrentEndingÚrepeatedMeasuresr   ÚScoreÚscoreÚcurrentClefr   ÚKeySignatureÚ
currentKeyÚ
withinSlurÚbeginningSlurNoteÚ	withinTieÚlyricPositionÚlyricsÚactiveAccidentals©Úselfs    ú‘/Users/tedpeters/Documents/Projects/Claude Projects/Misc Tools/notename-sheets/.venv/lib/python3.11/site-packages/music21/noteworthy/translate.pyÚ__init__zNoteworthyTranslator.__init__d   s„   € ØˆÔØ"ˆÔØˆÔØˆÔØ "ˆÔÝ”\‘^”^ˆŒ
à#ˆÔÝÔ*¨1Ñ-Ô-ˆŒàˆŒØ!%ˆÔØˆŒàˆÔØˆŒà!#ˆÔÐÐó    c                óÐ   — 	 t          j        |¦  «        }|                     d¦  «        }|                      |¦  «        S # t          t
          f$ r t          d|› d�¦  «        ‚w xY w)Nú
zcannot open z: )r   ÚreadFileEncodingSafeÚsplitÚ	parseListÚOSErrorÚFileNotFoundErrorÚNoteworthyTranslateException)r1   ÚfilePathÚdataÚdataLists       r2   Ú	parseFilezNoteworthyTranslator.parseFilex   sz   € ð	LÝÔ.¨xÑ8Ô8ˆDØ—z’z $Ñ'Ô'ˆHØ—>’> (Ñ+Ô+Ð+øÝÕ*Ð+ð 	Lð 	Lð 	LÝ.Ð/J¸hÐ/JÐ/JÐ/JÑKÔKÐKð	Løøøs   ‚=A  Á %A%c                óT   — |                      ¦   «         }|                      |¦  «        S ©N)Ú
splitlinesr9   )r1   r>   r?   s      r2   ÚparseStringz NoteworthyTranslator.parseString€   s#   € Ø—?’?Ñ$Ô$ˆØ�~Š~˜hÑ'Ô'Ð'r4   c           	     ó  — |D �]0}|                      ¦   «         }|                     d¦  «        du rŒ/|                     d¦  «        }|d         }i }|dd…         D ]¡}	 |                     dd¦  «        \  }}|dk    r<|dv r8|                     |¦  «        €|g||<   n!||                              |¦  «         n|||<   Œd# t
          $ r1 |                     ¦   «         d	k    rnt          d
|› d|› �¦  «        ‚Y Œžw xY w	 |dk    r|                      |¦  «         �në|dk    r|  	                    |¦  «         �nÎ|dk    r'|  
                    |¦  «         | xj        dz  c_        �n¡|dk    r|                      |¦  «         �n„|dk    r|                      |¦  «         �ng|dk    r|                      |¦  «         �nJ|dk    r|                      |¦  «         �n-|dk    r|                      |¦  «         �n|dk    r|                      |¦  «         nô|dk    r|                      |¦  «        | _        nÓ|dk    r&|                      |¦  «         | xj        dz  c_        n§|dk    r|                      |¦  «         n‹|dk    r|                      |¦  «         no|dk    r|                      |¦  «         nS|dk    r|                      |¦  «         n7|dk    r|                      |¦  «         n|dk    r|                      |¦  «         �Œ# t6          $ r }	t9          d|› d�¦  «         t          |	‚d}	~	ww xY w| j        r| j                             | j        ¦  «         | j                              d| j        ¦  «         | j        S )a  
        Parses a list where each element is a line from a nwctxt file.

        Returns a :class:`~music21.stream.Score` object

        >>> data = []
        >>> data.append('!NoteWorthyComposer(2.0)\n')
        >>> data.append('|AddStaff|\n')
        >>> data.append('|Clef|Type:Bass\n')
        >>> data.append('|TimeSig|Signature:4/4\n')
        >>> data.append('|Note|Dur:Whole|Pos:1\n')

        >>>
        >>> nwt = noteworthy.translate.NoteworthyTranslator()
        >>> s = nwt.parseList(data)
        >>> s.show('text')
        {0.0} <music21.stream.Part ...>
            {0.0} <music21.stream.Measure 0 offset=0.0>
                {0.0} <music21.clef.BassClef>
                {0.0} <music21.meter.TimeSignature 4/4>
                {0.0} <music21.note.Note E>

        ú|Fr   é   Nú:ÚChord)ÚDurÚPosÚ zCannot unpack value from z in ÚAddStaffÚBarÚClefÚDynamicÚDynamicVarianceÚEndingÚFlowÚKeyÚLyric1ÚNoteÚRestÚSongInfoÚStaffInstrumentÚTempoÚTextÚTimeSigzCannot create object from "ú"r   )!ÚrstripÚ
startswithr8   ÚgetÚappendÚ
ValueErrorÚstripr<   ÚcreateStaffÚcreateBarlinesÚtranslateChordr-   Ú
createClefÚcreateDynamicsÚcreateDynamicVarianceÚcreateEndingÚcreateOtherRepetitionsÚ	createKeyÚcreateLyricsr.   ÚtranslateNoteÚtranslateRestÚcreateSongInfoÚcreateStaffInstrumentÚcreateTempoÚ
createTextÚcreateTimeSignatureÚ	ExceptionÚprintr!   r    r&   Úinsert)
r1   r?   ÚpiÚsectionsÚcommandÚ
attributesÚ	attributeÚnameÚvalueÚes
             r2   r9   zNoteworthyTranslator.parseList„   sF  € ð2 ð ?	:ñ ?	:ˆBØ—’‘”ˆBØ�}Š}˜SÑ!Ô! UÐ*Ð*ØØ—x’x ‘}”}ˆHØ˜q”kˆGØˆJØ% a b bœ\ð Mð M�	ðMØ$-§O¢O°C¸Ñ$;Ô$;‘M�T˜5Ø 'Ò)Ð)¨t°~Ð/EÐ/EØ%Ÿ>š>¨$Ñ/Ô/Ð7Ø05¨w˜J tÑ,Ð,à& tÔ,×3Ò3°EÑ:Ô:Ð:Ð:à+0˜
 4Ñ(øøÝ!ð Mð Mð MØ —’Ñ(Ô(¨BÒ.Ð.Øå:ØK¸	ÐKÐKÀrÐKÐKñMô Mð Mð ˜ðMøøøð':Ø˜jÒ(Ð(Ø×$Ò$ ZÑ0Ô0Ð0Ñ0Ø Ò%Ð%Ø×'Ò'¨
Ñ3Ô3Ð3Ñ3Ø Ò'Ð'Ø×'Ò'¨
Ñ3Ô3Ð3ØÐ&Ô&¨!Ñ+Ð&Ô&Ñ&Ø Ò&Ð&Ø—O’O JÑ/Ô/Ð/Ñ/Ø 	Ò)Ð)Ø×'Ò'¨
Ñ3Ô3Ð3Ñ3ØÐ 1Ò1Ð1Ø×.Ò.¨zÑ:Ô:Ð:Ñ:Ø Ò(Ð(Ø×%Ò% jÑ1Ô1Ð1Ñ1Ø Ò&Ð&Ø×/Ò/°
Ñ;Ô;Ð;Ñ;Ø Ò%Ð%Ø—N’N :Ñ.Ô.Ð.Ð.Ø Ò(Ð(Ø"&×"3Ò"3°JÑ"?Ô"?�D”K�KØ Ò&Ð&Ø×&Ò& zÑ2Ô2Ð2ØÐ&Ô&¨!Ñ+Ð&Ô&Ð&Ø Ò&Ð&Ø×&Ò& zÑ2Ô2Ð2Ð2Ø 
Ò*Ð*Ø×'Ò'¨
Ñ3Ô3Ð3Ð3ØÐ 1Ò1Ð1Ø×.Ò.¨zÑ:Ô:Ð:Ð:Ø Ò'Ð'Ø×$Ò$ ZÑ0Ô0Ð0Ð0Ø Ò&Ð&Ø—O’O JÑ/Ô/Ð/Ð/Ø 	Ò)Ð)Ø×,Ò,¨ZÑ8Ô8Ð8ùøÝð :ð :ð :ÝÐA°JÐAÐAÐAÑBÔBÐBÝ2¸Ð9øøøøð:øøøð
 Ôð 	9ØÔ×#Ò# DÔ$7Ñ8Ô8Ð8àŒ
×Ò˜!˜TÔ-Ñ.Ô.Ð.ð
 ŒzÐs,   ÁA B?Â?8C:Ã9C:Ã>HLÌ
L2ÌL-Ì-L2c                óZ  — |                      d¦  «        }|d         }d}t          j        t          d         |         ¦  «        }|D ]„}|dk    r|                     ¦   «         }Œ|dk    r| j        s|| _        d}Œ4|dk    rd	|_        ŒB|d
k    rd|_        ŒP|dv r0t          j        dd|j	        ¦  «        }| 
                    |¦  «         Œ…||_        | j        r?|s=t          j        | j        |¦  «        }	| j                             |	¦  «         d| _        dS |r	d| _        dS d| _        dS )aO  
        generalNote could be a Note, Chord, or Rest

        DurationInfo is a string like:

            Whole,Dotted,Slur

        >>> nwt = noteworthy.translate.NoteworthyTranslator()
        >>> n = note.Note()
        >>> nwt.setDurationForObject(n, 'Half')
        >>> n.duration
        <music21.duration.Duration 2.0>

        ú,r   FÚdictionaryNoteLengthÚGraceÚSlurTÚDottedr   Ú	DblDottedrG   )ÚTripletzTriplet=FirstzTriplet=Endé   N)r8   r   ÚDurationr   ÚgetGraceDurationr*   r+   ÚdotsÚTupletÚtypeÚappendTupletr   r„   r!   ra   )
r1   ÚgeneralNoteÚdurationInfoÚpartsÚ
lengthNoteÚthisNoteIsSlurredÚdurationObjectÚkkÚtupÚmusic21SlurObjs
             r2   ÚsetDurationForObjectz)NoteworthyTranslator.setDurationForObjecté   sb  € ð ×"Ò" 3Ñ'Ô'ˆØ˜1”Xˆ
Ø!ÐÝ!Ô*­<Ð8NÔ+OÐPZÔ+[Ñ\Ô\ˆàð 	1ð 	1ˆBØ�WŠ}ˆ}Ø!/×!@Ò!@Ñ!BÔ!B��Ø�v’�Ø”ð 9Ø-8�DÔ*Ø$(Ð!Ð!Ø�x’�Ø&'�Ô#Ð#Ø�{Ò"Ð"Ø&'�Ô#Ð#àÐBÐBÐBÝ”o a¨¨NÔ,?Ñ@Ô@�Ø×+Ò+¨CÑ0Ô0Ð0øà-ˆÔð Œ?ð 	$Ð#4ð 	$Ý$œ\¨$Ô*@À+ÑNÔNˆNØÔ×&Ò& ~Ñ6Ô6Ð6Ø#ˆDŒOˆOˆOØð 	$Ø"ˆDŒOˆOˆOà#ˆDŒOˆOˆOr4   c                óö  — d}d}|d         dk    r| j         du rd}d}d| _         t          |t          j        ¦  «        r|nd}|rN|�3|j        D ]*}|                     t          j        d¦  «        |¦  «         Œ+nt          j        d¦  «        |_        | j         du r[|du rY|�3|j        D ]*}|                     t          j        d¦  «        |¦  «         Œ+nt          j        d¦  «        |_        d| _         dS dS dS )zJ
        sets the tie status for a noteOrChord from the pitchInfo
        Féÿÿÿÿú^TNÚstartÚstop)r,   Ú
isinstancer   rI   ÚpitchesÚsetTier   ÚTie)r1   ÚnoteOrChordÚ	pitchInfoÚthisNoteBeginsATieÚthisNoteIsTiedÚachordÚps          r2   ÚsetTieFromPitchInfoz(NoteworthyTranslator.setTieFromPitchInfo  s-  € ð #ÐØˆà�RŒ=˜CÒÐØŒ~ Ð&Ð&Ø%)Ð"Ø!ˆNØ!ˆDŒNå *¨;½¼Ñ DÔ DÐN��È$ˆð ð 	3ØÐ!Øœð 7ð 7�AØ—M’M¥#¤'¨'Ñ"2Ô"2°AÑ6Ô6Ð6Ð6ð7õ #&¤'¨'Ñ"2Ô"2�”àŒ>˜TÐ!Ð! n¸Ð&=Ð&=ØÐ!Øœð 6ð 6�AØ—M’M¥#¤'¨&¡/¤/°1Ñ5Ô5Ð5Ð5ð6õ #&¤'¨&¡/¤/�”Ø"ˆDŒNˆNˆNð "Ð!Ð&=Ð&=r4   c                óØ   — |                      d¦  «        }|                      d¦  «        }|                      d¦  «        }|                      d¦  «        }|                      |¦  «        }|S )ax  
        returns a pitch object given the Pos: info

        removes ties and alteration signs.  Otherwise
        is same as getOnePitchFromPosition()

        >>> nwt = noteworthy.translate.NoteworthyTranslator()
        >>> nwt.currentClef = 'BASS'
        >>> p = nwt.getPitchFromPositionInfo('b3^')  # removes ties
        >>> p
        <music21.pitch.Pitch G-3>
        r›   ÚxÚXÚz)r^   ÚgetOnePitchFromPosition)r1   ÚposInfoÚposr§   s       r2   ÚgetPitchFromPositionInfoz-NoteworthyTranslator.getPitchFromPositionInfo8  sZ   € ð �nŠn˜SÑ!Ô!ˆà�jŠj˜‰oŒoˆØ�jŠj˜‰oŒoˆØ�jŠj˜‰oŒoˆØ×(Ò(¨Ñ-Ô-ˆØˆr4   c                óŽ   — g }|                      d¦  «        D ],}|                      |¦  «        }|                     |¦  «         Œ-|S )aq  
        returns a list of pitch objects given the Pos:... info
        for a chord.

        >>> nwt = noteworthy.translate.NoteworthyTranslator()
        >>> nwt.currentClef = 'BASS'
        >>> pList = nwt.getMultiplePitchesFromPositionInfo('1,b3,5^')
        >>> pList
        [<music21.pitch.Pitch E3>, <music21.pitch.Pitch G-3>, <music21.pitch.Pitch B3>]
        r�   )r8   r°   ra   )r1   r®   Ú	pitchListÚthisPosr§   s        r2   Ú"getMultiplePitchesFromPositionInfoz7NoteworthyTranslator.getMultiplePitchesFromPositionInfoN  sT   € ð ˆ	à—}’} SÑ)Ô)ð 	 ð 	 ˆGØ×-Ò-¨gÑ6Ô6ˆAØ×Ò˜QÑÔÐÐØÐr4   c                ó
  — d}|d         dv r,|d         }|dd…         }|dk    rd}n|dk    rd	}n|d
k    rd}t          |¦  «        }|                      |¦  «        \  }}t          j        ¦   «         }||_        ||_        |j        }|dk    r$t          j        |¦  «        |_        || j	        |<   nQ|| j	        v r%t          j        | j	        |         ¦  «        |_        n#| j
                             |¦  «        }|�||_        |S )a  
        Get one pitch from a position:

        >>> nwt = noteworthy.translate.NoteworthyTranslator()
        >>> nwt.currentClef = 'BASS'
        >>> p = nwt.getOnePitchFromPosition('b3')
        >>> p
        <music21.pitch.Pitch G-3>
        >>> p.ps
        54.0
        rL   r   )ÚnÚbú#rª   Úvr   Nr·   ú-rª   z##r¹   z--)ÚintÚgetStepAndOctaveFromPositionr   ÚPitchÚstepÚoctaveÚnameWithOctaveÚ
AccidentalÚ
accidentalr/   r)   ÚaccidentalByStep)	r1   r¯   rÂ   ÚpositionNoteÚnoteStepr¿   r§   ÚpNameÚstepAccidentals	            r2   r­   z,NoteworthyTranslator.getOnePitchFromPosition`  s%  € ð ˆ
ØˆqŒ6Ð.Ð.Ð.Ø˜QœˆJØ�a�b�b”'ˆCØ˜SÒ Ð Ø �
�
Ø˜sÒ"Ð"Ø!�
�
Ø˜sÒ"Ð"Ø!�
Ý˜3‘x”xˆØ!×>Ò>¸|ÑLÔLÑˆ�6åŒK‰MŒMˆØˆŒØˆŒØÔ ˆà˜ÒÐÝ Ô+¨JÑ7Ô7ˆAŒLØ,6ˆDÔ" 5Ñ)Ð)à�dÔ,Ð,Ð,Ý Ô+¨DÔ,BÀ5Ô,IÑJÔJˆAŒLˆLà!œ_×=Ò=¸hÑGÔGˆNØÐ)Ø-�”Øˆr4   c                ó  — | j         }|dk    rd}d}t          d         }nŸ|dk    rd}d}t          d         }n‡|dv rd}d	}t          d
         }nq|dk    rd}d	}t          d
         }nY|dk    rd}d	}t          d
         }nA|dk    rd}d}t          d         }n)|dk    rd}d}t          d         }nd}d}t          d         }||k     s	||dz   k    r2||k     r
|dz   }|dz
  }||dz   k    r
|dz
  }|dz   }||k     °)||dz   k    °2||         }||fS )at  
        Given an int representing the position on the staff for the
        current clef,
        returns a string for the step and an int for the octave

        >>> nwt = noteworthy.translate.NoteworthyTranslator()
        >>> nwt.currentClef = 'BASS'
        >>> (step, octave) = nwt.getStepAndOctaveFromPosition(3)
        >>> (step, octave)
        ('G', 3)
        Ú	TREBLE8dwé   r   ÚdictionaryTrebleÚ	TREBLE8upé   )ÚBASSÚ
PERCUSSIONrˆ   rš   ÚdictionaryBassÚBASS8dwrG   ÚBASS8upÚALTOr   ÚdictionaryAltoÚTENORéûÿÿÿÚdictionaryTenoré   é   )r'   r   )r1   rÄ   r'   r¿   ÚminPositionÚ
dictionaryÚnoteNames          r2   r¼   z1NoteworthyTranslator.getStepAndOctaveFromPosition‹  s›  € ð Ô&ˆØ˜+Ò%Ð%ØˆFØˆKÝ%Ð&8Ô9ˆJˆJØ˜KÒ'Ð'ØˆFØˆKÝ%Ð&8Ô9ˆJˆJØÐ2Ð2Ð2ØˆFØˆKÝ%Ð&6Ô7ˆJˆJØ˜IÒ%Ð%ØˆFØˆKÝ%Ð&6Ô7ˆJˆJØ˜IÒ%Ð%ØˆFØˆKÝ%Ð&6Ô7ˆJˆJØ˜FÒ"Ð"ØˆFØˆKÝ%Ð&6Ô7ˆJˆJØ˜GÒ#Ð#ØˆFØˆKÝ%Ð&7Ô8ˆJˆJàˆFØˆKÝ%Ð&8Ô9ˆJà˜[Ò(Ð(¨L¸KÈ!¹OÒ,LÐ,LØ˜kÒ)Ð)Ø+¨aÑ/�Ø !™�Ø˜{¨Q™Ò/Ð/Ø+¨aÑ/�Ø !™�ð ˜[Ò(Ð(¨L¸KÈ!¹OÒ,LÐ,Lð ˜lÔ+ˆà˜&Ð!Ð!r4   c                ó  — |d         }|d         }|                       |¦  «        }| j        dk    r,t          j        ¦   «         }|j        |_        |j        |_        nt          j        |¦  «        }|  	                    ||¦  «         |  
                    ||¦  «         | j        rB| j        t          | j        ¦  «        k     r%|                     | j        | j                 ¦  «         |                      ¦   «                              |¦  «         dS )a4  
        Translation of a music21 note from a NWC note.

        >>> measure = stream.Measure()
        >>> nwt = noteworthy.translate.NoteworthyTranslator()
        >>> nwt.currentMeasure = measure
        >>> nwt.translateNote({'Dur': 'Half', 'Pos': '#-3'})
        >>> measure[0]
        <music21.note.Note F#>

        Note that the next note in the measure with the same position should
        inherit the last position's accidental:

        >>> nwt.translateNote({'Dur': 'Half', 'Pos': '-3'})
        >>> measure[1]
        <music21.note.Note F#>

        rJ   rK   rÏ   N)r°   r'   r   Ú	Unpitchedr¾   ÚdisplayStepr¿   ÚdisplayOctaverV   r˜   r¨   r.   r-   ÚlenÚaddLyricÚgetShortestStreamra   )r1   r{   r�   r£   r§   r¶   s         r2   rn   z"NoteworthyTranslator.translateNoteÅ  sü   € ð& " %Ô(ˆØ˜uÔ%ˆ	à×)Ò)¨)Ñ4Ô4ˆàÔ˜|Ò+Ð+Ý”Ñ Ô ˆAØœFˆAŒMØœhˆAŒOˆOå”	˜!‘”ˆAð 	×!Ò! ! \Ñ2Ô2Ð2ð 	× Ò   IÑ.Ô.Ð.ð Œ;ð 	8˜4Ô-µ°D´KÑ0@Ô0@Ò@Ð@Ø�JŠJ�t”{ 4Ô#5Ô6Ñ7Ô7Ð7à×ÒÑ Ô ×'Ò'¨Ñ*Ô*Ð*Ð*Ð*r4   c                ó�   — | j         j        r| j         S t          | j                              t          j        ¦  «        d„ ¬¦  «        S )Nc                ó   — | j         S rB   )ÚquarterLength)r¹   s    r2   ú<lambda>z8NoteworthyTranslator.getShortestStream.<locals>.<lambda>ú  s   € ˜!œ/€ r4   r   )r!   ÚisFlatÚminÚgetElementsByClassr   ÚVoicer0   s    r2   rã   z&NoteworthyTranslator.getShortestStreamò  sN   € ØÔÔ%ð 	'àÔ&Ð&õ ØÔ×2Ò2µ6´<Ñ@Ô@Ø)Ð)ð
ñ 
ô 
ð 	
r4   c                óv  — |d         }|d         }|                       ¦   «         j        }d|v }d}d„ }|D �]$}t          j        ¦   «         }	|                      |	|¦  «         ||                     |¦  «                 }
|                      |
¦  «        |	_        |                      |	|
¦  «         | j	        rB| j
        t          | j	        ¦  «        k     r%|	                     | j	        | j
                 ¦  «         t          |¦  «        dk    r*|�(|                       ¦   «                              |	¦  «         n" || ||¦  «        }|                     |	¦  «         |dz  }�Œ&|r\|d         }t          j        ¦   «         }d|_        |                      ||¦  «          || ||¦  «        }|                     |¦  «         dS dS )	a  
        Translation of a music21 chord from a NWC one.

        >>> measure = stream.Measure()

        >>> nwt = noteworthy.translate.NoteworthyTranslator()
        >>> nwt.currentMeasure = measure
        >>> nwt.translateChord({'Dur': ['Half'], 'Pos': ['1,3,#5']})
        >>> measure[0]
        <music21.chord.Chord C5 E5 G#5>

        Chords also inherit accidentals:
        >>> nwt.translateChord({'Dur': ['Half'], 'Pos': ['1,3,5']})
        >>> measure[1]
        <music21.chord.Chord C5 E5 G#5>

        rJ   rK   ÚDur2r   c                ó†  — d }| j                              t          j        ¦  «        }|                     |¦  «        }|€³t          j        ¦   «         }||_        t          |¦  «        dk    rlg }| j         D ]1}t          |t          j	        ¦  «        r| 
                    |¦  «         Œ2|r/| 
                    |¦  «         | j                              |¦  «         | j          
                    |¦  «         |j        }|j        }||z
  dk    r9t          j        ¦   «         }	||z
  |	_        d|	_        | 
                    |	¦  «         |S )Nr   rˆ   )r!   rê   r   rë   ÚgetElementByIdÚidrá   rž   r   ÚGeneralNotera   Úremoveræ   rW   Ú	stepShift)
Ú
inner_selfÚvoiceIdÚdurÚvoiceÚvoicesÚnotesÚitemÚcdÚvdÚrests
             r2   ÚgetVoiceAtDurationz?NoteworthyTranslator.translateChord.<locals>.getVoiceAtDuration  s8  € àˆEØÔ.×AÒAÅ&Ä,ÑOÔOˆFØ×)Ò)¨'Ñ2Ô2ˆEð ˆ}Ýœ™œ�Ø"�”å�v‘;”; !Ò#Ð#Ø�EØ *Ô 9ð /ð /˜Ý% d­DÔ,<Ñ=Ô=ð /Ø!ŸLšL¨Ñ.Ô.Ð.øØð @ØŸš UÑ+Ô+Ð+Ø"Ô1×8Ò8¸Ñ?Ô?Ð?àÔ)×0Ò0°Ñ7Ô7Ð7ð Ô"ˆBØÔ$ˆBà�B‰w˜Š{ˆ{Ý”y‘{”{�Ø%'¨"¡W�Ô"Ø!"�”Ø—’˜TÑ"Ô"Ð"àˆLr4   r   Nrˆ   )rã   r   r   rI   r˜   Úindexr´   rŸ   r¨   r.   r-   rá   râ   ra   r   rW   ró   )r1   r{   ÚdurationInfosÚ
pitchInfosÚcurrentDurationÚisRestChordÚirþ   ÚdÚcr§   r¹   ÚrestDurInfoÚrs                 r2   rf   z#NoteworthyTranslator.translateChordý  sÕ  € ð$ # 5Ô)ˆØ Ô&ˆ
Ø×0Ò0Ñ2Ô2Ô;ˆØ 
Ð*ˆØˆð 	ð  	ð  	ðF ð 	ñ 	ˆAÝ”‘”ˆAà×%Ò% a¨Ñ+Ô+Ð+ð ˜=×.Ò.¨qÑ1Ô1Ô2ˆAØ×?Ò?ÀÑBÔBˆAŒIØ×$Ò$ Q¨Ñ*Ô*Ð*ð Œ{ð <˜tÔ1µC¸¼Ñ4DÔ4DÒDÐDØ—
’
˜4œ; tÔ'9Ô:Ñ;Ô;Ð;å�=Ñ!Ô! QÒ&Ð&¨;Ð+BØ×&Ò&Ñ(Ô(×/Ò/°Ñ2Ô2Ð2Ð2à&Ð& t¨Q°Ñ@Ô@�Ø—’˜‘”�à�‰FˆA‰Aàð 	Ø$ VÔ,ˆKÝ”	‘”ˆAØˆAŒKØ×%Ò% a¨Ñ5Ô5Ð5Ø"Ð" 4¨¨OÑ<Ô<ˆAØ�HŠH�Q‰KŒKˆKˆKˆKð	ð 	r4   c                ó¶   — |d         }t          j        ¦   «         }|                      ||¦  «         |                      ¦   «                              |¦  «         dS )a,  
        Translation of a music21 rest.  Adds the rest to the given measure.

        >>> measureIn = stream.Measure()
        >>> measureIn.append(note.Note('C#4', type='half'))

        >>> nwt = noteworthy.translate.NoteworthyTranslator()
        >>> nwt.currentMeasure = measureIn
        >>> nwt.translateRest({'Dur': '8th,Dotted'})
        >>> nwt.translateRest({'Dur': '4th'})
        >>> measureIn.show('text')
        {0.0} <music21.note.Note C#>
        {2.0} <music21.note.Rest dotted-eighth>
        {2.75} <music21.note.Rest quarter>

        rJ   N)r   rW   r˜   rã   ra   )r1   r{   r�   r  s       r2   ro   z"NoteworthyTranslator.translateRestV  sU   € ð" " %Ô(ˆåŒI‰KŒKˆØ×!Ò! ! \Ñ2Ô2Ð2à×ÒÑ Ô ×'Ò'¨Ñ*Ô*Ð*Ð*Ð*r4   c                óö  — d}d|v r6|d         dk    rd}n)|d         dk    rd}nt          d|d         › �¦  «        ‚d	}|d
         }|dk    rŸ|d	k    r/| j                             t          j        ¦   «         ¦  «         d}�nÜ|dk    r/| j                             t          j        ¦   «         ¦  «         d}�n§|dk    r-| j                             t          j        ¦   «         ¦  «         d}�nr|dk    rž|d	k    r/| j                             t          j        ¦   «         ¦  «         d}�n7|dk    r/| j                             t          j        ¦   «         ¦  «         d}�n|dk    r-| j                             t          j	        ¦   «         ¦  «         d}nÎ|dk    rC|d	k    rt          d¦  «        ‚| j                             t          j
        ¦   «         ¦  «         d}n…|dk    rC|d	k    rt          d¦  «        ‚| j                             t          j        ¦   «         ¦  «         d}n<|dk    r6t          j        ¦   «         }d|_        | j                             |¦  «         d}|€t          d|› �¦  «        ‚|| _        dS )aÉ  
        Add a new clef to the current measure and return the currentClef.

        Clef lines should look like: \|Clef\|Type:ClefType  or
        \|Clef\|Type:ClefType\|OctaveShift:Octave Down (or Up)

        >>> nwt = noteworthy.translate.NoteworthyTranslator()
        >>> nwt.currentMeasure = stream.Measure()
        >>> nwt.createClef({'Type': 'Treble'})
        >>> nwt.currentMeasure.show('text')
        {0.0} <music21.clef.TrebleClef>
        >>> nwt.currentClef
        'TREBLE'
        >>> nwt.createClef({'Type' : 'Bass', 'OctaveShift' : 'Octave Down'})
        >>> nwt.currentMeasure.show('text')
        {0.0} <music21.clef.TrebleClef>
        {0.0} <music21.clef.Bass8vbClef>
        >>> nwt.createClef({'Type' : 'Percussion'})
        >>> nwt.currentMeasure.show('text')
        {0.0} <music21.clef.TrebleClef>
        {0.0} <music21.clef.Bass8vbClef>
        {0.0} <music21.clef.PercussionClef>

        If no clef can be found then it raises a NoteworthyTranslate exception

        >>> nwt.createClef({'Type' : 'OrangeClef'})
        Traceback (most recent call last):
        music21.noteworthy.translate.NoteworthyTranslateException: Did
            not find a proper clef in type, OrangeClef

        NÚOctaveShiftzOctave Downrš   z	Octave Upr   z'Did not get a proper octave shift from rˆ   r   ÚTypeÚTrebler   rÉ   rÌ   ÚBassrÎ   rÑ   rÒ   ÚAltoz$cannot shift octaves on an alto clefrÓ   ÚTenorz$cannot shift octaves on a tenor clefrÕ   Ú
PercussionrG   rÏ   z$Did not find a proper clef in type, )r<   r!   ra   r   Ú
TrebleClefÚTreble8vbClefÚTreble8vaClefÚBassClefÚBass8vbClefÚBass8vaClefÚAltoClefÚ	TenorClefÚPercussionClefÚliner'   )r1   r{   r'   ÚoctaveShiftÚclr  s         r2   rg   zNoteworthyTranslator.createClefn  s¨  € ð@ ˆØ˜JÐ&Ð&Ø˜-Ô(¨MÒ9Ð9Ø ��Ø˜MÔ*¨kÒ9Ð9Ø��å2ØM¸jÈ¼mÐMÐMñOô Oð Oð ˆKà˜ÔˆØ�Š>ˆ>Ø˜aÒÐØÔ#×*Ò*­4¬?Ñ+<Ô+<Ñ=Ô=Ð=Ø&�‘Ø Ò"Ð"ØÔ#×*Ò*­4Ô+=Ñ+?Ô+?Ñ@Ô@Ð@Ø)�‘Ø Ò!Ð!ØÔ#×*Ò*­4Ô+=Ñ+?Ô+?Ñ@Ô@Ð@Ø)�ùà�6Š\ˆ\Ø˜aÒÐØÔ#×*Ò*­4¬=©?¬?Ñ;Ô;Ð;Ø$�‘Ø Ò"Ð"ØÔ#×*Ò*­4Ô+;Ñ+=Ô+=Ñ>Ô>Ð>Ø'�‘Ø Ò!Ð!ØÔ#×*Ò*­4Ô+;Ñ+=Ô+=Ñ>Ô>Ð>Ø'�øà�6Š\ˆ\Ø˜aÒÐÝ2Ð3YÑZÔZÐZØÔ×&Ò&¥t¤}¡¤Ñ7Ô7Ð7Ø ˆKˆKØ�7Š]ˆ]Ø˜aÒÐÝ2Ð3YÑZÔZÐZØÔ×&Ò&¥t¤~Ñ'7Ô'7Ñ8Ô8Ð8Ø!ˆKˆKØ�<ÒÐÝÔ#Ñ%Ô%ˆAØˆAŒFØÔ×&Ò& qÑ)Ô)Ð)Ø&ˆKàÐÝ.Ð/ZÐVXÐ/ZÐ/ZÑ[Ô[Ð[Ø&ˆÔÐÐr4   c                ó¸   — d}|d         D ]}|dk    r|dz  }Œ|dk    r|dz  }Œt          j        |¦  «        }| j                             |¦  «         || _        dS )a2  
        Adds a new key signature to the given measure.
        Returns the number of sharps (negative for flats)

        >>> measureIn = stream.Measure()
        >>> measureIn.append(note.Rest(quarterLength=3.0))

        >>> nwt = noteworthy.translate.NoteworthyTranslator()
        >>> nwt.currentMeasure = measureIn
        >>> nwt.createKey({'Signature':'F#,C#,G#,D#'})
        >>> nwt.currentKey.sharps
        4
        >>> measureIn.show('text')
        {0.0} <music21.note.Rest dotted-half>
        {3.0} <music21.key.KeySignature of 4 sharps>
        r   Ú	Signaturer¸   r   r·   N)r   r(   r!   ra   r)   )r1   r{   ÚcurrentSharpsr|   r)   s        r2   rl   zNoteworthyTranslator.createKeyÅ  s|   € ð$ ˆØ# KÔ0ð 	#ð 	#ˆIØ˜CÒÐØ Ñ"��Ø˜cÒ!Ð!Ø Ñ"�øÝÔ% mÑ4Ô4ˆ
ØÔ×"Ò" :Ñ.Ô.Ð.Ø$ˆŒˆˆr4   c                ó”   — |d         }|dk    rd}n|dk    rd}t          j        |¦  «        }| j                             |¦  «         dS )a@  
        Adding a time signature in the score.

        >>> measure = stream.Measure()
        >>> nwt = noteworthy.translate.NoteworthyTranslator()
        >>> nwt.currentMeasure = measure
        >>> nwt.createTimeSignature({'Signature':'4/4'})
        >>> measure[0]
        <music21.meter.TimeSignature 4/4>
        r  Ú	AllaBrevez2/2ÚCommonz4/4N)r   ÚTimeSignaturer!   ra   )r1   r{   ÚtimesÚms       r2   rt   z(NoteworthyTranslator.createTimeSignatureá  s]   € ð ˜;Ô'ˆØ�KÒÐØˆEˆEØ�hÒÐØˆEåÔ Ñ&Ô&ˆØÔ×"Ò" 1Ñ%Ô%Ð%Ð%Ð%r4   c                ó   — | j         �?| j                              | j        ¦  «         | j                             d| j         ¦  «         t          j        ¦   «         | _         t          j        ¦   «         | _        d| _        dS )z.
        Add a new part to the score.
        Nr   )	r    ra   r!   r&   rw   r   ÚPartÚMeasurer"   r0   s    r2   Ú
createPartzNoteworthyTranslator.createPartõ  sn   € ð ÔÐ'ØÔ×#Ò# DÔ$7Ñ8Ô8Ð8ØŒJ×Ò˜a Ô!1Ñ2Ô2Ð2å!œ;™=œ=ˆÔÝ$œnÑ.Ô.ˆÔØˆÔÐÐr4   c                ól  — i | _         d|vr‡| j                             | j        ¦  «         t	          j        | j        ¬¦  «        | _        t          | j        ¦  «        dk    r| j                             | j        ¦  «         | xj        dz  c_        dS t          | j        ¦  «        dk    rAt          j
        | j        | j        ¬¦  «        }| j                             |¦  «         g | _        |d         }|dk    rX| j                             | j        ¦  «         t	          j        ¦   «         | _        t          j        d¬¦  «        | j        _        �nA|d	k    rXt          j        d
¬¦  «        | j        _        | j                             | j        ¦  «         t	          j        ¦   «         | _        �nã|dk    rX| j                             | j        ¦  «         t	          j        ¦   «         | _        t          j        d¬¦  «        | j        _        �n…|dk    rXt          j        d
¬¦  «        | j        _        | j                             | j        ¦  «         t	          j        ¦   «         | _        �n'|dk    rVt          j        d¦  «        | j        _        | j                             | j        ¦  «         t	          j        ¦   «         | _        nË|dk    rVt          j        d¦  «        | j        _        | j                             | j        ¦  «         t	          j        ¦   «         | _        no|dk    rVt          j        d¦  «        | j        _        | j                             | j        ¦  «         t	          j        ¦   «         | _        nt#          d|› d�¦  «        ‚| j        | j        _        | xj        dz  c_        dS )a´  
        Translates bar lines into music21.

        >>> nwt = noteworthy.translate.NoteworthyTranslator()
        >>> nwt.currentPart = stream.Part()
        >>> nwt.currentMeasure = stream.Measure()
        >>> nwt.createBarlines({'Style':'MasterRepeatOpen'})
        >>> nwt.currentMeasure
        <music21.stream.Measure 0 offset=0.0>
        >>> nwt.currentMeasure.leftBarline
        <music21.bar.Repeat direction=start>

        ÚStyle©Únumberr   r   NÚMasterRepeatOpenrœ   )Ú	directionÚMasterRepeatCloseÚendÚLocalRepeatOpenÚLocalRepeatCloseÚDoubleÚdoubleÚSectionOpenzheavy-lightÚSectionCloseÚfinalzcannot find a style z in our list)r/   r    ra   r!   r   r)  r"   rá   r$   r   ÚRepeatBracketr#   r   ÚRepeatÚleftBarlineÚrightBarlineÚBarliner<   r.  )r1   r{   Ú	rbSpannerÚstyles       r2   re   z#NoteworthyTranslator.createBarlines  sY  € ð "$ˆÔà˜*Ð$Ð$àÔ×#Ò# DÔ$7Ñ8Ô8Ð8Ý"(¤.¸Ô8JÐ"KÑ"KÔ"KˆDÔÝ�4Ô(Ñ)Ô)¨AÒ-Ð-ØÔ%×,Ò,¨TÔ-@ÑAÔAÐAØÐÔ !Ñ#ÐÔØˆFåˆtÔ$Ñ%Ô%¨Ò)Ð)ÝÔ-¨dÔ.CÈDÔL^Ð_Ñ_Ô_ˆIØÔ×#Ò# IÑ.Ô.Ð.à$&ˆDÔ!à˜7Ô#ˆàÐ&Ò&Ð&ØÔ×#Ò# DÔ$7Ñ8Ô8Ð8Ý"(¤.Ñ"2Ô"2ˆDÔÝ.1¬jÀ7Ð.KÑ.KÔ.KˆDÔÔ+Ñ+àÐ)Ò)Ð)Ý/2¬zÀEÐ/JÑ/JÔ/JˆDÔÔ,ØÔ×#Ò# DÔ$7Ñ8Ô8Ð8Ý"(¤.Ñ"2Ô"2ˆDÔÑàÐ'Ò'Ð'ØÔ×#Ò# DÔ$7Ñ8Ô8Ð8Ý"(¤.Ñ"2Ô"2ˆDÔÝ.1¬jÀ7Ð.KÑ.KÔ.KˆDÔÔ+Ñ+àÐ(Ò(Ð(Ý/2¬zÀEÐ/JÑ/JÔ/JˆDÔÔ,ØÔ×#Ò# DÔ$7Ñ8Ô8Ð8Ý"(¤.Ñ"2Ô"2ˆDÔÑà�hÒÐÝ/2¬{¸8Ñ/DÔ/DˆDÔÔ,ØÔ×#Ò# DÔ$7Ñ8Ô8Ð8Ý"(¤.Ñ"2Ô"2ˆDÔÐà�mÒ#Ð#Ý/2¬{¸=Ñ/IÔ/IˆDÔÔ,ØÔ×#Ò# DÔ$7Ñ8Ô8Ð8Ý"(¤.Ñ"2Ô"2ˆDÔÐØ�nÒ$Ð$Ý/2¬{¸7Ñ/CÔ/CˆDÔÔ,ØÔ×#Ò# DÔ$7Ñ8Ô8Ð8Ý"(¤.Ñ"2Ô"2ˆDÔÐå.Ð/YÀeÐ/YÐ/YÐ/YÑZÔZÐZà%)Ô%7ˆÔÔ"ØÐÔ˜aÑÐÔÐÐr4   c                óÀ  — |d         }|dk    rt          j        ¦   «         }n¡|dk    rt          j        ¦   «         }n‡|dk    rt          j        ¦   «         }nm|dk    rt          j        ¦   «         }nS|dk    rt          j        ¦   «         }n9|dk    rt          j        ¦   «         }nt          dt          |¦  «        › �¦  «        ‚| j         	                    |¦  «         d	S )
a˜  
        Repetitions like 'Coda', 'Segno' and some others.

        >>> nwt = noteworthy.translate.NoteworthyTranslator()
        >>> nwt.currentMeasure = stream.Measure()
        >>> nwt.createOtherRepetitions({'Style' : 'ToCoda', 'Pos': '8',
        ...                             'Wide':'Y', 'Placement': 'BestFitForward'})
        >>> isinstance(nwt.currentMeasure[0], repeat.Coda)
        True
        r,  ÚDCalFineÚCodaÚToCodaÚSegnoÚDSalCodaÚFinezCannot get style from N)
r   ÚDaCapoAlFinerC  rE  ÚDalSegnoAlCodarG  r<   Ústrr!   ra   ©r1   r{   r@  Úgs       r2   rk   z+NoteworthyTranslator.createOtherRepetitionsI  sÚ   € ð ˜7Ô#ˆØ�JÒÐÝÔ#Ñ%Ô%ˆAˆAØ�fŠ_ˆ_Ý”‘”ˆAˆAØ�hÒÐÝ”‘”ˆAˆAØ�gÒÐÝ”‘”ˆAˆAØ�jÒ Ð ÝÔ%Ñ'Ô'ˆAˆAØ�fŠ_ˆ_Ý”‘”ˆAˆAå.Ð/YÍÈJÉÌÐ/YÐ/YÑZÔZÐZØÔ×"Ò" 1Ñ%Ô%Ð%Ð%Ð%r4   c                óÀ   — |d         }d}|dk    rt          j        ¦   «         }n|dk    rt          j        ¦   «         }n	 |�| j                             |¦  «         dS dS )aV  
        Adding dynamics like "crescendo" to the measure.

        >>> nwt = noteworthy.translate.NoteworthyTranslator()
        >>> nwt.currentMeasure = stream.Measure()
        >>> nwt.createDynamicVariance({'Style' : 'Crescendo', 'Pos': '-6'})
        >>> nwt.currentMeasure.show('text')
        {0.0} <music21.dynamics.Crescendo>
        r,  NÚ	CrescendoÚDecrescendo)r	   rN  Ú
Diminuendor!   ra   rK  s       r2   ri   z*NoteworthyTranslator.createDynamicVariancef  su   € ð ˜7Ô#ˆØˆØ�KÒÐÝÔ"Ñ$Ô$ˆAˆAØ�mÒ#Ð#ÝÔ#Ñ%Ô%ˆAˆAààˆ=ØÔ×&Ò& qÑ)Ô)Ð)Ð)Ð)ð ˆ=r4   c                óz   — d|v r6t          j        |d         ¦  «        }| j                             |¦  «         dS dS )a?  
        Adding dynamics like "fff", "pp", ... to the measure.

        >>> nwt = noteworthy.translate.NoteworthyTranslator()
        >>> nwt.currentMeasure = stream.Measure()
        >>> nwt.createDynamics({'Style': 'fff', 'Pos': '-8'})
        >>> nwt.currentMeasure[0]
        <music21.dynamics.Dynamic fff>
        r,  N)r	   rP   r!   ra   )r1   r{   rL  s      r2   rh   z#NoteworthyTranslator.createDynamics|  sI   € ð �jÐ Ð ÝÔ  ¨GÔ!4Ñ5Ô5ˆAØÔ×&Ò& qÑ)Ô)Ð)Ð)Ð)ð !Ð r4   c                óÒ  — g }d}|d         }|                      d¦  «        }|                     dd¦  «        }|                     dd¦  «        }|                     dd¦  «        }|                     d¦  «        D ]m}d}|                     d	¦  «        D ]S}|dk    rd}d}|                     d¦  «        D ]1}|dk    rd
|› �}	n|}	d}|dk    rd}d}	|                     |	¦  «         Œ2ŒTŒn|S )zæ
        Get a list of lyrics from a Lyric line

        >>> nwt = noteworthy.translate.NoteworthyTranslator()
        >>> lyricsList = nwt.createLyrics({'Text': '"Hello world"'})
        >>> lyricsList[0]
        'Hello'
        r   r[   r]   z
ú úr6   r   rº   z -rL   z - )rc   Úreplacer8   ra   )
r1   r{   r.   ÚspaceÚallTextÚwordÚnouÚwordPartÚwÚlls
             r2   rm   z!NoteworthyTranslator.createLyrics‹  s"  € ð ˆØˆØ˜VÔ$ˆØ—-’- Ñ$Ô$ˆØ—/’/ &¨#Ñ.Ô.ˆØ—/’/ $¨Ñ,Ô,ˆØ—/’/ $¨Ñ,Ô,ˆØ—M’M #Ñ&Ô&ð 	&ð 	&ˆDØˆCØ ŸJšJ s™OœOð &ð &�Ø˜A’:�:Ø�CØ�EØ!Ÿš¨Ñ-Ô-ð 	&ð 	&�AØ˜a’x�xØ% !˜X˜X˜˜à˜Ø˜Ø˜B’w�wØ !˜Ø"˜Ø—M’M "Ñ%Ô%Ð%Ð%ð	&ð	&ð ˆr4   c                ó  — |                       ¦   «          t          j        d¦  «        | _        i | _        g | _        d| _        |                     d¦  «        | j        _	        |                     d¦  «        | j        _
        d S )Nr   ÚName)r*  r   r(   r)   r/   r.   r-   r`   r    ÚpartNameÚpartAbbreviation)r1   r{   s     r2   rd   z NoteworthyTranslator.createStaff­  so   € Ø�ŠÑÔÐÝÔ*¨1Ñ-Ô-ˆŒØ!#ˆÔØˆŒØˆÔØ$.§N¢N°6Ñ$:Ô$:ˆÔÔ!Ø,6¯NªN¸6Ñ,BÔ,BˆÔÔ)Ð)Ð)r4   c                ó   — t          |                     dd¦  «        ¦  «        }t          j        |¦  «        }t          |                     dd¦  «        ¦  «        }t	          j        |¦  «        |_        | j                             |¦  «         d S )NÚPatchr   ÚTrans)	r»   r`   r   ÚinstrumentFromMidiProgramr   ÚIntervalÚtranspositionr    ra   )r1   r{   ÚpatchÚstaffInstruÚreadTranspos        r2   rq   z*NoteworthyTranslator.createStaffInstrument¶  sx   € Ý�J—N’N 7¨AÑ.Ô.Ñ/Ô/ˆå Ô:¸5ÑAÔAˆÝ˜*Ÿ.š.¨°!Ñ4Ô4Ñ5Ô5ˆÝ$,Ô$5°kÑ$BÔ$BˆÔ!ØÔ×Ò Ñ,Ô,Ð,Ð,Ð,r4   c                ó  — |d         }t          j        |¦  «        }t          |                     d¦  «        ¦  «        dk     rdnd|_        |                     d¦  «        |j        _        | j                             |¦  «         d S )Nr[   rK   r   ÚaboveÚbelow)	r   ÚTextExpressionr»   r`   Ú	placementr@  Ú	relativeYr!   ra   )r1   r{   ÚtextÚexprs       r2   rs   zNoteworthyTranslator.createText¾  sx   € Ø˜&Ô!ˆåÔ)¨$Ñ/Ô/ˆÝ$'¨
¯ª°uÑ(=Ô(=Ñ$>Ô$>ÀÒ$BÐ$B˜˜ÈˆŒØ)Ÿ~š~¨eÑ4Ô4ˆŒ
ÔØÔ×"Ò" 4Ñ(Ô(Ð(Ð(Ð(r4   c                óÐ   — |                      d¦  «        }|                      d¦  «        }t          j        ¦   «         }||_        ||_        | j                             |¦  «         d S )NÚTitleÚAuthor)r`   r   ÚMetadataÚtitleÚauthorr&   ra   )r1   r{   rv  rw  Úmds        r2   rp   z#NoteworthyTranslator.createSongInfoÆ  s\   € Ø—’˜wÑ'Ô'ˆØ—’ Ñ)Ô)ˆÝÔÑ Ô ˆØˆŒØˆŒ	ØŒ
×Ò˜"ÑÔÐÐÐr4   c                óà   — |d         }| j         j        €t          j        ¦   «         | j         _        | j         g| _        |                     d¦  «        d         }t          |¦  «        | _        d S )NÚEndingsr�   r   )r!   r<  r   r>  r$   r8   r»   r#   )r1   r{   r2  Ú
endingTypes       r2   rj   z!NoteworthyTranslator.createEndingÎ  s_   € Ø˜Ô#ˆØÔÔ*Ð2Ý.1¬k©m¬mˆDÔÔ+Ø!%Ô!4Ð 5ˆÔØ—Y’Y˜s‘^”^ AÔ&ˆ
Ý  ™_œ_ˆÔÐÐr4   c                ó�   — |d         }t          j        t          |¦  «        ¬¦  «        }| j                             d|¦  «         d S )NrZ   r-  r   )r   ÚMetronomeMarkr»   r!   rw   )r1   r{   Útempo_valueÚmms       r2   rr   z NoteworthyTranslator.createTempoÖ  sF   € Ø  Ô)ˆÝÔ ­¨KÑ(8Ô(8Ð9Ñ9Ô9ˆØÔ×"Ò" 1 bÑ)Ô)Ð)Ð)Ð)r4   N)!Ú__name__Ú
__module__Ú__qualname__Ú__doc__r3   r@   rD   r9   r˜   r¨   r°   r´   r­   r¼   rn   rã   rf   ro   rg   rl   rt   r*  re   rk   ri   rh   rm   rd   rq   rs   rp   rj   rr   © r4   r2   r   r   _   sì  € € € € € ðð ð$ð $ð $ð(Lð Lð Lð(ð (ð (ðcð cð cðJ.$ð .$ð .$ð`#ð #ð #ð>ð ð ð,ð ð ð$)ð )ð )ðV8"ð 8"ð 8"ðt)+ð )+ð )+ðZ	
ð 	
ð 	
ðWð Wð Wðr+ð +ð +ð0U'ð U'ð U'ðn%ð %ð %ð8&ð &ð &ð(
ð 
ð 
ðF ð F ð F ðP&ð &ð &ð:*ð *ð *ð,*ð *ð *ð ð  ð  ðDCð Cð Cð-ð -ð -ð)ð )ð )ðð ð ð-ð -ð -ð*ð *ð *ð *ð *r4   r   c                  ó   — e Zd ZdS )r<   N)r€  r�  r‚  r„  r4   r2   r<   r<   Ý  s   € € € € € Ø€Dr4   r<   c                  ó   — e Zd Zd„ Zd„ ZdS )ÚTestc                ó  — t          j        ¦   «         dz  }|dz  }t          ¦   «                              |¦  «        }|                      t          |t          j                 ¦  «        d¦  «         |                      t          |t          j                  	                    ¦   «         j
        ¦  «        d¦  «         |                      t          |t          j                  	                    ¦   «         ¦  «        d¦  «         d S )NÚ
noteworthyzverySimple.nwctxtr   ÚEz<music21.clef.BassClef>)r   ÚgetSourceFilePathr   r@   ÚassertEqualrá   r   rV   rJ  Úfirstr}   r   rO   )r1   ÚnwcTranslatePathÚ
simplePathÚmyScores       r2   Ú	testBasiczTest.testBasicã  sÕ   € Ý!Ô3Ñ5Ô5¸ÑDÐØ%Ð(;Ñ;ˆ
Ý&Ñ(Ô(×2Ò2°:Ñ>Ô>ˆØ×Ò�˜W¥T¤YÔ/Ñ0Ô0°!Ñ4Ô4Ð4Ø×Ò�˜W¥T¤YÔ/×5Ò5Ñ7Ô7Ô<Ñ=Ô=¸sÑCÔCÐCØ×Ò�˜W¥T¤YÔ/×5Ò5Ñ7Ô7Ñ8Ô8Ø2ñ	4ô 	4ð 	4ð 	4ð 	4r4   c                ó@  — d}t          ¦   «         }|                     |¦  «        }|j        d                              t          j        ¦  «                             ¦   «         j                             ¦   «         }|                      |j	        j
        j        d¦  «         dS )aJ  
        test a problem with accidentals at the end of one staff not
        being cleared at the beginning of the next

        showed up in Morley, "Since my tears and lamenting" where
        Staff 1 ended with a B-natural Picardy, and Staff
        2 began with a B in a flat key, but was showing up as B-natural also
        aâ  !NoteWorthyComposer(2.0)
|AddStaff|
|Clef|Type:Treble
|Key|Signature:Bb
|TimeSig|Signature:Common
|Tempo|Base:Half|Tempo:60|Pos:7|Visibility:Never
|Note|Dur:Half|Pos:2^|Opts:Stem=Down
|Bar
|Note|Dur:Half|Pos:2|Opts:Stem=Down
|Note|Dur:Half|Pos:n0|Opts:Stem=Down
|Bar
|AddStaff|
|Clef|Type:Treble
|Key|Signature:Bb
|TimeSig|Signature:Common
|Note|Dur:Half|Pos:0^|Opts:Stem=Down
|Bar
|Note|Dur:Half|Pos:0|Opts:Stem=Down
|Note|Dur:Half|Pos:0|Opts:Stem=Down
|Bar
!NoteWorthyComposer-Endr   g      ð¿N)r   rD   r‘   rê   r   r)  r�  rù   rŒ  r   rÂ   Úalter)r1   ÚinfoÚnwtÚsÚn1s        r2   ÚtestKeySignatureAtBeginningz Test.testKeySignatureAtBeginningì  s�   € ðˆõ* #Ñ$Ô$ˆØ�OŠO˜DÑ!Ô!ˆàŒW�QŒZ×*Ò*­6¬>Ñ:Ô:×@Ò@ÑBÔBÔH×NÒNÑPÔPˆØ×Ò˜œÔ,Ô2°DÑ9Ô9Ð9Ð9Ð9r4   N)r€  r�  r‚  r‘  r˜  r„  r4   r2   r‡  r‡  á  s2   € € € € € ð4ð 4ð 4ð#:ð #:ð #:ð #:ð #:r4   r‡  c                  ó   — e Zd ZdZd„ ZdS )ÚTestExternalTc                ó¸   — t          j        ¦   «         dz  }|dz  }t          ¦   «                              |¦  «        }| j        r|                     ¦   «          d S d S )Nr‰  z+NWCTEXT_Really_complete_example_file.nwctxt)r   r‹  r   r@   Úshow)r1   rŽ  Úcompleter�  s       r2   ÚtestCompletezTestExternal.testComplete  sa   € Ý!Ô3Ñ5Ô5¸ÑDÐØ#Ð&SÑSˆõ 'Ñ(Ô(×2Ò2°8Ñ<Ô<ˆØŒ9ð 	Ø�LŠL‰NŒNˆNˆNˆNð	ð 	r4   N)r€  r�  r‚  rœ  rž  r„  r4   r2   rš  rš    s(   € € € € € Ø€Dðð ð ð ð r4   rš  Ú__main__)&rƒ  Ú
__future__r   ÚunittestÚmusic21r   r   r   r   r   r	   r
   r   Úmusic21.exceptions21r   r   r   r   r   r   r   r   r   r   r   r   r   Úmusic21.noteworthy.dictionariesr   ÚEnvironmentÚenvironLocalr   r<   ÚTestCaser‡  rš  r€  ÚmainTestr„  r4   r2   ú<module>r©     sº  ððð ð` #Ð "Ð "Ð "Ð "Ð "à €€€à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à 8Ð 8Ð 8Ð 8Ð 8Ð 8à&ˆ{Ô&Ð'=Ñ>Ô>€ðz*ð z*ð z*ð z*ð z*ñ z*ô z*ð z*ð|	ð 	ð 	ð 	ð 	Ð#3ñ 	ô 	ð 	ð.:ð .:ð .:ð .:ð .:ˆ8Ôñ .:ô .:ð .:ðb
ð 
ð 
ð 
ð 
�8Ô$ñ 
ô 
ð 
ð ˆzÒÐØ€N€N€NØ€GÔ�TÑÔÐÐÐð Ðr4   