def capture_cards(line): """ Given a line of text from isotropic, extract the card names. line: string like 'Rob plays a <span class=card-none>Minion</span>.' returns: list of string of card names, eg, ['Minion'] """ def _as_int_or_1(string_val): try: return int(string_val) except ValueError: return 1 cards = [] card_sections = SPLIT_COMMA_AND_RE.split(line) for sect in card_sections: split_at_span = sect.split('<span') if not split_at_span: continue first = split_at_span[0] split_first = first.split() if not split_first: mult = 1 else: mult = _as_int_or_1(split_first[-1]) for subsect in split_at_span: start_of_end_span = subsect.find('</span') if start_of_end_span == -1: continue end_of_begin_span = subsect.rfind('>', 0, start_of_end_span) if end_of_begin_span == -1: continue maybe_plural = subsect[end_of_begin_span + 1: start_of_end_span] if maybe_plural == '♦': continue try: card = card_info.singular_of(maybe_plural) except KeyError, exception: print line raise exception cards.extend([card] * mult)
def capture_cards(line): """ Given a line of text from isotropic, extract the card names. line: string like 'Rob plays a <span class=card-none>Minion</span>.' returns: list of string of card names, eg, ['Minion'] """ def _as_int_or_1(string_val): try: return int(string_val) except ValueError: return 1 cards = [] card_sections = SPLIT_COMMA_AND_RE.split(line) for sect in card_sections: split_at_span = sect.split('<span') if not split_at_span: continue first = split_at_span[0] split_first = first.split() if not split_first: mult = 1 else: mult = _as_int_or_1(split_first[-1]) for subsect in split_at_span: start_of_end_span = subsect.find('</span') if start_of_end_span == -1: continue end_of_begin_span = subsect.rfind('>', 0, start_of_end_span) if end_of_begin_span == -1: continue maybe_plural = subsect[end_of_begin_span + 1:start_of_end_span] if maybe_plural == '♦': continue try: card = card_info.singular_of(maybe_plural) except KeyError, exception: print line raise exception cards.extend([card] * mult)
diamond_loc = chunk.find(u'▼') if diamond_loc != -1: start_point_loc = max(chunk.rfind('(', 0, diamond_loc - 1), chunk.rfind(' ', 0, diamond_loc - 1)) vp_tokens = int(chunk[start_point_loc + 1:diamond_loc - 1]) card_list_chunks = deck_contents[ deck_contents.find(']') + 1:].replace(',', ' ') card_blobs = [x for x in card_list_chunks.split('</span>') if '<span' in x] deck_comp = {} for card_blob in card_blobs: right_bracket_index = card_blob.find('>') card_name = card_blob[right_bracket_index + 1:] try: card_name = card_info.singular_of(card_name) except KeyError, exception: print chunk, card_name, card_blob[right_bracket_index - 10:] raise exception card_quant = int(card_blob.split()[0]) deck_comp[card_name] = card_quant #FIXME: deck_comp is undefined if there's no vp_list return {'name': name, 'points': points, 'resigned': resigned, 'deck': deck_comp, 'vp_tokens': vp_tokens} def parse_decks(decks_blob): """ Parse and return a list of decks""" deck_blobs = [s for s in decks_blob.split('\n\n') if s] return [parse_deck(deck_blob) for deck_blob in deck_blobs] def name_and_rest(line, term):
if diamond_loc != -1: start_point_loc = max(chunk.rfind('(', 0, diamond_loc - 1), chunk.rfind(' ', 0, diamond_loc - 1)) vp_tokens = int(chunk[start_point_loc + 1:diamond_loc - 1]) card_list_chunks = deck_contents[deck_contents.find(']') + 1:].replace( ',', ' ') card_blobs = [ x for x in card_list_chunks.split('</span>') if '<span' in x ] deck_comp = {} for card_blob in card_blobs: right_bracket_index = card_blob.find('>') card_name = card_blob[right_bracket_index + 1:] try: card_name = card_info.singular_of(card_name) except KeyError, exception: print chunk, card_name, card_blob[right_bracket_index - 10:] raise exception card_quant = int(card_blob.split()[0]) deck_comp[card_name] = card_quant #FIXME: deck_comp is undefined if there's no vp_list return { 'name': name, 'points': points, 'resigned': resigned, 'deck': deck_comp, 'vp_tokens': vp_tokens }