(self)
Return a name,value pair for the next attribute in the stream,
        if one is found, or None
Return a name,value pair for the next attribute in the stream,
        if one is found, or None
Return a name value pair for the next attribute in the stream if one is found or None
def getAttribute(self):
        """Return a name,value pair for the next attribute in the stream,
        if one is found, or None"""
        data = self.data
        # Step 1 (skip chars)
        c = data.skip(spaceCharactersBytes | frozenset([b"/"]))
        assert c is None or len(c) == 1
        # Step 2
        if c in (b">", None):
            return None
        # Step 3
        attrName = []
        attrValue = []
        # Step 4 attribute name
        while True:
            if c == b"=" and attrName:
                break
            elif c in spaceCharactersBytes:
                # Step 6!
                c = data.skip()
                break
            elif c in (b"/", b">"):
                return b"".join(attrName), b""
            elif c in asciiUppercaseBytes:
                attrName.append(c.lower())
            elif c is None:
                return None
            else:
                attrName.append(c)
            # Step 5
            c = next(data)
        # Step 7
        if c != b"=":
            data.previous()
            return b"".join(attrName), b""
        # Step 8
        next(data)
        # Step 9
        c = data.skip()
        # Step 10
        if c in (b"'", b'"'):
            # 10.1
            quoteChar = c
            while True:
                # 10.2
                c = next(data)
                # 10.3
                if c == quoteChar:
                    next(data)
                    return b"".join(attrName), b"".join(attrValue)
                # 10.4
                elif c in asciiUppercaseBytes:
                    attrValue.append(c.lower())
                # 10.5
                else:
                    attrValue.append(c)
        elif c == b">":
            return b"".join(attrName), b""
        elif c in asciiUppercaseBytes:
            attrValue.append(c.lower())
        elif c is None:
            return None
        else:
            attrValue.append(c)
        # Step 11
        while True:
            c = next(data)
            if c in spacesAngleBrackets:
                return b"".join(attrName), b"".join(attrValue)
            elif c in asciiUppercaseBytes:
                attrValue.append(c.lower())
            elif c is None:
                return None
            else:
                attrValue.append(c)
def getAttribute ( self ) : data = self . data # Step 1 (skip chars) c = data . skip ( spaceCharactersBytes | frozenset ( [ b"/" ] ) ) assert c is None or len ( c ) == 1 # Step 2 if c in ( b">" , None ) : return None # Step 3 attrName = [ ] attrValue = [ ] # Step 4 attribute name while True : if c == b"=" and attrName : break elif c in spaceCharactersBytes : # Step 6! c = data . skip ( ) break elif c in ( b"/" , b">" ) : return b"" . join ( attrName ) , b"" elif c in asciiUppercaseBytes : attrName . append ( c . lower ( ) ) elif c is None : return None else : attrName . append ( c ) # Step 5 c = next ( data ) # Step 7 if c != b"=" : data . previous ( ) return b"" . join ( attrName ) , b"" # Step 8 next ( data ) # Step 9 c = data . skip ( ) # Step 10 if c in ( b"'" , b'"' ) : # 10.1 quoteChar = c while True : # 10.2 c = next ( data ) # 10.3 if c == quoteChar : next ( data ) return b"" . join ( attrName ) , b"" . join ( attrValue ) # 10.4 elif c in asciiUppercaseBytes : attrValue . append ( c . lower ( ) ) # 10.5 else : attrValue . append ( c ) elif c == b">" : return b"" . join ( attrName ) , b"" elif c in asciiUppercaseBytes : attrValue . append ( c . lower ( ) ) elif c is None : return None else : attrValue . append ( c ) # Step 11 while True : c = next ( data ) if c in spacesAngleBrackets : return b"" . join ( attrName ) , b"" . join ( attrValue ) elif c in asciiUppercaseBytes : attrValue . append ( c . lower ( ) ) elif c is None : return None else : attrValue . append ( c )