
    u%j[                     
   d dl Z d dlmZ d dlmZ d dlmZ  e j                  d      Z	 G d de
      Z G d de
      Z G d	 d
e
      Z G d de
      Z G d de
      Z G d de
      Z G d de
      Z G d de
      Zd Zy)    N)unpack)format_valuezpyaxmlparser.arscutilc                       e Zd ZdZd Zd Zy)ARSCResTablePackagezw
    See http://androidxref.com/9.0.0_r3/xref/frameworks/base/libs/androidfw/include/androidfw/ResourceTypes.h#861
    c                    || _         |j                         | _        t        d|j	                  d            d   | _        |j                  d      | _        t        d|j	                  d            d   | _        t        d|j	                  d            d   | _	        t        d|j	                  d            d   | _
        t        d|j	                  d            d   | _        | j
                  dz  | _        y )N<I   r         )headerget_idxstartr   readidreadNullStringnametypeStringslastPublicType
keyStringslastPublicKeymResId)selfbuffr   s      c/home/ubuntu/.local/share/pipx/venvs/gplaycli/lib/python3.12/site-packages/pyaxmlparser/arscutil.py__init__zARSCResTablePackage.__init__   s    \\^
tyy|,Q/'',	!$		!5a8$T499Q<8; tyy|4Q7#D$))A,7:ggm    c                 f    | j                   j                  dd      }|d |j                  d       }|S )Nzutf-16replace )r   decodefind)r   r   s     r   get_namezARSCResTablePackage.get_name)   s3    yy)4&TYYv&'r   N)__name__
__module____qualname____doc__r   r"    r   r   r   r      s    	$r   r   c                   `    e Zd ZdZdZd Zed        Zed        Zed        Z	ed        Z
d Zy	)

ARSCHeadera  
    Object which contains a Resource Chunk.
    This is an implementation of the `ResChunk_header`.

    It will throw an AssertionError if the header could not be read successfully.

    It is not checked if the data is outside the buffer size nor if the current
    chunk fits into the parent chunk (if any)!

    See http://androidxref.com/9.0.0_r3/xref/frameworks/base/libs/androidfw/include/androidfw/ResourceTypes.h#196
       c                    |j                         | _        |j                         | j                  | j                  z   k\  s J dj	                  | j                               t        d|j                  | j                              \  | _        | _        | _	        | j                  | j                  k\  s+J dj	                  | j                  | j                               | j                  | j                  k\  s+J dj	                  | j                  | j                               | j                  | j                  k\  s6J dj	                  | j                  | j                  | j                               y )Nz,Can not read over the buffer size! Offset={}z<HHLzCdeclared header size is smaller than required size of {}! Offset={}zBdeclared chunk size is smaller than required size of {}! Offset={}zDdeclared chunk size ({}) is smaller than header size ({})! Offset={})
