docs: def next_file(self, close_previous=True):
          '''
          Gets the next file to be scanned (including pending extracted files, if applicable).
          Also re/initializes self.status.
          All modules should access the target file list through this method.
          '''
          fp = None
  
          # Ensure files are close to prevent IOError (too many open files)
          if close_previous:
              try:
                  self.previous_next_file_fp.close()
              except KeyboardInterrupt as e:
                  raise e
              except Exception:
                  pass
  
          # Add any pending extracted files to the target_files list and reset
          # the extractor's pending file list
          self.target_file_list += self.extractor.pending
  
          # Reset all dependencies prior to continuing with another file.
          # This is particularly important for the extractor module, which must be reset
          # in order to reset its base output directory path for each file, and the
          # list of pending files.
          self.reset_dependencies()
  
          while self.target_file_list:
              next_target_file = self.target_file_list.pop(0)
  
              # Values in self.target_file_list are either already open files (BlockFile instances), or paths
              # to files that need to be opened for scanning.
              if isinstance(next_target_file, str):
                  fp = self.config.open_file(next_target_file)
              else:
                  fp = next_target_file
  
              if not fp:
                  break
              else:
                  if (self.config.file_name_filter(fp) == False or
                          self._plugins_load_file(fp) == False):
                      fp.close()
                      fp = None
                      continue
                  else:
                      self.status.clear()
                      self.status.total = fp.length
                      break
  
          if fp is not None:
              self.current_target_file_name = fp.path
              self.status.fp = fp
          else:
              self.current_target_file_name = None
              self.status.fp = None
  
          self.previous_next_file_fp = fp
  
          self._plugins_new_file(fp)
  
          return fp