% ======================================================================
% PP.lco
% Copyright (c) Markus Kohm, 2009
%
% This work may be distributed and/or modified under the conditions of
% the LaTeX Project Public License, version 1.3b of the license.
% The latest version of this license is in
%   http://www.latex-project.org/lppl.txt
% and version 1.3b or later is part of all distributions of LaTeX
% version 2005/12/01 or later and of this work.
%
% This work has the LPPL maintenance status "author-maintained".
%
% The Current Maintainer and author of this work is Markus Kohm.
%
% This work consists of the file `PP.lco' only.
% ======================================================================
% PP.lco
% Copyright (c) Markus Kohm, 2009
%
% Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz,
% Version 1.3b, verteilt und/oder veraendert werden.
% Die neuste Version dieser Lizenz ist
%   http://www.latex-project.org/lppl.txt
% und Version 1.3b ist Teil aller Verteilungen von LaTeX
% Version 2005/12/01 oder spaeter und dieses Werks.
%
% Dieses Werk hat den LPPL-Verwaltungs-Status "author-maintained"
% (allein durch den Autor verwaltet).
%
% Der Aktuelle Verwalter und Autor dieses Werkes ist Markus Kohm.
%
% Dieses Werk besteht nur aus der Dateo `PP.lco'.
% ======================================================================
%
% For docu see at the end of the file (after \endinput)
%
\ProvidesFile{PP.lco}[2009/02/11 v0.1 ALPHA port pay'e for scrlttr2]
\@ifclasslater{scrlttr2}{2009/01/24}{%
  \LCOWarning{PP}{This file was made to be used with scrlttr2\MessageBreak
    versions from 2.96 till 3.02b only.\MessageBreak
    You are using:\MessageBreak
    \space\csname ver@scrlttr2.cls\endcsname\MessageBreak
    which may or may not result in problems\MessageBreak
    using PP.lco\@gobble}%
}{%
  \@ifclasslater{scrlttr2}{2006/07/31}{}{%
    \LCOWarning{PP}{This file was made to be used with scrlttr2\MessageBreak
      versions from 2.96 till 3.02b only.\MessageBreak
      You are using:\MessageBreak
      \space\csname ver@scrlttr2.cls\endcsname\MessageBreak
      which will result in problems\MessageBreak
      using PP.lco\@gobble}%
  }%
}
\newcommand*{\PP@mode}{1}%
\KOMA@ncmdkey{PP}[explicite]{PP@mode}{%
  {no}{0},{off}{0},{false}{0},%
  {explicite}{1},%
  {backgroundimage}{2},%
  {addressimage}{3}%
}
\newcommand*{\PP@priority}{0}%
\KOMA@ncmdkey{priority}[A]{PP@priority}{%
  {no}{0},{off}{0},{false}{0},%
  {B}{1},{b}{1},%
  {economy}{1},{Economy}{1},{ECONOMAY}{1},%
  {B-ECONOMY}{1},{B-Economy}{1},{b-economy}{1},%
  {A}{2},{a}{2},%
  {priority}{2},{Priority}{2},{PRIORITY}{2},%
  {A-PRIORITY}{2},{A-Priority}{2},{a-priority}{2}%
}%
\newkomavar[CH\,--\,]{ZipCode}
\newkomavar{PPcode}
\newkomavar{PPdatamatrix}
\newkomavar{PPimage}
\@setplength{toaddrindent}{8mm}
\newcommand*{\@PP@addrfield}{}
\let\@PP@addrfield\@addrfield
\renewcommand*{\@addrfield}{%
  \ifcase\PP@mode
    \@PP@addrfield
  \else
    \PP@addrfield
  \fi
}
\newcommand*{\PP@addrfield}{%
  \if@afield
    \begingroup%
      \if@baddr
        % Hier könnte man noch darüber informieren, dass die Rücksendeadresse
        % bei PP nicht verwendet wird.
      \fi
      \ifkomavarempty{specialmail}{}{%
        % Hier könnte man noch darüber informaieren, dass die Versandtart bei
        % PP nur "A-Priority" oder "B-Economy" erlaubt.
      }%
    \endgroup%
    \move@topt\vskip\useplength{toaddrvpos}%
    \vb@t@z{{\setlength{\parfillskip}{\z@ \@plus 1fil}%
        \rlap{\move@topl
          \setlengthtoplength{\@tempskipa}{toaddrhpos}%
          \ifdim \@tempskipa<\z@
            \addtolength{\@tempskipa}{\paperwidth}%
            \addtolengthplength[-]{\@tempskipa}{toaddrwidth}%
          \fi
          \hskip\@tempskipa
          \@savevbox{\useplength{toaddrheight}}{\hsize\useplength{toaddrwidth}%
            \ifnum\PP@mode=\@ne % explicite
              \vskip 1mm% Aus dem Beispiel
              \noindent\expandafter\hskip\useplength{toaddrindent}%
              \fbox{%
                \vbox to \dimexpr 7mm-2\fboxsep\relax{%
                  \setlength{\parindent}{0pt}%
                  \hsize \dimexpr 42mm-2\fboxsep\relax
                  \setbox\@tempboxa\hbox{%
                    {\fontsize{7mm}{7mm}\sffamily\bfseries P.P.}\hskip 2mm%
                  }%
                  \dp\@tempboxa\z@
                  \setlength{\@tempdima}{\hsize}%
                  \addtolength{\@tempdima}{-\wd\@tempboxa}%
                  \hbox{\box\@tempboxa
                    \vbox to \dimexpr 7mm-2\fboxsep\relax{\vss\hsize\@tempdima
                      \raggedright
                      \fontsize{8pt}{9pt}\sffamily
                      \usekomavar*{ZipCode}\usekomavar{ZipCode}\unskip\strut\\
                      \usekomavar{place}\unskip\strut%
                      \hfill
                    }%
                  }%
                  \vss
                }%
              }%
              \hskip 1mm% Aus dem Beispiel
              \mbox{%
                \vbox to 7mm {%
                  \addtolength{\hsize}{-43mm}%
                  \addtolengthplength[-2]{\hsize}{toaddrindent}%
                  \setlength{\parindent}{0pt}%
                  \fontsize{8pt}{9pt}\sffamily
                  \hfill\usekomavar{PPcode}
                  \vss
                  \ifcase \PP@priority
                  \or
                    \fontsize{9mm}{9mm}\sffamily\bfseries B%
                    \fontsize{10pt}{10pt}\selectfont -ECONOMY%
                  \or
                    \fontsize{9mm}{9mm}\sffamily\bfseries A%
                    \fontsize{10pt}{10pt}\selectfont -PRIORITY%
                  \fi
                  \hss
                  \vskip-\dp\strutbox
                  \vss
                }%
              }%
              \vskip 1mm% Aus dem Beispiel
              \vskip-\ht\strutbox
              \noindent\hskip\useplength{toaddrindent}%
              \hrulefill%
              \hskip\useplength{toaddrindent}%
              \vbox to\z@{\hsize\z@
                \vskip 9mm% Aus dem Beispiel
                \llap{\usekomavar{PPdatamatrix}\hskip\useplength{toaddrindent}}%
                \vss
              }%
            \else% background image or addressimage
              \vskip 1mm% Aus dem Beispiel
              \noindent\expandafter\hskip\useplength{toaddrindent}%
              \vbox to 7mm {%
                \addtolengthplength[-2]{\hsize}{toaddrindent}%
                \setlength{\parindent}{0pt}%
                \usekomavar{PPimage}%
                \vss
              }%
              \vskip 1mm
              \vskip\dp\strutbox
            \fi
            \vskip 4mm% Aus dem Beispiel
            \ifnum \PP@mode=\thr@@ % addressimage
            \else
              \vfil%
              \noindent\hskip\useplength{toaddrindent}%
              \setlength{\@tempdima}{\useplength{toaddrwidth}}%
              \addtolengthplength[-2]{\@tempdima}{toaddrindent}%
              \vbox{\hsize\@tempdima
                \ifkomavarempty{PPdatamatrix}{}{%
                  \addtolength{\hsize}{-2mm}%
                  \settowidth\@tempdima{\usekomavar{PPdatamatrix}}%
                  \addtolength{\hsize}{-\@tempdima}%
                }%
                \raggedright
                \usekomafont{addressee}{%
                  \usekomafont{toname}{\usekomavar{toname}\\}%
                  \usekomafont{toaddress}{\usekomavar{toaddress}}}}%
              \vskip 5mm% Aus dem Beispiel
            \fi
            \vss\null}%
          {address field}{toaddrheight}%
          {\begin{letter} or you\MessageBreak
            have to define a smaller special purpose using\MessageBreak
            \string\specialmail}%
        }}}%
    \vskip-\useplength{toaddrvpos}\move@frompt
  \else
    \typeout{Address: No}%
  \fi
}
\endinput
%
% end of `PP.lco'
%
% Minidocu:
% =========

Diese lco-Datei ermöglicht die Verwendung der P.P.-Frankierung, wie sie
beispielsweise von der Schweizer Post angeboten wird. Die Implementierung
folgt dabei <http://www.post.ch/de/pm-ppfrankieren-broschuere.pdf> und
<http://ppgenerator.postmail.ch/pdf/az_de.pdf>.

PP.lco setzt die Pseudo-Länge »toaddindent« auf den Standardwert 8 mm. 
Um die P.P.-Funktionalität zur Verfügung zu stellen existieren folgende neue
Optionen, die jedoch erst _nach_ dem Laden von PP.lco und ausschließlich mit
\KOMAoptions und \KOMAoption gesetzt werden können:

  PP
      entspricht »PP=explicite«

  PP=false (alternativ auch »off« oder »no«)
      Es wird der normale Adressmodus ohne P.P. verwendet.

  PP=explicite
      Es wird im P.P.-Frankiermodus gearbeitet. Dabei werden außer der
      Anschrit folgende Variablen verwendet:
      
        ZipCode      - Die Postleitzahl, die im P.P.-Feld gesetzt werden soll.
                       Der PLZ wir ihr Bezeichner vorangestellt. Der
                       Bezeichner ist derzeit mit »CH\,--\,« vordefiniert. Er
                       kann mit »\setkomavar*{ZipCode}{foo}« geändert werden.

        place        - Der Ort, der im P.P.-Feld gesetzt werden soll (und zur
                       PLZ passen sollte!).

        PPcode       - Der P.P.-Code, der rechts neben dem P.P.-Feld gesetzt
                       wird.

        PPdatamatrix - Die DataMatrix (ECC200), die rechts neben der
                       Empfängeradresse zu verwenden ist. Hier kann
                       beispielsweise mit »\includegraphics{foo}« eine externe
                       Abbildung der DataMatrix geladen werden. In diesem Fall
                       muss natürlich das Paket graphics oder graphicx geladen
                       sein.

      Darüber hinaus wird in diesem Fall zusätzliche die Option »priority«
      ausgewertet:

        priority=false (alternativ auch »off« oder »no«)
            Es wird keine Priorität verwendet.

        priority=A
            Es wird die Priorität »A-PRIORITY« verwendet.

        priority=B
            Es wird die Priorität »B-ECONONY« verwendet.

  PP=backgroundimage
      Es wird im P.P.-Frankiermodus gearbeitet. Dabei wird davon ausgegangen,
      dass sämtliche P.P.-Angaben über die Variable »PPimage« gesetzt
      werden. Die Variable kann beispielsweise mit
      »\setkomavar{PPimage}{\includegraphics{foo}}« gesetzt werden, um eine
      externe Abbildung zu laden. Die Empfängeranschrift selbst wird wie bei
      »PP=explicite« gesetzt.

  PP=addressimage
      Entspricht »PP=backgroundimage«, allerdings wird davon ausgegangen, dass
      »PPimage« auch die Anschrift enthält. Deshalb wird keine Anschrift mehr
      gesetzt.

Zu »PP=backgroundimage« und »PP=addressimage« siehe auch
<http://ppgenerator.postmail.ch/deutsch/index.html>.

Minimalbeispiel:

\documentclass[SN,PP]{scrlttr2}
\usepackage{xcolor}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\KOMAoptions{priority=A}
\setkomavar{PPimage}{{\color{yellow}\rule{74mm}{34mm}}}% Nur als Beispiel
\setkomavar{ZipCode}{3030}
\setkomavar{place}{Bern}
\setkomavar{PPcode}{123456789}
\setkomavar{PPdatamatrix}{\rule{10.8mm}{10.8mm}}% Nur als Beispiel
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\begin{document}
\begin{letter}{Herr\\Muster\\Musterstrasse 1\\9999 Muster}
  \opening{Hi,}
  \setkomavar{toname}{Herr Muster}
  \blindtext
  \closing{Tschuess}
\end{letter}
\end{document}
