\NeedsTeXFormat{LaTeX2e}
\ProvidesExplPackage{PrimeTeX/packages/Fonts}{2025-09-18}{1.0}{
	Font definitions.
}

% Loading math fonts takes a long time, so skip it in draft mode.
% \bool_if:NF \g_draft_bool {
	% \RequirePackage{notomath}
% }

\NewDocumentCommand{\fontpath}{}{./PrimeTeX/fonts}

% \def\sbfamily{}

% Main font: Roboto Serif (Light), with symbols merged in from, in order of
% priority, Noto Serif, Noto Emoji, Noto Sans Symbols, and Noto
% Sans Symbols 2.
\setmainfont{RobotoSerif}[
	Path			= {\fontpath/},
	Extension		= .ttf,
	UprightFont		= *-Light,
	BoldFont		= *-SemiBold,
	ItalicFont		= *-LightItalic,
	BoldItalicFont	= *-SemiBoldItalic,
	SlantedFont		= NotoSerif-Light,
	BoldSlantedFont	= NotoSerif-SemiBold,
]

% % Sans serif font: Roboto (Medium).
\setsansfont{Roboto}[
	Path			= {\fontpath/},
	Extension		= .ttf,
	UprightFont		= *-Medium,
	BoldFont		= *-Bold,
	ItalicFont		= *-MediumItalic,
	BoldItalicFont	= *-BoldItalic,
	SlantedFont		= NotoSans-Medium,
	BoldSlantedFont	= NotoSans-Bold,
]

% Monospace font: Roboto Mono
\setmonofont{RobotoMono}[
	Path			= {\fontpath/},
	Extension		= .ttf,
	UprightFont		= *-Regular,
	BoldFont		= *-Bold,
	ItalicFont		= *-Italic,
	BoldItalicFont	= *-BoldItalic,
]

% Headings & Titles font: Roboto Slab (Semibold).
\newfontfamily{\sbfamily}{RobotoSlab}[
	Path			= {\fontpath/},
	Extension		= .ttf,
	UprightFont		= *-SemiBold,
	BoldFont		= *-Black,
	% Roboto Slab doesn't have any italic form, so use
	% the Roboto Serif version.
	ItalicFont		= RobotoSerif-SemiBoldItalic,
	BoldItalicFont	= RobotoSerif-ExtraBoldItalic,
	SlantedFont		= NotoSerif-SemiBold,
	BoldSlantedFont	= NotoSerif-ExtraBold,
]

% Sans serif font with more symbols: Noto Sans
% \newfontfamily{\notofamily}{NotoSans}[
% 	Path			= {\fontpath/NotoSans/},
% 	Extension		= .ttf,
% 	UprightFont		= *-Medium,
% 	BoldFont		= *-Bold,
% ]

% Emoji font: Noto Emoji
% \newfontfamily{\emojifamily}{NotoEmoji}[
% 	Path			= {\fontpath/},
% 	Extension		= .ttf,
% 	UprightFont		= NotoEmoji/NotoEmoji-Regular,
% 	BoldFont		= NotoEmoji/NotoEmoji-Bold,
% 	ItalicFont		= NotoEmoji/NotoEmoji-Light,
% 	BoldItalicFont	= NotoEmoji/NotoEmoji-SemiBold,
% ]

% \newfontfamily{\mathfamily}{NotoSerif}[
% 	Path			= {\fontpath/NotoSerif/},
% 	Extension		= .ttf,
% 	UprightFont		= *-Regular,
% 	BoldFont		= *-Bold,
% 	ItalicFont		= *-Italic,
% 	BoldItalicFont	= *-BoldItalic,
% ]

% % Symbol font: Noto Sans Symbols 2
% \newfontfamily{\symbfamily}{NotoSansSymbols}[
% 	Path			= {\fontpath/NotoSansSymbols/},
% 	Extension		= .ttf,
% 	UprightFont		= *-Regular,
% 	BoldFont		= *-Bold,
% 	ItalicFont		= *-Light,
% 	BoldItalicFont	= *-SemiBold,
% ]

% \setmathrm{RobotoSerif}

