dmg-builder 26.5.0 → 26.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,504 +0,0 @@
1
- import math
2
- import re
3
-
4
-
5
- class Color:
6
- def to_rgb(self):
7
- raise Exception("Must implement to_rgb() in subclasses")
8
-
9
-
10
- class RGB:
11
- def __init__(self, r, g, b):
12
- self.r = r
13
- self.g = g
14
- self.b = b
15
-
16
- def to_rgb(self):
17
- return self
18
-
19
-
20
- class HSL(Color):
21
- def __init__(self, h, s, l): # noqa: E741
22
- self.h = h
23
- self.s = s
24
- self.l = l # noqa: E741
25
-
26
- @staticmethod
27
- def _hue_to_rgb(t1, t2, hue):
28
- if hue < 0:
29
- hue += 6
30
- elif hue >= 6:
31
- hue -= 6
32
-
33
- if hue < 1:
34
- return (t2 - t1) * hue + t1
35
- elif hue < 3:
36
- return t2
37
- elif hue < 4:
38
- return (t2 - t1) * (4 - hue) + t1
39
- else:
40
- return t1
41
-
42
- def to_rgb(self):
43
- hue = self.h / 60.0
44
- if self.l <= 0.5: # noqa: E741
45
- t2 = self.l * (self.s + 1)
46
- else:
47
- t2 = self.l + self.s - (self.l * self.s)
48
- t1 = self.l * 2 - t2
49
- r = self._hue_to_rgb(t1, t2, hue + 2)
50
- g = self._hue_to_rgb(t1, t2, hue)
51
- b = self._hue_to_rgb(t1, t2, hue - 2)
52
- return RGB(r, g, b)
53
-
54
-
55
- class HWB(Color):
56
- def __init__(self, h, w, b):
57
- self.h = h
58
- self.w = w
59
- self.b = b
60
-
61
- @staticmethod
62
- def _hue_to_rgb(hue):
63
- if hue < 0:
64
- hue += 6
65
- elif hue >= 6:
66
- hue -= 6
67
-
68
- if hue < 1:
69
- return hue
70
- elif hue < 3:
71
- return 1
72
- elif hue < 4:
73
- return 4 - hue
74
- else:
75
- return 0
76
-
77
- def to_rgb(self):
78
- hue = self.h / 60.0
79
- t1 = 1 - self.w - self.b
80
- r = self._hue_to_rgb(hue + 2) * t1 + self.w
81
- g = self._hue_to_rgb(hue) * t1 + self.w
82
- b = self._hue_to_rgb(hue - 2) * t1 + self.w
83
- return RGB(r, g, b)
84
-
85
-
86
- class CMYK(Color):
87
- def __init__(self, c, m, y, k):
88
- self.c = c
89
- self.m = m
90
- self.y = y
91
- self.k = k
92
-
93
- def to_rgb(self):
94
- r = 1.0 - min(1.0, self.c + self.k)
95
- g = 1.0 - min(1.0, self.m + self.k)
96
- b = 1.0 - min(1.0, self.y + self.k)
97
- return RGB(r, g, b)
98
-
99
-
100
- class Gray(Color):
101
- def __init__(self, g):
102
- self.g = g
103
-
104
- def to_rgb(self):
105
- return RGB(self.g, self.g, self.g)
106
-
107
-
108
- _x11_colors = {
109
- "aliceblue": (240, 248, 255),
110
- "antiquewhite": (250, 235, 215),
111
- "aqua": (0, 255, 255),
112
- "aquamarine": (127, 255, 212),
113
- "azure": (240, 255, 255),
114
- "beige": (245, 245, 220),
115
- "bisque": (255, 228, 196),
116
- "black": (0, 0, 0),
117
- "blanchedalmond": (255, 235, 205),
118
- "blue": (0, 0, 255),
119
- "blueviolet": (138, 43, 226),
120
- "brown": (165, 42, 42),
121
- "burlywood": (222, 184, 135),
122
- "cadetblue": (95, 158, 160),
123
- "chartreuse": (127, 255, 0),
124
- "chocolate": (210, 105, 30),
125
- "coral": (255, 127, 80),
126
- "cornflowerblue": (100, 149, 237),
127
- "cornsilk": (255, 248, 220),
128
- "crimson": (220, 20, 60),
129
- "cyan": (0, 255, 255),
130
- "darkblue": (0, 0, 139),
131
- "darkcyan": (0, 139, 139),
132
- "darkgoldenrod": (184, 134, 11),
133
- "darkgray": (169, 169, 169),
134
- "darkgreen": (0, 100, 0),
135
- "darkgrey": (169, 169, 169),
136
- "darkkhaki": (189, 183, 107),
137
- "darkmagenta": (139, 0, 139),
138
- "darkolivegreen": (85, 107, 47),
139
- "darkorange": (255, 140, 0),
140
- "darkorchid": (153, 50, 204),
141
- "darkred": (139, 0, 0),
142
- "darksalmon": (233, 150, 122),
143
- "darkseagreen": (143, 188, 143),
144
- "darkslateblue": (72, 61, 139),
145
- "darkslategray": (47, 79, 79),
146
- "darkslategrey": (47, 79, 79),
147
- "darkturquoise": (0, 206, 209),
148
- "darkviolet": (148, 0, 211),
149
- "deeppink": (255, 20, 147),
150
- "deepskyblue": (0, 191, 255),
151
- "dimgray": (105, 105, 105),
152
- "dimgrey": (105, 105, 105),
153
- "dodgerblue": (30, 144, 255),
154
- "firebrick": (178, 34, 34),
155
- "floralwhite": (255, 250, 240),
156
- "forestgreen": (34, 139, 34),
157
- "fuchsia": (255, 0, 255),
158
- "gainsboro": (220, 220, 220),
159
- "ghostwhite": (248, 248, 255),
160
- "gold": (255, 215, 0),
161
- "goldenrod": (218, 165, 32),
162
- "gray": (128, 128, 128),
163
- "grey": (128, 128, 128),
164
- "green": (0, 128, 0),
165
- "greenyellow": (173, 255, 47),
166
- "honeydew": (240, 255, 240),
167
- "hotpink": (255, 105, 180),
168
- "indianred": (205, 92, 92),
169
- "indigo": (75, 0, 130),
170
- "ivory": (255, 255, 240),
171
- "khaki": (240, 230, 140),
172
- "lavender": (230, 230, 250),
173
- "lavenderblush": (255, 240, 245),
174
- "lawngreen": (124, 252, 0),
175
- "lemonchiffon": (255, 250, 205),
176
- "lightblue": (173, 216, 230),
177
- "lightcoral": (240, 128, 128),
178
- "lightcyan": (224, 255, 255),
179
- "lightgoldenrodyellow": (250, 250, 210),
180
- "lightgray": (211, 211, 211),
181
- "lightgreen": (144, 238, 144),
182
- "lightgrey": (211, 211, 211),
183
- "lightpink": (255, 182, 193),
184
- "lightsalmon": (255, 160, 122),
185
- "lightseagreen": (32, 178, 170),
186
- "lightskyblue": (135, 206, 250),
187
- "lightslategray": (119, 136, 153),
188
- "lightslategrey": (119, 136, 153),
189
- "lightsteelblue": (176, 196, 222),
190
- "lightyellow": (255, 255, 224),
191
- "lime": (0, 255, 0),
192
- "limegreen": (50, 205, 50),
193
- "linen": (250, 240, 230),
194
- "magenta": (255, 0, 255),
195
- "maroon": (128, 0, 0),
196
- "mediumaquamarine": (102, 205, 170),
197
- "mediumblue": (0, 0, 205),
198
- "mediumorchid": (186, 85, 211),
199
- "mediumpurple": (147, 112, 219),
200
- "mediumseagreen": (60, 179, 113),
201
- "mediumslateblue": (123, 104, 238),
202
- "mediumspringgreen": (0, 250, 154),
203
- "mediumturquoise": (72, 209, 204),
204
- "mediumvioletred": (199, 21, 133),
205
- "midnightblue": (25, 25, 112),
206
- "mintcream": (245, 255, 250),
207
- "mistyrose": (255, 228, 225),
208
- "moccasin": (255, 228, 181),
209
- "navajowhite": (255, 222, 173),
210
- "navy": (0, 0, 128),
211
- "oldlace": (253, 245, 230),
212
- "olive": (128, 128, 0),
213
- "olivedrab": (107, 142, 35),
214
- "orange": (255, 165, 0),
215
- "orangered": (255, 69, 0),
216
- "orchid": (218, 112, 214),
217
- "palegoldenrod": (238, 232, 170),
218
- "palegreen": (152, 251, 152),
219
- "paleturquoise": (175, 238, 238),
220
- "palevioletred": (219, 112, 147),
221
- "papayawhip": (255, 239, 213),
222
- "peachpuff": (255, 218, 185),
223
- "peru": (205, 133, 63),
224
- "pink": (255, 192, 203),
225
- "plum": (221, 160, 221),
226
- "powderblue": (176, 224, 230),
227
- "purple": (128, 0, 128),
228
- "red": (255, 0, 0),
229
- "rosybrown": (188, 143, 143),
230
- "royalblue": (65, 105, 225),
231
- "saddlebrown": (139, 69, 19),
232
- "salmon": (250, 128, 114),
233
- "sandybrown": (244, 164, 96),
234
- "seagreen": (46, 139, 87),
235
- "seashell": (255, 245, 238),
236
- "sienna": (160, 82, 45),
237
- "silver": (192, 192, 192),
238
- "skyblue": (135, 206, 235),
239
- "slateblue": (106, 90, 205),
240
- "slategray": (112, 128, 144),
241
- "slategrey": (112, 128, 144),
242
- "snow": (255, 250, 250),
243
- "springgreen": (0, 255, 127),
244
- "steelblue": (70, 130, 180),
245
- "tan": (210, 180, 140),
246
- "teal": (0, 128, 128),
247
- "thistle": (216, 191, 216),
248
- "tomato": (255, 99, 71),
249
- "turquoise": (64, 224, 208),
250
- "violet": (238, 130, 238),
251
- "wheat": (245, 222, 179),
252
- "white": (255, 255, 255),
253
- "whitesmoke": (245, 245, 245),
254
- "yellow": (255, 255, 0),
255
- "yellowgreen": (154, 205, 50),
256
- }
257
-
258
- _ws_re = re.compile(r"\s+")
259
- _token_re = re.compile(r"[A-Za-z_][A-Za-z0-9_]*")
260
- _hex_re = re.compile(r"#([0-9a-f]{3}(?:[0-9a-f]{3})?)$", re.IGNORECASE)
261
- _number_re = re.compile(r"[0-9]*(\.[0-9]*)")
262
-
263
-
264
- class ColorParser:
265
- def __init__(self, s):
266
- self._string = s
267
- self._pos = 0
268
-
269
- def skipws(self):
270
- m = _ws_re.match(self._string, self._pos)
271
- if m:
272
- self._pos = m.end(0)
273
-
274
- def expect(self, s, context=""):
275
- if (
276
- len(self._string) - self._pos < len(s)
277
- or self._string[self._pos : self._pos + len(s)] != s
278
- ):
279
- raise ValueError(f'bad color "{self._string}" - expected "{s}"{context}')
280
- self._pos += len(s)
281
-
282
- def expectEnd(self):
283
- if self._pos != len(self._string):
284
- raise ValueError(f'junk at end of color "{self._string}"')
285
-
286
- def getToken(self):
287
- m = _token_re.match(self._string, self._pos)
288
- if m:
289
- token = m.group(0)
290
-
291
- self._pos = m.end(0)
292
- return token
293
- return None
294
-
295
- def parseNumber(self, context=""):
296
- m = _number_re.match(self._string, self._pos)
297
- if m:
298
- self._pos = m.end(0)
299
- return float(m.group(0))
300
- raise ValueError(f'bad color "{self._string}" - expected a number{context}')
301
-
302
- def parseColor(self):
303
- self.skipws()
304
-
305
- token = self.getToken()
306
- if token:
307
- if token == "rgb":
308
- return self.parseRGB()
309
- elif token == "hsl":
310
- return self.parseHSL()
311
- elif token == "hwb":
312
- return self.parseHWB()
313
- elif token == "cmyk":
314
- return self.parseCMYK()
315
- elif token == "gray" or token == "grey":
316
- return self.parseGray()
317
-
318
- try:
319
- r, g, b = _x11_colors[token]
320
- except KeyError:
321
- raise ValueError(f'unknown color name "{token}"')
322
-
323
- self.expectEnd()
324
-
325
- return RGB(r / 255.0, g / 255.0, b / 255.0)
326
-
327
- m = _hex_re.match(self._string, self._pos)
328
- if m:
329
- hrgb = m.group(1)
330
-
331
- if len(hrgb) == 3:
332
- r = int("0x" + 2 * hrgb[0], 16)
333
- g = int("0x" + 2 * hrgb[1], 16)
334
- b = int("0x" + 2 * hrgb[2], 16)
335
- else:
336
- r = int("0x" + hrgb[0:2], 16)
337
- g = int("0x" + hrgb[2:4], 16)
338
- b = int("0x" + hrgb[4:6], 16)
339
-
340
- self._pos = m.end(0)
341
- self.skipws()
342
-
343
- self.expectEnd()
344
-
345
- return RGB(r / 255.0, g / 255.0, b / 255.0)
346
-
347
- raise ValueError(f'bad color syntax "{self._string}"')
348
-
349
- def parseRGB(self):
350
- self.expect("(", 'after "rgb"')
351
- self.skipws()
352
-
353
- r = self.parseValue()
354
-
355
- self.skipws()
356
- self.expect(",", 'in "rgb"')
357
- self.skipws()
358
-
359
- g = self.parseValue()
360
-
361
- self.skipws()
362
- self.expect(",", 'in "rgb"')
363
- self.skipws()
364
-
365
- b = self.parseValue()
366
-
367
- self.skipws()
368
- self.expect(")", 'at end of "rgb"')
369
-
370
- self.skipws()
371
- self.expectEnd()
372
-
373
- return RGB(r, g, b)
374
-
375
- def parseHSL(self):
376
- self.expect("(", 'after "hsl"')
377
- self.skipws()
378
-
379
- h = self.parseAngle()
380
-
381
- self.skipws()
382
- self.expect(",", 'in "hsl"')
383
- self.skipws()
384
-
385
- s = self.parseValue()
386
-
387
- self.skipws()
388
- self.expect(",", 'in "hsl"')
389
- self.skipws()
390
-
391
- l = self.parseValue() # noqa: E741
392
-
393
- self.skipws()
394
- self.expect(")", 'at end of "hsl"')
395
-
396
- self.skipws()
397
- self.expectEnd()
398
-
399
- return HSL(h, s, l)
400
-
401
- def parseHWB(self):
402
- self.expect("(", 'after "hwb"')
403
- self.skipws()
404
-
405
- h = self.parseAngle()
406
-
407
- self.skipws()
408
- self.expect(",", 'in "hwb"')
409
- self.skipws()
410
-
411
- w = self.parseValue()
412
-
413
- self.skipws()
414
- self.expect(",", 'in "hwb"')
415
- self.skipws()
416
-
417
- b = self.parseValue()
418
-
419
- self.skipws()
420
- self.expect(")", 'at end of "hwb"')
421
-
422
- self.skipws()
423
- self.expectEnd()
424
-
425
- return HWB(h, w, b)
426
-
427
- def parseCMYK(self):
428
- self.expect("(", 'after "cmyk"')
429
- self.skipws()
430
-
431
- c = self.parseValue()
432
-
433
- self.skipws()
434
- self.expect(",", 'in "cmyk"')
435
- self.skipws()
436
-
437
- m = self.parseValue()
438
-
439
- self.skipws()
440
- self.expect(",", 'in "cmyk"')
441
- self.skipws()
442
-
443
- y = self.parseValue()
444
-
445
- self.skipws()
446
- self.expect(",", 'in "cmyk"')
447
- self.skipws()
448
-
449
- k = self.parseValue()
450
-
451
- self.skipws()
452
- self.expect(")", 'at end of "cmyk"')
453
-
454
- self.skipws()
455
- self.expectEnd()
456
-
457
- return CMYK(c, m, y, k)
458
-
459
- def parseGray(self):
460
- self.expect("(", 'after "gray"')
461
- self.skipws()
462
-
463
- g = self.parseValue()
464
-
465
- self.skipws()
466
- self.expect(")", 'at end of "gray')
467
-
468
- self.skipws()
469
- self.expectEnd()
470
-
471
- return Gray(g)
472
-
473
- def parseValue(self):
474
- n = self.parseNumber()
475
- self.skipws()
476
- if self._string[self._pos] == "%":
477
- n = n / 100.0
478
- self.pos += 1
479
- return n
480
-
481
- def parseAngle(self):
482
- n = self.parseNumber()
483
- self.skipws()
484
- tok = self.getToken()
485
- if tok == "rad":
486
- n = n * 180.0 / math.pi
487
- elif tok == "grad" or tok == "gon":
488
- n = n * 0.9
489
- elif tok != "deg":
490
- raise ValueError(f'bad angle unit "{tok}"')
491
- return n
492
-
493
-
494
- _color_re = re.compile(
495
- r"\s*(#|rgb|hsl|hwb|cmyk|gray|grey|{})".format("|".join(_x11_colors.keys()))
496
- )
497
-
498
-
499
- def isAColor(s):
500
- return _color_re.match(s)
501
-
502
-
503
- def parseColor(s):
504
- return ColorParser(s).parseColor()