U
    ”0c�  ã                   @   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/AH7KJJS4/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 ¡ | _t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D ]&}| |j¡}|d ks0||kr dS q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 rtdƒ‚| 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   Úset_source_path6   s    zTranslator.set_source_pathc                 C   s€   |j d k	r>|  |j ¡\}}}|  ||j¡ ||  |¡ | |_ |jd k	r||  |j¡\}}}|  ||j¡ ||  |¡ | |_d S r%   )Ú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 |< d S r%   )ÚattribÚ
isinstanceÚstrr(   r)   r*   r+   )r   r-   ÚanameÚvalr.   r/   r0   r   r   r   Ú	feed_attrE   s
    
zTranslator.feed_attrc                 C   sb   |  ¡ }| ¡ }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 |¡}|d k	rz|j|j |_| |¡ n| j 	|¡ d S )NÚ r   Úoccurrences)
r   r   r4   r   ZPOEntryr   r   rA   Ú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|¡}|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&   r1   r7   r(   r)   r+   r   r   r   r   r      s   


r   c               
   C   sp   t j t j tjd ¡t¡} t j | ¡sBtd 	| tjd ¡ƒ‚d S t
| dƒ�}tj|d�W  5 Q R £ 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     ÿrV   c                 C   s   | dkS )NZyesr   )r6   r   r   r   Úxmlboolu   s    rW   ú/c                 C   sœ  i }i }| D �]}t  |¡D �] }t j ||¡}t j |¡r’d|krRtd |¡ƒ‚|d |krntd ||¡ƒ‚||kr~g ||< ||  |¡ |}qt j |¡�rt j 	|¡\}}|dkrºqd|krÐtd |¡ƒ‚||krètd ||¡ƒ‚||k�rtd || |¡ƒ‚|||< qtd |¡ƒ‚qqg }	t
| ¡ ƒD ]4\}} t j ||¡}
t| |
ƒ}|	 |d|ff¡ �q2|	d	d
„ t
| ¡ ƒD ƒ7 }	t|	dd„ d�}	t |	¡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 r%   r   )r[   r   r   r   Ú<lambda>¢   ó    z list_file_tree.<locals>.<lambda>)Úkey)rK   Úlistdirr   rL   Úisdirr
   rR   rC   rQ   ÚsplitextÚlistÚitemsÚlist_file_treeÚsortedÚcollectionsÚOrderedDict)ZsourcesZvirtdirÚdirsÚfilesr\   Ú	full_nameÚabspathr[   ÚsuffixÚ	file_treeZ	virtchildÚchildrenr   r   r   rf   x   s^    
ÿ ÿ ÿ
 ÿ
ÿ

rf   c                 C   sT   |D ]J\}}|| j kr| j | }|tkr2t|ƒ}n|tkrBt|ƒ}t|ƒ||< qd S r%   )r2   ÚboolrW   Úintr   )r-   ÚattribsÚwidget_attribsr5   Úatyper6   r   r   r   Ú_read_widget_attribs§   s    


rv   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   é   ©r4   ©Úvar)Úvar_cntr   r   Úallocvar³   s    z_parse_body.<locals>.allocvarc                 S   s   d S r%   r   ry   r   r   r   Úfreevar¸   s    z_parse_body.<locals>.freevarc                    s   t d ˆ | j|¡ƒ‚d S )Nz	{}:{}: {})r
   rR   r*   )r-   rH   )r   r   r   Úerror»   s    z_parse_body.<locals>.errorc                 S   s:   | d krd S |   td ¡D ]}|jd |kr|  S qd S )NÚrecordr[   )ÚfindallÚRADr2   )Úmodelr[   Zrecr   r   r   Úfind_record¾   s
    z _parse_body.<locals>.find_recordc                 S   sž   | j td kr,|  td ¡|  td ¡ }nN| j td ksH| j td krX|  td ¡}n"| j td krv|  td ¡}nd S |D ]}|jd |kr~|  S q~d S )Nr‚   ÚqueryÚemptysetÚsubqueryr[   )Útagr�   r€   r2   )r-   r[   ÚelemsÚelr   r   r   Ú
