
    i]                         d Z ddlZddlmZ deee         z  deee         z  fdZ ej        d          ZdefdZ	d	edee         fd
Z
d	edee         fdZg dZdS )zTools for parsing properties.    Nunescape_stringvalreturnc                 b    t          | t                    rd | D             S t          |           S )a  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.
    c                 ,    g | ]}t          |          S  r   ).0ss     T/root/projects/butler/venv/lib/python3.11/site-packages/icalendar/parser/property.py
<listcomp>z+unescape_list_or_string.<locals>.<listcomp>   s     000q""000    )
isinstancelistr   r   s    r   unescape_list_or_stringr      s8     #t 100C00003r   z\\([\\,;:nN])c                 :    t                               d |           S )a;  Unescape backslash sequences in iCalendar text.

    Unlike :py:meth:`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                 ^    |                      d          dv rdn|                      d          S )N   nN
)group)ms    r   <lambda>z$unescape_backslash.<locals>.<lambda>&   s(    !''!**,,$$!''!** r   )_unescape_backslash_regexsubr   s    r   unescape_backslashr      s$     %((<<c  r   textc                 f   | sdgS g }g }d}|t          |           k     r| |         dk    rU|dz   t          |           k     r?|                    | |                    |                    | |dz                       |dz  }ni| |         dk    r=|                    t          d                    |                               g }|dz  }n |                    | |                    |dz  }|t          |           k     |                    t          d                    |                               |S )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']
     r   \r      ,lenappendr   joinr   resultcurrentis       r   split_on_unescaped_commar,   *   s/   2  tFG	A
c$ii--7d??q1us4yy00NN47###NN4A;'''FAA!W^^MM,RWWW-=-=>>???GFAANN47###FA c$ii--  MM$RWWW%5%566777Mr   c                 f   | sdgS g }g }d}|t          |           k     r| |         dk    rU|dz   t          |           k     r?|                    | |                    |                    | |dz                       |dz  }ni| |         dk    r=|                    t          d                    |                               g }|dz  }n |                    | |                    |dz  }|t          |           k     |                    t          d                    |                               |S )a  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   r"   ;r$   r(   s       r   split_on_unescaped_semicolonr/   _   s/   4  tFG	A
c$ii--7d??q1us4yy00NN47###NN4A;'''FAA!W^^MM,RWWW-=-=>>???GFAANN47###FA c$ii--  MM$RWWW%5%566777Mr   )r,   r/   r   r   )__doc__reicalendar.parser.stringr   strr   r   compiler   r   r,   r/   __all__r	   r   r   <module>r6      s    # # 				 3 3 3 3 3 3 tCy  S49_        " 'BJ'788 C    23 249 2 2 2 2j3s 3tCy 3 3 3 3l  r   