code: def preprocess_cell(
          self, cell: "NotebookNode", resources: dict, index: int
      ) -> Tuple["NotebookNode", dict]:
          
          if cell.cell_type == "markdown":
              variables = cell["metadata"].get("variables", {})
              if len(variables) > 0:
                  cell.source = self.replace_variables(cell.source, variables)
                  if resources.get("delete_pymarkdown", False):
                      del cell.metadata["variables"]
          return cell, resources
docs: Preprocess cell.
  
          Parameters
          ----------
          cell : NotebookNode cell
              Notebook cell being processed
          resources : dictionary
              Additional resources used in the conversion process. Allows
              preprocessors to pass variables into the Jinja engine.
          cell_index : int
              Index of the cell being processed (see base.py)