fM c @ sJ d Z d d l Z d d l Z d d l 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 Z e j d Z e j d e j Z e j d e j Z e j d Z e j d Z Gd d d e Z Gd d d e j Z d S( u A parser for HTML and XHTML.i Nu [&<]u &[a-zA-Z#]u% &([a-zA-Z][-.a-zA-Z0-9]*)[^a-zA-Z0-9]u) (?:[0-9]+|[xX][0-9a-fA-F]+)[^0-9a-fA-F]u <[a-zA-Z]u >u --\s*>u( ([a-zA-Z][-.a-zA-Z0-9:_]*)(?:\s|/(?!>))*u$ ([a-zA-Z][^ /> ]*)(?:\s|/(?!>))*uJ \s*([a-zA-Z_][-.:a-zA-Z_0-9]*)(\s*=\s*(\'[^\']*\'|"[^"]*"|[^\s"\'=<>`]*))?u] ((?<=[\'"\s/])[^\s/>][^\s/=>]*)(\s*=+\s*(\'[^\']*\'|"[^"]*"|(?![\'"])[^>\s]*))?(?:\s|/(?!>))*u <[a-zA-Z][-.a-zA-Z0-9:_]* # tag name (?:\s+ # whitespace before attribute name (?:[a-zA-Z_][-.:a-zA-Z0-9_]* # attribute name (?:\s*=\s* # value indicator (?:'[^']*' # LITA-enclosed value |\"[^\"]*\" # LIT-enclosed value |[^'\">\s]+ # bare value ) )? ) )* \s* # trailing whitespace uF <[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 u# \s*([a-zA-Z][-.a-zA-Z0-9:_]*)\s*>c B s5 | Ee Z d Z d Z d d d Z d d Z d S( u HTMLParseErroru&