Formatted with contract bridge XML.

While reading these articles, you can swipe right or left to get to the next or previous article in this set.

More...

Contents

XML Bridge Tests

Thomas Andrews; © 2002-2009.

Introduction

This set of documents shows what the inputs and outputs look like in my XML/XSL/CSS documents.
The XSL processing converts the documents to HTML - this amounts to creating tables for hand diagrams and auctions, converting codes like "2H" to 2 , deciding whether to put white-spaces in holdings, etc. The resulting HTML generated has plenty of class attributes added to the <div>, <p>, and <span> tags which makes additional formatting customization via Cascading Style Sheets (CSS) possible. These documents are using my article.css. Most issues like font sizes, colors and backgrounds are left to the CSS. I could, for example, make the diamond and heart symbols black with a simple change to the CSS.
Many of the formatting decisions I've made are based on the recommendations in Richard Pavlicek's Bridge Writing Style Guide. The goal is to make the input XML document simple, human-writable and readable, and use the XSL to enforce the output standard where possible. So, while the input documents use T for the 10-spot, the XSL writes out "10." And while the input has no spaces between cards in holdings, as in QT654, the XSL prints Q-10-6-5-4 in paragraph contexts - seperating cards with spaces in diagrams ala:
A K Q
J 10 9 8 7
6 5 4 3 2
10 9 8
A K Q
J 7
6 5 4 3 2
Other style decisions I made on my own. For example, when red suit symbols occur in paragraphs, I've chosen to make them slightly darker than the red that occurs in diagrams because I find that the bright red in the middle of paragraphs interrupts the "flow" to the eye. This can be adjusted in the Cascading Style Sheet easily. The color I've settled on is 20% darker than pure red.
Style sheets for auction tables still do not handle one-sided auctions - I'd like the <auction> tag to take an attribute which flags the auction as one-sided (not necessarily uncontested, but perhaps with only a few bids.)
The goal is for the XML to represent possible bridge events, and have the XSL do transformations for presentation purposes. So the writer would write three passes rather than "All Pass." If the XSL formatter finds a situation where "All Pass" is an appropriate substitution, it can make the substitution. Note, not all instances if three passes, or even four passes, represent the end of an auction, if there has been a pass out of turn. This makes the XSL somewhat complicated.

Terms

These definitions may seem pedantic, but sometimes the words are used less precisely.
Seat
One of the seats in an auction or card diagram. When in an XML 'seat' attribute, it can be one of 'E', 'W', 'N', or 'S'. For example, <call seat='W' code='2S'/>. In the middle of an auction with no dealer seat specified, the seat can be one of 'dealer', 'LHO', 'partner', or 'RHO.'
Hand
References the cards being held by a particular player. This can be either 13 cards at the start of a deal, or some lesser number, representing a later state in the play.
Deal
A deal is distribution of 52 cards to four hands in each seat.
Board
A board is a deal in the context of a competition - information like the dealer, vulnerability, partscore (in rubber bridge), etc.
Play Record
The details of a played board - might include players, auction, contract, cards played.

Source Code

This is an open source project, hosted on GitHub. which is used to generate my bridge articles, including these test documents. There is a separate branch for the XSL that generates the mobile version of the HTML.

Thomas Andrews; © 2002-2009.

Calls and Contracts

All Calls

Input:
<p>Calls: 
<call code="P"/>, <call code="X"/>, <call code="XX"/>,
<call code="1C"/>, <call code="1D"/>, <call code="1H"/>, 
<call code="1S"/>, <call code="1N"/>,
<call code="2C"/>, <call code="2D"/>, <call code="2H"/>, 
<call code="2S"/>, <call code="2N"/>,
<call code="3C"/>, <call code="3D"/>, <call code="3H"/>, 
<call code="3S"/>, <call code="3N"/>,
<call code="4C"/>, <call code="4D"/>, <call code="4H"/>, 
<call code="4S"/>, <call code="4N"/>,
<call code="5C"/>, <call code="5D"/>, <call code="5H"/>, 
<call code="5S"/>, <call code="5N"/>,
<call code="6C"/>, <call code="6D"/>, <call code="6H"/>, 
<call code="6S"/>, <call code="6N"/>,
<call code="7C"/>, <call code="7D"/>, <call code="7H"/>, 
<call code="7S"/>, <call code="7N"/>.
</p> 
XSL Output:
Calls: Pass, Dbl, Rdbl, 1 , 1 , 1 , 1 , 1 NT, 2 , 2 , 2 , 2 , 2 NT, 3 , 3 , 3 , 3 , 3 NT, 4 , 4 , 4 , 4 , 4 NT, 5 , 5 , 5 , 5 , 5 NT, 6 , 6 , 6 , 6 , 6 NT, 7 , 7 , 7 , 7 , 7 NT.
All possible calls. Calls are formatted with spaces between the suit and the symbol, as per Pavlicek. Line breaks should not occur mid-call - this is controlled by the CSS file. There should be no spaces after the suit symbols and before the next character (commas and periods above.)

Contracts

Input:
<p>Contract: <contract code="4C" declarer="S"/></p>

<p>Contract: <contract code="5S"/></p>

<p> When you have a choice of
    <contract code="4SXX" declarer="S"/> 
    or <contract code="5DX" declarer="N"/>,
    you'll probably prefer the diamond contract,
    unless you are a risk-taker.
</p>
XSL Output:
Contract: 4 by South
Contract: 5
When you have a choice of 4 xx by South or 5 x by North, you'll probably prefer the diamond contract, unless you are a risk-taker.
Some example contracts.

Thomas Andrews; © 2002-2009.

Cards and Holdings

Cards - 1

Input:
<p>All cards:
    <spade card="A"/>, <spade card="K"/>, <spade card="Q"/>,
    <spade card="J"/>, <spade card="T"/>, <spade card="9"/>,
    <spade card="8"/>, <spade card="7"/>, <spade card="6"/>,
    <spade card="5"/>, <spade card="4"/>, <spade card="3"/>,
    <spade card="2"/>,
    <heart card="A"/>, <heart card="K"/>, <heart card="Q"/>,
    <heart card="J"/>, <heart card="T"/>, <heart card="9"/>,
    <heart card="8"/>, <heart card="7"/>, <heart card="6"/>,
    <heart card="5"/>, <heart card="4"/>, <heart card="3"/>,
    <heart card="2"/>,
    <diamond card="A"/>, <diamond card="K"/>, <diamond card="Q"/>,
    <diamond card="J"/>, <diamond card="T"/>, <diamond card="9"/>,
    <diamond card="8"/>, <diamond card="7"/>, <diamond card="6"/>,
    <diamond card="5"/>, <diamond card="4"/>, <diamond card="3"/>,
    <diamond card="2"/>,
    <club card="A"/>, <club card="K"/>, <club card="Q"/>,
    <club card="J"/>, <club card="T"/>, <club card="9"/>,
    <club card="8"/>, <club card="7"/>, <club card="6"/>,
    <club card="5"/>, <club card="4"/>, <club card="3"/>,
    <club card="2"/>.
