Yf?E @ s d Z d d l Z d d l Z d d l Z d d l m Z d g Z e j d Z e j d Z e j d Z e j d Z e j d Z e j d Z e j d Z e j d Z e j d Z e j d e j Z e j d Z e j d Z Gd d d e j Z d S)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--\s*>z$([a-zA-Z][^ /> ]*)(?:\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 comma )?(?:\s|/(?!>))* )* )? \s* # trailing whitespace z#\s*([a-zA-Z][-.a-zA-Z0-9:_]*)\s*>c @ sW e Z d Z d Z d: Z d d d d Z d d Z d d Z d d Z d Z d d Z d d Z d d Z d d Z d d Z d d d Z d d Z d d Z d d! Z d" d# Z d$ d% Z d&