def _load_proposed_emoji_data():
    """Parse proposed-emoji.txt if it exists to get cps/names of proposed emoji
    (but not approved) for this version of Unicode."""

    global _proposed_emoji_data, _proposed_emoji_data_cps
    if _proposed_emoji_data:
        return

    _proposed_emoji_data = {}
    line_re = re.compile(r"^U\+([a-zA-z0-9]{4,5})\s.*\s\d{4}Q\d\s+(.*)$")
    try:
        with open_unicode_data_file("proposed-emoji.txt") as f:
            for line in f:
                line = line.strip()
                if not line or line[0] == "#" or line.startswith(u"\u2022"):
                    continue

                m = line_re.match(line)
                if not m:
                    raise ValueError('did not match "%s"' % line)
                cp = int(m.group(1), 16)
                name = m.group(2)
                if cp in _proposed_emoji_data:
                    raise ValueError(
                        "duplicate emoji %x, old name: %s, new name: %s"
                        % (cp, _proposed_emoji_data[cp], name)
                    )

                _proposed_emoji_data[cp] = name
    except IOError as e:
        if e.errno != 2:
            # not file not found, rethrow
            raise

    _proposed_emoji_data_cps = frozenset(_proposed_emoji_data.keys())