3
?­`�  ã               @   sÞ   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d dlZd dlm	Z	 d dl
mZmZmZmZ dZde d ZdZdZG d	d
„ d
eƒZG dd„ dƒZdd„ Zdd„ Zddd„Zdd„ Zdd„ Zdd„ Zde_dd„ ZdS )é    N)Úetree)ÚPHPArrayÚPHPDictÚ
PHPLiteralÚPHPFunctionCallz"http://cbikt.de/rad-framework/pageú{ú}zpage.xsdé   c               @   s   e Zd ZdS )ÚPageParserExceptionN)Ú__name__Ú
__module__Ú__qualname__© r   r   ú_/home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/pagelib.pyr
      s   r
   c               @   sX   e Z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d„Z
dd„ ZdS )Ú
TranslatorNFc             C   sF   || _ || _|sBtjƒ | _tjjƒ jdƒ}|ddddœ| j_d | _	d S )Nz%Y-%m-%d %H:%M%zz1.0ztext/plain; charset=utf-8Z8bit)zPOT-Creation-DatezMIME-VersionzContent-TypezContent-Transfer-Encoding)
Ú_gettext_domainÚ_is_stubÚpolibZPOFileÚ_poÚdatetimeÚnowÚstrftimeZmetadataÚ_current_source_path)ÚselfZgettext_domainZis_stubÚ	timestampr   r   r   Ú__init__   s    
zTranslator.__init__c             C   s>   t j|ƒ}x.| jD ]$}|j|jƒ}|d ks2||krdS qW dS )NTF)r   Zpofiler   ÚfindÚmsgid)r   ÚpathZpo_otherÚentryÚmr   r   r   Údiffers_from*   s    
zTranslator.differs_fromc             C   s    | j  stdƒ‚| jj|ƒ d S )NzCannot write out in stub mode.)r   ÚAssertionErrorr   Zsave)r   r   r   r   r   Ú	write_out2   s    zTranslator.write_outc             C   s   | j r
d S || _d S )N)r   r   )r   r   r   r   r   Úset_source_path6   s    zTranslator.set_source_pathc             C   s€   |j d k	r>| j|j ƒ\}}}| j||jƒ || j|ƒ | |_ |jd k	r|| j|jƒ\}}}| j||jƒ || j|ƒ | |_d S )N)ÚtextÚ_split_stringÚ_add_stringÚ
sourcelineÚ
_translateÚtail)r   ÚnodeÚleftÚmidÚrightr   r   r   Ú	feed_node;   s    

zTranslator.feed_nodec             C   s^   ||j krZt|j | tƒrZ|j | }| j|ƒ\}}}| j||jƒ || j|ƒ | |j |< d S )N)ÚattribÚ
isinstanceÚstrr&   r'   r(   r)   )r   r+   ÚanameÚvalr,   r-   r.   r   r   r   Ú	feed_attrE   s
    
zTranslator.feed_attrc             C   sb   |j ƒ }|jƒ }t|ƒt|ƒ }t|ƒt|ƒ }|d|… ||t|ƒ| … |t|ƒ| d … fS )Nr   )ÚlstripÚrstripÚlen)r   ÚsÚuÚvÚiÚjr   r   r   r&   L   s
    zTranslator._split_stringc             C   sŠ   | j s|dkrd S d|i}| jd k	r@|d k	r@| jt|ƒfg|d< tjf |Ž}| jj|ƒ}|d k	rz|j|j |_|j|ƒ n| jj	|ƒ d S )NÚ r   Úoccurrences)
r   r   r2   r   ZPOEntryr   r   r?   ÚmergeÚappend)r   r   ÚlineÚargsr   Zexistingr   r   r   r'   S   s    zTranslator._add_stringc             C   s.   | j s| jd ks|dkr|S tj| j|ƒ}|S )Nr>   )r   r   ÚgettextÚdgettext)r   r   Úmsgr   r   r   r)   a   s    zTranslator._translate)NF)N)r   r   r   r   r!   r#   r$   r/   r5   r&   r'   r)   r   r   r   r   r      s   


r   c           
   C   sd   t jjt jjtjd ƒtƒ} t jj| ƒsBtdj	| tjd ƒƒ‚d S t
| dƒ�}tj|d�S Q R X d S )Nr   zOCould not find schema file '{}'. Make sure it is in the same directory as '{}'.Úr)Úfile)Úosr   ÚjoinÚdirnameÚsysÚargvÚSCHEMA_FILEÚisfiler
   ÚformatÚopenr   Ú	XMLSchema)Zschema_pathÚfr   r   r   Ú
get_schemak   s    rT   c             C   s   | dkS )NÚyesr   )r4   r   r   r   Úxmlboolu   s    rV   ú/c             C   s¬  i }i }�x"| D �]}�xt j|ƒD �] }t jj||ƒ}t jj|ƒršd|krZtdj|ƒƒ‚|d |krvtdj||ƒƒ‚||kr†g ||< || j|ƒ |}q$t jj|ƒ�rt jj	|ƒ\}}|dkrÂq$d|krØtdj|ƒƒ‚||krðtdj||ƒƒ‚||k�rtdj|| |ƒƒ‚|||< q$tdj|ƒƒ‚q$W qW g }	xDt
|jƒ ƒD ]4\}} t jj||ƒ}
t| |
ƒ}|	j|d|ffƒ �q@W |	d	d
„ t
|jƒ ƒD ƒ7 }	t|	dd„ d�}	tj|	ƒS )NÚ.z*Page directory '{}' must not contain dots.z.xmlzDA file and a directory have the same name '{}' in virtual path '{}'.z%Page path '{}' must not contain dots.z<Files '{}' and '{}' point to the same page in the page tree.z%Unknown file type for '{}', aborting.Tc             S   s   g | ]\}}|d |ff‘qS )Fr   )Ú.0ÚnameÚsourcer   r   r   ú
<listcomp>    s    z"list_file_tree.<locals>.<listcomp>c             S   s   | S )Nr   )rZ   r   r   r   Ú<lambda>¢   s    z list_file_tree.<locals>.<lambda>)Úkey)rI   Úlistdirr   rJ   Úisdirr
   rP   rA   rO   ÚsplitextÚlistÚitemsÚlist_file_treeÚsortedÚcollectionsÚOrderedDict)ZsourcesZvirtdirÚdirsÚfilesr[   Ú	full_nameÚabspathrZ   ÚsuffixÚ	file_treeZ	virtchildÚchildrenr   r   r   rd   x   sN    




rd   c             C   sX   xR|D ]J\}}|| j kr| j | }|tkr4t|ƒ}n|tkrDt|ƒ}t|ƒ||< qW d S )N)r0   ÚboolrV   Úintr   )r+   ÚattribsÚwidget_attribsr3   Úatyper4   r   r   r   Ú_read_widget_attribs§   s    


rt   c       	         s  dg‰ ‡ fdd„‰dd„ ‰‡fdd„‰dd	„ ‰
d
d„ ‰	d<‡‡
‡fdd„	‰‡‡	‡‡fdd„‰t ƒ ‰g f‡‡fdd„	‰g f‡‡‡fdd„	‰‡‡fdd„‰‡‡fdd„‰‡fdd„}d=‡‡fdd„	}g f‡fdd„	‰‡‡‡fd d!„‰dˆ_‡‡‡fd"d#„‰dˆ_‡‡fd$d%„‰‡‡fd&d'„‰|dg g f‡ ‡‡‡‡‡‡‡‡f	d(d)„	‰"g g ˆf‡‡‡‡‡fd*d+„	‰#‡fd,d-„‰‡fd.d/„‰ ‡‡‡fd0d1„‰‡‡!fd2d3„‰‡fd4d5„‰‡‡‡‡‡‡fd6d7„‰d8d9„ ‰‡ ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡"‡#fd:d;„‰!g ‰i ‰ˆ!|d dƒ ˆd S )>Nr   c                 s$   dt ˆ d ƒ } ˆ d  d7  < | S )Nz$vr   é   )r2   )Úvar)Úvar_cntr   r   Úallocvar³   s    z_parse_body.<locals>.allocvarc             S   s   d S )Nr   )rv   r   r   r   Úfreevar¸   s    z_parse_body.<locals>.freevarc                s   t djˆ | j|ƒƒ‚d S )Nz	{}:{}: {})r
   rP   r(   )r+   rF   )r   r   r   Úerror»   s    z_parse_body.<locals>.errorc             S   s:   | d krd S x(| j td ƒD ]}|jd |kr|S qW d S )NÚrecordrZ   )ÚfindallÚRADr0   )ÚmodelrZ   Zrecr   r   r   Úfind_record¾   s
    z _parse_body.<locals>.find_recordc             S   sž   | j td kr,| jtd ƒ| jtd ƒ }nN| j td ksH| j td krX| jtd ƒ}n"| j td krv| jtd ƒ}nd S x|D ]}|jd |kr€|S q€W d S )Nr~   ÚqueryÚemptysetÚsubqueryrZ   )Útagr}   r|   r0   )r+   rZ   ÚelemsÚelr   r   r   Ú
find_queryÅ   s    
z_parse_body.<locals>.find_queryFc                s  d }| j d jdƒ}|d dkrT|jdƒ ˆd ksDˆjtd ƒd krNˆ | dƒ d}nŠ|d dkršt|ƒd	k rvˆ | d
ƒ |jdƒ |jdƒ}djt|ƒƒ}nDˆˆ|d ƒd k	rÆ|jdƒ}djt|ƒƒ}n|sÞˆ | dj|d ƒƒ |rê||fS t|ƒdk�rˆ | dƒ |S )Nr[   rW   r   ú$ÚprimaryzqInvalid 'source' attribute: Reference to primary record ($) requires a primary record to be defined in the model.z$model->getPrimaryRecord()z..é   z,Invalid 'source' attribute: Incomplete path.z$model->getReadOnlyRecord({})z$model->getNamedRecord({})z7Invalid 'source' attribute: Record '{}' does not exist.z8Invalid 'source' attribute: Unknown trailing components.)r0   ÚsplitÚpopr   r}   r8   rP   r   )r+   Úreturn_remainderÚphpr   rZ   )rz   r   r~   r   r   Úparse_source_recordÕ   s.    






z(_parse_body.<locals>.parse_source_recordc                sf  | j d }ˆ| dd�\}}|d k	rXt|ƒdkr8ˆ | dƒ t|d ƒ|d< tdƒ|d< |S |d d	kr¤t|ƒd
k rzˆ | dƒ t|ƒd
kr�ˆ | dƒ t|d ƒ|d< dS ˆd kr¶ˆ | dƒ ˆˆ|d ƒ}|d kràˆ | dj|d ƒƒ djt|d ƒƒg}xN|dd … D ]>}ˆ||ƒ}|d k�r*ˆ | dj|ƒƒ |jdjt|ƒƒƒ �qW dj|ƒ|d< tdƒ|d< dS d S )Nr[   T)rŒ   ru   zaInvalid 'source' attribute: There must be exactly one subquery following a reference to a record.r   Z	recordsetz
fix-recordrX   r‰   z,Invalid 'source' attribute: Incomplete path.zAInvalid 'source' attribute: Too many components in relative path.Únullz/Invalid 'source' attribute: No model specified.z:Query '{}' specified in 'source' attribute does not exist.z$model->getRecordSet({})z=Subquery '{}' specified in 'source' attribute does not exist.zgetSubSet({})z->)r0   r8   r   rP   rA   rJ   )r+   rr   r[   Z
php_recordÚpartsr€   ÚexprrZ   )rz   r†   r~   rŽ   r   r   Úparse_source_recordsetô   s>    






z+_parse_body.<locals>.parse_source_recordsetc                s¶   dt fdtfdtfdt fdt fdt fdtfg}d| jkr\d| jkrLˆ| d	ƒ | jd | jd< d| jkrŽ| jd ˆ kr~ˆ| d
ƒ ˆ j| jd ƒ tƒ }t| || |ƒ t| jd ƒ|fS )NÚidZhiddenz
fix-recordZeditableÚclassÚstyleZinlinerZ   z-Widget has neither 'name' nor 'id' attribute.zID already in use.)r2   ro   r0   Úaddr   rt   r   )r+   rq   Zbase_attribsrr   )Úall_idsrz   r   r   Úparse_attribs_widget  s    




z)_parse_body.<locals>.parse_attribs_widgetc                sš   ˆj | dƒ dtfdtfdtfg}ˆ| || ƒ\}}g }d}xRt| d jtƒrŽ| d jtd krŽˆ | d dj|ƒƒ}|j|ƒ | d= |d7 }q>W |||fS )NZcaptionzouter-classÚhelpr   Úactionz	_action{}ru   )r5   r2   r1   rƒ   r}   rP   rA   )r+   rq   Zcomposite_attribsrZ   rr   Úactionsr<   Úchildvar)Úcomposer˜   Ú
translatorr   r   Úparse_attribs_composite_widget1  s    

z3_parse_body.<locals>.parse_attribs_composite_widgetc                sl   ˆ | dt fdt fdt fdtfdt fdt fdtfdtfgƒ\}}}d| jkrVttƒ|d< ˆ| |ƒ}||||fS )	Nzallow-selectz	allow-addzallow-deletez	page-sizezauto-filterZsortablezcustom-add-linkzcustom-select-link)ro   rp   r2   r0   r   ÚTABLE_DEFAULT_PAGE_SIZE)r+   rZ   rr   r›   r{   )rŸ   r’   r   r   Úparse_attribs_table_widgetC  s    

z/_parse_body.<locals>.parse_attribs_table_widgetc                s,   ˆ | dt fgƒ\}}}ˆ| |ƒ}||||fS )NZ	separator)r2   )r+   rZ   rr   r›   r{   )rŸ   r’   r   r   Úparse_attribs_repeat_widgetN  s    
z0_parse_body.<locals>.parse_attribs_repeat_widgetc                s   ˆ | ƒ\}}}t }d S )N)Úparse)r+   rZ   rr   Ú_r{   )rŸ   r   r   Úparse_attribs_wizard_widgetT  s    z0_parse_body.<locals>.parse_attribs_wizard_widgetTc                s8   ˆ | ƒ\}}}d| j kr$| r$d}nˆ| ƒ}||||fS )Nr[   r�   )r0   )r+   Úrequire_sourcerZ   rr   r›   r{   )rŸ   rŽ   r   r   Úparse_attribs_record_widgetX  s
    z0_parse_body.<locals>.parse_attribs_record_widgetc                s   ˆ | dt fg| ƒS )Nr[   )r2   )r+   Úattr)r˜   r   r   Úparse_attribs_value_widget`  s    z/_parse_body.<locals>.parse_attribs_value_widgetc                sr   ˆj | ƒ d| jkr>d| jkr>djˆ jƒ| jd< ˆ  jd7  _ˆ| ƒ\}}| jd k	rZ| jnd}t|ƒ|d< ||fS )Nr“   rZ   z_linkconfirm{}ru   r>   Úlabel)r/   r0   rP   Úcounterr%   r   )r+   rZ   rr   rª   )Úparse_attribs_link_widgetr˜   rž   r   r   r¬   c  s    
