From: <ef...@us...> - 2008-04-07 18:48:12
|
Revision: 5030 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=5030&view=rev Author: efiring Date: 2008-04-07 11:48:02 -0700 (Mon, 07 Apr 2008) Log Message: ----------- improve color validation in rc handling Modified Paths: -------------- trunk/matplotlib/CHANGELOG trunk/matplotlib/lib/matplotlib/rcsetup.py trunk/matplotlib/matplotlibrc.template Modified: trunk/matplotlib/CHANGELOG =================================================================== --- trunk/matplotlib/CHANGELOG 2008-04-04 15:02:48 UTC (rev 5029) +++ trunk/matplotlib/CHANGELOG 2008-04-07 18:48:02 UTC (rev 5030) @@ -1,6 +1,9 @@ +2008-04-07 Improve color validation in rc handling, suggested + by Lev Givon - EF + 2008-04-02 Allow to use both linestyle definition arguments, '-' and - 'solid' etc. in plots/collections - MM - + 'solid' etc. in plots/collections - MM + 2008-03-27 Fix saving to Unicode filenames with Agg backend (other backends appear to already work...) (Thanks, Christopher Barker) - MGD Modified: trunk/matplotlib/lib/matplotlib/rcsetup.py =================================================================== --- trunk/matplotlib/lib/matplotlib/rcsetup.py 2008-04-04 15:02:48 UTC (rev 5029) +++ trunk/matplotlib/lib/matplotlib/rcsetup.py 2008-04-07 18:48:02 UTC (rev 5030) @@ -10,6 +10,7 @@ import os from matplotlib.fontconfig_pattern import parse_fontconfig_pattern +from matplotlib.colors import is_color_like class ValidateInStrings: def __init__(self, key, valid, ignorecase=False): @@ -122,37 +123,35 @@ return [int(val) for val in s] - def validate_color(s): 'return a valid color arg' - if s.lower() == 'none': return 'None' - if len(s)==1 and s.isalpha(): return s - if s.find(',')>=0: # looks like an rgb + if s.lower() == 'none': + return 'None' + if is_color_like(s): + return s + stmp = '#' + s + if is_color_like(stmp): + return stmp + # If it is still valid, it must be a tuple. + colorarg = s + msg = '' + if s.find(',')>=0: # get rid of grouping symbols - s = ''.join([ c for c in s if c.isdigit() or c=='.' or c==',']) - vals = s.split(',') + stmp = ''.join([ c for c in s if c.isdigit() or c=='.' or c==',']) + vals = stmp.split(',') if len(vals)!=3: - raise ValueError('Color tuples must be length 3') + msg = '\nColor tuples must be length 3' + else: + try: + colorarg = [float(val) for val in vals] + except ValueError: + msg = '\nCould not convert all entries to floats' - try: return [float(val) for val in vals] - except ValueError: - raise ValueError('Could not convert all entries "%s" to floats'%s) + if not msg and is_color_like(colorarg): + return colorarg - if s.replace('.', '').isdigit(): # looks like scalar (grayscale) - return s + raise ValueError('%s does not look like a color arg%s'%(s, msg)) - if len(s)==6 and s.isalnum(): # looks like hex - return '#' + s - - if len(s)==7 and s.startswith('#') and s[1:].isalnum(): - return s - - if s.isalpha(): - #assuming a color name, hold on - return s - - raise ValueError('%s does not look like color arg'%s) - def validate_stringlist(s): 'return a list' if type(s) is str: Modified: trunk/matplotlib/matplotlibrc.template =================================================================== --- trunk/matplotlib/matplotlibrc.template 2008-04-04 15:02:48 UTC (rev 5029) +++ trunk/matplotlib/matplotlibrc.template 2008-04-07 18:48:02 UTC (rev 5030) @@ -19,7 +19,7 @@ # Colors: for the color values below, you can either use # - a matplotlib color string, such as r, k, or b # - an rgb tuple, such as (1.0, 0.5, 0.0) -# - a hex string, such as ff00ff (no '#' symbol) +# - a hex string, such as ff00ff or #ff00ff # - a scalar grayscale intensity such as 0.75 # - a legal html color name, eg red, blue, darkslategray This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |