
    i8                        S r SSKJr  SSKrSSKrSSKrSSKJrJrJ	r	J
r
JrJrJr  SSKJrJr  SSKJr  S r\" 5       u  rrrSS	S
\\\S.r\R0                  " SSR3                  \5      -  5      r\R0                  " S5      r\R0                  " S5      r\R0                  " S5      r\R0                  " S5      r\R0                  " S5      rSr \R0                  " S\ -  \RB                  \RD                  -  \RF                  -  5      r$\" S5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      S.	r%Sr& " S  S!\'5      r( " S" S#\'5      r) " S$ S%\'5      r*g)&zImplementation of JSONDecoder
    )absolute_importN   )fromhexu	text_typebinary_typePY2unichrascii)AttributedDictAttributedList)Errorc                      [        S5      n [        R                  S:w  a  U S S S S S2   U SS  S S S2   -   n [        R                  " SU 5      u  pXU* 4$ )N 7FF80000000000007FF0000000000000big   dd)r   sys	byteorderstructunpack)_BYTESnaninfs      J/home/james-whalen/.local/lib/python3.13/site-packages/dirtyjson/loader.py_floatconstantsr      sa    78F }}DbD!F12Jtt$44}}T6*HCcT>    TF)nulltruefalsez	-InfinityInfinityNaNz(%s)|z0(-?(?:0x[\da-fA-F]+|\d+))(\.\d+)?([eE][-+]?\d+)?z[0-9.+\-]*[()[0-9+\-*/eEx&|]+z(.*?)(["\\\x00-\x1f])z(.*?)(['\\\x00-\x1f])z([\w_$]+[\w\d_$]*)z 	
z[%s]*"'\/
	)	r%   r&   r'   r(   bfnrtzutf-8c                        \ rS rSrS rS rSrg)Position0   c                     Xl         X l        g Nlinecolumn)selfr9   r:   s      r   __init__Position.__init__1   s    	r   c                     U R                   UR                   :  a  gU R                   UR                   :  =(       d    U R                  UR                  :  $ )NFr8   )r;   others     r   __lt__Position.__lt__5   s:    99uzz!yy5::%Cu||)CCr   )r:   r9   N)__name__
__module____qualname____firstlineno__r<   r@   __static_attributes__ r   r   r4   r4   0   s    Dr   r4   c                       \ rS rSrS rSrg)KeyValuePosition;   c                     Xl         X l        g r7   keyvalue)r;   key_positionvalue_positions      r   r<   KeyValuePosition.__init__<   s    #
r   rL   N)rB   rC   rD   rE   r<   rF   rG   r   r   rI   rI   ;   s    $r   rI   c                       \ rS rSrSr  SS jrS rS rS rS r	SS	 jr
S
 r\\" S5      R                  \\R"                  4S jrS rS rSS jrSrg)DirtyJSONLoaderA   a  JSON decoder that can handle muck in the file

Performs the following translations in decoding by default:

+---------------+-------------------+
| JSON          | Python            |
+===============+===================+
| object        | AttributedDict    |
+---------------+-------------------+
| array         | list              |
+---------------+-------------------+
| string        | unicode           |
+---------------+-------------------+
| number (int)  | int, long         |
+---------------+-------------------+
| number (real) | float             |
+---------------+-------------------+
| true          | True              |
+---------------+-------------------+
| false         | False             |
+---------------+-------------------+
| null          | None              |
+---------------+-------------------+

It also understands ``NaN``, ``Infinity``, and ``-Infinity`` as
their corresponding ``float`` values, which is outside the JSON spec.

