o $a@sdZddlZddlmZmZmZmZmZmZe dZ e dZ e dZ e dZ e dZd d d d d dddZe dZdedefddZdedefddZedZd&dededefddZdededdfdd Zd!edefd"d#Zdedefd$d%ZdS)'a& sphinx.util.jsdump ~~~~~~~~~~~~~~~~~~ This module implements a simple JavaScript serializer. Uses the basestring encode function from simplejson by Bob Ippolito. :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. N)IOAnyDictListMatchUnionz"(\\\\|\\"|[^"])*"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}|\\.sreturncCs*dtdtfdd}dtt||dS)NmatchrcSsv|d}zt|WSty:t|}|dkr d|fYS|d8}d|d?d@B}d|d@B}d||fYSw) Nriz\u%04xi iiz \u%04x\u%04x)group ESCAPE_DICTKeyErrorord)rrns1s2r4/usr/lib/python3/dist-packages/sphinx/util/jsdump.pyreplace$s    zencode_string..replacer )rstr ESCAPE_ASCIIsub)rrrrr encode_string#sr cCstdd|S)NcSstd|dS)Nr )evalr)mrrr6szdecode_string..)ESCAPEDr)rrrr decode_string5sr%aabstract 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 superFobjkeycCs|rt|ts t|}t|r|tvr|St|S|dur dS|dus(|dur.|r,dSdSt|ttfr9t|St|trNdd t dd | DSt|t rad d t d d |DSt|t tfrtd d d d |DSt|tr}t|Stt|) NnullTFtruefalsez{%s},css*|]\}}dt|dt|fVqdS)z%s:%sTNdumps).0r'valuerrr Zszdumps..z[%s]cs|]}t|VqdSNr,r.xrrrr0_csr1r2r,r3rrrr0ar5) isinstancer _nameonly_rerreswordsr intfloatdictjoinsorteditemssettuplelist TypeErrortype)r&r'rrrr-Ks.      r-fcCs|t|dSr2)writer-)r&rDrrrdumpgsrFr4c Cs~t}d}t|}g}|}d}g}||kr4||}|dkr1i}||d}|||d7}n|dkrHg}||d}|||d7}n|dvr|rZ|d|urXtd d}|} ||r|d}t|tr|d|urxtd | | ||d<n|| nn|d7}n|d kr|rtd t|trd}|d7}n|d krt|tstd|d7}|stdd}nud} t||} | rt | dd} n@t ||} | rt | } n1t ||} | r | } | dkrd} n| dkrd} n| dkrd} n|s tdntd|| }t|tr+|r"| |d<n| ||d<d}n|| ||ks||ur=td|S)z8Loader that can read the JS subset the indexer produces.rF{T[z}]zunfinished dictzinvalid key objectr+z multiple keys:z colon in listzmultiple valuesNr)r*r(zbareword as valuezread error at pos %dznothing loaded from string)objectlenappend ValueErrorpopr6r;_str_rerr%r_int_rer9_name_reend) r4nothingirstackr&r'keyscoldobjyr"rrrloadsks                          Nr\cCs t|Sr2)r\read)rDrrrloads r^)F)__doc__retypingrrrrrrcompilerQrRrSr7rrr$rr r%r?splitr8boolr-rFr\r^rrrrs4       \