+
    TBi)8                         ^RI 5 ^RIHtHtHt ^ RIHt  ! R R4      t]! ]4      P                  4        U u. uF  p ]	! V ]
4      '       g   K  V NK  	  up tR# u up i )   )*)DelimitedListany_open_tagany_close_tag)datetimec                   |
  a  ] tR t^t o Rt]! ]4      t ]! ]4      t	 ]
! ]4      P                  R4      P                  ]4      t ]
! ]4      P                  R4      P                  ]! ]^4      4      t ]! R4      P                  R4      P                  ]4      t ]! 4       P                  ]	4      R,           ]! 4       P                  ]	4      ,           P                  R4      t ]P)                  R 4       ]]]! ]! R	4      P-                  4       ],           4      ,           ,          P                  R
4      t ]P)                  ]4       ]! R4      P                  R4      P                  ]	4      t ]! R4      P                  R4      P                  ]	4      t ]],          ],          P                  R4      P7                  4       t ]! R4      P                  R4      P                  ]	4      t ]! R4      P                  R4      P                  ]	4      t ]
! ]] 4      P                  R4      t! ]! R4      P                  R4      t" ]! R4      P                  R4      t#]#R]#,           ^,          ,           P                  R4      t$]! ]#R]#,           RB,          ,           4      R,           ]! ]#R]#,           RB,          ,           4      ,           P                  R4      t%]%PM                  R 4       R]",           P                  R4      t'](! ]$]',          ]%,          P                  R 4      4      P                  R 4      t) ]! R!4      P                  R"4      t* ]+RCV 3R# lR$ ll4       t,]+RDV 3R% lR& ll4       t-]! R'4      P                  R(4      t. ]! R)4      P                  R*4      t/ ]! R+4      P                  R,4      t0 ]1P,                  ! 4       ]2P,                  ! 4       ,          t3]+V 3R- lR. l4       t4](! ]5! ]6! R/4      ( ]7! 4       ( ,           ]
! ]8R/R07      ,           ]! ]9! R14      ]:! ]7! 4       R/,          4      ( ,           4      ,           4      4      P7                  4       P                  R24      t;]<! ]! ]=P}                  4       ];,          R3R47      4      P                  R54      t? ]+! ]! R6 4      4      t@ ]+! ]! R7 4      4      tA ]! RE4      P                  R84      tB ]+! ]C! R9]4      4      tD]+! ]C! R:]	4      4      tE]+! ]C! R;],4      4      tF]+! ]C! R<]-4      4      tG]+! ]C! R=]44      4      tH]+! ]C! R>]@4      4      tI]+! ]C! R?]A4      4      tJR@tKV tLRA# )F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')]
integerzhex integerz[+-]?\d+zsigned integer/fractionc                0    V ^ ,          V R,          ,          # )     )tts   &5/usr/lib/python3.14/site-packages/pyparsing/common.py<lambda>pyparsing_common.<lambda>   s    AB    -z"fraction or mixed integer-fractionz[+-]?(?:\d+\.\d*|\.\d+)zreal numberz@[+-]?(?:\d+(?:[eE][+-]?\d+)|(?:\d+\.\d*|\.\d+)(?:[eE][+-]?\d+)?)z$real number with scientific notationnumberz[+-]?\d+\.?\d*(?:[eE][+-]?\d+)?fnumberz;(?i:[+-]?(?:(?:\d+\.?\d*(?:e[+-]?\d+)?)|nan|inf(?:inity)?))
ieee_float
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 addressz::zshort IPv6 addressc                ,    \        R  V  4       4      ^8  # )c              3   t   "   T F.  p\         P                  P                  V4      '       g   K*  ^x  K0  	  R# 5i)r   N)r	   
_ipv6_partmatches).0r   s   & r   	<genexpr>,pyparsing_common.<lambda>.<locals>.<genexpr>  s&     O!B'7'B'B'J'J2'Naa!s   '8
8)sumts   &r   r   r     s    #O!OORSSr   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 addressc                    < V ^8  d   QhRS[ /#    fmtstr)format__classdict__s   "r   __annotate__pyparsing_common.__annotate__%  s      S r   c                   a  V 3R lpV# )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                    <  \         P                  ! V^ ,          S4      P                  4       #   \         d   p\	        Y\        T4      4      hRp?ii ; ir   N)r   strptimedate
ValueErrorParseExceptionr,   )ssllr   ver*   s   &&& r   cvt_fn0pyparsing_common.convert_to_date.<locals>.cvt_fn;  sI    6((A499;; 6$RSW556s   +/ AAAr   r*   r;   s   f r   convert_to_date pyparsing_common.convert_to_date$  s    .	6 r   c                    < V ^8  d   QhRS[ /# r(   r+   )r-   r.   s   "r   r/   r0   D  s       r   c                   a  V 3R lpV# )a  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                    <  \         P                  ! V^ ,          S4      #   \         d   p\        Y\	        T4      4      hRp?ii ; ir3   )r   r4   r6   r7   r,   )slr&   r:   r*   s   &&& r   r;   4pyparsing_common.convert_to_datetime.<locals>.cvt_fnZ  s@    4((1s33 4$Q3r7334s   ! AAAr   r=   s   f r   convert_to_datetime$pyparsing_common.convert_to_datetimeC  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}UUIDc                ,   < V ^8  d   QhRS[ RS[RS[/# )r)   rC   rD   tokens)r,   intParseResults)r-   r.   s   "r   r/   r0   r  s'     K K3 K3 K Kr   c                N    \         P                  P                  V^ ,          4      # )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	   _html_strippertransform_string)rC   rD   rJ   s   &&&r   strip_html_tags pyparsing_common.strip_html_tagsq  s    *  ..??q	JJr   ,)exclude_charsz 		commaItem )defaultzcomma separated listc                "    V P                  4       # N)upperr%   s   &r   r   r     s
    QWWYr   c                "    V P                  4       # rX   )lowerr%   s   &r   r   r     s
    qwwyr   urlconvertToIntegerconvertToFloatconvertToDateconvertToDatetimestripHTMLTagsupcaseTokensdowncaseTokensr   N)r      )z%Y-%m-%d)z%Y-%m-%dT%H:%M:%S.%fa  (?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*))?))M__name__
