
\c           @   s  d  Z  d d l Z d d l Z d d l Z d d l Z d d l Z d d l 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 d d l m Z d d l m Z m Z d d	 l m Z d d
 l m Z d d l m Z m Z m Z d d l m Z d d l  m! Z! m" Z" d d l# m$ Z$ d d l% m& Z& d d l' m( Z( d d l) m* Z* m+ Z+ d d l, m- Z- d d l. m/ Z/ d d l0 m1 Z1 d d l2 m3 Z3 m4 Z4 d d l5 m6 Z6 d d l7 m8 Z8 m9 Z9 d d l: m; Z; d d l< m= Z= d d l> m? Z? m@ Z@ mA ZA d d lB mC ZC mD ZD d d lE mF ZF mG ZG d d lH mI ZI d d lJ mK ZK d d lL mM ZM d d  lN mO ZO mP ZP mQ ZQ d d! lR mS ZS d d" lT mU ZU mV ZV mW ZW mX ZX mY ZY mZ ZZ d d# l[ m\ Z\ d d$ l] m^ Z^ m_ Z_ e` r{d d% la mb Zb mc Zc md Zd me Ze mf Zf mg Zg mh Zh mi Zi mj Zj d d& l# mk Zk d d' l' ml Zl d d( lm mn Zn mo Zo d d) lp mq Zq n  eF   rd d* lr ms Zs et Zu n e` Zu d+ Zv d, Zw e@ jx ey  Zz e j{ d-  Z| d.   Z} d/ e~ f d0     YZ d1 e f d2     YZ d3 e~ f d4     YZ d5 e f d6     YZ d7 e f d8     YZ d9 e& f d:     YZ d; e f d<     YZ d= e f d>     YZ d? e f d@     YZ dA e f dB     YZ e Z dC e f dD     YZ dE   Z dF   Z dG   Z dH   Z dI   Z d S(J   s   
    sphinx.builders.html
    ~~~~~~~~~~~~~~~~~~~~

    Several HTML builders.

    :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
