B
    Åû_oé  ã            C   @   sø  d dl mZ d dlZd dlmZ d dlZd dlZd dlZd dlZ	d dl
Z
d dlZd dlZG dd„ deƒZG dd„ deƒZG dd	„ d	eƒZG d
d„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd „ d eƒZG d!d"„ d"eƒZG d#d$„ d$eƒZG d%d&„ d&eƒZG d'd(„ d(eƒZG d)d*„ d*eƒZ G d+d,„ d,eƒZ!G d-d.„ d.eƒZ"G d/d0„ d0eƒZ#G d1d2„ d2eƒZ$G d3d4„ d4eƒZ%G d5d6„ d6eƒZ&G d7d8„ d8eƒZ'G d9d:„ d:eƒZ(G d;d<„ d<eƒZ)G d=d>„ d>eƒZ*G d?d@„ d@eƒZ+G dAdB„ dBeƒZ,G dCdD„ dDeƒZ-G dEdF„ dFeƒZ.G dGdH„ dHe.ƒZ/G dIdJ„ dJeƒZ0G dKdL„ dLeƒZ1G dMdN„ dNeƒZ2G dOdP„ dPƒZ3G dQdR„ dReƒZ4G dSdT„ dTeƒZ5G dUdV„ dVeƒZ6G dWdX„ dXeƒZ7G dYdZ„ dZeƒZ8G d[d\„ d\eƒZ9G d]d^„ d^eƒZ:G d_d`„ d`eƒZ;G dadb„ dbeƒZ<G dcdd„ ddeƒZ=G dedf„ dfeƒZ>G dgdh„ dheƒZ?G didj„ djeƒZ@G dkdl„ dleƒZAG dmdn„ dneƒZBG dodp„ dpeƒZCG dqdr„ dreƒZDG dsdt„ dteƒZEG dudv„ dveƒZFG dwdx„ dxeƒZGG dydf„ dfeƒZ>G dzd{„ d{eƒZHG d|d}„ d}eƒZIG d~d„ deƒZJG d€d„ deƒZKG d‚dƒ„ dƒeƒZLG d„d…„ d…eƒZMG d†d‡„ d‡e.ƒZNG dˆd‰„ d‰eƒZOG dŠd‹„ d‹eƒZPG dŒd„ deƒZQG dŽd„ deƒZRG dd‘„ d‘eƒZSG d’d“„ d“eƒZTG d”d•„ d•eƒZUG d–d—„ d—eƒZVeFee&eee5e/e*e9e6e7e8e-e:e;ee<e0e?e>e=ee@eAe1e2eBeCeDeEeeGeHeIe"e e$eee+e4eJeeKeLeeMe,eNeOePe(e#eQee!eRe%e)e'eSeeTeUeVed˜œBZWd™dš„ ZXd›dœ„ ZYddž„ ZZdŸd „ Z[e\d¡krôd dl]Z^e^j_ `d¢¡ZaeZea b¡ ƒZcedeW e¡ ƒZfegd£ hef¡ƒ dS )¤é    )ÚOrderedDictN)ÚFractionc               @   s–   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	d%dd„Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$S )&ÚXml_nodec             C   s(   g | _ d | _d | _d| _d | _i | _d S )NZxml_node)Ú	_childrenÚ_dataÚ	_originalÚ_nameÚ_parentÚ_attribute_dict)Úself© r   új/home/gub/NewGub/gub/target/mingw/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.22/python/musicxml.pyÚ__init__&   s    zXml_node.__init__c             C   s   | j S )N)r	   )r   r   r   r   Ú
get_parent.   s    zXml_node.get_parentc             C   s   | j  | j¡d | kS )Nr   )r	   Úget_typed_childrenÚ	__class__)r   r   r   r   Úis_first1   s    zXml_node.is_firstc             C   s   | j S )N)r   )r   r   r   r   Úoriginal4   s    zXml_node.originalc             C   s   | j S )N)r   )r   r   r   r   Úget_name7   s    zXml_node.get_namec             C   s,   | j r| j S | jsdS d dd„ | jD ƒ¡S )NÚ c             S   s   g | ]}|  ¡ ‘qS r   )Úget_text)Ú.0Úcr   r   r   ú
<listcomp>A   s    z%Xml_node.get_text.<locals>.<listcomp>)r   r   Újoin)r   r   r   r   r   :   s
    zXml_node.get_textc          
   C   sR   t  |¡ | }x>|rLt  d|jd dd„ t|j ¡ ƒD ƒ¡f ¡ | ¡ }qW d S )Nz  In: <%s %s>
ú c             S   s   g | ]}d | ‘qS )z%s=%sr   )r   Úitemr   r   r   r   I   s    z$Xml_node.message.<locals>.<listcomp>)	ÚlyÚwarningZprogressr   r   Úlistr
   Úitemsr   )r   ÚmsgÚpr   r   r   ÚmessageC   s    
 zXml_node.messager   c             C   sŽ   t  d|| jd dd„ t| j ¡ ƒD ƒ¡f ¡ dd„ | jD ƒ}|rNt  d¡ x| jD ]}| |d ¡ qVW |rzt  |¡ t  d| j ¡ d S )	Nz%s<%s%s>r   c             S   s   g | ]}d | ‘qS )z %s=%sr   )r   r   r   r   r   r   N   s    z!Xml_node.dump.<locals>.<listcomp>c             S   s   g | ]}t |tƒs|‘qS r   )Ú
isinstanceÚ	Hash_text)r   r   r   r   r   r   P   s    Ú
z    z</%s>
)	r   Údebug_outputr   r   r   r
   r    r   Údump)r   ÚindentZnon_text_childrenr   r   r   r   r(   L   s     

zXml_node.dumpc                s    ˆ sg S ‡ fdd„| j D ƒS d S )Nc                s   g | ]}t |ˆ ƒr|‘qS r   )r$   )r   r   )Úklassr   r   r   ]   s    z/Xml_node.get_typed_children.<locals>.<listcomp>)r   )r   r*   r   )r*   r   r   Y   s    zXml_node.get_typed_childrenc             C   s   |   t|ƒ¡S )N)r   Ú	get_class)r   Únmr   r   r   Úget_named_children_   s    zXml_node.get_named_childrenc             C   s
   |   |¡S )N)Úget_maybe_exist_named_child)r   r,   r   r   r   Úget_named_childb   s    zXml_node.get_named_childc                s   ‡ fdd„| j D ƒS )Nc                s   g | ]}ˆ |ƒr|‘qS r   r   )r   r   )Ú	predicater   r   r   f   s    z)Xml_node.get_children.<locals>.<listcomp>)r   )r   r0   r   )r0   r   Úget_childrene   s    zXml_node.get_childrenc             C   s   | j S )N)r   )r   r   r   r   Úget_all_childrenh   s    zXml_node.get_all_childrenc             C   s   |   t|ƒ¡S )N)Úget_maybe_exist_typed_childr+   )r   Únamer   r   r   r.   k   s    z$Xml_node.get_maybe_exist_named_childc             C   sF   |   |¡}t|ƒdkrd S t|ƒdkr:t tdƒ|j ¡ |d S d S )Nr   é   zAmore than one child of class %s, all butthe first will be ignored)r   ÚlenÚwarningsÚwarnÚ_Ú__name__)r   r*   Úcnr   r   r   r3   n   s    


