
    G@d6                         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ZddlZddl	Z	ddl
Z
ddlmZmZ ddlmZmZ ddlmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#  G d de          Z$dd
Z%d Z&dS )zPyDoc patch    N)_DEV)is_dark_interfaceget_font)to_text_string)	classnameclassify_class_attrsdescribeDocformat_exception_onlyHelperHTMLRepr_is_bound_methodModuleScannerlocatereplacevisiblenameisdatagetdocdeque_split_listc                      e Zd ZdZ e            Zej        Zej        Zd ZddZ		 	 	 ddZ
d	 Zd
 Zd dZd Zd Zd Zd Zd Zd Zdi i i fdZd!dZd"dZddi i fdZd Zddi i i dfdZd Zd#dZd"dZd#dZd!dZdS )$CustomHTMLDocz
    Formatter class for HTML documentation.

    See:
    https://github.com/aroberge/mod_pydoc/blob/master/mod_pydoc/pydoc.py
    c                     d|d|dS )Format an HTML page.z+<!doctype html>
<html><head><title>Python: z.</title>
<meta charset="UTF-8">
</head><body>
z
</body></html> )selftitlecontentss      Elib/python3.11/site-packages/spyder/plugins/onlinehelp/pydoc_patch.pypagezCustomHTMLDoc.page.   s      UUHHH& 	&     c                 2    d                     ||pd          S )zFormat a page heading.z`
<table class="heading">
<tr><td>{}</td><td class="align_right normal">{}</td></tr></table>
    &nbsp;format)r   r   extrass      r    headingzCustomHTMLDoc.heading8   s"     	uf())	*r"      Nr%   c                     d                     ||          }|r|d                     |||          z   }n|r|d                     ||          z   }d                     |          }|dz   |z   S )z Format a section with a heading.z;
<table class="{}">
<tr>
<td colspan="3">
{}</td></tr>
    zI
<tr><td rowspan="2">{}</td>
<td colspan="2">{}</td></tr>
<tr><td>{}</td>z
<tr><td>{}</td><td>{}</td>z{}</td></tr></table><br>z
<td class="inner_table">r&   )	r   r   r   widthprelude
marginaliagap	css_classresults	            r    html_sectionzCustomHTMLDoc.html_section?   s    

 	y%   	  	6  6*gs334FF  	6 $fZ556F .44X>>44x??r"   c                 N    d                     |          } | j        |g|R i |S )z$Format a section with a big heading.z%<span class="section_title">{}</span>)r'   r2   )r   r   argskwargss       r    
bigsectionzCustomHTMLDoc.bigsectionV   s8    7>>uEE t 8888888r"   c                 ~    |                      |                                          }t          |dddddddd	  	        S )z!Format literal preformatted text.z

z
 
 r%   
<br>
)escape
expandtabsr   r   texts     r    	preformatzCustomHTMLDoc.preformat[   sB    {{4??,,--tVWfg (D(< < 	<r"      c                    d}t          |          |z   dz
  |z  }t          |          D ]X}|dd|z  z  z   }t          ||z  ||z  |z             D ],}|t          |          k     r| |||                   z   dz   }-|dz   }Yd|z  S )z0Format a list of items into a multi-column list.r#      z/<td style="width:%d%%;vertical-align:text-top">d   r:   z</td>z.<table style="width:100%%"><tr>%s</tr></table>)lenrange)r   listr'   colsr1   rowscolis           r    multicolumnzCustomHTMLDoc.multicolumna   s    D		$q 4';; 	& 	&CJ9   48T#Xd]33 A As4yy==#ffT!Woo5@Fg%FF?&HHr"   c                     d|z  S )z
Grey span.z<span class="grey">%s</span>r   r=   s     r    greyzCustomHTMLDoc.greyo   s    -44r"   c                 :    |D ]}||v rd||         d|dc S |S )z:Make a link for an identifier, given name-to-URL mappings.	<a href=""></a>r   )r   namedictsdicts       r    namelinkzCustomHTMLDoc.namelinks   sE     	B 	BDt|||04T


DDDAAAA r"   c           	          |j         t          j                            |j                  }}t          ||          r1t          ||          |u rd|j         d|dt          ||          dS t          ||          S )zMake a link for a class.rO   .html#rP   rQ   )__name__sysmodulesget
__module__hasattrgetattrr   )r   objectmodnamerR   modules        r    	classlinkzCustomHTMLDoc.classlinkz   s    8I(J(Jf64   	CWVT%:%:f%D%D%Dy'A'A'A'AC C)))r"   c                 (    d|j         d|j         dS )zMake a link for a module.rO   .html">rQ   )rX   r   r_   s     r    
modulelinkzCustomHTMLDoc.modulelink   s!      OOOV___. 	.r"   c                     |\  }}}}|r|                      |          S |r	|d|d}nd|z  }|rd|z  }n|}d|d|dS )z;Make a link for a module or package to display in an index...htmlz%s.htmlz%s&nbsp;(package)rO   rP   rQ   )rM   )r   
modpkginforR   path	ispackageshadowedurlr>   s           r    
modpkglinkzCustomHTMLDoc.modpkglink   s{    *4'dIx 	#99T??" 	#"&$$-CCd"C 	&-DDD(+TTT22r"   c                     d|d|dS )zMake a link to source file.z<a href="file:rP   rQ   r   r   rn   rk   s      r    filelinkzCustomHTMLDoc.filelink   s     -0SS$$$77r"   c                    |p| j         }g }d}t          j        d          }	 |                    ||          }	|	sn|	                                \  }
}|                     ||||
                              |	                                \  }}}}}}|r< ||                              dd          }|                    d|d|d           n|r8d	t          |          z  }|                    d|d ||          d           n|r8d
t          |          z  }|                    d|d ||          d           n|||dz            dk    r,|                    | 	                    ||||                     nD|r|                    d|z             n)|                    | 	                    ||                     |}|                     |||d                              d
                    |          S )z
        Mark up some plain text, given a context of symbols to look for.

        Each context dictionary maps object names to anchor names.
        r   zD\b((http|ftp)://\S+[\w/]|RFC[- ]?(\d+)|PEP[- ]?(\d+)|(self\.)?(\w+))T"z&quot;rO   rP   rQ   z'http://www.rfc-editor.org/rfc/rfc%d.txtz(http://www.python.org/dev/peps/pep-%04d/rB   (zself.%sNr#   )r;   recompilesearchspanappendgroupsr   intrU   join)r   r>   r;   funcsclassesmethodsresultsherepatternmatchstartendallschemerfcpepselfdotrR   rn   s                      r    markupzCustomHTMLDoc.markup   sC    &4;* 0 1 1	NN4..E JE3NN66$tEz"23344438<<>>0Cc7D =fSkk))#x88SSSABBBB =?#c((JVVC[[[[IJJJJ 	=@3s88KVVC[[[[IJJJJc#a%iC''MM$@@B B B B =y4/0000t}}T7;;<<<D1	2 	vvd455k**+++wwwr"   c                    d}|D ]}t          |          t          d          u r|\  }}|dz   }||                     ||          z   }|rU||fk    rNg }|D ]+}	|                    |                     |	|                     ,|dz   d                    |          z   dz   }|dz   }t          |          t          g           u r|d|                     |||          z  z   }d	|z  S )
zS
        Produce HTML for a class tree as given by inspect.getclasstree().
        r#   r   z<dt>ru   , )z
</dt>z<dd>
%s</dd>
z<dl><dt></dt>
%s<dd></dd></dl>
)typerb   rz   r}   
formattree)
r   treer`   parentr1   entrycbasesparentsbases
             r    r   zCustomHTMLDoc.formattree   s     	' 	'EE{{d2hh&& 5&$..G"<"<< EUvi// G % F Ft~~dG'D'DEEEE#c\DIIg,>,>>DF)+eR(("3doo7A7' 7' #' '2V;;r"   c                 0    |j         }	 |j        }n# t          $ r d}Y nw xY w|                    d          }g }t	          t          |          dz
            D ]O}|                    d                    d                    |d|dz                      ||                              Pd                    ||dd         z             }		 t          j
        |          }
