1#!/usr/bin/env python 2 3from plasTeX import Command, Environment 4 5def ProcessOptions(options, document): 6 colors = {} 7 document.userdata.setPath('packages/color/colors', colors) 8 colors['red'] = latex2htmlcolor('1,0,0') 9 colors['green'] = latex2htmlcolor('0,1,0') 10 colors['blue'] = latex2htmlcolor('0,0,1') 11 12 colors['cyan'] = latex2htmlcolor('0,1,1') 13 colors['magenta'] = latex2htmlcolor('1,0,1') 14 colors['yellow'] = latex2htmlcolor('1,1,0') 15 16 colors['white'] = latex2htmlcolor('1') 17 colors['black'] = latex2htmlcolor('0') 18 colors['gray'] = latex2htmlcolor('0.9') 19 20 colors['darkred'] = latex2htmlcolor('0.8,0,0') 21 colors['middlered'] = latex2htmlcolor('0.9,0,0') 22 colors['lightred'] = latex2htmlcolor('1,0,0') 23 24 colors['darkgreen'] = latex2htmlcolor('0,0.6,0') 25 colors['middlegreen'] = latex2htmlcolor('0,0.8,0') 26 colors['lightgreen'] = latex2htmlcolor('0,1,0') 27 28 colors['darkblue'] = latex2htmlcolor('0,0,0.8') 29 colors['middleblue'] = latex2htmlcolor('0,0,0.9') 30 colors['lightblue'] = latex2htmlcolor('0,0,1') 31 32 colors['darkcyan'] = latex2htmlcolor('0.6,0.8,0.8') 33 colors['middlecyan'] = latex2htmlcolor('0,0.8,0.8') 34 35 colors['darkmagenta'] = latex2htmlcolor('0.8,0.6,0.8') 36 colors['middlemagenta'] = latex2htmlcolor('1,0,0.6') 37 38 colors['darkyellow'] = latex2htmlcolor('0.8,0.8,0.6') 39 colors['middleyellow'] = latex2htmlcolor('1,1,0.2') 40 41 colors['darkgray'] = latex2htmlcolor('0.5') 42 colors['middlegray'] = latex2htmlcolor('0.7') 43 colors['lightgray'] = latex2htmlcolor('0.9') 44 45def latex2htmlcolor(arg, model='rgb', named=None): 46 named = named or {} 47 if model == 'named': 48 return named.get(arg, '') 49 if ',' in arg: 50 parts = [float(x) for x in arg.split(',')] 51 # rgb 52 if len(parts) == 3: 53 red, green, blue = parts 54 red = min(int(red * 255), 255) 55 green = min(int(green * 255), 255) 56 blue = min(int(blue * 255), 255) 57 # cmyk 58 elif len(parts) == 4: 59 c, m, y, k = parts 60 red, green, blue = [int(255*x) for x in [1-c*(1-k)-k, 1-m*(1-k)-k, 1-y*(1-k)-k]] 61 else: 62 return arg.strip() 63 else: 64 try: 65 red = green = blue = float(arg) 66 except ValueError: 67 try: 68 return named[arg] 69 except KeyError: 70 return arg.strip() 71 return '#%.2X%.2X%.2X' % (red, green, blue) 72 73class definecolor(Command): 74 args = 'name:str model:str color:str' 75 def invoke(self, tex): 76 a = self.parse(tex) 77 u = self.ownerDocument.userdata 78 colors = u.getPath('packages/color/colors') 79 colors[a['name']] = latex2htmlcolor(a['color'], a['model'], colors) 80 81class textcolor(Command): 82 args = '[ model:str ] color:str self' 83 def invoke(self, tex): 84 a = self.parse(tex) 85 self.style['color'] = latex2htmlcolor(a['color'], a['model'], 86 self.ownerDocument.userdata.getPath('packages/color/colors')) 87 88class color(Environment): 89 args = '[ model:str ] color:str' 90 def invoke(self, tex): 91 a = self.parse(tex) 92 self.style['color'] = latex2htmlcolor(a['color'], a['model'], 93 self.ownerDocument.userdata.getPath('packages/color/colors')) 94 95class pagecolor(Command): 96 args = '[ model:str ] color:str' 97 98class colorbox(Command): 99 args = '[ model:str ] color:str self' 100 def invoke(self, tex): 101 a = self.parse(tex) 102 self.style['background-color'] = latex2htmlcolor(a['color'], 103 a['model'], self.ownerDocument.userdata.getPath('packages/color/colors')) 104 105class fcolorbox(Command): 106 args = '[ model:str ] bordercolor:str color:str self' 107 def invoke(self, tex): 108 a = self.parse(tex) 109 self.style['background-color'] = latex2htmlcolor(a['color'], 110 a['model'], self.ownerDocument.userdata.getPath('packages/color/colors')) 111 self.style['border'] = '1px solid %s' % latex2htmlcolor( 112 a['bordercolor'], a['model'], 113 self.ownerDocument.userdata.getPath('packages/color/colors')) 114 115class normalcolor(Command): 116 pass 117