%% XCharter is an extension of the Bitstream Charter fonts, adding osf,  
% small caps and superior figures. Generated 2013/10/27 by Michael Sharpe.
%%
\NeedsTeXFormat{LaTeX2e}

\def\fileversion{1.04}
\def\filedate{2014/04/27}

\ProvidesPackage{XCharter}[\filedate\space v\fileversion]

\message{`XCharter' v\fileversion, \filedate\space Text macros for XCharter, an extension of Charter (msharpe)}

\RequirePackage[LY1,T1]{fontenc}
\RequirePackage{textcomp}
\IfFileExists{mweights.sty}{\RequirePackage{mweights}}{}
\RequirePackage{etoolbox}
\IfFileExists{fontaxes.sty}{
    \RequirePackage{fontaxes}
    \fa@naming@exception{figures}{{superior}{proportional}}{Sup}
    \fa@naming@exception{figures}{{superior}{tabular}}{Sup}
    \def\sufigures{\@nomath\sufigures
        \fontfigurestyle{superior}\selectfont}
    \DeclareTextFontCommand{\textsu}{\sufigures}
    \let\textsuperior\textsu
}{}
\DeclareRobustCommand{\lfstyle}{%
  \not@math@alphabet\lfstyle\relax
  \fontfamily{XCharter-TLF}\selectfont }
\DeclareRobustCommand{\osfstyle}{%
  \not@math@alphabet\osfstyle\relax
  \fontfamily{XCharter-TOsF}\selectfont }
\def\textlf#1{{\lfstyle #1}}
%\def\textosf#1{{\osfstyle #1}}

\newcommand*{\XCharter@scale}{1}
\IfFileExists{xkeyval.sty}{
    \RequirePackage{xkeyval}
    \DeclareOptionX{scale}{\renewcommand*{\XCharter@scale}{##1}}
    \DeclareOptionX{scaled}{\renewcommand*{\XCharter@scale}{##1}}
}{
    \let\DeclareOptionX\DeclareOption
    \let\ExecuteOptionsX\ExecuteOptions
    \let\ProcessOptionsX\ProcessOptions
}
\let\orig@footnote=\thefootnote
\let\orig@makefnmark=\@makefnmark

\def\XCharter@altone{1}% default is to use 1, not I
\newif\if@XCh@sups
\DeclareOptionX{lf}{\edef\XCharter@figurestyle{TLF}}
\DeclareOptionX{lining}{\edef\XCharter@figurestyle{TLF}}
\DeclareOptionX{oldstyle}{\edef\XCharter@figurestyle{TOsF}%
\edef\XCharter@altone{1}}
\DeclareOptionX{oldstyleI}{\edef\XCharter@figurestyle{TOsF}%
\edef\XCharter@altone{}}
\DeclareOptionX{osf}{\edef\XCharter@figurestyle{TOsF}\edef\XCharter@altone{1}}
\DeclareOptionX{osfI}{\edef\XCharter@figurestyle{TOsF}\edef\XCharter@altone{}}
\DeclareOptionX{sups}{\@XCh@supstrue}

\edef\bfseries@rm{b}
\edef\mdseries@rm{m}
\ExecuteOptionsX{lining}
\ProcessOptionsX\relax

\def\useosf{\renewcommand*{\rmdefault}{XCharter-TOsF}\def\XCharter@altone{1}}
\def\useosfI{\renewcommand*{\rmdefault}{XCharter-TOsF}\def\XCharter@altone{}}
\@onlypreamble\useosf
\@onlypreamble\useosfI

\newcommand{\textosfI}[1]{\oldstylenums{#1}}% to get XCharter osfI
\newcommand{\textosf}[1]{{\fontencoding{T1}\fontfamily{XCharterx}\selectfont #1}}% to get XCharter osf
\renewcommand*{\bfdefault}{b}
\renewcommand*{\scdefault}{sc}% for better compatibility with mathdesign

% The following are provided so that we may access osf in any mode
% osfx corresponds to small 1 rather than small I
\DeclareFontFamily{T1}{XCharterx}{}

\DeclareFontShape{T1}{XCharterx}{m}{n}{
   <-> s*[\XCharter@scale]  XCharter1-Roman-tosf-t1
}{}
\DeclareFontShape{T1}{XCharterx}{m}{it}{
   <-> s*[\XCharter@scale]  XCharter1-Italic-tosf-t1
}{}
\DeclareFontShape{T1}{XCharterx}{b}{n}{
   <-> s*[\XCharter@scale]  XCharter1-Bold-tosf-t1
}{}
\DeclareFontShape{T1}{XCharterx}{b}{it}{
   <-> s*[\XCharter@scale]  XCharter1-BoldItalic-tosf-t1
}{}


\renewcommand*{\rmdefault}{XCharter-TLF}
\renewcommand*{\familydefault}{\rmdefault}


\if@XCh@sups %
 \ifdefined\sufigures
  \def\f@@tn@te{footnote}
  \def\@makefnmark{%
    \ifx\@mpfn\f@@tn@te%not in a minipage
      \ifx\thefootnote\orig@footnote%
        \hbox{\sufigures\hspace*{.04em}\@thefnmark\hspace*{.04em}}%
      \else%
        \orig@makefnmark%
      \fi%
    \else%
      \orig@makefnmark%
    \fi}%
 \fi%
\fi

\AtEndPreamble{%
\renewcommand*{\rmdefault}{XCharter-\XCharter@figurestyle}
\normalfont}


\endinput
