%    \iffalse meta-comment
%%
%% File: figlatex.dtx Copyright (C) 2002--2005 V. Danjean, A. Legrand
%%    Vincent.Danjean@ens-lyon.org
%%    Arnaud.Legrand@ens-lyon.org
%%
%% 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 2
%% 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, write to the Free Software
%% Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
%%
%
%<*dtx>
          \ProvidesFile{figlatex.dtx}
%</dtx>
%<package>\NeedsTeXFormat{LaTeX2e}%
%<package>\ProvidesPackage{figlatex}%
%<config> \ProvidesFile{figlatex.cfg}%
%<compat> \ProvidesPackage{texgraphicx}%
%    \fi
%         \ProvidesFile{figlatex.dtx}
[2021/10/26 v2.4.3 No changes in figlatex]
% \iffalse
%<*driver>
\documentclass{ltxdoc}
\usepackage[latin1]{inputenc}
\usepackage[french,english]{babel}
\NoAutoSpaceBeforeFDP
\EnableCrossrefs
\CodelineIndex
\RecordChanges
\setcounter{IndexColumns}{2}    % make a twocolumn index
\setlength{\columnseprule}{0pt} % no rules between columns ...
\setlength{\columnsep}{2em}     % ... but more spacing instead.
\setcounter{unbalance}{4}
\setlength{\IndexMin}{100pt}
%%%%\OnlyDescription  % uncomment this line to suppress printing the source code
\makeatletter
% don't show underfull hboxes in index/glossary:
\g@addto@macro{\IndexParms}{\hbadness=10000}
\g@addto@macro{\GlossaryParms}{\hbadness=10000}
\makeatother
\begin{document}
  \DocInput{figlatex.dtx}
  \PrintIndex
  \PrintChanges
