o
                         @   s^   d 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j	Z
dS )
z*Cloud SDK markdown document HTML renderer.    )absolute_import)division)unicode_literalsN)devsite_scripts)html_rendererc                       s`   e Zd ZdZ f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  ZS )DevSiteRendererzRenders markdown to DevSiteHTML.

  Devsite-Specific Attributes:
  _opentag: True if <code> tag on Example command is not closed, False otherwise
  c                    s&   t t| j|i | d| _d| _d S )NF )superr   __init___opentag_whole_example)selfargskwargs	__class__ T/tmp/google-cloud-sdk/lib/googlecloudsdk/core/document_renderers/devsite_renderer.pyr
   #   s   
zDevSiteRenderer.__init__c                 C   sj   | j d | j d | jr| j d| j d  | j d tjD ]\}}| j dj||d q#dS )	zRenders an HTML document title.z<html devsite="">
z<head>
z<title>z	</title>
z<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="project_path" value="/sdk/docs/_project.yaml">
<meta name="book_path" value="/sdk/_book.yaml">
z<!-- {comment} -->
{script}
)commentscriptN)_outwrite_titler   SCRIPTSformat)r   r   r   r   r   r   _Title(   s   zDevSiteRenderer._Titlec                 C   sH   d| _ |dkr| jd |  j d7  _ | jdj| ||d dS )zRenders a DevSite heading.

    Args:
      unused_level: The heading level counting from 1.
      heading: The heading text.
    z</dd>
</section>
INFORMATIONz{% dynamic if request.is_tpc %}z{% dynamic endif %}zJ
<section id="{document_id}">
<dt>{heading}</dt>
<dd class="sectionbody">
)document_idheadingN)_headingr   r   r   GetDocumentID)r   unused_levelr   r   r   r   _Heading;   s   
zDevSiteRenderer._Headingc                 C   sj   | j r| jdur| jd dS d| _| jr3d| _| j r%d| _ | jd d| _| jd d| _dS dS )z/Flushes the current collection of Fill() lines.N
Fz</pre>
r   )_example_langr   r   
_paragraph_fill_section_blankr   r   r   r   _FlushP   s   
zDevSiteRenderer._Flushc           	      C   s   dd t || jD }d}d}|D ]/\}}|| j|| 7 }|d| d d| d 7 }|| j|| 7 }|d	| d
 7 }|}q|| j|d 7 }|S )z9Wraps all regex matches from example in tag with classes.c                 S   s   g | ]}|  qS r   )span).0mr   r   r   
<listcomp>a   s    z-DevSiteRenderer.WrapFlags.<locals>.<listcomp>r   r   <z class=" z">z</>N)refinditerr   join)	r   tagmatch_regexcss_classesmatcheswrapped_exampleleft
match_leftmatch_rightr   r   r   	WrapFlags_   s   zDevSiteRenderer.WrapFlagsc                 C   s:   | j d | j | dddg | j d d| _dS )z>Prints full example string with devsite tags to output stream.z<code class="devsite-terminal">r,   z-(-\w+)+flagz</code>
r   N)r   r   r>   r   r*   r   r   r   FlushExamplen   s   
zDevSiteRenderer.FlushExamplec                 C   s   d| _ t|t|  }| }td}t||}| js=d| _d| _d| _	| j
p-d}| jdj||r8dndd	 |rBd| _| jrm|d|}|d
r]|  j|dd 7  _dS |  j|7  _|   d| _dS | jd| | d  dS )zSDisplays line as an indented example.

    Args:
      line: The example line.
    Tz\A\$\s+F   shz1<pre class="prettyprint lang-{lang}{wrap_code}">
z
 wrap-coder   )lang	wrap_code\Nr1   r#   )r)   lenlstripr3   compileboolmatchr$   _in_command_blockr'   r%   r   r   r   subendswithr   r@   )r   lineindentcommand_patternis_start_of_command_examplerC   r   r   r   Exampleu   s4   




zDevSiteRenderer.Examplec                 C   s   || j d kr&d|vsd|v sd|v s|ds|dr&dj||p#|dS |d}|d	 d
kr5|  t|dkrE|d dkrE|d S dj|d ddg|dd  |pX|dS )zRenders an anchor.

    Args:
      target: The link target URL.
      text: The text to be displayed instead of the link.

    Returns:
      The rendered link anchor and text.
    r   /:#zwww.z/..z<a href="{target}">{text}</a>)targettextrF   help   metaz --helpz'<a href="/sdk/{head}/{tail}">{text}</a>	referenceN)headtailrX   )command
startswithrN   r   splitpoprG   r5   )r   rW   rX   target_partsr   r   r   Link   s*   

zDevSiteRenderer.Linkc                 C   s   t dd| jd |S )zAdd global flags links to line if any.

    Args:
      line: The text line.

    Returns:
      line with annoted global flag links.
    z(--[-a-z]+)z3<code><a href="/sdk/{}/reference/#\1">\1</a></code>r   )r3   rM   r   r_   )r   rO   r   r   r   LinkGlobalFlags   s   	zDevSiteRenderer.LinkGlobalFlags)__name__
__module____qualname____doc__r
   r   r"   r+   r>   r@   rS   rd   re   __classcell__r   r   r   r   r      s    )!r   )ri   
__future__r   r   r   r3   &googlecloudsdk.core.document_renderersr   r   HTMLRendererr   r   r   r   r   <module>   s   