%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%                                                                          %%
%% easylist.sty v.1.2 by Paul Isambert                                      %%
%% See the documentation for a comment on the implementation.               %% 
%%                                                                          %%
%% This set of macros is published under the LaTeX Project Public License.  %%
%%                                                                          %%
%% Comments, suggestions and bugs:                                          %%
%%                                                                          %%
%% zappathustra@free.fr                                                     %%
%%                                                                          %%
%% http://paulisambert.free.fr/                                             %%
%%                                                                          %%
%% Enjoy!                                                                   %%
%%                                                                          %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{easylist}[2009/01/06 v.1.2 Numbered items with a single command.]

\makeatletter

\newif\ifPilcrow
\newif\ifAt
\newif\ifSharp
\newif\ifAmpersand
\newif\ifDubiousFigure

\newcount\el@CounterTotal
\el@CounterTotal10
\newcount\el@Scratch
\def\el@Advance#1{\advance#1 by 1\relax}

\def\el@NumberCheck#1{%
\expandafter\if#1?%
	\el@Scratch0%
	\def\e@synext##1{\relax}%
\else%
	\ifnum\el@Scratch=10%
		\el@Scratch0%
		\def\e@synext##1?{\relax}%
		\DubiousFiguretrue%
	\else%
		\expandafter\if#1\the\el@Scratch%
			\el@Scratch0%
			\def\e@synext##1{\el@NumberCheck}%
		\else%
			\el@Advance\el@Scratch%
			\let\e@synext\el@NumberCheck%
		\fi%
	\fi
\fi\e@synext{#1}}

\DeclareOption{pilcrow}{\Pilcrowtrue}
\DeclareOption{at}{\Attrue}
\DeclareOption{sharp}{\Sharptrue}
\DeclareOption{ampersand}{\Ampersandtrue}
\DeclareOption*{%
\expandafter\el@NumberCheck\CurrentOption?%
\ifDubiousFigure%
	\PackageError{easylist}{%
	^^J==> `\CurrentOption' is not a valid number (in package options).
	^^J==> It is ignored and there are only 10 counters}{}%
\else%
	\el@CounterTotal\CurrentOption%
\fi\DubiousFigurefalse}
\ProcessOptions\relax

\newcount\el@ControlCounter
\el@ControlCounter1%
\newcount\el@CounterLevel
\el@CounterLevel1%

\def\el@GenericCounter{%
\ifnum\el@ControlCounter>\el@CounterTotal%
	\el@ControlCounter1%
\else%
	\newcounter{List\the\el@ControlCounter}%
	\el@Advance\el@ControlCounter%
	\expandafter\el@GenericCounter%
\fi}

\el@GenericCounter

\newcommand{\el@GenericDef}[3][]{%
\ifnum\el@ControlCounter>\el@CounterTotal%
	\def\easynext[##1]##2##3{\relax}%
	\el@ControlCounter1%
\else%
	\expandafter\gdef\csname #2\the\el@ControlCounter#1\endcsname{#3}%
	\el@Advance\el@ControlCounter%
	\let\easynext\el@GenericDef%
\fi%
\easynext[#1]{#2}{#3}}

\def\el@PreviousItem{0}
\el@GenericDef{FinalMark}{NA}
\el@GenericDef{Mark}{.}
\el@GenericDef{Margin}{0cm}
\el@GenericDef{Numbers}{a}
\el@GenericDef{Style}{}
\el@GenericDef[*]{Style}{}
\el@GenericDef[**]{Style}{}
\el@GenericDef{Indent}{0cm}
\el@GenericDef{Start}{NA}
\el@GenericDef[*]{Start}{NA}
\el@GenericDef{CtrCom}{}
\el@GenericDef{Space}{0cm}
\el@GenericDef[*]{Space}{0cm}
\el@GenericDef{Hide}{0}
\el@GenericDef{Hang}{false}
\el@GenericDef{FinalSpace}{.3em}
\el@GenericDef{Align}{false}

\newif\ifProgressiveStar
\newdimen\el@ProgressiveDimension

\def\el@ProgressiveMargin{%
\@ifstar%
	{\ProgressiveStartrue\el@ProgressiveM@rgin}%
	{\ProgressiveStarfalse\el@ProgressiveM@rgin}}

\def\el@ProgressiveM@rgin#1{%
\ifnum\el@ControlCounter>\el@CounterTotal%
	\def\easynext##1{\relax}%
	\el@ControlCounter1%
\else%
	\el@ProgressiveDimension#1%
	\multiply\el@ProgressiveDimension by \el@ControlCounter%
	\ifProgressiveStar%
		\advance\el@ProgressiveDimension by -#1%
	\fi%
	\expandafter\xdef\csname Margin\the\el@ControlCounter\endcsname{%
		\the\el@ProgressiveDimension}%
	\el@Advance\el@ControlCounter%
	\let\easynext\el@ProgressiveM@rgin%
\fi%
\easynext{#1}}

\def\ListProperties(#1){%
\el@ListProperties A=A,#1,Z=Z,%
\el@GenericNumberCheck{Hide}%
\el@GenericNumberCheck{Start}%
\el@GenericNumberCheck[*]{Start}%
\el@GenericLetterCheck%
\el@GenericUnitSearch{Margin}%
\el@GenericUnitSearch{Indent}%
\el@GenericUnitSearch{Space}%
\el@GenericUnitSearch[*]{Space}%
\el@GenericUnitSearch{FinalSpace}}

\def\NewList{%
\@ifnextchar(%
	{\el@NewList\ListProperties}%
	{\el@NewList}}

\def\el@NewList{%
\el@ControlCounter0%
\el@ResetCounters%
\gdef\el@PreviousItem{0}%
\el@GenericDef{FinalSpace}{.3em}
\el@GenericDef{FinalMark}{NA}%
\el@GenericDef{Mark}{.}%
\el@GenericDef{Margin}{0cm}%
\el@GenericDef{Numbers}{a}%
\el@GenericDef{Style}{}%
\el@GenericDef[*]{Style}{}%
\el@GenericDef[**]{Style}{}%
\el@GenericDef{Indent}{0cm}%
\el@GenericDef{Start}{NA}%
\el@GenericDef[*]{Start}{NA}%
\el@GenericDef{CtrCom}{}%
\el@GenericDef{Space}{0cm}
\el@GenericDef[*]{Space}{0cm}%
\el@GenericDef{Hide}{0}%
\el@GenericDef{Hang}{false}%
\el@GenericDef{Align}{false}}

\def\el@MarginTest{Margin}
\def\el@MarkTest{Mark}
\def\el@FinalMarkTest{FinalMark}
\def\el@NumbersTest{Numbers}
\def\el@IndentTest{Indent}
\def\el@StyleTest{Style}
\def\el@CtrStyleTest{Style*}
\def\el@ParStyleTest{Style**}
\def\el@CounterCommandTest{CtrCom}
\def\el@ProgressiveTest{Progressive}
\def\el@ProgressiveStarTest{Progressive*}
\def\el@StartTest{Start}
\def\el@StartStarTest{Start*}
\def\el@SpaceTest{Space}
\def\el@SpaceStarTest{Space*}
\def\el@HideTest{Hide}
\def\el@HangTest{Hang}
\def\el@FinalSpaceTest{FinalSpace}
\def\el@AlignTest{Align}
\def\el@True{true}
\def\el@False{false}
\def\el@Fixed{fixed}
\def\el@AlreadyFixed{alreadyfixed}
\def\el@Move{move}
\def\el@AlreadyMoved{alreadymoved}

\newcommand{\el@Error}[4][]{%
\PackageError{easylist}{^^J==> `#3' is not a valid #4 (#2=#3). It is ignored#1}{}}
\def\el@DimenError#1#2{%
\el@Error[.^^J==> Note that true TeX dimensions should be prefixed with%
^^J==> \string\the\space in \string\ListProperties]{#1}{#2}{dimension}}

\def\el@ListProperties#1=#2,{%
\DubiousFigurefalse%
\DubiousLetterfalse%
\DubiousNumberfalse%
\DubiousParameterfalse%
\Pointfalse%
\Signfalse%
\def\el@Parameter{}%
\def\el@ParameterNumber{}%
\let\easynext@Properties\el@ListProperties%
\def\el@TempParameter{#1}%
\def\el@TempValue{#2}%
\if#1Z%
	\let\easynext@Properties\relax%
\else\if#1A%
\else\ifx\el@TempParameter\el@MarginTest%
	\expandafter\el@UnitSearch#2?
	\ifDubiousFigure%	
		\el@DimenError{#1}{#2}%
	\else%
		\el@GenericDef{Margin}{#2}%
	\fi%
\else\ifx\el@TempParameter\el@ProgressiveTest%
	\expandafter\el@UnitSearch#2?%
	\ifDubiousFigure%	
		\el@DimenError{#1}{#2}%
	\else%
		\el@ProgressiveMargin{#2}%
	\fi%
\else\ifx\el@TempParameter\el@ProgressiveStarTest%
	\expandafter\el@UnitSearch#2?%
	\ifDubiousFigure%	
		\el@DimenError{#1}{#2}%
	\else%
		\el@ProgressiveMargin*{#2}%
	\fi%
\else\ifx\el@TempParameter\el@IndentTest%
	\expandafter\el@UnitSearch#2?%
	\ifDubiousFigure%	
		\el@DimenError{#1}{#2}%
	\else%
		\el@GenericDef{Indent}{#2}%
	\fi%
\else\ifx\el@TempParameter\el@SpaceTest%
	\expandafter\el@UnitSearch#2?%
	\ifDubiousFigure%	
		\el@DimenError{#1}{#2}%
	\else%
		\el@GenericDef{Space}{#2}%
	\fi%
\else\ifx\el@TempParameter\el@SpaceStarTest%
	\expandafter\el@UnitSearch#2?%
	\ifDubiousFigure%	
		\el@DimenError{#1}{#2}%
	\else%
		\el@GenericDef[*]{Space}{#2}%
	\fi%
\else\ifx\el@TempParameter\el@FinalSpaceTest%
	\expandafter\el@UnitSearch#2?%
	\ifDubiousFigure%	
		\el@DimenError{#1}{#2}%
	\else%
		\el@GenericDef{FinalSpace}{#2}%
	\fi%
\else\ifx\el@TempParameter\el@HideTest%
	\expandafter\el@NumberCheck#2?%
	\ifDubiousFigure%
		\el@Error{#1}{#2}{number}%
	\else%
		\el@GenericDef{Hide}{#2}%
	\fi%
\else\ifx\el@TempParameter\el@NumbersTest%
	\el@LetterCheck{#2}%
	\ifDubiousLetter%
		\el@Error%
			{#1}{#2}{number denotation}%
	\else%
		\el@GenericDef{Numbers}{#2}%
	\fi%
\else\ifx\el@TempParameter\el@AlignTest%
	\ifx\el@TempValue\el@Fixed%
		\el@GenericDef{Align}{fixed}%
		\else\ifx\el@TempValue\el@Move%
			\el@GenericDef{Align}{move}%	
		\else\ifx\el@TempValue\el@False%
		\else%
			\expandafter\el@UnitSearch\el@TempValue?%
			\ifDubiousFigure%
				\el@Error%
					[.^^J==> Admissible values are `false', `fixed', `move' or a dimension]%
					{#1}{#2}{value for `Align'}%
				\DubiousFigurefalse%
			\else%
				\el@GenericDef{Align}{#2}%	
			\fi%
		\fi\fi\fi%
\else\ifx\el@TempParameter\el@HangTest%
	\ifx\el@TempValue\el@True%
		\el@GenericDef{Hang}{true}%
	\else\ifx\el@TempValue\el@False%
			\el@GenericDef{Hang}{false}%
	\else%
	\el@Error%
		[.^^J==> Admissible values are `true' or `false']%
		{#1}{#2}{value for `Hang'}%
	\fi\fi%
\else\ifx\el@TempParameter\el@StartTest%
	\PackageError{easylist}%
		{^^J==> `Start' can't be used without a number, so it is ignored}{}%
\else\ifx\el@TempParameter\el@StartStarTest%
	\PackageError{easylist}%
		{^^J==> `Start*' can't be used without a number, so it is ignored}{}%
\else\ifx\el@TempParameter\el@MarkTest%
	\el@GenericDef{Mark}{#2}%
\else\ifx\el@TempParameter\el@FinalMarkTest%
	\el@GenericDef{FinalMark}{#2}%
\else\ifx\el@TempParameter\el@StyleTest%
	\el@GenericDef{Style}{#2}%
\else\ifx\el@TempParameter\el@CtrStyleTest%
	\el@GenericDef[*]{Style}{#2}%
\else\ifx\el@TempParameter\el@ParStyleTest%
	\el@GenericDef[**]{Style}{#2}%
\else\ifx\el@TempParameter\el@CounterCommandTest%
	\el@GenericDef{CtrCom}{#2}%
\else\expandafter\ifx\csname #1\endcsname\relax%
	\el@DubiousParameter#1?%
	\ifDubiousParameter%
		\ifDubiousNumber%
			\PackageError{easylist}{^^J==> `#1' is not a valid parameter. It is ignored.%
			^^J==> Besides, you don't have \el@ParameterNumber\space counters}{}%
		\else%
			\PackageError{easylist}{^^J==> `#1' is not a valid parameter. It is ignored}{}%
		\fi%
	\else%
		\ifDubiousNumber%
			\PackageError{easylist}{^^J==> You don't have \el@ParameterNumber\space%
			counters, so `#1' is ignored.%
			^^J==> Ask for more of them}{}%
		\else%
			\PackageError{easylist}{^^J==> Something is wrong with `#1' but I don't know what.%
			^^J==> Maybe you put stars before numbers or you specified a number%
			^^J==> to Progressive. Anyway, it is ignored}{}%
		\fi%
	\fi%
\else%
	\expandafter\gdef\csname #1\endcsname{#2}%
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi%
\el@CommaKiller}

\def\el@Comm@Killer#1{\el@CommaKiller}
\def\el@CommaKiller{\@ifnextchar,{\el@Comm@Killer}{\easynext@Properties}}

\newif\ifDubiousLetter
\newif\ifDubiousParameter
\newif\ifDubiousNumber
\newif\ifPoint
\newif\ifSign

\def\el@Parameter{}
\def\el@ParameterNumber{}
\def\el@Void{}

\def\el@DubiousParameter#1{%
\let\el@P@rameter\el@Parameter%
\let\el@P@rameterNumber\el@ParameterNumber%
\DubiousFigurefalse%
\if#1?%
	\def\easynext{\el@ParameterNumberTest\el@ParameterTest}%
\else%
	\let\easynext\el@DubiousParameter%
	\ifcat#1a%
		\edef\el@Parameter{\el@P@rameter#1}%
	\else%
		\el@ParameterTest%
		\if#1*
			\edef\el@Parameter{\el@P@rameter#1}%
		\else%
			\el@NumberCheck#1?
			\ifDubiousFigure%
				\DubiousParametertrue%
			\else%
				\edef\el@ParameterNumber{\el@P@rameterNumber#1}%
			\fi%
		\fi%
	\fi%
\fi\easynext}

\def\el@ParameterTest{%
\ifx\el@Parameter\el@MarginTest%
\else\ifx\el@Parameter\el@MarkTest%
\else\ifx\el@Parameter\el@FinalMarkTest%
\else\ifx\el@Parameter\el@NumbersTest%
\else\ifx\el@Parameter\el@IndentTest%
\else\ifx\el@Parameter\el@StyleTest%
\else\ifx\el@Parameter\el@CtrStyleTest%
\else\ifx\el@Parameter\el@ParStyleTest%
\else\ifx\el@Parameter\el@CounterCommandTest%
\else\ifx\el@Parameter\el@ProgressiveTest%
	\DubiousNumberfalse%
\else\ifx\el@Parameter\el@ProgressiveStarTest%
	\DubiousNumberfalse%
\else\ifx\el@Parameter\el@StartTest%
\else\ifx\el@Parameter\el@StartStarTest%
\else\ifx\el@Parameter\el@HideTest%
\else\ifx\el@Parameter\el@SpaceTest%
\else\ifx\el@Parameter\el@SpaceStarTest%
\else\ifx\el@Parameter\el@HangTest%
\else\ifx\el@Parameter\el@FinalSpaceTest%
\else\ifx\el@Parameter\el@AlignTest%
\else\DubiousParametertrue%
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}

\def\el@ParameterNumberTest{%
\ifx\el@ParameterNumber\el@Void%
\else%
	\ifnum\el@ParameterNumber>\el@CounterTotal%
		\DubiousNumbertrue%
	\fi%
\fi}

\def\el@UnitSearch#1{%
\let\easynext\el@UnitSearch%
\if#1-%
	\ifSign%
		\DubiousFiguretrue%
		\def\easynext##1?{\relax}%
	\else%
		\Signtrue%
	\fi%
\else%
	\if#1+%
		\ifSign%
			\DubiousFiguretrue%
			\def\easynext##1?{\relax}%
		\else%
			\Signtrue%
		\fi%
	\else%
	\Signtrue%
		\if#1?%
			\DubiousFiguretrue%
			\let\easynext\relax%
		\else%
			\if#1.%
				\ifPoint%
					\DubiousFiguretrue%
					\def\easynext##1?{\relax}%
				\else%
					\Pointtrue%
				\fi%
			\else%
				\if#1,%
					\ifPoint
						\DubiousFiguretrue%
						\def\easynext##1?{\relax}%
					\else%
						\Pointtrue%
					\fi%
				\else%
					\ifcat#1a%
						\def\easynext{\el@UnitCheck#1}%
					\else%
						\el@NumberCheck#1?%
						\ifDubiousFigure%
							\def\easynext{\el@DimenUnitCheck#1}%
						\fi%
					\fi%
				\fi%
			\fi%
		\fi%
	\fi%
\fi\easynext}

\def\el@Em{em}%
\def\el@Ex{ex}%
\def\el@Centimetre{cm}%
\def\el@Millimetre{mm}%
\def\el@Inch{in}%
\def\el@Pica{pc}%
\def\el@Point{pt}
\def\el@Didot{dd}%
\def\el@Cicero{cc}%
\def\el@BigPoint{bp}%
\def\el@ScaledPoint{sp}%

\def\el@UnitCheck#1?{%
\def\el@TempUnit{#1}%
\ifx\el@TempUnit\el@Em%
\else\ifx\el@TempUnit\el@Ex%
\else\ifx\el@TempUnit\el@Centimetre%
\else\ifx\el@TempUnit\el@Millimetre%
\else\ifx\el@TempUnit\el@Inch%
\else\ifx\el@TempUnit\el@Pica%
\else\ifx\el@TempUnit\el@Point%
\else\ifx\el@TempUnit\el@Didot%
\else\ifx\el@TempUnit\el@Cicero%
\else\ifx\el@TempUnit\el@BigPoint%
\else\ifx\el@TempUnit\el@ScaledPoint%
\else\DubiousFiguretrue\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}

\def\el@DimenUnitCheck#1#2?{%
\if#1p%
	\if#2t%
		\DubiousFigurefalse%
	\fi%
\fi}

\newcommand{\el@GenericUnitSearch}[2][]{%
\Pointfalse%
\Signfalse%
\ifnum\el@ControlCounter>\el@CounterTotal%
	\el@ControlCounter1%
	\def\easynext[##1]##2{\relax}%
\else%
	\edef\el@TempTestable{\csname #2\the\el@ControlCounter#1\endcsname}%
	\expandafter\el@UnitSearch\el@TempTestable?%
	\ifDubiousFigure%
		\def\el@Name{#2}%
		\ifx\el@Name\el@FinalSpace%
			\el@Error[^^J==> and #2\the\el@ControlCounter#1\space is set to .3em.%
			^^J==> Note that true TeX dimensions should be prefixed with%
			^^J==> \string\the\space in \string\ListProperties]%
			{#2\the\el@ControlCounter#1}{\el@TempTestable}{dimension}%
			\expandafter\gdef\csname #2\the\el@ControlCounter#1\endcsname{.3em}%
		\else%
			\el@Error[^^J==> and #2\the\el@ControlCounter#1\space is set to 0cm.%
			^^J==> Note that true TeX dimensions should be prefixed with%
			^^J==> \string\the\space in \string\ListProperties]%
			{#2\the\el@ControlCounter#1}{\el@TempTestable}{dimension}%
			\expandafter\gdef\csname #2\the\el@ControlCounter#1\endcsname{0cm}%
		\fi%
	\fi%
	\DubiousFigurefalse%
	\el@Advance\el@ControlCounter%
	\let\easynext\el@GenericUnitSearch%
\fi\easynext[#1]{#2}}%

\def\el@LetterCheck#1{%
\if#1a%
\else\if#1r%
\else\if#1R%
\else\if#1l%
\else\if#1L%
\else\if#1z%
\else\DubiousLettertrue%
\fi\fi\fi\fi\fi\fi}

\def\el@GenericLetterCheck{%
\ifnum\el@ControlCounter>\el@CounterTotal%
	\el@ControlCounter1%
	\def\easynext{\relax}%
\else%
	\edef\el@TempTestable{\csname Numbers\the\el@ControlCounter\endcsname}%
	\expandafter\el@LetterCheck\el@TempTestable%
	\ifDubiousLetter%
		\PackageError{easylist}%
			{^^J==> `\el@TempTestable' is not a valid number denotation %
			(Numbers\the\el@ControlCounter=\el@TempTestable).%
			^^J==> It is ignored and those numbers will be arabic numbers}{}%
		\expandafter\gdef\csname Numbers\the\el@ControlCounter\endcsname{a}%
	\fi%
	\DubiousLetterfalse%
	\el@Advance\el@ControlCounter%
	\let\easynext\el@GenericLetterCheck%
\fi\easynext}%

\newcommand{\el@GenericNumberCheck}[2][]{%
\ifnum\el@ControlCounter>\el@CounterTotal%
	\el@ControlCounter1%
	\def\easynext[##1]##2{\relax}%
\else%
	\edef\el@TempTestable{\csname #2\the\el@ControlCounter#1\endcsname}%
	\ifx\el@TempTestable\el@NA%
	\else%
		\expandafter\el@NumberCheck\el@TempTestable?%
		\ifDubiousFigure%
			\def\el@Name{#2}%
			\ifx\el@Name\el@HideTest%
				\el@Error[^^J==> and no counter will be hidden for items of level \the\el@ControlCounter]%
					{#2\the\el@ControlCounter#1}{\el@TempTestable}{number}%
				\expandafter\gdef\csname #2\the\el@ControlCounter#1\endcsname{0}%
			\else%
				\if#1*%
					\el@Error[^^J==> and this counter will continue its progression]%
						{#2\the\el@ControlCounter#1}{\el@TempTestable}{counter}%
				\else%
					\el@Error[^^J==> and this counter will continue its progression]%
						{#2\the\el@ControlCounter#1}{\el@TempTestable}{number}%
				\fi%
				\expandafter\gdef\csname #2\the\el@ControlCounter#1\endcsname{NA}%
			\fi%
		\fi%
	\fi%
	\DubiousFigurefalse%
	\el@Advance\el@ControlCounter%
	\let\easynext\el@GenericNumberCheck%
\fi\easynext[#1]{#2}}%

\def\el@ResetCounters{%
\el@Scratch\el@ControlCounter%
\el@Advance\el@Scratch%
\el@@ResetCounters}

\def\el@@ResetCounters{%
\ifnum\el@Scratch>\el@CounterTotal%
	\let\easynext\relax%
	\el@Scratch0%
\else%
	\setcounter{List\the\el@Scratch}{0}%
	\ifnum\el@ControlCounter=\el@CounterLevel%
		\expandafter\gdef\csname Start\the\el@Scratch\endcsname{NA}%
	\fi%
	\el@Advance\el@Scratch%
	\let\easynext\el@@ResetCounters%
\fi\easynext}

\def\el@ItemCounter{}
\def\el@NA{NA}
\font\el@ZapfDingbats=pzdr%

\def\el@PrintCounters{%
\def\a{\arabic}%
\def\l{\alph}%
\def\L{\Alph}%
\def\r{\roman}%
\def\R{\Roman}%
\def\z{\el@ZapfDingbats\arabic}
\ifnum\el@ControlCounter<\el@CounterLevel%
	\expandafter\ifx\csname Start\the\el@ControlCounter*\endcsname\el@NA%
		\expandafter\ifx\csname Start\the\el@ControlCounter\endcsname\el@NA%
		\else%
			\setcounter{List\the\el@ControlCounter}{\csname Start\the\el@ControlCounter\endcsname}%
			\expandafter\gdef\csname Start\the\el@ControlCounter\endcsname{NA}%
			\el@ResetCounters%
		\fi%
	\else%
		\expandafter\ifnum\csname theList\the\el@ControlCounter\endcsname=%
			\csname Start\the\el@ControlCounter*\endcsname%
		\else%
			\el@ResetCounters%
		\fi
		\setcounter{List\the\el@ControlCounter}{\csname Start\the\el@ControlCounter*\endcsname}%
	\fi%
	\ifnum\el@ControlCounter>\csname Hide\the\el@CounterLevel\endcsname%
		\xdef\el@ItemCounter{\el@ItemCounter%
		\bgroup%
		\csname\csname Numbers\the\el@ControlCounter\endcsname\endcsname{List\the\el@ControlCounter}%
		\egroup%
		\csname Mark\the\el@ControlCounter\endcsname}%
	\fi%
	\el@Advance\el@ControlCounter%
	\let\easynext\el@PrintCounters%
\else%
	\stepcounter{List\the\el@CounterLevel}%
	\el@ResetCounters%
	\expandafter\ifx\csname Start\the\el@ControlCounter*\endcsname\el@NA% 
		\expandafter\ifx\csname Start\the\el@ControlCounter\endcsname\el@NA% 
		\else%
			\setcounter{List\the\el@ControlCounter}{\csname Start\the\el@ControlCounter\endcsname}%
			\expandafter\gdef\csname Start\the\el@ControlCounter\endcsname{NA}%
		\fi%
	\else%
		\setcounter{List\the\el@ControlCounter}{\csname Start\the\el@ControlCounter*\endcsname}%
	\fi%
	\ifnum\el@ControlCounter>\csname Hide\the\el@CounterLevel\endcsname%
		\xdef\el@ItemCounter{\el@ItemCounter%
		\bgroup%
		\csname\csname Numbers\the\el@ControlCounter\endcsname\endcsname{List\the\el@ControlCounter}%
		\egroup%
		\expandafter\ifx\csname FinalMark\the\el@ControlCounter\endcsname\el@NA%
			\csname Mark\the\el@ControlCounter\endcsname%
		\else%
			\csname FinalMark\the\el@ControlCounter\endcsname%
		\fi}%
	\fi%
	\el@ControlCounter1%
	\let\easynext\relax%
\fi%
\easynext}

\newbox\el@CounterBox
\newbox\el@ControlBox
\newdimen\el@TotalMargin
\newdimen\el@LeftMove
{\def\:{\global\let\el@Space= }\: }

\catcode`#=12
\def\elCreateItem{%
\ifx\elNextToken\el@Space%
	\global\el@LeftMove=0pt%
	\endgroup%
	\ifnum\el@CounterLevel>\el@CounterTotal%
		\PackageError{easylist}{^^J==> Too many %
		\ifAmpersand&\else\ifAt @\else\ifPilcrow�\else\ifSharp#\else�\fi\fi\fi\fi's.%
		^^J==> You can't use more than \el@CounterTotal\space%
		\ifAmpersand&\else\ifAt @\else\ifPilcrow�\else\ifSharp#\else�\fi\fi\fi\fi's%
		^^J==> unless you specify it when calling the package}{}
		\par\noindent\fbox{!!!}\begingroup%
	\else%
		\par%
		\expandafter\ifnum\el@PreviousItem=0%
		\else%
			\expandafter\ifnum\el@PreviousItem=\el@CounterLevel%
				\vskip\csname Space\the\el@CounterLevel*\endcsname%
			\else%
				\vskip\csname Space\the\el@CounterLevel\endcsname%
			\fi%
		\fi%
		\el@PrintCounters%
		\el@TotalMargin\csname Margin\the\el@CounterLevel\endcsname%
		\setbox\el@CounterBox=\hbox{{%
			\csname CtrCom\the\el@CounterLevel\endcsname{%
			\csname Style\the\el@CounterLevel\endcsname%
			\csname Style\the\el@CounterLevel*\endcsname%
			\el@ItemCounter}%
			\ifnum\el@CounterLevel>\csname Hide\the\el@CounterLevel\endcsname%
				\hskip\csname FinalSpace\the\el@CounterLevel\endcsname%
			\fi}}%
		\expandafter\ifx\csname Align\the\el@CounterLevel\endcsname\el@False%
		\else\expandafter\ifx\csname Align\the\el@CounterLevel\endcsname\el@Fixed%
			\expandafter\xdef\csname CounterBoxWidth\the\el@CounterLevel\endcsname{%
				\the\wd\el@CounterBox}%
			\expandafter\gdef\csname Align\the\el@CounterLevel\endcsname{alreadyfixed}%
		\else\expandafter\ifx\csname Align\the\el@CounterLevel\endcsname\el@AlreadyFixed%
			\setbox\el@CounterBox=\hbox to \csname CounterBoxWidth\the\el@CounterLevel\endcsname{{%
				\csname CtrCom\the\el@CounterLevel\endcsname{%
				\csname Style\the\el@CounterLevel\endcsname%
				\csname Style\the\el@CounterLevel*\endcsname%
				\el@ItemCounter}%
				\hfil}}%
			\setbox\el@ControlBox=\hbox{\unhcopy\el@CounterBox}%
			\expandafter\ifdim\wd\el@ControlBox>\csname CounterBoxWidth\the\el@CounterLevel\endcsname%
				\PackageWarning{easylist}{%
					^^J==> This counter is to wide and will spread on%
					^^J==> the item text. You should increase FinalSpace%
					^^J==> if you use `fixed' or increase the dimension%
					^^J==> if you specified one.
					^^J==>}%
			\fi%
			\else\expandafter\ifx\csname Align\the\el@CounterLevel\endcsname\el@Move%
				\expandafter\xdef\csname CounterBoxWidth\the\el@CounterLevel\endcsname{%
					\the\wd\el@CounterBox}%
				\expandafter\gdef\csname Align\the\el@CounterLevel\endcsname{alreadymoved}%
			\else\expandafter\ifx\csname Align\the\el@CounterLevel\endcsname\el@AlreadyMoved%
				\el@LeftMove=\wd\el@CounterBox%
				\advance\el@LeftMove by -\csname CounterBoxWidth\the\el@CounterLevel\endcsname%
			\else%
				\edef\el@TempTestable{\csname Align\the\el@CounterLevel\endcsname}%
				\DubiousFigurefalse%
				\Signfalse%
				\Pointfalse%
				\expandafter\el@UnitSearch\el@TempTestable?%
				\ifDubiousFigure%
					\el@Error%
						[.^^J==> Admissible values are `false', `fixed', `move' or a dimension]%
						{Align\the\el@CounterLevel}{\csname Align\the\el@CounterLevel\endcsname}%
						{value for `Align'}%
						\expandafter\gdef\csname Align\the\el@CounterLevel\endcsname{false}%
				\else%
					\expandafter\xdef\csname CounterBoxWidth\the\el@CounterLevel\endcsname{%
						\csname Align\the\el@CounterLevel\endcsname}%
						\setbox\el@CounterBox=\hbox to \csname CounterBoxWidth\the\el@CounterLevel\endcsname{{%
							\csname CtrCom\the\el@CounterLevel\endcsname{%
							\csname Style\the\el@CounterLevel\endcsname%
							\csname Style\the\el@CounterLevel*\endcsname%
							\el@ItemCounter}%
							\hfil}}%
					\expandafter\gdef\csname Align\the\el@CounterLevel\endcsname{alreadyfixed}%
					\setbox\el@ControlBox=\hbox{\unhcopy\el@CounterBox}%
					\expandafter\ifdim\wd\el@ControlBox>\csname CounterBoxWidth\the\el@CounterLevel\endcsname%
					\PackageWarning{easylist}{%
						^^J==> This counter is to wide and will spread on%
						^^J==> the item text. You should increase FinalSpace%
						^^J==> if you use `fixed' or increase the dimension%
						^^J==> if you specified one.
						^^J==>}%
					\fi%
				\fi%
			\fi\fi\fi\fi\fi%
		\expandafter\ifx\csname Hang\the\el@CounterLevel\endcsname\el@True%
			\expandafter\ifx\csname Align\the\el@CounterLevel\endcsname\el@AlreadyMoved%
				\advance\el@TotalMargin by \csname CounterBoxWidth\the\el@CounterLevel\endcsname%
				\parindent=-\csname CounterBoxWidth\the\el@CounterLevel\endcsname%
			\else%
				\advance\el@TotalMargin by \wd\el@CounterBox%
				\parindent=-\wd\el@CounterBox%
			\fi%
		\else%
			\parindent=\csname Indent\the\el@CounterLevel\endcsname%
		\fi%
		\hangafter0\hangindent\el@TotalMargin%
		\hskip-\el@LeftMove\box\el@CounterBox%
		\begingroup%
		\edef\@currentlabel{\el@ItemCounter}%
		\gdef\el@ItemCounter{}%
		\parindent=\csname Indent\the\el@CounterLevel\endcsname%
		\everypar{\hangafter0\hangindent\el@TotalMargin}%
		\csname Style\the\el@CounterLevel\endcsname%
		\csname Style\the\el@CounterLevel**\endcsname%
	\fi%
	\xdef\el@PreviousItem{\the\el@CounterLevel}%
	\global\el@CounterLevel1%
\else%
	\global\el@Advance\el@CounterLevel%
\fi\ignorespaces}
\catcode`#=6

\def\el@Tractatus{tractatus}
\def\el@CheckList{checklist}
\def\el@BookToc{booktoc}
\def\el@ArticleToc{articletoc}
\def\el@Enumerate{enumerate}
\def\el@Itemize{itemize}

\def\elPredefinedStyle{\@ifnextchar[{\el@PredefinedStyle}{}}

\def\el@PredefinedStyle[#1]{%
\def\el@TempStyle{#1}%
\ifx\el@TempStyle\el@Tractatus%
	\NewList(Mark=,Mark1=.)%
\else\ifx\el@TempStyle\el@CheckList%
	\NewList(%
	Hide=1000,Progressive*=1em,Hang=true,%
	Style*={\framebox(7,7){}}\hskip.6em,
	Style1**=\bfseries)
\else\ifx\el@TempStyle\el@BookToc%
	\NewList(%
		Hang=true,FinalMark=,Hide=1,%
		Style1=\large\bfseries,Numbers1=R,Space1=2.25em,Space1*=2.25em,Hide1=0,Hang1=false,Align1=2em,%
		Style2=\bfseries,Space2=1em,Space2*=1em,Align2=1.5em,%
		Margin3=1.5em,Margin4=3.8em,Margin5=7em,Margin6=10em,Margin7=12em,%
		Align3=2.3em,Align4=3.2em,Align5=4.1em,Align6=5em,Align7=6em)%
\else\ifx\el@TempStyle\el@ArticleToc%
	\NewList(%
		Hang=true,FinalMark=,%
		Align1=1.5em,Style1=\bfseries,Space1=1em,Space1*=1em,%
		Margin2=1.5em,Margin3=3.8em,Margin4=7em,Margin5=10em,%
		Align2=2.3em,Align3=3.2em,Align4=4.1em,Align5=5em)%
\else\ifx\el@TempStyle\el@Enumerate%
	\NewList(%
		FinalSpace=.5em,Hang=true,Mark=.,Space=4pt,Space*=4pt,Align=move,%
		Margin1=1.2em,%
		Margin2=2.9em,Style2*={(},Mark2={)},Numbers2=l,Hide2=1,%
		Margin3=5.6em,Numbers3=r,Hide3=2,%
		Margin4=6.8em,Numbers4=L,Hide4=3)%
\else\ifx\el@TempStyle\el@Itemize%
	\NewList(%
		Hang=true,Space=4pt,Space*=4pt,Hide=1000,%
		Margin1=1.5em,Style1*=\textbullet\hskip .5em,%
		Margin2=3.7em,Style2*=--\hskip .5em,%
		Margin3=5.9em,Style3*=$\ast$\hskip .5em,%
		Margin4=7.8em,Style4*=$\cdot$\hskip .5em)%
\else%
	\PackageError{easylist}{^^J==> `\el@TempStyle' is not a valid predefined style}{}%
\fi\fi\fi\fi\fi\fi}

\makeatother

\edef\SectionCatcode{\number\catcode`�}%
\edef\PilcrowCatcode{\number\catcode`�}%
\edef\SharpCatcode{\number\catcode`#}%
\edef\AtCatcode{\number\catcode`@}%
\edef\AmpersandCatcode{\number\catcode`&}%

\catcode`�=\active
\catcode`�=\active
\catcode`@=\active
\catcode`#=\active
\catcode`&=\active

\ifAt
	\def\easylist{%
	\catcode`@=\active%
	\def@{\futurelet\elNextToken\elCreateItem}%
	\begingroup\elPredefinedStyle}
	\def\endeasylist{\endgroup\par}
	\gdef\Activate{%
	\xdef\AtCatcode{\number\catcode`@}%
	\catcode`@=\active}
	\gdef\Deactivate{\catcode`@=\AtCatcode}
\else
	\ifPilcrow
		\def\easylist{%
		\catcode`�=\active%
		\def�{\futurelet\elNextToken\elCreateItem}%
		\begingroup\elPredefinedStyle}
		\def\endeasylist{\endgroup\par}
		\gdef\Activate{%
		\xdef\PilcrowCatcode{\number\catcode`�}%
		\catcode`�=\active}
		\gdef\Deactivate{\catcode`�=\PilcrowCatcode}
	\else
		\ifSharp
			\def\easylist{%
			\catcode`#=\active%
			\def#{\futurelet\elNextToken\elCreateItem}%
			\begingroup\elPredefinedStyle}
			\def\endeasylist{\endgroup\par}
			\gdef\Activate{%
			\xdef\SharpCatcode{\number\catcode`#}%
			\catcode`#=\active}
			\gdef\Deactivate{\catcode`#=\SharpCatcode}
		\else
			\ifAmpersand
				\def\easylist{%
				\catcode`&=\active%
				\def&{\futurelet\elNextToken\elCreateItem}%
				\begingroup\elPredefinedStyle}
				\def\endeasylist{\endgroup\par}
				\gdef\Activate{%
				\xdef\AmpersandCatcode{\number\catcode`&}%
				\catcode`&=\active}
				\gdef\Deactivate{\catcode`&=\AmpersandCatcode}
			\else
				\def\easylist{%
				\catcode`�=\active%
				\def�{\futurelet\elNextToken\elCreateItem}%
				\begingroup\elPredefinedStyle}%
				\def\endeasylist{\endgroup\par}
				\gdef\Activate{%
				\xdef\SectionCatcode{\number\catcode`�}%
				\catcode`�=\active}
				\gdef\Deactivate{\catcode`�=\SectionCatcode}
			\fi
		\fi
	\fi
\fi

\catcode`&=\AmpersandCatcode
\catcode`#=\SharpCatcode
\catcode`@=\AtCatcode
\catcode`�=\PilcrowCatcode
\catcode`�=\SectionCatcode