r   r   sizeSIZEformatr   r   _type_header_size_size)r   r   s     r   r   zARSCHeader.__init__=   s8   \\^
yy{djj49944w6d6k6klplvlv6ww44:6499TYYCW4X1
D%tz   DII- 	pQXXY]YbYbdhdndno	p-zzTYY& 	oPWWX\XaXacgcmcmn	o&zzT... 	fRYYZ^ZdZdZ^ZkZkZ^ZdZdf	f.r   c                     | j                   S )z0
        Type identifier for this chunk
        )r/   r   s    r   typezARSCHeader.typeN   s    
 zzr   c                     | j                   S )z
        Size of the chunk header (in bytes).  Adding this value to
        the address of the chunk allows you to find its associated data
        (if any).
        )r0   r3   s    r   header_sizezARSCHeader.header_sizeU   s        r   c                     | j                   S )a`  
        Total size of this chunk (in bytes).  This is the chunkSize plus
        the size of any data associated with the chunk.  Adding this value
        to the chunk allows you to completely skip its contents (including
        any child chunks).  If this value is the same as chunkSize, there is
        no data associated with the chunk.
        )r1   r3   s    r   r,   zARSCHeader.size^   s     zzr   c                 4    | j                   | j                  z   S )z
        Get the absolute offset inside the file, where the chunk ends.
        This is equal to `ARSCHeader.start + ARSCHeader.size`.
        )r   r,   r3   s    r   endzARSCHeader.endi   s     zzDII%%r   c                 z    dj                  | j                  | j                  | j                  | j                        S )Nz@<ARSCHeader idx='0x{:08x}' type='{}' header_size='{}' size='{}'>)r.   r   r4   r6   r,   r3   s    r   __repr__zARSCHeader.__repr__q   s-    N
&TYY(8(8$))
D	Er   N)r#   r$   r%   r&   r-   r   propertyr4   r6   r,   r9   r;   r'   r   r   r)   r)   /   sj    
 Df"   ! !   & &Er   r)   c                       e Zd ZdZddZy)ARSCResTypeSpeczx
    See http://androidxref.com/9.0.0_r3/xref/frameworks/base/libs/androidfw/include/androidfw/ResourceTypes.h#1327
    Nc           	         |j                         | _        || _        t        d|j	                  d            d   | _        t        d|j	                  d            d   | _        t        d|j	                  d            d   | _        d}| j                  dk7  rt        j                  d       d}| j                  dk7  rt        j                  d	       d}|s}t        d
|j	                  d            d   | _
        g | _        t        d| j                        D ]9  }| j                  j                  t        d
|j	                  d            d          ; y y )N<B   r   <H   Fres0 is not zero!Tzres1 is not zero!r   r	   )r   r   parentr   r   r   res0res1logwarning
entryCounttypespec_entriesrangeappend)r   r   rE   	res_erroris        r   r   zARSCResTypeSpec.__init__{   s   \\^
tyy|,Q/41.q1	41.q1		99>KK+,I99>KK+,I$T499Q<8;DO$&D!1doo. L%%,,VD$))A,-G-JKL	 r   N)r#   r$   r%   r&   r   r'   r   r   r>   r>   w   s    Lr   r>   c                   *    e Zd ZdZddZd Zd Zd Zy)ARSCResTypezx
    See http://androidxref.com/9.0.0_r3/xref/frameworks/base/libs/androidfw/include/androidfw/ResourceTypes.h#1364
    Nc                    |j                         | _        || _        t        d|j	                  d            d   | _        t        d|j	                  d            \  | _        t        d|j	                  d            d   | _        | j                  dk(  sJ d       t        d|j	                  d            d   | _        t        d|j	                  d            d   | _	        d	| j                  j                         z  | j
                  d
z  z  | _        | j                  j                  | j                         t        |      | _        y )Nr@   rA   r   rB   rC   zreserved must be zero!r   r	         ~    )r   r   rE   r   r   r   flagsreservedrJ   entriesStart
get_mResIdr   
set_mResIdARSCResTableConfigconfigr   r   rE   s      r   r   zARSCResType.__init__   s    \\^
tyy|,Q/T499Q<0
tTYYq\215}}!;#;;! tyy|4Q7"416q9!DKK$:$:$<<2Mt{{+(.r   c                 f    | j                   j                  j                  | j                  dz
        S )NrA   )rE   mTableStrings	getStringr   r3   s    r   get_typezARSCResType.get_type   s%    {{((22477Q;??r   c                 6    | j                   j                         S rP   )rE   get_package_namer3   s    r   rc   zARSCResType.get_package_name   s    {{++--r   c                    d| j                   | j                  | j                  | j                  | j                  | j
                  | j                  d| j                  j                  j                  | j                  dz
        z   fz  S )Nz+ARSCResType(%x, %x, %x, %x, %x, %x, %x, %s)ztable:rA   )
r   r   rV   rW   rJ   rX   r   rE   r_   r`   r3   s    r   r;   zARSCResType.__repr__   sm    <JJGGJJMMOOKKt{{00::477Q;GG	@
 	
 		
r   rP   )r#   r$   r%   r&   r   ra   rc   r;   r'   r   r   rR   rR      s    / @.

r   rR   c                   p    e Zd ZdZed        ZddZd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zy)r[   a  
    ARSCResTableConfig contains the configuration for specific resource selection.
    This is used on the device to determine which resources should be loaded
    based on different properties of the device like locale or displaysize.

    See the definition of ResTable_config in
    http://androidxref.com/9.0.0_r3/xref/frameworks/base/libs/androidfw/include/androidfw/ResourceTypes.h#911
    c                 R    t        | d      st        d       | _        | j                  S )NDEFAULT)hasattrr[   rg   )clss    r   default_configz!ARSCResTableConfig.default_config   s"    sI&,T2CK{{r   Nc                 	   ||j                         | _        t        d|j                  d            d   | _        t        d|j                  d            d   | _        t        d|j                  d            d   | _        t        d|j                  d            d   | _        t        d|j                  d            d   | _        t        d|j                  d            d   | _	        t        d|j                  d            d   | _
        | j                  dk\  r#t        d|j                  d            \  | _        n5t        j                  dj                  | j                               d| _        | j                  dk\  r#t        d|j                  d            \  | _        n5t        j                  dj                  | j                               d| _        | j                  dk\  r#t        d|j                  d            \  | _        n5t        j                  d	j                  | j                               d| _        | j                  |j#                         | j                  z
  z
  | _        | j$                  dkD  r6t        j                  d
       |j                  | j$                        | _        y y d| _        d| _        |j)                  dd      dz  dz  |j)                  dd      dz  dz  z   | _        d| _        |j)                  dd      dd D ])  \  }}| xj                  t+        |      |dz  z  z  c_        + |j)                  dd      dz  dz  |j)                  dd      dz  dz  z   |j)                  dd      dz  dz  z   | _        |j)                  dd      dz  dz  |j)                  dd      dz  dz  z   |j)                  dd      dz  dz  z   |j)                  dd      dz  dz  z   | _        |j)                  dd      dz  dz  |j)                  dd      dz  dz  z   | _	        |j)                  dd      dz  dz  |j)                  dd      dz  dz  z   | _
        |j)                  dd      dz  dz  |j)                  d d      dz  dz  z   |j)                  d!d      dz  dz  z   | _        |j)                  d"d      dz  dz  |j)                  d#d      dz  dz  z   | _        d| _        d| _        y )$Nr   r	   r       z/This file does not have a screenConfig! size={}$   z/This file does not have a screenSizeDp! size={}(   z0This file does not have a screenConfig2! size={}zSkipping padding bytes!mcc  mncrU   locale r*   orientation   touchscreendensitykeyboard
