B
    0aL                 @   s   d dl mZ d dl mZ d dl mZ d dl mZ d dlZddlmZ ddlm	Z	 G d	d
 d
e
ZG dd de
ZG dd de
Zdd Zdd Zdd ZdS )    )absolute_import)division)print_function)unicode_literalsN   )ast)to_underscoresc               @   s   e Zd Zdd ZdS )SectionsFilec             C   s
   || _ d S )N)sections)selfr
    r   9/usr/lib/gobject-introspection/giscanner/sectionparser.py__init__   s    zSectionsFile.__init__N)__name__
__module____qualname__r   r   r   r   r   r	      s   r	   c               @   s   e Zd Zdd ZdS )Sectionc             C   s   d | _ d | _d | _g | _d S )N)filetitleincludessubsections)r   r   r   r   r   $   s    zSection.__init__N)r   r   r   r   r   r   r   r   r   #   s   r   c               @   s   e Zd Zdd ZdS )
Subsectionc             C   s   || _ g | _d S )N)namesymbols)r   r   r   r   r   r   ,   s    zSubsection.__init__N)r   r   r   r   r   r   r   r   r   +   s   r   c             C   s(  g }d }d }x| D ]}|  }|r| r0q|dkr^t }|| td }|j| q|dkrld }qtd|}|r|jd |_	qtd|}|r|jd |_
qtd|}|r|jd |_qtd|}|rt|jdd }|j| q|d	r|d
rq|j| qW t|S )Nz	<SECTION>z
</SECTION>z<FILE>(?P<contents>.*)</FILE>contentsz<TITLE>(?P<contents>.*)</TITLE>z#<INCLUDE>(?P<contents>.*)</INCLUDE>z<SUBSECTION(?: (?P<name>.*))?>r   <>)rstripisspacer   appendr   r   rematch	groupdictr   r   r   get
startswithendswithr   r	   )linesr
   Zcurrent_sectionZcurrent_subsectionliner!   r   r   r   parse_sections_file1   sJ    
r(   c             C   s   x|j D ]}| d |jd k	r2| d|jf  |jd k	rN| d|jf  |jd k	rj| d|jf  d}x\|jD ]R}|jd k	r| d|jf  n|s| d d}x|jD ]}| |d	  qW qvW qW d S )
Nz
<SECTION>
z<FILE>%s</FILE>
z<TITLE>%s</TITLE>
z<INCLUDE>%s</INCLUDE>
Tz<SUBSECTION %s>
z
<SUBSECTION>
F
)r
   writer   r   r   r   r   r   )fZsections_filesectionZis_first_subsectionZ
subsectionsymbolr   r   r   write_sections_filee   s"    





r.   c       
         s   | j }g   fdd}dd }|dd}x| D ]}t|tjrP|||j q2t|tjtjfr2|j}t	|
dd }|||}||| |||jj
d	d
 x|jD ]}	|||	j qW x|jD ]}	|||	j qW q2W t S )Nc                s0   t  }| |_||_|jtd   | |S )N)r   r   r   r   r   r   )Zfile_r   r,   )r
   r   r   new_section   s    
z+generate_sections_file.<locals>.new_sectionc             S   s   | j d j| d S )Nr   )r   r   r   )r,   Zsymr   r   r   append_symbol   s    z-generate_sections_file.<locals>.append_symbolmainZMain_-. )	namespacevalues
isinstancer   ZFunctionr-   ZClassZ	Interface
gtype_namer   replacelowerZglib_type_structZtarget_ginamemethodsZstatic_methodsr	   )
Ztransformernsr/   r0   Zgeneral_sectionZnoder9   	file_namer,   Zmethr   )r
   r   generate_sections_file|   s&    


r?   )Z
__future__r   r   r   r   r    r5   r   Zutilsr   objectr	   r   r   r(   r.   r?   r   r   r   r   <module>   s   4