% Source Code Pro for LaTeX
%
% Silke Hofstra, tex@slxh.nl
%
% This file selects either the OTF or the TYPE1 fonts based on
% the LaTeX engine used.
%
% Licenced under the LPPL v1.3 or higher.
%
\NeedsTeXFormat{LaTeX2e}[1994/12/01]
\ProvidesPackage{sourcecodepro}[2025/04/06 v2.8 Adobe's Source Code Pro typeface]

\RequirePackage{ifxetex,ifluatex,xkeyval}

% Switches
\newif\ifsourcecodepro@otf
\newif\ifsourcecodepro@default
\newif\ifsourcecodepro@ttdefault
\newif\ifsourcecodepro@oldstyle
\newif\ifsourcecodepro@black
\newif\ifsourcecodepro@semibold
\newif\ifsourcecodepro@light
\newif\ifsourcecodepro@extralight
\newif\ifsourcecodepro@medium

% Scaling command
\newcommand*{\SourceCodePro@scale}{1}
\newcommand*{\sourcecodepro@ligatures}{}

% Use OpenType fonts for XeTeX and LuaTeX.
\ifxetex
	\sourcecodepro@otftrue
\else
	\ifluatex
		\sourcecodepro@otftrue
	\fi
\fi

\DeclareOptionX{lining}      {\sourcecodepro@oldstylefalse}
\DeclareOptionX{nf}          {\sourcecodepro@oldstylefalse}
\DeclareOptionX{lf}          {\sourcecodepro@oldstylefalse}
\DeclareOptionX{oldstyle}    {\sourcecodepro@oldstyletrue}
\DeclareOptionX{osf}         {\sourcecodepro@oldstyletrue}
\DeclareOptionX{black}       {\sourcecodepro@blacktrue \sourcecodepro@semiboldfalse}
\DeclareOptionX{semibold}    {\sourcecodepro@blackfalse\sourcecodepro@semiboldtrue }
\DeclareOptionX{bold}        {\sourcecodepro@blackfalse\sourcecodepro@semiboldfalse}
\DeclareOptionX{light}       {\sourcecodepro@lighttrue \sourcecodepro@extralightfalse\sourcecodepro@mediumfalse}
\DeclareOptionX{extralight}  {\sourcecodepro@lightfalse\sourcecodepro@extralighttrue \sourcecodepro@mediumfalse}
\DeclareOptionX{regular}     {\sourcecodepro@lightfalse\sourcecodepro@extralightfalse\sourcecodepro@mediumfalse}
\DeclareOptionX{medium}      {\sourcecodepro@lightfalse\sourcecodepro@extralightfalse\sourcecodepro@mediumtrue }
\DeclareOptionX{scale}       {\renewcommand*{\SourceCodePro@scale}{#1}}
\DeclareOptionX{scaled}      {\renewcommand*{\SourceCodePro@scale}{#1}}
\DeclareOptionX{default}     {\sourcecodepro@defaulttrue}
\DeclareOptionX{ttdefault}   {\sourcecodepro@ttdefaulttrue}
\DeclareOptionX{nottdefault} {\sourcecodepro@ttdefaultfalse}
\DeclareOptionX{type1}       {\sourcecodepro@otffalse}
\DeclareOptionX{t1}          {\sourcecodepro@otffalse}
\DeclareOptionX{opentype}    {\sourcecodepro@otftrue}
\DeclareOptionX{otf}         {\sourcecodepro@otftrue}
\DeclareOptionX{ligatures}   {\renewcommand*{\sourcecodepro@ligatures}{#1}}

% Default options
\ExecuteOptionsX{ttdefault,lining,bold,regular}
\ProcessOptionsX\relax

% Load OpenType files
\ifsourcecodepro@otf
	\RequirePackage{fontspec}

	% Create a fixed liningnums command:
	\renewcommand*\liningnums[1]{{\addfontfeature{RawFeature=+lnum;-onum}#1}}

	% Oldstyle/Lining
	\ifsourcecodepro@oldstyle
		\def\sourcecodepro@figurestyle{OldStyle}
	\else
		\def\sourcecodepro@figurestyle{}
	\fi

	% Black/Semibold/Bold
	\ifsourcecodepro@black
		\def\sourcecodepro@boldstyle{Black}
	\else
		\ifsourcecodepro@semibold
			\def\sourcecodepro@boldstyle{Semibold}
		\else
			\def\sourcecodepro@boldstyle{Bold}
		\fi
	\fi

	% Light/ExtraLight/Regular/Medium
	\ifsourcecodepro@light
		\def\sourcecodepro@regstyle{Light}
	\else
		\ifsourcecodepro@extralight
			\def\sourcecodepro@regstyle{ExtraLight}
		\else
			\ifsourcecodepro@medium
				\def\sourcecodepro@regstyle{Medium}
			\else
				\def\sourcecodepro@regstyle{Regular}
			\fi
		\fi
	\fi

	% Shared features
	\defaultfontfeatures{
		Ligatures = \sourcecodepro@ligatures ,
		Numbers   = \sourcecodepro@figurestyle ,
		Scale     = \SourceCodePro@scale ,
		Extension = .otf }

	% Monospace font
	\ifsourcecodepro@ttdefault
		\setmonofont
			[ UprightFont    = *-\sourcecodepro@regstyle ,
			  ItalicFont     = *-\sourcecodepro@regstyle It ,
			  BoldFont       = *-\sourcecodepro@boldstyle ,
			  BoldItalicFont = *-\sourcecodepro@boldstyle It ]
			{SourceCodePro}
	\fi

	% Font families
	% Regular/Bold
	\newfontfamily\sourcecodepro
		[ UprightFont    = *-Regular ,
		  ItalicFont     = *-RegularIt ,
		  BoldFont       = *-Bold ,
		  BoldItalicFont = *-BoldIt ]
		{SourceCodePro}

	% Medium/Bold
	\newfontfamily\sourcecodepromedium
		[ UprightFont    = *-Medium ,
		  ItalicFont     = *-MediumIt ,
		  BoldFont       = *-Bold ,
		  BoldItalicFont = *-BoldIt ]
		{SourceCodePro}

	% Light/Semibold
	\newfontfamily\sourcecodeprolight
		[ UprightFont    = *-Light ,
		  ItalicFont     = *-LightIt ,
		  BoldFont       = *-Semibold ,
		  BoldItalicFont = *-SemiboldIt ]
		{SourceCodePro}

	% ExtraLight/Black
	\newfontfamily\sourcecodeproextreme
		[ UprightFont    = *-ExtraLight ,
		  ItalicFont     = *-ExtraLightIt ,
		  BoldFont       = *-Black ,
		  BoldItalicFont = *-BlackIt ]
		{SourceCodePro}

	% Lining figures
	\newfontfamily\sourcecodeprolf
		[ Numbers        = ,
		  UprightFont    = *-\sourcecodepro@regstyle ,
		  ItalicFont     = *-\sourcecodepro@regstyle It ,
		  BoldFont       = *-\sourcecodepro@boldstyle ,
		  BoldItalicFont = *-\sourcecodepro@boldstyle It ]
		{SourceCodePro}

	% Dont keep all default font features
	\defaultfontfeatures{}

% Load type1 font.
\else
	\RequirePackage[OT1,LY1,T1]{fontenc}
	\RequirePackage{mweights}

	% Oldstyle/Lining
	\ifsourcecodepro@oldstyle
		\def\sourcecodepro@figurestyle{OsF}
	\else
		\def\sourcecodepro@figurestyle{LF}
	\fi

	% Black/Semibold/Bold
	\ifsourcecodepro@black
		\def\bfseries@tt{black}
	\else
		\ifsourcecodepro@semibold
			\def\bfseries@tt{semibold}
		\else
			\def\bfseries@tt{bold}
		\fi
	\fi

	% Light/ExtraLight/Regular/Medium
	\ifsourcecodepro@light
		\def\mdseries@tt{light}
	\else
		\ifsourcecodepro@extralight
			\def\mdseries@tt{extralight}
		\else
			\ifsourcecodepro@medium
				\def\mdseries@tt{medium}
			\else
				\def\mdseries@tt{regular}
			\fi
		\fi
	\fi

	% Monospace font
	\ifsourcecodepro@ttdefault
		\edef\ttdefault{SourceCodePro-T\sourcecodepro@figurestyle}
	\fi

	% If source code pro is the default font \oldstylenums needs a new definition.
	\ifsourcecodepro@default
		\let\nativeoldstylenums\oldstylenums
		\renewcommand*\oldstylenums[1]{%
			\begingroup
				\ifmmode
					\mathgroup\symletters #1%
				\else
					\fontfamily{SourceCodePro-TOsF}\selectfont #1%
				\fi
			\endgroup
		}
		\edef\seriesdefault{\mdseries@tt}
	\fi
\fi

% Set default font family
\ifsourcecodepro@default
	\edef\familydefault{\ttdefault}
\fi

\endinput
