summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/metapost/metapost-colorbrewer/make_mp_colorbrewer.py
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/metapost/metapost-colorbrewer/make_mp_colorbrewer.py')
-rw-r--r--Master/texmf-dist/doc/metapost/metapost-colorbrewer/make_mp_colorbrewer.py148
1 files changed, 148 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/metapost/metapost-colorbrewer/make_mp_colorbrewer.py b/Master/texmf-dist/doc/metapost/metapost-colorbrewer/make_mp_colorbrewer.py
new file mode 100644
index 00000000000..86b304c2b6d
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metapost-colorbrewer/make_mp_colorbrewer.py
@@ -0,0 +1,148 @@
+#! /usr/bin/env python3
+from __future__ import print_function, division
+
+import argparse
+import csv
+import os.path
+import re
+import textwrap
+
+def get_rid_of_numbers(ss):
+ ss = ss.replace('1', 'One')
+ ss = ss.replace('2', 'Two')
+ ss = ss.replace('3', 'Three')
+ ss = ss.replace('4', 'Four')
+ ss = ss.replace('5', 'Five')
+ ss = ss.replace('6', 'Six')
+ ss = ss.replace('7', 'Seven')
+ ss = ss.replace('8', 'Eight')
+ ss = ss.replace('9', 'Nine')
+ return ss
+
+def get_cmyk_values():
+ csv_file_name = os.path.join(args.colorbrewer, 'cb.csv')
+ with open(csv_file_name) as csv_file:
+ cynthia = csv.DictReader(csv_file)
+
+ # ColorName,NumOfColors,Type,CritVal,ColorNum,ColorLetter,C,M,Y,K,SchemeType
+ colors = list()
+ ranges = list()
+
+ for row in cynthia:
+
+ if row['ColorName']:
+ this_range = get_rid_of_numbers(row['ColorName'])
+ if this_range not in ranges:
+ ranges.append(this_range)
+
+ if row['NumOfColors']:
+ this_size = row['NumOfColors']
+
+ colors.append('{}[{}][{}] = 1/100 ({},{},{},{});'.format(
+ this_range, this_size, row['ColorNum'], row['C'], row['M'], row['Y'], row['K'])
+ )
+
+ return colors, ranges
+
+def is_int(n):
+ "Is this a dagger?"
+ try:
+ a = int(n)
+ except:
+ return False
+ return True
+
+def get_rgb_values():
+ js_file_name = os.path.join(args.colorbrewer, 'colorbrewer_schemes.js')
+
+ colors = list()
+ ranges = list()
+ with open(js_file_name) as js:
+ for line in js:
+ m = re.match(r'^([A-Za-z0-9]+):\s*({.*})\s*,?$', line)
+ if m is None:
+ continue
+ this_range = get_rid_of_numbers(m.group(1))
+ ranges.append(this_range)
+ details = eval(m.group(2))
+
+ for k in details:
+ if is_int(k):
+ for i, v in enumerate(details[k]):
+ if v.startswith('rgb('):
+ colors.append('{}[{}][{}] = 1/256 {};'.format(this_range, k, i+1, v[3:]))
+
+ return colors, ranges
+
+
+if __name__ == "__main__":
+ parser = argparse.ArgumentParser()
+ parser.add_argument("-c", "--colorbrewer",
+ help="Directory for local copy of the Axel Maps Colorbrewer project")
+ parser.add_argument("-r", "--rgb", action="store_true", help="Create RGB colors, not CMYK")
+
+ args = parser.parse_args()
+
+ if args.rgb:
+ colors, ranges = get_rgb_values()
+ else:
+ colors, ranges = get_cmyk_values()
+
+ print('''% This package includes color specifications and designs
+% developed by Cynthia Brewer (http://colorbrewer.org/).
+% Metapost version adapted from cb.csv by Toby Thurston.
+% Please see license at http://colorbrewer.org/export/LICENSE.txt
+
+% This package defines all the colours from colorbrewer.org
+% Visit the site to get an idea what you can do with them
+% Each colour set is defined as a MP variable with two suffixes
+% The first suffix defines the number of colours in the set,
+% the second one defines the index of this colour in the set
+% starting at 1, so this loop shows you all the shades of red
+% in the six colour "Reds" set.
+%
+% for i=1 upto 6:
+% fill unitsquare scaled 1cm shifted (i*cm,0) withcolor Reds[6][i];
+% endfor
+%
+% Six of the qualititative colour sets have numbers in their names at colorbrewer.org
+% MP doesn't allow this, so they are renamed here as follows:
+%
+% Dark2 is called DarkTwo
+% Pastel1 is called PastelOne
+% Pastel2 is called PastelTwo
+% Set1 is called SetOne
+% Set2 is called SetTwo
+% Set3 is called SetThree
+%
+% No sequence has fewer than three colours.
+% All of the sequences are defined for upto eight colours.
+% The sequential sequences are defined for 3 to 9 colours each.
+% The divergent sequences are defined for 3 to 11 colours each.
+% A few of the qualitative sequences have upto 12 colours.
+%
+% In general try not to use too many colours in one chart.
+% The sequences were designed for cartography and may not suit all applications.
+
+message "metapost-colorbrewer - Copyright (C) 2018 Toby Thurston. This program comes with ABSOLUTELY NO WARRANTY. " &
+"This is free software, and you are welcome to redistribute it under certain conditions; read the LICENCE file for details. " &
+"The colorbrewer colours are copyright (C) Cynthia Brewer, Mark Harrower and The Pennsylvania State University. " &
+"See http://colorbrewer2.org";
+
+ ''')
+
+
+ if args.rgb:
+ out = "color "
+ else:
+ out = "cmykcolor "
+
+ out = out + ', '.join('{}[][]'.format(x) for x in sorted(ranges)) + ';'
+
+ rapper = textwrap.TextWrapper(subsequent_indent = ' ', width = 72)
+ print('\n'.join(rapper.wrap(out)))
+
+ print("")
+
+ for c in sorted(colors):
+ print(c)