
    ei=                         d dl  d dlmZmZmZ ddlmZ ddlZej                  dk\  Z G d d      Z	 e
e	      j                         D  cg c]  }  e| e      s|  c} Zyc c} w )	   )*)DelimitedListany_open_tagany_close_tag    )datetimeN)   
   c                   	   e Zd ZdZed        Zed        Z ee      j                  d      j                  erend       Z	  ee      j                  d      j                   eed            Z	  ed      j                  d	      j                  erend
       Z	  e       j                  erend       dz    e       j                  erend       z   j                  d      Z	 ej)                  d        ee e ed      j-                         ez         z   z  j                  d      Z	 ej)                  e        ed      j                  d      j                  erend       Z	  ed      j                  d      j                  erend       Z	 eez  ez  j                  d      j7                         Z	  ed      j                  d      j                  erend       Z	  ed      j                  d      j                  erend       Z	  eee       j                  d      Z!	  ed       j                  d!      Z"	  ed"      j                  d#      Z#e#d$e#z   d%z  z   j                  d&      Z$ ee#d$e#z   d'z  z         d(z    ee#d$e#z   d'z  z         z   j                  d)      Z%e%jM                  d*        d+e"z   j                  d,      Z' e(e$e'z  e%z  j                  d-            j                  d-      Z)	  ed.      j                  d/      Z*	 edPd0e+fd1       Z,edQd0e+fd2       Z- ed3      j                  d4      Z.	  ed5      j                  d6      Z/	  ed7      j                  d8      Z0	  e1j,                          e2j,                         z  Z3ed9e+d:ed;e4fd<       Z5 e( e6 e7d=        e8        z    ee9d=>      z    e e:d?       e; e8       d=z         z         z               j7                         j                  d@      Z< e= ee>j                         e<z  dAB            j                  dC      Z@	 edD        ZAedE        ZB edF      j                  dG      ZC	  e eDdHe            ZE e eDdIe            ZF e eDdJe,            ZG e eDdKe-            ZH e eDdLe5            ZI e eDdMeA            ZJ e eDdNeB            ZKyO)Rpyparsing_commona  Here are some common low-level expressions that may be useful in
    jump-starting parser development:

    - numeric forms (:class:`integers<integer>`, :class:`reals<real>`,
      :class:`scientific notation<sci_real>`)
    - common :class:`programming identifiers<identifier>`
    - network addresses (:class:`MAC<mac_address>`,
      :class:`IPv4<ipv4_address>`, :class:`IPv6<ipv6_address>`)
    - ISO8601 :class:`dates<iso8601_date>` and
      :class:`datetime<iso8601_datetime>`
    - :class:`UUID<uuid>`
    - :class:`comma-separated list<comma_separated_list>`
    - :class:`url`

    Parse actions:

    - :class:`convert_to_integer`
    - :class:`convert_to_float`
    - :class:`convert_to_date`
    - :class:`convert_to_datetime`
    - :class:`strip_html_tags`
    - :class:`upcase_tokens`
    - :class:`downcase_tokens`

    Examples:

    .. testcode::

        pyparsing_common.number.run_tests('''
            # any int or real number, returned as the appropriate type
            100
            -100
            +100
            3.14159
            6.02e23
            1e-12
            ''')

    .. testoutput::
        :options: +NORMALIZE_WHITESPACE


        # any int or real number, returned as the appropriate type
        100
        [100]

        -100
        [-100]

        +100
        [100]

        3.14159
        [3.14159]

        6.02e23
        [6.02e+23]

        1e-12
        [1e-12]

    .. testcode::

        pyparsing_common.fnumber.run_tests('''
            # any int or real number, returned as float
            100
            -100
            +100
            3.14159
            6.02e23
            1e-12
            ''')

    .. testoutput::
        :options: +NORMALIZE_WHITESPACE


        # any int or real number, returned as float
        100
        [100.0]

        -100
        [-100.0]

        +100
        [100.0]

        3.14159
        [3.14159]

        6.02e23
        [6.02e+23]

        1e-12
        [1e-12]

    .. testcode::

        pyparsing_common.hex_integer.run_tests('''
            # hex numbers
            100
            FF
            ''')

    .. testoutput::
        :options: +NORMALIZE_WHITESPACE


        # hex numbers
        100
        [256]

        FF
        [255]

    .. testcode::

        pyparsing_common.fraction.run_tests('''
            # fractions
            1/2
            -3/4
            ''')

    .. testoutput::
        :options: +NORMALIZE_WHITESPACE


        # fractions
        1/2
        [0.5]

        -3/4
        [-0.75]

    .. testcode::

        pyparsing_common.mixed_integer.run_tests('''
            # mixed fractions
            1
            1/2
            -3/4
            1-3/4
            ''')

    .. testoutput::
        :options: +NORMALIZE_WHITESPACE


        # mixed fractions
        1
        [1]

        1/2
        [0.5]

        -3/4
        [-0.75]

        1-3/4
        [1.75]
    .. testcode::

        import uuid
        pyparsing_common.uuid.set_parse_action(token_map(uuid.UUID))
        pyparsing_common.uuid.run_tests('''
            # uuid
            12345678-1234-5678-1234-567812345678
            ''')

    .. testoutput::
        :options: +NORMALIZE_WHITESPACE


        # uuid
        12345678-1234-5678-1234-567812345678
        [UUID('12345678-1234-5678-1234-567812345678')]
    c                 >    |D cg c]  }t        |       c}S c c}w )zK
        Parse action for converting parsed integers to Python int
        int___ttts       R/var/www/html/glpi_dashboard/venv/lib/python3.12/site-packages/pyparsing/common.pyconvert_to_integerz#pyparsing_common.convert_to_integer   s    
 #$$BB$$$   c                 >    |D cg c]  }t        |       c}S c c}w )zL
        Parse action for converting parsed numbers to Python float
        floatr   s       r   convert_to_floatz!pyparsing_common.convert_to_float   s    
 %&&bb	&&&r   integerc                 >    | D cg c]  }t        |       c}S c c}w Nr   r   r   s     r   <lambda>zpyparsing_common.<lambda>       a0CG0 0r   zhex integer   z[+-]?\d+zsigned integerc                 >    | D cg c]  }t        |       c}S c c}w r   r   r   s     r   r    zpyparsing_common.<lambda>   r!   r   c                 >    | D cg c]  }t        |       c}S c c}w r   r   r   s     r   r    zpyparsing_common.<lambda>       2"E"I2 2r   /c                 >    | D cg c]  }t        |       c}S c c}w r   r   r   s     r   r    zpyparsing_common.<lambda>   r%   r   fractionc                     | d   | d   z  S )Nr    )r   s    r   r    zpyparsing_common.<lambda>   s    AB     -z"fraction or mixed integer-fractionz[+-]?(?:\d+\.\d*|\.\d+)zreal numberc                 >    | D cg c]  }t        |       c}S c c}w r   r   r   s     r   r    zpyparsing_common.<lambda>  r%   r   z@[+-]?(?:\d+(?:[eE][+-]?\d+)|(?:\d+\.\d*|\.\d+)(?:[eE][+-]?\d+)?)z$real number with scientific notationc                 >    | D cg c]  }t        |       c}S c c}w r   r   r   s     r   r    zpyparsing_common.<lambda>  r%   r   numberz[+-]?\d+\.?\d*(?:[eE][+-]?\d+)?fnumberc                 >    | D cg c]  }t        |       c}S c c}w r   r   r   s     r   r    zpyparsing_common.<lambda>  r%   r   z;(?i:[+-]?(?:(?:\d+\.?\d*(?:e[+-]?\d+)?)|nan|inf(?:inity)?))