z$Xml_node.get_maybe_exist_typed_childc             C   s:   |   |¡}t|ƒdkr2t | j¡ td||f ƒ‚|d S )Nr5   z#Child is not unique for %s found %dr   )r   r6   r   ÚerrorÚ__dict__ÚRuntimeError)r   r*   r;   r   r   r   Úget_unique_typed_childx   s    
zXml_node.get_unique_typed_childc             C   s"   |   |¡}|rt| ¡ ƒS |S d S )N)r.   Úintr   )r   r4   ÚdefaultÚnr   r   r   Úget_named_child_value_number   s    
z%Xml_node.get_named_child_value_numberN)r   )r:   Ú
__module__Ú__qualname__r   r   r   r   r   r   r#   r(   r   r-   r/   r1   r2   r.   r3   r?   rC   r   r   r   r   r   $   s"   		

	r   c               @   s   e Zd Zdd„ ZdS )ÚMusic_xml_nodec             C   s.   t  | ¡ tdƒ| _tdƒ| _d| _d | _d S )Nr   F)r   r   r   ÚdurationÚstartZ	convertedÚvoice_id)r   r   r   r   r   Š   s
    


zMusic_xml_node.__init__N)r:   rD   rE   r   r   r   r   r   rF   ‰   s   rF   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚMusic_xml_spannerc             C   s   t | dƒr| jS dS d S )NÚtyper   )ÚhasattrrK   )r   r   r   r   Úget_type”   s    
zMusic_xml_spanner.get_typec             C   s   t | dƒrt| jƒS dS d S )NÚsizer   )rL   r@   rN   )r   r   r   r   Úget_sizeš   s    

zMusic_xml_spanner.get_sizeN)r:   rD   rE   rM   rO   r   r   r   r   rJ   ’   s   rJ   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚMeasure_elementc             C   s    |   d¡}|r| ¡ S | jS d S )NÚvoice)r.   r   rI   )r   rQ   r   r   r   Úget_voice_id£   s    
zMeasure_element.get_voice_idc                s*   ˆ j  t¡}‡ fdd„|D ƒ}|d ˆ kS )Nc                s*   g | ]"}|  ¡ ˆ   ¡ ks"t|tƒr|‘qS r   )rR   r$   Ú
Attributes)r   r   )r   r   r   r   °   s    z,Measure_element.is_first.<locals>.<listcomp>r   )r	   r   rP   )r   r;   r   )r   r   r   ª   s    zMeasure_element.is_firstN)r:   rD   rE   rR   r   r   r   r   r   rP   ¡   s   rP   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚWorkc             C   s   |   |¡}|r| ¡ S dS d S )Nr   )r.   r   )r   ÚtagZwtr   r   r   Úget_work_information·   s    
zWork.get_work_informationc             C   s
   |   d¡S )Nz
work-title)rV   )r   r   r   r   Úget_work_title¾   s    zWork.get_work_titlec             C   s
   |   d¡S )Nzwork-number)rV   )r   r   r   r   Úget_work_numberÁ   s    zWork.get_work_numberN)r:   rD   rE   rV   rW   rX   r   r   r   r   rT   µ   s   rT   c               @   s|   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚIdentificationc             C   sh   |   d¡}g }xN|D ]F}| ¡ }t|dƒrP|j ¡ }d |d|g¡}| |¡ q| |¡ qW d |¡S )NÚrightsrK   r   z: r&   )r-   r   rL   rK   Útitler   Úappend)r   rZ   ÚretÚrÚtextZrights_typeÚresultr   r   r   Ú
get_rightsÊ   s    



zIdentification.get_rightsc             C   s4   |   d¡}g }x|D ]}| | ¡ ¡ qW d |¡S )NÚsourcer&   )r-   r\   r   r   )r   rb   r]   r^   r   r   r   Ú
get_sourceÝ   s
    

zIdentification.get_sourcec             C   s8   |   d¡}x(|D ] }t|dƒr|j|kr| ¡ S qW d S )NÚcreatorrK   )r-   rL   rK   r   )r   rK   ÚcreatorsÚir   r   r   Úget_creatorä   s
    

zIdentification.get_creatorc             C   s@   |   d¡}|r|S |  d¡}x|D ]}t|dƒs"| ¡ S q"W d S )NÚcomposerrd   rK   )rg   r-   rL   r   )r   r   re   rf   r   r   r   Úget_composerì   s    



zIdentification.get_composerc             C   s
   |   d¡S )NZarranger)rg   )r   r   r   r   Úget_arranger÷   s    zIdentification.get_arrangerc             C   s
   |   d¡S )NZeditor)rg   )r   r   r   r   Ú
get_editorú   s    zIdentification.get_editorc             C   s    |   d¡}|r|S |   d¡}|S )NÚlyricistZpoet)rg   )r   Úvr   r   r   Úget_poetý   s
    

zIdentification.get_poetc             C   s6   |   d¡}|r.|d   |¡}|r2|d  ¡ S nd S d S )NÚencodingr   )r-   r   )r   rK   ÚencZchildrenr   r   r   Úget_encoding_information  s    
z'Identification.get_encoding_informationc             C   s
   |   d¡S )NÚsoftware)rq   )r   r   r   r   Úget_encoding_software  s    z$Identification.get_encoding_softwarec             C   s
   |   d¡S )Nzencoding-date)rq   )r   r   r   r   Úget_encoding_date  s    z Identification.get_encoding_datec             C   s
   |   d¡S )NÚencoder)rq   )r   r   r   r   Úget_encoding_person  s    z"Identification.get_encoding_personc             C   s
   |   d¡S )Nzencoding-description)rq   )r   r   r   r   Úget_encoding_description  s    z'Identification.get_encoding_descriptionc             C   sF   |   d¡}g }x2|D ]*}|  d¡}x|D ]}| | ¡ ¡ q(W qW |S )Nro   rr   )r-   r\   r   )r   rp   rr   ÚeZ	softwaresÚsr   r   r   Úget_encoding_software_list  s    



z)Identification.get_encoding_software_listc             C   sP   |   d¡}x@|D ]8}|  d¡}x(|D ] }t|dƒr$|jdkr$| ¡ S q$W qW d S )NZmiscellaneouszmiscellaneous-fieldr4   Zdescription)r-   rL   r4   r   )r   ZmiscÚmZmisc_fieldsZmfr   r   r   Úget_file_description"  s    



z#Identification.get_file_descriptionN)r:   rD   rE   ra   rc   rg   ri   rj   rk   rn   rq   rs   rt   rv   rw   rz   r|   r   r   r   r   rY   È   s   		rY   c               @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚCreditc             C   s"   |   d¡}|d k	r| ¡ S d S d S )Nzcredit-type)r.   r   )r   rK   r   r   r   rM   .  s    
zCredit.get_typec                sÖ  |   |¡}|jdd |  |¡}|jdd |  |¡}|jdd |  d¡}d }d }d ‰ d }d }	d }
|d k	rút|dƒr†t t|dƒ¡}t|dƒr¢t	t
t|dƒƒƒ}t|dƒr¾t	t
t|dƒƒƒ‰ t|dƒrÒt|dƒ}t|dƒræt|dƒ}	t|d	ƒrút|d	ƒ}
|rF|t|ƒkrFˆ rFˆ t|ƒkrF|
s.|rF|
d
ksB|d
krFdS ˆ rŒˆ t|ƒkrŒˆ t|ƒk rŒ|
st|rŒ|
d
ksˆ|d
krŒdS |
s˜|rÄ|
dks¬|dkrÄ|rÀ|t|ƒkrÄdS |
sÐ|rü|
dksä|dkrü|rø|t|ƒkrüdS |r"|t|ƒkr"ˆ t|ƒkr"dS |	rJ|	dkrJˆ rJˆ |d krJdS |	rr|	dkrr|rr|t|ƒkrrdS |	rš|	dkršˆ ršˆ t|ƒkršdS |	r®|	dkr®dS t‡ fdd„t|ƒD ƒƒdkrÒdS d S )NT)Úreversezcredit-wordsz	font-sizez	default-xz	default-yÚhalignÚvalignÚjustifyÚcenterr[   ZsubtitleÚleftrl   Úrightrh   rZ   Útopr5   Zbottomc                s   g | ]\}}|ˆ kr|‘qS r   r   )r   rf   r   )Úyr   r   r   j  s    z$Credit.find_type.<locals>.<listcomp>é   )Úget_font_sizesÚsortÚget_default_ysÚget_default_xsr.   rL   Ú	utilitiesÚstring_to_integerÚgetattrÚroundÚfloatÚmaxÚminr6   Ú	enumerate)r   ÚcreditsÚsizesZysZxsÚwordsrN   Úxr   r€   r   r   )r†   r   Ú	find_type5  sf    












