% Author: Alexey Shipunov, dactylorhiza@gmail.com

\ProvidesClass{etiketka}%
              [2013/01/18 v2.9 Herbarium labels]

\newif\if@NOL
\newcounter{etiketka@}
\newcounter{etiketka@@}
\newsavebox{\TMP@etiketka}

\DeclareOption{nolines}{\@NOLtrue}
\DeclareOption{lines}{\@NOLfalse}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}

\ExecuteOptions{lines}
\ProcessOptions

\LoadClass{article}

% DEFAULT LAYOUT (TO CHANGE, USE geometry PACKAGE)
\topmargin-9mm
\headheight0mm
\headsep0mm
\textheight254mm
\footskip0mm
\textwidth190mm
\oddsidemargin-14mm
\parskip 2ex plus .5ex minus .2ex

\let\ps@plain\ps@empty
\ps@empty

\nofiles

\twocolumn
% Columnsep rule with dots...
\def\@outputdblcol{%
  \if@firstcolumn
    \global \@firstcolumnfalse
    \global \setbox\@leftcolumn \box\@outputbox
  \else
    \global \@firstcolumntrue
    \setbox\@outputbox \vbox {%
                         \hb@xt@\textwidth {%
                           \hb@xt@\columnwidth {%
                             \box\@leftcolumn \hss}%
                           \hfil
                           \hskip-1.2em\rlap{\vbox to \ht\@outputbox {\leaders \vbox to 1.5em{\vss.\vss}\vfill}}\hskip1.2em
                           \hfil
                           \hb@xt@\columnwidth {%
                             \box\@outputbox \hss}%
                                             }%
                              }%
    \@combinedblfloats
    \@outputpage
    \begingroup
      \@dblfloatplacement
      \@startdblcolumn
      \@whilesw\if@fcolmade \fi
        {\@outputpage
         \@startdblcolumn}%
    \endgroup
  \fi
}

\if@NOL
\columnsep0pt
\columnseprule0pt
\def\NameStyle{\centering}
\def\NameRule{\vspace*{.7\baselineskip}}
\def\EtiketkaRule{\relax}
\fi

% USEFUL MACROS
\def\nohyphens{\hyphenpenalty=10000\exhyphenpenalty=10000\relax}

% MAIN ENVIRONMENT
\newenvironment{etiketka}[1][1]{%
\setcounter{etiketka@@}{#1}
\begin{lrbox}{\TMP@etiketka}
        \begin{minipage}{0.93\columnwidth}
                {\centering\scshape\HerbName\par}
                \vspace*{.3cm}
                \raggedright}
                {\EtiketkaRule
        \end{minipage}
\end{lrbox}
        \setcounter{etiketka@}{0}
        \loop\ifnum \value{etiketka@} < \value{etiketka@@}
        \stepcounter{etiketka@}
                \usebox{\TMP@etiketka}
\endgraf\repeat}

% LABEL ELEMENTS
% Maybe redefined...
\def\NameStyle{\parindent2em\hangindent2em}
\def\NameRule{\centerline{\rule{.95\linewidth}{.4pt}}}
\def\EtiketkaRule{%
        \vspace*{1em}
        \hbox to \linewidth{\leaders \hbox to 1.5em{\hss.\hss}\hfill}
        \vspace*{1.2em}}

% NAMES
% One can input something as \Name Plantago {} {}
% Empty line after required!
\def\Name#1 #2 #3\par{{\NameStyle
        \textit{#1 #2} #3\par}%
        \vspace*{-.7\baselineskip}
        \NameRule
        \vspace*{.2cm}}

% Anonymous label
% Empty line after required!
\def\Without{\Name {\rule{0pt}{1ex}} {} {}}

% Empty line after required!
\def\NameFam#1 #2 #3|#4\par{{\NameStyle
        \textit{#1 #2} #3 #4\par}%
        \vspace*{-.7\baselineskip}
        \NameRule
        \vspace*{.2cm}}

% REGION, DISTRICT AND LOCAL ADDRESS
% Empty line after required!
\def\Dist#1\par{{\parindent 2em\hangindent 2em#1\par}}
\def\Loc#1\par{{\parindent 4em\hangindent 4em#1\par}}

% COORDINATES IN DEGREES
\def\CGrad#1#2{#1$^\circ$ \East,
        #2$^\circ$ \North{}}
\def\CMin#1#2#3#4{#1$^\circ$~#2$^\prime$ \East,
        #3$^\circ$~#4$^\prime$ \North{}}
\def\CSec#1#2#3#4#5#6{#1$^\circ$~#2$^\prime$~#3$^{\prime\prime}$ \East,
        #4$^\circ$~#5$^\prime$~#6$^{\prime\prime}$ \North{}}

% HABIT, DATE, COLLECTOR(S)
% Empty line after required!
\def\Date#1\par{\vspace*{.2cm}\parbox[t]{.3\linewidth}{#1}\hfill}
% Empty line after required!
\def\Coll#1\par{\parbox[t]{.5\linewidth}
        {\raggedright\nohyphens\CollName#1}\par}

% COMMANDS FOR REDEFINITION
\def\East{E}
\def\North{N}
\def\Reg{\relax}
\def\Habit{\relax}
\def\HerbName{\relax}
\def\CollName{\relax}

\endinput