]> AND Private Git Repository - these_kahina.git/commitdiff
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
je viens de rajouter les fichiers .sty
authorKahina <kahina@kahina-VPCEH3K1E.(none)>
Fri, 10 Jun 2016 10:30:08 +0000 (12:30 +0200)
committerKahina <kahina@kahina-VPCEH3K1E.(none)>
Fri, 10 Jun 2016 10:30:08 +0000 (12:30 +0200)
19 files changed:
algorithm2e.sty [new file with mode: 0644]
algorithme.sty [new file with mode: 0644]
algorithmic.sty [new file with mode: 0644]
bbm.sty [new file with mode: 0644]
changemargin.sty [new file with mode: 0644]
drop.sty [new file with mode: 0644]
dropping.sty [new file with mode: 0644]
spimbasephdthesis.sty [new file with mode: 0644]
upmethodology-backpage.sty [new file with mode: 0644]
upmethodology-code.sty [new file with mode: 0644]
upmethodology-document.sty [new file with mode: 0644]
upmethodology-extension.sty [new file with mode: 0644]
upmethodology-fmt.sty [new file with mode: 0644]
upmethodology-frontpage.sty [new file with mode: 0644]
upmethodology-p-common.sty [new file with mode: 0644]
upmethodology-spec.sty [new file with mode: 0644]
upmethodology-task.sty [new file with mode: 0644]
upmethodology-version.sty [new file with mode: 0644]
yfonts.sty [new file with mode: 0644]

diff --git a/algorithm2e.sty b/algorithm2e.sty
new file mode 100644 (file)
index 0000000..07ab7ff
--- /dev/null
@@ -0,0 +1,3254 @@
+%  algorithm2e.sty --- style file for algorithms
+%                      almost everything can be customized by users. See the document for more explanations
+%% Copyright 1996-2015 Christophe Fiorio
+%
+% This work 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 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+% 
+% The Current Maintainer of this work is M. Christophe Fiorio
+%
+% This work consists of the files algorithm2e.sty and algorithm2e.tex 
+% and the associated example files algorithm2e_exAlgoDisjdecomp.tex,
+% algorithm2e_exIR.tex, algorithm2e_ex01.tex, algorithm2e_exProg.tex,
+% algorithm2e_ex02.tex, algorithm2e_exfor.tex, algorithm2e_ex03.tex,
+% algorithm2e_exgeneric.tex, algorithm2e_ex04.tex,  algorithm2e_exgeneric2.tex,
+% algorithm2e_ex05.tex, algorithm2e_exnlsty.tex, algorithm2e_ex06.tex,
+% algorithm2e_exrepeat.tex, algorithm2e_ex07.tex, algorithm2e_exswitch.tex
+%  
+%  Report bugs and comments to:
+%  - algorithm2e-announce@lirmm.fr  mailing list for announcement about releases^^J%
+%  - algorithm2e-discussion@lirmm.fr mailing list for discussion about package^^J%
+%  subscribe by emailing sympa@lirmm.fr with 'subscribe <list> <firstname name>'^^J%
+%
+%  $Id: algorithm2e.sty,v 5.1 2015/10/18 21:37:30 cfiorio Exp $
+%
+%  PACKAGES REQUIRED:
+%
+%  - float   (in contrib/supported/float)
+%  - ifthen  (in base)
+%  - xspace  (in packages/tools)
+%  - relsize (in contrib/misc/relsize.sty)
+%
+%%%%%%%%%%%%%%%  Release 5.1
+%
+%   Package options: 
+%   ---------------
+%   - oldcommands                      : to use old command names
+%   - french, english, german, ngerman
+%      portuguese, czech, italiano,
+%      slovak, croatian, spanish       : for the name of the algorithm and some keyword code
+%   - onelanguage                      : to simply switch keyword from one language to another without changing
+%                                        keyword commands
+%   - boxed, boxruled, ruled, tworuled, 
+%     algoruled, plain                 : layout of the algorithm
+%   - algo2e                           : environment is algorithm2e instead of algorithms and \listofalgorithmes
+%                                        instead of \listofalgorithms
+%   - slide                            : to use when making slides
+%   - noline,lined,vlined              : how block are designed.
+%   - shortend, longend, noend         : short or long end keyword as endif for e.g.
+%   - linesnumbered                    : auto numbering of the algorithm's lines
+%   - linesnumberedhidden              : to hide autonumbered lines (show number on a line with \ShowLn
+%   - commentsnumbered, inoutnumbered  : to autonumber comments and inout keywords (by defaut not numbered)
+%   - rightnl                          : to have line number on the right instead of on the left as default
+%   - algonl                           : line numbers preceded by algo number
+%   - scright, scleft                  : right or left justified side comments
+%   - fillcomment, nofillcomment       : end mark of comment is flushed to the right so comments fill the line
+%   - dotocloa                         : add an entry in the toc for list of algorithms (require tocbibind package)
+%   - endfloat                         : add algoendfloat environment pushing algorithm so written to the end of document
+%   - resetcount, noresetcount         : start value of line numbers.
+%   - algopart,algochapter,algosection : algo numbering within part, chapter or section
+%   - titlenumbered,titlenotnumbered   : numbering of title set by \Titleofalgo
+%   - figure                           : algorithms are figures, numbered as figures, and put in the list of figures.
+%   - procnumbered                     : procedure or function are numbered as algorithm
+%   - nokwfunc                         : procedure or function name doens't become a command
+%   - norelsize                        : don't use relsize package (useful if it breaks the compatibily)
+%   - displayblockmarkers              : display begin, end keywords at start of each block
+%  
+%   defaults are; english,plain,resetcount,titlenotnumbered
+%
+%%%%%%%%%%%%%%
+%
+%   Short summary  
+%   -------------
+%  
+%   algorithm is an environment for writing algorithm in LaTeX2e.
+%   Almost all is customizable. You can add keywords, change style, change the layout, ...
+%   It provide macros that allow you to create differents sorts of key words, therefore a set of predefined key
+%   word is gived.
+%
+%   IT should be used as follows
+%
+%   \begin{algorithm}
+%       ...
+%       ...
+%   \end{algorithm}
+%
+%
+%   IMPORTANT : each line MUST end with \;
+%
+%   Note that if you define macros outside algorithm environment they
+%   are avaible in all the document and particulary you can use then
+%   inside all algorithms without re-define them.
+%  
+%   an example:
+%
+%   \begin{algorithm}
+%     \SetAlgoLined
+%     \KwIn{this text}
+%     \KwOut{how to write algorithm with \LaTeX2e }
+%     
+%     initialization\;
+%     \While{not at end of this document}{
+%       read current section\;
+%       \eIf{understand}{
+%         go to next section\;
+%         current section becomes this one\;
+%         }{
+%         go back to the beginning of current section\;
+%         }
+%       }
+%     \caption{How to write algorithm}
+%   \end{algorithm}
+%
+%
+%%%%%%%%%%%%%%         predefined keywords
+%
+%     \KwIn{input}
+%     \KwOut{output}
+%     \KwData{input}
+%     \KwResult{output}
+%     \KwTo                                       % a simple keyword
+%     \KwFrom                                     % a simple keyword
+%     \KwRet{[value]}
+%     \Return{[value]}
+%     \Begin{block inside}
+%     \eIf{condition}{Then Block}{Else block}     % in blocks
+%     \If{condition}{Then block}                  % in a block
+%     \uIf{condition}{Then block}                 % in a block unended
+%     \lIf{condition}{Else text}                  % on the same line
+%     \Else{inside Else}                          % in a block
+%     \lElse{Else text}                           % on the same line        
+%     \uElse{Else text}                           % in a block unended
+%     \ElseIf{inside Elseif}                      % in a block
+%     \lElseIf{Elseif text}                       % on the same line        
+%     \uElseIf{Elseif text}                       % in a block unended
+%     \Switch{Condition}{Switch block}
+%     \Case{a case}{case block}                   % in a block
+%     \lCase{a case}{case text}                   % on the same line
+%     \Other{otherwise block}                     % in a block
+%     \lOther{otherwise block}                    % on the same line
+%     \For{condition}{text loop}                  % in a block
+%     \lFor{condition}{text}                      % on the same line
+%     \ForEach{condition}{text loop}              % in a block
+%     \lForEach{condition}{text}                  % on the same line
+%     \ForPar{condition}{text loop}               % in a block
+%     \lForPar{condition}{text}                   % on the same line
+%     \While{condition}{text loop}                % in a block
+%     \lWhile{condition}{text loop}               % on the same line
+%     \Repeat{End condition}{text loop}           % in a block
+%     \lRepeat{condition}{text}                   % on the same line
+%
+%%%%%%%%%%%%%%
+%
+%   History: 
+%
+%   -  October 19 2015 - revision 5.1
+%                   * CHANGE/ADD: l commands  (the ones as \lIf) can now be used with a
+%                              star. If done, no end of line are done, so you can enclose
+%                              l command into another one. For example, you can write:
+%                              \lForEach{$i$}{\lIf*{foo}{bar}}.
+%                               Note that when you use a star, side comments are not allowed.
+%                   * CHANGE/ADD: Now you can have a side comment at end of macros which
+%                               have a block. For example you can do : 
+%                               \Begin(\tcc*[h]{side comment for begin}{text}(\tcc*[h]{side comment after end})
+%                               Note: there are some side effects for some commands:
+%                              \SetKwProg : macro defined thanks to \SetKwProg are allowed
+%                                                   to have no end marker. In this case,
+%                                                   beware to end side comment, this can
+%                                                   do weird output (but no error)
+%                   * CHANGE: \SetKwSwitch defines also an \uOther command which was not
+%                               the case until this release.
+%                   * CHANGE: \SetStartEndCondition{typo1}{typo2}{typo3} defined two end
+%                               conditions (type2 and typo3) : typo3 is no more used for
+%                               case condition as typo2 is used which is more consistent
+%                               since there is a condition followed by a keyword as for
+%                               if-then or other command that are defined using typo2.
+%                   * CHANGE: keywords was not language dependant to allow to use multiple
+%                               languages in the same document, but some keywords in
+%                               different language were having the same keyword that lead
+%                               last one declared to replace first one and so you could have some
+%                               spanish keywords printed as you were in portuguese. So
+%                               this behavior is changed from now:
+%                               - localized keywords are defined if according language
+%                                  option is defined ; 
+%                               - if you want to keep old behaviour and use localized
+%                                  keywords without using language option (keep old
+%                                  behavior), you can use languagekw option
+%                                  (e.g. frenchkw, germankw, ...). Note that you can use
+%                                  multiple languagekw options at the same time, in
+%                                  contrary of language option. Note also that if you use
+%                                  multiple languagekw options, you can get back the same
+%                                  problem as previously when keywords was not language
+%                                  dependant.
+%                   * ADD: new typo styles:
+%                               - Arguments of functions have now their own style. By
+%                                  default, FuncArgSty is the same as ArgSty. 
+%                               - Name of KwProg have now their own sty (they used ArgSty
+%                                  previously). By default, ProgSty is still ArgSty.
+%                               As usual, \SetFuncArgSty{}, FuncArgSty{} and
+%                               \SetProgSty{}, ProgSty{} are macros to set and use these
+%                               typo styles.
+%                   * ADD: Options to manage algorithm hangindent
+%                            Until this revision, long statement acts as classical text and
+%                            continue on next line starting from the same point. This makes
+%                            difficult to notice that the new lines of text is not a new
+%                            statement. Now, hangindent is managed and when a long
+%                            statement continue on next lines, lines, except the first,
+%                            are indented.
+%                            Option: noalgohanging
+%                               By default, long statement are indented on subsequent
+%                               lines; with this option you get old behavior and lines are
+%                               no more indented
+%                            Option: hangingcomment 
+%                               Comment that are alone on a line (not side comment) are
+%                               not driven by algo hanging: subsequent lines of long
+%                               comments are indented according to width of start comment
+%                               marker. With this option, comment are indented like normal
+%                               statement.
+%                            Option: hanginginout
+%                               As for comment, by default, in/out keywords and input
+%                               keywords (defined by \SetKwInOut or \SetKwInput) are not
+%                               indented by algorithm hangindent. They are indented
+%                               according to width of input keyword. If you want that these
+%                               keywords acts like normal statement, use this option.
+%                            \SetAlgoHangIndent{length}
+%                               This macro allows you to set your own indent length. By
+%                               default, \SetAlgoHangIndent{0.5em}
+%                   * ADD: Group markers. 
+%                            This option is related to block markers of release 5.0. Some
+%                            have ask to put also block markers for single line
+%                            command. This new feature has been implemented to do this.
+%                            So, you can now ask package to put begin and end keywords
+%                            automatically at start and end of single line command (see
+%                            example in documentation).
+%                            These new group markers macros are:
+%                            - \AlgoDisplayGroupMarkers and \AlgoDontDisplayGroupMarkers
+%                            Note that a new option has also been added: displaygroupmarkers
+%                   * ADD: \SetCustomAlgoRuledWidth{length}
+%                             set a custom ruled width of ruled and algoruled options ;
+%                             note that by the moment you use this macro, rules will have
+%                             this fixed length: this can cause strange behavior in
+%                             multicolumn mode or other layout that change the line
+%                             width. 
+%                   * ADD: turkish language option
+%                   * FIX: a spurious whitespace which results in a spurious indent in the
+%                            user's text right after the end of the algorithm environment
+%                            was introduced  in release 5.0. This is fixed now thanks to
+%                            Alexander Malkis.
+%                   * FIX: there was a problem with margins in caption when option figure
+%                            was use with caption package. This is fixed.
+%                   * FIX: when changing font size in caption with, interline skip stayed
+%                            unchanged and so with a small font was to large. This is fixed.
+%                   * FIX: in contrary of that is written in the documentation, ':' what
+%                            not in KwSty typo for KwIn and KwOut command. This is fixed. 
+%                   * FIX: strange behaviour with label and lines numbered: @currentlabel
+%                            was updated according to algo line number not in all
+%                            situation. For e.g, with hyperref package, always updated ;
+%                            with \nlset also updated, but with \nl or linesnumbered
+%                            option, not updated. This "feature" causes different output
+%                            with \label command according to options used which is not
+%                            that one want. This is solved now, and @currentlabel is
+%                            always updated so \label command works always is the same way.
+%                   * FIX: some czech keywords
+%                   * FIX: some spanish keywords
+%                   * FIX: some croatian keywords
+%                   * FIX: krantz class changes definition of chapter and get one more
+%                            option that classical classes as book.cls or report.cls and
+%                            broke fix for hyperref on chapter definition. This is now
+%                            fixed and algorithm detects use of krantz class and use then
+%                            a definition of chapter working with krantz class.
+%                   * FIX: an issue with internal macro which causes ([Q]) use as argument
+%                            of some environment to be misprinted (thanks to Martin Schröder).
+%                   * FIX: mispelled name of hyperrefcounter inside internal macro.
+%
+%   - January 06 2013 - revision 5.0
+%                     * CHANGE: SetKwSwitch takes now 9 args: 9th arg is the same as
+%                                previous 8th arg ('end of switch' keyword). New 8th arg is
+%                                'end of case' keyword. This is due to change of release
+%                                3.2 which introduce end after case block... as I never
+%                                test with longend option, I never see that the 'end
+%                                switch' used for case was not good.
+%                     * CHANGE: when no end keyword is defined in a block macro, then
+%                                algorithm2e does no more try to print it. So even with lined or noline
+%                                option, no empty line is printed (before: a blank end was
+%                                printed, so a blank line appeared)
+%                     * Internal Change: add some internal function to improve readibility
+%                                        (thanks to Philip K. F. H\ölzenspies)
+%                     * ADD: Block markers. 
+%                            You can now ask package to put begin and end keywords automatically at begin
+%                            and end of blocks, it means each group of commands shifted and enclosed in
+%                            braces.
+%                            This is tricky to use but, combined with \SetStartEndCondition and
+%                            redefinition of keywords, you should be abble to simulate any syntax. See
+%                            examples in documentation where a generic example is derived in pseudo-code,
+%                            python and C by keeping code and changing only style using block markers
+%                            macros, \SetStartEndCondition and some redefinition of keywords.
+%                            These new block markers macros are:
+%                            - \AlgoDisplayBlockMarkers and \AlgoDontDisplayBlockMarkers
+%                            - \SetAlgoBlockMarkers{begin marker}{end marker}
+%                            - \BlockMarkersSty{text} and \SetBlockMarkersSty
+%                            Note that a new option has also been added: displayblockmarkers
+%                     * ADD: \leIf macro automatically defined by \SetKwIF: allow to define
+%                            an if-then-else on a single line.
+%                     * ADD: new macro \SetStartEndCondition{typo1}{typo2}{typo3} which
+%                            sets typo around condition in For, If, Switch, Case and
+%                            Repeat macros. First two are used around For, If, Swith
+%                            conditions, First and third are used for Case and Repeat
+%                            condition where condition ends the line. Default definition
+%                            is \SetStartEndCondition{ }{ }{}. 
+%                            A common alternative is \SetStartEndCondition{ (}{) }{)}
+%                            Can also be used to remove space around condition, for
+%                            example if you want python style commands:
+%                            \SetStartEndCondition{ }{}{} and \SetKwFor{For}{for}{:}{}
+%                     * ADD: new environment algomathdisplay which allow display math (like inside \[ \] or $$ $$) 
+%                            handling end line and line number
+%                     * ADD: new command \SetKwProg{Env}{Title}{is}{end} which defines a macro
+%                            \Env{args}{text}. Env is a block with 'Title' (in \CapSty) at the beginning
+%                            followed by args followed by 'is' then 'text' is put below inside a block ended
+%                            by 'end'. If no 'end' is specified, nothing is written (no
+%                            blank line is inserted). Useful to typeset function or prog for example:
+%                            \SetKwProg{Fn}{Function}{ is}{end} makes \Fn{afunc(i: int) : int}{return 0\;}                    
+%                            writes: 
+%                            Function afunc(i: int) : int is
+%                            | return 0;
+%                            end
+%                            or \SetKwProg{Def}{def}{:}{} makes \Def{afunc(i: int)}{return 0\;} writes:
+%                            def afunc(i: int):
+%                            | return 0
+%                            Tip: combine it with \SetKwFunction to write recursive function algorithm. With
+%                            example above, you could define \SetKwFunction{\Afunc}{afunc} and then write:
+%                            \Def{\Afunc{i:int}{\eIf{i>0}{\KwRet \Afunc{i-1}}{\KwRet 0\;}} that writes:
+%                            def afunc(i: int):
+%                            | if(i>0):
+%                            |     return afunc(i-1)
+%                            | else:
+%                            |     return 0
+%                            with appropriate typo.
+%                     * ADD: option croatian: croatian keywords (thanks to Ivan Gavran)
+%                     * ADD: option ngerman: same as german option but so can be used with global option ngerman
+%                            of babel
+%                     * ADD: option spanish: Spanish support (thanks to Mario Abarca)
+%                     * ADD: unterminated block: useful to add part separator that doesn't necessary need an end
+%                            keyword.  
+%                            Designed on the pattern of unterminated if (see \uIf macro) allowing to
+%                            add a block that is not terminated by a keyword. Such block are defined in the same
+%                            time as a block is defined by adding a macro beginning with u. So, for example,
+%                            predefined \SetKwBlock{Begin}{begin}{end} defines now two commands:
+%                            - \Begin{} as previously which print a begin - end block
+%                            - \uBegin{} that defines a begin only block
+%                     * FIX: problem when numbering line inside until condition of
+%                            \SetKwRepeat macro: line number was not correctly aligned.
+%                     * FIX: dotocloa option which was broken
+%                     * FIX: uIf and uCase didn't have same behavior when used with
+%                            noline, vlined or lined option. This is fixed. Side effect: no empty
+%                            line after an uIf or uCase when used with options lined or vlined
+%                     * FIX: a bug with Repeat Until command when use with side comment on Until
+%                     * FIX: a bug with side text -- text put into () -- of command macro (SetKwIf and so on)
+%                            which was always setting a ';' even after a \DontPrintSemicolon
+%                     * FIX: a bug with hyperref and chapter definition (thanks to Hubert Meier)
+%                     * FIX: bugs with l macro and side comment
+%                     * FIX: revision number
+%                     * FIX: fix non ascii character (utf8 not yet recognized by all latex engine)
+%                     * FIX: fnum@algocf had an useless parameter which sometimes broke expansion and output an error
+%                     * FIX: works now with multicol package
+%
+%   - december 14 2009 - revision 4.1
+%                     * ADD: new command \SetKwHangingKw{Name}{text} (hanging indent with keyword): This creates a
+%                            hanging indent much like \texttt{SetKwInput}, except that it removes the trailing `:'
+%                            and does not reset numbering (thanks to Nathan Tallent)
+%
+%   - november 17 2009  - revision 4.00 -
+%
+%                      * CHANGE: IMPORTANT: some commands have been renamed to have consistent naming (CamlCase
+%                                syntax) and old commands are no more available. If you doesn't want to change
+%                                your mind or use old latex files, you can use oldcommands option to enable old
+%                                commands back.
+%                                text. Here are these commands:
+%                                - \SetNoLine becomes \SetAlgoNoLine
+%                                - \SetVline  becomes \SetAlgoVlined
+%                                - \Setvlineskip  becomes \SetVlineSkip
+%                                - \SetLine   becomes \SetAlgoLined
+%                                - \dontprintsemicolon becomes \DontPrintSemicolon
+%                                - \printsemicolon becomes \PrintSemicolon
+%                                - \incmargin becomes \IncMargin
+%                                - \decmargin becomes \DecMargin
+%                                - \setnlskip becomes \SetNlSkip
+%                                - \Setnlskip becomes \SetNlSkip
+%                                - \setalcapskip becomes \SetAlCapSkip
+%                                - \setalcaphskip becomes \SetAlCapHSkip
+%                                - \nlSty becomes \NlSty
+%                                - \Setnlsty becomes \SetNlSty
+%                                - \linesnumbered becomes \LinesNumbered
+%                                - \linesnotnumbered becomes \LinesNotNumbered
+%                                - \linesnumberedhidden becomes \LinesNumberedHidden
+%                                - \showln becomes \ShowLn
+%                                - \showlnlabel becomes \ShowLnLabel
+%                                - \nocaptionofalgo becomes \NoCaptionOfAlgo
+%                                - \restorecaptionofalgo becomes \RestoreCaptionOfAlgo
+%                                - \restylealgo becomes \RestyleAlgo
+%                                - gIf macros and so on do no more exist
+%                      * NEW: - Compatibily with other packages improven by changing name of internal
+%                               macros. Algorithm2e can now be used with arabtex for example, if this last is
+%                               loaded after algorithm2e package.
+%                      * ADD: - OPTION endfloat: endfloat packages doesn't allow float environment inside other
+%                               environment. So using it with figure option of algorithm2e makes error. This
+%                               option enables a new environment algoendfloat to be used instead of algorithm
+%                               environment that put algorithm at the end. algoendfloat environment make
+%                               algorithm acting as endfloat figures. This option requires endfloat packages.
+%                      * ADD: - OPTION norelsize: starting from this release (v4.00), algorithm2e package uses
+%                               relsize package in order to get relative size for lines numbers; but it seems
+%                               that some rare classes (such as inform1.cls) are not compatible with relsize; to
+%                               have algorithm2e working, this option makes algorithm2e not to load relsize
+%                               package and go back to previous definition by using \scriptsize font for lines
+%                               numbers.
+%                      * ADD: - OPTION onelanguage: allow, if using standard keywords listed below, to switch
+%                               from one language to another without changing keywords by using appropriate
+%                               language option:
+%                               . KwIn, KwOut, KwData, KwResult
+%                               . KwTo KwFrom
+%                               . KwRet, Return
+%                               . Begin
+%                               . Repeat
+%                               . If, ElseIf, Else
+%                               . Switch, Case, Other
+%                               . For, ForPar, ForEach, ForAll, While
+%                               .
+%                      * ADD: - OPTION rightnl: put lines numbers to the right of the algorithm instead of left.
+%                      * ADD:   new commands \setRightLinesNumbers and \setLeftLinesNumbers which sets the lines
+%                               numbers to the right or to the left of the algorithm.
+%                      * ADD: - new kind of keywords: KwArray used to define arrays:
+%                               \SetKwArray{Kw}{array} defines an array keywords Kw called array and printed in
+%                               DataSty style when call with \Kw. It can be used with one argument which
+%                               denotes the element index: \Kw{n} prints array[n] with array in DataSty and n in
+%                               ArgSty.
+%                      * ADD/FIX: rules of ruled, algoruled, tworuled styles used rules of different sizes! This
+%                                 is now fixed. Moreover size of the rules is now controlled by a length and so
+%                                 can be customized by the user.
+%                                 \algoheightrule is the height of the rules and can be changed via \setlength
+%                                 \algoheightruledefault is the default height of he rules (0.8pt)
+%                                 \algotitleheightrule is the height of the rule that comes just after the
+%                                 caption in ruled and algoruled style; it can be changed via \setlength
+%                                 \algotitleheightruledefault is the default height of this rules (0.8pt)
+%                                 Thanks to Philippe Dumas who reports the bug and make the suggestion.
+%                      * ADD: - \SetAlgoCaptionSeparator which sets the separator between Algorithm 1 and the
+%                               title. By default it's ':' and caption looks like "Algorithm 2: title" but now
+%                               you can change it by using for example \SetAlgoCaptionSeparator{.} which will
+%                               give "Algorithm 3. title"
+%                      * ADD: - \SetAlgoLongEnd and \SetAlgoShortEnd and \SetAlgoNoEnd commands which act as
+%                               corresponding package options
+%                      * ADD: - OPTIONS italiano and slovak as new language (thanks to Roberto Posenato and
+%                               Miroslav Binas) 
+%                      * CHANGE: - Fnt and Sty macro to have consistent use and naming (see below)
+%                      * ADD: - \AlCapSty, \AlCapNameSty, \AlCapFnt, \AlCapNameFnt, \ProcSty, \ProcFnt,
+%                               \ProcNameSty, \ProcNameFnt, \ProcArgSty, ProcArgFnt and corresponding "set macro" 
+%                               \SetAlCapSty, \SetAlCapNameSty, \SetAlCapFnt, \SetAlCapNameFnt, \SetProcSty,
+%                               \SetProcFnt, \SetProcNameSty, \SetProcNameFnt, \SetProcArgSty, \SetProcArgFnt which
+%                               control the way caption is printed. Sty macro use command taking one parameter as
+%                               argument, Fnt macros use directly command. In Fact caption is printed as follow:
+%                               \AlCapSty{\AlCapFnt Algorithm 1:}\AlCapNameSty{\AlCapNameFnt my algorithm}
+%                               By default, \AlCapSty is textbf and \AlCapFnt is nothing. \AlCapNameSty keep text 
+%                               as it is, and \AlCapNameFnt do nothing also.
+%                               You can redefine \AlCapFnt and \AlCapNameFnt by giving macro to \Set commands. For
+%                               example, you can do \SetAlCapFnt{\large} to see Algorithm printed in \large font.
+%                               You can redefine \AlCapSty, \AlCapFnt, \AlCapNameSty and \AlCapNameFnt with the
+%                               corresponding \Set command. For the Sty commands, you have to give in parameter
+%                               name of a macro (whithout \)  which takes one argument. For example,
+%                               \SetAlCapFnt{textbf} defines the default behaviour. If you want to do more
+%                               complicated thing, you should define your own macro and give it to \SetAlCapFnt or
+%                               \SetAlCapNameFnt. Here are two examples:
+%                               - \newcommand{\mycapsty}[1]{\tiny #1}\SetAlCapNameSty{mycapsty}
+%                               - \newcommand{\mycapsty}[1]{\textsl{\small #1}}\SetAlCapNameSty{mycapsty}
+%                               Or you can combine the two, for the last example you can also do:
+%                               \SetAlCapNameSty{textsl}\SetAlCapNameFnt{\small}
+%                               Thanks to Jan Stilhammer who gives me the idea of \AlCapNameFnt.
+%                      * CHANGE \AlTitleFnt to match definition of all other Fnt macros and add a \AlTitleSty 
+%                               macro (see below) . Now you set \AlTitleFnt by calling \SetAlTitleFnt with 
+%                               directly a macro without parameter in argument:
+%                               Example: \SetAlTitleFnt{\small} to set title in small font.
+%                      * ADD: - \AlTitleSty and \SetAlTitleSty commands to set a style for title. These commands
+%                               are defined from a macro taking the text in argument, as \textbf for example. 
+%                               To set the TitleSty you have to give name of the macro (without the '\') 
+%                               to \SetAlTitleSty. For example \SetAlTitleSty{textbf} to set \textbf style.
+%                      * ADD: - new command \SetAlgorithmName{algorithmname}{list of algorithms name} which
+%                               redefines name of the algorithms and the sentence list of algorithms. Second
+%                               argument is the name that \autoref, from hyperref package, will use. Example:
+%                               \SetAlgorithmName{Protocol}{List of protocols} if you prefer protocol than
+%                               algorithm.
+%                      * ADD: - new \SetAlgoRefName{QXY} which change the default ref (number of the algorithm) by
+%                               the name given in parameter (QXY in the example). 
+%                      * ADD: - new command \SetAlgoRefRelativeSize{-2} which sets the output size of refs, defined
+%                               by \SetAlgoRefName, used in list of algorithms.
+%                      * ADD: - two dimensions to control the layout of caption in ruled, algoruled and boxruled
+%                               algorithms:
+%                               - interspacetitleruled (2pt by defaut) which controls the vertical space between
+%                                 rules and title in ruled and algoruled algorithms.
+%                               - interspaceboxruled (2\lineskip by default) which controls the vertical space
+%                                 between rules and title in boxruled algorithms.
+%                               These two dimensions can be changed by using \setlength command.
+%                      * ADD: - With the fix (see below) of procedure and function environments, a new feature has
+%                               been added: the name of the procedure or function set in caption is automatically
+%                               defined as a KwFunction and so can be used as a macro. For example, if inside a
+%                               procedure environment you set \caption{myproc()}, you can use \myproc macro in you
+%                               main text. Beware that the macro is only defined after the \caption!
+%                      * ADD: - OPTION nokwfunc to unable the new feature described above in function and
+%                               procedure environment. Useful if you use name of procedure or function that cannot
+%                               be a command name as a math display for example.
+%                      * ADD: - \SetAlgoNlRelativeSize{number} command which sets the relative size of line
+%                               numbers. By default, line numbers are two size smaller than algorithm text. Use
+%                               this macro to change this behavior. For example, \SetAlgoNlRelativeSize{0} sets it
+%                               to the same size, \SetAlgoNlRelativeSize{-1} to one size smaller and
+%                               \SetAlgoNlRelativeSize{1} to one size bigger
+%                      * ADD: - \SetAlgoProcName{aname} command which sets the name of Procedure printed by
+%                               procedure environment (the environment prints Procedure by default). Second
+%                               argument is the name that \autoref, from hyperref package, will use.
+%                      * ADD: - \SetAlgoFuncName{aname} command which sets the name of Function printed by
+%                               procedure environment (the environment prints Function by default). Second
+%                               argument is the name that \autoref, from hyperref package, will use. 
+%                      * ADD: - \SetAlgoCaptionLayout{style} command which sets style of the caption; style must
+%                               be the name of a macro taking one argument (the text of the caption). Examples
+%                               below show how to use it:
+%                               . \SetAlgoCaptionLayout{centerline} to have centered caption
+%                               . \SetAlgoCaptionLayout{textbf} to have bold caption
+%                               If you want to apply two styles in the same time, such as centered bold, you have
+%                               to define you own macro and then use \SetAlgoCaptionLayout with its name.
+%                      * ADD: - OPTION procnumbered: which makes the procedure and function to be numbered as
+%                               algorithm
+%                      * ADD: - OPTIONS tworuled and boxruled
+%                               these are two new layouts: tworuled acts like ruled but doesn't put a line after
+%                               caption ; boxruled surround algorithm by a box, puts caption above and add a line
+%                               after caption.
+%                      * REMOVE: - SetKwInParam has been deleted since not useful itself because of different
+%                                macros which can do the same in a better and a more consistent way as
+%                                SetKwFunction or SetKw.
+%                      * FIX: - line number is now correctly vertically aligned with math display.
+%                      * FIX: - references with hyperref. No more same identifier or missing name error. BUT now
+%                               you must NOT use naturalnames option of hyperref packages if you do PdfLaTeX
+%                      * FIX: - autoref with hyperref package (thanks to Jörg Sommer who notices the problem).
+%                      * FIX: - titlenumbered was not working! fixed.
+%                      * FIX: - Else(){} acted like uElse. Corrected.
+%                      * FIX: - noend management: when a block was inside another and end of block was following
+%                               each other, a blank line was added: it's now corrected.
+%                      * FIX: - Function and Procedure environment was no more working as defined originally: the
+%                               label was no more name of the procedure, it acts always as if procumbered option
+%                               has been used.
+%                      * FIX: - line numbers had a fixed size which can be bigger than algorithm text accordingly
+%                               to \AlFnt set (see also new command \SetAlgoNlRelativeSize above)
+%                      * FIX: - semicolon in comments when dontprintsemicolon is used.
+%                      * FIX: - listofalgorithms adds a vertical space before first algo of a chapter as for
+%                               listoffigures or listoftables
+%                      * FIX: - listofalgorithms with twocolumns mode and some classes which don't allow onecolumn
+%                               and so don't define \if@restonecol as prescribed in LaTeX (sig-alternate for
+%                               example)
+%                      * FIX: - algorithm2e now works with elsart cls and some more classes.
+%                      * FIX: - blocks defined by SetKwBlock act now as other blocks (if for instance) and don't
+%                               write end in vlined mode, instead they print a small horizontal line as required
+%                               by the option.
+%                      * FIX: - underfull hbox warning at each end of algorithm environment removed.
+%
+%                      * INTERNAL CHANGE: - short end keyword are deduce from long end keyword by keeping the
+%                                           first one. Allows to avoid double definition.
+%                      * INTERNAL CHANGE: - procedure, function and algorithm are now resolved by the same
+%                               environment to avoid code duplication. 
+%
+%   - October  04 2005  - revision 3.9 -
+%                      * ADD: - \setalcaphskip command which sets the horizontal skip before Algorithm: in caption
+%                               when used in ruled algorithm.
+%                      * ADD: - \SetAlgoInsideSkip command which allows to add an extra vertical space before and
+%                               after the core of the algorithm (ie: \SetAlgoInsideSkip{bigskip}) 
+%                      * CHANGE: - caption, when used with figure option, is no more controlled by algorithm2e
+%                                  package and so follows the exact behaviour of figures. The drawback is that you
+%                                  cannot change the typo with AlTitleFnt or CapFnt. The avantage is that if you
+%                                  use caption package, it works.
+%                      * FIX: - problem with numbering line and pdflatex
+%                      * FIX: - error when algorithm2e package was used with beamer and listings together
+%   - February 12 2005  - revision 3.8 -
+%                      * FIX: - extra line with noend option.
+%   - February 10 2005  - revision 3.7 -
+%                      * ADD: - sidecomment: different macros allowing to put text right after code on the same
+%                               line. They are defined in the same time comment macros are defined with a star
+%                               after the macro name. By default comments are right justified but this can be
+%                               change with appropriate option in the macro. Ex:
+%                               . default: \tcc*{side comment}
+%                               . same as previous: \tcc*[r]{side comment}
+%                               . left justify: \tcc*[l]{side comment}
+%                               . here: \tcc*[h]{side comment} don't put the end of line mark before
+%                                       comment (; by default) and don't end the line.
+%                               . flushed: \tcc*[f]{side comment} same as the precedent but right
+%                                 justified
+%                      * ADD: - OPTION scright (default): right justified side comments (side comments
+%                               are flushed to the righr)
+%                      * ADD: - OPTION scleft: left justified side comments (side comments are put right after the
+%                               code line)
+%                      * ADD: - \SetSideCommentLeft acts as scleft option
+%                      * ADD: - \SetSideCommentRight acts as scright option
+%                      * ADD: - block like macro side text: all macro defining a block allows now to put text right
+%                               after key words by putting text into (). Done to be used with sidecomment macros,
+%                               but all text can be used. 
+%                               Ex: \eIf(\tcc*[f]{then comment}){test}{then text}(else side text){else text}
+%                      * ADD: - OPTION fillcomment (default): end mark of comment is flushed to the right so
+%                               comments fill all the width of text.
+%                      * ADD: - OPTION nofillcomment: end mark of comment is put right after the comment.
+%                      * ADD: - \SetNoFillComment acts as nofillcomment option.
+%                      * ADD: - \SetFillComment acts as fillcomment option.
+%                      * ADD: - OPTION dotocloa: which adds an entry in the toc for the list of algorithms. This
+%                               option load package tocbibind if not already done and so list of figures and list
+%                               of tables are also added in the toc. If you want to control which ones of the lists
+%                               will be added in the toc, please load package tocbibind before package algorithm
+%                               and give it the options you want.
+%                      * FIX: - vertical spacing for uif macro with noend option
+%                      * FIX: - all the compatibility problems between caption and other packages
+%                      * FIX: - typographical differences between list of algorithms and other lists  when in
+%                               report or book 
+%
+%   - January 24 2005  - revision 3.6 -
+%                      * FIX: - vertical spacing and space characters at the beginning or end of comments.
+%                               line numbers of comments not in the NlSty.
+%                               Thanks to Arnaud Giersch for his comments and suggestions.
+%                      * FIX: - Set*Sty macro: the styles defined was not protected and was modified by surrounding
+%                               context. For example KwTo in a \For{}{} was in bold AND italic instead of just in
+%                               bold.
+%                      * FIX: - line number misplacement after \Indp
+%
+%   - January 21 2005  - revision 3.5 -
+%                      * ADD: - hidden numbering of the lines. Lines are auto-numbered but numbers are shown only
+%                               on lines you specify:
+%                               * linesnumberedhidden option or \LinesNumberedHidden macro activate this
+%                                 functionnality.
+%                               * \ShowLn and \ShowLnLabel{lab} macros make the number visible on the
+%                               line. \ShowLnLabel{lab} allows to set a label for this line. 
+%                               Thanks to Samson de Jager who makes this suggestion and provides the macros.
+%                      * ADD: - \AlCapFnt and \SetAlCapFnt which allow to have a different font for
+%                               caption. Works like \AlFnt and \SetAlFnt and by default is the same.
+%                      * ADD: - \AlCapSkip skip length. This vertical space is added before caption in plain ou
+%                               boxed mode. It allows to change distance between text and caption.
+%                      * FIX: - caption compatible with IEEEtran class. 
+%                      * FIX: - some vertical spacing error with \uIf macros (Thanks to Arnaud Giersch)
+%                      * FIX: - Procedure and Function: lines are also numbered like algorithms
+%                      * FIX: - CommentSty was not used for Comments
+%
+%   - January 10 2005  - revision 3.4 -
+%                      * FIX: - caption compatible with new release of Beamer class. 
+%
+%   - June 16 2004     - revision 3.3 - 
+%                      * FIX: - Hyperlink references of Hyperref package works now if compiled with pdflatex 
+%                               and [naturalnames] option of hyperref package is used.
+%                      * FIX: - algorithm[H] had problem in an list environment - corrected
+%                      * FIX: - interline was not so regular in nested blocks - corrected
+%                      * ADD  - \SetVlineSkip macro which sets the vertical skip after the little horizontal 
+%                               rule which closes a block in Vlined mode. By default 0.8ex
+%
+%   - June 11 2004     - revision 3.2 - AUTO NUMBERING LINES !!!
+%                      * ADD: auto numbering of the lines (the so asked and so long awaiting feature)
+%                             this feature is managed by 3 options and 3 commands:
+%                             - linesnumbered option: lines of the algo are numbered except for comments and
+%                               input/output (KwInput and KwInOut)
+%                             - commentsnumbered option: makes comments be numbered
+%                             - inoutnumbered option: makes data input/output be numbered
+%                             - \nllabel{lab} labels the line so you can cite with \ref{lab}
+%                             - \LinesNumbered make the following algorithms having auto-numbered lines
+%                             - \linesnotnumbered make the following algorithms having no auto-numbered lines
+%                      * Change: algo2e option renames listofalgorithms in listofalgorithmes
+%                      * FIX: new solution for compatibility with color package, more robust and not tricky.
+%                             Many thanks to David Carlisle for his advices
+%
+%   - June 09 2004     - revision 3.1 -
+%                      * Change: \SetKwSwitch command defines an additionnal macro \uCase and \Case prints end
+%                      * Change: now macros SetKw* do a renewcommand if the keyword is already defined. So you can
+%                                redefine default definition at your own convenience or change your definition
+%                                without introducing a new macro and changing your text.
+%                      * ADD: new macro \SetKwIF which do \SetKwIf and
+%                             \SetKwIfElseIf.The following default definition has been added:
+%                             \SetKwIF{If}{ElseIf}{Else}{if}{then}{else if}{else}{endif}
+%                             and so you get the macros;
+%                             \If \eIf \lIf \uIf \ElseIf \uElseIf \lElseIf \Else \uElse \lElse
+%                      * ADD: new macro \SetAlgoSkip which allow to fix the vertical skip before and after the
+%                             algorithms. Default is smallskip, do \SetAlgoSkip{} if you don't want an extra space
+%                             or \SetAlgoSkip{medskip} or \SetAlgoSkip{bigskip} if you want bigger space.
+%                      * ADD: macro \SetKwIf defines in addition a new macro \uElse  (depending on wat name you
+%                             have given in #2 arg).
+%                      * ADD: macro \SetKwIfElseIf defines in addition a new macro \uElse and \ugElseIf (depending
+%                             on what name you have given in #2 and #3 arg).
+%                      * Change: baseline of algorithm is now top, so two algorithms can be put side by side.
+%                      * FIX: Compatibility with color package solved. The problem was due to a redefinition of
+%                             standard macros by color package. This solves compatibility problem with other
+%                             packages as pstcol or colortbl. (notified by Dirk Fressmann, Antti Tarvainen and Koby
+%                             Crammer)
+%                      * Fix: extra little shift to the right with boxed style algorithm removed (notified by
+%                             P. Tanovski)
+%                      * Fix: algoln option was buggy (notified bye Jiaying Shen)
+%                      * Fix: german and portuges option didn't work due to bad typo (notified by Martin Sievers,
+%                             Thorsten Vitt and Jeronimo Pellegrini)
+%                      
+%   - February 13 2004 - revision 3.0 -
+%                      * Major revision which makes the package independent from float.sty, so now
+%                        - algorithm* works better, in particular can be used in multicols environments
+%                        - (known bug corrected)
+%                          [H] works now for all sort of environment but is handled differently for classic
+%                          environment and star environment (algorithm, figure, procedure and function). For star
+%                          environment, H acts like for classical figure environment, so it doesn't stay here
+%                          absolutely.
+%                        - (known bug corrected)
+%                          you can use now floatflt package with algorithm package and even with figure
+%                          option. Beware that if you want to put an algorithm inside a floatingfigure, it cannot
+%                          be floating, so [H] is required and then figure option should not be used, since
+%                          standard figure[H] are still floating with LaTeX.
+%                      * boxruled: a new style added. Possible now since no style no more defined by the float
+%                        package.
+%                      * nocaptionofalgo: dosen't print Algorithm #: in the caption for algorithm in ruled or
+%                        algoruled style.
+%                        note: this is just documentation of a macro which was already in the package.
+%   - December 14 2003 - revision 2.52 -
+%                      * output message shorter
+%                      * French keyword macro \PourTous was missing for longend option, it has been added.
+%                      * TitleofAlgo prints Function or Procedure in corresponding environments.
+%
+%   - October 27 2003  - revision 2.51 - Revision submitted to CTAN archive
+%                      * correction of a minor which make caption in procedure
+%                        and function to be blanck with pdfscreen package
+%                        (thanks to Joel Gossens for the notification)
+%                      * add two internal definition to avoid some errors when
+%                        used with Hyperref package (Hyperref package need to
+%                        define new counter macro from existing ones, and
+%                        don't do it for algorithm2e package, so we do it)
+%
+%   - October 17 2003  - revision 2.50 - first revision for CTAN archive
+%                      * add \AlFnt and \SetAlFnt{font} macros: \AlFnt is used at the beginning of the caption and
+%                        the body of algorithm in order to define the fonts used for typesetting algorithms. You
+%                        can use it elsewhere you want to typeset text as algorithm. For example you can do
+%                        \SetAlFnt{\small\sf} to have algorithms typeset in small sf font. Default is nothing so
+%                        algorithm is typeset as the text of the document.
+%                      * add \AlTitleFnt{text} and \SetAlTitleFnt{font} macros: The {Algorithm: } in the caption is
+%                        typeset with \AlTitleFnt{Algorithm:}. You can use it to have text typeset as {Algorithm:}
+%                        of captions. Default is textbf.  Default can be redefined by \SetAlTitleFnt{font}, for
+%                        example you can do \SetAlTitleFnt{emph}
+%                      * add CommentSty typo for text comment.  
+%                      * add some compatibility with hyperref package (still an error on multiply defined refs but
+%                        pdf correctly generated)
+%                      * flush text to left in order to have correct indentation even with class as amsart which
+%                        center all figures
+%                      * add german, portuguese and czech options for title of algorithms and typo.
+%                      * add portuguese translation of predefined keywords * add czech translation of some
+%                        predefined keywords
+%
+%   - December 23 2002 - revision 2.40
+%                      * add some French keyword missing
+%                      * add function* and procedure* environment like algorithme* environment: print in one column
+%                        even if twocolumn option is specified for the document.
+%                      * add a new macro \SetKwComment to define macro which writes comments in the text. First
+%                        argument is the name of the macro, second is the text put before the comment, third is the
+%                        text put at the end of the comment.Default are \tcc and \tcp
+%                      * add new options to change the way algo are numbered:
+%                        [algopart] algo are numbered within part (counter must exist)
+%                        [algochapter] algo are numbered within chapter
+%                        [algosection] algo are numbered within section
+%
+%   - March 27 2002   - revision 2.39
+%                      * Gilles Geeraerts: added the \SetKwIfElseIf to manage
+%                        if (c)
+%                             i;
+%                        else if (c)
+%                             i;
+%                        ...
+%                        else
+%                             i;
+%                        end
+%                      * Also added \gIf \gElseIf \gElse.
+%
+%   - January 02 2001 - revision 2.38
+%                      * bugs related to the caption in procedure and function
+%                        environment are corrected.
+%                      * bug related to option noend (extra vertical space added
+%                        after block command as If or For) is corrected.
+%                      * czech option language added (thanks to Libor Bus: l.bus@sh.cvut.cz).
+%  
+%   - October 16 2000 - revision 2.37
+%                      * option algo2e added: change the name of environment
+%                        algorithm into algorithm2e. So allow to use the package
+%                        with some journal style which already define an algorithm
+%                        environment.
+%  
+%   - September 13 2000 - revision 2.36
+%                      * option slide added: require package color
+%                      * Hack for slide class in order to have correct
+%                        margins
+%  
+%   - November 25 1999 - revision 2.35
+%                      * revision number match RCS number
+%                      * Thanks to David A. Bader, a new option is added:
+%                        noend: no end keywords are printed.
+%  
+%   - November 19 1999 - revision 2.32
+%                      * minor bug on longend option corrected.
+%  
+%   - August 26 1999 - revision 2.31
+%                      * add an option: figure
+%                        this option makes algorithms be figure and so are numbered
+%                        as figures, have Figure as caption and are put in 
+%                        the \listoffigures
+%  
+%   - January 21 1999 - revision 2.3 beta
+%                    add 2 new environments: procedure and function.
+%                    These environments works like algorithm environment but:
+%                    - the ruled (or algoruled) style is imperative.
+%                    - the caption now writes Procedure name....
+%                    - the syntax of the \caption command is restricted as
+%                      follow: you MUST put a name followed by 2 braces like
+%                      this ``()''. You can put arguments inside the braces and
+%                      text after. If no argument is given, the braces will be
+%                      removed in the title. 
+%                    - label now puts the name (the text before the braces in the
+%                      caption) of the procedure or function as reference (not
+%                      the number like a classic algorithm environment).
+%                    There are also two new styles: ProcNameSty and
+%                    ProcArgSty. These style are by default the same as FuncSty
+%                    and ArgSty but are used in the caption of a procedure or a
+%                    function.
+%                    
+%   - November 28 1996 - revision 2.22
+%                    add a new macro \SetKwInParam{arg1}{arg2}{arg3}:
+%                    it defines a macro \arg1{name}{arg} which prints name in keyword
+%                    style followed byt arg surrounded by arg2 and arg3. The main
+%                    application is to a function working as \SetKwInput to be used
+%                    in the head of the algorithm. For example
+%                    \SetKwInParam{Func}{(}{)} allows
+%                    \Func{functionname}{list of arguments} which prints:
+%                    \KwSty{functioname(}list of arguments\KwSty{)}
+%       
+%
+%   - November 27 1996 - revision 2.21:
+%                    minor bug in length of InOut boxes fixed.
+%                    add algorithm* environment.
+%
+%   - July 12 1996 - revision 2.2: \SetArg and \SetKwArg macros removed.
+%                        
+%                    \SetArg has been removed since it never has been
+%                    documented.
+%                    \SetKwArg has been removed since \SetKw can now
+%                    take an argument in order to be consistent with
+%                    \SetKwData and \SetKwFunction macros.
+%
+%   - July 04 1996 - revision 2.1: still more LaTeX2e! Minor compatibility break
+%
+%                    Macros use now \newcommand instead of \def, use of \setlength, 
+%                    \newsavebox, ... and other LaTeX2e specific stuff.
+%                    The compatibility break:
+%                    - \SetData becomes \SetKwData to be more consistent. So the old 
+%                      \SetKwData becomes \SetKwInput
+%                    - old macros \titleofalgo, \Freetitleofalgo and \freetitleofalgo
+%                      from LaTeX209 version which did print a warning message and call 
+%                      \Titleofalgo in version 2.0 are now removed!
+%
+%   - March 13 1996 - revision 2.0: first official major revision.
+%   
+%
+%%%%%%%%%%%%%%
+%
+%   Known bugs: 
+%   -----------
+%   - horizontal spacing (indent) doesn't work with revtex4 class.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% for more complete informations you can see algorithm2e.tex
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%% Identification Part %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\NeedsTeXFormat{LaTeX2e}[1994/12/01]
+%
+\ProvidesPackage{algorithm2e}[2013/01/06 v5.00 algorithms environments]
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%% Initial Code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\@makeother\*% some package redefined it as a letter (as color.sty)
+\def\@firstword#1 #2\@nil{#1}% an useful fonction
+%%%%%%% Utilities:
+% \ifArgumentEmpty<c><t><e> ; if c is empty, i.e. {}, then t, else e.
+%    Function used internally, but may as well expose it to the user; it's useful
+\begingroup
+\catcode`\Q=3
+\catcode`\T=3
+\long\gdef\ALGOCF@argemptyaux#1#2Q#3#4#5T{#4}
+\long\gdef\ifArgumentEmpty#1{%
+  \begingroup\long\edef\@tempa{\endgroup
+    \ALGOCF@argemptyaux#1QQ{\noexpand\@secondoftwo}{\noexpand\@firstoftwo}T%
+  }\@tempa
+}
+\endgroup
+% \long\def\ifArgumentEmpty#1{\bgroup
+%      \catcode`\Q=3
+%      \catcode`\T=3
+%      \long\def\@tempa##1##2Q##3##4##5T{##4}%
+%      \xdef\@tempa{\@tempa#1QQ{\noexpand\@secondoftwo}{\noexpand\@firstoftwo}T}%
+% \egroup\@tempa}
+%%%%%%%%%%%
+%
+% \algocf@longdef -> shorthand to reduce
+%    \expandafter\long\expandafter\def
+% to
+%    \expandafter\algocf@longdef
+% may look insignificant, but reads that much better ;)
+\def\algocf@longdef{\long\def}
+%
+% \algocf@newcommand (and helper \algocf@new@command) behaves like LaTeX's newcommand,
+% with two differences:
+%  - the argument is not "\<name>", but rather "<name>"; i.e. one level of indirection
+%  - if the command exists already, then \renewcommand, rather than \newcommand
+\def\algocf@newcommand#1{\expandafter\algocf@new@command\csname#1\endcsname}
+\def\algocf@new@command#1{%
+       \begingroup \escapechar\m@ne\xdef\@gtempa{{\string#1}}\endgroup
+       \expandafter\@ifundefined\@gtempa\newcommand\renewcommand#1}%
+%
+% \algocf@newcmdside<name><arity><body>
+%   The largest time-saver; many commands we define have the pattern:
+%     \<name>(<side_text>)<argX><argY>...
+%   where "(<side_text>)" is optional. By defining them with this function,
+%   the arguments are parsed and renumbered, i.e. the body works as if the
+%   command was:
+%     \<name><side_text><argX><argY>...
+%   and can use \ifArgumentEmpty to see whether its #1 exists (default case
+%   for the side text is (), so there's no difference between calling
+%     \foo{bar}
+%   or
+%     \foo(){bar}
+%   Technically this is new behaviour, but it shouldn't really occur...
+\algocf@longdef\algocf@newcmdside#1#2#3{%
+       \expandafter\def\csname#1\endcsname{%
+               \@ifnextchar({\csname algocf@#1strip\endcsname}{\csname algocf@#1strip\endcsname()}%
+       }%
+       \expandafter\algocf@longdef\csname algocf@#1strip\endcsname(##1){\csname algocf@#1main\endcsname{##1}}%
+       \algocf@newcommand{algocf@#1main}[#2]{#3}%
+}
+%
+% a serie of newcmdside macro for block that allows a comment after the end
+%     \<name>(<side_text>)<argX><argY>...(<side_text>)% 
+%
+% 1. kind of begin-end : for command with only one block as begin-end 
+\algocf@longdef\algocf@newcmdside@kobe#1#2{% <name of cmd><body of cmd>
+  % command starts by checking for side comment at beginning
+  \expandafter\def\csname#1\endcsname{%
+    \@ifnextchar({\csname algocf@#1strip\endcsname}{\csname algocf@#1strip\endcsname()}%
+  }%
+  % next we strip comment and include it in cmd that get body and check last side comment
+  \expandafter\algocf@longdef\csname algocf@#1strip\endcsname(##1)##2{\csname algocf@#1checkcomfol\endcsname{##1}{##2}}%
+  % now check for last side comment; args are : <first side com (could be empty)>, <body of cmd>
+  \expandafter\algocf@longdef\csname algocf@#1checkcomfol\endcsname##1##2{\@ifnextchar({\csname algocf@#1withendcom\endcsname{##1}{##2}}{\csname algocf@#1noendcom\endcsname{##1}{##2}}}% call macro that manages end of command, with or without last side comment
+  % finally manage end of macro... with end side comment...
+  \expandafter\algocf@longdef\csname algocf@#1withendcom\endcsname##1##2(##3){%
+    \csname algocf@#1main\endcsname{##1}{##2}{##3}}%
+  % ... or without end side comment
+  \expandafter\algocf@longdef\csname algocf@#1noendcom\endcsname##1##2{%
+    \csname algocf@#1main\endcsname{##1}{##2}{}}%
+  \algocf@newcommand{algocf@#1main}[3]{#2}%
+}%
+%
+% 2. kind of if-else : for command with two blocks as if-then-else 
+\algocf@longdef\algocf@newcmdside@koif#1#2{% <name of cmd><body of cmd>
+  % command starts by checking for side comment at beginning
+  \expandafter\def\csname#1\endcsname{%
+    \@ifnextchar({\csname algocf@#1strip\endcsname}{\csname algocf@#1strip\endcsname()}%
+  }%
+  % next we strip comment and include it in cmd that get body and check last side comment
+  \expandafter\algocf@longdef\csname algocf@#1strip\endcsname(##1)##2##3{\csname algocf@#1checkcomfol\endcsname{##1}{##2}{##3}}%
+  % now check for last side comment; args are : <1st side com>, <1st body of cmd>, <2nd body of cmd>
+  \expandafter\algocf@longdef\csname algocf@#1checkcomfol\endcsname##1##2##3{\@ifnextchar({\csname algocf@#1withendcom\endcsname{##1}{##2}{##3}}{\csname algocf@#1noendcom\endcsname{##1}{##2}{##3}}}% call macro that manages end of command, with or without last side comment
+  % finally manage end of macro... with end side comment...
+  \expandafter\algocf@longdef\csname algocf@#1withendcom\endcsname##1##2##3(##4){%
+    \csname algocf@#1main\endcsname{##1}{##2}{##3}{##4}}%
+  % ... or without end side comment
+  \expandafter\algocf@longdef\csname algocf@#1noendcom\endcsname##1##2##3{%
+    \csname algocf@#1main\endcsname{##1}{##2}{##3}{}}%
+  \algocf@newcommand{algocf@#1main}[4]{#2}%
+}%
+%
+% \algocf@newcmdsides<name><arity><body><tail><closing>
+%   Like the command above, but with an optional side text at the end
+%   of the command as well, i.e.:
+%     \<name>(<side_text>)<argX><argY>(<end_text>)
+%   It may be a bit confusing that <arity> doesn't count <end_text>,
+%   but since it is for internal use, the naming can be a little more
+%   fuzzy. This function behaves as if:
+%     <body'> = <body><if end_text: tail{end_text}><closing>
+\algocf@longdef\algocf@newcmdsides#1#2#3#4#5{%
+       \expandafter\def\csname#1\endcsname{%
+               \@ifnextchar({\csname algocf@#1strip\endcsname}{\csname algocf@#1strip\endcsname()}%
+       }%
+       \expandafter\algocf@longdef\csname algocf@#1strip\endcsname(##1){\csname algocf@#1main\endcsname{##1}}%
+       \algocf@newcommand{algocf@#1main}[#2]{#3\@ifnextchar({\csname algocf@#1end\endcsname}{#4#5}}%
+       \expandafter\algocf@longdef\csname algocf@#1end\endcsname(##1){#4{##1}\strut\par}%
+}%
+%
+% definition of commands which can be redefined in options of the package.
+%
+\newcounter{AlgoLine}%
+\setcounter{AlgoLine}{0}%
+%
+\newcommand{\algocf@algocfref}{\relax}%
+\newcommand{\listalgorithmcfname}{}%
+\newcommand{\algorithmcfname}{}%
+\@ifundefined{algorithmautorefname}{\newcommand{\algorithmautorefname}{algorithm}}{\renewcommand{\algorithmautorefname}{algorithm}}%
+\newcommand{\algorithmcflinename}{}%
+\newcommand{\algocf@typo}{}%
+\newcommand{\@algocf@procname}{}\newcommand{\procedureautorefname}{}%
+\newcommand{\SetAlgoProcName}[2]{\renewcommand{\@algocf@procname}{#1}\renewcommand{\procedureautorefname}{#2}}%
+\newcommand{\@algocf@funcname}{}\newcommand{\functionautorefname}{}%
+\newcommand{\SetAlgoFuncName}[2]{\renewcommand{\@algocf@funcname}{#1}\renewcommand{\functionautorefname}{#2}}%
+\newcommand{\@algocf@titleofalgoname}{\algorithmcfname}%
+\newcommand{\@algocf@algotitleofalgo}{%
+  \renewcommand{\@algocf@titleofalgoname}{\algorithmcfname}}%
+\newcommand{\@algocf@proctitleofalgo}{%
+  \renewcommand{\@algocf@titleofalgoname}{\algocf@procname}}%
+%
+\newcommand{\algocf@style}{plain}%
+\newcommand{\@ResetCounterIfNeeded}{}%
+\newcommand{\@titleprefix}{}%
+%
+\newcommand{\algocf@numbering}[1]{\newcommand{\algocf@within}{#1}}%
+%
+\newcommand{\defaultsmacros@algo}{\algocf@defaults@shortend}%
+%
+\newcommand{\algocf@list}{loa}%
+\newcommand{\algocf@float}{algocf}%
+%
+\newcommand{\algocf@envname}{algorithm}%
+\newcommand{\algocf@listofalgorithms}{listofalgorithms}%
+%
+%
+%% redefine chapter so that it adds a vspace in the loa as the original does for lof and lot
+% \let\algocf@original@chapter=\chapter%
+% \def\chapter{\expandafter\addtocontents{loa}{\protect\addvspace{10\p@}}\algocf@original@chapter}%
+%
+% bug correction with hyperref submitted by Hubert Meier
+\begingroup\expandafter\expandafter\expandafter\endgroup 
+\expandafter\ifx\csname @chapter\endcsname\relax\else 
+% \let\algocf@original@chapter=\chapter% 
+% \def\chapter{\addtocontents{loa}{\protect\addvspace{10\p@}}\algocf@original@chapter}% 
+\let\algocf@original@chapter=\@chapter%
+\@ifclassloaded{krantz}{%
+\def\@chapter[#1][#2]#3{\algocf@original@chapter[#1][#2]{#3}\addtocontents{loa}{\protect\addvspace{10\p@}}}% 
+}{%
+\def\@chapter[#1]#2{\algocf@original@chapter[#1]{#2}\addtocontents{loa}{\protect\addvspace{10\p@}}}% 
+}%
+\fi
+%
+%% if@restonecol is defined in article and book but some other classes don't define it and we need it, so we do
+\ifx\if@restonecol\relax\else\newif\if@restonecol\fi%
+%
+%
+%%%%%%%%%%%%%%%%%%%%%% Declaration of Options %%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\RequirePackage{ifthen}%
+%
+\newboolean{algocf@displayblockmarkers}\setboolean{algocf@displayblockmarkers}{false}%
+\DeclareOption{displayblockmarkers}{%
+  \setboolean{algocf@displayblockmarkers}{true}%
+}
+\newboolean{algocf@displaygroupmarkers}{\setboolean{algocf@displaygroupmarkers}{false}
+\DeclareOption{displaygroupmarkers}{%
+  \setboolean{algocf@displaygroupmarkers}{true}%
+}
+%
+\newboolean{algocf@nokwfunc}\setboolean{algocf@nokwfunc}{false}%
+\DeclareOption{nokwfunc}{%
+  \setboolean{algocf@nokwfunc}{true}%
+}%
+%
+\newboolean{algocf@oldcommands}\setboolean{algocf@oldcommands}{false}%
+\DeclareOption{oldcommands}{%
+  \setboolean{algocf@oldcommands}{true}%
+}%
+%
+\newboolean{algocf@leftlinenumber}\setboolean{algocf@leftlinenumber}{true}%
+\newcommand{\setLeftLinesNumbers}{\setboolean{algocf@leftlinenumber}{true}}%
+\newcommand{\setRightLinesNumbers}{\setboolean{algocf@leftlinenumber}{false}}%
+\DeclareOption{rightnl}{%
+  \setRightLinesNumbers%
+}%
+%
+\newboolean{algocf@endfloat}\setboolean{algocf@endfloat}{false}%
+\DeclareOption{endfloat}{%
+  \setboolean{algocf@endfloat}{true}%
+  \newcounter{postalgo}\setcounter{postalgo}{0}%
+}%
+%
+\newboolean{algocf@procnumbered}\setboolean{algocf@procnumbered}{false}%
+\DeclareOption{procnumbered}{%
+  \setboolean{algocf@procnumbered}{true}%
+}%
+%
+\DeclareOption{algo2e}{%
+  \renewcommand{\algocf@envname}{algorithm2e}%
+  \renewcommand{\algocf@listofalgorithms}{listofalgorithmes}%
+}%
+%
+\newboolean{algocf@slide}\setboolean{algocf@slide}{false}%
+\DeclareOption{slide}{%
+  \setboolean{algocf@slide}{true}%
+}%
+%
+\newboolean{algocf@figurecaption}\setboolean{algocf@figurecaption}{false}%
+\DeclareOption{figure}{%
+\renewcommand{\algocf@list}{lof}%
+\renewcommand{\algocf@float}{figure}%
+\AtBeginDocument{\@ifpackageloaded{caption}{\setboolean{algocf@figurecaption}{true}}{}}%
+}%
+%
+\newboolean{algocf@optonelanguage}\setboolean{algocf@optonelanguage}{false}%
+\DeclareOption{onelanguage}{\setboolean{algocf@optonelanguage}{true}}%
+%
+\newcommand{\algocf@languagechoosen}{english}%
+\newboolean{algocf@localkw@english}\setboolean{algocf@localkw@english}{true}%
+\DeclareOption{englishkw}{%
+\setboolean{algocf@localkw@english}{true}%
+}%
+%
+\DeclareOption{english}{%
+\renewcommand{\listalgorithmcfname}{List of Algorithms}%
+\renewcommand{\algorithmcfname}{Algorithm}%
+\renewcommand{\algorithmautorefname}{algorithm}%
+\renewcommand{\algorithmcflinename}{line}%
+\renewcommand{\algocf@typo}{}%
+\renewcommand{\@algocf@procname}{Procedure}%
+\renewcommand{\@algocf@funcname}{Function}%
+\renewcommand{\procedureautorefname}{procedure}%
+\renewcommand{\functionautorefname}{function}%
+\renewcommand{\algocf@languagechoosen}{english}%
+}%
+%
+%----
+\newboolean{algocf@localkw@french}\setboolean{algocf@localkw@french}{false}%
+\DeclareOption{frenchkw}{%
+\setboolean{algocf@localkw@french}{true}%
+}%
+%
+\DeclareOption{french}{%
+\renewcommand{\listalgorithmcfname}{Liste des Algorithmes}%
+\renewcommand{\algorithmcfname}{Algorithme}%
+\renewcommand{\algorithmautorefname}{algorithme}%
+\renewcommand{\algorithmcflinename}{ligne}%
+\renewcommand{\algocf@typo}{\ }%
+\renewcommand{\@algocf@procname}{Proc\'edure}%
+\renewcommand{\@algocf@funcname}{Fonction}%
+\renewcommand{\procedureautorefname}{proc\'edure}%
+\renewcommand{\functionautorefname}{fonction}%
+\renewcommand{\algocf@languagechoosen}{french}%
+}%
+%
+%----
+\newboolean{algocf@localkw@czech}\setboolean{algocf@localkw@czech}{false}%
+\DeclareOption{czechkw}{%
+\setboolean{algocf@localkw@czech}{true}%
+}%
+%
+\DeclareOption{czech}{%
+\renewcommand{\listalgorithmcfname}{Seznam algoritm\r{u}}%
+\renewcommand{\algorithmcfname}{Algoritmus}%
+\renewcommand{\algorithmautorefname}{\algorithmcfname}%
+\renewcommand{\algorithmcflinename}{Radek}%
+\renewcommand{\algocf@typo}{}%
+\renewcommand{\@algocf@procname}{Procedura}%
+\renewcommand{\@algocf@funcname}{Funkce}%
+\renewcommand{\procedureautorefname}{\@algocf@procname}%
+\renewcommand{\functionautorefname}{\@algocf@funcname}%
+\renewcommand{\algocf@languagechoosen}{czech}%
+}%
+%
+%----
+\newboolean{algocf@localkw@german}\setboolean{algocf@localkw@german}{false}%
+\DeclareOption{germankw}{%
+\setboolean{algocf@localkw@german}{true}%
+}%
+%
+\DeclareOption{german}{%
+\renewcommand{\listalgorithmcfname}{Liste der Algorithmen}%
+\renewcommand{\algorithmcfname}{Algorithmus}%
+\renewcommand{\algorithmautorefname}{\algorithmcfname}%
+\renewcommand{\algorithmcflinename}{Zeile}%
+\renewcommand{\algocf@typo}{\ }%
+\renewcommand{\@algocf@procname}{Prozedur}%
+\renewcommand{\@algocf@funcname}{Funktion}%
+\renewcommand{\procedureautorefname}{\@algocf@procname}%
+\renewcommand{\functionautorefname}{\@algocf@funcname}%
+\renewcommand{\algocf@languagechoosen}{german}%
+}%
+%
+%----
+\DeclareOption{ngermankw}{%
+\setboolean{algocf@localkw@german}{true}%
+}%
+%
+\DeclareOption{ngerman}{%
+\renewcommand{\listalgorithmcfname}{Liste der Algorithmen}%
+\renewcommand{\algorithmcfname}{Algorithmus}%
+\renewcommand{\algorithmautorefname}{\algorithmcfname}%
+\renewcommand{\algorithmcflinename}{Zeile}%
+\renewcommand{\algocf@typo}{\ }%
+\renewcommand{\@algocf@procname}{Prozedur}%
+\renewcommand{\@algocf@funcname}{Funktion}%
+\renewcommand{\procedureautorefname}{\@algocf@procname}%
+\renewcommand{\functionautorefname}{\@algocf@funcname}%
+\renewcommand{\algocf@languagechoosen}{german}%
+}%
+%
+%----
+\newboolean{algocf@localkw@portuguese}\setboolean{algocf@localkw@portuguese}{false}%
+\DeclareOption{portuguesekw}{%
+\setboolean{algocf@localkw@portuguese}{true}%
+}%
+%
+\DeclareOption{portuguese}{%
+\renewcommand{\listalgorithmcfname}{Lista de Algoritmos}%
+\renewcommand{\algorithmcfname}{Algoritmo}%
+\renewcommand{\algorithmautorefname}{algoritmo}%
+\renewcommand{\algorithmcflinename}{linha}%
+\renewcommand{\algocf@typo}{}%
+\renewcommand{\@algocf@procname}{Procedimento}%
+\renewcommand{\@algocf@funcname}{Fun\c{c}\~{a}o}%
+\renewcommand{\procedureautorefname}{procedimento}%
+\renewcommand{\functionautorefname}{fun\c{c}\~{a}o}%
+\renewcommand{\algocf@languagechoosen}{portuguese}%
+}%
+%
+%----
+\newboolean{algocf@localkw@italiano}\setboolean{algocf@localkw@italiano}{false}%
+\DeclareOption{italianokw}{%
+\setboolean{algocf@localkw@italiano}{true}%
+}%
+%
+\DeclareOption{italiano}{%
+\renewcommand{\listalgorithmcfname}{Elenco degli algoritmi}%
+\renewcommand{\algorithmcfname}{Algoritmo}%
+\renewcommand{\algorithmautorefname}{algoritmo}%
+\renewcommand{\algorithmcflinename}{riga}%
+\renewcommand{\algocf@typo}{}%
+\renewcommand{\@algocf@procname}{Procedura}%
+\renewcommand{\@algocf@funcname}{Funzione}%
+\renewcommand{\procedureautorefname}{procedura}%
+\renewcommand{\functionautorefname}{funzione}%
+\renewcommand{\algocf@languagechoosen}{italiano}%
+}%
+%----
+\newboolean{algocf@localkw@spanish}\setboolean{algocf@localkw@spanish}{false}%
+\DeclareOption{spanishkw}{%
+\setboolean{algocf@localkw@spanish}{true}%
+}%
+%
+\DeclareOption{spanish}{%
+\renewcommand{\listalgorithmcfname}{\'Indice de algoritmos}%
+\renewcommand{\algorithmcfname}{Algoritmo}%
+\renewcommand{\algorithmautorefname}{algoritmo}%
+\renewcommand{\algorithmcflinename}{l\'inea}%
+\renewcommand{\algocf@typo}{}%
+\renewcommand{\@algocf@procname}{Procedimiento}%
+\renewcommand{\@algocf@funcname}{Funci\'on}%
+\renewcommand{\procedureautorefname}{procedimiento}%
+\renewcommand{\functionautorefname}{funci\'on}%
+\renewcommand{\algocf@languagechoosen}{spanish}%
+}%
+%----
+\newboolean{algocf@localkw@slovak}\setboolean{algocf@localkw@slovak}{false}%
+\DeclareOption{slovakkw}{%
+\setboolean{algocf@localkw@slovak}{true}%
+}%
+%
+\DeclareOption{slovak}{%
+\renewcommand{\listalgorithmcfname}{Zoznam algoritmov}%
+\renewcommand{\algorithmcfname}{Algoritmus}%
+\renewcommand{\algorithmautorefname}{\algorithmcfname}%
+\renewcommand{\algorithmcflinename}{Radek}%
+\renewcommand{\algocf@typo}{}%
+\renewcommand{\@algocf@procname}{Proced\'{u}ra}%
+\renewcommand{\@algocf@funcname}{Funkcia}%
+\renewcommand{\procedureautorefname}{\@algocf@procname}%
+\renewcommand{\functionautorefname}{\@algocf@funcname}%
+\renewcommand{\algocf@languagechoosen}{slovak}%
+}%
+%
+%----
+\newboolean{algocf@localkw@croatian}\setboolean{algocf@localkw@croatian}{false}%
+\DeclareOption{croatiankw}{%
+\setboolean{algocf@localkw@croatian}{true}%
+}%
+%
+\DeclareOption{croatian}{%
+\renewcommand{\listalgorithmcfname}{Popis algoritama}%
+\renewcommand{\algorithmcfname}{Algoritam}%
+\renewcommand{\algorithmautorefname}{\algorithmcfname}%
+\renewcommand{\algorithmcflinename}{redak}%
+\renewcommand{\algocf@typo}{}%
+\renewcommand{\@algocf@procname}{Procedura}%
+\renewcommand{\@algocf@funcname}{Funkcija}%
+\renewcommand{\procedureautorefname}{\@algocf@procname}%
+\renewcommand{\functionautorefname}{\@algocf@funcname}%
+\renewcommand{\algocf@languagechoosen}{croatian}%
+}%
+%%% adding 'turkish' option customization
+%
+%----
+\newboolean{algocf@localkw@turkish}\setboolean{algocf@localkw@turkish}{false}%
+\DeclareOption{turkishkw}{%
+\setboolean{algocf@localkw@turkish}{true}%
+}%
+\DeclareOption{turkish}{%
+\renewcommand{\listalgorithmcfname}{Algoritma Listesi}%
+\renewcommand{\algorithmcfname}{Algoritma}%
+\renewcommand{\algorithmautorefname}{algoritma}%
+\renewcommand{\algorithmcflinename}{çizgi}%
+\renewcommand{\algocf@typo}{}%
+\renewcommand{\@algocf@procname}{Prosedür}%
+\renewcommand{\@algocf@funcname}{Fonksiyon}%
+\renewcommand{\procedureautorefname}{prosedür}%
+\renewcommand{\functionautorefname}{fonksiyon}%
+\renewcommand{\algocf@languagechoosen}{turkish}%
+}%
+%
+% OPTIONs plain, boxed, ruled, algoruled & boxruled
+%
+\newcommand{\algocf@style@plain}{\renewcommand{\algocf@style}{plain}}%
+\newcommand{\algocf@style@boxed}{\renewcommand{\algocf@style}{boxed}}%
+\newcommand{\algocf@style@ruled}{\renewcommand{\algocf@style}{ruled}}%
+\newcommand{\algocf@style@algoruled}{\renewcommand{\algocf@style}{algoruled}}%
+\newcommand{\algocf@style@boxruled}{\renewcommand{\algocf@style}{boxruled}}%
+\newcommand{\algocf@style@tworuled}{\renewcommand{\algocf@style}{tworuled}}%
+\newcommand{\algocf@style@plainruled}{\renewcommand{\algocf@style}{plainruled}}%
+\newcommand{\RestyleAlgo}[1]{\csname algocf@style@#1\endcsname}%
+\DeclareOption{plain}{\algocf@style@plain}%
+\DeclareOption{plainruled}{\algocf@style@plainruled}%
+\DeclareOption{boxed}{\algocf@style@boxed}%
+\DeclareOption{ruled}{\algocf@style@ruled}%
+\DeclareOption{algoruled}{\algocf@style@algoruled}%
+\DeclareOption{boxruled}{\algocf@style@boxruled}%
+\DeclareOption{tworuled}{\algocf@style@tworuled}%
+%
+% OPTIONs algopart,algochapter & algosection
+%
+\DeclareOption{algopart}{\algocf@numbering{part}}%       %algo part numbered
+\DeclareOption{algochapter}{\algocf@numbering{chapter}}% %algo chapter numbered
+\DeclareOption{algosection}{\algocf@numbering{section}}% %algo section numbered
+%
+% OPTIONs resetcount & noresetcount
+%
+\DeclareOption{resetcount}{\renewcommand{\@ResetCounterIfNeeded}{\setcounter{AlgoLine}{0}}}%
+\DeclareOption{noresetcount}{\renewcommand{\@ResetCounterIfNeeded}{}}%
+%
+% OPTIONs algorithm hanging for long lines
+%
+\newlength{\algocf@hangindent}\setlength{\algocf@hangindent}{.5em}
+\newcommand{\SetAlgoHangIndent}[1]{\setlength{\algocf@hangindent}{#1}}
+%
+\newboolean{algocf@hanging}\setboolean{algocf@hanging}{true}% hanging is handle by default
+\newboolean{algocf@hanginginout}\setboolean{algocf@hanginginout}{false}% inout are managed as previously: hanging set by inout keywords
+\newboolean{algocf@hangingcomment}\setboolean{algocf@hangingcomment}{false}% comment that are not side comment are indented accordingly to comment mark, not as normal text
+\newcommand{\algocf@everyparnl}{\relax}%
+\newcommand{\algocf@everyparhanging}{\hangafter=1\hangindent=\algocf@hangindent\relax}%
+\newcommand{\algocf@everypar}{\algocf@everyparnl\algocf@everyparhanging}%
+\newcommand{\algocf@seteverypar}{%
+  \ifthenelse{\boolean{algocf@hanging}}{\everypar{\algocf@everypar}}{\relax}%
+}%
+%
+\newcommand{\algocf@seteveryparnl}[1]{\renewcommand{\algocf@everyparnl}{#1}\everypar{\algocf@everypar}}%
+\newcommand{\algocf@seteveryparhanging}[1]{%
+\let\algocf@oldeveryparhanging=\algocf@everyparhanging%
+\renewcommand{\algocf@everyparhanging}{#1}\everypar{\algocf@everypar}%
+}%
+\newcommand{\algocf@reseteveryparhanging}{%
+\let\algocf@everyparhanging=\algocf@oldeveryparhanging%
+\everypar{\algocf@everypar}%
+}%
+\DeclareOption{hanginginout}{\setboolean{algocf@hanginginout}{true}}%
+\DeclareOption{hangingcomment}{\setboolean{algocf@hangingcomment}{true}}%
+\DeclareOption{noalgohanging}{%
+  \setboolean{algocf@hanginginout}{false}%
+  \setboolean{algocf@hangingcomment}{false}%
+  \setboolean{algocf@hanging}{false}%
+}%
+%\newcommand{
+%
+%
+% OPTION linesnumbered
+%
+\newboolean{algocf@linesnumbered}\setboolean{algocf@linesnumbered}{false}%
+\newcommand{\algocf@linesnumbered}{\relax}%
+\DeclareOption{linesnumbered}{%
+  \setboolean{algocf@linesnumbered}{true}%
+  \renewcommand{\algocf@linesnumbered}{\algocf@seteveryparnl{\nl}}%
+}%
+%
+% OPTION linesnumberedhidden
+%
+\DeclareOption{linesnumberedhidden}{%
+  \setboolean{algocf@linesnumbered}{true}%
+  \renewcommand{\algocf@linesnumbered}{\algocf@seteveryparnl{\stepcounter{AlgoLine}}}%
+}%
+%
+% OPTION commentsnumbered inoutnumbered
+%
+\newboolean{algocf@commentsnumbered}\setboolean{algocf@commentsnumbered}{false}%
+\DeclareOption{commentsnumbered}{\setboolean{algocf@commentsnumbered}{true}}%
+\newboolean{algocf@inoutnumbered}\setboolean{algocf@inoutnumbered}{false}%
+\DeclareOption{inoutnumbered}{\setboolean{algocf@inoutnumbered}{true}}%
+%
+% OPTIONs titlenumbered & titlenotnumbered
+%
+\DeclareOption{titlenumbered}{%
+  \renewcommand{\@titleprefix}{%
+    \refstepcounter{\algocf@float}%
+    \AlTitleSty{\AlTitleFnt\@algocf@titleofalgoname\ \expandafter\csname the\algocf@float\endcsname\algocf@typo: }%
+  }%
+}%
+%
+\DeclareOption{titlenotnumbered}{\renewcommand{\@titleprefix}{%
+    \AlTitleSty{\AlTitleFnt\@algocf@titleofalgoname\algocf@typo: }}%
+}%
+%
+% OPTIONs algonl
+% line numbered with the counter of the algorithm
+%
+\DeclareOption{algonl}{\renewcommand{\theAlgoLine}{\expandafter\csname the\algocf@float\endcsname.\arabic{AlgoLine}}}%
+%
+% OPTIONs lined, vlined & noline
+%
+\DeclareOption{lined}{\AtBeginDocument{\SetAlgoLined}}%   \SetAlgoLined (default)
+\DeclareOption{vlined}{\AtBeginDocument{\SetAlgoVlined}}% \SetAlgoVlined
+\DeclareOption{noline}{\AtBeginDocument{\SetAlgoNoLine}}%\SetAlgoNoLine
+%
+% OPTIONs longend, shotend & noend
+%
+\DeclareOption{longend}{\AtBeginDocument{\SetAlgoLongEnd}}%  \SetAlgoLongEnd
+\DeclareOption{shortend}{\AtBeginDocument{\SetAlgoShortEnd}}%\SetAlgoShortEnd
+\DeclareOption{noend}{\AtBeginDocument{\SetAlgoNoEnd}}%      \SetAlgoNoEnd
+%
+\DeclareOption{nosemicolon}{\AtBeginDocument{\DontPrintSemicolon}}%      \SetAlgoNoEnd
+%
+% OPTION dotoc
+%
+\newboolean{algocf@dotocloa}\setboolean{algocf@dotocloa}{false}%
+\DeclareOption{dotocloa}{%
+  \setboolean{algocf@dotocloa}{true}%
+}
+%
+% OPTION comments
+%
+\newboolean{algocf@optfillcomment}\setboolean{algocf@optfillcomment}{true}%
+\DeclareOption{nofillcomment}{%
+  \setboolean{algocf@optfillcomment}{false}%
+}%
+\DeclareOption{fillcomment}{%
+  \setboolean{algocf@optfillcomment}{true}%
+}%
+%
+% OPTION sidecommments
+%
+\newboolean{algocf@scleft}\setboolean{algocf@scleft}{false}%
+\DeclareOption{scleft}{%
+  \setboolean{algocf@scleft}{true}%
+}%
+\DeclareOption{sright}{% default
+  \setboolean{algocf@scleft}{false}%
+}%
+%
+% OPTION norelsize
+%
+\newboolean{algocf@norelsize}\setboolean{algocf@norelsize}{false}%
+\DeclareOption{norelsize}{%
+  \setboolean{algocf@norelsize}{true}%
+}%
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%% Execution of Options %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\ExecuteOptions{english,plain,resetcount,titlenotnumbered,lined,shortend}%
+%
+\ProcessOptions%
+%
+\@algocf@algotitleofalgo% fix name for \TitleOfAlgo to \algorithmcfname by default
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%% Package Loading %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%
+\RequirePackage{xspace}%
+%
+\ifthenelse{\boolean{algocf@endfloat}}{%
+  \RequirePackage{endfloat}%
+}{\relax}%
+%
+\ifthenelse{\boolean{algocf@norelsize}}{%
+  \newcommand{\relsize}[1]{\scriptsize}%
+}{%
+  \RequirePackage{relsize}%
+}%
+%
+\ifthenelse{\boolean{algocf@slide}}{\RequirePackage{color}}{}%
+%
+%
+\AtEndOfPackage{%
+  \ifthenelse{\boolean{algocf@dotocloa}}{%
+    \renewcommand{\listofalgorithms}{\tocfile{\listalgorithmcfname}{loa}}%
+  }{\relax}%
+}%
+%
+% if loa in toc required, load tocbibind package if not already done.
+\ifthenelse{\boolean{algocf@dotocloa}}{%
+  \ifx\@tocextra\undefined%
+  \RequirePackage{tocbibind}%
+  \fi%
+}{\relax}%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Main Part %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\newcommand{\algocf@name}{algorithm2e}%
+\newcommand{\algocf@date}{october 19 2015}%
+\newcommand{\algocf@version}{Release 5.1}%
+\newcommand{\algocf@id}{\algocf@version\space -- \algocf@date\space --}%
+\typeout{********************************************************^^JPackage `\algocf@name'\space\algocf@id^^J%
+         - algorithm2e-announce@lirmm.fr  mailing list for announcement about releases^^J%
+         - algorithm2e-discussion@lirmm.fr mailing list for discussion about package^^J%
+         subscribe by emailing sympa@lirmm.fr with 'subscribe <list> <firstname name>'^^J%
+         - Author: Christophe Fiorio (christophe.fiorio@umontpellier.fr)^^J********************************************************}%
+%%
+%%
+%%
+%%
+%%
+%%
+%%%% hyperref compatibility tricks: Hyperref package defines H counters from
+   % standard counters (i.e \theHpage from \thepage) and check some particular
+   % counters of some packages, unfortunately it doesn't do the same for
+   % algorithm2e package but act as Hcounter was defined. To avoid errors we
+   % defined \theHalgocf ourself
+%%%%
+%
+\@ifundefined{theHalgocf}{\def\theHalgocf{\thealgocf}}{}%
+\@ifundefined{theHAlgoLine}{\def\theHAlgoLine{\theAlgoLine}}{}%
+\@ifundefined{theHalgocfproc}{\def\theHalgocfproc{0}}{}%
+\@ifundefined{theHalgocffunc}{\def\theHalgocffunc{0}}{}%
+\@ifundefined{toclevel@algocf}{\def\toclevel@algocf{0}}{}%
+%
+% autoref from hyperref needs an autorefname, so we give it.
+\def\AlgoLineautorefname{\algorithmcflinename}%
+\def\algocfautorefname{\algorithmautorefname}%
+\def\algocfprocautorefname{\procedureautorefname}%
+\def\algocffuncautorefname{\functionautorefname}%
+%%
+%%
+%%
+\newcommand{\@defaultskiptotal}{0.5em}%
+\newskip\skiptotal\skiptotal=0.5em%
+\newskip\skiplinenumber\skiplinenumber=\hsize\advance\skiplinenumber by-\skiptotal%
+\newskip\skiprule%
+\newskip\skiphlne%
+\newskip\skiptext%
+\newskip\skiplength%
+\newskip\algomargin%
+\newskip\skipalgocfslide\skipalgocfslide=1em%
+\newdimen\algowidth%
+\newdimen\inoutsize%
+\newdimen\inoutindent%
+\newdimen\interspacetitleruled\setlength{\interspacetitleruled}{2pt}%
+\newdimen\interspacealgoruled\setlength{\interspacealgoruled}{2pt}%
+\newdimen\interspacetitleboxruled\setlength{\interspacetitleboxruled}{2\lineskip}%
+%
+\newcommand{\@algoskip}{\smallskip}%
+\newcommand{\SetAlgoSkip}[1]{\renewcommand{\@algoskip}{\csname#1\endcsname}}%
+\newcommand{\@algoinsideskip}{\relax}%
+\newcommand{\SetAlgoInsideSkip}[1]{\renewcommand{\@algoinsideskip}{\csname#1\endcsname}}%
+%
+% ruledwidth
+%
+\newlength{\algocf@ruledwidth}\setlength{\algocf@ruledwidth}{\linewidth}%
+\newboolean{algocf@customruledwidth}\setboolean{algocf@customruledwidth}{false}%
+\newcommand{\SetCustomAlgoRuledWidth}[1]{%
+  \setboolean{algocf@customruledwidth}{true}%
+  \ifthenelse{\boolean{algocf@customruledwidth}}{\setlength{\algocf@ruledwidth}{#1}}{\relax}%
+}%
+%
+\newsavebox{\algocf@inoutbox}%
+\newsavebox{\algocf@inputbox}%
+%%
+%%
+\newcommand{\arg@e}{}%
+\newcommand{\arg@space}{\ }%
+\newcommand{\BlankLine}{\vskip 1ex}%
+%%
+\newcommand{\vespace}{1ex}%
+\newcommand{\SetInd}[2]{%
+\skiprule=#1%
+\skiptext=#2%
+\skiplength=\skiptext\advance\skiplength by \skiprule\advance\skiplength by 0.4pt}%
+\SetInd{0.5em}{1em}
+\algomargin=\leftskip\advance\algomargin by \parindent%
+\newcommand{\IncMargin}[1]{\advance\algomargin by #1}%
+\newcommand{\DecMargin}[1]{\advance\algomargin by -#1}%
+\newcommand{\SetNlSkip}[1]{%
+  \renewcommand{\@defaultskiptotal}{#1}%
+  \setlength{\skiptotal}{#1}}%
+%%
+\newskip\AlCapSkip\AlCapSkip=0ex%
+\newskip\AlCapHSkip\AlCapSkip=0ex%
+\newcommand{\SetAlCapSkip}[1]{\setlength{\AlCapSkip}{#1}}%
+\newcommand{\SetAlCapHSkip}[1]{\setlength{\AlCapHSkip}{#1}}%
+\SetAlCapHSkip{.5\algomargin}%
+%%
+%%
+\newskip\algoskipindent
+\newcommand{\algocf@adjustskipindent}{%
+  \algoskipindent=\skiprule%
+  \advance\algoskipindent by \skiptext\advance\algoskipindent by 0.4pt}
+\algocf@adjustskipindent%
+%
+\newcommand{\Indentp}[1]{\advance\leftskip by #1}%
+\newcommand{\Indp}{\algocf@adjustskipindent\advance\leftskip by \algoskipindent}
+\newcommand{\Indpp}{\advance\leftskip by 0.5em}%
+\newcommand{\Indm}{\algocf@adjustskipindent\advance\leftskip by -\algoskipindent}
+\newcommand{\Indmm}{\advance\leftskip by -0.5em}%
+%
+%%
+%%
+%% Line Numbering
+%%
+%%
+% number line style
+\newcommand{\algocf@nlrelsize}{-2}\newcommand{\SetAlgoNlRelativeSize}[1]{\renewcommand{\algocf@nlrelsize}{#1}}%
+\newcommand{\NlSty}[1]{\textnormal{\textbf{\relsize{\algocf@nlrelsize}#1}}}% default definition
+\newcommand{\SetNlSty}[3]{\renewcommand{\NlSty}[1]{\textnormal{\csname#1\endcsname{\relsize{\algocf@nlrelsize}#2##1#3}}}}%
+%
+% nl definitions
+%
+\newsavebox{\algocf@nlbox}%
+\newcommand{\algocf@printnl}[1]{%
+  \ifthenelse{\boolean{algocf@leftlinenumber}}{%
+    \skiplinenumber=\skiptotal\advance\skiplinenumber by\leftskip%
+    \strut\raisebox{0pt}{\llap{\NlSty{#1}\kern\skiplinenumber}}\ignorespaces%
+  }{%
+    \sbox\algocf@nlbox{\NlSty{#1}}%
+    \skiplinenumber=\hsize\advance\skiplinenumber by-\leftskip\advance\skiplinenumber by-\skiptext%
+    \advance\skiplinenumber by\algomargin\advance\skiplinenumber by.3em\advance\skiplinenumber by-\wd\algocf@nlbox%
+    % to handle particular case of until: printnl is after 'until' keyword has been writen, so we need to substract length of this keyword
+    \advance\skiplinenumber by-\algocf@skipuntil%
+    \strut\raisebox{0pt}{\rlap{\kern\skiplinenumber\NlSty{#1\ignorespaces}}}\ignorespaces%
+  }%
+}%
+\newcommand{\algocf@nl@sethref}[1]{%
+  \renewcommand{\theHAlgoLine}{\thealgocfproc.#1}%
+  \hyper@refstepcounter{AlgoLine}\gdef\@currentlabel{#1}%
+}%
+\newcommand{\nl}{%
+  \@ifundefined{hyper@refstepcounter}{% if not hyperref then do a simple refstepcounter
+    \refstepcounter{AlgoLine}\gdef\@currentlabel{\theAlgoLine}%
+  }{% else if hyperref, do the anchor so 2 lines in two differents algorithms cannot have the same href
+    \stepcounter{AlgoLine}\algocf@nl@sethref{\theAlgoLine}%
+  }% now we can do the line numbering
+  \algocf@printnl{\theAlgoLine}%
+}%
+%
+\newcommand{\nllabel}[1]{\label{#1}}%
+%
+\newcommand{\enl}{%
+  \@ifundefined{hyper@refstepcounter}{% if not hyperref then do a simple refstepcounter
+    \refstepcounter{AlgoLine}\gdef\@currentlabel{\theAlgoLine}%
+  }{% else if hyperref, do the anchor so 2 lines in two differents algorithms cannot have the same href
+    \stepcounter{AlgoLine}\algocf@nl@sethref{\theAlgoLine}%
+  }% now we can do the line numbering
+  \skiplinenumber=\hsize\advance\skiplinenumber by-\leftskip%
+  \strut\raisebox{0pt}{\rlap{\kern\skiplinenumber\strut\NlSty{\theAlgoLine}}}\ignorespaces%
+}%
+%% nlset
+\newcommand{\nlset}[1]{%
+  \@ifundefined{hyper@refstepcounter}{\protected@edef\@currentlabel{#1}}{\algocf@nl@sethref{#1}}\algocf@printnl{#1}%
+}%
+%
+%% lnl definitions
+\newcommand{\lnl}[1]{\nl\label{#1}\ignorespaces}%
+%
+%% lnlset
+\newcommand{\lnlset}[2]{\nlset{#2}\label{#1}}%
+%
+% set char put at end of each line
+%
+\newcommand{\algocf@endline}{\string;}
+\newcommand{\SetEndCharOfAlgoLine}[1]{\renewcommand{\algocf@endline}{#1}}
+%
+% end of line definition
+%
+\newcommand{\@endalgocfline}{\algocf@endline}% default definition: printsemicolon
+\newcommand{\DontPrintSemicolon}{\renewcommand{\@endalgocfline}{\relax}}%
+\newcommand{\PrintSemicolon}{\renewcommand{\@endalgocfline}{\algocf@endline}}%
+\newcommand{\@endalgoln}{\@endalgocfline\hfill\strut\par}%
+%
+% line numbering
+%
+\newcommand{\LinesNumbered}{\setboolean{algocf@linesnumbered}{true}\renewcommand{\algocf@linesnumbered}{\algocf@seteveryparnl{\nl}}}%
+\newcommand{\LinesNotNumbered}{%
+  \setboolean{algocf@linesnumbered}{false}%
+  \renewcommand{\algocf@linesnumbered}{\relax}%
+}%
+%
+\newcommand{\LinesNumberedHidden}{%
+  \setboolean{algocf@linesnumbered}{true}\renewcommand{\algocf@linesnumbered}{\algocf@seteveryparnl{\stepcounter{AlgoLine}}}}%
+\newcommand{\ShowLn}{\nlset{\theAlgoLine}\ignorespaces}% display the line number on this line (without labelling)
+\newcommand{\ShowLnLabel}[1]{\lnlset{#1}{\theAlgoLine}\ignorespaces}% display the line number and label this line
+%
+%%
+%
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Styling text commands
+%
+\newcommand{\AlFnt}{\relax}% default definition
+\newcommand{\SetAlFnt}[1]{\renewcommand{\AlFnt}{#1}}%
+\newcommand{\AlTitleFnt}{\relax}% default definition
+\newcommand{\SetAlTitleFnt}[1]{\renewcommand{\AlTitleFnt}{#1}}%
+%
+\newcommand{\AlCapFnt}{\relax}% default definition
+\newcommand{\SetAlCapFnt}[1]{\renewcommand{\AlCapFnt}{#1}}%
+\newcommand{\AlCapNameFnt}{\relax}% default definition
+\newcommand{\SetAlCapNameFnt}[1]{\renewcommand{\AlCapNameFnt}{#1}}%
+%
+\newcommand{\ProcFnt}{\relax}% default definition
+\newcommand{\SetProcFnt}[1]{\renewcommand{\ProcFnt}{#1}}%
+\newcommand{\ProcNameFnt}{\relax}% default definition
+\newcommand{\SetProcNameFnt}[1]{\renewcommand{\ProcNameFnt}{#1}}%
+\newcommand{\ProcArgFnt}{\relax}% default definition
+\newcommand{\SetProcArgFnt}[1]{\renewcommand{\ProcArgFnt}{#1}}%
+%
+\newcommand{\AlTitleSty}[1]{\textbf{#1}\unskip}% default definition
+\newcommand{\SetAlTitleSty}[1]{\renewcommand{\AlTitleSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}%
+\newcommand{\AlCapSty}[1]{\textnormal{\textbf{#1}}\unskip}% default definition
+\newcommand{\SetAlCapSty}[1]{\renewcommand{\AlCapSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}%
+\newcommand{\AlCapNameSty}[1]{\textnormal{#1}\unskip}% default definition
+\newcommand{\SetAlCapNameSty}[1]{\renewcommand{\AlCapNameSty}[1]{\textnormal{\csname #1\endcsname{##1}}\unskip}}%
+%
+\newcommand{\ProcSty}[1]{\AlCapSty{#1}}%
+\newcommand{\SetProcSty}[1]{\renewcommand{\ProcSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}%
+\newcommand{\ProcNameSty}[1]{\AlCapNameSty{#1}}%
+\newcommand{\SetProcNameSty}[1]{\renewcommand{\ProcNameSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}%
+\newcommand{\ProcArgSty}[1]{\AlCapNameSty{#1}}%
+\newcommand{\SetProcArgSty}[1]{\renewcommand{\ProcArgSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}%
+%
+\newcommand{\KwSty}[1]{\textnormal{\textbf{#1}}\unskip}% default definition
+\newcommand{\SetKwSty}[1]{\renewcommand{\KwSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}%
+\newcommand{\ArgSty}[1]{\textnormal{\emph{#1}}\unskip}%\SetArgSty{emph}
+\newcommand{\SetArgSty}[1]{\renewcommand{\ArgSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}%
+\newcommand{\FuncArgSty}[1]{\textnormal{\emph{#1}}\unskip}%\SetFuncArgSty{emph}
+\newcommand{\SetFuncArgSty}[1]{\renewcommand{\FuncArgSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}%
+\newcommand{\FuncSty}[1]{\textnormal{\texttt{#1}}\unskip}%\SetFuncSty{texttt}
+\newcommand{\SetFuncSty}[1]{\renewcommand{\FuncSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}%
+\newcommand{\ProgSty}[1]{\textnormal{\emph{#1}}\unskip}%\SetProgSty{emphg}
+\newcommand{\SetProgSty}[1]{\renewcommand{\ArgSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}%
+\newcommand{\DataSty}[1]{\textnormal{\textsf{#1}}\unskip}%%\SetDataSty{textsf}
+\newcommand{\SetDataSty}[1]{\renewcommand{\DataSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}%
+\newcommand{\CommentSty}[1]{\textnormal{\texttt{#1}}\unskip}%%\SetDataSty{texttt}
+\newcommand{\SetCommentSty}[1]{\renewcommand{\CommentSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}%
+\newcommand{\TitleSty}[1]{#1\unskip}%\SetTitleSty{}{}
+\newcommand{\SetTitleSty}[2]{\renewcommand{\TitleSty}[1]{%
+\csname#1\endcsname{\csname#2\endcsname##1}}\unskip}%
+\newcommand{\BlockMarkersSty}[1]{\KwSty{#1}}%
+\newcommand{\SetBlockMarkersSty}[1]{\renewcommand{\BlockMarkersSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}%
+%
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Block basic commands
+%
+\newcommand{\algocf@push}[1]{\advance\skiptotal by #1\moveright #1}%
+\newcommand{\algocf@pop}[1]{\advance\skiptotal by -#1}%
+\newcommand{\algocf@addskiptotal}{\advance\skiptotal by 0.4pt\advance\hsize by -0.4pt\advance\hsize by -\skiplength}% 0.4 pt=width of \vrule
+\newcommand{\algocf@subskiptotal}{\advance\skiptotal by -0.4pt\advance\hsize by 0.4pt\advance\hsize by \skiplength}% 0.4 pt=width of \vrule
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% group of instructions definition
+%
+\skiphlne=.8ex%
+\newcommand{\SetVlineSkip}[1]{\skiphlne=#1}%
+\newcommand{\algocf@bblock}{\BlockMarkersSty{begin}}%
+\newcommand{\algocf@eblock}{\BlockMarkersSty{end}}%
+\newcommand{\AlgoDisplayBlockMarkers}{\setboolean{algocf@displayblockmarkers}{true}}%
+\newcommand{\AlgoDontDisplayBlockMarkers}{\setboolean{algocf@displayblockmarkers}{false}}%
+\newcommand{\AlgoDisplayGroupMarkers}{\setboolean{algocf@displaygroupmarkers}{true}}%
+\newcommand{\AlgoDontDisplayGroupMarkers}{\setboolean{algocf@displaygroupmarkers}{false}}%
+\newcommand{\algocf@bblockcode}{%
+  \ifthenelse{\boolean{algocf@displayblockmarkers}}{\algocf@bblock\par}{\relax}%
+}%
+\newcommand{\algocf@eblockcode}{%
+  \ifthenelse{\boolean{algocf@displayblockmarkers}}{\algocf@eblock\par}{\relax}%
+}%
+\newcommand{\algocf@bgroupcode}{%
+  \ifthenelse{\boolean{algocf@displaygroupmarkers}}{\algocf@bblock}{\relax}%
+}%
+\newcommand{\algocf@egroupcode}{%
+  \ifthenelse{\boolean{algocf@displaygroupmarkers}}{\algocf@eblock}{\relax}%
+}%
+\newcommand{\SetAlgoBlockMarkers}[2]{%
+  \ifArgumentEmpty{#1}{%
+    \renewcommand{\algocf@bblock}{\relax}%
+  }{%
+    \renewcommand{\algocf@bblock}{\BlockMarkersSty{#1}}%
+  }% begin marker set
+  \ifArgumentEmpty{#2}{%
+    \renewcommand{\algocf@eblock}{\relax}%
+  }{%
+    \renewcommand{\algocf@eblock}{\BlockMarkersSty{#2}}%
+  }% end marker set
+}
+%
+%%%%%%%%% block with a vertical line end by a little horizontal line
+\newcommand{\algocf@Vline}[1]{%     no vskip in between boxes but a strut to separate them, 
+  \strut\par\nointerlineskip% then interblock space stay the same whatever is inside it
+  \algocf@push{\skiprule}%        move to the right before the vertical rule
+  \hbox{\vrule%
+    \vtop{\algocf@push{\skiptext}%move the right after the rule
+      \vtop{\algocf@addskiptotal #1}\Hlne}}\vskip\skiphlne% inside the block
+  \algocf@pop{\skiprule}%\algocf@subskiptotal% restore indentation
+  \nointerlineskip}% no vskip after
+%
+%%%%%%%%% block with a vertical line
+\newcommand{\algocf@Vsline}[1]{%    no vskip in between boxes but a strut to separate them, 
+  \strut\par\nointerlineskip% then interblock space stay the same whatever is inside it
+  \algocf@bblockcode%
+  \algocf@push{\skiprule}%        move to the right before the vertical rule
+  \hbox{\vrule%               the vertical rule
+    \vtop{\algocf@push{\skiptext}%move the right after the rule
+      \vtop{\algocf@addskiptotal #1}}}% inside the block
+  \algocf@pop{\skiprule}% restore indentation
+  \algocf@eblockcode%
+}
+%
+\newcommand{\algocf@Hlne}{\hrule height 0.4pt depth 0pt width .5em}%
+%
+%%%%%%%%%  block without line
+\newcommand{\algocf@Noline}[1]{%    no vskip in between boxes but a strut to separate them, 
+  \strut\par\nointerlineskip% then interblock space stay the same whatever is inside it
+  \algocf@bblockcode%
+  \algocf@push{\skiprule}%
+  \hbox{%
+    \vtop{\algocf@push{\skiptext}%
+      \vtop{\algocf@addskiptotal #1}}}% inside the block
+  \algocf@pop{\skiprule}%
+  \algocf@eblockcode%
+  % \nointerlineskip% no vskip after
+}%
+%%%%%%%%%
+%
+%% default=NoLine
+%
+\newcommand{\algocf@group}[1]{\algocf@Noline{#1}}% group: set of instruction depending from another (ex: then part of the If)
+\newcommand{\algocf@@@eblock}[2]{#1\ifArgumentEmpty{#2}{\relax}{\KwSty{\@algocf@endoption{#2}}\strut\par}}% block: group with a end keyword.
+\newcommand{\algocf@@@block}[3]{#1\ifArgumentEmpty{#2}{\ifArgumentEmpty{#3}{\relax}{ #3\relax}}{\KwSty{\@algocf@endoption{#2}}\ifArgumentEmpty{#3}{\relax}{ #3}\strut\par}}% block: group with a end keyword.
+\newcommand{\algocf@@block}[3]{\algocf@@@block{#1}{#2}{#3}}% block: group with a end keyword.
+\newcommand{\algocf@block}[3]{\algocf@@block{#1}{#2}{#3}}% command that will be used and redefined accordingly to noend option
+%\newcommand{\algocf@nblock}[3]{\algocf@@block{#1}{#2}{#3}}% command that will be used and redefined accordingly to noend option
+\newcommand{\algocf@setBlock}{%
+  \ifthenelse{\boolean{algocf@optnoend}}{%     if no end option
+    \renewcommand{\algocf@block}[3]{\algocf@group{##1}}%     block will be a group
+  }{%                                          else
+    \renewcommand{\algocf@block}[3]{\algocf@@block{##1}{##2}{##3}}% block stays a block
+  }%
+}%
+%
+\newcommand{\Hlne}{}% little hrizontal line ending a block in vline mode
+%
+\newcommand{\@algocf@endoption}[1]{#1}%
+\newboolean{algocf@optnoend}\setboolean{algocf@optnoend}{false}%
+%
+\newcommand{\SetAlgoLongEnd}{%%%%%%%%%%%%%%%%%%%%%%%%% Long End
+  \setboolean{algocf@optnoend}{false}%
+  \renewcommand{\@algocf@endoption}[1]{##1}%
+  \algocf@setBlock}%
+%
+\newcommand{\SetAlgoShortEnd}{%%%%%%%%%%%%%%%%%%%%%%%% ShortEnd
+  \setboolean{algocf@optnoend}{false}%
+  \renewcommand{\@algocf@endoption}[1]{\@firstword##1 \@nil}%
+  \algocf@setBlock}%
+%
+\newcommand{\SetAlgoNoEnd}{%%%%%%%%%%%%%%%%%%%%%%%%%%% NoEnd
+  \setboolean{algocf@optnoend}{true}%
+  \renewcommand{\@algocf@endoption}[1]{}%
+  \algocf@setBlock}%
+%
+\newcommand{\SetAlgoNoLine}{%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Noline
+\renewcommand{\algocf@@block}[2]{\algocf@@@block{\algocf@Noline{##1}}{##2}}%
+\renewcommand{\algocf@group}[1]{\algocf@Noline{##1}}%
+\renewcommand{\Hlne}{}}%
+%
+\newcommand{\SetAlgoVlined}{%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Vline
+\renewcommand{\algocf@@block}[2]{\algocf@Vline{##1}}%
+\renewcommand{\algocf@group}[1]{\algocf@Vsline{##1}}%\ifthenelse{\boolean{algocf@optnoend}}{\relax}{\strut\ignorespaces}}%
+\renewcommand{\Hlne}{\algocf@Hlne}}%
+%
+\newcommand{\SetAlgoLined}{%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Line
+\renewcommand{\algocf@@block}[2]{\algocf@@@block{\strut\algocf@Vsline{##1}}{##2}}% no skip after a block so garantie at least one line
+\renewcommand{\algocf@group}[1]{\algocf@Vsline{##1}}%\ifthenelse{\boolean{algocf@optnoend}}{\relax}{\strut\ignorespaces}}%
+\renewcommand{\Hlne}{}}%
+%
+\newcommand{\SetNothing}{%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Noline
+\renewcommand{\algocf@@block}[2]{\algocf@Noline{##1}\par}%
+%\long
+\renewcommand{\algocf@group}[1]{\algocf@Noline{##1}}%
+\renewcommand{\Hlne}{}}%
+%
+%%
+%%
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ``Input:'''s like command 
+%
+%%%
+% text staying at the right of the longer keyword of KwInOut commands 
+% (text of KwInOut commands are all vertically aligned)
+%
+\newcommand{\algocf@newinout}{\par\parindent=\inoutindent}% to put right indentation after a \\ in the KwInOut
+\newcommand{\SetKwInOut}[2]{%
+  \sbox\algocf@inoutbox{\KwSty{#2\algocf@typo:}}%
+  \expandafter\ifx\csname InOutSizeDefined\endcsname\relax% if first time used
+    \newcommand\InOutSizeDefined{}\setlength{\inoutsize}{\wd\algocf@inoutbox}%
+    \sbox\algocf@inoutbox{\parbox[t]{\inoutsize}{\KwSty{#2\algocf@typo\hfill:}}~}\setlength{\inoutindent}{\wd\algocf@inoutbox}%
+  \else% else keep the larger dimension
+    \ifdim\wd\algocf@inoutbox>\inoutsize%
+    \setlength{\inoutsize}{\wd\algocf@inoutbox}%
+    \sbox\algocf@inoutbox{\parbox[t]{\inoutsize}{\KwSty{#2\algocf@typo\hfill:}}~}\setlength{\inoutindent}{\wd\algocf@inoutbox}%
+    \fi%
+  \fi% the dimension of the box is now defined.
+  \algocf@newcommand{#1}[1]{%
+    \ifthenelse{\boolean{algocf@hanginginout}}{\relax}{\algocf@seteveryparhanging{\relax}}%
+    \ifthenelse{\boolean{algocf@inoutnumbered}}{\relax}{\algocf@seteveryparnl{\relax}}%
+%     {\let\\\algocf@newinout\hangindent=\wd\algocf@inoutbox\hangafter=1\parbox[t]{\inoutsize}{\KwSty{#2}\algocf@typo\hfill:}~##1\par}%
+    {\let\\\algocf@newinout\hangindent=\inoutindent\hangafter=1\parbox[t]{\inoutsize}{\KwSty{#2\algocf@typo\hfill:}}~##1\par}%
+    \algocf@linesnumbered% reset the numbering of the lines
+    \ifthenelse{\boolean{algocf@hanginginout}}{\relax}{\algocf@reseteveryparhanging}%
+  }}%
+%
+%% allow to ajust the skip size of InOut
+%%
+\newcommand{\ResetInOut}[1]{%
+  \sbox\algocf@inoutbox{\hbox{\KwSty{#1\algocf@typo:}\ }}%
+  \setlength{\inoutsize}{\wd\algocf@inoutbox}%
+  }%
+%
+% 
+%%%
+% text staying at the right of the keyword.
+%
+\newcommand{\algocf@newinput}{\par\parindent=\wd\algocf@inputbox}% to put right indentation after a \\ in the KwInput
+\newcommand{\SetKwInput}[2]{%
+  \algocf@newcommand{#1}[1]{%
+    \sbox\algocf@inputbox{\hbox{\KwSty{#2\algocf@typo:} }}%
+    \ifthenelse{\boolean{algocf@hanginginout}}{\relax}{\algocf@seteveryparhanging{\relax}}%
+    \ifthenelse{\boolean{algocf@inoutnumbered}}{\relax}{\algocf@seteveryparnl{\relax}}%
+    {\let\\\algocf@newinput\hangindent=\wd\algocf@inputbox\hangafter=1\unhbox\algocf@inputbox##1\par}%
+    \algocf@linesnumbered% reset the numbering of the lines
+    \ifthenelse{\boolean{algocf@hanginginout}}{\relax}{\algocf@reseteveryparhanging}%
+  }}%
+\newcommand{\SetKwData}[2]{%
+  \algocf@newcommand{@#1}[1]{\DataSty{#2(}\ArgSty{##1}\DataSty{)}}%
+  \algocf@newcommand{#1}{%
+    \@ifnextchar\bgroup{\csname @#1\endcsname}{\DataSty{#2}\xspace}}%
+  }%
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% tallent:
+%
+% Add following macros:
+%   \SetKwHangingKw:  [kw] ------------   <= hanging determined by [kw]
+%                          ------------
+% Should act like a combination of \SetKwInput and \SetKw.
+% Based on \SetKwInput:
+%   - remove ':' at end of keyword
+%   - do not reset numbering
+%   - use separate savebox
+\newsavebox{\algocf@hangingbox}
+\newcommand{\algocf@newhanging}{\par\parindent=\wd\algocf@hangingbox}% to put right indentation after a \\ in the KwInput
+\newcommand{\SetKwHangingKw}[2]{%
+  \algocf@newcommand{#1}[1]{%
+    \sbox\algocf@hangingbox{\hbox{\KwSty{#2}\algocf@typo\ }}%
+    {\let\\\algocf@newhanging\hangindent=\wd\algocf@hangingbox\hangafter=1\unhbox\algocf@hangingbox##1\;}%
+  }%
+}%
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Comments macros
+%
+%%%%
+% comment in the text, first argument is the name of the macro, second is
+% the text put before the comment, third is the text put at the end of the
+% comment.
+%
+% first side comment justification
+\newcommand{\SetSideCommentLeft}{\setboolean{algocf@scleft}{true}}%
+\newcommand{\SetSideCommentRight}{\setboolean{algocf@scleft}{false}}%
+\newcommand{\SetNoFillComment}{\setboolean{algocf@optfillcomment}{false}}%
+\newcommand{\SetFillComment}{\setboolean{algocf@optfillcomment}{true}}%
+%
+% next comment and side comment
+%
+\newcommand{\algocf@endmarkcomment}{\relax}%
+\newcommand{\algocf@fillcomment}{%
+  \ifthenelse{\boolean{algocf@optfillcomment}}{\hfill}{\relax}}%
+%
+\newcommand{\algocf@startcomment}{%
+  \hangindent=\wd\algocf@inputbox\hangafter=1\usebox\algocf@inputbox}%
+\newcommand{\algocf@endcomment}{\algocf@fillcomment\algocf@endmarkcomment\ignorespaces\par}%
+\newcommand{\algocf@endstartcomment}{\algocf@endcomment\algocf@startcomment\ignorespaces}%
+%
+\newboolean{algocf@sidecomment}%
+\newboolean{algocf@altsidecomment}\setboolean{algocf@altsidecomment}{false}%
+\newcommand{\algocf@scpar}{\ifthenelse{\boolean{algocf@altsidecomment}}{\relax}{\par}}%
+\newcommand{\algocf@sclfill}{\ifthenelse{\boolean{algocf@scleft}}{\algocf@fillcomment}{\relax}}%
+\newcommand{\algocf@scrfill}{\ifthenelse{\boolean{algocf@scleft}}{\relax}{\hfill}}%
+\newcommand{\algocf@startsidecomment}{\usebox\algocf@inputbox}%
+\newcommand{\algocf@endsidecomment}{\algocf@endmarkcomment\algocf@scpar}%
+\newcommand{\algocf@endstartsidecomment}{%
+  \algocf@sclfill\algocf@endsidecomment%
+  \algocf@scrfill\algocf@startsidecomment\ignorespaces}%
+%
+\newcommand{\SetKwComment}[3]{%
+  \algocf@newcommand{#1}{\@ifstar{\csname algocf@#1@star\endcsname}{\csname algocf@#1\endcsname}}%
+       \algocf@newcommand{algocf@#1}[1]{%
+      \ifthenelse{\boolean{algocf@hangingcomment}}{\relax}{\algocf@seteveryparhanging{\relax}}%
+      \sbox\algocf@inputbox{\CommentSty{\hbox{#2}}}%
+      \ifthenelse{\boolean{algocf@commentsnumbered}}{\relax}{\algocf@seteveryparnl{\relax}}%
+      {\renewcommand{\algocf@endmarkcomment}{#3}%
+        \let\\\algocf@endstartcomment%
+        \algocf@startcomment\CommentSty{%
+          \strut\ignorespaces##1\strut\algocf@fillcomment#3}\par}%
+      \algocf@linesnumbered% reset the numbering of the lines
+      \ifthenelse{\boolean{algocf@hangingcomment}}{\relax}{\algocf@reseteveryparhanging}%
+    }%
+  %%% side comment definitions
+       \algocf@newcommand{algocf@#1@star}[2][]{%
+      \ifArgumentEmpty{##1}\relax{% TODO: Is this even necessary, with all those \ifx's?
+        \ifthenelse{\boolean{algocf@scleft}}{\setboolean{algocf@sidecomment}{true}}{\setboolean{algocf@sidecomment}{false}}%
+        \ifx##1h\setboolean{algocf@altsidecomment}{true}\SetSideCommentLeft\fi%
+        \ifx##1f\setboolean{algocf@altsidecomment}{true}\SetSideCommentRight\fi%
+        \ifx##1l\setboolean{algocf@altsidecomment}{false}\SetSideCommentLeft\fi%
+        \ifx##1r\setboolean{algocf@altsidecomment}{false}\SetSideCommentRight\fi%
+      }%
+      \sbox\algocf@inputbox{\CommentSty{\hbox{#2}}}%
+      \ifthenelse{\boolean{algocf@commentsnumbered}}{\relax}{\algocf@seteveryparnl{\relax}}%
+      {%
+        \renewcommand{\algocf@endmarkcomment}{#3}%
+        \let\\\algocf@endstartsidecomment%
+        % here is the comment
+        \ifthenelse{\boolean{algocf@altsidecomment}}{\relax}{\@endalgocfline\ }%
+        \algocf@scrfill\algocf@startsidecomment\CommentSty{%
+          \strut\ignorespaces##2\strut\algocf@sclfill#3}\algocf@scpar%
+      }%
+      \algocf@linesnumbered% reset the numbering of the lines
+      \ifArgumentEmpty{##1}\relax{%
+        \ifthenelse{\boolean{algocf@sidecomment}}{\setboolean{algocf@scleft}{true}}{\setboolean{algocf@scleft}{false}}%
+        \setboolean{algocf@altsidecomment}{false}%
+      }%
+       }%
+  }%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% KwProg
+%
+\newcommand{\SetKwProg}[4]{%\SetKwProg{Env}{Title}{is}{end} 
+       \algocf@newcmdside@koif{#1}{\KwSty{#2}\ifArgumentEmpty{#2}\relax{\ }\ProgSty{##2}\KwSty{#3}\ifArgumentEmpty{##1}\relax{ ##1}\algocf@block{##3}{#4}{##4}}%
+    \algocf@newcommand{l#1}{\@ifstar{\csname algocf@l#1star\endcsname}{\csname algocf@l#1\endcsname}}%
+       \algocf@newcmdside{algocf@l#1}{3}{\KwSty{#2} \ProgSty{##2}\KwSty{#3}\algocf@bgroupcode\ ##3\algocf@egroupcode\@endalgocfline\ifArgumentEmpty{##1}\relax\ {##1}\strut\par}%
+       \algocf@newcmdside{algocf@l#1star}{3}{\KwSty{#2} \ProgSty{##2}\KwSty{#3}\algocf@bgroupcode\ ##3\algocf@egroupcode}%
+}%
+%
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Kw
+%
+\newcommand{\SetKw}[2]{%
+       \algocf@newcommand{@#1}[1]{\KwSty{#2} \ArgSty{##1}}
+       \algocf@newcommand{#1}{\@ifnextchar\bgroup{\csname @#1\endcsname}{\KwSty{#2}\xspace}}%
+}%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% KwFunction
+%
+\newcommand{\SetKwFunction}[2]{%
+%%% use of gdef since newcommand doesn't manage to define the macro when SetKwFunction is used in \algocf@caption@proc
+  \expandafter\gdef\csname @#1\endcsname##1{\FuncSty{#2(}\FuncArgSty{##1}\FuncSty{)}}%
+  \expandafter\gdef\csname#1\endcsname{%
+    \@ifnextchar\bgroup{\csname @#1\endcsname}{\FuncSty{#2}\xspace}}%
+}%
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% KwTab
+%
+\newcommand{\SetKwArray}[2]{%
+%%% use of gdef since newcommand doesn't manage to define the macro when SetKwFunction is used in \algocf@caption@proc
+  \expandafter\gdef\csname @#1\endcsname##1{\DataSty{#2[}\ArgSty{##1}\DataSty{]}}%
+  \expandafter\gdef\csname#1\endcsname{%
+    \@ifnextchar\bgroup{\csname @#1\endcsname}{\DataSty{#2}\xspace}}%
+}%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% KwBlock
+%
+\newcommand{\SetKwBlock}[3]{%
+       \algocf@newcmdside@kobe{#1}%
+    {\KwSty{#2}\ifArgumentEmpty{##1}\relax{ ##1}\algocf@block{##2}{#3}{##3}\par}%
+}%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% condition typo
+%
+\newcommand{\algocf@scond}{\ }
+\newcommand{\algocf@econd}{\ }
+\newcommand{\algocf@ucond}{}
+\newcommand{\SetStartEndCondition}[3]{%
+  \renewcommand{\algocf@scond}{#1}\renewcommand{\algocf@econd}{#2}\renewcommand{\algocf@ucond}{#3}}%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% For Switch
+%
+\newcommand{\SetKwSwitch}[9]{% #1=\Switch #2=\Case #3=\Other #4=switch #5=do #6=case #7=otherwise #8=endcase #9=endsw
+%      \algocf@newcmdside{#1}{3}%
+       \algocf@newcmdside@koif{#1}%
+               {\KwSty{#4}\algocf@scond\ArgSty{##2}\algocf@econd\KwSty{#5}\ifArgumentEmpty{##1}\relax{ ##1}\algocf@block{##3}{#9} {##4\relax}}%
+%%%% Case
+       \algocf@newcmdside@koif{#2}{\KwSty{#6}\algocf@scond\ArgSty{##2}\algocf@econd\KwSty{#5}\ifArgumentEmpty{##1}\relax{ ##1}\algocf@block{##3}{#8}{##4\relax}}%
+    %uCase
+       \algocf@newcmdside{u#2}{3}{\KwSty{#6}\algocf@scond\ArgSty{##2}\algocf@econd\KwSty{#5}\ifArgumentEmpty{##1}\relax{ ##1}\algocf@group{##3}}%
+    %lcase
+    \algocf@newcommand{l#2}{\@ifstar{\csname algocf@l#2star\endcsname}{\csname algocf@l#2\endcsname}}%
+       \algocf@newcmdside{algocf@l#2}{3}{\KwSty{#6}\algocf@scond\ArgSty{##2}\algocf@econd\KwSty{#5}\algocf@bgroupcode\ ##3\@endalgocfline\algocf@egroupcode\ifArgumentEmpty{##1}\ \relax{ ##1}\strut\par}%
+       \algocf@newcmdside{algocf@l#2star}{3}{\KwSty{#6}\algocf@scond\ArgSty{##2}\algocf@econd\KwSty{#5}\algocf@bgroupcode\ ##3\algocf@egroupcode}%
+%%%% Other 
+       \algocf@newcmdside@kobe{#3}{\KwSty{#7} \KwSty{#5}\ifArgumentEmpty{##1}\relax{ ##1}\algocf@block{##2}{#8}{##3\relax}}%
+    %lOther
+    \algocf@newcommand{l#3}{\@ifstar{\csname algocf@l#3star\endcsname}{\csname algocf@l#3\endcsname}}%
+       \algocf@newcmdside{algocf@l#3}{2}{\KwSty{#7} \KwSty{#5}\algocf@bgroupcode\ ##2\@endalgocfline\algocf@egroupcode\ifArgumentEmpty{##1}\relax\ {##1}\strut\par}%
+       \algocf@newcmdside{algocf@l#3star}{2}{\KwSty{#7} \KwSty{#5}\algocf@bgroupcode\ ##2\algocf@egroupcode}%
+    %uOther
+       \algocf@newcmdside{u#3}{3}{\KwSty{#7} \KwSty{#5}\ifArgumentEmpty{##1}\relax{ ##1}\algocf@group{##2}}%
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% If macros
+%
+\newcommand{\SetKwIF}[8]{% #1=\If #2=\ElseIf #3=\Else #4=if #5=then #6=elseif #7=else #8=endif
+% 
+% common text
+       \algocf@newcommand{#1@ifthen}[1]{\KwSty{#4}\algocf@scond\ArgSty{##1}\algocf@econd\KwSty{#5}}%
+       \algocf@newcommand{#1@endif} [2]{\algocf@block{##1}{#8}{##2}}%
+       \algocf@newcommand{#1@noend} [1]{\algocf@group{##1}}%
+       \algocf@newcommand{#1@else}  [1]{\algocf@group{##1}\KwSty{#7}}%
+       \algocf@newcommand{#2@elseif}[1]{\KwSty{#6}\algocf@scond\ArgSty{##1}\algocf@econd\KwSty{#5}}%
+       \algocf@newcommand{#3@else}     {\KwSty{#7}}%
+%%%% If then { } endif
+       \algocf@newcmdside@koif{#1}{\csname #1@ifthen\endcsname{##2}\ifArgumentEmpty{##1}\relax{ ##1}\csname #1@endif\endcsname{##3}{##4\relax}}%
+%%%% If then {} else {} endif
+    % first command to handle optional side comment of else (so just after first braces)
+       \algocf@newcmdside@kobe{algocf@e#1thenelse}{\ifArgumentEmpty{##1}\relax{ ##1}\csname #1@endif\endcsname{##2}{##3}}%
+    % the definition of if-then-else command using command above 
+       \algocf@newcmdside{e#1}{3}{\csname #1@ifthen\endcsname{##2}\ifArgumentEmpty{##1}\relax{ ##1}\csname #1@else\endcsname{##3}\csname algocf@e#1thenelse\endcsname}%
+    %%% leif
+    \algocf@newcommand{le#1}{\@ifstar{\csname algocf@le#1star\endcsname}{\csname algocf@le#1\endcsname}}%
+    \algocf@newcmdside{algocf@le#1}{4}{\csname #1@ifthen\endcsname{##2} \algocf@bgroupcode##3 \csname #3@else\endcsname\ ##4\@endalgocfline\ \algocf@egroupcode\ifArgumentEmpty{##1}\relax{##1}\strut\par}%
+    \algocf@newcmdside{algocf@le#1star}{4}{\csname #1@ifthen\endcsname{##2} \algocf@bgroupcode##3 \csname #3@else\endcsname\ ##4\algocf@egroupcode}%
+%%%% If then 
+       % \algocf@newcmdside{l#1}{3}{\csname #1@ifthen\endcsname{##2}\algocf@bgroupcode\
+    % ##3\@endalgocfline\algocf@egroupcode\ifArgumentEmpty{##1}\relax\ {##1}\strut\par}%
+    \algocf@newcommand{l#1}{\@ifstar{\csname algocf@l#1star\endcsname}{\csname algocf@l#1\endcsname}}%
+       \algocf@newcmdside{algocf@l#1}{3}{\csname #1@ifthen\endcsname{##2}\algocf@bgroupcode\ ##3\@endalgocfline\algocf@egroupcode\ifArgumentEmpty{##1}\relax\ {##1}\strut\par}%
+       \algocf@newcmdside{algocf@l#1star}{3}{\csname #1@ifthen\endcsname{##2}\algocf@bgroupcode\ ##3\algocf@egroupcode}%
+       \algocf@newcmdside{u#1}{3}{\csname #1@ifthen\endcsname{##2}\ifArgumentEmpty{##1}\relax{ ##1}\csname #1@noend\endcsname{##3}}%
+%%%% ElseIf {} endif
+       \algocf@newcmdside@koif{#2}{\csname #2@elseif\endcsname{##2}\relax\ifArgumentEmpty{##1}\relax{ ##1}\csname #1@endif\endcsname{##3}{##4\relax}}%
+%%%% ElseIf
+    \algocf@newcommand{l#2}{\@ifstar{\csname algocf@l#2star\endcsname}{\csname algocf@l#2\endcsname}}%
+       \algocf@newcmdside{algocf@l#2}{3}{\csname #2@elseif\endcsname{##2}\algocf@bgroupcode\ ##3\@endalgocfline\algocf@egroupcode\ifArgumentEmpty{##1}\relax\ {##1}\strut\par}%
+       \algocf@newcmdside{algocf@l#2star}{3}{\csname #2@elseif\endcsname{##2}\algocf@bgroupcode\ ##3\algocf@egroupcode}%
+       \algocf@newcmdside{u#2}{3}{\csname #2@elseif\endcsname{##2}\relax\ifArgumentEmpty{##1}\relax{##1}\csname #1@noend\endcsname{##3}}%
+%%%% Else {} endif
+       \algocf@newcmdside@kobe{#3}{\csname #3@else\endcsname\ifArgumentEmpty{##1}\relax\ ##1\csname #1@endif\endcsname{##2}{##3\relax}}%
+%%%% Else 
+    \algocf@newcommand{l#3}{\@ifstar{\csname algocf@l#3star\endcsname}{\csname algocf@l#3\endcsname}}%
+       \algocf@newcmdside{algocf@l#3}{2}{\csname #3@else\endcsname\algocf@bgroupcode\ ##2\@endalgocfline\algocf@egroupcode\ifArgumentEmpty{##1}\relax\ {##1}\strut\par}%
+       \algocf@newcmdside{algocf@l#3star}{2}{\csname #3@else\endcsname\algocf@bgroupcode\ ##2\algocf@egroupcode}%
+       \algocf@newcmdside{u#3}{2}{\csname #3@else\endcsname\ifArgumentEmpty{##1}\relax\ {##1\relax}\csname #1@noend\endcsname{##2}}%
+}% 
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% For macros
+%
+\newcommand{\SetKwFor}[4]{%
+       \algocf@newcmdside@koif{#1}{\KwSty{#2}\algocf@scond\ArgSty{##2}\algocf@econd\KwSty{#3}\ifArgumentEmpty{##1}\relax{ ##1}\algocf@block{##3}{#4}{##4\relax}}%
+    \algocf@newcommand{l#1}{\@ifstar{\csname algocf@l#1star\endcsname}{\csname algocf@l#1\endcsname}}%
+       \algocf@newcmdside{algocf@l#1}{3}{\KwSty{#2}\algocf@scond\ArgSty{##2}\algocf@econd\KwSty{#3}\algocf@bgroupcode\ ##3\@endalgocfline\algocf@egroupcode\ifArgumentEmpty{##1}\relax\ {##1}\strut\par}%
+       \algocf@newcmdside{algocf@l#1star}{3}{\KwSty{#2}\algocf@scond\ArgSty{##2}\algocf@econd\KwSty{#3}\algocf@bgroupcode\ ##3\algocf@egroupcode}%
+}%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Repeat macros
+%
+\newsavebox{\algocf@untilbox}% to handle width of until keyword needed to have good skip
+  % for line numbers
+\newskip\algocf@skipuntil
+\newcommand{\SetKwRepeat}[3]{%
+       \algocf@newcmdsides{#1}{3}{%
+      \sbox\algocf@untilbox{\KwSty{#3}\algocf@scond}\algocf@skipuntil=\wd\algocf@untilbox%
+      \KwSty{#2}\ifArgumentEmpty{##1}\relax{##1}\algocf@group{##3}%
+      \KwSty{#3}\algocf@scond% until keyword and start condition typo
+      %\advance\skiptotal by\algocf@skipuntil%
+      \ArgSty{##2}%
+      %\advance\skiptotal by-\algocf@skipuntil%
+      \algocf@ucond%
+      \algocf@skipuntil=0pt% reset counter
+    }{\@endalgocfline}{\strut\par}%
+    \algocf@newcommand{l#1}{\@ifstar{\csname algocf@l#1star\endcsname}{\csname algocf@l#1\endcsname}}%
+       \algocf@newcmdside{algocf@l#1}{3}{\KwSty{#2}\algocf@bgroupcode\ ##3\algocf@egroupcode\ \KwSty{#3}\algocf@scond\ArgSty{##2}\algocf@ucond\@endalgocfline\ifArgumentEmpty{##1}\relax{ ##1}\strut\par}%
+       \algocf@newcmdside{algocf@l#1star}{3}{\KwSty{#2}\algocf@bgroupcode\ ##3\algocf@egroupcode\ \KwSty{#3}\algocf@scond\ArgSty{##2}\algocf@ucond}%
+}%
+%
+% 
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%        Environments definitions     %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%%
+%% Caption management
+%%
+% for the following macros:
+% #1 is given by caption and is equal to fnum@algocf
+% #2 is the text given in argument by the user in the \caption macro
+%
+%%%%% text of caption
+\newcommand{\algocf@captionlayout}[1]{#1}%
+\newcommand{\SetAlgoCaptionLayout}[1]{%
+  \renewcommand{\algocf@captionlayout}[1]{\csname #1\endcsname{##1}}}%
+\newcommand{\algocf@capseparator}{:}%
+\newcommand{\SetAlgoCaptionSeparator}[1]{\renewcommand{\algocf@capseparator}{#1}}%
+\newcommand{\algocf@captiontext}[2]{%
+  \algocf@captionlayout{\AlCapSty{\AlCapFnt #1\algocf@typo\algocf@capseparator}\nobreakspace%
+    \AlCapNameSty{\AlCapNameFnt{}#2\endgraf}}}% text of caption
+%
+%%%%% default caption of algorithm: used if no specific style caption is defined
+\newcommand{\algocf@makecaption}[2]{%
+  \addtolength{\hsize}{\algomargin}%
+  \sbox\@tempboxa{\algocf@captiontext{#1}{#2}}%
+  \ifdim\wd\@tempboxa >\hsize%     % if caption is longer than a line
+    \hskip .5\algomargin%
+    \parbox[t]{\hsize}{\algocf@captiontext{#1}{#2}}% then caption is not centered
+  \else%
+    \global\@minipagefalse%
+    \hbox to\hsize{\hfil\box\@tempboxa\hfil}% else caption is centered
+  \fi%
+  \addtolength{\hsize}{-\algomargin}%
+}%
+%
+\newsavebox\algocf@capbox%
+\newcommand{\algocf@makecaption@plain}[2]{%
+  \global\sbox\algocf@capbox{\algocf@makecaption{#1}{#2}}}%
+\newcommand{\algocf@makecaption@boxed}[2]{%
+  \addtolength{\hsize}{-\algomargin}%
+  \global\sbox\algocf@capbox{\algocf@makecaption{#1}{#2}}%
+  \addtolength{\hsize}{\algomargin}%
+ }%
+%
+\newcommand{\algocf@makecaption@plainruled}[2]{\algocf@makecaption@plain{#1}{#2}}%
+\newcommand{\algocf@makecaption@tworuled}[2]{\algocf@makecaption@ruled{#1}{#2}}%
+\newcommand{\algocf@makecaption@algoruled}[2]{\algocf@makecaption@ruled{#1}{#2}}%
+\newcommand{\algocf@makecaption@boxruled}[2]{\algocf@makecaption@ruled{#1}{#2}}%
+\newcommand{\algocf@makecaption@ruled}[2]{%
+  \global\sbox\algocf@capbox{\hskip\AlCapHSkip% .5\algomargin%
+    \parbox[t]{\hsize}{\algocf@captiontext{#1}{#2}}}% then caption is not centered
+}%
+%
+\newlength{\algoheightruledefault}\setlength{\algoheightruledefault}{0.8pt}%
+\newlength{\algoheightrule}\setlength{\algoheightrule}{\algoheightruledefault}%
+\newlength{\algotitleheightruledefault}\setlength{\algotitleheightruledefault}{0.8pt}%
+\newlength{\algotitleheightrule}\setlength{\algotitleheightrule}{\algotitleheightruledefault}%
+\newcommand{\algocf@caption@plain}{\vskip\AlCapSkip\box\algocf@capbox}%
+\newcommand{\algocf@caption@plainruled}{\algocf@caption@plain}%
+\newcommand{\algocf@caption@boxed}{\vskip\AlCapSkip\box\algocf@capbox}%
+\newcommand{\algocf@caption@ruled}{\box\algocf@capbox\kern\interspacetitleruled\hrule
+  width\algocf@ruledwidth height\algotitleheightrule depth0pt\kern\interspacealgoruled}%
+\newcommand{\algocf@caption@tworuled}{\box\algocf@capbox\hrule  height0pt depth0pt\kern\interspacealgoruled}%
+\newcommand{\algocf@caption@algoruled}{\algocf@caption@ruled}%
+\newcommand{\algocf@caption@boxruled}{%
+  \addtolength{\hsize}{-0.8pt}%
+  \hbox to\hsize{%
+    \vrule%\hskip-0.35pt%
+    \vbox{%
+      \hrule\vskip\interspacetitleboxruled%
+      \hbox to\hsize{\unhbox\algocf@capbox\hfill}\vskip\interspacetitleboxruled%
+    }% 
+    %\hskip-0.35pt%
+    \vrule%
+  }\nointerlineskip%
+  \addtolength{\hsize}{0.8pt}%
+}%
+%
+%
+%%%% set caption for the environment
+\newcommand{\algocf@captionref}{%
+  \renewcommand{\fnum@algocf}[1]{\AlCapSty{\AlCapFnt\algorithmcfname\nobreakspace\algocf@algocfref}}%
+  \addtocounter{algocf}{-1}% \caption do a refstepcounter, so we restore the precedent value
+  \let\old@thealgocf=\thealgocf\renewcommand{\thealgocf}{{\relsize{\algocf@refrelsize}\algocf@algocfref}}%
+  \gdef\@currentlabel{\algocf@algocfref}% let the label use the new ref
+}%
+%
+% Unfortunatly, we also need our own caption to set some specific stuff for special references. But after these
+% settings, we call the original caption.
+%
+\long\def\algocf@caption@algo#1[#2]#3{%
+  \ifthenelse{\equal{\algocf@algocfref}{\relax}}{}{\algocf@captionref}%
+  \@ifundefined{hyper@refstepcounter}{\relax}{% if hyper@refstepcounter undefind, no hyperref, else...
+    \ifthenelse{\equal{\algocf@algocfref}{\relax}}{\renewcommand{\theHalgocf}{\thealgocf}}{% take algocf as Href
+      \renewcommand{\theHalgocf}{\algocf@algocfref}}%else if SetAlgoRefName done, take this name as ref.
+    \hyper@refstepcounter{algocf}%set algocf as category of ref
+  }%
+   \algocf@latexcaption{#1}[{#2}]{{#3}}% call original caption
+}%
+%
+% beamer define is own caption overrinding latex caption!
+% as we need it, we have put here the original definition
+% to handle manual ref, unfortunately we have to add one line to handle algocf@algocfref
+\long\def\algocf@latexcaption#1[#2]#3{% original definition of caption
+  \par%
+  \addcontentsline{\csname ext@#1\endcsname}{#1}%
+  {\protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}%
+  \begingroup%
+  \@parboxrestore%
+  \if@minipage%
+    \@setminipage%
+  \fi%
+  \normalsize%
+  \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par%
+  \endgroup%
+}%
+%
+% \ifx\beamer@makecaption\undefined%
+% \else% beamer detected
+\ifx\@makecaption\undefined%
+\newcommand{\@makecaption}[2]{\relax}%
+\fi%
+%%
+
+%
+% more and more packages redefine \@caption instead of just \@makecaption which makes algorithm2e
+% caption not works since based on standard \@caption. So we force the definition of \@caption to be
+% the standard one (the one from LaTeX) inside algorithm environment.
+%
+% unfortunately, makecaption is called with \ignorespace #3 so 
+% we can't do the @currentlabel definition inside \algocf@captionproctext
+\long\def\algocf@caption@proc#1[#2]#3{%
+  \ifthenelse{\boolean{algocf@nokwfunc}}{\relax}{%
+    \SetKwFunction{\algocf@captname#3@}{\algocf@captname#3@}%
+  }%
+  % we tell hyperref to use algocfproc as category and to take the appropriate ref.
+  \ifthenelse{\boolean{algocf@func}}{\def\@proc@func{algocffunc}}{\def\@proc@func{algocfproc}}%
+  \@ifundefined{hyper@refstepcounter}{\relax}{% if hyper@refstepcounter undefind, no hyperref, else...
+    \ifthenelse{\boolean{algocf@procnumbered}}{% 
+      \expandafter\def\csname theH\@proc@func\endcsname{\thealgocf}%if procnumbered, take \thealgocf as ref
+    }{%
+      \expandafter\def\csname theH\@proc@func\endcsname{\algocf@captname#3@}%else take procedure or function name
+    }%
+    \hyper@refstepcounter{\@proc@func}%
+  }%
+  \ifthenelse{\boolean{algocf@procnumbered}}{\relax}{%
+    \addtocounter{algocf}{-1}% \caption do a refstepcounter, so we restore the precedent value
+    \gdef\@currentlabel{\algocf@captname#3@}% let the label be the name of the function, not the counter
+  }%
+  \ifthenelse{\equal{\algocf@captparam#2@}{\arg@e}}{% if no paramater, we remove the ()
+    \algocf@latexcaption{#1}[\algocf@procname\nobreakspace\algocf@captname#2@]{#3}%
+  }{%                                                 else we give the complete name
+    \algocf@latexcaption{#1}[\algocf@procname\nobreakspace#2]{#3}%
+  }%
+}%
+%%
+%%% setcaption
+\newcommand{\algocf@setcaption}{%
+  \ifthenelse{\boolean{algocf@procenvironment}}{% if proc environment, caption text must be changed
+    \let\algocf@oldcaptiontext=\algocf@captiontext%
+    \renewcommand{\algocf@captiontext}[2]{%
+      \algocf@captionproctext{##1}{##2}%
+    }%
+  }{}%
+  \let\algocf@savecaption=\@caption%
+  \ifthenelse{\boolean{algocf@procenvironment}}{\let\@caption=\algocf@caption@proc}{\let\@caption=\algocf@caption@algo}%
+  \let\algocf@oldmakecaption=\@makecaption%
+  \renewcommand{\@makecaption}[2]{%
+    \expandafter\csname algocf@makecaption@\algocf@style\endcsname{##1}{##2}%
+  }%
+}%
+%
+%%%%% reset caption
+%
+% since we have force the LaTeX caption for algorithm environment, we must go back to the caption
+% used in the text.
+\newcommand{\algocf@resetcaption}{%
+  \ifthenelse{\boolean{algocf@procenvironment}}{% if proc environment
+    \let\thealgocf=\old@thealgocf% restore normal counter printing
+    \let\algocf@captiontext=\algocf@oldcaptiontext% restore normal caption text
+  }{}%
+  \let\@caption=\algocf@savecaption% now restore caption outside algo/proc/func environment
+  \let\@makecaption=\algocf@oldmakecaption% and restore makecaption outside outside algo/proc/func environment
+  \algocf@resetfnum%
+}%
+%
+%%%%% nocaptionofalgo and restorecaptionofalgo --
+\newcommand{\NoCaptionOfAlgo}{%
+  \let\@old@algocf@captiontext=\algocf@captiontext%
+  \renewcommand{\algocf@captiontext}[2]{\AlCapNameSty{\AlCapNameFnt{}##2}}%
+}%
+\newcommand{\RestoreCaptionOfAlgo}{%
+  \let\algocf@captiontext=\@old@algocf@captiontext%
+}%
+%
+% ----------------------  algocf environment
+%
+\newcounter{algocfline}%                    % new counter to make lines numbers be internally 
+\setcounter{algocfline}{0}%                 % different in different algorithms
+\newcounter{algocfproc}% counter to count all algo environment (proc, func), just used by hyperref to avoir "same
+\setcounter{algocfproc}{0}% identifier" error caused by algocf being set to '-' for procedure or function or not
+  % changed if no caption is given.
+%
+\expandafter\ifx\csname algocf@within\endcsname\relax% if \algocf@within doesn't exist
+\newcounter{algocf}%                        % just define a new counter
+\renewcommand{\thealgocf}{\@arabic\c@algocf}% and the way it is printed
+\else%                                     else
+\newcounter{algocf}[\algocf@within]%        % counter is numbered within \algocf@within
+\renewcommand\thealgocf{\csname the\algocf@within\endcsname.\@arabic\c@algocf}%
+\fi%
+%
+\def\fps@algocf{htbp}%        % default
+\def\ftype@algocf{10}%        % float type
+\def\ext@algocf{\algocf@list} % loa by default, lof if figure option used
+\newcommand{\fnum@algocf}{\AlCapSty{\AlCapFnt\algorithmcfname\nobreakspace\thealgocf}}%
+\newcommand{\algocf@resetfnum}{\renewcommand{\fnum@algocf}{\AlCapSty{\AlCapFnt\algorithmcfname\nobreakspace\thealgocf}}}%
+\newenvironment{algocf}%      % float environment for algorithms
+               {\@float{algocf}}%
+               {\end@float}%
+\newenvironment{algocf*}%     % float* environment for algorithms
+               {\@dblfloat{algocf}}%
+               {\end@dblfloat}%
+%
+\def\algocf@seclistalgo{}%
+\ifx\l@chapter\undefined\let\algocf@seclistalgo=\section\else\let\algocf@seclistalgo=\chapter\fi%
+\@ifundefined{if@restonecol}{\newif\if@restonecol}\relax%
+\newcommand\listofalgocfs{%
+     \ifx\algocf@seclistalgo\chapter%
+      \if@twocolumn\@restonecoltrue\onecolumn\else\@restonecolfalse\fi%
+    \fi%
+     \algocf@seclistalgo*{\listalgorithmcfname}%
+       \@mkboth{\MakeUppercase\listalgorithmcfname}%
+               {\MakeUppercase\listalgorithmcfname}%
+     \@starttoc{loa}%
+    \ifx\algocf@seclistalgo\chapter%
+      \if@restonecol\twocolumn\fi%
+    \fi%
+}
+%
+\newcommand*\l@algocf{\@dottedtocline{1}{1em}{2.3em}}% line of the list
+%
+% ----------------------  algorithm environment
+%
+%%%%%%%
+%%
+%% Algorithm environment definition
+%%
+%%%%%%%
+%%
+%
+\newsavebox\algocf@algoframe%
+\def\@algocf@pre@plain{\relax}%  action to be done before printing the algo.
+\def\@algocf@post@plain{\relax}% action to be done after printing the algo.
+\def\@algocf@capt@plain{bottom}% where the caption should be localized.
+\def\@algocf@pre@boxed{\noindent\begin{lrbox}{\algocf@algoframe}}
+\def\@algocf@post@boxed{\end{lrbox}\framebox[\hsize]{\box\algocf@algoframe}\par}%
+\def\@algocf@capt@boxed{under}%
+\def\@algocf@pre@ruled{\hrule height\algoheightrule depth0pt\kern\interspacetitleruled}%
+\def\@algocf@post@ruled{\kern\interspacealgoruled\hrule height\algoheightrule\relax}%
+\def\@algocf@capt@ruled{top}%
+\def\@algocf@pre@algoruled{\hrule width\algocf@ruledwidth height\algoheightrule depth0pt\kern\interspacetitleruled}%
+\def\@algocf@post@algoruled{\kern\interspacealgoruled\hrule width\algocf@ruledwidth height\algoheightrule \relax}%
+\def\@algocf@capt@algoruled{top}%
+\def\@algocf@pre@tworuled{\hrule height\algoheightrule depth0pt\kern\interspacetitleruled}%
+\def\@algocf@post@tworuled{\kern\interspacealgoruled\hrule height\algoheightrule\relax}%
+\def\@algocf@capt@tworuled{top}%
+\def\@algocf@pre@boxruled{\noindent\begin{lrbox}{\algocf@algoframe}}%
+\def\@algocf@post@boxruled{\end{lrbox}\framebox[\hsize]{\box\algocf@algoframe}\par}%
+\def\@algocf@capt@boxruled{above}%
+\def\@algocf@pre@plainruled{\@algocf@pre@ruled}%  action to be done before printing the algo.
+\def\@algocf@post@plainruled{\@algocf@post@ruled\kern\interspacealgoruled}%  action to be done before printing the algo.
+\def\@algocf@capt@plainruled{under}%
+%
+\newcommand{\noalgocaption}{\def\@algocf@capt@ruled{none}}
+%
+%% before algocf environment (not figure environment)
+\newcommand{\@algocf@init@caption}{%
+  \ifthenelse{\boolean{algocf@procenvironment}}{% if we are inside a procedure/function environment
+    \@algocf@proctitleofalgo% set Titleofalgo to Procedure: or Function:
+                            % accordingly to the environment
+    \let\old@thealgocf=\thealgocf\ifthenelse{\boolean{algocf@procnumbered}}{\relax}{%
+      \renewcommand{\thealgocf}{-}}%
+  }{% else inside environment algorithm
+    \@algocf@algotitleofalgo% fix name for \Titleofalgo to \algorithmcfname
+  }%
+  \algocf@setcaption%       set caption to our caption style
+}%
+%
+\newcommand{\@algofloatboxreset}{\@setminipage}
+\newcommand{\@algocf@init}{%
+  \refstepcounter{algocfline}%
+  \stepcounter{algocfproc}%to have a different counter for each environment and being abble to make the difference
+    %between href of algoline in different algorithms.
+  \ifthenelse{\boolean{algocf@optnoend}}{%
+      \renewcommand{\algocf@block}[3]{\algocf@group{##1}}%
+    }{%
+      \renewcommand{\algocf@block}[3]{\algocf@@block{##1}{##2}{##3}}%
+    }%
+}%
+%% after the end of algocf or figure environment
+\newcommand{\@algocf@term@caption}{%
+  \algocf@resetcaption% restore original caption
+}%
+%
+\newcommand{\@algocf@term}{%
+  \setboolean{algocf@algoH}{false}% no H by default
+  \ifthenelse{\boolean{algocf@optnoend}}{%
+    \renewcommand{\algocf@block}[3]{\algocf@@block{##1}{##2}{##3}}%
+  }{%
+    \renewcommand{\algocf@block}[2]{\algocf@group{##1}}%
+  }%
+  \SetAlgoRefName{\relax}%
+}%
+%
+%%%%%%%%%%%%%%%%%
+%% makethealgo: macro which print effectively the algo in its box
+%% 
+\newsavebox\algocf@algobox%
+\newcommand{\algocf@makethealgo}{%
+  \vtop{%
+    % place caption above if needed  bye the style
+    \ifthenelse{\equal{\csname @algocf@capt@\algocf@style\endcsname}{above}}%
+    {\csname algocf@caption@\algocf@style\endcsname}{}%
+    %
+    % precommand according to the style
+    \csname @algocf@pre@\algocf@style\endcsname%
+    % place caption at top if needed  bye the style
+     \ifthenelse{\equal{\csname @algocf@capt@\algocf@style\endcsname}{top}}%
+     {\csname algocf@caption@\algocf@style\endcsname}{}%
+    %
+    \box\algocf@algobox% the algo
+    % place caption at bottom if needed  bye the style
+     \ifthenelse{\equal{\csname @algocf@capt@\algocf@style\endcsname}{bottom}}%
+     {\csname algocf@caption@\algocf@style\endcsname}{}%
+    % postcommand according to the style
+    \csname @algocf@post@\algocf@style\endcsname%
+    % place caption under if needed  bye the style
+     \ifthenelse{\equal{\csname @algocf@capt@\algocf@style\endcsname}{under}}%
+     {\csname algocf@caption@\algocf@style\endcsname}{}%
+  }%
+}%
+%%%%%%%%%%%%%%%%%%%
+%
+%% at the beginning of algocf or figure environment
+\newenvironment{algomathdisplay}{\[}{\@endalgocfline\]\ifthenelse{\boolean{algocf@linesnumbered}}{\nl}{\relax}}%
+\newcommand{\@algocf@start}{%
+  \@algoskip%
+  \begin{lrbox}{\algocf@algobox}%
+  \setlength{\algowidth}{\hsize}%
+  \vbox\bgroup% save all the algo in a box
+  \hbox to\algowidth\bgroup\hbox to \algomargin{\hfill}\vtop\bgroup%
+  \ifthenelse{\boolean{algocf@slide}}{\parskip 0.5ex\color{black}}{}%
+  % initialization
+  \addtolength{\hsize}{-1.5\algomargin}%
+  \let\@mathsemicolon=\;\def\;{\ifmmode\@mathsemicolon\else\@endalgoln\fi}%
+  \raggedright\AlFnt{}%
+  \ifthenelse{\boolean{algocf@slide}}{\IncMargin{\skipalgocfslide}}{}%
+  \@algoinsideskip%
+%   \let\@emathdisplay=\]\def\]{\algocf@endline\@emathdisplay\nl}%
+}%
+%
+%% at the end of algocf or figure environment
+\newcommand{\@algocf@finish}{%
+  \@algoinsideskip%
+  \egroup%end of vtop which contain all the text
+  \hfill\egroup%end of hbox wich contains [margin][vtop]
+  \ifthenelse{\boolean{algocf@slide}}{\DecMargin{\skipalgocfslide}}{}%
+  %
+  \egroup%end of main vbox
+  \end{lrbox}%
+  \algocf@makethealgo% print the algo
+  \@algoskip%
+  % restore dimension and macros
+  \setlength{\hsize}{\algowidth}%
+  \lineskip\normallineskip\setlength{\skiptotal}{\@defaultskiptotal}%
+  \let\;=\@mathsemicolon%  
+  \let\]=\@emathdisplay%
+}%
+%
+%%%%%%%%%%%%%%%%%%%%
+%% basic definition of the environment algorithm
+%%
+%
+\newboolean{algocf@procenvironment}\setboolean{algocf@procenvironment}{false}%
+\newboolean{algocf@func}\setboolean{algocf@func}{false}%
+\newboolean{algocf@algoH}\setboolean{algocf@algoH}{false}%
+\newboolean{algocf@algostar}\setboolean{algocf@algostar}{false}%
+%
+%%% environment for {algorithm}[H]
+\newenvironment{algocf@Here}{\noindent%
+  \def\@captype{algocf}% if not defined, caption exit with an error
+  \begin{minipage}{\hsize}%
+}{%
+  \end{minipage}%\par%
+}%
+%%% real algorithm environment which manages H and * option
+%    \let\algocf@originalfloatboxreset=\@floatboxreset%
+%    \let\@floatboxreset=\@algofloatboxreset%
+\newenvironment{algocf@algorithm}[1][htbp]{%
+   \ifthenelse{\equal{\algocf@float}{figure}}{%
+     \ifthenelse{\boolean{algocf@figurecaption}}{\captionsetup{margin={-\algomargin,\algomargin}}}{}%
+   }{}%
+   \@algocf@init%
+   \ifthenelse{\equal{\algocf@float}{figure}}{% if option figure set
+     \ifthenelse{\boolean{algocf@algostar}}{% if algorithm* with figure option
+       \begin{figure*}[#1]% call figure*
+         \ifthenelse{\boolean{algocf@customruledwidth}}{\relax}{\setlength{\algocf@ruledwidth}{\linewidth}}%
+         \let\algocf@oldeverypar=\everypar%
+         \algocf@seteverypar%
+     }{% else algorithm environment with figure option
+       \begin{figure}[#1]%  call figure
+         \ifthenelse{\boolean{algocf@customruledwidth}}{\relax}{\setlength{\algocf@ruledwidth}{\linewidth}}%
+          \let\algocf@oldeverypar=\everypar%
+         \algocf@seteverypar%
+     }%
+   }{% else normal algorithm environment
+     \@algocf@init@caption%
+     \ifthenelse{\equal{#1}{H}}{% if [H] algorithm
+       \if@twocolumn\@latex@error{[H] in two columns mode is not allowed for algorithms}\fi% TODO: SCREAM if H in two colums!
+       \setboolean{algocf@algoH}{true}\begin{algocf@Here}% call corresponding environment
+         \ifthenelse{\boolean{algocf@customruledwidth}}{\relax}{\setlength{\algocf@ruledwidth}{\linewidth}}%
+         \let\algocf@oldeverypar=\everypar%
+         \algocf@seteverypar%
+     }{% else floating algorithm environment
+       \ifthenelse{\boolean{algocf@algostar}}{% if algorithm*
+         \begin{algocf*}[#1]% call algocf*
+           \ifthenelse{\boolean{algocf@customruledwidth}}{\relax}{\setlength{\algocf@ruledwidth}{\linewidth}}%
+           \let\algocf@oldeverypar=\everypar%
+           \algocf@seteverypar%
+       }{% else algorithm environment
+         \begin{algocf}[#1]%  call algcf
+           \ifthenelse{\boolean{algocf@customruledwidth}}{\relax}{\setlength{\algocf@ruledwidth}{\linewidth}}%
+           \let\algocf@oldeverypar=\everypar%
+           \algocf@seteverypar%
+       }%
+     }%
+   }% fin test option figure ou pas
+   \@algocf@start% 
+   \@ResetCounterIfNeeded%
+   \algocf@linesnumbered\ignorespaces%
+}{%
+  \@algocf@finish%
+  \ifthenelse{\equal{\algocf@float}{figure}}{%
+     \ifthenelse{\boolean{algocf@algostar}}{% if algorithm* with figure option
+       \let\everypar=\algocf@oldeverypar%
+       \end{figure*}% call figure*
+     }{% else algorithm environment with figure option
+       \let\everypar=\algocf@oldeverypar%
+       \end{figure}%  call figure
+     }%
+  }{%
+    \@algocf@term@caption%
+    \ifthenelse{\boolean{algocf@algoH}}{% if [H] algorithm
+      \let\everypar=\algocf@oldeverypar%
+      \end{algocf@Here}\par% call corresponding environment
+     }{% else floating algorithm environment
+       \ifthenelse{\boolean{algocf@algostar}}{% if algorithm*
+         \let\everypar=\algocf@oldeverypar%
+         \end{algocf*}% call algocf*
+       }{% else algorithm environment
+         \let\everypar=\algocf@oldeverypar%
+         \end{algocf}%  call algocf
+       }%
+     }%
+  }%
+  \@algocf@term\ignorespacesafterend%
+}%
+%
+%%% user algorithm environment
+\newenvironment{\algocf@envname}[1][htbp]{%
+  \setboolean{algocf@algostar}{false}%
+  \setboolean{algocf@procenvironment}{false}\gdef\algocfautorefname{\algorithmautorefname}%
+  \begin{algocf@algorithm}[#1]\ignorespaces%
+}{%
+  \end{algocf@algorithm}\ignorespacesafterend%
+}%
+%%% user algorithm* environment
+\newenvironment{\algocf@envname*}[1][htbp]{%
+  \setboolean{algocf@algostar}{true}%
+  \setboolean{algocf@procenvironment}{false}\gdef\algocfautorefname{\algorithmautorefname}%
+  \begin{algocf@algorithm}[#1]\ignorespaces%
+}{%
+  \end{algocf@algorithm}\ignorespacesafterend%
+}%
+%
+%%%%%%%%%%%%%%%%%%%%%%%
+%%%
+%
+\expandafter\newcommand\csname\algocf@listofalgorithms\endcsname{%
+  \ifthenelse{\equal{\algocf@float}{figure}}{\listoffigures}{\listofalgocfs}%
+}%
+%%%
+%%%
+%
+% ----------------------  procedure and function environments
+%
+%
+% -- new style (used in particular in the caption of function and procedure environments)
+%
+% three macros to extract parts of the caption
+\gdef\algocf@captname#1(#2)#3@{#1}  % keep characters before the first brace
+\gdef\algocf@captparam#1(#2)#3@{#2} % keep character in between the braces
+\gdef\algocf@captother#1(#2)#3@{#3} % keep character after the braces
+%
+%%% Text of caption for Procedure or Function
+\newcommand{\algocf@captionproctext}[2]{%
+  {%
+    \ProcSty{\ProcFnt\algocf@procname\ifthenelse{\boolean{algocf@procnumbered}}{\nobreakspace\thealgocf\algocf@typo\algocf@capseparator}{\relax}}%
+    \nobreakspace\ProcNameSty{\ProcNameFnt\algocf@captname #2@}% Name of the procedure in ProcName Style. 
+    \ifthenelse{\equal{\algocf@captparam #2@}{\arg@e}}{}{% if no argument, write nothing
+      \ProcNameSty{\ProcNameFnt(}\ProcArgSty{\ProcArgFnt\algocf@captparam #2@}\ProcNameSty{\ProcNameFnt)}%else put arguments in ProcArgSty:
+    }% endif
+    \algocf@captother #2@%
+  }%
+}%
+%
+%
+% -- procedure and function environments are defined from algocf@algorithm environment
+%
+\newenvironment{procedure}[1][htbp]{%
+  \setboolean{algocf@algostar}{false}%
+  \setboolean{algocf@procenvironment}{true}\setboolean{algocf@func}{false}%
+  \newcommand{\algocf@procname}{\@algocf@procname}\gdef\algocfprocautorefname{\procedureautorefname}%
+  \begin{algocf@algorithm}[#1]\ignorespaces%
+}{%
+  \end{algocf@algorithm}\ignorespacesafterend%
+}%
+\newenvironment{function}[1][htbp]{%
+  \setboolean{algocf@algostar}{false}%
+  \setboolean{algocf@procenvironment}{true}\setboolean{algocf@func}{true}%
+  \newcommand{\algocf@procname}{\@algocf@funcname}\gdef\algocffuncautorefname{\functionautorefname}%
+  \begin{algocf@algorithm}[#1]\ignorespaces%
+}{%
+  \end{algocf@algorithm}\ignorespacesafterend%
+}%
+%
+\newenvironment{procedure*}[1][htbp]{%
+  \setboolean{algocf@algostar}{true}%
+  \setboolean{algocf@procenvironment}{true}\setboolean{algocf@func}{false}%
+  \newcommand{\algocf@procname}{\@algocf@procname}\gdef\algocfprocautorefname{\procedureautorefname}%
+  \begin{algocf@algorithm}[#1]\ignorespaces%
+}{%
+  \end{algocf@algorithm}\ignorespacesafterend%
+}%
+\newenvironment{function*}[1][htbp]{%
+  \setboolean{algocf@algostar}{true}%
+  \setboolean{algocf@procenvironment}{true}\setboolean{algocf@func}{true}%
+  \newcommand{\algocf@procname}{\@algocf@funcname}\gdef\algocffuncautorefname{\functionautorefname}%
+  \begin{algocf@algorithm}[#1]\ignorespaces%
+}{%
+  \end{algocf@algorithm}\ignorespacesafterend%
+}%
+%
+%
+%%%%%%%%%%%%%%%%%%%%
+%% definition of algondfloat environment
+%%
+\ifthenelse{\boolean{algocf@endfloat}}{% if endfloat option then
+\newcommand{\algoplace}{% macro which is used to writhe algorithm about there
+   \begin{center}%
+     [\algorithmcfname~\thepostfig\ about here.]%
+   \end{center}%
+}%
+\newcommand{\algoendfloat}{% use as a \begin{algoendfloat} environment to start scanning of line
+%  \immediate\openout\@mainfff\jobname.fff%
+  \efloat@condopen{fff}
+  \efloat@iwrite{fff}{\string\begin{\algocf@envname}}%
+    \if@domarkers%
+       \ifthenelse{\equal{\algocf@list}{lof}}{%
+         \addtocounter{postfig}{1}%
+       }{%
+         \addtocounter{postalgo}{1}%
+       }%
+       \algoplace%
+    \fi%
+    \bgroup%
+    \let\do\ef@makeinnocent\dospecials%
+    \ef@makeinnocent\^^L% and whatever other special cases
+    \endlinechar`\^^M \catcode`\^^M=12 \ef@xalgocfendfloat}%
+}{\relax}%%%% end of endfloat option ifthenelse
+%% some macros useful for endfloat option that cannot be defined inside the ifthenelse
+%scan algoendfloat algorithm and write the text into .fff file
+{\catcode`\^^M=12 \endlinechar=-1 %
+ \gdef\ef@xalgocfendfloat#1^^M{% scan the lines inside algoendfloat environment being read by latex
+   \def\test{#1}% test is the line being currently scan by latex
+   \ifx\test\ef@endalgocftest% if it is \end{algoendfloat}
+     \def\next{% define next as to not continue the scan and write \end{algorithm} into .fff file
+       \egroup\end{algoendfloat}%
+       \efloat@iwrite{fff}{\string\end{\algocf@envname}}%
+       \efloat@iwrite{fff}{\string\efloatseparator}%
+       \efloat@iwrite{fff}{ }%
+     }%
+     \else% else write the current line being scanned by latex and set next to continue the scan
+       \efloat@iwrite{fff}{#1}%
+       \let\next\ef@xalgocfendfloat%
+     \fi% endif
+     \next}% next is continue if it was else condition, else it does not continue the scan and write end to file
+}%
+% test if the scan is finish by looking at the string \end{algoendfloat}
+{\escapechar=-1%
+ \xdef\ef@endalgocftest{\string\\end\string\{algoendfloat\string\}}%
+}%
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% 
+\newcommand{\TitleOfAlgo}[1]{\@titleprefix\ 
+  \TitleSty{#1}\par\smallskip}%
+%
+\newcommand{\SetAlgorithmName}[3]{%
+  \renewcommand{\listalgorithmcfname}{#3}%
+  \renewcommand{\algorithmcfname}{#1}%
+  \renewcommand{\algorithmautorefname}{#2}%
+}%
+%
+\newcommand{\algocf@refrelsize}{-2}\newcommand{\SetAlgoRefRelativeSize}[1]{\renewcommand{\algocf@refrelsize}{#1}}%
+\newcommand{\SetAlgoRefName}[1]{%
+  \renewcommand{\algocf@algocfref}{#1}%
+}%
+%
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% 
+% -------------------------   Default Definitions
+%
+%%
+%%
+%
+\SetKwComment{tcc}{/* }{ */}%
+\SetKwComment{tcp}{// }{}%
+%
+%\newcommand{\algocf@defaults@common}{
+%
+%
+% english keywords (default)
+%
+\SetKwHangingKw{KwHData}{Data$\rightarrow$}
+\SetKwInput{KwIn}{Input}%
+\SetKwInput{KwOut}{Output}%
+\SetKwInput{KwData}{Data}%
+\SetKwInput{KwResult}{Result}%
+\SetKw{KwTo}{to}
+\SetKw{KwRet}{return}%
+\SetKw{Return}{return}%
+\SetKwBlock{Begin}{begin}{end}%
+\SetKwRepeat{Repeat}{repeat}{until}%
+%
+\SetKwIF{If}{ElseIf}{Else}{if}{then}{else if}{else}{end if}%
+\SetKwSwitch{Switch}{Case}{Other}{switch}{do}{case}{otherwise}{end case}{end switch}%
+\SetKwFor{For}{for}{do}{end for}%
+\SetKwFor{ForPar}{for}{do in parallel}{end forpar}
+\SetKwFor{ForEach}{foreach}{do}{end foreach}%
+\SetKwFor{ForAll}{forall}{do}{end forall}%
+\SetKwFor{While}{while}{do}{end while}%
+%
+% French keywords
+%
+\ifthenelse{\boolean{algocf@localkw@french}\OR\equal{\algocf@languagechoosen}{french}}{%
+%\SetKwInOut{AlgDonnees}{Donn\'ees}\SetKwInOut{AlgRes}{R\'esultat}
+\SetKwHangingKw{HDonnees}{Donnees$\rightarrow$}
+\SetKwInput{Donnees}{Donn\'ees}%
+\SetKwInput{Res}{R\'esultat}%
+\SetKwInput{Entree}{Entr\'ees}%
+\SetKwInput{Sortie}{Sorties}%
+\SetKw{KwA}{\`a}%
+\SetKw{Retour}{retourner}%
+\SetKwBlock{Deb}{d\'ebut}{fin}%
+\SetKwRepeat{Repeter}{r\'ep\'eter}{jusqu'\`a}%
+%
+\SetKwIF{Si}{SinonSi}{Sinon}{si}{alors}{sinon si}{sinon}{fin si}%
+\SetKwSwitch{Suivant}{Cas}{Autre}{suivant}{faire}{cas o\`u}{autres cas}{fin cas}{fin d'alternative}%
+\SetKwFor{Pour}{pour}{faire}{fin pour}%
+\SetKwFor{PourPar}{pour}{faire en parall\`ele}{fin pour}%
+\SetKwFor{PourCh}{pour chaque}{faire}{fin pour chaque}%
+\SetKwFor{PourTous}{pour tous les}{faire}{fin pour tous}%
+\SetKwFor{Tq}{tant que}{faire}{fin tq}%
+}{}%
+%
+% --- German keywords
+%
+\ifthenelse{\boolean{algocf@localkw@german}\OR\equal{\algocf@languagechoosen}{german}}{%
+\SetKwInput{Ein}{Eingabe}%KwIn
+\SetKwInput{Aus}{Ausgabe}%KwOut
+\SetKwInput{Daten}{Daten}%KwData
+\SetKwInput{Ergebnis}{Ergebnis}%KwResult
+\SetKw{Bis}{bis}%KwTo
+\SetKw{KwZurueck}{zur\"uck}%KwRet
+\SetKw{Zurueck}{zur\"uck}%Return
+\SetKwBlock{Beginn}{Beginn}{Ende}%Begin
+\SetKwRepeat{Wiederh}{wiederhole}{bis}%Repeat
+%
+\SetKwIF{Wenn}{SonstWenn}{Sonst}{wenn}{dann}{sonst wenn}{sonst}{Ende wenn}%gIf
+\SetKwSwitch{Unterscheide}{Fall}{Anderes}{unterscheide}{tue}{Fall}{sonst}{Ende Fall}{Ende Unt.}%Switch
+\SetKwFor{Fuer}{f\"ur}{tue}{Ende f\"ur}%For
+\SetKwFor{FuerPar}{f\"ur}{tue gleichzeitig}{Ende gleichzeitig}%ForPar
+\SetKwFor{FuerJedes}{f\"ur jedes}{tue}{Ende f\"ur}%ForEach
+\SetKwFor{FuerAlle}{f\"ur alle}{tue}{Ende f\"ur}%ForAll
+\SetKwFor{Solange}{solange}{tue}{Ende solange}%While
+}{}%
+%
+% --- Czech keywords
+%
+\ifthenelse{\boolean{algocf@localkw@czech}\OR\equal{\algocf@languagechoosen}{czech}}{%
+\SetKwInput{Vst}{Vstup}%
+\SetKwInput{Vyst}{V\'{y}stup}%
+\SetKwInput{Vysl}{V\'{y}sledek}%
+}{}%
+%
+% --- Portuguese keywords
+%
+\ifthenelse{\boolean{algocf@localkw@portuguese}\OR\equal{\algocf@languagechoosen}{portuguese}}{%
+\SetKwInput{Entrada}{Entrada}%
+\SetKwInput{Saida}{Sa\'{i}da}%
+\SetKwInput{Dados}{Dados}%
+\SetKwInput{Resultado}{Resultado}%
+\SetKw{Ate}{at\'{e}}
+\SetKw{KwRetorna}{retorna}%
+\SetKw{Retorna}{retorna}%
+\SetKwBlock{Inicio}{in\'{i}cio}{fim}%
+\SetKwRepeat{Repita}{repita}{at\'{e}}%
+%
+\SetKwIF{Se}{SenaoSe}{Senao}{se}{ent\~{a}o}{sen\~{a}o se}{sen\~{a}o}{fim se}%
+\SetKwSwitch{Selec}{Caso}{Outro}{selecione}{fa\c{c}a}{caso}{sen\~{a}o}{fim caso}{fim selec}%
+\SetKwFor{Para}{para}{fa\c{c}a}{fim para}%
+\SetKwFor{ParaPar}{para}{fa\c{c}a em paralelo}{fim para}
+\SetKwFor{ParaCada}{para cada}{fa\c{c}a}{fim para cada}%
+\SetKwFor{ParaTodo}{para todo}{fa\c{c}a}{fim para todo}%
+\SetKwFor{Enqto}{enquanto}{fa\c{c}a}{fim enqto}%
+}{}%
+%
+% --- Italian keywords
+%
+\ifthenelse{\boolean{algocf@localkw@italiano}\OR\equal{\algocf@languagechoosen}{italiano}}{%
+\SetKwInput{KwIng}{Ingresso}%
+\SetKwInput{KwUsc}{Uscita}%
+\SetKwInput{KwDati}{Dati}%
+\SetKwInput{KwRisult}{Risultato}%
+\SetKw{KwA}{a}%
+\SetKw{KwRitorna}{ritorna}%
+\SetKw{Ritorna}{ritorna}%
+\SetKwBlock{Inizio}{inizio}{fine}%
+\SetKwRepeat{Ripeti}{ripeti}{finch\'e}%
+%
+\SetKwIF{Sea}{AltSe}{Altrimenti}{se}{allora}{altrimenti se}{allora}{fine se}%
+\SetKwSwitch{Switch}{Case}{Other}{switch}{do}{case}{otherwise}{end case}{endsw}%
+\SetKwFor{Per}{per}{fai}{fine per}%
+\SetKwFor{PerPar}{per}{fai in parallelo}{fine per}%
+\SetKwFor{PerCiascun}{per ciascun}{fai}{fine per ciascun}%
+\SetKwFor{PerTutti}{per tutti i}{fai}{fine per tutti}%
+\SetKwFor{Finche}{finch\'e}{fai}{fine finch\'e}%
+}{}%
+%
+% --- Spanish keywords
+%
+\ifthenelse{\boolean{algocf@localkw@spanish}\OR\equal{\algocf@languagechoosen}{spanish}}{%
+\SetKwInput{Datos}{Datos}
+\SetKwInput{Resultado}{Resultado}
+\SetKwInput{Entrada}{Entrada}
+\SetKwInput{Salida}{Salida}
+\SetKw{KwA}{a}
+\SetKw{KwDevolver}{devolver}
+\SetKw{Devolver}{devolver}
+\SetKwBlock{Inicio}{inicio}{fin}
+\SetKwIF{SSi}{EnOtroCasoSi}{EnOtroCaso}{si}{entonces}{sin\'o, si}{sin\'o}{fin si}
+\SetKwSwitch{Seleccionar}{Caso}{Otro}{seleccionar}{hacer}{caso}{sin\'o}{fin caso}{fin seleccionar}
+\SetKwFor{Para}{para}{hacer}{fin para}
+\SetKwFor{ParaPara}{par}{hacer en paralelo}{fin para}
+\SetKwFor{EnParalelo}{para}{hacer en paralelo}{fin para}
+\SetKwFor{Mientras}{mientras}{hacer}{fin mientras}
+\SetKwFor{ParaCada}{para cada}{hacer}{fin para cada}
+\SetKwFor{ParaTodo}{para todo}{hacer}{fin para todo}
+\SetKwRepeat{Repetir}{repetir}{hasta que}
+}{}%
+%
+% Croatian keywords
+%
+\ifthenelse{\boolean{algocf@localkw@croatian}\OR\equal{\algocf@languagechoosen}{croatian}}{%
+\SetKwInput{KwUlaz}{Ulaz}%KwIn
+\SetKwInput{KwIzlaz}{Izlaz}%KwOut
+\SetKwInput{KwPodaci}{Podaci}%KwData
+\SetKwInput{KwRezultat}{Rezultat}%KwResult
+\SetKw{KwDo}{do}%KwTo
+\SetKw{KwVrati}{vrati}%KwRet
+\SetKw{Vrati}{vrati}%Return
+\SetKwBlock{Pocetak}{po\v{c}etak}{kraj}%Begin
+\SetKwRepeat{Ponavljaj}{ponavljaj}{dok ne bude}%Repeat
+%
+\SetKwIF{Ako}{InaceAko}{Inace}{ako}{onda}{ina\v{c}e ako}{ina\v{c}e}{kraj ako}%gIf
+\SetKwSwitch{Granaj}{Slucaj}{OstaliSlucajevi}{granaj}{\v{c}ini}{slu\v{c}aj}{ostali slu\v{c}ajevi}{kraj slu\v{c}aj}{kraj granaj}%Switch
+\SetKwFor{Za}{za}{\v{c}ini}{kraj za}%For
+\SetKwFor{ZaPar}{za}{\v{c}ini paralelno}{kraj za paralelno}%ForPar
+\SetKwFor{ZaSvaki}{za svaki}{\v{c}ini}{kraj za svaki}%mForEach
+\SetKwFor{ZaSvaku}{za svaku}{\v{c}ini}{kraj za svaku}%fForEach
+\SetKwFor{ZaSvako}{za svako}{\v{c}ini}{kraj za svako}%nForEach
+\SetKwFor{ZaSve}{za sve}{\v{c}ini}{kraj za sve}%ForAll
+\SetKwFor{Dok}{dok}{\v{c}ini}{kraj dok}%While
+}{}%
+
+%
+% --- Turkish keywords
+%
+\ifthenelse{\boolean{algocf@localkw@turkish}\OR\equal{\algocf@languagechoosen}{turkish}}{%
+\SetKwInput{KwIn}{Girdi}%
+\SetKwInput{KwOut}{\c{C}{\i}kt{\i}}%
+\SetKwInput{KwData}{Veri}%
+\SetKwInput{KwResult}{Sonu\c{c}}%
+\SetKw{KwTo}{to}
+\SetKw{KwRet}{return}%
+\SetKw{Return}{return}%
+\SetKwBlock{Begin}{begin}{end}%
+\SetKwRepeat{Repeat}{repeat}{until}%
+% %
+\SetKwIF{If}{ElseIf}{Else}{if}{then}{else if}{else}{end if}%
+\SetKwSwitch{Switch}{Case}{Other}{switch}{do}{case}{otherwise}{end case}{end switch}%
+\SetKwFor{For}{for}{do}{end for}%
+\SetKwFor{ForPar}{for}{do in parallel}{end forpar}
+\SetKwFor{ForEach}{foreach}{do}{end foreach}%
+\SetKwFor{ForAll}{forall}{do}{end forall}%
+\SetKwFor{While}{while}{do}{end while}%
+}{}%
+%
+% --- End 
+%}
+%
+%\algocf@defaults@common
+%
+% option onelanguage redefinition
+%
+\ifthenelse{\boolean{algocf@optonelanguage}\AND\equal{\algocf@languagechoosen}{french}}{%
+\SetKwInput{KwIn}{Entr\'ees}%
+\SetKwInput{KwOutSortie}{Sorties}%
+\SetKwInput{KwData}{Donn\'ees}%
+\SetKwInput{KwResult}{R\'esultat}%
+\SetKw{KwTo}{\`a}%
+\SetKw{KwRet}{retourner}%
+\SetKw{Return}{retourner}%
+\SetKwBlock{Begin}{d\'ebut}{fin}%
+\SetKwRepeat{Repeat}{r\'ep\'eter}{jusqu'\`a}%
+%
+\SetKwIF{If}{ElseIf}{Else}{si}{alors}{sinon si}{sinon}{fin si}%
+\SetKwSwitch{Switch}{Case}{Other}{suivant}{faire}{cas o\`u}{autres cas}{fin cas}{fin d'alternative}%
+\SetKwFor{For}{pour}{faire}{fin pour}%
+\SetKwFor{ForPar}{pour}{faire en parall\`ele}{fin pour}%
+\SetKwFor{ForEach}{pour chaque}{faire}{fin pour chaque}%
+\SetKwFor{ForAll}{pour tous}{faire}{fin pour tous}%
+\SetKwFor{While}{tant que}{faire}{fin tq}%
+}{}%
+\ifthenelse{\boolean{algocf@optonelanguage}\AND\equal{\algocf@languagechoosen}{german}}{%
+\SetKwInput{KwIn}{Eingabe}%KwIn
+\SetKwInput{KwOut}{Ausgabe}%KwOut
+\SetKwInput{KwData}{Daten}%KwData
+\SetKwInput{KwResult}{Ergebnis}%KwResult
+\SetKw{KwTo}{bis}%KwTo
+\SetKw{KwRet}{zur\"uck}%KwRet
+\SetKw{Return}{zur\"uck}%Return
+\SetKwBlock{Begin}{Beginn}{Ende}%Begin
+\SetKwRepeat{Repeat}{wiederhole}{bis}%Repeat
+%
+\SetKwIF{If}{ElseIf}{Else}{wenn}{dann}{sonst wenn}{sonst}{Ende wenn}%gIf
+\SetKwSwitch{Switch}{Case}{Other}{unterscheide}{tue}{Fall}{sonst}{Ende Fall}{Ende Unt.}%Switch
+\SetKwFor{For}{f\"ur}{tue}{Ende f\"ur}%For
+\SetKwFor{ForPar}{f\"ur}{tue gleichzeitig}{Ende gleichzeitig}%ForPar
+\SetKwFor{ForEach}{f\"ur jedes}{tue}{Ende f\"ur}%ForEach
+\SetKwFor{ForAll}{f\"ur alle}{tue}{Ende f\"ur}%ForAll
+\SetKwFor{While}{solange}{tue}{Ende solange}%While
+}{}%
+\ifthenelse{\boolean{algocf@optonelanguage}\AND\equal{\algocf@languagechoosen}{portuguese}}{%
+\SetKwInput{KwIn}{Entrada}%
+\SetKwInput{KwOut}{Sa\'{i}da}%
+\SetKwInput{KwData}{Dados}%
+\SetKwInput{KwResult}{Resultado}%
+\SetKw{KwTo}{at\'{e}}
+\SetKw{KwRet}{retorna}%
+\SetKw{Return}{retorna}%
+\SetKwBlock{Begin}{in\'{i}cio}{fim}%
+\SetKwRepeat{Repeat}{repita}{at\'{e}}%
+%
+\SetKwIF{If}{ElseIf}{Else}{se}{ent\~{a}o}{sen\~{a}o se}{sen\~{a}o}{fim se}%
+\SetKwSwitch{Switch}{Case}{Other}{selecione}{fa\c{c}a}{caso}{sen\~{a}o}{fim caso}{fim selec}%
+\SetKwFor{For}{para}{fa\c{c}a}{fim para}%
+\SetKwFor{ForPar}{para}{fa\c{c}a em paralelo}{fim para}
+\SetKwFor{ForEach}{para cada}{fa\c{c}a}{fim para cada}%
+\SetKwFor{ForAll}{para todo}{fa\c{c}a}{fim para todo}%
+\SetKwFor{While}{enquanto}{fa\c{c}a}{fim enqto}%
+}{}%
+\ifthenelse{\boolean{algocf@optonelanguage}\AND\equal{\algocf@languagechoosen}{italiano}}{%
+\SetKwInput{KwIn}{Ingresso}%
+\SetKwInput{KwOut}{Uscita}%
+\SetKwInput{KwData}{Dati}%
+\SetKwInput{KwResult}{Risultato}%
+\SetKw{KwTo}{a}%
+\SetKw{KwRet}{ritorna}%
+\SetKw{Return}{ritorna}%
+\SetKwBlock{Begin}{inizio}{fine}%
+\SetKwRepeat{Repeat}{ripeti}{finch\'e}%
+%
+\SetKwIF{If}{ElseIf}{Else}{se}{allora}{altrimenti se}{allora}{fine se}%
+\SetKwSwitch{Switch}{Case}{Other}{switch}{do}{case}{otherwise}{end case}{endsw}%
+\SetKwFor{For}{per}{fai}{fine per}%
+\SetKwFor{ForPar}{per}{fai in parallelo}{fine per}%
+\SetKwFor{ForEach}{per ciascun}{fai}{fine per ciascun}%
+\SetKwFor{ForAll}{per tutti i}{fai}{fine per tutti}%
+\SetKwFor{While}{finch\'e}{fai}{fine finch\'e}%
+}{}%
+\ifthenelse{\boolean{algocf@optonelanguage}\AND\equal{\algocf@languagechoosen}{spanish}}{%
+\SetKwInput{KwIn}{Entrada}%
+\SetKwInput{KwOut}{Salida}%
+\SetKwInput{KwData}{Datos}%
+\SetKwInput{KwResult}{Resultado}%
+\SetKw{KwTo}{a}%
+\SetKw{KwRet}{devolver}%
+\SetKw{Return}{devolver}%
+\SetKwBlock{Begin}{inicio}{fin}%
+\SetKwRepeat{Repeat}{repetir}{hasta que}%
+%
+\SetKwIF{If}{ElseIf}{Else}{si}{entonces}{si no, si}{en otro caso}{fin si}
+\SetKwSwitch{Switch}{Case}{Other}{seleccionar}{hacer}{caso}{si no}{fin caso}{fin seleccionar}
+\SetKwFor{For}{para}{hacer}{fin para}%
+\SetKwFor{ForPar}{para}{hacer in paralelo}{fin para}%
+\SetKwFor{ForEach}{para cada}{hacer}{fin para cada}
+\SetKwFor{ForAll}{para todo}{hacer}{fin para todo}
+\SetKwFor{While}{mientras}{hacer}{fin mientras}
+}{}%
+%
+\ifthenelse{\boolean{algocf@optonelanguage}\AND\equal{\algocf@languagechoosen}{croatian}}{%
+\SetKwInput{KwIn}{Ulaz}%KwIn
+\SetKwInput{KwOut}{Izlaz}%KwOut
+\SetKwInput{KwData}{Podaci}%KwData
+\SetKwInput{KwResult}{Rezultat}%KwResult
+\SetKw{KwTo}{do}%KwTo
+\SetKw{KwRet}{vrati}%KwRet
+\SetKw{Return}{vrati}%Return
+\SetKwBlock{Begin}{po\v{c}etak}{kraj}%Begin
+\SetKwRepeat{Repeat}{ponavljaj}{dok ne bude}%Repeat
+%
+\SetKwIF{If}{ElseIf}{Else}{ako}{onda}{ina\v{c}e ako}{ina\v{c}e}{kraj ako}%gIf
+\SetKwSwitch{Switch}{Case}{Other}{granaj}{\v{c}ini}{slu\v{c}aj}{ostali slu\v{c}ajevi}{kraj slu\v{c}aj}{kraj granaj}%Switch
+\SetKwFor{For}{za}{\v{c}ini}{kraj za}%For
+\SetKwFor{ForPar}{za}{\v{c}ini paralelno}{kraj za paralelno}%ForPar
+\SetKwFor{ForEach}{za svaki}{\v{c}ini}{kraj za svaki}%ForEach
+\SetKwFor{ForAll}{za sve}{\v{c}ini}{kraj za sve}%ForAll
+\SetKwFor{While}{dok}{\v{c}ini}{kraj dok}%While
+}{}%
+%
+\ifthenelse{\boolean{algocf@optonelanguage}\AND\equal{\algocf@languagechoosen}{turkish}}{%
+%
+\SetKwInput{KwIn}{Girdi}%
+\SetKwInput{KwOut}{\c{C}{\i}kt{\i}}%
+\SetKwInput{KwData}{Veri}%
+\SetKwInput{KwResult}{Sonu\c{c}}%
+\SetKw{KwTo}{to}
+\SetKw{KwRet}{return}%
+\SetKw{Return}{return}%
+\SetKwBlock{Begin}{begin}{end}%
+\SetKwRepeat{Repeat}{repeat}{until}%
+%
+\SetKwIF{If}{ElseIf}{Else}{if}{then}{else if}{else}{end if}%
+\SetKwSwitch{Switch}{Case}{Other}{switch}{do}{case}{otherwise}{end switch}%
+\SetKwFor{For}{for}{do}{end for}%
+\SetKwFor{ForPar}{for}{do in parallel}{end forpar}
+\SetKwFor{ForEach}{foreach}{do}{end foreach}%
+\SetKwFor{ForAll}{forall}{do}{end forall}%
+\SetKwFor{While}{while}{do}{end while}%
+}{}%
+%
+%
+%%%% old commands compatibility
+%
+\ifthenelse{\boolean{algocf@oldcommands}}{%
+\newcommand{\SetNoLine}{\SetAlgoNoLine}%
+\newcommand{\SetNoline}{\SetAlgoNoLine}%
+\newcommand{\SetVline}{\SetAlgoVlined}%
+\newcommand{\SetLine}{\SetAlgoLined}%
+%
+\newcommand{\dontprintsemicolon}{\DontPrintSemicolon}%
+\newcommand{\printsemicolon}{\PrintSemicolon}%
+\newcommand{\incmargin}[1]{\IncMargin{#1}}%
+\newcommand{\decmargin}[1]{\DecMargin{-#1}}%
+\newcommand{\setnlskip}[1]{\SetNlSkip{#1}}%
+\newcommand{\Setnlskip}[1]{\SetNlSkip{#1}}%
+\newcommand{\setalcapskip}[1]{\SetAlCapSkip{#1}}%
+\newcommand{\setalcaphskip}[1]{\SetAlCapHSkip{#1}}%
+\newcommand{\nlSty}[1]{\NlSty{#1}}%
+\newcommand{\Setnlsty}[3]{\SetNlSty{#1}{#2}{#3}}%
+\newcommand{\linesnumbered}{\LinesNumbered}%
+\newcommand{\linesnotnumbered}{\LinesNotNumbered}%
+\newcommand{\linesnumberedhidden}{\LinesNumberedHidden}%
+\newcommand{\showln}{\ShowLn}%
+\newcommand{\showlnlabel}[1]{\ShowLnLabel{#1}}%
+\newcommand{\nocaptionofalgo}{\NoCaptionOfAlgo}%
+\newcommand{\restorecaptionofalgo}{\RestoreCaptionOfAlgo}%
+\newcommand{\restylealgo}[1]{\RestyleAlgo{#1}}%
+%
+\newcommand{\Titleofalgo}[1]{\TitleOfAlgo{#1}}%
+% \SetKwIF{If}{ElseIf}{Else}{if}{then}{else if}{else}{endif}
+\newcommand{\SetKwIf}[6]{\SetKwIF{#1}{#2#1}{#2}{#3}{#4}{#5 #1}{#5}{#6}}
+%
+\SetKwIF{gSi}{gSinonSi}{gSinon}{si}{alors}{sinon si}{sinon}{fin si}%
+\SetKwIF{gIf}{gElsIf}{gElse}{if}{then}{else if}{else}{end if}%
+\SetKwIF{gIf}{gElseIf}{gElse}{if}{then}{else if}{else}{end if}%
+\SetKwIF{gWenn}{gSonstWenn}{gSonst}{wenn}{dann}{sonst wenn}{sonst}{Ende wenn}%gIf
+\SetKwIF{gSe}{gSenaoSe}{gSenao}{se}{ent\~{a}o}{sen\~{a}o se}{sen\~{a}o}{fim se}%
+\SetKwIF{gSea}{gAltSe}{gAltrimenti}{se}{allora}{altrimenti se}{allora}{fine se}%
+\SetKw{Ret}{return}%
+\SetKwInput{Data}{Data}%
+\SetKwInput{Result}{Result}%
+}{%
+  \relax%
+}%
+%
+%
+%
+%%
+%%%
+%%%% END
\ No newline at end of file
diff --git a/algorithme.sty b/algorithme.sty
new file mode 100644 (file)
index 0000000..7eb59ca
--- /dev/null
@@ -0,0 +1,420 @@
+%%%%%% ************** line 192
+
+
+%%--------------------------------------------------------------------------------------------------------------
+%%                                              ALGORITHME 1.1
+%%--------------------------------------------------------------------------------------------------------------
+%% Quoi de neuf depuis Algorithm 1.0 / What's new since Algorithm 1.0
+%%
+%% Meilleure boîte de cadrage
+%% Meilleure gestion des largeurs, permettant l'utilisation du mode multicolonnes, et permettant la césure
+%% automatique des longues lignes de pseudo-instructions.
+%% Widths are better handled, allowing the use of multicolumn mode, and also allowing auto line splitting into
+%% long lines of pseudo-code.
+%%--------------------------------------------------------------------------------------------------------------
+%%
+%% Copyleft Pierre Chatelier
+%%       e-mail: pierre.chatelier@club-internet.fr
+%%   page perso: http://perso.club-internet.fr/ktd
+%%
+%%Un package pour ecrire du code algorithmique
+%%Il propose, dans l'environnement "algorithme", d'utiliser
+%%  -Des remarques, pour commenter le code          ( \Rem{Remarque}                                         )
+%%  -Des blocs, pour indenter le code               ( \Block{code}                                           )
+%%  -Des boucles "Tant Que...faire...Fait"          ( \While{condition}{code}                                )
+%%  -Des boucles "Repeter...jusqu'a"                ( \Repeat{code}{condition} ou \RepeatUntil{}{}           )
+%%  -Des boucles "Pour...de...a...faire...Fin Pour" ( \ForFromTo{variable}{valeur début}{valeur fin}{code}   )
+%%  -Des boucles "Pour...faire...Fin Pour"          ( \For{controle de boucle}{code}                         )
+%%  -Des Si...Alors...Fin Si                        ( \If{condition}{code} ou \IfThen{condition}{code}       )
+%%  -Des Si...Alors...Sinon...Fin Si                ( \IfThenElse{condition}{code de alors}{code de sinon}   )
+%%  -Des Selon que ... Fin Selon que                ( \Switch{code}                                          )
+%%  -Des fonctions                                  ( \Function{parametres}{type de retour}{code}            )
+%%  -Des procédures                                 ( \Procedure{parametres}{code}                           )
+%%  -Une instruction de declaration de type         ( \Type{nom ou liste de variable}{nom de type}           )
+%%  -Quelques mots-clefs d'usage courant : \True, \False, \And, \Or et \Not
+%% Les versions étoilées des commandes (\WhileDo*{}, \IfThen*{}, ... ; toutes sauf \Rem, \Block \Switch,
+%% \Function et \Procedure) font tout sur la meme ligne
+%%
+%% Une table des algorithmes est disponible via \listofalgorithms.
+%% Pour introduire un algorithme dans cette table, il faut taper la commande "\caption{texte...}" dans un
+%% environnemment "algorithme"
+%%
+%% On peut passer une option au package : [french] ou [english] pour la langue des mots-clef
+%%
+%%---------------------------------------------------------------------------------------------------------------
+%%This is a package to write some algorithms.
+%%It provides, within an "algorithm" environment, to use
+%%  -Comments                         ( \Rem{text}                                               )
+%%  -Blocks, to indent code           ( \Block{text}                                             )
+%%  -While ... do ... done            ( \While{condition}{code}                                  )
+%%  -Repeat ... until                 ( \Repeat{code}{condition} or \RepeatUntil{}{}             )
+%%  -Repeat ... until                 ( \RepeatUntil{code}{condition}                            )
+%%  -For...from...to...do...done      ( \ForFromTo{variable}{initial value}{final value}{code}   )
+%%  -For...do...done                  ( \For{loop control}{code}                                 )
+%%  -If...then...end if               ( \If{condition}{code} or \IfThen{condition}{code}         )
+%%  -If...then...else...end if        ( \IfThenElse{condition}{then code}{else code}             )
+%%  -Switch                           ( \Switch{code}                                            )
+%%  -Function                         ( \Function{parameters}{return type}{code}                 )
+%%  -Procedure                        ( \Procedure{parametres}{code}                             )
+%%  -A type declaration instruction   ( \Type{name or list of variables}{type name}              )
+%%  -Some useful keywords: \True, \False, \And, \Or and \Not.
+%% Most of these commands have a star-form (\WhileDo*{}, \IfThen*{}, ... ; all but \Rem, \Block \Switch
+%% \Function and \Procedure). These star-forms are single-lined.
+%%
+%% A list of algorithms is provided through \listofalgorithms.
+%% To add an entry in this table, the matching algorithm must have a caption, thanks to "\caption{text}".
+%%
+%% You can specifiy an option to the package : [french] ou [english] for the language of the keywords.
+%%
+%%---------------------------------------------------------------------------------------------------------------
+
+
+%%-----------------------------------------------------------------%%
+%%---------------------- Identification ---------------------------%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesClass{algorithme} %Nom de la classe / Class name
+%%-----------------------------------------------------------------%%
+%%
+%%
+%%-----------------------------------------------------------------%%
+%%------------------------ Inclusions -----------------------------%%
+\RequirePackage{float, ifthen, calc}
+%%
+%%
+%%-----------------------------------------------------------------%%
+%%------------------------ Langage/Language -----------------------%%
+
+%% Changer le langage dans le contexte de babel /Change langage according to babel
+\@ifpackageloaded{babel}
+{
+  %\iflanguage{french}{\def\alg@language{french}}{}
+  \iflanguage{english}{\def\alg@language{english}}{}
+  \iflanguage{american}{\def\alg@language{english}}{}
+}
+{
+ % \def\alg@language{french} %Langage par defaut / Default language
+}
+
+%% Tenir compte de l'option specifiee explicitement / Handle explicit langage option
+%\DeclareOption{french}{\def\alg@language{french}}
+\DeclareOption{english}{\def\alg@language{english}}
+\DeclareOption{american}{\def\alg@language{english}}
+\ProcessOptions\relax
+
+
+%% Declaration des commandes / Commands declaration
+\ifthenelse{\equal{\alg@language}{french}}
+{
+  \def\alg@floatname{Algorithme}
+  \def\alg@listname{Liste des Algorithmes}
+
+  \newcommand{\@TRUE}{\textbf{vrai}}%
+  \newcommand{\@FALSE}{\textbf{faux}}%
+  \newcommand{\@AND}{\textbf{ET }}%
+  \newcommand{\@OR}{\textbf{OU }}%
+  \newcommand{\@NOT}{\textbf{$\neg$}}%
+
+  \newcommand{\@WHILE}{\textbf{Tant que }}%
+  \newcommand{\@DO}{\textbf{faire }}%
+  \newcommand{\@ENDWHILE}{\textbf{Fait}}%
+
+  \newcommand{\@REPEAT}{\textbf{R\'ep\'eter }}%
+  \newcommand{\@UNTIL}{\textbf{jusqu'\`a ce que }}%
+
+  \newcommand{\@FOR}{\textbf{Pour }}%
+  \newcommand{\@FROM}{\textbf{de }}%
+  \newcommand{\@TO}{\textbf{\`a }}%
+  \newcommand{\@ENDFOR}{\textbf{Fin Pour}}%
+  \newcommand{\@IF}{\textbf{Si }}%
+  \newcommand{\@THEN}{\textbf{Alors }}%
+  \newcommand{\@ELSE}{\textbf{Sinon }}%
+  \newcommand{\@ENDIF}{\textbf{Fin Si}}%
+
+  \newcommand{\@SWITCH}{\textbf{Selon que }}%
+  \newcommand{\@ENDSWITCH}{\textbf{Fin Selon que}}%
+  \newcommand{\@FUNCTION}{\textbf{Fonction }}%
+  \newcommand{\@RETURN}{\textbf{Retourner }}%
+  \newcommand{\@ENDFUNCTION}{\textbf{Fin}}%
+  \newcommand{\@PROCEDURE}{\textbf{Proc\'edure }}%
+  \newcommand{\@ENDPROCEDURE}{\textbf{Fin}}%
+}{}
+\ifthenelse{\equal{\alg@language}{english}}
+{
+  \def\alg@floatname{Algorithm}
+  \def\alg@listname{List of Algorithms}
+
+  \newcommand{\@TRUE}{\textbf{true}}%
+  \newcommand{\@FALSE}{\textbf{false}}%
+  \newcommand{\@AND}{\textbf{AND }}%
+  \newcommand{\@OR}{\textbf{OR }}%
+  \newcommand{\@NOT}{\textbf{$\neg$}}%
+
+  \newcommand{\@WHILE}{\textbf{While }}%
+  \newcommand{\@DO}{\textbf{do }}%
+  \newcommand{\@ENDWHILE}{\textbf{done}}%
+
+  \newcommand{\@REPEAT}{\textbf{Repeat }}%
+  \newcommand{\@UNTIL}{\textbf{until }}%
+
+  \newcommand{\@FOR}{\textbf{For }}%
+  \newcommand{\@FROM}{\textbf{from }}%
+  \newcommand{\@TO}{\textbf{to }}%
+  \newcommand{\@ENDFOR}{\textbf{end For}}%
+  \newcommand{\@IF}{\textbf{If }}%
+  \newcommand{\@THEN}{\textbf{then }}%
+  \newcommand{\@ELSE}{\textbf{else }}%
+  \newcommand{\@ENDIF}{\textbf{end If}}%
+
+  \newcommand{\@SWITCH}{\textbf{Switch }}%
+  \newcommand{\@ENDSWITCH}{\textbf{end Switch}}%
+  \newcommand{\@FUNCTION}{\textbf{Function }}%
+  \newcommand{\@RETURN}{\textbf{return }}%
+  \newcommand{\@ENDFUNCTION}{\textbf{End}}%
+  \newcommand{\@PROCEDURE}{\textbf{Procedure }}%
+  \newcommand{\@ENDPROCEDURE}{\textbf{End}}%
+}{}
+
+%%
+%%
+%%-----------------------------------------------------------------%%
+%%----------------------- Commandes/Commands ----------------------%%
+
+%% Adequation au package "float" / Match "float" package
+\newcommand\floatc@alg[2]{\begin{center}{\bfseries\rmfamily #1:} #2\end{center}}
+\newcommand\fs@alg{
+   \let\@fs@capt\floatc@alg
+   \def\@fs@pre{}\def\@fs@post{}\def\@fs@mid{\vspace{3pt}}
+   \let\@fs@iftopcapt\iftrue}
+\newfloat{algorithmfloat}{h}{loa}
+\floatname{algorithmfloat}{\alg@floatname}
+%\newcommand{\listofalgorithms}{\listof{algorithmfloat}{\alg@listname}}
+\newlength{\alglength}
+
+%% Les commandes disponibles / Provided commands
+\newenvironment{algorithme}[1][H]
+{
+ \setlength{\alglength}{.95\linewidth}
+ \begin{algorithmfloat}[#1]
+ %%Rem{texte} : ecrit une remarque
+ %%Rem{text}  : puts a comment
+ \newcommand{\@Rem}[1]{\begin{minipage}[t]{\alglength}
+                        \emph{[##1]}
+                        \vspace*{.5ex}
+                       \end{minipage}
+                      }%
+
+ %%Bloc{code} : Encapsule quelques lignes / encapsulate some lines
+ \newcommand{\@Block}[1]{\begin{minipage}[t]{\alglength}
+                         ##1
+                         \vspace*{.5ex}
+                         \end{minipage}
+                        }%
+
+ %%WhileDo{condition}{code}
+ \newcommand{\@WhileDo}[2]{\begin{minipage}[t]{\alglength}
+                           \@WHILE (##1) \@DO \\
+                           \hspace*{1em}
+                           \addtolength{\alglength}{-2em-\tabcolsep-\arrayrulewidth}
+                           \begin{tabular}{|p{\alglength}} ##2\\ \end{tabular}%
+                           \addtolength{\alglength}{2em+\tabcolsep+\arrayrulewidth}
+                           \\ \@ENDWHILE%
+                           \vspace*{.5ex}
+                          \end{minipage}
+                         }%
+ %%WhileDo{condition}{code} sur une seule ligne / on a single line
+ \newcommand{\@ShortWhileDo}[2]{\begin{minipage}[t]{\alglength}
+                                \@WHILE (##1) \@DO ##2 \@ENDWHILE
+                                \vspace*{.5ex}
+                                \end{minipage}
+                               }%
+
+ %%RepeatUntil{code}{condition}
+ \newcommand{\@RepeatUntil}[2]{\begin{minipage}[t]{\alglength}
+                               \@REPEAT \\
+                               \hspace*{1em}
+                               \addtolength{\alglength}{-2em-\tabcolsep-\arrayrulewidth}
+                               \begin{tabular}{|p{\alglength}} ##1\\ \end{tabular}%
+                               \addtolength{\alglength}{2em+\tabcolsep+\arrayrulewidth}
+                               \\ \@UNTIL (##2)%
+                               \vspace*{.5ex}
+                              \end{minipage}
+                             }%
+ %%RepeatUntil{code}{condition} sur une seule ligne / on a single line
+ \newcommand{\@ShortRepeatUntil}[2]{\begin{minipage}[t]{\alglength}
+                                    \@REPEAT ##1 \@UNTIL (##2)%
+                                    \vspace*{.5ex}
+                                    \end{minipage}
+                                   }%                             
+
+ %%ForFromToDo{variable}{valeur initiale}{valeur finale}{code}
+ %%ForFromToDo{variable}{initial value}{final value}{code}
+ \newcommand{\@ForFromToDo}[4]{\begin{minipage}[t]{\alglength}
+                               \@FOR ##1 \@FROM ##2 \@TO ##3 \@DO \\
+                               \hspace*{.3em}
+                               \addtolength{\alglength}{-2em-\tabcolsep-\arrayrulewidth}
+                               \begin{tabular}{|p{\alglength}} ##4\\ \end{tabular}%
+                               \addtolength{\alglength}{2em+\tabcolsep+\arrayrulewidth}
+                               \\ \@ENDFOR%
+                               \vspace*{.5ex}
+                              \end{minipage}
+                             }%
+ %%ForFromToDo{variable}{valeur initiale}{valeur finale}{code} sur une seule ligne
+ %%ForFromToDo{variable}{initial value}{final value}{code} on a single line
+ \newcommand{\@ShortForFromToDo}[4]{\begin{minipage}[t]{\alglength}
+                                    \@FOR ##1 \@FROM ##2 \@TO ##3 \@DO ##4 \@ENDFOR%
+                                    \vspace*{.5ex}
+                                    \end{minipage}
+                                   }%
+
+ %%For{controle de boucle style C}{code}
+ %%For{C-like loop control}{code}
+ \newcommand{\@ForDo}[2]{\begin{minipage}[t]{\alglength}
+                         \@FOR ##1 \@DO \vspace*{.5ex}\\
+                         \hspace*{.3em}
+                         \addtolength{\alglength}{-2em-\tabcolsep-\arrayrulewidth}
+                         \begin{tabular}{|p{\alglength}} ##2\\ \end{tabular}%
+                         \addtolength{\alglength}{2em+\tabcolsep+\arrayrulewidth}
+                         \\ \@ENDFOR%
+                         \vspace*{.5ex}
+                         \end{minipage}
+                       }%
+ %%For{controle de boucle style C}{code} sur une seule ligne
+ %%For{C-like loop control}{code} on a single line
+ \newcommand{\@ShortForDo}[2]{\begin{minipage}[t]{\alglength}
+                              \@FOR ##1 \@DO ##2 \@ENDFOR%
+                              \vspace*{.5ex}
+                              \end{minipage}
+                             }%
+
+ %%IfThen{condition}{code}
+ \newcommand{\@IfThen}[2]{\begin{minipage}[t]{\alglength}
+                          \@IF (##1) \@THEN \\
+                          \hspace*{.5em}
+                          \addtolength{\alglength}{-1.5em-\tabcolsep-\arrayrulewidth}
+                          \begin{tabular}{|p{\alglength}} ##2\\ \end{tabular}%
+                          \addtolength{\alglength}{1.5em+\tabcolsep+\arrayrulewidth}
+                          \\ \@ENDIF%
+                          \vspace*{.5ex}
+                         \end{minipage}
+                        }%
+ %%IfThen{condition}{code} sur une seule ligne / on a single line
+ \newcommand{\@ShortIfThen}[2]{\begin{minipage}[t]{\alglength}
+                               \@IF (##1) \@THEN ##2 \@ENDIF%
+                               \vspace*{.5ex}
+                               \end{minipage}
+                              }%
+                              
+ %%IfThenElse{condition}{code du then}{code du else} NE PAS CONFONDRE avec le \ifthenelse de LaTeX
+ %%IfThenElse{condition}{then-code}{else-code} DO NOT CONFUSE with \ifthenelse from LaTeX
+ \newcommand{\@IfThenElse}[3]{\begin{minipage}[t]{\alglength}
+                              \@IF (##1) \@THEN \\
+                              \hspace*{.5em}
+                              \addtolength{\alglength}{-2em-\tabcolsep-\arrayrulewidth}
+                              \begin{tabular}{|p{\alglength}} ##2\\ \end{tabular}%
+                              \\ \@ELSE\\
+                              \hspace*{.5em}
+                              \begin{tabular}{|p{\alglength}} ##3\\ \end{tabular}%
+                              \addtolength{\alglength}{2em+\tabcolsep+\arrayrulewidth}
+                              \\ \@ENDIF%
+                              \vspace*{.5ex}
+                              \end{minipage}
+                            }%
+ %%IfThenElse{condition}{code du then}{code du else} sur une seule ligne
+ %%IfThenElse{condition}{then-code}{else-code} on a single line
+ \newcommand{\@ShortIfThenElse}[3]{\begin{minipage}[t]{\alglength}
+                                   \@IF (##1) \@THEN ##2 \@ELSE ##3 \@ENDIF%
+                                   \vspace*{.5ex}
+                                   \end{minipage}
+                                  }%
+
+ %%Switch{code} (C'est le selon que)
+ \newcommand{\@Switch}[1]{\begin{minipage}[t]{\alglength}
+                          \@SWITCH \\
+                          \hspace*{1em}
+                          \addtolength{\alglength}{-2em-\tabcolsep-\arrayrulewidth}
+                          \begin{tabular}{|p{\alglength}} ##1\\ \end{tabular}%
+                          \addtolength{\alglength}{2em+\tabcolsep+\arrayrulewidth}
+                          \\ \@ENDSWITCH%
+                          \vspace*{.5ex}
+                          \end{minipage}
+                        }%
+
+ %%Function{parametres}{type de retour}{code}
+ %%Function{parameters}{return type}{code}
+ \newcommand{\@Function}[4]{\begin{minipage}[t]{\alglength}
+                            \@FUNCTION  ##1(##2) : \textbf{##3}\\
+                            \hspace*{1em}
+                            \addtolength{\alglength}{-2em-\tabcolsep-\arrayrulewidth}
+                            \begin{tabular}{|p{\alglength}} ##4\\ \end{tabular}%
+                            \addtolength{\alglength}{2em+\tabcolsep+\arrayrulewidth}
+                            \\ \@ENDFUNCTION%
+                            \vspace*{.5ex}
+                            \end{minipage}
+                           }%
+
+ %%Procedure{parametres}{code}
+ %%Procedure{parameters}{code}
+ \newcommand{\@Procedure}[3]{\begin{minipage}[t]{\alglength}
+                             \@PROCEDURE ##1(##2)\\
+                             \hspace*{1em}
+                             \addtolength{\alglength}{-2em-\tabcolsep-\arrayrulewidth}
+                             \begin{tabular}{|p{\alglength}} ##3\\ \end{tabular}%
+                             \addtolength{\alglength}{2em+\tabcolsep+\arrayrulewidth}
+                             \\ \@ENDPROCEDURE%
+                             \vspace*{.5ex}
+                             \end{minipage}
+                            }%
+
+ %%Type{nom ou liste de variable}{nom de type}
+ %%Type{name or list of variables}{type name}
+ \newcommand{\@Type}[2]{##1 : \textbf{##2}}                            
+                           
+ %%Definition des macro-commandes pratiques pour l'utilisateur.
+ %%La forme etoilee de certaines commandes est un alias de leur version courte (sur une seule ligne)
+ %%Definition of macro-commands useful for the user.
+ %%The star-from of some commands is an alias towards ther short form (on a single line)
+ \def\True{       \@TRUE}%
+ \def\False{      \@FALSE}%
+ \def\And{        \@AND}%
+ \def\Or{         \@OR}%
+ \def\Not{        \@NOT}%
+ \def\Rem{        \@Rem}
+ \def\Block{      \@Block}
+ \def\While{      \@ifstar{\@ShortWhileDo}     {\@WhileDo}}
+ \def\WhileDo{    \@ifstar{\@ShortWhileDo}     {\@WhileDo}}
+ \def\Repeat{     \@ifstar{\@ShortRepeatUntil} {\@RepeatUntil}}
+ \def\RepeatUntil{\@ifstar{\@ShortRepeatUntil} {\@RepeatUntil}}
+ \def\ForFromTo{  \@ifstar{\@ShortForFromToDo} {\@ForFromToDo}} 
+ \def\ForFromToDo{\@ifstar{\@ShortForFromToDo} {\@ForFromToDo}} 
+ \def\ForDo{      \@ifstar{\@ShortForDo}       {\@ForDo}} 
+ \def\For{        \@ifstar{\@ShortForDo}       {\@ForDo}} 
+ \def\If{         \@ifstar{\@ShortIfThen}      {\@IfThen}} 
+ \def\IfThen{     \@ifstar{\@ShortIfThen}      {\@IfThen}} 
+ \def\IfThenElse{ \@ifstar{\@ShortIfThenElse}  {\@IfThenElse}} 
+ \def\Switch{     \@ifstar{\@Switch}           {\@Switch}} 
+ \def\Function{   \@ifstar{\@Function}         {\@Function}} 
+ \def\Return{     \@RETURN}
+ \def\Procedure{  \@ifstar{\@Procedure}        {\@Procedure}} 
+ \def\Type{       \@Type}
+ \begin{minipage}[t]{\alglength}
+ \begin{center}\begin{tabular}{|c|}\hline\\
+ \hspace*{.5em}
+ \begin{minipage}[t]{\alglength}
+}
+%% Fin de l'environnement "algorithme" / end of "algorithme" environnment
+{
+ \end{minipage}\hspace*{.5em}
+ \\\\\hline\end{tabular}\end{center}
+ \end{minipage}
+ \end{algorithmfloat}
+}
+
+%% ----------------------------- FIN / END ---------------------------------------
diff --git a/algorithmic.sty b/algorithmic.sty
new file mode 100644 (file)
index 0000000..26b53f6
--- /dev/null
@@ -0,0 +1,188 @@
+% ALGORITHMIC STYLE for LaTeX version 2e
+%
+% This style file is free software; you can redistribute it and/or
+% modify it under the terms of the GNU Lesser General Public
+% License as published by the Free Software Foundation; either
+% version 2 of the License, or (at your option) any later version.
+%
+% This style file 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
+% Lesser General Public License for more details.
+%
+% You should have received a copy of the GNU Lesser General Public
+% License along with this style file; if not, write to the
+% Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+% Boston, MA  02111-1307, USA.
+%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{algorithmic}[2005/07/05]
+\typeout{Document Style `algorithmic' - environment}
+%
+\RequirePackage{ifthen}
+\RequirePackage{calc}
+\RequirePackage{keyval}
+\newboolean{ALC@noend}
+\setboolean{ALC@noend}{false}
+\newcounter{ALC@line}
+\newcounter{ALC@rem}
+\newcounter{ALC@depth}
+\newlength{\ALC@tlm}
+%
+\DeclareOption{noend}{\setboolean{ALC@noend}{true}}
+%
+\ProcessOptions
+%
+% For keyval-style options
+\def\algsetup{\setkeys{ALG}}
+%
+% For indentation of algorithms
+\newlength{\algorithmicindent}
+\setlength{\algorithmicindent}{0pt}
+\define@key{ALG}{indent}{\setlength{\algorithmicindent}{#1}}
+\ifthenelse{\lengthtest{\algorithmicindent=0pt}}%
+        {\setlength{\algorithmicindent}{1em}}{}
+%
+% For line numbers' delimiters
+\newcommand{\ALC@linenodelimiter}{:}
+\define@key{ALG}{linenodelimiter}{\renewcommand{\ALC@linenodelimiter}{#1}}
+
+%
+% For line numbers' size
+\newcommand{\ALC@linenosize}{\footnotesize}
+\define@key{ALG}{linenosize}{\renewcommand{\ALC@linenosize}{#1}}
+
+%
+% ALGORITHMIC
+\newcommand{\algorithmicrequire}{\textbf{Require:}}
+\newcommand{\algorithmicensure}{\textbf{Ensure:}}
+\newcommand{\algorithmiccomment}[1]{\{#1\}}
+\newcommand{\algorithmicend}{\textbf{end}}
+\newcommand{\algorithmicif}{\textbf{if}}
+\newcommand{\algorithmicthen}{\textbf{then}}
+\newcommand{\algorithmicelse}{\textbf{else}}
+\newcommand{\algorithmicelsif}{\algorithmicelse\ \algorithmicif}
+\newcommand{\algorithmicendif}{\algorithmicend\ \algorithmicif}
+\newcommand{\algorithmicfor}{\textbf{for}}
+\newcommand{\algorithmicforall}{\textbf{for all}}
+\newcommand{\algorithmicdo}{\textbf{do}}
+\newcommand{\algorithmicendfor}{\algorithmicend\ \algorithmicfor}
+\newcommand{\algorithmicwhile}{\textbf{while}}
+\newcommand{\algorithmicendwhile}{\algorithmicend\ \algorithmicwhile}
+\newcommand{\algorithmicloop}{\textbf{loop}}
+\newcommand{\algorithmicendloop}{\algorithmicend\ \algorithmicloop}
+\newcommand{\algorithmicrepeat}{\textbf{repeat}}
+\newcommand{\algorithmicuntil}{\textbf{until}}
+\newcommand{\algorithmicprint}{\textbf{print}}
+\newcommand{\algorithmicreturn}{\textbf{return}}
+\def\ALC@setref{%
+  \def\@currentlabel{\theALC@line}%
+}
+\def\ALC@item[#1]{%
+\if@noparitem \@donoparitem
+  \else \if@inlabel \indent \par \fi
+         \ifhmode \unskip\unskip \par \fi
+         \if@newlist \if@nobreak \@nbitem \else
+                        \addpenalty\@beginparpenalty
+                        \addvspace\@topsep \addvspace{-\parskip}\fi
+           \else \addpenalty\@itempenalty \addvspace\itemsep
+          \fi
+    \global\@inlabeltrue
+\fi
+\everypar{\global\@minipagefalse\global\@newlistfalse
+          \if@inlabel\global\@inlabelfalse \hskip -\parindent \box\@labels
+             \penalty\z@ \fi
+          \everypar{}}\global\@nobreakfalse
+\if@noitemarg \@noitemargfalse \if@nmbrlist \refstepcounter{\@listctr}\fi \fi
+\sbox\@tempboxa{\makelabel{#1}}%
+\global\setbox\@labels
+ \hbox{\unhbox\@labels \hskip \itemindent
+       \hskip -\labelwidth \hskip -\ALC@tlm
+       \ifdim \wd\@tempboxa >\labelwidth
+                \box\@tempboxa
+          \else \hbox to\labelwidth {\unhbox\@tempboxa}\fi
+       \hskip \ALC@tlm}\ignorespaces}
+%
+\newenvironment{algorithmic}[1][0]{
+\setcounter{ALC@depth}{\@listdepth}%
+\let\@listdepth\c@ALC@depth%
+\let\@item\ALC@item
+  \newcommand{\ALC@lno}{%
+\ifthenelse{\equal{\arabic{ALC@rem}}{0}}
+{{\ALC@linenosize \arabic{ALC@line}\ALC@linenodelimiter}}{}%
+}
+\let\@listii\@listi
+\let\@listiii\@listi
+\let\@listiv\@listi
+\let\@listv\@listi
+\let\@listvi\@listi
+\let\@listvii\@listi
+  \newenvironment{ALC@g}{
+    \begin{list}{\ALC@lno}{ \itemsep\z@ \itemindent\z@
+    \listparindent\z@ \rightmargin\z@ 
+    \topsep\z@ \partopsep\z@ \parskip\z@\parsep\z@
+    \leftmargin \algorithmicindent%1em
+    \addtolength{\ALC@tlm}{\leftmargin}
+    }
+  }
+  {\end{list}}
+  \newcommand{\ALC@it}{\refstepcounter{ALC@line}\refstepcounter{ALC@rem}\ifthenelse{\equal{\arabic{ALC@rem}}{#1}}{\setcounter{ALC@rem}{0}}{}\item\ALC@setref}
+  \newcommand{\ALC@com}[1]{\ifthenelse{\equal{##1}{default}}%
+{}{\ \algorithmiccomment{##1}}}
+  \newcommand{\REQUIRE}{\item[\algorithmicrequire]}
+  \newcommand{\ENSURE}{\item[\algorithmicensure]}
+  \newcommand{\PRINT}{\ALC@it\algorithmicprint{}\ \ }
+  \newcommand{\RETURN}{\ALC@it\algorithmicreturn{}\ \ }
+  \newcommand{\STATE}{\ALC@it}
+  \newcommand{\COMMENT}[1]{\algorithmiccomment{##1}}
+  \newenvironment{ALC@if}{\begin{ALC@g}}{\end{ALC@g}}
+  \newenvironment{ALC@for}{\begin{ALC@g}}{\end{ALC@g}}
+  \newenvironment{ALC@whl}{\begin{ALC@g}}{\end{ALC@g}}
+  \newenvironment{ALC@loop}{\begin{ALC@g}}{\end{ALC@g}}
+  \newenvironment{ALC@rpt}{\begin{ALC@g}}{\end{ALC@g}}
+  \renewcommand{\\}{\@centercr}
+  \newcommand{\IF}[2][default]{\ALC@it\algorithmicif\ ##2\ \algorithmicthen%
+\ALC@com{##1}\begin{ALC@if}}
+  \newcommand{\ELSE}[1][default]{\end{ALC@if}\ALC@it\algorithmicelse%
+\ALC@com{##1}\begin{ALC@if}}
+  \newcommand{\ELSIF}[2][default]%
+{\end{ALC@if}\ALC@it\algorithmicelsif\ ##2\ \algorithmicthen%
+\ALC@com{##1}\begin{ALC@if}}
+  \newcommand{\FOR}[2][default]{\ALC@it\algorithmicfor\ ##2\ \algorithmicdo%
+\ALC@com{##1}\begin{ALC@for}}
+  \newcommand{\FORALL}[2][default]{\ALC@it\algorithmicforall\ ##2\ %
+\algorithmicdo%
+\ALC@com{##1}\begin{ALC@for}}
+  \newcommand{\WHILE}[2][default]{\ALC@it\algorithmicwhile\ ##2\ %
+\algorithmicdo%
+\ALC@com{##1}\begin{ALC@whl}}
+  \newcommand{\LOOP}[1][default]{\ALC@it\algorithmicloop%
+\ALC@com{##1}\begin{ALC@loop}}
+  \newcommand{\REPEAT}[1][default]{\ALC@it\algorithmicrepeat%
+\ALC@com{##1}\begin{ALC@rpt}}
+  \newcommand{\UNTIL}[1]{\end{ALC@rpt}\ALC@it\algorithmicuntil\ ##1}
+  \ifthenelse{\boolean{ALC@noend}}{
+    \newcommand{\ENDIF}{\end{ALC@if}}
+    \newcommand{\ENDFOR}{\end{ALC@for}}
+    \newcommand{\ENDWHILE}{\end{ALC@whl}}
+    \newcommand{\ENDLOOP}{\end{ALC@loop}}
+  }{
+    \newcommand{\ENDIF}{\end{ALC@if}\ALC@it\algorithmicendif}
+    \newcommand{\ENDFOR}{\end{ALC@for}\ALC@it\algorithmicendfor}
+    \newcommand{\ENDWHILE}{\end{ALC@whl}\ALC@it\algorithmicendwhile}
+    \newcommand{\ENDLOOP}{\end{ALC@loop}\ALC@it\algorithmicendloop}
+  } 
+  \renewcommand{\@toodeep}{}
+  \begin{list}{\ALC@lno}{\setcounter{ALC@line}{0}\setcounter{ALC@rem}{0}%
+    \itemsep\z@ \itemindent\z@ \listparindent\z@%
+    \partopsep\z@ \parskip\z@ \parsep\z@%
+    \labelsep 0.5em \topsep 0.2em%
+\ifthenelse{\equal{#1}{0}}
+  {\labelwidth 0.5em }
+  {\labelwidth  1.2em }
+\leftmargin\labelwidth \addtolength{\leftmargin}{\labelsep}
+    \ALC@tlm\labelsep
+  }
+}
+{\end{list}}
+
diff --git a/bbm.sty b/bbm.sty
new file mode 100644 (file)
index 0000000..d41a4ed
--- /dev/null
+++ b/bbm.sty
@@ -0,0 +1,40 @@
+%%
+%% This is file `bbm.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% bbm.dtx  (with options: `package')
+%% 
+%% Copyright (C) 1994,1997 by Torsten Hilbrich
+%% 
+%% This file is part of the BBM package, a support for using the bbm* fonts.
+\def\fileversion{1.1}
+\def\filedate{1997/07/24}
+%% \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         \~}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{bbm}[\filedate\space V\space\fileversion
+                      \space provides fonts for set symbols - TH]
+\DeclareMathAlphabet{\mathbbm}{U}{bbm}{m}{n}
+\SetMathAlphabet\mathbbm{bold}{U}{bbm}{bx}{n}
+\DeclareMathAlphabet{\mathbbmss}{U}{bbmss}{m}{n}
+\SetMathAlphabet\mathbbmss{bold}{U}{bbmss}{bx}{n}
+\DeclareMathAlphabet{\mathbbmtt}{U}{bbmtt}{m}{n}
+
+\endinput
+%%
+%% End of file `bbm.sty'.
diff --git a/changemargin.sty b/changemargin.sty
new file mode 100644 (file)
index 0000000..9919dcb
--- /dev/null
@@ -0,0 +1,16 @@
+% Change margins on the fly
+\newenvironment{changemargin}[2]{%
+        \begin{list}{}{%
+                \setlength{\topsep}{0pt}%
+                \setlength{\leftmargin}{#1}%
+                \setlength{\rightmargin}{#2}%
+                \setlength{\listparindent}{\parindent}%
+                \setlength{\itemindent}{\parindent}%
+                \setlength{\parsep}{\parskip}%
+        }%
+        \item[] ~ \par%
+        % Get rid of the extra space inserted by the previous line
+        \vspace*{-2em}%
+}{
+        \end{list}
+}
diff --git a/drop.sty b/drop.sty
new file mode 100644 (file)
index 0000000..f4a5d77
--- /dev/null
+++ b/drop.sty
@@ -0,0 +1,67 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%  DROP.DOC <February 17, 1988>
+%  Macro for dropping and enlarging the first letter(s) of a paragraph.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%  Macro written by David G. Cantor, and published Fri, 12 Feb 88, in
+%  TeXhax, 1988 #16.  
+%  Internet:  dgc@math.ucla.edu
+%  UUCP:      ...!{ihnp4, randvax, sdcrdcf, ucbvax}!ucla-cs!dgc
+%
+%  Modified for use with LaTeX by Dominik Wujastyk, February 17, 1988
+%  Internet:   dow@wjh12.harvard.edu
+%  Bitnet:     dow@harvunxw.bitnet
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%  This LaTeX macro is for dropping and enlarging the first letter(s) of a
+%  paragraph.  The argument may be one or more letters.
+%
+%  Here is an example of its usage:
+%
+%  \documentstyle[drop]{article}
+%  \begin{document}
+%    \drop{IN} THE beginning God created the heaven and the earth.  Now the
+%    earth was unformed and void, and darkness was upon the face of the
+%    deep; and the spirit of God hovered over the face of the waters.
+%  \end{document}
+%
+%  Which will produce something along these lines:
+%
+%  I I\  I THE beginning God  created the heaven and  the earth.
+%  I I \ I Now the earth was unformed and void, and darkness was
+%  I I  \I upon the face of the deep; and the spirit of God hov-
+%  ered over the face of the waters.
+%
+%  In the first instance the macro will pause during LaTeX processing and 
+%  ask you for the font you wish to use for you drop capital.  When you
+%  have something that looks good, then comment out box one in DROP.STY,
+%  and comment in box two, replacing "cmr10 scaled \magstep5" with the font
+%  of your choice.
+%
+%  In my opinion (DW) there are no fonts available in the standard
+%  TeX/LaTeX set that are ideal for this use, unless you go down to 9pt or 
+%  8pt for your text face, and this is too small.  If you have Metafont you
+%  should consider generating a cmr17 font at a magstep of two (about 25pt)
+%  or three (about 30pt), or even more, depending on the point size of your
+%  main text.  Why not go the whole hog and design some really fancy 
+%  capitals from scratch!
+%
+%%%%%%%%%%%%%%%%%%%%% BOX ONE %%%%%%%%%%%%%%%%%%%%%%%%%
+\typein[\dropinitialfont]{Font for Dropped initial:}  %
+\font\largefont \dropinitialfont                      %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%%%%%%%%%%%%%%%%%%%%% BOX TWO %%%%%%%%%%%%%%%%%%%%%%%%%
+%\font\largefont= cmr10 scaled \magstep5              %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\drop#1#2{{\noindent
+    \setbox0\hbox{\largefont #1}\setbox1\hbox{#2}\setbox2\hbox{(}%
+    \count0=\ht0\advance\count0 by\dp0\count1\baselineskip
+    \advance\count0 by-\ht1\advance\count0by\ht2
+    \dimen1=.5ex\advance\count0by\dimen1\divide\count0 by\count1
+    \advance\count0 by1\dimen0\wd0
+    \advance\dimen0 by.25em\dimen1=\ht0\advance\dimen1 by-\ht1
+    \global\hangindent\dimen0\global\hangafter-\count0
+    \hskip-\dimen0\setbox0\hbox to\dimen0{\raise-\dimen1\box0\hss}%
+    \dp0=0in\ht0=0in\box0}#2}
diff --git a/dropping.sty b/dropping.sty
new file mode 100644 (file)
index 0000000..0092ea8
--- /dev/null
@@ -0,0 +1,137 @@
+%%
+%% This is file `dropping.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% dropping.dtx  (with options: `paketkod')
+%% 
+%% Copyright (c) 1996-97 by Mats Dahlgren <matsd@homenet.se>.
+%% All rights reserved.  See the file `dropping.ins' for information
+%% on how you may (re-)distribute the `dropping' package files.
+%% 
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{dropping}[1997/06/12 v.0.12]
+\newcount\bigscale
+\newcount\down
+\newdimen\saveunitlength
+\newdimen\wantedheight
+\newif\ifstrtcmmnd \strtcmmndfalse
+\DeclareOption{dvips}{%
+\newcount\wantedcount
+\newcount\actualcount%
+\newdimen\actualheight%
+\def\findsize#1#2{%
+\bigscale=1000%
+\font\BIG=#1 scaled \bigscale%
+\setbox0=\hbox{\BIG #2\/}%
+\actualheight=\ht0%
+\wantedcount=\wantedheight \actualcount=\actualheight%
+\advance\actualcount by 50%
+\divide\actualcount by 100%
+\multiply\wantedcount by 10%
+\divide\wantedcount by \actualcount%
+\font\BIG=#1 scaled \wantedcount%
+\setbox0=\hbox{\BIG #2\/}%
+\bigscale=\wantedcount}}
+\DeclareOption{other}{%
+\def\nextmagstep#1#2#3{%
+\bigscale=#3%
+\font\BIG=#1 scaled \bigscale%
+\setbox0=\hbox{\BIG #2\/}}%
+\def\findsize#1#2{%
+\nextmagstep{#1}{#2}{\magstep0}%
+\ifdim\ht0<\wantedheight%
+\nextmagstep{#1}{#2}{\magstephalf}%
+\ifdim\ht0<\wantedheight%
+\nextmagstep{#1}{#2}{\magstep1}%
+\ifdim\ht0<\wantedheight%
+\nextmagstep{#1}{#2}{\magstep2}%
+\ifdim\ht0<\wantedheight%
+\nextmagstep{#1}{#2}{\magstep3}%
+\ifdim\ht0<\wantedheight%
+\nextmagstep{#1}{#2}{\magstep4}%
+\ifdim\ht0<\wantedheight%
+\nextmagstep{#1}{#2}{\magstep5}%
+\fi\fi\fi\fi\fi\fi}}
+\DeclareOption{xdvi}{\ExecuteOptions{dvips}}
+\DeclareOption{dvipsone}{\ExecuteOptions{other}}
+\DeclareOption{dviwindo}{\ExecuteOptions{other}}
+\DeclareOption{emtex}{\ExecuteOptions{other}}
+\DeclareOption{dviwin}{\ExecuteOptions{other}}
+\DeclareOption{oztex}{\ExecuteOptions{dvips}}
+\DeclareOption{textures}{\ExecuteOptions{other}}
+\DeclareOption{pctexps}{\ExecuteOptions{other}}
+\DeclareOption{pctexwin}{\ExecuteOptions{other}}
+\DeclareOption{pctexhp}{\ExecuteOptions{other}}
+\DeclareOption{dvi2ps}{\ExecuteOptions{other}}
+\DeclareOption{dvialw}{\ExecuteOptions{other}}
+\DeclareOption{dvilaser}{\ExecuteOptions{other}}
+\DeclareOption{dvitops}{\ExecuteOptions{other}}
+\DeclareOption{psprint}{\ExecuteOptions{other}}
+\DeclareOption{pubps}{\ExecuteOptions{other}}
+\DeclareOption{ln}{\ExecuteOptions{other}}
+\DeclareOption*{\ExecuteOptions{other}}
+\InputIfFileExists{graphics.cfg}{}{%
+\PackageWarningNoLine{dropping}{%
+You have no `graphics.cfg' file installed.\MessageBreak
+I will assume you are using `dvips'}
+\ExecuteOptions{dvips}}
+\ProcessOptions
+\def\bigdrop#1#2#3#4{%
+\saveunitlength=\unitlength%
+\unitlength=\baselineskip%
+\setbox1=\hbox{\the\font I}%
+\wantedheight=#2\baselineskip \advance\wantedheight by -\baselineskip%
+\advance\wantedheight by \ht1%
+\findsize{#3}{#4}%
+\hangindent=\wd0 \advance\hangindent by #1%
+\hangafter=-#2%
+\ifdim\dp0>0.25\baselineskip%
+ \loop\ifdim\dp0>\baselineskip
+  \advance\baselineskip by \baselineskip
+  \advance\hangafter by -1
+ \repeat
+ \advance\hangafter by -1
+ \baselineskip=\unitlength
+\fi%
+\noindent%
+\down=-#2 \advance\down by 1%
+\begin{picture}(0,0)%
+\put(0,\down){\makebox(0,0)[br]{\box0}}%
+\end{picture}%
+\unitlength=\saveunitlength}
+\def\spltatspc#1 #2\spltatspc{#1}
+\def\spltstrng#1{\expandafter\@split#1\end}
+\def\@split#1 #2\end{\def\strngn{#1}\def\strngtw{#2}}
+\def\isit#1{\expandafter\@isit\string#1\@null}
+\def\@isit#1#2\@null{%
+  \ifnum`#1=`\\
+    \global\strtcmmndtrue
+  \else
+    \global\strtcmmndfalse
+  \fi
+}
+\newcommand{\dropping}[3][0pt]{%
+\get@external@font%
+\edef\n@vf@nt{\expandafter\spltatspc\external@font \spltatspc}%
+\setbox8=\hbox{#3\get@external@font%
+\global\let\external@font@export\external@font%
+\edef\n@vf@ntb@x{\expandafter\spltatspc\external@font \spltatspc}%
+\global\let\n@vf@nt\n@vf@ntb@x}%
+\let\external@font\external@font@export%
+\edef\xprt@rgtr{\expandafter\spltatspc\external@font\expandafter{}
+\spltatspc}
+\def\spltslsk{#3}%
+\isit{#3}%
+\ifstrtcmmnd
+\spltstrng\spltslsk%
+\let\xprt@rgfr\strngtw
+\else
+\def\xprt@rgfr{#3}
+\fi
+\protect\bigdrop{#1}{#2}{\xprt@rgtr}{\xprt@rgfr}%
+}
+\endinput
+%%
+%% End of file `dropping.sty'.
diff --git a/spimbasephdthesis.sty b/spimbasephdthesis.sty
new file mode 100644 (file)
index 0000000..091165b
--- /dev/null
@@ -0,0 +1,430 @@
+% Document class for the PhD thesis
+%
+% Copyright (c) 2012-14 Stephane GALLAND <galland@arakhne.org>
+% 
+% This program is free library; you can redistribute it and/or modify
+% it under the terms of the GNU Lesser General Public License as
+% published by the Free Software Foundation; either version 3 of the
+% License, or any later version.
+%
+% This library 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
+% Lesser General Public License for more details.
+%
+% You should have received a copy of the GNU Lesser General Public
+% License along with this library; see the file COPYING.  If not,
+% write to the Free Software Foundation, Inc., 59 Temple Place - Suite
+% 330, Boston, MA 02111-1307, USA.
+
+%%--------------------
+%% Declare the LaTeX class
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{spimbasephdthesis}[2014/11/06]
+
+\RequirePackage{lettrine}
+
+%%--------------------
+%% Check for the correct version of tex-upmethodology
+\@ifclasslater{UPMVERSION}{2014/07/09}{}{\@latex@error{You must install a version of tex-upmethodology greater or equal to 20140710}\@eha}
+
+%%--------------------
+%% Underlining if the author's name (in bibliography)
+\newcommand{\underlineifauthor}[2]{%
+       \ifdocumentauthor{#1}{\underline{#2}}{#2}%
+}
+
+%%--------------------
+%% Utility functions
+\gdef\edspim@phdthesis@class@firstword#1 #2\@nil{#1}
+\gdef\edspim@phdthesis@class@nextwords#1 #2\@nil{#2}
+\gdef\edspim@phdthesis@class@firstcolumn#1,#2\@nil{#1}
+\gdef\edspim@phdthesis@class@nextcolumns#1,#2\@nil{#2}
+\gdef\edspim@phdthesis@class@makejury{}
+\gdef\edspim@phdthesis@class@addjury#1#2{%
+       \addjury%
+               {\expandafter\edspim@phdthesis@class@firstword\edspim@phdthesis@class@firstcolumn#2\@nil\@nil}%
+               {\expandafter\edspim@phdthesis@class@nextwords\edspim@phdthesis@class@firstcolumn#2\@nil\@nil}%
+               {#1}%
+               {\edspim@phdthesis@class@nextcolumns#2\@nil}%
+}
+
+%%--------------------
+% Define the PhD thesis document
+%\declarethesis[subtitle]{title}{defense date}{ID}
+\newcommand{\declarethesis}[4][] {
+       \declaredocument{#2}{#1}{#4}%
+       \Set{defensedate}{#3}%
+       \initialversion{\makedate{11}{04}{2006}}{PhD Thesis}{\upmpublic}%
+}
+
+%%--------------------
+% Add menber of the jury
+%\addjury[email]{firstname}{lastname}{type}{position}
+\newcommand{\upm@phdthesis@protectnl}[1]{%
+       \begingroup%
+               \let\\\newline%
+               \nohyphens{\Get{jurystyle}#1}%
+       \endgroup%
+}
+\gdef\upm@phdthesis@jurylist{}
+\global\let\thejurytab\relax
+\newcommand{\addjury}[5][]{%
+       \global\protected@edef\upm@phdthesis@jurylist{\upm@phdthesis@jurylist\protect\protect\Get{jurystyle}\protect\protect\upmmakename{#2}{#3}{~} & \protect\upm@phdthesis@protectnl{#4} & \protect\upm@phdthesis@protectnl{#5} \protect\\}%
+       \global\protected@edef\thejurytab{\protect\noindent\protect\begin{tabularx}{\Get{jurytabwidth}}{@{}llX@{}}\upm@phdthesis@jurylist\protect\end{tabularx}}%
+}
+
+%%--------------------
+% Add affiliation
+%\addlaboratory{lab description}
+\newif\ifphdthesishaslaboratory
+\global\phdthesishaslaboratoryfalse
+\newif\ifphdthesishaslaboratorymulti
+\global\phdthesishaslaboratorymultifalse
+\gdef\thethesislaboratories{}
+\newcommand{\addlaboratory}[1]{%
+       \ifphdthesishaslaboratory%
+               \phdthesishaslaboratorymultitrue%
+               \global\protected@edef\thethesislaboratories{\thethesislaboratories,\protect\\\protect{#1}}%
+       \else%
+               \phdthesishaslaboratorytrue%
+               \global\protected@edef\thethesislaboratories{\thethesislaboratories\protect{#1}}%
+       \fi%
+}
+%%--------------------
+% Reset affiliation
+%\resetlaboratories
+\newcommand{\resetlaboratories}{%
+       \global\phdthesishaslaboratoryfalse%
+       \global\phdthesishaslaboratorymultifalse%
+       \gdef\thethesislaboratories{}%
+}
+
+%%--------------------
+%% Add partner logo
+%\addpartner[picture_options]{logo_picture}
+\newif\ifpartnerlist
+\global\partnerlistfalse
+\gdef\thepartnerlist{}
+\newcommand{\addpartner}[2][height=1cm]{%
+       \ifpartnerlist%
+               \protected@xdef\thepartnerlist{\thepartnerlist\protect\hfill\protect\includegraphics[#1]{#2}}%
+       \else%
+               \global\partnerlisttrue%
+               \protected@xdef\thepartnerlist{\thepartnerlist\protect\includegraphics[height=1cm]{#2}}%
+       \fi%
+}
+
+%%--------------------
+%% Reset the list of the partner logos
+%\resetpartners
+\newif\ifpartnerlist
+\newcommand{\resetpartners}{%
+       \global\partnerlistfalse%
+       \gdef\thepartnerlist{}%
+}
+
+%%--------------------
+% Change the color of the TOC
+\let\upm@phdthesis@l@contentsline\contentsline
+\renewcommand{\contentsline}[4]{%
+       %{subsection}{\numberline {1.1.2}Extension de la plateforme \textsc {JaSIM}\xspace et Application}{18}{subsection.1.1.2}
+       \ifthenelse
+               {\equal{#1}{part}}
+               {\upm@phdthesis@l@contentsline{#1}{\textcolor{parttitlecolor}{#2}}{\textcolor{parttitlecolor}{#3}}{#4}}%
+               {\ifthenelse
+                       {\equal{#1}{chapter}}
+                       {\upm@phdthesis@l@contentsline{#1}{\textcolor{chaptertitlecolor}{#2}}{\textcolor{chaptertitlecolor}{#3}}{#4}}%
+                       {\upm@phdthesis@l@contentsline{#1}{#2}{#3}{#4}}}%
+}
+
+%%--------------------
+% Set the abstract of the thesis
+% \thesisabstract [lang]{text}
+\newif\ifphdthesismainabstract
+\phdthesismainabstractfalse
+\newif\ifphdthesisminorabstract
+\phdthesisminorabstractfalse
+\gdef\phdthesismainabstract{}
+\gdef\phdthesisminorabstract{}
+\gdef\phdthesismainabstracttitle{R\'esum\'e~:}
+\gdef\phdthesisminorabstracttitle{Abstract:}
+\newcommand{\thesisabstract}[2][\upmcurrentlang]{%
+       \ifthenelse{\equal{\upmcurrentlang}{#1}}{%
+               \global\phdthesismainabstracttrue%
+               \gdef\phdthesismainabstract{#2}%
+               \setdocabstract{#2}%
+               \ifthenelse{\equal{english}{#1}}{%
+                       \gdef\phdthesismainabstracttitle{Abstract:}
+               }{%
+                       \gdef\phdthesismainabstracttitle{R\'esum\'e~:}
+               }%
+       }{%
+               \global\phdthesisminorabstracttrue%
+               \gdef\phdthesisminorabstract{#2}%
+               \ifthenelse{\equal{english}{#1}}{%
+                       \gdef\phdthesisminorabstracttitle{Abstract:}
+               }{%
+                       \gdef\phdthesisminorabstracttitle{R\'esum\'e~:}
+               }%
+       }%
+}
+
+%%--------------------
+% Set the keywords of the thesis
+% \thesiskeywords [lang]{keywords}
+\newif\ifphdthesismainkeywords
+\phdthesismainkeywordsfalse
+\newif\ifphdthesisminorkeywords
+\phdthesisminorkeywordsfalse
+\gdef\phdthesismainkeywords{}
+\gdef\phdthesisminorkeywords{}
+\gdef\phdthesismainkeywordstitle{}
+\gdef\phdthesisminorkeywordstitle{}
+\newcommand{\thesiskeywords}[2][\upmcurrentlang]{%
+       \ifthenelse{\equal{\upmcurrentlang}{#1}}{%
+               \global\phdthesismainkeywordstrue%
+               \gdef\phdthesismainkeywords{#2}%
+               \ifthenelse{\equal{english}{#1}}{%
+                       \gdef\phdthesismainkeywordstitle{Keywords:}
+               }{%
+                       \gdef\phdthesismainkeywordstitle{Mots-cl\'es~:}
+               }%
+       }{%
+               \global\phdthesisminorkeywordstrue%
+               \gdef\phdthesisminorkeywords{#2}%
+               \ifthenelse{\equal{english}{#1}}{%
+                       \gdef\phdthesisminorkeywordstitle{Keywords:}
+               }{%
+                       \gdef\phdthesisminorkeywordstitle{Mots-cl\'es~:}
+               }%
+       }%
+}
+
+%%--------------------
+% Utility function that is looping on the character of a text
+% \foreachchar {for first char}{for the rest of the chars}
+\gdef\@endfe{}
+\def\upm@foreachchar#1#2\@endfe{%
+       \def\thechar{#1}%
+       \upm@foreach@do%
+       \renewcommand{\onfirstchar}[1]{}%
+       \renewcommand{\onnextchar}[1]{##1}%
+       \ifthenelse{\equal{{#2}}{{\@endfe}}}{}{
+               \expandafter\upm@foreachchar#2\@endfe%
+       }%
+}
+
+\newcommand{\foreachchar}[2]{%
+       \begingroup%
+       \newcommand{\upm@foreach@do}{#2}%
+       \newcommand{\onfirstchar}[1]{##1}%
+       \newcommand{\onnextchar}[1]{}%
+       {\expandafter\upm@foreachchar#1\@endfe\@endfe}%
+       \endgroup%
+}
+
+%%--------------------
+% Build card with the PhD thesis reference ID inside.
+% This ID is given by the SPIM doctoral school.
+\newcommand{\thespimthesisdocrefcard}{%
+       \gdef\upm@spimthesis@reserveda{|}%
+       \gdef\upm@spimthesis@reservedb{}%
+       \foreachchar{\theupmdocref}{%
+               \protected@xdef\upm@spimthesis@reserveda{|c\upm@spimthesis@reserveda}%
+               \protected@xdef\upm@spimthesis@reservedb{\upm@spimthesis@reservedb \onnextchar{\protect&} \thechar}%
+       }%
+       \protected@xdef\upm@spimthesis@reserveda{%
+               \protect\tabular[c]{\upm@spimthesis@reserveda}}%
+       N\ensuremath{^{\circ}}~\upm@spimthesis@reserveda%
+       \upm@spimthesis@reservedb \\ \hline\endtabular%
+}
+
+%%--------------------
+%% Define emphazing macros
+\renewcommand{\Emph}[1]{\textcolor{emphemphtextcolor}{\textbf{#1}}}
+\renewcommand{\emph}[1]{\textcolor{emphtextcolor}{#1}}
+
+%%--------------------
+%% Macros for formating the bibliography
+\newcommand{\phdthesisbibemph}[1]{\textit{#1}}
+\newcommand{\phdthesisbibEmph}[1]{\textcolor{bibemphemphtextcolor}{\textbf{#1}}}
+\newcommand{\phdthesisbibkeyemph}[1]{\textbf{#1}}
+
+\ifthenelse{\equal{french}{\upmcurrentlang}}{
+       \gdef\phdthesisbiband{et\xspace}
+       \gdef\phdthesisbibetal{et~al.}
+       \gdef\phdthesisbibeditors{\'editeurs\xspace}
+       \gdef\phdthesisbibeditor{\'editeur\xspace}
+       \gdef\phdthesisbibvolume{volume\xspace}
+       \gdef\phdthesisbibVolume{Volume\xspace}
+       \gdef\phdthesisbibof{de\xspace}
+       \gdef\phdthesisbibvolumenumber{volume et num\'ero\xspace}
+       \gdef\phdthesisbibnumber{num\'ero\xspace}
+       \gdef\phdthesisbibNumber{Num\'ero\xspace}
+       \gdef\phdthesisbibin{dans\xspace}
+       \gdef\phdthesisbibIn{Dans\xspace}
+       \gdef\phdthesisbibedition{\'edition\xspace}
+       \gdef\phdthesisbibpages{pages\xspace}
+       \gdef\phdthesisbibpage{page\xspace}
+       \gdef\phdthesisbibchapter{chapitre\xspace}
+       \gdef\phdthesisbibtechnicalreport{Rapport technique\xspace}
+       \gdef\phdthesisbibJanuary{Janvier\xspace}
+       \gdef\phdthesisbibFebruary{F\'evrier\xspace}
+       \gdef\phdthesisbibMarch{Mars\xspace}
+       \gdef\phdthesisbibApril{Avril\xspace}
+       \gdef\phdthesisbibMay{Mai\xspace}
+       \gdef\phdthesisbibJune{Juin\xspace}
+       \gdef\phdthesisbibJuly{Juillet\xspace}
+       \gdef\phdthesisbibAugust{Ao\^ut\xspace}
+       \gdef\phdthesisbibSeptember{Septembre\xspace}
+       \gdef\phdthesisbibOctober{Octobre\xspace}
+       \gdef\phdthesisbibNovember{Novembre\xspace}
+       \gdef\phdthesisbibDecember{D\'ecembre\xspace}
+}{%
+       \gdef\phdthesisbiband{et\xspace}
+       \gdef\phdthesisbibetal{et~al.}
+       \gdef\phdthesisbibeditors{editors\xspace}
+       \gdef\phdthesisbibeditor{editor\xspace}
+       \gdef\phdthesisbibvolume{volume\xspace}
+       \gdef\phdthesisbibVolume{Volume\xspace}
+       \gdef\phdthesisbibof{of\xspace}
+       \gdef\phdthesisbibvolumenumber{volume and number\xspace}
+       \gdef\phdthesisbibnumber{number\xspace}
+       \gdef\phdthesisbibNumber{Number\xspace}
+       \gdef\phdthesisbibin{in\xspace}
+       \gdef\phdthesisbibIn{In\xspace}
+       \gdef\phdthesisbibedition{edition\xspace}
+       \gdef\phdthesisbibpages{pages\xspace}
+       \gdef\phdthesisbibpage{page\xspace}
+       \gdef\phdthesisbibchapter{chapter\xspace}
+       \gdef\phdthesisbibtechnicalreport{Technical Report\xspace}
+       \gdef\phdthesisbibJanuary{January\xspace}
+       \gdef\phdthesisbibFebruary{February\xspace}
+       \gdef\phdthesisbibMarch{March\xspace}
+       \gdef\phdthesisbibApril{April\xspace}
+       \gdef\phdthesisbibMay{May\xspace}
+       \gdef\phdthesisbibJune{June\xspace}
+       \gdef\phdthesisbibJuly{July\xspace}
+       \gdef\phdthesisbibAugust{August\xspace}
+       \gdef\phdthesisbibSeptember{September\xspace}
+       \gdef\phdthesisbibOctober{October\xspace}
+       \gdef\phdthesisbibNovember{November\xspace}
+       \gdef\phdthesisbibDecember{December\xspace}
+}
+
+%%--------------------
+%% Force the name of the bibliography and other sections for French
+\AtBeginDocument{
+       \ifthenelse{\equal{\edspimphdthesisclasslanguage}{french}}{%
+               \renewcommand{\refname}{Bibliographie}%
+               \renewcommand{\listtablename}{Liste des tables}%
+               \renewcommand{\contentsname}{Sommaire}%
+       }{}
+}
+
+%%--------------------
+%% Format the keys in the bibliography section
+\global\let\upm@phdthesis@old@biblabel\@biblabel
+\gdef\@biblabel#1{\phdthesisbibkeyemph{\upm@phdthesis@old@biblabel{#1}}}
+
+
+%%--------------------
+% Lettrine
+
+% The following macro put its parameter into a lettrine with the
+% proper layout
+\gdef\upm@phdthesis@MakeLettrine@lettrine#1{%
+       \lettrine[findent=.5mm,nindent=0pt]{\uppercase{#1}}{}%
+}
+
+% Macro that contains the string "the letter"
+\gdef\upm@phdthesis@MakeLettrine@letterstr{\string t\string h\string e\space\string l\string e\string t\string t\string e\string r}
+
+% Macro that contains the string "the character"
+\gdef\upm@phdthesis@MakeLettrine@characterstr{\string t\string h\string e\space\string c\string h\string a\string r\string a\string c\string t\string e\string r}
+
+% Macro to search for the first letter in its second parameter
+% and put it in a lettrine.
+% First parameter: are the macros to ignore and put back before
+%                  the lettrine. The value of this parameter will
+%                  evolve during the recursive calls.
+% Second parameter: TeX give the token following the macro in
+%                   this parameter (because the macros is always
+%                   invoked with only one explicit parameter).
+\newcommand{\upm@phdthesis@MakeLettrine}[2]{%
+       % Detect the meaning of the second parameter.
+       \edef\upm@phdthesis@reserveda{\meaning#2}%
+       % Test if the meaning string contains "the letter"
+       \edef\upm@phdthesis@reservedb{\noexpand\in@{\upm@phdthesis@MakeLettrine@letterstr}{\upm@phdthesis@reserveda}}%
+       \upm@phdthesis@reservedb%
+       \ifin@%
+               % The meaning indicates that the second parameter
+               % is a letter. It may be put in the lettrine.
+               % The macro \upm@phdthesis@reserveda is defined to avoid
+               % to consume the tokens written in this recursive
+               % macro. This temp macro is invoked at the end of
+               % this recursive macro. In this way it will consume
+               % the token that are available in the document core.
+               \gdef\upm@phdthesis@reserveda{#1\upm@phdthesis@MakeLettrine@lettrine{#2}}%
+       \else%
+               % Test if the meaning string contains "the character"
+               \edef\upm@phdthesis@reservedb{\noexpand\in@{\upm@phdthesis@MakeLettrine@characterstr}{\upm@phdthesis@reserveda}}%
+               \upm@phdthesis@reservedb%
+               \ifin@%
+                       % The meaning indicates that the second parameter
+                       % is a character. It may be put in the lettrine.
+                       % The macro \upm@phdthesis@reserveda is defined to avoid
+                       % to consume the tokens written in this recursive
+                       % macro. This temp macro is invoked at the end of
+                       % this recursive macro. In this way it will consume
+                       % the token that are available in the document core.
+                       \gdef\upm@phdthesis@reserveda{#1\upm@phdthesis@MakeLettrine@lettrine{#2}}%
+               \else%
+                       % The meaning indicates that the second parameter
+                       % is not a letter nor a character.
+                       % It may be put back before the lettrine without
+                       % change.
+                       % The macro \upm@phdthesis@reserveda is defined to avoid
+                       % to consume the tokens written in this recursive
+                       % macro. This temp macro is invoked at the end of
+                       % this recursive macro. In this way it will consume
+                       % the token that are available in the document core.
+                       \gdef\upm@phdthesis@reserveda{\upm@phdthesis@MakeLettrine{#1#2}}%
+               \fi%
+       \fi%
+       \upm@phdthesis@reserveda%
+}
+
+%%--------------------
+%% Macro for starting a chapter with a standard format
+\global\long\def\upm@phdthesis@chapterintro@toc#1\section{%
+       \@ifundefined{minitoc}{}{%
+               \begin{figure}[bt]%
+               \minitoc%
+               \end{figure}%
+       }%
+       \ignorespaces\upm@phdthesis@MakeLettrine{}#1%
+       \expandafter\section}
+\global\long\def\upm@phdthesis@chapterintro@notoc#1\section{%
+       \ignorespaces\upm@phdthesis@MakeLettrine{}#1%
+       \expandafter\section}
+\gdef\chapterintro{\@ifstar\upm@phdthesis@chapterintro@notoc\upm@phdthesis@chapterintro@toc}
+
+%%--------------------
+%% Add a small message on the backcover.
+\Set{backcovermessage}{%
+       \begin{center}\tiny
+               \ifthenelse{\equal{french}{\upmcurrentlang}}{
+                       Document r\'ealis\'e avec \LaTeX\ et : \\
+                       le style \LaTeX\ pour Th\`ese de Doctorat cr\'e\'e par S. Galland --- \url{http://www.multiagent.fr/ThesisStyle} \\
+                       la collection de paquets \texttt{tex-upmethodology} --- \url{http://www.arakhne.org/tex-upmethodology/}\\[.25cm]
+               }{
+                       Document generated with \LaTeX\ and: \\
+                       the \LaTeX\ style for PhD Thesis created by S. Galland --- \url{http://www.multiagent.fr/ThesisStyle} \\
+                       the \texttt{tex-upmethodology} package suite --- \url{http://www.arakhne.org/tex-upmethodology/}\\[.25cm]
+               }
+       \end{center}
+}
+
+\endinput
diff --git a/upmethodology-backpage.sty b/upmethodology-backpage.sty
new file mode 100644 (file)
index 0000000..32df29b
--- /dev/null
@@ -0,0 +1,81 @@
+% Back page for Unified Process Methodology
+%
+% Copyright (c) 2009-2013 Stephane GALLAND <galland@arakhne.org>
+% 
+% This program is free library; you can redistribute it and/or modify
+% it under the terms of the GNU Lesser General Public License as
+% published by the Free Software Foundation; either version 3 of the
+% License, or any later version.
+%
+% This library 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
+% Lesser General Public License for more details.
+%
+% You should have received a copy of the GNU Lesser General Public
+% License along with this library; see the file COPYING.  If not,
+% write to the Free Software Foundation, Inc., 59 Temple Place - Suite
+% 330, Boston, MA 02111-1307, USA.
+
+\global\edef\upm@package@bp@ver{2013/12/14}
+
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{upmethodology-backpage}[\upm@package@bp@ver]
+
+\RequirePackage{upmethodology-p-common}
+
+%-----
+% Locales
+\def\upm@back@lang@english{
+  \gdef\upm@lang@@{\message{**** upmethodology-backpage is using English language ****}}%
+}
+\def\upm@back@lang@french{
+  \gdef\upm@lang@@{\message{**** upmethodology-backpage is using French language ****}}%
+}
+%----------------------------------------
+% OPTIONS
+%----------------------------------------
+\DeclareOption{french}{%
+  \upm@back@lang@french
+}
+\DeclareOption{francais}{%
+  \upm@back@lang@french
+}
+\DeclareOption{english}{%
+  \upm@back@lang@english
+}
+\ExecuteOptions{english}
+\ProcessOptions
+\upm@lang@@
+
+\RequirePackage{upmethodology-extension}
+
+%----
+% Set the back page layout as the classic layout theme
+%\setbackcover{layout_name}
+\newcommand{\setbackcover}[1]{%
+       \ifthenelse{\equal{#1}{none}}{%
+               \global\let\makebackcover\relax%
+       }{%
+               \errmessage{invalid back layout theme: #1}%
+       }%
+}
+\newcommand{\setbacklayout}[1]{\errmessage{\string\setbacklayout\ is deprecated. Use \string\setbackcover}}
+
+\setbackcover{none}
+
+\AtEndDocument{
+       \Ifdefined{backpage}{
+               \gdef\makebackcover{
+                       \ifupmarticleformat\clearpage%
+                       \else
+                               \cleardoublepage%
+                               \if@twoside\thispagestyle{empty}\mbox{}%
+                               \vfill{\Get{backcovermessage}}\clearpage\fi
+                       \fi
+                       \thispagestyle{empty}\Get{backpage}
+               }
+       }
+}
+
+\endinput
diff --git a/upmethodology-code.sty b/upmethodology-code.sty
new file mode 100644 (file)
index 0000000..470a1d3
--- /dev/null
@@ -0,0 +1,143 @@
+% Source Code Description for Unified Process Methodology
+%
+% Copyright (c) 2006-2007 Stephane GALLAND <galland@arakhne.org>
+% 
+% This program is free library; you can redistribute it and/or modify
+% it under the terms of the GNU Lesser General Public License as
+% published by the Free Software Foundation; either version 3 of the
+% License, or any later version.
+%
+% This library 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
+% Lesser General Public License for more details.
+%
+% You should have received a copy of the GNU Lesser General Public
+% License along with this library; see the file COPYING.  If not,
+% write to the Free Software Foundation, Inc., 59 Temple Place - Suite
+% 330, Boston, MA 02111-1307, USA.
+%
+% Creation date: 2006-04-27
+% Modifications:
+%   2009-10-30   Clean code.
+%
+
+\global\edef\upm@package@code@ver{2009/10/30}
+
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{upmethodology-code}[\upm@package@code@ver]
+
+\RequirePackage{upmethodology-p-common}
+
+\def\upm@code@eat@spaces#1{#1}
+\def\upm@code@makemul#1{\upm@code@eat@spaces{#1}\bgroup\textbf{s}\egroup\xspace}
+
+%-----
+%Language
+%0: UML
+%1: java
+%2: C++
+\newcount\upm@code@current@lang
+
+\DeclareOption{uml}{\upm@code@current@lang=0}
+\DeclareOption{java}{\upm@code@current@lang=1}
+\DeclareOption{cpp}{\upm@code@current@lang=2}
+
+\ExecuteOptions{uml}
+\ProcessOptions
+
+%-----
+%Language changes
+\newcommand{\upmcodelang}[1]{%
+       \ifthenelse{\equal{#1}{java}}{%
+               \upm@code@current@lang=1%
+       }{%
+       \ifthenelse{\equal{#1}{cpp}}{%
+               \upm@code@current@lang=2%
+       }{%
+               \upm@code@current@lang=0%
+       }%
+       }%
+       \upm@code@declarations%
+}
+
+\def\upm@code@declarations {
+%-----
+%PROTOTYPES
+\gdef\jclass##1{\mbox{\textsc{##1}}\xspace}
+\gdef\jinterface##1{\mbox{\textit{##1}}\xspace}
+\gdef\jpackage##1{\mbox{\textsc{##1}}\xspace}
+\gdef\jfunc##1{\texttt{##1}\xspace}
+
+%-----
+%TYPES
+\if\the\upm@code@current@lang 1
+       %Java
+       \gdef\jclazz{\textbf{Class}\xspace}
+       \gdef\jvoid{\textbf{void}\xspace}
+       \gdef\jint{\textbf{int}\xspace}
+       \gdef\jlong{\textbf{long}\xspace}
+       \gdef\jfloat{\textbf{float}\xspace}
+       \gdef\jboolean{\textbf{boolean}\xspace}
+       \gdef\jdouble{\textbf{double}\xspace}
+       \gdef\jchar{\textbf{char}\xspace}
+       \gdef\jstring{\jclass{String}\xspace}
+       \gdef\jarray##1{{{##1}\bgroup\textbf{\string[\string]}\egroup}\xspace}
+       \gdef\jcollection##1{{\jclass{Collection}\textless{##1}\bgroup\textgreater\egroup}\xspace}
+       \gdef\jset##1{{\jclass{Set}\textless{##1}\bgroup\textgreater\egroup}\xspace}
+\else\if\the\upm@code@current@lang 2
+       %C++
+       \gdef\jclazz{\textbf{class}\xspace}
+       \gdef\jvoid{\textbf{void}\xspace}
+       \gdef\jint{\textbf{int}\xspace}
+       \gdef\jlong{\textbf{long}\xspace}
+       \gdef\jfloat{\textbf{float}\xspace}
+       \gdef\jboolean{\textbf{bool}\xspace}
+       \gdef\jdouble{\textbf{double}\xspace}
+       \gdef\jchar{\textbf{char}\xspace}
+       \gdef\jstring{\jclass{std\string:\string:string}\xspace}
+       \gdef\jarray##1{{{##1}\bgroup\textbf{\string[\string]}\egroup}\xspace}
+       \gdef\jcollection##1{{\jclass{std\string:\string:vector}\textless{##1}\bgroup\textgreater\egroup}\xspace}
+       \gdef\jset##1{{\jclass{std\string:\string:set}\textless{##1}\bgroup\textgreater\egroup}\xspace}
+\else
+       %UML
+       \gdef\jclazz{\textbf{class}\xspace}
+       \gdef\jvoid{\textbf{void}\xspace}
+       \gdef\jint{\textbf{integer}\xspace}
+       \gdef\jlong{\textbf{long integer}\xspace}
+       \gdef\jfloat{\textbf{float}\xspace}
+       \gdef\jboolean{\textbf{boolean}\xspace}
+       \gdef\jdouble{\textbf{double}\xspace}
+       \gdef\jchar{\textbf{character}\xspace}
+       \gdef\jstring{\textbf{string}\xspace}
+       \gdef\jcollection##1{{\textbf{collection of} \upm@code@makemul{##1}\bgroup\egroup}\xspace}
+       \gdef\jarray##1{{\textbf{array of} \upm@code@makemul{##1}\bgroup\egroup}\xspace}
+       \gdef\jset##1{{\textbf{set of} \upm@code@makemul{##1}\bgroup\egroup}\xspace}
+\fi\fi
+
+%-----
+%CONSTANTS
+\if\the\upm@code@current@lang 1
+       %Java
+       \gdef\jtrue{\textsc{true}\xspace}
+       \gdef\jfalse{\textsc{false}\xspace}
+\else\if\upm@code@current@lang 2
+       %C++
+       \gdef\jtrue{\textsc{true}\xspace}
+       \gdef\jfalse{\textsc{false}\xspace}
+\else
+       \gdef\jtrue{\textsc{true}\xspace}
+       \gdef\jfalse{\textsc{false}\xspace}
+\fi\fi
+
+%-----
+%OPERATIONS
+\gdef\jop##1{\bgroup\jcode{##1}\egroup}
+\gdef\jcall##1##2{\mbox{\jfunc{##1}\bgroup\texttt{\string({##2}\string)}\egroup}\xspace}
+\gdef\jcode##1{\texttt{##1}\xspace}
+
+}
+
+\upm@code@declarations
+
+\endinput
diff --git a/upmethodology-document.sty b/upmethodology-document.sty
new file mode 100644 (file)
index 0000000..9c47c8b
--- /dev/null
@@ -0,0 +1,560 @@
+% Package for Unified Process Methodology's documents
+%
+% Copyright (c) 2006-2013 Stephane GALLAND <galland@arakhne.org>
+% 
+% This program is free library; you can redistribute it and/or modify
+% it under the terms of the GNU Lesser General Public License as
+% published by the Free Software Foundation; either version 3 of the
+% License, or any later version.
+%
+% This library 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
+% Lesser General Public License for more details.
+%
+% You should have received a copy of the GNU Lesser General Public
+% License along with this library; see the file COPYING.  If not,
+% write to the Free Software Foundation, Inc., 59 Temple Place - Suite
+% 330, Boston, MA 02111-1307, USA.
+
+\global\edef\upm@package@doc@ver{2013/09/29}
+
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{upmethodology-document}[\upm@package@doc@ver]
+
+\RequirePackage{upmethodology-p-common}
+
+%----------------------------------------
+% LOCALES
+%----------------------------------------
+\def\upm@document@lang@english{%
+  \gdef\upm@lang@@{\message{**** upmethodology-document is using English language ****}}%
+  \gdef\upmcurrentlang{english}%
+  \gdef\upmcurrentlangforbabel{english}%
+  \gdef\upm@lang@project{Project}%
+  \gdef\upm@lang@document{Document}%
+  \gdef\upm@lang@docref{Reference}%
+  \gdef\upm@lang@lastupdate{Last Update}%
+  \gdef\upm@lang@lastupdate@short{Updated}%
+  \gdef\upm@lang@document@summary{Document Summary}%
+  \gdef\upm@lang@status{Status}%
+  \gdef\upm@lang@document@authors{Authors}%
+  \gdef\upm@lang@document@informed{Informed People}%
+  \gdef\upm@lang@document@validators{Validators}%
+  \gdef\upm@lang@document@names{Names}%
+  \gdef\upm@lang@document@comments{Comments}%
+  \gdef\upm@lang@document@emails{Emails}%
+  \gdef\upm@lang@document@initials{Initials}%
+  \gdef\upm@lang@document@abstract{Abstract}%
+  \gdef\upm@lang@document@keywords{Key-words}%
+  \gdef\upm@lang@document@copyright@purpose{This document describes the \theupmproject\ project\Ifnotempty{\theupmsubproject}{ and its \theupmsubproject\ subproject}.}%
+  \gdef\upm@lang@document@copyright@tex{\TeX\ is a trademark of the American Mathematical Society.}%
+  \gdef\upm@lang@document@copyright@upmethodology{\texttt{tex-upmethodology} is owned by St\'ephane Galland, \arakhneorg, France.}%
+  \gdef\upm@lang@document@copyright@madewith{This document was realised with \LaTeX\ and \texttt{tex-upmethodology}.}%
+  \gdef\upm@lang@document@copyright@trademarks{This document is published by the \theupmformattedpublisher. All right reserved. No part of this publication may be reproduced, stored in a retreival system, or transmitted, in any form or by any means, electronic, mechanical, photocopying, recording, or otherwise, without the prior written permission of the publishers.}
+  \gdef\upm@lang@document@copyright@printedin{Printed in \theupmprintedin.}
+}
+\def\upm@document@lang@french{%
+  \gdef\upm@lang@@{\message{**** upmethodology-document is using French language ****}}%
+  \gdef\upmcurrentlang{french}%
+  \gdef\upmcurrentlangforbabel{frenchb}%
+  \gdef\upm@lang@project{Projet}%
+  \gdef\upm@lang@document{Document}%
+  \gdef\upm@lang@docref{R\'ef\'erence}%
+  \gdef\upm@lang@lastupdate{Derni\`ere modification}%
+  \gdef\upm@lang@lastupdate@short{Modifi\'e}%
+  \gdef\upm@lang@document@summary{Synoptique}%
+  \gdef\upm@lang@status{Statut}%
+  \gdef\upm@lang@document@authors{Auteurs}%
+  \gdef\upm@lang@document@comments{Commentaires}%
+  \gdef\upm@lang@document@informed{Pour information}%
+  \gdef\upm@lang@document@validators{Validateurs}%
+  \gdef\upm@lang@document@names{Noms}%
+  \gdef\upm@lang@document@emails{Emails}%
+  \gdef\upm@lang@document@initials{Initiales}%
+  \gdef\upm@lang@document@abstract{R\'esum\'e}%
+  \gdef\upm@lang@document@keywords{Mots-cl\'es}%
+  \gdef\upm@lang@document@copyright@purpose{Ce document d\'ecrit le projet \theupmproject\Ifnotempty{\theupmsubproject}{ et son sous-projet \theupmsubproject}.}%
+  \gdef\upm@lang@document@copyright@tex{\TeX\ et \LaTeX\ sont des marques de la Soci\'et\'e Am\'ericaine de Math\'ematiques.}%
+  \gdef\upm@lang@document@copyright@upmethodology{\texttt{tex-upmethodology} est la propri\'et\'e de St\'ephane Galland, \arakhneorg, France.}%
+  \gdef\upm@lang@document@copyright@madewith{Ce document a \'et\'e r\'ealis\'e avec \LaTeX\ et \texttt{tex-upmethodology}.}%
+  \gdef\upm@lang@document@copyright@trademarks{Ce document est publi\'e par \theupmformattedpublisher. Tous droits r\'eserv\'es. \par Le Code de la propri\'et\'e intellectuelle n'autorisant, aux termes de l'article L.122-5, 2\textdegree et 3\textdegree a), d'une part, que les ``copies ou reproductions strictement r\'eserv\'ees \`a l'usage priv\'e du copiste et non destin\'ees \`a une utilisation collective'' et, d'autre part, que les analyses et les courtes citations dans un but d'exemple et d'illustation, ``toute repr\'esentation ou reproduction int\'egrale ou partielle faite sans le consentement de l'auteur ou de ses ayants droit ou ayants cause est illicite'' (art. L.122-4). \par Cette repr\'esentation ou reproduction, par quelque proc\'ed\'e que ce soit, constiturait donc une contrefa\c{c}on sanctionn\'ee par les articles L.335-2 et suivants du Code de la propri\'et\'e intellectuelle.}
+  \gdef\upm@lang@document@copyright@printedin{Imprim\'e en \theupmprintedin.}
+  
+}
+
+%----------------------------------------
+% OPTIONS
+%----------------------------------------
+\DeclareOption{french}{%
+  \upm@document@lang@french
+}
+\DeclareOption{francais}{%
+  \upm@document@lang@french
+}
+\DeclareOption{english}{%
+  \upm@document@lang@english
+}
+\ExecuteOptions{english}
+\ProcessOptions
+
+{\upm@lang@@}
+
+\RequirePackage[\upmcurrentlangforbabel]{babel}
+\RequirePackage{vmargin}
+
+\RequirePackage{upmethodology-extension}
+\RequirePackage{upmethodology-fmt}
+\RequirePackage{upmethodology-version}
+
+%----------------------------------------
+% Ensure that frenchb (included by babel)
+% does not use compact versions of lists 
+% in french mode.
+%----------------------------------------
+
+\newlength\listendskip
+\listendskip=\parskip
+\iflanguage{french}{%
+       \addto\extrasfrench{%
+               \let\upm@document@enditemizeFB\enditemizeFB%
+               \def\enditemizeFB{\upm@document@enditemizeFB\vspace{\listendskip}}%
+               \let\upm@document@enditemizeORI\enditemizeORI%
+               \def\enditemizeFB{\upm@document@enditemizeORI\vspace{\listendskip}}%
+       }%
+       \addto\noextrasfrench{%
+               \let\upm@document@enditemizeFB\enditemizeFB%
+               \def\enditemizeFB{\upm@document@enditemizeFB\vspace{\listendskip}}%
+               \let\upm@document@enditemizeORI\enditemizeORI%
+               \def\enditemizeFB{\upm@document@enditemizeORI\vspace{\listendskip}}%
+       }%
+}
+
+%----------------------------------------
+% DOCUMENT MANAGEMENT
+%----------------------------------------
+
+%-----
+% Declare a project's document
+%\declaredocument{project}{name}{ref}
+\newcommand{\declaredocument}[3]{%
+       \gdef\theupmproject{#1}%
+       \gdef\theupmsubproject{}%
+       \gdef\theupmdocname{#2}%
+       \gdef\theupmdocref{#3}%
+}
+
+%-----
+% Declare a project's document
+%\declaredocumentex{project}{subproject}{name}{ref}
+\newcommand{\declaredocumentex}[4]{%
+       \gdef\theupmproject{#1}%
+       \gdef\theupmsubproject{#2}%
+       \gdef\theupmdocname{#3}%
+       \gdef\theupmdocref{#4}%
+}
+
+%-----
+% Display the summary of the document
+%\upmdocumentsummary[width]
+\newcommand{\upmdocumentsummary}[1][\linewidth]{%
+       \noindent\begin{mtabular}[#1]{2}{|l|X|}%
+       \tabulartitle{\upm@lang@document@summary}%
+       \upm@lang@project & \theupmproject\Ifnotempty{\theupmsubproject}{ -- \theupmsubproject} \\
+       \upm@lang@document & \theupmdocname \\
+       \upm@lang@docref & \theupmdocref \\
+       \upm@lang@version & \theupmversion \\
+       \upm@lang@lastupdate & \theupmdate \\
+       \hline
+       \end{mtabular}\par\vspace{.5cm}%
+}
+
+%-----
+% Display the the document information on a page
+%\upmpublicationpage
+\newcommand{\upmdocinfopage}{
+       \thispagestyle{plain}
+       \upmdocumentsummary\upmdocumentauthors\upmdocumentvalidators\upmdocumentinformedpeople\vfill\upmhistory\clearpage%
+}
+
+%-----
+% Display the publication pag for the document
+%\upmpublicationpage
+\newcommand{\upmpublicationpage}{
+       \thispagestyle{empty}%
+       \upmpublicationminipage%
+}
+\newcommand{\upmpublicationminipage}{
+       \if@twoside\ifodd\c@page\clearpage\fi\fi%
+       \mbox{}\vfill\small%
+       \par\noindent
+       \upm@lang@document@copyright@purpose
+       \vspace{.5cm}
+       \par\noindent
+       \upm@lang@document@copyright@tex
+       \par\noindent
+       \upm@lang@document@copyright@upmethodology
+       \vspace{.5cm}
+       \par\noindent
+       \Get{trademarks}
+       \vspace{4cm}
+       \par\noindent
+       \upm@lang@document@copyright@madewith
+       \vspace{.15cm}
+       \par\noindent
+       Copyright~\copyright~\upmcopyrightdate~\theupmformattedcopyrighter.
+       \vspace{.15cm}
+       \par\noindent
+       \upm@lang@document@copyright@trademarks \Ifdefined{printed}{\upm@lang@document@copyright@printedin}
+       \vspace{.25cm}
+       \par\noindent
+       \upm@lang@docref~: \theupmdocref \\
+       \Ifnotempty{\theupmisbn}{ISBN~:~\theupmisbn\\}
+       \Ifnotempty{\theupmissn}{ISSN~:~\theupmissn\\}
+       \Ifnotempty{\theupmdoi}{DOI~:~\theupmdoi\\}
+       \clearpage%
+}
+
+%-----
+%Name of the project for which this document was written
+\def\theupmproject{Arakhn\^e Project}
+
+%-----
+%Name of the sub-project for which this document was written
+\def\theupmsubproject{}
+
+%-----
+%Name of the document
+\def\theupmdocname{Arakhn\^e Document}
+
+%-----
+%Reference of the document
+\def\theupmdocref{XXX}
+
+
+%-----
+%Name of the logo
+\newcommand{\theupmsmalldoclogo}{\Get{smalllogo}}
+\newcommand{\theupmdoclogo}{\Get{logo}}
+
+%-----
+% Define the name of the logo picture to use
+\newcommand{\defupmsmalllogo}[1]{\Set{smalllogo}{#1}}
+\newcommand{\defupmlogo}[1]{\Set{logo}{#1}}
+
+%-----
+%Full name of the document
+\def\theupmfulldocname{%
+       \theupmproject%
+       \Ifnotempty{\theupmsubproject}{/\theupmsubproject}%
+       \Ifnotempty{\theupmdocname}{ -- \theupmdocname}%
+}
+
+%-----
+% Declare a document's abstract
+%\setdocabstract[lang]{text}
+\newcommand{\setdocabstract}[2][\upmcurrentlang]{%
+       \ifthenelse{\equal{#1}{\upmcurrentlang}}{
+               \gdef\theupmdocabstract{#2}}{}% 
+       \global\@namedef{theupmdocabstract#1}{#2}%
+}
+
+%-----
+% Declare a document's key-words
+%\setdockeywords[lang]{words}
+\newcommand{\setdockeywords}[2][\upmcurrentlang]{%
+       \ifthenelse{\equal{#1}{\upmcurrentlang}}{
+               \gdef\theupmdockeywords{#2}}{}% 
+       \global\@namedef{theupmdockeywords#1}{#2}%
+}
+
+%-----
+%Abstract of the document
+\def\theupmdocabstract{}
+
+%-----
+%Key-words of the document
+\def\theupmdockeywords{}
+
+%----------------------------------------
+% AUTHOR MANAGEMENT
+%----------------------------------------
+
+\newif\ifupm@document@author@tab@hascomment
+\upm@document@author@tab@hascommentfalse
+\def\upm@document@author@tab{}
+\def\upm@document@author@tab@commented{}
+
+%-----
+\def\theauthorlist{}
+
+%-----
+\newif\ifupm@document@author@isauthor
+\gdef\upm@document@author@authornames{}
+\newcommand{\ifdocumentauthor}[3]{%
+       \upm@document@author@isauthorfalse%
+       \@for\upm@document@author@isauthor@tmp:=\upm@document@author@authornames\do{%
+               \ifupm@document@author@isauthor%
+               \else%
+                       \ifthenelse{\equal{#1}{\upm@document@author@isauthor@tmp}}{%
+                               \upm@document@author@isauthortrue%
+                       }{}%
+               \fi%
+       }%
+       \ifupm@document@author@isauthor{#2}\else{#3}\fi%
+}
+
+%-----
+%Add an author
+%\addauthor[email]{firstname}{name}
+%\addauthor*[email]{firstname}{name}{comment}
+\def\addauthor{\@ifstar\upm@document@addauthorstar\upm@document@addauthor}
+\newcommand{\upm@document@addauthor}[3][]{%
+       \lowercase{\xdef\upm@document@author@authornames{#3,\upm@document@author@authornames}}%
+       \protected@xdef\theauthorlist{\theauthorlist\protect\Ifnotempty{\theauthorlist}{,} \protect\upmmakename{#2}{#3}{~}}
+
+       \global\protected@edef\upm@document@author@tab@commented{\upm@document@author@tab@commented \protect\upmmakename{#2}{#3}{~} & 
+       & \protect\Ifnotempty{#1}{\protect\href{mailto:#1}{#1}} \protect\\}
+
+       \ifupm@document@author@tab@hascomment\else
+               \global\protected@edef\upm@document@author@tab{\upm@document@author@tab \protect\upmmakename{#2}{#3}{~} & 
+               \protect\Ifnotempty{#1}{\protect\href{mailto:#1}{#1}} \protect\\}
+       \fi
+}
+\newcommand{\upm@document@addauthorstar}[4][]{%
+       \lowercase{\xdef\upm@document@author@authornames{#3,\upm@document@author@authornames}}%
+       \global\protected@edef\theauthorlist{\theauthorlist\protect\Ifnotempty{\theauthorlist}{,} \protect\upmmakename{#2}{#3}{~}}
+       
+       \global\let\upm@document@author@tab\relax
+
+       \global\protected@edef\upm@document@author@tab@commented{\upm@document@author@tab@commented \protect\upmmakename{#2}{#3}{~} & 
+       #4 & \protect\Ifnotempty{#1}{\protect\href{mailto:#1}{#1}} \protect\\}
+
+       \upm@document@author@tab@hascommenttrue
+}
+
+%-----
+% Display the summary of the authors
+%\upmdocumentauthors[width]
+\newcommand{\upmdocumentauthors}[1][\linewidth]{%
+       \ifupm@document@author@tab@hascomment%
+               \Ifnotempty{\upm@document@author@tab@commented}{%
+               \noindent\expandafter\begin{mtabular}[#1]{3}{|X|l|c|}%
+               \tabulartitle{\upm@lang@document@authors}%
+               \tabularheader{\upm@lang@document@names}{\upm@lang@document@comments}{\upm@lang@document@emails}%
+               \upm@document@author@tab@commented
+               \hline%
+               \expandafter\end{mtabular}\par\vspace{.5cm}}%
+       \else%
+               \Ifnotempty{\upm@document@author@tab}{%
+               \noindent\expandafter\begin{mtabular}[#1]{2}{|X|c|}%
+               \tabulartitle{\upm@lang@document@authors}%
+               \tabularheader{\upm@lang@document@names}{\upm@lang@document@emails}%
+               \upm@document@author@tab
+               \hline%
+               \expandafter\end{mtabular}\par\vspace{.5cm}}%
+       \fi%
+}
+
+%----------------------------------------
+% VALIDATOR MANAGEMENT
+%----------------------------------------
+
+\newif\ifupm@document@validator@tab@hascomment
+\upm@document@validator@tab@hascommentfalse
+\def\upm@document@validator@tab{}
+\def\upm@document@validator@tab@commented{}
+
+%-----
+\def\thevalidatorlist{}
+
+%-----
+%Add a validator
+%\addvalidator[email]{firstname}{name}
+%\addvalidator*[email]{firstname}{name}{comment}
+\def\addvalidator{\@ifstar\upm@document@addvalidatorstar\upm@document@addvalidator}
+\newcommand{\upm@document@addvalidator}[3][]{%
+       \global\protected@edef\thevalidatorlist{\thevalidatorlist\protect\Ifnotempty{\thevalidatorlist}{,} \protect\upmmakename{#2}{#3}{~}}
+
+       \global\protected@edef\upm@document@validator@tab@commented{\upm@document@validator@tab@commented \protect\upmmakename{#2}{#3}{~} & 
+       & \protect\Ifnotempty{#1}{\protect\href{mailto:#1}{#1}} & \protect\\}
+
+       \ifupm@document@validator@tab@hascomment\else
+               \global\protected@edef\upm@document@validator@tab{\upm@document@validator@tab \protect\upmmakename{#2}{#3}{~} & 
+               \protect\Ifnotempty{#1}{\protect\href{mailto:#1}{#1}} & \protect\\}
+       \fi
+}
+\newcommand{\upm@document@addvalidatorstar}[4][]{%
+       \global\protected@edef\thevalidatorlist{\thevalidatorlist\protect\Ifnotempty{\thevalidatorlist}{,} \protect\upmmakename{#2}{#3}{~}}
+
+       \global\let\upm@document@validator@tab\relax
+
+       \global\protected@edef\upm@document@validator@tab@commented{\upm@document@validator@tab@commented \protect\upmmakename{#2}{#3}{~} & 
+       #4 & \protect\Ifnotempty{#1}{\protect\href{mailto:#1}{#1}} & \protect\\}
+
+       \upm@document@validator@tab@hascommenttrue
+}
+
+%-----
+% Display the summary of the validators
+%\upmdocumentvalidators[width]
+\newcommand{\upmdocumentvalidators}[1][\linewidth]{%
+       \ifupm@document@validator@tab@hascomment%
+               \Ifnotempty{\upm@document@validator@tab@commented}{%
+               \noindent\expandafter\begin{mtabular}[#1]{4}{|X|l|c|p{3cm}|}%
+               \tabulartitle{\upm@lang@document@validators}%
+               \tabularheader{\upm@lang@document@names}{\upm@lang@document@comments}{\upm@lang@document@emails}{\upm@lang@document@initials}%
+               \upm@document@validator@tab@commented
+               \hline%
+               \expandafter\end{mtabular}\par\vspace{.5cm}}%
+       \else%
+               \Ifnotempty{\upm@document@validator@tab}{%
+               \noindent\expandafter\begin{mtabular}[#1]{3}{|X|c|p{3cm}|}%
+               \tabulartitle{\upm@lang@document@validators}%
+               \tabularheader{\upm@lang@document@names}{\upm@lang@document@emails}{\upm@lang@document@initials}%
+               \upm@document@validator@tab
+               \hline%
+               \expandafter\end{mtabular}\par\vspace{.5cm}}%
+       \fi%
+}
+
+
+%-----
+%Add an author/validator
+%\addauthorvalidator[email]{firstname}{name}
+%\addauthorvalidator*[email]{firstname}{name}{comment}
+\def\addauthorvalidator{\@ifstar\upm@document@addauthorvalidatorstar\upm@document@addauthorvalidator}
+\newcommand{\upm@document@addauthorvalidator}[3][]{%
+       \addauthor[#1]{#2}{#3}\addvalidator[#1]{#2}{#3}%
+}
+\newcommand{\upm@document@addauthorvalidatorstar}[4][]{%
+       \addauthor*[#1]{#2}{#3}{#4}\addvalidator*[#1]{#2}{#3}{#4}%
+}
+
+%----------------------------------------
+% INFORMED MANAGEMENT
+%----------------------------------------
+
+\newif\ifupm@document@informed@tab@hascomment
+\upm@document@informed@tab@hascommentfalse
+\def\upm@document@informed@tab{}
+\def\upm@document@informed@tab@commented{}
+
+%-----
+\def\theinformedlist{}
+
+%-----
+%Add an informed
+%\addinformed[email]{firstname}{name}
+%\addinformed*[email]{firstname}{name}{comment}
+\def\addinformed{\@ifstar\upm@document@addinformedstar\upm@document@addinformed}
+\newcommand{\upm@document@addinformed}[3][]{%
+       \global\protected@edef\theinformedlist{\theinformedlist\protect\Ifnotempty{\theinformedlist}{,} \protect\upmmakename{#2}{#3}{~}}
+
+       \global\protected@edef\upm@document@informed@tab@commented{\upm@document@informed@tab@commented \protect\upmmakename{#2}{#3}{~} & 
+       & \protect\Ifnotempty{#1}{\protect\href{mailto:#1}{#1}} \protect\\}
+
+       \ifupm@document@informed@tab@hascomment\else
+               \global\protected@edef\upm@document@informed@tab{\upm@document@informed@tab \protect\upmmakename{#2}{#3}{~} & 
+               \protect\Ifnotempty{#1}{\protect\href{mailto:#1}{#1}} \protect\\}
+       \fi
+}
+\newcommand{\upm@document@addinformedstar}[4][]{%
+       \global\protected@edef\theinformedlist{\theinformedlist\protect\Ifnotempty{\theinformedlist}{,} \protect\upmmakename{#2}{#3}{~}}
+
+       \global\let\upm@document@informed@tab\relax
+
+       \global\protected@edef\upm@document@informed@tab@commented{\upm@document@informed@tab@commented \protect\upmmakename{#2}{#3}{~} & 
+       #4 & \protect\Ifnotempty{#1}{\protect\href{mailto:#1}{#1}} \protect\\}
+
+       \upm@document@informed@tab@hascommenttrue
+}
+
+%-----
+% Display the summary of the informed people
+%\upmdocumentinformedpeople[width]
+\newcommand{\upmdocumentinformedpeople}[1][\linewidth]{%
+       \ifupm@document@validator@tab@hascomment%
+               \Ifnotempty{\upm@document@informed@tab@commented}{%
+               \noindent\expandafter\begin{mtabular}[#1]{3}{|X|l|c|}%
+               \tabulartitle{\upm@lang@document@informed}%
+               \tabularheader{\upm@lang@document@names}{\upm@lang@document@comments}{\upm@lang@document@emails}%
+               \upm@document@informed@tab@commented
+               \hline%
+               \expandafter\end{mtabular}\par\vspace{.5cm}}%
+       \else%
+               \Ifnotempty{\upm@document@informed@tab}{%
+               \noindent\expandafter\begin{mtabular}[#1]{2}{|X|c|}%
+               \tabulartitle{\upm@lang@document@informed}%
+               \tabularheader{\upm@lang@document@names}{\upm@lang@document@emails}%
+               \upm@document@informed@tab
+               \hline%
+               \expandafter\end{mtabular}\par\vspace{.5cm}}%
+       \fi%
+}
+
+%----------------------------------------
+% PUBLISHER, COPYRIGHT, PRINTING...
+%----------------------------------------
+
+\gdef\theupmcopyrighter{\Get{copyrighter}}
+\gdef\theupmpublisher{\Get{publisher}}
+\gdef\theupmprintedin{\Get{printedin}}
+\gdef\theupmisbn{}
+\gdef\theupmissn{}
+\gdef\theupmdoi{}
+\gdef\theupmpublishingdate{}
+
+\newcommand{\theupmformattedpublisher}{\Ifelsedefined{publisher}{\theupmpublisher}{\textcolor{red}{???}}}
+\newcommand{\theupmformattedcopyrighter}{\Ifelsedefined{copyrighter}{\theupmcopyrighter}{\textcolor{red}{???}}}
+
+%-----
+%Set the publisher identity
+%\setpublisher{name}
+\newcommand{\setpublisher}[1]{\Set{publisher}{#1}}
+
+%-----
+%Set the copyrighter identity
+%\setcopyrighter{name}
+\newcommand{\setcopyrighter}[1]{\Set{copyrighter}{#1}}
+
+%-----
+%Set the address where this document is printed
+%\setprintingaddress{address}
+\newcommand{\setprintingaddress}[1]{\Set{printedin}{#1}}
+
+%-----
+%Set the ISBN
+%\setisbn{isbn}
+\newcommand{\setisbn}[1]{%
+       \gdef\theupmisbn{#1}%
+}
+
+%-----
+%Set the ISSN
+%\setisbn{issn}
+\newcommand{\setissn}[1]{%
+       \gdef\theupmissn{#1}%
+}
+
+%-----
+%Set the DOI
+%\setdoi{doi}
+\newcommand{\setdoi}[1]{%
+       \gdef\theupmdoi{#1}%
+}
+
+%----------------------------------------
+% WATERMARK
+%----------------------------------------
+
+\AtBeginDocument{
+       \ifthenelse{\equal{\theupmstatus}{\upmrestricted}}{
+               \edef\upm@doc@tmp@watermark{\uppercase{\upm@lang@restricted}}
+               \RequirePackage{draftwatermark}
+               \SetWatermarkText{\upm@doc@tmp@watermark}
+               \SetWatermarkScale{\Get{watermarksize}}
+       }{}
+}
+
+\endinput
diff --git a/upmethodology-extension.sty b/upmethodology-extension.sty
new file mode 100644 (file)
index 0000000..0ffe448
--- /dev/null
@@ -0,0 +1,123 @@
+% Package for Unified Process Methodology's extensions
+%
+% Copyright (c) 2006-2009 Stephane GALLAND <galland@arakhne.org>
+% 
+% This program is free library; you can redistribute it and/or modify
+% it under the terms of the GNU Lesser General Public License as
+% published by the Free Software Foundation; either version 3 of the
+% License, or any later version.
+%
+% This library 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
+% Lesser General Public License for more details.
+%
+% You should have received a copy of the GNU Lesser General Public
+% License along with this library; see the file COPYING.  If not,
+% write to the Free Software Foundation, Inc., 59 Temple Place - Suite
+% 330, Boston, MA 02111-1307, USA.
+%
+% Creation date: 2009-10-24
+% Modifications:
+%   2012-09-21   "(c)" -> "\copyright"
+%   2009-11-03   \If* are marked as \long.
+%   2006-10-30   Bug fix: provides "upmethodology-extension" insteed of "upmethodology-document".
+%   2006-10-29   Allow to override the default font.
+%   2006-10-27   Clean the API
+%
+
+\global\edef\upm@package@ext@ver{2012/09/21}
+
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{upmethodology-extension}[\upm@package@ext@ver]
+
+\RequirePackage{upmethodology-p-common}
+
+%----------------------------------------
+% TEST MACROS
+%----------------------------------------
+\long\def\Ifdefined#1#2{\@ifundefined{upmext@extension@value@#1}{}{#2}}
+\long\def\Ifelsedefined#1#2#3{\@ifundefined{upmext@extension@value@#1}{#3}{#2}}
+\long\def\Ifundefined#1#2{\@ifundefined{upmext@extension@value@#1}{#2}{}}
+\long\def\Ifelseundefined#1#2#3{\@ifundefined{upmext@extension@value@#1}{#2}{#3}}
+
+%----------------------------------------
+% EXTENSION MANAGEMENT
+%----------------------------------------
+
+\newif\ifupm@extension@savealllang\upm@extension@savealllangfalse
+
+\newcommand{\Get}[1]{\@nameuse{upmext@extension@value@#1}}
+\newcommand{\GetLang}[2]{\@nameuse{upmext@extension@value@#1@#2}}
+
+\newcommand{\upm@extension@Set}[3][\upmcurrentlang]{%
+       % PREDEFINED FRONT PAGE
+       \ifthenelse{\equal{#2}{frontpage}}{%
+               \gdef\upmext@extension@value@frontpage{#3}%
+               \global\let\upmext@extension@value@frontpage@custom\relax%
+       }{%                     
+       % CUSTOM BACK PAGE
+       \ifthenelse{\equal{#2}{backpage}}{%
+               \ifthenelse{\equal{\upmcurrentlang}{#1}}{%
+                       \gdef\upmext@extension@value@backpage{#3}%
+               }{}%
+       }{%                     
+       % CUSTOM FRONT PAGE
+       \ifthenelse{\equal{#2}{cfrontpage}}{%
+               \ifthenelse{\equal{\upmcurrentlang}{#1}}{%
+                       \gdef\upmext@extension@value@frontpage{custom}%
+                       \gdef\upmext@extension@value@frontpage@custom{#3}%
+               }{}%
+       }{%                     
+               \ifthenelse{\equal{\upmcurrentlang}{#1}}{%
+                       \message{*** define extension value #2 ****}%
+                       \global\@namedef{upmext@extension@value@#2}{#3}%
+                       }{}%
+               \ifupm@extension@savealllang%
+                       \global\@namedef{upmext@extension@value@#2@#1}{#3}%
+               \fi
+       }}}%
+}
+\let\Set\upm@extension@Set
+
+\newcommand{\Unset}[2][\upmcurrentlang]{%
+       \ifthenelse{\equal{\upmcurrentlang}{#1}}{%
+               \message{*** undefine extension value #2 ****}%
+               \global\expandafter\let\csname upmext@extension@value@#2\endcsname\@undefined%
+               \ifupm@extension@savealllang%
+                       \global\expandafter\let\csname upmext@extension@value@#2@#1\endcsname\@undefined%
+               \fi%
+       }{}%
+}
+
+\newcommand{\DeclareCopyright}[5][\upmcurrentlang]{%
+       \ifthenelse{\equal{\upmcurrentlang}{#1}}{%
+               \Set{copyright}{Copyright {(c)} #3 #4.}%
+               \message{*** style extension #2, \Get{copyright} ****}%
+               \Set{trademarks}{#5}%
+       }{}%
+}
+
+\newlength{\upmext@tmp@putx}
+\def\Put(#1,#2){%
+       \setlength{\upmext@tmp@putx}{#1\unitlength}%
+       \if@twoside\ifodd\c@page\else\addtolength{\upmext@tmp@putx}{28\unitlength}\fi\fi%
+       \put(\strip@pt\upmext@tmp@putx,#2)}
+
+%-----
+% Use the specified extension
+%\UseExtension{extension_name}
+\newcommand{\UseExtension}[1]{%
+       \message{**** including upm extension #1 (upmext-#1.cfg) ****}%
+       \input{upmext-#1.cfg}%
+}
+
+%------------
+% Default declarations
+\Set{frontillustrationsize}{1}
+\Set{watermarksize}{1}
+\Unset{publisher}
+\Unset{copyrighter}
+\Unset{printedin}
+
+\endinput
diff --git a/upmethodology-fmt.sty b/upmethodology-fmt.sty
new file mode 100644 (file)
index 0000000..98d34aa
--- /dev/null
@@ -0,0 +1,1498 @@
+% Layout and Pagraph Format for Unified Process Methodology
+%
+% Copyright (c) 2006-2009, 2012-2014 Stephane GALLAND <galland@arakhne.org>
+% 
+% This program is free library; you can redistribute it and/or modify
+% it under the terms of the GNU Lesser General Public License as
+% published by the Free Software Foundation; either version 3 of the
+% License, or any later version.
+%
+% This library 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
+% Lesser General Public License for more details.
+%
+% You should have received a copy of the GNU Lesser General Public
+% License along with this library; see the file COPYING.  If not,
+% write to the Free Software Foundation, Inc., 59 Temple Place - Suite
+% 330, Boston, MA 02111-1307, USA.
+
+\global\edef\upm@package@fmt@ver{2015/02/27}
+
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{upmethodology-fmt}[\upm@package@fmt@ver]
+
+\RequirePackage{upmethodology-p-common}
+
+\gdef\upm@fmt@force@single@spacing#1{{\begin{singlespace}#1\end{singlespace}}}
+\gdef\upm@date@head#1/#2\@nil{#1}
+\gdef\upm@date@tail#1/#2\@nil{#2}
+\gdef\upm@date@first#1{{\expandafter\upm@date@head#1\expandafter\@nil}}
+\gdef\upm@date@second#1{{\expandafter\expandafter\expandafter\upm@date@head\expandafter\upm@date@tail#1\expandafter\@nil\expandafter\expandafter\expandafter\@nil}}
+\gdef\upm@date@third#1{{\expandafter\expandafter\expandafter\upm@date@tail\expandafter\upm@date@tail#1\expandafter\@nil\expandafter\expandafter\expandafter\@nil}}
+
+\newif\ifupm@use@override@standard@lists
+\global\upm@use@override@standard@liststrue
+
+%----------------------------------------
+% LOCALES
+%----------------------------------------
+\global\let\upm@format@lang@extractyear\upm@date@first%
+\def\upm@format@lang@english{%
+  \gdef\upm@lang@@{\message{**** upmethodology-fmt is using English language ****}}%
+  \global\renewcommand{\upm@format@lang@makedate}[3]{##3\string/\two@digits{##2}\string/\two@digits{##1}}%
+  \global\let\upm@format@lang@extractyear\upm@date@first%
+  \global\let\upm@format@lang@extractmonth\upm@date@second%
+  \gdef\upm@format@lang@professor{Pr.}%
+  \gdef\upm@format@lang@doctor{Dr.}%
+  \gdef\upm@format@lang@phdoctor{Ph.D.}%
+  \gdef\upm@format@lang@scdoctor{Sc.D.}%
+  \gdef\upm@format@lang@mdoctor{M.D.}%
+  \gdef\upm@format@lang@professionalengineer{CEng.}%
+  \gdef\upm@format@lang@incorporatedengineer{IEng.}%
+}
+\def\upm@format@lang@french{%
+  \gdef\upm@lang@@{\message{**** upmethodology-fmt is using French language ****}}%
+  \global\renewcommand{\upm@format@lang@makedate}[3]{\two@digits{##1}\string/\two@digits{##2}\string/##3}%
+  \global\let\upm@format@lang@extractyear\upm@date@third%
+  \global\let\upm@format@lang@extractmonth\upm@date@second%
+  \global\let\upm@format@lang@extractday\upm@date@first%
+  \gdef\upm@format@lang@professor{Pr.}%
+  \gdef\upm@format@lang@doctor{Dr.}%
+  \gdef\upm@format@lang@phdoctor{Ph.D.}%
+  \gdef\upm@format@lang@scdoctor{Sc.D.}%
+  \gdef\upm@format@lang@mdoctor{M.D.}%
+  \gdef\upm@format@lang@professionalengineer{Ing.}%
+  \gdef\upm@format@lang@incorporatedengineer{Ing.}%
+}
+\global\providecommand{\upm@format@lang@makedate}[3]{}%
+
+%----------------------------------------
+% OPTIONS
+%----------------------------------------
+\DeclareOption{french}{%
+  \upm@format@lang@french
+  \PassOptionsToPackage{french}{varioref}
+}
+\DeclareOption{francais}{%
+  \upm@format@lang@french
+  \PassOptionsToPackage{french}{varioref}
+}
+\DeclareOption{english}{%
+  \upm@format@lang@english
+  \PassOptionsToPackage{english}{varioref}
+}
+\DeclareOption{standardlists}{%
+  \global\upm@use@override@standard@listsfalse
+}
+\ExecuteOptions{english}
+\ProcessOptions
+\upm@lang@@
+
+
+\RequirePackage{graphicx}
+\RequirePackage{subfigure}
+\RequirePackage{tabularx}
+\RequirePackage{multicol}
+\RequirePackage{colortbl}
+\RequirePackage{picinpar}
+\RequirePackage{amsmath}
+\RequirePackage{amsthm}
+\RequirePackage{thmtools}
+\RequirePackage{pifont}
+\RequirePackage{setspace}
+\RequirePackage{varioref}
+\RequirePackage{txfonts}
+\RequirePackage{relsize}
+\RequirePackage{xkeyval}
+\RequirePackage{hyphenat}
+\RequirePackage{bbm}
+\RequirePackage{environ}% for advanced environment declaration
+
+%----------------------------------------
+% Exponent and indice
+%----------------------------------------
+% Exponent
+%\newcommand{\textsup}[1]{\ensuremath{^{\text{#1}}}\xspace}
+\newcommand{\textsup}[1]{\upm@textsuperscript{#1}\xspace}
+% Indice
+%\newcommand{\textsub}[1]{\ensuremath{_{\text{#1}}}\xspace}
+\newcommand{\textsub}[1]{\upm@textsubscript{#1}\xspace}
+
+%----------------------------------------
+% Major Emphazing
+%----------------------------------------
+\newcommand{\Emph}[1]{\textbf{#1}\xspace}
+
+%----------------------------------------
+% SYMBOLS
+%----------------------------------------
+\renewcommand{\copyright}{\Pisymbol{psy}{211}\xspace}
+\newcommand{\trademark}{\Pisymbol{psy}{228}\xspace}
+\newcommand{\regmark}{\Pisymbol{psy}{226}\xspace}
+\newcommand{\smalltrade}{{\tiny\trademark}\xspace}
+\newcommand{\smallreg}{{\tiny\regmark}\xspace}
+\newcommand{\smallcopy}{{\tiny\copyright}\xspace}
+\newcommand{\ust}{\textsup{st}}
+\newcommand{\und}{\textsup{nd}}
+\newcommand{\urd}{\textsup{rd}}
+\newcommand{\uth}{\textsup{th}}
+
+%----------------------------------------
+% MATH SYMBOLS
+%----------------------------------------
+\newcommand{\R}{\ensuremath{\mathbb{R}}}
+\newcommand{\N}{\ensuremath{\mathbb{N}}}
+\newcommand{\Z}{\ensuremath{\mathbb{Z}}}
+\newcommand{\C}{\ensuremath{\mathbb{C}}}
+\newcommand{\Q}{\ensuremath{\mathbb{Q}}}
+\newcommand{\powerset}{\ensuremath{\mathcal{P}}}
+
+\DeclareMathOperator{\sgn}{sgn}
+
+%----------------------------------------
+% DEFAULT GRAPHICX CONFIGURATION
+%----------------------------------------
+
+\ifpdf
+  \DeclareGraphicsExtensions{.pdf,.png,.jpg,.jpeg,.gif}
+\else
+  \DeclareGraphicsExtensions{.eps,.png,.jpg,.jpeg,.gif}
+\fi
+\graphicspath{{./}}
+
+%----------------------------------------
+% FIGURES
+%----------------------------------------
+
+\newcommand{\upm@mfigure}[5][ht]{
+       \begin{figure}[#1]%
+               \begin{center}%
+                       \includegraphics[#2]{#3}%
+                       \caption{#4}%
+                       \label{fig:#5}%
+               \end{center}%
+       \end{figure}%
+}
+\newcommand{\upm@mfigurestar}[5][ht]{
+       \begin{figure*}[#1]%
+               \begin{center}%
+                       \includegraphics[#2]{#3}%
+                       \caption{#4}%
+                       \label{fig:#5}%
+               \end{center}%
+       \end{figure*}%
+}
+%-----
+%\mfigure[position]{options}{filename}{caption}{label}
+\def\mfigure{\@ifstar\upm@mfigurestar\upm@mfigure}
+%-----
+%\figref{label}
+\newcommand{\figref}[1]{\ref{fig:#1}}
+%-----
+%\figpageref{label}
+\newcommand{\figpageref}[1]{\pageref{fig:#1}}
+
+%-----
+% Multi-figures
+
+\newcounter{upm@subfigure@count}
+
+\newcommand{\upm@beginsubfigure}[4]{
+       \let\upm@mfiguresaved\mfigure
+       %options,filename,caption,label
+       \renewcommand{\mfigure}[5][]{
+               \xdef\upm@tmp@subfigure@label{\alph{upm@subfigure@count}}%
+                \subfigure[##4]{%
+                       \includegraphics[##2]{##3}%
+                       \label{fig:##5}%
+                       \label{fig:#4:\upm@tmp@subfigure@label}%
+               }%
+               \addtocounter{upm@subfigure@count}{1}%
+       }
+       %options,filename,caption
+       \newcommand{\msubfigure}[3]{
+               \xdef\upm@tmp@subfigure@label{\alph{upm@subfigure@count}}%
+                \subfigure[##3]{%
+                       \includegraphics[##1]{##2}%
+                       \label{fig:#4:\upm@tmp@subfigure@label}%
+               }%
+               \addtocounter{upm@subfigure@count}{1}%
+       }
+       \setcounter{upm@subfigure@count}{1}
+       \gdef\upm@mfigurescaption{#3}%
+       \gdef\upm@mfigureslabel{fig:#4}%
+       \begin{#1}[#2]\centering %
+}
+
+\newcommand{\upm@endsubfigure}[1]{
+               \caption{\upm@mfigurescaption}%
+               \label{\upm@mfigureslabel}%
+       \end{#1}%
+       \let\mfigure\upm@mfiguresaved
+}
+
+%-----
+%\mfigures[position]{caption}{label}
+\newenvironment{mfigures}[3][ht]{
+       \upm@beginsubfigure{figure}{#1}{#2}{#3}%
+}{%
+       \upm@endsubfigure{figure}%
+}
+%-----
+%\mfigures*[position]{caption}{label}
+\newenvironment{mfigures*}[3][ht]{
+       \upm@beginsubfigure{figure*}{#1}{#2}{#3}%
+}{%
+       \upm@endsubfigure{figure*}%
+}
+
+%----------------------------------------
+% IMAGES INCLUDING TeX EXPRESSIONS
+%----------------------------------------
+
+%
+% This section is copied from the AutoLaTeX package
+% http://www.arakhne.org/autolatex
+%
+
+%-----
+%\DeclareGraphicsExtensionsWtex{coma separated extensions}
+\providecommand{\DeclareGraphicsExtensionsWtex}[1]{%
+       \xdef\@autolatex@wtfig@extensions{\zap@space#1 \@empty}%
+}
+\ifpdf
+   \DeclareGraphicsExtensionsWtex{.pdftex_t,.pdf_tex}
+\else
+  \DeclareGraphicsExtensionsWtex{.pstex_t,.ps_tex}
+\fi
+
+\providecommand{\@autolatex@wtfig@searchinpath}[1]{%
+       \IfFileExists{#1}{%
+               \protected@edef\@autolatex@wtfig@tmp{\protect\resizebox{\@autolatex@wtfig@width}{\@autolatex@wtfig@height}{\protect\input{#1}}}%
+       }{%
+               \@for\@autolatex@wtfig@pathtmp:=\Ginput@path\do{%
+                       \ifx\@autolatex@wtfig@tmp\relax%
+                               \IfFileExists{\@autolatex@wtfig@pathtmp#1}{%
+                                       \protected@edef\@autolatex@wtfig@tmp{\protect\resizebox{\@autolatex@wtfig@width}{\@autolatex@wtfig@height}{\protect\input{\@autolatex@wtfig@pathtmp#1}}}%
+                               }{}%
+                       \fi%
+               }%
+       }%
+}
+
+\define@key[autolatex]{withtex}{width}{%
+       \gdef\@autolatex@wtfig@width{#1}%
+}
+\define@key[autolatex]{withtex}{height}{%
+       \gdef\@autolatex@wtfig@height{#1}%
+}
+
+%-----
+%\includefigurewtex[width=xx,height=yy]{filename}
+\providecommand{\includefigurewtex}[2][width=\linewidth]{%
+       \begingroup%
+       \gdef\@autolatex@wtfig@width{!}%
+       \gdef\@autolatex@wtfig@height{!}%
+       \setkeys[autolatex]{withtex}{#1}%
+       %
+       \global\let\@autolatex@wtfig@tmp\relax%
+       \global\let\@autolatex@wtfig@ext\relax%
+       \global\let\@autolatex@wtfig@path\relax%
+       \filename@parse{#2}%
+       \ifx\filename@ext\relax%
+               \@for\@autolatex@wtfig@exttmp:=\@autolatex@wtfig@extensions\do{%
+                       \@autolatex@wtfig@searchinpath{#2\@autolatex@wtfig@exttmp}%
+               }%
+       \else%
+               \@autolatex@wtfig@searchinpath{#2\@autolatex@wtfig@exttmp}%
+       \fi%
+       %
+       \ifx\@autolatex@wtfig@tmp\relax%
+               \errmessage{Package upmethodology-fmt: File not found '#2', needed for figure inclusion}%
+       \else%
+               \@autolatex@wtfig@tmp%
+       \fi%
+       %
+       \endgroup%
+}
+
+\global\let\includegraphicswtex\includefigurewtex
+
+%----------------------------------------
+% ENVIRONMENT FOR IMAGES INCLUDING TeX EXPRESSIONS
+%----------------------------------------
+
+\gdef\upm@figtex@dyncaption@remove{}
+\gdef\upm@figtex@figremove#1{%
+       \global\expandafter\let\csname FIG#1\endcsname\relax%
+}
+\gdef\upm@figtex@restore{%
+       \upm@figtex@dyncaption@remove%
+       \gdef\upm@figtex@dyncaption@remove{}
+}
+%-----
+%\figmath{id}{content}
+\def\figmath#1#2{%
+       \expandafter\gdef\csname FIG#1\endcsname{\ensuremath{#2}}%
+       \global\protected@edef\upm@figtex@dyncaption@remove{\upm@figtex@dyncaption@remove\protect\upm@figtex@figremove{#1}}%
+}
+%-----
+%\figtext{id}{content}
+\def\figtext#1#2{%
+       \expandafter\gdef\csname FIG#1\endcsname{#2}%
+       \global\protected@edef\upm@figtex@dyncaption@remove{\upm@figtex@dyncaption@remove\protect\upm@figtex@figremove{#1}}%
+}
+
+\let\upm@fmt@figtex@nil\@nil
+\def\upm@fmt@figtex@parseparams#1=#2\upm@fmt@figtex@nil{\gdef\@tmp{#2}}
+
+\newcommand{\upm@mfigurewtex}[5][ht]{
+       \begin{figure}[#1]%
+               \begin{center}%
+                       % Providing an ascendent compatibility on the second parameter:
+                       % - Prefered value of the parameter: a list of key/value pairs;
+                       % - Old fashion value of the parameter: the value for the "width" key.
+                       {\upm@fmt@figtex@parseparams #2====\upm@fmt@figtex@nil}%
+                       \ifthenelse{\equal{\@tmp}{===}}{%
+                               \includegraphicswtex[width=#2]{#3}%
+                       }{%
+                               \includegraphicswtex[#2]{#3}%
+                       }%
+                       \caption{#4}%
+                       \label{fig:#5}%
+               \end{center}%
+       \end{figure}%
+       \upm@figtex@restore%
+}
+\newcommand{\upm@mfigurewtexstar}[5][ht]{
+       \begin{figure*}[#1]%
+               \begin{center}%
+                       % Providing an ascendent compatibility on the second parameter:
+                       % - Prefered value of the parameter: a list of key/value pairs;
+                       % - Old fashion value of the parameter: the value for the "width" key.
+                       {\upm@fmt@figtex@parseparams #2====\upm@fmt@figtex@nil}%
+                       \ifthenelse{\equal{\@tmp}{===}}{%
+                               \includegraphicswtex[width=#2]{#3}%
+                       }{%
+                               \includegraphicswtex[#2]{#3}%
+                       }%
+                       \caption{#4}%
+                       \label{fig:#5}%
+               \end{center}%
+       \end{figure*}%
+       \upm@figtex@restore%
+}
+%-----
+%\mfigurewtex[position]{options}{filename}{caption}{label}
+\def\mfigurewtex{\@ifstar\upm@mfigurewtexstar\upm@mfigurewtex}
+
+
+
+%----------------------------------------
+% TABLES
+%----------------------------------------
+
+%table's colors
+\definecolor{backtableheader}{rgb}{0.92,0.94,1}
+\definecolor{fronttableheader}{rgb}{0.23,0.33,0.48}
+%title of a table
+\def\upm@fmt@table@title#1{\color{fronttableheader} \cellcolor{backtableheader} {\bfseries #1}}
+%title of columns
+\def\upm@fmt@table@column@title#1{\hfil{\color{fronttableheader} \cellcolor{backtableheader} {\itshape#1}}\hfil}
+
+% Utility functions for mtabular
+\newcounter{upm@fmt@mtabular@columnnumber}
+
+\gdef\upm@fmt@mtabular@expandtitle#1#2{%
+       \multicolumn{#1}{|c|}{\upm@fmt@table@title{\ignorespaces#2\ignorespaces}}%
+}
+
+\newcommand{\tabulartitlespec}[1]{%
+       \gdef\upm@fmt@mtabular@expandtitle##1##2{%
+               \multicolumn{##1}{#1}{\upm@fmt@table@title{\ignorespaces##2\ignorespaces}}%
+       }
+}
+
+%-----
+%\mtabular[width]{ncolumns}{columns}
+\newenvironment{mtabular}[3][\linewidth]{%
+       \newcommand{\tabulartitle}[1]{%
+               \hline%
+               \upm@fmt@mtabular@expandtitle{#2}{##1} \\%
+               \hline%
+       }%
+       \newcommand{\tabulartitleinside}[1]{%
+               \hline\hline%
+               \upm@fmt@mtabular@expandtitle{#2}{##1} \\%
+               \hline%
+       }%
+       \newcommand*{\upm@fmt@mtabular@column@next}[1]{%
+               & \upm@fmt@table@column@title{\ignorespaces##1\ignorespaces}%
+               \addtocounter{upm@fmt@mtabular@columnnumber}{-1}%
+               \ifnum0<\value{upm@fmt@mtabular@columnnumber}%
+                       \let\upm@fmt@mtabular@column@continue\upm@fmt@mtabular@column@next%
+               \else%
+                       \\ \hline \let\upm@fmt@mtabular@column@continue\relax%
+               \fi%
+               \upm@fmt@mtabular@column@continue%
+       }
+       \newcommand*{\upm@fmt@mtabular@column@first}[1]{%
+               \upm@fmt@table@column@title{\ignorespaces##1\ignorespaces}%
+               \addtocounter{upm@fmt@mtabular@columnnumber}{-1}%
+               \ifnum0<\value{upm@fmt@mtabular@columnnumber}%
+                       \let\upm@fmt@mtabular@column@continue\upm@fmt@mtabular@column@next%
+               \else%
+                       \\ \hline \let\upm@fmt@mtabular@column@continue\relax%
+               \fi%
+               \upm@fmt@mtabular@column@continue%
+       }
+       \newcommand{\tabularheader}{%
+               \setcounter{upm@fmt@mtabular@columnnumber}{#2}%
+               \upm@fmt@mtabular@column@first%
+       }%
+       \newcommand{\tabularrowheader}[1]{%
+               \centering\upm@fmt@table@column@title{\ignorespaces##1}%
+       }%
+       \begingroup\tabularx{#1}{#3}%
+}{%
+       \endtabularx\endgroup%
+}
+
+%-----
+%\mtable[options]{width}{ncolumns}{columns}{caption}{label}
+% size=<length>
+\define@key[autolatex]{mtable}{size}{\gdef\@autolatex@mtable@size{#1}}
+% position: h t b p H !
+\define@key[autolatex]{mtable}{h}[\relax]{\gdef\@autolatex@mtable@position{h}}
+\define@key[autolatex]{mtable}{t}[\relax]{\gdef\@autolatex@mtable@position{t}}
+\define@key[autolatex]{mtable}{b}[\relax]{\gdef\@autolatex@mtable@position{b}}
+\define@key[autolatex]{mtable}{p}[\relax]{\gdef\@autolatex@mtable@position{p}}
+\define@key[autolatex]{mtable}{H}[\relax]{\gdef\@autolatex@mtable@position{H}}
+\define@key[autolatex]{mtable}{ht}[\relax]{\gdef\@autolatex@mtable@position{ht}}
+\define@key[autolatex]{mtable}{hb}[\relax]{\gdef\@autolatex@mtable@position{hb}}
+\define@key[autolatex]{mtable}{hp}[\relax]{\gdef\@autolatex@mtable@position{hp}}
+\define@key[autolatex]{mtable}{hH}[\relax]{\gdef\@autolatex@mtable@position{hH}}
+\define@key[autolatex]{mtable}{h!}[\relax]{\gdef\@autolatex@mtable@position{h!}}
+\define@key[autolatex]{mtable}{tb}[\relax]{\gdef\@autolatex@mtable@position{tb}}
+\define@key[autolatex]{mtable}{tp}[\relax]{\gdef\@autolatex@mtable@position{tp}}
+\define@key[autolatex]{mtable}{tH}[\relax]{\gdef\@autolatex@mtable@position{tH}}
+\define@key[autolatex]{mtable}{t!}[\relax]{\gdef\@autolatex@mtable@position{t!}}
+\define@key[autolatex]{mtable}{bp}[\relax]{\gdef\@autolatex@mtable@position{bp}}
+\define@key[autolatex]{mtable}{bH}[\relax]{\gdef\@autolatex@mtable@position{bH}}
+\define@key[autolatex]{mtable}{b!}[\relax]{\gdef\@autolatex@mtable@position{b!}}
+\define@key[autolatex]{mtable}{pH}[\relax]{\gdef\@autolatex@mtable@position{pH}}
+\define@key[autolatex]{mtable}{p!}[\relax]{\gdef\@autolatex@mtable@position{p!}}
+\define@key[autolatex]{mtable}{H!}[\relax]{\gdef\@autolatex@mtable@position{H!}}
+\define@key[autolatex]{mtable}{htb}[\relax]{\gdef\@autolatex@mtable@position{htb}}
+\define@key[autolatex]{mtable}{htp}[\relax]{\gdef\@autolatex@mtable@position{htp}}
+\define@key[autolatex]{mtable}{htH}[\relax]{\gdef\@autolatex@mtable@position{htH}}
+\define@key[autolatex]{mtable}{ht!}[\relax]{\gdef\@autolatex@mtable@position{ht!}}
+\define@key[autolatex]{mtable}{tbp}[\relax]{\gdef\@autolatex@mtable@position{tbp}}
+\define@key[autolatex]{mtable}{tbH}[\relax]{\gdef\@autolatex@mtable@position{tbH}}
+\define@key[autolatex]{mtable}{tb!}[\relax]{\gdef\@autolatex@mtable@position{tb!}}
+\define@key[autolatex]{mtable}{bpH}[\relax]{\gdef\@autolatex@mtable@position{bpH}}
+\define@key[autolatex]{mtable}{bp!}[\relax]{\gdef\@autolatex@mtable@position{bp!}}
+\define@key[autolatex]{mtable}{pH!}[\relax]{\gdef\@autolatex@mtable@position{pH!}}
+\define@key[autolatex]{mtable}{htbp}[\relax]{\gdef\@autolatex@mtable@position{htbp}}
+\define@key[autolatex]{mtable}{htbH}[\relax]{\gdef\@autolatex@mtable@position{htbH}}
+\define@key[autolatex]{mtable}{htb!}[\relax]{\gdef\@autolatex@mtable@position{htb!}}
+\define@key[autolatex]{mtable}{tbpH}[\relax]{\gdef\@autolatex@mtable@position{tbpH}}
+\define@key[autolatex]{mtable}{tbp!}[\relax]{\gdef\@autolatex@mtable@position{tbp!}}
+\define@key[autolatex]{mtable}{bpH!}[\relax]{\gdef\@autolatex@mtable@position{bph!}}
+\define@key[autolatex]{mtable}{htbpH}[\relax]{\gdef\@autolatex@mtable@position{htbpH}}
+\define@key[autolatex]{mtable}{htbp!}[\relax]{\gdef\@autolatex@mtable@position{htbp!}}
+\define@key[autolatex]{mtable}{htbpH!}[\relax]{\gdef\@autolatex@mtable@position{htbpH!}}
+%
+\newenvironment{mtable}[6][ht]{%
+       \global\let\@autolatex@mtable@position\relax%
+       \gdef\@autolatex@mtable@size{\normalsize}%
+       \setkeys[autolatex]{mtable}{#1}%
+       \ifx\@autolatex@mtable@position\relax%
+               \gdef\@autolatex@mtable@position{ht}%
+       \fi
+       %
+       \gdef\upm@table@caption{#5}%
+       \xdef\upm@table@label{tab:#6}%
+       \gdef\upm@table@note{}%
+       \newcommand{\captionastitle}{\tabulartitle{\upm@table@caption}}%
+       \newcommand{\tablenote}[1]{\gdef\upm@table@note{\bgroup ##1\egroup}}%
+       \expandafter\table[\@autolatex@mtable@position]%
+       \center\@autolatex@mtable@size%
+       \mtabular[#2]{#3}{#4}%
+}{%
+       \endmtabular\relax%
+       \caption{\upm@table@caption}%
+       \label{\upm@table@label}%
+       \endcenter%
+       \upm@table@note%
+       \endtable%
+       \global\let\upm@table@caption\relax%
+       \global\let\upm@table@label\relax%
+       \global\let\upm@table@note\relax%
+}
+
+%-----
+%\tabref{label}
+\newcommand{\tabref}[1]{\ref{tab:#1}}
+%-----
+%\tabpageref{label}
+\newcommand{\tabpageref}[1]{\pageref{tab:#1}}
+
+%----------------------------------------
+% PARAGRAPHS
+%----------------------------------------
+\setlength{\parindent}{0pt}
+\setlength{\parskip}{.2cm}
+
+%----------------------------------------
+% COLORIZED SECTION'S TITLES
+%----------------------------------------
+
+% PRIVATE COLORS
+\definecolor{sectiontitlecolor}{rgb}{0.93,0.41,0}
+\definecolor{chaptertitlecolor}{rgb}{0.24,0.33,0.48}
+\definecolor{parttitlecolor}{rgb}{0.24,0.33,0.48}
+
+% PRIVATE FORMATTING MACROS
+\newcounter{upm@format@section@sectionlevel}
+\setcounter{upm@format@section@sectionlevel}{0}
+
+\gdef\upm@format@partnum#1{\textcolor{parttitlecolor}{\expandafter\fontsize{40pt}{60pt}\selectfont#1\normalfont}}
+\gdef\upm@format@parttitle#1{\textcolor{parttitlecolor}{\huge\scshape #1}}
+\gdef\upm@format@chapternum#1{\textcolor{chaptertitlecolor}{\expandafter\fontsize{40pt}{60pt}\selectfont#1\normalfont}}
+\gdef\upm@format@chaptertitle#1{\textcolor{chaptertitlecolor}{\Huge\scshape #1}}
+\gdef\upm@format@sectionnum#1#2{\textcolor{sectiontitlecolor}{#2}}
+\gdef\upm@format@sectiontitle#1#2{\textcolor{sectiontitlecolor}{#2}}
+
+% PART
+\ifupmbookformat
+       \gdef\@part[#1]#2{%
+           \ifnum \c@secnumdepth >-2\relax
+             \refstepcounter{part}%
+             \addcontentsline{toc}{part}{\thepart\hspace{1em}#1}%
+           \else
+             \addcontentsline{toc}{part}{#1}%
+           \fi
+           \markboth{}{}%
+           {\huge\centering
+            \interlinepenalty \@M
+            \normalfont
+            \ifnum \c@secnumdepth >-2\relax
+              \upm@format@partnum{\thepart}
+              \par
+              \vskip 20\p@
+            \fi
+            \upm@format@parttitle{\nohyphens{#2}}\par}%
+           \@endpart}
+       \gdef\@spart#1{%
+           {\centering
+            \interlinepenalty \@M
+            \normalfont
+            \upm@format@parttitle{\nohyphens{#1}}\par}%
+           \@endpart}
+\fi
+
+% CHAPTER
+\ifupmarticleformat\else
+       \newcommand{\upm@format@makechapterhead}[2]{%
+                 %\vspace*{50\p@}%
+                 {\parindent \z@ \Huge \raggedleft \normalfont
+                   \ifx\@empty#1\ifnum \c@secnumdepth >\m@ne
+                       \upm@format@chapternum{\thechapter}
+                       \par\nobreak
+                       \vskip 20\p@
+                   \fi\fi
+                   \interlinepenalty\@M
+                   %\ifupmbookformat\doublespacing\fi
+                   \upm@format@chaptertitle{\nohyphens{#2}}\par\nobreak
+                   \vskip 80\p@
+                 }
+       }
+       %internal implementation of \chapter
+       \gdef\@makechapterhead#1{\upm@format@makechapterhead{\@empty}{#1}}
+       %internal implementation of \chapter*
+       \gdef\@makeschapterhead#1{\upm@format@makechapterhead{\relax}{#1}}
+\fi
+
+% SECTIONS
+\let\upm@format@sect@old\@sect
+\let\upm@format@ssect@old\@ssect
+
+% public implementation of sections.
+\renewcommand{\section}{\setcounter{upm@format@section@sectionlevel}{1}\@startsection{section}{1}{\z@}{-3.5ex \@plus -1ex \@minus -.2ex}{2.3ex \@plus.2ex}{\normalfont\Large\scshape}}
+\renewcommand{\subsection}{\setcounter{upm@format@section@sectionlevel}{2}\@startsection{subsection}{2}{\z@}{-3.25ex\@plus -1ex \@minus -.2ex}{1.5ex \@plus .2ex}{\normalfont\large\scshape}}
+\renewcommand{\subsubsection}{\setcounter{upm@format@section@sectionlevel}{3}\@startsection{subsubsection}{3}{\z@}{-3.25ex\@plus -1ex \@minus -.2ex}{1.5ex \@plus .2ex}{\normalfont\normalsize\scshape}}
+
+% internal implementations for sections.
+\gdef\@sect#1#2#3#4#5#6[#7]#8{\upm@format@sect@old{#1}{#2}{#3}{#4}{#5}{#6}[#7]{\upm@format@sectiontitle{\theupm@format@section@sectionlevel}{#8}}}
+\gdef\@ssect#1#2#3#4#5{\upm@format@ssect@old{#1}{#2}{#3}{#4}{\upm@format@sectiontitle{\theupm@format@section@sectionlevel}{#5}}}
+\gdef\@seccntformat#1{\upm@format@sectionnum{\theupm@format@section@sectionlevel}{\csname the#1\endcsname/}\quad}
+
+%----------------------------------------
+% PAGE LAYOUT
+%----------------------------------------
+
+% Change the factors for determining the element positions
+\renewcommand{\topfraction}{.99} % max fraction of floats at top
+\renewcommand{\bottomfraction}{.99} % max fraction of floats at bottom
+\renewcommand{\textfraction}{.5} % allow minimal text w. figs
+\renewcommand{\dbltopfraction}{.66} % fit big float above 2-col. text
+\renewcommand{\floatpagefraction}{0.99} % require fuller float pages | N.B.: floatpagefraction MUST be less than topfraction !!
+\renewcommand{\dblfloatpagefraction}{.66} % fit big float above 2-col. text
+
+% Update the format of the saved pages and sections
+\renewcommand{\sectionmark}[1]{\markright{\thesection\ \textsc{#1}}}
+\ifupmarticleformat\else
+\renewcommand{\chaptermark}[1]{\markboth{\textsc{#1}}{}}
+\renewcommand{\@mkboth}[2]{%
+    \let\upm@doc@MakeUppercase\MakeUppercase%
+    \gdef\MakeUppercase##1{##1}%
+    \chaptermark{#1}%
+    \let\MakeUppercase\upm@doc@MakeUppercase%
+    \let\upm@doc@MakeUppercase\relax%
+}
+\fi
+% Make sure that the page before a part or
+% a chapter title was empty
+\renewcommand{\cleardoublepage}{%
+  \clearpage%
+  \if@twoside\ifodd\c@page%
+  \else%
+  \thispagestyle{facingtochapter}%
+  \hbox{}\newpage%
+  \if@twocolumn\hbox{}\newpage%
+  \fi\fi\fi%
+}
+\newcommand{\ps@facingtochapter}{\ps@empty}
+
+%----------------------------------------
+% ADDITIONAL SECTIONS
+%----------------------------------------
+
+\gdef\upm@format@newsection@alignment{}
+
+%-----
+% Part without number but inside the TOC
+%\parttoc [toctitle]{title} % left-alignment inside TOC
+%\parttoc*[toctitle]{title} % right-alignment inside TOC
+\def\parttoc{\@ifstar%
+       {\gdef\upm@format@newsection@alignment{\protect\numberline{}}\expandafter\upm@format@newsection@part}%
+       {\gdef\upm@format@newsection@alignment{}\expandafter\upm@format@newsection@part}}
+\def\upm@format@newsection@part{\@ifnextchar [%
+       {\expandafter\upm@format@newsection@part@opt}%
+       {\expandafter\upm@format@newsection@part@nopt}}
+\def\upm@format@newsection@part@opt[#1]#2{%
+       \part*{#2\addcontentsline{toc}{part}{\upm@format@newsection@alignment{#1}}}%
+       \chaptermark{}%
+}
+\def\upm@format@newsection@part@nopt#1{%
+       \part*{#1\addcontentsline{toc}{part}{\upm@format@newsection@alignment{#1}}}%
+       \chaptermark{}%
+}
+
+%-----
+% Chapter without number but inside the TOC
+%\chaptertoc [toctitle]{title} % left-alignment inside TOC
+%\chaptertoc*[toctitle]{title} % right-alignment inside TOC
+\def\chaptertoc{\@ifstar%
+       {\gdef\upm@format@newsection@alignment{\protect\numberline{}}\expandafter\upm@format@newsection@chapter}%
+       {\gdef\upm@format@newsection@alignment{}\expandafter\upm@format@newsection@chapter}}
+
+\def\upm@format@newsection@chapter{\@ifnextchar[%
+       {\upm@format@newsection@chapter@a}%
+       {\upm@format@newsection@chapter@b}%
+}
+
+\def\upm@format@newsection@chapter@a[#1]#2{%
+       \expandafter\chapter*[#1]{#2}%
+       \addcontentsline{toc}{chapter}{\upm@format@newsection@alignment{#1}}%
+       \@ifundefined{minitoc}{}{%
+               \global\addtocounter{mtc}{1}%
+       }%
+}
+
+\def\upm@format@newsection@chapter@b#1{%
+       \expandafter\chapter*{#1}%
+       \addcontentsline{toc}{chapter}{\upm@format@newsection@alignment{#1}}%
+       \@ifundefined{minitoc}{}{%
+               \global\addtocounter{mtc}{1}%
+       }%
+}
+
+%-----
+% Section without number but inside the TOC
+%\sectiontoc [toctitle]{title} % left-alignment inside TOC
+%\sectiontoc*[toctitle]{title} % right-alignment inside TOC
+\def\sectiontoc{\@ifstar%
+       {\gdef\upm@format@newsection@alignment{\protect\numberline{}}\expandafter\upm@format@newsection@section}%
+       {\gdef\upm@format@newsection@alignment{}\expandafter\upm@format@newsection@section}}
+\def\upm@format@newsection@section{\@ifnextchar [%
+       {\expandafter\upm@format@newsection@section@opt}%
+       {\expandafter\upm@format@newsection@section@nopt}}
+\def\upm@format@newsection@section@opt[#1]#2{%
+       \section*{#2\addcontentsline{toc}{section}{\upm@format@newsection@alignment{#1}}}%
+}
+\def\upm@format@newsection@section@nopt#1{%
+       \section*{#1\addcontentsline{toc}{section}{\upm@format@newsection@alignment{#1}}}%
+}
+
+%-----
+% Subsection without number but inside the TOC
+%\subsectiontoc [toctitle]{title} % left-alignment inside TOC
+%\subsectiontoc*[toctitle]{title} % right-alignment inside TOC
+\def\subsectiontoc{\@ifstar%
+       {\gdef\upm@format@newsection@alignment{\protect\numberline{}}\expandafter\upm@format@newsection@subsection}%
+       {\gdef\upm@format@newsection@alignment{}\expandafter\upm@format@newsection@subsection}}
+\def\upm@format@newsection@subsection{\@ifnextchar [%
+       {\expandafter\upm@format@newsection@subsection@opt}%
+       {\expandafter\upm@format@newsection@subsection@nopt}}
+\def\upm@format@newsection@subsection@opt[#1]#2{%
+       \subsection*{#2\addcontentsline{toc}{subsection}{\upm@format@newsection@alignment{#1}}}%
+}
+\def\upm@format@newsection@subsection@nopt#1{%
+       \subsection*{#1\addcontentsline{toc}{subsection}{\upm@format@newsection@alignment{#1}}}%
+}
+
+%-----
+% Subsubsection without number but inside the TOC
+%\subsubsectiontoc [toctitle]{title} % left-alignment inside TOC
+%\subsubsectiontoc*[toctitle]{title} % right-alignment inside TOC
+\def\subsubsectiontoc{\@ifstar%
+       {\gdef\upm@format@newsection@alignment{\protect\numberline{}}\expandafter\upm@format@newsection@subsubsection}%
+       {\gdef\upm@format@newsection@alignment{}\expandafter\upm@format@newsection@subsubsection}}
+\def\upm@format@newsection@subsubsection{\@ifnextchar [%
+       {\expandafter\upm@format@newsection@subsubsection@opt}%
+       {\expandafter\upm@format@newsection@subsubsection@nopt}}
+\def\upm@format@newsection@subsubsection@opt[#1]#2{%
+       \subsubsection*{#2\addcontentsline{toc}{subsubsection}{\upm@format@newsection@alignment{#1}}}%
+}
+\def\upm@format@newsection@subsubsection@nopt#1{%
+       \subsubsection*{#1\addcontentsline{toc}{subsubsection}{\upm@format@newsection@alignment{#1}}}%
+}
+
+%-----
+% Chapter with different titles for in the TOC, the headers and on the pages
+%\chapterfull[in toc]{on page}{in header} % with number
+%\chapterfull*[in toc]{on page}{in header} % without number
+\def\chapterfull{\@ifstar%
+       {\gdef\upm@format@newsection@thesectionmacro{\chapter*}\upm@format@newsection@chapterfull}%
+       {\gdef\upm@format@newsection@thesectionmacro{\chapter}\upm@format@newsection@chapterfull}%
+}
+
+\def\upm@format@newsection@chapterfull{\@ifnextchar[%
+       \upm@format@newsection@chapterfull@a%
+       \upm@format@newsection@chapterfull@b%
+}
+
+\def\upm@format@newsection@chapterfull@a[#1]#2#3{%
+       \upm@format@newsection@thesectionmacro[#1]{#2}%
+       \chaptermark{#3}%
+}
+
+\def\upm@format@newsection@chapterfull@b#1#2{%
+       \upm@format@newsection@thesectionmacro{#1}%
+       \chaptermark{#2}%
+}
+
+%-----
+% Section with different titles for in the TOC, the headers and on the pages
+%\sectionfull[in toc]{on page}{in header} % with number
+%\sectionfull*[in toc]{on page}{in header} % without number
+\def\sectionfull{\@ifstar%
+       {\gdef\upm@format@newsection@thesectionmacro{\section*}\upm@format@newsection@sectionfull}%
+       {\gdef\upm@format@newsection@thesectionmacro{\section}\upm@format@newsection@sectionfull}%
+}
+
+\def\upm@format@newsection@sectionfull{\@ifnextchar[%
+       \upm@format@newsection@sectionfull@a%
+       \upm@format@newsection@sectionfull@b%
+}
+
+\def\upm@format@newsection@sectionfull@a[#1]#2#3{%
+       \upm@format@newsection@thesectionmacro[#1]{#2}%
+       \global\sectionmark{#3}%
+}
+
+\def\upm@format@newsection@sectionfull@b#1#2{%
+       \upm@format@newsection@thesectionmacro{#1}%
+       \global\sectionmark{#2}%
+}
+
+%----------------------------------------
+% BIBLIOGRAPHY
+%----------------------------------------
+
+%-----
+%\bibsize{size}
+\newcommand{\bibsize}[1]{\gdef\upm@bibsize{#1}}
+
+\gdef\upm@bibsize{\small}
+
+\gdef\@biblabel#1{{\upm@bibsize{[#1]}}}
+
+\gdef\@lbibitem[#1]#2{\item[\@biblabel{#1}\hfill]\upm@bibsize\if@filesw{%
+       \let\protect\noexpand\immediate\write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces}
+
+\gdef\@bibitem#1{\item\upm@bibsize\if@filesw%
+       \immediate\write\@auxout{\string\bibcite{#1}{\the\value{\@listctr}}}\fi\ignorespaces}
+
+
+%----------------------------------------
+% TABLE OF CONTENT
+%----------------------------------------
+\setcounter{secnumdepth}{3}
+\setcounter{tocdepth}{3}
+
+% Change the color of the TOC for the "dotted" lines
+%\let\upm@format@dottedtocline@old\@dottedtocline
+%\gdef\@dottedtocline#1#2#3#4#5{%
+%      %{depth}{left margin}{right margin}{text}{page number}
+%      \upm@format@dottedtocline@old{#1}{#2}{#3}{#4}{#5}%
+%}
+
+% Change the color of the TOC for the parts
+\@ifundefined{l@part}{}{
+\let\upm@format@l@part@old\l@part
+\renewcommand*\l@part[2]{%
+       %{text}{page number}
+       \upm@format@l@part@old{\textcolor{parttitlecolor}{#1}}{\textcolor{parttitlecolor}{#2}}%
+}
+}
+
+% Change the color of the TOC for the chapters
+\@ifundefined{l@chapter}{}{
+\let\upm@format@l@chapter@old\l@chapter
+\renewcommand*\l@chapter[2]{%
+       %{text}{page number}
+       \upm@format@l@chapter@old{\textcolor{chaptertitlecolor}{#1}}{\textcolor{chaptertitlecolor}{#2}}%
+}
+}
+
+% Overide the color and font configurations of the MINITOC package
+\AtBeginDocument{
+       \@ifundefined{minitoc}{}{%
+               % Chapter
+               \gdef\mtifont{\normalfont\large\upshape\bfseries\color{chaptertitlecolor}}
+               % Section
+               \gdef\mtcSfont{\normalfont\small\upshape\bfseries\color{sectiontitlecolor}}
+               % Sub-Section and SubSub-Section
+               \gdef\mtcSSfont{\normalfont\small\upshape\mdseries\normalcolor}
+               \global\let\mtcSSSfont\mtcSSfont
+       }
+}
+
+%----------------------------------------
+% ENUMERATIONS
+%----------------------------------------
+\newcounter{upm@fmt@savedcounter}
+
+\newcommand{\savecounter}[1]{%
+       \setcounter{upm@fmt@savedcounter}{\value{#1}}%
+}
+\newcommand{\restorecounter}[1]{%
+       \setcounter{#1}{\theupm@fmt@savedcounter}%
+}
+\newcommand{\saveenumcounter}{\savecounter{\@enumctr}}
+\newcommand{\restoreenumcounter}{\restorecounter{\@enumctr}}
+\newcommand{\setenumcounter}[1]{\setcounter{\@enumctr}{#1}\addtocounter{\@enumctr}{-1}}
+\newcommand{\getenumcounter}{\value{\@enumctr}}
+
+%----------------------------------------
+% FOOTNOTE
+%----------------------------------------
+
+\gdef\upm@footnoteref#1{\upm@textsuperscript{#1}}
+\gdef\upm@footnotepageref#1#2{\upm@textsuperscript{{#1\tiny(#2)}}}
+
+\def\upm@savefootnote#1#2{%
+       \footnote{#1\label{\upm@protect{footnote:#2}}}%
+       \upm@nameundef{footnote:#2:cmd}%
+}
+\def\upm@savefootnotestar#1#2{%
+       \upm@namedef{footnote:#2:cmd}{\upm@savefootnote{#1}{#2}}%
+}
+
+\DeclareRobustCommand\savefootnote{\@ifstar\upm@savefootnotestar\upm@savefootnote}
+
+\def\upm@reffootnote#1{%
+       \upm@ifdefinedname{footnote:#1:cmd}{%
+               \upm@nameuse{footnote:#1:cmd}}{%
+               \upm@footnoteref{\upm@getref{\upm@protect{footnote:#1}}}%
+       }%
+       \xspace%
+} 
+\def\upm@reffootnotestar#1{%
+       \upm@ifdefinedname{footnote:#1:cmd}{%
+               \upm@nameuse{footnote:#1:cmd}}{%
+               \xdef\upm@tmp@tmp{\upm@protect{footnote:#1}}%
+               \upm@footnotepageref{\expandafter\upm@getref{\upm@tmp@tmp}}{\expandafter\upm@getpageref{\upm@tmp@tmp}}%
+               \global\let\upm@tmp@tmp\relax%
+       }%
+       \xspace%
+} 
+
+\DeclareRobustCommand\reffootnote{\@ifstar\upm@reffootnotestar\upm@reffootnote}
+
+%----------------------------------------
+% IMAGES IN PARAGRAPHS
+%----------------------------------------
+
+\newenvironment{umlinpar}[2][width=.45\linewidth]{%
+\begin{window}[0,r,{\mbox{\hspace{.5cm}\includegraphics[#1]{#2}\vspace{.5cm}}},{}]
+}{%
+\end{window}}
+
+%----------------------------------------
+% DATE
+%----------------------------------------
+
+%Build a date this a supported format
+%\makedate{day}{month}{year}
+\let\makedate\upm@format@lang@makedate
+
+%-----
+%Replies the year corresponding to the given supported date
+%\extractyear{date}
+\let\extractyear\upm@format@lang@extractyear
+
+%-----
+%Replies the month corresponding to the given supported date
+%\extractmonth{date}
+\let\extractmonth\upm@format@lang@extractmonth
+
+%-----
+%Replies the day corresponding to the given supported date
+%\extractday{date}
+\let\extractday\upm@format@lang@extractday
+
+% Redefine the today function
+\AtBeginDocument{\global\edef\today{\makedate{\the\day}{\the\month}{\the\year}}}
+
+%----------------------------------------
+% PEOPLE NAME
+%----------------------------------------
+
+\def\makenamespacing#1{%
+       \upm@format@makenamespacing{#1}\xspace%
+}
+
+\def\upm@format@makenamespacing#1{%
+       \upm@foreach.\in#1\do{%
+               \ignorespaces\upm@foreach@term.\,%
+       }{%
+               \ignorespaces\upm@foreach@term%
+       }%
+}
+
+\gdef\upm@format@people@title#1{\textsc{#1}}
+\def\upm@format@firstname@format#1{%
+       {\smaller\textsc{\upm@format@makenamespacing{#1}}}%
+}
+\def\upm@format@von@format#1{\mbox{\smaller\ignorespaces#1}}
+\def\upm@format@lastname@format#1{\textsc{\ignorespaces#1}}
+
+%\upmmakename[von]{firstname}{lastname}{separator}
+\newcommand{\upmmakename}[4][\relax]{%
+       \ifx#1\relax%
+               {\upm@format@firstname@format{#2}#4\upm@format@lastname@format{#3}}%
+       \else%
+               {\upm@format@firstname@format{#2}#4\upm@format@von@format{#1}#4\upm@format@lastname@format{#3}}%
+       \fi%
+       \xspace%
+}
+
+%\makename[von]{firstname}{lastname}
+\newcommand{\makename}[3][\relax]{%
+       \upmmakename[#1]{#2}{#3}{\ }%
+}
+
+%\makelastname[von]{lastname}
+\newcommand{\makelastname}[2][\relax]{%
+       \ifx#1\relax%
+               \upm@format@lastname@format{#2}%
+       \else%
+               \upm@format@von@format{#1}\ \upm@format@lastname@format{#2}%
+       \fi%
+       \xspace%
+}
+
+%\makefirstname{firstname}
+\newcommand{\makefirstname}[1]{%
+       \upm@format@firstname@format{#1}\xspace%
+}
+
+%\prname[von]{firstname}{lastname}
+%\prname*[von]{firstname}{lastname}
+\def\prname{\@ifstar\upm@prnamestar\upm@prname}
+\newcommand{\upm@prname}[3][\relax]{%
+       \upm@format@people@title{\upm@format@lang@professor}\,\upmmakename[#1]{#2}{#3}{\ }%
+}
+\newcommand{\upm@prnamestar}[3][\relax]{%
+       \upmmakename[#1]{#2}{#3}{\ }, \upm@format@people@title{\upm@format@lang@professor}%
+}
+
+%\drname[von]{firstname}{lastname}
+%\drname*[von]{firstname}{lastname}
+\def\drname{\@ifstar\upm@drnamestar\upm@drname}
+\newcommand{\upm@drname}[3][\relax]{%
+       \upm@format@people@title{\upm@format@lang@doctor}\,\upmmakename[#1]{#2}{#3}{\ }%
+}
+\newcommand{\upm@drnamestar}[3][\relax]{%
+       \upmmakename[#1]{#2}{#3}{\ }, \upm@format@people@title{\upm@format@lang@doctor}%
+}
+
+%\phdname[von]{firstname}{lastname}
+%\phdname*[von]{firstname}{lastname}
+\def\phdname{\@ifstar\upm@phdnamestar\upm@phdname}
+\newcommand{\upm@phdname}[3][\relax]{%
+       \upm@format@people@title{\upm@format@lang@phdoctor}\,\upmmakename[#1]{#2}{#3}{\ }%
+}
+\newcommand{\upm@phdnamestar}[3][\relax]{%
+       \upmmakename[#1]{#2}{#3}{\ }, \upm@format@people@title{\upm@format@lang@phdoctor}%
+}
+
+%\scdname[von]{firstname}{lastname}
+%\scdname*[von]{firstname}{lastname}
+\def\scdname{\@ifstar\upm@scdnamestar\upm@scdname}
+\newcommand{\upm@scdname}[3][\relax]{%
+       \upm@format@people@title{\upm@format@lang@scdoctor}\,\upmmakename[#1]{#2}{#3}{\ }%
+}
+\newcommand{\upm@scdnamestar}[3][\relax]{%
+       \upmmakename[#1]{#2}{#3}{\ }, \upm@format@people@title{\upm@format@lang@scdoctor}%
+}
+
+%\mdname[von]{firstname}{lastname}
+%\mdname*[von]{firstname}{lastname}
+\def\mdname{\@ifstar\upm@mdnamestar\upm@mdname}
+\newcommand{\upm@mdname}[3][\relax]{%
+       \upm@format@people@title{\upm@format@lang@mdoctor}\,\upmmakename[#1]{#2}{#3}{\ }%
+}
+\newcommand{\upm@mdnamestar}[3][\relax]{%
+       \upmmakename[#1]{#2}{#3}{\ }, \upm@format@people@title{\upm@format@lang@mdoctor}%
+}
+
+%\pengname[von]{firstname}{lastname}
+%\pengname*[von]{firstname}{lastname}
+\def\pengname{\@ifstar\upm@pengnamestar\upm@pengname}
+\newcommand{\upm@pengname}[3][\relax]{%
+       \upm@format@people@title{\upm@format@lang@professionalengineer}\,\upmmakename[#1]{#2}{#3}{\ }%
+}
+\newcommand{\upm@pengnamestar}[3][\relax]{%
+       \upmmakename[#1]{#2}{#3}{\ }, \upm@format@people@title{\upm@format@lang@professionalengineer}%
+}
+
+%\iengname[von]{firstname}{lastname}
+%\iengname*[von]{firstname}{lastname}
+\def\iengname{\@ifstar\upm@iengnamestar\upm@iengname}
+\newcommand{\upm@iengname}[3][\relax]{%
+       \upm@format@people@title{\upm@format@lang@incorporatedengineer}\,\upmmakename[#1]{#2}{#3}{\ }%
+}
+\newcommand{\upm@iengnamestar}[3][\relax]{%
+       \upmmakename[#1]{#2}{#3}{\ }, \upm@format@people@title{\upm@format@lang@incorporatedengineer}%
+}
+
+%----------------------------------------
+% INLINE ENUMERATION
+%----------------------------------------
+
+\newcounter{@@upm@fmt@inlineenumeration}
+\newcommand{\inlineenumerationlabel}[1]{(#1)}
+\let\upm@fmt@inlineenum@numberformat\roman
+\newenvironment{inlineenumeration}{%
+       \begingroup%
+       \let\upm@fmt@inlineenum@currentlabel\@currentlabel%
+       \renewcommand{\item}{\xdef\@currentlabel{\upm@fmt@inlineenum@numberformat{@@upm@fmt@inlineenumeration}}{\inlineenumerationlabel{\@currentlabel}{\addtocounter{@@upm@fmt@inlineenumeration}{1}}}~}%
+       \setcounter{@@upm@fmt@inlineenumeration}{1}%
+}{%
+       \global\let\@currentlabel\upm@fmt@inlineenum@currentlabel%
+       \endgroup%
+}
+
+%----------------------------------------
+% DESCRIPTION LIST WITH NUMBERS
+%----------------------------------------
+
+\newcounter{@upm@fmt@enumdescription@cnt@}
+\gdef\upm@fmt@enumdescription@savedlabel{}
+\gdef\upm@fmt@enumdescription@savedcounter{}
+\newcommand{\upm@fmt@enumdescription@fmt@}[1]{}
+\newcommand{\enumdescriptionlabel}[1]{\textbf{#1}}
+\newcommand{\enumdescriptioncounterseparator}{~-~}
+\newcommand{\enumdescriptionlabelseparator}{\upm@column@char}
+% #1: counter style.
+% #2: text before the counter.
+% #3: text after the counter.
+% #4: text between the counter and the description.
+% #5: text between the description and the rest of the text.
+% #6: text between the counter (no description) and the rest of the text.
+\newenvironment{upm@fmt@enumdescription}[6]{%
+       \begin{list}{}{%
+               \renewcommand{\upm@fmt@enumdescription@savedlabel}{\@currentlabel}%
+               \edef\upm@fmt@enumdescription@savedcounter{\the@upm@fmt@enumdescription@cnt@}%
+               \setcounter{@upm@fmt@enumdescription@cnt@}{1}%
+               \ifthenelse{\equal{#1}{a}}{%
+                       \renewcommand{\upm@fmt@enumdescription@fmt@}[1]{#2\alph{##1}#3}%
+               }{%
+                       \ifthenelse{\equal{#1}{A}}{%
+                               \renewcommand{\upm@fmt@enumdescription@fmt@}[1]{#2\Alph{##1}#3}%
+                       }{%
+                               \ifthenelse{\equal{#1}{i}}{%
+                                       \renewcommand{\upm@fmt@enumdescription@fmt@}[1]{#2\roman{##1}#3}%
+                               }{%
+                                       \ifthenelse{\equal{#1}{I}}{%
+                                               \renewcommand{\upm@fmt@enumdescription@fmt@}[1]{#2\Roman{##1}#3}%
+                                       }{%
+                                               \renewcommand{\upm@fmt@enumdescription@fmt@}[1]{#2\arabic{##1}#3}%
+                                       }%
+                               }%
+                       }%
+               }%
+               \renewcommand{\makelabel}[1]{%
+                       \xdef\@currentlabel{\upm@fmt@enumdescription@fmt@{@upm@fmt@enumdescription@cnt@}}%
+                       \enumdescriptionlabel{\@currentlabel#4##1\ifthenelse{\equal{a##1}{a}}{#6}{#5}}{\addtocounter{@upm@fmt@enumdescription@cnt@}{1}}}%
+               \expandafter\settowidth{\labelwidth}{#2iii#3}%
+       }
+}{%
+       \global\let\@currentlabel\upm@fmt@enumdescription@savedlabel%
+       \setcounter{@upm@fmt@enumdescription@cnt@}{\upm@fmt@enumdescription@savedcounter}%
+       \end{list}%
+}
+\newenvironment{enumdescriptionx}[3][i]{%
+       \begin{upm@fmt@enumdescription}{#1}{#2}{#3}{\enumdescriptioncounterseparator}{\enumdescriptionlabelseparator}{\enumdescriptionlabelseparator}%
+}{%
+       \end{upm@fmt@enumdescription}%
+}
+\newenvironment{enumdescription}[1][i]{%
+       \begin{upm@fmt@enumdescription}{#1}{}{}{\enumdescriptioncounterseparator}{\enumdescriptionlabelseparator}{\enumdescriptionlabelseparator}%
+}{%
+       \end{upm@fmt@enumdescription}%
+}
+
+%% Issue #14: enumerate behaves as enumdescription
+\ifupm@use@override@standard@lists
+       
+       \AtBeginDocument{
+               \message{*** Overriding the 'enumerate' environment. Pass option 'standardlists' for avoiding this override.}
+               \global\let\enumerate\@undefined
+               \global\let\endenumerate\@undefined
+               \global\NewEnviron{enumerate}[1][1\string.~]{%
+                       % Parse the parameter for extracting the type of the enumeration, the prefix and the postfix
+                       \in@{a}{#1}\ifin@
+                               \gdef\upm@fmt@enumerate@style{a}%
+                               \def\reserved@a##1a##2\@nil{%
+                                       \def\upm@fmt@enumerate@prefix{##1}%
+                                       \def\upm@fmt@enumerate@postfix{##2}%
+                               }%
+                               \reserved@a#1\@nil%
+                       \else\in@{1}{#1}\ifin@
+                               \gdef\upm@fmt@enumerate@style{1}%
+                               \def\reserved@a##11##2\@nil{%
+                                       \def\upm@fmt@enumerate@prefix{##1}%
+                                       \def\upm@fmt@enumerate@postfix{##2}%
+                               }%
+                               \reserved@a#1\@nil%
+                       \else\in@{A}{#1}\ifin@
+                               \gdef\upm@fmt@enumerate@style{A}%
+                               \def\reserved@a##1A##2\@nil{%
+                                       \def\upm@fmt@enumerate@prefix{##1}%
+                                       \def\upm@fmt@enumerate@postfix{##2}%
+                               }%
+                               \reserved@a#1\@nil%
+                       \else\in@{i}{#1}\ifin@
+                               \gdef\upm@fmt@enumerate@style{i}%
+                               \def\reserved@a##1i##2\@nil{%
+                                       \def\upm@fmt@enumerate@prefix{##1}%
+                                       \def\upm@fmt@enumerate@postfix{##2}%
+                               }%
+                               \reserved@a#1\@nil%
+                       \else\in@{I}{#1}\ifin@
+                               \gdef\upm@fmt@enumerate@style{I}%
+                               \def\reserved@a##1I##2\@nil{%
+                                       \def\upm@fmt@enumerate@prefix{##1}%
+                                       \def\upm@fmt@enumerate@postfix{##2}%
+                               }%
+                               \reserved@a#1\@nil%
+                       \else%
+                               \errmessage{Invalid format of the enumerate counter}
+                       \fi\fi\fi\fi\fi%
+                       \protected@xdef\upm@tmp{\protect\protect\protect\begin{upm@fmt@enumdescription}{\upm@fmt@enumerate@style}{\upm@fmt@enumerate@prefix}{\upm@fmt@enumerate@postfix}{}{\protect\enumdescriptionlabelseparator}{}}%
+                       %
+                       \upm@tmp%
+                       %\protect\begin{upm@fmt@enumdescription}{#1}{}{\string.~}{}{\enumdescriptionlabelseparator}{}%
+                       \BODY%
+                       \protect\end{upm@fmt@enumdescription}%
+               }
+       }
+\fi
+
+%----------------------------------------
+% DESCRIPTION LIST WITH BULLETS
+%----------------------------------------
+\ifupm@use@override@standard@lists
+       \gdef\upm@fmt@itemizeddescription@separator{\iflanguage{french}{ :}{:}\ }
+       \newcommand{\upm@fmt@itemizeddescription@formatdescription}[1]{\textbf{#1}}
+       \newcommand{\upm@fmt@itemizeddescription@desc}[2]{%
+               \upm@fmt@itemizeddescription@formatdescription{#1#2}%
+       }
+       \let\upm@fmt@olditem\item
+       \let\upm@item@param\upm@fmt@olditem
+       \let\upm@item@noparam\upm@fmt@olditem
+       \def\item{\@ifnextchar[\upm@item@param\upm@item@noparam}
+       \AtBeginDocument{
+               \message{*** Overriding the 'description' environment. Pass option 'standardlists' for avoiding this override.}
+               \global\let\description\@undefined
+               \global\let\enddescription\@undefined
+               \global\NewEnviron{description}[1][\upm@fmt@itemizeddescription@separator]{
+                       \begin{itemize}%
+                       \renewcommand{\upm@item@param}[1][]{\upm@fmt@olditem \upm@fmt@itemizeddescription@desc{##1}{#1}}%
+                       \renewcommand{\upm@item@noparam}{\upm@fmt@olditem }%
+                       \BODY%
+                       \end{itemize}%
+               }
+       }
+\fi
+
+%----------------------------------------
+% SIZE MANAGEMENT
+%----------------------------------------
+\newenvironment{upmfontsize}[1]{%
+       \begingroup%
+       \let\upm@Huge\Huge%
+       \let\upm@huge\huge%
+       \let\upm@normalsize\normalsize%
+       \let\upm@small\small%
+       \let\upm@scriptsize\scriptsize%
+       \let\upm@footnotesize\footnotesize%
+       \let\upm@tiny\tiny%
+       %
+       \ifx#1\Huge%
+               \let\Huge\upm@Huge%
+               \let\huge\upm@Huge%
+               \let\small\upm@huge%
+               \let\scriptsize\upm@normalsize%
+               \let\footnotesize\upm@small%
+               \let\tiny\upm@scriptsize%
+       \else\ifx#1\huge%
+               \let\Huge\upm@Huge%
+               \let\huge\upm@Huge%
+               \let\small\upm@normalsize%
+               \let\scriptsize\upm@small%
+               \let\footnotesize\upm@scriptsize%
+               \let\tiny\upm@footnotesize%
+       \else\ifx#1\small%
+               \let\Huge\upm@huge%
+               \let\huge\upm@normalsize%
+               \let\small\upm@scriptsize%
+               \let\scriptsize\upm@footnotesize%
+               \let\footnotesize\upm@tiny%
+               \let\tiny\upm@tiny%
+       \else\ifx#1\scriptsize%
+               \let\Huge\upm@normalsize%
+               \let\huge\upm@small%
+               \let\small\upm@footnotesize%
+               \let\scriptsize\upm@tiny%
+               \let\footnotesize\upm@tiny%
+               \let\tiny\upm@tiny%
+       \else\ifx#1\footnotesize%
+               \let\Huge\upm@small%
+               \let\huge\upm@scriptsize%
+               \let\small\upm@tiny%
+               \let\scriptsize\upm@tiny%
+               \let\footnotesize\upm@tiny%
+               \let\tiny\upm@tiny%
+       \else\ifx#1\tiny%
+               \let\Huge\upm@scriptsize%
+               \let\huge\upm@footnotesize%
+               \let\small\upm@tiny%
+               \let\scriptsize\upm@tiny%
+               \let\footnotesize\upm@tiny%
+               \let\tiny\upm@tiny%
+       \fi%
+       \fi%
+       \fi%
+       \fi%
+       \fi%
+       \fi%
+       #1%
+}{\endgroup}
+
+%----------------------------------------
+% FRAMED MINIPAGE
+%----------------------------------------
+
+\newsavebox{\upm@framed@minipage}
+%\begin{framedminipage}{width}...\end{framedminipage}
+\newenvironment{framedminipage}[1]{%
+       \begin{lrbox}{\upm@framed@minipage}\begin{minipage}{#1}%
+       }{%
+       \end{minipage}\end{lrbox}\fbox{\usebox{\upm@framed@minipage}}}
+
+%\begin{framedcolorminipage}{width}{border}{background}...\end{framedcolorminipage}
+\newenvironment{framedcolorminipage}[3]{%
+       \newcommand{\upm@framed@minipage@border}{#2}%
+       \newcommand{\upm@framed@minipage@background}{#3}%
+       \begin{lrbox}{\upm@framed@minipage}\begin{minipage}{#1}%
+       }{%
+       \end{minipage}\end{lrbox}\fcolorbox{\upm@framed@minipage@border}{\upm@framed@minipage@background}{\usebox{\upm@framed@minipage}}}
+
+%----------------------------------------
+% HIGHLIGH BOXES
+%----------------------------------------
+
+\newsavebox{\upm@highlight@box@save}
+
+\newenvironment{upm@highligh@box}[2]{%
+       \par
+       \vspace{.5cm}
+       \begin{tabular}{|p{#1}|}
+       \hline
+       \begin{window}[0,l,{\mbox{\includegraphics[width=1cm]{#2}}},{}]
+}{%
+       \end{window}\\ \hline \end{tabular}
+       \vspace{.5cm}
+       \par
+}
+
+\newenvironment{upmcaution}[1][\linewidth]{%
+       \upm@highligh@box{#1}{caution.png}%
+}{%
+       \endupm@highligh@box%
+}
+
+\newenvironment{upminfo}[1][\linewidth]{%
+       \upm@highligh@box{#1}{info.png}%
+}{%
+       \endupm@highligh@box%
+}
+
+\newenvironment{upmquestion}[1][\linewidth]{%
+       \upm@highligh@box{#1}{question.png}%
+}{%
+       \endupm@highligh@box%
+}
+
+%----------------------------------------
+% PROVIDE URL MACROS, WHICH WILL BE
+% OVERRIDDEN BY THE DOCUMENT CLASS
+%----------------------------------------
+
+\newcommand{\url}[2][]{\texttt{#2}}
+\newcommand{\href}[3][]{\texttt{#3}}
+
+%----------------------------------------
+% Exponents and Indices
+%----------------------------------------
+\renewcommand{\textup}[1]{\textsuperscript{#1}\xspace}
+\def\@textsubscript#1{%
+  {\m@th\ensuremath{_{\mbox{\fontsize\sf@size\z@#1}}}}}
+\newcommand{\textsubscript}[1]{\@textsubscript{\selectfont#1}}
+\newcommand{\textdown}[1]{\textsubscript{#1}\xspace}
+
+
+%----------------------------------------
+% UNDERLINE
+%----------------------------------------
+
+\let\upm@oldunderline\underline
+\renewcommand{\underline}[1]{\upm@oldunderline{\smash{#1}}}
+
+%----------------------------------------
+% ENVIRONMENT FOR DEFINITIONS
+%----------------------------------------
+
+%-----
+% Defining the style for the definitions
+\colorlet{definitionbackground}{backtableheader}
+\colorlet{definitionheaderforeground}{fronttableheader}
+\colorlet{definitionborder}{fronttableheader}
+\colorlet{definitiontextforeground}{fronttableheader}
+
+\iflanguage{french}{
+       \gdef\definitionname{D\'efinition}
+       \gdef\listdefinitionname{Liste des d\'efinitions}
+}{
+       \gdef\definitionname{Definition}
+       \gdef\listdefinitionname{List of Definitions}
+}
+
+\gdef\upm@definition@width{.9\linewidth}
+\gdef\upm@definition@rule@width{\linewidth}
+\gdef\upm@definition@rule@height{0.4pt}
+
+\newtheoremstyle{upmdefinition}% name of the style to be used
+         {}% measure of space to leave above the theorem. E.g.: 3pt
+         {}% measure of space to leave below the theorem. E.g.: 3pt
+         {\normalfont}% name of font to use in the body of the theorem
+         {}% measure of space to indent the head
+         {\normalfont\bfseries}% name of head font
+         {\\[-1em]{\textcolor{definitionborder}{\rule{\upm@definition@rule@width}{\upm@definition@rule@height}}}}% punctuation between head and body
+         {\newline}% space after theorem head
+         {\textcolor{definitionheaderforeground}{\thmname{#1}\thmnumber{~#2}\upm@column@char\thmnote{ #3}}\vspace{.25em}}% Manually specify head
+
+%-----
+% Declare a theorem with the standard UPM style
+% \declareupmtheorem[theorem_style]{name}{label}{list_label}
+\newcommand{\declareupmtheorem}[4][upmdefinition]{%
+       \global\declaretheorem[name={#3},style=#1]{upm#2}%
+       \global\newenvironment{#2}[1][]{%
+               \par\vspace{\parsep}\centering\begin{framedcolorminipage}{\upm@definition@width}{definitionborder}{definitionbackground}%
+               \color{definitiontextforeground}%
+               \begin{upm#2}[##1]%
+       }{%
+               \end{upm#2}%
+               \end{framedcolorminipage}\vspace{\parsep}\par%
+       }%
+       % Check the version of the thmtools because the TeXLive distribution
+       % gives a too old version.
+       \@ifpackagelater{thm-listof}{2012/05/03}{%
+               \global\@namedef{listof#2s}{%
+                       \global\let\upm@definition@old@listtheoremname\listtheoremname%
+                       \global\let\upm@definition@old@upmtheoremopt\upm@definition@upmtheoremopt%
+                       \gdef\listtheoremname{#4}%
+                       \renewcommand{\upm@definition@upmtheoremopt}[1]{}%
+                       \expandafter\listoftheorems[ignoreall,show={upm#2}]%
+                       \global\let\listtheoremname\upm@definition@old@listtheoremname%
+                       \global\let\upm@definition@upmtheoremopt\upm@definition@old@upmtheoremopt%
+               }%
+       }{%
+               \@latex@warning{Your version of the thmtools is too old. I recommend you to install the version 2012/05/04, or later.}
+               \global\@namedef{listof#2s}{%
+                       \global\let\upm@tmp\listtheoremname%
+                       \gdef\listtheoremname{#4}%
+                       \listoftheorems%
+                       \global\let\listtheoremname\upm@tmp%
+               }%
+       }
+}
+\@onlypreamble\declareupmtheorem
+
+\gdef\thmtformatoptarg#1{\upm@column@char\ #1}%
+
+% Permits to define an part of the definition's name that is
+% rendered only in core part of the document, not in the
+% list of theorems
+\gdef\upm@definition@upmtheoremopt#1{#1}
+\gdef\upmtheoremopt#1{\protect\upm@definition@upmtheoremopt{#1}}
+
+%-----
+% Declare the definition environment
+\declareupmtheorem{definition}{\definitionname}{\listdefinitionname}
+
+%----------------------------------------
+% ENVIRONMENT FOR EMPHBOX
+%----------------------------------------
+
+%-----
+% Defining the style for the emphbox
+\colorlet{emphboxbackground}{backtableheader}
+\colorlet{emphboxborder}{fronttableheader}
+\colorlet{emphboxtext}{fronttableheader}
+
+\NewEnviron{emphbox}[1][\linewidth]{%
+       \begin{framedcolorminipage}{#1}{emphboxborder}{emphboxbackground}%
+               \centering\color{emphboxtext}\BODY%
+       \end{framedcolorminipage}%
+}
+
+\endinput
diff --git a/upmethodology-frontpage.sty b/upmethodology-frontpage.sty
new file mode 100644 (file)
index 0000000..133786f
--- /dev/null
@@ -0,0 +1,230 @@
+% Front page for Unified Process Methodology
+%
+% Copyright (c) 2006-2009 Stephane GALLAND <galland@arakhne.org>
+% 
+% This program is free library; you can redistribute it and/or modify
+% it under the terms of the GNU Lesser General Public License as
+% published by the Free Software Foundation; either version 3 of the
+% License, or any later version.
+%
+% This library 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
+% Lesser General Public License for more details.
+%
+% You should have received a copy of the GNU Lesser General Public
+% License along with this library; see the file COPYING.  If not,
+% write to the Free Software Foundation, Inc., 59 Temple Place - Suite
+% 330, Boston, MA 02111-1307, USA.
+%
+
+\global\edef\upm@package@fp@ver{2009/10/30}
+
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{upmethodology-frontpage}[\upm@package@fp@ver]
+
+\RequirePackage{upmethodology-p-common}
+
+%-----
+% Locales
+\def\upm@front@lang@english{
+  \gdef\upm@lang@@{\message{**** upmethodology-frontpage is using English language ****}}%
+  \gdef\upm@lang@front@authors{\upm@lang@document@authors}
+}
+\def\upm@front@lang@french{
+  \gdef\upm@lang@@{\message{**** upmethodology-frontpage is using French language ****}}%
+  \gdef\upm@lang@front@authors{\upm@lang@document@authors}
+}
+%----------------------------------------
+% OPTIONS
+%----------------------------------------
+\DeclareOption{french}{%
+  \upm@front@lang@french
+}
+\DeclareOption{francais}{%
+  \upm@front@lang@french
+}
+\DeclareOption{english}{%
+  \upm@front@lang@english
+}
+\ExecuteOptions{english}
+\ProcessOptions
+\upm@lang@@
+
+\RequirePackage{upmethodology-extension}
+\RequirePackage{upmethodology-document}
+
+% Declare the temporary dimensions
+\newdimen\upm@front@tmpa
+\newdimen\upm@front@tmpb
+
+%-----
+% String format
+\def\upm@front@force@single@spacing#1{{\begin{singlespace}#1\end{singlespace}}}
+\def\upm@front@maintitle@fmt#1{\Huge \scshape #1}
+\def\upm@front@project@fmt#1{\textbf{\Large #1}}
+\def\upm@front@subproject@fmt#1{\textbf{\large #1}}
+\def\upm@front@document@fmt#1{\textbf{\normalsize #1}}
+\def\upm@front@info@fmt#1{{\normalsize #1}}
+\def\upm@front@author@fmt#1{%
+       \begin{upmfontsize}{\small}#1\end{upmfontsize}%
+       }
+
+%-----
+% Define the command to put the title with a classic layout
+\newcommand{\upm@front@layout@classic}{%
+    \message{************ USE CLASSIC FRONT COVER}
+    \begin{titlepage}%
+       \begin{center}
+
+               % Illustration picture
+               \Ifelsedefined{frontillustration}{%
+                       \noindent\expandafter\includegraphics[width=\Get{frontillustrationsize}\expandafter\linewidth]{\Get{frontillustration}}
+               }{%
+                       \Ifdefined{logo}{\noindent\vfill\expandafter\includegraphics[width=.4\linewidth]{\Get{logo}}}%
+               }%
+
+               % Project name
+               \vspace{1cm}
+               \upm@front@force@single@spacing{\upm@front@maintitle@fmt{\theupmproject}}
+               \vspace{1cm}
+
+               % Document title
+               \noindent\rule{\linewidth}{1mm} \\
+               \noindent\raggedleft\upm@front@project@fmt{\theupmproject} \\
+               \Ifnotempty{\theupmsubproject}{\noindent\raggedleft\upm@front@subproject@fmt{\theupmsubproject}\\}
+               \vspace{.5cm}
+               \noindent\raggedleft\upm@front@document@fmt{\theupmdocname} \\
+               \noindent\rule{\linewidth}{1mm} \\
+
+               \vspace{1cm}
+
+               % Document information
+               \noindent\raggedleft\begin{tabular}{rr}
+                       \upm@front@info@fmt{\upm@lang@docref:} & \upm@front@info@fmt{\theupmdocref} \\
+                       \upm@front@info@fmt{\upm@lang@version:} & \upm@front@info@fmt{\theupmversion} \\
+                       \upm@front@info@fmt{\upm@lang@lastupdate@short:} & \upm@front@info@fmt{\theupmdate} \\
+                       \upm@front@info@fmt{\upm@lang@status:} & \upm@front@info@fmt{\theupmstatus} \\
+               \end{tabular}
+
+               \vfill
+               \Ifelsedefined{frontillustration}{%
+                       \Ifelsedefined{logo}{%
+                               \noindent\begin{tabularx}{\linewidth}{l>{\raggedleft}X}%
+                                       \expandafter\includegraphics[width=.3\linewidth]{\Get{logo}} & %
+                                       \upm@front@author@fmt{\upm@lang@front@authors:~\theauthorlist} \\%
+                               \end{tabularx}%
+                       }{%
+                               \noindent\raggedleft\upm@front@author@fmt{\upm@lang@front@authors:~\theauthorlist} \\%
+                       }%
+               }{%
+                       \noindent\raggedleft\upm@front@author@fmt{\upm@lang@front@authors:~\theauthorlist} \\%
+               }%
+
+       \end{center}
+    \end{titlepage}
+}
+
+
+%-----
+% Define the command to put the title with a classic layout
+\newcommand{\upm@front@layout@modern}{%
+    \message{************ USE MODERN FRONT COVER}
+    \begin{titlepage}%
+       % Project name
+       \upm@front@maintitle@fmt{\theupmproject} \\
+       \noindent\rule{\linewidth}{.5mm} \\
+
+       % Document title
+       \Ifnotempty{\theupmsubproject}{\noindent\raggedright\upm@front@subproject@fmt{\theupmsubproject}\\}
+       \vspace{.5cm}
+       \noindent\raggedright\upm@front@force@single@spacing{\upm@front@document@fmt{\theupmdocname}}
+
+       \vfill
+
+       \vbox{
+               \begin{picture}(0,0)
+               \Ifelsedefined{frontillustration}{%
+                       \put(-110,-100){%
+                               \includegraphics[width=\Get{frontillustrationsize}\expandafter\linewidth]{\Get{frontillustration}}%
+                       }%
+               }{%
+               }
+               \upm@front@tmpa=\linewidth
+               \advance\upm@front@tmpa-.4\linewidth
+               \put(\strip@pt\upm@front@tmpa,75){
+                       \begin{tabular*}{.4\linewidth}{lr}
+                       \upm@front@info@fmt{\upm@lang@docref:} & \upm@front@info@fmt{\theupmdocref} \\
+                       \upm@front@info@fmt{\upm@lang@version:} & \upm@front@info@fmt{\theupmversion} \\
+                       \upm@front@info@fmt{\upm@lang@lastupdate@short:} & \upm@front@info@fmt{\theupmdate} \\
+                       \upm@front@info@fmt{\upm@lang@status:} & \upm@front@info@fmt{\theupmstatus} \\
+                       \end{tabular*}
+               }
+               \upm@front@tmpa=\linewidth
+               \advance\upm@front@tmpa-.3\linewidth
+               \Ifdefined{logo}{
+                       \put(\strip@pt\upm@front@tmpa,-50){
+                               \expandafter\includegraphics[width=.3\linewidth]{\Get{logo}}%
+                       }
+               }
+               \end{picture}
+
+       }
+    \end{titlepage}
+}
+
+\newcommand{\upm@front@setfrontlayout}[2]{%
+       \ifthenelse{\equal{#1}{classic}}{%
+               \Set{frontillustrationsize}{.6}%
+               \global\let\upm@front@layout\upm@front@layout@classic%
+       }{%
+               \ifthenelse{\equal{#1}{modern}}{%
+                       \Set{frontillustrationsize}{1}
+                       \global\let\upm@front@layout\upm@front@layout@modern%
+               }{%
+                       \ifthenelse{\equal{#1}{custom}}{#2}{\errmessage{invalid front layout theme: #1}}%
+               }%
+       }%
+}
+
+%----
+% Set the front page layout as the classic layout theme
+%\setfrontcover{layout_name}
+\newcommand{\setfrontcover}[1]{%
+       \upm@front@setfrontlayout{#1}{\errmessage{invalid front layout theme: #1}}%
+}
+\newcommand{\setfrontlayout}[1]{\errmessage{"\string\setfrontlayout" is deprecated. Use "\string\setfrontcover" insteed}}
+
+\setfrontcover{classic}
+
+\renewcommand{\maketitle}{%
+       \Ifdefined{frontpage}{
+               \upm@front@setfrontlayout{\Get{frontpage}}{%
+                       \message{************ USE CUSTOM FRONT COVER}
+                       \gdef\upm@front@layout{%
+                               \begin{titlepage}%
+                               \Get{frontpage@custom}%
+                               \end{titlepage}%
+                       }%
+               }%
+       }%
+       \upm@front@layout}%
+\newcommand{\makefrontcover}{\maketitle}
+
+%----
+% Set the illustration figure on the front page
+%\setfrontillustration[size_factor]{filename}
+\newcommand{\setfrontillustration}[2][1]{%
+       \Set{frontillustrationsize}{#1}%
+       \Set{frontillustration}{#2}%
+}
+
+%----
+% Clear the illustration figure on the front page
+%\clearfrontillustration
+\newcommand{\clearfrontillustration}{%
+       \Set{frontillustrationsize}{1}%
+       \Unset{frontillustration}%
+}
+
+\endinput
diff --git a/upmethodology-p-common.sty b/upmethodology-p-common.sty
new file mode 100644 (file)
index 0000000..28391df
--- /dev/null
@@ -0,0 +1,230 @@
+% Copyright (c) 2009-13 Stephane GALLAND <galland@arakhne.org>
+% 
+% This program is free library; you can redistribute it and/or modify
+% it under the terms of the GNU Lesser General Public License as
+% published by the Free Software Foundation; either version 3 of the
+% License, or any later version.
+%
+% This library 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
+% Lesser General Public License for more details.
+%
+% You should have received a copy of the GNU Lesser General Public
+% License along with this library; see the file COPYING.  If not,
+% write to the Free Software Foundation, Inc., 59 Temple Place - Suite
+% 330, Boston, MA 02111-1307, USA.
+%
+
+\global\edef\upm@package@private@doctype@ver{2014/03/03}
+
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{upmethodology-p-common}[\upm@package@private@doctype@ver]
+
+\RequirePackage{ifthen}
+\RequirePackage{xspace}
+\RequirePackage{xcolor}
+\RequirePackage{ifpdf}
+
+%----------------------------------------
+% UPMVERSION MACRO
+%----------------------------------------
+\input UPMVERSION.def
+\def\upm@common@parseversion@to@tex#1#2#3#4#5#6#7#8#9\@nil{#1#2#3#4/#5#6/#7#8}
+\def\upm@common@parseversion@major#1#2#3#4#5#6#7#8#9\@nil{#1#2#3#4#5#6#7#8}
+\edef\ver@UPMVERSION@major{\expandafter\upm@common@parseversion@major\UPMVERSION-\relax\@nil}
+\edef\ver@UPMVERSION{\expandafter\upm@common@parseversion@to@tex\UPMVERSION\@nil}
+\expandafter\let\csname ver@UPMVERSION.sty\endcsname\ver@UPMVERSION
+\expandafter\let\csname ver@UPMVERSION.cls\endcsname\ver@UPMVERSION
+
+\gdef\UPMVERSIONTEST{\ver@UPMVERSION\\\ver@UPMVERSION@major}
+
+%----------------------------------------
+% ARAKHNE.ORG MACRO
+%----------------------------------------
+\providecommand{\arakhneorg}{{\begingroup%
+       {\usefont{T1}{pzc}{m}{it}\selectfont Arakhn\^e}%
+       {\usefont{T1}{phv}{bc}{sc}\selectfont\tiny.org}\endgroup}\xspace}
+
+%----------------------------------------
+% CURRENT LANGUAGE
+%----------------------------------------
+\def\upmcurrentlang{english}
+
+%----------------------------------------
+% TEST MACROS
+%----------------------------------------
+\long\def\Ifnotempty#1{\ifthenelse{\equal{#1}{\@empty}}{}}
+\long\def\Ifempty#1#2{\ifthenelse{\equal{#1}{\@empty}}{#2}{}}
+\long\def\Ifelseempty#1#2#3{\ifthenelse{\equal{#1}{\@empty}}{#2}{#3}}
+
+%----------------------------------------
+% TOC MACROS
+%----------------------------------------
+\newcommand{\newpageintoc}{\addtocontents{toc}{\protect\newpage}}
+
+%----------------------------------------
+% DOCUMENT TYPE
+%----------------------------------------
+\newif\ifupmbookformat
+\newif\ifupmreportformat
+\newif\ifupmarticleformat
+
+\upmbookformatfalse
+\upmreportformattrue
+\upmarticleformatfalse
+
+%----------------------------------------
+% PDF COLORS
+%----------------------------------------
+\newcommand{\setpdfcolor}[1]{}
+
+%----------------------------------------
+% CREATE COMMAND WITH ID AS NAME
+%----------------------------------------
+\def\upm@protect#1{\upm@p@protect #1\relax}
+\def\upm@p@protect#1#2\relax{%
+       \ifx\relax #1%
+               \relax
+       \else%
+               \string #1%
+               \ifx\relax #2%
+                       \relax
+               \else
+                       \upm@p@protect #2\relax%
+               \fi
+       \fi}
+
+\def\upm@namedef#1#2{%
+       \@namedef{\upm@protect{#1}}{#2}%
+}
+
+\def\upm@nameuse#1{%
+       \@nameuse{\upm@protect{#1}}%
+}
+
+\def\upm@nameundef#1{%
+       \expandafter\let\csname\upm@protect{#1}\endcsname\relax%
+}
+
+\def\upm@namelet@ext#1#2{%
+       \expandafter\expandafter\let\expandafter\upm@tmp\csname#2\endcsname%
+       \global\expandafter\let\csname#1\endcsname\upm@tmp%
+}
+
+\def\upm@ifdefinedname#1#2#3{%
+       \expandafter\ifx\csname\upm@protect{#1}\endcsname\relax%
+               #3%
+       \else%
+               #2%
+       \fi%
+}
+
+\newcommand{\upm@column@char}{\iflanguage{french}{ :}{:}}
+
+%----------------------------------------
+% GET THE REFERENCE ID WITHOUT \REF
+%----------------------------------------
+\gdef\upm@getref#1{%
+  \expandafter\ifx\csname r@#1\endcsname\relax
+    \nfss@text{\reset@font\bfseries ??}%
+  \else
+    \expandafter\expandafter\expandafter\@car\csname r@#1\endcsname\@nil
+  \fi
+}
+
+\gdef\upm@getpageref@filter#1#2#3#4#5{#2}
+
+\gdef\upm@getpageref#1{%
+  \expandafter\ifx\csname r@#1\endcsname\relax
+    \nfss@text{\reset@font\bfseries ??}%
+  \else%
+    \protected@xdef\upm@p@tmp@tmp{\protect\upm@getpageref@filter\csname r@#1\endcsname}%
+    \upm@p@tmp@tmp%
+    \global\let\upm@p@tmp@tmp\relax%
+  \fi
+}
+
+%----------------------------------------
+% INTERNAL COMMAND FOR TEXT SUPPER/SUB SCRIPT
+%----------------------------------------
+
+\let\upm@textsuperscript\textsuperscript
+
+\def\upm@textsubscript#1{%
+  {\m@th\ensuremath{_{\mbox{\fontsize\sf@size\z@#1}}}}}
+
+
+%----------------------------------------
+% MACRO THAT PERMITS TO LOOP ON A SEPARATOR
+%----------------------------------------
+
+\newif\ifupm@foreach@hasseparator
+\newif\ifupm@foreach@oneseparator
+
+\let\upm@foreach@end\relax
+
+\def\upm@foreach@rec#1{%
+       {\upm@foreach@searchseparator#1\upm@foreach@end\@nil}%
+       \ifupm@foreach@hasseparator%
+               \protected@xdef\upm@foreach@continue{\protect\upm@foreach@rec{\upm@foreach@rest}}%
+               \upm@foreach@body%
+               \upm@foreach@continue%
+       \else%
+               \ifupm@foreach@oneseparator\else%
+                       \upm@foreach@lastbody%
+               \fi%
+       \fi%
+}
+
+% Loop on parts of a text given a specific separator.
+% In the bodies, the macros \upm@foreach@term is the current data.
+% #1: is the separator to consider
+% #2: is the data set
+% #3: is the body to run for each loop, except the last.
+% #4: is the body to run for the last loop.
+\def\upm@foreach#1\in#2\do#3#4{%
+       \global\upm@foreach@oneseparatorfalse%
+       \gdef\upm@foreach@searchseparator##1#1##2\@nil{%
+               \gdef\upm@foreach@term{##1}%
+               \ifx\upm@foreach@end##2%
+                       \global\upm@foreach@hasseparatorfalse%
+               \else%
+                       \gdef\upm@foreach@rest{##2}%
+                       \global\upm@foreach@hasseparatortrue%
+                       \global\upm@foreach@oneseparatortrue%
+               \fi%
+       }%
+       \gdef\upm@foreach@body{#3}%
+       \gdef\upm@foreach@lastbody{#4}%
+       \upm@foreach@rec{#2#1}%
+}
+
+%----------------------------------------
+% MACRO THAT PERMITS TO FIND A STRING
+%----------------------------------------
+\def\upm@ifin#1#2{\begingroup\edef\upm@tmp{\endgroup\noexpand\in@{#1}{#2}}\upm@tmp\ifin@}
+
+%-----------------------------------------
+% Option parameters
+\newif\ifupm@common@optlist@needdefault
+\gdef\upm@common@optlist@parseparams#1=#2\@nil{%
+       \ifthenelse{\equal{#2}{===}}{%
+               \global\upm@common@optlist@needdefaulttrue%
+       }{%
+               \global\upm@common@optlist@needdefaultfalse%
+       }%
+}
+\DeclareRobustCommand{\upm@common@optlist}[1]{%
+       {\upm@common@optlist@parseparams #1====\@nil}%
+}
+\newcommand{\upm@setkeys}[3]{%
+       \upm@common@optlist{#3}%
+       \ifupm@common@optlist@needdefault%
+               \expandafter\setkeys{#1}{#2=#3}%
+       \else%
+               \expandafter\setkeys{#1}{#3}%
+       \fi%
+}
+
+\endinput
diff --git a/upmethodology-spec.sty b/upmethodology-spec.sty
new file mode 100644 (file)
index 0000000..0ad4132
--- /dev/null
@@ -0,0 +1,457 @@
+% Specification Description for Unified Process Methodology
+%
+% Copyright (c) 2006-2007 Stephane GALLAND <galland@arakhne.org>
+% 
+% This program is free library; you can redistribute it and/or modify
+% it under the terms of the GNU Lesser General Public License as
+% published by the Free Software Foundation; either version 3 of the
+% License, or any later version.
+%
+% This library 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
+% Lesser General Public License for more details.
+%
+% You should have received a copy of the GNU Lesser General Public
+% License along with this library; see the file COPYING.  If not,
+% write to the Free Software Foundation, Inc., 59 Temple Place - Suite
+% 330, Boston, MA 02111-1307, USA.
+%
+% Creation date: 2006-04-27
+% Modifications:
+%   2009-10-30   Clean code.
+%   2007-03-19   Add localization.
+%
+
+\global\edef\upm@package@spec@ver{2009/10/30}
+
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{upmethodology-spec}[\upm@package@spec@ver]
+
+\RequirePackage{upmethodology-p-common}
+
+\RequirePackage[normalem]{ulem}
+
+\RequirePackage{upmethodology-fmt}
+\RequirePackage{upmethodology-code}
+
+%------------------------------------
+% LOCALIZATION
+%------------------------------------
+\def\upm@spec@lang@english {
+  \gdef\upm@lang@@{\message{**** upmethodology-spec is using English language ****}}%
+  \gdef\upm@spec@lang@description{Description}
+  \gdef\upm@spec@lang@returned@values{returned value(s)}
+  \gdef\upm@spec@lang@except@for{Except for}
+  \gdef\upm@spec@lang@modifier@public{{\tiny+}}
+  \gdef\upm@spec@lang@modifier@protected{{\tiny\#}}
+  \gdef\upm@spec@lang@modifier@private{{\tiny--}}
+  \gdef\upm@spec@lang@modifier@static##1{{\uline{##1}}}
+  \gdef\upm@spec@lang@modifier@const{query}
+  \gdef\upm@spec@lang@modifier@final{isLeaf}
+  \gdef\upm@spec@lang@modifier@abstract{abstract}
+  \gdef\upm@spec@lang@modifier@root{isRoot}
+  \gdef\upm@spec@lang@modifier@inout{\ensuremath{\leftrightarrow}}
+  \gdef\upm@spec@lang@modifier@in{\ensuremath{\rightarrow}}
+  \gdef\upm@spec@lang@modifier@out{\ensuremath{\leftarrow}}
+}
+\def\upm@spec@lang@french {
+  \gdef\upm@lang@@{\message{**** upmethodology-spec is using French language ****}}%
+  \gdef\upm@spec@lang@description{Description}
+  \gdef\upm@spec@lang@returned@values{valeur(s) retourn\'ee(s)}
+  \gdef\upm@spec@lang@except@for{Except\'e pour}
+  \gdef\upm@spec@lang@modifier@public{{\tiny+}}
+  \gdef\upm@spec@lang@modifier@protected{{\tiny\#}}
+  \gdef\upm@spec@lang@modifier@private{{\tiny--}}
+  \gdef\upm@spec@lang@modifier@static##1{{\uline{##1}}}
+  \gdef\upm@spec@lang@modifier@const{requ\^ete}
+  \gdef\upm@spec@lang@modifier@final{estFeuille}
+  \gdef\upm@spec@lang@modifier@abstract{abstra\^{\i}t}
+  \gdef\upm@spec@lang@modifier@root{estRacine}
+  \gdef\upm@spec@lang@modifier@inout{\ensuremath{\leftrightarrow}}
+  \gdef\upm@spec@lang@modifier@in{\ensuremath{\rightarrow}}
+  \gdef\upm@spec@lang@modifier@out{\ensuremath{\leftarrow}}
+}
+
+%----------------------------------------
+% OPTIONS
+%----------------------------------------
+\DeclareOption{french}{%
+  \upm@spec@lang@french
+}
+\DeclareOption{francais}{%
+  \upm@spec@lang@french
+}
+\DeclareOption{english}{%
+  \upm@spec@lang@english
+}
+\ExecuteOptions{english}
+\ProcessOptions
+\upm@lang@@
+
+%------------------------------------
+% DETAILLED SPECIFICATION
+%------------------------------------
+
+\newlength{\upm@spec@detailspec@description@width}
+\setlength{\upm@spec@detailspec@description@width}{3cm}
+
+\newsavebox{\upm@spec@detailspec@savebox}
+\newlength{\upm@spec@detailspec@itrn@width}
+
+\newcounter{upm@detailspec@return@counter}
+\newcounter{upm@detailspec@function@counter}
+
+\newif\ifupm@spec@showdescription
+\newif\ifupm@spec@showparams
+\newif\ifupm@spec@showreturns
+\newif\ifupm@spec@firstparam
+\newif\ifupm@spec@modifier@has@static
+\newif\ifupm@spec@modifier@has@const
+\newif\ifupm@spec@modifier@has@final
+\newif\ifupm@spec@modifier@has@abstract
+\newif\ifupm@spec@modifier@has@root
+\newif\ifupm@spec@modifier@has@public
+\newif\ifupm@spec@modifier@has@protected
+\newif\ifupm@spec@modifier@has@private
+\newif\ifupm@spec@tmp@a
+
+\newcommand{\upm@spec@head}[2]{#1}
+\newcommand{\upm@spec@tail}[2]{#2}
+
+%-----
+%\upm@spec@func@modifiers{modifiers}
+\newcommand{\upm@spec@func@modifiers}[1]{%
+       \global\upm@spec@modifier@has@staticfalse%
+       \global\upm@spec@modifier@has@constfalse%
+       \global\upm@spec@modifier@has@finalfalse%
+       \global\upm@spec@modifier@has@abstractfalse%
+       \global\upm@spec@modifier@has@rootfalse%
+       \global\upm@spec@modifier@has@publicfalse%
+       \global\upm@spec@modifier@has@protectedfalse%
+       \global\upm@spec@modifier@has@privatefalse%
+       \upm@spec@func@modifiers@scan{#1}%
+}
+\newcommand{\upm@spec@func@modifiers@scan}[1]{%
+       \upm@ifnotempty{#1}{%
+               \edef\upm@reserved@a{\upm@spec@head #1\@empty\@empty}%
+               \edef\upm@reserved@b{\upm@spec@tail #1\@empty\@empty}%
+               \ifthenelse{\equal{\upm@reserved@a}{+}}{%
+                       %public
+                       \global\upm@spec@modifier@has@publictrue%
+                       \global\upm@spec@modifier@has@protectedfalse%
+                       \global\upm@spec@modifier@has@privatefalse%
+               }{%
+               \ifthenelse{\equal{\upm@reserved@a}{=}}{%
+                       %protected
+                       \global\upm@spec@modifier@has@publicfalse%
+                       \global\upm@spec@modifier@has@protectedtrue%
+                       \global\upm@spec@modifier@has@privatefalse%
+               }{%
+               \ifthenelse{\equal{\upm@reserved@a}{\#}}{%
+                       %protected
+                       \global\upm@spec@modifier@has@publicfalse%
+                       \global\upm@spec@modifier@has@protectedtrue%
+                       \global\upm@spec@modifier@has@privatefalse%
+               }{%
+               \ifthenelse{\equal{\upm@reserved@a}{-}}{%
+                       %protected
+                       \global\upm@spec@modifier@has@publicfalse%
+                       \global\upm@spec@modifier@has@protectedfalse%
+                       \global\upm@spec@modifier@has@privatetrue%
+               }{%
+               \ifthenelse{\equal{\upm@reserved@a}{s}}{%
+                       %static
+                       \global\upm@spec@modifier@has@statictrue%
+               }{%
+               \ifthenelse{\equal{\upm@reserved@a}{c}}{%
+                       %query / const
+                       \global\upm@spec@modifier@has@consttrue%
+               }{%
+               \ifthenelse{\equal{\upm@reserved@a}{l}}{%
+                       %isLeaf
+                       \global\upm@spec@modifier@has@finaltrue%
+               }{%
+               \ifthenelse{\equal{\upm@reserved@a}{a}}{%
+                       %abstract
+                       \global\upm@spec@modifier@has@abstracttrue%
+               }{%
+               \ifthenelse{\equal{\upm@reserved@a}{r}}{%
+                       %isRoot
+                       \global\upm@spec@modifier@has@roottrue%
+               }{}}}}}}}}}%
+               \expandafter\upm@spec@func@modifiers@scan{\upm@reserved@b}%
+       }%
+}
+
+%-----
+%\upm@spec@param@modifiers{modifiers}
+\newcommand{\upm@spec@param@modifiers}[1]{%
+       \upm@ifnotempty{#1}{%
+               \ifthenelse{\equal{#1}{out}}{%
+                       %out
+                       \upm@spec@lang@modifier@out%
+               }{
+               \ifthenelse{\equal{#1}{inout}}{%
+                       %inout
+                       \upm@spec@lang@modifier@inout%
+               }{
+                       %in
+                       \upm@spec@lang@modifier@in%
+               }}
+       }%
+}
+
+%-----
+\def\upm@spec@trim#1{#1}
+\newcommand{\upm@spec@splitparams}[1]{%
+       \upm@ifnotempty{#1}{%
+               \upm@spec@firstparamtrue
+               \@for\reserved@a:=#1\do{%
+                       \ifupm@spec@firstparam\upm@spec@firstparamfalse\else, \fi%
+                       \mbox{\upm@spec@trim{\reserved@a}}%
+               }%
+               \upm@spec@trim
+       }%
+}
+
+%-----
+%\begin{upm@spec@detailspec}[width]{title}...\end{detailspec}
+\newenvironment{upm@spec@detailspec}[2][\linewidth]{%
+
+       \setcounter{upm@detailspec@return@counter}{0}
+       \setcounter{upm@detailspec@function@counter}{0}
+
+       \gdef\upm@spec@detailspec@width{#1}
+       \gdef\upm@spec@detailspec@title{#2}
+       \gdef\upm@spec@functions{}
+       \gdef\upm@spec@parameters{}
+       \gdef\upm@spec@global@return{}
+       \gdef\upm@spec@local@return{}
+
+       %-----
+       %\speccons[modifiers]{name}{prototype}
+       \newcommand{\speccons}[3][]{\specfunc[##1]{}{##2}{##3}}
+
+       %-----
+       %\specget[modifiers]{return_type}{name}
+       \newcommand{\specget}[3][]{\specfunc[c##1]{##2}{##3}{}}
+
+       %-----
+       %\specset[modifiers]{name}{prototype}
+       \newcommand{\specset}[3][]{\specfunc[##1]{\jvoid}{##2}{##3}{}}
+
+       %-----
+       %\specfunc[modifiers]{return_type}{name}{prototype}
+       \newcommand{\specfunc}[4][+]{%
+               \addtocounter{upm@detailspec@function@counter}{1}%
+               \protected@xdef\upm@spec@reserved@a{\protect\csname upm@detailspec@return@ptr@\theupm@detailspec@function@counter\endcsname}%
+               \gdef\upm@spec@reserved@b{}
+               \upm@ifnotempty{##2}{\gdef\upm@spec@reserved@b{\string:\ }}
+
+               \gdef\upm@spec@reserved@c{}%
+               \upm@spec@func@modifiers{##1}%
+               \ifupm@spec@modifier@has@private\gdef\upm@spec@reserved@c{\upm@spec@lang@modifier@private}%
+               \else\ifupm@spec@modifier@has@protected\gdef\upm@spec@reserved@c{\upm@spec@lang@modifier@protected}%
+               \else\gdef\upm@spec@reserved@c{\upm@spec@lang@modifier@public}\fi\fi%
+
+               \gdef\upm@spec@reserved@d{##3}%
+               \ifupm@spec@modifier@has@static%
+                       \protected@xdef\upm@spec@reserved@d{\protect\upm@spec@lang@modifier@static{\upm@spec@reserved@d}}%
+               \fi%
+
+               \gdef\upm@spec@reserved@e{}%
+               \upm@spec@tmp@afalse%
+               \ifupm@spec@modifier@has@const\upm@spec@tmp@atrue\fi%
+               \ifupm@spec@modifier@has@final\upm@spec@tmp@atrue\fi%
+               \ifupm@spec@modifier@has@abstract\upm@spec@tmp@atrue\fi%
+               \ifupm@spec@modifier@has@root\upm@spec@tmp@atrue\fi%
+               \ifupm@spec@tmp@a%
+                       \ifupm@spec@modifier@has@const%
+                               \gdef\upm@spec@reserved@e{\upm@spec@lang@modifier@const}%
+                       \fi
+                       \ifupm@spec@modifier@has@final%
+                               \upm@ifnotempty{\upm@spec@reserved@e}{%
+                               \xdef\upm@spec@reserved@e{\upm@spec@reserved@e,}}%
+                               \protected@xdef\upm@spec@reserved@e{\upm@spec@reserved@e\protect\upm@spec@lang@modifier@final}%
+                       \fi
+                       \ifupm@spec@modifier@has@abstract%
+                               \upm@ifnotempty{\upm@spec@reserved@e}{%
+                               \xdef\upm@spec@reserved@e{\upm@spec@reserved@e,}}%
+                               \protected@xdef\upm@spec@reserved@e{\upm@spec@reserved@e\protect\upm@spec@lang@modifier@abstract}%
+                       \fi
+                       \ifupm@spec@modifier@has@root%
+                               \upm@ifnotempty{\upm@spec@reserved@e}{%
+                               \xdef\upm@spec@reserved@e{\upm@spec@reserved@e,}}%
+                               \protected@xdef\upm@spec@reserved@e{\upm@spec@reserved@e\protect\upm@spec@lang@modifier@root}%
+                       \fi
+                       \protected@xdef\upm@spec@reserved@e{ \protect\{\upm@spec@reserved@e\protect\}}
+               \fi%
+
+               \protected@xdef\upm@spec@functions{\upm@spec@functions {\upm@spec@reserved@c}\protect&%
+                       {\upm@spec@reserved@d}\protect&%
+                       \string(\protect&\protect\upm@spec@splitparams{##4}\string) {\upm@spec@reserved@b##2{\upm@spec@reserved@a}{\upm@spec@reserved@e}}\protect\\}%
+
+               \global\let\upm@spec@reserved@a\relax
+               \global\let\upm@spec@reserved@b\relax
+               \global\let\upm@spec@reserved@c\relax
+               \global\let\upm@spec@reserved@d\relax
+               \global\let\upm@spec@reserved@e\relax
+               \expandafter\gdef\csname upm@detailspec@return@ptr@\theupm@detailspec@function@counter\endcsname{}
+       }
+
+       %-----
+       %\specreturn{description}
+       \newcommand{\specreturn}[1]{%
+               \addtocounter{upm@detailspec@return@counter}{1}%
+               \expandafter\protected@xdef\csname upm@detailspec@return@ptr@\theupm@detailspec@function@counter\endcsname{%
+                       {\protect\tiny\protect\ensuremath{_{\protect\string[\theupm@detailspec@return@counter\protect\string]}}}%
+               }%
+               \protected@xdef\upm@spec@local@return{\upm@spec@local@return {\protect\tiny\protect\string[\theupm@detailspec@return@counter\protect\string]} \protect& ##1 \protect\\}%
+       }
+
+       %-----
+       %\specglobalreturn{description}
+       \newcommand{\specglobalreturn}[1]{\gdef\upm@spec@global@return{##1}}
+
+       %-----
+       %\specparam[in|inout|out]{name}{description}
+       \newcommand{\specparam}[3][in]{%
+               \protected@xdef\upm@spec@parameters{\upm@spec@parameters \protect\upm@spec@param@modifiers{##1} \protect& {##2:} \protect& {##3} \protect\\}
+       }
+
+       %-----
+       %\specendhline
+       \newcommand{\specendhline}{\gdef\upm@detailspec@end@hline{\hline}}
+
+       %-----
+       %\specstarthline
+       \newcommand{\specstarthline}{\gdef\upm@detailspec@start@hline{\hline}}
+
+       \setlength{\upm@spec@detailspec@itrn@width}{#1}
+       \addtolength{\upm@spec@detailspec@itrn@width}{-\the\upm@spec@detailspec@description@width}
+       \addtolength{\upm@spec@detailspec@itrn@width}{-2\tabcolsep}
+
+       \begin{lrbox}{\upm@spec@detailspec@savebox}
+       \begin{minipage}[t]{\upm@spec@detailspec@itrn@width}%
+}{%
+       \end{minipage}
+       \end{lrbox}%
+
+       \gdef\upm@detailspec@separator{}
+       \upm@spec@showreturnsfalse%
+
+       \ifthenelse{\equal{\upm@spec@global@return}{\@empty}}{%
+               \gdef\upm@detailspec@return@section{}
+               \upm@ifnotempty{\upm@spec@local@return}{
+                       \gdef\upm@detailspec@separator{ & & & \\}
+                       \protected@xdef\upm@detailspec@return@section{\upm@spec@local@return}%
+                       \upm@spec@showreturnstrue%
+               }%
+       }{%
+               \upm@ifnotempty{\upm@spec@local@return}{%
+               \gdef\upm@detailspec@separator{ & & & \\}
+               \gdef\upm@spec@reserved@a{ \upm@spec@lang@except@for:\protect\upm@spec@local@return}}%
+               \protected@xdef\upm@detailspec@return@section{%
+                       \upm@spec@global@return\upm@spec@reserved@a%
+               }%
+               \upm@spec@showreturnstrue%
+       }
+
+       \ifthenelse{\equal{\upm@spec@detailspec@title}{\@empty}}{
+               \gdef\upm@spec@reserved@c{}
+       }{
+               \gdef\upm@spec@reserved@c{\hline%
+                       \multicolumn{4}{>{\columncolor{backtableheader}}l}{\color{fronttableheader}{\large\textsc{\upm@spec@detailspec@title}}} \\%
+               }
+               \gdef\upm@detailspec@start@hline{\hline}%
+               \upm@spec@showdescriptiontrue%
+       }
+
+       \upm@spec@showparamsfalse%
+
+       \upm@ifnotempty{\upm@spec@parameters}{%
+               \ifupm@spec@showdescription%
+               \gdef\upm@detailspec@separator{ & & & \\}%
+               \fi%
+               \upm@ifnotempty{\upm@spec@functions}{%
+               \gdef\upm@detailspec@separator{ & & & \\}%
+               }%
+               \upm@spec@showparamstrue%
+       }%
+
+       \vspace{.5cm}\noindent\begin{tabularx}{\the\upm@spec@detailspec@width}{|clr@{}>{\raggedright\arraybackslash}X|}
+               \upm@spec@reserved@c%
+               \upm@detailspec@start@hline%
+               \ifupm@spec@showdescription
+               \multicolumn{4}{|X|}{%
+                       \begin{tabularx}{\linewidth}{@{}lX@{}}%
+                       \upm@spec@lang@description: & \usebox{\upm@spec@detailspec@savebox} \\%
+                       \end{tabularx}%
+               } \\%
+               \hline%
+               \fi
+               \upm@spec@functions%
+               \upm@detailspec@separator%
+               \ifupm@spec@showparams%
+               \multicolumn{4}{|X|}{%
+                       \begin{tabularx}{\linewidth}{@{}l@{}lX@{}}%
+                       \upm@spec@parameters%
+                       \end{tabularx}%
+               } \\%
+               \fi%
+               \ifupm@spec@showreturns%
+               \multicolumn{4}{|X|}{%
+                       \textit{\upm@spec@lang@returned@values}: \newline%
+                       \begin{tabularx}{\linewidth}{@{}lX@{}}%
+                       \upm@detailspec@return@section%
+                       \end{tabularx}%
+               } \\%
+               \fi%
+               \upm@detailspec@end@hline%
+       \end{tabularx}\vspace{.5cm}%
+
+       \global\let\@arraycr\upm@arraycr
+
+       \global\let\upm@spec@detailspec@width\relax%
+       \global\let\upm@spec@detailspec@title\relax%
+       \global\let\upm@spec@functions\relax%
+       \global\let\upm@spec@parameters\relax%
+       \global\let\upm@spec@global@return\relax%
+       \global\let\upm@spec@local@return\relax%
+       \global\let\upm@detailspec@return@section\relax%
+       \global\let\upm@spec@reserved@a\relax%
+       \global\let\upm@spec@reserved@b\relax%
+       \global\let\upm@spec@reserved@c\relax%
+       \global\let\upm@detailspec@separator\relax%
+       \global\let\upm@detailspec@start@hline\relax%
+       \global\let\upm@detailspec@end@hline\relax%
+}
+
+%-----
+%\begin{detailspec}}[width]{title}...\end{detailspec}....
+\newenvironment{detailspec}[2][\linewidth]
+{%
+       \upm@spec@showdescriptiontrue%
+       \gdef\upm@detailspec@start@hline{\hline}%
+       \gdef\upm@detailspec@end@hline{\hline}%
+       \begin{upm@spec@detailspec}[#1]{#2}%
+}
+{%
+       \end{upm@spec@detailspec}%
+}
+
+%-----
+%\begin{detailspec}}[width]{title}...\end{detailspec}....
+\newenvironment{detailspec*}[2][\linewidth]
+{%
+       \upm@spec@showdescriptionfalse%
+       \gdef\upm@detailspec@start@hline{}%
+       \gdef\upm@detailspec@end@hline{}%
+       \begin{upm@spec@detailspec}[#1]{#2}%
+}
+{%
+       \end{upm@spec@detailspec}%
+}
+
+\endinput
diff --git a/upmethodology-task.sty b/upmethodology-task.sty
new file mode 100644 (file)
index 0000000..fdc90a7
--- /dev/null
@@ -0,0 +1,268 @@
+% Task management for Unified Process Methodology
+%
+% Copyright (c) 2006-2007 Stephane GALLAND <galland@arakhne.org>
+% 
+% This program is free library; you can redistribute it and/or modify
+% it under the terms of the GNU Lesser General Public License as
+% published by the Free Software Foundation; either version 3 of the
+% License, or any later version.
+%
+% This library 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
+% Lesser General Public License for more details.
+%
+% You should have received a copy of the GNU Lesser General Public
+% License along with this library; see the file COPYING.  If not,
+% write to the Free Software Foundation, Inc., 59 Temple Place - Suite
+% 330, Boston, MA 02111-1307, USA.
+%
+% Creation date: 2006-04-20
+% Modifications:
+%   2009-10-30   Clean code.
+%   2007-03-19   Add localization.
+%
+
+\global\edef\upm@package@task@ver{2009/10/30}
+
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{upmethodology-task}[\upm@package@task@ver]
+
+\RequirePackage{upmethodology-p-common}
+
+%----- LOCALIZATION
+\def\upm@task@lang@english{
+  \gdef\upm@lang@@{\message{**** upmethodology-task is using English language ****}}%
+  \gdef\upm@task@lang@task{Task}
+  \gdef\upm@task@lang@description{Description}
+  \gdef\upm@task@lang@startat{Start at}
+  \gdef\upm@task@lang@endat{End at}
+  \gdef\upm@task@lang@archieved{Archieved}
+  \gdef\upm@task@lang@managers{Managers}
+  \gdef\upm@task@lang@members{Members}
+  \gdef\upm@task@lang@milestones{Milestones}
+  \gdef\upm@task@lang@subtask{Sub-task of}
+}
+\def\upm@task@lang@french{
+  \gdef\upm@lang@@{\message{**** upmethodology-task is using French language ****}}%
+  \gdef\upm@task@lang@task{T\^ache}
+  \gdef\upm@task@lang@description{Description}
+  \gdef\upm@task@lang@startat{D\'ebut le}
+  \gdef\upm@task@lang@endat{Fin le}
+  \gdef\upm@task@lang@archieved{Termin\'ee}
+  \gdef\upm@task@lang@managers{R\'ef\'erent}
+  \gdef\upm@task@lang@members{Membres}
+  \gdef\upm@task@lang@milestones{\'Etapes}
+  \gdef\upm@task@lang@subtask{Sous-t\^ache de}
+}
+
+%----- OPTIONS
+\DeclareOption{french}{%
+  \upm@task@lang@french
+}
+\DeclareOption{francais}{%
+  \upm@task@lang@french
+}
+\DeclareOption{english}{%
+  \upm@task@lang@english
+}
+\ExecuteOptions{english}
+\ProcessOptions
+\upm@lang@@
+
+\RequirePackage{upmethodology-version}
+
+%----- 
+\newif\if@upm@task@displaydescription
+\newif\if@upm@task@rebuild
+\@upm@task@rebuildfalse
+
+\def\upm@task@define#1#2#3{%
+       \protected@write\@auxout{}{\string\global\string\@namedef{upm@task@#1@#2}{#3}}%
+       \ifthenelse{\equal{\csname upm@task@#1@#2\endcsname}{#3}}{}{\@upm@task@rebuildtrue}%
+       \global\@namedef{upm@task@#1@#2}{#3}%
+}
+
+\def\upm@task@define@list#1#2#3{%
+       \ifthenelse{\equal{\csname upm@task@#1@#2\endcsname}{\@empty}}{%
+               \expandafter\xdef\csname upm@task@#1@#2\endcsname{#3}%
+       }{%
+               \expandafter\xdef\csname upm@task@#1@#2\endcsname{%
+                       \csname upm@task@#1@#2\endcsname, #3%
+               }%
+       }%
+       \AtEndDocument{\protected@write\@auxout{}{\string\global\string\@namedef{upm@task@#1@#2}{\csname upm@task@#1@#2\endcsname}}}
+}
+
+\newenvironment{upm@taskdescription}[1]{%
+       \global\@namedef{upm@task@#1@managers}{}%
+       \global\@namedef{upm@task@#1@members}{}%
+       \global\@namedef{upm@task@#1@milestones}{}%
+
+       \newcommand{\taskname}[1]{\upm@task@define{#1}{name}{##1}}
+       \newcommand{\tasksuper}[1]{\upm@task@define{#1}{super}{##1}}
+       \newcommand{\taskcomment}[1]{\upm@task@define{#1}{comment}{##1}}%
+       \newcommand{\taskprogress}[1]{\upm@task@define{#1}{progress}{##1}}%
+       \newcommand{\taskstart}[1]{\upm@task@define{#1}{startat}{##1}}%
+       \newcommand{\taskend}[1]{\upm@task@define{#1}{endat}{##1}}%
+       \newcommand{\taskmanager}[1]{\upm@task@define@list{#1}{managers}{##1}}
+       \newcommand{\taskmember}[1]{%
+               \upm@task@define@list{#1}{members}{##1}%
+       }
+       \newcommand{\taskmilestone}[2]{%
+               \upm@task@define@list{#1}{milestones}{##1}%
+               \upm@task@define{#1}{ml@##1}{##2}%
+               %\global\@namedef{upm@task@#1@description@milestones}{\upm@task@lang@milestones: & \multicolumn{2}{X|}{\parbox[t]{1.9\linewidth}{\thetaskmembers{#1}}} \\}
+       }
+
+
+       \def\upm@task@currenttask{#1}
+}{%
+       \if@upm@task@displaydescription\thetaskdescription{\upm@task@currenttask}\fi%
+       \let\upm@task@currenttask\relax%
+}
+
+%-----
+%\begin{taskdescription}{id}...\end{taskdescription}
+\newenvironment{taskdescription}[1]{%
+       \@upm@task@displaydescriptiontrue%
+       \upm@taskdescription{#1}%
+}{%
+       \endupm@taskdescription%
+}
+
+%-----
+%\begin{taskdescription*}{id}...\end{taskdescription*}
+\newenvironment{taskdescription*}[1]{%
+       \@upm@task@displaydescriptionfalse%
+       \upm@taskdescription{#1}%
+}{%
+       \endupm@taskdescription%
+}
+
+%-----
+%\thetasksuper{id}
+\newcommand{\thetasksuper}[1]{%
+       \expandafter\providecommand\csname upm@task@#1@super\endcsname{??\@latex@warning{The task identified by '#1' was not found.}\@upm@task@rebuildtrue}%
+       \expandafter\csname upm@task@#1@super\endcsname%
+}
+
+%-----
+%\thetaskname{id}
+\newcommand{\thetaskname}[1]{%
+       \expandafter\providecommand\csname upm@task@#1@name\endcsname{??\@latex@warning{The task identified by '#1' was not found.}\@upm@task@rebuildtrue}%
+       \expandafter\csname upm@task@#1@name\endcsname%
+}
+
+%-----
+%\thetaskcomment{id}
+\newcommand{\thetaskcomment}[1]{%
+       \expandafter\providecommand\csname upm@task@#1@comment\endcsname{??\@latex@warning{The task identified by '#1' was not found.}\@upm@task@rebuildtrue}%
+       \expandafter\csname upm@task@#1@comment\endcsname%
+}
+
+%-----
+%\thetaskprogress{id}
+\newcommand{\thetaskprogress}[1]{%
+       \expandafter\providecommand\csname upm@task@#1@progress\endcsname{??\@latex@warning{The task identified by '#1' was not found.}\@upm@task@rebuildtrue}%
+       \expandafter\csname upm@task@#1@progress\endcsname%
+}
+
+%-----
+%\thetaskstart{id}
+\newcommand{\thetaskstart}[1]{%
+       \expandafter\providecommand\csname upm@task@#1@startat\endcsname{??\@latex@warning{The task identified by '#1' was not found.}\@upm@task@rebuildtrue}%
+       \expandafter\csname upm@task@#1@startat\endcsname%
+}
+
+%-----
+%\thetaskend{id}
+\newcommand{\thetaskend}[1]{%
+       \expandafter\providecommand\csname upm@task@#1@endat\endcsname{??\@latex@warning{The task identified by '#1' was not found.}\@upm@task@rebuildtrue}%
+       \expandafter\csname upm@task@#1@endat\endcsname%
+}
+
+%-----
+%\thetaskmanagers{id}
+\newcommand{\thetaskmanagers}[1]{%
+       \expandafter\providecommand\csname upm@task@#1@managers\endcsname{??\@latex@warning{The task identified by '#1' was not found.}\@upm@task@rebuildtrue}%
+       \expandafter\csname upm@task@#1@managers\endcsname%
+}
+
+%-----
+%\thetaskmembers{id}
+\newcommand{\thetaskmembers}[1]{%
+       \expandafter\providecommand\csname upm@task@#1@members\endcsname{??\@latex@warning{The task identified by '#1' was not found.}\@upm@task@rebuildtrue}%
+       \expandafter\csname upm@task@#1@members\endcsname%
+}
+
+%-----
+%\thetaskmilestones{id}
+\newcommand{\thetaskmilestones}[1]{%
+       \expandafter\providecommand\csname upm@task@#1@milestones\endcsname{??\@latex@warning{The task identified by '#1' was not found.}\@upm@task@rebuildtrue}%
+       \expandafter\csname upm@task@#1@milestones\endcsname%
+}
+
+%-----
+%\thetaskmilestonecomment{id}{date}
+\newcommand{\thetaskmilestonecomment}[2]{%
+       \expandafter\providecommand\csname upm@task@#1@ml@#2\endcsname{??\@latex@warning{The task milestone identified by '#1' and '#2' was not found.}\@upm@task@rebuildtrue}%
+       \expandafter\csname upm@task@#1@ml@#2\endcsname%
+}
+
+\def\@upm@trim#1{#1}
+
+%-----
+%\thetaskdescription{id}
+\newcommand{\thetaskdescription}[2][\linewidth]{%
+       \ifthenelse{\equal{\csname upm@task@#2@members\endcsname}{\@empty}}{
+               \gdef\upm@task@tmp@a{}%
+       }{%
+               \gdef\upm@task@tmp@a{\upm@task@lang@members: & \multicolumn{2}{X|}{\parbox[t]{1.9\linewidth}{\thetaskmembers{#2}}} \\}%
+       }%
+       \ifthenelse{\equal{\csname upm@task@#2@milestones\endcsname}{\@empty}}{
+               \gdef\upm@task@tmp@b{}%
+       }{%
+               \gdef\upm@task@tmp@b{\hline \upm@task@lang@milestones: &%
+               \multicolumn{2}{X|}{\parbox[t]{1.95\linewidth}{%
+               \edef\upm@task@tmp@c{\csname upm@task@#2@milestones\endcsname}%
+               \def\upm@task@tmp@e{}%
+               \@for\reserved@a:=\upm@task@tmp@c\do{%
+                       \edef\upm@task@tmp@d{\expandafter\@upm@trim\reserved@a}%
+                       \protected@edef\upm@task@tmp@e{\upm@task@tmp@e \protect\item[\upm@task@tmp@d~:] \protect\thetaskmilestonecomment{#2}{\upm@task@tmp@d}}%
+               }%
+               \begin{description}\upm@task@tmp@e\end{description}%
+               }} \\}%
+       }%
+       \vspace{.25cm}\noindent\begin{mtabular}[#1]{3}{|X|X|X|}
+               \tabulartitle{{\upm@task@lang@task}~\textit{#2}: \thetaskname{#2}}
+               \hline
+               %description
+               \upm@task@lang@description: & \multicolumn{2}{X|}{\parbox[t]{1.9\linewidth}{\thetaskcomment{#2}}} \\
+               %sub-task
+               \expandafter\ifx\csname upm@task@#2@super\endcsname\relax\else%
+               \upm@task@lang@subtask: & \multicolumn{2}{X|}{\parbox[t]{1.9\linewidth}{{\upm@task@lang@task}~\textit{\csname upm@task@#2@super\endcsname}}} \\
+               \fi
+               \hline
+               %dates
+               \upm@task@lang@startat: & \upm@task@lang@endat: & \upm@task@lang@archieved: \\
+               \thetaskstart{#2} & \thetaskend{#2} & \thetaskprogress{#2}\% \\
+               \hline
+               %manager
+               \upm@task@lang@managers: & \multicolumn{2}{X|}{\parbox[t]{1.9\linewidth}{\thetaskmanagers{#2}}} \\
+               %members
+               \upm@task@tmp@a
+               %milestones
+               \upm@task@tmp@b
+               %\@nameuse{upm@task@#1@description@milestones}
+               \hline
+       \end{mtabular}\par\vspace{.5cm}%
+}
+
+\AtEndDocument{%
+       \if@upm@task@rebuild%
+       \@latex@warning@no@line{Project Task(s) may have changed.\MessageBreak%
+       Rerun to get cross-references right}\fi%
+
+}
+\endinput
diff --git a/upmethodology-version.sty b/upmethodology-version.sty
new file mode 100644 (file)
index 0000000..6d3538a
--- /dev/null
@@ -0,0 +1,203 @@
+% Version management for Unified Process Methodology
+%
+% Copyright (c) 2006-2007 Stephane GALLAND <galland@arakhne.org>
+% Copyright (c) 2013 Stephane GALLAND <galland@arakhne.org>
+% 
+% This program is free library; you can redistribute it and/or modify
+% it under the terms of the GNU Lesser General Public License as
+% published by the Free Software Foundation; either version 3 of the
+% License, or any later version.
+%
+% This library 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
+% Lesser General Public License for more details.
+%
+% You should have received a copy of the GNU Lesser General Public
+% License along with this library; see the file COPYING.  If not,
+% write to the Free Software Foundation, Inc., 59 Temple Place - Suite
+% 330, Boston, MA 02111-1307, USA.
+%
+
+\global\edef\upm@package@version@ver{2013/08/26}
+
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{upmethodology-version}[\upm@package@version@ver]
+
+\RequirePackage{upmethodology-p-common}
+
+%locales
+\def\upm@version@lang@english{
+  \gdef\upm@lang@@{\message{**** upmethodology-version is using English language ****}}%
+  \gdef\upm@lang@date{Date}
+  \gdef\upm@lang@updates{Updates}
+  \gdef\upm@lang@version{Version}
+  \gdef\upm@lang@version@history{Version History}
+  \gdef\upm@lang@restricted{Confidential}
+  \gdef\upm@lang@validable{Validable}
+  \gdef\upm@lang@validated{Validated}
+  \gdef\upm@lang@public{Public}
+}
+\def\upm@version@lang@french{
+  \gdef\upm@lang@@{\message{**** upmethodology-version is using French language ****}}%
+  \gdef\upm@lang@date{Date}
+  \gdef\upm@lang@updates{Modifications}
+  \gdef\upm@lang@version{Version}
+  \gdef\upm@lang@version@history{Historique}
+  \gdef\upm@lang@restricted{Confidentiel}
+  \gdef\upm@lang@validable{Validable}
+  \gdef\upm@lang@validated{Valid\'e}
+  \gdef\upm@lang@public{Publique}
+}
+
+%----------------------------------------
+% OPTIONS
+%----------------------------------------
+\DeclareOption{french}{%
+  \upm@version@lang@french
+}
+\DeclareOption{francais}{%
+  \upm@version@lang@french
+}
+\DeclareOption{english}{%
+  \upm@version@lang@english
+}
+\ExecuteOptions{english}
+\ProcessOptions*
+
+\upm@lang@@
+
+\RequirePackage{upmethodology-fmt}
+
+%tmp counter
+\newcount{\upm@tmp@a}
+
+% Internal information: first and last registered dates
+\let\upm@thefirstdate\@undefined
+\let\upm@thelastdate\@undefined
+
+%increment major part of version number
+\def\upm@incmajorversion#1.#2{%
+       \upm@tmp@a=#1\advance\upm@tmp@a + 1%
+       \global\edef\theupmversion{\the\upm@tmp@a.0}%
+}
+
+%increment minor part of version number
+\def\upm@incminorversion#1.#2{%
+       \upm@tmp@a=#2\advance\upm@tmp@a + 1%
+       \global\edef\theupmversion{#1.\the\upm@tmp@a}%
+}
+
+%list of updates
+\def\upm@update@list{}
+
+%add an update to the list
+\newcommand{\upm@addupdatetolist}[4]{%
+       \global\protected@edef\upm@update@list{%
+               \upm@update@list%
+               #1 & #2 & #3 \protect\\%
+       }
+}
+
+%-----
+% Available status' constants
+\def\upmrestricted{\upm@lang@restricted}
+\def\upmvalidable{\upm@lang@validable}
+\def\upmvalidated{\upm@lang@validated}
+\def\upmpublic{\upm@lang@public}
+
+%-----
+% Replies the modification date of the given version
+\newcommand{\upmdate}[1]{\@nameuse{upm@version@#1@updatedate}}
+
+%-----
+% Replies the modification description of the given version
+\newcommand{\upmdescription}[1]{\@nameuse{upm@version@#1@description}}
+
+%-----
+% Replies the status of the given version
+\newcommand{\upmstatus}[1]{\@nameuse{upm@version@#1@level}}
+
+%-----
+\newcommand{\upm@updateversion}[4]{%
+       \gdef\theupmdate{#2}%
+       \gdef\theupmlastmodif{#3}%
+       \gdef\theupmstatus{#4}%
+       \ifx\upm@thefirstdate\@undefined
+               \global\edef\upm@thefirstdate{#2}
+       \fi
+       \global\edef\upm@thelastdate{#2}
+       \@namedef{upm@version@#1@updatedate}{#2}%
+       \@namedef{upm@version@#1@description}{#3}%
+       \@namedef{upm@version@#1@level}{#4}%
+       \upm@addupdatetolist{#1}{#2}{#3}{#4}%
+}
+
+%-----
+%\updateversion{new_version}{update_date}{description}{status}
+\newcommand{\updateversion}[4]{%
+       \gdef\theupmversion{#1}%
+       \upm@updateversion{#1}{#2}{#3}{#4}%
+}
+
+%-----
+%\initialversion[version]{date}{description}{status}
+\newcommand{\initialversion}[4][0.1]{%
+       \updateversion{#1}{#2}{#3}{#4}%
+}
+
+%-----
+%\incversion{update_date}{description}{status}
+\newcommand{\incversion}[3]{%
+       \expandafter\upm@incmajorversion\theupmversion%
+       \upm@updateversion{\theupmversion}{#1}{#2}{#3}%
+}
+
+%-----
+%\incsubversion{update_date}{description}{status}
+\newcommand{\incsubversion}[3]{%
+       \expandafter\upm@incminorversion\theupmversion%
+       \upm@updateversion{\theupmversion}{#1}{#2}{#3}%
+}
+
+%-----
+% Version variables
+\def\theupmversion{0.1}
+\edef\theupmdate{\today}
+\def\theupmlastmodif{}
+\def\theupmstatus{\upmrestricted}
+
+%-----
+% Display the version history
+%\upmhistory[width]
+\newcommand{\upmhistory}[1][\linewidth]{%
+       \noindent\expandafter\begin{mtabular}[#1]{3}{|c|c|X|}
+       \tabulartitle{\upm@lang@version@history}%
+       \tabularheader{\upm@lang@version}{\upm@lang@date}{\upm@lang@updates}%
+       \upm@update@list
+       \hline
+       \expandafter\end{mtabular}\par\vspace{.5cm}%
+}
+
+%-----
+% Copyright date
+%\upmcopyrightdate
+\newcommand{\upmcopyrightdate}{%
+       \ifx\upm@thefirstdate\@undefined%
+               \edef\upm@tmp@copyright@a{\the\year}%
+       \else%
+               \edef\upm@tmp@copyright@a{\extractyear{\upm@thefirstdate}}%
+       \fi%
+       \ifx\upm@thelastdate\@undefined%
+               \def\upm@tmp@copyright@b{\the\year}%
+       \else%
+               \edef\upm@tmp@copyright@b{\extractyear{\upm@thelastdate}}%
+       \fi%
+       \ifthenelse{\equal{\upm@tmp@copyright@a}{\upm@tmp@copyright@b}}{%
+               \upm@tmp@copyright@a%
+       }{%
+               \upm@tmp@copyright@a-\upm@tmp@copyright@b%
+       }%
+}
+
+\endinput
diff --git a/yfonts.sty b/yfonts.sty
new file mode 100644 (file)
index 0000000..a3597d0
--- /dev/null
@@ -0,0 +1,128 @@
+%%
+%% This is file `yfonts.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% yfonts.dtx  (with options: `package')
+%% 
+%% IMPORTANT NOTICE:
+%% 
+%% For the copyright see the source file.
+%% 
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from yfonts.sty.
+%% 
+%% For distribution of the original source see the terms
+%% for copying and modification in the file yfonts.dtx.
+%% 
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+\ProvidesPackage{yfonts}
+  [2003/01/08 v1.3 (WaS)]
+\NeedsTeXFormat{LaTeX2e}[1994/12/01]
+\newif\ifyf@v
+\DeclareOption{varumlaut}{\yf@vtrue}
+\ProcessOptions\relax
+\DeclareFontEncoding{LY}{}{}
+\DeclareFontSubstitution{LY}{yfrak}{m}{n}
+\DeclareFontEncoding{LYG}{}{}
+\DeclareFontSubstitution{LYG}{ygoth}{m}{n}
+\DeclareFontFamily{LYG}{ygoth}{}
+\DeclareFontShape{LYG}{ygoth}{m}{n}{%
+<10><10.95><12><14.4><17.28><20.74><24.88>ygoth}{}
+\DeclareFontFamily{LY}{yfrak}{}
+\DeclareFontShape{LY}{yfrak}{m}{n}{%
+<10><10.95><12><14.4><17.28><20.74><24.88>yfrak}{}
+\DeclareFontFamily{LY}{ysmfrak}{}
+\DeclareFontShape{LY}{ysmfrak}{m}{n}{%
+ <10><10.95><12><14.4><17.28><20.74><24.88>ysmfrak}{}
+\DeclareFontFamily{LY}{yswab}{}
+\DeclareFontShape{LY}{yswab}{m}{n}{%
+<10><10.95><12><14.4><17.28><20.74><24.88>yswab}{}
+
+\DeclareFontFamily{U}{yinitas}{}
+\DeclareFontShape{U}{yinitas}{m}{n}{%
+<10>sfixed*yinitas%
+<10.95>sfixed*[42.34]yinitas%
+<12>sfixed*[46.39]yinitas%
+<14.4>sfixed*[55.68]yinitas%
+<17.28>sfixed*[66.82]yinitas%
+<20.74>sfixed*[80.19]yinitas%
+<24.88>sfixed*[96.20]yinitas%
+}{}
+\DeclareTextSymbol{\textemdash}{LYG}{124}
+\DeclareTextSymbol{\textendash}{LYG}{123}
+\DeclareTextComposite{\"}{LYG}{a}{91}
+\DeclareTextComposite{\"}{LYG}{o}{93}
+\DeclareTextComposite{\"}{LYG}{u}{94}
+\DeclareTextComposite{\"}{LYG}{e}{92}
+\DeclareTextSymbol{\ss}{LYG}{25}
+\DeclareTextCommand{\SS}{LYG}{SS}
+\DeclareTextSymbol{\i}{LYG}{16}
+\DeclareTextSymbol{\j}{LYG}{17}
+\DeclareTextSymbol{\textquotedblleft}{LYG}{95}
+\DeclareTextCommand{\grqq}{LYG}{\textquotedblleft}
+\DeclareTextSymbol{\textquotedblright}{LYG}{34}
+\DeclareTextCommand{\"}{LY}[1]{\UseTextAccent{OT1}{\"}{#1}}
+\DeclareTextAccent{\'}{LY}{19}
+\DeclareTextAccent{\.}{LY}{95}
+\DeclareTextAccent{\=}{LY}{22}
+\DeclareTextAccent{\^}{LY}{94}
+\DeclareTextAccent{\`}{LY}{18}
+\DeclareTextAccent{\~}{LY}{126}
+\DeclareTextAccent{\H}{LY}{125}
+\DeclareTextAccent{\u}{LY}{21}
+\DeclareTextAccent{\v}{LY}{20}
+\DeclareTextAccent{\r}{LY}{23}
+\DeclareTextSymbol{\textemdash}{LY}{124}
+\DeclareTextSymbol{\textendash}{LY}{123}
+\ifyf@v
+\DeclareTextComposite{\"}{LY}{a}{137}
+\DeclareTextComposite{\"}{LY}{o}{153}
+\DeclareTextComposite{\"}{LY}{u}{158}
+\DeclareTextComposite{\"}{LY}{e}{144}
+\else
+\DeclareTextComposite{\"}{LY}{a}{138}
+\DeclareTextComposite{\"}{LY}{o}{154}
+\DeclareTextComposite{\"}{LY}{u}{159}
+\DeclareTextComposite{\"}{LY}{e}{145}
+\fi
+\DeclareTextSymbol{\textsection}{LY}{60}
+\DeclareTextSymbol{\i}{LY}{16}
+\DeclareTextSymbol{\j}{LY}{17}
+\DeclareTextSymbol{\ss}{LY}{26}
+\DeclareTextSymbol{\etc}{LY}{201}
+\DeclareTextSymbol{\textquotedblleft}{LY}{34}
+\DeclareTextCommand{\grqq}{LY}{\textquotedblleft}
+\DeclareTextSymbol{\quotedblbase}{LY}{92}
+\DeclareTextSymbol{\textquoteleft}{LY}{`\`}
+\DeclareTextCommand{\grq}{LY}{\textquoteleft}
+\DeclareTextSymbol{\textquoteright}{LY}{`\'}
+\DeclareTextCommand{\SS}{LY}
+   {SS}
+\def\gothdefault{ygoth}
+\def\swabdefault{yswab}
+\def\frakdefault{yfrak}
+\def\initdefault{yinitas}
+\def\gothfamily{\usefont{LYG}{\gothdefault}{m}{n}}
+\def\swabfamily{\usefont{LY}{\swabdefault}{m}{n}}
+\def\frakfamily{\usefont{LY}{\frakdefault}{m}{n}}
+\def\initfamily{\usefont{U}{\initdefault}{m}{n}}
+\DeclareTextFontCommand{\textgoth}{\gothfamily}
+\DeclareTextFontCommand{\textswab}{\swabfamily}
+\DeclareTextFontCommand{\textfrak}{\frakfamily}
+\DeclareTextFontCommand{\textinit}{\initfamily}
+\newcommand{\yinipar}[1]{\par\noindent\yinitpar{#1}}
+\newcommand{\yinitpar}[1]{\setbox0=\hbox{\textinit{#1}}%
+\hangindent=\wd0\hangafter=-4\advance\hangindent by .25em
+{\dimen@=-3\baselineskip
+\dimen@=\baselinestretch\dimen@
+\hskip-\wd0 \hskip-.25em
+\raisebox{\dimen@}[0pt][0pt]{\unhbox0}\hskip.25em}}
+\def\fraklines{\baselineskip\f@size dd\relax}
+\endinput
+%%
+%% End of file `yfonts.sty'.