( .  "$$$ zCredit.find_typec             C   sN   g }x8|D ]0}|  d¡}|d k	r
t|dƒr
| t|dƒ¡ q
W tttj|ƒƒS )Nzcredit-wordsz	font-size)r.   rL   r\   rŽ   r   ÚmaprŒ   r   )r   r”   r•   Úcredr–   r   r   r   rˆ   p  s    

zCredit.get_font_sizesc             C   sV   g }x8|D ]0}|  d¡}|d k	r
t|dƒr
| t|dƒ¡ q
W tttttt|ƒƒƒƒS )Nzcredit-wordsz	default-x)r.   rL   r\   rŽ   r   r™   r   r   )r   r”   Z
default_xsrš   r–   r   r   r   r‹   x  s    

zCredit.get_default_xsc             C   sV   g }x8|D ]0}|  d¡}|d k	r
t|dƒr
| t|dƒ¡ q
W tttttt|ƒƒƒƒS )Nzcredit-wordsz	default-y)r.   rL   r\   rŽ   r   r™   r   r   )r   r”   Z
default_ysrš   r–   r   r   r   rŠ   €  s    

zCredit.get_default_ysc             C   s"   |   d¡}|d k	r| ¡ S dS d S )Nzcredit-wordsr   )r.   r   )r   r–   r   r   r   r   ˆ  s    
zCredit.get_textN)	r:   rD   rE   rM   r˜   rˆ   r‹   rŠ   r   r   r   r   r   r}   ,  s   ;r}   c               @   s   e Zd Zdd„ ZdS )ÚDurationc             C   s   t |  ¡ ƒtddƒ }|S )Nr5   é   )r@   r   r   )r   Údurr   r   r   Ú
get_length’  s    zDuration.get_lengthN)r:   rD   rE   rž   r   r   r   r   r›     s   r›   c               @   s   e Zd Zddd„ZdS )r%   r   c             C   s   t  | j ¡ ¡ d S )N)r   r'   r   Ústrip)r   r)   r   r   r   r(   ™  s    zHash_text.dumpN)r   )r:   rD   rE   r(   r   r   r   r   r%   —  s   r%   c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚPitchc             C   s   |   tdƒ¡}| ¡  ¡ }|S )NÚstep)r?   r+   r   rŸ   )r   Úchr¡   r   r   r   Úget_stepŸ  s    zPitch.get_stepc             C   s"   |   tdƒ¡}| ¡  ¡ }t|ƒS )NÚoctave)r?   r+   r   rŸ   r@   )r   r¢   r¤   r   r   r   Ú
get_octave¤  s    zPitch.get_octavec             C   s   |   tdƒ¡}t |¡S )NÚalter)r3   r+   rŒ   Úinterpret_alter_element)r   r¢   r   r   r   Úget_alteration©  s    zPitch.get_alterationc             C   s4   t  ¡ }|  ¡ |_t |  ¡ ¡|_|  ¡ d |_	|S )Nrœ   )
Úmusicexpr    r¨   Z
alterationÚmusicxml2ly_conversionÚmusicxml_step_to_lilyr£   r¡   r¥   r¤   )r   r"   r   r   r   Úto_lily_object­  s
    
zPitch.to_lily_objectN)r:   rD   rE   r£   r¥   r¨   r¬   r   r   r   r   r      s   r    c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú	Unpitchedc             C   s   |   tdƒ¡}| ¡  ¡ }|S )Nzdisplay-step)r?   r+   r   rŸ   )r   r¢   r¡   r   r   r   r£   ·  s    zUnpitched.get_stepc             C   s.   |   tdƒ¡}|r&| ¡  ¡ }t|ƒS d S d S )Nzdisplay-octave)r?   r+   r   rŸ   r@   )r   r¢   r¤   r   r   r   r¥   ¼  s
    zUnpitched.get_octavec             C   sB   d }|   ¡ }|r$t ¡ }t |¡|_|  ¡ }|r>|r>|d |_|S )Nrœ   )r£   r©   r    rª   r«   r¡   r¥   r¤   )r   r"   r¡   r¤   r   r   r   r¬   Å  s    
zUnpitched.to_lily_objectN)r:   rD   rE   r£   r¥   r¬   r   r   r   r   r­   µ  s   	r­   c               @   s   e Zd Zdd„ ZdS )rP   c             C   s    |   d¡}|r| ¡ S | jS d S )NrQ   )r.   r   rI   )r   rQ   r   r   r   rR   Ò  s    
zMeasure_element.get_voice_idN)r:   rD   rE   rR   r   r   r   r   rP   Ñ  s   c               @   sd   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )rS   c             C   s    t  | ¡ i | _d | _d | _d S )N)rP   r   Ú_dictÚ_original_tagÚ_time_signature_cache)r   r   r   r   r   Ü  s    
zAttributes.__init__c             C   s2   | j  | j¡}| jr"|d | jkS |d | kS d S )Nr   )r	   r   r   r¯   )r   r;   r   r   r   r   â  s    zAttributes.is_firstc             C   s   | j  |¡ d S )N)r®   Úupdate)r   Údictr   r   r   Úset_attributes_from_previousé  s    z'Attributes.set_attributes_from_previousc             C   s$   x|   ¡ D ]}|| j| ¡ < q
W d S )N)r2   r®   r   )r   r   r   r   r   Ú	read_selfì  s    zAttributes.read_selfc             C   s   | j  |¡S )N)r®   Úget)r   r4   r   r   r   Úget_named_attributeð  s    zAttributes.get_named_attributec             C   s@   t |ƒdk rdS d}x|dd… D ]}||7 }q"W t||d ƒS )Nr‡   r   éÿÿÿÿ)r6   r   )r   ÚsigrB   rf   r   r   r   Úsingle_time_sig_to_fractionó  s    z&Attributes.single_time_sig_to_fractionc             C   s\   |   ¡ }|rt|ƒdkrdS t|d tƒrNd}x|D ]}||  |¡7 }q4W |S |  |¡S dS )Nr   r5   )Úget_time_signaturer6   r$   r   r¹   )r   r¸   Úlrf   r   r   r   Úget_measure_lengthû  s    

zAttributes.get_measure_lengthc          	   C   s  | j r| j S yÎ|  d¡}|s dS | d¡r<t tdƒ¡ dS g }g }xf| ¡ D ]Z}t|tƒr~| 	¡  
¡  d¡}dd„ |D ƒ}qNt|tƒrN| t| 	¡ ƒ¡ | |¡ g }qNW t|d	 tƒrÎt|ƒd
krÎ|d	 }|| _ |S W n( ttfk
r   |  tdƒ¡ dS X dS )zEReturn time sig as a(beat, beat-type) tuple. For compound signatures,ZtimeNzsenza-misuraz3Senza-misura time signatures are not yet supported!)rœ   rœ   ú+c             S   s   g | ]}t |ƒ‘qS r   )r@   )r   Újr   r   r   r   !  s    z1Attributes.get_time_signature.<locals>.<listcomp>r   r5   z8Unable to interpret time signature! Falling back to 4/4.)r°   r¶   r.   r   r   r9   r2   r$   ÚBeatsr   rŸ   ÚsplitÚBeatTyper\   r@   r   r6   ÚKeyErrorÚ
ValueErrorr#   )r   ÚmxlZ	signatureZcurrent_sigrf   Úbeatsr   r   r   rº   
  s8    






zAttributes.get_time_signaturec             C   sv   dddg}|   d¡}|s|S | d¡}|r6| ¡ |d< | d¡}|rTt| ¡ ƒ|d< | d¡}|rrt| ¡ ƒ|d< |S )	NÚGr‡   r   ZclefÚsignÚliner5   zclef-octave-change)r¶   r.   r   r@   )r   ZclefinforÄ   rÇ   rÈ   r¤   r   r   r   Úget_clef_information0  s    




zAttributes.get_clef_informationc       
      C   s,  |   d¡}|sdS | d¡}|r^| d¡}d}|r:| ¡ }|rF|dkrJd}t| ¡ ƒ}||fS g }d}x¼| ¡ D ]°}t|tƒrŒ| ¡  ¡ }qpt|tƒr¬| 	|t
 |¡g¡ qpt|tƒrpd}	t|d	ƒrÎt|jƒ}	|	dkr|	t|ƒkr||	d
   	t| ¡ ƒd ¡ qp| tdƒ|	t|ƒf ¡ qpW |S dS )z=return(fifths, mode) tuple if the key signatures is given as ÚkeyNÚfifthsÚmoder   Úmajorr   r·   Únumberr5   rœ   zXKey alteration octave given for a non-existing alteration nr. %s, available numbers: %s!)r¶   r.   r   r@   r2   r$   ÚKeySteprŸ   ÚKeyAlterr\   rŒ   r§   Ú	KeyOctaverL   rÎ   r6   r#   r9   )
r   rÊ   Z
fifths_elmZ	mode_noderÌ   rË   ZalterationsZcurrent_steprf   Únrr   r   r   Úget_key_signature@  s<    







 
zAttributes.get_key_signaturec             C   s
   |   d¡S )NZ	transpose)r¶   )r   r   r   r   Úget_transpositioni  s    zAttributes.get_transpositionN)r:   rD   rE   r   r   r³   r´   r¶   r¹   r¼   rº   rÉ   rÓ   rÔ   r   r   r   r   rS   Ú  s   &)rS   c               @   s   e Zd Zdd„ ZdS )ÚBarlinec       	      C   s\  i }|   d¡}|   d¡}|   d¡}d }|r2| ¡ }|rÞt|dƒrÞt ¡ }dddœ |jd¡|_|jd	krp|d
ks‚|jdkr†|dkr†d }t|dƒr¼yt|jƒ|_W n t	k
rº   d|_Y nX | |_
|jdkrÖ||d< n||d< |r4t|dƒr4t ¡ }ddddœ |jd¡|_| |_
|jdkr,||d< n||d< |rPt ¡ }||_||d< t| ¡ ƒS )Nz	bar-styleÚrepeatÚendingÚ	directionr·   r5   )ÚforwardÚbackwardr   rÙ   zheavy-lightrÚ   zlight-heavyÚtimesr‡   é   rK   )rH   ÚstopZdiscontinuerœ   )r.   r   rL   rª   ZRepeatMarkerrµ   rØ   r@   rÛ   rÃ   ÚeventZEndingMarkerrK   r©   ZBarLiner   Úvalues)	r   ZretvalZbartype_elementZrepeat_elementZending_elementZbartyperÖ   r×   Úbr   r   r   r¬   o  sH    







zBarline.to_lily_objectN)r:   rD   rE   r¬   r   r   r   r   rÕ   m  s   rÕ   c               @   s   e Zd Zdd„ ZdS )ÚPartialc             C   s   t  | ¡ || _d S )N)rP   r   Úpartial)r   râ   r   r   r   r   ¢  s    
zPartial.__init__N)r:   rD   rE   r   r   r   r   r   rá   ¡  s   rá   c               @   s*   e Zd ZdddddœZdd„ Zdd	„ ZdS )
ÚStemZstemDownZstemUpNZstemNeutral)ZdownZupZdoubleÚnonec             C   s6   g }| j  |  ¡ d ¡}t ¡ }|r2||_| |¡ |S )N)Ústem_value_dictrµ   r   r©   Z	StemEventÚvaluer\   )r   rß   ræ   Z
stem_valuer   r   r   Úto_stem_event°  s    
zStem.to_stem_eventc             C   s@   g }t  ¡ }t| dƒr(t t| dƒ¡|_|jd k	r<| |¡ |S )NÚcolor)r©   ZStemstyleEventrL   rŒ   Úhex_to_colorrŽ   rè   r\   )r   ÚstylesZ	style_elmr   r   r   Úto_stem_style_event¹  s    


zStem.to_stem_style_event)r:   rD   rE   rå   rç   rë   r   r   r   r   rã   §  s   	rã   c               @   sF   e Zd Zdddddddddddddddd	d
ddddddœZdd„ ZdS )ÚNoteheadz'slashz	'trianglez'diamondz'laNz'crossz'xcirclez#fz'doz'rez'miz'faz'ti)ZslashZtriangleZdiamondZsquareZcrossr—   zcircle-xzinverted trianglez
arrow downzarrow upZslashedzback slashedZnormalZclusterrä   ZdoÚreZmiZfaZsoZlaZtic             C   s°   g }|   ¡  ¡ }| j |d ¡}t ¡ }|r0||_t| dƒrJt| dƒdk|_	t| dƒrft
 t| dƒ¡|_|js€|j	d k	s€|jd k	rŠ| |¡ t| dƒr¬| jdkr¬| t ¡ ¡ |S )NÚfilledÚyesrè   Úparentheses)r   rŸ   Únotehead_styles_dictrµ   r©   ZNotestyleEventÚstylerL   rŽ   rî   rŒ   ré   rè   r\   rð   ZParenthesizeEvent)r   rê   rÊ   rò   rÞ   r   r   r   r¬   Þ  s    


zNotehead.to_lily_object)r:   rD   rE   rñ   r¬   r   r   r   r   rì   Ã  s.   rì   c               @   sˆ   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd!dd„Zd"dd„Zd S )#ÚNotec             C   s    t  | ¡ d| _d| _d| _d S )Nr   Fr5   )rP   r   Úinstrument_nameÚ_after_graceÚ	_duration)r   r   r   r   r   ö  s    
zNote.__init__c             C   s
   |   d¡S )NÚgrace)r.   )r   r   r   r   Úis_graceü  s    zNote.is_gracec             C   s&   |   ¡ sdS |  t¡}| jp$t|dƒS )NFzsteal-time-previous)rø   r3   ÚGracerõ   rL   )r   Úgrr   r   r   Úis_after_graceÿ  s    
zNote.is_after_gracec             C   s:   |   d¡}|r$| ¡  ¡ }t |¡S |   d¡r2dS d S d S )NrK   r÷   rÜ   )r.   r   rŸ   rŒ   Úmusicxml_duration_to_log)r   r¢   Úlogr   r   r   Úget_duration_log  s    


zNote.get_duration_logc             C   s.   |   ¡ }|d k	r&t|  t¡ƒ}||fS d S d S )N)rþ   r6   r   ÚDot)r   rý   Údotsr   r   r   Úget_duration_info  s
    zNote.get_duration_infoc             C   s   dS )Nr5   r   )r   r   r   r   Ú
get_factor  s    zNote.get_factorc             C   s   |   tdƒ¡S )NÚpitch)r   r+   )r   r   r   r   Úget_pitches  s    zNote.get_pitchesc             C   s<   |   d¡}x,|D ]$}| ¡ }x|D ]}| |¡ q"W qW d S )NÚnotehead)r-   r¬   Úadd_associated_event)r   rÞ   Z	noteheadsZnhrê   rò   r   r   r   Úset_notehead_style  s
    


zNote.set_notehead_stylec             C   s<   |   d¡}x,|D ]$}| ¡ }x|D ]}| |¡ q"W qW d S )NÚstem)r-   rç   r  )r   rÞ   Ústemsr  rß   rm   r   r   r   Úset_stem_directions&  s
    


