%%
%% This is file `soulutf8-test3.tex',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% soulutf8.dtx  (with options: `test3,utf8x')
%% 
%% This is a generated file.
%% 
%% Copyright (C) 2007 by Heiko Oberdiek <oberdiek@uni-freiburg.de>
%% 
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either
%% version 1.3c of this license or (at your option) any later
%% version. This version of this license is in
%%    http://www.latex-project.org/lppl/lppl-1-3c.txt
%% and 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 2005/12/01 or later.
%% 
%% This work has the LPPL maintenance status "maintained".
%% 
%% This Current Maintainer of this work is Heiko Oberdiek.
%% 
%% The Base Interpreter refers to any `TeX-Format',
%% because some files are installed in TDS:tex/generic//.
%% 
%% This work consists of the main source file soulutf8.dtx
%% and the derived files
%%    soulutf8.sty, soulutf8.pdf, soulutf8.ins, soulutf8.drv,
%%    soulutf8-test1.tex, soulutf8-test2.tex, soulutf8-test3.tex,
%%    soulutf8-test4.tex, soulutf8-test5.tex.
%% 
\NeedsTeXFormat{LaTeX2e}
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{textcomp}
\usepackage[ngerman]{babel}
\expandafter\def\csname ver@hypdestopt.sty\endcsname{}
\usepackage[unicode]{hyperref}
\usepackage{bookmark}
\usepackage{color}
\usepackage{soul}[2003/11/17]
\makeatletter
\newcommand*{\@ifDefined}[1]{%
  \@ifundefined{#1}{%
    \@latex@error{%
      \expandafter\noexpand\csname#1\endcsname undefined%
    }\@ehc
  }%
}
\newcommand*{\SaveOrg}[1]{%
  \@ifdefinable{ORG@SOUL@#1}{%
    \@ifDefined{SOUL@#1}{%
      \expandafter\let\csname ORG@SOUL@#1\expandafter\endcsname
                      \csname SOUL@#1\endcsname
    }%
  }%
}
\newcommand*{\RestoreOrg}[1]{%
  \@ifDefined{ORG@SOUL@#1}{%
    \@ifDefined{SOUL@#1}{%
      \expandafter\let\csname SOUL@#1\expandafter\endcsname
                      \csname ORG@SOUL@#1\endcsname
    }%
  }%
}
\makeatother
\SaveOrg{eval}
\SaveOrg{splittoken}
\SaveOrg{flushcomma}
\SaveOrg{flushapo}
\SaveOrg{grave}
\SaveOrg{addgroup}
\SaveOrg{addmath}
\SaveOrg{addprotect}
\SaveOrg{addtoken}
\usepackage{soulutf8}[2007/09/09]
\let\origshow\show
\usepackage[utf8x]{inputenc}
\AtBeginDocument{%
  \let\show\origshow
}
\makeatletter
\DeclareRobustCommand*{\an}{%
  \def\SOUL@preamble{$^{^P}$}%
  \def\SOUL@everyspace##1{##1\texttt{\char`\ }\linebreak[2]}%
  \def\SOUL@postamble{$^{^E}$}%
  \def\SOUL@everyhyphen{$^{^-}$\linebreak[1]}%
  \def\SOUL@everyexhyphen##1{##1$^{^=}$}%
  \def\SOUL@everysyllable{$^{^S}$}%
  \def\SOUL@everytoken{\the\SOUL@token$^{^T}$}%
  \def\SOUL@everylowerthan{$^{^L}$}%
  \SOUL@
}
\DeclareRobustCommand*{\sy}{%
  \SOUL@setup
  \def\SOUL@preamble{%
    \lefthyphenmin=\z@
    \righthyphenmin=\z@
  }%
  \def\SOUL@everyspace##1{##1\space}%
  \def\SOUL@everysyllable{\the\SOUL@syllable}%
  \def\SOUL@everyhyphen{%
    \discretionary{%
      \SOUL@setkern\SOUL@hyphkern
      \SOUL@sethyphenchar
    }{}{%
      \hbox{\kern1pt$\cdot$}%
    }%
  }%
  \def\SOUL@everyexhyphen##1{%
    \SOUL@setkern\SOUL@hyphkern
    \hbox{##1}%
    \discretionary{}{}{%
      \SOUL@setkern\SOUL@charkern
    }%
  }%
  \SOUL@
}
\DeclareRobustCommand*{\soulH}{%
  \def\SOUL@preamble{%
    \gdef\SOULH{}%
    \soulHadd{[}%
  }%
  \def\SOUL@everyspace##1{%
    \soulHadd{Sp}%
  }%
  \def\SOUL@postamble{%
    \soulHadd{]}%
  }%
  \def\SOUL@everyhyphen{%
    \soulHadd{Hy}%
  }%
  \def\SOUL@everyexhyphen##1{%
    \soulHadd{Exhy}%
  }%
  \def\SOUL@everysyllable{%
    \soulHadd{Sy}%
  }%
  \def\SOUL@everytoken{%
    \soulHadd{T}%
  }%
  \def\SOUL@everylowerthan{%
    \soulHadd{<}%
  }%
  \SOUL@
}
\newcommand*{\soulHadd}[1]{%
  #1%
  \expandafter\gdef\expandafter\soulHstring\expandafter{%
    \soulHstring
    #1%
  }%
}
\usepackage{qstest}
\IncludeTests{*}
\LogTests{log}{*}{*}
\newsavebox\boxA
\newsavebox\boxB
\newsavebox\boxC
\newcommand*{\TestDriver}[4]{%
  \subsection{Driver #1}%
  \@PackageInfo{soulutf8-test}{* Driver #1}%
  \expandafter\let\expandafter\testdriver\csname #1\endcsname
  \def\teststringA{#3}%
  \def\teststringB{#4}%
  \begin{qstest}{string-#2-driver-#1}{string,#2,driver,#1}%
    \@PackageInfo{soulutf8-test}{* Version: soulutf8}%
    \global\let\soulHstring\@empty
    \setbox0=\hbox{\expandafter\testdriver\expandafter{\teststringA}}%
    \let\HstringA\soulHstring
    \SetTestVBox{\boxA}{\teststringA}%
    %
    \@PackageInfo{soulutf8-test}{* Version: soul + patch}%
    \global\let\soulHstring\@empty
    \RestoreOrg{eval}%
    \setbox2=\hbox{\expandafter\testdriver\expandafter{\teststringB}}%
    \let\HstringB\soulHstring
    \SetTestVBox{\boxB}{\teststringB}%
    %
    \@PackageInfo{soulutf8-test}{* Version: original soul}%
    \global\let\soulHstring\@empty
    \RestoreOrg{splittoken}%
    \RestoreOrg{flushcomma}%
    \RestoreOrg{flushapo}%
    \RestoreOrg{grave}%
    \RestoreOrg{addgroup}%
    \RestoreOrg{addmath}%
    \RestoreOrg{addprotect}%
    \RestoreOrg{addtoken}%
    \setbox4=\hbox{\expandafter\testdriver\expandafter{\teststringB}}%
    \let\HstringC\soulHstring
    \SetTestVBox{\boxC}{\teststringB}%
    %
    \TestInfo{0}{soulutf8}%
    \TestInfo{2}{soul + patch}%
    \TestInfo{4}{original soul}%
    \TestInfoVBox
    \showboxdepth=\maxdimen
    \showboxbreadth=\maxdimen
    \tracingonline=\@ne
    \Expect*{\HstringA}*{\HstringB}%
    \Expect*{\HstringA}*{\HstringC}%
    \Expect*{\the\wd0}*{\the\wd2}%
    \ifdim\wd0=\wd2 %
    \else
      \showbox0 %
      \showbox2 %
    \fi
    \Expect*{\the\ht0}*{\the\ht2}%
    \Expect*{\the\dp0}*{\the\dp2}%
    \Expect*{\the\wd\boxB}*{\the\wd\boxA}%
    \Expect*{\the\wd\boxC}*{\the\wd\boxA}%
    \Expect*{\the\ht\boxB}*{\the\ht\boxA}%
    \ifdim\ht\boxB=\ht\boxA
    \else
      \showbox\boxA
      \showbox\boxB
    \fi
    \Expect*{\the\ht\boxC}*{\the\ht\boxA}%
    \Expect*{\the\dp\boxB}*{\the\dp\boxA}%
    \Expect*{\the\dp\boxC}*{\the\dp\boxA}%
  \end{qstest}%
}
\newcommand*{\SetTestVBox}[2]{%
  \setbox#1=\vbox{%
    \hsize=0pt\relax
    \hfuzz=100mm\relax
    \expandafter\testdriver\expandafter{#2}%
  }%
}
\newcommand*{\TestInfo}[2]{%
  \par
  \noindent
  \copy#1\relax
  \hfill
  \begingroup
    \small
    \ifdim\wd0=\wd2\relax
      \ifdim\wd0=\wd4\relax
      \else
        \ifnum#1=2 %
          \raisebox{.5\baselineskip}[0pt][0pt]{%
            \llap{$\}$ }%
            \rlap{width = \the\wd#1\relax\space$\{$}%
            \phantom{width = 999.99999pt}%
            \qquad
          }%
        \else
          \ifnum#1=4 %
            \rlap{width = \the\wd#1}%
            \phantom{width = 999.99999pt}%
            \qquad
          \fi
        \fi
      \fi
    \else
      \begingroup
        \bfseries
        \rlap{width = \the\wd#1}%
        \phantom{width = 999.99999pt}%
      \endgroup
      \qquad
    \fi
    \rlap{(#2)}%
    \phantom{(original soul)}%
  \endgroup
  \par
}
\newcommand*{\TestInfoVBox}{%
  \par
  \noindent
  \mbox{\vrule\relax\space\copy\boxA}%
  \ifdim\ht\boxA=\ht\boxB
  \else
    \hfill
    \begingroup
      \small
      \rlap{(soulutf8)}%
      \phantom{(soulutf8)}%
    \endgroup
    \par
    \noindent
    \mbox{\vrule\relax\space\copy\boxB}%
    \hfill
    \begingroup
      \small
      \rlap{(soul)}%
      \phantom{(soulutf8)}%
    \endgroup
  \fi
  \par
}
\makeatletter
\newcommand*{\Test}[3]{%
  \clearpage
  \begingroup
    \def\linebreak{\textbackslash linebreak }%
    \def\\{\textbackslash\textbackslash}%
    \def\soulomit##1{%
      \textbackslash soulomit\textbraceleft##1\textbraceright
    }%
    \def\mbox##1{%
      \textbackslash mbox\textbraceleft##1\textbraceright
    }%
    \def\abc{\textbackslash abc }%
    \def\texttt##1{%
      \textbackslash texttt\textbraceleft##1\textbraceright
    }%
    \def\c##1{%
      \textbackslash c\textbraceleft##1\textbraceright
    }%
    \count@=128 %
    \loop
    \ifnum\count@<256 %
      \lccode`\~=\count@
      \lowercase{%
        \def~{\noexpand~}%
      }%
      \advance\count@\@ne
    \repeat
    \csname protected@edef\endcsname\x{\endgroup
      \noexpand\section{String #1: #2}%
    }%
  \x
  \TestDriver{so}{#1}{#2}{#3}%
  \TestDriver{caps}{#1}{#2}{#3}%
  \TestDriver{ul}{#1}{#2}{#3}%
  \TestDriver{st}{#1}{#2}{#3}%
  \TestDriver{hl}{#1}{#2}{#3}%
  \TestDriver{an}{#1}{#2}{#3}%
  \TestDriver{sy}{#1}{#2}{#3}%
  \TestDriver{soulH}{#1}{#2}{#3}%
}
\makeatother
\begin{document}
  \Test A{}{}%
  \Test B{Hello World}{Hello World}%
  \Test C{%
    Umlauts: ^^c3^^84^^c3^^96^^c3^^9c^^c3^^a4^^c3^^b6^^c3^^bc^^c3^^9f%
  }{%
    Umlauts: \"A\"O\"U\"a\"o\"u\ss
  }%
  \Test D{Euro: ^^e2^^82^^ac}{Euro: \texteuro}%
  \Test E{Stra^^c3^^9fe}{Stra\ss e}%
  \Test F{R^^c3^^b6mer}{R\"omer}%
  \Test G{A^^e2^^80^^93B^^e2^^80^^94C}{A--B---C}%
  \Test H{X^^c2^^a0Y}{X~Y}%
  \Test I{A^^c5^^a4}{A\v T}%
  \Test J{A,B,,C,,,D,,,,E}{A,B,,C,,,D,,,,E}%
  \Test K{A'B''C'''D''''E}{A'B''C'''D''''E}%
  \Test L{A`B``C```D````E}{A`B``C```D````E}%
  \Test M{A$x$B}{A$x$B}%
  \Test N{A\mbox{abc}B}{A\mbox{abc}B}%
  \Test O{,,TA''}{,,TA''}%
  \Test P{{!`}Hola{?`}}{{!`}Hola{?`}}%
  \Test Q{re-sent\slash x}{re-sent\slash x}%
  \Test R{new\\line}{new\\line}%
  \Test S{foo\linebreak bar}{foo\linebreak bar}%
  \Test T{Virchow{sche}}{Virchow{sche}}%
  \Test U{A\soulomit{foo}B}{A\soulomit{foo}B}%
  \Test V{A\texttt{xyz}B}{A\texttt{xyz}B}%
  \Test W{ffi}{ffi}%
  \Test X{f{}f{}i}{f{}f{}i}%
  \Test Y{f\mbox{}f\mbox{}i}{f\mbox{}f\mbox{}i}%
  \Test Z{\c{\"a}}{{\c{\"a}}}%
  \let\abcx\UNDEFINED
  \def\abc{%
    \begingroup
      \def\abcx{x}%
      \abcx
    \endgroup
  }%
  \Test{AA}{[{x\abc x}]}{[{xxx}]}%
\end{document}
\endinput
%%
%% End of file `soulutf8-test3.tex'.
