% \iffalse meta-comment 
% -*- coding: iso-8859-15 -*-
% --------------------------------------------------------------------
% 
% Copyright (C) 2004, 2008 by Josselin Noirel et Yvon Henel 
% 
% Y. Henel dit � le TeXnicien de surface � 
% <le.texnicien.de.surface@wanadoo.fr>
%
% --------------------------------------------------------------------
% 
% This file may be distributed and/or modified under the conditions of
% the LaTeX Project Public License, either version 1.2 of this license
% or (at your option) any later version. The latest version of this
% license is in: 
%
%    <URL: http://www.latex-project.org/lppl.txt >
%
% and version 1.2 or later is part of all distributions of LaTeX
% version 1999/12/01 or later. 
%
% --------------------------------------------------------------------
% \fi
%
% \iffalse
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\def\fileversion{v1}
%<package>\def\filedate{2008/08/14}
%<package>\def\fileinfo{fichier drac.sty par J. Noirel et Y. Henel}
%<package>\ProvidesPackage{drac}
%<package>   [\filedate\space\fileversion\space\fileinfo]
%
%<*driver>
\documentclass[a4paper]{ltxdoc}
\usepackage{drac}
\usepackage{url,array,xspace} 
\usepackage[latin9]{inputenc} 
\usepackage[T1]{fontenc}
\IfFileExists{lmodern.sty}{\usepackage{lmodern}}{}
\usepackage{ifpdf}
\usepackage{textcomp}
\usepackage{calc}
\let\cs=\relax
\DeclareRobustCommand*{\cs}[1]{{\normalfont\ttfamily\char`\\#1}}
\renewcommand*{\meta}[1]{{\normalfont\textlangle{\itshape #1\/}\textrangle}}
\newcommand*{\fctt}{{\normalfont\ttfamily fr.comp.text.tex}}
\makeatletter
\DoNotIndex{\@tempa,\@tempb,\@tempc,\csname,\endcsname,\noexpand,\def,^^A
  \edef,\ifx,\else,\endinput,\expandafter,\fi,\let,\newcommand,\relax,^^A
  \string,\@ifstar}
\makeatother
\usepackage[english,frenchb]{babel}
% Commentez la ligne suivante pour avoir un document avec le code comment�
\OnlyDescription
\EnableCrossrefs
\CodelineIndex
\RecordChanges
\GlossaryPrologue{%
  \section*{{Changements}}}
\IndexPrologue{\section*{Index}%
  Les nombres en italique renvoient � la page o� l'entr�e est d�crite; les
  nombres soulign�s renvoient � la ligne de code de la d�finition; les
  nombres en caract�res romains renvoient � la ligne de code o� l'entr�e est
  utilis�e.}
\newcommand\BOP{\discretionary{}{}{}}
\begin{document}
\DocInput{drac-fr.dtx}
\end{document}
%</driver>
% \fi
% \CheckSum{72}
%
% \CharacterTable
%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%   Digits        \0\1\2\3\4\5\6\7\8\9
%   Exclamation   \!     Double quote  \"     Hash (number) \#
%   Dollar        \$     Percent       \%     Ampersand     \&
%   Acute accent  \'     Left paren    \(     Right paren   \)
%   Asterisk      \*     Plus          \+     Comma         \,
%   Minus         \-     Point         \.     Solidus       \/
%   Colon         \:     Semicolon     \;     Less than     \<
%   Equals        \=     Greater than  \>     Question mark \?
%   Commercial at \@     Left bracket  \[     Backslash     \\
%   Right bracket \]     Circumflex    \^     Underscore    \_
%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%   Right brace   \}     Tilde         \~}
%
% \changes{v0}{2004/04/22}{A failli �tre la premi�re version publique}
% \changes{v0.1}{2004/05/17}{A manqu� de peu d'�tre la premi�re
% version publique}
% \changes{v0.1}{2004/05/17}{Ajout de \cs{ReDeclareRobActChar}}
% \changes{v1}{2008/08/14}{1\iere version publique}
% \GetFileInfo{drac.sty}
%
% \title{Le module \textsf{drac}\thanks{Ce document correspond au
%     fichier \textsf{drac}~\fileversion, du \filedate.}}
% \author{Josselin Noirel et Yvon Henel}
%
% \maketitle
% \begin{abstract}
%   Ce module d�finit \cs{DeclareRobustActChar} et
%   \cs{ReDeclareRobActChar}.
%
%   On utilise \cs{DeclareRobustActChar} comme
%   \cs{DeclareRobustCommand} mais elle prot�ge le caract�re actif,
%   voir~\path{ltdefns.dtx} dans \path{/latex/base/}. Cela permet, par
%   exemple, d'�crire ce caract�re dans un fichier auxiliaire sans
%   qu'il soit d�velopp�. Il est donc devenu \og robuste\fg au sens
%   des arguments \og mobiles\fg de \LaTeX.
%
%   \cs{ReDeclareRobActChar} permet de red�finir le caract�re actif
%   d�fini pr�alablement par
%   \cs{Declare}\BOP|Robust|\BOP|Act|\BOP|Char| � la mani�re de
%   \cs{renewcommand}. 
% \end{abstract}
% \begin{otherlanguage}{english}
% \begin{abstract}
%   This package provides \cs{DeclareRobustActChar} and
%   \cs{Re}\BOP|Declare|\BOP|Rob|\BOP|Act|\BOP|Char| macros.
%
%   You should have downloaded with this file a file
%   \path{drac-en.dtx} and a file \path{drac.pdf} which 
%   give the English documentation of this package.
% \end{abstract}
% \end{otherlanguage}
% \tableofcontents
% 
% \section{Introduction}
% \begingroup\footnotesize{}
% Lorsqu'elle apparut pour la premi�re fois, le \oldstylenums{8}~avril
% \oldstylenums{2004}, sur \fctt{} dans le fil de discussion \og la
% question � \oldstylenums{100}~euros\fg, le nom de la macro �tait
% \cs{DeclareRobustActiveCharacter} qui avait l'avantage d'�tre
% totalement descriptif mais l'inconv�nient d'�tre long. Pour all�ger
% quelque peu le travail du codeur mais \emph{surtout} pour �viter un
% joyeux bazar dans l'index de cette documentation, j'ai pris sur moi
% de la renommer \cs{DeclareRobustActChar}.
% 
% � la lecture du fil mentionn� ci-dessus, on s'appercevra sans peine
% que ce que je --- je c.-�-d. Y. Henel, \TeX nicien de surface ---
% fis ce fut de passer commande d'un code que Josselin Noirel me
% fournit tr�s aimablement et tout aussi efficacement.
% 
% Je fis mumuse un moment avec le code fourni par Josselin puis
% quelques mois plus tard la vie m'ass�na un de ces coups dont la
% fr�quentation assidue des classiques auraient du me pr�venir mais,
% pour citer un de ses fameux (pseudo?) proverbe chinois, \og
% l'exp�rience n'�claire que le chemin parcouru\fg. Ce qui fait que
% m�me si Josselin, de son c�t� assez occup� avec la fin de ses
% �tudes, me fit parvenir, dans un courriel de f�vrier
% \oldstylenums{2005}, une \oldstylenums{2}\ieme version dans laquelle
% apparut \cs{ReDeclareRobActChar} dans un courriel de f�vrier
% \oldstylenums{2005} je n'�tais gu�re en �tat d'en tirer profit.
% 
% Puis le temps a pass�\dots j'ai sorti la t�te de l'eau et Josselin
% est parti vers d'autres cieux. 
% 
% Le code existe et fonctionne. Alors, plut�t que de le laisser moisir
% dans un coin obscur de mon disque dur, et puisque j'ai pass�
% quelques heures � mettre � jour mes extensions, je me suis d�cid� �
% lancer \texttt{drac} dans le vaste monde. Je me contente de fournir
% l'emballage et porter le b�b� dans mes bras velus jusqu'au serveur
% CTAN le plus proche. 
% 
% On aura compris que je ne m'engage pas du tout � assurer la
% maintenance de ce code si jamais le besoin s'en faisait
% sentir. J'arrive � peu pr�s � comprendre ce que fait Josselin en
% suivant pas � pas ses explications mais je suis bien incapable de me
% hausser � de telles hauteurs. Il est donc temps maintenant de c�der
% le clavier � Josselin. 
% 
% \hspace*{\stretch{4}}Le \TeX nicien de surface\hspace*{\stretch{1}}
% \endgroup
% 
% \section{Utilisation}
% 
%
% La macro \cs{DeclareRobustActChar} a la syntaxe habituelle des
% \cs{newcommand} et cons�urs: elle admet une forme �toil�e selon
% que le caract�re actif acceptera ou non des arguments \cs{long}s
% (c.-�-d. un argument pourra comporter une fin de paragraphe);
% ensuite vient le caract�re actif; un nombre optionnel d'arguments,
% un argument optionnel qui est la valeur optionnelle du premier
% argument, enfin la d�finition proprement dite.  Voil� les syntaxes
% valides: ^^A
% \begin{list}{}{\ttfamily\leftmargin=\leftmargini}\item
% \cs{DeclareRobustActChar}\marg{caract�re actif}[\(n\)]\%\\
% \ \ \oarg{valeur par d�faut du premier argument}\marg{d�finition}\par
% \cs{DeclareRobustActChar}\marg{caract�re actif}[\(n\)]\marg{d�finition}\par
% \cs{DeclareRobustActChar}\marg{caract�re actif}\marg{d�finition}\par
% \cs{DeclareRobustActChar}*\marg{caract�re actif}[\(n\)]\%\\
% \ \ \oarg{valeur par d�faut du premier argument}\marg{d�finition}\par
% \cs{DeclareRobustActChar}*\marg{caract�re actif}[\(n\)]\marg{d�finition}\par
% \cs{DeclareRobustActChar}*\marg{caract�re actif}\marg{d�finition}
% \end{list}
% ^^A
% Suite � quoi le caract�re actif pourra �tre utilis� dans les
% arguments mobiles (dans les arguments de \cs{caption} par exemple)
% et dans les autres cas qui requi�rent des commandes robustes
% (\cs{protected@edef}, \cs{protected@write}, etc.)
% 
% De m�me \cs{ReDeclareRobActChar} a la syntaxe de \cs{renewcommand}
% d'o� les syntaxes possibles:
% ^^A
% \begin{list}{}{\ttfamily\leftmargin=\leftmargini}\item
% \cs{ReDeclareRobActChar}\marg{caract�re actif}[\(n\)]\%\\
% \ \ \oarg{valeur par d�faut du premier argument}\marg{d�finition}\par
% \cs{ReDeclareRobActChar}\marg{caract�re actif}[\(n\)]\marg{d�finition}\par
% \cs{ReDeclareRobActChar}\marg{caract�re actif}\marg{d�finition}\par
% \cs{ReDeclareRobActChar}*\marg{caract�re actif}[\(n\)]\%\\
% \ \ \oarg{valeur par d�faut du premier argument}\marg{d�finition}\par
% \cs{ReDeclareRobActChar}*\marg{caract�re actif}[\(n\)]\marg{d�finition}\par
% \cs{ReDeclareRobActChar}*\marg{caract�re actif}\marg{d�finition}
% \end{list}
% ^^A
% \StopEventually{\PrintChanges\PrintIndex}
% \section{Le code}
% \begin{macro}{\DeclareRobustActChar}
% Nous commen�ons par d�finir \cs{DeclareRobustActChar} (qui ne fait
% pas grand-chose en r�alit�).
% ^^A
%    \begin{macrocode}
% \iffalse
%<*package>
% \fi
\newcommand*{\DeclareRobustActChar}{
  \@ifstar{%
    \def\@tempc{\newcommand*}\@declarerobustactchar}{%
    \def\@tempc{\newcommand}\@declarerobustactchar}%
}
%    \end{macrocode}
% \end{macro}
% ^^A
% \begin{macro}{\ReDeclareRobActChar}
% Et dans la foul�e nous d�finissons \cs{ReDeclareRobActChar} (qui,
% comme la pr�c�dente, ne fait pas grand-chose mais l�g�rement
% diff�remment).
% ^^A
%    \begin{macrocode}
\newcommand*{\ReDeclareRobActChar}{\@ifstar{%
    \def\@tempc{\renewcommand*}\@declarerobustactchar}{%
    \def\@tempc{\renewcommand}\@declarerobustactchar}%
}
%    \end{macrocode}
% ^^A
% \cs{@ifstar} teste la pr�sence d'une �toile.  Selon le cas on
% d�finit \cs{@tempc} en cons�quence.  \cs{@tempc} sera utilis� �
% terme pour prendre en charge la d�finition.  On appelle ensuite 
% \cs{@declarerobustactchar}.
% \end{macro}
% \begin{macro}{\@declarerobustactchar}
% Vient la macro qui abat vraiment du travail:
% \cs{@declarerobustactchar}.  Elle prend un argument qui est le
% caract�re actif (qui est suppos� �tre \emph{d�j�} actif au moment de
% l'appel � \cs{DeclareRobustActChar}).
% ^^A
%    \begin{macrocode}
\newcommand*{\@declarerobustactchar}[1]{%
%    \end{macrocode}
% ^^A
% On conserve les valeurs actuelles de \cs{protect} et
% \cs{@typeset@protect} pour les restituer plus tard.
% ^^A
%    \begin{macrocode}
  \let\@tempa=\protect
  \let\@tempb=\@typeset@protect
%    \end{macrocode}
% ^^A
% \cs{protect} et \cs{@typeset@protect} sont d�finis �quivalents �
% \cs{relax} pour qu'ils ne \og bougent\fg pas pendant le processus de 
% d�veloppement dans \cs{edef}.
% ^^A
%    \begin{macrocode}
  \let\protect=\relax
  \let\@typeset@protect\relax % Devrait �tre le cas
%    \end{macrocode}
% ^^A
% On d�finit le caract�re actif.  Attention s'il n'est pas actif au
% moment de l'utilisation de \cs{DeclareRobustActChar} on risque
% fortement de voir \TeX{} r�ler � cause d'une commande
% \og inaccessible\fg.  Le \meta{caract�re actif} prend comme
% d�finition: 
% ^^A
% \begin{flushleft}\begin{tabular}{@{}l@{}l@{}}
% \meta{caract�re actif} $\stackrel{\mathrm{def}}{\equiv}$ \hskip0pt &
% \cs{ifx}\cs{protect}\cs{@typeset@protect} \\
%    & \ttfamily\ \ \cs{expandafter}\cs{DRAC@real@\meta{caract�re actif}} \\
%    & \cs{else} \\
%    & \ttfamily\ \ \cs{protect}\meta{caract�re actif} \\
%    & \cs{fi} \\
% \end{tabular}\end{flushleft}
% ^^A
% Le test \cs{ifx} permet de conna�tre si l'on est dans un contexte
% d'argument mobile ou non.  Le r�sultat du test est \og vrai\fg si ce
% n'est pas le cas; alors \cs{DRAC@real@\meta{caract�re actif}} est
% ex�cut�e: c'est la commande effectrice qui contiendra dans quelque
% temps la \meta{d�finition} dont nous parlions plus haut.
% Dans le cas o� le test est \og faux\fg, �tant dans un contexte
% d'argument mobile on replace simplement le \meta{caract�re actif} en
% le \cs{prot�geant}.
% Le \cs{expandafter} est l� pour faire dispara�tre la portion de code
% \og \cs{else}\linebreak[0]\dots\linebreak[0]\cs{fi}\fg.
% ^^A
%    \begin{macrocode}
  \edef#1{%
    \noexpand\ifx\protect\@typeset@protect
      \noexpand\expandafter
      \expandafter\noexpand
      \csname DRAC@real@\string#1\endcsname 
    \noexpand\else   % \noexpand\expandafter [JN : pas bon]
      \protect       % \noexpand\expandafter [JN : idem]
      \noexpand#1%
    \noexpand\fi
  }%
%    \end{macrocode}
% ^^A
% Les valeurs initiales de \cs{protect} et \cs{@typeset@protect} sont 
% restitu�es.
% ^^A
%    \begin{macrocode}
  \let\protect=\@tempa
  \let\@typeset@protect=\@tempb
%    \end{macrocode}
% ^^A
% Maintenant on d�finit avec \cs{newcommand} --- par l'interm�diaire
% de \cs{@tempc}, vous souvenez-vous? --- la commande effectrice
% \cs{DRAC@read@\meta{caract�re actif}}.  C'est l'utilisation de
% \cs{newcommand} qui permet d'en propager la syntaxe.  Mais on notera
% que cela interdit notamment la red�finition de la commande
% (autrement dit il se pourrait que le package s'am�liore encore).
% ^^A
%    \begin{macrocode}
  \expandafter\@tempc\csname DRAC@real@\string#1\endcsname
}
%    \end{macrocode}
% ^^A
% \og FIN\fg
% ^^A
%    \begin{macrocode}
\endinput
%    \end{macrocode}
% \end{macro}
% ^^A
% \section{Papillons et limitations}
% Pas de bogue connu � ce jour.  Les limitations elles sont
% nombreuses: ce package n'a pas de grande pr�tention.
% 
% Bien que les macros ici d�finies puissent \emph{a priori}
% fonctionner avec les commandes aussi, nous recommandons d'utiliser
% \cs{DeclareRobustCommand} dans ce but.
% \Finale
% \iffalse
%</package>
% \fi
\endinput
%%% Local Variables: 
%%% mode: doctex
%%% TeX-master: t
%%% fill-column: 70
%%% End: