% \iffalse -*- doctex -*-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%                                                                      %%
%%                        Package ot1patch                              %%
%%                                                                      %%
%% Purpose: to provide best possible substitutes for polish national    %%
%%          characters using OT1 Computer Modern Roman fonts            %%
%%                                                                      %%
%%                                                                      %%
%% Copyright (c) by Marcin Woli\'nski                      <1997/06/18> %%
%%                  wolinski@mimuw.edu.pl                               %%
%%                                                                      %%
%%                                                                      %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%                                                                      %%
%% The package may be used freely, but you are not allowed to modify    %%
%% this file.  If you wish to make any changes please make a copy       %%
%% under a different name.                                              %%
%%                                                                      %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \fi
  \def\fileversion{v 0.3}
  \def\docdate{1997/05/16}
  \def\filedate{1997/10/08}
% \CheckSum{209}
% 
% \title{Pakiet/Package ot1patch\thanks
%          {Version \fileversion\ dated \filedate.}}
% \author{Marcin Woli\'nski}
% \date{\docdate}
% 
% \maketitle
% Celem tego pakietu jest dostarczenie substytut\'{o}w polskich
% znak\'{o}w narodowych, zbudowanych jedynie ze znak\'{o}w
% dost\k{e}pnych w fontach w uk{\l}adzie OT1, szczeg\'{o}lnie fontach
% Computer Modern.  Poniewa\.{z} wysokiej jako\'{s}ci polskie fonty
% dla \TeX a s\k{a} publicznie dost\k{e}pne, stosowanie tego pakietu
% nie jest zalecane.  Mo\.{z}na go poleci\'c jedynie mieszka\'{n}com
% bezludnych wysp bez dost\k{e}pu do Internetu (ale sk\k{a}d oni mieli
% by mie\'c ten pakiet?).
%
% Pakiet zosta{\l} pomy\'{s}lany jako dodatek do pakietu \textsf{Po
% polsku} autorstwa Mariusza Olko.  Mo\.{z}na go jednak stosowa\'c
% niezale\.{z}nie.  Skutkiem zadeklarowania jego u\.{z}ycia
% komend\k{a} |\usepackage{ot1patch}| jest zmiana definicji
% niekt\'{o}rych komend akcentowych w uk{\l}adzie OT1
% (w~szczeg\'{o}lno\'{s}ci komenda |\k| produkuj\k{a}ca ogonek,
% przestaje powodowa\'c b{\l}\k{a}d).  Uk{\l}ad OT1 nie jest w istocie
% dobrze okre\'{s}lony, bowiem fonty ,,maszynowe'' r\'{o}\.{z}ni\k{a}
% si\k{e} od pozosta{\l}ych na kilku pozycjach.  \textsf{ot1patch}
% troszczy si\k{e} i o t\k{e} spraw\k{e}.
%
% Pakiet \textsf{ot1patch} w istocie jest adaptacj\k{a} do nowego
% \LaTeX a stylu \textsf{plfonts.sty} autorstwa Leszka Holenderskiego.
% Styl ten jest najstaranniejsz\k{a} znan\k{a} mi wersj\k{a}
% dorobienia protez ogonk\'{o}w do font\'{o}w Computer Modern.
%
% \bigskip
% The purpose of this package is to provide substitutes of polish
% national characters built using only old fonts (OT1). Besides of
% producing characters missing from OT1 this package takes care of
% less obvious matter: OT1 is not a really well-defined encoding since
% typewritter fonts differ from others in some positions.
%
% The package is loaded in the standard way with the
% |\usepackage{ot1patch}| command.
% 
% \StopEventually{}
% 
% \section{Implementation}
% \iffalse 
% Since I hate the presence of section `Printing the documentation' in
% every DOCed package my driver is put into a metacomment.  To print
% documentation LaTeX this file. If you need to change the driver run
% DOCSTRIP and ask it to make ogonek.drv by stripping ogonek.dtx with
% option `driver'. Do *not* modify this file.
%<*driver>
\documentclass{ltxdoc}
\usepackage{ot1patch}
\DisableCrossrefs
%<driver>%\OnlyDescription
%<driver>%\EnableCrossrefs
%<driver>%\CodeLinesIndex
\begin{document} 
  \DocInput{ot1patch.dtx}
\end{document}
%</driver>
% \fi
%
% \subsection{Identification}
% We start the code with standard identification of the package
%    \begin{macrocode}
%<*package>
\NeedsTeXFormat{LaTeX2e}[1994/12/01]
\ProvidesPackage{ot1patch}[\filedate\space\fileversion\space
                     A patch for some OT1 characters (MW)]
%    \end{macrocode}
% 
% \subsection{The \texttt{\string\k} macro (polish ogonek)}
% This comes from L.~Holenderski's \texttt{plfonts.sty}.
% Positioning of ogonek for specific letters is tuned for 300dpi
% Computer Modern fonts, but works reasonably well with other
% resolutions.
% 
% Ogonek is made from half-circle used by \TeX\ to produce
% $\hookrightarrow$.
% \begin{macro}{\@sob}
% Macro |\@sob| positioning ogonek under a letter.   Parameters are
% letter and fractions hl,ho,vl,vo. 
%    \begin{macrocode}
\dimendef\pl@left=0 \dimendef\pl@down=1 
\dimendef\pl@right=2 \dimendef\pl@temp=3
\def\@sob#1#2#3#4#5{%
  \setbox0\hbox{#1}\setbox1\hbox{$_\mathchar'454$}\setbox2\hbox{p}%
  \pl@right=#2\wd0 \advance\pl@right by-#3\wd1
  \pl@down=#5\ht1 \advance\pl@down by-#4\ht0
  \pl@left=\pl@right \advance\pl@left by\wd1
  \pl@temp=-\pl@down \advance\pl@temp by\dp2 \dp1=\pl@temp
  \leavevmode
  \kern\pl@right\lower\pl@down\box1\kern-\pl@left #1}
%    \end{macrocode}
% \end{macro}
% 
% \begin{macro}{\@iIuUogonek}
% \begin{macro}{\k}
% Here is the |\k| default macro (it is not normally defined in OT1), with
% special positioning of ogonek for some letters. We don't do this with
% |\DeclareTextCompositeCommand| because it wouldn't fit with the defaults
% mechanism.
%    \begin{macrocode}
\def\@iIuUogonek#1{%
        \ifx i#1\@sob i{.66}{.20}{0}{.90}\else
        \ifx I#1\@sob I{.80}{.50}{0}{.90}\else
        \ifx u#1\@sob u{.66}{.20}{0}{.90}\else
        \ifx U#1\@sob U{.60}{.35}{0}{.90}\else
        \@sob {#1}{.50}{.35}{0}{.90}\fi 
        \fi \fi \fi 
        }
\DeclareTextCommandDefault\k[1]{%
        \ifx a#1\@sob a{.66}{.20}{0}{.90}\else
        \ifx A#1\@sob A{.80}{.50}{0}{.90}\else
        \ifx e#1\@sob e{.50}{.35}{0}{.93}\else
        \ifx E#1\@sob E{.60}{.35}{0}{.90}\else
        \@iIuUogonek{#1}%
        \fi \fi \fi \fi 
   }
%    \end{macrocode}
% \end{macro}
% \end{macro}
% 
% \subsection{Polish crossed l}
% Since in typewritter fonts there is no cross character for polish \l\ we
% will have to take special actions then. For that purpose we define the
% next macro. It performs a rather devious check if the font in use is
% `typewritter like'. Regular text fonts contain in position '40 the cross
% for polish \l, but in typewritter `visible space' occurs there. Second
% of these characters has positive depth, contrary to the first, so we
% check for that. This is slow, better check is welcome.
% 
%    \begin{macrocode}
\def\if@ttfont#1#2{\setbox0=\hbox{\char'40}\ifdim\dp0>0pt#1\else#2\fi}
%    \end{macrocode}
% 
% \begin{macro}{\@spb}
% This definition is used to cross l or L in typewritter fonts.
% \changes{0.2}{1997/06/07}{Added leavevmode}
%    \begin{macrocode}
\def\@spb#1#2#3#4#5{%
  \setbox0\hbox{#1}\setbox2\hbox{\char'023}%
  \pl@right=#2\wd0 \advance\pl@right by-#3\wd2
  \pl@down=#5\ht2 \advance\pl@down by-#4\ht0
  \pl@left=\pl@right \advance\pl@left by\wd2
  \ht2=\pl@down \dp2=-\pl@down
  \leavevmode
  \kern\pl@right\lower\pl@down\box2\kern-\pl@left #1}
%    \end{macrocode}
% \end{macro}
% 
%    And here are definitions of |\l| and |\L|. Unfortunately we have
%    to redefine \LaTeX's values.
%    \begin{macrocode}
\DeclareTextCommand\l{OT1}{%
  \if@ttfont{\@spb l{.45}{.5}{.4}{.8}}%
    {{\char32l}}}
\DeclareTextCommand\L{OT1}{%
  \if@ttfont{\@spb L{.23}{.5}{.4}{.8}}%
    {\leavevmode\setbox0\hbox{L}\hbox to\wd0{\hss\char32L}}}
%    \end{macrocode}
% 
% \subsection{Dot accent}
% \begin{macro}{\@skb}
%    \changes{0.2}{1997/06/07}{Added leavevmode} 
%    Typewritter fonts don't contain the dot accent so we use raised
%    period instead.  As this style is prepared with polish language
%    in mind, this is done for \.z only.
%    \begin{macrocode}
\def\@skb#1#2#3#4#5{%
  \setbox0\hbox{#1}\setbox1\hbox{\char'056}%
  \pl@right=#2\wd0 \advance\pl@right by-#3\wd1
  \pl@down=#5\ht1 \advance\pl@down by-#4\ht0
  \pl@left=\pl@right \advance\pl@left by\wd1
  \leavevmode
  \kern\pl@right\lower\pl@down\box1\kern-\pl@left #1}
%    \end{macrocode}
%  \end{macro}
%
%    And appropriate redefinition for |\.|:
%    \begin{macrocode}
\DeclareTextCompositeCommand\.{OT1}z{%
  \if@ttfont{\@skb z{.5}{.5}{1.2}{0}}%
    {{\accent'137z}}}
\DeclareTextCompositeCommand\.{OT1}Z{%
  \if@ttfont{\@skb Z{.5}{.5}{1.1}{0}}%
    {{\accent'137Z}}}
%    \end{macrocode}
% 
% \subsection{French quotes
%             (\guillemotleft guillemotes\guillemotright)} 
% \changes{0.2}{1997/06/18}{Added \cs{leavevmode}}
%    Here is the best substitute for guillemotes we could think of. 
%    \begin{macrocode}
\DeclareTextCommandDefault\guillemotleft
    {\leavevmode\raise.3ex
        \hbox{$\scriptscriptstyle\langle\!\langle$}}
\DeclareTextCommandDefault\guillemotright
    {\leavevmode\raise.3ex
        \hbox{$\scriptscriptstyle\rangle\!\rangle$}}
%    \end{macrocode}
% 
% And that's all.
%    \begin{macrocode}
\endinput
%</package>
%    \end{macrocode}
% 
% 
% \Finale