__module____qualname____firstlineno____doc__	token_maprK   convert_to_integerfloatconvert_to_floatWordnumsset_nameset_parse_actionr
   hexnumsr   Regexsigned_integerr   add_parse_actionOptsuppressmixed_integerr$   realsci_real
streamliner   r   r   
identcharsidentbodycharsr   ipv4_addressr   _full_ipv6_address_short_ipv6_addressadd_condition_mixed_ipv6_addressCombineipv6_addressmac_addressstaticmethodr>   rF   iso8601_dateiso8601_datetimeuuidr   r   rN   rP   	OneOrMoreLiteralLineEnd
printablesWhite
FollowedBy_commasepitemr   quoted_stringcopycomma_separated_listupcase_tokensdowncase_tokensr\   replaced_by_pep8r]   r^   r_   r`   ra   rb   rc   __static_attributes____classdictcell__)r.   s   @r   r	   r	      s    pd #3 !' 4j!!),==>PQGD 	W}->>yb?QR  G 	k	"	#		,	- 
 W 	))*:;
	


+
+,<
=	> hz	 
 U78 	>CC(9(9(;h(F$GGGh34  g""3' 	()	-	 		*	+ 	
 M 	QR	8	9		*	+ 
/ o.88BMMOFG 	01	)			*	+ 
 4 	LM	,			*	+ 
 ]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  <   < Bh~  $ 	Rh!"  ]FGPPQWXD5!**,}/E/E/GGNK K. 	9*z56 eEljS&A%AABC	
 
	+	  )M =0"=h%&  e +>!?@M7"9-@#ABO7 *	.\ huo] ^ $$45GI[$\]!"23CEU"VWN !1/?!STM$%56IK^%_` !1/?!STM 0 OPL!"23C_"UVNr   r	   N)corehelpersr   r   r   r   r	   varsvalues
isinstanceParserElement_builtin_exprs)vs   0r   <module>r      s[     ? ? WW WWx $%,,..!*Q2NAA. s   AA