\end{document}
%</driver>
% \fi
%
% \GetFileInfo{figlatex.dtx}
%
% \DoNotIndex{\#,\$,\%,\&,\@,\\,\{,\},\^,\_,\~,\ }
% \DoNotIndex{\def,\long,\edef,\xdef,\gdef,\let,\global}
% \DoNotIndex{\if,\ifnum,\ifdim,\ifcat,\ifmmode,\ifvmode,\ifhmode,%
%             \iftrue,\iffalse,\ifvoid,\ifx,\ifeof,\ifcase,\else,\or,\fi,\loop,\do}
% \DoNotIndex{\box,\copy,\setbox,\unvbox,\unhbox,\hbox,%
%             \vbox,\vtop,\vcenter}
% \DoNotIndex{\@empty,\immediate,\write}
% \DoNotIndex{\egroup,\bgroup,\expandafter,\begingroup,\endgroup}
% \DoNotIndex{\divide,\advance,\multiply,\count,\dimen}
% \DoNotIndex{\relax,\space,\string}
% \DoNotIndex{\csname,\endcsname,\@spaces,\openin,\openout,%
%             \closein,\closeout}
% \DoNotIndex{\catcode,\endinput}
% \DoNotIndex{\jobname,\message,\read,\the,\noexpand}
% \DoNotIndex{\hsize,\vsize,\hskip,\vskip,\kern,\hfil,\hfill,\hss}
% \DoNotIndex{\m@ne,\z@,\@m,\z@skip,\@ne,\tw@,\p@}
% \DoNotIndex{\DeclareRobustCommand,\DeclareOption,\newcommand,\newcommand*}
% \DoNotIndex{\newcount,\newif,\newlinechar,\newread,\newtoks,\newwrite}
% \DoNotIndex{\dp,\wd,\ht,\vss,\unskip,\ifthenelse}
%
% \DoNotIndex{\@filef@und,\@nameddef,\@tempa}
% \DoNotIndex{\define@key,\equal,\ExecuteOptions}
% \DoNotIndex{\filename@area,\filename@base,\filename@ext,\filename@parse}
% \DoNotIndex{\Gin@exclamation,\Gin@getbase,\Gin@scalex,\Gin@scaley}
% \DoNotIndex{\Gread@eps,\Gread@pdf,\Gscale@box}
% \DoNotIndex{\IfFileExists,\ifpdf,\input,\InputIfFileExists}
% \DoNotIndex{\MessageBreak,\PackageWarning,\PackageWarningNoLine}
% \DoNotIndex{\ProcessOptions,\RequirePackage,\typeout}
% \DoNotIndex{}
% \DoNotIndex{}
%
% \title{The \textsf{figlatex} package\thanks{This file
%        has version number \fileversion, last
%        revised \filedate.}}
% \author{Arnaud \textsc{Legrand}\and Vincent \textsc{Danjean}}
% \date{\filedate}
% \maketitle
% \begin{abstract}
% This package allows \LaTeX\space to load XFig and SVG figures (or
% subfigures) with the |\includegraphics| command.  
% \end{abstract}
% \CheckSum{207}
%
% \changes{v0.1.1}{2005/03/28}{Version 0.1.1 at last}
% \changes{v0.1.2}{2005/03/29}{Manage index/glossary}
% \changes{v0.1.3}{2008/01/28}{Better support for subfig with texdepends}
% \changes{v0.1.4}{2011/09/25}{Support for svg with texdepends}
% \changes{v2.2.0}{2016/02/09}{No changes in figlatex.dtx}
% \changes{v2.2.1}{2016/02/09}{No changes in figlatex.dtx}
% \changes{v2.2.2}{2016/02/09}{No changes in figlatex.dtx}
% \changes{v2.2.3}{2017/01/08}{No changes in figlatex.dtx}
% \changes{v2.2.4}{2018/05/29}{Add missing required package 'ifthen'}
% \changes{v2.2.4}{2018/05/29}{Fix python syntax for python3}
% \changes{v2.2.5}{2018/09/04}{No changes in figlatex.dtx}
% \changes{v2.2.5}{2018/10/17}{No changes in figlatex.dtx}
% \changes{v2.4.0}{2020/06/01}{Fix path handling for subfig and new
% core LaTeX}
% \changes{v2.4.1}{2020/07/10}{No changes in figlatex.dtx}
% \changes{v2.4.2}{2021/01/03}{No changes in figlatex.dtx}
% \changes{v2.4.3}{2021/04/18}{No changes in figlatex.dtx}
%
% \makeatletter
% \def\SpecialOptionIndex#1{\@bsphack
%     \index{#1\actualchar{\protect\ttfamily#1}
%            (option)\encapchar usage}%
%     \index{options:\levelchar{\protect\ttfamily#1}\encapchar
%            usage}\@esphack}
% \def\SpecialFileIndex#1{\@bsphack
%     \index{#1\actualchar{\protect\ttfamily#1}
%            (file)\encapchar usage}%
%     \index{files:\levelchar{\protect\ttfamily#1}\encapchar
%            usage}\@esphack}
% \def\SpecialMainOptionIndex#1{\@bsphack\special@index{#1\actualchar
%                                       {\string\ttfamily\space#1}
%                                          (option)\encapchar main}%
%     \special@index{options:\levelchar{%
%                    \string\ttfamily\space#1}\encapchar
%            main}\@esphack}
% \def\option{\begingroup
%    \catcode`\\12
%    \MakePrivateLetters \mym@cro@ \iffalse}
% \long\def\mym@cro@#1#2{\endgroup \topsep\MacroTopsep \trivlist
%    \edef\saved@macroname{\string#2}%
%   \def\makelabel##1{\llap{##1}}%
%   \if@inlabel
%     \let\@tempa\@empty \count@\macro@cnt
%     \loop \ifnum\count@>\z@
%       \edef\@tempa{\@tempa\hbox{\strut}}\advance\count@\m@ne \repeat
%     \edef\makelabel##1{\llap{\vtop to\baselineskip
%                                {\@tempa\hbox{##1}\vss}}}%
%     \advance \macro@cnt \@ne
%   \else  \macro@cnt\@ne  \fi
%   \edef\@tempa{\noexpand\item[%
%      #1%
%        \noexpand\PrintMacroName
%      \else
%        \noexpand\PrintEnvName
%      \fi
%      {\string#2}]}%
%   \@tempa
%   \global\advance\c@CodelineNo\@ne
%    #1%
%       \SpecialMainIndex{#2}\nobreak
%       \DoNotIndex{#2}%
%    \else
%       \SpecialMainOptionIndex{#2}\nobreak
%    \fi
%   \global\advance\c@CodelineNo\m@ne
%   \ignorespaces}
% \let\endoption \endtrivlist
% \def\DescribeOption{\leavevmode\@bsphack\begingroup\MakePrivateLetters
%   \Describe@Option}
% \def\Describe@Option#1{\endgroup
%               \marginpar{\raggedleft\PrintDescribeEnv{#1}}%
%               \SpecialOptionIndex{#1}\@esphack\ignorespaces}
% \def\DescribeFile{\leavevmode\@bsphack\begingroup\MakePrivateLetters
%   \Describe@Option}
% \def\Describe@File#1{\endgroup
%               \marginpar{\raggedleft\PrintDescribeEnv{#1}}%
%               \SpecialFileIndex{#1}\@esphack\ignorespaces}
% \makeatother
% \MakeShortVerb{\|}
%
% \section{Introduction}
%
% \subsection{General}
% \DescribeMacro{\includegraphics}
% This package allows to load XFig figures from \LaTeX\space sources with
% the |\includegraphics| command from the |graphicx| package:
% \begin{verbatim}
% \includegraphics[width=\linewidth]{myfig.fig}
% \end{verbatim}
%
% This package does not convert by itself XFig figures (see package
% |texdepends| for that). It only diverts the loading functions so
% that \LaTeX\space includes the |.pstex_t| or the |.pdftex_t|.
%
% \subsection{Options}
% Available options for this package:
% \begin{description}
% \item[debug~:] \DescribeOption{debug}more messages written while compiling
% \end{description}
%
% \DescribeFile{figlatex.cfg}
% \DescribeMacro{\debug}
% When the package is loaded, it tries to read a |figlatex.cfg|
% file. This file can contains |\debug| to
% enable this option site wide.
%
% \subsection{Subfigures}
%
% Sometimes, several figures made with XFig should be similar. It is
% possible to make only one XFig figure and then create subfigures
% which contains only a subset of the depths of the original figure.
%
% \StopEventually{
% }
% \section{Implementation}
%
% \subsection{figlatex}
%    \begin{macrocode}
%<*package>
%    \end{macrocode}
%
% Options definitions
% \begin{option}{debug}
%    \begin{macrocode}
\newif\ifFL@debug
\DeclareOption{debug}{%
  \global\FL@debugtrue%
}
%    \end{macrocode}
% \end{option}
% 
% We load the config file if it exists.
% Commands for the config file are local.
%    \begin{macrocode}
{
%    \end{macrocode}
% \begin{macro}{\debug}
%    \begin{macrocode}
  \def\debug{%
    \ExecuteOptions{debug}%
  }
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
  \InputIfFileExists{figlatex.cfg}{%
    \typeout{***************************************^^J%
             * Local config file figlatex.cfg used *^^J%
             ***************************************}
  }{%
    \typeout{Found no configuration file for figlatex}
  }
}
%    \end{macrocode}
% Run the options
%    \begin{macrocode}
\ProcessOptions
%    \end{macrocode}
% and requires some packages
%    \begin{macrocode}
\RequirePackage{ifthen}
\RequirePackage{ifpdf}
\RequirePackage{graphicx}
\RequirePackage{xstring}
%    \end{macrocode}
% XFig uses heavily the color package
%    \begin{macrocode}
\RequirePackage{color}
\RequirePackage{epstopdf}
%    \end{macrocode}
% \begin{macro}{\FL@dmessage}
%   Write the message only if debug is set
%    \begin{macrocode}
\def\FL@dmessage#1{% 
  \ifFL@debug%
    \message{#1}%
  \fi%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\Ginclude@rawtex}
%   |.pstex_t| or |.pdftex_t| are loaded with |\input|
%    \begin{macrocode}
\def\Ginclude@rawtex#1{%
  \FL@dmessage{<#1>}%
  \bgroup%
  \def\@tempa{!}%
  \ifx\Gin@scaley\@tempa%
    \let\Gin@scaley\Gin@scalex%
  \else%
    \ifx\Gin@scalex\@tempa\let\Gin@scalex\Gin@scaley\fi%
  \fi%
  \hbox{%
    \Gscale@box{\Gin@scalex}[\Gin@scaley]{%
      \def\Gin@scalex{1}%
      \let\Gin@scaley\Gin@exclamation% needed for pdflatex
      \FL@dmessage{<loading rawtex #1>}%
      \input{#1}}}%
  \egroup}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\Ginclude@figtex}
%   |.fig| are loaded with |\includegraphics| after modifying the name
%    \begin{macrocode}
\def\Ginclude@figtex#1{%
  \message{<#1>}%
  \bgroup%
  \xdef\FL@filename{#1}%
  \filename@parse{\FL@filename}%
  \xdef\FL@filename{\filename@area\filename@base.\FL@figext}%
  \FL@dmessage{<****loading fig \FL@filename>}%
  \FL@includerawtexgraphics[]{\FL@filename}%
  \egroup}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\Gread@figtex}
%   |.fig| bounding box is the same as the corresponding |.pstex_t| or |.pdftex_t|
%    \begin{macrocode}
\newcommand{\Gread@figtex}[1]{%
  %\typeout{Oh, file exists #1}%
  \Gread@rawtex{#1}%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\Ginclude@svgtex}
%   |.svg| are loaded with |\includegraphics| after modifying the name
%    \begin{macrocode}
\def\Ginclude@svgtex#1{%
  \message{<#1>}%
  \bgroup%
  \xdef\FL@filename{#1}%
  \filename@parse{\FL@filename}%
  \xdef\FL@filename{\filename@area\filename@base.\FL@svgext}%
  \FL@dmessage{<****loading svg \FL@filename>}%
  \FL@includerawtexgraphics[]{\FL@filename}%
  \egroup}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\Gread@svgtex}
%   |.svg| bounding box is the same as the corresponding |.pstex_t| or |.pdftex_t|
%    \begin{macrocode}
\newcommand{\Gread@svgtex}[1]{%
  %\typeout{Oh, file exists #1}%
  \Gread@rawtex{#1}%
}
%    \end{macrocode}
% \end{macro}
% Declare the right things depending whether we build a DVI or a PDF file.
%    \begin{macrocode}
\ifpdf
%    \end{macrocode}
% PDF part
%    \begin{macrocode}
  \def\FL@figext{pdftex_t}%
  \def\FL@svgext{pdftex_t}%
%    \end{macrocode}
% To read bounding box information:
%    \begin{macrocode}
  \let\Gread@rawtex\Gread@pdf%
  \DeclareGraphicsRule{.pdftex}{pdf}{*}{}%
  \DeclareGraphicsRule{.pdftex_t}{rawtex}{.pdftex}{}%
  \DeclareGraphicsRule{.fig}{figtex}{.pdftex}{}%
  \DeclareGraphicsRule{.svg}{svgtex}{.pdftex}{}%
\else
%    \end{macrocode}
% DVI part
%    \begin{macrocode}
  \def\FL@figext{pstex_t}%
  \def\FL@svgext{pstex_t}%
%    \end{macrocode}
% To read bounding box information:
%    \begin{macrocode}
  \let\Gread@rawtex\Gread@eps%
  \DeclareGraphicsRule{.pstex}{eps}{*}{}%
  \DeclareGraphicsRule{.pstex_t}{rawtex}{.pstex}{}%
  \DeclareGraphicsRule{.fig}{figtex}{.pstex}{}%
  \DeclareGraphicsRule{.svg}{svgtex}{.pstex}{}%
\fi
%    \end{macrocode}
%   This command is not really necessary here (code could be added in
%   |\Ginclude@figtex|). However, it's very convinient for the
%   |texdepends| package.
%    \begin{macrocode}
\newcommand{\FL@includerawtexgraphics}[2][]{%
  \includegraphics[#1]{#2}%
}
%    \end{macrocode}
% Addition of the |subfig=name| key for the options of the 
% |\includegraphicx[..]{..}| macro.
%    \begin{macrocode}
\def\FL@exclamation{!}%
\let\FL@subfig@name\FL@exclamation%
\define@key{Gin}{subfig}{%
  \typeout{using subfig #1}%
  \def\FL@subfig@name{#1}%
}
\def\FL@sepdefault{_}%
%    \end{macrocode}
% We should ckeck if the \#1 file exists (XXX.subfig)
% This is not yet done but texdepends divert this macro
% to record the dependency
%    \begin{macrocode}
\def\FL@subfig@check#1{%
}
%    \end{macrocode}
% We divert |\Gin@getbase| to modify the file name if the |subfig| key
% is used.
%    \begin{macrocode}
\def\FL@Gin@getbase#1{%
  \typeout{In getbase #1 with \FL@subfig@name / \FL@exclamation}%
  \ifx\FL@subfig@name\FL@exclamation%
  \else%
  \typeout{getbase lets go (\filename@area)(\filename@base)(#1)}%
  \IfStrEq*{#1}{.fig}{%
    % If we're including a subfig
    \IfFileExists{\filename@area\filename@base#1}{%
      % If the original .fig file exists, just change the name so that
      % it comprises the full path (file has been looked into
      % texgraphics, etc.)
      % Warning: the found filename is quoted :-(
      \StrBetween[1,2]{\@filef@und}{"}{"}[\FL@filename@unquoted]
      \filename@parse{\FL@filename@unquoted}%
      % Check if the subfig file exists
      \FL@subfig@check{\filename@area\filename@base.subfig}%
    }{%
      % Else, write a warning (LaTeX will warn as well but it doesn't
      % hurt)
      \PackageWarning{figlatex}{No file 
        '\filename@area\filename@base#1'}%
    }
    % Add the subfig suffix to the fig name.
    \edef\filename@base{\filename@base\FL@sepdefault\FL@subfig@name}%
  }{%
  }%
  \IfStrEq*{#1}{.svg}{%
    % If we're including a subfig
    \IfFileExists{\filename@area\filename@base#1}{%
      % If the original .svg file exists, just change the name so that
      % it comprises the full path (file has been looked into
      % texgraphics, etc.)
      % Warning: the found filename is quoted :-(
      \StrBetween[1,2]{\@filef@und}{"}{"}[\FL@filename@unquoted]
      \filename@parse{\FL@filename@unquoted}%
      % Check if the subfig file exists
      \FL@subfig@check{\filename@area\filename@base.subfig}%
    }{%
      % Else, write a warning (LaTeX will warn as well but it doesn't
      % hurt)
      \PackageWarning{figlatex}{No file 
        '\filename@area\filename@base#1'}%
    }
    % Add the subfig suffix to the svg name.
    \edef\filename@base{\filename@base\FL@sepdefault\FL@subfig@name}%
  }{%
  }%
  \fi%
  \FL@orig@Gin@getbase{#1}%
}
\let\FL@orig@Gin@getbase\Gin@getbase
\let\Gin@getbase\FL@Gin@getbase

%\@namedef{Gin@rule@.fig}#1{%
  
%}
%    \end{macrocode}
%    \begin{macrocode}
%</package>
%    \end{macrocode}
% The sample config file |figlatex.cfg|\ldots
%    \begin{macrocode}
%<*config>
%    \end{macrocode}
%    \begin{macrocode}
 %\debug
%    \end{macrocode}
%    \begin{macrocode}
%</config>
%    \end{macrocode}
% \subsection{texgraphicx}
%    \begin{macrocode}
%<*compat>
%    \end{macrocode}
% |texgraphicx.sty| was only a wrapper arround |figlatex.sty|. Now, an
% error is generated.
%    \begin{macrocode}
\PackageError{texgraphicx}{'texgraphicx' is now 
  gone\MessageBreak%
  Please, switching to 'figlatex' 
  package\MessageBreak}{}
\ProcessOptions
%    \end{macrocode}
%    \begin{macrocode}
%</compat>
%    \end{macrocode}
% \Finale
\endinput