</p>
XSL Output:
All cards: A, K, Q, J, 10, 9, 8, 7, 6, 5, 4, 3, 2, A, K, Q, J, 10, 9, 8, 7, 6, 5, 4, 3, 2, A, K, Q, J, 10, 9, 8, 7, 6, 5, 4, 3, 2, A, K, Q, J, 10, 9, 8, 7, 6, 5, 4, 3, 2.
Note, a card is represented by a suit name followed by a space and the denomination. Line breaks should not occur in the middle of a card. Tens are represented as '10' in the output. There should be no space after the card. Also, when your mouse hovers over a card, (most?) browsers will put up a tool tip with the long name of the card (e.g., "spade jack.")

Cards - 2

Input:
Alternatively, you can use the <em>card</em> tag - for
example
     <card code="SA"/> or <card code="HT"/>
- to represent a card.
XSL Output:
Alternatively, you can use the card tag - for example A or 10 - to represent a card.
I'm not sure which is better, but I thought I'd give some flexibility.

Cards - 3

Input:
Alternatively, you can use the <em>card</em> namespace, 
for example
     <card:SA/> or <card:HT/>
- to represent a card.
XSL Output:
Alternatively, you can use the card namespace, for example A or 10 - to represent a card.
This is by far the most economical in the code, but it requires you to declare the card: namespace.

Suit Holdings

Input:
<p>I held <spade cards="AJT43"/>, which
is the same as <holding cards="S:AJT43"/>.</p>
<p>I can also write a holding without a suit,
such as <holding cards="KJT9642"/>.</p>
<p>A void is represented as <holding cards=""/>, or,
when with a suit, <holding cards="S:"/>.  Suit tags
can be used similarly: <diamond cards=""/>.</p>
XSL Output:
I held A-J-10-4-3, which is the same as A-J-10-4-3.
I can also write a holding without a suit, such as K-J-10-9-6-4-2.
A void is represented as , or, when with a suit, . Suit tags can be used similarly: .
There are two seperate ways of writing a holding, with the <holding> tag or with one of the suit tags. Formatted with hyphens between cards, per Pavlicek. With the suit tags, note that the attribute cards is plural when representing holdings, even when representing a holding of one card or a void.

Thomas Andrews; © 2002-2009.

Inline Hands

Example

Input:
<p> If I put a hand in a paragraph like this,
<hand sp="A8765432" he="QT9" di="" cl="KJ"/>,
it takes an inline format.
</p>
XSL Output:
If I put a hand in a paragraph like this, A-8-7-6-5-4-3-2 Q-10-9 K-J, it takes an inline format.
Notice that the hand is formatted with hyphens between the cards - this is Richard Pavlicek's recommendation. I've allowed line breaks in the middle of the hand, since hands tend to be long, but the line breaks must be between suits.

Thomas Andrews; © 2002-2009.

Inline Auctions

Simple Auction

Input:
<auction type="inline">
    <call code="P"/> 
       <call code="1S"/> 
       <call code="2H"/>  
       <call code="3C"/>

    <call code="4D"/> 
       <call code="X"/> 
       <call code="XX"/> 
       <call code="4N"/>

    <call code="P"/> 
       <call code="P"/> 
       <call code="P"/>
</auction>
XSL Output:
P - 1 - 2 - 3 ; 4 - X - XX - 4 NT
Notice that the XSL has dropped the last three passes from the auction, but included the pass at the start of the auction. Dropping the last three passes matches Pavlicek's recommendations for inline auctions.

Inline with a comment

Input:
<p>At the other table, the auction was:
<auction type="inline">
<call code="P"/>
<call code="1N" comment="?"/>
<call code="P"/>
<call code="P"/>
<call code="P"/>
</auction>.
West's <call code="1N"/> was a bit off-shape.
</p>
XSL Output:
At the other table, the auction was: P - 1 NT?. West's 1 NT was a bit off-shape.
A comment can be added to a call. Comments should be restricted to "!" or "?".

Inline comment in last three passes

Input:
<p>At the other table, the auction was
<auction type="inline">
<call code="P"/>
<call code="1N"/>
<call code="P"/>
<call code="P" comment="?"/>
<call code="P"/>
</auction>.  East was not able to explain
his pass.
</p>
XSL Output:
At the other table, the auction was P - 1 NT - P - P?; P. East was not able to explain his pass.
A comment on one of the last three passes should cause the last three calls to be show.

Simple Auction Hiding A Pass

Input:
<auction type="inline" hands="EW" dealer="E">
    <call code="1H"/>
    <call code="2C"/>
    <call code="2H"/>
    <call code="P"/> 

    <call code="4H"/>
    <call code="P"/>
    <call code="P"/>
    <call code="P"/> 
</auction>
XSL Output:
1 (2 ) 2 ; 4
The optional hands attribute can be either "EW" or "NS", which indicates that we want an abbreviated auction concentrating on the named pair. Non-passes by the other side are included inside parenthesis, but passes by the other side are ignored (except when the first call in the auction to remind the reader of which side dealt.) If you use the hands attribute, you need to include the dealer, as well.

Uncontested auction

Input:
<auction type="inline" hands="EW" dealer="E">
    <call code="1H"/> <call code="P"/> <call code="2H"/> <call code="P"/>
    <call code="4H"/><call code="P"/> <call code="P"/> <call code="P"/> 
</auction>
XSL Output:
1 2 ; 4
A simple inline uncontested auction.

Uncontested auction - one pass start

Input:
<auction type="inline" hands="EW" dealer="N">
    <call code="P"/> <call code="1H"/> <call code="P"/> <call code="2H"/>
    <call code="P"/> <call code="4H"/><call code="P"/> <call code="P"/>
    <call code="P"/> 
</auction>
XSL Output:
(P) 1 2 ; 4
This was an aesthetic decision - to show the initial pass by the opponent or not? I chose to show it, because it reminds the reader who the dealer is.

Uncontested auction - starting with two passes

