% \iffalse meta-comment
% mycv : a curriculum vitae class allowing TikZ decorations
% (v1.5.6 - Sun May 20 21:31:37 CEST 2012)
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version
% 1.3c, available at 'http://www.latex-project.org/lppl'.
%
% This work consists of the main source file 'mycv.dtx'
% and the derived files:
%
%     mycv.ins,
%     mycv.cls,
%     mycv_base.def, mycv_misc.def, mycv_version.def
%     mycv_style.sty, mycv_dec.sty,
%     mycv_split_contents.pl
%     mycv.pdf
%
% Moreover, it also consists of the files 'README',
% 'CHANGELOG', 'checksum.pl' and folders <Examples>
% and <Doc>.
%
% Unpacking the class files:
%
%     (pdf)latex mycv.dtx
%
% Generating the documentation:
%
% the documentation has to be produced separately as it
% uses the package 'arsclassica', that seems to be not
% fully compatible with the 'doc' package (that should
% be used in the driver file for producing the document).
% To produce the documentation, move to the folder 'Doc'
% and type:
% 
%     pdflatex mycv.tex
%
% Generating the examples:
%
% see the file 'Exampes/Notes.txt'.
%
% ----------------------------------------------------------
% ** This file was automatically generated by <DoPackage.sh>
% ** with option(s) 'ctan'.
% ** Date: Sun May 20 21:31:37 CEST 2012::1337542297
% ----------------------------------------------------------
% \fi
%<*install>
\input docstrip.tex

\preamble
--------------------------------------------------------
 Author: Andrea Ghersi
 Copyright 2012 Ghersi Andrea (ghanhawk@gmail.com).

 This work may be distributed and/or modified under the
 conditions of the LaTeX Project Public License version
 1.3c, available at 'http://www.latex-project.org/lppl'.

 This work has the LPPL maintenance status "maintained".
 The Current Maintainer of this work is Andrea Ghersi.

 This work consists of the files listed in the README
 file.
--------------------------------------------------------
\endpreamble

\keepsilent
\askforoverwritefalse
\usedir{tex/latex/mycv}

\generate{%
   \file{mycv.ins}{\from{mycv.dtx}{install}}%
   \file{mycv.cls}{\from{mycv.dtx}{mycv.cls}}%
   \file{mycv_base.def}{\from{mycv.dtx}{mycv-base.def}}%
   \file{mycv_misc.def}{\from{mycv.dtx}{mycv-misc.def}}%
   \file{mycv_dec.sty}{\from{mycv.dtx}{mycv-dec.sty}}%
   \file{mycv_style.sty}{\from{mycv.dtx}{mycv-style.sty}}%
   \file{mycv_version.def}{\from{mycv.dtx}{mycv-version.def}}%
}

\generate{%
   \file{mycv_split_contents.pl}%
      {\nopreamble\nopostamble\from{mycv.dtx}{mycv-split-contents.pl}}%
}

\obeyspaces
\Msg{**************************************************************}
\Msg{*                                                            *}
\Msg{* To finish the installation you have to move the following  *}
\Msg{* files into a directory searched by (La)TeX:                *}
\Msg{*                                                            *}
\Msg{*     mycv.cls, mycv*.def, mycv*.sty                         *}
\Msg{*                                                            *}
\Msg{* and copy the script 'mycv-split-contents.pl' into a folder *}
\Msg{* that is in your PATH environment variable.                 *}
\Msg{* On Unix-like operating systems, make the script executable *}
\Msg{* (i.e. chmod +x mycv-split-contents.pl).                    *}
\Msg{*                                                            *}
\Msg{* To produce the documentation, move to the folder <Doc> and *}
\Msg{* run the file 'mycv.tex' twice through LaTeX.               *}
\Msg{*                                                            *}
\Msg{* See the file 'Exampes/Notes.txt' for information on how to *}
\Msg{* produce pdf files with examples.                           *}
\Msg{*                                                            *}
\Msg{* If you want to verify the integrity of the main files, you *}
\Msg{* can run the script 'checksum.pl' (on Unix-like operating   *}
\Msg{* systems, make it executable -- i.e. chmod +x checksum.pl). *}
\Msg{*                                                            *}
\Msg{* Happy (La)TeXing!                                          *}
\Msg{*                                                            *}
\Msg{**************************************************************}

\endbatchfile
%</install>
% \StopEventually{}
%
%
% \iffalse
%<*mycv-base.def>
% \fi

\ProvidesFileSVN
   {$Id: mycv_base.def 87 2012-05-17 00:40:11Z ghangenit $}
   [v\@versionstr][Base system core]

%% for lists and other useful tools
\RequirePackage{etextools}

%%%%%%%%%%%%%%%%%%%
%%                %
%% Default values %
%%                %
%%%%%%%%%%%%%%%%%%%

\def\@mainbodypagesize{1.00}
\def\@subbodypagesize{0.45}

\def\@mainheaderpagesize{1.00}
\def\@subheaderpagesize{0.44}

\def\@mainfooterpagesize{1.00}
\def\@subfooterpagesize{0.44}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%                            %
%% Layout components (parser) %
%%                            %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\def\@cmdsListSep{:}
\def\@argsListSep{=}

