
    rhi'                       S SK Jr  S SKJr  S SKrS SKJr  S SKJr  S SKJr  S SKJ	r	  S SK
Jr  S S	KJr  \R                  " S
5      r " S S5      rSS jr " S S\R$                  5      r\S:X  a  S SKr\R*                  " \5        gg)    )annotations)OrderedDictN)clef)dynamics)environment)expressions)basic)symbolszbraille/noteGrouping.pyc            
         \ rS rSrSrSS jrS r\S 5       r\R                  S 5       r\S 5       r
\
R                  S	 5       r
SS
 jrS rS rS rS rS rS rS r\" S\4S\4S\4S\4S\4S\4S\4/5      rS rSS jrSrg)NoteGroupingTranscriber   z,
Object that can transcribe note groupings.
Nc                r    SU l         Xl        S U l        S U l        S U l        S U l        / U l        S U l        g NT)showLeadingOctavebrailleElementGrouping_upperFirstInFingering_showClefSignspreviousNotepreviousElementtrans	transText)selfr   s     V/home/james-whalen/.local/lib/python3.13/site-packages/music21/braille/noteGrouping.py__init__ NoteGroupingTranscriber.__init__   s@    !%&<#&*#" !#
    c                <    S U l         S U l        / U l        S U l        g N)r   r   r   r   r   s    r   resetNoteGroupingTranscriber.reset*   s      #
r   c                |    U R                   b  U R                   $ U R                  b  U R                  R                  $ g)a1  
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
F)r   r   showClefSignsr   s    r   r#   %NoteGroupingTranscriber.showClefSigns0   s=    0 *&&&((4..<<<r   c                    Xl         g r   )r   r   news     r   r#   r$   O   s    !r   c                |    U R                   b  U R                   $ U R                  b  U R                  R                  $ g)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
T)r   r   upperFirstInNoteFingeringr   s    r   upperFirstInFingering-NoteGroupingTranscriber.upperFirstInFingeringS   s=    . &&2...((4..HHHr   c                    Xl         g r   )r   r&   s     r   r*   r+   q   s    &)#r   c                   U R                  5         Ub  Xl        U R                   H  nU R                  U5        M     UR                  (       a"  U R                  R                  [        S   5        SR                  U R                  5      $ )z
transcribe a group of notes, possibly excluding certain attributes.

Returns a (unicode) string of brailleElementGrouping transcribed.

music_hyphen )r    r   transcribeOneElement
withHyphenr   appendr
   join)r   r   brailleElements      r   transcribeGroup'NoteGroupingTranscriber.transcribeGroupu   sl     	

!-*@'"99N%%n5 : ",,JJgn56wwtzz""r   c                    U R                   c  U R                  nO![        R                  " U R                   U5      n[        R                  " UUU R
                  S9nXl         U$ )N)
showOctaver*   )r   r   r	   showOctaveWithNotenoteToBrailler*   )r   currentNotedoShowOctavebrailleNotes       r   translateNote%NoteGroupingTranscriber.translateNote   s^    $11L 33D4E4E{SL))+5A@D@Z@Z\ (r   c                .    [         R                  " U5      $ r   )r	   restToBraille)r   currentRests     r   translateRest%NoteGroupingTranscriber.translateRest   s    "";//r   c                V   [        UR                  S S9nU R                  R                  (       a  US   nOUS   nU R                  c  U R
                  nO![        R                  " U R                  U5      nU R                  R                  n[        R                  " UUUS9nX0l        U$ )Nc                    U R                   $ r   )pitch)ns    r   <lambda>8NoteGroupingTranscriber.translateChord.<locals>.<lambda>   s    AGGr   )keyr   )
descendingr8   )	sortednotesr   descendingChordsr   r   r	   r9   chordToBraille)r   currentChordallNotesr;   r<   rP   brailleChords          r   translateChord&NoteGroupingTranscriber.translateChord   s    ,,,2CD&&77"2,K"1+K$11L 33D4E4E{SL66GG++L7G7CE (r   c                N    [         R                  " U5      nS U l        SU l        U$ r   )r	   dynamicToBrailler   r   )r   currentDynamicbrailleDynamics      r   translateDynamic(NoteGroupingTranscriber.translateDynamic   s(    //? !%r   c                N    [         R                  " U5      nS U l        SU l        U$ r   )r	   textExpressionToBrailler   r   )r   currentExpressionbrailleExpressions      r   translateTextExpression/NoteGroupingTranscriber.translateTextExpression   s*    !99:KL !%  r   c                .    [         R                  " U5      $ r   )r	   barlineToBraille)r   currentBarlines     r   translateBarline(NoteGroupingTranscriber.translateBarline   s    %%n55r   c                r    U R                   (       a&  [        R                  " U5      nSU l        SU l        U$ g)z:
translate Clefs to braille IF self.showClefSigns is True
NT)r#   r	   clefToBrailler   r   )r   currentClefbrailleClefs      r   translateClef%NoteGroupingTranscriber.translateClef   s8     --k:K $D%)D"	 r   NoteRestChordDynamicTextExpressionBarlineClefc                   UR                   nU R                  R                  5        H2  u  p4X2;   d  M  U" X5      nUb  U R                  R	                  U5          O   [
        R                  U S35        U R                  U5        Xl        g)u#  
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   r2   environRuleswarnoptionallyAddDotToPreviousr   )r   el	elClasses	classNameclassMethod
addBrailles         r   r0   ,NoteGroupingTranscriber.transcribeOneElement   s     JJ	&*&8&8&>&>&@"I%(2
)JJ%%j1 'A $@AB''+!r   c                   U R                   nUc  gU R                  (       d  gUb   [        U[        R                  5      (       a  gUb   [        U[
        R                  5      (       a  g[        U[        R                  5      (       db  [        U[        R                  5      (       a  U R                  (       d2  [        U[
        R                  5      (       a  UR                  S   S:w  aq  [        R                  " U R                  S   S   5       HG  nU R                  R                  SU5        UR                  R                  R!                  SU 35          g   g)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.
FrL   .r   zDot 3 T)r   r   
isinstancer   rq   r   rr   r   rt   r#   contentr	   	yieldDotsinsert	editorialbrailleEnglishr2   )r   r|   prevdots       r   r{   2NoteGroupingTranscriber.optionallyAddDotToPrevious   s      ##<zz>jX-=-=>>>j[-G-GHHtX--..4++&&4!;!;<<LL$+tzz"~a'89

!!"c*--44vcU^D :
 r   )r   r   r   r   r   r   r   r   r   )__name__
__module____qualname____firstlineno____doc__r   r    propertyr#   setterr*   r5   r>   rC   rU   r[   ra   rf   rl   r   rw   r0   r{   __static_attributes__ r   r   r   r      s    
  < " "  : !!* "*#&	0&!6  			.!	$%	23	$%	! M"4&r   r   c                D    [        5       nXl        UR                  U 5      $ )z
transcribe a group of notes, possibly excluding certain attributes.

To be DEPRECATED -- called only by BrailleGrandSegment now.
)r   r   r5   )r   r   ngts      r   transcribeNoteGroupingr     s$     "
#C-566r   c                      \ rS rSrSrg)Testi  r   N)r   r   r   r   r   r   r   r   r   r     s    r   r   __main__)T)
__future__r   collectionsr   unittestmusic21r   r   r   r   music21.brailler	   music21.braille.lookupr
   Environmentry   r   r   TestCaser   r   mainTestr   r   r   <module>r      sw    # #      ! *&&'@Ar rj7	8 	 zT r   