1#!/usr/bin/python 2# a comment 3 4import re 5import sys 6 7 8solarized = """ 9base03 #002b36 8/4 brblack 234 #1c1c1c 15 -12 -12 0 43 54 193 100 21 10base02 #073642 0/4 black 235 #262626 20 -12 -12 7 54 66 192 90 26 11base01 #586e75 10/7 brgreen 240 #4e4e4e 45 -07 -07 88 110 117 194 25 46 12base00 #657b83 11/7 bryellow 241 #585858 50 -07 -07 101 123 131 195 23 51 13base0 #839496 12/6 brblue 244 #808080 60 -06 -03 131 148 150 186 13 59 14base1 #93a1a1 14/4 brcyan 245 #8a8a8a 65 -05 -02 147 161 161 180 9 63 15base2 #eee8d5 7/7 white 254 #d7d7af 92 -00 10 238 232 213 44 11 93 16base3 #fdf6e3 15/7 brwhite 230 #ffffd7 97 00 10 253 246 227 44 10 99 17yellow #b58900 3/3 yellow 136 #af8700 60 10 65 181 137 0 45 100 71 18orange #cb4b16 9/3 brred 166 #d75f00 50 50 55 203 75 22 18 89 80 19red #dc322f 1/1 red 160 #d70000 50 65 45 220 50 47 1 79 86 20magenta #d33682 5/5 magenta 125 #af005f 50 65 -05 211 54 130 331 74 83 21violet #6c71c4 13/5 brmagenta 61 #5f5faf 50 15 -45 108 113 196 237 45 77 22blue #268bd2 4/4 blue 33 #0087ff 55 -10 -45 38 139 210 205 82 82 23cyan #2aa198 6/6 cyan 37 #00afaf 60 -35 -05 42 161 152 175 74 63 24green #859900 2/2 green 64 #5f8700 60 -20 65 133 153 0 68 100 60 25""".split('\n') 26 27solarized = [s for s in solarized if s] 28assert len(solarized) == 16 29 30is_inverted = len(sys.argv) >= 2 and sys.argv[1] == '--invert' 31 32colors = {} 33 34 35def dashrgb_to_0xbgr(dash_rgb): 36 (r, g, b,) = re.match(r'#(..)(..)(..)', dash_rgb).groups() 37 return '0x{}{}{}'.format(b, g, r) 38 39 40assert dashrgb_to_0xbgr('#859900') == '0x009985' 41 42 43def invert_name(color_name): 44 if len(color_name) < 5: 45 return color_name 46 if color_name[:5] == 'base0' and len(color_name) > 5: 47 return color_name[:4] + color_name[5:] 48 if color_name[:4] == 'base': 49 return 'base0' + color_name[4:] 50 return color_name 51 52 53assert invert_name('red') == 'red' 54assert invert_name('yellow') == 'yellow' 55assert invert_name('base0') == 'base00' 56assert invert_name('base00') == 'base0' 57assert invert_name('base03') == 'base3' 58assert invert_name('base2') == 'base02' 59 60 61for line in solarized: 62 pieces = re.split(r'\s+', line) 63 name = pieces[0] 64 rgb_str = pieces[1] 65 colors[name] = dashrgb_to_0xbgr(rgb_str) 66 67for line in open('Solarized.style.src'): 68 for color in colors.keys(): 69 color_index = color if not is_inverted else invert_name(color) 70 pattern = ':\s*' + color + '\s*(;?)' 71 def replacement(match): 72 return ': ' + colors[color_index] + match.group(1) 73 74 line = re.sub(pattern, replacement, line) 75 print(line.rstrip()) 76