% -*- coding: utf-8 -*-
%
% Some font hacks for my Sphinx PDF documents
%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{my-doc-fonts}[%
  2026/05/15 v0.2.1 (Franz Glasner) Fonts for Sphinx generated PDFs]
\RequirePackage{xkeyval}
\RequirePackage{fontspec}
\IfFileExists{xcolor.sty}{%
% Should Sphinx load xcolor with its dvipsnames and svgnames options?
    \RequirePackage{xcolor}
}{%
    \RequirePackage{color}
}

\newif\if@mdf@mono@dejavusansmono\@mdf@mono@dejavusansmonofalse
\newif\if@mdf@mono@sscode\@mdf@mono@sscodefalse
\newif\if@mdf@mono@inconsolata\@mdf@mono@inconsolatafalse

\newif\if@mdf@WithDejaVuSansMono
\newif\if@mdf@WithIBMPlex
\newif\if@mdf@WithIBMPlexDejaVuSansMono
\newif\if@mdf@WithAdobeSourcePro
\newif\if@mdf@WithSpectral
\newif\if@mdf@WithCharter

% A key compatible with options processing as option "fonts" but choices.
\define@choicekey*{my-doc-fonts.sty}{fonts}[\val\nr]{%
  dejavusansmono,
  plex, ibmplex,
  plex-dejavusansmono,
  adobesource, adobesourcepro,
  spectral,
  charter}{%
  \@mdf@WithDejaVuSansMonofalse
  \@mdf@WithIBMPlexfalse
  \@mdf@WithIBMPlexDejaVuSansMonofalse
  \@mdf@WithAdobeSourceProfalse
  \@mdf@WithSpectralfalse
  \@mdf@WithCharterfalse
  \ifcase\nr\relax
    \@mdf@WithDejaVuSansMonotrue
  \or
    \@mdf@WithIBMPlextrue
  \or
    \@mdf@WithIBMPlextrue
  \or
    \@mdf@WithIBMPlexDejaVuSansMonotrue
  \or
    \@mdf@WithAdobeSourceProtrue
  \or
    \@mdf@WithAdobeSourceProtrue
  \or
   \@mdf@WithSpectraltrue
  \or
    \@mdf@WithChartertrue
  \fi
  % Not used for now : store the normalized option value (global and expanded)
  \xdef\@mdf@fonts{\val}
}

%
% By default use the safe option dejavusansmono because is contains
% all characters without any hacks.
%
\ExecuteOptionsX{fonts=dejavusansmono}
\ProcessOptionsX\relax

\if@mdf@WithDejaVuSansMono
  % default but with DejaVu Sans Mono as monospaced font
  %\RequirePackage[DefaultFeatures={Scale=0.92},mono=false]{plex-otf}
  %\RequirePackage[mono=true,serif=false,sans=false,math=false]{dejavu-otf}  % all symbols are available
  \@mdf@mono@dejavusansmonotrue