find_queryÅ   s    
z_parse_body.<locals>.find_queryFc                    s  d }| j d  d¡}|d dkrT| d¡ ˆd ksDˆ td ¡d krNˆ | dƒ d}nŠ|d dkršt|ƒd	k rvˆ | d
ƒ | d¡ | d¡}d t|ƒ¡}nDˆˆ|d ƒd k	rÆ| d¡}d t|ƒ¡}n|sÞˆ | d |d ¡ƒ |rê||fS t|ƒdk�rˆ | dƒ |S )Nr\   rX   r   ú$ÚprimaryzqInvalid 'source' attribute: Reference to primary record ($) requires a primary record to be defined in the model.z$model->getPrimaryRecord()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.)r2   ÚsplitÚpopr   r�   r:   rR   r   )r-   Úreturn_remainderÚphpr   r[   )r~   rƒ   r‚   r   r   Úparse_source_recordÕ   s.    






z(_parse_body.<locals>.parse_source_recordc                    sb  | 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 |d ¡ƒ d t|d ƒ¡g}|dd … D ]>}ˆ||ƒ}|d k�r(ˆ | d |¡ƒ | d t|ƒ¡¡ �q d |¡|d< tdƒ|d< dS d S )Nr\   T)r‘   rw   zaInvalid 'source' attribute: There must be exactly one subquery following a reference to a record.r   Z	recordsetú
fix-recordrY   r�   rŽ   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->)r2   r:   r   rR   rC   rL   )r-   rt   r\   Z
php_recordÚpartsr„   Úexprr[   )r~   rŠ   r‚   r“   r   r   Úparse_source_recordsetô   sB    




ÿ

ÿ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d ¡ tƒ }t| || |ƒ t| jd ƒ|fS )NÚidZhiddenr”   ZeditableÚclassÚstyleZinliner[   z-Widget has neither 'name' nor 'id' attribute.zID already in use.)r4   rq   r2   Úaddr   rv   r   )r-   rs   Zbase_attribsrt   )Úall_idsr~   r   r   Úparse_attribs_widget  s$       þ