|
}t          j        dk    rddl}|                    |
          }                     ||
          }n# t           $ r d}Y nw xY wg }t#          |d	          rwt%          |j                  }|dd
         dk    r*|dd         dk    r|d
d                                         }|                    d                     |          z             t#          |d          r:|                                         t%          |j                                       |r|	dd                    |          z  z   }	                     |          }|dt1                      z  }nd}d|z   |z   }                     |	|          }t          j        |t          j                  }g i }}t          j        |t          j                  D ]T\  }}|t          j        |          p||u r5t=          |||          r$|                    ||f           d|z   x||<   ||<   U|D ]z\  }}|j        D ]m}|j         |j         }}t          j!        "                    |          }||k    r8|r6t#          ||          r&tG          ||          |u r||vr|dz   |z   x||<   ||<   n{g i }}t          j        |t          j$                  D ]\  }}|*t          j%        |          st          j        |          |u rOt=          |||          r>|                    ||f           d|z   ||<   t          j&        |          r||         ||<   g }t          j        |tN                    D ]-\  }}t=          |||          r|                    ||f           . (                    tS          |           j*        ||          }|od                    |          }|d|z  z   }t#          |d          rg }tW          j,        |j-                  D ]\  } }}!|                    |||!df            |.                                  /                    | j0                  }"| 1                    d|"d          z   }n6|r4 /                    | fd          }"| 1                    d|"d          z   }|rd  |D             }# 2                    t          j3        |#d          |          g}"|D ]1\  }}|"                     4                    |||||                     2| 1                    d!d"                    |"          d#          z   }|rdg }"|D ]1\  }}|"                     4                    |||||                     2| 1                    d$d"                    |"          d%          z   }|rag }"|D ].\  }}|"                     4                    ||                     /| 1                    d&d'                    |"          d(          z   }t#          |d)          rH (                    t%          |j5                   j*                  }"| 1                    d*|"d+          z   }t#          |d,          rH (                    t%          |j6                   j*                  }"| 1                    d-|"d.          z   }|S )/z/Produce HTML documentation for a module object.Nrh   rB   z/<a href="{}.html" class="docmodule_link">{}</a>win32r   z
(built-in)__version__   z$Revision: $z
version %s__date__z (%s)r   z-<br><a href="%(docloc)s">Module Reference</a>r#   z<a href=".">index</a><br>#rW   z#-z<code>{}</code>z
<p>%s</p>
__path__zPackage Contentspackager0   c                 :                         | d                   S NrB   )rf   )tr   s    r    <lambda>z)CustomHTMLDoc.docmodule.<locals>.<lambda>6  s    4??1Q4#8#8 r"   Modulesra   c                     g | ]\  }}|S r   r   ).0keyvalues      r    
<listcomp>z+CustomHTMLDoc.docmodule.<locals>.<listcomp>;  s    ;;;<C;;;r"   Classesr8   r   	Functions	functionsDatar:   data
__author__Authorauthor__credits__Creditscredits)7rX   __all__AttributeErrorsplitrE   rD   rz   r'   r}   inspect
getabsfilerY   platform
nturl2pathpathname2urlrr   	TypeErrorr]   strr   stripr;   r   	getdocloclocalsr)   
getmembersismoduleisclass	getmoduler   	__bases__r\   rZ   r[   r^   	isroutine	isbuiltin
isfunctionr   r   r   r?   pkgutiliter_modulesr   sortrK   ro   r6   r   getclasstreedocumentr   r   )$r   r_   rR   modignoredr   partslinksrJ   headrk   rn   r   rr   infoversiondoclocr(   r1   rZ   r   cdictr   r   r   r`   ra   r~   fdictr   docmodpkgsimporterispkgr   	classlists$   `                                   r    	docmodulezCustomHTMLDoc.docmodule   s   	.CC 	 	 	CCC	

3s5zz!|$$ 	7 	7ALLAHHXXeDQqSDk**E!H6 67 7 7 7 xxbcc
*++	$%f--DC|w&&!!!! --d33}}S$//HH 	$ 	$ 	$#HHH	$6=)) 	=&,--Gss|111gbcclc6I6I!"R%...00KKt{{7';';;<<<6:&& 	;KKC$8$899::: 	4'DIIdOO33D''?&((J F F,x7&@dF++$VW-=>>R!,VW_EE 	: 	:JC&u--7FBBsC00 :NNC<00003c	9E#Ju! 	: 	:JC : :#}doW11d??v?'&#2F2F?vs++t33e++ '( 2S 8:E#Jt: 2u!,VW5FGG 		2 		2JC%e,,  %e,,66sC00 2LL#u...!%E#J)%00 2',Sze!,VV<< 	* 	*JC3V,, *S%L)))kk&..$.%GG3'..s33-#--6:&& 	9G,3,@O-% -% : :('5ua89999LLNNN''AAHdoo"H	 . C C CFF 	9''8888: :Hdoo8x . 9 9 9F  	D;;7;;;I 4Y B BDIIKH% C C
UMM%dE5AAC C C Cdoo388H-- . D D DF 	HH# C C
UMM%dE5AAC C C CdooSXXh//; . H H HF 	CH" ; ;
UeS 9 9::::dooh//6 . C C CF6<(( 	8{{3v'8#9#94>JJHdoo(h . 8 8 8F6=)) 	:{{3v'9#:#:DNKKHdoo8y . : : :F s    !!AD! !D0/D0c                 *    j         }|p|}j        }g }	|	j         G fdd          }
 |
            t          t	          j                            }t          |          dk    rV                                  d           |D ])} d                     |j	                  z             * d            fd} fd} fd	}fd