navigation
inputFlags	inputPad0r   screenWidthscreenHeight
sdkVersionminorVersionscreenLayoutuiModesmallestScreenWidthDpscreenWidthDpscreenHeightDp)r   r   r   r   r,   imsirr   
screenTypeinput
screenSizeversionscreenConfigrH   debugr.   screenSizeDpscreenConfig2tellexceedingSizepaddingpopord)r   r   kwargschar_ixchars        r   r   zARSCResTableConfig.__init__   s   DJ tTYYq\215DI tTYYq\215DI
 !tyy|4Q7DK %T499Q<8;DO  diil3A6DJ
 %T499Q<8;DO
 "$		!5a8DL yyB
 &,D$))A,%?"!		KRRSWS\S\]^$%!yyB &,D$))A,%?"!		KRRSWS\S\]^$%!yyB
 '-T499Q<&@#"		LSSTXT]T]^_%&"!%diikDJJ.F!GD!!A%		34#yy););< &
 DJDI**UA&/A5**UA&/B68 I DK!'Hb!9!A!> <D	gk :;< **]A.5!;**]A.5!;=**Y*V3:< O **Z+d2q8**\1-4:<**\1-4;= **[!,t3:< J **]A.7A=**^Q/&8R?A O
 **\1-61<**^Q/&8R?A L
 **^Q/$61<**Xq)D0Q68**4a86AbHJ  **_a069a?**-q1F:rAC 
 "#D!"Dr   c                 0   d}|d   dz  r_|d   dz  }|d   dz  dz	  |d   dz  dz  z   }|d   d	z  d