iN(   t   md5(   t   path(   t   nodes(   t	   Publisher(   t   OptionParser(   t   DocTreeInputt   StringOutput(   t   Reader(   t   relative_path(   t	   iteritemst	   text_typet   string_types(   t   cPickle(   t   package_dirt   __display_version__(   t   ENV_PICKLE_FILENAME(   t   Builder(   t   string_classes(   t   RemovedInSphinx20Warningt   RemovedInSphinx30Warning(   t   ImageAdapter(   t   IndexEntries(   t   TocTree(   t   ConfigErrort
   ThemeError(   t   PygmentsBridge(   t   _t   __(   t   js_index(   t   HTMLThemeFactory(   t   jsonimplt   loggingt   status_iterator(   t   boldt	   darkgreen(   t   is_html5_writer_availablet   new_document(   t
   copy_asset(   t   format_date(   t   InventoryFile(   t   patmatcht   Matchert   DOTFILES(   t   inline_all_toctrees(   t   SEPt   os_patht   relative_urit	   ensuredirt   movefilet   copyfile(   t
   htmlescape(   t
   HTMLWritert   HTMLTranslator(	   t   Anyt   Dictt   IOt   Iterablet   Iteratort   Listt   Typet   Tuplet   Union(   t   Sphinx(   t   Config(   t   Domaint   Index(   t   Tags(   t   HTML5Translators   objects.invt
   last_builds   [
]+c         C   sr   t  |  t  r% t t |  j     St  |  t t f  rS t d   |  D  }  n  t t |   j	 d   j
   S(   s   
    Return a stable hash for a Python data structure.  We can't just use
    the md5 of str(obj) since for example dictionary items are enumerated
    in unpredictable order due to hash randomization in newer Pythons.
    c         s   s   |  ] } t  |  Vq d  S(   N(   t   get_stable_hash(   t   .0t   o(    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pys	   <genexpr>[   s    t   utf8(   t
   isinstancet   dictRE   t   listt   itemst   tuplet   sortedR    R
   t   encodet	   hexdigest(   t   obj(    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyRE   Q   s
    t   CSSContainerc           B   s;   e  Z d  Z d   Z d   Z d   Z d   Z d   Z RS(   s   The container for stylesheets.

    To support the extensions which access the container directly, this wraps
    the entry with Stylesheet class.
    c         C   sH   t  | t  r( t t |   j |  n t t |   j t |   d  S(   N(   RI   t
   Stylesheett   superRR   t   append(   t   selfRQ   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyRU   e   s    c         C   sd   t  j d t d d t | t  rA t t |   j | |  n t t |   j | t |   d  S(   NsI   builder.css_files is deprecated. Please use app.add_stylesheet() instead.t
   stackleveli   (   t   warningst   warnR   RI   RS   RT   RR   t   insert(   RV   t   indexRQ   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyRZ   l   s
    	c         C   s8   t  j d t d d x | D] } |  j |  q Wd  S(   NsI   builder.css_files is deprecated. Please use app.add_stylesheet() instead.RW   i   (   RX   RY   R   RU   (   RV   t   othert   item(    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   extendv   s    	c         C   s8   t  j d t d d x | D] } |  j |  q W|  S(   NsI   builder.css_files is deprecated. Please use app.add_stylesheet() instead.RW   i   (   RX   RY   R   RU   (   RV   R\   R]   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   __iadd__~   s
    	c         C   s   t  |   } | | 7} | S(   N(   RR   (   RV   R\   t   ret(    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   __add__   s    
(   t   __name__t
   __module__t   __doc__RU   RZ   R^   R_   Ra   (    (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyRR   _   s   		
			RS   c           B   s#   e  Z d  Z d Z d Z d   Z RS(   s   A metadata of stylesheet.

    To keep compatibility with old themes, an instance of stylesheet behaves as
    its filename (str).
    c         O   sy   t  j |  |  } | | _ | | _ | j j d d  | j j d d  | ru | d | j d <| d | j d <n  | S(   Nt   relt
   stylesheett   types   text/cssi    i   t   title(   R
   t   __new__t   filenamet
   attributest
   setdefault(   t   clsRj   t   argsRk   RV   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyRi      s    		N(   Rb   Rc   Rd   t   NoneRk   Rj   Ri   (    (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyRS      s   t   JSContainerc           B   s2   e  Z d  Z d   Z d   Z d   Z d   Z RS(   s%   The container for JavaScript scripts.c         C   s3   t  j d t d d t t |   j | |  d  S(   NsI   builder.script_files is deprecated. Please use app.add_js_file() instead.RW   i   (   RX   RY   R   RT   Rp   RZ   (   RV   R[   RQ   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyRZ      s    	c         C   s8   t  j d t d d x | D] } |  j |  q Wd  S(   NsI   builder.script_files is deprecated. Please use app.add_js_file() instead.RW   i   (   RX   RY   R   RU   (   RV   R\   R]   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR^      s    	c         C   s8   t  j d t d d x | D] } |  j |  q W|  S(   NsI   builder.script_files is deprecated. Please use app.add_js_file() instead.RW   i   (   RX   RY   R   RU   (   RV   R\   R]   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR_      s
    	c         C   s   t  |   } | | 7} | S(   N(   Rp   (   RV   R\   R`   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyRa      s    
(   Rb   Rc   Rd   RZ   R^   R_   Ra   (    (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyRp      s
   				t
   JavaScriptc           B   s#   e  Z d  Z d Z d Z d   Z RS(   s   A metadata of javascript file.

    To keep compatibility with old themes, an instance of javascript behaves as
    its filename (str).
    c         K   s;   t  j |  |  } | | _ | | _ | j j d d  | S(   NRg   s   text/javascript(   R
   Ri   Rj   Rk   Rl   (   Rm   Rj   Rk   RV   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyRi      s
    		N(   Rb   Rc   Rd   Ro   Rk   Rj   Ri   (    (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyRq      s   t	   BuildInfoc           B   sJ   e  Z d  Z e d    Z d d g  d  Z d   Z d   Z d   Z	 RS(   s   buildinfo file manipulator.

    HTMLBuilder and its family are storing their own envdata to ``.buildinfo``.
    This class is a manipulator for the file.
    c         C   s   y | j    } | d j   d k s+ t  | d j d  sD t  | d j d  s] t  t   } | d j   d j   | _ | d j   d j   | _ | SWn) t	 k
 r } t
 t d  |   n Xd  S(	   Ni    s   # Sphinx build info version 1i   s   config: i   s   tags: i   s   build info file is broken: %r(   t	   readlinest   rstript   AssertionErrort
   startswithRr   t   splitt   stript   config_hasht	   tags_hasht	   Exceptiont
   ValueErrorR   (   Rm   t   ft   linest
   build_infot   exc(    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   load   s    	c         C   sk   d |  _  d |  _ | rI t d   | j |  D  } t |  |  _  n  | rg t t |   |  _ n  d  S(   Nu    c         s   s!   |  ] } | j  | j f Vq d  S(   N(   t   namet   value(   RF   t   c(    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pys	   <genexpr>   s    (   Ry   Rz   RJ   t   filterRE   RN   (   RV   t   configt   tagst   config_categoriest   values(    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   __init__   s    		c         C   s"   |  j  | j  k o! |  j | j k S(   N(   Ry   Rz   (   RV   R\   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   __eq__   s    c         C   s   |  | k S(   N(    (   RV   R\   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   __ne__  s    c         C   s!   | j  d |  j |  j f  d  S(   Ns   # Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: %s
tags: %s
(   t   writeRy   Rz   (   RV   R}   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   dump  s    	N(
   Rb   Rc   Rd   t   classmethodR   Ro   R   R   R   R   (    (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyRr      s   		t   StandaloneHTMLBuilderc           B   sN  e  Z d  Z d Z d Z e d  Z e Z e Z	 d Z
 d Z e Z e Z e Z d d d d g Z e Z e Z d Z e Z e Z e Z e Z e Z e Z e Z d5 Z g  Z d5 Z d	   Z  d
   Z! d   Z" d   Z# d   Z$ d   Z% d   Z& d   Z' d   Z( d   Z) d   Z* e+ d    Z, e+ d    Z- d   Z. d   Z/ d   Z0 d   Z1 d   Z2 d   Z3 d   Z4 d   Z5 d   Z6 d   Z7 d    Z8 d!   Z9 d"   Z: d#   Z; d$   Z< d%   Z= d&   Z> d'   Z? d(   Z@ d)   ZA d*   ZB e d+  ZC d,   ZD d-   ZE d5 d.  ZF d/ d5 d5 d0  ZG d1   ZH d2   ZI d3   ZJ d4   ZK RS(6   s&   
    Builds standalone HTML docs.
    t   htmls!   The HTML pages are in %(outdir)s.s   .htmls   image/svg+xmls	   image/pngs	   image/gifs
   image/jpegs   searchindex.jsc         C   s2   t  t |   j |  t   |  _ t   |  _ d  S(   N(   RT   R   R   RR   t	   css_filesRp   t   script_files(   RV   t   app(    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR   5  s    c         C   s   |  j    |  _ d |  _ i  |  _ d  |  _ |  j   |  j   |  j   |  j	   |  j
 j d  k	 rv |  j
 j |  _ n  |  j
 j d  k	 r |  j
 j |  _ n |  j |  _ |  j d d  |  _ |  j
 j r t r |  j j d t j  n  d  S(   Nt   _imagest	   use_indexR   su   html_experimental_html5_writer is set, but current version is old. Docutils' version should be 0.13 or newer, but %s.(   t   create_build_infoR   t   imagedirt
   secnumbersRo   t   current_docnamet   init_templatest   init_highlightert   init_css_filest   init_js_filesR   t   html_file_suffixt
   out_suffixt   html_link_suffixt   link_suffixt   get_builder_configR   t   html_experimental_html5_writert   html5_readyR   RY   t   docutilst   __version__(   RV   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   init?  s"    			



c         C   s   t  |  j |  j d g  S(   NR   (   Rr   R   R   (   RV   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR   \  s    c         C   s   g  |  j  j D]$ } t j | |  j  j d d  ^ q t j t d |  j  j d d  t j t j d |  j  j d  g } x! | D] } t j |  r~ | Sq~ Wd  S(   Nt   LC_MESSAGESs	   sphinx.jst   locales   share/sphinx/locale(
   R   t   locale_dirsR   t   joint   languageR   t   syst   prefixt   isfileRo   (   RV   t   dirt
   candidatest   jsfile(    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   _get_translations_js`  s    1	c         C   s   |  j  j |  j  j f S(   N(   R   t
   html_themet   html_theme_options(   RV   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   get_theme_configo  s    c         C   sf   t  |  j  } |  j   \ } } | j |  |  _ | j   |  _ |  j   |  j j	 |  |  j  d  S(   N(
   R   R   R   t   createt   themet   copyt   theme_optionst   create_template_bridget	   templatesR   (   RV   t   theme_factoryt	   themenamet   themeoptions(    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR   s  s    
c         C   sa   |  j  j d  k	 r! |  j  j } n* |  j rE |  j j d d d  } n d } t d |  |  _ d  S(   NR   t   pygments_stylet   nonet   sphinxR   (   R   R   Ro   R   t
   get_configR   t   highlighter(   RV   t   style(    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR   |  s    	c         C   sg   x- |  j  j j D] \ } } |  j | |  q Wx0 |  j d d  D] \ } } |  j | |  qC Wd  S(   NR   R   (   R   t   registryR   t   add_css_fileR   (   RV   Rj   t   attrs(    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR     s    c         K   s>   d | k r! t  j d |  } n  |  j j t | |   d  S(   Ns   ://t   _static(   t	   posixpathR   R   RU   RS   (   RV   Rj   t   kwargs(    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR     s    c         C   s   |  j  d  |  j  d  |  j  d  |  j  d  x- |  j j j D] \ } } |  j  | |  qD Wx0 |  j d d  D] \ } } |  j  | |  qw W|  j j r |  j   r |  j  d  n  d  S(   Ns	   jquery.jss   underscore.jss   doctools.jss   language_data.jst   js_filesR   s   translations.js(   t   add_js_fileR   R   R   R   R   R   R   (   RV   Rj   R   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR     s    c         K   sD   | r' d | k r' t  j d |  } n  |  j j t | |   d  S(   Ns   ://R   (   R   R   R   RU   Rq   (   RV   Rj   R   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR     s    c         C   s<   |  j  j } | d  k r$ |  j } n  | r4 t r4 t St Sd  S(   N(   R   R   Ro   t   default_html5_translatorR   RC   R4   (   RV   t   use_html5_writer(    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   default_translator_class  s    c         C   s   |  j  d d  } | d  k	 r" | St |  j j j  } t |  d k rQ | d St |  d k rx | j d  | d Sd  Sd  S(   Nt   math_rendererR   i   i    i   t   mathjax(   R   Ro   RK   R   R   t   html_inline_math_rendererst   lent   remove(   RV   R   t	   renderers(    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   math_renderer_name  s    c   	      c   s  yf t  t j |  j d    } t j |  } Wd  QX|  j | k re x |  j j D] } | VqR Wd  SWn9 t	 k
 r } t
 j t d  |  n t k
 r n X|  j r |  j j   } n d } x |  j j D] } | |  j j k r | Vq n  |  j |  } y t j |  } Wn t k
 r.d } n Xy< t t j |  j j |   |  } | | k rj| Vn  Wq t k
 r~q Xq Wd  S(   Ns
   .buildinfos"   Failed to read build info file: %ri    (   t   openR   R   t   outdirRr   R   R   t   envt
   found_docsR|   t   loggert   warningR   t   IOErrorR   t   newest_template_mtimet   all_docst   get_outfilenamet   getmtimeR{   t   maxt   doc2patht   EnvironmentError(	   RV   t   fpt	   buildinfot   docnameR   t   template_mtimet
   targetnamet   targetmtimet   srcmtime(    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   get_outdated_docs  s<    		
	c         C   s   |  j  j |  j  j S(   N(   R   t   html_extra_patht   html_static_path(   RV   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   get_asset_paths  s    c         C   s   | d k r i d d 6St d  } | j |  |  j d k rp t d t d t  |  _ |  j j d d d  n  |  j } t   | _	 t
 |   | _ | j d i d	 d
 6d  | j | d  | j d d  | j   | j j S(   s$   Utility: Render a lone doctree node.t    t   fragments   <partial node>t   source_classt   destination_classt
   standalonet   restructuredtextt	   pseudoxmlt   unicodet   output_encodingN(   Ro   R$   RU   t
   _publisherR   R   R   t   set_componentst   DoctreeReadert   readerR3   t   writert   process_programmatic_settingst
   set_sourcet   set_destinationt   publisht   parts(   RV   t   nodet   doct   pub(    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   render_partial  s&    	
c      7   C   s  d  |  _ |  j r d d l m } |  j j p7 |  j j } | sI d } n  | |  j | |  j j	 |  j j
  |  _ |  j |  n  t |   |  _ t d |  j j d |  j f d t  j   |  _ t |  j j  |  j _ g  |  _ |  j j } | rx t |  j j  D] } d  } |  j j | } x | j D]} } d | j | j f } t | t  rk| | k rkq+qkn  | |  j   \ }	 }
 |	 r+|  j j | | |	 |
 f  q+q+WqWn  |  j j  } | d  k	 rt! | pt" d  d	 |  j j |  _# n	 d  |  _# |  j j$ rt% j& |  j j$  p"d
 } |  j j' rFt% j& |  j j'  pId
 } t |  j j( t)  swt* j+ t, d   n  |  j j-   |  _. g  } |  j/ r| j d t" d  d t" d  f  n  xH |  j D]= \ } } }	 }
 | j0 r| j | | j1 d
 | j0 f  qqW|  j j2 d  k	 r,|  j j2 } n' |  j3 rM|  j3 j4 d d  } n d } t5 d |  j6 d |  j j7 d t8 j9 d
 |  j j:  d |  j j; d |  j# d |  j j< d |  j j= d |  j j( d |  j j> d |  j j? d |  j j@ d |  j jA d |  j jB d  |  j jC d! |  j jD d" |  jE d# |  jF d	 |  j j d$ |  jG d% tH d& | d' | d( |  j d) g  d* | d+ | d, |  j jI ovtJ  |  _K |  j3 r|  jK jL d-   tM |  j3 jN |  jO   D  n  |  jK jL |  j jP  d  S(.   Ni(   t   IndexBuildert   ent   defaultst
   componentst   read_config_filess   %s-%ss	   %b %d, %YR   R   s5   html_use_opensearch config value must now be a stringt   genindexs   General Indext   IR[   R   Rf   s   default.csst   embeddedt   projectt   releaset   versiont   last_updatedt	   copyrightt
   master_doct   use_opensearcht	   docstitlet
   shorttitlet   show_copyrightt   show_sphinxt
   has_sourcet   show_sourcet   sourcelink_suffixt   file_suffixR   R   t   sphinx_versionR   t   rellinkst   buildert   parentst   logot   favicont   html5_doctypec         s   s%   |  ] \ } } d  | | f Vq d S(   t   theme_N(    (   RF   t   keyt   val(    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pys	   <genexpr>|  s    (Q   Ro   t   indexert   searcht   sphinx.searchR	  R   t   html_search_languageR   R   t   html_search_optionst   html_search_scorert   load_indexerR3   t	   docwriterR   t   settingst   Truet   get_default_valuest   docsettingst   boolt   html_compact_listst   compact_listst   domain_indicest   html_domain_indicesRN   t   domainst   indicesR   RI   RK   t   generateRU   t   html_last_updated_fmtR&   R   R  t	   html_logoR   t   basenamet   html_favicont   html_use_opensearchR   R   R   R   t   collect_relationst	   relationsR   t	   shortnamet	   localnamet
   html_styleR   R   RJ   R  R  t   return_codes_ret   subR  R  R  R  t
   html_titlet   html_short_titlet   html_show_copyrightt   html_show_sphinxt   html_copy_sourcet   html_show_sourcelinkt   html_sourcelink_suffixR   R   R   R   R   R   t   globalcontextt   updateR	   t   get_optionsR   t   html_context(   RV   t   docnamesR	  t   langt   indices_configt   domain_namet   domaint   indexclst	   indexnamet   contentt   collapset   lufmtR$  R%  R!  t	   stylename(    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   prepare_writing  s    							!		(										#c         C   s9  d } } g  } |  j d } |  j j |  } |  j j }	 | r | d r yd i |  j | | d  d 6|  j |	 | d  d d 6} | j | d | d d t	 d  f  Wq t
 k
 r d } q Xn  | r^| d r^yd i |  j | | d  d 6|  j |	 | d  d d 6} | j | d | d d t	 d	  f  Wq^t
 k
 rZd } q^Xn  x | r| d
 ryD | j i |  j | | d
  d 6|  j |	 | d
  d d 6 Wn t
 k
 rn X|  j j | d
  } qaW| r| j   n  | j   |  j j j |  }
 |
 r.|  j |
  d p1d }
 t j |  j j |   d } |  j j r| | } | |  j j k r| |  j j 7} qn d } |  j j j |  } t |  j  j | |   } |  j |  d } t d | d | d | d |
 d | d | d | d | d | d | d |  j j | d k d |  S(   s1   Collect items for the template context of a page.R!  i   t   linkRh   t   Nt   nexti   t   Pt   previousi    R   R   R#  t   prevt   metat   bodyt   metatagst
   sourcenamet   toct   display_toct   page_source_suffixN(   Ro   RQ  RD  t   getR   t   titlest   get_relative_uriR  RU   R   t   KeyErrort   popt   reverset
   longtitlesR   t   splitextR   R   RN  RP  t   metadataR   t   get_toc_forRJ   t   toc_num_entries(   RV   R   Rh  Ri  Rf  Rc  R#  R!  t   relatedRo  Rh   t   source_suffixRj  Rg  t   self_tocRk  (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   get_doc_context  sp    
++$

c         C   s   t  d d  } |  j | _ |  j j j | i   |  _ |  j j j | i   |  _ t	 |  j
 |  d  |  _ t	 |  j
 |  d  |  _ | |  _ |  j j | |  |  j j   |  j j d } |  j j } |  j | | |  } |  j | | d | d  S(   Nt   encodings   utf-8R   t
   _downloadsR   t	   event_arg(   R   R5  R2  R   t   toc_secnumbersRn  R   t   toc_fignumberst
   fignumbersR.   t   get_target_urit   imgpatht   dlpathR   R1  R   t   assemble_partsR  t
   clean_metaR|  t   handle_page(   RV   R   t   doctreet   destinationRh  Ri  t   ctx(    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt	   write_doc  s    	c         C   sv   t  |  j |  |  j  |  _ |  j |  |  j j j |  } | rY |  j |  d p\ d } |  j	 | | |  d  S(   NRh   R   (
   R.   R  R   R  t   post_process_imagesR   Rt  Rn  R  t
   index_page(   RV   R   R  Rh   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   write_doc_serialized  s
    c         C   s   |  j  j |  j  |  j  j |  j  |  j  j |  j  |  j  j |  j  |  j  j |  j  |  j  j |  j  |  j  j |  j  |  j	   d  S(   N(
   t   finish_taskst   add_taskt   gen_indicest   gen_additional_pagest   copy_image_filest   copy_download_filest   copy_static_filest   copy_extra_filest   write_buildinfot   handle_finish(   RV   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   finish  s    c         C   sP   t  j t t d   d d |  j r5 |  j   n  |  j   t  j d  d  S(   Ns   generating indices...t   nonli   R   (   R   t   infoR!   R   R   t   write_genindext   write_domain_indices(   RV   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR    s
    	
c         C   sU  xG |  j  j d  D]3 } x* | D]" \ } } } |  j | | |  q  Wq Wt j t t d   d d xJ |  j j j	   D]6 \ } } t j d | d d |  j | i  |  q| W|  j
 r t j d d d |  j d i  d  n  |  j j rD|  j
 rDt j d	 d d t j |  j d
 d  } |  j d i  d d | n  t j d  d  S(   Ns   html-collect-pagess   writing additional pages...R  i   t    s    searchR+  s   search.htmls    opensearchR   s   opensearch.xmlt
   opensearcht   outfilenameR   (   R   t   emitR  R   R  R!   R   R   t   html_additional_pagesRL   R+  RB  R   R   R   (   RV   t   pagelistt   pagenamet   contextt   templatet   fn(    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR    s    	c   	      C   s1  t  |  j  j |   } g  } x1 | D]) \ } } | j t d   | D   q% Wt d | d | d |  j j  } t j	 d d d |  j j r|  j
 d | d	  |  j
 d
 | d  xr t | |  D]K \ \ } } } i | d 6| d 6| d 6| d 6} |  j
 d | | d  q Wn |  j
 d | d  d  S(   Nc         s   s.   |  ]$ \ } \ } } } d  t  |  Vq d S(   i   N(   R   (   RF   R   t   subitems(    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pys	   <genexpr>'  s   t   genindexentriest   genindexcountst   split_indexs	    genindexR  i   R  s   genindex-split.htmls   genindex-alls   genindex.htmlR(  t   entriest   counts	   genindex-s   genindex-single.html(   R   R   t   create_indexRU   t   sumRJ   R   t   html_split_indexR   R  R  t   zip(	   RV   R  t   indexcountst   _kR  t   genindexcontextR(  R  R  (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR     s*    "
c         C   sl   xe |  j  D]Z \ } } } } t d | j d | d |  } t j d | d d |  j | | d  q
 Wd  S(   Nt
   indextitleR\  t   collapse_indexR  R  i   s   domainindex.html(   R9  RJ   RF  R   R  R  (   RV   R[  RZ  R\  R]  t   indexcontext(    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR  >  s    		c         C   s  |  j  r t |  j j  j } t t j |  j |  j	   x t
 |  j  t d  d t |  j   |  j j d | D] } |  j  | } y5 t t j |  j |  t j |  j |  j	 |   Wqq t k
 r } t j t d  t j |  j |  |  qq Xqq Wn  d  S(   Ns   copying images... t   brownt   stringify_funcs   cannot copy image file %r: %s(   t   imagesR   R   R   t   get_original_image_uriR/   R   R   R   R   R    R   R   t	   verbosityR1   t   srcdirR{   R   R   (   RV   R  t   srct   destt   err(    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR  I  s    	 c            s    f d   }   j  j rt t j   j d   x t   j  j t d  d t   j  j    j	 j
 d | D] } yY t j   j d   j  j | d  } t t j |   t t j   j |  |  Wqq t k
 r} t j t d  t j   j |  |  qq Xqq Wn  d  S(   Nc            s   t    j |   S(   N(   R   R  (   R}   (   RV   (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt
   to_relpath[  s    R~  s   copying downloadable files... R  R  i   s$   cannot copy downloadable file %r: %s(   R   t   dlfilesR/   R   R   R   R    R   R   R   R  t   dirnameR1   R  R   R   R   (   RV   R  R  R  R  (    (   RV   s3   lib/python2.7/site-packages/sphinx/builders/html.pyR  Y  s    & c         C   s  yt  j t t d   d t t t j |  j d   t	 t j |  j d d  d   } | j
 |  j j    Wd  QX|  j j d  k	 r |  j   } | r t | t j |  j d d   q n  |  j d  k	 r|  j j   } | rt | t j |  j d d   qn  |  j j   } |  j d  k	 rD| j |  j j    n  |  j rxj |  j j   d  d  d  D]I } t j | d	  } t | t j |  j d  d
 t d | d |  j qjWn  t |  j j d g  } x |  j j D]t } t j |  j  |  } t j! |  s&t  j" t d  |  qn  t | t j |  j d  | d | d |  j qW|  j j# rt j$ |  j j#  } t j |  j d |  }	 t j% t j |  j  |  j j#   st  j" t d  |  j j#  qt j% |	  st t j |  j  |  j j#  |	  qn  |  j j& rt j$ |  j j&  }
 t j |  j d |
  } t j% t j |  j  |  j j&   st  j" t d  |  j j&  qt j% |  st t j |  j  |  j j&  |  qn  t  j d  Wn) t' k
 r} t  j" t d  |  n Xd  S(   Ns   copying static files... R  R   s   pygments.csst   ws   translations.jss   _stemmer.jsit   statict   excludedR  t   renderers   **/.*s(   html_static_path entry %r does not exists   logo file %r does not exists   favicon file %r does not existt   dones   cannot copy static file %r((   R   R  R!   R   R3  R/   R   R   R   R   R   R   t   get_stylesheetR   R   Ro   R   R1   R*  t   get_js_stemmer_rawcodeRQ  R   RR  t   context_for_searchtoolR   t   get_theme_dirsR%   R*   R   R)   t   exclude_patternsR   t   confdirt   existsR   R?  R@  R   RA  R   (   RV   R}   R   R  t
   theme_patht   entryR  t   static_patht   logobaset
   logotargett   iconbaset
   icontargetR  (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR  l  sd    $%	#!$$c         C   s   y t  j t t d   d t t |  j j  } xg |  j j D]Y } t	 j
 |  j |  } t	 j |  s t  j t d  |  qA n  t | |  j |  qA Wt  j t d   Wn) t k
 r } t  j t d  |  n Xd  S(   Ns   copying extra files... R  s'   html_extra_path entry %r does not existR  s   cannot copy extra file %r(   R   R  R!   R   R3  R)   R   R  R   R   R   R  R  R   R%   R   R   (   RV   R  t
   extra_pathR  R  (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR    s    c         C   sk   y; t  t j |  j d  d   } |  j j |  Wd  QXWn) t k
 rf } t j t	 d  |  n Xd  S(   Ns
   .buildinfoR  s#   Failed to write build info file: %r(
   R   R   R   R   R   R   R   R   R   R   (   RV   R   R   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR    s
    !c         C   s   |  j  r |  j  j   n  d  S(   N(   R   t   cleanup(   RV   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR    s    	c            s   t  j |  |  |  j j r |  j r x | j t j  D]   d
 } t   f d   | D  s8 t   j	 t j
  r| q8 n    d } t j
 d d d t } | |  j k r t j |  j |  j |  | d <n
 | | d <  j |  | j    q8 Wn  d	 S(   sl   Pick the best candidate for an image and link down-scaled images to
        their high res version.
        t   scalet   widtht   heightc         3   s   |  ] } |   k Vq d  S(   N(    (   RF   R(  (   R  (    s3   lib/python2.7/site-packages/sphinx/builders/html.pys	   <genexpr>  s    t   uriR   t   internalt   refuriN(   R  R  R  (   R   R  R   t   html_scaled_image_linkt   traverseR   t   imaget   anyRI   t   parentt	   referenceR3  R  R   R   R  t   replace_selfRU   (   RV   R  t
   scale_keysR  R  (    (   R  s3   lib/python2.7/site-packages/sphinx/builders/html.pyR    s    

c         C   s   t  |  j j  t  |  } yr t j |  j |  j  } |  j r[ t j	 | d d d } n t	 | d  } |  |  j
 j | |  j  Wd  QXWn6 t t t f k
 r | r t j t d   q n X|  j
 j |  d  S(   Nt   rR}  s   utf-8t   rbsc   search index couldn't be loaded, but not all documents will be built: the index will be incomplete.(   t   setR   R   R   R   R   t   searchindex_filenamet   indexer_dumps_unicodet   codecsR   R*  R   t   indexer_formatR   t   OSErrorR|   R   R   R   t   prune(   RV   RU  t   keept   searchindexfnR}   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR0    s    	 c         C   s{   |  j  d  k	 rw | rw |  j j | d d  } y |  j  j | | | |  Wqw t k
 rs |  j  j | | |  qw Xn  d  S(   Nt   base(   R*  Ro   R   R   t   feedt	   TypeError(   RV   R  R  Rh   Rj   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR    s    c         K   sE   d | k r t  | d <n  |  j t |  j  j | |  | |   d S(   Nt   includehiddenR   (   t   FalseR  R   R   t   get_toctree_for(   RV   R   R]  t   kwds(    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   _get_local_toctree  s    c         C   s    t  j |  j t |  |  j  S(   N(   R   R   R   R-   R   (   RV   R  (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR     s    c         C   s  d   } d  } d  } d  } |  j j d k r yM |  j j j d d  } | ry g  | j d  D] } | j   ^ q^ } n  Wq t k
 r d d d d	 d
 g } q XnI |  j j d d d   } | r g  | j d  D] } | j   ^ q } n  |  j	 d d  }	 x~ t
 |	  D]p \ }
 } t | |
  r| ro| |
  ro| |  rt j t d  | | |
  qqqon  |
 } | } qqW| d  k rn4 t | t  r| } d  } t j d t d d n  | | d <| | d <d  S(   Nc            s   t    f d   d D  S(   Nc         3   s   |  ] } |   k Vq d  S(   N(    (   RF   t   char(   t   pattern(    s3   lib/python2.7/site-packages/sphinx/builders/html.pys	   <genexpr>  s    s   *?[(   R  (   R  (    (   R  s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   has_wildcard  s    t	   alabasterR   t   sidebarst   ,s
   about.htmls   navigation.htmls   relations.htmls   searchbox.htmls   donate.htmlR   s8   page %s matches two patterns in html_sidebars: %r and %rs}   Now html_sidebars only allows list of sidebar templates as a value. Support for a string value will be removed at Sphinx-2.0.RW   i   t   customsidebar(   Ro   R   R   R   Rn  Rw   Rx   R{   R   R   R	   R(   R   R   R   RI   R   RX   RY   R   (   RV   R  R  R  R  t   matchedR  t   theme_default_sidebarsR   t   html_sidebarsR  t   patsidebars(    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   add_sidebars  sF    	/	+		
c         C   s   | |  j  S(   N(   R   (   RV   R   t   typ(    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR  O  s    s	   page.htmlc            s   j  j   }   | d <| d < j j | d < j    } | j d d  d }  j j r t j  j j    j	  | d <n
 d  | d <t |  f d    | d	 < f d
   } | | d < f d   }	 |	 | d < f d   }
 |
 | d <   f d   | d < j   |  | j |   j   | | |   j j d   | | |  } | rr| } n  y  j j | |  } WnV t k
 rt j t d     d  St k
 r} t t d    | f   n X| s j    } n  t t j |   y6 t j | d | d d   } | j |  Wd  QXWn2 t  t! f k
 ry} t j t d  | |  n X j" r| j# d  rt j  j$ d t% | d   } t t j |   t&  j' j(    |  n  d  S(   NR  t   current_page_nameR}  t   #i   i    t   pageurlc            sf   | r d |  k r |  S| s.   j  |   }  n  t | |   p@ d } | d k rb   j rb | } n  | S(   Ns   ://R	  (   R  R.   t   allow_sharp_as_current_path(   t   otherurit   resourcet   baseuriR  (   RV   (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   pathtoe  s    	R  c            s   g  } xS t  |  j  D]B } |  j | } | d  k	 r | j d | t | t  f  q q W| j d   |  j d t  d d j |  S(   Ns   %s="%s"s	   href="%s"R  s   <link %s />R  (   RN   Rk   Ro   RU   R2   R3  Rj   R   (   t   cssR   R(  R   (   R  (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   css_tagr  s    ' R  c            sU   |    j  j k r t S|  d k r/   j r/ t S|  d k rQ   j d d  rQ t St S(   NR+  R  R   R   (   R   R   R3  R+  R   R  (   R   (   RV   (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   hasdoc}  s    R  c             s*   t  j d t d d   j |  |   d S(   s!   Simple warn() wrapper for themes.sC   The template function warn() was deprecated. Use warning() instead.RW   i   R   (   RX   RY   R   (   Rn   R   (   RV   (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyRY     s    	RY   c             s    j    |   S(   N(   R  (   t   kw(   R  RV   (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   <lambda>  s    t   toctrees   html-page-contexts   a Unicode error occurred when rendering the page %s. Please make sure all config values that contain non-ASCII content are Unicode strings.s6   An error happened in rendering the page %s.
Reason: %rR  t   xmlcharrefreplaces   error writing file %s: %sRj  t   _sources()   RQ  R   R   t   html_output_encodingR  t   rsplitt   html_baseurlR   R   R   Ro   R  R  RR  t   update_page_contextR   t   emit_firstresultR   t   rendert   UnicodeErrorR   R   R   R{   R   R   R/   R   R  R  R   R   R   R  t
   copysourceRn  R   R-   R1   R   R   (   RV   R  t   addctxt   templatenameR  R  R  t   default_baseuriR  R  RY   t   newtmplt   outputR   R}   R  t   source_name(    (   R  R  RV   s3   lib/python2.7/site-packages/sphinx/builders/html.pyR  S  s^    

	
	

	c         C   s   d  S(   N(    (   RV   R  R!  R  R  (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR    s    c         C   s6   |  j  r |  j j |  j  n  |  j j |  j  d  S(   N(   R*  R  R  t   dump_search_indext   dump_inventory(   RV   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR    s    	c         C   s[   t  j t t d   d t t j t j |  j	 t
  |  j |   t  j t d   d  S(   Ns   dumping object inventory... R  R  (   R   R  R!   R   R3  R'   R   R   R   R   t   INVENTORY_FILENAMER   (   RV   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR'    s    %c         C   s   t  j t t d  |  j j    d t |  j j |  j j	  t
 j |  j |  j  } |  j r t j | d d d d } n t | d d  } |  |  j j | |  j  Wd  QXt | d |  t  j t d   d  S(	   Ns   dumping search index in %s ... R  s   .tmpR  R}  s   utf-8t   wbR  (   R   R  R!   R   R*  t   labelR3  R  R   R   R   R   R   R  R  R  R   R   R  R0   (   RV   R  R}   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR&    s    	N(L   Rb   Rc   Rd   R   t   formatR   t   epilogR3  R  t   allow_parallelR   R   R   R  R  R  t   supported_image_typest   supported_remote_imagest   supported_data_uri_imagesR  t   add_permalinksR  R  R  R+  R   t   download_supportR   Ro   R  R9  R   R   R   R   R   R   R   R   R   R   R   R   t   propertyR   R   R   R   R  R`  R|  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R0  R  R  R   R  R  R  R  R  R'  R&  (    (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR     s   	
												&			n	Q										C								=c			t   DirectoryHTMLBuilderc           B   s2   e  Z d  Z d Z d d  Z d   Z d   Z RS(   s   
    A StandaloneHTMLBuilder that creates all HTML pages as "index.html" in
    a directory given by their pagename, so that generated URLs don't have
    ``.html`` in them.
    t   dirhtmlc         C   s3   | d k r d S| j  t d  r+ | d  S| t S(   NR[   R   i(   t   endswithR,   (   RV   R   R  (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR    s
    c         C   sm   | d k s | j  t d  rD t j |  j t |  |  j  } n% t j |  j t |  d |  j  } | S(   NR[   (   R6  R,   R   R   R   R-   R   (   RV   R  R  (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR     s    c         C   s!   t  j |  |  t |  j d <d  S(   Nt   no_search_suffix(   R   R`  R3  RQ  (   RV   RU  (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR`    s    N(   Rb   Rc   Rd   R   Ro   R  R   R`  (    (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR4    s
   	t   SingleFileHTMLBuilderc           B   s   e  Z d  Z d Z e d  Z e Z d   Z d d  Z
 d d  Z d   Z e d  Z d   Z d	   Z d
   Z d   Z d   Z d   Z RS(   sb   
    A StandaloneHTMLBuilder subclass that puts the whole document tree on one
    HTML page.
    t
   singlehtmls   The HTML page is in %(outdir)s.c         C   s   d S(   Ns   all documents(    (   RV   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR     s    c         C   s:   | |  j  j k r+ |  j j |  j d | S| |  j Sd  S(   Ns
   #document-(   R   R   R   R  R   (   RV   R   R  (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR  	  s    c         C   s   |  j  | |  S(   N(   R  (   RV   t   from_t   toR  (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyRp    s    c         C   s   |  j  j |  j } x | j t j  D]z } d | k r> q& n  | d } | j d  } | d k  ri q& n  | j d | d  } | d k r& | | | | d <q& q& Wd  S(   NR  R	  i    i   (   R   R  R   R  R   R  t   find(   RV   t   treet   fnamet   refnodeR  t	   hashindex(    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   fix_refuris  s    
c         K   sg   d | k r t  | d <n  t |  j  j | |  | |  } | d  k	 rV |  j |  n  |  j |  d S(   NR  R   (   R  R   R   R  Ro   RA  R  (   RV   R   R]  R  R  (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR  '  s    !c         C   sp   |  j  j } |  j j |  } t |  t   | | t | g  } | | d <|  j j | | |   |  j |  | S(   NR   (	   R   R  R   t   get_doctreeR+   R  R"   t   resolve_referencesRA  (   RV   t   masterR=  (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   assemble_doctree0  s    !
c         C   sq   i  } xW t  |  j j  D]C \ } } x4 t  |  D]& \ } } d | | f } | | | <q2 Wq Wi | |  j j 6S(   Ns   %s/%s(   R	   R   R  R   R  (   RV   t   new_secnumbersR   t   secnumst   idt   secnumt   alias(    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   assemble_toc_secnumbers:  s    c   	      C   s   i  } x t  |  j j  D]t \ } } xe t  |  D]W \ } } d | | f } | j | i   x( t  |  D] \ } } | | | | <qk Wq2 Wq Wi | |  j j 6S(   Ns   %s/%s(   R	   R   R  Rl   R   R  (	   RV   t   new_fignumbersR   t
   fignumlistt   figtypet   fignumsRJ  RH  t   fignum(    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   assemble_toc_fignumbersM  s    c         C   s   t  |  j  j |  j j |  t  } | rS |  j |  |  j |  d } t } n d } t } t	 d g  d d  d d  d d  d |  j j d d  d	 | d
 | d g  d d d | d |  S(   NR   R   R#  Rf  Rc  R  Rh   Rg  Rh  Ri  R!  Rj  Rk  Rl  (   R   R   R  R   R  R  RA  R  R3  RJ   Ro   RJ  (   RV   R   Rh  Ri  Rk  Rl  (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR|  c  s*    	c         G   s	  |  j  j } t j t t d   d t |  j |  t j t d   t j t t d   d t |  j   } |  j	   |  j  _
 |  j   |  j  _ t j d  t j t t d   d t |  j |  j j |  |  j |  j j |  t j t d   d  S(   Ns   preparing documents... R  R  s   assembling single document... R   s   writing... (   R   R   R   R  R!   R   R3  R`  RE  RK  R  RQ  R  R  R   R  R  (   RV   t   ignoredRU  R  (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR     s    c         C   s  t  j t t d   d d xJ |  j j j   D]6 \ } } t  j d | d d |  j | i  |  q2 W|  j j r t  j d d d t	 j
 |  j d d  } |  j d i  d d	 | n  t  j d
  |  j   |  j   |  j   |  j   |  j   |  j   d  S(   Ns   writing additional files...R  i   R  s    opensearchR   s   opensearch.xmlR  R  R   (   R   R  R!   R   R   R  RL   R  RB  R   R   R   R  R  R  R  R  R'  (   RV   R  R  R  (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR    s    




N(   Rb   Rc   Rd   R   R   R,  R  R  R   Ro   R  Rp  RA  R3  R  RE  RK  RQ  R|  R   R  (    (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR8    s   	
			
				t   SerializingHTMLBuilderc           B   sq   e  Z d  Z d Z e Z d Z d Z d d d d g Z	 d   Z
 d d  Z d   Z d d d d	  Z d
   Z RS(   sA   
    An abstract builder that serializes the generated HTML.
    s   image/svg+xmls	   image/pngs	   image/gifs
   image/jpegc         C   s}   t  |  j |  j  |  _ d |  _ d  |  _ d  |  _ d  |  _ |  j	   |  j
   |  j   |  j   |  j d d  |  _ d  S(   NR   R   R   (   Rr   R   R   R   R   Ro   R   R   R   R   R   R   R   R   R   (   RV   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR     s    				



c         C   s3   | d k r d S| j  t d  r+ | d  S| t S(   NR[   R   i(   R6  R,   (   RV   R   R  (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR    s
    c         C   s]   |  j  r$ t j | d d d } n t | d  } |  |  j j | | |  j  Wd  QXd  S(   NR  R}  s   utf-8R)  (   t   implementation_dumps_unicodeR  R   t   implementationR   t   additional_dump_args(   RV   R  Rj   R}   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   dump_context  s
    	s	   page.htmlc         C   s  | | d <|  j  | |  | sE t j |  j t |  |  j  } n  |  j j d | | | |  x4 t |  D]& } t	 | | t
 j  rn | | =qn qn Wt t j |   |  j | |  | j d  rt j |  j d t | d   } t t j |   t |  j j |  |  n  d  S(   NR  s   html-page-contextRj  R  (   R  R   R   R   R-   R   R   R  RK   RI   t   typest   FunctionTypeR/   R  RW  Rn  R1   R   R   (   RV   R  R  R!  R  R  R(  R%  (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR    s     
c         C   s   t  j |  j |  j  } |  j |  j |  t j |   t t  j |  j	 t
  t  j |  j t
   t t  j |  j t  d  j   d  S(   NR  (   R   R   R   t   globalcontext_filenameRW  RQ  R   R  R1   t
   doctreedirR   R   t   LAST_BUILD_FILENAMEt   close(   RV   R  (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR    s    N(    (   Rb   Rc   Rd   Ro   RU  R  RT  RV  RZ  R.  R   R  RW  R  R  (    (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyRS    s   			t   PickleHTMLBuilderc           B   sV   e  Z d  Z d Z e d  Z e Z e Z	 e j
 f Z e Z e Z d Z d Z d Z RS(   sD   
    A Builder that dumps the generated HTML into pickle files.
    t   pickles3   You can now process the pickle files in %(outdir)s.s   .fpickles   globalcontext.pickles   searchindex.pickle(   Rb   Rc   Rd   R   R   R,  R_  RU  R  RT  t   HIGHEST_PROTOCOLRV  R  R  R   RZ  R  (    (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR^    s   t   JSONHTMLBuilderc           B   sS   e  Z d  Z d Z e d  Z e Z e Z	 e Z
 e Z d Z d Z d Z d   Z RS(   sB   
    A builder that dumps the generated HTML into JSON files.
    t   jsons1   You can now process the JSON files in %(outdir)s.s   .fjsons   globalcontext.jsons   searchindex.jsonc         C   s   t  j |   d  S(   N(   RS  R   (   RV   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR   /  s    (   Rb   Rc   Rd   R   R   R,  R   RU  R3  RT  R  R  R   RZ  R  R   (    (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyRa     s   c         C   s   g  } x | j  D]{ } t | t  r; | j | i  f  q y# | \ } } | j | | f  Wq t k
 r t j t d  |  q q Xq W| | _  d S(   s?   This converts string styled html_css_files to tuple styled one.s   invalid css_file: %r, ignoredN(   t   html_css_filesRI   R   RU   R{   R   R   R   (   R   R   Rc  R  Rj   R   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   convert_html_css_files4  s    c         C   s   g  } x | j  D]{ } t | t  r; | j | i  f  q y# | \ } } | j | | f  Wq t k
 r t j t d  |  q q Xq W| | _  d S(   s>   This converts string styled html_js_files to tuple styled one.s   invalid js_file: %r, ignoredN(   t   html_js_filesRI   R   RU   R{   R   R   R   (   R   R   Re  R  Rj   R   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   convert_html_js_filesF  s    c            s,   | j  d      f d   } | | d <d S(   sx   Set up js_tag() template helper.

    .. note:: This set up function is added to keep compatibility with webhelper.
    R  c            s   g  } d } t  |  t  r xh t |  j  D]W } |  j | } | d  k	 r+ | d k r_ | } q | j d | t | t  f  q+ q+ W|  j r | j d   |  j d t  q n* | j d  | j d   |  d t  d d j	 |  | f S(	   NR   Rh  s   %s="%s"s   src="%s"R  s   type="text/javascript"s   <script %s>%s</script>R  (
   RI   Rq   RN   Rk   Ro   RU   R2   R3  Rj   R   (   t   jsR   Rh  R(  R   (   R  (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   js_tag`  s    	'	&Rh  N(   Rn  (   R   R  t   templatexnameR  R  Rh  (    (   R  s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   setup_js_tag_helperX  s    c         C   sr   |  j  j d k r d  S|  j  j } | d  k rC t t d    n+ | |  j j k rn t t d  |   n  d  S(   NR   sE   Many math_renderers are registered. But no math_renderer is selected.s"   Unknown math_renderer %r is given.(   R"  R+  R   Ro   R   R   R   R   (   R   R   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   validate_math_rendererw  s    c         C   s  |  j  t  |  j  t  |  j  t  |  j  t  |  j  t  |  j d d d  |  j d g  d  |  j d i  d  |  j d d   d t  |  j d d	   d  |  j d
 d  d t  |  j d d  d t  |  j d d  d t  |  j d g  d  |  j d g  d  |  j d g  d  |  j d g  d  |  j d d  d t  |  j d i  d  |  j d i  d  |  j d t	 d t
 g  |  j d d d  |  j d t	 d  |  j d t d  |  j d t	 d  |  j d t	 d  |  j d d d  |  j d d d  |  j d d  d t  |  j d  d  d t  |  j d! t	 d  |  j d" t	 d  |  j d# i  d  |  j d$ d% d  |  j d& t	 d  |  j d' d( d  |  j d) d  d t  |  j d* i  d  |  j d+ d d   |  j d, t	 d  |  j d- d  d  |  j d. d d  |  j d/ d  d0  |  j d1 d2   d  |  j d3 t  |  j d3 t  |  j d4 t  |  j d5 t  |  j d6  i d7 d8 6t	 d9 6t	 d: 6S(;   NR   R  R   t   html_theme_pathR   RJ  c         S   s   t  d  |  j |  j f S(   Ns   %s %s documentation(   R   R  R  (   RV   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR    s    RK  c         S   s   |  j  S(   N(   RJ  (   RV   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR    s    RG  R?  RA  Rc  Re  R   R   R>  R  R  R:  t   html_add_permalinksu   ¶t   html_use_indexR  RN  RO  RP  s   .txtRB  R   R   R   RL  RM  RT  R  s   utf-8R7  t   html_secnumber_suffixs   . R-  R.  R/  R  R   R  t   html_math_rendererR   t   singlehtml_sidebarsc         S   s   |  j  S(   N(   R  (   RV   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyR    s    s   config-initeds   builder-initeds   html-page-contexts   sphinx.ext.mathjaxt   builtinR  t   parallel_read_safet   parallel_write_safe(   t   add_builderR   R4  R8  R^  Ra  t   add_config_valueR   Ro   R3  RK   R  t   connectRd  Rf  Rk  Rj  t   setup_extension(   R   (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   setup  sn    	
(   Rd   R  R   t   reR   RX  RX   t   hashlibR    t   osR   R   R   t   docutils.coreR   t   docutils.frontendR   t   docutils.ioR   R   t   docutils.readers.doctreeR   R   t   docutils.utilsR   t   sixR	   R
   R   t	   six.movesR   R_  R   R   R   t   sphinx.applicationR   t   sphinx.buildersR   t   sphinx.configR   t   sphinx.deprecationR   R   t!   sphinx.environment.adapters.assetR   t(   sphinx.environment.adapters.indexentriesR   t#   sphinx.environment.adapters.toctreeR   t   sphinx.errorsR   R   t   sphinx.highlightingR   t   sphinx.localeR   R   R,  R   t   sphinx.themingR   t   sphinx.utilR   R   R    t   sphinx.util.consoleR!   R"   t   sphinx.util.docutilsR#   R$   t   sphinx.util.fileutilR%   t   sphinx.util.i18nR&   t   sphinx.util.inventoryR'   t   sphinx.util.matchingR(   R)   R*   t   sphinx.util.nodesR+   t   sphinx.util.osutilR,   R-   R.   R/   R0   R1   t   sphinx.util.pycompatR2   t   sphinx.writers.htmlR3   R4   R  t   typingR5   R6   R7   R8   R9   R:   R;   R<   R=   R>   R?   t   sphinx.domainsR@   RA   t   sphinx.util.tagsRB   t   sphinx.writers.html5RC   R3  R   R(  R\  t	   getLoggerRb   R   t   compileRH  RE   RK   RR   RS   Rp   Rq   t   objectRr   R   R4  R8  RS  R^  t   WebHTMLBuilderRa  Rd  Rf  Rj  Rk  Ry  (    (    (    s3   lib/python2.7/site-packages/sphinx/builders/html.pyt   <module>
   s   .@			/!6   !a				