Input:
<auction type="inline" hands="EW" dealer="W">
    <call code="P"/>
    <call code="P"/> <call code="1H"/> <call code="P"/> <call code="2H"/>
    <call code="P"/> <call code="4H"/><call code="P"/> <call code="P"/>
    <call code="P"/> 
</auction>
XSL Output:
P 1 ; 2 4

Uncontested auction - starting with three passes

Input:
<auction type="inline" hands="EW" dealer="S">
    <call code="P"/>
    <call code="P"/>
    <call code="P"/>
    <call code="1H"/> <call code="P"/> <call code="2H"/> <call code="P"/> 
    <call code="4H"/> <call code="P"/> <call code="P"/> <call code="P"/> 
</auction>
XSL Output:
(P) P 1 ; 2 4

Contested Auction - starting with one pass

Input:
<auction type="inline" hands="EW" dealer="N">
    <call code="P"/> <call code="1H"/> <call code="2C"/> <call code="2H"/>
    <call code="P"/> <call code="4H"/><call code="P"/> <call code="P"/> 
    <call code="P"/> 
</auction>
XSL Output:
(P) 1 (2 ) 2 ; 4

Contested auction - starting with two passes

Input:
<auction type="inline" hands="EW" dealer="W">
    <call code="P"/> <call code="P"/> <call code="1H"/> <call code="2C"/>
    <call code="2H"/> <call code="P"/> <call code="4H"/> <call code="P"/> 
    <call code="P"/> <call code="P"/> 
</auction>
XSL Output:
P 1 (2 ); 2 4

Contested auction - starting with three passes

Input:
<auction type="inline" hands="EW" dealer="S">
    <call code="P"/> <call code="P"/> <call code="P"/> <call code="1H"/> 
    <call code="2C"/> <call code="2H"/> <call code="P"/> <call code="4H"/>
    <call code="P"/> <call code="P"/> <call code="P"/> 
</auction>
XSL Output:
(P) P 1 ; (2 ) 2 4

Thomas Andrews; © 2002-2009.

Suit Symbols

All of them

Input:
<p>Spade symbol: <spade/>, heart symbol: <heart/>,
diamond symbol: <diamond/>, and club symbol: <club/>.</p>
XSL Output:
Spade symbol: , heart symbol: , diamond symbol: , and club symbol: .
Suit symbols can be included in any text. These forms are rarely used, but can be used in some instances, for example, when you need a really brief description of a bid. When writing out a bid, see Calls. When writing out a card or holding, use Cards and Holdings.

Don't do this

Input:
<p>
You could use suit symbols rather than <call>,
<holding>, etc., but then the formatter will not
know to do smart formatting things.  For example, 
you could write out cards as: <spade/> A, <spade/> K, 
<spade/> Q, <spade/> J, <spade/> 10, <spade/> 9,
<spade/> 8, <spade/> 7, <spade/> 6, <spade/> 5, 
<spade/> 4, <spade/> 3, <spade/> 2, <heart/> A, <heart/> K, 
<heart/> Q, <heart/> J, <heart/> 10, <heart/> 9,
<heart/> 8, <heart/> 7, <heart/> 6, <heart/> 5, 
<heart/> 4, <heart/> 3, <heart/> 2.  But then you might
see breaks in the middle of cards, obscuring your document.
</p>
XSL Output:
You could use suit symbols rather than <call>, <holding>, etc., but then the formatter will not know to do smart formatting things. For example, you could write out cards as: A, K, Q, J, 10, 9, 8, 7, 6, 5, 4, 3, 2, A, K, Q, J, 10, 9, 8, 7, 6, 5, 4, 3, 2. But then you might see breaks in the middle of cards, obscuring your document.
Other reasons to avoid this might be issues of "accessability" - you might want to generate a version of your document for the blind, in which case, you'd want to change <spade card="Q"/> to the words "spade queen," so that the user's client could read the words out loud. In XML, as a rule, you do not want to make formatting decisions too early, so that if you want to alter some of the overall look of your documents, you'd have to change every individual document.
In other words, don't do this.

Thomas Andrews; © 2002-2009.

Hands

Simple Diagram

Input:
<diagram id="first">
<hand seat="N" sp="AK" he="KQT9" di="AKT98" cl="98"/>
<hand seat="W" sp="JT98" he="876" di="765" cl="AQ7"/>
<hand seat="E" sp="7654" he="J5" di="43" cl="JT654"/>
<hand seat="S" sp="Q32" he="A432" di="QJ2" cl="K32"/>
</diagram>
XSL Output:
A K
K Q 10 9
A K 10 9 8
9 8
J 10 9 8
8 7 6
7 6 5
A Q 7
7 6 5 4
J 5
4 3
J 10 6 5 4
Q 3 2
A 4 3 2
Q J 2
K 3 2
A simple deal diagram - the id attribute is used for references later. It is not required unless you plan to do linking.
Note that the XSL handles the various decisions like spacing, whether to use "10" or "T" for tens, and how to represent the suit symbols.

Copy diagram

Input:
<diagram src="#first"/>
XSL Output:
A K
K Q 10 9
A K 10 9 8
9 8
J 10 9 8
8 7 6
7 6 5
A Q 7
7 6 5 4
J 5
4 3
J 10 6 5 4
Q 3 2
A 4 3 2
Q J 2
K 3 2
I load a diagram from inside the current document.

Copy diagram, external

Input:
<diagram src="xml/test/deal.xml"/>
XSL Output:
Q 10 9
A 8 7 6 5 4 3 2
K J
K J
Q 10 9
A 8 7 6 5 4 3 2
K J
A 8 7 6 5 4 3 2
Q 10 9
A 8 7 6 5 4 3 2
Q 10 9
K J
Load the first diagram with from test/deal.xml.

Copy diagram, external http

Input:
<diagram src="http://bridge.thomasoandrews.com/impossible/bin/impossible.cgi?pageNumbers=10000000000000000000000000000&amp;format=XML"/>
XSL Output:
10 7 3
J 10 8 7 6 4
8 2
10 7
J 9 6 5
A Q
A
A K Q J 9 3
K Q 2
5 3 2
K Q 9 7
8 5 2
A 8 4
K 9
J 10 6 5 4 3
6 4
Load a diagram by a URL, here finding the 10,000,000,000,000,000,000,000,000,000th page of the Impossible Bridge Book. This won't work if you are not connected to the internet.

Copy diagram, external with ID