zNote.set_stem_directionsc             C   s<   |   d¡}x,|D ]$}| ¡ }x|D ]}| |¡ q"W qW d S )Nr  )r-   rë   r  )r   rÞ   r	  r  rê   rò   r   r   r   Úset_stem_style-  s
    


zNote.set_stem_stylec             C   s’   ddl m} ddlm} |  ¡ }|r\|ƒ }|d |_|d |_|  t¡sX| j	| 
¡  |_|S | j	dkrp|| j	ƒS |  tdƒtjtj	f ¡ d S d S )Nr   )Úrational_to_lily_duration)r›   r5   z5Encountered note at %s without type and duration(=%s))rª   r  r©   r›   r  Zduration_logr   r3   rù   rö   rž   Úfactorr#   r9   Zmxl_noterH   )r   r  r›   r   Údr   r   r   Úinitialize_duration4  s     




zNote.initialize_durationc             C   s:   |   t¡}| ¡ }t ¡ }||_|  d¡}|r6|j|_|S )NÚ
accidental)r3   r    r¬   r©   Ú	NoteEventr  r.   Ú
cautionary)r   Z	mxl_pitchr  rÞ   Zaccr   r   r   Úinitialize_pitched_eventL  s    

zNote.initialize_pitched_eventc             C   s    |   t¡}t ¡ }| ¡ |_|S )N)r3   r­   r©   r  r¬   r  )r   Ú	unpitchedrÞ   r   r   r   Úinitialize_unpitched_eventY  s    

zNote.initialize_unpitched_eventTc             C   s(   |   t¡}t ¡ }|r$| ¡ }||_|S )N)r3   ÚRestr©   Z	RestEventr¬   r  )r   Úconvert_rest_positionsÚrestrÞ   r  r   r   r   Úinitialize_rest_eventa  s    
zNote.initialize_rest_eventc             C   sŒ   d }d }d }|   t¡r |  ¡ }n8|   t¡r4|  ¡ }n$|   t¡rJ|  |¡}n|  tdƒ¡ |rf|  	¡ |_
|  |¡ |  |¡ |rˆ|  |¡ |S )Nzcannot find suitable event)r3   r    r  r­   r  r  r  r#   r9   r  rG   r  r  r
  )r   Zconvert_stem_directionsr  r  rG   rÞ   r   r   r   r¬   k  s"    








zNote.to_lily_objectN)T)TT)r:   rD   rE   r   rø   rû   rþ   r  r  r  r  r
  r  r  r  r  r  r¬   r   r   r   r   ró   ô  s    
 ró   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú	Part_listc             C   s   t  | ¡ i | _d S )N)rF   r   Ú_id_instrument_name_dict)r   r   r   r   r   ˆ  s    
zPart_list.__init__c             C   sV   ddi}xB|   d¡D ]4}x.|  d¡D ] }|j}| d¡}| ¡ ||< q$W qW || _d S )Nr5   z
score-partzscore-instrumentzinstrument-name)r-   Úidr/   r   r  )r   ÚmappingZ
score_partZinstrr  r4   r   r   r   Úgenerate_id_instrument_dictŒ  s    
z%Part_list.generate_id_instrument_dictc             C   s<   | j s|  ¡  | j  |¡}|r"|S t tdƒ| ¡ dS d S )Nz$Unable to find instrument for ID=%s
zGrand Piano)r  r  rµ   r   r   r9   )r   r  rô   r   r   r   Úget_instrument˜  s    zPart_list.get_instrumentN)r:   rD   rE   r   r  r  r   r   r   r   r  †  s   r  c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚMeasurec             C   s   t  | ¡ d| _d S )Nr   )rF   r   râ   )r   r   r   r   r   ¦  s    
zMeasure.__init__c             C   s   t | dƒo| jdkS )NÚimplicitrï   )rL   r!  )r   r   r   r   Úis_implicitª  s    zMeasure.is_implicitc             C   s   |   tdƒ¡S )NÚnote)r   r+   )r   r   r   r   Ú	get_notes­  s    zMeasure.get_notesN)r:   rD   rE   r   r"  r$  r   r   r   r   r   ¤  s   r   c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚSyllabicc             C   s   |   ¡ }|dkp|dkS )NÚbeginÚmiddle)r   )r   r_   r   r   r   Ú	continued³  s    zSyllabic.continuedc             C   s   t dkS )Nr&  )r_   )r   r   r   r   r&  ·  s    zSyllabic.beginc             C   s   t dkS )Nr'  )r_   )r   r   r   r   r'  º  s    zSyllabic.middlec             C   s   t dkS )NÚend)r_   )r   r   r   r   r)  ½  s    zSyllabic.endN)r:   rD   rE   r(  r&  r'  r)  r   r   r   r   r%  ±  s   r%  c               @   s   e Zd Zdd„ ZdS )ÚLyricc             C   s   t | dƒrt| jƒS dS dS )zœ
        Return the number attribute(if it exists) of the lyric element.

        @rtype: number
        @return: The value of the number attribute
        rÎ   r·   N)rL   r@   rÎ   )r   r   r   r   Ú
get_numberÃ  s    

zLyric.get_numberN)r:   rD   rE   r+  r   r   r   r   r*  Á  s   r*  c               @   s   e Zd Zdd„ ZdS )ÚSoundc             C   s   t | dƒr| jS dS dS )zø
        Return the tempo attribute(if it exists) of the sound element.
        This attribute can be used by musicxml2ly for the midi output(see L{musicexp.Score}).

        @rtype: string
        @return: The value of the tempo attribute
        ÚtempoN)rL   r-  )r   r   r   r   Ú	get_tempoÒ  s    
zSound.get_tempoN)r:   rD   rE   r.  r   r   r   r   r,  Ð  s   r,  c               @   s   e Zd Zdd„ Zdd„ ZdS )Ú	Notationsc             C   s,   |   d¡}dd„ |D ƒ}|r$|d S d S d S )NÚtiedc             S   s   g | ]}|j d kr|‘qS )rH   )rK   )r   Útr   r   r   r   ä  s    z%Notations.get_tie.<locals>.<listcomp>r   )r-   )r   ZtsZstartsr   r   r   Úget_tieâ  s
    
zNotations.get_tiec             C   s
   |   t¡S )N)r   ÚTuplet)r   r   r   r   Úget_tupletsê  s    zNotations.get_tupletsN)r:   rD   rE   r2  r4  r   r   r   r   r/  à  s   r/  c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚTime_modificationc             C   s,   |   d¡}|   d¡}t| ¡ ƒt| ¡ ƒfS )Nzactual-notesznormal-notes)r.   r@   r   )r   rà   Úar   r   r   Úget_fractionð  s    

zTime_modification.get_fractionc             C   s>   |   d¡}|r6|  d¡}t | ¡  ¡ ¡}|t|ƒfS d S d S )Nznormal-typez
normal-dot)r.   r-   rŒ   rü   r   rŸ   r6   )r   Útuplet_typer   rý   r   r   r   Úget_normal_typeõ  s    

z!Time_modification.get_normal_typeN)r:   rD   rE   r7  r9  r   r   r   r   r5  î  s   r5  c               @   s   e Zd Zdd„ ZdS )Ú
Accidentalc             C   s   t  | ¡ d| _d| _d S )NF)rF   r   Z	editorialr  )r   r   r   r   r     s    
zAccidental.__init__N)r:   rD   rE   r   r   r   r   r   r:     s   r:  c               @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )r3  c             C   s>   |  d¡}|r6| d¡}t | ¡  ¡ ¡}|t|ƒfS d S d S )Nztuplet-typez
tuplet-dot)r.   r-   rŒ   rü   r   rŸ   r6   )r   Útuplet_noter8  r   rý   r   r   r   Úduration_info_from_tuplet_note
  s    