z)_parse_body.<locals>.parse_attribs_widgetc                    s–   ˆ  | d¡ dtfdtfdtfg}ˆ| || ƒ\}}g }d}t| d jtƒrŒ| d jtd krŒˆ | d d |¡ƒ}| |¡ | d= |d7 }q<|||fS )NZcaptionzouter-classÚhelpr   Úactionú	_action{}rw   )r7   r4   r3   r‡   r�   rR   rC   )r-   rs   Zcomposite_attribsr[   rt   Ú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)rq   rr   r4   r2   r   ÚTABLE_DEFAULT_PAGE_SIZE©r-   r[   rt   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	separatorrx   r¨   r©   r   r   Úparse_attribs_repeat_widgetN  s
    ÿ

z0_parse_body.<locals>.parse_attribs_repeat_widgetc                    s   ˆ | ƒ\}}}t }d S r%   )Úparse)r-   r[   rt   Ú_r   )r¦   r   r   Úparse_attribs_wizard_widgetT  s    z0_parse_body.<locals>.parse_attribs_wizard_widgetTc                    s6   ˆ | ƒ\}}}d| j kr"|s"d}nˆ| ƒ}||||fS )Nr\   r•   )r2   )r-   Úrequire_sourcer[   rt   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\   rx   )r-   Úattr)rž   r   r   Úparse_attribs_value_widget`  s    z/_parse_body.<locals>.parse_attribs_value_widgetc                    sr   ˆ  | ¡ d| jkr>d| jkr>d ˆ j¡| jd< ˆ  jd7  _ˆ| ƒ\}}| jd k	rZ| jnd}t|ƒ|d< ||fS )Nr™   r[   z_linkconfirm{}rw   r@   Úlabel©r1   r2   rR   Úcounterr'   r   ©r-   r[   rt   r³   )Úparse_attribs_link_widgetrž   r¥   r   r   r·   c  s    
ÿ
z._parse_body.<locals>.parse_attribs_link_widgetc                    sr   ˆ  | ¡ d| jkr>d| jkr>d ˆ j¡| jd< ˆ  jd7  _ˆ| ƒ\}}| jd k	rZ| jnd}t|ƒ|d< ||fS )Nr™   r[   z_link{}rw   r@   r³   r´   r¶   )Ú parse_attribs_linkconfirm_widgetrž   r¥   r   r   r¸   q  s    
ÿ
z5_parse_body.<locals>.parse_attribs_linkconfirm_widgetc                    sd   ˆ  | ¡ ˆ | 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©rs   r@   r³   TZrequires_write)r1   r4   rq   r'   r   r¶   )rž   r¥   r   r   Úparse_attribs_button_widget  s    
ÿ

z0_parse_body.<locals>.parse_attribs_button_widgetc              
      sL   ˆ  | d¡ ˆ  | 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)r7   r4   rq   )r-   )r²   r¥   r   r   Úparse_attribs_select_widgetŒ  s    
   ýz0_parse_body.<locals>.parse_attribs_select_widgetc              
      sŒ   || |d�\}}	}
}t | ||	ƒ ˆ| ƒ}ˆƒ }ˆ| ƒ}ˆ d |||||	|
¡¡ ˆ|| |ƒ ˆ ||ƒ ˆ||ƒ ˆ| |||ƒ ˆ |¡ d S )N)r¯   z,{} = new W\{}({}, $page, $auth, {}, {}, {});©rv   rC   rR   )r-   ÚparentÚidxÚclsÚ	attr_funcr¯   rs   Úeventsr[   rt   r   r¢   Úchild_countrz   Zrend)	Úadd_actionsÚadd_childrenÚ
add_eventsr|   Údescendr’   ÚrendererÚreplace_with_piÚstackr   r   Úvisit_composite_widget•  s&    
ÿ
     ÿ

z+_parse_body.<locals>.visit_composite_widgetc           
         s\   || ƒ\}}t | ||ƒ ˆƒ }	ˆ d |	|||¡¡ ˆ |	| |ƒ ˆ| |||ƒ ˆ |	¡ d S )Nz${} = new W\{}({}, $page, $auth, {});r¾   )
r-   r¿   rÀ   rÁ   rs   rÃ   rÂ   r[   rt   rz   )rÇ   r|   r’   rÊ   rË   r   r   Úvisit_value_widget¦  s    z'_parse_body.<locals>.visit_value_widgetc                    sB   |D ]8}d| }||j kr|j | }ˆ  d | t|ƒ|¡¡ qd S )NZonz7{}->listen({}, function(W\Event $e){{$this->{}($e);}});)r2   rC   rR   r   )rz   r-   rÃ   ZeventZeattrZfn_name©r’   r   r   rÇ   °  s    

  ÿz_parse_body.<locals>.add_eventsc                    s    |D ]}ˆ   d | |¡¡ qd S )Nz{}->addAction({});)rC   rR   )rz   r¢   ZactvarrÎ   r   r   rÅ   ¸  s    z _parse_body.<locals>.add_actionsc                    s4   t |ƒD ]&}ˆ ¡ }ˆ d | |¡¡ ˆ |ƒ qd S )Nz{}->add({});)Úranger�   rC   rR   )rz   rÄ   r­   r£   )r}   r’   rË   r   r   rÆ   ¼  s    z!_parse_body.<locals>.add_childrenc                    s2   t ˆ ƒ}t| ƒD ]\}}ˆ|| |ƒ qt ˆ ƒ| S r%   )r:   Ú	enumerate)r-   Z	stack_ptrr>   Úchild)rË   Úvisitr   r   rÈ   Â  s    z_parse_body.<locals>.descendc                    sŒ   t j| ddd�}t|dƒ}| d¡d }| d¡}|||… }tˆ  ¡ ƒD ]6\}\}}| |¡dkrzd |¡}| 	||¡}ˆ |= qJd	 |¡S )
NÚxmlzutf-8)ÚmethodÚencodingú>rw   ú<éÿÿÿÿz <?= htmlspecialchars({}($w)); ?>zOnew W\CallbackCompositeRenderer(function(W\CompositeWidget $w) {{ ?>{}<?php }}))
r   Útostringr4   ÚindexÚrindexrd   re   r   rR   Úreplace)r-   ÚtemplateÚstartÚendÚuidr5   Ú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 ¡ dkrl| d jd ksd| d j ¡ dkrlˆ ¡ S ˆƒ }ˆ d 	|t
|ƒˆ| ƒ¡¡ ˆ ||ƒ |S d S )Nrw   r   r@   z:{} = new W\CompositeWidget({}, $page, $auth, {}, array());)r:   r‡   r   ÚPIr'   Ústripr,   r�   rC   rR   r   )r-   r[   rÄ   rz   )rÆ   r|   rÈ   r’   rÉ   rË   r   r   r¤   Û  s.    
ÿþýýüü  ÿ
z_parse_body.<locals>.composec                 S   s.   d  |¡}t d|¡}|| j|_|||< d S )Nz$w->child({})->render(); r’   )rR   r   ÚProcessingInstructionr,   )r-   r¿   rÀ   r[   Ú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 d ˆ| j¡¡ t	| j t
ƒs<d S | j td krÄ|d k	r\ˆ| dƒ tˆƒ}d}ˆ|ˆdddgƒ ˆ d	 |¡¡ ˆ| ƒ}ˆ |d
 |ˆ| ƒˆ¡¡ ˆ||ƒ ˆ |¡ �
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� �
n0| j td k�r´ˆ| ƒ\}}}}	ˆƒ }ˆ d ||||¡¡ ˆ|| dddgƒ ˆ ||	ƒ t| ƒD ]è\}
}t	|j t
ƒ�sÊ�q®nÊ|j td k�r(ˆ |d ¡ td!d"„ t|j ¡ ƒD ƒƒ}ˆ|d# |
¡ƒ}ˆ d$ |||¡¡ nl|j td% k�r\ˆ|d& |
¡ƒ}ˆ d' ||¡¡ n8|j td( k�rŠˆ|d)ƒ}ˆ d* ||¡¡ n
d�s®t‚�q®ˆ| |||ƒ ˆ |¡ �nÊ| j td+ k�rtˆ| ƒ\}}}}	ˆƒ }ˆ d, ||||¡¡ ˆ|| dd-gƒ ˆ ||	ƒ ˆ| d. d/ƒ}ˆ d0 ||¡¡ t| ƒd1k�rXˆ| d1 d2ƒ}ˆ d3 ||¡¡ ˆ| |||ƒ ˆ |¡ �n
| j td4 k�rHˆ| ƒ\}}ˆƒ }ˆ d5 |||¡¡ t|  td6 ¡ƒD ]<\}
}t|jd7 ƒ}ˆ|d8 |
¡ƒ}ˆ d9 |||¡¡ �q¼|  td: ¡D ]"}ˆ|d;ƒ}ˆ d< ||¡¡ �qˆ| |||ƒ ˆ |¡ �n6| j td= k�r†ˆ| d>tfd?t
fgd@�\}}ˆƒ }ˆ dA |||¡¡ d }t| ƒD ]®\}
}ˆ |d ¡ t|jd  ƒ}dB|jk�rðt|jdB ƒ�rð|d k	�rìˆ| dCƒ |
}ˆ|dD |
¡ƒ}d?|jk�r"ˆ dE |||¡¡ n$t|jd? ƒ}ˆ dF ||||¡¡ �qš|d k	�rjˆ dG |t|ƒ¡¡ ˆ| |||ƒ ˆ |¡ �nø| j tdH k�r�ˆ
| ƒ\}}}dI| jk�rºˆ| ƒ}ndJ}ˆƒ }ˆ dK ||||¡¡ ˆ|| dLdMgƒ t|  tdN ¡ƒD ]v\}
}ˆ |d ¡ t|jd  ƒ}dO|jk�rFˆ |dO¡ t|jdO ƒ}ndJ}ˆ|dP |
¡ƒ}ˆ dQ ||||¡¡ �qüˆ| |||ƒ ˆ |¡ �nî| j tdR k�r2ˆ| ƒ\}}ˆƒ }ˆ dS |||¡¡ |  tdT ¡D ]@}d| jk�rîˆ| dUƒ ˆ dV |t|jd7 ƒt|jƒ¡¡ �qÔˆ| |||ƒ ˆ |¡ �nL| j tdW k�rpˆ | dX¡ ˆ| ||dYdXt
fdZtfgd@� �n| j td[ k�r®ˆ | dX¡ ˆ| ||d\dXt
fdZtfgd@� �nÐ| j td] k�ræˆ | dX¡ ˆ| ||d^dXt
fgd@� �n˜| j td_ k�r0ˆ | dX¡ ˆ| ||d`datfdbtfdXt
fdZtfgd@� �nN| j tdc k�rRˆ| ||ddƒ �n,| j tde k�rŠˆ | df¡ ˆ| ||dgdft
fgd@� �nô| j tdh k�r¶ˆ| ||didjt
fgd@� �nÈ| j tdk k�rîˆ | dl¡ ˆ| ||dmdlt
fgd@� �n�| j tdn k�	rˆ| ||doˆdp� �nj| j tdq k�	rNˆ| ||drˆdst
fdtt
fd?t
fgdu� �n0| 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�
r0ˆ| ||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@� �nN| j tdˆ k�
rhˆ| ||d‰d€tfd�tfdqtfgd@� �n| j tdŠ k�
r„ˆ| d‹ƒ nút | j ¡jtk�
r¬ˆ| dŒ | j ¡ƒ nÒt| ƒd.k�rl| d. j tdŠ k�rl| d. jd� }| d. jdŽ }|| jk�rˆ| d� |¡ƒ t
t  d�d‘¡ƒ}|| j|< ||fˆ|< | d. j!d k	�rb| jd k�rNd’| _|  j| d. j!7  _| d.= �
q¬ˆ "| ¡ ˆ| ƒ 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)rs   rÃ   r¯   z	sql-groupZSqlGroupWidgetr¼   )rs   r¯   Útablez1{} = new W\TableWidget({}, $page, $auth, {}, {});Z	newrecordZrecordsavedZ	renderrowZtdÚtitlec                 S   s   i | ]\}}|t |ƒ“qS r   )r   )rZ   Úkr=   r   r   r   Ú
<dictcomp>  s   ÿ z._parse_body.<locals>.visit.<locals>.<dictcomp>z_col{}z{}->addColumn({}, {});zaction-columnr¡   z{}->addActionColumn({});zediting-areaZ_editing_areaz{}->setEditingArea({});Úrepeatz2{} = new W\RepeatWidget({}, $page, $auth, {}, {});Zrendernotfoundr   Z_contentz{}->setContentWidget({});rw   Z	_notfoundz{}->setNotFoundWidget({});Zswitchz.{} = new W\SwitchWidget({}, $page, $auth, {});ZcaseÚvaluez_case{}z{}->setCase({}, {});ÚdefaultÚ_defaultz{}->setDefault({});Ztabszuse-urlr¹   rº   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'   ZplaceholderZ
TextWidgetÚtruncateÚHTMLZ
HTMLWidgetÚcurrencyZCurrencyWidgetZtextareaZTextareaWidgetZrowsZcolsZcolorZColorWidgetZpasswordzshow-stringZPasswordWidgetÚdateZ
DateWidgetrR   Zcheckboxr³   ZCheckboxWidgetÚenumZ
EnumWidget)rÂ   ÚlinkZ
LinkWidgetÚhrefÚtarget)rÂ   rs   ZlinkconfirmZLinkconfirmWidgetZbuttonZButtonWidgetZclick)rÂ   rÃ   rJ   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 '{}'.r[   Úfunctionz)Cannot overwrite existing attribute '{}'.l     �Iú5 l     ‚_Ér@   )#r‡   r   rã   rþ   rN   ÚstderrÚwriterR   r*   r3   r4   r�   r:   rC   ÚinsertrÐ   r7   r   rd   r2   re   r"   r€   r   rq   rW   r'   rr   ÚQNameÚ	namespaceÚRAD_NAMESPACEÚrandomZrandintr,   r1   )r-   r¿   rÀ   Z	begin_idxrz   rÄ   r[   rs   r   r¢   r>   Úelemr±   Zcolvarr£   rð   Z	first_tabrì   r¹   r­   rô   rö   r5   rá   rà   )rÅ   râ   rÆ   rÇ   r|   r¤   rÈ   r~   Úpage_attribsr»   r¦   r·   r¸   r«   r½   rª   r²   rž   r“   r   r’   rÉ   rÊ   ÚrootrË   r¥   rÌ   rÍ   r   r   rÒ   ð  s   
 ÿ