t                    D             }i |D ]O\  }}}}d|z   dz   |z   x|<   }	 t          |          }n# t          $ r Y nw xY w	 ||<   @# t          $ r Y Lw xY w|r|r|                                n|d         d         t          |fd          \  }}t           j        u r|}Nu rd}nd                     j	                  z  }|dz  }|                    d             |d|z  |d           } |d|z  |d           } |d|z  |d           } |d|z  |d           } |d|z  |d           }|g k    sJ |}|d                    |	          }	||k    r
d|d |d!}n|d"|d#|d!}|rPg }|D ]0}|                                         |j	                             1|d$d%                    |          z  z   }                     t+                     j                  }|od&|z  }                     ||	d'|d()          S )*z.Produce HTML documentation for a class object.c                        e Zd Zd Z fdZdS ).CustomHTMLDoc.docclass.<locals>.HorizontalRulec                     d| _         d S Nr   needoner   s    r    __init__z7CustomHTMLDoc.docclass.<locals>.HorizontalRule.__init__g  s     r"   c                 :    | j         r d           d| _         d S )Nz<hr>
rB   r   )r   pushs    r    maybez4CustomHTMLDoc.docclass.<locals>.HorizontalRule.maybej  s%    < #DNNN r"   N)rX   r\   __qualname__r   r   )r   s   r    HorizontalRuler   f  s=        ! ! !! ! ! ! ! ! !r"   r      z&<dl><dt>Method resolution order:</dt>
z<dd>%s</dd>
</dl>
c                 f   t          ||          \  }}|r
                                  |            |D ]x\  }}}}	 t          |          }                     ||	                     n0# t          $ r#                      ||                     Y nw xY w d           y|S )Nr9   )r   r   r^   r   	Exception_docdescriptor)msgattrs	predicateokrR   kindhomeclsr   r   r~   hrmdictr   r_   r   r   s           r    spillz%CustomHTMLDoc.docclass.<locals>.spillz  s    #E955IB 


