<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _update_libdata(self, line):
 """Update the library meta data from the current line being parsed Args: line (str):
 The current line of the of the file being parsed """

        ####################################################
        # parse MONA Comments line
        ####################################################
        # The mona msp files contain a "comments" line that contains lots of other information normally separated
        # into by ""
        if re.match('^Comment.*$', line, re.IGNORECASE):
            comments = re.findall('"([^"]*)"', line)
            for c in comments:
                self._parse_meta_info(c)
                self._parse_compound_info(c)

        ####################################################
        # parse meta and compound info lines
        ####################################################
        # check the current line for both general meta data
        # and compound information
        self._parse_meta_info(line)
        self._parse_compound_info(line)

        ####################################################
        # End of meta data
        ####################################################
        # Most MSP files have the a standard line of text before the spectra information begins. Here we check
        # for this line and store the relevant details for the compound and meta information to be ready for insertion
        # into the database
        if self.collect_meta and (re.match('^Num Peaks(.*)$', line, re.IGNORECASE) or re.match('^PK\$PEAK:(.*)', line,
                re.IGNORECASE) or re.match('^PK\$ANNOTATION(.*)', line, re.IGNORECASE)):

            self._store_compound_info()

            self._store_meta_info()

            # Reset the temp meta and compound information
            self.meta_info = get_blank_dict(self.meta_regex)
            self.compound_info = get_blank_dict(self.compound_regex)
            self.other_names = []
            self.collect_meta = False

        # ignore additional information in the 3rd column if using the MassBank spectra schema
        if re.match('^PK\$PEAK: m/z int\. rel\.int\.$', line, re.IGNORECASE):
            self.ignore_additional_spectra_info = True

        # Check if annnotation or spectra is to be in the next lines to be parsed
        if re.match('^Num Peaks(.*)$', line, re.IGNORECASE) or re.match('^PK\$PEAK:(.*)', line, re.IGNORECASE):
            self.start_spectra = True
            return
        elif re.match('^PK\$ANNOTATION(.*)', line, re.IGNORECASE):
            self.start_spectra_annotation = True

            match = re.match('^PK\$ANNOTATION:(.*)', line, re.IGNORECASE)
            columns = match.group(1)
            cl = columns.split()

            self.spectra_annotation_indexes = {i: cl.index(i) for i in cl}
            return

        ####################################################
        # Process annotation details
        ####################################################
        # e.g. molecular formula for each peak in the spectra
        if self.start_spectra_annotation:
            self._parse_spectra_annotation(line)

        ####################################################
        # Process spectra
        ####################################################
        if self.start_spectra:
            self._parse_spectra(line)