z._parse_body.<locals>.parse_attribs_link_widgetc                sr   ˆj | ƒ d| jkr>d| jkr>djˆ jƒ| jd< ˆ  jd7  _ˆ| ƒ\}}| jd k	rZ| jnd}t|ƒ|d< ||fS )Nr“   rZ   z_link{}ru   r>   rª   )r/   r0   rP   r«   r%   r   )r+   rZ   rr   rª   )Ú parse_attribs_linkconfirm_widgetr˜   rž   r   r   r­   q  s    
z5_parse_body.<locals>.parse_attribs_linkconfirm_widgetc                sd   ˆj | ƒ ˆ | dtfdtfgd�\}}| jd k	r8| j}nd}t|ƒ|d< d|kr\tdƒ|d< ||fS )NÚiconzrequires-write)rq   r>   rª   TZrequires_write)r/   r2   ro   r%   r   )r+   rZ   rr   rª   )r˜   rž   r   r   Úparse_attribs_button_widget  s    

z0_parse_body.<locals>.parse_attribs_button_widgetc          
      sL   ˆj | dƒ ˆj | dƒ ˆ | dtfdtfdtfdtfdtfdtfdtfgƒS )Nz
null-labelz	new-labelÚsqlz
allow-nullz	allow-newzajax-urlznull-display)r5   r2   ro   )r+   )r©   rž   r   r   Úparse_attribs_select_widgetŒ  s    
z0_parse_body.<locals>.parse_attribs_select_widgetc                sŒ   || |d�\}}	}
}t | ||	ƒ ˆ| ƒ}ˆƒ }ˆ| ƒ}ˆjdj|||||	|
ƒƒ ˆ|| |ƒ ˆ ||ƒ ˆ||ƒ ˆ| |||ƒ ˆj|ƒ d S )N)r¦   z,{} = new W\{}({}, $page, $auth, {}, {}, {});)rt   rA   rP   )r+   ÚparentÚidxÚclsÚ	attr_funcr¦   rq   ÚeventsrZ   rr   r{   r›   Úchild_countrv   Zrend)	Úadd_actionsÚadd_childrenÚ
add_eventsrx   Údescendr�   ÚrendererÚreplace_with_piÚstackr   r   Úvisit_composite_widget•  s    

