a
    1a                     @   s   d Z ddlZddlmZmZmZmZmZmZ e	dZ
e	dZe	dZe	dZe	dZd	d
ddddddZe	dZeedddZeedddZed Zd%eeedddZeeddddZeedd d!Zeed"d#d$ZdS )&a&  
    sphinx.util.jsdump
    ~~~~~~~~~~~~~~~~~~

    This module implements a simple JavaScript serializer.
    Uses the basestring encode function from simplejson by Bob Ippolito.

    :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
    N)IOAnyDictListMatchUnionz"(\\\\|\\"|[^"])*"z\d+z[a-zA-Z_]\w*z[a-zA-Z_][a-zA-Z0-9_]*$z([\\"]|[^\ -~])z\\z\"z\bz\fz\nz\rz\t)\"
	z\\u.{4}|\\.)sreturnc                 C   s(   t tddd}dtt||  d S )N)matchr   c                 S   s~   |  d}z
t| W S  tyx   t|}|dk r@d|f  Y S |d8 }d|d? d@ B }d|d@ B }d||f  Y S Y n0 d S )	Nr   i   z\u%04xi   
   i  i   z\u%04x\u%04x)groupESCAPE_DICTKeyErrorord)r   r   ns1s2 r   1lib/python3.9/site-packages/sphinx/util/jsdump.pyreplace$   s    

zencode_string.<locals>.replacer	   )r   strESCAPE_ASCIIsub)r   r   r   r   r   encode_string#   s    r    c                 C   s   t dd | S )Nc                 S   s   t d|   d S )Nr	   )evalr   )mr   r   r   <lambda>6       zdecode_string.<locals>.<lambda>)ESCAPEDr   )r   r   r   r   decode_string5   s    r&   a  abstract   else   instanceof   switch
boolean   enum   int   synchronized
break   export   interface   this
byte   extends   long   throw
case   false   native   throws
catch   final   new   transient
char   finally   null   true
class   float   package   try
const   for   private   typeof
continue   function   protected   var
debugger   goto   public   void
default   if   return   volatile
delete   implements   short   while
do   import   static   with
double   in   superF)objkeyr   c                 C   s  |r4t | tst| } t| r,| tvr,| S t| S | d u r@dS | du sP| du r\| rXdS dS t | ttfrrt| S t | trdd	t
dd	 |  D  S t | trd
d	t
dd	 | D  S t | ttfrd
d	dd	 | D  S t | t rt| S tt| d S )NnullTFtruefalsez{%s},c                 s   s(   | ] \}}d t |dt |f V  qdS )z%s:%sTNdumps).0r(   valuer   r   r   	<genexpr>Z   s
   zdumps.<locals>.<genexpr>z[%s]c                 s   s   | ]}t |V  qd S Nr-   r/   xr   r   r   r1   _   r$   c                 s   s   | ]}t |V  qd S r2   r-   r3   r   r   r   r1   a   r$   )
isinstancer   _nameonly_rer   reswordsr    intfloatdictjoinsorteditemssettuplelist	TypeErrortype)r'   r(   r   r   r   r.   K   s.    


r.   )r'   fr   c                 C   s   | t|  d S r2   )writer.   )r'   rC   r   r   r   dumpg   s    rE   )r4   r   c                 C   s  t  }d}t| }g }|}d}g }||k r~| | }|dkrbi }|| d}|| |d7 }q"|dkrg }|| d}|| |d7 }q"|dv r|r|d |urtd	d}| }	|  |r~|d }t|tr|d |u rtd
|	|	||d < n
||	 nq~|d7 }q"|dkrP|r6tdt|trFd}|d7 }q"|dkrt|tsntd|d7 }|stdd}q"d}
t| |}|rt	|
 dd }
nt| |}|rt|
 }
nft| |}|r0|
 }
|
dkr d}
n.|
dkrd}
n|
dkr d}
n|s<tdntd| | }t|trr|r`|
|d< n|
||d < d}q"||
 q"||u rtd|S )z8Loader that can read the JS subset the indexer produces.r   F{T   [z}]zunfinished dictzinvalid key objectr,   zmultiple keys:zcolon in listzmultiple valuesNr*   r+   r)   zbareword as valuezread error at pos %dznothing loaded from string)objectlenappend
ValueErrorpopr5   r:   _str_rer   r&   r   _int_rer8   _name_reend)r4   Znothingir   stackr'   r(   keyscZoldobjyr"   r   r   r   loadsk   s    


















rY   )rC   r   c                 C   s   t |  S r2   )rY   read)rC   r   r   r   load   s    r[   )F)__doc__retypingr   r   r   r   r   r   compilerP   rQ   rR   r6   r   r   r%   r   r    r&   r>   splitr7   boolr.   rE   rY   r[   r   r   r   r   <module>   s.    






\