def parse_line(self, line):
        """
        Parse one line
        """
        log.debug('Parsing {}'.format(line))

        # Skip blanks
        if line == '':
            return

        # Skip comments
        if line[0] == '#':
            return

        # Special case / header: parse global parameters into metadata
        if line.lstrip()[:6] == 'global':
            self.global_meta = self.parse_meta(line)
            # global_meta can specify "include=1"; never seen other options
            # used but presumably =0 means false
            self.global_meta['include'] = (False if
                                           self.global_meta.get('include') in
                                           ('0', 'False', False) else True)
            return

        # Try to parse the line
        region_type_search = regex_global.search(line)
        if region_type_search:
            include = region_type_search.groups()[0]
            region_type = region_type_search.groups()[1]
        else:
            self._raise_error("No region type found for line '{0}'.".format(line))
            return

        if region_type in self.coordinate_systems:
            # Found coord system definition
            self.set_coordsys(region_type)
            return
        if region_type not in DS9RegionParser.language_spec:
            self._raise_error("Region type '{0}' was identified, but it is not one of "
                              "the known region types.".format(region_type))
            return
        else:
            # Found region specification,
            region_end = region_type_search.span()[1]
            self.parse_region(include, region_type, region_end, line)
Parse one line