z	  }|t        ||z         z  }|t        ||z         z  }|t        ||z         z  }|S |d   r|t        |d         z  }|d   r|t        |d         z  }|S )Nrs   r      rA               |   rC   )chr)r   char_in	char_basechar_outfirstsecondthirds          r   _unpack_language_or_regionz-ARSCResTableConfig._unpack_language_or_region=  s    1:AJ%EqzD(Q.GAJ4E!3KLFQZ$&1,EEI-..HFY.//HEI-..H 	 qzC
O+qzC
O+r   c                 (   | j                   dk7  r| j                  | j                   dz  | j                   dz  dz	  gt        d            }| j                  | j                   dz  dz	  | j                   dz  d	z	  gt        d
            }|r|dz   |z   S |S y)zk
        Returns the combined language+region string or    for the default locale
        :return:
        r   ru      r*   ai   rU   rT   r   0z-rz  )rr   r   r   )r   	_language_regions      r   get_language_and_regionz*ARSCResTableConfig.get_language_and_regionM  s    
 ;;!77t#dkkF&:q%@CSXOI55[[8+2[[:-"4 s8	G 4;I$w.I	Ir   c                 "    | j                         S )zW
        Here for legacy reasons.

        use :meth:`~get_qualifier` instead.
        )get_qualifierr3   s    r   get_config_name_friendlyz+ARSCResTableConfig.get_config_name_friendly^  s     !!##r   c                    g }| j                   dz  }| j                   dz  dz	  }|dk7  r|j                  d|z         |dk7  r|j                  d|z         | j                  dk7  r|j                  | j                                | j                  dz  }|t
        j                  z  dk7  r|t
        j                  z  t
        j                  k(  r|j                  d       n[|t
        j                  z  t
        j                  k(  r|j                  d	       n%|j                  d
|t
        j                  z  z         | j                  dz  dz	  }|dk7  r|j                  d|z         | j                  dz  }| j                  dz  dz	  }|dk7  r|j                  d|z         |dk7  r|j                  d|z         |t
        j                  z  t
        j                  k7  r|t
        j                  z  t
        j                  k(  r|j                  d       n|t
        j                  z  t
        j                  k(  r|j                  d       n|t
        j                  z  t
        j                  k(  r|j                  d       n[|t
        j                  z  t
        j                  k(  r|j                  d       n%|j                  d|t
        j                  z  z         |t
        j                   z  dk7  r|t
        j                   z  t
        j"                  k(  r|j                  d       n[|t
        j                   z  t
        j$                  k(  r|j                  d       n%|j                  d|t
        j                   z  z         | j&                  dz  dz	  }|t
        j(                  k7  rc|t
        j*                  k(  r|j                  d       n=|t
        j,                  k(  r|j                  d       n|t
        j.                  k(  r|j                  d       n|t
        j0                  k(  r|j                  d       n|t
        j2                  k(  r|j                  d       n|t
        j4                  k(  r|j                  d       n|t
        j6                  k(  r|j                  d       n^|t
        j8                  k(  r|j                  d       n9|t
        j:                  k(  r|j                  d       n|j                  d|z         | j&                  d z  d!z	  }	|	t
        j<                  k7  r|	t
        j>                  k(  r|j                  d"       n^|	t
        j@                  k(  r|j                  d#       n9|	t
        jB                  k(  r|j                  d$       n|j                  d%|	z         | jD                  }
|
dk7  r7| jD                  dz  }| jD                  dz  dz	  }|j                  d&||fz         | jF                  }|dk7  rN| jF                  dz  }| jF                  dz  dz	  }|j                  d'|z         |dk7  r|j                  d(|z         d)jI                  |      S )*ai  
        Return resource name qualifier for the current configuration.
        for example
        * `ldpi-v4`
        * `hdpi-v4`

        All possible qualifiers are listed in table 2 of https://developer.android.com/guide
        /topics/resources/providing-resources

        FIXME: This name might not have all properties set!
        :return: str
        rp         rU   r   zmcc%dzmnc%dru   ldltrldrtlzlayoutDir_%dzsw%ddpzw%ddpzh%ddpsmallnormallargexlargezscreenLayoutSize_%dnotlonglongzscreenLayoutLong_%dldpimdpitvdpihdpixhdpixxhdpixxxhdpinodpianydpiz%ddpir   r*   notouchfingerstylusztouchscreen_%dz%dx%dzv%dz.%d-)%r   rM   rr   r   r   constMASK_LAYOUTDIRLAYOUTDIR_LTRLAYOUTDIR_RTLr   MASK_SCREENSIZESCREENSIZE_ANYSCREENSIZE_SMALLSCREENSIZE_NORMALSCREENSIZE_LARGESCREENSIZE_XLARGEMASK_SCREENLONGSCREENLONG_NOSCREENLONG_YESr   DENSITY_DEFAULTDENSITY_LOWDENSITY_MEDIUM
DENSITY_TVDENSITY_HIGHDENSITY_XHIGHDENSITY_XXHIGHDENSITY_XXXHIGHDENSITY_NONEDENSITY_ANYTOUCHSCREEN_ANYTOUCHSCREEN_NOTOUCHTOUCHSCREEN_FINGERTOUCHSCREEN_STYLUSr   r   join)r   resro   rq   r   r   r   r   rw   rv   r   r|   r}   r   r~   r   s                   r   r   z ARSCResTableConfig.get_qualifierf  s    ii& yy:%",!8JJw}%!8JJw}%;;!JJt3356((4/5///A5e222e6I6II

7# 4 448K8KK

7#

>\E<P<P-PQR!%!2!2Z!?B F A%JJx"778))F2++j8R?AJJw./QJJw/05000U5I5IIe333u7M7MM

7# 5 559P9PP

8$ 5 559O9OO

7# 5 559P9PP

8$

0L5CXCX4XYZ5000Q6e333u7J7JJ

9% 5 559M9MM

6"

0L5CXCX4XYZ??Z/B6e+++%+++

6"E000

6"E,,,

7#E...

6"E///

7#E000

8$E111

9%E...

7#E---

8$

7g.//A5%///e777

9% 8 88

8$ 8 88

8$

+k9:__
?//F2K OOj8R?LJJw+|!<<=,,a<.J LL:5"<LJJuz)*q 

5</0xx}r   c                 `    | j                   dz  }t        |dz        t        |dz  dz	        z   S )Nrp   ru   r   r*   rr   r   r   xs     r   get_languagezARSCResTableConfig.get_language  s1    KK*$1v:a&jQ%6!777r   c                 f    | j                   dz  dz	  }t        |dz        t        |dz  dz	        z   S )Nr   rU   ru   r   r*   r   r   s     r   get_countryzARSCResTableConfig.get_country  s6    [[:%",1v:a&jQ%6!777r   c                 *    | j                   dz	  dz  }|S )NrU   rp   )r   r   s     r   get_densityzARSCResTableConfig.get_density  s    oo#v-r   c                 J    t        t        d | j                                     S )z
        Test if this is a default resource, which matches all

        This is indicated that all fields are zero.
        :return: True if default, False otherwise
        c                     | dk(  S Nr   r'   )r   s    r   <lambda>z/ARSCResTableConfig.is_default.<locals>.<lambda>  s
    a r   )allmap
_get_tupler3   s    r   
is_defaultzARSCResTableConfig.is_default  s     3'):;<<r   c           	          | j                   | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  f	S rP   )	r   rr   r   r   r   r   r   r   r   r3   s    r   r   zARSCResTableConfig._get_tuple  sQ    IIKKOOJJOOLL

 
	
r   c                 4    t        | j                               S rP   )hashr   r3   s    r   __hash__zARSCResTableConfig.__hash__  s    DOO%&&r   c                 D    | j                         |j                         k(  S rP   )r   )r   others     r   __eq__zARSCResTableConfig.__eq__  s     E$4$4$666r   c                 p    dj                  | j                         t        | j                                     S )Nz<ARSCResTableConfig '{}'='{}'>)r.   r   reprr   r3   s    r   r;   zARSCResTableConfig.__repr__   s-    /66t7I7I7KTRVRaRaRcMdeer   rP   )r#   r$   r%   r&   classmethodrj   r   r   r   r   r   r   r   r   r   r   r   r   r;   r'   r   r   r[   r[      sa      
t#l "$pd88=
'7fr   r[   c                   N    e Zd ZdZdZdZdZddZd Zd Z	d	 Z
d
 Zd Zd Zd Zy)ARSCResTableEntryz
    See https://github.com/LineageOS/android_frameworks_base/blob/
    df2898d9ce306bb2fe922d3beaa34a9cf6873d27/include/androidfw/ResourceTypes.h#L1370
    rA   rC   r	   Nc                    |j                         | _        || _        || _        t	        d|j                  d            d   | _        t	        d|j                  d            d   | _        t	        d|j                  d            d   | _        | j                         rt        ||      | _        y t        || j                        | _        y )NrB   rC   r   r   r	   )r   r   r   rE   r   r   r,   rV   index
is_complexARSCComplexitemARSCResStringPoolRefkey)r   r   r   rE   s       r   r   zARSCResTableEntry.__init__  s    \\^
41.q1	D$))A,/2
D$))A,/2
??#D&1DI ,D$++>DHr   c                     | j                   S rP   )r  r3   s    r   	get_indexzARSCResTableEntry.get_index  s    zzr   c                 `    | j                   j                  j                  | j                        S rP   )rE   mKeyStringsr`   r  r3   s    r   	get_valuezARSCResTableEntry.get_value  s!    {{&&00<<r   c                 6    | j                   j                         S rP   )r  get_data_valuer3   s    r   get_key_datazARSCResTableEntry.get_key_data!  s    xx&&((r   c                 :    | j                   | j                  z  dk7  S r   )rV   FLAG_PUBLICr3   s    r   	is_publiczARSCResTableEntry.is_public$  s    

T---!33r   c                 :    | j                   | j                  z  dk7  S r   )rV   FLAG_COMPLEXr3   s    r   r  zARSCResTableEntry.is_complex'  s    

T...144r   c                 :    | j                   | j                  z  dk7  S r   )rV   	FLAG_WEAKr3   s    r   is_weakzARSCResTableEntry.is_weak*  s    

T^^+11r   c           	          dj                  | j                  | j                  | j                  | j                  | j
                  | j                         r| j                        S | j                        S )Nzi<ARSCResTableEntry idx='0x{:08x}' mResId='0x{:08x}' size='{}' flags='0x{:02x}' index='0x{:x}' holding={}>)	r.   r   r   r,   rV   r  r  r  r  r3   s    r   r;   zARSCResTableEntry.__repr__-  s\    :
&JJKKIIJJJJ*DII:		: 15:		:r   rP   )r#   r$   r%   r&   r  r  r  r   r  r  r  r  r  r  r;   r'   r   r   r   r     s@     LKI?=)452
:r   r   c                       e Zd ZddZd Zy)r  Nc           	         |j                         | _        || _        t        d|j	                  d            d   | _        t        d|j	                  d            d   | _        g | _        t        d| j                        D ]O  }| j                  j                  t        d|j	                  d            d   t        || j                        f       Q y )Nr   r	   r   )r   r   rE   r   r   	id_parentcountitemsrL   rM   r  )r   r   rE   rO   s       r   r   zARSCComplex.__init__;  s    \\^
diil3A6D$))A,/2

q$**% 	IAJJvdDIIaL9!<3D$++FH I	Ir   c                 d    dj                  | j                  | j                  | j                        S )Nz3<ARSCComplex idx='0x{:08x}' parent='{}' count='{}'>)r.   r   r  r  r3   s    r   r;   zARSCComplex.__repr__G  s)    DKKDJJX\XfXfhlhrhrssr   rP   )r#   r$   r%   r   r;   r'   r   r   r  r  :  s    
Itr   r  c                   >    e Zd Zd
dZd Zd Zd Zd Zd Zd Z	d	 Z
y)r  Nc                    |j                         | _        || _        t        d|j	                  d            \  | _        t        d|j	                  d            \  | _        | j                  dk7  rt        j                  d       y t        d|j	                  d            d   | _	        t        d|j	                  d            d   | _
        y )	NrB   rC   r@   rA   r   rD   r   r	   )r   r   rE   r   r   r,   rF   rH   rI   	data_typedatar]   s      r   r   zARSCResStringPoolRef.__init__L  s    \\^
D$))A,/
	D$))A,/
	99>KK+,#D$))A,7:DNtTYYq\215DIr   c                 `    | j                   j                  j                  | j                        S rP   )rE   stringpool_mainr`   r!  r3   s    r   r  z#ARSCResStringPoolRef.get_data_valueX  s!    {{**44TYY??r   c                     | j                   S rP   )r!  r3   s    r   get_datazARSCResStringPoolRef.get_data[  s    yyr   c                     | j                   S rP   )r   r3   s    r   get_data_typez"ARSCResStringPoolRef.get_data_type^  s    ~~r   c                 <    t         j                  | j                     S rP   )r   
TYPE_TABLEr   r3   s    r   get_data_type_stringz)ARSCResStringPoolRef.get_data_type_stringa  s    //r   c                     t        | j                  | j                  | j                  j                  j
                        S rP   )r   r   r!  rE   r#  r`   r3   s    r   r   z!ARSCResStringPoolRef.format_valued  s0    NNIIKK''11
 	
r   c                 <    | j                   t        j                  k(  S rP   )r   r   TYPE_REFERENCEr3   s    r   is_referencez!ARSCResStringPoolRef.is_referencek  s    ~~!5!555r   c           	          dj                  | j                  | j                  t        j                  j                  | j                  d| j                  z        | j                        S )NzI<ARSCResStringPoolRef idx='0x{:08x}' size='{}' type='{}' data='0x{:08x}'>z0x%x)r.   r   r,   r   r)  getr   r!  r3   s    r   r;   zARSCResStringPoolRef.__repr__n  sM    ZaaJJII  $..1HIII	 	r   rP   )r#   r$   r%   r   r  r%  r'  r*  r   r.  r;   r'   r   r   r  r  K  s+    
6@0
6r   r  c           	         d}| j                         D ]  }||dz   z  }| j                  |      D ]  }|dt        |      z   dz   z  }| j                  ||      D ]X  }|d|z   dz   z  }	  t	        | d|z   dz         ||      j                  dd      j                  d	      }|D ]  }|d
|z   d	z   z  } Z   |S # t        $ r Y lw xY w)z
    Return a string containing all resources packages ordered by packagename, locale and type.

    :param arscobj: :class:`~ARSCParser`
    :return: a string
    rs   z:
	z		get_
_resourceszutf-8r   
z			)get_packages_namesget_localesr   	get_typesgetattrr    splitAttributeError)arscobjr   packagerr   ttypetmp_buffrO   s          r   get_arsc_infor@  v  s
    D--/ %))'2 
	FD4<'%//D **7F; ..Nww0MN ))/)CEE$K % 41t 334
	 K & s   'A
B99	C	C	)loggingstructr   pyaxmlparser.constants	constantsr   pyaxmlparser.utilsr   	getLoggerrH   objectr   r)   r>   rR   r[   r   r  r  r@  r'   r   r   <module>rH     s   $   & +g/0& *EE EEPLf L4$
& $
NIf IfX
3: 3:lt& t"(6 (Vr   