xref: /aosp_15_r20/external/fonttools/Lib/fontTools/subset/util.py (revision e1fe3e4ad2793916b15cccdc4a7da52a7e1dd0e9)
1*e1fe3e4aSElliott Hughes"""Private utility methods used by the subset modules"""
2*e1fe3e4aSElliott Hughes
3*e1fe3e4aSElliott Hughes
4*e1fe3e4aSElliott Hughesdef _add_method(*clazzes):
5*e1fe3e4aSElliott Hughes    """Returns a decorator function that adds a new method to one or
6*e1fe3e4aSElliott Hughes    more classes."""
7*e1fe3e4aSElliott Hughes
8*e1fe3e4aSElliott Hughes    def wrapper(method):
9*e1fe3e4aSElliott Hughes        done = []
10*e1fe3e4aSElliott Hughes        for clazz in clazzes:
11*e1fe3e4aSElliott Hughes            if clazz in done:
12*e1fe3e4aSElliott Hughes                continue  # Support multiple names of a clazz
13*e1fe3e4aSElliott Hughes            done.append(clazz)
14*e1fe3e4aSElliott Hughes            assert clazz.__name__ != "DefaultTable", "Oops, table class not found."
15*e1fe3e4aSElliott Hughes            assert not hasattr(
16*e1fe3e4aSElliott Hughes                clazz, method.__name__
17*e1fe3e4aSElliott Hughes            ), "Oops, class '%s' has method '%s'." % (clazz.__name__, method.__name__)
18*e1fe3e4aSElliott Hughes            setattr(clazz, method.__name__, method)
19*e1fe3e4aSElliott Hughes        return None
20*e1fe3e4aSElliott Hughes
21*e1fe3e4aSElliott Hughes    return wrapper
22*e1fe3e4aSElliott Hughes
23*e1fe3e4aSElliott Hughes
24*e1fe3e4aSElliott Hughesdef _uniq_sort(l):
25*e1fe3e4aSElliott Hughes    return sorted(set(l))
26