
    ̺iF                     D    S SK Jr  S SKJr  SSKJrJrJr   " S S5      rg)    )deque)Integral   )SPEC_BY_STATUS	SYSEX_ENDSYSEX_STARTc                   F    \ rS rSrSrSS jrS rS rS rS r	S	 r
S
 rSrg)	Tokenizer   z*
Splits a MIDI byte stream into messages.
Nc                 v    SU l         / U l        [        5       U l        SU l        Ub  U R                  U5        gg)zCreate a new decoder.r   N)_status_bytesr   	_messages_datalenfeed)selfdatas     M/var/www/piano.thomer.com/venv/lib/python3.13/site-packages/mido/tokenizer.py__init__Tokenizer.__init__   s8     IIdO     c                 0   U[         :X  a`  U R                  [        :X  aD  U R                  R	                  [         5        U R
                  R	                  U R                  5        SU l        g SUs=::  a  S::  aF  O  OCU R                  [        :w  a  SU l        U[        ;   a  U R
                  R	                  U/5        g g U[        ;   aO  [        U   nUS   S:X  a$  U R
                  R	                  U/5        SU l        g Xl        U/U l        US   U l        g g )Nr         lengthr   )r   r   r   r   appendr   r   _len)r   statusspecs      r   _feed_status_byteTokenizer._feed_status_byte   s    Y||{*""9-%%dkk2DLV#t#||{*  !'%%vh/ ( ~%!&)DH~"%%vh/ %%h N	
 r   c                     U R                   (       al  U R                  R                  U5        [        U R                  5      U R                  :X  a-  U R
                  R                  U R                  5        SU l         g g g )Nr   )r   r   r   lenr   r   r   bytes     r   _feed_data_byteTokenizer._feed_data_byte<   sW    <<KKt$4;;499,%%dkk2  - r   c                     [        U[        5      (       d  [        S5      eSUs=::  a  S::  a+  O  O(US::  a  U R                  U5      $ U R	                  U5      $ [        SU< 35      e)z@Feed MIDI byte to the decoder.

Takes an int in range [0..255].
zmessage byte must be integerr   r      zinvalid byte value )
isinstancer   	TypeErrorr&   r    
ValueErrorr$   s     r   	feed_byteTokenizer.feed_byteG   sf    
 $)):;;s{++D11--d3324(;<<r   c                 8    U H  nU R                  U5        M     g)zQFeed MIDI bytes to the decoder.

Takes an iterable of ints in in range [0..255].
N)r-   )r   r   r%   s      r   r   Tokenizer.feedW   s    
 DNN4  r   c                 ,    [        U R                  5      $ N)r#   r   r   s    r   __len__Tokenizer.__len___   s    4>>""r   c              #      #    [        U R                  5      (       a9  U R                  R                  5       v   [        U R                  5      (       a  M8  gg7f)z,Yield messages that have been parsed so far.N)r#   r   popleftr3   s    r   __iter__Tokenizer.__iter__b   s8     $..!!..((** $..!!s   AAA)r   r   r   r   r   r2   )__name__
__module____qualname____firstlineno____doc__r   r    r&   r-   r   r4   r8   __static_attributes__ r   r   r
   r
      s+    	 D	= !#+r   r
   N)	collectionsr   numbersr   messages.specsr   r   r   r
   r@   r   r   <module>rD      s   
   B BZ+ Z+r   