From e227c0167081b62fd9689e3f965fcb8dcfa3bc9d Mon Sep 17 00:00:00 2001 From: emkael Date: Wed, 22 May 2019 00:39:06 +0200 Subject: Factoring out BRI and DGE formats, as they're part of DUP format --- dealconvert/formats/bri.py | 69 ++++++++++++++++++++++++++-------------------- dealconvert/formats/dge.py | 51 ++++++++++++++++++++-------------- 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 -- cgit v1.2.3