S			24  .D$
% ' 5 5 T]]!4eWe"$ $ % % % % % D D D T00ucBBCCCCC	D DJJJJLs    A55*B"!B"c                     t          ||          \  }}|rI                                  
|            |D ]'\  }}}} 
                    ||	                     (|S N)r   r   r   )r   r   r   r   rR   r   r   r   r   r   r   r   s           r    spilldescriptorsz0CustomHTMLDoc.docclass.<locals>.spilldescriptors  s}    #E955IB @


S			24 @ @.D$D,,T5#>>????Lr"   c                    t          ||          \  }}|r                                  |            |D ]\  }}}}                    t          |          |          }t	          |          st          j        |          rt          |dd           }	nd }	|	 d|z             nA                    t          |          j	        
          }	d|	z  }	 d||	d            d           |S )N__doc__<dl><dt>%s</dt><dd></dd></dl>
<dd><code>%s</code></dd><dl><dt>z</dt></dl>
r9   )
r   r   docotherr^   callabler   isdatadescriptorr   r   r?   )r   r   r   r   rR   r   r   r   r   r   r   r~   r   r   r   r_   r   r   s             r    	spilldataz)CustomHTMLDoc.docclass.<locals>.spilldata  s(   #E955IB 


S			24  .D$==)>)>cJJD #'*B5*I*I #%eY=="{>EFFFF"kk&--*/%A A83>44EFFFDJJJJLr"   c                 H    g | ]\  }}}}t          |           ||||fS ))obj)r   )r   rR   r   clsr   r_   s        r    r   z*CustomHTMLDoc.docclass.<locals>.<listcomp>  sL     3 3 3+T4e&1113$c5) 3 3 3r"   r   -r   c                     | d         u S )Nr   r   )r   	thisclasss    r    r   z(CustomHTMLDoc.docclass.<locals>.<lambda>  s    1!2 r"   zdefined herezinherited from %sz:<br>
c                     | d         S r   r   r   s    r    r   z(CustomHTMLDoc.docclass.<locals>.<lambda>  s
    QqT r"   )r   z
Methods %sc                     | d         dk    S )NrB   methodr   r  s    r    r   z(CustomHTMLDoc.docclass.<locals>.<lambda>  s    AaDH$4 r"   zClass methods %sc                     | d         dk    S )NrB   zclass methodr   r  s    r    r   z(CustomHTMLDoc.docclass.<locals>.<lambda>  s    AaDN$: r"   zStatic methods %sc                     | d         dk    S )NrB   zstatic methodr   r  s    r    r   z(CustomHTMLDoc.docclass.<locals>.<lambda>  s    AaDO$; r"   zData descriptors %sc                     | d         dk    S )NrB   zdata descriptorr   r  s    r    r   z(CustomHTMLDoc.docclass.<locals>.<lambda>  s    qt7H/H r"   zData and other attributes %sc                     | d         dk    S )NrB   r   r   r  s    r    r   z(CustomHTMLDoc.docclass.<locals>.<lambda>  s    ! r"   r#   
<span id="z" class="signature"> class </span>z = <span id="z" class="signature">class z(%s)r   z<code>%s<br>&nbsp;</code>   docclassr   )rX   r   rz   r   r   getmrorD   r   rb   r\   r	   r^   r   r   popleftr   builtinsr_   r   r}   r   r   r?   r2   )r   r_   rR   r   r~   r   r   realnamer   r   r   mror   r   r  r
  r   r   r   r   r   anchor	inheritedtagr   r   r   r   r   r   r  s   `` ```                     @@@@r    r  zCustomHTMLDoc.docclass[  s'    ?x 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! ^ GN6**++s88a<<HHJJJD:;;; J J_t~~d6<6G(I (I I J J J JDOOO	 	 	 	 	 	 	 	 	 	 	 	(	 	 	 	 	 	 	 		 	 	 	 	 	 	 	 	 	 	 	*3 3 3 3/CF/K/K3 3 3 ). 	 	%Cw"%*s"2S"88E#J--      &e     !	 (KKMM		!!HQK	*2222 4  4E9 HO++!f$$$)DNNv0-2 -2 29C JJ>>J*** E,,e446 6EE,s2E::< <EE-3U;;= =E$$%:S%@%%H%HJ JEI<sBE668 8EB;;;;EC  !	F 778$$8hhh EE
 DD$$$*   	8G H Ht~~dF4EFFGGGGFTYYw%7%777Ekk6NNDNE7EC C71C7  8Qz ! ; ; 	;s$   D00
D=<D=E
EEc                 X    |                      d|                     |          z             S )z)Format an argument default value as text.=)rM   reprre   s     r    formatvaluezCustomHTMLDoc.formatvalue  s%    yytyy000111r"   c                 x   |j         }|p|}|r|j         pddz   |z   }	d}
d}t          |          rp|j        j        }|r||urd|                     ||          z   }
nD|j        $d|                     |j        j        |          z  }
nd|                     ||          z  }
||k    r
d|	d	|d
}n>|r/||j        v r&|j        |         |u rd|j         dz   |z   d|d}d}n|}d|	d	|d|}d}t          j        |          rU	 t          j        |          }n# t          t          f$ r d}Y nw xY w|r$t          |          }|dk    rd|z  }|dd         }|sd}||z   |
o|                     |
          z   }|rd|z  S |                     t          |          | j        |||          }|od|z  }d|d|dS )z;Produce HTML documentation for a function or method object.r#   r  r   z from Nz method of %s instancez unbound %s methodr  z" class="signature">r  z
<a href="#rP   rQ   rB   z
</span> = z<lambda>z%s <em>lambda</em> r   z(...)r  r  r  z</dt><dd></dd>r   )rX   r   __self__	__class__rb   __dict__r   r   	signature
ValueErrorr   r   rM   r   r   r?   )r   r_   rR   r   r~   r   r   clr   r"  noteskipdocsimclassr   reallinkargspecr-  declr   s                      r    
docroutinezCustomHTMLDoc.docroutine  s    ?x$*c1D8F## 	&o/G 	&"$$#dnnWc&B&BBD?.3dnn1378 78 8DD 0$..3& 3& &D 8"EE  $x2;..K)V333K#%000(((<#hh(EV$$ 	,!#-f55			* ! ! ! 			! ,i..z))1D8E
 &admG 	Gw$":499T??; 	E4t;;++vwI IC:4s:CC:>$$DDs   D D0/D0c                     g }|j         }|r |d|z             |j        6|                     t          |          | j                  } |d|z              |d           d                    |          S )Nz<dl><dt>%s</dt>
z<dd><code>%s</code></dd>
z<dd></dd></dl>
r#   )rz   r  r   r   r?   r}   )r   rR   r   r   r   r   r   s          r    r   zCustomHTMLDoc._docdescriptor:  s    ~ 	-D$t+,,,=$++fUmmT^<<CD-3444   wwwr"   c                 0    |                      |||          S )z*Produce html documentation for a property.r   r   r_   rR   r   r/  s        r    docpropertyzCustomHTMLDoc.docpropertyG      ""4555r"   c                 D    |rd|z  pd}||                      |          z   S )z-Produce HTML documentation for a data object.z%s = r#   )r'  )r   r_   rR   r   r   lhss         r    r  zCustomHTMLDoc.docotherK  s,    %w~+TYYv&&&&r"   c                 0    |                      |||          S )z1Produce html documentation for a data descriptor.r9  r:  s        r    docdatazCustomHTMLDoc.docdataP  r<  r"   c                 j   g }|i }t          j        |g          D ]@\  }}}t          d |D                       r |                    |d|||v f           d||<   A|                                 t          |          r3|                     || j                  }|                     ||d          S dS )z2Generate an HTML index for a directory of modules.Nc              3   P   K   | ]!}d t          |          cxk    odk    nc V  "dS )i   i  N)ord)r   chs     r    	<genexpr>z&CustomHTMLDoc.index.<locals>.<genexpr>Z  sD      @@RFc"gg////////@@@@@@r"   r#   rB   indexr   )	r   r   anyrz   r   rD   rK   ro   r6   )r   dirrm   r   r   rR   r   r   s           r    rF  zCustomHTMLDoc.indexT  s    H%,%93%%@%@ 	 	!HdE@@4@@@@@  NND"eTX-=>???HTNNw<< 	''AAH??3G?DDD2r"   )r#   )r*   r#   Nr%   r#   )r@   r   )NN)NNN)rX   r\   r   r  r   _repr_instancer'  r;   r!   r)   r2   r6   r?   rK   rM   rU   rb   rf   ro   rr   r   r   r   r  r(  r6  r   r;  r  r@  rF  r   r"   r    r   r       s         XZZND"F& & &* * * * *+-5@ @ @ @.9 9 9
< < <I I I I5 5 5  * * *. . .
3 3 38 8 8 #'b"b '  '  '  ' V< < < <*   B %)d"b [; [; [; [;z2 2 2 '+R<E <E <E <E|     6 6 6 6' ' ' '
6 6 6 6     r"   r   	text/htmlc           	        	
  G fddt                     } |            fdfdfdfd	fdfdfd	fd

fd	
f	d}|                     d          r
| dd         } |dk    rt          j                            t          j                            t                              }t          j                            ||           }t          |          5 }d                    |	                                          cddd           S # 1 swxY w Y   n|dk    r ||           S t          t          d          || fz            )aB  Pydoc url handler for use with the pydoc server.

    If the content_type is 'text/css', the _pydoc.css style
    sheet is read and returned if it exits.

    If the content_type is 'text/html', then the result of
    get_html_page(url) is returned.

    See https://github.com/python/cpython/blob/master/Lib/pydoc.py
    c                        e Zd Z fdZd ZdS )_url_handler.<locals>._HTMLDocc                    t          d                                          }t          d                                          }t                      rd}nd}d|z  }d|z  }d|d	||d
|d 	            d|d}|S )r   	rich_font)optionfontzstatic/css/dark_pydoc.csszstatic/css/light_pydoc.cssz2<link rel="stylesheet" type="text/css" href="/%s">z'<style>code {font-family: "%s"}</style>zY<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><title>Pydoc: zM</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
z,</head><body style="clear:both;font-family:'z'">
z*<div style="clear:both;padding-top:.7em;">z</div>
</body></html>)r   familyr   )
r   r   r   rich_text_fontplain_text_fontcss_pathcss_link
code_style	html_pagehtml_navbars
            r    r!   z#_url_handler.<locals>._HTMLDoc.pagev  s    %[999@@BBN&f555<<>>O "" 867 E 
 :OK J UUHHjjj... []]]]HHH.I r"   c                     d|d|dS )Nz<a href="getfile?key=rP   rQ   r   rq   s      r    rr   z'_url_handler.<locals>._HTMLDoc.filelink  s     8;TTTBBr"   N)rX   r\   r   r!   rr   )rY  s   r    _HTMLDocrM  t  sB        	 	 	 	 	8	C 	C 	C 	C 	Cr"   r[  c                                          t          j                    dt          j                    d         dt          j                    d          } d| d                     t          j        d                    d	S )
Nz [r   r   ]z=
            <div style='float:left'>
                Python <br>T)tersea  
            </div>
            <div style='float:right'>
                <div style='text-align:right; padding-bottom:.7em;'>
                  <a href="index.html">Module Index</a>
                  : <a href="topics.html">Topics</a>
                  : <a href="keywords.html">Keywords</a>
                </div>
                <div style='text-align:right;'>
                    <form action="search" style='display:inline;'>
                      <input class="input-search" type=text name=key size="22">
                      <input class="submit-search" type=submit value="Search">
                    </form>
                </div>
            </div>
            )r;   r   python_versionpython_buildpython_compiler)r   htmls    r    rY  z!_url_handler.<locals>.html_navbar  s    ++x/F/H/H/H/H/7/D/F/Fq/I/I/I/7/G/I/I/I/IK L L( 77DKK(9(E(E(EFFFF#H 	Hr"   c                     d }                      d          }d t          j        D             }                    ||           }|d                    d|d          z   g}i }t          j        D ]+}|                                        ||                     ,|                    d           d	d
                    |          fS )zIndex page.c                     d| d| dS NrO   rd   rQ   r   rR   s    r    	bltinlinkz3_url_handler.<locals>.html_index.<locals>.bltinlink       15ttt<<r"   z<span>Index of Modules</span>c                     g | ]
}|d k    |S )__main__r   )r   rR   s     r    r   z4_url_handler.<locals>.html_index.<locals>.<listcomp>  s,     ( ( ($J&& &&&r"   z<p>zBuilt-in Modulesbuiltin_modulesr   zT<p class="ka_ping_yee"><strong>pydoc</strong> by Ka-Ping Yee&lt;ping@lfw.org&gt;</p>zIndex of Modulesr#   )	r)   rY   builtin_module_namesrK   r6   rk   rz   rF  r}   )rh  r)   namesr   seenrH  rc  s         r    
html_indexz _url_handler.<locals>.html_index  s    	= 	= 	= ,,>??( (#": ( ( (##E955UT__4E &5 &G &G G H 8 	3 	3COODJJsD112222'	( 	( 	( "2778#4#444r"   c                    g fd}t          j                    5  t          j        d           t                                          ||            ddd           n# 1 swxY w Y   d }g }	                    d          }D ]&\  }}|                     ||          |z              '|	                    d                    |           d	                    |          d	          z   }d|fS )
zSearch results page.c                 v    |dd          dk    r|d d         dz   }                     ||od|z   f           d S )Niz	.__init__z
 (package)z- )rz   )rk   r`   descsearch_results      r    callbackz3_url_handler.<locals>.html_search.<locals>.callback  sP    rss|{**!#2#,5  '4+?D4K!@AAAAAr"   ignoreNc                     d| d| dS rf  r   rg  s    r    rh  z4_url_handler.<locals>.html_search.<locals>.bltinlink  ri  r"   zSearch Resultszkey = {}r^  rx   r   )
warningscatch_warningsfilterwarningsr   runr)   rz   r6   r'   r}   )
r   ru  rh  r   r)   rR   rs  r   rt  rc  s
           @r    html_searchz!_url_handler.<locals>.html_search  se    	B 	B 	B 	B 	B
 $&& 	/ 	/#H---OO#...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/
	= 	= 	= ,,/00' 	3 	3JD$NN99T??T12222T__c""FKK$8$8H - N N N))s   7A  A$'A$c                 t   |                      dd          } t          j        |           5 }                    |                                          }ddd           n# 1 swxY w Y   d|z  }                    d          }|                    d                    |           |d          z   }d	| z  |fS )
