"""Gimp Palette-loading

Loads a palette file and returns a list suitable for
Surface.setpalette()

If you've ever tried to specify a surface's entire palette using
surface.set_palette(), you may have noticed how frustrating it
is to create 256 individual RGB tuples. Kevin's code allows you
to load a gimp or Fractint palette file by
calling load_palette(filename), or you can specify your own
palette file in the format indicated in the docstrings.
"""
__author__ = "Kevin Turner"
__copyright__ = "Copyright (c) 2001 Kevin Turner"
__license__ = "Public Domain"
__version__ = "1.0"


import re

def load_palette(name='Firecode'):
    """Loads a palette file and returns a list suitable for Surface.setpalette()

    Loads a palette file, which is anything that looks like this:

    0 0 0
    0 0  4
    0 64 8
    ...

    GIMP and Fractint palette files both match this description.
    Lines that don't match are silently ignored.
    Only recognizes decimal values, not 0xFF or #AA66FF.
    """

    f = open(name)
    pal = []
    rgb_re = re.compile('^(?:\s+)?(\d+)\s+(\d+)\s+(\d+)')
    for l in f.readlines():
        m = rgb_re.search(l)
        if m:
            pal.append(tuple(map(int,m.groups())))

    if len(pal) != 256:
        print "Warning: palette \'%s\' does not contain 256 entries." % name
    if pal[0] != (0,0,0):
        print "Warning: palette \'%s\' has entry 0 set to non-black color"\
              % name, pal[0]
    return pal
