U
"»ßj½M ã @ sÊ d Z ddlZddlZddlZddlmZ dgZe d¡Ze d¡Z e d¡Z
e d¡Ze d ¡Ze d
¡Z
e d¡Ze d¡Ze d
¡Ze d¡Ze dej¡Ze d¡Ze d¡ZG dd„ dejƒZdS )zA parser for HTML and XHTML.é N)ÚunescapeÚ
HTMLParserz[&<]z
&[a-zA-Z#]z%&([a-zA-Z][-.a-zA-Z0-9]*)[^a-zA-Z0-9]z)(?:[0-9]+|[xX][0-9a-fA-F]+)[^0-9a-fA-F]z <[a-zA-Z]z
[a-zA-Z]ú>z--\s*>z+([a-zA-Z][^\t\n\r\f />\x00]*)(?:\s|/(?!>))*z]((?<=[\'"\s/])[^\s/>][^\s/=>]*)(\s*=+\s*(\'[^\']*\'|"[^"]*"|(?![\'"])[^>\s]*))?(?:\s|/(?!>))*aF
<[a-zA-Z][^\t\n\r\f />\x00]* # tag name
(?:[\s/]* # optional whitespace before attribute name
(?:(?<=['"\s/])[^\s/>][^\s/=>]* # attribute name
(?:\s*=+\s* # value indicator
(?:'[^']*' # LITA-enclosed value
|"[^"]*" # LIT-enclosed value
|(?!['"])[^>\s]* # bare value
)
\s* # possibly followed by a space
)?(?:\s|/(?!>))*
)*
)?
\s* # trailing whitespace
z#\s*([a-zA-Z][-.a-zA-Z0-9:_]*)\s*>c @ sè e Zd ZdZdZddœdd„Zdd„ Zd d
„ Zdd„ Zd
Z dd„ Z
dd„ Zdd„ Zdd„ Z
dd„ Zd9dd„Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd
S ):r aE Find tags and other markup and call handler functions.
Usage:
p = HTMLParser()
p.feed(data)
...
p.close()
Start tags are handled by calling self.handle_starttag() or
self.handle_startendtag(); end tags by self.handle_endtag(). The
data between tags is passed from the parser to the derived class
by calling self.handle_data() with the data as argument (the data
may be split up in arbitrary chunks). If convert_charrefs is
True the character references are converted automatically to the
corresponding Unicode character (and self.handle_data() is no
longer split in chunks), otherwise they are passed by calling
self.handle_entityref() or self.handle_charref() with the string
containing respectively the named or numeric reference as the
argument.
)ZscriptZstyleT)Úconvert_charrefsc C s || _ | ¡ dS )zÆInitialize and reset this instance.
If convert_charrefs is True (the default), all character references
are automatically converted to the corresponding Unicode characters.
N)r Úreset)Úselfr © r ú0/opt/alt/python38/lib64/python3.8/html/parser.pyÚ__init__X s zHTMLParser.__init__c C s: d| _ d| _t| _d| _g | _d| _d| _tj
| ¡ dS )z1Reset this instance. Loses all unprocessed data.Ú z???Nr é )ÚrawdataÚlasttagÚinteresting_normalÚinterestingÚ
cdata_elemÚ_pendingÚ_pending_lenÚ_parse_thresholdÚ_markupbaseÚ
ParserBaser ©r r r r r a s zHTMLParser.resetc C s® | j t|ƒ7 _ | j | jk r,| j |¡ n~| jsB| j|7 _n,| j |¡ | jd | j¡7 _| j ¡ d| _ t| jƒ}| d¡ t| jƒ|k ržd| _nt| jƒ| _dS )z‘Feed data to the parser.
Call this as often as you want, with as little or as much text
as you want (may include '\n').
r r r N) r Úlenr r Úappendr
ÚjoinÚclearÚgoahead)r ÚdataÚnr r r Úfeedl s
zHTMLParser.feedc C s: | j r,| jd | j ¡7 _| j ¡ d| _| d¡ dS )zHandle any buffered data.r r r N)r r
r r r r r r r r ÚcloseŠ s
zHTMLParser.closeNc C s | j S )z)Return full source of start tag: '<...>'.)Ú_HTMLParser__starttag_textr r r r Úget_starttag_text” s zHTMLParser.get_starttag_textc C s$ | ¡ | _t d| j tj¡| _d S )Nz\s*%s\s*>)Úlowerr ÚreÚcompileÚIr )r Úelemr r r Úset_cdata_mode˜ s
zHTMLParser.set_cdata_modec C s t | _d | _d S ©N)r r r r r r r Úclear_cdata_modeœ s zHTMLParser.clear_cdata_modec C s2 | j }d}t|ƒ}||k �rÂ| jrv| jsv| d|¡}|dk r | dt||d ƒ¡}|dkrpt d¡ ||¡sp�qÂ|}n*| j
||¡}|r’| ¡ }n| jrœ�qÂ|}||k rÞ| jrÌ| jsÌ| t
|||… ƒ¡ n| |||… ¡ | ||¡}||krö�qÂ|j}|d|ƒ�r2t ||¡�r"| |¡} nŒ|d|ƒ�r:| |¡} nt|d|ƒ�rR| |¡} n\|d|ƒ�rj| |¡} nD|d |ƒ�r‚| |¡} n,|d
|k �s–|�rÂ| d¡ |d
} n�qÂ| dk �r$|�sÂ�qÂt ||¡�rÔ�nL|d|ƒ�r"|d |k�rú| d¡ n&t ||¡�r
n| ||d d … ¡ nþ|d|ƒ�rz|}dD ]*}
| |
|d
¡�r6|t|
ƒ8 } �qb�q6| ||d
|… ¡ n¦|d|ƒ�rž| ||d d … ¡ n‚|||d … ¡ dk�rÐ| ||d d … ¡ nP|d |ƒ�rô| ||d d … ¡ n,|d|ƒ�r| ||d d … ¡ ntdƒ‚|} | || ¡}q|d|ƒ�rØt ||¡}|�rš| ¡ dd… }| !|¡ | "¡ } |d| d
ƒ�sŠ| d
} | || ¡}qn