z-Get and display a source file listing safely.z%20r8   N<pre>%s</pre>zFile ListingzFile: {}getfiler   z
getfile %s)r   tokenizeopenr;   readr)   r6   r'   )rk   fplinesbodyr)   r   rc  s         r    html_getfilez"_url_handler.<locals>.html_getfile  s    ||E3'']4   	+BKK		**E	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+&,,~..T__Z->->t-D-Dd7@ - B B Bd"H,,s   (A  A$'A$c                      d }                      d          dz   }t          t          j                                                  }                    ||           }|                    d|d          z   }d|fS )zIndex of topic texts available.c                     d| d| dS Nz<a href="topic?key=rP   rQ   r   rg  s    r    rh  z4_url_handler.<locals>.html_topics.<locals>.bltinlink       6:ddDDDAAr"   zIndex of Topicsr^  Topicstopicsr   )r)   sortedr   r  keysrK   r6   )rh  r)   rn  r   rc  s       r    html_topicsz!_url_handler.<locals>.html_topics  s    	B 	B 	B ,,011F:v}))++,,##E955T__h( - 4 4 4!!r"   c                                           d          } t          t          j                                                  }d }                    ||          }| dz                       d|d          z   }d|fS )zIndex of keywords.zIndex of Keywordsc                     d| d| dS r  r   rg  s    r    rh  z6_url_handler.<locals>.html_keywords.<locals>.bltinlink  r  r"   r^  Keywordskeywordsr   )r)   r  r   r  r  rK   r6   )r)   rn  rh  r   rc  s       r    html_keywordsz#_url_handler.<locals>.html_keywords  s    ,,233v++--..	B 	B 	B ##E955V#dooJ '6 '8 '8 88##r"   c                    t          j                    }t          ||          }|                    |           \  }}| |j        v rd}nd}                    |          }d                    |          z  }                    | |d          }|rRt          |	                                          }d }
                    ||          }                    d|d          }|d| d	                    |||f          fS )
