Last active
June 27, 2017 18:52
-
-
Save jpf91/953b6ba52dea91db58c1e07bf5a0b91c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Run at https://dpaste.dzfl.pl/861b8e5dd07b | |
// https://intranet.kit.edu/gestaltungsrichtlinien.php | |
// https://intranet.kit.edu/downloads/2_Gestaltungsgrundlagen.pdf | |
import std.stdio, std.string, std.array, std.algorithm, std.conv, std.range, std.math; | |
string input = "KIT-Schwarz | |
0 C | |
0 R | |
0 M | |
0 G | |
0 Y | |
0 B | |
100 K | |
KIT-Grün exklusiv | |
100 C | |
0 R | |
0 M | |
150 G | |
60 Y | |
130 B | |
0 K | |
KIT-Blau exklusiv | |
80 C | |
70 R | |
50 M | |
100 G | |
0 Y | |
170 B | |
0 K | |
KIT-Maigrün | |
60 C | |
140 R | |
0 M | |
182 G | |
100 Y | |
60 B | |
0 K | |
KIT-Gelb | |
0 C | |
252 R | |
5 M | |
229 G | |
100 Y | |
0 B | |
0 K | |
KIT-Orange | |
0 C | |
223 R | |
45 M | |
155 G | |
100 Y | |
27 B | |
0 K | |
KIT-Braun | |
35 C | |
167 R | |
50 M | |
130 G | |
100 Y | |
46 B | |
0 K | |
KIT-Rot | |
25 C | |
162 R | |
100 M | |
34 G | |
100 Y | |
35 B | |
0 K | |
KIT-Lila | |
25 C | |
163 R | |
100 M | |
16 G | |
0 Y | |
124 B | |
0 K | |
KIT-Cyan-Blau | |
90 C | |
35 R | |
5 M | |
161 G | |
0 Y | |
224 B | |
0 K | |
"; | |
struct Color | |
{ | |
string name; | |
size_t R, G, B; | |
size_t C, M, Y, K; | |
} | |
Color parseColor(string[] data) | |
{ | |
Color result; | |
result.name = data[0].strip(); | |
result.C = parse!size_t(data[1]); | |
assert(data[1].canFind('C')); | |
result.R = parse!size_t(data[2]); | |
assert(data[2].canFind('R')); | |
result.M = parse!size_t(data[3]); | |
assert(data[3].canFind('M')); | |
result.G = parse!size_t(data[4]); | |
assert(data[4].canFind('G')); | |
result.Y = parse!size_t(data[5]); | |
assert(data[5].canFind('Y')); | |
result.B = parse!size_t(data[6]); | |
assert(data[6].canFind('B')); | |
result.K = parse!size_t(data[7]); | |
assert(data[7].canFind('K')); | |
return result; | |
} | |
void printOriginal(Color c) | |
{ | |
writeln(c.name); | |
writefln("original RGB: %s, %s, %s CMYK: %s, %s, %s, %s", c.R, c.G, c.B, c.C, c.M, c.Y, c.K); | |
writeln(); | |
} | |
void printLatex(Color c) | |
{ | |
string name = c.name.replace("ü", "ue").replace(" exklusiv", "").replace("-", ""); | |
writefln("\\definecolor{%s}{rgb/cmyk}{%s,%s,%s/%s,%s,%s,%s}", name, | |
c.R/255.0, c.G/255.0, c.B/255.0, c.C/100.0, c.M/100.0, c.Y/100.0, c.K/100.0); | |
} | |
void printFull(Color c) | |
{ | |
auto lightenRGB(size_t value, double factor) | |
{ | |
// white is 255,255,255 | |
// Rounding in KIT document is inconsistent | |
return cast(size_t)round(value * factor + 255 * (1-factor)); | |
} | |
writeln(c.name); | |
writeln("---------------------------------------"); | |
auto lighten = [1, 0.7, 0.5, 0.3, 0.15]; | |
foreach(per; lighten) | |
{ | |
writefln("%s%%", per*100); | |
writefln("CMYK: %s, %s, %s, %s", c.C*per, c.M*per, c.Y*per, c.K*per); | |
auto c2 = c; | |
c2.R = lightenRGB(c2.R, per); | |
c2.G = lightenRGB(c2.G, per); | |
c2.B = lightenRGB(c2.B, per); | |
writefln("RGB: %s, %s, %s\t#%.2x%.2x%.2x", c2.R, c2.G, c2.B, c2.R, c2.G, c2.B); | |
writeln("---------------------------------------"); | |
} | |
writeln(); | |
} | |
void main() | |
{ | |
auto colors = input.lineSplitter() | |
.chunks(8) | |
.map!(x => parseColor(x.array)) | |
.array; | |
colors.each!printOriginal; | |
writeln("\\usepackage{xcolor}"); | |
writeln("% Lightened versions are 100%, 70%, 50%, 30% 15%"); | |
writeln("% Use KITGruen!15 for 15% green"); | |
colors.each!printLatex; | |
writeln(); | |
colors.each!printFull; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment