bbcode - bbcodehtml/colour.go
1 package bbcodehtml
2
3 import (
4 "strings"
5 )
6
7 // Colours is a map of colour names to their hex equivalent. It is used as an
8 // attribute filter in an bbcode.AttributeTag where it will recognise the
9 // contained colouts as well as raw hex values.
10 var Colours = colours{
11 "aliceblue": []byte("#F0F8FF"),
12 "antiquewhite": []byte("#FAEBD7"),
13 "aqua": []byte("#00FFFF"),
14 "aquamarine": []byte("#7FFFD4"),
15 "azure": []byte("#F0FFFF"),
16 "beige": []byte("#F5F5DC"),
17 "bisque": []byte("#FFE4C4"),
18 "black": []byte("#000000"),
19 "blanchedalmond": []byte("#FFEBCD"),
20 "blue": []byte("#0000FF"),
21 "blueviolet": []byte("#8A2BE2"),
22 "brown": []byte("#A52A2A"),
23 "burlywood": []byte("#DEB887"),
24 "cadetblue": []byte("#5F9EA0"),
25 "chartreuse": []byte("#7FFF00"),
26 "chocolate": []byte("#D2691E"),
27 "coral": []byte("#FF7F50"),
28 "cornflowerblue": []byte("#6495ED"),
29 "cornsilk": []byte("#FFF8DC"),
30 "crimson": []byte("#DC143C"),
31 "cyan": []byte("#00FFFF"),
32 "darkblue": []byte("#00008B"),
33 "darkcyan": []byte("#008B8B"),
34 "darkgoldenrod": []byte("#B8860B"),
35 "darkgray": []byte("#A9A9A9"),
36 "darkgrey": []byte("#A9A9A9"),
37 "darkgreen": []byte("#006400"),
38 "darkkhaki": []byte("#BDB76B"),
39 "darkmagenta": []byte("#8B008B"),
40 "darkolivegreen": []byte("#556B2F"),
41 "darkorange": []byte("#FF8C00"),
42 "darkorchid": []byte("#9932CC"),
43 "darkred": []byte("#8B0000"),
44 "darksalmon": []byte("#E9967A"),
45 "darkseagreen": []byte("#8FBC8F"),
46 "darkslateblue": []byte("#483D8B"),
47 "darkslategray": []byte("#2F4F4F"),
48 "darkslategrey": []byte("#2F4F4F"),
49 "darkturquoise": []byte("#00CED1"),
50 "darkviolet": []byte("#9400D3"),
51 "deeppink": []byte("#FF1493"),
52 "deepskyblue": []byte("#00BFFF"),
53 "dimgray": []byte("#696969"),
54 "dimgrey": []byte("#696969"),
55 "dodgerblue": []byte("#1E90FF"),
56 "firebrick": []byte("#B22222"),
57 "floralwhite": []byte("#FFFAF0"),
58 "forestgreen": []byte("#228B22"),
59 "fuchsia": []byte("#FF00FF"),
60 "gainsboro": []byte("#DCDCDC"),
61 "ghostwhite": []byte("#F8F8FF"),
62 "gold": []byte("#FFD700"),
63 "goldenrod": []byte("#DAA520"),
64 "gray": []byte("#808080"),
65 "grey": []byte("#808080"),
66 "green": []byte("#008000"),
67 "greenyellow": []byte("#ADFF2F"),
68 "honeydew": []byte("#F0FFF0"),
69 "hotpink": []byte("#FF69B4"),
70 "indianred ": []byte("#CD5C5C"),
71 "indigo ": []byte("#4B0082"),
72 "ivory": []byte("#FFFFF0"),
73 "khaki": []byte("#F0E68C"),
74 "lavender": []byte("#E6E6FA"),
75 "lavenderblush": []byte("#FFF0F5"),
76 "lawngreen": []byte("#7CFC00"),
77 "lemonchiffon": []byte("#FFFACD"),
78 "lightblue": []byte("#ADD8E6"),
79 "lightcoral": []byte("#F08080"),
80 "lightcyan": []byte("#E0FFFF"),
81 "lightgoldenrodyellow": []byte("#FAFAD2"),
82 "lightgray": []byte("#D3D3D3"),
83 "lightgrey": []byte("#D3D3D3"),
84 "lightgreen": []byte("#90EE90"),
85 "lightpink": []byte("#FFB6C1"),
86 "lightsalmon": []byte("#FFA07A"),
87 "lightseagreen": []byte("#20B2AA"),
88 "lightskyblue": []byte("#87CEFA"),
89 "lightslategray": []byte("#778899"),
90 "lightslategrey": []byte("#778899"),
91 "lightsteelblue": []byte("#B0C4DE"),
92 "lightyellow": []byte("#FFFFE0"),
93 "lime": []byte("#00FF00"),
94 "limegreen": []byte("#32CD32"),
95 "linen": []byte("#FAF0E6"),
96 "magenta": []byte("#FF00FF"),
97 "maroon": []byte("#800000"),
98 "mediumaquamarine": []byte("#66CDAA"),
99 "mediumblue": []byte("#0000CD"),
100 "mediumorchid": []byte("#BA55D3"),
101 "mediumpurple": []byte("#9370DB"),
102 "mediumseagreen": []byte("#3CB371"),
103 "mediumslateblue": []byte("#7B68EE"),
104 "mediumspringgreen": []byte("#00FA9A"),
105 "mediumturquoise": []byte("#48D1CC"),
106 "mediumvioletred": []byte("#C71585"),
107 "midnightblue": []byte("#191970"),
108 "mintcream": []byte("#F5FFFA"),
109 "mistyrose": []byte("#FFE4E1"),
110 "moccasin": []byte("#FFE4B5"),
111 "navajowhite": []byte("#FFDEAD"),
112 "navy": []byte("#000080"),
113 "oldlace": []byte("#FDF5E6"),
114 "olive": []byte("#808000"),
115 "olivedrab": []byte("#6B8E23"),
116 "orange": []byte("#FFA500"),
117 "orangered": []byte("#FF4500"),
118 "orchid": []byte("#DA70D6"),
119 "palegoldenrod": []byte("#EEE8AA"),
120 "palegreen": []byte("#98FB98"),
121 "paleturquoise": []byte("#AFEEEE"),
122 "palevioletred": []byte("#DB7093"),
123 "papayawhip": []byte("#FFEFD5"),
124 "peachpuff": []byte("#FFDAB9"),
125 "peru": []byte("#CD853F"),
126 "pink": []byte("#FFC0CB"),
127 "plum": []byte("#DDA0DD"),
128 "powderblue": []byte("#B0E0E6"),
129 "purple": []byte("#800080"),
130 "rebeccapurple": []byte("#663399"),
131 "red": []byte("#FF0000"),
132 "rosybrown": []byte("#BC8F8F"),
133 "royalblue": []byte("#4169E1"),
134 "saddlebrown": []byte("#8B4513"),
135 "salmon": []byte("#FA8072"),
136 "sandybrown": []byte("#F4A460"),
137 "seagreen": []byte("#2E8B57"),
138 "seashell": []byte("#FFF5EE"),
139 "sienna": []byte("#A0522D"),
140 "silver": []byte("#C0C0C0"),
141 "skyblue": []byte("#87CEEB"),
142 "slateblue": []byte("#6A5ACD"),
143 "slategray": []byte("#708090"),
144 "slategrey": []byte("#708090"),
145 "snow": []byte("#FFFAFA"),
146 "springgreen": []byte("#00FF7F"),
147 "steelblue": []byte("#4682B4"),
148 "tan": []byte("#D2B48C"),
149 "teal": []byte("#008080"),
150 "thistle": []byte("#D8BFD8"),
151 "tomato": []byte("#FF6347"),
152 "turquoise": []byte("#40E0D0"),
153 "violet": []byte("#EE82EE"),
154 "wheat": []byte("#F5DEB3"),
155 "white": []byte("#FFFFFF"),
156 "whitesmoke": []byte("#F5F5F5"),
157 "yellow": []byte("#FFFF00"),
158 "yellowgreen": []byte("#9ACD32"),
159 }
160
161 type colours map[string][]byte
162
163 func hexFunc(r rune) bool {
164 return (r < '0' || r > '9') && (r < 'A' || r > 'F') && (r < 'a' || r > 'f')
165 }
166
167 func (c colours) AttrFilter(attr string) []byte {
168 var hex []byte
169 if len(attr) > 0 {
170 var ok bool
171 if hex, ok = c[strings.ToLower(attr)]; !ok {
172 if attr[0] == '#' {
173 attr = attr[1:]
174 }
175 switch len(attr) {
176 case 3, 6:
177 if strings.IndexFunc(attr, hexFunc) < 0 {
178 hex = make([]byte, 1, 7)
179 hex[0] = '#'
180 hex = append(hex, attr...)
181 }
182 }
183 }
184 }
185 return hex
186 }
187