% Copyright 2006 Konstantin Korikov <lostclus@ua.fm>
%
% 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 2003/12/01 or later.
%
% This work has the LPPL maintenance status "maintained".
% 
% This Current Maintainer of this work is Konstantin Korikov.
%
% This work consists of all files listed in manifest.txt.
%
m4_ESKDX_INIT
m4_FILE_INIT
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{eskdsect}[m4_dnl
m4_FILE_ID([[$Date:: 2010-01-14#$]]) Sectioning]

\newcommand{\ESKD@point@style}{single}

\DeclareOption{pointsingle}{\renewcommand{\ESKD@point@style}{single}}
\DeclareOption{pointsection}{\renewcommand{\ESKD@point@style}{section}}
\DeclareOption{pointsubsection}{\renewcommand{\ESKD@point@style}{subsection}}

\ProcessOptions\relax

\def\@startsection#1#2#3#4#5#6{%
  \if@noskipsec \leavevmode \fi
  \par
  \@tempskipa #4\relax
  \@afterindenttrue
  \ifdim \@tempskipa <\z@
    \@tempskipa -\@tempskipa \@afterindentfalse
  \fi
  \if@nobreak
    \everypar{}%
    \divide \@tempskipa by 2
    \vskip -\@tempskipa
    \vskip\z@skip
  \else
    \addpenalty\@secpenalty\addvspace\@tempskipa
  \fi
  \@ifstar
    {\@ssect{#3}{#4}{#5}{#6}}%
    {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}}

m4_dnl выравнивание заголовков рубрикации
\newcommand{\ESKDsectAlignLeft}{%
  \let\\\@centercr\@rightskip\@flushglue \rightskip\@rightskip%
  \leftskip\z@skip}
\newcommand{\ESKDsectAlignRight}{%
  \let\\\@centercr\rightskip\z@skip\leftskip\@flushglue
  \parindent\z@\parfillskip\z@skip}
\newcommand{\ESKDsectAlignCenter}{%
  \let\\\@centercr
  \rightskip\@flushglue\leftskip\@flushglue
  \parindent\z@\parfillskip\z@skip}

\newcommand{\ESKDsectionAlign}{\ESKDsectAlignLeft}
\newcommand{\ESKDsubsectionAlign}{\ESKDsectAlignLeft}
\newcommand{\ESKDsubsubsectionAlign}{\ESKDsectAlignLeft}

m4_dnl короткий способ установки выравнивания заголовков
\newcommand{\ESKDsectAlign}[2]{%
  \expandafter\renewcommand\csname\string ESKD#1Align\endcsname{%
  \@nameuse{ESKDsectAlign#2}}}

m4_dnl стиль заголовков рубрикации
\newcommand{\ESKDsectionStyle}{\normalfont\Large\bfseries\MakeUppercase}
\newcommand{\ESKDsubsectionStyle}{\normalfont\large\bfseries}
\newcommand{\ESKDsubsubsectionStyle}{\normalfont\normalsize\bfseries}

m4_dnl короткий способ установки стиля заголовков
\newcommand{\ESKDsectStyle}[2]{%
  \expandafter\renewcommand\csname\string ESKD#1Style\endcsname{#2}}

m4_dnl вертикальные отступы заголовков рубрикации
\newlength{\ESKDsectionSkipBefore}
\newlength{\ESKDsectionSkipAfter}
\setlength{\ESKDsectionSkipBefore}{-15mm \@plus -3mm \@minus -2mm}
\setlength{\ESKDsectionSkipAfter}{15mm \@plus 1mm \@minus 2mm}
\newlength{\ESKDsubsectionSkipBefore}
\newlength{\ESKDsubsectionSkipAfter}
\setlength{\ESKDsubsectionSkipBefore}{-15mm \@plus -3mm \@minus -2mm}
\setlength{\ESKDsubsectionSkipAfter}{15mm \@plus 1mm \@minus 2mm}
\newlength{\ESKDsubsubsectionSkipBefore}
\newlength{\ESKDsubsubsectionSkipAfter}
\setlength{\ESKDsubsubsectionSkipBefore}{-15mm \@plus -3mm \@minus -2mm}
\setlength{\ESKDsubsubsectionSkipAfter}{15mm \@plus 1mm \@minus 2mm}

m4_dnl которкий способ установки отступов
\providecommand{\plus}{\@plus}
\providecommand{\minus}{\@minus}

\newcommand{\ESKDsectSkip}[3]{%
  \expandafter\setlength\csname\string ESKD#1SkipBefore\endcsname{#2}%
  \expandafter\setlength\csname\string ESKD#1SkipAfter\endcsname{#3}}

\renewcommand\section{\@startsection {section}{1}{\parindent}%
                                   {\ESKDsectionSkipBefore}%
                                   {\ESKDsectionSkipAfter}%
                                   {\ESKDsectionAlign\ESKDsectionStyle}}
\renewcommand\subsection{\@startsection{subsection}{2}{\parindent}%
                                     {\ESKDsubsectionSkipBefore}%
                                     {\ESKDsubsectionSkipAfter}%
                                     {\ESKDsubsectionAlign\ESKDsubsectionStyle}}
\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\parindent}%
                                     {\ESKDsubsubsectionSkipBefore}%
                                     {\ESKDsubsubsectionSkipAfter}%
                                     {\ESKDsubsubsectionAlign\ESKDsubsubsectionStyle}}

\renewcommand{\thesection}{\arabic{section}}
\renewcommand{\thesubsection}{\thesection.\arabic{subsection}}
\renewcommand{\thesubsubsection}{\thesubsection.\arabic{subsubsection}}
\newif\ifESKD@point@style@single
\ESKD@point@style@singlefalse

\newcommand{\ESKD@point@style@single}{
  \newcounter{point}
  \renewcommand{\thepoint}{\arabic{point}}
  \newcommand{\theHpoint}{\arabic{point}}
  \ESKD@point@style@singletrue}

\newcommand{\ESKD@point@style@section}{
  \newcounter{point}[section]
  \renewcommand{\thepoint}{\thesection.\arabic{point}}
  \newcommand{\theHpoint}{\theHsection.\arabic{point}}}

\newcommand{\ESKD@point@style@subsection}{
  \newcounter{point}[subsection]
  \renewcommand{\thepoint}{\thesubsection.\arabic{point}}
  \newcommand{\theHpoint}{\theHsubsection.\arabic{point}}}

\@nameuse{ESKD@point@style@\ESKD@point@style}
\newcounter{subpoint}[point]
\newcounter{subsubpoint}[subpoint]
\renewcommand{\thesubpoint}{\thepoint.\arabic{subpoint}}
\newcommand{\theHsubpoint}{\theHpoint.\arabic{subpoint}}
\renewcommand{\thesubsubpoint}{\thesubpoint.\arabic{subsubpoint}}
\newcommand{\theHsubsubpoint}{\theHsubpoint.\arabic{subsubpoint}}

\newcommand{\point}{%
  \par\refstepcounter{point}\thepoint\quad}
\newcommand{\subpoint}{%
  \par\refstepcounter{subpoint}\thesubpoint\quad}
\newcommand{\subsubpoint}{%
  \par\refstepcounter{subsubpoint}\thesubsubpoint\quad}

m4_dnl приложения
\newcounter{appendix}
\renewcommand{\theappendix}{\Asbuk{appendix}}
\newlength{\ESKDappendixSkip}
\setlength{\ESKDappendixSkip}{15mm \@plus 3mm \@minus 10mm}

\newcommand{\ESKDappendix}[2]{%
  \ESKDclearDoublePage%
  \refstepcounter{appendix}%
  \setcounter{point}{0}%
  \ifESKD@point@style@single%
    \renewcommand{\thepoint}{\theappendix.\arabic{point}}%
  \fi
  \setcounter{section}{0}%
  \renewcommand{\thesection}{\theappendix.\arabic{section}}%
  \setcounter{equation}{0}%
  \renewcommand{\theequation}{\theappendix.\arabic{equation}}%
  \setcounter{figure}{0}%
  \renewcommand{\thefigure}{\theappendix.\arabic{figure}}%
  \setcounter{table}{0}%
  \renewcommand{\thetable}{\theappendix.\arabic{table}}%
  \addcontentsline{toc}{section}{\appendixname\ \theappendix\ #2}%
  \begin{list}{}{%
    \setlength{\itemindent}{0mm}%
    \setlength{\labelwidth}{0mm}%
    \setlength{\labelsep}{0mm}%
    \setlength{\leftmargin}{0mm}%
    \setlength{\topsep}{0mm}%
    \setlength{\parskip}{0mm}%
    \setlength{\partopsep}{0mm}%
    \setlength{\itemsep}{0mm}%
    \setlength{\parsep}{0mm}}
    \item\centering\appendixname\ \theappendix
    \ifx#1\@empty\else\\(#1)\fi\\
    \item\centering\bf #2
  \end{list}%
  \par\nobreak\addvspace{\ESKDappendixSkip}}

m4_dnl содержание
\renewcommand\tableofcontents{%
  \begingroup
  \ESKDsectAlign{section}{Center}
  \section*{\contentsname
    \@mkboth{%
      \MakeUppercase\contentsname}{\MakeUppercase\contentsname}}%
  \endgroup
  \@starttoc{toc}}

m4_dnl vim:ft=tex:sw=2:ai