code: def _parse_code_lines(lines):
      
      in_code = False
      lang = None
      indent = None
      for l in lines:
          m = _CODE_MARK.match(l)
          if m is not None:
              if not in_code:
                  if m.groups()[1].lower() in _LANGS:
                      lang = m.groups()[1].lower()
                      indent = len(m.groups()[0])
                      in_code = True
                  yield (l, in_code, lang, indent)
              else:
                  yield (l, in_code, lang, indent)
                  lang = None
                  indent = None
                  in_code = False
          else:
              yield (l, in_code, lang, indent)
docs: A iterator that returns if a line is within a code block
  
      Returns
      -------
      iterator of (str, bool, str, int)
          - line: the line
          - in_code: if this line is in a code block
          - lang: the code block langunage
          - indent: the code indent