o
    A¨e  ã                   @   s<   d dl Z d dlZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )é    Nc              	   C   s,  t  dt j¡}t  d¡}i }d}g }d}g }|  d¡}	|	D ]v}
d}|
 d¡D ]S}| |¡r/d}t  dd|¡}t  d	d|¡}| ¡ }| ¡ }| |¡}|rtt|ƒr_|dkr_t	||||||ƒ g }t
| d
¡ƒ}| d¡rq| d¡}nd}q&| |¡ q&t|ƒr“|dkr‹t	||||||ƒ g }|r“|  S q|S )a^  
    Parses Planning Center Lyrics and returns an list of verses, where each 
    verse is a dictionary that looks like:
        verse['verse_type']
        verse['verse_number']
        verse['verse_text']
    :param lyrics: Lyrics String from Planning Center
    :theme_name: Video or standard - to decide how many lines each slide should have
    z~^(verse?|v|chorus|c|refreng|bridge|bro|prechorus|instrumental|intro|outro|vamp|breakdown|ending|interlude|tag|misc)\s*(\d*):?$z^{(<.*?>)?END(<.*?>)?}$Ú Fz

Ú
Tz{.*?}+z<.*?>é   é   )ÚreÚcompileÚ
IGNORECASEÚsplitÚsearchÚsubÚrstripÚlstripÚlenÚ	add_verseÚlookup_openlp_verse_typeÚgroupÚappend)ÚlyricsÚ
theme_nameÚverse_marker_patternÚend_marker_patternÚ
type_countÚverse_numberÚverse_linesÚis_end_markerÚoutput_versesÚinput_versesÚverseÚ
verse_typeÚlineÚregex_match© r!   ú)/var/www/bmteknikk.ddns.net/song_tools.pyÚparse_lyrics   sH   




€r#   c                 C   sˆ   i }d|d< d|d< d|d< d|d< d|d< d|d< d	|d
< d|d< d|d< d|d< d|d< d|d< |d }|   ¡ |v rB||   ¡  }|S )z¤
    Provides a lookup table to map from a Planning Center Verse Type
    to an OpenLP verse type.
    :param pco_verse_type: Planning Center Verse Type String
    ÚvÚVERSEÚVERSÚVÚcÚCÚCHORUSÚREFRENGÚpÚ	PRECHORUSÚiÚINTROÚeÚENDINGÚbÚBRIDGEÚBROÚoÚOTHER)Úupper)Úpco_verse_typeÚpco_verse_type_to_openlpÚopenlp_verse_typer!   r!   r"   r   J   s"   r   c                 C   sT  ||vrdn|| d ||< |dkr|n	||v r|| nd}t |ƒ}g }|}t |d ¡}	d}
d}d}d}d}|dk r>|}
n9|	dk rW|d	k rWt |d
 ¡}
|t |d
 ¡ }n |d	krw|d|	d
   }t |d
 ¡}
|t |d
 ¡ }|	d
 }|d	kr”td|› d|
› d|› d|› d|› dt |	¡› ƒ d}t|ƒD ]|}| || ¡ |dkr¾|d d
 dkr½|  t||d |¡ƒ¡ g }nT|dkrß|d d dkrÞ|  t||d |¡ƒ¡ g }d}|d }n3|sø||
kr÷|  t||d |¡ƒ¡ g }d}d}n|s||kr|  t||d |¡ƒ¡ g }d}d}|d }qšt |ƒr(|  t||d |¡ƒ¡ | S )a–  
    Simple utility function that takes verse attributes and adds the verse
    to the output_verses list.
    :param output_verses: The list of verses that will ultimately be returned by 
    the _SplitLyricsIntoVerses function
    :param output_verses: The list to add this verse to
    :param verse_type: The OpenLP Verse Type, like v,c,e, etc...
    :param verse_number: The verse number, if known, like 1, 2, 3, etc.
    :param verse_lines: The parsed verse text returned from _SplitLyricsIntoVerses
    :param type_count: A dictionary holding the count of past types
    :param theme_name: Video or standard. Defines how many lines a slide should have
    r   r   Ú1é   r   Fé   é   é   r   zlines=z slide1=z
 - slide2=z - fullSlides=z	 - lines=z	 and num=Úvideor   T)r   ÚmathÚceilÚprintÚranger   Úcreate_verse_objectÚjoin)r   r   r   r   r   r   Úcountr   ÚlinesÚnumÚlinesSlide1Ú
slide1FullÚlinesSlide2Ú
slide2FullÚ
fullSlidesÚ	linesLeftÚcounterr.   r!   r!   r"   r   d   sn    2€€€


r   c                 C   s   t | ƒt |ƒ S )N©Ústr)r   r   r!   r!   r"   Ú	verse_key¶   s   rS   c                 C   s   | t |ƒ|dœS )N©r   r   Ú
verse_textrQ   rT   r!   r!   r"   rE   ¹   s   ýrE   )r   rA   r#   r   r   rS   rE   r!   r!   r!   r"   Ú<module>   s    GR