B
    _(              	   @   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ejZejZej	Z	dddZ
dd ZdZdd	iZg Zd
d Zdddddddddg	ZG dd dZdd Zdd ZdS )    NTc             C   sz   |st |}xF|g| D ]8}tj|| }tjtj||}tj|r|S qW |rvttd|  d  t	d dS )Nzfile not found: %s
    )
AssertionErrorospathjoinnormpathexistserror_sysexit)nameinclude_pathZworking_dirZraise_errorZcurrent_pathifull r   k/home/gub/NewGub/gub/target/mingw/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.22/python/book_base.py	find_file'   s    
r   c             C   s"   t ddt ddt dd| S )N>z&gt;<z&lt;&z&amp;)resub)sr   r   r   verbatim_html6   s    r   z
line-widthZaltz[image of music]c             C   s   t |  d S )N)all_formatsappend)Zfmtr   r   r   register_formatP   s    r   Zmultiline_commentZverbatimZverbZlilypond_blockZsingleline_commentZlilypond_fileZincludeZlilypondZlilypondversionc               @   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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 ).BookOutputFormatc             C   s@   d | _ d | _i | _i | _g | _d| _i | _d| _t| _	d| _
d S )Nzps,pngr   z\s*,\s*)formatZdefault_extensionsnippet_resoutputhandled_extensionsZimage_formatsglobal_optionsdocument_languagedefault_snippet_optsdefault_snippet_optionssnippet_option_separator)selfr   r   r   __init__n   s    	zBookOutputFormat.__init__c                s2   t | j   fddtD dd  D  }|S )zList of snippet types (strings)c                s   g | ]}| kr|qS r   r   ).0x)keysr   r   
<listcomp>   s    z<BookOutputFormat.supported_snippet_types.<locals>.<listcomp>c             S   s   g | ]}|t kr|qS r   )snippet_type_order)r,   r-   r   r   r   r/      s    )listr"   r.   r0   )r*   resr   )r.   r   supported_snippet_types   s    z(BookOutputFormat.supported_snippet_typesc             C   s   | j |dS )z#return regex string for snippettypeN)r"   get)r*   Zsnippettyper   r   r   snippet_regexp   s    zBookOutputFormat.snippet_regexpc             C   s
   || j kS )N)r!   )r*   r!   r   r   r   can_handle_format   s    z"BookOutputFormat.can_handle_formatc             C   s
   || j kS )N)r$   )r*   	extensionr   r   r   can_handle_extension   s    z%BookOutputFormat.can_handle_extensionc             C   s   d S )Nr   )r*   Zoption_parserr   r   r   add_options   s    zBookOutputFormat.add_optionsc             C   s   d S )Nr   )r*   r%   r   r   r   process_options   s    z BookOutputFormat.process_optionsc             C   s6   | j d7  _ |jr2| j d7  _ |jdkr2d|_d S )Nz --formats=eps z*--pdf -dinclude-eps-fonts -dgs-load-fonts ZlatexZpdflatex)Zprocess_cmdZ
create_pdfZlatex_program)r*   r%   r   r   r   process_options_pdfnotdefault   s
    
z.BookOutputFormat.process_options_pdfnotdefaultc             C   s   t j|t jS )N)BookSnippetZsnippet_type_to_classr4   ZSnippet)r*   typer   r   r   snippet_class   s    zBookOutputFormat.snippet_classc             C   s   dS )Nr   r   )r*   sourcer   r   r   get_document_language   s    z&BookOutputFormat.get_document_languagec             C   s2   |  || _t| jkr.| |}|r.|| jt< d S )N)r@   r&   
LINE_WIDTHr(   get_line_width)r*   r?   Z
line_widthr   r   r   init_default_snippet_options   s
    

z-BookOutputFormat.init_default_snippet_optionsc             C   s   d S )Nr   )r*   r?   r   r   r   rB      s    zBookOutputFormat.get_line_widthc             C   s   |rt | j|S g S )N)r   splitr)   )r*   Zoption_stringr   r   r   split_snippet_options   s    z&BookOutputFormat.split_snippet_optionsc             C   s   t || jj| jjS )N)r   r%   r   Zoriginal_dir)r*   Zinput_filenamer   r   r   input_fullname   s    
zBookOutputFormat.input_fullnamec             C   s   |S )Nr   )r*   cmdr   r   r   adjust_snippet_command   s    z'BookOutputFormat.adjust_snippet_commandc             C   s   |S )Nr   )r*   Zchunksr   r   r   process_chunks   s    zBookOutputFormat.process_chunksc             C   s   t td dS )NzOutput function not implementedr   )warningr   )r*   basenamesnippetr   r   r   snippet_output   s    zBookOutputFormat.snippet_outputc             C   s   | j |d|  S )Nr   )r#   r4   get_replacements)r*   r=   rL   r   r   r   output_simple   s    zBookOutputFormat.output_simplec             C   s   | j |d| S )Nr   )r#   r4   )r*   r=   Z	variablesr   r   r   output_simple_replacements   s    z+BookOutputFormat.output_simple_replacementsc             C   sP   d}|  }tj|jkrL||d< tj|j|d< |j|d< | j	tj | }|S )Nr   basefilenameext)
rN   book_snippetsZPRINTFILENAMEZoption_dictr   r   rK   rR   rS   r#   )r*   rK   rL   r   Zrepr   r   r   output_print_filename   s    
z&BookOutputFormat.output_print_filenamec             C   s   g S )Nr   )r*   rL   rQ   r   required_filesr   r   r   rV      s    zBookOutputFormat.required_filesc             C   sl   g }|d |krh|j jsht|d }|dkr>||d  n*x(td|d D ]}||d|   qNW |S )Nz.epsr   z.pngz-page%d.png)r%   Zskip_png_checkr<   Zps_page_countr   range)r*   rL   rQ   r   rV   r2   Z
page_countZpager   r   r   required_files_png   s    z#BookOutputFormat.required_files_pngN)__name__
__module____qualname__r+   r3   r5   r6   r8   r9   r:   r;   r>   r@   rC   rB   rE   rF   rH   rI   rM   rO   rP   rU   rV   rX   r   r   r   r   r    m   s,   
r    c             C   sV   dg}d}t | }x0| d|}|dk r*P |d }|| |}qW |t |  |S )z=Return a list of indices indicating the first char of a line.r   r   r   )lenfindr   )r   Znlsstartendr   r   r   r   find_linestarts   s    
r`   c          	   C   s  i }|  }x |D ]}t||||< qW g }d}tdd |D }t| }	d}
xnd }d}x|D ]}|| r|| d |k rd ||< || | ||}|sqf||}|d}|
}x|	| |k r|d7 }qW |d7 }||||||}||f||< || rf|r|| d || d k rf|}|| d }qfW |sT|	t
| |t| |
 P x ||	|
d  krt|
d7 }
qVW || \}}|	t
| |||
d  |	| d ||< |t|jd }qXW |S )Nr   c             S   s   g | ]}|d fqS )Nr   )r,   tr   r   r   r/     s    z*find_toplevel_snippets.<locals>.<listcomp>i   @matchr   )r3   r   compiler5   dictr`   searchr>   r^   r   r<   Z	Substringr\   rb   group)Zinput_stringZ	formatterr%   r2   typesra   ZsnippetsindexfoundZline_startsZline_start_idxfirstZendexr=   mklassr^   Zline_numberZsnipr   r   r   find_toplevel_snippets   sX    




rm   )T)r   r   r   rT   r<   ZlilylibZlyZprogressrJ   r   r   r   rA   r'   r   r   r0   r    r`   rm   r   r   r   r   <module>   s4   
{