code: def tree_token_generator(el, indentation_level=0):
      
  
      if not isinstance(el.tag, string_class):
          return
  
      tag_name = el.tag.lower()
  
      is_indentation = is_indentation_element(el)
  
      if is_indentation:
          indentation_level += 1
  
      yield (el, BEGIN, indentation_level)
  
      yield el.text
  
      for child in el.iterchildren():
          for token in tree_token_generator(child, indentation_level):
              yield token
  
      if is_indentation:
          indentation_level -= 1
  
      yield (el, END, indentation_level)
  
      yield el.tail
docs: Internal generator that yields tokens for the given HTML element as
      follows:
  
      - A tuple (LXML element, BEGIN, indentation_level)
      - Text right after the start of the tag, or None.
      - Recursively calls the token generator for all child objects
      - A tuple (LXML element, END, indentation_level)
      - Text right after the end of the tag, or None.