\NewDocumentCommand{\serif}{+m}{{\rmfamily#1}}
\NewDocumentCommand{\sans}{+m}{{\sffamily#1}}
\NewDocumentCommand{\mono}{+m}{{\ttfamily{#1}}}
\NewDocumentCommand{\slab}{+m}{{\sbfamily{}#1}}
\NewDocumentCommand{\code}{+m}{\mono{\small{}#1}}
% \NewDocumentCommand{\emoji}{m}{{\emojifamily{}#1}}
% \NewDocumentCommand{\maths}{m}{{\mathfamily{}#1}}
% \NewDocumentCommand{\symb}{m}{{\symbfamily{}#1}}
% \NewDocumentCommand{\noto}{s m}{
% 	\group_begin:
% 		\bool_if:nTF {#1} {
% 			\notosansfamily #2
% 		} {
% 			\notofamily #2
% 		}
% 	\group_end:
% }

%------------------------------- Symbol Commands -------------------------------

% Line-breaking zero-width space.
\NewDocumentCommand{\zws}{}{\hspace{0pt}}
% Line-breaking dot.
\NewDocumentCommand{\bdot}{}{.\zws}

% Text-mode angle bracket ornaments.
\NewDocumentCommand{\ab}{s m}{\textsl{〈}#1\textsl{〉}}

\NewDocumentCommand{\checkmark}{s O{PrimeGreen} O{PrimeBrightGreen}}{
	\bool_if:nTF {#1} {
		\ColorText[#2][#3][]{\textsl{✓}}
	} {
		{\textsl{✓}}
	}
}
\NewDocumentCommand{\xmark}{s O{PrimeRed} O{PrimeBrightRed}}{
	\bool_if:nTF {#1} {
		\ColorText[#2][#3][]{\textsl{✗}}
	} {
		{\textsl{✗}}
	}
}

\RenewDocumentCommand{\triangle}{m}{
	\textsl{
		\str_case:nn {#1} {
			{down}	{▼}
			{left}	{◀}
			{right}	{▶}
			{up}	{▲}
		}
	}
}

%--------------------------- MenuKeys Configuration ----------------------------

\newmenucolortheme{autoModeColor}{named}{pageColor}{textColor}{textColor}[pageColor][textColor][textColor]

\changemenucolortheme{hyphenatepaths}{autoModeColor}
\changemenucolortheme{shadowedroundedkeys}{autoModeColor}
\changemenucolortheme{angularmenus}{autoModeColor}

\cs_new:Nn \__MenuKeys_path_style: {
	\sffamily\color{\usemenucolor{txt}}\CurrentMenuElement
}

\changemenuelement*{hyphenatepaths}{first}{\__MenuKeys_path_style:}
\changemenuelement*{hyphenatepaths}{middle}{\__MenuKeys_path_style:}
\changemenuelement*{hyphenatepaths}{last}{\__MenuKeys_path_style:}
\changemenuelement*{hyphenatepaths}{single}{\__MenuKeys_path_style:}

\renewmenumacro{\directory}[/]{hyphenatepaths}
\renewmenumacro{\keys}[+]{shadowedroundedkeys}
\renewmenumacro{\menu}[>]{angularmenus}

\RenewDocumentCommand{\ctrlname}{}{$\wedge$}

\NewDocumentCommand{\ControlString}{}{Ctrl}
\NewDocumentCommand{\EnterString}{}{Enter\,\return}
\NewDocumentCommand{\ShiftString}{}{Shift\,\shift}
\NewDocumentCommand{\AltString}{}{Alt\,\altmac}
\NewDocumentCommand{\TabString}{}{Tab\,\tab}

\NewDocumentCommand{\ControlKey}{}{\keys{\ControlString}}
\NewDocumentCommand{\EnterKey}{}{\keys{\EnterString}}
\NewDocumentCommand{\ShiftKey}{}{\keys{\ShiftString}}
\NewDocumentCommand{\AltKey}{}{\keys{\AltString}}
\NewDocumentCommand{\TabKey}{}{\keys{\TabString}}

% Suppress warning about obsolete font encodings because we're using Unicode.
\@tw@hyphenatepaths@warnigfalse %[sic]