zTopic or keyword help page.KeywordTopicr~  r  r   c                     d| d| dS r  r   rg  s    r    rh  z7_url_handler.<locals>.html_topicpage.<locals>.bltinlink  s     :>$$EEr"   zRelated help topics: r8   r#   )ioStringIOr   	_gettopicr  r)   r   r6   r  r   rK   r2   r}   )	topicbufhtmlhelpr   xrefsr   r)   rh  rc  s	           r    html_topicpagez$_url_handler.<locals>.html_topicpage  s"   kmm#s##",,U33%H%%%EEE,,u%%"T[[%:%::??5(h?GG 	:5;;==))EF F F $$UI66E%%&=u08 & : :E 55%%((E2335 	5r"   c                     t          | d          }|"| dk    rt          t          d                    t          |          }                    ||           }||fS )NrB   )	forceloadNoneziThere was an error while retrieving documentation for the object you requested: Object could not be found)r   r.  r   r
   r   )rn   r  r   contentrc  s       r    html_getobjz!_url_handler.<locals>.html_getobj  sv    SA&&&;3&== L M MN N N --S))g~r"   c                                         d          }t          r=d                    fdt          t	          |          |          D                       }ndt          |          z  }|                    | |d          z   }d| z  |fS )NErrorr^  c              3   B   K   | ]}                     |          V  d S r   )r;   )r   linerc  s     r    rE  z3_url_handler.<locals>.html_error.<locals>.<genexpr>*  sG       #J #J4;;t#4#4 #J #J #J #J #J #Jr"   z%serrorr   z
