def parse_mythic_spell(sb, book): spell = parse_section(sb, book, keys=False) spell['type'] = 'mythic_spell' spell['subtype'] = 'mythic_spell' for key, value in sb.keys: mythic_spell_parse_function(key)(spell, value) return spell
def parse_item(sb, book): item = { 'type': 'item', 'source': book, 'name': filter_name(sb.name.strip()) } text = [] for key, value in sb.keys: item_parse_function(key, sb.name.strip())(item, value) for detail in sb.details: if isinstance( detail, StatBlockSection) and detail.name.startswith("Construction"): for key, value in detail.keys: item_parse_function(key, detail.name.strip())(item, value) elif isinstance(detail, StatBlockSection): sections = item.setdefault('sections', []) sections.append(parse_section(detail, book)) elif isinstance(detail, StatBlockHeading): sections.append(parse_stat_block(sb, book, no_sb=no_sb)) else: if isinstance(detail, dict) or isinstance(detail, Heading): text.append(detail) else: text.append(unicode(detail)) if len(text) > 0: collapse_text(item, text) return item
def parse_spell(sb, book): spell = parse_section(sb, book, keys=False) spell['type'] = 'spell' for key, value in sb.keys: spell_parse_function(key)(spell, value) if spell['source'] == 'Advanced Race Guide': text = ''.join(BeautifulSoup(spell['text']).findAll(text=True)) spell['description'] = text.split(".")[0] + "." return spell
def parse_kingdom_resource(sb, book): details = [] for detail in sb.details: details.append(detail) sb.details = details kingdom_resource = parse_section(sb, book, keys=False) for key, value in sb.keys: kingdom_resource_parse_function(key)(kingdom_resource, value) kingdom_resource['type'] = 'kingdom_resource' return kingdom_resource
def parse_army(sb, book): details = [] for detail in sb.details: details.append(detail) sb.details = details army = parse_section(sb, book, keys=False) for key, value in sb.keys: army_parse_function(key)(army, value) army['type'] = 'army' return army
def parse_affliction(sb, book): affliction = parse_section(sb, book, keys=False) affliction['type'] = 'affliction' for key, value in sb.keys: affliction_parse_function(key)(affliction, value) if affliction.has_key('effects'): effects = affliction['effects'] if len(effects) == 1: affliction['effect'] = effects[0] else: affliction['effect'] = "; ".join(["[%s]" % e for e in effects]) del affliction['effects'] return affliction
def parse_haunt(sb, book): details = [] for detail in sb.details: details.append(detail) sb.details = details haunt = parse_section(sb, book, keys=False) for key, value in sb.keys: haunt_parse_function(key)(haunt, value) haunt["type"] = "haunt" if "CR" in haunt["name"]: names = haunt["name"].split("CR") haunt["name"] = filter_name(names.pop(0).strip()) haunt["cr"] = int(names.pop(0).strip()) return haunt
def parse_haunt(sb, book): details = [] for detail in sb.details: details.append(detail) sb.details = details haunt = parse_section(sb, book, keys=False) for key, value in sb.keys: haunt_parse_function(key)(haunt, value) haunt['type'] = 'haunt' if 'CR' in haunt['name']: names = haunt['name'].split('CR') haunt['name'] = filter_name(names.pop(0).strip()) haunt['cr'] = int(names.pop(0).strip()) return haunt
def parse_settlement(sb, book): settlement = {'type': 'settlement', 'source': book, 'name': filter_name(sb.name.strip())} text = [] for key, value in sb.keys: settlement_parse_function(key)(settlement, value) for detail in sb.details: for key, value in detail.keys: settlement_parse_function(key)(settlement, value) if len(detail.details) > 0: sections = settlement.setdefault('sections', []) sec = parse_section(detail, book, keys=False) if sec['name'] == 'DEMOGRAPHICS': sec['name'] = 'Notable NPCs' sections.append(sec) return settlement
def parse_spellbook(sb, book): newdetails = [] for detail in sb.details: if hasattr(detail, 'level') and detail.level == 5: newdetails.append(detail.name) else: newdetails.append(detail) sb.details = newdetails section = parse_section(sb, book, keys=False) for key in sb.keys: newsec = {'type': 'section', 'source': book, 'name': key[0], 'text': key[1]} sections = section.setdefault('sections', []) sections.insert(1, newsec) section['subtype'] = 'spellbook' return section
def parse_spellbook(sb, book): newdetails = [] for detail in sb.details: if hasattr(detail, "level") and detail.level == 5: newdetails.append(detail.name) else: newdetails.append(detail) sb.details = newdetails section = parse_section(sb, book) for key in sb.keys: newsec = {"type": "section", "source": book, "name": key[0], "text": key[1]} sections = section.setdefault("sections", []) sections.insert(1, newsec) section["subtype"] = "spellbook" return section
def parse_item(sb, book): item = {"type": "item", "source": book, "name": filter_name(sb.name.strip())} text = [] for key, value in sb.keys: item_parse_function(key)(item, value) for detail in sb.details: if detail.__class__ == StatBlockSection and detail.name == "Construction": for key, value in detail.keys: item_parse_function(key)(item, value) elif detail.__class__ == StatBlockSection: sections = item.setdefault("sections", []) sections.append(parse_section(detail, book)) else: text.append(unicode(detail)) if len(text) > 0: item["text"] = "".join(text) return item
def parse_trap(sb, book): details = [] for detail in sb.details: if detail.__class__ in (StatBlockHeading, StatBlockSection) and detail.name == "Effects": sb.keys.extend(detail.keys) details.extend(detail.details) else: details.append(detail) sb.details = details trap = parse_section(sb, book) for key, value in sb.keys: trap_parse_function(key)(trap, value) trap["type"] = "trap" if "CR" in trap["name"]: names = trap["name"].split("CR") trap["name"] = filter_name(names.pop(0).strip()) trap["cr"] = int(names.pop(0).strip()) return trap
def parse_trap(sb, book): details = [] for detail in sb.details: if detail.__class__ in (StatBlockHeading, StatBlockSection) and detail.name == 'Effects': sb.keys.extend(detail.keys) details.extend(detail.details) else: details.append(detail) sb.details = details trap = parse_section(sb, book, keys=False) for key, value in sb.keys: trap_parse_function(key)(trap, value) trap['type'] = 'trap' if 'CR' in trap['name']: names = trap['name'].split('CR') trap['name'] = filter_name(names.pop(0).strip()) trap['cr'] = names.pop(0).strip() return trap
def parse_resource(sb, book): details = [] for detail in sb.details: details.append(detail) sb.details = details resource = parse_section(sb, book, keys=False) for key, value in sb.keys: resource_parse_function(key)(resource, value) resource['type'] = 'resource' if is_manager(sb): resource['subtype'] = 'manager' if is_room(sb): resource['subtype'] = 'room' if is_building(sb): resource['subtype'] = 'building' if is_organization(sb): resource['subtype'] = 'organization' return resource
def parse_item(sb, book): item = { 'type': 'item', 'source': book, 'name': filter_name(sb.name.strip()) } text = [] for key, value in sb.keys: item_parse_function(key)(item, value) for detail in sb.details: if detail.__class__ == StatBlockSection and detail.name == "Construction": for key, value in detail.keys: item_parse_function(key)(item, value) elif detail.__class__ == StatBlockSection: sections = item.setdefault('sections', []) sections.append(parse_section(detail, book)) else: text.append(unicode(detail)) if len(text) > 0: item['text'] = ''.join(text) return item
def parse_item(sb, book): item = {'type': 'item', 'source': book, 'name': filter_name(sb.name.strip())} text = [] for key, value in sb.keys: item_parse_function(key, sb.name.strip())(item, value) for detail in sb.details: if isinstance(detail, StatBlockSection) and detail.name.startswith("Construction"): for key, value in detail.keys: item_parse_function(key, detail.name.strip())(item, value) elif isinstance(detail, StatBlockSection): sections = item.setdefault('sections', []) sections.append(parse_section(detail, book)) elif isinstance(detail, StatBlockHeading): sections.append(parse_stat_block(sb, book, no_sb=no_sb)) else: if isinstance(detail, dict) or isinstance(detail, Heading): text.append(detail) else: text.append(unicode(detail)) if len(text) > 0: collapse_text(item, text) return item
def parse_affliction(sb, book): affliction = parse_section(sb, book, keys=False) affliction['type'] = 'affliction' for key, value in sb.keys: affliction_parse_function(key)(affliction, value) return affliction
def parse_talent(sb, book): spell = parse_section(sb, book, keys=False) spell['type'] = 'talent' for key, value in sb.keys: talent_parse_function(key)(spell, value) return spell
def parse_spell(sb, book): spell = parse_section(sb, book) spell['type'] = 'spell' for key, value in sb.keys: spell_parse_function(key)(spell, value) return spell