%% start of file `moderncvbodyiii.sty'.
%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2026 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
% available at http://www.latex-project.org/lppl/.


%-------------------------------------------------------------------------------
%                identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{moderncvbodyiii}[2026-01-31 v2.5.1 modern curriculum vitae and letter body variant: 3]

% rules type options: "fullrules", "shortrules", "mixedrules" (default) or "norules"
\@initializeif{\if@fullrules}\@fullrulesfalse
\DeclareOption{fullrules} {\@fullrulestrue\@shortrulesfalse\@mixedrulesfalse\@norulesfalse}
\@initializeif{\if@shortrules}\@shortrulesfalse
\DeclareOption{shortrules}{\@fullrulesfalse\@shortrulestrue\@mixedrulesfalse\@norulesfalse}
\@initializeif{\if@mixedrules}\@mixedrulesfalse
\DeclareOption{mixedrules}{\@fullrulesfalse\@shortrulesfalse\@mixedrulestrue\@norulesfalse}
\@initializeif{\if@norules}\@norulesfalse
\DeclareOption{norules}   {\@fullrulesfalse\@shortrulesfalse\@mixedrulesfalse\@norulestrue}

% section alignment options: "left" (default), "center" or "right"
\@initializeif{\if@left}\@leftfalse
\DeclareOption{left}      {\@lefttrue\@centerfalse\@rightfalse}
\@initializeif{\if@center}\@centerfalse
\DeclareOption{center}    {\@leftfalse\@centertrue\@rightfalse}
\@initializeif{\if@right}\@rightfalse
\DeclareOption{right}     {\@leftfalse\@centerfalse\@righttrue}

\DeclareOption*{}% avoid choking on unknown options
\ExecuteOptions{mixedrules,left}
\ProcessOptions*\relax% \ProcessOptions* processes the options in the order provided (i.e., with the later ones possibly overriding the former ones), while \ProcessOptions processes them in the order of the package

%-------------------------------------------------------------------------------
%                required packages
%-------------------------------------------------------------------------------
% provides the commands for the skillmatrix as well as the command
% \recompute@cvskillmatrix@lengths
\RequirePackage[moderncvbodyiii]{moderncvskillmatrix}

%-------------------------------------------------------------------------------
%                overall body definition
%-------------------------------------------------------------------------------
% fonts
\renewcommand*{\sectionfont}{%
  \if@norules%
    \Large\bfseries\scshape%
  \else%
    \Large\bfseries\upshape\fi}
\renewcommand*{\subsectionfont}{%
  \if@norules%
    \large\mdseries\itshape%
  \else%
    \large\upshape\fontseries{sb}\selectfont\fi}
\renewcommand*{\hintfont}{\bfseries}

% styles
\renewcommand*{\sectionstyle}[1]{{%
  \if@center\centering\else%
  \if@right\raggedleft\fi\fi%
  \sectionfont\textcolor{sectioncolor}{#1}%
  \if@shortrules\else%
    \par\fi}}
\renewcommand*{\subsectionstyle}[1]{{%
  \if@center\centering\else%
  \if@right\raggedleft\fi\fi%
  \subsectionfont\textcolor{subsectioncolor}{#1}%
  \if@shortrules\else\if@mixedrules\else%
    \par\fi\fi}}
\renewcommand*{\hintstyle}[1]{{\hintfont\textcolor{hintstylecolor}{#1}}}


%-------------------------------------------------------------------------------
%                resume body definition
%-------------------------------------------------------------------------------
% lengths
%   used by \cvitem (and all children command)
\@initializelength{\hintscolumnwidth}             \setlength{\hintscolumnwidth}{0.3\textwidth}
\@initializelength{\separatorcolumnwidth}         \setlength{\separatorcolumnwidth}{0.025\textwidth}
\@initializelength{\maincolumnwidth}
%   used by \cvdoubleitem
\@initializelength{\doubleitemcolumnwidth}
%   used by \cvtripleitem
\@initializelength{\tripleitemcolumnwidth}
%   used by \cvlistitem
\@initializelength{\listitemsymbolwidth}          \settowidth{\listitemsymbolwidth}{\listitemsymbol}
\@initializelength{\listitemcolumnwidth}
%   used by \cvlistdoubleitem
\@initializelength{\listdoubleitemcolumnwidth}
\@initializelength{\listitemsymbolspace}          \setlength{\listitemsymbolspace}{0pt}

% commands
\renewcommand*{\recomputecvbodylengths}{%
  % body lengths
  \setlength{\maincolumnwidth}{\textwidth-\leftskip-\rightskip}%
  \setlength{\listitemcolumnwidth}{\maincolumnwidth-\listitemsymbolwidth}%
  \setlength{\doubleitemcolumnwidth}{\maincolumnwidth-\separatorcolumnwidth}%
  \setlength{\doubleitemcolumnwidth}{0.5\doubleitemcolumnwidth}%
  \setlength{\tripleitemcolumnwidth}{\maincolumnwidth-2\separatorcolumnwidth}%
  \setlength{\tripleitemcolumnwidth}{0.33\tripleitemcolumnwidth}%
  \setlength{\listdoubleitemcolumnwidth}{\maincolumnwidth-\listitemsymbolwidth-\separatorcolumnwidth-\listitemsymbolwidth}%
  \setlength{\listdoubleitemcolumnwidth}{0.5\listdoubleitemcolumnwidth}%
  \recompute@cvskillmatrix@lengths
  % regular lengths
  \setlength{\parskip}{0\p@}}

\RenewDocumentCommand{\section}{sm}{%
  \par\addvspace{2.5ex}%
  \phantomsection{}% reset the anchor for hyperrefs
  \addcontentsline{toc}{section}{#2}%
  \if@left\else\if@fullrules\else\if@mixedrules\else%
    \sectionrule\fi\fi\fi%
  \strut\sectionstyle{#2}%
  \if@fullrules%
    \sectionrule%
  \else\if@mixedrules%
    \sectionrule%
  \else\if@right\else%
    \sectionrule\fi\fi\fi%
  \par\nobreak\addvspace{1ex}\@afterheading}

\RenewDocumentCommand{\subsection}{sm}{%
  \par\addvspace{1ex}%
  \phantomsection{}%
  \addcontentsline{toc}{subsection}{#2}%
  \if@left\else\if@fullrules\else%
    \subsectionrule\fi\fi%
  \strut\subsectionstyle{#2}%
  \if@fullrules%
    \subsectionrule%
  \else\if@right\else%
    \subsectionrule\fi\fi%
  \par\nobreak\addvspace{0.5ex}\@afterheading}

\newcommand*{\sectionrule}{}
\newcommand*{\subsectionrule}{}
\if@fullrules%
  \renewcommand*{\sectionrule}{\par\nobreak\vspace*{-.7\baselineskip}\leavevmode{\color{bodyrulecolor}\leaders\hbox{\rule{1pt}{0.4pt}}\hfill\kern0pt}}
  \renewcommand*{\subsectionrule}{\par\nobreak\vspace*{-.7\baselineskip}\leavevmode{\color{bodyrulecolor}\xleaders\hbox to 0.35em{\scriptsize.}\hfill}}\fi% different subsectionrules will not be perfectly aligned, but remaining space at the end of the fill will be distributed evenly between leaders, so it will be barely visible}
\if@shortrules%
  \renewcommand*{\sectionrule}{\leavevmode{\color{bodyrulecolor}\leaders\hbox{\rule{1pt}{0.4pt}}\hfill\kern0pt}}
  \renewcommand*{\subsectionrule}{\leavevmode{\color{bodyrulecolor}\xleaders\hbox to 0.35em{\scriptsize.}\hfill}}\fi% different subsectionrules will not be perfectly aligned, but remaining space at the end of the fill will be distributed evenly between leaders, so it will be barely visible}}
\if@mixedrules%
  \renewcommand*{\sectionrule}{\par\nobreak\vspace*{-.7\baselineskip}\leavevmode{\color{bodyrulecolor}\leaders\hbox{\rule{1pt}{0.4pt}}\hfill\kern0pt}}
  \renewcommand*{\subsectionrule}{\leavevmode{\color{bodyrulecolor}\xleaders\hbox to 0.35em{\scriptsize.}\hfill}}\fi% different subsectionrules will not be perfectly aligned, but remaining space at the end of the fill will be distributed evenly between leaders, so it will be barely visible}}
\if@norules%
  \renewcommand*{\sectionrule}{}
  \renewcommand*{\subsectionrule}{}\fi

\renewcommand*{\cvitem}[3][.25em]{%
  \ifstrempty{#2}{}{\hintstyle{#2}: }{#3}%
  \par\addvspace{#1}}

\renewcommand*{\cvdoubleitem}[5][.25em]{%
  \begin{minipage}[t]{\doubleitemcolumnwidth}\hintstyle{#2}: #3\end{minipage}%
  \hfill% fill of \separatorcolumnwidth
  \begin{minipage}[t]{\doubleitemcolumnwidth}\ifstrempty{#4}{}{\hintstyle{#4}: }#5\end{minipage}%
  \par\addvspace{#1}}

\renewcommand*{\cvtripleitem}[7][.1em]{%
  \begin{minipage}[t]{\tripleitemcolumnwidth}\hintstyle{#2}: #3\end{minipage}%
  \hfill% fill of \separatorcolumnwidth
  \begin{minipage}[t]{\tripleitemcolumnwidth}\hintstyle{#4}: #5\end{minipage}%
  \hfill% fill of \separatorcolumnwidth
  \begin{minipage}[t]{\tripleitemcolumnwidth}\ifstrempty{#6}{}{\hintstyle{#6}: }#7\end{minipage}%
  \par\addvspace{#1}}

\renewcommand*{\cvlistitem}[2][.25em]{%
  \listitemsymbol\hspace{\listitemsymbolspace}\begin{minipage}[t]{\listitemcolumnwidth-\listitemsymbolspace}#2\end{minipage}%
  \par\addvspace{#1}}

\renewcommand*{\cvlistdoubleitem}[3][.25em]{%
  \cvitem[#1]{}{\listitemsymbol\hspace{\listitemsymbolspace}\begin{minipage}[t]{\listdoubleitemcolumnwidth-\listitemsymbolspace}#2\end{minipage}%
  \hfill% fill of \separatorcolumnwidth
  \ifstrempty{#3}%
    {}%
    {\listitemsymbol\hspace{\listitemsymbolspace}\begin{minipage}[t]{\listdoubleitemcolumnwidth-\listitemsymbolspace}#3\end{minipage}}}}

\renewcommand*{\cventry}[7][.25em]{
  \begin{tabular*}{\maincolumnwidth}{l@{\extracolsep{\fill}}r}%
    % skip the company name and location line if both are empty, allowing one to show multiple roles within the same company without repeating it
    \ifboolexpr{%
      test {\ifstrempty{#4}}
      and
      test {\ifstrempty{#5}}}%
      {}%
      {{\bfseries #4} & {\bfseries #5}\\}%
    {\itshape #3\ifstrempty{#6}{}{, #6}} & {\itshape #2}\\%
  \end{tabular*}%
  \ifx&#7&%
  \else{\\%
    \begin{minipage}{\maincolumnwidth}%
      \small#7%
    \end{minipage}}\fi%
  \par\addvspace{#1}}

\@initializebox{\cvitemwithcommentmainbox}
\@initializelength{\cvitemwithcommentmainlength}
\@initializelength{\cvitemwithcommentcommentlength}
\renewcommand*{\cvitemwithcomment}[4][.25em]{%
  \savebox{\cvitemwithcommentmainbox}{\ifstrempty{#2}{}{\hintstyle{#2}: }#3}%
  \setlength{\cvitemwithcommentmainlength}{\widthof{\usebox{\cvitemwithcommentmainbox}}}%
  \setlength{\cvitemwithcommentcommentlength}{\maincolumnwidth-\separatorcolumnwidth-\cvitemwithcommentmainlength}%
  \begin{minipage}[t]{\cvitemwithcommentmainlength}\usebox{\cvitemwithcommentmainbox}\end{minipage}%
  \hfill% fill of \separatorcolumnwidth
  \begin{minipage}[t]{\cvitemwithcommentcommentlength}\raggedleft\small\itshape#4\end{minipage}%
  \par\addvspace{#1}}

\renewenvironment{thebibliography}[1]%
  {%
    \bibliographyhead{\refname}%
%    \small%
    \begin{list}{\bibliographyitemlabel}%
      {%
        \setlength{\topsep}{0pt}%
        \setlength{\labelwidth}{0pt}%
        \ifthenelse{\equal{\bibliographyitemlabel}{}}%
          {\setlength{\labelsep}{0pt}}%
          {\setlength{\labelsep}{\separatorcolumnwidth}}%
        \leftmargin\labelwidth%
        \advance\leftmargin\labelsep%
        \@openbib@code%
        \usecounter{enumiv}%
        \let\p@enumiv\@empty%
        \renewcommand\theenumiv{\@arabic\c@enumiv}}%
        \sloppy%
        \clubpenalty4000%\@clubpenalty \clubpenalty%
        \widowpenalty4000%
        \sfcode`\.\@m%
        \sfcode `\=1000\relax}%
  {%
    \def\@noitemerr{\@latex@warning{Empty `thebibliography' environment}}%
    \end{list}}


%-------------------------------------------------------------------------------
%                letter style definition
%-------------------------------------------------------------------------------
% commands
\renewcommand*{\recomputeletterbodylengths}{%
  \recomputecvbodylengths%
  \setlength{\parskip}{6\p@}}

\renewcommand*{\makeletterclosing}{%
  \@closing\ifthenelse{\isundefined{\@signature}}{\\[3em]}{\\[1em]}% shrink space when signature is set
  \ifthenelse{\isundefined{\@signature}}{}{{\@signature\\}}
  {\bfseries\@firstname~\@lastname}%
  \ifthenelse{\isundefined{\@enclosure}}{}{%
    \\%
    \vfil%
    {\color{letterclosingcolor}\itshape\enclname: \@enclosure}}%
    \vfil}


\endinput


%% end of file `moderncvbodyiii.sty'.