Error - %s)r)   r   r}   r   r   r   r6   )rn   excr)   r   rc  s       r    
html_errorz _url_handler.<locals>.html_error'  s    ,,w'' 	2{{ #J #J #J #J#8cC#H#H#J #J #J J JHH nS111HT__S(g_NNNc!8++r"   c                   	 | }|                      d          r
| dd         } 	 | dv r             \  }}n| dk    r             \  }}n| dk    r             \  }}nd| v r|                     d          \  }}} |dk    r |           \  }}n|d	k    r 	|           \  }}n|d
k    r.	  |           \  }}n# t          $ r  
|           \  }}Y nsw xY w|dk    r@| dv r             \  }}nW	  
|           \  }}nG# t          $ r  |           \  }}Y n-w xY wt           |d          | z             
|           \  }}n&# t          $ r} ||          \  }}Y d}~nd}~ww xY w                    ||          S )zGenerate an HTML page for url.ri   N)r#   rF  r  r  r&  z
search?keyzgetfile?keyz	topic?keyzget?keyzZThere was an error while retrieving documentation for the object you requested: Bad URL %s)endswith	partitionr.  r   r!   )rn   complete_urlr   r  opr   r  rc  r  r  r  rp  r  r|  r  r  s          r    get_html_pagez#_url_handler.<locals>.get_html_page1  sN   <<   	crc(C$	;m##!+ww!,ww
""!.ww ]]3//
As%%%0[%5%5NE77=((%1\#%6%6NE77;&&:)7)<)<ww% : : :)4S)9)9www:9__m++)3wwA-8[-=-=NE77) A A A-;^C-@-@NE777A % E F FHKLM M M "-S!1!1w 	; 	; 	;'Zc::NE777777	; yy(((s`   BE
 -B< ;E
 <CE
 CE
 3D E
 DE
 D,E
 

E-E((E-/rB   Ntext/cssr#   rJ  zrThere was an error while retrieving documentation for the object you requested: unknown content type %r for url %s)r   
startswithosrk   dirnamerealpath__file__r}   r  	readlinesr   r   )rn   content_typer[  r  	path_hererU  r  rc  r  r  r  rp  r  rY  r|  r  r  s          @@@@@@@@@@r    _url_handlerr  i  s   C C C C C C C= C C CB 8::DH H H H H.5 5 5 5 5,* * * * *6
- 
- 
- 
- 
-" " " " "$ $ $ $ $5 5 5 5 50    , , , , ,*) *) *) *) *) *) *) *) *) *) *) *) *)X ~~c !""gz!!GOOBG$4$4X$>$>??	7<<	3//(^^ 	+r772<<>>**	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+		$	$}S!!!
	 M 	N 	N3	 ! ! !s   9'D--D14D1c                   	
 ddl 	ddlddl
ddlddl} G d d	j        j                   G 
fdd	j        j                   G 	fddj                  } || ||          }d	|_	        |
                                 |j        s*|j        s#|                    d
           |j        s|j        #|S )z
    Start an HTTP server thread on a specific port.

    This is a reimplementation of `pydoc._start_server` to handle connection
    errors for 'do_GET'.

    Taken from PyDoc: https://github.com/python/cpython/blob/3.7/Lib/pydoc.py
    r   Nc                       e Zd Zd Zd ZdS )!_start_server.<locals>.DocHandlerc                    | j                             d          rd}nd}|                     d           |                     dd|z             |                                  	 | j                            |                     | j         |                              d                     dS # t          $ r Y dS t          $ r Y dS w xY w)	zProcess a request from an HTML browser.

            The URL received is in self.path.
            Get an HTML page from self.urlhandler and send it.
            z.cssr  rJ     zContent-Typez%s; charset=UTF-8zutf-8N)rk   r  send_responsesend_headerend_headerswfilewrite
