%%
%% This is file `onedown.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% onedown.dtx  (with options: `package')
%% 
%% This is a generated file.
%% 
%% Copyright (C) 2018 by Jacob Wiersma <jack46@online.de>
%% 
%% This file 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
%% 2005/12/01 or later.
%% 
\NeedsTeXFormat{LaTeX2e}[2014/05/01]
\def\ODwstyleversion{1.0}\def\ODwstyledate{2018/05/23}
\ProvidesPackage{onedown}
 [\ODwstyledate\space v\ODwstyleversion\space
 Typeset Bridge Diagrams - Jacob Wiersma (C) 2016-2018]

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%




%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage{%
  xcolor,%        colorizing symbols \Sp etc.
  textcomp,%      for the numbersign in environment play.
  moresize,%      add \HUGE and \ssmall to font-sizes
  relsize,%       relative font-sizes. (e.g. \smaller)
  makecmds,%      needed for provideenvironment
  expl3,%         needed for LaTeX3 packages (xparse)
  xparse,%        optional params and starred commands
  xspace,%        handling of spacing behind a command
  calc,%          makes calculations and lengths easier
  ifthen,%        easy booleans, tests and loops
  adjustbox,%     stacked boxes in L-/R-Lower captions
  translations,%  auto-translate terms (e.g. East->Ost)
  array,%         actions for tabular column cells
  collcell,%      macro calls for tabular column cells
  pgfopts,%       for keyval opts, loads also pgfkeys
  environ,%       for handling bidding environments
  xstring,%       for easy string processing.
  tracklang,%     for iterating over loaded languages
  pict2e,%        for drawing the compass
}
\xspaceaddexceptions{%
  = \markit \, \suit \GetTranslation
  2 3 4 5 6 7 8 9 T J Q K A
}
\LoadDictionaryFor{fallback}{ODw}
\pgfkeys{/ODw/.is family}
\def\ODw@set#1{\pgfkeys{/ODw,#1}}
\ODw@set{colors/.is choice,}
\ODw@set{warn/.is choice,}
\ODw@set{err/.is choice,}
\AtBeginDocument{%
  \renewcommand{\,}[1][1]{%
    \ifmmode\mskip#1\thinmuskip%
     \else\thinspace[#1]\fi%
  }%
  \renewcommand{\thinspace}[1][1]{%
   \kern#1\dimexpr0.16667em\relax%
  }%
}% AtBeginDocument
\gdef\ODw@gsetlength#1#2{%
  \begingroup
    \setlength\skip@{#2}% local assign to scratch reg.
    \global#1=\skip@%     global assignment to #1;
  \endgroup%              restore \skip@ by endgroup.
}% ODw@gsetlength
\gdef\ODw@append#1{%
  \bgroup%
    \edef\tmp{\the\ODw@Scratch #1}%
    \global\ODw@Scratch=\expandafter{\tmp}%
  \egroup%
}% ODw@append
\def\ODw@CompSize{1}% factor to enlarge the compass
\def\ODw@CompLine{}%  thickness of compass frame
\def\ODw@Skipwidth{1em}%
\newif\ifODw@description% must typeset an annotation
\newif\ifODw@short%       short form in bidding header
\newif\ifODw@monochrome%  no colors wanted
\newif\ifOdW@CardSkip%    skip between ranks needed
\newif\ifODw@Bidders%    suppress bidders in bidding header
\newif\ifODw@BidLine%    draw \hline below bidding header
\newif\ifODw@LongCalls%  switch between long/short calls
\newif\ifODw@CompShow%   show compass or not
\newif\ifODw@CompTurn%   turn E-W letters 90°
\newboolean{ODw@EmptyHeader}% = 'header is empty'
\newboolean{ODw@EmptyFooter}% = 'footer is empty'
\newsavebox\ODw@Diagram@Box
\newsavebox\ODw@Hand@Box
\newsavebox\ODw@BidBox
\newlength\ODw@Compasssize% the size of the compass.
\newlength\ODw@Diagram@Width
\newlength\ODw@Card@Skip
\setlength\ODw@Card@Skip{.15em}% space between cards
\newlength\ODw@Bid@Width
\newlength\ODw@Skip@Width
  \setlength\ODw@Skip@Width{\ODw@Skipwidth}
\newlength\ODw@Tmp@Len%   temp var for computations
\newlength\ODw@Tmp@Width% temp var for computations
\newcounter{ODw@Nr}
\newcounter{ODw@Cnt}
\newcounter{ODw@PlayerNr}
\newcounter{ODw@NSCnt}
\newcounter{ODw@EWCnt}
\newtoks{\ODw@Scratch}
\newcommand\bidderfont[1]{\gdef\ODw@BidderFont{#1}}
\newcommand\compassfont[1]{\gdef\ODw@CompassFont{#1}}
\newcommand\namefont[1]{\gdef\ODw@NameFont{#1}}
\newcommand\legendfont[1]{\gdef\ODw@LegendFont{#1}}
\newcommand\otherfont[1]{\gdef\ODw@OtherFont{#1}}
\newcommand\gamefont[1]{%
  \gdef\ODw@GameFont{#1}%
  \gdef\ODw@GameSize{% recalculate dimens for the new font
    \ODw@GameFont%
    \setlength\ODw@Skip@Width{\ODw@Skipwidth}%
  }%
}% gamefont
\fontencoding{T1}\fontfamily{stix}
\fontseries{m}\fontshape{n}\selectfont
\DeclareSymbolFont{symbols}{OMS}{txsy}{m}{n}
\SetSymbolFont{symbols}{bold}{OMS}{txsy}{bx}{n}
\DeclareFontSubstitution{OMS}{txsy}{m}{n}
\DeclareSymbolFont{symbolsC}{U}{txsyc}{m}{n}
\SetSymbolFont{symbolsC}{bold}{U}{txsyc}{bx}{n}
\DeclareFontSubstitution{U}{txsyc}{m}{n}
\DeclareMathSymbol{\ODw@spadesuit}{\mathord}{symbols}{127}
\DeclareMathSymbol{\ODw@varheart}{\mathord}{symbolsC}{114}
\DeclareMathSymbol{\ODw@vardiamond}{\mathord}{symbolsC}{113}
\DeclareMathSymbol{\ODw@clubsuit}{\mathord}{symbols}{124}
\def\Cl{}\def\Di{}\def\He{}\def\Sp{}%
\ODw@set{%
 colors/0/.code={%
  \ODw@monochrometrue%
  \renewrobustcmd\Cl{\textcolor{black}%
   {\,[0.3]\ensuremath{\ODw@clubsuit}}\xspace}%
  \renewrobustcmd\Di{\textcolor{black}%
   {\,[0.3]\ensuremath{\ODw@vardiamond}}\xspace}%
  \renewrobustcmd\He{\textcolor{black}%
   {\,[0.3]\ensuremath{\ODw@varheart}}\xspace}%
  \renewrobustcmd\Sp{\textcolor{black}%
   {\,[0.3]\ensuremath{\ODw@spadesuit}}\xspace}%
 }%
}
\ODw@set{colors/mono/.code={\pgfkeys{/ODw/colors=0}}}
\ODw@set{colors/black/.code={\pgfkeys{/ODw/colors=0}}}
\ODw@set{%
 colors/1/.code={%
  \ODw@monochrometrue%
  \renewrobustcmd\Cl{\textcolor{black}%
   {\,[0.3]\ensuremath{\ODw@clubsuit}}\xspace}%
  \renewrobustcmd\Di{\,[0.3]\ensuremath{\diamondsuit}\xspace}%
  \renewrobustcmd\He{\,[0.3]\ensuremath{\heartsuit}\xspace}%
  \renewrobustcmd\Sp{\textcolor{black}%
   {\,[0.3]\ensuremath{\ODw@spadesuit}}\xspace}%
 }%
}
\ODw@set{colors/b+w/.code={\pgfkeys{/ODw/colors=1}}}
\ODw@set{%
 colors/2/.code={%
  \renewrobustcmd\Cl{\textcolor{black}%
   {\,[0.3]\ensuremath{\ODw@clubsuit}}\xspace}%
  \renewrobustcmd\Di{\textcolor{red}%
   {\,[0.3]\ensuremath{\ODw@vardiamond}}\xspace}%
  \renewrobustcmd\He{\textcolor{red}%
   {\,[0.3]\ensuremath{\ODw@varheart}}\xspace}%
  \renewrobustcmd\Sp{\textcolor{black}%
   {\,[0.3]\ensuremath{\ODw@spadesuit}}\xspace}%
 }%
}
\ODw@set{colors/b+r/.code={\pgfkeys{/ODw/colors=2}}}
\ODw@set{%
 colors/4A/.code={%
  \renewrobustcmd\Cl{\textcolor{green}%
   {\,[0.3]\ensuremath{\ODw@clubsuit}}\xspace}%
  \renewrobustcmd\Di{\textcolor{orange}%
   {\,[0.3]\ensuremath{\ODw@vardiamond}}\xspace}%
  \renewrobustcmd\He{\textcolor{red}%
   {\,[0.3]\ensuremath{\ODw@varheart}}\xspace}%
  \renewrobustcmd\Sp{\textcolor{blue}%
   {\,[0.3]\ensuremath{\ODw@spadesuit}}\xspace}%
 }%
}
\ODw@set{colors/fourA/.code={\pgfkeys{/ODw/colors=4A}}}
\ODw@set{colors/4a/.code={\pgfkeys{/ODw/colors=4A}}}
\ODw@set{%
 colors/4B/.code={%
  \renewrobustcmd\Cl{\textcolor{black}%
   {\,[0.3]\ensuremath{\ODw@clubsuit}}\xspace}%
  \renewrobustcmd\Di{\textcolor{orange}%
   {\,[0.3]\ensuremath{\ODw@vardiamond}}\xspace}%
  \renewrobustcmd\He{\textcolor{red}%
   {\,[0.3]\ensuremath{\ODw@varheart}}\xspace}%
  \renewrobustcmd\Sp{\textcolor{green}%
   {\,[0.3]\ensuremath{\ODw@spadesuit}}\xspace}%
 }%
}
\ODw@set{colors/fourB/.code={\pgfkeys{/ODw/colors=4B}}}
\ODw@set{colors/4b/.code={\pgfkeys{/ODw/colors=4B}}}
\ODw@set{colors=2}
\NewDocumentCommand\nt{s t!}{%
  \bgroup%
    \ODw@OtherFont%
    \IfBooleanTF#1{%
      \IfBooleanTF#2
        {\,[0.3]\GetTranslation{NT-(ODw)}}%
        {\GetTranslation{No Trump-(ODw)}}%
      }{%
      \IfBooleanTF#2
        {\,[0.3]\GetTranslation{nt-(ODw)}}%
        {\GetTranslation{no trump-(ODw)}}%
    }%
  \egroup%
  \xspace%
}% nt
\def\NT{\nt*!}
\gdef\ODw@SuitPlayed{N}
\gdef\ODw@SuitLead{N}
\gdef\ODw@TrumpSuit{N}
\newcounter{ODw@Rank}
\def\ODw@SetRank#1{%
  \ifthenelse{\equal{\ODw@SuitPlayed}{\ODw@SuitLead}}%
  % if a suit is followed, store the intrinsic rank
    {\setcounter{ODw@Rank}{#1}}%
    {% else, if a suit is not followed then ...
  % (at NoTrump, the trumpsuit is coded 'N' and will
  % never match a real suit (coded C, D, H and S))
  % thus avoiding that trump cards are detected
       \ifthenelse{\equal{\ODw@SuitPlayed}{\ODw@TrumpSuit}}%
  % if it is a trump card, increase the rank
         {\setcounter{ODw@Rank}{#1}%
          \addtocounter{ODw@Rank}{15}}%
  % if it is a discard, set the rank to 0 to make
  % sure it will never win
         {\setcounter{ODw@Rank}{0}}%
    }% ifthen
  % If the card was of another suit,
  %    then ODw@SuitPlayed was changed.
  % If we encounter 'unsuited' cards,
  %    then we must reestablish the
  %    original ODw@SuitPlayed.
    \global\edef\ODw@SuitPlayed{\ODw@SuitLead}% org. suit
}% ODw@SetRank
\ExplSyntaxOn
 % NB: now all spaces are ignored, use '~' if needed.
\NewDocumentCommand{\ODw@Xfer}{m}{
  \bgroup
  % we do not want spaces here
    \def\xspace{}
    \tl_map_function:nN {#1} \ODw@translate:n
  \egroup
}% ODw@Xfer
\cs_new_protected:Nn \ODw@translate:n
 {
  \setcounter{ODw@Rank}{0}
  \str_case:nnTF {#1}
   { % Store the suit of the card played
     % needed to determine the winner
     % and for checking for multiple cards
     {C}{\Cl\gdef\ODw@SuitPlayed{C}}
     {D}{\Di\gdef\ODw@SuitPlayed{D}}
     {H}{\He\gdef\ODw@SuitPlayed{H}}
     {S}{\Sp\gdef\ODw@SuitPlayed{S}}
     {N}{\NT\gdef\ODw@SuitPlayed{N}}
  % Translate a hyphen into an en-dash
     {-}{--}
  %
  % 1: translate the honour cards,
  % 2: store the played cards for checking
  % 3: and set their rank. This must be done last, because
  % \ODw@SetRank resets \ODw@SuitPlayed to \ODw@SuitLead
  % Honour Cards
  %        1                      2
     {A}{\Ace*!\ODw@AppendCard{\ODw@SuitPlayed}{A}
          \ODw@SetRank{14}}% 3
     {K}{\King*!\ODw@AppendCard{\ODw@SuitPlayed}{K}
          \ODw@SetRank{13}}
     {Q}{\Queen*!\ODw@AppendCard{\ODw@SuitPlayed}{Q}
          \ODw@SetRank{12}}
     {J}{\Jack*!\ODw@AppendCard{\ODw@SuitPlayed}{J}
          \ODw@SetRank{11}}
     {T}{\kern-0.1em1\kern-0.1em0% massage 1 and 0 a bit
         \ODw@AppendCard{\ODw@SuitPlayed}{T}\ODw@SetRank{10}}
  % Numeral Cards
     {9}{9\ODw@AppendCard{\ODw@SuitPlayed}{9}\ODw@SetRank{9}}
     {8}{8\ODw@AppendCard{\ODw@SuitPlayed}{8}\ODw@SetRank{8}}
     {7}{7\ODw@AppendCard{\ODw@SuitPlayed}{7}\ODw@SetRank{7}}
     {6}{6\ODw@AppendCard{\ODw@SuitPlayed}{6}\ODw@SetRank{6}}
     {5}{5\ODw@AppendCard{\ODw@SuitPlayed}{5}\ODw@SetRank{5}}
     {4}{4\ODw@AppendCard{\ODw@SuitPlayed}{4}\ODw@SetRank{4}}
     {3}{3\ODw@AppendCard{\ODw@SuitPlayed}{3}\ODw@SetRank{3}}
     {2}{2\ODw@AppendCard{\ODw@SuitPlayed}{2}\ODw@SetRank{2}}
  % A spot card has rank 0
     {x}{x\ODw@SetRank{0}}
  %
  % Non cards (bidding only)
     {1}{1}% this enables e.g. 1\He in biddings
     {p}{\ifODw@LongCalls\Pass*\else\Pass!\fi}
     {P}{\ifODw@LongCalls\Allpass*\else\Allpass*!\fi}
     {X}{\ifODw@LongCalls\Double*\else\Double!\fi}
     {R}{\ifODw@LongCalls\Redouble*\else\Redouble!\fi}
   }% case
   {% if matched (case T(rue))
    \ifOdW@CardSkip\hspace{\ODw@Card@Skip}\fi
  % suit of 1st card (ODw@SuitLead) is ODw@SuitPlayed
   \if\theODw@PlayerNr1
     \global\edef\ODw@SuitLead{\ODw@SuitPlayed}
   \fi
   }
   {% if not matched (case F(alse))
     \ifx#1\Cl\gdef\ODw@SuitPlayed{C}\fi
     \ifx#1\Di\gdef\ODw@SuitPlayed{D}\fi
     \ifx#1\He\gdef\ODw@SuitPlayed{H}\fi
     \ifx#1\Sp\gdef\ODw@SuitPlayed{S}\fi
     \expandafter{#1}% enables e.g. 1\He
   % suit of 1st card (ODw@SuitLead) is ODw@SuitPlayed
     \if\theODw@PlayerNr1
       \global\edef\ODw@SuitLead{\ODw@SuitPlayed}
     \fi
   }
}% ODw@translate
\ExplSyntaxOff
\newcommand{\ODw@appendcard}[2]{\xdef#1{#1#2}}

\newcommand\ODw@AppendCard[2]{%
  \IfEqCase{#1}{%
    {C}{\ODw@appendcard{\ODw@Clubs}{#2}}%
    {D}{\ODw@appendcard{\ODw@Diamonds}{#2}}%
    {H}{\ODw@appendcard{\ODw@Hearts}{#2}}%
    {S}{\ODw@appendcard{\ODw@Spades}{#2}}%
  }%
}% ODw@AppendCard
\newcounter{ODw@Highest}%    the highest rank until now
\setcounter{ODw@Highest}{0}
\newcounter{ODw@WinningNr}%  player with the highest rank
\setcounter{ODw@WinningNr}{0}

\def\ODw@PTfer#1{%
  \stepcounter{ODw@PlayerNr}%
  \ODw@Xfer{#1}% ODw@Rank = the rank for this card
  \ifthenelse{\value{ODw@Rank} > \value{ODw@Highest}}%
    {% This rank is higher than previous highest one
      \setcounter{ODw@WinningNr}{\theODw@PlayerNr}%
      \setcounter{ODw@Highest}{\theODw@Rank}%
    }%
    {}%
  \ifthenelse{\value{ODw@PlayerNr} = 4}%
    {% last player: Process the winning trick:
      \stepcounter{ODw@Nr}% Start new row with new player
      \ODw@AccTricks%      Accumulate tricks for N-S/E-W
    }%
    {}%
}
\def\ODw@FTfer#1{%
  \ODw@Tricks%
  \ODw@PTfer{#1}%
}% ODw@FTfer
\def\ODw@BTfer#1{%
  \ODw@Xfer{#1}%
}
\NewDocumentCommand\North{s t!}{%
  \bgroup%
    \ODw@OtherFont%
    \IfBooleanTF#1{%
      \IfBooleanTF{#2}{\ODw@N*}{\ODw@North*}%
    }{%
      \IfBooleanTF{#2}{\ODw@N}{\ODw@North}%
    }% TF#1
  \egroup%
  \xspace%
}% North
\def\north{\North*}

\NewDocumentCommand\East{s t!}{%
  \bgroup%
    \ODw@OtherFont%
    \IfBooleanTF#1{%
      \IfBooleanTF{#2}{\ODw@E*}{\ODw@East*}%
    }{%
      \IfBooleanTF{#2}{\ODw@E}{\ODw@East}%
    }% TF#1
  \egroup%
  \xspace%
}% East
\def\east{\East*}

\NewDocumentCommand\South{s t!}{%
  \bgroup%
    \ODw@OtherFont%
    \IfBooleanTF#1{%
      \IfBooleanTF{#2}{\ODw@S*}{\ODw@South*}%
    }{%
      \IfBooleanTF{#2}{\ODw@S}{\ODw@South}%
    }% TF#1
  \egroup%
  \xspace%
}% South
\def\south{\South*}

\NewDocumentCommand\West{s t!}{%
  \bgroup%
    \ODw@OtherFont%
    \IfBooleanTF#1{%
      \IfBooleanTF{#2}{\ODw@W*}{\ODw@West*}%
    }{%
      \IfBooleanTF{#2}{\ODw@W}{\ODw@West}%
    }% TF#1
  \egroup%
  \xspace%
}% West
\def\west{\West*}
\NewDocumentCommand\NorthSouth{s t!}{%
  \bgroup%
   \ODw@OtherFont%
   \IfBooleanTF#1{%
     \IfBooleanTF{#2}{\North*!--\South*!}{\North*--\South*}%
   }{%
     \IfBooleanTF{#2}{\North!--\South!}{\North--\South}%
   }%
  \egroup%
  \xspace%
}% NorthSouth
\def\northsouth{\NorthSouth*}

\NewDocumentCommand\EastWest{s t!}{%
  \bgroup%
    \ODw@OtherFont%
   \IfBooleanTF#1{%
     \IfBooleanTF{#2}{\East*!--\West*!}{\East*--\West*}%
   }{%
     \IfBooleanTF{#2}{\East!--\West!}{\East--\West}%
   }%
  \egroup%
  \xspace%
}% EastWest
\def\eastwest{\EastWest*}
\def\ODw@N{%
  \@ifstar{\GetTranslation{N-(ODw)}}%
          {\GetTranslation{n-(ODw)}}%
}
\def\ODw@E{%
  \@ifstar{\GetTranslation{E-(ODw)}}%
          {\GetTranslation{e-(ODw)}}%
}
\def\ODw@S{%
  \@ifstar{\GetTranslation{S-(ODw)}}%
          {\GetTranslation{s-(ODw)}}%
}
\def\ODw@W{%
  \@ifstar{\GetTranslation{W-(ODw)}}%
          {\GetTranslation{w-(ODw)}}%
}
\def\ODw@NS{\ODw@N--\ODw@S}
\def\ODw@EW{\ODw@E--\ODw@W}
\def\ODw@North{%
  \@ifstar{\GetTranslation{North-(ODw)}}%
          {\GetTranslation{north-(ODw)}}%
}
\def\ODw@East{%
  \@ifstar{\GetTranslation{East-(ODw)}}%
          {\GetTranslation{east-(ODw)}}%
}
\def\ODw@South{%
  \@ifstar{\GetTranslation{South-(ODw)}}%
          {\GetTranslation{south-(ODw)}}%
}
\def\ODw@West{%
  \@ifstar{\GetTranslation{West-(ODw)}}%
          {\GetTranslation{west-(ODw)}}%
}
\NewDocumentCommand\Pass{s t!}{%
  \bgroup%
    \ODw@OtherFont%
    \IfBooleanTF{#1}{%
      \IfBooleanTF{#2}%
        {\GetTranslation{Pass!-(ODw)}}%
        {\GetTranslation{Pass-(ODw)}}%
    }{%
     \IfBooleanTF{#2}%
       {\GetTranslation{pass!-(ODw)}}%
       {\GetTranslation{pass-(ODw)}}%
    }% TF#1
  \egroup%
  \xspace%
}% Pass
\def\pass{\Pass*}

\NewDocumentCommand\Allpass{s t!}{%
  \bgroup%
    \ODw@OtherFont%
    \IfBooleanTF#1{%
      \IfBooleanTF{#2}%
        {\GetTranslation{AP-(ODw)}}%
        {\GetTranslation{All pass-(ODw)}}%
    }{%
     \IfBooleanTF{#2}%
       {\GetTranslation{ap-(ODw)}}%
       {\GetTranslation{all pass-(ODw)}}%
    }% TF#1
  \egroup%
  \xspace%
}% Allpass
\def\allpass{\Allpass*}

\NewDocumentCommand\Double{s t!}{%
  \bgroup%
    \ODw@OtherFont%
    \IfBooleanTF#1{%
      \IfBooleanTF{#2}%
       {\GetTranslation{Dbl-(ODw)}}%
       {\GetTranslation{Double-(ODw)}}%
    }{%
     \IfBooleanTF{#2}%
       {X}%
       {\GetTranslation{double-(ODw)}}%
    }% TF#1
  \egroup%
  \xspace%
}% Double
\def\double{\Double*}

\NewDocumentCommand\Redouble{s t!}{%
  \bgroup%
    \ODw@OtherFont%
    \IfBooleanTF#1{%
      \IfBooleanTF{#2}%
        {\GetTranslation{ReDbl-(ODw)}}%
        {\GetTranslation{ReDouble-(ODw)}}%
   }{%
     \IfBooleanTF{#2}%
       {\mbox{X\kern-0.1em X}}%
       {\GetTranslation{redouble-(ODw)}}%
    }% TF#1
  \egroup%
  \xspace%
}% Redouble
\def\redouble{\Redouble*}
\newcommand\ODw@FirstBidCol[1]{%
 \IfEqCase{#1}{%
  {N}{%
   \gdef\ODw@BidderI{\@ifstar{\ODw@North*}{\ODw@N*}}%
   \gdef\ODw@BidderII{\@ifstar{\ODw@East*}{\ODw@E*}}%
   \gdef\ODw@BidderIII{\@ifstar{\ODw@South*}{\ODw@S*}}%
   \gdef\ODw@BidderIV{\@ifstar{\ODw@West*}{\ODw@W*}}%
   \gdef\ODw@NameI{\ODw@North@Name}%
   \gdef\ODw@NameII{\ODw@East@Name}%
   \gdef\ODw@NameIII{\ODw@South@Name}%
   \gdef\ODw@NameIV{\ODw@West@Name}%
  }%
  {E}{%
   \gdef\ODw@BidderI{\@ifstar{\ODw@East*}{\ODw@E*}}%
   \gdef\ODw@BidderII{\@ifstar{\ODw@South*}{\ODw@S*}}%
   \gdef\ODw@BidderIII{\@ifstar{\ODw@West*}{\ODw@W*}}%
   \gdef\ODw@BidderIV{\@ifstar{\ODw@North*}{\ODw@N*}}%
   \gdef\ODw@NameI{\ODw@East@Name}%
   \gdef\ODw@NameII{\ODw@South@Name}%
   \gdef\ODw@NameIII{\ODw@West@Name}%
   \gdef\ODw@NameIV{\ODw@North@Name}%
  }%
  {S}{%
   \gdef\ODw@BidderI{\@ifstar{\ODw@South*}{\ODw@S*}}%
   \gdef\ODw@BidderII{\@ifstar{\ODw@West*}{\ODw@W*}}%
   \gdef\ODw@BidderIII{\@ifstar{\ODw@North*}{\ODw@N*}}%
   \gdef\ODw@BidderIV{\@ifstar{\ODw@East*}{\ODw@E*}}%
   \gdef\ODw@NameI{\ODw@South@Name}%
   \gdef\ODw@NameII{\ODw@West@Name}%
   \gdef\ODw@NameIII{\ODw@North@Name}%
   \gdef\ODw@NameIV{\ODw@East@Name}%
  }%
  {W}{%
   \gdef\ODw@BidderI{\@ifstar{\ODw@West*}{\ODw@W*}}%
   \gdef\ODw@BidderII{\@ifstar{\ODw@North*}{\ODw@N*}}%
   \gdef\ODw@BidderIII{\@ifstar{\ODw@East*}{\ODw@E*}}%
   \gdef\ODw@BidderIV{\@ifstar{\ODw@South*}{\ODw@S*}}%
   \gdef\ODw@NameI{\ODw@West@Name}%
   \gdef\ODw@NameII{\ODw@North@Name}%
   \gdef\ODw@NameIII{\ODw@East@Name}%
   \gdef\ODw@NameIV{\ODw@South@Name}%
  }%
 }% IfEqCase
}% ODw@FirstBidCol
\newcommand\namesNS[2]{%
  \gdef\ODw@North@Name{#1}%
  \gdef\ODw@South@Name{#2}%
  \gdef\ODw@All@Names{#1#2\ODw@East@Name\ODw@West@Name}%
}% namesNS
\newcommand\namesEW[2]{%
  \gdef\ODw@East@Name{#1}%
  \gdef\ODw@West@Name{#2}%
  \gdef\ODw@All@Names{#1#2\ODw@North@Name\ODw@South@Name}%
}% namesEW
\newcommand\northhand[5][0pt]{%
  \ODw@ChkNrOfCards{#2#3#4#5}{\north}%
  \gdef\ODw@NSpades{#2}%   Save norths cards
  \gdef\ODw@NHearts{#3}%   of all suits
  \gdef\ODw@NDiamonds{#4}% for later
  \gdef\ODw@NClubs{#5}%    checking
  \gdef\ODw@Nhand{%
    \makebox[\ODw@Compasssize + 2ex][l]{%
      \ODw@hand{t}{#2}{#3}{#4}{#5}%
    }%
    \vspace{#1}%
  }%
}% northhand

\newcommand\easthand[5][0pt]{%
  \ODw@ChkNrOfCards{#2#3#4#5}{\east}%
  \gdef\ODw@ESpades{#2}%   Save easts cards
  \gdef\ODw@EHearts{#3}%   of all suits
  \gdef\ODw@EDiamonds{#4}% for later
  \gdef\ODw@EClubs{#5}%    checking
  \gdef\ODw@Ehand{%
    \hspace{#1}%
    \ODw@hand{c}{#2}{#3}{#4}{#5}%
  }%
}% easthand

\newcommand\southhand[5][0pt]{%
  \ODw@ChkNrOfCards{#2#3#4#5}{\south}%
  \gdef\ODw@SSpades{#2}%   Save souths cards
  \gdef\ODw@SHearts{#3}%   of all suits
  \gdef\ODw@SDiamonds{#4}% for later
  \gdef\ODw@SClubs{#5}%    checking
  \gdef\ODw@Shand{%
    \parbox[b]{\ODw@Compasssize + 2ex}{%
      \vspace*{#1}\par%
      \makebox[0pt][l]{%
        \ODw@hand{b}{#2}{#3}{#4}{#5}%
      }%
    }%
  }%
}% southhand

\newcommand\westhand[5][0pt]{%
  \ODw@ChkNrOfCards{#2#3#4#5}{\west}%
  \gdef\ODw@WSpades{#2}%   Save wests cards
  \gdef\ODw@WHearts{#3}%   of all suits
  \gdef\ODw@WDiamonds{#4}% for later
  \gdef\ODw@WClubs{#5}%    checking
  \gdef\ODw@Whand{%
    \ODw@hand{c}{#2}{#3}{#4}{#5}%
    \hspace*{#1}%
  }%
}% westhand
\NewDocumentCommand\hand{s t! t- O{c}mmmm}{%
  \ODw@ChkNrOfCards{#5#6#7#8}{Hand}%
  \ODw@ChkSameCards{#5}{\Sp}%
  \ODw@ChkSameCards{#6}{\He}%
  \ODw@ChkSameCards{#7}{\Di}%
  \ODw@ChkSameCards{#8}{\Cl}%
  \global\sbox{\ODw@Hand@Box}{%
    \bgroup%
      \ODw@GameSize%
      \IfBooleanTF{#2}%
        {\ODw@vhand[#4]{#5}{#6}{#7}{#8}}%
        {\ODw@hhand{#5}{#6}{#7}{#8}}%
    \egroup%
  }% sbox
  \IfBooleanTF{#3}{}{%
   \IfBooleanTF{#1}%
      {{\centering \usebox{\ODw@Hand@Box}\par}}%
      {\usebox{\ODw@Hand@Box}}%
  }%
}% hand
\newcommand\ODw@hhand[4]{%
  \bgroup%
  \def\xspace{}% undo xspace locally
               % it screws the distance between suit and cards
  \setlength\tabcolsep{1\ODw@Card@Skip}%
  \begin{tabular}{llll}
  % we can't use \suit here: it would cause double checks!
    \Sp\hspace{0.3em}\ODw@Cards{#1} &%
    \He\hspace{0.3em}\ODw@Cards{#2} &%
    \Di\hspace{0.3em}\ODw@Cards{#3} &%
    \Cl\hspace{0.3em}\ODw@Cards{#4} \\
  \end{tabular}%
  \egroup%
}% ODw@hhand
\newcommand\ODw@vhand[5][c]{%
  \ODw@hand{#1}{#2}{#3}{#4}{#5}%
}% ODw@vhand
\newcommand\ODw@hand[5]{%
  \ifthenelse{\equal{#2#3#4#5}{}}{}{%
    \setlength\tabcolsep{\ODw@Card@Skip}%
    \begin{tabular}[#1]{ll}%
  % we can't use \suit here: it would cause double checks!
      \Sp & \ODw@Cards{#2}\\[-0.5ex]
      \He & \ODw@Cards{#3}\\[-0.5ex]
      \Di & \ODw@Cards{#4}\\[-0.5ex]
      \Cl & \ODw@Cards{#5}\\
    \end{tabular}%
  }% ifthenelse
}% ODw@hand
\NewDocumentCommand\onesuitAll{s t! mmmm}{%
  \ODw@ChkSameCards{#3#4#5#6}{}%
  \IfBooleanTF#1{\begin{center}}{}%
  \bgroup%
    \ODw@GameSize%
    \setlength\tabcolsep{0em}%
\begin{tabular}{@{}r@{ }c@{ }l@{}}%
       & \ODw@Cards{#3} \IfBooleanTF#2{\\[-0.2em]}{\\}%
 \ODw@Cards{#6} & \IfBooleanTF#2{\ODw@Compass}{\ODw@Box}%
         & \ODw@Cards{#5} \IfBooleanTF#2{\\[-0.2em]}{\\}%
                & \ODw@Cards{#4}\\
    \end{tabular}%
  \egroup%
  \IfBooleanTF#1{\end{center}}{}%
}% onesuitAll
\NewDocumentCommand\onesuitNS{s t! mm}{%
  \ODw@ChkSameCards{#3#4}{}%
  \IfBooleanTF#1{\begin{center}}{}%
  \bgroup%
    \ODw@GameSize%
    \begin{tabular}{@{}c@{}}%
      \ODw@Cards{#3}\IfBooleanTF#2{\\[-0.2em]}{\\}%
        \IfBooleanTF#2{\ODw@Compass\\[-0.2em]}{\ODw@Box\\}%
      \ODw@Cards{#4}%
    \end{tabular}%
  \egroup%
  \IfBooleanTF#1{\end{center}}{}%
}% onesuitNS
\NewDocumentCommand\onesuitEW{s t! mm}{%
  \ODw@ChkSameCards{#3#4}{}%
  \IfBooleanTF#1{\begin{center}}{}%
  \bgroup%
    \ODw@GameSize%
    \begin{tabular}{@{}r@{ }c@{ }l@{}}%
      \ODw@Cards{#4} &%
      \IfBooleanTF#2{\ODw@Compass}{\ODw@Box} &%
         \ODw@Cards{#3} \\%
    \end{tabular}%
  \egroup%
   \IfBooleanTF#1{\end{center}}{}%
}% onesuitEW
\NewDocumentCommand\onesuitNE{s t! mm}{%
  \ODw@ChkSameCards{#3#4}{}%
  \IfBooleanTF#1{\begin{center}}{}%
  \bgroup%
    \ODw@GameSize%
    \begin{tabular}[b]{c@{ }l@{}}%
      \ODw@Cards{#3} \\%
      \IfBooleanTF#2{\ODw@Compass}{\ODw@Box} &%
         \ODw@Cards{#4} \\%
    \end{tabular}%
  \egroup%
   \IfBooleanTF#1{\end{center}}{}%
}% onesuitEW
\NewDocumentCommand\onesuitNW{s t! mm}{%
  \ODw@ChkSameCards{#3#4}{}%
  \IfBooleanTF#1{\begin{center}}{}%
  \bgroup%
    \ODw@GameSize%
    \begin{tabular}[b]{r@{ }c}%
                     & \ODw@Cards{#3} \\%
      \ODw@Cards{#4} & \IfBooleanTF#2{\ODw@Compass}{\ODw@Box} \\%
    \end{tabular}%
  \egroup%
   \IfBooleanTF#1{\end{center}}{}%
}% onesuitEW
\newcommand\suit[2][]{%
  \ODw@ChkNrOfCards{#2}{suit}%
  \ODw@ChkSameCards{#2}{#1}%
  \bgroup% keep font change local
    #1\ODw@Cards{#2}%
  \egroup%
  \xspace%
}% suit
\newcommand{\ODw@Cards}[1]{%
  \OdW@CardSkiptrue%
  \ODw@Xfer{#1}%
}% ODw@Cards
\NewDocumentCommand\showAll{s t+ O{c}}{%
  \gdef\ODw@Spades{% store all Spades together
    \ODw@NSpades\ODw@ESpades\ODw@SSpades\ODw@WSpades%
  }%
  \gdef\ODw@Hearts{% store all Hearts together
    \ODw@NHearts\ODw@EHearts\ODw@SHearts\ODw@WHearts%
  }%
  \gdef\ODw@Diamonds{% store all Diamonds together
    \ODw@NDiamonds\ODw@EDiamonds\ODw@SDiamonds\ODw@WDiamonds%
  }%
  \gdef\ODw@Clubs{% store all Clubs together
    \ODw@NClubs\ODw@EClubs\ODw@SClubs\ODw@WClubs%
  }%
  % check for multiple and nr. of cards
  \ODw@ChkNrOfCards{\ODw@Spades}{\Sp}%
  \ODw@ChkSameCards{\ODw@Spades}{\Sp}%
  \ODw@ChkNrOfCards{\ODw@Hearts}{\He}%
  \ODw@ChkSameCards{\ODw@Hearts}{\He}%
  \ODw@ChkNrOfCards{\ODw@Diamonds}{\Di}%
  \ODw@ChkSameCards{\ODw@Diamonds}{\Di}%
  \ODw@ChkNrOfCards{\ODw@Clubs}{\Cl}%
  \ODw@ChkSameCards{\ODw@Clubs}{\Cl}%
  \IfBooleanTF#1{\begin{center}}{}%
  \bgroup%
    \setlength\tabcolsep{0em}%
    \ODw@GameSize%
    \ODw@TestIfEmpty{\ODw@HeaderText}{ODw@EmptyHeader}%
    \ODw@TestIfEmpty{\ODw@FooterText}{ODw@EmptyFooter}%
  % sbox1 necessary to calc. |Compasssize| for |Nhand|
    \sbox1{\ODw@Compass}%
    \sbox0{%
\begin{tabular}[#3]{@{}r@{}c@{}l@{}}%
  \ODw@LeftUpperText & \ODw@Nhand & \ODw@RightUpperText\\
  \ODw@Whand         & \usebox{1} & \ODw@Ehand\\
  \ODw@LeftLowerText & \ODw@Shand & \ODw@RightLowerText\\
\end{tabular}%
    }% sbox
    \ODw@gsetlength{\ODw@Diagram@Width}{\wd0}%
    \begin{tabular}[#3]{@{}r@{}c@{}l@{}}%
      \ODw@ProcessHeader{3}% span 3 columns
      \ODw@LeftUpperText & \ODw@Nhand & \ODw@RightUpperText\\
      \ODw@Whand         & \usebox{1} & \ODw@Ehand\\
      \ODw@LeftLowerText & \ODw@Shand & \ODw@RightLowerText\\
      \ODw@ProcessFooter{3}% span 3 columns
    \end{tabular}%
    \IfBooleanTF#2{%
 %  needed for \ODw@CondNewLine
      \setlength{\ODw@Bid@Width}{\wd\ODw@BidBox}%
      \ODw@CondNewLine%
      \usebox{\ODw@BidBox}%
    }{}%
  \egroup%
  \IfBooleanTF#1{\end{center}}{}%
}% showAll
\NewDocumentCommand\showNS{s t+ O{c}}{%
  \gdef\ODw@Spades{\ODw@NSpades\ODw@SSpades}%
  \gdef\ODw@Hearts{\ODw@NHearts\ODw@SHearts}%
  \gdef\ODw@Diamonds{\ODw@NDiamonds\ODw@SDiamonds}%
  \gdef\ODw@Clubs{\ODw@NClubs\ODw@SClubs}%
  \ODw@ChkSameCards{\ODw@Spades}{\Sp}%
  \ODw@ChkSameCards{\ODw@Hearts}{\He}%
  \ODw@ChkSameCards{\ODw@Diamonds}{\Di}%
  \ODw@ChkSameCards{\ODw@Clubs}{\Cl}%
  \IfBooleanTF#1{\begin{center}}{}%
  \bgroup%
    \setlength\tabcolsep{0em}%
    \ODw@GameSize%
    \ODw@TestIfEmpty{\ODw@HeaderText}{ODw@EmptyHeader}%
    \ODw@TestIfEmpty{\ODw@FooterText}{ODw@EmptyFooter}%
  % sbox1 necessary to calc. |Compasssize| for |Nhand|
    \sbox1{\ODw@Compass}%
    \sbox0{%
  \begin{tabular}[#3]{@{}r@{}c@{}l@{}}%
     & \ODw@Nhand & \\
     & \usebox{1} & \\
     & \ODw@Shand & \\
  \end{tabular}%
    }% sbox0
  \ODw@gsetlength\ODw@Diagram@Width{\wd0}%
  \begin{tabular}[#3]{@{}r@{}c@{}l@{}}%
    \ODw@ProcessHeader{3}% span 3 columns
     & \ODw@Nhand & \\
     & \usebox{1} & \\
     & \ODw@Shand & \\
    \ODw@ProcessFooter{3}% span 3 columns
  \end{tabular}%
   \IfBooleanTF#2{%
 % necessary for \ODw@CondNewLine
     \setlength{\ODw@Bid@Width}{\wd\ODw@BidBox}%
     \ODw@CondNewLine%
     \usebox{\ODw@BidBox}%
   }{}%
 \egroup%
 \IfBooleanTF#1{\end{center}}{}%
}% showNS
\NewDocumentCommand\showEW{s t+ O{c}}{%
  \gdef\ODw@Spades{\ODw@ESpades\ODw@WSpades}%
  \gdef\ODw@Hearts{\ODw@EHearts\ODw@WHearts}%
  \gdef\ODw@Diamonds{\ODw@EDiamonds\ODw@WDiamonds}%
  \gdef\ODw@Clubs{\ODw@EClubs\ODw@WClubs}%
  \ODw@ChkSameCards{\ODw@Spades}{\Sp}%
  \ODw@ChkSameCards{\ODw@Hearts}{\He}%
  \ODw@ChkSameCards{\ODw@Diamonds}{\Di}%
  \ODw@ChkSameCards{\ODw@Clubs}{\Cl}%
  \IfBooleanTF#1{\begin{center}}{}%
  \bgroup%
    \setlength\tabcolsep{0em}%
    \ODw@GameSize%
    \ODw@TestIfEmpty{\ODw@HeaderText}{ODw@EmptyHeader}%
    \ODw@TestIfEmpty{\ODw@FooterText}{ODw@EmptyFooter}%
    \sbox0{%
      \begin{tabular}[#3]{@{}r@{}c@{}l@{}}%
        \ODw@Whand       & \ODw@Compass & \ODw@Ehand \\
      \end{tabular}%
    }% sbox
    \ODw@gsetlength{\ODw@Diagram@Width}{\wd0}%
    \begin{tabular}[#3]{@{}r@{}c@{}l@{}}%
      \ODw@ProcessHeader{3}% span 3 columns
                       &              & \\
      \ODw@Whand       & \ODw@Compass & \ODw@Ehand \\
      \ODw@ProcessFooter{3}% span 3 columns
    \end{tabular}%
   \IfBooleanTF#2{%
 % necessary for \ODw@CondNewLine
     \setlength{\ODw@Bid@Width}{\wd\ODw@BidBox}%
     \ODw@CondNewLine%
     \usebox{\ODw@BidBox}%
   }{}%
  \egroup%
  \IfBooleanTF#1{\end{center}}{}%
}% showEW
\NewDocumentCommand\showNE{s t+ O{c}}{%
  \gdef\ODw@Spades{\ODw@NSpades\ODw@ESpades}%
  \gdef\ODw@Hearts{\ODw@NHearts\ODw@EHearts}%
  \gdef\ODw@Diamonds{\ODw@NDiamonds\ODw@EDiamonds}%
  \gdef\ODw@Clubs{\ODw@NClubs\ODw@EClubs}%
  \ODw@ChkSameCards{\ODw@Spades}{\Sp}%
  \ODw@ChkSameCards{\ODw@Hearts}{\He}%
  \ODw@ChkSameCards{\ODw@Diamonds}{\Di}%
  \ODw@ChkSameCards{\ODw@Clubs}{\Cl}%
  \IfBooleanTF#1{\begin{center}}{}%
  \bgroup%
    \setlength\tabcolsep{0em}%
    \ODw@GameSize%
    \ODw@TestIfEmpty{\ODw@HeaderText}{ODw@EmptyHeader}%
    \ODw@TestIfEmpty{\ODw@FooterText}{ODw@EmptyFooter}%
  % sbox1 necessary to calc. |Compasssize| for |Nhand|
    \sbox1{\ODw@Compass}%
    \sbox0{%
      \begin{tabular}[#3]{@{}c@{}l@{}}%
        \ODw@Nhand & \ODw@RightUpperText\\
        \usebox{1} & \ODw@Ehand\\
      \end{tabular}%
    }% sbox
    \ODw@gsetlength{\ODw@Diagram@Width}{\wd0}%
    \begin{tabular}[#3]{@{}c@{}l@{}}%
      \ODw@ProcessHeader{2}% span 2 columns
      \ODw@Nhand & \ODw@RightUpperText\\
      \usebox{1} & \ODw@Ehand\\
      \ODw@ProcessFooter{2}% span 2 columns
    \end{tabular}%
   \IfBooleanTF#2{%
 % necessary for \ODw@CondNewLine
     \setlength{\ODw@Bid@Width}{\wd\ODw@BidBox}%
     \ODw@CondNewLine%
     \usebox{\ODw@BidBox}%
   }{}%
  \egroup%
  \IfBooleanTF#1{\end{center}}{}%
}% showNE
\NewDocumentCommand\showNW{s t+ O{c}}{%
  \gdef\ODw@Spades{\ODw@NSpades\ODw@WSpades}%
  \gdef\ODw@Hearts{\ODw@NHearts\ODw@WHearts}%
  \gdef\ODw@Diamonds{\ODw@NDiamonds\ODw@WDiamonds}%
  \gdef\ODw@Clubs{\ODw@NClubs\ODw@WClubs}%
  \ODw@ChkSameCards{\ODw@Spades}{\Sp}%
  \ODw@ChkSameCards{\ODw@Hearts}{\He}%
  \ODw@ChkSameCards{\ODw@Diamonds}{\Di}%
  \ODw@ChkSameCards{\ODw@Clubs}{\Cl}%
  \IfBooleanTF#1{\begin{center}}{}%
  \bgroup%
    \setlength\tabcolsep{0em}%
    \ODw@GameSize%
    \ODw@TestIfEmpty{\ODw@HeaderText}{ODw@EmptyHeader}%
    \ODw@TestIfEmpty{\ODw@FooterText}{ODw@EmptyFooter}%
  % sbox1 necessary to calc. |Compasssize| for |Nhand|
    \sbox1{\ODw@Compass}%
    \sbox0{%
      \begin{tabular}[#3]{@{}c@{}l@{}}%
        \ODw@LeftUpperText & \ODw@Nhand\\
        \ODw@Whand         & \usebox{1}\\
      \end{tabular}%
    }% sbox
    \ODw@gsetlength{\ODw@Diagram@Width}{\wd0}%
    \begin{tabular}[#3]{@{}r@{}c@{}}%
      \ODw@ProcessHeader{2}% span 2 columns
      \ODw@LeftUpperText & \ODw@Nhand\\
      \ODw@Whand         & \usebox{1}\\
      \ODw@ProcessFooter{2}% span 2 columns
    \end{tabular}%
   \IfBooleanTF#2{%
 % necessary for \ODw@CondNewLine
     \setlength{\ODw@Bid@Width}{\wd\ODw@BidBox}%
     \ODw@CondNewLine%
     \usebox{\ODw@BidBox}%
   }{}%
  \egroup%
  \IfBooleanTF#1{\end{center}}{}%
}% showNW
\newcommand{\ODw@Compass}{%
 \begingroup
  \def\ODw@V{-1}\def\ODw@D{-1}%
  \def\@ODw{\none}\ifx\ODw@Vulner\@ODw\def\ODw@V{0}\fi%
  \def\@ODw{\none*}\ifx\ODw@Vulner\@ODw\def\ODw@V{0}\fi%
  \def\@ODw{\none!}\ifx\ODw@Vulner\@ODw\def\ODw@V{0}\fi%
  \def\@ODw{\none*!}\ifx\ODw@Vulner\@ODw\def\ODw@V{0}\fi%
  \def\@ODw{\all}\ifx\ODw@Vulner\@ODw\def\ODw@V{1}\fi%
  \def\@ODw{\all*}\ifx\ODw@Vulner\@ODw\def\ODw@V{1}\fi%
  \def\@ODw{\all!}\ifx\ODw@Vulner\@ODw\def\ODw@V{1}\fi%
  \def\@ODw{\all*!}\ifx\ODw@Vulner\@ODw\def\ODw@V{1}\fi%
  \def\@ODw{\NorthSouth}\ifx\ODw@Vulner\@ODw\def\ODw@V{2}\fi%
  \def\@ODw{\NorthSouth*}\ifx\ODw@Vulner\@ODw\def\ODw@V{2}\fi%
  \def\@ODw{\NorthSouth!}\ifx\ODw@Vulner\@ODw\def\ODw@V{2}\fi%
  \def\@ODw{\NorthSouth*!}\ifx\ODw@Vulner\@ODw\def\ODw@V{2}\fi%
  \def\@ODw{\EastWest}\ifx\ODw@Vulner\@ODw\def\ODw@V{3}\fi%
  \def\@ODw{\EastWest*}\ifx\ODw@Vulner\@ODw\def\ODw@V{3}\fi%
  \def\@ODw{\EastWest!}\ifx\ODw@Vulner\@ODw\def\ODw@V{3}\fi%
  \def\@ODw{\EastWest*!}\ifx\ODw@Vulner\@ODw\def\ODw@V{3}\fi%
  \def\@ODw{\North}\ifx\ODw@Dealer\@ODw\def\ODw@D{0}\fi%
  \def\@ODw{\North*}\ifx\ODw@Dealer\@ODw\def\ODw@D{0}\fi%
  \def\@ODw{\North!}\ifx\ODw@Dealer\@ODw\def\ODw@D{0}\fi%
  \def\@ODw{\North*!}\ifx\ODw@Dealer\@ODw\def\ODw@D{0}\fi%
  \def\@ODw{\East}\ifx\ODw@Dealer\@ODw\def\ODw@D{1}\fi%
  \def\@ODw{\East*}\ifx\ODw@Dealer\@ODw\def\ODw@D{1}\fi%
  \def\@ODw{\East!}\ifx\ODw@Dealer\@ODw\def\ODw@D{1}\fi%
  \def\@ODw{\East*!}\ifx\ODw@Dealer\@ODw\def\ODw@D{1}\fi%
  \def\@ODw{\South}\ifx\ODw@Dealer\@ODw\def\ODw@D{2}\fi%
  \def\@ODw{\South*}\ifx\ODw@Dealer\@ODw\def\ODw@D{2}\fi%
  \def\@ODw{\South!}\ifx\ODw@Dealer\@ODw\def\ODw@D{2}\fi%
  \def\@ODw{\South*!}\ifx\ODw@Dealer\@ODw\def\ODw@D{2}\fi%
  \def\@ODw{\West}\ifx\ODw@Dealer\@ODw\def\ODw@D{3}\fi%
  \def\@ODw{\West*}\ifx\ODw@Dealer\@ODw\def\ODw@D{3}\fi%
  \def\@ODw{\West!}\ifx\ODw@Dealer\@ODw\def\ODw@D{3}\fi%
  \def\@ODw{\West*!}\ifx\ODw@Dealer\@ODw\def\ODw@D{3}\fi%
  \ODw@CompassDefault% use the compass font
  \def\PicSize{500}%
  \def\MidSize{250}%
  % Multiply unitlength=0.005em with CompSize (default= 1)
  \setlength\unitlength{0.005em * \real{\ODw@CompSize}}%
  \ODw@gsetlength\ODw@Compasssize{\unitlength * \PicSize + 2ex}%
  \def\Hoffset{30}% distance between W (E) and frame
  \def\Voffset{30}% distance between N (S) and frame
  \setlength\ODw@Tmp@Width{0.1em * \real{\ODw@CompLine}}%
  \linethickness{\ODw@Tmp@Width}%
  % leave 1ex space on all sides
  \parbox[c][\ODw@Compasssize]{\ODw@Compasssize}{%
    \centering%
    \begin{picture}(\PicSize,\PicSize)%
      \ifODw@CompShow%
        % the frame
        \moveto(0,0)
       \if\ODw@CompLine0% must do it this way, because
       \else% linethickness zero does not suppress the line
         \lineto(0,\PicSize)\lineto(\PicSize,\PicSize)
         \lineto(\PicSize,0)\closepath\strokepath
       \fi%
        % the cardinal points
       \put(\MidSize,\the\numexpr \PicSize - \Voffset)%
         {\makebox[0pt]{\raisebox{-\height}{\ODw@Print{0}}}}% N
       \put(\MidSize,\Voffset){\makebox[0pt]{\ODw@Print{2}}}% S
       \put(\Hoffset,\MidSize){%
         \makebox[0pt][l]{%
          \ifODw@CompTurn%
            \raisebox{-0.5\height}{%
              \rotatebox[origin=t]{90}{\ODw@Print{3}}%
            }%
          \else%
             \raisebox{-0.5\height}{\ODw@Print{3}}%
          \fi%
         }% makebox
        }% W
        \put(\the\numexpr \PicSize - \Hoffset,\MidSize)%
         {\makebox[0pt][r]{%
            \raisebox{-0.5\height}{%
            \ifODw@CompTurn%
                \rotatebox[origin=c]{90}{\ODw@Print{1}}%
              \else%
                \ODw@Print{1}%
              \fi%
            }%
           }% makebox
         }% E
        % the center
          \put(\MidSize,\MidSize){\makebox(0,0){\ODw@mid}}
      \fi%
    \end{picture}%
   }% parbox
 \endgroup
}% ODw@Compass
\newcommand\ODw@Print[1]{%
\bgroup
  \smaller\smaller%
  \ifcase#1% #1=0: print N
    \ifboolexpr{ test {\ifnumcomp{\ODw@D}{=}{0}}}%
    {% dealer = N
      \ifboolexpr{ test {\ifnumcomp{\ODw@V}{=}{1}} or%
                   test {\ifnumcomp{\ODw@V}{=}{2}} }%
        {\ODw@PrintColor{\underline{\ODw@N*}}}% Vul
        {\underline{\ODw@N*}}% not Vul
    }{% dealer <> N
      \ifboolexpr{ test {\ifnumcomp{\ODw@V}{=}{1}} or%
                   test {\ifnumcomp{\ODw@V}{=}{2}} }%
        {\ODw@PrintColor{\ODw@N*}}% Vul
        {\ODw@N*}% not Vul
    }%
  \or% #1=1: print E
    \ifboolexpr{ test {\ifnumcomp{\ODw@D}{=}{1}}}%
    {% dealer E
      \ifboolexpr{ test {\ifnumcomp{\ODw@V}{=}{1}} or%
                   test {\ifnumcomp{\ODw@V}{=}{3}} }%
        {\ODw@PrintColor{\underline{\ODw@E*}}}% Vul
        {\underline{\ODw@E*}}% not Vul
    }{% dealer <> E
      \ifboolexpr{ test {\ifnumcomp{\ODw@V}{=}{1}} or%
                   test {\ifnumcomp{\ODw@V}{=}{3}} }%
        {\ODw@PrintColor{\ODw@E*}}% Vul
        {\ODw@E*}% not Vul
    }%
  \or% #1=2: print S
    \ifboolexpr{ test {\ifnumcomp{\ODw@D}{=}{2}}}%
    {% dealer S
      \ifboolexpr{ test {\ifnumcomp{\ODw@V}{=}{1}} or%
                   test {\ifnumcomp{\ODw@V}{=}{2}} }%
        {\ODw@PrintColor{%
           \ensuremath{\overline{\mbox{\ODw@S*}}}}%
        }% Vul
        {\ensuremath{\overline{\mbox{\ODw@S*}}}}% not Vul
    }{% dealer <> S
      \ifboolexpr{ test {\ifnumcomp{\ODw@V}{=}{1}} or%
                   test {\ifnumcomp{\ODw@V}{=}{2}} }%
        {\ODw@PrintColor{\ODw@S*}}% Vul
        {\ODw@S*}% not Vul
    }%
  \or% #1=3: print W
    \ifboolexpr{ test {\ifnumcomp{\ODw@D}{=}{3}}}%
    {% dealer W
      \ifboolexpr{ test {\ifnumcomp{\ODw@V}{=}{1}} or%
                   test {\ifnumcomp{\ODw@V}{=}{3}} }%
        {\ODw@PrintColor{\underline{\ODw@W*}}}% Vul
        {\underline{\ODw@W*}}% not Vul
    }{% dealer <> W
      \ifboolexpr{ test {\ifnumcomp{\ODw@V}{=}{1}} or%
                   test {\ifnumcomp{\ODw@V}{=}{3}} }%
        {\ODw@PrintColor{\ODw@W*}}% Vul
        {\ODw@W*}% not Vul
    }%
  \fi% (ifcase#1)
\egroup%
}% ODw@Print
\newcommand\ODw@PrintColor[1]{%
  \ifODw@monochrome\textit{#1}\else\textcolor{red}{#1}\fi%
}% ODw@PrintColor
\def\ODw@CompMid{}
\def\ODw@mid{{\smaller\smaller\smaller\ODw@CompMid}}
\newcommand{\ODw@Box}{%
  \bgroup
    \setlength{\fboxsep}{0pt}%
    \setlength{\fboxrule}{0.1em}%
    \fbox{\rule{0mm}{0.7em}\rule{0.7em}{0mm}}%
  \egroup
}% ODw@Box
\def\ODw@BoardText{}
\NewDocumentCommand\boardtext{s}{%
  \IfBooleanTF#1{\GetTranslation{Board-(ODw)}:\,\ODw@BoardText}%
                {\ODw@BoardText}%
}% boardtext
\newcommand{\boardnr}[1]{%
  \IfInteger{#1}{%
    \gdef\ODw@BoardText{%
      \bgroup%
        \ODw@OtherFont%
      #1%
      \egroup%
    }%
    \setcounter{ODw@Cnt}{#1}%
    \whiledo{\theODw@Cnt > 16}{%
      \addtocounter{ODw@Cnt}{-16}%
    }% whiledo, now 1 <= Cnt <= 16
    \IfEqCase{\theODw@Cnt}{% set dealer/vulner
      {0}{\gdef\ODw@BoardText{}\vulner[-1]\dealer[-1]}
      {1}{\vulner[\none]\dealer[\North*!]}
      {2}{\vulner[\NorthSouth*!]\dealer[\East*!]}
      {3}{\vulner[\EastWest*!]\dealer[\South*!]}
      {4}{\vulner[\all]\dealer[\West*!]}
      {5}{\vulner[\NorthSouth*!]\dealer[\North*!]}
      {6}{\vulner[\EastWest*!]\dealer[\East*!]}
      {7}{\vulner[\all]\dealer[\South*!]}
      {8}{\vulner[\none]\dealer[\West*!]}
      {9}{\vulner[\EastWest*!]\dealer[\North*!]}
      {10}{\vulner[\all]\dealer[\East*!]}
      {11}{\vulner[\none]\dealer[\South*!]}
      {12}{\vulner[\NorthSouth*!]\dealer[\West*!]}
      {13}{\vulner[\all]\dealer[\North*!]}
      {14}{\vulner[\none]\dealer[\East*!]}
      {15}{\vulner[\NorthSouth*!]\dealer[\South*!]}
      {16}{\vulner[\EastWest*!]\dealer[\West*!]}
    }% IfEqCase
  }{\gdef\ODw@BoardText{#1}}% otherwise take #1
}% boardnr
\newcommand\headlinetext[1]{\gdef\ODw@HeaderText{#1}}
\headlinetext{}
\newcommand\footlinetext[1]{\gdef\ODw@FooterText{#1}}
\footlinetext{}
\def\ODw@LeftUpperText{}
\newcommand\leftupper[4][0pt]{%
  \gdef\ODw@LeftUpperText{%
    \hspace{-#1}%
     \begin{tabular}[t]{l}#2\\#3\\#4\\\end{tabular}
  }%
}% leftupper
\def\ODw@LeftLowerText{}
\newcommand\leftlower[4][0pt]{%
  \gdef\ODw@LeftLowerText{%
    \hspace{-#1}%
     \begin{tabular}[b]{l}#2\\#3\\#4\\\end{tabular}
  }%
}% leftlower
\def\ODw@RightUpperText{}
\newcommand\rightupper[4][0pt]{%
  \gdef\ODw@RightUpperText{%
    \hspace{#1}%
     \begin{tabular}[t]{l}#2\\#3\\#4\\\end{tabular}
  }%
}% rightupper
\def\ODw@RightLowerText{}
\newcommand\rightlower[4][0pt]{%
  \gdef\ODw@RightLowerText{%
    \hspace{#1}%
     \begin{tabular}[b]{l}#2\\#3\\#4\\\end{tabular}
  }%
}% rightlower
\newcommand{\ODw@ProcessHeader}[1]{%
  \ifODw@EmptyHeader% Must be this way (StackExchange)
   \else%             |\ifthenelse| bites |\multicolumn|!
    \multicolumn{#1}{%
      p{\dimexpr\ODw@Diagram@Width-%
          2\tabcolsep-2\arrayrulewidth}%
    }{{\ODw@LegendFont\ODw@HeaderText}}\\
  \fi%
}% ODw@ProcessHeader
\newcommand{\ODw@TestIfEmpty}[2]{%
  \ifthenelse{\equal{#1}{}}{%
    \setboolean{#2}{true}}{%
    \setboolean{#2}{false}%
  }%
}% ODw@TestIfEmpty
\newcommand{\ODw@ProcessFooter}[1]{%
  \ifODw@EmptyFooter% Must be this way (StackExchange)
   \else%             |\ifthenelse| bites |\multicolumn|!
    \multicolumn{#1}{%
      p{\dimexpr\ODw@Diagram@Width%
        -2\tabcolsep-2\arrayrulewidth}%
    }{{\ODw@LegendFont\ODw@FooterText}}\\
  \fi%
}% ODw@ProcessFooter
\newcommand\handskip[1]{%
  \def\ODw@Skipwidth{1em + #1}% recalculate the new Skipwidth
  \setlength\ODw@Skip@Width{\ODw@Skipwidth}%
}% handskip
\def\ODw@DealerText{%
  \bgroup%
     \ODw@OtherFont\GetTranslation{Dealer-(ODw)}%
  \egroup%
}% ODw@DealerText
\NewDocumentCommand\ODw@VulnerText{s t!}{%
  \bgroup%
    \ODw@OtherFont%
    \IfBooleanTF#1{%
      \IfBooleanTF#2{\GetTranslation{Vul-(ODw)}}%
        {\GetTranslation{Vulnerable-(ODw)}}%
    }{%
      \IfBooleanTF#2{\GetTranslation{vul-(ODw)}}%
        {\GetTranslation{vulnerable-(ODw)}}%
    }%
  \egroup%
  \xspace%
}% ODw@VulnerText
\def\ODw@AwardText{\textsf{\GetTranslation{Award-(ODw)}}}
\newcommand\dealer[1][]{%
  \ifthenelse{\equal{#1}{}}%
    {\ODw@Dealer}%
    {\gdef\ODw@Dealer{#1}}%
}% dealer
\def\ODw@Dealer{\North*}
\newcommand\vulner[1][]{%
  \ifthenelse{\equal{#1}{}}%
    {\ODw@Vulner}%
    {\gdef\ODw@Vulner{#1}}%
}% vulner
\def\ODw@Vulner{\NorthSouth}
\newcommand\dealertext[1][\ODw@Dealer]{\ODw@DealerText:\,#1}
\newcommand\vulnertext[1][\ODw@Vulner]{%
  \ifODw@LongCalls%
    \ODw@VulnerText*%
  \else%
    \ODw@VulnerText*!%
  \fi%
  :\,#1%
}
\newcommand{\alert}{{}\ensuremath{^\textbf{*}}}
\newcommand{\announce}{{}\ensuremath{^\textbf{\smaller A}}}
\newcommand\markit{%
  \stepcounter{ODw@Nr}%
  \footnotemark[\theODw@Nr]%
}% markit
\newcommand\explainit[1]{%
  \stepcounter{ODw@Nr}%
  \ensuremath{{}^\textrm{\smaller\alph{ODw@Nr}}}\,#1%
}% explainit
\newcolumntype{B}{% for Biddings
  >{\collectcell\ODw@BTfer}c<{\endcollectcell}}
\newcolumntype{F}{% for First column in |play| diagrams
  >{\collectcell\ODw@FTfer}c<{\endcollectcell}}
\newcolumntype{P}{% for |Play| diagrams (2nd--4th column)
  >{\collectcell\ODw@PTfer}c<{\endcollectcell}}
\NewEnviron{ODw@Bidding}[2][t]{%
  \def\xspace{}%
  \setlength\tabcolsep{0.2em}%
  \sbox{0}{%
    \begin{tabular}[#1]{BBBB}% 1st column
     \ifODw@Bidders%
      \cci{ % there MUST be a ' ' (space)
        \ODw@BidderFont%
          \ifODw@short\ODw@BidderI%
            \else\ODw@BidderI*%
          \fi%
      } &%                     2nd column
      \cci{ % there MUST be a ' ' (space)
        \ODw@BidderFont%
          \ifODw@short\ODw@BidderII%
            \else\ODw@BidderII*%
          \fi%
      } &%                     3rd column
      \cci{ % there MUST be a ' ' (space)
        \ODw@BidderFont%
          \ifODw@short\ODw@BidderIII%
            \else\ODw@BidderIII*%
          \fi%
      } &%                     4th column
      \cci{ % there MUST be a ' ' (space)
        \ODw@BidderFont%
          \ifODw@short\ODw@BidderIV%
            \else\ODw@BidderIV*%
          \fi%
      } \\% end of 1st row
      \if\ODw@All@Names\empty%
      \else% 2nd row
        \cci{ \ODw@NameFont\ODw@NameI}   &%  please
        \cci{ \ODw@NameFont\ODw@NameII}  &%  mind
        \cci{ \ODw@NameFont\ODw@NameIII} &%  the
        \cci{ \ODw@NameFont\ODw@NameIV}  \\% spaces!
      \fi%
      \ifODw@BidLine\hline\fi%
     \fi%
     \BODY%
%%%%%%
    \end{tabular}%
  }% sbox0
  \setcounter{ODw@Nr}{0}%
  \setlength{\ODw@Bid@Width}{\wd0}%
  \global\sbox\ODw@BidBox{%
    \begin{tabular}[#1]{BBBB}%   1st column
     \ifODw@Bidders%
      \cci{ % there MUST be a ' ' (space)
        \ODw@BidderFont%
          \ifODw@short\ODw@BidderI%
            \else\ODw@BidderI*%
          \fi%
      } &%                       2nd column
      \cci{ % there MUST be a ' ' (space)
        \ODw@BidderFont%
          \ifODw@short\ODw@BidderII%
            \else\ODw@BidderII*%
          \fi%
      } &%                       3rd column
      \cci{ % there MUST be a ' ' (space)
        \ODw@BidderFont%
          \ifODw@short\ODw@BidderIII%
            \else\ODw@BidderIII*%
          \fi%
      } &%                       4th column
      \cci{ % there MUST be a ' ' (space)
        \ODw@BidderFont%
          \ifODw@short\ODw@BidderIV%
            \else\ODw@BidderIV*%
          \fi%
      } \\% end of 1st row
      \if\ODw@All@Names\empty%
      \else% 2nd row
        \cci{ \ODw@NameFont\ODw@NameI}   &%  please
        \cci{ \ODw@NameFont\ODw@NameII}  &%  mind
        \cci{ \ODw@NameFont\ODw@NameIII} &%  the
        \cci{ \ODw@NameFont\ODw@NameIV}  \\% spaces!
      \fi%
      \ifODw@BidLine\hline\fi%
     \fi
     \BODY%
%%%%%  Until here the same code as in the sbox!
      \ifODw@description%
      % Add the description, if not empty
        \hline%
        \multicolumn{4}{% span explanations over 4 cols...
          p{\dimexpr\ODw@Bid@Width-2\tabcolsep}%
        }{% ...with the right width
          \setcounter{ODw@Nr}{0}%
          \raggedright%
          \smaller\smaller#2%
        }\\%
      \fi%
    \end{tabular}%
  }% sbox ODw@BidBox
}% ODw@Bidding
\NewEnviron{ODw@Biddingpair}[2][t]{%
  \def\xspace{}%
  \setlength\tabcolsep{0.2em}%
  \sbox{0}{%
   \begin{tabular}[#1]{BB}% 1st column
    \ifODw@Bidders%
     \cci{ % there MUST be a ' ' (space)
      \ODw@BidderFont%
       \ifODw@short\ODw@BidderI%
         \else\ODw@BidderI*%
       \fi%
     } &% 2nd column
     \cci{ % there MUST be a ' ' (space)
      \ODw@BidderFont%
       \ifODw@short\ODw@BidderIII%
        \else\ODw@BidderIII*%
       \fi%
      } \\% end of 1st row
      \if\ODw@All@Names\empty%
       \else% 2nd row
        \cci{ \ODw@NameFont\ODw@NameI} &%  please mind
        \cci{ \ODw@NameFont\ODw@NameIII} \\% the spaces!
      \fi%
      \ifODw@BidLine\hline\fi%
     \fi%
     \BODY%
%%%%%%%
    \end{tabular}%
  }% sbox0
  \setcounter{ODw@Nr}{0}%
  \setlength{\ODw@Bid@Width}{\wd0}%
  \global\sbox\ODw@BidBox{%
    \begin{tabular}[#1]{BB}% 1st column
     \ifODw@Bidders%
      \cci{ % there MUST be a ' ' (space)
       \ODw@BidderFont%
        \ifODw@short\ODw@BidderI%
         \else\ODw@BidderI*%
        \fi%
      } &% 2nd column
      \cci{ % there MUST be a ' ' (space)
        \ODw@BidderFont%
          \ifODw@short\ODw@BidderIII%
            \else\ODw@BidderIII*%
          \fi%
      } \\% end of 1st row
      \if\ODw@All@Names\empty%
      \else% 2nd row
       \cci{ \ODw@NameFont\ODw@NameI}   &%  please mind
       \cci{ \ODw@NameFont\ODw@NameIII} \\% the spaces!
      \fi%
      \ifODw@BidLine\hline\fi%
     \fi%
     \BODY%
  %%%%%% Until here the same code as in the sbox!
      \ifODw@description%
      % Add the description, if not empty
        \hline%
        \multicolumn{2}{%
          p{\dimexpr\ODw@Bid@Width-2\tabcolsep}%
        }{%
          \setcounter{ODw@Nr}{0}%
          \raggedright%
          \smaller\smaller#2%
        }\\%
      \fi%
    \end{tabular}%
  }% sbox ODw@BidBox
}% ODw@Biddingpair
\NewDocumentEnvironment{bidding}{s t! t- O{c}d()}{%
  \ODw@GameSize%
  \renewcommand{\thefootnote}{\alph{footnote}}%
  \setcounter{ODw@Nr}{0}%
  \IfBooleanTF#1{\center}{}%           "*" detected
  \IfBooleanTF{#2}{\ODw@shorttrue}{}%  "!" detected
  \IfValueTF{#5}{\ODw@descriptiontrue}{\ODw@descriptionfalse}%
  \ODw@Bidding[#4]{#5}%
}{%
  \endODw@Bidding%
  \IfBooleanTF{#3}%
    {\rule{0pt}{0pt}}%
  %           +---without this, pdflatex aborts compilation!
    {\usebox{\ODw@BidBox}}%  "-" detected
  \IfBooleanTF#1{\endcenter}{}%
}% bidding
\NewDocumentEnvironment{biddingpair}{s t! t- O{c}d()}{%
  \def\xspace{}%
  \ODw@GameSize%
  \renewcommand{\thefootnote}{\alph{footnote}}%
  \setcounter{ODw@Nr}{0}%
  \IfBooleanTF#1{\center}{}%           "*" detected
  \IfBooleanTF{#2}{\ODw@shorttrue}{}%  "+" detected
  \IfValueTF{#5}{\ODw@descriptiontrue}{\ODw@descriptionfalse}%
  \ODw@Biddingpair[#4]{#5}%
}{%
  \endODw@Biddingpair%
  \IfBooleanTF{#3}%
    {\rule{0pt}{0pt}}%
  %           +---without this, pdflatex aborts compilation!
    {\usebox{\ODw@BidBox}}%  "-" detected
  \IfBooleanTF#1{\endcenter}{}%
}% biddingpair
\def\ODw@AccTricks{%
    \ODw@LastTrick{\ODw@Last}{\theODw@WinningNr}%
    \ODw@append{\theODw@NSCnt,\theODw@EWCnt,}% store counters
    \setcounter{ODw@Highest}{0}% reset for next trick
}% ODw@AccTricks
\def\ODw@Tricks{%
  \setcounter{ODw@PlayerNr}{0}%
  \gdef\ODw@Last{\ODw@NextLead}%
    \expandafter\GetTranslation%
    \expandafter{\ODw@NextLead-(ODw)}:\,%
}% ODw@Tricks
\newcommand\ODw@LastTrick[2]{%
  \IfEqCase{#1}{%
    {W}{\setcounter{ODw@Cnt}{0}}%
    {N}{\setcounter{ODw@Cnt}{1}}%
    {E}{\setcounter{ODw@Cnt}{2}}%
    {S}{\setcounter{ODw@Cnt}{3}}%
  }% IfEqCase
  \addtocounter{ODw@Cnt}{#2}%
  \IfEqCase{\theODw@Cnt}{%
    {1}{\gdef\ODw@NextLead{W}\stepcounter{ODw@EWCnt}}
    {2}{\gdef\ODw@NextLead{N}\stepcounter{ODw@NSCnt}}
    {3}{\gdef\ODw@NextLead{E}\stepcounter{ODw@EWCnt}}
    {4}{\gdef\ODw@NextLead{S}\stepcounter{ODw@NSCnt}}
    {5}{\gdef\ODw@NextLead{W}\stepcounter{ODw@EWCnt}}
    {6}{\gdef\ODw@NextLead{N}\stepcounter{ODw@NSCnt}}
    {7}{\gdef\ODw@NextLead{E}\stepcounter{ODw@EWCnt}}
  }% IfEqCase
}% ODw@LastTrick
\NewDocumentEnvironment{play}{s mO{N}}{%
  \def\ODw@TrumpSuit{#3}
  \gdef\ODw@NextLead{#2}%
  \setcounter{ODw@Nr}{0}%
  \setcounter{ODw@NSCnt}{0}
  \setcounter{ODw@EWCnt}{0}%
  \ODw@GameSize%
  \ODw@Scratch{}% make empty
  \let\ODw@Clubs\empty%
  \let\ODw@Diamonds\empty%
  \let\ODw@Hearts\empty%
  \let\ODw@Spades\empty%
\def\ODw@EXtra{0.9em}% white space in title
\provideenvironment{TableII}{%
    \begin{tabular}[b]{FPPP}%
      \multicolumn{1}{c}{\GetTranslation{Lead!-(ODw)}} &%
      \cci{\GetTranslation{2nd-(ODw)}}                 &%
      \cci{\GetTranslation{3rd-(ODw)}}                 &%
      \cci{\GetTranslation{4th-(ODw)}}   \\[0.3em]\hline%
      \multicolumn{4}{c}{}\\[-\ODw@EXtra]%
}{%
  \end{tabular}%
}% TableII
  \begin{lrbox}{0}% save TableII for later
    \begin{TableII}
}{%
    \end{TableII}
  \end{lrbox}%
  % Check consistency of the played cards
  \ODw@ChkSameCards{\ODw@Spades}{\Sp}%
  \ODw@ChkSameCards{\ODw@Hearts}{\He}%
  \ODw@ChkSameCards{\ODw@Diamonds}{\Di}%
  \ODw@ChkSameCards{\ODw@Clubs}{\Cl}%
  \setcounter{ODw@Cnt}{0}%
  \IfBooleanTF#1{\begin{center}}{}%
  \begin{tabular}[b]{r}% TableI
    \cci{\GetTranslation{Nr-(ODw)}}\\[0.3em]
    \hline\\[-\ODw@EXtra]%
    \setcounter{ODw@Cnt}{1}%
    \whiledo{\theODw@Cnt<\theODw@Nr}{%
      \theODw@Cnt\\
      \stepcounter{ODw@Cnt}%
    }%
    \theODw@Cnt\\% MUST be outside the loop
  %  (the extra line problem]!
  \end{tabular}%
  \usebox{0}%
  \setcounter{ODw@Nr}{0}%
  \renewcommand*{\do}[1]{%
    \ifnumequal{\value{ODw@Nr}}{2}{\\\setcounter{ODw@Nr}{0}}{}%
    \stepcounter{ODw@Nr}%
    ##1
    \ifnumequal{\value{ODw@Nr}}{2}{}{&}%
  }%
  \begin{tabular}[b]{|cc}% TableIII
    \multicolumn{1}{|c}{%
      \cci{\scriptsize\shortstack[c]{\North*!\\\South*!}}} &%
    \multicolumn{1}{c}{%
      \cci{\scriptsize\shortstack[c]{\East*!\\\West*!}}%
    }\\\hline\\[-\ODw@EXtra]%
    \expandafter\docsvlist\expandafter{\the\ODw@Scratch}%
  \end{tabular}%
  \IfBooleanTF#1{\end{center}}{}%
}% play
\NewDocumentCommand\ODw@CondNewLine{O{0em}}{%
 {\ODw@GameFont% needed to relate skips to the font-size
  \setlength{\ODw@Tmp@Len}{\ODw@Bid@Width}%
  \addtolength{\ODw@Tmp@Len}{\ODw@Diagram@Width}%
  \addtolength{\ODw@Tmp@Len}{#1}%
  \addtolength{\ODw@Tmp@Len}{\ODw@Skip@Width}%
  \ifthenelse{\lengthtest{\ODw@Tmp@Len > \textwidth}}{%
    \\[1em]}{%
      \hspace{\ODw@Skip@Width}%
    }%
 }%
}% ODw@CondNewLine
\NewDocumentCommand\expertquiz{st! O{}m}{%

  \noindent%
  \IfBooleanTF#1{\begin{center}}%      "*" detected
    {\par\vspace{0.5\baselineskip}}%
  \bgroup% keep font changes local (e.g. "\smaller").
    \ODw@LegendFont%
    \ifx#3\empty\else#3\par\fi%
  \egroup%
  \IfBooleanTF{#2}{~\hspace*{2em}}{}% "!" detected
  \usebox{\ODw@Hand@Box}%   display the saved hand
  \IfBooleanTF{#2}{}{\quad}%       no "!" detected
  \setlength\ODw@Tmp@Width{\wd\ODw@BidBox + 1em}%
  \IfBooleanTF{#2}%
    {\\}%
    {\addtolength\ODw@Tmp@Width{\wd\ODw@Hand@Box}}%
  \usebox{\ODw@BidBox}%     display the saved bidding
  \par\vspace{0.3em}%\noindent%
   {% keep legendfont and "smaller" local
    \ODw@LegendFont%
    \smaller%
    \IfBooleanTF#1{\bgroup\centering}{}%
    \parbox[t]{\ODw@Tmp@Width}{%
      \textbf{\ODw@AwardText: }%
      \raggedright#4%
    }% parbox
    \IfBooleanTF#1{\egroup}{}%
   }%
    \IfBooleanTF#1{\end{center}}{}%
}% expertquiz
\pgfkeys{%
  /ODw/.is family, /ODw,
  bidder/.store in = \ODw@BidderDefault,
  compass/.store in = \ODw@CompassDefault,
  game/.store in = \ODw@GameDefault,
  legend/.store in = \ODw@LegendDefault,
  name/.store in = \ODw@NameDefault,
  other/.store in = \ODw@OtherDefault,
  compline/.store in = \ODw@CompLine,
  compmid/.store in = \ODw@CompMid,
  compsize/.store in = \ODw@CompSize,
}
  \ODw@set{compshow/.is choice}
  \ODw@set{compshow/off/.code={\global\ODw@CompShowfalse}}
  \ODw@set{compshow/on/.code={\global\ODw@CompShowtrue}}
  \ODw@set{compturn/.is choice}
  \ODw@set{compturn/off/.code={\global\ODw@CompTurnfalse}}
  \ODw@set{compturn/on/.code={\global\ODw@CompTurntrue}}
  \ODw@set{bidders/.is choice}
  \ODw@set{bidders/off/.code={\global\ODw@Biddersfalse}}
  \ODw@set{bidders/on/.code={\global\ODw@Bidderstrue}}
  \ODw@set{bidfirst/.is choice}
  \ODw@set{bidfirst/N/.code=\ODw@FirstBidCol{N}}
  \ODw@set{bidfirst/E/.code=\ODw@FirstBidCol{E}}
  \ODw@set{bidfirst/S/.code=\ODw@FirstBidCol{S}}
  \ODw@set{bidfirst/W/.code=\ODw@FirstBidCol{W}}
  \ODw@set{bidline/.is choice}
  \ODw@set{bidline/off/.code={\global\ODw@BidLinefalse}}
  \ODw@set{bidline/on/.code={\global\ODw@BidLinetrue}}
  \ODw@set{bidlong/.is choice}
  \ODw@set{bidlong/off/.code={\global\ODw@LongCallsfalse}}
  \ODw@set{bidlong/on/.code={\global\ODw@LongCallstrue}}
  \ODw@set{compshow/1/.code={\pgfkeys{/ODw/compshow=on}}}
  \ODw@set{compshow/true/.code={\pgfkeys{/ODw/compshow=on}}}
  \ODw@set{compturn/1/.code={\pgfkeys{/ODw/compturn=on}}}
  \ODw@set{compturn/true/.code={\pgfkeys{/ODw/compturn=on}}}
  \ODw@set{bidline/1/.code={\pgfkeys{/ODw/bidline=on}}}
  \ODw@set{bidders/true/.code={\pgfkeys{/ODw/bidders=on}}}
  \ODw@set{bidders/1/.code={\pgfkeys{/ODw/bidders=on}}}
  \ODw@set{bidline/true/.code={\pgfkeys{/ODw/bidline=on}}}
  \ODw@set{bidlong/1/.code={\pgfkeys{/ODw/bidlong=on}}}
  \ODw@set{bidlong/true/.code={\pgfkeys{/ODw/bidlong=on}}}
  \ODw@set{compshow/0/.code={\pgfkeys{/ODw/compshow=off}}}
  \ODw@set{compshow/false/.code={\pgfkeys{/ODw/compshow=off}}}
  \ODw@set{compturn/0/.code={\pgfkeys{/ODw/compturn=off}}}
  \ODw@set{compturn/false/.code={\pgfkeys{/ODw/compturn=off}}}
  \ODw@set{bidders/0/.code={\pgfkeys{/ODw/bidders=off}}}
  \ODw@set{bidders/false/.code={\pgfkeys{/ODw/bidders=off}}}
  \ODw@set{bidline/0/.code={\pgfkeys{/ODw/bidline=off}}}
  \ODw@set{bidline/false/.code={\pgfkeys{/ODw/bidline=off}}}
  \ODw@set{bidlong/0/.code={\pgfkeys{/ODw/bidlong=off}}}
  \ODw@set{bidlong/false/.code={\pgfkeys{/ODw/bidlong=off}}}
\newcommand\resetfonts{%
  \bidderfont{\ODw@BidderDefault}%
  \compassfont{\ODw@CompassDefault}%
  \gamefont{\ODw@GameDefault}%
  \legendfont{\ODw@LegendDefault}%
  \namefont{\ODw@NameDefault}%
  \otherfont{\ODw@OtherDefault}%
}% resetfonts
\NewDocumentCommand\setdefaults{s m}{%
  \pgfkeys{/ODw,#2}%
  \IfBooleanTF{#1}{\resetfonts}{}%
}% setdefaults
\newcommand\newgame{%
  \boardnr{0}%
  \headlinetext{}%
  \footlinetext{}%
  \gdef\ODw@LeftUpperText{}%
  \gdef\ODw@LeftLowerText{}%
  \gdef\ODw@RightUpperText{}%
  \gdef\ODw@RightLowerText{}%
  \gdef\ODw@Nhand{\ODw@hand{t}{}{}{}{}}%
  \gdef\ODw@Ehand{\ODw@hand{c}{}{}{}{}}%
  \gdef\ODw@Shand{\ODw@hand{b}{}{}{}{}}%
  \gdef\ODw@Whand{\ODw@hand{c}{}{}{}{}}%
   \namesNS{}{}\namesEW{}{}%
  \gdef\ODw@Spades{}%
  \gdef\ODw@Hearts{}%
  \gdef\ODw@Diamonds{}%
  \gdef\ODw@Clubs{}%
  \gdef\ODw@NSpades{}\gdef\ODw@ESpades{}%
  \gdef\ODw@SSpades{}\gdef\ODw@WSpades{}%
  \gdef\ODw@NHearts{}\gdef\ODw@EHearts{}%
  \gdef\ODw@SHearts{}\gdef\ODw@WHearts{}%
  \gdef\ODw@NDiamonds{}\gdef\ODw@EDiamonds{}%
  \gdef\ODw@SDiamonds{}\gdef\ODw@WDiamonds{}%
  \gdef\ODw@NClubs{}\gdef\ODw@EClubs{}%
  \gdef\ODw@SClubs{}\gdef\ODw@WClubs{}%
}% newgame
\newcommand\ODw@ChkNrOfCards[2]{%
  \StrDel{#1}{-}[\ODw@CardStr]%     remove voids
  \StrLen{\ODw@CardStr}[\ODw@CardLen]%
  \ifthenelse{\ODw@CardLen > 13}{%
    \ODw@Error{#2 has \ODw@CardLen{} cards}%
  }{%
    \ifthenelse{\ODw@CardLen < 13}{%
      \ODw@Warning{#2 has \ODw@CardLen{} cards}%
    }{}%
  }%
}% ODw@ChkNrOfCards
\newcommand\ODw@PrErr[3]{%
  \bgroup%
    \if#1T\def\ODw@T{10}\else\def\ODw@T{#1}\fi%
    \ifthenelse{#2 > 1}{%
      \ODw@Error{Card #3\,\ODw@T{} occurs #2 times}%
    }{%
      \ifthenelse{#2 = 0}{%
        \ODw@Warning{Card #3\,\ODw@T{} fails}}{}%
    }%
  \egroup%
}% ODw@PrErr
\newcommand\ODw@ChkSameCards[2]{%
  \StrDel{#1}{-}[\ODw@CardStr]%
  \StrCount{\ODw@CardStr}{2}[\ODw@CCnt]\ODw@PrErr{2}{\ODw@CCnt}{#2}%
  \StrCount{\ODw@CardStr}{3}[\ODw@CCnt]\ODw@PrErr{3}{\ODw@CCnt}{#2}%
  \StrCount{\ODw@CardStr}{4}[\ODw@CCnt]\ODw@PrErr{4}{\ODw@CCnt}{#2}%
  \StrCount{\ODw@CardStr}{5}[\ODw@CCnt]\ODw@PrErr{5}{\ODw@CCnt}{#2}%
  \StrCount{\ODw@CardStr}{6}[\ODw@CCnt]\ODw@PrErr{6}{\ODw@CCnt}{#2}%
  \StrCount{\ODw@CardStr}{7}[\ODw@CCnt]\ODw@PrErr{7}{\ODw@CCnt}{#2}%
  \StrCount{\ODw@CardStr}{8}[\ODw@CCnt]\ODw@PrErr{8}{\ODw@CCnt}{#2}%
  \StrCount{\ODw@CardStr}{9}[\ODw@CCnt]\ODw@PrErr{9}{\ODw@CCnt}{#2}%
  \StrCount{\ODw@CardStr}{T}[\ODw@CCnt]\ODw@PrErr{T}{\ODw@CCnt}{#2}%
  \StrCount{\ODw@CardStr}{J}[\ODw@CCnt]\ODw@PrErr{J}{\ODw@CCnt}{#2}%
  \StrCount{\ODw@CardStr}{Q}[\ODw@CCnt]\ODw@PrErr{Q}{\ODw@CCnt}{#2}%
  \StrCount{\ODw@CardStr}{K}[\ODw@CCnt]\ODw@PrErr{K}{\ODw@CCnt}{#2}%
  \StrCount{\ODw@CardStr}{A}[\ODw@CCnt]\ODw@PrErr{A}{\ODw@CCnt}{#2}%
}% ODw@ChkSameCards
\newbool{ODw@Warnings}
\newbool{ODw@Errors}
\ODw@set{warn/off/.code={%
  \global\setbool{ODw@Warnings}{false}}}
\ODw@set{warn/on/.code={%
  \global\setbool{ODw@Warnings}{true}}}
\ODw@set{err/off/.code={%
  \global\setbool{ODw@Errors}{false}}}
\ODw@set{err/on/.code={%
  \global\setbool{ODw@Errors}{true}}}
\ODw@set{warn=off}
\ODw@set{err=on}

\ProcessPgfOptions{/ODw}

\newcommand\ODw@Error[1]{%
  \ifbool{ODw@Errors}{%
    \par\textcolor{red}{Error: #1}\par}{}%
}% ODw@Error
\newcommand\ODw@Warning[1]{%
  \ifbool{ODw@Warnings}{%
    \par\textcolor{blue}{Warning: #1}\par}{}%
}% ODw@Warning
\NewDocumentCommand{\Ace}{s t!}{%
  \bgroup%
    \IfBooleanTF{#1}{%
      \IfBooleanTF{#2}%
        {\GetTranslation{A-(ODw)}}%
        {\GetTranslation{Ace-(ODw)}}%
   }{%
      \IfBooleanTF{#2}%
        {\GetTranslation{a-(ODw)}}%
        {\GetTranslation{ace-(ODw)}}%
  }%
  \egroup%
  \xspace%
}% Ace
\def\ace{\Ace*!}
\NewDocumentCommand{\King}{s t!}{%
  \bgroup%
    \IfBooleanTF{#1}{%
      \IfBooleanTF{#2}%
        {\GetTranslation{K-(ODw)}}%
        {\GetTranslation{King-(ODw)}}%
   }{%
      \IfBooleanTF{#2}%
        {\GetTranslation{k-(ODw)}}%
        {\GetTranslation{king-(ODw)}}%
    }%
  \egroup%
  \xspace%
}% King
\def\king{\King*!}
\NewDocumentCommand{\Queen}{s t!}{%
  \bgroup%
    \IfBooleanTF{#1}{%
      \IfBooleanTF{#2}%
        {\GetTranslation{Q-(ODw)}}%
        {\GetTranslation{Queen-(ODw)}}%
   }{%
      \IfBooleanTF{#2}%
        {\GetTranslation{q-(ODw)}}%
        {\GetTranslation{queen-(ODw)}}%
    }%
  \egroup%
  \xspace%
}% Queen
\def\queen{\Queen*!}
\NewDocumentCommand{\Jack}{s t!}{%
  \bgroup%
    \IfBooleanTF{#1}{%
      \IfBooleanTF{#2}%
        {\GetTranslation{J-(ODw)}}%
        {\GetTranslation{Jack-(ODw)}}%
   }{%
      \IfBooleanTF{#2}%
        {\GetTranslation{j-(ODw)}}%
        {\GetTranslation{jack-(ODw)}}%
    }%
  \egroup%
  \xspace%
}% Jack
\def\jack{\Jack*!}

\NewDocumentCommand{\All}{s t!}{%
  \bgroup%
    \ODw@OtherFont%
    \IfBooleanTF{#1}{%
      \IfBooleanTF{#2}%
        {\GetTranslation{All!-(ODw)}}%
        {\GetTranslation{All-(ODw)}}%
   }{%
      \IfBooleanTF{#2}%
        {\GetTranslation{all!-(ODw)}}%
        {\GetTranslation{all-(ODw)}}%
    }%
  \egroup%
  \xspace%
}% All
\def\all{\All*}

\NewDocumentCommand{\None}{s t!}{%
  \bgroup%
    \ODw@OtherFont%
    \IfBooleanTF{#1}{%
      \IfBooleanTF{#2}%
        {\GetTranslation{None!-(ODw)}}%
        {\GetTranslation{None-(ODw)}}%
   }{%
      \IfBooleanTF{#2}%
        {\GetTranslation{none!-(ODw)}}%
        {\GetTranslation{none-(ODw)}}%
    }%
  \egroup%
  \xspace%
}% None
\def\none{\None*}
%%    \end{macrocode}
\NewDocumentCommand{\Contract}{s t!}{%
  \bgroup%
    \ODw@OtherFont%
    \IfBooleanTF{#1}{%
      \IfBooleanTF{#2}%
        {\GetTranslation{Contr-(ODw)}}%
        {\GetTranslation{Contract-(ODw)}}%
   }{%
      \IfBooleanTF{#2}%
        {\GetTranslation{contr-(ODw)}}%
        {\GetTranslation{contract-(ODw)}}%
    }%
  \egroup%
  \xspace%
}% Contract
\def\contract{\Contract*}
%%    \end{macrocode}
\NewDocumentCommand{\Lead}{s t!}{%
  \bgroup%
    \ODw@OtherFont%
    \IfBooleanTF{#1}{%
      \IfBooleanTF{#2}%
        {\GetTranslation{Lead!-(ODw)}}%
        {\GetTranslation{Lead-(ODw)}}%
    }{% else #1
      \IfBooleanTF{#2}%
        {\GetTranslation{lead!-(ODw)}}%
        {\GetTranslation{lead-(ODw)}}%
    }% #1
  \egroup%
  \xspace%
}% Lead
\def\lead{\Lead*}
%%    \end{macrocode}
\NewDocumentCommand{\Declarer}{s t!}{%
  \bgroup%
    \ODw@OtherFont%
    \IfBooleanTF{#1}{%
      \IfBooleanTF{#2}%
        {\GetTranslation{Decl-(ODw)}}%
        {\GetTranslation{Declarer-(ODw)}}%
   }{%
      \IfBooleanTF{#2}%
        {\GetTranslation{decl-(ODw)}}%
        {\GetTranslation{declarer-(ODw)}}%
    }%
  \egroup%
  \xspace%
}% Declarer
\def\declarer{\Declarer*}
%%    \end{macrocode}
\newcommand\by{%
  \bgroup%
    \ODw@OtherFont%
    \GetTranslation{by-(ODw)}%
  \egroup%
  \xspace%
}% by
\NewDocumentCommand{\Board}{s t!}{%
  \bgroup%
    \ODw@OtherFont%
    \IfBooleanTF{#1}{%
      \IfBooleanTF{#2}%
        {\GetTranslation{Brd-(ODw)}}%
        {\GetTranslation{Board-(ODw)}}%
   }{%
      \IfBooleanTF{#2}%
        {\GetTranslation{brd-(ODw)}}%
        {\GetTranslation{board-(ODw)}}%
    }%
  \egroup%
  \xspace%
}% Board
\def\board{\Board*}
%%    \end{macrocode}
\NewDocumentCommand{\Deal}{s t!}{%
  \bgroup%
    \ODw@OtherFont%
    \IfBooleanTF{#1}{%
      \IfBooleanTF{#2}%
        {\GetTranslation{Deal!-(ODw)}}%
        {\GetTranslation{Deal-(ODw)}}%
   }{%
      \IfBooleanTF{#2}%
        {\GetTranslation{deal!-(ODw)}}%
        {\GetTranslation{deal-(ODw)}}%
    }%
  \egroup%
  \xspace%
}% Deal
\def\deal{\Deal*}
%%    \end{macrocode}
\NewDocumentCommand{\doubled}{s}{%
  \bgroup%
    \ODw@OtherFont%
    \IfBooleanTF{#1}{%
      \GetTranslation{Doubled-(ODw)}}{%
      \GetTranslation{doubled-(ODw)}%
    }%
  \egroup%
  \xspace%
}% doubled
\NewDocumentCommand{\redoubled}{s}{%
  \bgroup%
    \ODw@OtherFont%
    \IfBooleanTF{#1}{%
      \GetTranslation{Redoubled-(ODw)}}{%
      \GetTranslation{redoubled-(ODw)}%
    }%
  \egroup%
  \xspace%
}% redoubled
\NewDocumentCommand{\hpts}{s t!}{%
  \bgroup%
    \ODw@OtherFont%
    \IfBooleanTF{#1}{%
      \IfBooleanTF{#2}%
        {\GetTranslation{HCP-(ODw)}}%
        {\GetTranslation{High Card Points-(ODw)}}%
    }{%
      \IfBooleanTF{#2}%
        {\GetTranslation{hcp-(ODw)}}%
        {\GetTranslation{high card points-(ODw)}}%
    }%
  \egroup%
  \xspace%
}% High Card Points
\def\HCP{\hpts*!}
\NewDocumentCommand{\lpts}{s t!}{%
  \bgroup%
    \ODw@OtherFont%
    \IfBooleanTF{#1}{%
      \IfBooleanTF{#2}%
        {\GetTranslation{LP-(ODw)}}%
        {\GetTranslation{Length Points-(ODw)}}%
    }{%
      \IfBooleanTF{#2}%
        {\GetTranslation{lp-(ODw)}}%
        {\GetTranslation{length points-(ODw)}}%
    }%
  \egroup%
  \xspace%
}% Length Points
\def\LP{\lpts*!}
\NewDocumentCommand{\dpts}{s t!}{%
  \bgroup%
    \ODw@OtherFont%
    \IfBooleanTF{#1}{%
      \IfBooleanTF{#2}%
        {\GetTranslation{DP-(ODw)}}%
        {\GetTranslation{Distribution Points-(ODw)}}%
    }{%
      \IfBooleanTF{#2}%
        {\GetTranslation{dp-(ODw)}}%
        {\GetTranslation{distribution points-(ODw)}}%
    }%
  \egroup%
  \xspace%
}% Distribution Points
\def\DP{\dpts*!}
\NewDocumentCommand{\tpts}{s t!}{%
  \bgroup%
    \ODw@OtherFont%
    \IfBooleanTF{#1}{%
      \IfBooleanTF{#2}%
        {\GetTranslation{TP-(ODw)}}%
        {\GetTranslation{Total Points-(ODw)}}%
    }{%
      \IfBooleanTF{#2}%
        {\GetTranslation{tp-(ODw)}}%
        {\GetTranslation{total points-(ODw)}}%
    }%
  \egroup%
  \xspace%
}% Total Points
\def\TP{\tpts*!}
\NewDocumentCommand{\gforce}{s t!}{%
  \bgroup%
    \ODw@OtherFont%
    \IfBooleanTF{#1}{%
      \IfBooleanTF{#2}%
        {\GetTranslation{GF-(ODw)}}%
        {\GetTranslation{Game Forcing-(ODw)}}%
    }{%
      \IfBooleanTF{#2}%
        {\GetTranslation{gf-(ODw)}}%
        {\GetTranslation{game forcing-(ODw)}}%
    }%
  \egroup%
  \xspace%
}% Game Forcing
\def\GF{\gforce*!}
\NewDocumentCommand{\sforce}{s t!}{%
  \bgroup%
    \ODw@OtherFont%
    \IfBooleanTF{#1}{%
      \IfBooleanTF{#2}%
        {\GetTranslation{SF-(ODw)}}%
        {\GetTranslation{Semi Forcing-(ODw)}}%
    }{%
      \IfBooleanTF{#2}%
        {\GetTranslation{sf-(ODw)}}%
        {\GetTranslation{semi forcing-(ODw)}}%
    }%
  \egroup%
  \xspace%
}% Semi Forcing
\def\SF{\sforce*!}
\NewDocumentCommand{\nmforce}{s t!}{%
  \bgroup%
    \ODw@OtherFont%
    \IfBooleanTF{#1}{%
      \IfBooleanTF{#2}%
        {\GetTranslation{NMF-(ODw)}}%
        {\GetTranslation{New Minor Forcing-(ODw)}}%
    }{%
      \IfBooleanTF{#2}%
        {\GetTranslation{nmf-(ODw)}}%
        {\GetTranslation{new minor forcing-(ODw)}}%
    }%
  \egroup%
  \xspace%
}% New Minor Forcing
\def\NMF{\nmforce*!}
\NewDocumentCommand{\tsforce}{s t!}{%
  \bgroup%
    \ODw@OtherFont%
    \IfBooleanTF{#1}{%
      \IfBooleanTF{#2}%
        {\GetTranslation{TSF-(ODw)}}%
        {\GetTranslation{Third Suit Forcing-(ODw)}}%
    }{%
      \IfBooleanTF{#2}%
        {\GetTranslation{tsf-(ODw)}}%
        {\GetTranslation{third suit forcing-(ODw)}}%
    }%
  \egroup%
  \xspace%
}% Third Suit Forcing
\def\TSF{\tsforce*!}
\NewDocumentCommand{\fsforce}{s t!}{%
  \bgroup%
    \ODw@OtherFont%
    \IfBooleanTF{#1}{%
      \IfBooleanTF{#2}%
        {\GetTranslation{FSF-(ODw)}}%
        {\GetTranslation{Fourth Suit Forcing-(ODw)}}%
    }{%
      \IfBooleanTF{#2}%
        {\GetTranslation{fsf-(ODw)}}%
        {\GetTranslation{fourth suit forcing-(ODw)}}%
    }%
  \egroup%
  \xspace%
}% Fourth Suit Forcing
\def\FSF{\fsforce*!}
\newgame
\setdefaults{bidder=\mdseries\sffamily}
\setdefaults{compass=\mdseries\sffamily}
\setdefaults{game=\bfseries\sffamily}
\setdefaults{legend=\mdseries\rmfamily}
\setdefaults{name=\mdseries\slshape}
\setdefaults*{other=\bfseries\sffamily}
\setdefaults{compshow=on,compturn=off}
\setdefaults{bidfirst=W,bidders=on,bidlong=on}
\AtBeginDocument{%
\ForEachTrackedLanguage{\thislang}{%
  \ifthenelse{\equal{\thislang}{norsk}}%
    {\def\thislang{norwegian}}{}%
  \IfFileExists{ODw-\thislang.trsl}%
  {%
    \LoadDictionaryFor{\thislang}{ODw}%
    \PackageInfo{ODw}{%
      Translation dictionary ODw-\thislang.trsl loaded%
    }%
  }{%
    \PackageWarning{ODw}{%
      Translation dictionary ODw-\thislang.trsl not found%
    }%
  }%
}% ForEach
}% AtBeginDocument
\endinput% onedown.sty

\endinput
%%
%% End of file `onedown.sty'.
