summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoremkael <emkael@tlen.pl>2019-05-22 00:39:06 +0200
committeremkael <emkael@tlen.pl>2019-05-22 00:39:06 +0200
commite227c0167081b62fd9689e3f965fcb8dcfa3bc9d (patch)
treec315e224ddd243565b669f24e8f5224a285b34e3
parent768c601f9d99cfd3712a3531a74b48b0d2719820 (diff)
Factoring out BRI and DGE formats, as they're part of DUP format
-rw-r--r--dealconvert/formats/bri.py69
-rw-r--r--dealconvert/formats/dge.py51
2 files changed, 69 insertions, 51 deletions
diff --git a/dealconvert/formats/bri.py b/dealconvert/formats/bri.py
index bb87d9d..56d0c2c 100644
--- a/dealconvert/formats/bri.py
+++ b/dealconvert/formats/bri.py
@@ -19,43 +19,52 @@ class BRIFormat(DealFormat):
print 'WARNING: truncated .bri input: %s' % (deal_str)
break
else:
- try:
- deal = [int(deal_str[i*2:(i+1)*2], 10) for i in range(0, 39)]
- deal_obj = dto.Deal()
- deal_obj.number = number
- deal_obj.dealer = deal_obj.get_dealer(number)
- deal_obj.vulnerable = deal_obj.get_vulnerability(number)
- for hand in range(0, 3):
- for card in deal[13*hand:13*(hand+1)]:
- card = card - 1
- suit = card / 13
- card = card % 13
- deal_obj.hands[hand][suit].append(self.cards[card])
- deal_obj.fill_west()
- dealset.append(deal_obj)
- number += 1
- except ValueError:
- print 'ERROR: invalid card in .bri file: %s' % (deal_str)
- sys.exit()
- if max(deal) > 52:
- print 'ERROR: invalid card in .bri file: %d' % (max(deal))
- sys.exit()
+ deal_obj = dto.Deal()
+ deal_obj.number = number
+ deal_obj.dealer = deal_obj.get_dealer(number)
+ deal_obj.vulnerable = deal_obj.get_vulnerability(number)
+ deal_obj.hands = self.parse_hands(deal_str)
+ dealset.append(deal_obj)
+ number += 1
else:
break
return dealset
+ def parse_hands(self, deal_str):
+ deal_obj = dto.Deal()
+ try:
+ deal = [int(deal_str[i*2:(i+1)*2], 10) for i in range(0, 39)]
+ if max(deal) > 52:
+ print 'ERROR: invalid card in .bri file: %d' % (max(deal))
+ sys.exit()
+ for hand in range(0, 3):
+ for card in deal[13*hand:13*(hand+1)]:
+ card = card - 1
+ suit = card / 13
+ card = card % 13
+ deal_obj.hands[hand][suit].append(self.cards[card])
+ deal_obj.fill_west()
+ except ValueError:
+ print 'ERROR: invalid card in .bri file: %s' % (deal_str)
+ sys.exit()
+ return deal_obj.hands
+
def output_content(self, out_file, dealset):
print self.number_warning
for deal in dealset:
- deal_str = ''
- for hand in deal.hands[0:3]:
- for i, suit in enumerate(hand):
- for card in suit:
- try:
- deal_str += '%02d' % (self.cards.index(card) + 13*i + 1)
- except ValueError:
- print 'ERROR: invalid card character: %s' % (card)
- sys.exit()
+ deal_str = self.single_deal_output(deal)
deal_str += ' ' * 32
deal_str += chr(0) * 18
out_file.write(deal_str)
+
+ def single_deal_output(self, deal):
+ deal_str = ''
+ for hand in deal.hands[0:3]:
+ for i, suit in enumerate(hand):
+ for card in suit:
+ try:
+ deal_str += '%02d' % (self.cards.index(card) + 13*i + 1)
+ except ValueError:
+ print 'ERROR: invalid card character: %s' % (card)
+ sys.exit()
+ return deal_str
diff --git a/dealconvert/formats/dge.py b/dealconvert/formats/dge.py
index 21d3044..93eb971 100644
--- a/dealconvert/formats/dge.py
+++ b/dealconvert/formats/dge.py
@@ -37,35 +37,44 @@ class DGEFormat(DealFormat):
deal.number = number
deal.dealer = deal.get_dealer(number)
deal.vulnerable = deal.get_vulnerability(number)
- hand = 0
- suit_count = -1
- suit = None
- for char in deal_str[0:68]:
- if char in self.suits:
- suit = self.suits[char]
- suit_count += 1
- if suit_count == 4:
- suit_count = 0
- hand += 1
- else:
- if suit is None:
- print 'ERROR: invalid .dge line: %s' % (deal_str)
- sys.exit()
- else:
- deal.hands[hand][suit].append(char)
+ deal.hands = self.parse_hands(deal_str[0:68])
dealset.append(deal)
number += 1
else:
break
return dealset
+ def parse_hands(self, deal_str):
+ deal = dto.Deal()
+ hand = 0
+ suit_count = -1
+ suit = None
+ for char in deal_str[0:68]:
+ if char in self.suits:
+ suit = self.suits[char]
+ suit_count += 1
+ if suit_count == 4:
+ suit_count = 0
+ hand += 1
+ else:
+ if suit is None:
+ print 'ERROR: invalid .dge line: %s' % (deal_str)
+ sys.exit()
+ else:
+ deal.hands[hand][suit].append(char)
+ return deal.hands
+
def output_content(self, out_file, dealset):
print self.number_warning
for deal in dealset:
- deal_str = ''
- for hand in deal.hands:
- for suit, cards in enumerate(hand):
- deal_str += self.suit_indicator(suit)
- deal_str += ''.join(cards)
+ deal_str = self.single_deal_output(deal)
deal_str += chr(0) * 60
out_file.write(deal_str)
+
+ def single_deal_output(self, deal):
+ deal_str = ''
+ for hand in deal.hands:
+ for suit, cards in enumerate(hand):
+ deal_str += self.suit_indicator(suit)
+ deal_str += ''.join(cards)
+ return deal_str