%%
%% This is file `lastpagemodern.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% lastpage.dtx  (with options: `lastpagemodern')
%% 
%% This is a generated file.
%% 
%% Project: lastpage
%% Version: 2025-08-14 v2.1h
%% Info: Refers to last page's name
%% 
%% Copyright (C) 2010 - 2025 by
%%     H.-Martin Muench <Martin dot Muench at Uni-Bonn dot de>
%% Portions of code copyrighted by other people as marked.
%% 
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either
%% version 1.3c of this license or (at your option) any later
%% version. This version of this license is in
%%    https://www.latex-project.org/lppl/lppl-1-3c.txt
%% and the latest version of this license is in
%%    https://www.latex-project.org/lppl.txt
%% and version 1.3c or later is part of all distributions of
%% LaTeX version 2005-12-01 or later.
%% 
%% This work has the LPPL maintenance status "maintained".
%% 
%% The Current Maintainer of this work is H.-Martin Muench.
%% 
%% This package was invented by Jeffrey P. Goldberg.
%% I thought that an enhancement was needed and therefore created the pageslts package,
%% https://ctan.org/pkg/pageslts. Nevertheless, for compatibility with existing
%% documents/packages as well as for the low amount of resources needed by the
%% lastpage package (no new counter!), I updated this package.
%% Thanks go to Jeffrey P. Goldberg for allowing me to do this.
%% 
%% While this package allows for things like "Page slash thepage{} of slash pageref{LastPage}"
%% to get "Page 7 of 9" or "Page VII of IX",
%% the NUMBER of pages is nowadays available from the kernel
%% (slash @abspage@last, slash thetotalpages, slash PreviousTotalPages),
%% but with pages for example I to X and then 1 to 10, the number of pages would be "20",
%% while the name of the last page is "10". Decide what you need/want!
%% 
%% This work consists of the main source file lastpage.dtx,
%% the README, and the derived files
%%    lastpage.sty, lastpage209.sty, lastpage2e.sty,
%%    lastpageclassic.sty, lastpagemodern.sty,
%%    lastpage.pdf, lastpage.ins, lastpage.drv,
%%    lastpage-example.tex, lastpage-example.pdf.
%% 
%% In memoriam
%%  Claudia Simone Barth + 1996-01-30
%%  Tommy Muench         + 2014-01-02
%%  Hans-Klaus Muench    + 2014-08-24
%% 
%% Part of the "lastpage" package
\NeedsTeXFormat{LaTeX2e}[2024-11-01]
\ProvidesPackage{lastpagemodern}[2025-08-14 v2.1h %
  Refers to last page's name (HMM; JPG)]
%% allows for things like "Page \thepage{} of \pageref{LastPage}"
%% to get "Page 7 of 9" or "Page VII of IX";
%% the NUMBER of pages is available via \@abspage@last, but with pages
%% for example I to X and then 1 to 10, the number of pages would be "20",
%% while the name of the last page is "10". Decide what you need/want!

\PushDefaultHookLabel{lastpage}

\gdef\lastpage@one{1}
\gdef\lastpage@firstpage{1}
\gdef\lastpage@lastpage{??}
\gdef\lastpage@lastpageHy{??}

\newcommand\lastpage@gobbleminus[1]{\ifx-#1\else#1\fi}
\newcounter{lastpagecount}
\newcommand{\lastpage@IfNumericTF}[3]{%
\sbox\z@{\c@lastpagecount=0\lastpage@gobbleminus{#1}\relax}%
\ifdim\wd0>\z@\relax#3% is not numeric
\else#2% is numeric
\fi}

\AddToHook{begindocument/end}{%
  \IfPackageLoadedT{pageslts}{%
    \PackageNoteNoLine{lastpage}{Packages pageslts and lastpage used.\MessageBreak%
      lastpage is not necessary when loading pageslts}%
  }%
  \gdef\lastpage@putlabel{\relax}%
  }

%% Code provided by Prof. Enrico Gregorio at https://tex.stackexchange.com/a/542425
\long\def\protected@iwrite#1#2#3{%
  \begingroup%
  #2%
  \let\protect\@unexpandable@protect%
  \edef\reserved@a{\immediate\write#1{#3}}%
  \reserved@a%
  \endgroup%
  \if@nobreak\ifvmode\nobreak\fi\fi%
  }

\newcommand{\lastpage@makeHy}{%
  \def\lastpage@Hptest{Doc-Start}%
  \ifx\lastpage@Hptest\@currentHpage\relax%
    \gdef\lastpage@Hy{\@currentHpage}%
  \else%
    \edef\lastpage@Hptest{\@currentHpage}%
    \ifx\lastpage@Hptest\empty\relax%
    \else%
      \def\lastpage@Hptest{page.}%
      \ifx\lastpage@Hptest\@currentHpage\relax
        \def\lastpage@Hptest{\csname @fnsymbol\endcsname \c@page }%
        \ifx\lastpage@Hptest\thepage\relax%
          \ifnum\value{page}=3\else%
            \PackageWarningNoLine{lastpage}{You should add a\MessageBreak
              \string\ProvideTextCommand{...}{PD1}{...}\MessageBreak%
              (see the lastpage package manual, 3.13 %
              \string\pagenumbering{fnsymbol})\MessageBreak%
              to your document's preamble}%
          \fi%
        \fi%
        \PackageWarningNoLine{lastpage}{%
          \string\@currentHpage\space is\MessageBreak%
          just "page." without number,\MessageBreak%
          \string\lastpage@lastpageHy\space is now let empty}%
      \else%
        \gdef\lastpage@Hy{\lastpage@rmpage{\@currentHpage}}%
        \ifx\lastpage@lastpageHy\empty\relax%
          \PackageWarningNoLine{lastpage}{%
            \string\@currentHpage\space is\MessageBreak%
            \meaning\@currentHpage\MessageBreak%
            not beginning with "page.",\MessageBreak%
            \string\lastpage@lastpageHy\space is now let empty}%
  \fi\fi\fi\fi%
  }

%% Code provided by David Carlisle at https://tex.stackexchange.com/a/721877
\def\lastpage@rmpage#1{%
  \expandafter\xlastpage@rmpage\expanded{#1}\xlastpage@rmpage page.%
  \xlastpage@rmpage\xxlastpage@rmpage{#1}}
\def\xlastpage@rmpage #1page.#2\xlastpage@rmpage#3\xxlastpage@rmpage#4{%
  \if$\detokenize{#1}$#2%\else#4
  \fi}

\newcommand{\lastpage@putl@bel}{%
  \IfPackageLoadedT{hyperref}{%
    \IfPackageAtLeastF{hyperref}{2024-10-30}{%
      \PackageError{lastpage}{hyperref package version too old}{%
        required version: 2024-10-30 or newer, found version:\MessageBreak%
        \csname ver@hyperref.sty\endcsname\MessageBreak%
        Update hyperref or use lastpageclassic.sty instead of\MessageBreak%
        lastpagemodern.sty!}}%
    \ifHy@pageanchor\else%
      \PackageWarningNoLine{lastpage}{%
        The \string\pageref{LastPage} link does not work\MessageBreak%
        using hyperref with disabled option `pageanchor'.\MessageBreak%
        Better enable `pageanchor' or use\MessageBreak%
        \string\pageref*{LastPage} (not generating a link)}%
    \fi%
    }%
  \begingroup%
    \IfFormatAtLeastF{2025-06-01}{\addtocounter{page}{-1}}%
    \IfPackageLoadedF{pageslts}{%
      \let\label\@gobble@om%
      \let\index\@gobble@som%
      \let\glossary\@gobble@om%
      \protected@iwrite\@auxout{}{\string\newlabel{LastPage}{%
        {\@currentlabel}{\thepage}{\@currentlabelname}%
        {\IfPackageLoadedTF{hyperref}{\ifHy@pageanchor\@currentHpage\fi%
                                     }{\@currentHref}}%
        {\@kernel@reserved@label@data}}%
      }%
    }% Otherwise pageslts writes the label for "LastPage".
    \protected@iwrite\@auxout{}{%
      \string\gdef\string\lastpage@lastpage{\thepage}}%
    \gdef\lastpage@Hy{}%
    \IfPackageLoadedT{hyperref}{\ifHy@pageanchor\lastpage@makeHy\fi}%
    \protected@iwrite\@auxout{}{%
      \string\gdef\string\lastpage@lastpageHy{\lastpage@Hy}}%
    \IfFormatAtLeastF{2025-06-01}{\addtocounter{page}{+1}}%
  \endgroup%
  }

\newcommand{\lastpage@fileswtest}[2]{%
  \edef\lastpage@testa{#1}%
  \edef\lastpage@testb{#2}%
  \ifx\lastpage@testa\lastpage@testb%
  \else%
    \IfPackageLoadedTF{tikz}{%
      \PackageWarning{lastpage}%
       {The lastpage package was not allowed to write to an\MessageBreak%
        .aux file. This package does not work without access\MessageBreak%
        to an .aux file.\MessageBreak%
        It is OK if the .aux file was already updated\MessageBreak%
        by a previous compiler run\MessageBreak%
        and would not have changed anyway.\MessageBreak%
       }%
    }{\PackageError{lastpage}{No auxiliary file allowed}%
       {The lastpage package was not allowed to write to an .aux file.\MessageBreak%
        This package does not work without access to an .aux file.\MessageBreak%
        Press Ctrl+Z to exit.\MessageBreak%
        But it is OK if the .aux file was already updated\MessageBreak%
        by a previous compiler run\MessageBreak%
        and would not have changed anyway.\MessageBreak%
       }%
     }%
  \fi%
  }

\newcommand{\lastpage@fileswtestHy}{%
  \ifHy@pageanchor%
    \lastpage@fileswtest{\@currentHpage}{\@the@H@page}%
  \else%
    \lastpage@fileswtest{\empty}{\lastpage@lastpageHy}%
  \fi%
  }

\AddToHook{enddocument/afterlastpage}{%
  \gdef\lastpage@putlabel{??}%
  \ifx\lastpage@lastpage\lastpage@putlabel\relax%
    \AddToHook{enddocument/info}{%
      \PackageWarning{lastpage}{Rerun to get the references right}%
      }%
  \fi%
  \gdef\lastpage@putlabel{\relax}%
  \if@filesw%
    \message{^^Jenddocument/afterlastpage (AED): lastpage setting LastPage.^^J}%
    \IfFormatAtLeastTF{2025-06-01}{\lastpage@putl@bel}{%
      \IfPackageLoadedTF{french}{%
           \addtocounter{page}{+1}\lastpage@putl@bel\addtocounter{page}{-1}%
       }{\IfPackageLoadedTF{frenchle}{%
           \addtocounter{page}{+1}\lastpage@putl@bel\addtocounter{page}{-1}%
         }{\lastpage@putl@bel%
          }%
        }%
    }%
  \else%
    \lastpage@fileswtest{\thepage}{\lastpage@lastpage}%
    \IfPackageLoadedT{hyperref}{\lastpage@fileswtestHy}%
  \fi%
  }

\PopDefaultHookLabel
\endinput
%%
%% End of file `lastpagemodern.sty'.