z+_parse_body.<locals>.visit_composite_widgetc       
         s\   || ƒ\}}t | ||ƒ ˆƒ }	ˆjdj|	|||ƒƒ ˆ |	| |ƒ ˆ| |||ƒ ˆj|	ƒ d S )Nz${} = new W\{}({}, $page, $auth, {});)rt   rA   rP   )
r+   r²   r³   r´   rq   r¶   rµ   rZ   rr   rv   )rº   rx   r�   r½   r¾   r   r   Úvisit_value_widget¦  s    z'_parse_body.<locals>.visit_value_widgetc                sF   x@|D ]8}d| }||j kr|j | }ˆ jdj| t|ƒ|ƒƒ qW d S )NZonz7{}->listen({}, function(W\Event $e){{$this->{}($e);}});)r0   rA   rP   r   )rv   r+   r¶   ZeventZeattrZfn_name)r�   r   r   rº   °  s    


z_parse_body.<locals>.add_eventsc                s$   x|D ]}ˆ j dj| |ƒƒ qW d S )Nz{}->addAction({});)rA   rP   )rv   r›   Zactvar)r�   r   r   r¸   ¸  s    
z _parse_body.<locals>.add_actionsc                s8   x2t |ƒD ]&}ˆjƒ }ˆjdj| |ƒƒ ˆ |ƒ q
W d S )Nz{}->add({});)Úranger‹   rA   rP   )rv   r·   r¤   rœ   )ry   r�   r¾   r   r   r¹   ¼  s    z!_parse_body.<locals>.add_childrenc                s6   t ˆ ƒ}x t| ƒD ]\}}ˆ|| |ƒ qW t ˆ ƒ| S )N)r8   Ú	enumerate)r+   Z	stack_ptrr<   Úchild)r¾   Úvisitr   r   r»   Â  s    z_parse_body.<locals>.descendc                s�   t j| ddd�}t|dƒ}|jdƒd }|jdƒ}|||… }xFtˆ jƒ ƒD ]6\}\}}|j|ƒd	kr|dj|ƒ}|j	||ƒ}ˆ |= qLW dj|ƒS )
NÚxmlzutf-8)ÚmethodÚencodingú>ru   ú<z <?= htmlspecialchars({}($w)); ?>zOnew W\CallbackCompositeRenderer(function(W\CompositeWidget $w) {{ ?>{}<?php }})éÿÿÿÿ)
r   Útostringr2   ÚindexÚrindexrb   rc   r   rP   Úreplace)r+   ÚtemplateÚstartÚendÚuidr3   ÚafnZattr_php)Úadd_attribsr   r   r¼   È  s    