urlhandlerencodeConnectionAbortedErrorBrokenPipeError)r   r  s     r    do_GETz(_start_server.<locals>.DocHandler.do_GET~  s     y!!&)) +)*s### 3l BD D D
  I|"- "--3VG__> > > > >)    "    	s   #AB+ +
C8	CCc                     d S r   r   )r   r4   s     r    log_messagez-_start_server.<locals>.DocHandler.log_message  s    Dr"   N)rX   r\   r   r  r  r   r"   r    
DocHandlerr  |  s2        	 	 	8	 	 	 	 	r"   r  c                   &    e Zd Zd Z fdZd ZdS ) _start_server.<locals>.DocServerc                     || _         | j         |f| _        || _        | j                            | | j        | j                   d| _        d S NF)hostaddressru  r   r   handlerquit)r   r  portru  s       r    r   z)_start_server.<locals>.DocServer.__init__  sG    DI It,DL$DMItT\4<@@@DIIIr"   c                     | j         sQ                    | j                                        gg g d          \  }}}|r|                                  | j         Q|                                  d S r   )r  selectsocketfilenohandle_requestserver_close)r   rdwrexr  s       r    serve_until_quitz1_start_server.<locals>.DocServer.serve_until_quit  s{    i *#]]DK,>,>,@,@+A2r1MM
B *''))) i * r"   c                 v    | j                             |            | j        r|                     |            d S d S r   )r   server_activateru  r   s    r    r  z0_start_server.<locals>.DocServer.server_activate  sD    I%%d+++} $d#####$ $r"   N)rX   r\   r   r   r  r  )r  s   r    	DocServerr    sL        	 	 		  	  	  	  	 	$ 	$ 	$ 	$ 	$r"   r  c                   6    e Zd ZfdZ fdZd Zd ZdS )#_start_server.<locals>.ServerThreadc                     || _         || _        t          |          | _        j                            |            d| _        d | _        d S r  )r  r  r|   r  Threadr   servingr  )r   r  r  r  	threadings       r    r   z,_start_server.<locals>.ServerThread.__init__  sG    (DODID		DI%%d+++ DLDJJJr"   c                 :   	 j         j        _        _        j        j        _        t          | j                  _         | j	        | j
        | j                  }|| _        |                                 dS # t          $ r}|| _        Y d}~dS d}~ww xY w)zStart the server.N)server
HTTPServerr   r  messageMessageMessageClassstaticmethodr  r  r  ready	docserverr  r   r  )r   docsvrer  r  emailhttps      r    r{  z'_start_server.<locals>.ServerThread.run  s    	!%!7	$.	!*/-*?
'(4T_(E(E
%"49diDD!''')))))   






s   A9A> >
BBBc                 p    d| _         |j        | _        |j        | _        d| j        | j        fz  | _        d S )NTzhttp://%s:%d/)r  r  server_portr  rn   )r   r  s     r    r  z)_start_server.<locals>.ServerThread.ready  s5    DLDI*DI&$)TY)??DHHHr"   c                 p    d| j         _        |                                  d| _         d| _        d| _        dS )z'Stop the server and this thread nicely.TNF)r  r  r}   r  rn   r   s    r    stopz(_start_server.<locals>.ServerThread.stop  s4    "&DNIIKKK "DN DLDHHHr"   N)rX   r\   r   r   r{  r  r  )r  r  r  r  r  s   r    ServerThreadr    sw        	 	 	 	 		 	 	 	 	 	 	 		@ 	@ 	@	 	 	 	 	r"   r  Tg{Gz?)http.serveremail.messager  r  timer  BaseHTTPRequestHandlerr  r  daemonr   r  r  sleep)r  hostnamer  r  r  threadr  r  r  r  r  r  s         @@@@@@r    _start_serverr  m  s\    MMMKKK         T[7      D$ $ $ $ $ $ $DK* $ $ $*% % % % % % % % % % %y' % % %N \*h55FFM
LLNNN l 6> 

3 l 6> Mr"   )rJ  )'r  r  r  r   r  r   r   rv   rY   r  rx  spyder.config.baser   r   spyder.config.guir   r   spyder.py3compatr   pydocr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r"   r    <module>r     s      				  				   				 



   & % % % % % % % 9 9 9 9 9 9 9 9 + + + + + +5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
F	 F	 F	 F	 F	C F	 F	 F	RA! A! A! A!Ht t t t tr"   