% 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.
%

% Пакет предоставляет возможность вставки листа
% почти любого размера (ограничения описаны в руководстве
% пользователя xespdx):


%
% This is automaticaly generated file, do not edit it.
%

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{xespdfreesize}[2020/03/20 v1.00 Inserting Free Size Sheets]

\RequirePackage{xespdstamp}
 
% переключение размера возможно только в pdflatex.
% Tем не менее, latex тоже сможет собрать такой документ, 
% но все большие страницы
% обрежет по размерам формата, установленного в documentclass
\RequirePackage{ifpdf}
\ifpdf{}
\else{\PackageWarningNoLine{xespdfreesize}
  {It's better to compile this document with pdflatex.\MessageBreak
  In DVI you will get only part of the inserted big sheet}}
\fi

% в xespdstamp для ускорения отрисовки рамки применен \savebox
% в нашем случае это неудобно, будем рисовать персонально
% на каждой странице
\newcommand{\XESPDdrawFrameFree}{%
  \put(\XESPDltu{\XESPDframeX},\XESPDltu{\XESPDframeY}){%
    \setlength{\unitlength}{1mm}%
  \begin{picture}(0,0)(0,0)
  \linethickness{\XESPDlineThick}
  \put(0,\XESPDltu{\XESPDframeH}){\line(1,0){\XESPDltu{\XESPDframeW}}}
  \put(0,0){\line(1,0){\XESPDltu{\XESPDframeW}}}
  \put(0,0){\line(0,1){\XESPDltu{\XESPDframeH}}}
  \put(\XESPDltu{\XESPDframeW},0){\line(0,1){\XESPDltu{\XESPDframeH}}}
  \end{picture}}}
  
% содержимое нестандартной графы 32 по умолчанию
\newcommand\XESPDtheColumnXXXIIfree{\@nameuse{XESPDemptyFormatName}}

% определим нашу собственную нестандартную графу 32
\newcommand{\XESPDdrawColumnXXXIIfree}{%
  \setlength{\XESPD@tmpdima}{\XESPDframeX+\XESPDframeW-50mm}%
  \setlength{\XESPD@tmpdimb}{\XESPDframeY-3.7mm}%
  \put(\XESPDltu{\XESPD@tmpdima},\XESPDltu{\XESPD@tmpdimb}){%
    \makebox[50mm][r]{\XESPDfontIII\XESPDtheColumnXXXIIfree}}}

% Определим новый стиль. Подробнее про определение своих стилей
% можно прочитать в руководстве пользователя xespdx,
% или заглянуть в xespdstamp.sty,
% кусок оттуда был использован как основа для стиля freesize
\XESPDnewStyle{freesize}{8mm}
\XESPDputOnStyle{freesize}{frame}{\XESPDdrawFrameFree}
\XESPDputOnStyle{freesize}{stamp}{\XESPDdrawStampIIa}
\ifXESPD@enable@columns@xix
  \XESPDputOnStyle{freesize}{columnsxix}{\XESPDdrawColumnsXIX}
\fi
\ifXESPD@enable@column@xxvi
  \XESPDputOnStyle{freesize}{columnxxvi}{\XESPDdrawColumnXXVI}
\fi
\ifXESPD@enable@columns@xxvii
  \XESPDputOnStyle{freesize}{columnsxxvii}{\XESPDdrawColumnsXXVIIi}
\fi
\ifXESPD@enable@column@xxxi
  \XESPDputOnStyle{freesize}{columnxxxi}{\XESPDdrawColumnXXXI}
\fi
\ifXESPD@enable@column@xxxii
  % наша новая графа 32
  \XESPDputOnStyle{freesize}{columnxxxii}{\XESPDdrawColumnXXXIIfree}
\fi
\ifXESPD@enable@column@xxxiii
  \XESPDputOnStyle{freesize}{columnxxxiii}{\XESPDdrawColumnXXXIII}
\fi
\ifXESPD@enable@column@xxxiv
  \XESPDputOnStyle{freesize}{columnxxxiv}{\XESPDdrawColumnXXXIV}
\fi
\ifXESPD@zonelabels%
  \XESPDputOnStyle{freesize}{zonelabels}{\XESPDdrawZoneLabelsI}
\fi


% вспомогательные счетчики для записей в лог
\newcounter{XESPD@free@sizepagebegin}
\newcounter{XESPD@free@sizepageend}