ÿÿ
  ÿ

ÿ

ý

þ
   ÿ
ÿ
   ÿ
  ÿ
ÿ
  ÿ


 ÿ
   ÿ   ÿ


 ÿ

ÿ

ÿ

ÿ

 ÿÿ

ÿ

ÿ

ÿ

ÿ

þ

þ

 ÿ

8ÿ

ÿ
"ÿ


z_parse_body.<locals>.visit)F)T)Úsetrµ   )	r
  rè   r’   r	  r   r‚   r¥   r®   r°   r   )$rÅ   râ   rÆ   rÇ   r�   r|   r¤   rÈ   r~   rŠ   rƒ   r}   r‚   r	  r»   r¦   r·   r¸   r«   r½   rª   r²   rž   r“   r˜   r   r’   rÉ   rÊ   r
  rË   r¥   r{   rÒ   rÌ   rÍ   r   Ú_parse_body±   sV    '
  þÿ
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 5 Q R X | ¡ }| | ¡ |j	t
d krptdƒ‚| |d¡ | |d¡ | |d	¡ |S )
NT)ÚschemaÚremove_commentsÚattribute_defaultsrI   )ÚparserZpagezRoot node must be 'page'.rì   z	title-newztitle-breadcrumb)Ú	open_pager  r   Ú	XMLParserrV   rS   r¬   Úgetrootr&   r‡   r�   r
   r7   )r   r¥   r  rU   Útreer
  r   r   r   r  Ò  s    

ÿ
r  c                 C   s¤   t ƒ }t| dtfg|ƒ g }|  td ¡}|d kr6i S |  td ¡}t| ||||||ƒ}| d |¡¡ |d krvd}	n| dd¡ dd¡}
d	|
 }	d
|	fd 	|¡iS )Nzunsaved-noticerè   r‚   z
return {};Z
build_pageú-r­   rY   Zbuild_page_ZprivateÚ
)
r   rv   rq   r   r�   r  rC   rR   rÜ   rL   )r
  r   r¥   Úlangr	  r’   rè   r‚   rz   rÔ   Z	lang_saner   r   r   Ú
parse_pageç  s    r  )rX   )rh   r   rF   rK   Úos.pathr   r  rN   Úlxmlr   Úrad.phpr   r   r   r   r  r�   rP   r§   Ú	Exceptionr
   r   rV   rW   rf   rv   r  r  r  r  r   r   r   r   Ú<module>   s6   P

/
    %