Nc           	         U=(       d    [         U l        U=(       d    [        U l        U=(       d    [        U l        U=(       d    [        R                  U l        0 U l	        [        (       d+  [        U[        5      (       a  UR                  5       U l        OXl        U R                  [         :w  a  U R                  R                  U R                  S5      R                  5       nU R                  U:w  a`  [!        U R                  5       HG  u  pxXU   :w  d  M  [#        SR%                  U R                  ['        U5      5      U R                  U5      e   [)        U R                  5      U l        SU l        SU l        SU l        SU l        g )NignorezNon-{} character {}r   r   Expecting value)DEFAULT_ENCODINGencodingfloatparse_floatint	parse_int
_CONSTANTS__getitem__parse_constantmemor	   
isinstancer   decodecontentencode	enumerater   formatr   lenendlinenocurrent_line_pospos	expecting)	r;   rd   rY   r[   r]   r`   fixedindex	characters	            r   r<   DirtyJSONLoader.__init___   s"    4$4&/%")c,F
0F0F	sz';77">>+DL"L==,,LL''x@GGIE||u$(1$,,(?$E %L0#$9$@$@PUV_P`$acgcocoqvww )@ t||$ !*r   c                      U R                   U R                     nU =R                  S-  sl        U$ ! [         a,    [        U R                  U R                   U R                  5      ef = fNr   )rd   rl   
IndexErrorr   rm   r;   nextchars     r   _next_characterDirtyJSONLoader._next_characterv   sX    	@||DHH-HHHMHO 	@dhh??	@s	   /2 6A(c                      U R                   U R                     nU[        ;   a)  U R                  5         U R                   U R                     nU =R                  S-  sl        U$ ! [         a     gf = f)Nr    )rd   rl   WHITESPACE_STR_skip_whitespacert   ru   s     r    _next_character_after_whitespace0DirtyJSONLoader._next_character_after_whitespace~   sc    	||DHH-H>)%%'<<1HHMHO 		s   A"A% %
A21A2c                     U R                  [        R                  U R                  U R                  5      R                  5       5        U R                  U R
                  S-
  :  a  g U R                  U R                  U R                  S-    nUS:X  d  US:X  ao  US:X  a  SOSnU R                  R                  X R                  5      nUS:  a  U R                  U[        U5      -   5        OU R                  U R
                  5        g g GM
  )N   z//z/*r+   z*/r   )_skip_forward_to
WHITESPACEmatchrd   rl   ri   ro   rh   )r;   	two_chars
terminatorlfs       r   r|    DirtyJSONLoader._skip_whitespace   s    !!*"2"24<<"J"N"N"PQxx$((Q,&TXXdhhl;ID I$5%.$%6TD
\\''
HH=7))"s:*>?))$((3 r   c                    XR                   :w  a{  U R                  R                  SU R                   U5      nU(       aF  U =R                  U-  sl        U R                  R	                  SU R                   U5      nUS-   U l        Xl         g g )Nr+   r   )rl   rd   countrj   rfindrk   )r;   ri   	linefeedsrposs       r   r    DirtyJSONLoader._skip_forward_to   sj    ((?**43?Iy(||))$#>(,q%H r   c                 h    [        U R                  U R                  U R                  -
  S-   U-   5      $ rs   )r4   rj   rl   rk   )r;   offsets     r   _current_position!DirtyJSONLoader._current_position   s,    TXX0E0E%E%IF%RSSr   c                    SU l         U R                  5       nUS:X  d  US:X  a  U R                  U5      $ US:X  a  U R                  5       $ US:X  a  U R	                  5       $ U =R
                  S-  sl        [        R                  U R                  U R
                  5      nU(       a7  UR                  5       U l        U R                  UR                  5       S   5      $ [        R                  U R                  U R
                  5      nU(       a  UR                  5       [        U R                  5      :X  d!  U R                  UR                  5          S;  a}  UR                  5       u  p4nU(       d  U(       a)  U R                  X4=(       d    S	-   U=(       d    S	-   5      nO U R                  [!        US5      5      nUR                  5       U l        U$ [$        R                  U R                  U R
                  5      nU(       aH   ['        UR(                  UR
                  UR                  5        5      nUR                  5       U l        U$ [/        U R                   U R                  U R
                  5      e! ["         a0    US   S
:X  a%  SUSS  -   nU R                  [!        US5      5      n Ne f = f! [*        [,        4 a"    [/        SU R                  U R
                  5      ef = f)NrW   r%   r&   {[r   r   z+-/*()rz   00ozCannot evaluate expression)rm   rw   parse_stringparse_objectparse_arrayrl   CONSTANT_REr   rd   ri   r`   groups	NUMBER_RErh   r[   r]   r\   
ValueErrorEQUATION_REevalstringSyntaxError	NameErrorr   )r;   rv   mintegerfracexpress          r   scanDirtyJSONLoader.scan   s@   *'')s?h#o$$X..s?$$&&s?##%%AdllDHH5uuwDH&&qxxz!}55OODLL$((3!%%'S..$,,quuw2Gx2W!"G3s&&w*"'='KL..Wa9C uuwDHJdllDHH5R188AEE!%%'23 uuwDHJDNNDLL$((;;! " qzS("&"4"nnS!_=  + R8$,,QQRs   "I8 0J5 86J20J252K'rz   c                    US:X  a  [         R                  O[        R                  n/ nUR                  nU R                  S-
  n	 U" U R
                  U R                  5      n
U
c  [        SU R
                  U	5      eU
R                  5       U l        U
R                  5       u  pU(       a9  U(       a*  [        U[        5      (       d  [        XR                  5      nU" U5        X:X  a  GOUS:w  a
  U" U5        M   U R
                  U R                     nUS:w  a   X-   nU =R                  S-  sl        GOYSnU R
                  U R                  S-   U R                  S-    nUSS	 n[        U5      S
:w  d  US:X  d  US:X  a#  [        XR
                  U R                  S-
  5      e [        US5      nU =R                  S-  sl        US:  a  US-  S:X  a  U R
                  U R                  U R                  S	-    S:X  a  U R
                  U R                  S	-   U R                  S-    nUSS	 n[        U5      S
:X  aH  US:X  dB  US:X  d<   [        US5      nUS-  S:X  a&  SUS-
  S-  US-
  -  -   nU =R                  S-  sl        [#        U5      nU" U5        GMU  U" U5      $ ! [         a    [        SU R
                  U	5      ef = f! [         a#    Sn[        XR
                  U R                  5      ef = f! [          a$    [        XR
                  U R                  S-
  5      ef = f! [          a!    [        XR
                  U R                  5      ef = f)aP  Scan the string for a JSON string. End is the index of the
character in string after the quote that started the JSON string.
Unescapes all valid JSON string escape sequences and raises ValueError
on attempt to decode an invalid string.

Returns a tuple of the decoded string and the index of the character in
string after the end quote.r%   r   zUnterminated string starting atr'   r   zInvalid \X escape sequence %rzInvalid \uXXXX escape sequence   r      xX   i  i   i   z\u   i   i   
   )STRINGCHUNK_DOUBLEQUOTEr   STRINGCHUNK_SINGLEQUOTEappendrl   rd   r   ri   r   rb   r   rY   rt   KeyErrorrh   r\   r   r
   )r;   terminating_character_b_join_py2_maxunicode_mchunks_appendbeginchunkrd   r   esccharmsgesc_xuniesc2uni2s                       r   r   DirtyJSONLoader.parse_string   s)    /Ds.J$**PgPmPm--1t||TXX.E}5t||UL Lyy{DH"',,.G
7I > >'?G  2t#
#Lll488,
 cz=7D A 8ll488a<1=Aas8q=ESLESL\\488a<@@Ac2,C A &3<6+AdllSWS[S[\`\d\dgh\hFimrFr<<1TXX\BD 1IE4yA~u|u|E#&tR=D  &=F2")sV|.B.2Vm.= #>C HHMHc{DM{ | V}S  L5t||UL LL   =:C\\488<<= " A\\488a<@@A  * E"'\\488"DDEs0   ;J" K %K7 	L( ""K-K47.L%(+Mc                    U R                   R                  n[        5       nU R                  5       n US:X  a   U$ U R	                  [        U5      * 5      nUS:X  d  US:X  a  U R                  U5      nOy[        R                  U R                  U R                  S-
  5      nUc!  [        SU R                  U R                  5      eUR                  5       U l
        UR                  5       S   nU" XU5      nU R                  5       S:w  a!  [        SU R                  U R                  5      eU R                  5         [        X@R	                  5       5      nU R!                  5       nUR#                  XXU5        U R                  5       nUS:X  a   U$ US	:w  a-  [        S
U R                  U R                  [        U5      -
  5      eU R                  5       nGM  )N}r%   r&   r   zExpecting property namer   :zExpecting ':' delimiter,zExpecting ',' delimiter or '}')ra   
setdefaultr   r}   r   rh   r   UNQUOTED_KEYNAMEr   rd   rl   r   ri   r   r|   rI   r   add_with_attributes)	r;   memo_getobjrv   key_posrM   r   key_value_posrN   s	            r   r   DirtyJSONLoader.parse_object  s   99'' 88:3@ 
? ,,c(m^<G3(c/''1(..t||TXX\J=1dhh0 0 !99;llnQ'3$C 446#=5t||TXXNN!!#,W6L6L6NOMIIKE##C><<>H3 
 S<dllDHHWZ[cWdLdee<<>HA r   c                    [        5       nU R                  5       nUS:X  a  U$ US:X  a!  [        SU R                  U R                  5      e US:X  a   U$ U =R                  [        U5      -  sl        U R                  5       nU R                  5       nUR                  XC5        U R                  5       nUS:X  a   U$ US:w  a-  [        SU R                  U R                  [        U5      -
  5      eU R                  5       nM  )N]rz   zExpecting value or ']'r   zExpecting ',' delimiter or ']')	r   r}   r   rd   rl   rh   r   r   r   )r;   valuesrv   	value_posrN   s        r   r   DirtyJSONLoader.parse_arrayK  s    !88:s?M^0$,,II3  HHH%H..0IIIKEMM%+<<>H3  S<dllDHHWZ[cWdLdee<<>H r   c                    U(       a  U R                  U5        U(       a  U R                  R                  SU R                  5      nU R                  R                  SU R                  5      nX4s=:  a  U R                  :  d  O  US:  a  UnX0R                  :  a  U R                  U5        U R	                  5         U R                  5       nU$ )ziReturn the Python representation of ``s`` (a ``str`` or ``unicode``
instance containing a JSON document)
r   r   r   )r   rd   findrl   r|   r   )r;   search_for_first_objectstart_indexior   s         r   rc   DirtyJSONLoader.decoded  s     !!+."!!#txx0A!!#txx0A  AEHH}%%a(iik
r   )rd   rk   rY   ri   rm   rj   ra   r`   r[   r]   rl   )NNNN)r   )Fr   )rB   rC   rD   rE   __doc__r<   rw   r}   r|   r   r   r   	BACKSLASHr   joinr	   r   
maxunicoder   r   r   rc   rF   rG   r   r   rS   rS   A   sf    : LP $+.@	"T)<X "23>>L\*X2r   rS   )+r   
__future__r   rer   r   compatr   r   r   r   r	   r
   r   dirtyjson.attributed_containersr   r   errorr   r   r#   PosInfNegInfr^   compiler   r   r   r   r   r   r   r{   VERBOSE	MULTILINEDOTALLr   r   rX   objectr4   rI   rS   rG   r   r   <module>r      sc   & 	 
  J J J J  &' VV 
 jj#((:"667JJJK	jj9:**%=> **%=> ::34 ZZ.0"**r||2Kbii2WX
 
3qwak#	
4qwQtW1T74	  Dv D$v $tf tr   