+
    EN˜j¤  ã                   óÜ  € R t ^ RIt^ RIt^ RIt]P                  ! R]P
                  4      t]P                  ! R4      t]P                  ! R4      t]P                  ! R4      t	RR R llt
R R	 ltRR
 R lltRR lt]R8X  dd   ]P                  R,           U u. uF  q R8w  g   K  V NK  	  up t]! ]4      ^8  d   ]P$                  ! ] 4       ]! ]R]P                  9  R7       R# R# u up i )uâ  Convert Android string-resource escaping to what Compose resources understand.

Android's aapt and Compose Multiplatform do NOT share escaping rules. Moving a
strings.xml from `res/values/` to `composeResources/values/` verbatim therefore
renders some strings wrong -- the login screen showed `Don\'t have a Nostr account?`
with a literal backslash.

Compose 1.11.1 `handleSpecialCharacters` (compose-gradle-plugin) resolves ONLY:

    \uXXXX, \n, \t     and collapses \\ -> \

It does not handle these Android conventions, so this script applies them itself:

    \'  -> '        \"  -> "        \?  -> ?        \@  -> @
    "â€¦"  -> â€¦        (Android wraps a value in quotes to preserve leading/trailing
                      spaces; Compose would render the quotes literally)

\n, \t, \uXXXX and \\ are deliberately left alone -- Compose already resolves
them, and converting them here would double-process.

Usage:  fix_escapes.py <file-or-dir> [...]        (idempotent; safe to re-run)
Nz3(<(?:string|item)\b[^>]*>)(.*?)(</(?:string|item)>)z\s+tools:[\w.-]+="[^"]*"z\s+xmlns:tools="[^"]*"z(?<!\\)\\(['\"?@])c                ó<   € V ^8„  d   QhR\         R\        R\         /# )é   ÚtextÚunwrap_quotesÚreturn)ÚstrÚbool)Úformats   "ÚN/Users/vitor/Documents/workspace/Amethyst/tools/strings-migrate/fix_escapes.pyÚ__annotate__r   (   s!   € ÷ )ñ )”3ð )¤tð )´sñ )ó    c                óÄ   € V'       dD   \        V 4      ^8¼  d4   V P                  R4      '       d   V P                  R4      '       d   V ^R p \        P	                  RV 4      # )aš  Convert one element's text.

NOTE: quote-unwrapping is NOT idempotent and must run exactly once per file, at
migration time. Android wraps a value in quotes to protect whitespace, but after
`"` has been converted to `"` a legitimately quoted value is indistinguishable
from a wrapped one -- a second pass strips the real quotes. Repair runs over
already-migrated files must therefore pass unwrap_quotes=False.
Ú"z\1éÿÿÿÿ)ÚlenÚ
startswithÚendswithÚANDROID_ONLYÚsub)r   r   s   &&r
   Úfix_textr   (   sL   € ÷ œ˜T› aœ¨D¯O©O¸C×,@Ò,@ÀTÇ]Á]ÐSV×EWÒEWØ�A�bˆzˆÜ×Ñ˜E 4Ó(Ð(r   c                ó0   € V ^8„  d   QhR\         R\        /# )r   Úsrcr   )r   Útuple)r	   s   "r
   r   r   6   s   € ÷ ñ ¤#ð ¬%ñ r   c                óv   € \         P                  RV 4      w  r\        P                  RV4      w  rWV,           3# )zFDrop `tools:` attributes (and any xmlns:tools) that mean nothing here.Ú )Ú
TOOLS_ATTRÚsubnÚTOOLS_NS)r   ÚoutÚnÚms   &   r
   Ústrip_android_only_attrsr!   6   s2   € ä�_‰_˜R Ó%�F€CÜ�]‰]˜2˜sÓ#�F€CØ�A•ˆ:Ðr   c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r   Úpathr   r   )r   r   Úint)r	   s   "r
   r   r   =   s!   € ÷ ñ ”3ð ¤tð ´sñ r   c                 óò   aa€ \        V R R7      P                  4       p^ oVV3R lp\        P                  W24      p\	        V4      w  rESV,          oS'       d   \        V RR R7      P                  V4       S# )zutf-8)Úencodingc                 óÒ   <€ \        V P                  ^4      S4      pWP                  ^4      8w  d
   S^,          oV P                  ^4      V,           V P                  ^4      ,           # )r   )r   Úgroup)r    ÚfixedÚchangedr   s   & €€r
   ÚreplÚfix_file.<locals>.replA   sN   ø€ ä˜Ÿ™ › ]Ó3ˆØ—G‘G˜A“JÔØ�q�LˆGØ�w‰w�q‹z˜EÕ! A§G¡G¨A£JÕ.Ð.r   Úw)ÚopenÚreadÚ	STRING_ELr   r!   Úwrite)r#   r   r   r+   r   Ústrippedr*   s   &f    @r
   Úfix_filer3   =   sg   ù€ Ü
ˆt˜gÔ
&×
+Ñ
+Ó
-€CØ€Gö/ô �-‰-˜Ó
"€CÜ,¨SÓ1�M€CØˆxÕ€GßÜˆT�3 Ô)×/Ñ/°Ô4Ø€Nr   c           
      ó  € ^ ;r#V  Få  p. p\         P                  P                  V4      '       do   \         P                  ! V4       FS  w  rgpYX U	u. uF:  q™P	                  R4      '       g   K  \         P                  P                  Wi4      NK<  	  up	,          pKU  	  MV.p\        V4       F;  p
\        W¡4      p	V	'       g   K  V^,          pW9,          p\        RV
 RV	 R24       K=  	  Kç  	  \        RV RV R24       R# u up	i )	é    z.xmlz  z: z entriesz
fixed z entries across z filesN)	Úosr#   ÚisdirÚwalkr   ÚjoinÚsortedr3   Úprint)Úpathsr   Útotal_filesÚtotal_entriesÚpÚfilesÚrootÚ_Únamesr   Úfs   &&         r
   ÚmainrE   P   sã   € Ø"#Ð#€KÛˆØˆÜ�7‰7�=‰=˜×ÒÜ"$§'¢'¨!¦*‘�˜Ø¸ÓU¹°AÇ*Á*ÈV×BTÔ/œ"Ÿ'™'Ÿ,™, tÖ/¹ÑUÕU’ò #-ð �CˆEÜ˜–ˆAÜ˜Ó*ˆAß‰qØ˜qÕ �ØÕ"�Ü˜˜1˜#˜R ˜s (Ð+Ö,ó ñ ô 
ˆH�]�OÐ#3°K°=ÀÐ
GÖHùò Vs   ÁD
Á-#D
Ú__main__:é   NNz--no-unwrap-quotes)r   )T)Ú__doc__ÚreÚsysr6   ÚcompileÚSr0   r   r   r   r   r!   r3   rE   Ú__name__ÚargvÚargsr   Úexit)Úas   0r
   Ú<module>rR      sÏ   ðñó, 
Û 
Û 	à�JŠJÐMÈrÏtÉtÓT€	ð �ZŠZÐ3Ó4€
Ø�:Š:Ð/Ó0€à�zŠzÐ/Ó0€÷)õ÷ô&Ið$ ˆzÔØ—x‘x –|ÓA‘|�!Ð,@Ñ'@�AˆA‘|ÑA€DÙ
ˆ4ƒy�1„}Ø�Š�ÔÙˆÐ1¸¿¹ÑA×Bñ	 ùÚAs   ÂC)Â&C)