\expandaftercmds{\DeclareCmdListParser\MyParserCmds}{\@cmdsListSep}
\expandaftercmds{\DeclareCmdListParser\MyParserArgs}{\@argsListSep}

%% -----------------------------------
%% setup file components: header pages
%% -----------------------------------

\def\@MainHeaderPageBegin{MainHeaderPageBegin}
\def\@SubHeaderPageBegin{SubHeaderPageBegin}
\def\@MainHeaderPageEnd{MainHeaderPageEnd}
\def\@SubHeaderPageEnd{SubHeaderPageEnd}

%% ---------------------------------
%% setup file components: body pages
%% ---------------------------------

\def\@MainBodyPageBegin{MainBodyPageBegin}
\def\@MainBodyPageEnd{MainBodyPageEnd}
\def\@SubBodyPageBegin{SubBodyPageBegin}
\def\@SubBodyPageEnd{SubBodyPageEnd}

\def\@MainFooterPageBegin{MainFooterPageBegin}
\def\@SubFooterPageBegin{SubFooterPageBegin}
\def\@MainFooterPageEnd{MainFooterPageEnd}
\def\@SubFooterPageEnd{SubFooterPageEnd}

%% -------------------
%% regular expressions
%% -------------------

\def\@regexPreCmd{<precmd:([-!*@.0-9A-Za-z \@cmdsListSep\@argsListSep]+)>}
\def\@regexPostCmd{<postcmd:([-!*@.0-9A-Za-z \@cmdsListSep\@argsListSep]+)>}
\def\@regexArgsList{\@argsListSep([-!*@.0-9A-Za-z \@argsListSep]+)}

\def\@regexMarginLB{/ml([0-9.-]+.{2})}
\def\@regexMarginRB{/mr([0-9.-]+.{2})}
\def\@regexPageSizeAbs{/pagesize([0-9.]+.{2})/}
\def\@regexPagebreak{/pagebreak/}
\def\@regexPageSize{<([0-9.]+)>}
\def\@regexMarginLE{/endml/}
\def\@regexMarginRE{/endmr/}
\def\@regexFileName{^([_\-a-zA-Z0-9]+)@}
\def\@regexCmdName{([a-zA-Z]+)}
\def\@regexFileVar{^.{1}([A-Za-z]+)}
\def\@regexParamTypeA{^[@]}
\def\@regexParamTypeB{^[!]}
\def\@regexParamTypeC{^[*]}

%% ==================
%% Auxiliary commands
%% ==================