Input:
<diagram src="xml/test/deal.xml#2"/>
XSL Output:
Q
A 8 7 6 5 4 3 2
K J
K J
Q 10
A 8 7 6 5 4 3
K
A 8 7 6 5 4 3 2
10 9
A 8 7 6 5 4 3
Q 10 9
J
Load the diagram with id='2' from test/deal.xml.
This ability to link across documents is one of the beauties of XML, and one of the reasons that some XML schema is probably better than PBN in the long run. For example, you could have a single document which consisted of the deals from a tournament, with ids set as board numbers, and then have the "results" tables reference the deals. This eliminates the redundancies built into PBN and sequesters the data.

One-suited diagram

Input:
<diagram>
<hand seat="N" sp="QT9"/>
<hand seat="W" sp=""/>
<hand seat="E" sp="KJ"/>
<hand seat="S" sp="A8765432"/>
</diagram>
XSL Output:
Q 10 9
K J
A 8 7 6 5 4 3 2
A single-suited diagram. This one currently doesn't format so good with the long suit and void.

North and East Only

Input:
<diagram>
<hand seat="N" sp="QT9" he="AJT9" di="9654" cl="K2"/>
<hand seat="E" sp="AJ32" he="K" di="AKQJ" cl="AQJT"/>
</diagram>
XSL Output:
Q 10 9
A J 10 9
9 6 5 4
K 2
A J 3 2
K
A K Q J
A Q J 10
A diagram with only north and east.

Thomas Andrews; © 2002-2009.

Auctions

Verbose Auction

Input:
<auction dealer="W">
    <call seat="W" code="P"/> 
    <call seat="N" code="1S"/> 
    <call seat="E" code="2H"/> 
    <call seat="S" code="3C"/>

    <call seat="W" code="X"/>
    <call seat="N" code="XX"/>
    <call seat="E" code="P"/> 
    <call seat="S" code="P"/> 

    <call seat="W" code="P"/>
</auction>
XSL Output:
West North East South
Pass 1 2 3
Dbl Rdbl All Pass
We've specified the seat in each call. In fact, only calls made out of turn are required to have a seat specified - when no seat is present, the XSL script defaults to the next seat in turn.

Simple Auction - No dealer specified

Input:
<auction>
    <call code="P"/> 
    <call code="1S"/> 
    <call code="2H"/> 
    <call code="3C"/>

    <call code="X"/>
    <call code="XX"/>
    <call code="P"/> 
    <call code="P"/> 

    <call code="P"/>
</auction>
XSL Output:
Dealer LHO Partner RHO
Pass 1 2 3
Dbl Rdbl All Pass
When no dealer is specified, we label the hands in the auction as "Dealer," "LHO," "Partner," and "RHO." Dealer is the leftmost label.

Simple Auction - first seat specified

Input:
<auction>
    <call code="P" seat="S"/> 
    <call code="1S"/> 
    <call code="2H"/> 
    <call code="3C"/>

    <call code="X"/>
    <call code="XX"/>
    <call code="P"/> 
    <call code="P"/> 

    <call code="P"/>
</auction>
XSL Output:
South West North East
Pass 1 2 3
Dbl Rdbl All Pass
When no dealer is specified, but the first call has a "seat" id, we assume that seat is dealer.

Simple Auction - West deals

Input:
<auction dealer="W">
    <call code="P"/> 
    <call code="1S"/> 
    <call code="2H"/> 
    <call code="3C"/>

    <call code="X"/>
    <call code="XX"/>
    <call code="P"/> 
    <call code="P"/> 

    <call code="P"/>
</auction>
XSL Output:
West North East South
Pass 1 2 3
Dbl Rdbl All Pass
The style guide suggests that West should always be to the left of East, for easier reading. West is taken as the left-most hand in all cases except when South is dealer - then South is taken as the left-most hand (to avoid the dangling first bid with dealer in the fourth column.)
Note that the 'X' and 'XX' get translated to Dbl and Rdbl.
The white-space in the input above is optional, and used just to clarify the auction to someone stuck reading or writing the XML.
The task of deciding which hand should be left-most in the table is reserved for the XSL formatter - the XML document is meant to represent the play of the deal, and contain as little formatting specifics as possible.

Simple Auction With Names, South Deals

Input:
<auction dealer="S">
    <name seat="S">Andrews</name>
    <name seat="N">Partner</name>
    <call code="P"/> 
    <call code="1S"/> 
    <call code="2H"/> 
    <call code="3C"/>

    <call code="X"/>
    <call code="XX"/>
    <call code="P"/> 
    <call code="P"/> 

    <call code="P"/>
</auction>
XSL Output:
South
Andrews
West North
Partner
East
Pass 1 2 3
Dbl Rdbl All Pass
When names are provided, add them to the auction. Keep seat names in case there are duplicate names (as in all-GIB auctions.)

Simple Auction - East deals

Input:
<auction dealer="E">
    <call code="P"/> 
    <call code="1S"/> 
    <call code="2H"/> 
    <call code="3C"/>

    <call code="X"/>
    <call code="XX"/>
    <call code="P"/> 
    <call code="P"/> 

    <call code="P"/>
</auction>
XSL Output:
West North East South
Pass 1
2 3 Dbl Rdbl
All Pass
When East deals, we put West left-most.

Simple Auction - North deals

Input:
<auction dealer="N">
    <call code="P"/> 
    <call code="1S"/> 
    <call code="2H"/> 
    <call code="3C"/>

    <call code="X"/>
    <call code="XX"/>
    <call code="P"/> 
    <call code="P"/> 

    <call code="P"/>
</auction>
XSL Output:
West North East South
Pass 1 2
3 Dbl Rdbl All Pass
When North deals, West is the left-most hand to keep West's hand to the left of East's hand.

Pass Out Auction

Input:
<auction dealer="S">
    <call code="P"/>
    <call code="P"/>
    <call code="P"/>
    <call code="P"/>
</auction>

<hr/>

<auction dealer="W">
    <call code="P"/>
    <call code="P"/>
    <call code="P"/>
    <call code="P"/>
</auction>

<hr/>

<auction dealer="N">
    <call code="P"/>
    <call code="P"/>
    <call code="P"/>
    <call code="P"/>
</auction>

<hr/>

<auction dealer="E">
    <call code="P"/>
    <call code="P"/>
    <call code="P"/>
    <call code="P"/>
</auction>
XSL Output:
South West North East
Pass Out

West North East South
Pass Out

West North East South
Pass Out

West North East South
Pass Out
These should generate one cell with the text "Pass Out."

Fourth Seat Opener

Input:
<auction dealer="E">
   <call code="P"/>
   <call code="P"/>
   <call code="P"/>
   <call code="1N"/>

   <call code="P"/>
   <call code="P"/>
   <call code="P"/>
