# Copyright 1999-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

import re
from portage.dep import isvalidatom


def insert_category_into_atom(atom, category):
    # Handle '*' character for "extended syntax" wildcard support.
    alphanum = re.search(r"[\*\w]", atom, re.UNICODE)
    if alphanum:
        ret = atom[: alphanum.start()] + "%s/" % category + atom[alphanum.start() :]
    else:
        ret = None
    return ret


def is_valid_package_atom(x, allow_repo=False, allow_build_id=True):
    if "/" not in x.split(":")[0]:
        x2 = insert_category_into_atom(x, "cat")
        if x2 != None:
            x = x2
    return isvalidatom(
        x, allow_blockers=False, allow_repo=allow_repo, allow_build_id=allow_build_id
    )