\newcommand{\@concatCommandArg}[1]{%
   \ifnum\pdfmatch{\@regexParamTypeA}{#1}=1
      \StrGobbleLeft{#1}{1}[\arg]
      \expandafter\g@addto@macro\expandafter\args%
         \expandafter{\expandafter[\arg]}
   \else
      \ifnum\pdfmatch{\@regexParamTypeB}{#1}=1
         \StrGobbleLeft{#1}{1}[\arg]
         \expandafter\g@addto@macro\expandafter\args%
            \expandafter{\expandafter<\arg>}
      \else
         \ifnum\pdfmatch{\@regexParamTypeC}{#1}=1
            \g@addto@macro\args{*}
         \else
            \g@addto@macro\args{{#1}}
         \fi
      \fi
   \fi%
}

\newcommand{\@execCommand}[1]{%
   \let\args\@empty
   \ifnum\pdfmatch{\@regexArgsList}{#1}=1
      \@getRegexResult{\argslist}
      \ifnum\pdfmatch{\@regexCmdName}{#1}=1
         \@getRegexResult{\cmd}
      \fi
      \MyParserArgs[\@concatCommandArg]\argslist
      \expandaftercmds{\csuse\cmd}{\args}
   \else
      \csuse{#1}
   \fi%
}

\newcommand{\@getRegexResult}[1]{%
   \StrPosition{\pdflastmatch 1}{>}[\n]
   \StrGobbleLeft{\pdflastmatch 1}{\n}[#1]%
}

\newcommand{\@executeCommandList}[2]{%
   \ifnum\pdfmatch{#2}{#1}=1%
      \StrPosition{\pdflastmatch 1}{>}[\n]
      \StrGobbleLeft{\pdflastmatch 1}{\n}[\cmdlist]
      \MyParserCmds[\@execCommand]\cmdlist
   \fi%
}

\newcommand{\@parsePageBegin}[2]{%
   \let\pagewidth#2
   \ifnum\pdfmatch{\@regexPageSize}{#1}=1
      \@getRegexResult{\pagewidth}
   \fi
   \@executeCommandList{#1}{\@regexPreCmd}
   \ifnum\pdfmatch{\@regexPageSizeAbs}{#1}=1
      \@getRegexResult{\pagewidth}
      \noindent\begin{minipage}[t]{\pagewidth}
   \else
      \noindent\begin{minipage}[t]{\pagewidth\textwidth}
   \fi
   \@executeCommandList{#1}{\@regexPostCmd}
   \ifnum\pdfmatch{\@regexMarginLB}{#1}=1
      \@getRegexResult{\marginsize}
      \begin{mychangemarginLeft}{\marginsize}
   \fi
   \ifnum\pdfmatch{\@regexMarginRB}{#1}=1
      \@getRegexResult{\marginsize}
      \begin{mychangemarginRight}{\marginsize}
   \fi%
}

\newcommand{\@parsePageEnd}[1]{%
   \ifnum\pdfmatch{\@regexMarginRE}{#1}=1
      \end{mychangemarginRight}
   \fi
   \ifnum\pdfmatch{\@regexMarginLE}{#1}=1
      \end{mychangemarginLeft}
   \fi
   \@executeCommandList{#1}{\@regexPreCmd}
   \ifnum\pdfmatch{\@regexPagebreak}{#1}=1
      \end{minipage}

   \else
      \end{minipage}
   \fi
   \@executeCommandList{#1}{\@regexPostCmd}
}

\newcommand{\@parseFileName}[1]{%
   \let\marginsizeleft\relax
   \let\marginsizeright\relax
   \@executeCommandList{#1}{\@regexPreCmd}
   \ifnum\pdfmatch{\@regexMarginLB}{#1}=1
      \@getRegexResult{\marginsizeleft}
      \begin{mychangemarginLeft}{\marginsizeleft}
   \fi
   \ifnum\pdfmatch{\@regexMarginRB}{#1}=1
      \@getRegexResult{\marginsizeright}
      \begin{mychangemarginRight}{\marginsizeright}
   \fi
   \IfBeginWith{#1}{*}{%
      \ifnum\pdfmatch{\@regexFileVar}{\noexpand#1}=1
         \@getRegexResult{\filename}
      \fi
      \input\cvcontentsdir/\csuse{\filename}
   }%
   {%
      \ifnum\pdfmatch{\@regexFileName}{#1}=1
         \@getRegexResult{\filename}
      \fi
      \input\cvcontentsdir/\filename
   }
   \@executeCommandList{#1}{\@regexPostCmd}
   \ifx\marginsizeright\relax
      \relax
   \else
      \end{mychangemarginRight}
   \fi
   \ifx\marginsizeleft\relax
      \relax
   \else
      \end{mychangemarginLeft}
   \fi
}

%% =============
%% Main commands
%% =============

\newcommand{\@bodylayoutlistentry}[1]{%
   \ifstrmatch{\@SubBodyPageBegin}{#1}{%
      \@parsePageBegin{#1}{\@subbodypagesize}%
   }%
   {%
      \ifstrmatch{\@SubBodyPageEnd}{#1}{%
         \@parsePageEnd{#1}%
      }%
      {%else
         \ifstrmatch{\@MainBodyPageBegin}{#1}{%
            \@parsePageBegin{#1}{\@mainbodypagesize}%
         }%
         {%else
            \ifstrmatch{\@MainBodyPageEnd}{#1}{%
               \@parsePageEnd{#1}%
            }%
            {%else
               \@parseFileName{#1}%
            }%
         }%
      }%
   }%
}

\newcommand{\@headerlayoutlistentry}[1]{%
   \ifstrmatch{\@MainHeaderPageBegin}{#1}{%
      \@parsePageBegin{#1}{\@mainheaderpagesize}%
   }%
   {%else
      \ifstrmatch{\@SubHeaderPageBegin}{#1}{%
         \@parsePageBegin{#1}{\@subheaderpagesize}%
      }%
      {%else
         \ifstrmatch{\@MainHeaderPageEnd}{#1}%
         {\@parsePageEnd{#1}}%
         {%else
            \ifstrmatch{\@SubHeaderPageEnd}{#1}{%
               \@parsePageEnd{#1}%
            }%
            {%else
               \@parseFileName{#1}%
            }%
         }%
      }%
   }%
}

\newcommand{\@footerlayoutlistentry}[1]{%
   \ifstrmatch{\@MainFooterPageBegin}{#1}{%
      \@parsePageBegin{#1}{\@mainfooterpagesize}%
   }%
   {%else
      \ifstrmatch{\@SubFooterPageBegin}{#1}{%
         \@parsePageBegin{#1}{\@subfooterpagesize}%
      }%
      {%else
         \ifstrmatch{\@MainFooterPageEnd}{#1}%
         {  \@parsePageEnd{#1}%
         }%
         {%else
            \ifstrmatch{\@SubFooterPageEnd}{#1}{%
                \@parsePageEnd{#1}%
            }%
            {%else
               \@parseFileName{#1}%
            }%
         }%
      }%
   }%
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%                            %
%% Layout components (render) %
%%                            %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\newcommand{\@raisewarning}[1]{%
   \ClassWarning{mycv}{%
      WARNING! The list <#1> used by 'mycv' class is undefined. %
      Please, define it before using '\myrenderlayout' command. %
   }%
}

\DeclareRobustCommand{\myrenderlayout}[1][a]{%
   \begingroup
   \ifsinglechar{b}{#1}{%
      \@ifundefined{bodylayoutlist}%
         {\@raisewarning{bodylayoutlist}}% else
         {\csvloop[\@bodylayoutlistentry]{\bodylayoutlist}}%
   }%
   {%else
      \ifsinglechar{h}{#1}{%
         %% --------
         %% HEADINGS
         %% --------
         \@ifundefined{headerlayoutlist}%
            {\@raisewarning{headerlayoutlist}}% else
            {\csvloop[\@headerlayoutlistentry]\headerlayoutlist}%
      }%
      {%else
         %% ------------------------------------------------
         %% FOOTINGS: sign and treatment of personal details
         %% ------------------------------------------------
         \ifsinglechar{f}{#1}{%
            \@ifundefined{footerlayoutlist}%
               {\@raisewarning{footerlayoutlist}}% else
               {\csvloop[\@footerlayoutlistentry]\footerlayoutlist}%
         }%
         {%\else
            %% --------------
            %% ALL COMPONENTS
            %% --------------
            \@ifundefined{headerlayoutlist}%
               {\@raisewarning{headerlayoutlist}}% else
               {\csvloop[\@headerlayoutlistentry]\headerlayoutlist}%
            \@ifundefined{bodylayoutlist}%
               {\@raisewarning{bodylayoutlist}}% else
               {\csvloop[\@bodylayoutlistentry]\bodylayoutlist}
            \@ifundefined{footerlayoutlist}%
               {\@raisewarning{footerlayoutlist}}% else
               {\csvloop[\@footerlayoutlistentry]\footerlayoutlist}%
         }%
      }%
   }%
   \endgroup
}
% \iffalse
%</mycv-base.def>
% \fi
%
%
% \iffalse
%<*mycv-misc.def>
% \fi
%% -------------------------------------------------------
%% Copyright 2012 Ghersi Andrea (ghanhawk@gmail.com).
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License version
%% 1.3c, available at 'http://www.latex-project.org/lppl'.
%% -------------------------------------------------------

\ProvidesFileSVN
   {$Id: mycv_misc.def 66 2012-04-28 14:38:41Z ghangenit $}
   [v\@versionstr][Miscellaneous commands]

\RequirePackage{hyperref}

%% -----------------------------------------------------
%% partial hyperref setup: the rest is set in style file
%% -----------------------------------------------------

\hypersetup{%
   pdfstartpage = 1,
   pdfauthor    = \@pdfauthor,
   pdftitle     = \@pdftitle,
   pdfsubject   = \@pdfsubject,
   pdfproducer  = \LaTeX{},
   pdfkeywords  = cv curriculum vit\ae{},
   pdfcreator   = \LaTeX{} with 'mycv' (v\@versionstr)
}

%%%%%%%%%%%%
%%         %
%% Margins %
%%         %
%%%%%%%%%%%%

\newenvironment{mychangemargin}[2]
   {\begin{list}{}{%
    \setlength{\topsep}{0pt}%
    \setlength{\leftmargin}{#1}%
    \setlength{\rightmargin}{#2}%
    \setlength{\partopsep}{0pt}%
    \setlength{\parsep}{\parskip}}\item[]%
   }%
   {\end{list}}

\newenvironment{mychangemarginLeft}[1]
   {\begin{list}{}{%
    \setlength{\topsep}{0pt}%
    \setlength{\leftmargin}{#1}%
    \setlength{\partopsep}{0pt}%
    \setlength{\parsep}{\parskip}}\item[]%
   }%
   {\end{list}}

\newenvironment{mychangemarginRight}[1]
   {\begin{list}{}{%
    \setlength{\topsep}{0pt}%
    \setlength{\rightmargin}{#1}%
    \setlength{\partopsep}{0pt}%
    \setlength{\parsep}{\parskip}}\item[]%
   }%
   {\end{list}}

%%%%%%%%%%%%%%%%
%%             %
%% Other stuff %
%%             %
%%%%%%%%%%%%%%%%

\DeclareRobustCommand{\mylang}[2][english]{%
   \foreignlanguage{#1}{{z#2}}} %{\color{blue}{#2}}}

%% ------------
%% pdf metadata
%% ------------

\DeclareRobustCommand{\mypdfsubject}[1]{\def\@pdfsubject{#1}}
\DeclareRobustCommand{\mypdfauthor}[1]{\def\@pdfauthor{#1}}
\DeclareRobustCommand{\mypdftitle}[1]{\def\@pdftitle{#1}}


% \iffalse
%</mycv-misc.def>
% \fi
%
%
% \iffalse
%<*mycv-version.def>
% \fi
\def\@versionstr{1.5.6}
% \iffalse
%</mycv-version.def>
% \fi
%
%
% \iffalse
%<*mycv.cls>
% \fi

\NeedsTeXFormat{LaTeX2e}

\RequirePackage{svn-prov}
\input{mycv_version.def}

\ProvidesClassSVN
   {$Id: mycv.cls 87 2012-05-17 00:40:11Z ghangenit $}
   [v\@versionstr][My Curriculum Vitae class]

%% ========
%% Packages
%% ========

\RequirePackage{kvoptions} % for class options with key-value format
\RequirePackage{xstring}   % for string utilities
\RequirePackage{ifthen}    % for the <\ifthenelse> command

%% =============
%% Class Options
%% =============

\DeclareBoolOption{withDec}

\DeclareDefaultOption{%
   \PassOptionsToClass{\CurrentOption}{article}}

\DeclareStringOption[english]{language}
\DeclareStringOption[Contents]{cntdir}
\DeclareStringOption[mycv_style]{style}
\DeclareStringOption[]{mdlname}
\ProcessKeyvalOptions*

%% -----------------------------------------------------------
%% The value of an option declared with <\DeclareStringOption>
%% is stored in the macro \<class (or package) name>@<option>
%% -----------------------------------------------------------

\PassOptionsToPackage{\mycv@language}{babel}
\RequirePackage{babel}

\LoadClass{article}

\def\cvcontentsdir{\mycv@cntdir}

%% ===============
%% File inclusions
%% ===============

\input{mycv_base.def}
\input{mycv_misc.def}

%% -------------------------------------
%% use custom, default or any style file
%% -------------------------------------
\ifthenelse{\equal{\mycv@style}{none}}%
   {\relax}% file style is not wanted
   {\RequirePackage{\mycv@style}}

%% ----------------------
%% use decorations or not
%% ----------------------
\ifthenelse{\boolean{mycv@withDec}}%
   {\RequirePackage{mycv_dec}}%
   {\relax}

\DeclareRobustCommand{\ifmodel}[1]{%
   \begingroup
   \def\@mdlname{#1}
   \ifx\mycv@mdlname\@mdlname
      \endgroup
      \expandafter\@firstoftwo
   \else
      \endgroup
      \expandafter\@secondoftwo
   \fi
}

%% -----------------------------------------------
%% <\ifoption{optionname}{then block}{else block}>
%% -----------------------------------------------

\DeclareRobustCommand{\ifoption}[1]{%
   \begingroup
   \ifthenelse{\boolean{mycv@#1}}
      {\endgroup\expandafter\@firstoftwo}
      {\endgroup\expandafter\@secondoftwo}%
}
% \iffalse
%</mycv.cls>
% \fi
%
%
% \iffalse
%<*mycv-dec.sty>
% \fi

\NeedsTeXFormat{LaTeX2e}
\RequirePackage{svn-prov}

\input{mycv_version.def}

\ProvidesPackageSVN
   {$Id: mycv_dec.sty 89 2012-05-19 18:23:03Z ghangenit $}
   [v\@versionstr][Decorations commands]

\RequirePackage{tikz} % for graphics
\usetikzlibrary{shapes,decorations,shadows,fadings}
\usetikzlibrary{decorations.pathmorphing}
\usetikzlibrary{decorations.fractals}
\usetikzlibrary{decorations.shapes}
\usetikzlibrary{calc}
\RequirePackage{xparse}  % for commands with multiple default arguments
\RequirePackage{xstring} % for string utilities

%%%%%%%%%%%%%
%%          %
%% Settings %
%%          %
%%%%%%%%%%%%%

\def\@segmentLengthString{}
\def\@segmentLengthValue{}
\def\@lineWidthString{}
\def\@lineWidthValue{}
\def\@segmentAmplitudeString{}
\def\@segmentAmplitudeValue{}
\def\@xBottomRight{-1cm}
\def\@yBottomRight{1cm}
\def\@xTopLeft{1cm}
\def\@yTopLeft{-1cm}

\tikzfading[%
   name=fade out, inner color=transparent!0,
   outer color=transparent!100%
]

\tikzset{
   define mycolor/.code 2 args={\definecolor{#1}{rgb}{#2}},
   DecoratewithShape/.style={%
      decorate,decoration={shape backgrounds,shape=#1}%
   },
   DecoratewithPathMorphing/.style={%
      decorate,decoration=#1%
   },
   Mainstyle/.style={
      define mycolor={myred}{0.43,0.06,0,13},
      define mycolor={dpred}{0.80,0.35,0}
   }
}

%%%%%%%%%%%%%
%%          %
%% Commands %
%%          %
%%%%%%%%%%%%%

\newcommand{\versionBasedSettings}[2]{%
  \IfBooleanTF#1{%
      %% ---------------------------------------------------------
      %% From <xstring> package
      %% ---------------------------------------------------------
      %% Macros of this package take the catcodes of tokens into
      %% account. To avoid unexpected behaviour (particulary with
      %% tests), you should keep in mind that tokens and their
      %% catcodes are examined.
      %% For instance, these two arguments: {\string a\string b}
      %% and {ab} do not expand into equal strings for xstring!
      %% Because of the command \string, the first expands into
      %% ab with catcodes 12 while the second have characters
      %% with their natural catcodes 11. Catcodes do not match!
      %% Starred macros do not take catcodes into account. They
      %% simply convert some arguments into arguments with
      %% catcodes 10, 11 and 12, and call the non-starred macros
      %% with these modified arguments.
      %% ---------------------------------------------------------
      \IfStrEqCase*{#2}{%
         {radial}{\def\@colorStr{inner color}}%
         {ball}{\def\@colorStr{ball color}}%
         {none}{\relax}%
      }%
      [mycv: Unknown option <#2>!!!]%
   }{\relax}%
}

%% -----------------------------------------------------
%% Pathmorphing decoration values:
%%    shape, straight zigzag, random steps, saw, zigzag,
%%    bent, bumps, coil, snake, Koch snowflake
%%
%% Shadings: radial, ball
%% -----------------------------------------------------

\DeclareDocumentCommand{\mydecorationsPathmorphing}%
   {s O{1} m O{gray} D<>{radial} D<>{white}}%
{%
   \begingroup
   \versionBasedSettings{#1}{#5}%
   \begin{tikzpicture}[overlay,remember picture]%
      \IfBooleanTF#1{% version with a star (shading)
         \shade[
            Mainstyle,
            \@lineWidthString=\@lineWidthValue,
            \@segmentAmplitudeString=\@segmentAmplitudeValue,
            \@segmentLengthString=\@segmentLengthValue,
            DecoratewithPathMorphing=#3,
            color=#4,
            shading=#5,
            \@colorStr=#6,
            \ifnum#2>0draw\fi
         ]}%
      {% version without a star (not shading)
         \path[
            Mainstyle,
            \@lineWidthString=\@lineWidthValue,
            \@segmentAmplitudeString=\@segmentAmplitudeValue,
            \@segmentLengthString=\@segmentLengthValue,
            DecoratewithPathMorphing=#3,
            color=#4,
            fill=#6,
            \ifnum#2>0draw\fi
         ]}%
      ($ (current page.north west)+
         (\@xTopLeft,\@yTopLeft) $)
      rectangle % -- oppure circle (4), ...
      ($ (current page.south east)+
         (\@xBottomRight,\@yBottomRight) $);
   \end{tikzpicture}
   \endgroup
}

%% --------------------------------------
%% Shapes: dart, diamond, rectangle, star
%% --------------------------------------

\DeclareDocumentCommand{\mydecorationsShape}%
   {O{1} m O{gray}}
{%
   \begingroup
   \begin{tikzpicture}[overlay,remember picture]
      \path[
         Mainstyle,
         \@lineWidthString=\@lineWidthValue,
         \@segmentAmplitudeString=\@segmentAmplitudeValue,
         \@segmentLengthString=\@segmentLengthValue,
         DecoratewithShape=#2,
         color=#3,
         \ifnum#1>0draw\fi
      ]%
      ($ (current page.north west)+
         (\@xTopLeft,\@yTopLeft) $)
      rectangle
      ($ (current page.south east)+
         (\@xBottomRight,\@yBottomRight) $);
   \end{tikzpicture}
   \endgroup
}

\DeclareDocumentCommand{\mydecorationsFading}%
   {O{north} m O{80} O{black} D<>{1.0}}
{%
   \begin{tikzpicture}[overlay,remember picture]
   \draw[path fading=#1,fill=#2!#3!#4,opacity=#5]
      ($ (current page.north west)+
         (\@xTopLeft,\@yTopLeft) $)
      rectangle % -- oppure circle (4), ...
      ($ (current page.south east)+
         (\@xBottomRight,\@yBottomRight) $);
   \end{tikzpicture}%
}

\DeclareRobustCommand{\mydecorationsSetPosXTL}[1]%
   [1cm]%
{%
   \def\@xTopLeft{#1}%
}

\DeclareRobustCommand{\mydecorationsSetPosYTL}[1]%
   [-1cm]%
{%
   \def\@yTopLeft{#1}%
}

\DeclareRobustCommand{\mydecorationsSetPosXBR}[1]%
   [-1cm]%
{%
   \def\@xBottomRight{#1}%
}

\DeclareRobustCommand{\mydecorationsSetPosYBR}[1]%
   [1cm]%
{%
   \def\@yBottomRight{#1}%
}

\DeclareDocumentCommand{\mydecorationsSetLineWidth}%
   {s O{}}%
{%
   \IfBooleanTF#1%
      {\def\@lineWidthString{}} % starred
      {\def\@lineWidthString{line width}} % not starred

   \def\@lineWidthValue{#2}%
}

\DeclareDocumentCommand{\mydecorationsSetSegmentAmplitude}%
   {s O{}}%
{%
   \IfBooleanTF#1%
      {\def\@segmentAmplitudeString{}} % starred
      {\def\@segmentAmplitudeString{segment amplitude}} % not starred

   \def\@segmentAmplitudeValue{#2}%
}

\DeclareDocumentCommand{\mydecorationsSetSegmentLength}%
   {s O{}}%
{%
   \IfBooleanTF#1%
      {\def\@segmentLengthString{}} % starred
      {\def\@segmentLengthString{segment length}} % not starred

   \def\@segmentLengthValue{#2}%
}
% \iffalse
%</mycv-dec.sty>
% \fi
%
%
% \iffalse
%<*mycv-style.sty>
% \fi

\NeedsTeXFormat{LaTeX2e}
\RequirePackage{svn-prov}

\input{mycv_version.def}

\ProvidesPackageSVN
   {$Id: mycv_style.sty 89 2012-05-19 18:23:03Z ghangenit $}
   [v\@versionstr][Default style file]

\RequirePackage{titlesec}  % for title format and spacing
\RequirePackage{fancyhdr}  % for custom headers and footers
\RequirePackage{xcolor}    % for colors
\RequirePackage{calligra}  % for the calligra font 
\RequirePackage{times}     % for times font
\RequirePackage{pifont}    % for the ’ding’ style (itemize environment)
\RequirePackage{marvosym}  % symbols - phone
\RequirePackage{amssymb}   % symbols - email
\RequirePackage{hyperref}  % for hypertext links and other stuff
\RequirePackage{xparse}    % for commands with multiple default arguments

%%%%%%%%%%%%
%%         %
%% Layout  %
%%         %
%%%%%%%%%%%%

%% -----------------------------------------------------
%% passing the option 'showframe' to the package permits
%% to see the page margins: that may be useful for debug
%% -----------------------------------------------------
\RequirePackage[
   paperwidth=210mm,
   paperheight=297mm,
   textwidth=495pt,
   vmargin=1.5cm,
   columnsep=18pt
]{geometry}

%%%%%%%%%%%%%%%%%%%%%%
%%                   %
%% Header and footer %
%%                   %
%%%%%%%%%%%%%%%%%%%%%%

\renewcommand{\headrulewidth}{0.0pt}

\fancyhf{}

\DeclareRobustCommand{\mycfoot}[1]{%
   \cfoot{\color{myheadingscolor}{{\sffamily\tiny{#1}}}}%
}

\pagestyle{fancy}

%%%%%%%%%%%%%%%%%%%%%%%%%
%%                      %
%% Hyperref and colours %
%%                      %
%%%%%%%%%%%%%%%%%%%%%%%%%

%% ------------------------------------------
%% setup colours for links, text and headings
%% ------------------------------------------
\definecolor{mylinkcolour}{HTML}{0000FF}     % {FF0080} %light purple link for the email
\definecolor{myshadecolor}{HTML}{F0F0F0}     % {E4E3E3}%{D4D7FE} %light blue shade
\definecolor{mytextcolor}{HTML}{2b2b2b}      % text is almost black
\definecolor{myheadingscolor}{HTML}{701112}  % dark red

%% ----------------------
%% setup hyperref package
%% ----------------------
\hypersetup{%
   colorlinks,breaklinks,%
   urlcolor=mylinkcolour,%
   linkcolor=mylinkcolour,%
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%                                  %
%% Section title format and spacing %
%%                                  %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\DeclareDocumentCommand{\mysectionTitleFormat}%
   {O{myheadingscolor} O{myheadingscolor}}%
{%
   \titleformat{\section}%
      {\bigskip\color{#1}\titlerule\scshape\Large\raggedright}%
      {}{0em}{}[\color{#2}\titlerule\medskip]
}

\DeclareDocumentCommand{\mysectionTitleSpacing}%
   {O{0pt} O{0pt} O{5pt}}%
{%
   \titlespacing{\section}{#1}{#2}{#3}%
}

\mysectionTitleFormat
\mysectionTitleSpacing

%%%%%%%%%%%%%%%%%%%%
%%                 %
%% Customized list %
%%                 %
%%%%%%%%%%%%%%%%%%%%

\newenvironment{myitemize}%
   {\renewcommand{\labelitemi}{\ding{43}}\begin{itemize}}%
   {\end{itemize}}

%%%%%%%%%%%%%%%%
%%             %
%% Other stuff %
%%             %
%%%%%%%%%%%%%%%%

%% --------------------------------
%% set text color for the whole doc
%% --------------------------------
\color{mytextcolor}
% \iffalse
%</mycv-style.sty>
% \fi
%
%
% \iffalse
%<*mycv-split-contents.pl>
% \fi
#!/usr/bin/perl

# -------------------------------------------------------
# Copyright 2012 Ghersi Andrea (ghanhawk@gmail.com).
#
# This work may be distributed and/or modified under the
# conditions of the LaTeX Project Public License version
# 1.3c, available at 'http://www.latex-project.org/lppl'.
# -------------------------------------------------------

# $Id: mycv_split_contents.pl 89 2012-05-19 18:23:03Z ghangenit $

use Getopt::Long;
use File::Path;
use warnings;
use strict;
use Cwd;

# hashes with errors and warnings messages

my %errors = (
    OME => "$0: ERROR opening <%s> in output mode (CWD: %s): %s\n",
    IME => "$0: ERROR opening <%s> in input mode (CWD: %s): %s\n",
    NIF => "$0: ERROR: no input file provided!\nUse the option <-i infile>.\n",
    NOD => "$0: ERROR: no output dir. provided!\nUse the option <-o outdir>.\n",
    IOE => "$0: ERROR: input file and output dir are the same!\n"
);

my %warnings = (
    NVC => "WARNING:: <%s> is not recognized as a valid component!\n" .
           "A component can only be 'header', 'body' or 'footer'.\n"
);

my $outdir = 'Contents';         # default output dir
my $infile = 'cv_contents.tex';  # default input file
my $cwd = getcwd();              # current directory
my %opt = ();                    # hash for options


###
###

sub _usage()
{
    print STDERR << "EOF";

    Usage: $0 [-h] [-e] [-i infile] [-o outdir] [-m modelfile]
    Version <1.0>

    Options:
    ========

    -o outdir  \t  : uses <outdir> as output dir {default: 'Contents'}
    -m mdlfile \t  : writes basic model directives to the <mdlfile> file
    -i infile  \t  : uses <infile> as input file {default: 'cv_contents.tex'}
    -e         \t  : keeps file names extension in model directives
    -h         \t  : this help message

    Examples:
    =========

    1) Splits the input file 'cv_contents.tex' into multiple files (they
       will be created in the directory 'Contents'), as specified in the
       file itself - the input file is not modified:

          [$0 -i cv_contents.tex]

    2) As above but, in addiction, a basic model file (model-spl.tex) for
       multiple files is created (in the model directives, the file names
       extension will be removed):

          [$0 -i cv_contents.tex -m model-spl.tex]

    3) As above, but file names in the model directives will keep their
       own extension:

          [$0 -i cv_contents.tex -m model-spl.tex -e]

EOF
    exit 0;
}


###
###

sub mcdie { printf STDERR @_, $!; exit 1; }


###
###

sub processCommandLine()
{
    GetOptions (
      'o=s' => \$opt{o}, 'i=s' => \$opt{i},
      'm=s' => \$opt{m}, 'h'   => \$opt{h},
      'e'   => \$opt{e}
    ) or _usage();

    $opt{h} and _usage();
    _usage() if ( $#ARGV > -1 );

    _dealWithInOutFiles();
    return \%opt;
}


###
###

sub _dealWithInOutFiles
{
    $opt{o} and $outdir = $opt{o};
    $opt{i} and $infile = $opt{i};

    if ( $infile eq "" ){ die $errors{NIF} }
    if ( $outdir eq "" ){ die $errors{NOD} }
    if ( $infile eq $outdir ){ die $errors{IOE} }

    $opt{outdir} = $outdir;
    $opt{infile} = $infile;
}


###
###

sub fileprocess ($)
{
    my $cmdoptions = shift;
    my $outdir = $cmdoptions->{'outdir'};
    my $linehook = '###';
    my %components;
    my $sep = '::';

    open INFILE, $cmdoptions->{'infile'} or
        mcdie( $errors{IME}, $cmdoptions->{'infile'}, $cwd );

    mkpath($outdir);
    (-d $outdir) or mcdie( $errors{OME}, $outdir, $cwd );

    while ( my $line = <INFILE> )
    {
        my @info; my $ctype='';
        if ( $line =~ /$linehook/ )
        {
            PROCESSLINE:
            @info = split(/$sep/, $line);

            $ctype=$info[2]; # contains the component type (header,...)
            chomp($ctype);

            if ( $info[2] )
            {
                if ( $ctype =~ /header/ ) { push (@{$components{h}}, $line) }
                elsif ( $ctype =~ /body/ ){ push (@{$components{b}}, $line) }
                elsif ( $ctype =~ /footer/ ){ push (@{$components{f}}, $line) }
                else { printf STDERR $warnings{NVC}, $ctype }
            }

            if ( $info[1] ) # contains the file name to write
            {
                open OUTFILE, '>', "$outdir/$info[1]" or
                    mcdie( $errors{OME}, $info[1], $cwd );

                while ( $line = <INFILE> )
                {
                    if ( $line =~ /$linehook/ )
                    {
                        close OUTFILE;
                        goto PROCESSLINE;
                    }
                    else { print OUTFILE $line } # write to file
                }
            }
        }
    }

    close INFILE;
    if ( $cmdoptions->{'m'} )
    {
        open OUTFILE, '>', $cmdoptions->{'m'} or
            mcdie( $errors{OME}, $cmdoptions->{'m'}, $cwd );

        for my $key ( keys %components )
        {
            if ( $key eq "b" )    { print OUTFILE "\\def\\bodylayoutlist{%\n" }
            elsif ( $key eq "h" ) { print OUTFILE "\\def\\headerlayoutlist{%\n" }
            elsif ( $key eq "f" ) { print OUTFILE "\\def\\footerlayoutlist{%\n" }

            my @info; my $cnt=0; my $fname='';
            while ( $components{$key}[$cnt] )
            {
                @info = split(/$sep/, $components{$key}[$cnt]);
                $cnt++;

                $fname=$info[1];
                if ( !$cmdoptions->{'e'} ){ $fname =~ s{\.[^.]+$}{} }
                if ( $info[1] ){ chomp($fname); print OUTFILE "   $fname@" }
                if ( $info[3] ){ chomp($info[3]); print OUTFILE ":$info[3]" }
                print OUTFILE ",\n";
            }
            print OUTFILE "}\n";
        }
        close OUTFILE;
    }
}


##
## MAIN
##

fileprocess( processCommandLine() );
% \iffalse
%</mycv-split-contents.pl>
% \fi
%
% \Finale
\endinput