z_parse_body.<locals>.rendererc                s    ˆ| ƒ}|dkrlt | ƒdkrl| d jtjkrl| jd ksD| jjƒ dkrl| d jd ksd| d jjƒ dkrlˆjƒ S ˆƒ }ˆjdj	|t
|ƒˆ| ƒƒƒ ˆ ||ƒ |S d S )Nru   r   r>   z:{} = new W\CompositeWidget({}, $page, $auth, {}, array());)r8   rƒ   r   ÚPIr%   Ústripr*   r‹   rA   rP   r   )r+   rZ   r·   rv   )r¹   rx   r»   r�   r¼   r¾   r   r   r�   Û  s     
z_parse_body.<locals>.composec             S   s.   dj |ƒ}tjd|ƒ}|| j|_|||< d S )Nz$w->child({})->render(); r�   )rP   r   ÚProcessingInstructionr*   )r+   r²   r³   rZ   ÚcodeÚpir   r   r   r½   ê  s    
z$_parse_body.<locals>.replace_with_pic                s   | j tjkr,| jdkr,tjjdjˆ| jƒƒ t	| j t
ƒs<d S | j td krÄ|d k	r\ˆ| dƒ tˆƒ}d}ˆ|ˆdddgƒ ˆjd	j|ƒƒ ˆ| ƒ}ˆj|d
j|ˆ| ƒˆƒƒ ˆ||ƒ ˆj|ƒ �
nØ| j td krîˆ| ||ddddgd� �
n®| j td k�r ˆ| ||ddt
fgdgdd� �
n|| j td k�rNˆ| ||ddt
fgdd� �
nN| j td k�r¸ˆ| ƒ\}}}}	ˆƒ }ˆjdj||||ƒƒ ˆ|| dddgƒ ˆ ||	ƒ xôt| ƒD ]è\}
}t	|j t
ƒ�sÌ�q°nÊ|j td k�r*ˆj|d ƒ td!d"„ t|jjƒ ƒD ƒƒ}ˆ|d#j|
ƒƒ}ˆjd$j|||ƒƒ nl|j td% k�r^ˆ|d&j|
ƒƒ}ˆjd'j||ƒƒ n8|j td( k�rŒˆ|d)ƒ}ˆjd*j||ƒƒ n
d�s°t‚�q°W ˆ| |||ƒ ˆj|ƒ �nä| j td+ k�rxˆ| ƒ\}}}}	ˆƒ }ˆjd,j||||ƒƒ ˆ|| dd-gƒ ˆ ||	ƒ ˆ| d. d/ƒ}ˆjd0j||ƒƒ t| ƒd1k�r\ˆ| d1 d2ƒ}ˆjd3j||ƒƒ ˆ| |||ƒ ˆj|ƒ �n$| j td4 k�rTˆ| ƒ\}}ˆƒ }ˆjd5j|||ƒƒ xRt| jtd6 ƒƒD ]<\}
}t|jd7 ƒ}ˆ|d8j|
ƒƒ}ˆjd9j|||ƒƒ �qÂW x4| jtd: ƒD ]"}ˆ|d;ƒ}ˆjd<j||ƒƒ �qW ˆ| |||ƒ ˆj|ƒ �nH| j td= k�r–ˆ| d>tfd?t
fgd@�\}}ˆƒ }ˆjdAj|||ƒƒ d }xºt| ƒD ]®\}
}ˆj|d ƒ t|jd  ƒ}dB|jk�rþt|jdB ƒ�rþ|d k	�rúˆ| dCƒ |
}ˆ|dDj|
ƒƒ}d?|jk�r0ˆjdEj|||ƒƒ n$t|jd? ƒ}ˆjdFj||||ƒƒ �q¨W |d k	�rzˆjdGj|t|ƒƒƒ ˆ| |||ƒ ˆj|ƒ �n| j tdH k�r¤ˆ
| ƒ\}}}dI| jk�rÊˆ| ƒ}ndJ}ˆƒ }ˆjdKj||||ƒƒ ˆ|| dLdMgƒ xŒt| jtdN ƒƒD ]v\}
}ˆj|d ƒ t|jd  ƒ}dO|jk�rXˆj|dOƒ t|jdO ƒ}ndJ}ˆ|dPj|
ƒƒ}ˆjdQj||||ƒƒ �qW ˆ| |||ƒ ˆj|ƒ �nø| j tdR k�rJˆ| ƒ\}}ˆƒ }ˆjdSj|||ƒƒ xR| jtdT ƒD ]@}d| jk�rˆ| dUƒ ˆjdVj|t|jd7 ƒt|jƒƒƒ �qêW ˆ| |||ƒ ˆj|ƒ �nR| j tdW k�rˆˆj| dXƒ ˆ| ||dYdXt
fdZtfgd@� �n| j td[ k�rÆˆj| dXƒ ˆ| ||d\dXt
fdZtfgd@� �nÖ| j td] k�rþˆj| dXƒ ˆ| ||d^dXt
fgd@� �nž| j td_ k�rHˆj| dXƒ ˆ| ||d`datfdbtfdXt
fdZtfgd@� �nT| j tdc k�rjˆ| ||ddƒ �n2| j tde k�r¢ˆj| dfƒ ˆ| ||dgdft
fgd@� �nú| j tdh k�rÎˆ| ||didjt
fgd@� �nÎ| j tdk k�	rˆj| dlƒ ˆ| ||dmdlt
fgd@� �n–| j tdn k�	r,ˆ| ||doˆdp� �np| j tdq k�	rfˆ| ||drˆdst
fdtt
fd?t
fgdu� �n6| j tdv k�	r ˆ| ||dwˆdst
fdtt
fd?t
fgdu� �nü| j tdx k�	rÊˆ| ||dyˆ	dzgd{� �nÒ| j td| k�	rìˆ| ||d}ƒ �n°| j td~ k�
rHˆ| ||dd€tfd�tfd‚tfdƒtfd„tfd…tfd†tfdqtfd‡tfg	d@� �nT| j tdˆ k�
r€ˆ| ||d‰d€tfd�tfdqtfgd@� �n| j tdŠ k�
ržˆ| d‹ƒ � nþtj| j ƒjtk�
rÆˆ| dŒj| j ƒƒ nÖxÂt| ƒd.k�rˆ| d. j tdŠ k�rˆ| d. jd� }| d. jdŽ }|| jk�r"ˆ| d�j|ƒƒ t
tj d”d•ƒƒ}|| j|< ||fˆ|< | d. j!d k	�r~| jd k�rjd“| _|  j| d. j!7  _| d.= �
qÈW ˆj"| ƒ ˆ| ƒ d S )–Nr�   zUEncountered PHP processing instruction in {}:{}. I hope you know what you are doing.
Úbodyz'body' tag must not be nested.z$pageZpreparerecordsZ	beforerunZbeforerenderz{}->setModel($model, $node);z2{} = new W\Page({}, $auth, {}, $pdo, $res, $lang);zsingle-formZ
SingleFormZsubmitÚvalidateZrender)r¶   ÚgroupZCompositeWidgetztable-new-requiredF)rq   r¶   r¦   z	sql-groupZSqlGroupWidgetr°   )rq   r¦   Útablez1{} = new W\TableWidget({}, $page, $auth, {}, {});Z	newrecordZrecordsavedZ	renderrowZtdÚtitlec             S   s   i | ]\}}t |ƒ|“qS r   )r   )rY   Úkr;   r   r   r   ú
<dictcomp>  s   z._parse_body.<locals>.visit.<locals>.<dictcomp>z_col{}z{}->addColumn({}, {});zaction-columnz	_action{}z{}->addActionColumn({});zediting-areaZ_editing_areaz{}->setEditingArea({});Úrepeatz2{} = new W\RepeatWidget({}, $page, $auth, {}, {});Zrendernotfoundr   Z_contentz{}->setContentWidget({});ru   Z	_notfoundz{}->setNotFoundWidget({});Zswitchz.{} = new W\SwitchWidget({}, $page, $auth, {});ZcaseÚvaluez_case{}z{}->setCase({}, {});ÚdefaultÚ_defaultz{}->setDefault({});Ztabszuse-urlr®   )rq   z,{} = new W\TabsWidget({}, $page, $auth, {});Úfirstz.Cannot have multiple tabs declared as 'first'.z_tab{}z{}->addTab({}, {});z{}->addTab({}, {}, {});z{}->setDefaultSelection({});Zwizardr[   r�   z2{} = new W\WizardWidget({}, $page, $auth, {}, {});ZchangeZfinishZpaneÚsubtitlez_pane{}z{}->addPane({}, {}, {});Úselectz.{} = new W\SelectWidget({}, $page, $auth, {});ÚoptionzYSelect widget can't have an 'sql' attribute and 'option' child elements at the same time.z{}->addOption({}, {});r%   ÚplaceholderZ
TextWidgetÚtruncateÚHTMLZ
HTMLWidgetÚcurrencyZCurrencyWidgetZtextareaZTextareaWidgetZrowsZcolsZcolorZColorWidgetZpasswordzshow-stringZPasswordWidgetÚdateZ
DateWidgetrP   Zcheckboxrª   ZCheckboxWidgetÚenumZ
EnumWidget)rµ   ÚlinkZ
LinkWidgetÚhrefÚtarget)rµ   rq   ZlinkconfirmZLinkconfirmWidgetZbuttonZButtonWidgetZclick)rµ   r¶   rH   Z
FileWidgetZpictureZFilePictureWidgetÚwidthZheightZresizeZ	thumbnailZfitwidthZ	fitheightZfitbestZcropperzpicture-svgZFilePictureSvgWidgetZ	attributezAElement 'attribute' must be the first child of a non-RAD element.zUnknown or unexpected tag '{}'.rZ   Úfunctionz)Cannot overwrite existing attribute '{}'.é
   é   é   r>   l     �Iú5 l     ‚_É)#rƒ   r   rÕ   rñ   rL   ÚstderrÚwriterP   r(   r1   r2   r}   r8   rA   ÚinsertrÂ   r5   r   rb   r0   rc   r"   r|   r   ro   rV   r%   rp   ÚQNameÚ	namespaceÚRAD_NAMESPACEÚrandomZrandintr*   r/   )r+   r²   r³   Z	begin_idxrv   r·   rZ   rq   r{   r›   r<   Úelemr¨   Zcolvarrœ   râ   Z	first_tabrÞ   r®   r¤   ræ   rè   r3   rÓ   rÒ   )r¸   rÔ   r¹   rº   rx   r�   r»   rz   Úpage_attribsr¯   rŸ   r¬   r­   r¢   r±   r¡   r©   r˜   rŽ   r   r�   r¼   r½   Úrootr¾   rž   r¿   rÀ   r   r   rÄ   ð  s¨   

















 











B
$

z_parse_body.<locals>.visit)F)T)Úsetr«   )	r   rÚ   r�   rÿ   r   r~   rž   r¥   r§   r   )$r¸   rÔ   r¹   rº   r—   rx   r�   r»   rz   r†   r   ry   r~   rÿ   r¯   rŸ   r¬   r­   r¢   r±   r¡   r©   r˜   rŽ   r’   r   r�   r¼   r½   r   r¾   rž   rw   rÄ   r¿   rÀ   r   Ú_parse_body±   sN    '
$	B ]r  c             C   s˜   t jd krtjtƒ ddd�t _t j}t| dƒ�}tj||d�}W d Q R X |jƒ }|j| ƒ |j	t
d krptdƒ‚|j|dƒ |j|dƒ |j|d	ƒ |S )
NT)ÚschemaÚremove_commentsÚattribute_defaultsrG   )ÚparserZpagezRoot node must be 'page'.rÞ   z	title-newztitle-breadcrumb)Ú	open_pager  r   Ú	XMLParserrT   rQ   r£   Úgetrootr$   rƒ   r}   r
   r5   )r   rž   r  rS   Útreer   r   r   r   r  Ò  s    



r  c             C   s¤   t ƒ }t| dtfg|ƒ g }| jtd ƒ}|d kr6i S | jtd ƒ}t| ||||||ƒ}|jdj|ƒƒ |d krvd}	n|jddƒjddƒ}
d	|
 }	d
|	fdj	|ƒiS )Nzunsaved-noticerÚ   r~   z
return {};Z
build_pageú-r¤   rX   Zbuild_page_ZprivateÚ
)
r   rt   ro   r   r}   r  rA   rP   rÎ   rJ   )r   r   rž   Úlangrÿ   r�   rÚ   r~   rv   rÆ   Z	lang_saner   r   r   Ú
parse_pageç  s    r  )rW   )rf   r   rD   rI   Úos.pathr   rý   rL   Úlxmlr   Úrad.phpr   r   r   r   rü   r}   rN   r    Ú	Exceptionr
   r   rT   rV   rd   rt   r  r  r  r  r   r   r   r   Ú<module>   s6   P

/
    %