+
    ¾¾jw  ã                   óz   € R t ^ RIt^ RIHt R R lt]P
                  ! R4      tR R ltR R	 ltR
 R lt	. ROt
R# )zTools for parsing properties.N)Ú_unescape_stringc                óˆ   € V ^8„  d   QhR\         \        \         ,          ,          R\         \        \         ,          ,          /# )é   ÚvalÚreturn©ÚstrÚlist)Úformats   "ÚX/home/ralf/ical-fahrzeuge/venv/lib/python3.14/site-packages/icalendar/parser/property.pyÚ__annotate__r      s*   € ÷ !ñ !¤¤t¬C¥y¥ð !´S¼4Ä½9µ_ñ !ó    c                ó„   € \        V \        4      '       d   V  Uu. uF  p\        V4      NK  	  up# \        V 4      # u upi )zýUnescape a value that may be a string or list of strings.

Applies :func:`_unescape_string` to the value. If the value is a list,
unescapes each element.

Parameters:
    val: A string or list of strings to unescape.

Returns:
    The unescaped values.
)Ú
isinstancer	   r   )r   Úss   & r   Úunescape_list_or_stringr      s<   € ô �#”t×ÒÙ-0Ó1©S¨Ô  Ö#©SÑ1Ð1Ü˜CÓ Ð ùò 2s   ›=z\\([\\,;:nN])c                ó$   € V ^8„  d   QhR\         /# )r   r   )r   )r
   s   "r   r   r      s   € ÷ ñ œCñ r   c                ó0   € \         P                  R V 4      # )a=  Unescape backslash sequences in iCalendar text.

Unlike :func:`~icalendar.parser.string.unescape_string`, this only handles
actual backslash escapes per :rfc:`5545`, not URL encoding. This preserves
URL-encoded values like ``%3A`` in URLs.

Processes backslash escape sequences in a single pass using regex matching.
c                 óT   € V P                  ^4      R9   d   R# V P                  ^4      # )é   ÚnNÚ
)Úgroup)Úms   &r   Ú<lambda>Ú$unescape_backslash.<locals>.<lambda>&   s#   € ˜!Ÿ'™' !›*¨Ô,�$Ð<°!·'±'¸!³*Ð<r   )Ú_unescape_backslash_regexÚsub)r   s   &r   Úunescape_backslashr      s   € ô %×(Ñ(Ù<¸cóð r   c                óF   € V ^8„  d   QhR\         R\        \         ,          /# ©r   Útextr   r   )r
   s   "r   r   r   *   s   € ÷ 2ñ 2¤3ð 2¬4´­9ñ 2r   c                ó,  € V '       g   R.# . p. p^ pV\        V 4      8  dÊ   W,          R8X  dX   V^,           \        V 4      8  dA   VP                  W,          4       VP                  W^,           ,          4       V^,          pKt  W,          R8X  d7   VP                  \        RP                  V4      4      4       . pV^,          pK·  VP                  W,          4       V^,          pKÙ  VP                  \        RP                  V4      4      4       V# )aÑ  Split text on unescaped commas and unescape each part.

Splits only on commas not preceded by backslash.
After splitting, unescapes backslash sequences in each part.

Parameters:
    text: Text with potential escaped commas (e.g., "foo\\, bar,baz")

Returns:
    List of unescaped category strings

Examples:
    .. code-block:: pycon

        >>> from icalendar.parser import split_on_unescaped_comma
        >>> split_on_unescaped_comma(r"foo\, bar,baz")
        ['foo, bar', 'baz']
        >>> split_on_unescaped_comma("a,b,c")
        ['a', 'b', 'c']
        >>> split_on_unescaped_comma(r"a\,b\,c")
        ['a,b,c']
        >>> split_on_unescaped_comma(r"Work,Personal\,Urgent")
        ['Work', 'Personal,Urgent']
Ú Ú\Ú,©ÚlenÚappendr   Újoin©r!   ÚresultÚcurrentÚis   &   r   Úsplit_on_unescaped_commar.   *   sÔ   € ÷2 Øˆtˆà€FØ€GØ	€Aà
Œc�$‹iŒ-Ø�7�dŒ?˜q 1�u¤s¨4£yÔ0à�N‰N˜4�7Ô#Ø�N‰N˜4 A¥�;Ô'Ø��FŠAØ�W˜Œ^à�M‰MÔ,¨R¯W©W°WÓ-=Ó>Ô?ØˆGØ��FŠAà�N‰N˜4�7Ô#Ø��FŠAð ‡M�MÔ$ R§W¡W¨WÓ%5Ó6Ô7à€Mr   c                óF   € V ^8„  d   QhR\         R\        \         ,          /# r    r   )r
   s   "r   r   r   _   s   € ÷ 3ñ 3¤sð 3¬t´C­yñ 3r   c                ó,  € V '       g   R.# . p. p^ pV\        V 4      8  dÊ   W,          R8X  dX   V^,           \        V 4      8  dA   VP                  W,          4       VP                  W^,           ,          4       V^,          pKt  W,          R8X  d7   VP                  \        RP                  V4      4      4       . pV^,          pK·  VP                  W,          4       V^,          pKÙ  VP                  \        RP                  V4      4      4       V# )aO  Split text on unescaped semicolons and unescape each part.

Splits only on semicolons not preceded by a backslash.
After splitting, unescapes backslash sequences in each part.
Used by vCard structured properties (ADR, N, ORG) per :rfc:`6350`.

Parameters:
    text: Text with potential escaped semicolons (e.g., "field1\\;with;field2")

Returns:
    List of unescaped field strings

Examples:
    .. code-block:: pycon

        >>> from icalendar.parser import split_on_unescaped_semicolon
        >>> split_on_unescaped_semicolon(r"field1\;with;field2")
        ['field1;with', 'field2']
        >>> split_on_unescaped_semicolon("a;b;c")
        ['a', 'b', 'c']
        >>> split_on_unescaped_semicolon(r"a\;b\;c")
        ['a;b;c']
        >>> split_on_unescaped_semicolon(r"PO Box 123\;Suite 200;City")
        ['PO Box 123;Suite 200', 'City']
r#   r$   Ú;r&   r*   s   &   r   Úsplit_on_unescaped_semicolonr2   _   sÔ   € ÷4 Øˆtˆà€FØ€GØ	€Aà
Œc�$‹iŒ-Ø�7�dŒ?˜q 1�u¤s¨4£yÔ0à�N‰N˜4�7Ô#Ø�N‰N˜4 A¥�;Ô'Ø��FŠAØ�W˜Œ^à�M‰MÔ,¨R¯W©W°WÓ-=Ó>Ô?ØˆGØ��FŠAà�N‰N˜4�7Ô#Ø��FŠAð ‡M�MÔ$ R§W¡W¨WÓ%5Ó6Ô7à€Mr   )r.   r2   r   r   )Ú__doc__ÚreÚicalendar.parser.stringr   r   Úcompiler   r   r.   r2   Ú__all__© r   r   Ú<module>r9      s=   ðÙ #ã 	å 4õ!ð" ŸJšJÐ'7Ó8Ð õõ2õj3òl‚r   