\fi
%
%
\if@mdf@WithIBMPlex
  \RequirePackage{newunicodechar}
  \RequirePackage[DefaultFeatures={Scale=0.92}]{plex-otf}
  % Dont keep all default font features from plex-otf
  \defaultfontfeatures{}
  \newfontfamily\DejaVuSansMono{DejaVu Sans Mono}[%
    UprightFont = *,
    BoldFont = * Bold,
    ItalicFont = * Oblique,
    BoldItalicFont = * Bold Oblique,
    Scale=MatchLowercase,
    Ligatures=TeX,
  ]
  \newunicodechar{▷}{{\DejaVuSansMono ▷}}% U+25B7
  \newunicodechar{∶}{{\DejaVuSansMono ∶}}% U+2236
  \newunicodechar{◆}{{\DejaVuSansMono ◆}}% U+25C6
  \newunicodechar{▪}{{\DejaVuSansMono ▪}}% U+25AA
  \newunicodechar{⟵}{{\DejaVuSansMono ⟵}}% U+27F5
  \newunicodechar{⟶}{{\DejaVuSansMono ⟶}}% U+27F6
  \newunicodechar{⟷}{{\DejaVuSansMono ⟷}}% U+27F7
  \newunicodechar{⇒}{{\DejaVuSansMono ⇒}}% U+21D2
  \newunicodechar{⇔}{{\DejaVuSansMono ⇔}}% U+21D4
  \newunicodechar{≟}{{\DejaVuSansMono ≟}}% U+225F
  \newunicodechar{∈}{{\DejaVuSansMono ∈}}% U+2208
  \newunicodechar{∌}{{\DejaVuSansMono ∌}}% U+220C
  %\newunicodechar{␣}{{\DejaVuSansMono ␣}}% U+2423  Missing!
  %\newunicodechar{^^^^2423}{{\DejaVuSansMono^^^^2423}}% U+2423
  %\newunicodechar{␣}{\textvisiblespace}% U+2423
  %\catcode`^^^^2423\active\protected\def^^^^2423{\textvisiblespace}

  \PassOptionsToPackage{%
    verbatimvisiblespace={\textcolor{red}{{\DejaVuSansMono^^^^2423}}},%
    verbatimcontinued={\textcolor{red}{{\DejaVuSansMono^^^^21aa}}}}%
    {sphinx}
\fi
\if@mdf@WithIBMPlexDejaVuSansMono
  \RequirePackage[DefaultFeatures={Scale=0.92},mono=false]{plex-otf}
  \@mdf@mono@dejavusansmonotrue
\fi
\if@mdf@WithAdobeSourcePro
  \defaultfontfeatures{Ligatures=TeX,Numbers={Lining,Tabular}}
  \setmainfont{Source Serif Pro}[
    UprightFont = *,
    BoldFont = * Bold,
    ItalicFont = * Italic,
    BoldItalicFont = * Bold Italic,
  ]
  \setsansfont{Source Sans Pro}[
    UprightFont = *,
    BoldFont = * Bold,
    ItalicFont = * Italic,
    BoldItalicFont = * Bold Italic,
  ]
  \@mdf@mono@sscodetrue
\fi
\if@mdf@WithSpectral
  \defaultfontfeatures{Ligatures=TeX,Numbers={Lining,Tabular}}
  \setmainfont{Spectral}[
    UprightFont = * Regular,
    BoldFont = * Bold,
    ItalicFont = * Italic,
    BoldItalicFont = * Bold Italic,
  ]
  \setsansfont{Source Sans Pro}[
    UprightFont = *,
    BoldFont = * Bold,
    ItalicFont = * Italic,
    BoldItalicFont = * Bold Italic,
  ]
  \@mdf@mono@sscodetrue
\fi
\if@mdf@WithCharter
  \defaultfontfeatures{Ligatures=TeX,Numbers={Lining,Tabular}}
  \setmainfont{XCharter}
  \setsansfont{Lato}[
    UprightFont = * Regular,
    BoldFont = * Bold,
    ItalicFont = * Italic,
    BoldItalicFont = * Bold Italic,
    Scale = MatchLowercase,
  ]
  \@mdf@mono@inconsolatatrue
\fi

\defaultfontfeatures{}

\if@mdf@mono@dejavusansmono
  % automatically applied with Scale=MatchLowercase,...
  \RequirePackage[mono=true,serif=false,sans=false,math=false]{dejavu-otf}  % all symbols are available
\fi

\if@mdf@mono@sscode
  \RequirePackage{newunicodechar}
  \defaultfontfeatures{Ligatures=TeX,Numbers={Lining,Tabular},Scale=MatchLowercase}
  \setmonofont{Source Code Pro}[
    UprightFont = *,
    BoldFont = * Bold,
    ItalicFont = * Italic,
    BoldItalicFont = * Bold Italic,
  ]
  \defaultfontfeatures{}
  \newfontfamily\DejaVuSansMono{DejaVu Sans Mono}[%
    UprightFont = *,
    BoldFont = * Bold,
    ItalicFont = * Oblique,
    BoldItalicFont = * Bold Oblique,
  ]
  \newunicodechar{∶}{{\DejaVuSansMono ∶}}% U+2236
  \newunicodechar{⟵}{{\DejaVuSansMono ⟵}}% U+27F5
  \newunicodechar{⟶}{{\DejaVuSansMono ⟶}}% U+27F6
  \newunicodechar{⟷}{{\DejaVuSansMono ⟷}}% U+27F7
  \newunicodechar{⇒}{{\DejaVuSansMono ⇒}}% U+21D2
  \newunicodechar{⇔}{{\DejaVuSansMono ⇔}}% U+21D4
  \newunicodechar{≟}{{\DejaVuSansMono ≟}}% U+225F
  \newunicodechar{∈}{{\DejaVuSansMono ∈}}% U+2208
  \newunicodechar{∌}{{\DejaVuSansMono ∌}}% U+220C
  \PassOptionsToPackage{%
    verbatimvisiblespace={\textcolor{red}{{\DejaVuSansMono^^^^2423}}},%
    verbatimcontinued={\textcolor{red}{{\DejaVuSansMono^^^^21aa}}}}%
    {sphinx}
\fi

\if@mdf@mono@inconsolata
  \RequirePackage{newunicodechar}
  \defaultfontfeatures{Ligatures=TeX,Numbers={Lining,Tabular},Scale=MatchLowercase}
  \setmonofont{Inconsolata LGC Nerd Font Mono}[%
    UprightFont = *,
    BoldFont = * Bold,
    ItalicFont = * Italic,
    BoldItalicFont = * Bold Italic,
  ]
  \defaultfontfeatures{}
  \newfontfamily\DejaVuSansMono{DejaVu Sans Mono}[%
    UprightFont = *,
    BoldFont = * Bold,
    ItalicFont = * Oblique,
    BoldItalicFont = * Bold Oblique,
  ]
  \newunicodechar{∶}{{\DejaVuSansMono ∶}}% U+2236
  \newunicodechar{⟵}{{\DejaVuSansMono ⟵}}% U+27F5
  \newunicodechar{⟶}{{\DejaVuSansMono ⟶}}% U+27F6
  \newunicodechar{⟷}{{\DejaVuSansMono ⟷}}% U+27F7
  \newunicodechar{≟}{{\DejaVuSansMono ≟}}% U+225F
  \newunicodechar{∈}{{\DejaVuSansMono ∈}}% U+2208
  \newunicodechar{∌}{{\DejaVuSansMono ∌}}% U+220C
\fi

\defaultfontfeatures{}

\def\testmdf{
  Normalized: \@mdf@fonts\newline
  % To be used like
  Normalized: \ifx\@mdf@fonts{adobesourcepro} HUHU\else HAHA\fi\newline
}

\endinput