</auction>
XSL Output:
West North East South
Pass Pass
Pass 1 NT All Pass
Make sure auctions starting with three passes don't start with "All Pass."

Auctions with Notes

One Note

Input:
<auction dealer="W">
    <call code="1N"><note>15-17</note></call>
    <call code="P"/>
    <call code="P"/>
    <call code="P"/>
</auction>
XSL Output:
West North East South
1 NT* All Pass
*15-17
Adding a note to a call internally makes life simple and natural.

One Note, Multiple Times

Input:
<auction dealer="W">
    <call code="1N"/>
    <call code="P"/>
    <call code="3S"/>
    <call code="P"/>

    <call code="4C"><note id="cue">Cue bid</note></call>
    <call code="P"/>
    <call code="4D"><note ref="cue"/></call>
    <call code="P"/>

    <call code="5D"><note ref="cue"/></call>
    <call code="P"/>
    <call code="6S"/>

    <call code="P"/>
    <call code="P"/>
    <call code="P"/>
</auction>
XSL Output:
West North East South
1 NT Pass 3 Pass
4 * Pass 4 * Pass
5 * Pass 6 All Pass
*Cue bid
Easy to write duplicate notes.

Several Notes on One Bid

Input:
<auction>
    <call code="P"/>
    <call code="1N"><note>20 second pause</note>
                <note>12-14</note></call>
    <call code="P"/>
    <call code="P"/>
    <call code="P"/>
</auction>
XSL Output:
Dealer LHO Partner RHO
Pass 1 NT1,2 All Pass
1. 20 second pause
2. 12-14
Several notes applied to one tag.

Several Notes on One Bid - Sorting?

Input:
<auction>
    <call code="1N"/>
    <call code="P"><note id="hitch">Hesitation</note></call>
    <call code="P"/>
    <call code="2S"><note>Nominally <spade/> + minor</note><note ref="hitch"/></call>
    <call code="P"/>
    <call code="P"/>
    <call code="P"/>
</auction>
XSL Output:
Dealer LHO Partner RHO
1 NT Pass1 Pass 2 2,1
All Pass
1. Hesitation
2. Nominally + minor
Should we sort comments on individual calls? I couldn't quite get the XSL to do it.

Several Notes, Some Duplicated

Input:
<auction dealer="W">
    <call code="1N"><note>15-17</note></call>
    <call code="P"/>
    <call code="3S"><note>Game forcing</note></call>
    <call code="P"/>

    <call code="4C"><note>Good spades, club concentration</note></call>
    <call code="P"/>
    <call code="4D"><note id="cue">Cue bid</note></call>
    <call code="P"/>

    <call code="5D"><note ref="cue"/></call>
    <call code="P"/>
    <call code="6S"/>

    <call code="P"/>
    <call code="P"/>
    <call code="P"/>
</auction>
XSL Output:
West North East South
1 NT1 Pass 3 2 Pass
4 3 Pass 4 4 Pass
5 4 Pass 6 All Pass
1. 15-17
2. Game forcing
3. Good spades, club concentration
4. Cue bid
Easy to write duplicate notes.

Note In Last Three Passes

Input:
<auction dealer="W">
    <call code="1N"/>
    <call code="P"><note>Hesitation</note></call>
    <call code="P"/>
    <call code="P"/>
</auction>
<hr/>
<auction dealer="W">
    <call code="1N"/>
    <call code="P"/>
    <call code="P"><note>Hesitation</note></call>
    <call code="P"/>
</auction>
<hr/>
<auction dealer="W">
    <call code="1N"/>
    <call code="P"/>
    <call code="P"/>
    <call code="P"><note>Hesitation</note></call>
</auction>
XSL Output:
West North East South
1 NT Pass* Pass Pass
*Hesitation

West North East South
1 NT Pass Pass* Pass
*Hesitation

West North East South
1 NT Pass Pass Pass*
*Hesitation
If there is a note applied to one of the last three passes, write out the passes explicitly.

Note In Pass-out Auctions

Input:
<auction>
    <call code="P"><note>Hesitation</note></call>
    <call code="P"/>
    <call code="P"/>
    <call code="P"/>
</auction>
<hr/>
<auction>
    <call code="P"/>
    <call code="P"><note>Hesitation</note></call>
    <call code="P"/>
    <call code="P"/>
</auction>
<hr/>
<auction>
    <call code="P"/>
    <call code="P"/>
    <call code="P"><note>Hesitation</note></call>
    <call code="P"/>
</auction>
<hr/>
<auction>
    <call code="P"/>
    <call code="P"/>
    <call code="P"/>
    <call code="P"><note>Hesitation</note></call>
</auction>
XSL Output:
Dealer LHO Partner RHO
Pass* Pass Pass Pass
*Hesitation

Dealer LHO Partner RHO
Pass Pass* Pass Pass
*Hesitation

Dealer LHO Partner RHO
Pass Pass Pass* Pass
*Hesitation

Dealer LHO Partner RHO
Pass Pass Pass Pass*
*Hesitation
If the auction is passed out and there is a note in one pass, then show all passes.

Editorial Comments with '!' or '?'

Input:
<auction dealer="W">
    <call code="1N" comment="?"/>
    <call code="P"/>
    <call code="7N" comment="!"/>
    <call code="P"/>
    <call code="P"/>
    <call code="P"/>
</auction>
XSL Output:
West North East South
1 NT? Pass 7 NT! All Pass
The comment is meant as inline editorials, rather than the footnote "note" method, above. Pavlicek's style guide suggests that only one '?' or one '!' be used in this instance. My processors don't enforce that rule, but I follow it when writing my documents.

Editorial Comment among the last three passes

Input:
<auction dealer="E">
    <call code="1N"/>
    <call code="P" comment="?"/>
    <call code="P"/>
    <call code="P"/>
</auction>
<hr/>
<auction dealer="E">
    <call code="1N"/>
    <call code="P"/>
    <call code="P" comment="?"/>
    <call code="P"/>
</auction>
<hr/>
<auction dealer="E">
    <call code="1N"/>
    <call code="P"/>
    <call code="P"/>
    <call code="P" comment="?"/>
</auction>
XSL Output:
West North East South
1 NT Pass?
Pass Pass

West North East South
1 NT Pass
Pass? Pass

West North East South
1 NT Pass
Pass Pass?
Show all calls if there is a comment added to one of the last three passes.

Editorial Comment in passed-out auctions

Input:
<auction dealer="E">
    <call code="P" comment="?"/>
    <call code="P"/>
    <call code="P"/>
    <call code="P"/>
