diff options
author | Karl Berry <karl@freefriends.org> | 2018-05-24 21:36:36 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2018-05-24 21:36:36 +0000 |
commit | b3dc1b6fdac11d737f34e433fe1e61590466b6a8 (patch) | |
tree | 6b6581617b94dbc42f3119589a38b3a2721ae0e8 /Master/texmf-dist/tex/latex/onedown/onedown.sty | |
parent | 7f3c84d5d08d7a3c4047e31edfb3164ef787de97 (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.sty | 2177 |
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'. |