z%Tuplet.duration_info_from_tuplet_notec             C   s    |   d¡}|r|  |¡S d S d S )Nztuplet-normal)r.   r<  )r   Útupletr   r   r   r9    s    

zTuplet.get_normal_typec             C   s    |   d¡}|r|  |¡S d S d S )Nztuplet-actual)r.   r<  )r   r=  r   r   r   Úget_actual_type  s    

zTuplet.get_actual_typec             C   s"   |r|  d¡}|rt| ¡ ƒS d S )Nztuplet-number)r.   r@   r   )r   r;  Z	tuplet_nrr   r   r   Úget_tuplet_note_count#  s    zTuplet.get_tuplet_note_countc             C   s   |   |  d¡¡S )Nztuplet-normal)r?  r.   )r   r   r   r   Úget_normal_nr+  s    zTuplet.get_normal_nrc             C   s   |   |  d¡¡S )Nztuplet-actual)r?  r.   )r   r   r   r   Úget_actual_nr.  s    zTuplet.get_actual_nrN)	r:   rD   rE   r<  r9  r>  r?  r@  rA  r   r   r   r   r3    s   r3  c               @   s   e Zd Zdd„ ZdS )ÚSlurc             C   s   | j S )N)rK   )r   r   r   r   rM   4  s    zSlur.get_typeN)r:   rD   rE   rM   r   r   r   r   rB  2  s   rB  c               @   s   e Zd Zdd„ ZdS )ÚTiedc             C   s   | j S )N)rK   )r   r   r   r   rM   :  s    zTied.get_typeN)r:   rD   rE   rM   r   r   r   r   rC  8  s   rC  c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚBeamc             C   s   |   ¡ S )N)r   )r   r   r   r   rM   ?  s    zBeam.get_typec             C   s   t | dƒr| jdkS dS d S )NrÎ   Ú1T)rL   rÎ   )r   r   r   r   Ú
is_primaryB  s    

zBeam.is_primaryN)r:   rD   rE   rM   rF  r   r   r   r   rD  >  s   rD  c               @   s   e Zd Zdd„ ZdS )ÚOctave_shiftc             C   s   t | dƒrt| jƒS dS d S )NrN   é   )rL   r@   rN   )r   r   r   r   rO   K  s    

zOctave_shift.get_sizeN)r:   rD   rE   rO   r   r   r   r   rG  I  s   rG  c               @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )r  c             C   s   t  | ¡ d| _d S )NF)rF   r   Ú_is_whole_measure)r   r   r   r   r   V  s    
zRest.__init__c             C   s   | j S )N)rI  )r   r   r   r   Úis_whole_measureZ  s    zRest.is_whole_measurec             C   s&   |   tdƒ¡}|r| ¡  ¡ S d S d S )Nzdisplay-step)r3   r+   r   rŸ   )r   r¢   r   r   r   r£   ]  s    zRest.get_stepc             C   s.   |   tdƒ¡}|r&| ¡  ¡ }t|ƒS d S d S )Nzdisplay-octave)r3   r+   r   rŸ   r@   )r   r¢   Úoctr   r   r   r¥   d  s
    zRest.get_octavec             C   sB   d }|   ¡ }|r$t ¡ }t |¡|_|  ¡ }|r>|r>|d |_|S )Nrœ   )r£   r©   r    rª   r«   r¡   r¥   r¤   )r   r"   r¡   r¤   r   r   r   r¬   l  s    
zRest.to_lily_objectN)r:   rD   rE   r   rJ  r£   r¥   r¬   r   r   r   r   r  T  s
   r  c               @   s   e Zd Zdd„ ZdS )ÚBendc             C   s   |   d¡}t |¡S )Nz
bend-alter)r.   rŒ   r§   )r   r¦   r   r   r   Ú
bend_alterz  s    
zBend.bend_alterN)r:   rD   rE   rM  r   r   r   r   rL  x  s   rL  c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú
ChordPitchc             C   s   dS )Nz	root-stepr   )r   r   r   r   Ústep_class_name  s    zChordPitch.step_class_namec             C   s   dS )Nz
root-alterr   )r   r   r   r   Úalter_class_name„  s    zChordPitch.alter_class_namec             C   s   |   t|  ¡ ƒ¡}| ¡  ¡ S )N)r?   r+   rO  r   rŸ   )r   r¢   r   r   r   r£   ‡  s    zChordPitch.get_stepc             C   s   |   t|  ¡ ƒ¡}t |¡S )N)r3   r+   rP  rŒ   r§   )r   r¢   r   r   r   r¨   ‹  s    zChordPitch.get_alterationN)r:   rD   rE   rO  rP  r£   r¨   r   r   r   r   rN    s   rN  c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚBassc             C   s   dS )Nz	bass-stepr   )r   r   r   r   rO  “  s    zBass.step_class_namec             C   s   dS )Nz
bass-alterr   )r   r   r   r   rP  –  s    zBass.alter_class_nameN)r:   rD   rE   rO  rP  r   r   r   r   rQ  ‘  s   rQ  c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚChordModificationc             C   s*   |   tdƒ¡}ddddœ | ¡  ¡ d¡S )Nzdegree-typer5   r·   )Úaddr¦   Úsubtractr   )r3   r+   rµ   r   rŸ   )r   r¢   r   r   r   rM   œ  s    zChordModification.get_typec             C   s*   |   tdƒ¡}d}|r&t| ¡  ¡ ƒ}|S )Nzdegree-valuer   )r3   r+   r@   r   rŸ   )r   r¢   ræ   r   r   r   Ú	get_value   s
    zChordModification.get_valuec             C   s   |   tdƒ¡}t |¡S )Nzdegree-alter)r3   r+   rŒ   r§   )r   r¢   r   r   r   Ú	get_alter§  s    zChordModification.get_alterN)r:   rD   rE   rM   rU  rV  r   r   r   r   rR  š  s   rR  c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚFramec             C   s   |   dd¡S )Nzframe-fretsrœ   )rC   )r   r   r   r   Ú	get_frets®  s    zFrame.get_fretsc             C   s   |   dd¡S )Nzframe-stringsé   )rC   )r   r   r   r   Úget_strings±  s    zFrame.get_stringsc             C   s   |   dd¡S )Nz
