%%
%% ----------------------------------------------------------------
%% Copyright (C) 2023-2024 by Simon Pfahler <simon.pfahler at ur dot de>
%% ----------------------------------------------------------------
%%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{colorblind}[2024/05/12 Easy colorblind-safe typesetting]

\RequirePackage{xcolor}
\RequirePackage{ifthen}
\RequirePackage{tikz}
\usetikzlibrary{math}
\RequirePackage{pgfplots}
\pgfplotsset{compat=1.18}

\DeclareOption{Tol}{
%>>> Color schemes by Paul Tol, source: https://personal.sron.nl/~pault
%
%>>> Qualitative color schemes
%
% Bright Qualitative color scheme
\providecolorset{RGB}{T-Q-B}{}{%
    1,68,119,170;%
    2,102,204,238;%
    3,34,136,51;%
    4,204,187,68;%
    5,238,102,119;%
    6,170,51,119;%
    0,187,187,187%
}
%
% High-contrast qualitative color scheme
\providecolorset{RGB}{T-Q-HC}{}{%
    1,255,255,255;%
    2,221,170,51;%
    3,187,85,102;%
    4,0,68,136;%
    0,0,0,0%
}
%
% Vibrant qualitative color scheme
\providecolorset{RGB}{T-Q-V}{}{%
    1,0,119,187;%
    2,51,187,238;%
    3,0,153,136;%
    4,238,119,51;%
    5,204,51,17;%
    6,238,51,119;%
    0,187,187,187%
}
%
% Muted qualitative color scheme
\providecolorset{RGB}{T-Q-M}{}{%
    1,51,34,136;%
    2,136,204,238;%
    3,68,170,153;%
    4,153,153,51;%
    5,221,204,119;%
    6,204,102,119;%
    7,136,34,85;%
    8,170,68,153;%
    0,221,221,221%
}
%
% Medium-contrast qualitative color scheme
\providecolorset{RGB}{T-Q-MC}{}{%
    1,255,255,255;%
    2,238,204,102;%
    3,238,153,170;%
    4,102,153,204;%
    5,153,119,0;%
    6,153,68,85;%
    7,0,68,136;%
    0,0,0,0%
}
%
% Pale qualitative color scheme, for highlighting
\providecolorset{RGB}{T-Q-PH}{}{%
    1,187,204,238;%
    2,204,238,255;%
    3,204,221,170;%
    4,238,238,187;%
    5,255,204,204;%
    0,221,221,221%
}
%
% Dark qualitative color scheme, for text colors
\providecolorset{RGB}{T-Q-DT}{}{%
    1,34,34,85;%
    2,34,85,85;%
    3,34,85,34;%
    4,102,102,51;%
    5,102,51,51;%
    0,85,85,85%
}
%
% Light qualitative color scheme
\providecolorset{RGB}{T-Q-L}{}{%
    1,119,170,221;%
    2,153,221,255;%
    3,68,187,153;%
    4,187,204,51;%
    5,170,170,0;%
    6,238,221,136;%
    7,238,136,102;%
    8,255,170,187;%
    0,221,221,221%
}
%
%<<< Qualitative color schemes
%
%>>> Diverging color schemes
%
% Sunset diverging color scheme
\providecolorset{RGB}{T-D-S}{}{%
    1,54,75,154;%
    2,74,123,183;%
    3,110,166,205;%
    4,152,202,225;%
    5,194,228,239;%
    6,234,236,204;%
    7,254,218,139;%
    8,253,179,102;%
    9,246,126,75;%
    10,221,61,45;%
    11,165,0,38;%
    0,255,255,255%
}
\pgfplotsset{
    colormap={T-D-S}{color(0)=(T-D-S1) color(1)=(T-D-S2) color(2)=(T-D-S3) color(3)=(T-D-S4) color(4)=(T-D-S5) color(5)=(T-D-S6) color(6)=(T-D-S7) color(7)=(T-D-S8) color(8)=(T-D-S9) color(9)=(T-D-S10) color(10)=(T-D-S11)}
}
%
% Nightfall diverging color scheme
\providecolorset{RGB}{T-D-N}{}{%
    1,18,90,86;%
    2,0,118,123;%
    3,35,143,157;%
    4,66,167,198;%
    5,96,188,233;%
    6,157,204,239;%
    7,198,219,237;%
    8,222,230,231;%
    9,236,234,218;%
    10,240,230,178;%
    11,249,213,118;%
    12,255,185,84;%
    13,253,154,68;%
    14,245,118,52;%
    15,233,76,31;%
    16,209,24,7;%
    17,160,24,19;%
    0,255,255,255%
}
\pgfplotsset{
    colormap={T-D-N}{color(0)=(T-D-N1) color(1)=(T-D-N2) color(2)=(T-D-N3) color(3)=(T-D-N4) color(4)=(T-D-N5) color(5)=(T-D-N6) color(6)=(T-D-N7) color(7)=(T-D-N8) color(8)=(T-D-N9) color(9)=(T-D-N10) color(10)=(T-D-N11) color(11)=(T-D-N12) color(12)=(T-D-N13) color(13)=(T-D-N14) color(14)=(T-D-N15) color(15)=(T-D-N16) color(16)=(T-D-N17)}
}
%
% BuRd diverging color scheme
\providecolorset{RGB}{T-D-BR}{}{%
    1,32,102,172;%
    2,67,147,195;%
    3,146,197,222;%
    4,209,229,240;%
    5,247,247,247;%
    6,253,219,199;%
    7,244,165,130;%
    8,214,96,77;%
    9,178,24,43;%
    0,255,238,153%
}
\pgfplotsset{
    colormap={T-D-BR}{color(0)=(T-D-BR1) color(1)=(T-D-BR2) color(2)=(T-D-BR3) color(3)=(T-D-BR4) color(4)=(T-D-BR5) color(5)=(T-D-BR6) color(6)=(T-D-BR7) color(7)=(T-D-BR8) color(8)=(T-D-BR9)}
}
%
% PRGn diverging color scheme
\providecolorset{RGB}{T-D-PG}{}{%
    1,118,42,131;%
    2,153,112,171;%
    3,194,165,207;%
    4,231,212,232;%
    5,247,247,247;%
    6,217,240,211;%
    7,172,211,158;%
    8,90,174,97;%
    9,27,120,55;%
    0,255,238,153%
}
\pgfplotsset{
    colormap={T-D-PG}{color(0)=(T-D-PG1) color(1)=(T-D-PG2) color(2)=(T-D-PG3) color(3)=(T-D-PG4) color(4)=(T-D-PG5) color(5)=(T-D-PG6) color(6)=(T-D-PG7) color(7)=(T-D-PG8) color(8)=(T-D-PG9)}
}
%
%<<< Diverging color schemes
%
%>>> Sequential color schemes
%
% YlOrBr sequential color scheme
\providecolorset{RGB}{T-S-YOB}{}{%
    1,255,255,229;%
    2,255,247,188;%
    3,254,227,145;%
    4,254,196,79;%
    5,251,154,41;%
    6,236,112,20;%
    7,204,76,2;%
    8,153,52,4;%
    9,102,37,6;%
    0,136,136,136%
}
\pgfplotsset{
    colormap={T-S-YOB}{color(0)=(T-S-YOB1) color(1)=(T-S-YOB2) color(2)=(T-S-YOB3) color(3)=(T-S-YOB4) color(4)=(T-S-YOB5) color(5)=(T-S-YOB6) color(6)=(T-S-YOB7) color(7)=(T-S-YOB8) color(8)=(T-S-YOB9)}
}
%
% Iridescent sequential color scheme
\providecolorset{RGB}{T-S-IR}{}{%
    1,254,251,233;%
    2,252,247,213;%
    3,245,243,193;%
    4,234,240,181;%
    5,221,236,191;%
    6,208,231,202;%
    7,194,227,210;%
    8,181,221,216;%
    9,168,216,220;%
    10,155,210,225;%
    11,141,203,228;%
    12,129,196,231;%
    13,123,188,231;%
    14,126,178,228;%
    15,136,165,221;%
    16,147,152,210;%
    17,155,138,196;%
    18,157,125,178;%
    19,154,112,158;%
    20,144,99,136;%
    21,128,87,112;%
    22,104,73,87;%
    23,70,53,58;%
    0,153,153,153%
}
\pgfplotsset{
    colormap={T-S-IR}{color(0)=(T-S-IR1) color(1)=(T-S-IR2) color(2)=(T-S-IR3) color(3)=(T-S-IR4) color(4)=(T-S-IR5) color(5)=(T-S-IR6) color(6)=(T-S-IR7) color(7)=(T-S-IR8) color(8)=(T-S-IR9) color(9)=(T-S-IR10) color(10)=(T-S-IR11) color(11)=(T-S-IR12) color(12)=(T-S-IR13) color(13)=(T-S-IR14) color(14)=(T-S-IR15) color(15)=(T-S-IR16) color(16)=(T-S-IR17) color(17)=(T-S-IR18) color(18)=(T-S-IR19) color(19)=(T-S-IR20) color(20)=(T-S-IR21) color(21)=(T-S-IR22) color(22)=(T-S-IR23)}
}
%
% Incandescent sequential color scheme
\providecolorset{RGB}{T-S-IN}{}{%
    1,206,255,255;%
    2,198,247,214;%
    3,162,244,155;%
    4,187,228,83;%
    5,213,206,4;%
    6,231,181,3;%
    7,241,153,3;%
    8,246,121,11;%
    9,249,73,2;%
    10,228,5,21;%
    11,168,0,3;%
    0,136,136,136%
}
\pgfplotsset{
    colormap={T-S-IN}{color(0)=(T-S-IN1) color(1)=(T-S-IN2) color(2)=(T-S-IN3) color(3)=(T-S-IN4) color(4)=(T-S-IN5) color(5)=(T-S-IN6) color(6)=(T-S-IN7) color(7)=(T-S-IN8) color(8)=(T-S-IN9) color(9)=(T-S-IN10) color(10)=(T-S-IN11)}
}
%
% Discrete rainbow color scheme
\providecolorset{RGB}{T-S-DR}{}{%
    1,209,187,215;%
    2,174,118,163;%
    3,136,46,114;%
    4,25,101,176;%
    5,82,137,199;%
    6,123,175,222;%
    7,78,178,101;%
    8,144,201,135;%
    9,202,224,171;%
    10,247,240,86;%
    11,246,193,65;%
    12,241,147,45;%
    13,232,96,28;%
    14,220,5,12;%
    0,119,119,119%
}
%
\providecolorset{RGB}{T-S-SR}{}{%
    1,232,236,251;%
    2,221,216,239;%
    3,209,193,225;%
    4,195,168,209;%
    5,181,143,194;%
    6,167,120,180;%
    7,155,98,167;%
    8,140,78,153;%
    9,111,76,155;%
    10,96,89,169;%
    11,85,104,184;%
    12,78,121,197;%
    13,77,138,198;%
    14,78,150,188;%
    15,84,158,179;%
    16,89,165,169;%
    17,96,171,158;%
    18,105,177,144;%
    19,119,183,125;%
    20,140,188,104;%
    21,166,190,84;%
    22,190,188,72;%
    23,209,181,65;%
    24,221,170,60;%
    25,228,156,57;%
    26,231,140,53;%
    27,230,121,50;%
    28,228,99,45;%
    29,223,72,40;%
    30,218,34,34;%
    31,184,34,30;%
    32,149,33,27;%
    33,114,30,23;%
    34,82,26,19;%
    0,102,102,102%
}
\pgfplotsset{
    colormap={T-S-SR}{color(0)=(T-S-SR1) color(1)=(T-S-SR2) color(2)=(T-S-SR3) color(3)=(T-S-SR4) color(4)=(T-S-SR5) color(5)=(T-S-SR6) color(6)=(T-S-SR7) color(7)=(T-S-SR8) color(8)=(T-S-SR9) color(9)=(T-S-SR10) color(10)=(T-S-SR11) color(11)=(T-S-SR12) color(12)=(T-S-SR13) color(13)=(T-S-SR14) color(14)=(T-S-SR15) color(15)=(T-S-SR16) color(16)=(T-S-SR17) color(17)=(T-S-SR18) color(18)=(T-S-SR19) color(19)=(T-S-SR20) color(20)=(T-S-SR21) color(21)=(T-S-SR22) color(22)=(T-S-SR23) color(23)=(T-S-SR24) color(24)=(T-S-SR25) color(25)=(T-S-SR26) color(26)=(T-S-SR27) color(27)=(T-S-SR28) color(28)=(T-S-SR29) color(29)=(T-S-SR30) color(30)=(T-S-SR31) color(31)=(T-S-SR32) color(32)=(T-S-SR33) color(33)=(T-S-SR34)}
}
%
%<<< Sequential color schemes
%
%<<< Color schemes by Paul Tol, source: https://personal.sron.nl/~pault
}

