Ejemplo n.º 1
0
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 == '&diams;':
                continue
            try:
                card = card_info.singular_of(maybe_plural)
            except KeyError, exception:
                print line
                raise exception
            cards.extend([card] * mult)
Ejemplo n.º 2
0
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 == '&diams;':
                continue
            try:
                card = card_info.singular_of(maybe_plural)
            except KeyError, exception:
                print line
                raise exception
            cards.extend([card] * mult)
Ejemplo n.º 3
0
        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):
Ejemplo n.º 4
0
        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
    }