% Copyright (C) 2007, 2016 Palle Jorgensen

% This program is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation, either version 3 of the License, or
% (at your option) any later version.

% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
% GNU General Public License for more details.

% You should have received a copy of the GNU General Public License
% along with this program.  If not, see
% <http://www.gnu.org/licenses/>.

\ProvidesPackage{thinsp}[2016/10/02 v 0.2 Package providing stretchable thinspaces]

\newif\if@thinsp@thinspace
\@thinsp@thinspacetrue
\DeclareOption{nothinspace}{\@thinsp@thinspacefalse}
\DeclareOption{thinspace}{\@thinsp@thinspacetrue}

\newif\if@thinsp@thinthinspace
\@thinsp@thinthinspacetrue
\DeclareOption{nothinthinspace}{\@thinsp@thinthinspacefalse}
\DeclareOption{thinthinspace}{\@thinsp@thinthinspacetrue}


\newif\if@thinsp@negthinspace
\@thinsp@negthinspacefalse
\DeclareOption{nonegthinspace}{\@thinsp@negthinspacefalse}
\DeclareOption{negthinspace}{\@thinsp@negthinspacetrue}

\def\thinsp@thinamount{.5}
\def\thinsp@thinthinamount{.25}

\DeclareOption{onethird}{%
  \def\thinsp@thinamount{.333}%
  \def\thinsp@thinthinamount{.167}%
}

\DeclareOption{onehalf}{%
  \def\thinsp@thinamount{.5}%
  \def\thinsp@thinthinamount{.25}%
}

\DeclareOption{twothirds}{%
  \def\thinsp@thinamount{.667}%
  \def\thinsp@thinthinamount{.333}%
}

\ProcessOptions*

\def\stretchthinspace{%
  \nobreak\hskip\thinsp@thinamount\fontdimen2\font%
  \@plus\thinsp@thinamount\fontdimen3\font%
  \@minus\thinsp@thinamount\fontdimen4\font%
  \relax%
}

\def\stretchnegthinspace{%
  \nobreak\hskip-\thinsp@thinamount\fontdimen2\font%
  \@plus\thinsp@thinamount\fontdimen4\font%
  \@minus\thinsp@thinamount\fontdimen3\font%
  \relax%
}

\def\stretchthinthinspace{%
  \nobreak\hskip\thinsp@thinthinamount\fontdimen2\font%
  \@plus\thinsp@thinthinamount\fontdimen3\font%
  \@minus\thinsp@thinthinamount\fontdimen4\font%
  \relax%
}

\AtBeginDocument{%
  \if@thinsp@thinspace
  \PackageInfo{thinsp}{Redefining \string\thinspace}
  \let\thinspace\stretchthinspace
  \@ifpackageloaded{amsmath}{%
    \PackageInfo{thinsp}{And now redefining AMS-math's
      \string\thinspace}
    \def\,{\ifmmode\mskip\thinmuskip\else\stretchthinspace\fi}%
    \let\thinspace\,%
  }
  \fi
  % 
  \if@thinsp@negthinspace
  \PackageInfo{thinsp}{Redefining \string\negthinspace}
  \let\negthinspace\stretchnegthinspace
  \@ifpackageloaded{amsmath}{%
    \PackageInfo{thinsp}{And now redefining AMS-math's
      \string\negthinspace}
    \def\!{\ifmmode\mskip-\thinmuskip\else\stretchnegthinspace\fi}%
    \let\negthinspace\!%
  }
  \fi
  % 
  \if@thinsp@thinthinspace
  \@ifundefined{thinthinspace}{}{%
    \PackageInfo{thinsp}{Redefining \string\thinthinspace}}
  \let\thinthinspace\stretchthinthinspace
  \fi
}

\endinput