</auction>
<hr/>
<auction dealer="E">
    <call code="P"/>
    <call code="P" comment="?"/>
    <call code="P"/>
    <call code="P"/>
</auction>
<hr/>
<auction dealer="E">
    <call code="P"/>
    <call code="P"/>
    <call code="P" comment="?"/>
    <call code="P"/>
</auction>
<hr/>
<auction dealer="E">
    <call code="P"/>
    <call code="P"/>
    <call code="P"/>
    <call code="P" comment="?"/>
</auction>
XSL Output:
West North East South
Pass? All Pass

West North East South
Pass Pass?
Pass Pass

West North East South
Pass Pass
Pass? Pass

West North East South
Pass Pass
Pass Pass?
Show all calls if there is a comment in a pass-out auction. Currently, the first case is "broken," or this behavior could be seen as a feature.

Incomplete Auctions

Passes

Input:
<auction>
    <call code="P"/>
</auction>
<hr/>
<auction>
    <call code="P"/>
    <call code="P"/>
</auction>
<hr/>
<auction>
    <call code="P"/>
    <call code="P"/>
    <call code="P"/>
</auction>
XSL Output:
Dealer LHO Partner RHO
Pass

Dealer LHO Partner RHO
Pass Pass

Dealer LHO Partner RHO
Pass Pass Pass
Make sure that three passes don't get translated to "All Pass."

No Pass at the End

Input:
<auction>
    <call code="1N"/>
    <call code="P"/>
    <call code="3D"/>
</auction>
XSL Output:
Dealer LHO Partner RHO
1 NT Pass 3
No pass at the end of an auction.

One Pass at the End

Input:
<auction>
    <call code="1N"/>
    <call code="P"/>
    <call code="3D"/>
    <call code="P"/>
</auction>
XSL Output:
Dealer LHO Partner RHO
1 NT Pass 3 Pass
One pass at the end of an auction.

Two Pass at the End

Input:
<auction>
    <call code="1N"/>
    <call code="P"/>
    <call code="3D"/>
    <call code="P"/>
    <call code="P"/>
</auction>
XSL Output:
Dealer LHO Partner RHO
1 NT Pass 3 Pass
Pass
Two passes at the end of an auction.

Incomplete Auctions with Query

Passes

Input:
<auction>
    <call code="P"/>
    <call code="?"/>
</auction>
<hr/>
<auction>
    <call code="P"/>
    <call code="P"/>
    <call code="?"/>
</auction>
<hr/>
<auction>
    <call code="P"/>
    <call code="P"/>
    <call code="P"/>
    <call code="?"/>
</auction>
XSL Output:
Dealer LHO Partner RHO
Pass ?

Dealer LHO Partner RHO
Pass Pass ?

Dealer LHO Partner RHO
Pass Pass Pass ?
Make sure that three passes don't get translated to "All Pass."

No Pass at the End

Input:
<auction>
    <call code="1N"/>
    <call code="P"/>
    <call code="3D"/>
    <call code="?"/>
</auction>
XSL Output:
Dealer LHO Partner RHO
1 NT Pass 3 ?
No pass at the end of an auction.

One Pass at the End

Input:
<auction>
    <call code="1N"/>
    <call code="P"/>
    <call code="3D"/>
    <call code="P"/>
    <call code="?"/>
</auction>
XSL Output:
Dealer LHO Partner RHO
1 NT Pass 3 Pass
?
One pass at the end of an auction.

Two Pass at the End

Input:
<auction>
    <call code="1N"/>
    <call code="P"/>
    <call code="3D"/>
    <call code="P"/>
    <call code="P"/>
    <call code="?"/>
</auction>
XSL Output:
Dealer LHO Partner RHO
1 NT Pass 3 Pass
Pass ?
Two passes at the end of an auction.

Thomas Andrews; © 2002-2009.

Auctions: Exceptions

Calls out of turn at first call

Input:
<h2>South Dealer</h2>
<auction dealer="S">
<call seat="W" code="1N">
    <note>Out of turn, accepted</note>
</call>
<call code="P"/>
<call code="P"/>
<call code="P"/>
</auction>

<hr/>

<auction dealer="S">
<call seat="N" code="1N">
    <note>Out of turn, accepted</note>
</call>
<call code="P"/>
<call code="P"/>
<call code="P"/>
</auction>

<hr/>

<auction dealer="S">
<call seat="E" code="1N">
    <note>Out of turn, accepted</note>
</call>
<call code="P"/>
<call code="P"/>
<call code="P"/>
</auction>

<h2>East Dealer</h2>
<auction dealer="E">
<call seat="S" code="1N">
    <note>Out of turn, accepted</note>
</call>
<call code="P"/>
<call code="P"/>
<call code="P"/>
</auction>

<hr/>

<auction dealer="E">
<call seat="W" code="1N">
    <note>Out of turn, accepted</note>
</call>
<call code="P"/>
<call code="P"/>
<call code="P"/>
</auction>

<hr/>

<auction dealer="E">
<call seat="N" code="1N">
    <note>Out of turn, accepted</note>
</call>
<call code="P"/>
<call code="P"/>
<call code="P"/>
</auction>

<h2>North Dealer</h2>
<auction dealer="N">
<call seat="E" code="1N">
    <note>Out of turn, accepted</note>
</call>
<call code="P"/>
<call code="P"/>
<call code="P"/>
</auction>

<hr/>

<auction dealer="N">
<call seat="S" code="1N">
    <note>Out of turn, accepted</note>
</call>
<call code="P"/>
<call code="P"/>
<call code="P"/>
</auction>

<hr/>

<auction dealer="N">
<call seat="W" code="1N">
    <note>Out of turn, accepted</note>
</call>
<call code="P"/>
<call code="P"/>
<call code="P"/>
</auction>

<h2>West Dealer</h2>
<auction dealer="W">
<call seat="N" code="1N">
    <note>Out of turn, accepted</note>
</call>
<call code="P"/>
<call code="P"/>
<call code="P"/>
</auction>

<hr/>

<auction dealer="W">
<call seat="E" code="1N">
    <note>Out of turn, accepted</note>
</call>
<call code="P"/>
<call code="P"/>
<call code="P"/>
</auction>

<hr/>

<auction dealer="W">
<call seat="S" code="1N">
    <note>Out of turn, accepted</note>
</call>
<call code="P"/>
<call code="P"/>
<call code="P"/>
</auction>

XSL Output:

South Dealer

South West North East
1 NT* All Pass
*Out of turn, accepted

South West North East
1 NT* All Pass
*Out of turn, accepted

South West North East
1 NT*
All Pass
*Out of turn, accepted

East Dealer