first-fretr5   )rC   )r   r   r   r   Úget_first_fret´  s    zFrame.get_first_fretN)r:   rD   rE   rX  rZ  r[  r   r   r   r   rW  ¬  s   rW  c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú
Frame_Notec             C   s   |   dd¡S )NÚstringr5   )rC   )r   r   r   r   Ú
get_stringº  s    zFrame_Note.get_stringc             C   s   |   dd¡S )NZfretr   )rC   )r   r   r   r   Úget_fret½  s    zFrame_Note.get_fretc             C   s   |   dd¡S )NZ	fingeringr·   )rC   )r   r   r   r   Úget_fingeringÀ  s    zFrame_Note.get_fingeringc             C   s"   |   d¡}|rt|ddƒS dS d S )NZbarrerK   r   )r.   rŽ   )r   rB   r   r   r   Ú	get_barreÃ  s    
zFrame_Note.get_barreN)r:   rD   rE   r^  r_  r`  ra  r   r   r   r   r\  ¸  s   r\  c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚMusicxml_voicec             C   s"   g | _ i | _d | _g | _d| _d S )NF)Ú	_elementsÚ_stavesÚ_start_staffÚ_lyricsÚ_has_lyrics)r   r   r   r   r   Í  s
    zMusicxml_voice.__init__c             C   s¤   | j  |¡ t|tƒrN| t¡rN| t¡ ¡ }| jsD| t¡sD|| _d| j	|< | 
t¡}| jslt|ƒdk| _x2|D ]*}| ¡ }|dkrr|| jkrr| j |¡ qrW d S )NTr   )rc  r\   r$   ró   r3   ÚStaffr   re  rù   rd  r   r*  rg  r6   Z
has_lyricsr+  rf  )r   rx   r4   Zlyricsr»   rÒ   r   r   r   Úadd_elementÔ  s    




zMusicxml_voice.add_elementc             C   s   | j  ||¡ d S )N)rc  Úinsert)r   Úidxrx   r   r   r   rj  ç  s    zMusicxml_voice.insertc             C   s$   t | jƒdkr| jrdgS | jS d S )Nr   r5   )r6   rf  rg  )r   r   r   r   Úget_lyrics_numbersê  s    z!Musicxml_voice.get_lyrics_numbersN)r:   rD   rE   r   ri  rj  rl  r   r   r   r   rb  Ë  s   rb  c               @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚPartc             C   s   t  | ¡ i | _i | _d S )N)rF   r   Ú_voicesÚ_staff_attributes_dict)r   r   r   r   r   ô  s    
zPart.__init__c             C   s*   | }x|r|  ¡ dkr|j}qW | d¡S )Nzscore-partwisez	part-list)r   r	   r/   )r   rB   r   r   r   Úget_part_listù  s    
zPart.get_part_listc             C   s(   x"|D ]}|j |_|j|_d|_qW d S )NT)Ú
_prev_whenÚ_whenÚ_prev_measure_positionÚ_measure_positionrõ   )r   Úpending_gracesrú   r   r   r   Úgraces_to_aftergraces   s    
zPart.graces_to_aftergracesc             C   sâ  |   ¡ }tdƒ}tdƒ}i }d}|  t¡}tdƒ}tdƒ}tdƒ}	|}
d}d}g }xˆ|D ]~}| ¡ sÖ|rÊ|rÊ|jdkrÊ| ¡ }|
| }||krÆd}||kr¢d}|dkrÆ|rÆ| d|||| f ¡ |}|}
tdƒ}	d}g }x¬| ¡ D ]ž}| 	¡ d	krd}t
|tƒrT| ¡ r<| ¡ }x|D ]}||_q&W g }n|rJ||_n
| |¡ t
|tƒrv|j|_||_|	|_qêt
|tƒr„qêtdƒ}|jtkrÐ| |¡ | ¡  |j ¡ }|}tdt| d
¡ ¡ ƒƒ}| t¡rR| t¡}|  ¡ | }| 	¡ d	kr| }|  !|¡ g }| t"¡r(tdƒ}| t#¡}|rR|rR| ¡ |krRd|_$|tdƒkrt| t%¡rt|}|}	||_|	|_t
|t&ƒr¢| '¡ r¢||_(||_)t
|t&ƒrÆ| *¡ rÆ||_||_n4t
|t&ƒrè| '¡ rè| |¡ n|tdƒkrúg }||_+|tdƒkr(|}|	}||7 }|	|7 }	n<|tdƒk rd||7 }|	|7 }	|	dk r\||	8 }d}	|}|	}|j,dkrê| -d¡}|rê| .|j/¡|_0qêW |  !|¡ g }|rÖd}|rÖ| ¡ rÖ| ¡ }|
| }||krÖ||_|}qZW dS )z"Set durations and starting points.r   r5   Nr·   TZ
incompleteZoverfullz(%s measure? Expected: %s, Difference: %sZbackupZ	divisionsr#  Ú
instrumentF)1rp  r   r   r   r"  râ   r¼   r#   r2   r   r$   rP   rR   rI   r\   ÚFiguredBassÚdenominatorZ
_divisionsrr  rt  r%   r   rS   r³   r´   r®   Úcopyr@   rµ   r   r3   r›   rž   rv  rù   r  rI  ÚChordró   rø   rq  rs  rû   rö   r   r.   r  r  rô   )r   Z	part_listZnowr  Zattributes_dictZattributes_objectÚmeasuresZlast_momentZlast_measure_positionZmeasure_positionZmeasure_start_momentZis_first_measureZprevious_measureru  r{   ÚlengthZnew_nowZproblemrI   Zassign_to_next_voicerB   rf   r   Zmxl_durr  rw  Zmeasure_endr   r   r   Ú	interpret  sè    














zPart.interpretc             C   sz   t   |¡}g |_|j  ¡ |_||_|dkr.d}x8|jD ].}t|dƒrN|j|kr6t|tƒs6|j |¡ q6W |jsrd S |S d S )NÚNonerE  rÎ   )	rz  r   r®   r¯   rL   rÎ   r$   r%   r\   )ÚpartÚattrÚstaffÚ
attributesr   r   r   r   Úextract_attributes_for_staff«  s    

z!Part.extract_attributes_for_staffc             C   s  d }t ƒ }|  t¡}g }x4|D ],}|jdkr<| t|jƒ¡ | | ¡ ¡ qW i }xª|D ]¢}| d¡}d }	|rx| 	¡ }	nt
|tƒr–| d¡r’|}	nd}	|	d k	r¢|	}| d¡}
d }|
r¾|
 	¡ }nd}|	rØ|	|krØtƒ ||	< |	rX|rX| t¡sX|	|krX|||	< qXW i }x>t| ¡ ƒD ].\}}||kr.|g||< n||  |¡ qW d }g }d }x&|D ]}| tdƒ¡}|rz| 	¡ }n| tdƒ¡r|}nd}|dkr¢|}t
|tƒst
|tƒst
|tƒst
|tƒst
|tƒst
|tƒst
|tƒst
|tƒsqVt
|tƒr |s |}qVt
|tƒr|xJt| ¡ ƒD ]:\}}|  ||¡}|r:x|D ]}||  |¡ qZW q:W qVt
|tƒs t
|tƒs t
|tƒrÊx$t| ¡ ƒD ]}||  |¡ q®W qVt
|tƒrþ|jrð||j  |¡ n
| |¡ qVt
|tƒst
|tƒr$| |¡ qVt|dƒrBt|dƒdkrBn0x|D ]}||  |¡ qHW g }||  |¡ qVW x|D ]}||  |¡ q~W g }|rxjt| ¡ ƒD ]Z\}}|  ||¡}| ¡  || j|< x0|D ](}||   d|¡ || j!d  ¡  qÚW q®W || _"d S )	Nr   rQ   ÚchordrE  r‚  r  zprint-objectZno)#r   r   r   râ   r\   rá   Úextendr2   r.   r   r$   ró   rb  r3   rù   r   r    r+   rS   Ú	DirectionrÕ   ÚHarmonyrx  ÚPrintr„  ri  ÚkeysrI   rL   rŽ   r´   ro  rj  rc  rn  )r€  Z
last_voiceZvoicesr|  Úelementsr{   Zvoice_to_staff_dictrB   rI   ZvidZstaff_idZsidZstaff_to_voice_dictrm   ry   Z
start_attrZassign_to_next_noter  ZvidsZstaff_attributesrf   r   r   r   Úextract_voices¼  sº    














$





zPart.extract_voicesc             C   s   | j S )N)rn  )r   r   r   r   Ú
get_voicesH  s    zPart.get_voicesc             C   s   | j S )N)ro  )r   r   r   r   Úget_staff_attributesK  s    zPart.get_staff_attributesN)r:   rD   rE   r   rp  rv  r~  r„  rŒ  r  rŽ  r   r   r   r   rm  ò  s    & rm  c               @   s   e Zd ZdS )ÚBarStyleN)r:   rD   rE   r   r   r   r   r  O  s   r  c               @   s   e Zd ZdS )rÁ   N)r:   rD   rE   r   r   r   r   rÁ   S  s   rÁ   c               @   s   e Zd ZdS )ÚBeatUnitN)r:   rD   rE   r   r   r   r   r  W  s   r  c               @   s   e Zd ZdS )ÚBeatUnitDotN)r:   rD   rE   r   r   r   r   r‘  [  s   r‘  c               @   s   e Zd ZdS )r¿   N)r:   rD   rE   r   r   r   r   r¿   _  s   r¿   c               @   s   e Zd ZdS )ÚBracketN)r:   rD   rE   r   r   r   r   r’  c  s   r’  c               @   s   e Zd ZdS )r{  N)r:   rD   rE   r   r   r   r   r{  g  s   r{  c               @   s   e Zd ZdS )ÚDashesN)r:   rD   rE   r   r   r   r   r“  k  s   r“  c               @   s   e Zd ZdS )ÚDirTypeN)r:   rD   rE   r   r   r   r   r”  o  s   r”  c               @   s   e Zd ZdS )r‡  N)r:   rD   rE   r   r   r   r   r‡  s  s   r‡  c               @   s   e Zd ZdS )rÿ   N)r:   rD   rE   r   r   r   r   rÿ   w  s   rÿ   c               @   s   e Zd ZdS )ÚElisionN)r:   rD   rE   r   r   r   r   r•  {  s   r•  c               @   s   e Zd ZdS )ÚExtendN)r:   rD   rE   r   r   r   r   r–    s   r–  c               @   s   e Zd ZdS )rx  N)r:   rD   rE   r   r   r   r   rx  ƒ  s   rx  c               @   s   e Zd ZdS )Ú	GlissandoN)r:   rD   rE   r   r   r   r   r—  ‡  s   r—  c               @   s   e Zd ZdS )rù   N)r:   rD   rE   r   r   r   r   rù   ‹  s   rù   c               @   s   e Zd ZdS )rˆ  N)r:   rD   rE   r   r   r   r   rˆ    s   rˆ  c               @   s   e Zd ZdS )ÚHash_commentN)r:   rD   rE   r   r   r   r   r˜  “  s   r˜  c               @   s   e Zd ZdS )rÐ   N)r:   rD   rE   r   r   r   r   rÐ   —  s   rÐ   c               @   s   e Zd ZdS )r‡  N)r:   rD   rE   r   r   r   r   r‡  ›  s   c               @   s   e Zd ZdS )rÑ   N)r:   rD   rE   r   r   r   r   rÑ   Ÿ  s   rÑ   c               @   s   e Zd ZdS )rÏ   N)r:   rD   rE   r   r   r   r   rÏ   £  s   rÏ   c               @   s   e Zd ZdS )Ú
Part_groupN)r:   rD   rE   r   r   r   r   r™  §  s   r™  c               @   s   e Zd ZdS )ÚPedalN)r:   rD   rE   r   r   r   r   rš  «  s   rš  c               @   s   e Zd ZdS )Ú	PerMinuteN)r:   rD   rE   r   r   r   r   r›  ¯  s   r›  c               @   s   e Zd ZdS )r‰  N)r:   rD   rE   r   r   r   r   r‰  ³  s   r‰  c               @   s   e Zd ZdS )ÚRootN)r:   rD   rE   r   r   r   r   rœ  ·  s   rœ  c               @   s   e Zd ZdS )Ú
Score_partN)r:   rD   rE   r   r   r   r   r  »  s   r  c               @   s   e Zd ZdS )ÚSlideN)r:   rD   rE   r   r   r   r   rž  ¿  s   rž  c               @   s   e Zd ZdS )rh  N)r:   rD   rE   r   r   r   r   rh  Ã  s   rh  c               @   s   e Zd ZdS )ÚTextN)r:   rD   rE   r   r   r   r   rŸ  Ç  s   rŸ  c               @   s   e Zd ZdS )ÚTypeN)r:   rD   rE   r   r   r   r   r   Ë  s   r   c               @   s   e Zd ZdS )Ú	Wavy_lineN)r:   rD   rE   r   r   r   r   r¡  Ï  s   r¡  c               @   s   e Zd ZdS )ÚWedgeN)r:   rD   rE   r   r   r   r   r¢  Ó  s   r¢  c               @   s   e Zd ZdS )ÚWordsN)r:   rD   rE   r   r   r   r   r£  ×  s   r£  )Bz#commentz#textr  rƒ  Zbarlinez	bar-styleZbassZbeamrÅ   z	beat-typez	beat-unitzbeat-unit-dotZbendZbracketr…  ZcreditZdashesZdegreeÚdotrØ   zdirection-typerG   Zelisionr†  Úframez
frame-notezfigured-bassZ	glissandor÷   ZharmonyZidentificationz	key-alterz
key-octavezkey-stepZlyricZmeasureZ	notationsr#  r  zoctave-shiftr€  z
part-groupz	part-listZpedalz
per-minuter  Úprintr  Úrootz
score-partZslideZslurZsoundr‚  r  Zsyllabicr_   ztime-modificationr0  r=  rK   r  z	wavy-lineZwedger–   Zworkc             C   s<   |   dd¡} |   dd¡} | d  ¡ | dd …  ¡  } t| ƒS )Nú-r9   ú#Zhash_r   r5   )ÚreplaceÚupperÚlowerÚstr)r4   r   r   r   Úname2class_name$  s    r®  c             C   s8   t  | ¡}|r|S t| ƒ}t|tfi ƒ}|t | < |S d S )N)Ú
class_dictrµ   r®  rK   rF   )r4   Z	classnameÚ
class_namer*   r   r   r   r+   ,  s    
r+   c             C   s®   | j }|d ks| jjdkrd S t|ƒ}|ƒ }| |_||_| j|_dd„ |  ¡ D ƒ|_	dd„ |j	D ƒ|_	x|j	D ]
}||_
qnW x,t|  ¡ ƒD ]\}}||j|< ||j|< qŠW |S )NZ_Commentc             S   s   g | ]}t |ƒ‘qS r   )Úlxml_demarshal_node)r   r;   r   r   r   r   C  s    z'lxml_demarshal_node.<locals>.<listcomp>c             S   s   g | ]}|r|‘qS r   r   )r   r—   r   r   r   r   D  s    )rU   r   r:   r+   r   r   r_   r   Zgetchildrenr   r	   r   r    r=   r
   )Únoder4   r*   Úpy_noder   Úkrm   r   r   r   r±  7  s     

r±  c             C   s¢   | j }t|ƒ}|ƒ }||_dd„ | jD ƒ|_x|jD ]
}||_q4W | jrxx.t| j ¡ ƒD ]\}}||j	|< ||j
|< qXW d |_| j| jkr˜| jr˜| j|_| |_|S )Nc             S   s   g | ]}t |ƒ‘qS r   )Úminidom_demarshal_node)r   r;   r   r   r   r   V  s    z*minidom_demarshal_node.<locals>.<listcomp>)ZnodeNamer+   r   Z
childNodesr   r	   rƒ  r   r    r=   r
   r   ZnodeTypeZ	TEXT_NODEÚdatar   )r²  r4   r*   r³  r   r,   ræ   r   r   r   rµ  P  s     

rµ  Ú__main__zbeethoven.xmlr&   )iÚcollectionsr   rz  Z	fractionsr   rí   Úsysr7   Zlilylibr   r©   rª   rŒ   Úobjectr   rF   rJ   rP   rT   rY   r}   r›   r%   r    r­   rS   rÕ   rá   rã   rì   ró   r  r   r%  r*  r,  r/  r5  r:  r3  rB  rC  rD  rG  r  rL  rN  rQ  rR  rW  r\  rb  rm  r  rÁ   r  r‘  r¿   r’  r{  r“  r”  r‡  rÿ   r•  r–  rx  r—  rù   rˆ  r˜  rÐ   rÑ   rÏ   r™  rš  r›  r‰  rœ  r  rž  rh  rŸ  r   r¡  r¢  r£  r¯  r®  r+   r±  rµ  r:   Z
lxml.etreeZlxmlZetreeÚparseZtreeZgetrootZmxl_treeÚsortedrŠ  Zksr¦  r   r   r   r   r   Ú<module>   sH  e	dd	 41 *$	'  _
