summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/onedown/onedown.sty
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2018-05-24 21:36:36 +0000
committerKarl Berry <karl@freefriends.org>2018-05-24 21:36:36 +0000
commitb3dc1b6fdac11d737f34e433fe1e61590466b6a8 (patch)
tree6b6581617b94dbc42f3119589a38b3a2721ae0e8 /Master/texmf-dist/tex/latex/onedown/onedown.sty
parent7f3c84d5d08d7a3c4047e31edfb3164ef787de97 (diff)
onedown (24may18)
git-svn-id: svn://tug.org/texlive/trunk@47828 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/onedown/onedown.sty')
-rw-r--r--Master/texmf-dist/tex/latex/onedown/onedown.sty2177
1 files changed, 2177 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/onedown/onedown.sty b/Master/texmf-dist/tex/latex/onedown/onedown.sty
new file mode 100644
index 00000000000..0134ff66660
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/onedown/onedown.sty
@@ -0,0 +1,2177 @@
+%%
+%% 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'.