# Source code for cherrypy.lib.headers

    """headers."""

    def _parse_param(s):
        while s[:1] == ';':
            s = s[1:]
            end = s.find(';')
            while end > 0 and (s.count('"', 0, end) - s.count('\\"', 0, end)) % 2:
                end = s.find(';', end + 1)
            if end < 0:
                end = len(s)
            f = s[:end]
            yield f.strip()
            s = s[end:]

    def parse_header(line):
        """Parse a Content-type like header.

        Return the main content-type and a dictionary of options.

        Copied from removed stdlib cgi module. See
        `cherrypy/cherrypy#2014 (comment)
        <https://github.com/cherrypy/cherrypy/issues/2014#issuecomment-1883774891>`_
        for background.
        """
        parts = _parse_param(';' + line)
        key = parts.__next__()
        pdict = {}
        for p in parts:
            i = p.find('=')
            if i >= 0:
                name = p[:i].strip().lower()
                value = p[i + 1:].strip()
                if len(value) >= 2 and value[0] == value[-1] == '"':
                    value = value[1:-1]
                    value = value.replace('\\\\', '\\').replace('\\"', '"')
                pdict[name] = value
        return key, pdict