% теперь самое сложное - сам переключатель
\newcommand{\XESPDfreeSize}[3]{%
  \@ifundefined{XESPD@no@specii@sizes}{}{\XESPD@no@specii@sizes}% для нормальной работы с плазовой спецификацией
  \XESPDclearDoublePage%
  \setcounter{XESPD@free@sizepagebegin}{\value{page}}% запомним текущую страницу
  \pdfpagewidth=#1%
  \pdfpageheight=#2%
  \setlength{\XESPD@origin@y}{#2-1in}%
  \setlength{\XESPDframeW}{\pdfpagewidth-\XESPD@margin@si-\XESPD@margin@so}%
  \setlength{\XESPDframeH}{\pdfpageheight-\XESPD@margin@t-\XESPD@margin@b}%
  \XESPDstyle{freesize}%
  \expandafter{#3}%
  % зафиксируем факт вставки листа в \jobname.log
  \XESPDclearDoublePage%
  \renewcommand\XESPDtheColumnXXXIIfree{\@nameuse{XESPDemptyFormatName}}% сброс графы 32
  \setcounter{XESPD@free@sizepageend}{\value{page}}%
  \addtocounter{XESPD@free@sizepageend}{-1}%
  \ifthenelse{\value{XESPD@free@sizepagebegin}<\value{XESPD@free@sizepageend}}% латех начал новую страницу
    {\immediate\write0{xespdfreesize: sheet(s) with size (#1 x #2) inserted 
      at page(s) \noexpand[\arabic{XESPD@free@sizepagebegin}%
      -\arabic{XESPD@free@sizepageend}\noexpand]}}
    {\immediate\write0{xespdfreesize: sheet(s) with size (#1 x #2) inserted 
      at page(s) \noexpand[\arabic{XESPD@free@sizepageend}\noexpand]}}
  % теперь вернем всё как было до нас
  \setlength{\XESPD@origin@y}{\paperheight-1in}%
  \pdfpageheight=\paperheight%
  \pdfpagewidth=\paperwidth%
  \setlength{\XESPDframeW}{\paperwidth-\XESPD@margin@si-\XESPD@margin@so}%
  \setlength{\XESPDframeH}{\paperheight-\XESPD@margin@t-\XESPD@margin@b}%
  \XESPDstyle{\XESPD@default@style@other}%
  \newpage%
}


% Определим несколько готовых к употреблению форматов
\newcommand{\XESPDlandscapeAIV}[1]{%
  \renewcommand\XESPDtheColumnXXXIIfree{\@nameuse{XESPDa4FormatName}}%
  \XESPDfreeSize{297mm}{210mm}{#1}}

\newcommand{\XESPDportraitAIV}[1]{%
  \renewcommand\XESPDtheColumnXXXIIfree{\@nameuse{XESPDa4FormatName}}%
  \XESPDfreeSize{210mm}{297mm}{#1}}

\newcommand{\XESPDlandscapeAIII}[1]{%
  \renewcommand\XESPDtheColumnXXXIIfree{\@nameuse{XESPDa3FormatName}}%
  \XESPDfreeSize{420mm}{297mm}{#1}}

\newcommand{\XESPDportraitAIII}[1]{%
  \renewcommand\XESPDtheColumnXXXIIfree{\@nameuse{XESPDa3FormatName}}%
  \XESPDfreeSize{297mm}{420mm}{#1}}

\newcommand{\XESPDlandscapeAII}[1]{%
  \renewcommand\XESPDtheColumnXXXIIfree{\@nameuse{XESPDa2FormatName}}%
  \XESPDfreeSize{594mm}{420mm}{#1}}

\newcommand{\XESPDportraitAII}[1]{%
  \renewcommand\XESPDtheColumnXXXIIfree{\@nameuse{XESPDa2FormatName}}%
  \XESPDfreeSize{420mm}{594mm}{#1}}

\newcommand{\XESPDlandscapeAI}[1]{%
  \renewcommand\XESPDtheColumnXXXIIfree{\@nameuse{XESPDa1FormatName}}%
  \XESPDfreeSize{841mm}{594mm}{#1}}

\newcommand{\XESPDportraitAI}[1]{%
  \renewcommand\XESPDtheColumnXXXIIfree{\@nameuse{XESPDa1FormatName}}%
  \XESPDfreeSize{594mm}{841mm}{#1}}

\newcommand{\XESPDlandscapeAZERO}[1]{%
  \renewcommand\XESPDtheColumnXXXIIfree{\@nameuse{XESPDa0FormatName}}%
  \XESPDfreeSize{1189mm}{841mm}{#1}}

\newcommand{\XESPDportraitAZERO}[1]{%
  \renewcommand\XESPDtheColumnXXXIIfree{\@nameuse{XESPDa0FormatName}}%
  \XESPDfreeSize{841mm}{1189mm}{#1}}
  
\newcommand{\XESPDlandscapeBanner}[1]{%
  % Пятиметровое полотно для подшивки гармошкой в обычную папку А4.
  % Просто для демонстрации
  \XESPDfreeSize{5000mm}{297mm}{#1}}
