code: def read(self, lines):
          
  
          # Do we have an explicit code marker on the first line?
          self.metadata_and_language_from_option_line(lines[0])
  
          if self.metadata and 'language' in self.metadata:
              self.language = self.metadata.pop('language')
  
          # Parse cell till its end and set content, lines_to_next_cell
          pos_next_cell = self.find_cell_content(lines)
  
          if self.cell_type == 'code':
              new_cell = new_code_cell
          elif self.cell_type == 'markdown':
              new_cell = new_markdown_cell
          else:
              new_cell = new_raw_cell
  
          if not self.metadata:
              self.metadata = {}
  
          if self.ext == '.py':
              expected_blank_lines = pep8_lines_between_cells(self.org_content or [''], lines[pos_next_cell:], self.ext)
          else:
              expected_blank_lines = 1
  
          if self.lines_to_next_cell != expected_blank_lines:
              self.metadata['lines_to_next_cell'] = self.lines_to_next_cell
  
          if self.language:
              self.metadata['language'] = self.language
  
          return new_cell(source='\n'.join(self.content), metadata=self.metadata), pos_next_cell
docs: Read one cell from the given lines, and return the cell,
          plus the position of the next cell