
                         v    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	ej                        Z
y)
z*Cloud SDK markdown document HTML renderer.    )absolute_import)division)unicode_literalsN)devsite_scripts)html_rendererc                   R     e Zd ZdZ fdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Z xZS )DevSiteRendererzRenders markdown to DevSiteHTML.

  Devsite-Specific Attributes:
  _opentag: True if <code> tag on Example command is not closed, False otherwise
  c                 H    t        t        | 
  |i | d| _        d| _        y )NF )superr	   __init___opentag_whole_example)selfargskwargs	__class__s      >lib/googlecloudsdk/core/document_renderers/devsite_renderer.pyr   zDevSiteRenderer.__init__#   s&    	/4)4:6:DMD    c                    | j                   j                  d       | j                   j                  d       | j                  r+| j                   j                  d| j                  z   dz          | j                   j                  d       t        j                  D ]1  \  }}| j                   j                  dj                  ||             3 y)	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   s      r   _TitlezDevSiteRenderer._Title(   s    IIOO)*IIOOJ{{
iiooi$++-<=IIOO	< +22
iioo
*
1
1f 2  3r   c                     d| _         |dk(  r0| j                  j                  d       | xj                   dz  c_         | j                  j                  dj                  | j	                  |      |             y)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"   s      r   _HeadingzDevSiteRenderer._Heading;   sh     *DM-
iioo78
mm,,mIIOO	99?**73W :@ :
r   c                 P   | j                   r(| j                  | j                  j                  d       yd| _        | j
                  r_d| _        | j                   r"d| _         | j                  j                  d       d| _        | j                  j                  d       d| _        yy)z/Flushes the current collection of Fill() lines.N
Fz</pre>
r   )_example_langr   r   
_paragraph_fill_section_blankr   s    r   _FlushzDevSiteRenderer._FlushP   s{    }}/
iioodDOzzdm			
#dj
iiooddk r   c                 h   t        j                  || j                        D cg c]  }|j                          }}d}d}|D ]V  \  }}	|| j                  || z  }|d|z   dz   dj	                  |      z   dz   z  }|| j                  ||	 z  }|d|z   dz   z  }|	}X || j                  |d	 z  }|S c c}w )
z9Wraps all regex matches from example in tag with classes.r   r   <z class=" z">z</>N)refinditerr   spanjoin)
r   tagmatch_regexcss_classesmmatcheswrapped_exampleleft
match_leftmatch_rights
             r   	WrapFlagszDevSiteRenderer.WrapFlags_   s    !#[$:M:M!NO!NAqvvx!NGOOD#*
K,,T*==osZ/#((;2GG$NNo,,ZDDoc))od $+ t**4511O Ps   B/c                     | j                   j                  d       | j                   j                  | j                  dddg             | j                   j                  d       d| _        y)z>Prints full example string with devsite tags to output stream.z<code class="devsite-terminal">r7   z-(-\w+)+flagz</code>
r   N)r   r   rB   r   r/   s    r   FlushExamplezDevSiteRenderer.FlushExamplen   sJ    IIOO56IIOODNN6;ABIIOOK Dr   c                    d| _         t        |      t        |j                               z
  }|j                         }t        j                  d      }t        |j                  |            }| j                  sUd| _        d| _        d| _	        | j                  xs d}| j                  j                  dj                  ||rdnd	             |rd| _        | j                  ri|j                  d|      }|j                  d
      r| xj                   |dd z  c_        y| xj                   |z  c_        | j#                          d| _        y| j                  j                  d|z  |z   dz          y)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\Nr3   r(   )r.   lenlstripr5   compileboolmatchr)   _in_command_blockr,   r*   r   r   r   subendswithr   rE   )r   lineindentcommand_patternis_start_of_command_examplerI   s         r   ExamplezDevSiteRenderer.Exampleu   s<    DKYT[[]++F;;=Djj,O"&'<'<T'B"C==dm$d djZZ4d
iioo
>
E
E(C F  ##d  T*d	t	tCRy(t#!&
iioocFlT)D01r   c           	         || j                   d   k7  rEd|vs*d|v s&d|v s"|j                  d      s|j                  d      rdj                  ||xs |      S |j	                  d      }|d	   d
k(  r|j                          t        |      dkD  r|d   dk(  r|dz   S dj                  |d   dj                  dg|dd z         |xs |      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textrL   help   metaz --helpz'<a href="/sdk/{head}/{tail}">{text}</a>	referenceN)headtailr_   )command
startswithrT   r   splitpoprM   r8   )r   r^   r_   target_partss       r   LinkzDevSiteRenderer.Link   s     a 6&=&=V$??5!,33dnf 4  
 <<$LB6!
<1aF!:i4;;!_XX{ml12&667^V <  r   c                 h    t        j                  ddj                  | 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   )r5   rS   r   rf   )r   rU   s     r   LinkGlobalFlagszDevSiteRenderer.LinkGlobalFlags   s6     66>EELLO	
 	 r   )__name__
__module____qualname____doc__r   r   r&   r0   rB   rE   rY   rk   rm   __classcell__)r   s   @r   r	   r	      s7    
&*'2RBr   r	   )rq   
__future__r   r   r   r5   &googlecloudsdk.core.document_renderersr   r   HTMLRendererr	    r   r   <module>rw      s0     1 &  ' 	 B @rm00 rr   