code: def _parse_from_file(self, filepath, fname,
                           dependencies, recursive, greedy):
          
          #Now that we have the file contents, we can parse them using the parsers
          string = self.tramp.read(filepath)
          pmodules = self.modulep.parse(string, self, filepath=filepath)
          file_mtime = self._get_mod_mtime(filepath)
  
          for module in pmodules:
              module.change_time = file_mtime
              self.modules[module.name.lower()] = module
              self._modulefiles[fname].append(module.name.lower())
  
          pprograms = self.modulep.parse(string, self, False)
          for program in pprograms:
              program.change_time = file_mtime
              self.programs[program.name.lower()] = program
              self._programfiles[fname].append(program.name.lower())
  
          #There may be xml files for the docstrings that also need to be parsed.
          self._parse_docstrings(filepath)
          
          return (pmodules, pprograms)
docs: Parses the specified string to load the modules *from scratch* as
          opposed to loading pickled versions from the file cache.