streamcorpus_pipeline/_hyperlink_labels.py
def iter_attrs( idx_bytes ):
    '''
    called when idx_chars is just past "<a " inside an HTML anchor tag
    
    generates tuple(end_idx, attr_name, attr_value)
    '''
    ## read to the end of the "A" tag
    while 1:
        idx, attr_name, next_b = read_to(idx_bytes, ['=', '>'])
        attr_vals = []

        ## stop if we hit the end of the tag, or end of idx_bytes
        if next_b is None or next_b == '>':
            return
        
        idx, space, quote = read_to(idx_bytes, run_bytes = [' ', '\t', '\n', '\r'])
        if quote not in ['"', "'"]:
            ## caught start of the property value
            attr_vals = [quote]
            quote = ' '
        
        idx, attr_val, next_b = read_to(idx_bytes, [quote, '>'])
        ## next_b had better either balance the start quote, end the
        ## tag, or end idx_bytes
        assert next_b in [quote, '>', None], attr_val
        attr_vals.append( attr_val )

        yield idx, attr_name.strip(), b''.join(attr_vals).strip()
def iter_attrs( idx_bytes ):
    '''
    called when idx_chars is just past "<a " inside an HTML anchor tag
    
    generates tuple(end_idx, attr_name, attr_value)
    '''
    ## read to the end of the "A" tag
    while 1:
        idx, attr_name, next_b = read_to(idx_bytes, ['=', '>'])
        attr_vals = []

        ## stop if we hit the end of the tag, or end of idx_bytes
        if next_b is None or next_b == '>':
            return
        
        idx, space, quote = read_to(idx_bytes, run_bytes = [' ', '\t', '\n', '\r'])
        if quote not in ['"', "'"]:
            ## caught start of the property value
            attr_vals = [quote]
            quote = ' '
        
        idx, attr_val, next_b = read_to(idx_bytes, [quote, '>'])
        ## next_b had better either balance the start quote, end the
        ## tag, or end idx_bytes
        assert next_b in [quote, '>', None], attr_val
        attr_vals.append( attr_val )

        yield idx, attr_name.strip(), b''.join(attr_vals).strip()
def iter_attrs ( idx_bytes ) : ## read to the end of the "A" tag while 1 : idx , attr_name , next_b = read_to ( idx_bytes , [ '=' , '>' ] ) attr_vals = [ ] ## stop if we hit the end of the tag, or end of idx_bytes if next_b is None or next_b == '>' : return idx , space , quote = read_to ( idx_bytes , run_bytes = [ ' ' , '\t' , '\n' , '\r' ] ) if quote not in [ '"' , "'" ] : ## caught start of the property value attr_vals = [ quote ] quote = ' ' idx , attr_val , next_b = read_to ( idx_bytes , [ quote , '>' ] ) ## next_b had better either balance the start quote, end the ## tag, or end idx_bytes assert next_b in [ quote , '>' , None ] , attr_val attr_vals . append ( attr_val ) yield idx , attr_name . strip ( ) , b'' . join ( attr_vals ) . strip ( )
called when idx_chars is just past "<a " inside an HTML anchor tag
    
    generates tuple(end_idx, attr_name, attr_value)
called when idx_chars is just past <a inside an HTML anchor tag generates tuple ( end_idx attr_name attr_value )