West North East South
1 NT*
All Pass
*Out of turn, accepted

West North East South
1 NT* All Pass
*Out of turn, accepted

West North East South
1 NT* All Pass
*Out of turn, accepted

North Dealer

West North East South
1 NT* All Pass
*Out of turn, accepted

West North East South
1 NT*
All Pass
*Out of turn, accepted

West North East South
1 NT* All Pass
*Out of turn, accepted

West Dealer

West North East South
1 NT* All Pass
*Out of turn, accepted

West North East South
1 NT* All Pass
*Out of turn, accepted

West North East South
1 NT*
All Pass
*Out of turn, accepted

Auction with call out of turn

Input:
<auction>
<call code="1N" seat="S"/>
<call code="P" seat="N"><note>Call out of turn, accepted</note></call>
<call code="2H"/>
<call code="P"/>
<call code="P"/>
<call code="P"/>
</auction>
XSL Output:
South West North East
1 NT Pass* 2
All Pass
*Call out of turn, accepted

Partial auction with pass out of turn

Input:
<auction>
<call code="1N" seat="S"/>
<call code="P" seat="N">
      <note>Call out of turn, accepted</note></call>
<call code="P"/>
<call code="P"/>
</auction>
<hr/>
<auction>
<call code="1N" seat="S"/>
<call code="P" seat="N">
      <note>Call out of turn, accepted</note></call>
<call code="P"/>
<call code="P"/>
<call code="P"/>
</auction>
<hr/>
<auction>
<call code="1N" seat="S"/>
<call code="P" seat="N">
      <note>Call out of turn, accepted</note></call>
<call code="P"/>
<call code="P"/>
<call code="P"/>
<call code="P"/>
</auction>
<hr/>
<auction>
<call code="1N" seat="S"/>
<call code="P" seat="N">
     <note>Call out of turn, accepted</note></call>
<call code="P"/>
<call code="P"/>
<call code="P"/>
<call code="P"/>
<call code="P"/>
</auction>

XSL Output:
South West North East
1 NT Pass* Pass
Pass
*Call out of turn, accepted

South West North East
1 NT Pass* Pass
Pass Pass
*Call out of turn, accepted

South West North East
1 NT Pass* Pass
Pass Pass Pass
*Call out of turn, accepted

South West North East
1 NT Pass* Pass
Pass All Pass
*Call out of turn, accepted
Three passes should not end an auction when pass out of turn is accepted, so "All Pass" should not be substituted - instead, the auction is to proceed as if the pass out of turn did not exist - the skipped bidder calls in turn, and then the auction continues even if the skipped bidder passes - so, six passes are necessary after a pass-out-of-turn is accepted.
See Law 34.

More Law 34 Checks: All Pass

Input:
<auction>
<call code="1N" seat="S"/>
<call code="P" seat="N">
     <note>Call out of turn, accepted</note></call>
<call code="3C"/>
<call code="P"/>
<call code="P"/>
<call code="P"/>
</auction>
XSL Output:
South West North East
1 NT Pass* 3
All Pass
*Call out of turn, accepted
This case should get end with an "All Pass."

Corrected call - two options

Input:
<auction dealer="W">
    <call code="1S"/>
    <call code="2D">
        <note>Corrected from insufficient <call code="1D"/>.</note>
    </call>
    <call code="2S"/>
    <call code="P"/>
    <call code="P"/>
    <call code="P"/>
</auction>
XSL Output:
West North East South
1 2 * 2 All Pass
*Corrected from insufficient 1 .
Input:
<auction dealer="W">
    <call code="1S"/>
    <call code="1D"/>
    <call code="2D" seat="N">
        <note>Made sufficient</note>
    </call>
    <call code="2S"/>
    <call code="P"/>
    <call code="P"/>
    <call code="P"/>
</auction>
XSL Output:
West North East South
1 1
2 * 2 All Pass
*Made sufficient
I'd prefer the first to the second. As a rule, I think a <call> tag should be used for an "accepted" call of some form. If a call is not accepted as part of the auction, then it should be recorded in a footnote.

Annotations

Auction with annotation

Input:
<auction>
<call code="1N" seat="S"/>
<call code="P" seat="N">
    <note>Call out of turn</note>
    </call>
<annotation>Director was called. East heard
his options, chose to accept the call.
</annotation>
<call code="2H"/>
<call code="P"/>
<call code="P"/>
<call code="P"/>
</auction>
XSL Output:
South West North East
1 NT Pass*
Director was called. East heard his options, chose to accept the call.
2
All Pass
*Call out of turn

Annotation after Pass Out auction

Input:
<auction dealer="N">
<call code="P"/>
<call code="P"/>
<call code="P"/>
<call code="P"/>
<annotation>After fourth pass, North called
<call code="1S"/>, which was nullified.
</annotation>
</auction>

<hr/>

<auction dealer="E">
<call code="P"/>
<call code="P"/>
<call code="P"/>
<call code="P"/>
<annotation>After fourth pass, East called
<call code="1S"/>, which was nullified.
</annotation>
</auction>
<hr/>
<auction dealer="S">
<call code="P"/>
<call code="P"/>
<call code="P"/>
<call code="P"/>
<annotation>After fourth pass, South called
<call code="1S"/>, which was nullified.
</annotation>
</auction>
<hr/>
<auction dealer="W">
<call code="P"/>
<call code="P"/>
<call code="P"/>
<call code="P"/>
<annotation>After fourth pass, West called
<call code="1S"/>, which was nullified.
</annotation>
</auction>


XSL Output:
West North East South
Pass Out
After fourth pass, North called 1 , which was nullified.

West North East South
Pass Out
After fourth pass, East called 1 , which was nullified.

South West North East
Pass Out
After fourth pass, South called 1 , which was nullified.

West North East South
Pass Out
After fourth pass, West called 1 , which was nullified.

Thomas Andrews; © 2002-2009.

Links

These features are not bridge-related, but I've included these examples just for completeness. Note that the links don't know whether they are opened in the same frame, the top frame of the current window, or a new window. This decision is made in the XSL, based in whether the link is internal, part of my site, or external.

Internal Link

Input:
<link rel="internal" href="intro">This link</link>
should take you to the introduction of this book.
XSL Output:
This link should take you to the introduction of this book.
The "internal" link basically means that the link is a reference to another page in this same collection. When generating PDF, this is converted to an internal link in the document. In HTML, it loads the page in the current frame (when in a framed document.)

On-Site Links