\DeclareOption{OkabeIto}{
%>>> Qualitative color scheme by Okabe and Ito
\providecolorset{RGB}{OI}{}{%
    1,230,159,0;%
    2,86,180,233;%
    3,0,158,115;%
    4,240,228,66;%
    5,0,114,178;%
    6,213,94,0;%
    7,204,121,167;%
    0,0,0,0%
}
%<<< Qualitative color scheme by Okabe and Ito
}

\DeclareOption*{\PackageWarning{colorblind}{Unknown '\CurrentOption'}}
\ProcessOptions\relax

%>>> Function to print a discrete color scheme
\newcommand\@drawSchemeRadius{0.7cm}
\newcommand\@drawSchemeOffset{1cm}
\newcounter{ColorNum}
\newcommand\drawScheme[1]{%
    \tikz{%
        \node[inner sep=1, fill=red] at (-1.2*\@drawSchemeRadius,2.3*\@drawSchemeRadius) {R};
        \node[inner sep=1, fill=green] at (-1.2*\@drawSchemeRadius, 1.8*\@drawSchemeRadius) {G};
        \node[inner sep=1, fill=blue] at (-1.2*\@drawSchemeRadius,1.3*\@drawSchemeRadius) {B};
        \setcounter{ColorNum}{1}%
        \whiledo{%
            \@ifundefined{\string\color@#1\theColorNum}{\boolean{false}}{\boolean{true}}%
        }{%
            \extractcolorspecs{#1\the\value{ColorNum}}{\modelspec}{\colorspec}%
            \tikzmath{
                int \r, \g, \b;
                \r = round(255*array({\colorspec},0));
                \g = round(255*array({\colorspec},1));
                \b = round(255*array({\colorspec},2));
            }%
            \node at (\value{ColorNum}*\@drawSchemeOffset-\@drawSchemeOffset,2.3*\@drawSchemeRadius) {\r};
            \node at (\value{ColorNum}*\@drawSchemeOffset-\@drawSchemeOffset,1.8*\@drawSchemeRadius) {\g};
            \node at (\value{ColorNum}*\@drawSchemeOffset-\@drawSchemeOffset,1.3*\@drawSchemeRadius) {\b};
            \draw[fill=#1\the\value{ColorNum}] (\value{ColorNum}*\@drawSchemeOffset-\@drawSchemeOffset,0) circle (\@drawSchemeRadius);%
            \node[rotate=25, anchor=north east] at (\value{ColorNum}*\@drawSchemeOffset-\@drawSchemeOffset,-1*\@drawSchemeRadius) {#1\theColorNum};%
            \stepcounter{ColorNum}%
        }%
        \extractcolorspecs{#10}{\modelspec}{\colorspec}%
        \tikzmath{
            int \r, \g, \b;
            \r = round(255*array({\colorspec},0));
            \g = round(255*array({\colorspec},1));
            \b = round(255*array({\colorspec},2));
        }%
        \node at (\value{ColorNum}*\@drawSchemeOffset-0.5*\@drawSchemeOffset,2.3*\@drawSchemeRadius) {\r};
        \node at (\value{ColorNum}*\@drawSchemeOffset-0.5*\@drawSchemeOffset,1.8*\@drawSchemeRadius) {\g};
        \node at (\value{ColorNum}*\@drawSchemeOffset-0.5*\@drawSchemeOffset,1.3*\@drawSchemeRadius) {\b};
        \draw[fill=#10] (\value{ColorNum}*\@drawSchemeOffset-0.5*\@drawSchemeOffset,0) circle(\@drawSchemeRadius);%
        \node[rotate=25, anchor=north east] at (\value{ColorNum}*\@drawSchemeOffset-0.5*\@drawSchemeOffset, -1*\@drawSchemeRadius) {#10};%
    }%
}
%<<< Function to print a discrete color scheme

%>>> Function to print a continuous color scheme
\newcommand\drawSchemeC[2][0.5\textwidth]{%
    \tikz{%
        \pgfplotscolorbardrawstandalone[colormap name=#2, colorbar horizontal, colorbar style={width=#1, ticks=none}]%
        \draw[fill=#20] (#1+0.5*\@drawSchemeOffset,-0.55cm) circle(0.5*\@drawSchemeRadius);%
    }%
}
%<<< Function to print a continuous color scheme

\endinput
