%\iffalse meta-comment
%
% Copyright (C) 2012 by Maïeul Rouquette 
%
% This file may be distributed and/or modified under the 
% conditions of the LaTeX Project Public License, either 
% version 1.3 of this license or (at your option) any later 
% version. The latest version of this license is in: 
%
% http://www.latex-project.org/lppl.txt 
%
% and version 1.3 or later is part of all distributions of 
% LaTeX version 2003/06/01 or later.
% This work has the LPPL maintenance status "unmaintained".
%
% \fi

% \iffalse
%<*driver>
\documentclass{ltxdoc}
\usepackage{polyglossia,csquotes}
\setmainlanguage{english}
\usepackage[noreledmac]{eledmac}
\usepackage{eledform,tikz,tikz-qtree}
\usepackage{hyperref}
\EnableCrossrefs
\CodelineIndex
\RecordChanges
\begin{document}
\DocInput{eledform.dtx} 
\end{document}
%</driver>
% \fi
% \CheckSum{106}
% \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{v1.0}{2012/10/01}{First public release.}
% \changes{v1.1}{2012/10/08}{News options to change the order of the elements.}
% \changes{v1.1a}{2015/13/08}{Package unmaintened.}
% \GetFileInfo{eledform.sty}
%\DoNotIndex{\csgdef,\if,\fi,\else,\listgadd}
%
%\title{The eledform extension for eledmac}
% \author{Maïeul Rouquette \\ maieul at maieul dot net}
% \date{\fileversion\space\filedate}
% \maketitle
% \textbf{This package is unmaintened. 
% Maïeul Rouquette has no more time to maintain it.
% }
% \begin{abstract}
% The \emph{eledmac} package provides tools to make critical editions of texts.
% But it doesn't provide any formalism to note the textual variants: each user has to make his own formalism.
% This package tries to provide a formalism
% which distinguishes between the \emph{formal} notation of textual variants and their typographical notation\footnote{The original idea of this package is described at \url{http://geekographie.maieul.net/Formaliser-les-variantes}. You can suggest new features or report bugs at \url{https://github.com/maieul/eledform/issues}.}.
% \end{abstract}
% \tableofcontents
% \section{Use}
% \subsection{One Example}
% \subsubsection{Without formalism}
% Suppose this case :
% \begin{enumerate}
% \item One text, with fives manuscripts: P, A, B, C, D.
% P is the manuscript which is used as reference.
% Variants in A, B, C, D are shown in the apparatus.
% \item The pseudo-word \enquote{lorem} has these variants:
%     \begin{description}
%       \item[A and B]the word is omitted.
%      \item[C]the word is replaced by \enquote{loram}.
%      \item[D]the word is replaced by \enquote{lorim}. 
%     \end{description}
% \end{enumerate}
% Without formalism, you could write:
% \begin{verbatim}
% \edtext{lorem}{\Afootnote{AB \emph{omit}; C loram; D lorim}}
% \end{verbatim}
% Which produces this critical note:
% \begin{quote}
% lorem] AB omit; C loram; D lorim
% \end{quote}
% There are some limits for this method:
% \begin{itemize}
% \item If we want to change display, we must changes all notes.
% \item We can't produce statistics.
% \item Difficulty to export in other format than \LaTeX.
% \item No method to check if we're making mistakes regarding to the manuscripts.
% \end{itemize}
% \subsubsection{With formalism}
% To describe the same situation, we propose this formalism :
% \begin{verbatim}
%\var{lorem}{A,B}{
%{{C}{loram}},
%{{D}{lorim}}
%}
% \end{verbatim}
% With \emph{eledform}, this will produce the same result as the non-formalised form,
% but without the described inconveniences.
% You can see an example in the file \href{example.tex}{example.tex}, which produces \href{example.pdf}{example.pdf}.
% \subsection{References}
% \subsubsection{Declare the manuscripts}
% \DescribeMacro{\manuscripts}
% You have to use \cs{Manuscripts}\marg{list}
% to provide the list of manuscripts used in the apparatus.
% \LaTeX\ prints a warning message in the log file if you're referring to a
% manuscript that is not declared before.
% It also prints an error in the resulting file.
% The list of manuscripts is a comma separated list:
% \begin{verbatim}
% \manuscripts{A,B,C,D}
% \end{verbatim}
% \subsubsection{Declare variants}
% \DescribeMacro{\var}
% The main macro is \cs{var}\oarg{short}\marg{lemma}\marg{del}\marg{variants}\oarg{other}.
% This macro takes five arguments, two are optional.
% \begin{description}
%   \item[\meta{short}  (optional)]an abbreviated version of the lemma for the notes.
%   \item[\meta{lemma}]the lemma which has variants.
%   \item[\meta{del}]a comma separated list of manuscripts where the lemma is ommited.
%   \item[\meta{variants}]a comma separated list of variants. Each variant has the form \verb+{+\marg{manuscripts}\marg{variant}\verb+}+, where:
%     \begin{description}
%      \item[\meta{manuscripts}]a comma separated list of manuscripts where the variant is.
%      \item[\meta{variant}]the variant itself.
%      \end{description}
%   \item[\meta{other}(optional)]other code linked to the lemma, for example a call to an critical footnote. 
% \end{description}
% \subsubsection{Customize}
% \DescribeMacro{\manposition}
% By default (since v1.1), the manuscripts are printed after the variant. 
% With \cs{manposition}\marg{position}, where position is any text except \verb+last+, you can change it.
%
% \DescribeMacro{\omitposition}
% By default, the omission are printed at the begining of the variants. 
% With \cs{omitposition}\marg{position}, where position is any text except \verb+first+, you can change it.
% 
% \DescribeMacro{\varseries}
% By default, the notes for textual variants are printed in the A series of footnotes.
% With \cs{varseries}\marg{letter}, you can change it.
%
% \DescribeMacro{\omittext}
% When a manuscript omits a lemma, \emph{eledform} prints \verb|\emph{omit}|.
% You can change it with \cs{omittext}\marg{text}.
% 
% \DescribeMacro{\manvarseparator}
% By default, a non breakable space is printed between the manuscript letter and the variant.
% You can change it with \cs{manvarseparator}\marg{separator}.
%
% \DescribeMacro{\varseparator}
% By default, a breakable space is printed between each variant of a lemma. 
% You can change it with \cs{varseparator}\marg{separator}.
%\StopEventually{\PrintChanges}
% \section{Implementation}
%    \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{eledform}[2015/08/13 v1.1a formalism for eledmac]
\RequirePackage{eledmac}
%    \end{macrocode}
% \subsection{Define manuscripts}
% \begin{macro}{\manuscripts@}
% The \cs{manuscripts@} macro is an etoolbox list.
%    \begin{macrocode}
\def\manuscripts@{}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\manuscripts}
% The \cs{manuscripts} macro only fills the \cs{manuscripts} macro.
%    \begin{macrocode}
\newcommand{\manuscript}[1]{%
    \renewcommand{\do}[1]{\listgadd{\manuscripts@}{##1}}%
    \docsvlist{#1}%
}
%    \end{macrocode}
% \end{macro}
% \subsection{Print the critical notes}
% \begin{macro}{\var}
% The \cs{var} macro is the only public macro, which calls all private macros.
%    \begin{macrocode}
\newcommandx*{\var}[5][1,5,usedefault]{%
%    \end{macrocode}
% First, call the \cs{edtext} macro.
%    \begin{macrocode}
    \edtext{#2}{%
%    \end{macrocode}
% If the \cs{var} macro is called with the optional first argument, 
% we put it into the \cs{lemma} macro.
%    \begin{macrocode}
        \ifstrempty{#1}{}{\lemma{#1}}%
%    \end{macrocode}
% The \cs{varnote@} macro is an Xfootnote macro defined by user, with the \cs{varnote} macro (cf.~\pageref{varnote}).
%    \begin{macrocode}
        \varnote@{%
%    \end{macrocode}
% In the case where the manuscripts with omission must be printed in first position.
% \begin{macrocode}
        \ifdefstring{\omitposition@}{first}{
% \end{macrocode}
% If the third argument is not empty, we call the \cs{del@} macro, which print the manuscript where the lemma is omitted
%    \begin{macrocode}
            \ifstrempty{#3}{}%
                {\del@{#3}%
%    \end{macrocode}
%  If the third and fourth argument are both not empty, we print the separator between variants.
%    \begin{macrocode}
                \ifstrempty{#4}%
                    {}%
                    {\varseparator@}%
                }%
%    \end{macrocode}
% And so, we print all the variants which are not an omission.
%  \begin{macrocode}
                    \var@{#4}%
%    \end{macrocode}
% The same thing, but if the manuscripts with omission must be printed in last position.
% \begin{macrocode}
            }%
            {%
            \ifstrempty{#4}%
                    {}%
                    {\var@{#4}%
                    \ifstrempty{#3}%
                        {}%
                        {\varseparator@}%
                    }%
            \ifstrempty{#3}{}{\del@{#3}}%
            }%
        }%
% \end{macrocode}
% Eventually, we add the critical notes which are not for textual criticism.
% \begin{macrocode}
    #5%
    }%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\print@manuscript}
% The \cs{print@manuscripts} command only prints the manuscripts where a variant exists.
%    \begin{macrocode}
\newcommand{\print@manuscript}[1]{%
    \ifinlist{#1}{\manuscripts@}%
        {#1}%
        {\eledmac@warning{Manuscript #1 not declared, p.\the\page@num  ; l.\the\line@num}\underline{Manuscript #1 not declared!}}%
    }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\del@}
% The \cs{del@} macro prints the manuscripts where the lemma is omitted,
% and after that, the text to indicate this omission.
%    \begin{macrocode}
\newcommand{\del@}[1]{%
    \renewcommand{\do}[1]{%
        \print@manuscript{##1}%
    }%
    \ifdefstring{\manposition@}{last}%
            {\omittext@\manvarseparator@\docsvlist{#1}}%
            {\docsvlist{#1}\manvarseparator@\omittext@}%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\var@}
% The \cs{var@} macro loops on the non omission variants. 
% Except for the first variant, it prints the variant separator.
%    \begin{macrocode}
\newcommand{\var@}[1]{%
    \newif\iffirst%
    \firsttrue%
    \renewcommand{\do}[1]{\iffirst\firstfalse\else\varseparator@\fi{\var@@##1}}%
    \docsvlist{#1}%
    }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\var@@}
% The \cs{var@@} macro prints manuscripts for a singular variant
% and this variant after that.
%    \begin{macrocode}
\newcommand{\var@@}[2]{%
    \renewcommand{\do}[1]{%
        \print@manuscript{##1}%
        }%
    \ifdefstring{\manposition@}{last}%
            {#2\manvarseparator@\docsvlist{#1}}%
            {\docsvlist{#1}\manvarseparator@#2}%
    }
%    \end{macrocode}
% \end{macro}
% \subsection{Customization}
% \subsubsection{The footnote series}
% \begin{macro}{\varnote@}\label{varnote}
% The \cs{varnote@} macro is only a reference to a critical footnote macro of eledmac.
% The default  is \cs{Afootnote}.
%    \begin{macrocode}
\let\varnote@\Afootnote
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\varseries}
% The \cs{varseries} macro redefines this reference.
%    \begin{macrocode}
\newcommand{\varseries}[1]{\letcs{\varnote@}{#1footnote}}
%    \end{macrocode}
% \end{macro}
% \subsubsection{Display options}
% \begin{macro}{\new@eledform@custom}
% The \cs{new@eledform@custom} macro has two actions :
% \begin{enumerate}
%    \item Define the default value of an option (\cs{option@}).
%    \item Create the command which modifies this option (\cs{option}).
% \end{enumerate}
%    \begin{macrocode}
\newcommand{\new@eledform@custom}[2]{%
    \csgdef{#1@}{#2}%
    \expandafter\newcommand\csname#1\endcsname[1]{\csgdef{#1@}{##1}}%
}
%    \end{macrocode}
% \end{macro}
% And so, we can call \cs{new@eledform@custom} to define options for user.
% \begin{macro}{\omittext}
% \begin{macro}{\manvarseparator}
% \begin{macro}{\varseparator}
% \begin{macro}{\manposition}
% \begin{macro}{\omitposition}
%    \begin{macrocode}
\new@eledform@custom{omitposition}{first}
\new@eledform@custom{manposition}{last}
\new@eledform@custom{omittext}{\emph{omit}}
\new@eledform@custom{manvarseparator}{~}
\new@eledform@custom{varseparator}{\space}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \subsection{Stemma of the code}
% The next figure is a stemma of the code.
%
% \hspace{-3cm}\noindent\input{include/stemma}
% \newpage
% \addcontentsline{toc}{section}{Changes}
% \PrintChanges
% \addcontentsline{toc}{section}{Index}
% \PrintIndex
% \Finale
\endinput