ieee_floatc                 >    | D cg c]  }t        |       c}S c c}w r   r   r   s     r   r    zpyparsing_common.<lambda>)  r%   r   
identifierzK(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})){3}zIPv4 addressz[0-9a-fA-F]{1,4}hex_integer:   zfull IPv6 address)r      z::zshort IPv6 addressc                 ,    t        d | D              dk  S )Nc              3   `   K   | ]&  }t         j                  j                  |      s#d  ( yw)r   N)r   
_ipv6_partmatches).0r   s     r   	<genexpr>z,pyparsing_common.<lambda>.<locals>.<genexpr>@  s$     OB'7'B'B'J'J2'NaOs   $..   )sum)r   s    r   r    zpyparsing_common.<lambda>@  s    #O!OORSS r,   z::ffff:zmixed IPv6 addresszIPv6 addressz:[0-9a-fA-F]{2}([:.-])[0-9a-fA-F]{2}(?:\1[0-9a-fA-F]{2}){4}zMAC addressfmtc                       fd}|S )a  
        Helper to create a parse action for converting parsed date string to Python datetime.date

        Params -
        - fmt - format to be passed to datetime.strptime (default= ``"%Y-%m-%d"``)

        Example:

        .. testcode::

            date_expr = pyparsing_common.iso8601_date.copy()
            date_expr.set_parse_action(pyparsing_common.convert_to_date())
            print(date_expr.parse_string("1999-12-31"))

        prints:

        .. testoutput::

            [datetime.date(1999, 12, 31)]
        c                     	 t        j                  |d         j                         S # t        $ r}t	        | |t        |            d }~ww xY wNr   )r   strptimedate
ValueErrorParseExceptionstr)ssllr   verB   s       r   cvt_fnz0pyparsing_common.convert_to_date.<locals>.cvt_fnf  sK    6((A499;; 6$RSW556s   &* 	AA		Ar+   rB   rN   s   ` r   convert_to_datez pyparsing_common.convert_to_dateO  s    .	6 r,   c                       fd}|S )aI  Helper to create a parse action for converting parsed
        datetime string to Python datetime.datetime

        Params -
        - fmt - format to be passed to datetime.strptime (default= ``"%Y-%m-%dT%H:%M:%S.%f"``)

        Example:

        .. testcode::

            dt_expr = pyparsing_common.iso8601_datetime.copy()
            dt_expr.set_parse_action(pyparsing_common.convert_to_datetime())
            print(dt_expr.parse_string("1999-12-31T23:59:59.999"))

        prints:

        .. testoutput::

            [datetime.datetime(1999, 12, 31, 23, 59, 59, 999000)]
        c                     	 t        j                  |d         S # t        $ r}t        | |t	        |            d }~ww xY wrE   )r   rF   rH   rI   rJ   )slr   rM   rB   s       r   rN   z4pyparsing_common.convert_to_datetime.<locals>.cvt_fn  sB    4((1s33 4$Q3r7334s    	A ;A r+   rO   s   ` r   convert_to_datetimez$pyparsing_common.convert_to_datetimen  s    .	4 r,   z7(?P<year>\d{4})(?:-(?P<month>\d\d)(?:-(?P<day>\d\d))?)?zISO8601 datez(?P<year>\d{4})-(?P<month>\d\d)-(?P<day>\d\d)[T ](?P<hour>\d\d):(?P<minute>\d\d)(:(?P<second>\d\d(\.\d*)?)?)?(?P<tz>Z|[+-]\d\d:?\d\d)?zISO8601 datetimez2[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}UUIDrS   rT   tokensc                 F    t         j                  j                  |d         S )a\  Parse action to remove HTML tags from web page HTML source

        Example:

        .. testcode::

            # strip HTML links from normal text
            text = '<td>More info at the <a href="https://github.com/pyparsing/pyparsing/wiki">pyparsing</a> wiki page</td>'
            td, td_end = make_html_tags("TD")
            table_text = td + SkipTo(td_end).set_parse_action(
                pyparsing_common.strip_html_tags)("body") + td_end
            print(table_text.parse_string(text).body)

        Prints:

        .. testoutput::

            More info at the pyparsing wiki page
        r   )r   _html_strippertransform_string)rS   rT   rW   s      r   strip_html_tagsz pyparsing_common.strip_html_tags  s    *  ..??q	JJr,   ,)exclude_charsz 		commaItem )defaultzcomma separated listc                 H    |D cg c]  }|j                          c}S c c}w )z-Parse action to convert tokens to upper case.)upperrS   rT   r   r   s       r   upcase_tokenszpyparsing_common.upcase_tokens       &''r
'''   c                 H    |D cg c]  }|j                          c}S c c}w )z-Parse action to convert tokens to lower case.)lowerrc   s       r   downcase_tokensz pyparsing_common.downcase_tokens  re   rf   a  (?P<url>(?:(?:(?P<scheme>https?|ftp):)?\/\/)(?:(?P<auth>\S+(?::\S*)?)@)?(?P<host>(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u00a1-\uffff][a-z0-9\u00a1-\uffff_-]{0,62})?[a-z0-9\u00a1-\uffff]\.)+(?:[a-z\u00a1-\uffff]{2,}\.?))(:(?P<port>\d{2,5}))?(?P<path>\/[^?# ]*)?(\?(?P<query>[^#]*))?(#(?P<fragment>\S*))?)urlconvertToIntegerconvertToFloatconvertToDateconvertToDatetimestripHTMLTagsupcaseTokensdowncaseTokensN)z%Y-%m-%d)z%Y-%m-%dT%H:%M:%S.%f)L__name__
__module____qualname____doc__staticmethodr   r   Wordnumsset_nameset_parse_actionPY_310r   hexnums	token_mapr   r6   Regexsigned_integerr(   add_parse_actionOptsuppressmixed_integerrA   realsci_real
streamliner0   r1   r3   
identcharsidentbodycharsr5   ipv4_addressr<   _full_ipv6_address_short_ipv6_addressadd_condition_mixed_ipv6_addressCombineipv6_addressmac_addressrJ   rP   rU   iso8601_dateiso8601_datetimeuuidr   r   rY   ParseResultsr[   	OneOrMoreLiteralLineEnd
printablesWhite
FollowedBy_commasepitemr   quoted_stringcopycomma_separated_listrd   ri   rj   replaced_by_pep8rk   rl   rm   rn   ro   rp   rq   r+   r,   r   r   r      s0   pd % % ' ' 	T
	)			 0

  I 	W}->>yb?QR  K 	k	"	#		 0

  [ 	)) 2	

 	 

+
+ 2

	
 hz  Y78 	>CC(9(9(;h(F$GGGh34  m""3' 	()	-	 		 2

 	 N 	QR	8	9		 2

 0 o.88BMMOFK 	01	)			 2

  = 	LM	,			 2

  _j.1::<HJdVh~  3*+44]CJ$j(8A'==GG 	J#
*f445
	
jC*,66
7	8 h#$	 
 %%S %|3==>RS	1	14G	GQQ	
 h~	 
 0Eh}  GS  <   < Bh~  $ 	Rh!"  ]FGPPQWXD5*\**,/E}/E/E/GGNK3 K3 K K K. 	9*z56 eEljS&A%AABC	
 
	+	  )M =0"=h%&  e( ( ( (
 *	.\ huo] ^ $$45GI[$\]!"23CEU"VWN !1/?!STM$%56IK^%_` !1/?!STM 0 OPL!"23C_"UVNr,   r   )corehelpersr   r   r   r   sysversion_infor{   r   varsvalues
isinstanceParserElement_builtin_exprs)vs   0r   <module>r      sg     ? ?  
			W	$CW CWP $%,,.
*Q2NA s   A"A"