Input:
This is a gross hack to indicate pages on my site, such as the
<link rel="onsite" href="/deal/">Deal 3.0 page.</link>
XSL Output:
This is a gross hack to indicate pages on my site, such as the Deal 3.0 page.
This just lets me move my site more easily - a bit of a hack. When generating PDF, the site location gets hard-coded. In HTML, causes the document to be loaded in the top frame.

External Link

Input:
Many of the formatting decisions I've made are based on the
recommendations in Richard Pavlicek's
<link href="http://www.rpbridge.net/7z69.htm">Bridge
Writing Style Guide.</link>
XSL Output:
Many of the formatting decisions I've made are based on the recommendations in Richard Pavlicek's Bridge Writing Style Guide.
A general link. In HTML, causes the referenced document to be loaded in the top frame.

Thomas Andrews; © 2002-2009.

HTML-like Tags

Most tags in these documents which look like HTML are transferred directly to the resulting HTML document. I try to avoid using too much HTML in my documents because I also translate the XML to XSL:FO, to generate PDFs, and too much HTML means I have much more to do the translations.

Paragraph

Input:
<p>Paragraph 1</p>
<p>Paragraph 2</p>
XSL Output:
Paragraph 1
Paragraph 2
This actually gets translated to a <div> tag, because HTML paragraphs don't like tables (like deal diagrams) in the middle.

Line Breaks

Input:
In this instance, we add a line break here - <br/> to make sure that
code creates breaks properly.
XSL Output:
In this instance, we add a line break here -
to make sure that code creates breaks properly.

Thomas Andrews; © 2002-2009.

Test All Links

These are all the links from my articles. This is a cool feature of XML - the ability to extract all objects by type. Here, I can test all my links from my article sets on this one page, rather than checking them on their original context. It would be even better if XSL could just check for the link rot...
In test/intro.html (Introduction):
... article.css. ...
... Bridge Writing Style Guide ...
... hosted on GitHub. ...
In test/suitsymbols.html (Suit Symbols):
... Calls ...
... Cards and Holdings ...
In test/diagram.html (Hands):
... Impossible Bridge Book. ...
In test/complex-auctions.html (Auctions: Exceptions):
... Law 34. ...
In test/links.html (Links):
... Deal 3.0 page. ...
... Bridge Writing Style Guide. ...
... This link ...
In badfit/introduction.html (Introduction):
... Double Asymmetries, ...
... Deal ...
... GIB ...
... deal on his site ...
In hands/intro.html (Introduction):
... Bridge Writing Style Guide. ...
... read my XML Test Pages ...
In hands/chance.html (The Only Chance):
From: Floater
In hands/endplay8.html (Mirror, Mirror):
From: OKbridge
In hands/spots.html (Seeing Spots):
From: OKbridge
... Matt Ginsberg's "GIB" ...
In hands/givetake.html (Give and Take):
From: OKbridge
In hands/hope.html (Hope Springs Eternal):
From: OKbridge
In hands/guess.html (Counting It Out):
From: OKbridge
In hands/throwin.html (An Even Break):
From: OKbridge
In hands/duck.html (A Considered Duck):
From: OKbridge
In hands/triple3.html (Helpful Defense):
From: OKbridge
In hands/trickone.html (Taking a Chance):
From: OKbridge
In hands/info.html (Taking Care):
From: OKbridge
In hands/safety3.html (Safer Than Sorry):
From: OKbridge
In hands/squeeze4.html (Worth the Effort):
From: OKbridge
In hands/matchpoints.html (The Prize):
From: OKbridge
In hands/squeeze2.html (A Simple Positional Squeeze):
From: OKbridge
In hands/coup.html (A Grand Coup):
From: Draper Labs Bridge Club
In hands/squeeze.html (A Simple Squeeze):
... another hand ...
In hands/cover.html (Cover an Honor?):
From: OKbridge
In hands/recovery.html (A Recovery):
From: OKbridge
In hands/endplay4.html (Down Three is Good Bridge?):
From: OKbridge
In hands/endplay.html (A Nice Endplay):
From: OKbridge
In hands/showup.html (Lucky Break):
From: OKbridge
In hands/freedom.html (Freedom of Choice):
From: OKBridge
In hands/finesse.html (A Daring Play):
From: ECats Bridge
In hands/coup3.html (Use It or Lose It):
From: OKbridge
In hands/assume.html (A Best Shot):
From: OKbridge
In hands/squeeze5.html (Expert Planning):
From: OKbridge
... Richard Pavlicek, Sr., ...
In hands/doublesqueeze.html (A Little Too High):
From: OKbridge
In hands/triple2.html (Restricted Choice):
From: OKbridge
In hands/conceal.html (A Slim Chance):
From: OKbridge
In hands/trumped.html (Double Trouble):
From: OKbridge
In hands/strip2.html (A Subtle Pinch):
From: OKbridge
In hands/options.html (Trading Options):
From: OKbridge
In hands/safety.html (Take Care What You Ask For...):
From: OKbridge
In hands/triple.html (A Three-suited Squeeze):
From: OKbridge
In hands/overtrick.html (Overtricked):
From: OKbridge
In hands/squeeze3.html (A Double Whammy):
From: OKbridge
In hands/familiar.html (A Familiar Combination):
From: OKbridge
In hands/assumptions.html (Assumptions):
From: Draper Labs Bridge Club
In hands/miracle.html (One Chance):
From: OKbridge
In hands/strip.html (Stripped):
From: Palo Alto Bridge Club
In hands/endplay5.html (Redemption):
From: OKbridge
In hands/endplay2.html (A Little Help from a Friend):
From: OKbridge
In hands/countless.html (Countless Squeezes):
From: OKbridge
In hands/shutup.html (A Shut-up Squeeze):
From: OKbridge
In hands/sixorseven.html (Six or Seven?):
From: OKbridge
In hands/hopeless.html (An Ace Too Few):
From: OKbridge
In hands/anticipate.html (Anticipation):
From: OKbridge
In hands/progress.html (Wishful Thinking):
From: OKbridge
In hands/endplay3.html (An Intriguing Trump Squeeze):
From: OKbridge
In hands/three2.html (Another Three-suited Squeeze):
From: OKbridge
In hands/tactical.html (A Tactical Squeeze):
From: OKbridge
In parzero/intro.html (Introduction):
... Bridge World's glossary ...
... Double Asymmetries ...
... Bad Fit Deals, ...
... Deal 3.0, ...
... GIB. ...
... one example ...
... one case ...
In parzero/ex28.html (A Complexity Four Example):
... Introduction. ...
In tenaces/menacei.html (Introduction):
... Deal ...
... GIB ...

Thomas Andrews; © 2002-2009.